From 56b9e6728bff781249761fc527ecaa3f23c70470 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 7 Feb 2024 12:14:39 +0000 Subject: [PATCH] Automatic site build --- docs/.nojekyll | 0 docs/404.html | 17 + docs/CNAME | 1 + docs/LiberationMono-Regular.ttf | Bin 0 -> 313408 bytes docs/assets/css/styles.91a46a83.css | 1 + ..._odra-57b32f7c1e40dbb498e7b1619f4860e0.gif | Bin 0 -> 6054269 bytes ...cover-b8a52fd3e2deb53e343dd3094b0727c0.png | Bin 0 -> 116989 bytes ...rawio-9478454b52585f4bd5c3a825f50917f2.svg | 4 + ...rawio-e8d8d662f0a2e5e364005985245721fd.svg | 4 + ...admap-8255e4b08deb4134a7e97e32c21ad0dc.png | Bin 0 -> 164814 bytes ...-card-0f7e768e63da0acd629609954ba26f62.png | Bin 0 -> 116216 bytes ...-card-941b7cfa84d4da7dd4848d3556845b53.png | Bin 0 -> 781655 bytes docs/assets/js/0030fd86.36a0add6.js | 1 + docs/assets/js/01e5113f.8baae4cc.js | 1 + docs/assets/js/02192c58.00b1f2c1.js | 1 + docs/assets/js/028141a3.cb8c70bc.js | 1 + docs/assets/js/02a3f783.a17d85ba.js | 1 + docs/assets/js/037547ca.36ecaa56.js | 1 + docs/assets/js/03d24697.c811feae.js | 1 + docs/assets/js/04477b87.d0956e0b.js | 1 + docs/assets/js/06a0fa51.de90d71b.js | 1 + docs/assets/js/09109da1.8638a6af.js | 1 + docs/assets/js/0993954b.4128cfa0.js | 1 + docs/assets/js/0a44181e.1a62c359.js | 1 + docs/assets/js/0a8f7599.a9fe9083.js | 1 + docs/assets/js/0abf45c2.9c21d8d5.js | 1 + docs/assets/js/0be49901.da3bc7a7.js | 1 + docs/assets/js/0bf9d8ab.1415d9b1.js | 1 + docs/assets/js/0e384e19.7af7ee02.js | 1 + docs/assets/js/0ea00542.4ccf87b7.js | 1 + docs/assets/js/1030000d.b3656c78.js | 1 + docs/assets/js/1071.e2867e75.js | 1 + docs/assets/js/119fbfb6.540c932e.js | 1 + docs/assets/js/11e5b730.2adaa868.js | 1 + docs/assets/js/13066500.41606d43.js | 1 + docs/assets/js/13ab0148.1c044ea9.js | 1 + docs/assets/js/1416c8f4.f122c28e.js | 1 + docs/assets/js/14355e8c.e1d1be18.js | 1 + docs/assets/js/14eb3368.fbe30db7.js | 1 + docs/assets/js/1524a02c.f6f26170.js | 1 + docs/assets/js/1684519a.49e3efaf.js | 1 + docs/assets/js/17498f44.ff116f3b.js | 1 + docs/assets/js/177939f6.5459c34e.js | 1 + docs/assets/js/17896441.10d59a08.js | 1 + docs/assets/js/181ab02d.a47d9657.js | 1 + docs/assets/js/1999a842.820a7b72.js | 1 + docs/assets/js/1b34e22f.6c966b3e.js | 1 + docs/assets/js/1be78505.98e8e130.js | 1 + docs/assets/js/1f63a7a5.e6152d60.js | 1 + docs/assets/js/208794bf.f248129c.js | 1 + docs/assets/js/209.7bb508af.js | 7344 +++ docs/assets/js/20f44f94.a3b5c386.js | 1 + docs/assets/js/2131dc9d.3e6226ca.js | 1 + docs/assets/js/21fc20bd.52002aff.js | 1 + docs/assets/js/2366.7f723f8c.js | 2 + docs/assets/js/2366.7f723f8c.js.LICENSE.txt | 9 + docs/assets/js/237cf9c7.60ed9371.js | 1 + docs/assets/js/239.1c1be196.js | 2 + docs/assets/js/239.1c1be196.js.LICENSE.txt | 13 + docs/assets/js/24bf3011.c9743c08.js | 1 + docs/assets/js/26441f8e.edb7397b.js | 1 + docs/assets/js/274ccf11.c39c7f41.js | 1 + docs/assets/js/28efbf3f.834330bf.js | 1 + docs/assets/js/29c8e325.0f9aec2a.js | 1 + docs/assets/js/2b7acc9d.b3098d85.js | 1 + docs/assets/js/2bf460c7.d3ce45e8.js | 1 + docs/assets/js/2c824dec.4ae4c723.js | 1 + docs/assets/js/2fe15297.5897a284.js | 1 + docs/assets/js/3129ff44.45bcc71d.js | 1 + docs/assets/js/3152febb.b578fce8.js | 1 + docs/assets/js/3209.aa3c4b05.js | 1 + docs/assets/js/32993410.ca14d499.js | 1 + docs/assets/js/33762072.8595d500.js | 1 + docs/assets/js/33e7c3de.003d7d55.js | 1 + docs/assets/js/34731735.d9ff4c00.js | 1 + docs/assets/js/366.c9035d12.js | 42106 ++++++++++++++++ docs/assets/js/367de8e8.63c096d4.js | 1 + docs/assets/js/3701fb97.ba7e2e61.js | 1 + docs/assets/js/3721b008.94406143.js | 1 + docs/assets/js/383c9ad7.d6dc0d8d.js | 1 + docs/assets/js/39d2189a.957a72d4.js | 1 + docs/assets/js/3ac77d2e.8a10319f.js | 1 + docs/assets/js/3bb5653d.9326908b.js | 1 + docs/assets/js/3c817d4f.a554124e.js | 1 + docs/assets/js/3cb0761e.24178130.js | 1 + docs/assets/js/3e9ef03c.e119ce44.js | 1 + docs/assets/js/3edee900.7b2c1fbe.js | 1 + docs/assets/js/3eed3f1a.a7629729.js | 1 + docs/assets/js/3f00e816.24822ebf.js | 1 + docs/assets/js/41445f6c.c688fb67.js | 1 + docs/assets/js/4279e616.c84971cf.js | 1 + docs/assets/js/42eeae87.096ead6a.js | 1 + docs/assets/js/42fe661b.47c7f34d.js | 1 + docs/assets/js/43e47b8e.118fb83f.js | 1 + docs/assets/js/448060b1.1769ff8c.js | 1 + docs/assets/js/45990ab7.325a3e5a.js | 1 + docs/assets/js/473b33d6.267b74de.js | 1 + docs/assets/js/48d43fc1.909d4d76.js | 1 + docs/assets/js/496b44fb.03522ed5.js | 1 + docs/assets/js/4972.ddc2c974.js | 1 + docs/assets/js/4a070847.6f83ba1e.js | 1 + docs/assets/js/4cd738bd.815dbdce.js | 1 + docs/assets/js/4da81bc4.8394f24c.js | 1 + docs/assets/js/4e50b37d.c19de7e6.js | 1 + docs/assets/js/4f40819b.a65210d5.js | 1 + docs/assets/js/509c4227.47019aec.js | 1 + docs/assets/js/51bf83ad.aa19762a.js | 1 + docs/assets/js/53726ad7.c28cc51c.js | 1 + docs/assets/js/54dbc4b0.b3687542.js | 1 + docs/assets/js/54f44165.28fecf6a.js | 1 + docs/assets/js/55362a87.fd0666c9.js | 1 + docs/assets/js/558ac3fc.007facc4.js | 1 + docs/assets/js/56296f23.e1d2def4.js | 1 + docs/assets/js/575b7125.8675e1af.js | 1 + docs/assets/js/57648d1e.ad598a74.js | 1 + docs/assets/js/57bc1a35.9b29e434.js | 1 + docs/assets/js/5825ca57.5247cfeb.js | 1 + docs/assets/js/58abd590.4ec338a7.js | 1 + docs/assets/js/58f10d9f.42367a11.js | 1 + docs/assets/js/599e53c2.4696106f.js | 1 + docs/assets/js/5a816386.79ee88a2.js | 1 + docs/assets/js/5aa50e24.08f3271d.js | 1 + docs/assets/js/5ad2f7ef.55c21b01.js | 1 + docs/assets/js/5b4d97e3.0c110946.js | 1 + docs/assets/js/5bcb7a16.b39fe9ec.js | 1 + docs/assets/js/5be2abc9.f73320be.js | 1 + docs/assets/js/5bf6529c.a6bc321b.js | 1 + docs/assets/js/5bff39d6.e237ef14.js | 1 + docs/assets/js/5c4991bb.a02d70ad.js | 1 + docs/assets/js/5c77c5fd.3835990b.js | 1 + docs/assets/js/5ca766f6.166e12ee.js | 1 + docs/assets/js/5f012ce0.66530f3f.js | 1 + docs/assets/js/5f13c361.8e08356b.js | 1 + docs/assets/js/5f2971ba.76428dc4.js | 1 + docs/assets/js/60d35280.be2bbe36.js | 1 + docs/assets/js/60dd6115.411922ef.js | 1 + docs/assets/js/615e12e7.0ccd2410.js | 1 + docs/assets/js/6289863c.3acee235.js | 1 + docs/assets/js/632b087e.4eec3cd6.js | 1 + docs/assets/js/64fba0bc.a26b8b88.js | 1 + docs/assets/js/659ab8cb.3935a46f.js | 1 + docs/assets/js/65ab6b77.f56eaadf.js | 1 + docs/assets/js/6617ee69.997746c7.js | 1 + docs/assets/js/6640477e.44c4cde8.js | 1 + docs/assets/js/67a34253.03275479.js | 1 + docs/assets/js/67cb2d26.8eba780a.js | 1 + docs/assets/js/67cf10af.3633ac11.js | 1 + docs/assets/js/67d74c2d.cddd8079.js | 1 + docs/assets/js/68495fce.584aaa02.js | 1 + docs/assets/js/68deafd0.1d1eccb9.js | 1 + docs/assets/js/69fd3230.ce2a2978.js | 1 + docs/assets/js/6add768b.7bbe0952.js | 1 + docs/assets/js/6e2102f2.c079c065.js | 1 + docs/assets/js/6e5ab397.5149d303.js | 1 + docs/assets/js/6f7f3f28.5a91b637.js | 1 + docs/assets/js/705c2b64.1bbe12ac.js | 1 + docs/assets/js/70d9d1e8.8086cd2b.js | 1 + docs/assets/js/71.05f6d099.js | 1327 + docs/assets/js/716fdc54.1fa332bf.js | 1 + docs/assets/js/71735968.4acb548a.js | 1 + docs/assets/js/71958ad0.8591dae0.js | 1 + docs/assets/js/71b691b7.9684bfe0.js | 1 + docs/assets/js/728e71a1.ddcc5767.js | 1 + docs/assets/js/73285975.38bfacf4.js | 1 + docs/assets/js/733ac994.bf22c9dd.js | 1 + docs/assets/js/739a70a9.f96db3be.js | 1 + docs/assets/js/7414f7c1.326cab86.js | 1 + docs/assets/js/74376d79.69b07d3f.js | 1 + docs/assets/js/74442e8e.f901ad8b.js | 1 + docs/assets/js/7457cffc.95d0c1aa.js | 1 + docs/assets/js/754937b2.76a8c9b9.js | 1 + docs/assets/js/78452797.39b6ce0a.js | 1 + docs/assets/js/79253424.ad0dbf7d.js | 1 + docs/assets/js/799b1c68.48866af0.js | 1 + docs/assets/js/79b67993.39b2c6a5.js | 1 + docs/assets/js/79d3180c.d41db72a.js | 1 + docs/assets/js/7acce579.c1964be6.js | 1 + docs/assets/js/7d8962a6.4e63c0db.js | 1 + docs/assets/js/7df6186d.8f4bc43f.js | 1 + docs/assets/js/7e706e45.cdfe3eb6.js | 1 + docs/assets/js/7f9a1b7a.e85c6e9e.js | 1 + docs/assets/js/800dfaa2.5c66eaa8.js | 1 + docs/assets/js/8010fede.038a5d25.js | 1 + docs/assets/js/814f3328.e5d9b741.js | 1 + docs/assets/js/815ad8c9.f1cfd89f.js | 1 + docs/assets/js/83697071.0ed48f7d.js | 1 + docs/assets/js/88b75f2c.dda19374.js | 1 + docs/assets/js/893f4b86.f1b9c467.js | 1 + docs/assets/js/8988b866.22b63e10.js | 1 + docs/assets/js/8b0ca31f.9e0a83d9.js | 1 + docs/assets/js/8e991cde.79b88e8f.js | 1 + docs/assets/js/8f162cb9.762379e0.js | 1 + docs/assets/js/9005cef3.95511a2a.js | 1 + docs/assets/js/90c053b1.c73461b8.js | 1 + docs/assets/js/90f06335.95264650.js | 1 + docs/assets/js/918e870d.7022f90d.js | 1 + docs/assets/js/919c36c8.b43927bb.js | 1 + docs/assets/js/91b04621.9d61b848.js | 1 + docs/assets/js/93514764.0f5af50a.js | 1 + docs/assets/js/935f2afb.647dfe49.js | 1 + docs/assets/js/94723368.7d3ff207.js | 1 + docs/assets/js/95db938c.ffeb697c.js | 1 + docs/assets/js/95f5ef42.da7d1e4e.js | 1 + docs/assets/js/98b2adcf.6640f6d0.js | 1 + docs/assets/js/9a7c9bac.97ef6b89.js | 1 + docs/assets/js/9a7f4a11.931eca48.js | 1 + docs/assets/js/9cc9201d.de6931b6.js | 1 + docs/assets/js/9d620965.4f817163.js | 1 + docs/assets/js/9d95fe34.47cef24c.js | 1 + docs/assets/js/9e4087bc.2dee4e95.js | 1 + docs/assets/js/9e73c0bb.b0c60152.js | 1 + docs/assets/js/9ffb5fe4.cbfd0513.js | 1 + docs/assets/js/a046a162.691f889b.js | 1 + docs/assets/js/a05c6bda.eda097fe.js | 1 + docs/assets/js/a0d3df9d.fbc93276.js | 1 + docs/assets/js/a3d6ef01.684e5c74.js | 1 + docs/assets/js/a663e775.18f6c1d1.js | 1 + docs/assets/js/a6734805.f167d1dc.js | 1 + docs/assets/js/a6aa9e1f.d72a4b28.js | 1 + docs/assets/js/a6f6e2b9.236d4d2e.js | 1 + docs/assets/js/a88260b3.9b8b8e27.js | 1 + docs/assets/js/aaadf060.5faff66f.js | 1 + docs/assets/js/ab4716a0.a7bba1a3.js | 1 + docs/assets/js/ab49860c.5eff6c80.js | 1 + docs/assets/js/ac692f92.26b66903.js | 1 + docs/assets/js/acebe248.8ef99510.js | 1 + docs/assets/js/ad92572d.bb1dfdb2.js | 1 + docs/assets/js/aee91c2e.0da84d3e.js | 1 + docs/assets/js/af2a4ce0.a24a33da.js | 1 + docs/assets/js/afc3a23f.a8d853e2.js | 1 + docs/assets/js/b0f6aa87.6a1e5a02.js | 1 + docs/assets/js/b241ea99.5afc158d.js | 1 + docs/assets/js/b2b675dd.b113f45a.js | 1 + docs/assets/js/b2e57a16.e8efe736.js | 1 + docs/assets/js/b2f44958.fe9a4cb5.js | 1 + docs/assets/js/b2f554cd.4608dc99.js | 1 + docs/assets/js/b338949b.42ca8fba.js | 1 + docs/assets/js/b435d362.0fc0efc0.js | 1 + docs/assets/js/b4f02106.1850566b.js | 1 + docs/assets/js/b548b5e0.5414a78d.js | 1 + docs/assets/js/b6aaec29.474717b9.js | 1 + docs/assets/js/b7573e33.854de50e.js | 1 + docs/assets/js/b759477d.741c75cd.js | 1 + docs/assets/js/b7d3ed64.5f843fed.js | 1 + docs/assets/js/b87f41d0.f0f181c1.js | 1 + docs/assets/js/b94504cb.a2d52b37.js | 1 + docs/assets/js/ba36c747.3acfa93c.js | 1 + docs/assets/js/bab04a93.9417c5fe.js | 1 + docs/assets/js/bac2ca12.b5935fce.js | 1 + docs/assets/js/bd4cf5c0.f12ece2e.js | 1 + docs/assets/js/be0b2ac1.c2904d19.js | 1 + docs/assets/js/beab0651.654bd829.js | 1 + docs/assets/js/bee0af8b.69fdde87.js | 1 + docs/assets/js/befd1fba.955ad137.js | 1 + docs/assets/js/bfc20097.940e9141.js | 1 + docs/assets/js/bfc8213d.3a79c799.js | 1 + docs/assets/js/c10f3592.176c977b.js | 1 + docs/assets/js/c13d152b.e2564cc1.js | 1 + docs/assets/js/c1418166.799af3f0.js | 1 + docs/assets/js/c1ae59bd.5624c97f.js | 1 + docs/assets/js/c24519ee.ae644b8f.js | 1 + docs/assets/js/c3fd70b6.ff508e75.js | 1 + docs/assets/js/c43892d3.951d8759.js | 1 + docs/assets/js/c4f5d8e4.127ee1e6.js | 1 + docs/assets/js/c52764ec.6e443e42.js | 1 + docs/assets/js/c5296eae.9725cc06.js | 1 + docs/assets/js/c52d4d42.30a89473.js | 1 + docs/assets/js/c5cef920.0d511cf5.js | 1 + docs/assets/js/c5f43526.6560bfcd.js | 1 + docs/assets/js/c6385d27.ccf0ac8d.js | 1 + docs/assets/js/c705646d.e790d100.js | 1 + docs/assets/js/c714b9ee.c599700c.js | 1 + docs/assets/js/c71fcec7.a2c41cf5.js | 1 + docs/assets/js/ca76cddc.0fe3f002.js | 1 + docs/assets/js/cad7ddc9.1cb9d315.js | 1 + docs/assets/js/cb085bdb.c1d78c9c.js | 1 + docs/assets/js/cbdaac1b.d86a12f9.js | 1 + docs/assets/js/cca6b120.0686e279.js | 1 + docs/assets/js/ccc49370.9ef391ad.js | 1 + docs/assets/js/cd591068.8b1ceedb.js | 1 + docs/assets/js/cd790770.fd618f15.js | 1 + docs/assets/js/cde2d623.e4204b81.js | 1 + docs/assets/js/ce4f9116.d2cd5056.js | 1 + docs/assets/js/ce999a4e.0ce8a513.js | 1 + docs/assets/js/cecbc2b5.c68d76de.js | 1 + docs/assets/js/cf3f256a.f9385a89.js | 1 + docs/assets/js/d0c01b74.5d9599bb.js | 1 + docs/assets/js/d15969ed.a7e49a14.js | 1 + docs/assets/js/d386dd06.a52672fe.js | 1 + docs/assets/js/d5e3179c.3db0c54d.js | 1 + docs/assets/js/d691a609.c2d99f7f.js | 1 + docs/assets/js/d7637d81.7af705c8.js | 1 + docs/assets/js/d985b3f7.e852e117.js | 1 + docs/assets/js/d9fee9da.2ff8b9e6.js | 1 + docs/assets/js/da555cce.e33c96c7.js | 1 + docs/assets/js/da9e3acc.6d6af0a3.js | 1 + docs/assets/js/db82a1c0.01b7c8ed.js | 1 + docs/assets/js/df1503d8.285dccf0.js | 1 + docs/assets/js/e018be55.8f6ee0e2.js | 1 + docs/assets/js/e2022d8c.83e9cfc2.js | 1 + docs/assets/js/e294fa30.debc291b.js | 1 + docs/assets/js/e31bed34.b9cedacd.js | 1 + docs/assets/js/e4b2a41e.272fb4d8.js | 1 + docs/assets/js/e538a9e1.c4c0e0cf.js | 1 + docs/assets/js/e5e64bd0.902e37fb.js | 1 + docs/assets/js/e8a3ffa2.9e6f7abe.js | 1 + docs/assets/js/e9ea549b.2dc87fd4.js | 1 + docs/assets/js/ea145f46.320423fc.js | 1 + docs/assets/js/ed6ae2e5.fcf896d2.js | 1 + docs/assets/js/ed898d19.b182a3b1.js | 1 + docs/assets/js/ee3d80a6.6c361738.js | 1 + docs/assets/js/eedc1cb5.c39fe2ed.js | 1 + docs/assets/js/f00a1e6f.67c65fac.js | 1 + docs/assets/js/f0928d2f.b6746a68.js | 1 + docs/assets/js/f1080184.dc2838d7.js | 1 + docs/assets/js/f146bc3c.cc1925d4.js | 1 + docs/assets/js/f54718af.62e2f4f8.js | 1 + docs/assets/js/f5bf02f1.db11918d.js | 1 + docs/assets/js/f92986d2.c6655b0e.js | 1 + docs/assets/js/fa4e959a.9fa4cb3e.js | 1 + docs/assets/js/fb249be3.6a9b1906.js | 1 + docs/assets/js/fdb5f68c.582d92bd.js | 1 + docs/assets/js/fe2b6021.df5b1421.js | 1 + docs/assets/js/fec7bf31.58881655.js | 1 + docs/assets/js/ff33c5f7.6b1cd76b.js | 1 + docs/assets/js/ff3976bd.eda77dfb.js | 1 + docs/assets/js/main.2d7f4338.js | 2 + docs/assets/js/main.2d7f4338.js.LICENSE.txt | 63 + docs/assets/js/runtime~main.daf70288.js | 1 + .../index.html | 38 + docs/blog/Nysa/index.html | 20 + docs/blog/archive/index.html | 17 + docs/blog/atom.xml | 254 + docs/blog/casper-zk-risc0/index.html | 48 + docs/blog/evm-at-risc0/index.html | 38 + docs/blog/index.html | 23 + .../its-all-about-the-community/index.html | 55 + docs/blog/odra-cosmwasm/index.html | 29 + docs/blog/release-020/index.html | 43 + docs/blog/rss.xml | 220 + docs/docs/0.2.0/backends/casper/index.html | 25 + docs/docs/0.2.0/backends/mock-vm/index.html | 26 + .../backends/what-is-a-backend/index.html | 27 + docs/docs/0.2.0/basics/cargo-odra/index.html | 39 + .../basics/communicating-with-host/index.html | 21 + docs/docs/0.2.0/basics/cross-calls/index.html | 25 + .../basics/directory-structure/index.html | 27 + docs/docs/0.2.0/basics/errors/index.html | 23 + docs/docs/0.2.0/basics/events/index.html | 20 + .../0.2.0/basics/flipper-internals/index.html | 35 + docs/docs/0.2.0/basics/modules/index.html | 20 + .../docs/0.2.0/basics/native-token/index.html | 26 + docs/docs/0.2.0/basics/odra-toml/index.html | 23 + .../basics/storage-interaction/index.html | 36 + docs/docs/0.2.0/basics/testing/index.html | 32 + docs/docs/0.2.0/category/backends/index.html | 17 + docs/docs/0.2.0/category/basics/index.html | 17 + docs/docs/0.2.0/category/examples/index.html | 17 + .../0.2.0/category/getting-started/index.html | 17 + docs/docs/0.2.0/category/tutorials/index.html | 17 + .../0.2.0/examples/odra-examples/index.html | 17 + .../examples/using-odra-modules/index.html | 17 + .../0.2.0/getting-started/flipper/index.html | 18 + .../getting-started/installation/index.html | 23 + docs/docs/0.2.0/index.html | 25 + docs/docs/0.2.0/tutorials/erc20/index.html | 17 + docs/docs/0.2.0/tutorials/ownable/index.html | 17 + .../0.2.0/tutorials/owned-token/index.html | 17 + .../advanced/advanced-storage/index.html | 17 + .../docs/0.3.0/advanced/attributes/index.html | 18 + docs/docs/0.3.0/advanced/composer/index.html | 17 + docs/docs/0.3.0/advanced/delegate/index.html | 17 + docs/docs/0.3.0/backends/casper/index.html | 25 + docs/docs/0.3.0/backends/mock-vm/index.html | 26 + .../backends/what-is-a-backend/index.html | 27 + docs/docs/0.3.0/basics/cargo-odra/index.html | 38 + .../basics/communicating-with-host/index.html | 21 + docs/docs/0.3.0/basics/cross-calls/index.html | 25 + .../basics/directory-structure/index.html | 27 + docs/docs/0.3.0/basics/errors/index.html | 23 + docs/docs/0.3.0/basics/events/index.html | 20 + .../0.3.0/basics/flipper-internals/index.html | 35 + docs/docs/0.3.0/basics/modules/index.html | 20 + .../docs/0.3.0/basics/native-token/index.html | 26 + docs/docs/0.3.0/basics/odra-toml/index.html | 23 + .../basics/storage-interaction/index.html | 36 + docs/docs/0.3.0/basics/testing/index.html | 32 + docs/docs/0.3.0/category/advanced/index.html | 17 + docs/docs/0.3.0/category/backends/index.html | 17 + docs/docs/0.3.0/category/basics/index.html | 17 + docs/docs/0.3.0/category/examples/index.html | 17 + .../0.3.0/category/getting-started/index.html | 17 + docs/docs/0.3.0/category/tutorials/index.html | 17 + .../0.3.0/examples/odra-examples/index.html | 17 + .../examples/using-odra-modules/index.html | 21 + .../0.3.0/getting-started/flipper/index.html | 18 + .../getting-started/installation/index.html | 23 + docs/docs/0.3.0/index.html | 25 + docs/docs/0.3.0/tutorials/erc20/index.html | 17 + docs/docs/0.3.0/tutorials/ownable/index.html | 17 + .../0.3.0/tutorials/owned-token/index.html | 17 + .../advanced/advanced-storage/index.html | 17 + .../docs/0.3.1/advanced/attributes/index.html | 18 + docs/docs/0.3.1/advanced/composer/index.html | 17 + docs/docs/0.3.1/advanced/delegate/index.html | 17 + docs/docs/0.3.1/backends/casper/index.html | 25 + docs/docs/0.3.1/backends/mock-vm/index.html | 26 + .../backends/what-is-a-backend/index.html | 27 + docs/docs/0.3.1/basics/cargo-odra/index.html | 38 + .../basics/communicating-with-host/index.html | 21 + docs/docs/0.3.1/basics/cross-calls/index.html | 25 + .../basics/directory-structure/index.html | 27 + docs/docs/0.3.1/basics/errors/index.html | 23 + docs/docs/0.3.1/basics/events/index.html | 20 + .../0.3.1/basics/flipper-internals/index.html | 35 + docs/docs/0.3.1/basics/modules/index.html | 20 + .../docs/0.3.1/basics/native-token/index.html | 26 + docs/docs/0.3.1/basics/odra-toml/index.html | 23 + .../basics/storage-interaction/index.html | 36 + docs/docs/0.3.1/basics/testing/index.html | 32 + docs/docs/0.3.1/category/advanced/index.html | 17 + docs/docs/0.3.1/category/backends/index.html | 17 + docs/docs/0.3.1/category/basics/index.html | 17 + docs/docs/0.3.1/category/examples/index.html | 17 + .../0.3.1/category/getting-started/index.html | 17 + docs/docs/0.3.1/category/tutorials/index.html | 17 + .../0.3.1/examples/odra-examples/index.html | 17 + .../examples/using-odra-modules/index.html | 21 + .../0.3.1/getting-started/flipper/index.html | 18 + .../getting-started/installation/index.html | 22 + docs/docs/0.3.1/index.html | 25 + docs/docs/0.3.1/tutorials/erc20/index.html | 17 + docs/docs/0.3.1/tutorials/ownable/index.html | 17 + .../0.3.1/tutorials/owned-token/index.html | 17 + .../advanced/advanced-storage/index.html | 17 + .../docs/0.4.0/advanced/attributes/index.html | 18 + docs/docs/0.4.0/advanced/composer/index.html | 17 + docs/docs/0.4.0/advanced/delegate/index.html | 17 + docs/docs/0.4.0/backends/casper/index.html | 37 + docs/docs/0.4.0/backends/mock-vm/index.html | 26 + .../backends/what-is-a-backend/index.html | 27 + docs/docs/0.4.0/basics/cargo-odra/index.html | 38 + .../basics/communicating-with-host/index.html | 21 + docs/docs/0.4.0/basics/cross-calls/index.html | 25 + .../basics/directory-structure/index.html | 27 + docs/docs/0.4.0/basics/errors/index.html | 23 + docs/docs/0.4.0/basics/events/index.html | 20 + .../0.4.0/basics/flipper-internals/index.html | 35 + docs/docs/0.4.0/basics/modules/index.html | 20 + .../docs/0.4.0/basics/native-token/index.html | 26 + docs/docs/0.4.0/basics/odra-toml/index.html | 23 + .../basics/storage-interaction/index.html | 36 + docs/docs/0.4.0/basics/testing/index.html | 32 + docs/docs/0.4.0/category/advanced/index.html | 17 + docs/docs/0.4.0/category/backends/index.html | 17 + docs/docs/0.4.0/category/basics/index.html | 17 + docs/docs/0.4.0/category/examples/index.html | 17 + .../0.4.0/category/getting-started/index.html | 17 + docs/docs/0.4.0/category/tutorials/index.html | 17 + .../0.4.0/examples/odra-examples/index.html | 17 + .../examples/using-odra-modules/index.html | 21 + .../0.4.0/getting-started/flipper/index.html | 18 + .../getting-started/installation/index.html | 22 + docs/docs/0.4.0/index.html | 25 + docs/docs/0.4.0/tutorials/erc20/index.html | 17 + docs/docs/0.4.0/tutorials/ownable/index.html | 17 + .../0.4.0/tutorials/owned-token/index.html | 17 + .../advanced/advanced-storage/index.html | 17 + .../docs/0.5.0/advanced/attributes/index.html | 19 + docs/docs/0.5.0/advanced/delegate/index.html | 17 + .../docs/0.5.0/advanced/signatures/index.html | 29 + docs/docs/0.5.0/advanced/using/index.html | 17 + docs/docs/0.5.0/backends/casper/index.html | 44 + docs/docs/0.5.0/backends/mock-vm/index.html | 26 + .../backends/what-is-a-backend/index.html | 27 + docs/docs/0.5.0/basics/cargo-odra/index.html | 38 + .../basics/communicating-with-host/index.html | 21 + docs/docs/0.5.0/basics/cross-calls/index.html | 25 + .../basics/directory-structure/index.html | 27 + docs/docs/0.5.0/basics/errors/index.html | 23 + docs/docs/0.5.0/basics/events/index.html | 20 + .../0.5.0/basics/flipper-internals/index.html | 35 + docs/docs/0.5.0/basics/modules/index.html | 20 + .../docs/0.5.0/basics/native-token/index.html | 26 + docs/docs/0.5.0/basics/odra-toml/index.html | 23 + .../basics/storage-interaction/index.html | 36 + docs/docs/0.5.0/basics/testing/index.html | 32 + docs/docs/0.5.0/category/advanced/index.html | 17 + docs/docs/0.5.0/category/backends/index.html | 17 + docs/docs/0.5.0/category/basics/index.html | 17 + docs/docs/0.5.0/category/examples/index.html | 17 + .../0.5.0/category/getting-started/index.html | 17 + docs/docs/0.5.0/category/tutorials/index.html | 17 + .../0.5.0/examples/odra-examples/index.html | 17 + .../examples/using-odra-modules/index.html | 21 + .../0.5.0/getting-started/flipper/index.html | 18 + .../getting-started/installation/index.html | 22 + docs/docs/0.5.0/index.html | 25 + docs/docs/0.5.0/tutorials/erc20/index.html | 17 + docs/docs/0.5.0/tutorials/ownable/index.html | 17 + .../0.5.0/tutorials/owned-token/index.html | 17 + .../advanced/advanced-storage/index.html | 17 + .../docs/0.6.0/advanced/attributes/index.html | 19 + docs/docs/0.6.0/advanced/delegate/index.html | 17 + .../docs/0.6.0/advanced/signatures/index.html | 29 + docs/docs/0.6.0/advanced/using/index.html | 17 + docs/docs/0.6.0/backends/casper/index.html | 44 + docs/docs/0.6.0/backends/mock-vm/index.html | 26 + .../backends/what-is-a-backend/index.html | 27 + docs/docs/0.6.0/basics/cargo-odra/index.html | 38 + .../basics/communicating-with-host/index.html | 21 + docs/docs/0.6.0/basics/cross-calls/index.html | 25 + .../basics/directory-structure/index.html | 27 + docs/docs/0.6.0/basics/errors/index.html | 23 + docs/docs/0.6.0/basics/events/index.html | 20 + .../0.6.0/basics/flipper-internals/index.html | 35 + docs/docs/0.6.0/basics/modules/index.html | 20 + .../docs/0.6.0/basics/native-token/index.html | 26 + docs/docs/0.6.0/basics/odra-toml/index.html | 23 + .../basics/storage-interaction/index.html | 36 + docs/docs/0.6.0/basics/testing/index.html | 32 + docs/docs/0.6.0/category/advanced/index.html | 17 + docs/docs/0.6.0/category/backends/index.html | 17 + docs/docs/0.6.0/category/basics/index.html | 17 + docs/docs/0.6.0/category/examples/index.html | 17 + .../0.6.0/category/getting-started/index.html | 17 + docs/docs/0.6.0/category/tutorials/index.html | 17 + .../0.6.0/examples/odra-examples/index.html | 17 + .../examples/using-odra-modules/index.html | 21 + .../0.6.0/getting-started/flipper/index.html | 18 + .../getting-started/installation/index.html | 22 + docs/docs/0.6.0/index.html | 25 + docs/docs/0.6.0/tutorials/erc20/index.html | 17 + docs/docs/0.6.0/tutorials/ownable/index.html | 17 + .../0.6.0/tutorials/owned-token/index.html | 17 + .../docs/advanced/advanced-storage/index.html | 17 + docs/docs/advanced/attributes/index.html | 19 + docs/docs/advanced/delegate/index.html | 17 + docs/docs/advanced/signatures/index.html | 29 + docs/docs/advanced/using/index.html | 17 + docs/docs/backends/casper/index.html | 44 + docs/docs/backends/mock-vm/index.html | 26 + .../backends/what-is-a-backend/index.html | 27 + docs/docs/basics/cargo-odra/index.html | 38 + .../basics/communicating-with-host/index.html | 21 + docs/docs/basics/cross-calls/index.html | 25 + .../basics/directory-structure/index.html | 27 + docs/docs/basics/errors/index.html | 23 + docs/docs/basics/events/index.html | 20 + docs/docs/basics/flipper-internals/index.html | 35 + docs/docs/basics/modules/index.html | 20 + docs/docs/basics/native-token/index.html | 26 + docs/docs/basics/odra-toml/index.html | 23 + .../basics/storage-interaction/index.html | 36 + docs/docs/basics/testing/index.html | 32 + docs/docs/category/advanced/index.html | 17 + docs/docs/category/backends/index.html | 17 + docs/docs/category/basics/index.html | 17 + docs/docs/category/examples/index.html | 17 + docs/docs/category/getting-started/index.html | 17 + docs/docs/category/tutorials/index.html | 17 + docs/docs/examples/odra-examples/index.html | 17 + .../examples/using-odra-modules/index.html | 21 + docs/docs/getting-started/flipper/index.html | 18 + .../getting-started/installation/index.html | 22 + docs/docs/index.html | 25 + .../next/advanced/advanced-storage/index.html | 18 + docs/docs/next/advanced/attributes/index.html | 20 + docs/docs/next/advanced/delegate/index.html | 17 + .../next/advanced/storage-layout/index.html | 44 + docs/docs/next/backends/casper/index.html | 50 + docs/docs/next/backends/livenet/index.html | 49 + docs/docs/next/backends/odra-vm/index.html | 26 + .../backends/what-is-a-backend/index.html | 28 + docs/docs/next/basics/cargo-odra/index.html | 37 + .../basics/communicating-with-host/index.html | 21 + docs/docs/next/basics/cross-calls/index.html | 22 + .../basics/directory-structure/index.html | 26 + docs/docs/next/basics/errors/index.html | 24 + docs/docs/next/basics/events/index.html | 18 + .../next/basics/flipper-internals/index.html | 38 + docs/docs/next/basics/modules/index.html | 21 + docs/docs/next/basics/native-token/index.html | 25 + docs/docs/next/basics/odra-toml/index.html | 23 + .../basics/storage-interaction/index.html | 36 + docs/docs/next/basics/testing/index.html | 32 + docs/docs/next/category/advanced/index.html | 17 + docs/docs/next/category/backends/index.html | 17 + docs/docs/next/category/basics/index.html | 17 + docs/docs/next/category/examples/index.html | 17 + .../next/category/getting-started/index.html | 17 + docs/docs/next/category/migrations/index.html | 17 + docs/docs/next/category/tutorials/index.html | 17 + .../next/examples/odra-examples/index.html | 17 + .../examples/using-odra-modules/index.html | 21 + .../next/getting-started/flipper/index.html | 18 + .../getting-started/installation/index.html | 22 + docs/docs/next/index.html | 19 + docs/docs/next/migrations/to-0.8.0/index.html | 17 + .../next/tutorials/access-control/index.html | 17 + docs/docs/next/tutorials/erc20/index.html | 17 + docs/docs/next/tutorials/ownable/index.html | 17 + .../next/tutorials/owned-token/index.html | 17 + docs/docs/next/tutorials/pauseable/index.html | 17 + docs/docs/tutorials/access-control/index.html | 17 + docs/docs/tutorials/erc20/index.html | 17 + docs/docs/tutorials/ownable/index.html | 17 + docs/docs/tutorials/owned-token/index.html | 17 + docs/docs/tutorials/pauseable/index.html | 17 + docs/iAWriterMonoS-Regular.ttf | Bin 0 -> 97044 bytes docs/img/docusaurus.png | Bin 0 -> 5142 bytes docs/img/favicon.ico | Bin 0 -> 4286 bytes docs/img/logo.svg | 1 + docs/img/small_logo.png | Bin 0 -> 19846 bytes docs/img/undraw_docusaurus_mountain.svg | 171 + docs/img/undraw_docusaurus_react.svg | 170 + docs/img/undraw_docusaurus_tree.svg | 40 + docs/index.html | 308 + docs/sitemap.xml | 1 + 619 files changed, 58781 insertions(+) create mode 100644 docs/.nojekyll create mode 100644 docs/404.html create mode 100644 docs/CNAME create mode 100644 docs/LiberationMono-Regular.ttf create mode 100644 docs/assets/css/styles.91a46a83.css create mode 100644 docs/assets/images/cargo_odra-57b32f7c1e40dbb498e7b1619f4860e0.gif create mode 100644 docs/assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png create mode 100644 docs/assets/images/nysa_generic.drawio-9478454b52585f4bd5c3a825f50917f2.svg create mode 100644 docs/assets/images/nysa_odra.drawio-e8d8d662f0a2e5e364005985245721fd.svg create mode 100644 docs/assets/images/roadmap-8255e4b08deb4134a7e97e32c21ad0dc.png create mode 100644 docs/assets/images/twitter-card-0f7e768e63da0acd629609954ba26f62.png create mode 100644 docs/assets/images/twitter-card-941b7cfa84d4da7dd4848d3556845b53.png create mode 100644 docs/assets/js/0030fd86.36a0add6.js create mode 100644 docs/assets/js/01e5113f.8baae4cc.js create mode 100644 docs/assets/js/02192c58.00b1f2c1.js create mode 100644 docs/assets/js/028141a3.cb8c70bc.js create mode 100644 docs/assets/js/02a3f783.a17d85ba.js create mode 100644 docs/assets/js/037547ca.36ecaa56.js create mode 100644 docs/assets/js/03d24697.c811feae.js create mode 100644 docs/assets/js/04477b87.d0956e0b.js create mode 100644 docs/assets/js/06a0fa51.de90d71b.js create mode 100644 docs/assets/js/09109da1.8638a6af.js create mode 100644 docs/assets/js/0993954b.4128cfa0.js create mode 100644 docs/assets/js/0a44181e.1a62c359.js create mode 100644 docs/assets/js/0a8f7599.a9fe9083.js create mode 100644 docs/assets/js/0abf45c2.9c21d8d5.js create mode 100644 docs/assets/js/0be49901.da3bc7a7.js create mode 100644 docs/assets/js/0bf9d8ab.1415d9b1.js create mode 100644 docs/assets/js/0e384e19.7af7ee02.js create mode 100644 docs/assets/js/0ea00542.4ccf87b7.js create mode 100644 docs/assets/js/1030000d.b3656c78.js create mode 100644 docs/assets/js/1071.e2867e75.js create mode 100644 docs/assets/js/119fbfb6.540c932e.js create mode 100644 docs/assets/js/11e5b730.2adaa868.js create mode 100644 docs/assets/js/13066500.41606d43.js create mode 100644 docs/assets/js/13ab0148.1c044ea9.js create mode 100644 docs/assets/js/1416c8f4.f122c28e.js create mode 100644 docs/assets/js/14355e8c.e1d1be18.js create mode 100644 docs/assets/js/14eb3368.fbe30db7.js create mode 100644 docs/assets/js/1524a02c.f6f26170.js create mode 100644 docs/assets/js/1684519a.49e3efaf.js create mode 100644 docs/assets/js/17498f44.ff116f3b.js create mode 100644 docs/assets/js/177939f6.5459c34e.js create mode 100644 docs/assets/js/17896441.10d59a08.js create mode 100644 docs/assets/js/181ab02d.a47d9657.js create mode 100644 docs/assets/js/1999a842.820a7b72.js create mode 100644 docs/assets/js/1b34e22f.6c966b3e.js create mode 100644 docs/assets/js/1be78505.98e8e130.js create mode 100644 docs/assets/js/1f63a7a5.e6152d60.js create mode 100644 docs/assets/js/208794bf.f248129c.js create mode 100644 docs/assets/js/209.7bb508af.js create mode 100644 docs/assets/js/20f44f94.a3b5c386.js create mode 100644 docs/assets/js/2131dc9d.3e6226ca.js create mode 100644 docs/assets/js/21fc20bd.52002aff.js create mode 100644 docs/assets/js/2366.7f723f8c.js create mode 100644 docs/assets/js/2366.7f723f8c.js.LICENSE.txt create mode 100644 docs/assets/js/237cf9c7.60ed9371.js create mode 100644 docs/assets/js/239.1c1be196.js create mode 100644 docs/assets/js/239.1c1be196.js.LICENSE.txt create mode 100644 docs/assets/js/24bf3011.c9743c08.js create mode 100644 docs/assets/js/26441f8e.edb7397b.js create mode 100644 docs/assets/js/274ccf11.c39c7f41.js create mode 100644 docs/assets/js/28efbf3f.834330bf.js create mode 100644 docs/assets/js/29c8e325.0f9aec2a.js create mode 100644 docs/assets/js/2b7acc9d.b3098d85.js create mode 100644 docs/assets/js/2bf460c7.d3ce45e8.js create mode 100644 docs/assets/js/2c824dec.4ae4c723.js create mode 100644 docs/assets/js/2fe15297.5897a284.js create mode 100644 docs/assets/js/3129ff44.45bcc71d.js create mode 100644 docs/assets/js/3152febb.b578fce8.js create mode 100644 docs/assets/js/3209.aa3c4b05.js create mode 100644 docs/assets/js/32993410.ca14d499.js create mode 100644 docs/assets/js/33762072.8595d500.js create mode 100644 docs/assets/js/33e7c3de.003d7d55.js create mode 100644 docs/assets/js/34731735.d9ff4c00.js create mode 100644 docs/assets/js/366.c9035d12.js create mode 100644 docs/assets/js/367de8e8.63c096d4.js create mode 100644 docs/assets/js/3701fb97.ba7e2e61.js create mode 100644 docs/assets/js/3721b008.94406143.js create mode 100644 docs/assets/js/383c9ad7.d6dc0d8d.js create mode 100644 docs/assets/js/39d2189a.957a72d4.js create mode 100644 docs/assets/js/3ac77d2e.8a10319f.js create mode 100644 docs/assets/js/3bb5653d.9326908b.js create mode 100644 docs/assets/js/3c817d4f.a554124e.js create mode 100644 docs/assets/js/3cb0761e.24178130.js create mode 100644 docs/assets/js/3e9ef03c.e119ce44.js create mode 100644 docs/assets/js/3edee900.7b2c1fbe.js create mode 100644 docs/assets/js/3eed3f1a.a7629729.js create mode 100644 docs/assets/js/3f00e816.24822ebf.js create mode 100644 docs/assets/js/41445f6c.c688fb67.js create mode 100644 docs/assets/js/4279e616.c84971cf.js create mode 100644 docs/assets/js/42eeae87.096ead6a.js create mode 100644 docs/assets/js/42fe661b.47c7f34d.js create mode 100644 docs/assets/js/43e47b8e.118fb83f.js create mode 100644 docs/assets/js/448060b1.1769ff8c.js create mode 100644 docs/assets/js/45990ab7.325a3e5a.js create mode 100644 docs/assets/js/473b33d6.267b74de.js create mode 100644 docs/assets/js/48d43fc1.909d4d76.js create mode 100644 docs/assets/js/496b44fb.03522ed5.js create mode 100644 docs/assets/js/4972.ddc2c974.js create mode 100644 docs/assets/js/4a070847.6f83ba1e.js create mode 100644 docs/assets/js/4cd738bd.815dbdce.js create mode 100644 docs/assets/js/4da81bc4.8394f24c.js create mode 100644 docs/assets/js/4e50b37d.c19de7e6.js create mode 100644 docs/assets/js/4f40819b.a65210d5.js create mode 100644 docs/assets/js/509c4227.47019aec.js create mode 100644 docs/assets/js/51bf83ad.aa19762a.js create mode 100644 docs/assets/js/53726ad7.c28cc51c.js create mode 100644 docs/assets/js/54dbc4b0.b3687542.js create mode 100644 docs/assets/js/54f44165.28fecf6a.js create mode 100644 docs/assets/js/55362a87.fd0666c9.js create mode 100644 docs/assets/js/558ac3fc.007facc4.js create mode 100644 docs/assets/js/56296f23.e1d2def4.js create mode 100644 docs/assets/js/575b7125.8675e1af.js create mode 100644 docs/assets/js/57648d1e.ad598a74.js create mode 100644 docs/assets/js/57bc1a35.9b29e434.js create mode 100644 docs/assets/js/5825ca57.5247cfeb.js create mode 100644 docs/assets/js/58abd590.4ec338a7.js create mode 100644 docs/assets/js/58f10d9f.42367a11.js create mode 100644 docs/assets/js/599e53c2.4696106f.js create mode 100644 docs/assets/js/5a816386.79ee88a2.js create mode 100644 docs/assets/js/5aa50e24.08f3271d.js create mode 100644 docs/assets/js/5ad2f7ef.55c21b01.js create mode 100644 docs/assets/js/5b4d97e3.0c110946.js create mode 100644 docs/assets/js/5bcb7a16.b39fe9ec.js create mode 100644 docs/assets/js/5be2abc9.f73320be.js create mode 100644 docs/assets/js/5bf6529c.a6bc321b.js create mode 100644 docs/assets/js/5bff39d6.e237ef14.js create mode 100644 docs/assets/js/5c4991bb.a02d70ad.js create mode 100644 docs/assets/js/5c77c5fd.3835990b.js create mode 100644 docs/assets/js/5ca766f6.166e12ee.js create mode 100644 docs/assets/js/5f012ce0.66530f3f.js create mode 100644 docs/assets/js/5f13c361.8e08356b.js create mode 100644 docs/assets/js/5f2971ba.76428dc4.js create mode 100644 docs/assets/js/60d35280.be2bbe36.js create mode 100644 docs/assets/js/60dd6115.411922ef.js create mode 100644 docs/assets/js/615e12e7.0ccd2410.js create mode 100644 docs/assets/js/6289863c.3acee235.js create mode 100644 docs/assets/js/632b087e.4eec3cd6.js create mode 100644 docs/assets/js/64fba0bc.a26b8b88.js create mode 100644 docs/assets/js/659ab8cb.3935a46f.js create mode 100644 docs/assets/js/65ab6b77.f56eaadf.js create mode 100644 docs/assets/js/6617ee69.997746c7.js create mode 100644 docs/assets/js/6640477e.44c4cde8.js create mode 100644 docs/assets/js/67a34253.03275479.js create mode 100644 docs/assets/js/67cb2d26.8eba780a.js create mode 100644 docs/assets/js/67cf10af.3633ac11.js create mode 100644 docs/assets/js/67d74c2d.cddd8079.js create mode 100644 docs/assets/js/68495fce.584aaa02.js create mode 100644 docs/assets/js/68deafd0.1d1eccb9.js create mode 100644 docs/assets/js/69fd3230.ce2a2978.js create mode 100644 docs/assets/js/6add768b.7bbe0952.js create mode 100644 docs/assets/js/6e2102f2.c079c065.js create mode 100644 docs/assets/js/6e5ab397.5149d303.js create mode 100644 docs/assets/js/6f7f3f28.5a91b637.js create mode 100644 docs/assets/js/705c2b64.1bbe12ac.js create mode 100644 docs/assets/js/70d9d1e8.8086cd2b.js create mode 100644 docs/assets/js/71.05f6d099.js create mode 100644 docs/assets/js/716fdc54.1fa332bf.js create mode 100644 docs/assets/js/71735968.4acb548a.js create mode 100644 docs/assets/js/71958ad0.8591dae0.js create mode 100644 docs/assets/js/71b691b7.9684bfe0.js create mode 100644 docs/assets/js/728e71a1.ddcc5767.js create mode 100644 docs/assets/js/73285975.38bfacf4.js create mode 100644 docs/assets/js/733ac994.bf22c9dd.js create mode 100644 docs/assets/js/739a70a9.f96db3be.js create mode 100644 docs/assets/js/7414f7c1.326cab86.js create mode 100644 docs/assets/js/74376d79.69b07d3f.js create mode 100644 docs/assets/js/74442e8e.f901ad8b.js create mode 100644 docs/assets/js/7457cffc.95d0c1aa.js create mode 100644 docs/assets/js/754937b2.76a8c9b9.js create mode 100644 docs/assets/js/78452797.39b6ce0a.js create mode 100644 docs/assets/js/79253424.ad0dbf7d.js create mode 100644 docs/assets/js/799b1c68.48866af0.js create mode 100644 docs/assets/js/79b67993.39b2c6a5.js create mode 100644 docs/assets/js/79d3180c.d41db72a.js create mode 100644 docs/assets/js/7acce579.c1964be6.js create mode 100644 docs/assets/js/7d8962a6.4e63c0db.js create mode 100644 docs/assets/js/7df6186d.8f4bc43f.js create mode 100644 docs/assets/js/7e706e45.cdfe3eb6.js create mode 100644 docs/assets/js/7f9a1b7a.e85c6e9e.js create mode 100644 docs/assets/js/800dfaa2.5c66eaa8.js create mode 100644 docs/assets/js/8010fede.038a5d25.js create mode 100644 docs/assets/js/814f3328.e5d9b741.js create mode 100644 docs/assets/js/815ad8c9.f1cfd89f.js create mode 100644 docs/assets/js/83697071.0ed48f7d.js create mode 100644 docs/assets/js/88b75f2c.dda19374.js create mode 100644 docs/assets/js/893f4b86.f1b9c467.js create mode 100644 docs/assets/js/8988b866.22b63e10.js create mode 100644 docs/assets/js/8b0ca31f.9e0a83d9.js create mode 100644 docs/assets/js/8e991cde.79b88e8f.js create mode 100644 docs/assets/js/8f162cb9.762379e0.js create mode 100644 docs/assets/js/9005cef3.95511a2a.js create mode 100644 docs/assets/js/90c053b1.c73461b8.js create mode 100644 docs/assets/js/90f06335.95264650.js create mode 100644 docs/assets/js/918e870d.7022f90d.js create mode 100644 docs/assets/js/919c36c8.b43927bb.js create mode 100644 docs/assets/js/91b04621.9d61b848.js create mode 100644 docs/assets/js/93514764.0f5af50a.js create mode 100644 docs/assets/js/935f2afb.647dfe49.js create mode 100644 docs/assets/js/94723368.7d3ff207.js create mode 100644 docs/assets/js/95db938c.ffeb697c.js create mode 100644 docs/assets/js/95f5ef42.da7d1e4e.js create mode 100644 docs/assets/js/98b2adcf.6640f6d0.js create mode 100644 docs/assets/js/9a7c9bac.97ef6b89.js create mode 100644 docs/assets/js/9a7f4a11.931eca48.js create mode 100644 docs/assets/js/9cc9201d.de6931b6.js create mode 100644 docs/assets/js/9d620965.4f817163.js create mode 100644 docs/assets/js/9d95fe34.47cef24c.js create mode 100644 docs/assets/js/9e4087bc.2dee4e95.js create mode 100644 docs/assets/js/9e73c0bb.b0c60152.js create mode 100644 docs/assets/js/9ffb5fe4.cbfd0513.js create mode 100644 docs/assets/js/a046a162.691f889b.js create mode 100644 docs/assets/js/a05c6bda.eda097fe.js create mode 100644 docs/assets/js/a0d3df9d.fbc93276.js create mode 100644 docs/assets/js/a3d6ef01.684e5c74.js create mode 100644 docs/assets/js/a663e775.18f6c1d1.js create mode 100644 docs/assets/js/a6734805.f167d1dc.js create mode 100644 docs/assets/js/a6aa9e1f.d72a4b28.js create mode 100644 docs/assets/js/a6f6e2b9.236d4d2e.js create mode 100644 docs/assets/js/a88260b3.9b8b8e27.js create mode 100644 docs/assets/js/aaadf060.5faff66f.js create mode 100644 docs/assets/js/ab4716a0.a7bba1a3.js create mode 100644 docs/assets/js/ab49860c.5eff6c80.js create mode 100644 docs/assets/js/ac692f92.26b66903.js create mode 100644 docs/assets/js/acebe248.8ef99510.js create mode 100644 docs/assets/js/ad92572d.bb1dfdb2.js create mode 100644 docs/assets/js/aee91c2e.0da84d3e.js create mode 100644 docs/assets/js/af2a4ce0.a24a33da.js create mode 100644 docs/assets/js/afc3a23f.a8d853e2.js create mode 100644 docs/assets/js/b0f6aa87.6a1e5a02.js create mode 100644 docs/assets/js/b241ea99.5afc158d.js create mode 100644 docs/assets/js/b2b675dd.b113f45a.js create mode 100644 docs/assets/js/b2e57a16.e8efe736.js create mode 100644 docs/assets/js/b2f44958.fe9a4cb5.js create mode 100644 docs/assets/js/b2f554cd.4608dc99.js create mode 100644 docs/assets/js/b338949b.42ca8fba.js create mode 100644 docs/assets/js/b435d362.0fc0efc0.js create mode 100644 docs/assets/js/b4f02106.1850566b.js create mode 100644 docs/assets/js/b548b5e0.5414a78d.js create mode 100644 docs/assets/js/b6aaec29.474717b9.js create mode 100644 docs/assets/js/b7573e33.854de50e.js create mode 100644 docs/assets/js/b759477d.741c75cd.js create mode 100644 docs/assets/js/b7d3ed64.5f843fed.js create mode 100644 docs/assets/js/b87f41d0.f0f181c1.js create mode 100644 docs/assets/js/b94504cb.a2d52b37.js create mode 100644 docs/assets/js/ba36c747.3acfa93c.js create mode 100644 docs/assets/js/bab04a93.9417c5fe.js create mode 100644 docs/assets/js/bac2ca12.b5935fce.js create mode 100644 docs/assets/js/bd4cf5c0.f12ece2e.js create mode 100644 docs/assets/js/be0b2ac1.c2904d19.js create mode 100644 docs/assets/js/beab0651.654bd829.js create mode 100644 docs/assets/js/bee0af8b.69fdde87.js create mode 100644 docs/assets/js/befd1fba.955ad137.js create mode 100644 docs/assets/js/bfc20097.940e9141.js create mode 100644 docs/assets/js/bfc8213d.3a79c799.js create mode 100644 docs/assets/js/c10f3592.176c977b.js create mode 100644 docs/assets/js/c13d152b.e2564cc1.js create mode 100644 docs/assets/js/c1418166.799af3f0.js create mode 100644 docs/assets/js/c1ae59bd.5624c97f.js create mode 100644 docs/assets/js/c24519ee.ae644b8f.js create mode 100644 docs/assets/js/c3fd70b6.ff508e75.js create mode 100644 docs/assets/js/c43892d3.951d8759.js create mode 100644 docs/assets/js/c4f5d8e4.127ee1e6.js create mode 100644 docs/assets/js/c52764ec.6e443e42.js create mode 100644 docs/assets/js/c5296eae.9725cc06.js create mode 100644 docs/assets/js/c52d4d42.30a89473.js create mode 100644 docs/assets/js/c5cef920.0d511cf5.js create mode 100644 docs/assets/js/c5f43526.6560bfcd.js create mode 100644 docs/assets/js/c6385d27.ccf0ac8d.js create mode 100644 docs/assets/js/c705646d.e790d100.js create mode 100644 docs/assets/js/c714b9ee.c599700c.js create mode 100644 docs/assets/js/c71fcec7.a2c41cf5.js create mode 100644 docs/assets/js/ca76cddc.0fe3f002.js create mode 100644 docs/assets/js/cad7ddc9.1cb9d315.js create mode 100644 docs/assets/js/cb085bdb.c1d78c9c.js create mode 100644 docs/assets/js/cbdaac1b.d86a12f9.js create mode 100644 docs/assets/js/cca6b120.0686e279.js create mode 100644 docs/assets/js/ccc49370.9ef391ad.js create mode 100644 docs/assets/js/cd591068.8b1ceedb.js create mode 100644 docs/assets/js/cd790770.fd618f15.js create mode 100644 docs/assets/js/cde2d623.e4204b81.js create mode 100644 docs/assets/js/ce4f9116.d2cd5056.js create mode 100644 docs/assets/js/ce999a4e.0ce8a513.js create mode 100644 docs/assets/js/cecbc2b5.c68d76de.js create mode 100644 docs/assets/js/cf3f256a.f9385a89.js create mode 100644 docs/assets/js/d0c01b74.5d9599bb.js create mode 100644 docs/assets/js/d15969ed.a7e49a14.js create mode 100644 docs/assets/js/d386dd06.a52672fe.js create mode 100644 docs/assets/js/d5e3179c.3db0c54d.js create mode 100644 docs/assets/js/d691a609.c2d99f7f.js create mode 100644 docs/assets/js/d7637d81.7af705c8.js create mode 100644 docs/assets/js/d985b3f7.e852e117.js create mode 100644 docs/assets/js/d9fee9da.2ff8b9e6.js create mode 100644 docs/assets/js/da555cce.e33c96c7.js create mode 100644 docs/assets/js/da9e3acc.6d6af0a3.js create mode 100644 docs/assets/js/db82a1c0.01b7c8ed.js create mode 100644 docs/assets/js/df1503d8.285dccf0.js create mode 100644 docs/assets/js/e018be55.8f6ee0e2.js create mode 100644 docs/assets/js/e2022d8c.83e9cfc2.js create mode 100644 docs/assets/js/e294fa30.debc291b.js create mode 100644 docs/assets/js/e31bed34.b9cedacd.js create mode 100644 docs/assets/js/e4b2a41e.272fb4d8.js create mode 100644 docs/assets/js/e538a9e1.c4c0e0cf.js create mode 100644 docs/assets/js/e5e64bd0.902e37fb.js create mode 100644 docs/assets/js/e8a3ffa2.9e6f7abe.js create mode 100644 docs/assets/js/e9ea549b.2dc87fd4.js create mode 100644 docs/assets/js/ea145f46.320423fc.js create mode 100644 docs/assets/js/ed6ae2e5.fcf896d2.js create mode 100644 docs/assets/js/ed898d19.b182a3b1.js create mode 100644 docs/assets/js/ee3d80a6.6c361738.js create mode 100644 docs/assets/js/eedc1cb5.c39fe2ed.js create mode 100644 docs/assets/js/f00a1e6f.67c65fac.js create mode 100644 docs/assets/js/f0928d2f.b6746a68.js create mode 100644 docs/assets/js/f1080184.dc2838d7.js create mode 100644 docs/assets/js/f146bc3c.cc1925d4.js create mode 100644 docs/assets/js/f54718af.62e2f4f8.js create mode 100644 docs/assets/js/f5bf02f1.db11918d.js create mode 100644 docs/assets/js/f92986d2.c6655b0e.js create mode 100644 docs/assets/js/fa4e959a.9fa4cb3e.js create mode 100644 docs/assets/js/fb249be3.6a9b1906.js create mode 100644 docs/assets/js/fdb5f68c.582d92bd.js create mode 100644 docs/assets/js/fe2b6021.df5b1421.js create mode 100644 docs/assets/js/fec7bf31.58881655.js create mode 100644 docs/assets/js/ff33c5f7.6b1cd76b.js create mode 100644 docs/assets/js/ff3976bd.eda77dfb.js create mode 100644 docs/assets/js/main.2d7f4338.js create mode 100644 docs/assets/js/main.2d7f4338.js.LICENSE.txt create mode 100644 docs/assets/js/runtime~main.daf70288.js create mode 100644 docs/blog/2023-02-27-openai-writes-erc20-in-odra/index.html create mode 100644 docs/blog/Nysa/index.html create mode 100644 docs/blog/archive/index.html create mode 100644 docs/blog/atom.xml create mode 100644 docs/blog/casper-zk-risc0/index.html create mode 100644 docs/blog/evm-at-risc0/index.html create mode 100644 docs/blog/index.html create mode 100644 docs/blog/its-all-about-the-community/index.html create mode 100644 docs/blog/odra-cosmwasm/index.html create mode 100644 docs/blog/release-020/index.html create mode 100644 docs/blog/rss.xml create mode 100644 docs/docs/0.2.0/backends/casper/index.html create mode 100644 docs/docs/0.2.0/backends/mock-vm/index.html create mode 100644 docs/docs/0.2.0/backends/what-is-a-backend/index.html create mode 100644 docs/docs/0.2.0/basics/cargo-odra/index.html create mode 100644 docs/docs/0.2.0/basics/communicating-with-host/index.html create mode 100644 docs/docs/0.2.0/basics/cross-calls/index.html create mode 100644 docs/docs/0.2.0/basics/directory-structure/index.html create mode 100644 docs/docs/0.2.0/basics/errors/index.html create mode 100644 docs/docs/0.2.0/basics/events/index.html create mode 100644 docs/docs/0.2.0/basics/flipper-internals/index.html create mode 100644 docs/docs/0.2.0/basics/modules/index.html create mode 100644 docs/docs/0.2.0/basics/native-token/index.html create mode 100644 docs/docs/0.2.0/basics/odra-toml/index.html create mode 100644 docs/docs/0.2.0/basics/storage-interaction/index.html create mode 100644 docs/docs/0.2.0/basics/testing/index.html create mode 100644 docs/docs/0.2.0/category/backends/index.html create mode 100644 docs/docs/0.2.0/category/basics/index.html create mode 100644 docs/docs/0.2.0/category/examples/index.html create mode 100644 docs/docs/0.2.0/category/getting-started/index.html create mode 100644 docs/docs/0.2.0/category/tutorials/index.html create mode 100644 docs/docs/0.2.0/examples/odra-examples/index.html create mode 100644 docs/docs/0.2.0/examples/using-odra-modules/index.html create mode 100644 docs/docs/0.2.0/getting-started/flipper/index.html create mode 100644 docs/docs/0.2.0/getting-started/installation/index.html create mode 100644 docs/docs/0.2.0/index.html create mode 100644 docs/docs/0.2.0/tutorials/erc20/index.html create mode 100644 docs/docs/0.2.0/tutorials/ownable/index.html create mode 100644 docs/docs/0.2.0/tutorials/owned-token/index.html create mode 100644 docs/docs/0.3.0/advanced/advanced-storage/index.html create mode 100644 docs/docs/0.3.0/advanced/attributes/index.html create mode 100644 docs/docs/0.3.0/advanced/composer/index.html create mode 100644 docs/docs/0.3.0/advanced/delegate/index.html create mode 100644 docs/docs/0.3.0/backends/casper/index.html create mode 100644 docs/docs/0.3.0/backends/mock-vm/index.html create mode 100644 docs/docs/0.3.0/backends/what-is-a-backend/index.html create mode 100644 docs/docs/0.3.0/basics/cargo-odra/index.html create mode 100644 docs/docs/0.3.0/basics/communicating-with-host/index.html create mode 100644 docs/docs/0.3.0/basics/cross-calls/index.html create mode 100644 docs/docs/0.3.0/basics/directory-structure/index.html create mode 100644 docs/docs/0.3.0/basics/errors/index.html create mode 100644 docs/docs/0.3.0/basics/events/index.html create mode 100644 docs/docs/0.3.0/basics/flipper-internals/index.html create mode 100644 docs/docs/0.3.0/basics/modules/index.html create mode 100644 docs/docs/0.3.0/basics/native-token/index.html create mode 100644 docs/docs/0.3.0/basics/odra-toml/index.html create mode 100644 docs/docs/0.3.0/basics/storage-interaction/index.html create mode 100644 docs/docs/0.3.0/basics/testing/index.html create mode 100644 docs/docs/0.3.0/category/advanced/index.html create mode 100644 docs/docs/0.3.0/category/backends/index.html create mode 100644 docs/docs/0.3.0/category/basics/index.html create mode 100644 docs/docs/0.3.0/category/examples/index.html create mode 100644 docs/docs/0.3.0/category/getting-started/index.html create mode 100644 docs/docs/0.3.0/category/tutorials/index.html create mode 100644 docs/docs/0.3.0/examples/odra-examples/index.html create mode 100644 docs/docs/0.3.0/examples/using-odra-modules/index.html create mode 100644 docs/docs/0.3.0/getting-started/flipper/index.html create mode 100644 docs/docs/0.3.0/getting-started/installation/index.html create mode 100644 docs/docs/0.3.0/index.html create mode 100644 docs/docs/0.3.0/tutorials/erc20/index.html create mode 100644 docs/docs/0.3.0/tutorials/ownable/index.html create mode 100644 docs/docs/0.3.0/tutorials/owned-token/index.html create mode 100644 docs/docs/0.3.1/advanced/advanced-storage/index.html create mode 100644 docs/docs/0.3.1/advanced/attributes/index.html create mode 100644 docs/docs/0.3.1/advanced/composer/index.html create mode 100644 docs/docs/0.3.1/advanced/delegate/index.html create mode 100644 docs/docs/0.3.1/backends/casper/index.html create mode 100644 docs/docs/0.3.1/backends/mock-vm/index.html create mode 100644 docs/docs/0.3.1/backends/what-is-a-backend/index.html create mode 100644 docs/docs/0.3.1/basics/cargo-odra/index.html create mode 100644 docs/docs/0.3.1/basics/communicating-with-host/index.html create mode 100644 docs/docs/0.3.1/basics/cross-calls/index.html create mode 100644 docs/docs/0.3.1/basics/directory-structure/index.html create mode 100644 docs/docs/0.3.1/basics/errors/index.html create mode 100644 docs/docs/0.3.1/basics/events/index.html create mode 100644 docs/docs/0.3.1/basics/flipper-internals/index.html create mode 100644 docs/docs/0.3.1/basics/modules/index.html create mode 100644 docs/docs/0.3.1/basics/native-token/index.html create mode 100644 docs/docs/0.3.1/basics/odra-toml/index.html create mode 100644 docs/docs/0.3.1/basics/storage-interaction/index.html create mode 100644 docs/docs/0.3.1/basics/testing/index.html create mode 100644 docs/docs/0.3.1/category/advanced/index.html create mode 100644 docs/docs/0.3.1/category/backends/index.html create mode 100644 docs/docs/0.3.1/category/basics/index.html create mode 100644 docs/docs/0.3.1/category/examples/index.html create mode 100644 docs/docs/0.3.1/category/getting-started/index.html create mode 100644 docs/docs/0.3.1/category/tutorials/index.html create mode 100644 docs/docs/0.3.1/examples/odra-examples/index.html create mode 100644 docs/docs/0.3.1/examples/using-odra-modules/index.html create mode 100644 docs/docs/0.3.1/getting-started/flipper/index.html create mode 100644 docs/docs/0.3.1/getting-started/installation/index.html create mode 100644 docs/docs/0.3.1/index.html create mode 100644 docs/docs/0.3.1/tutorials/erc20/index.html create mode 100644 docs/docs/0.3.1/tutorials/ownable/index.html create mode 100644 docs/docs/0.3.1/tutorials/owned-token/index.html create mode 100644 docs/docs/0.4.0/advanced/advanced-storage/index.html create mode 100644 docs/docs/0.4.0/advanced/attributes/index.html create mode 100644 docs/docs/0.4.0/advanced/composer/index.html create mode 100644 docs/docs/0.4.0/advanced/delegate/index.html create mode 100644 docs/docs/0.4.0/backends/casper/index.html create mode 100644 docs/docs/0.4.0/backends/mock-vm/index.html create mode 100644 docs/docs/0.4.0/backends/what-is-a-backend/index.html create mode 100644 docs/docs/0.4.0/basics/cargo-odra/index.html create mode 100644 docs/docs/0.4.0/basics/communicating-with-host/index.html create mode 100644 docs/docs/0.4.0/basics/cross-calls/index.html create mode 100644 docs/docs/0.4.0/basics/directory-structure/index.html create mode 100644 docs/docs/0.4.0/basics/errors/index.html create mode 100644 docs/docs/0.4.0/basics/events/index.html create mode 100644 docs/docs/0.4.0/basics/flipper-internals/index.html create mode 100644 docs/docs/0.4.0/basics/modules/index.html create mode 100644 docs/docs/0.4.0/basics/native-token/index.html create mode 100644 docs/docs/0.4.0/basics/odra-toml/index.html create mode 100644 docs/docs/0.4.0/basics/storage-interaction/index.html create mode 100644 docs/docs/0.4.0/basics/testing/index.html create mode 100644 docs/docs/0.4.0/category/advanced/index.html create mode 100644 docs/docs/0.4.0/category/backends/index.html create mode 100644 docs/docs/0.4.0/category/basics/index.html create mode 100644 docs/docs/0.4.0/category/examples/index.html create mode 100644 docs/docs/0.4.0/category/getting-started/index.html create mode 100644 docs/docs/0.4.0/category/tutorials/index.html create mode 100644 docs/docs/0.4.0/examples/odra-examples/index.html create mode 100644 docs/docs/0.4.0/examples/using-odra-modules/index.html create mode 100644 docs/docs/0.4.0/getting-started/flipper/index.html create mode 100644 docs/docs/0.4.0/getting-started/installation/index.html create mode 100644 docs/docs/0.4.0/index.html create mode 100644 docs/docs/0.4.0/tutorials/erc20/index.html create mode 100644 docs/docs/0.4.0/tutorials/ownable/index.html create mode 100644 docs/docs/0.4.0/tutorials/owned-token/index.html create mode 100644 docs/docs/0.5.0/advanced/advanced-storage/index.html create mode 100644 docs/docs/0.5.0/advanced/attributes/index.html create mode 100644 docs/docs/0.5.0/advanced/delegate/index.html create mode 100644 docs/docs/0.5.0/advanced/signatures/index.html create mode 100644 docs/docs/0.5.0/advanced/using/index.html create mode 100644 docs/docs/0.5.0/backends/casper/index.html create mode 100644 docs/docs/0.5.0/backends/mock-vm/index.html create mode 100644 docs/docs/0.5.0/backends/what-is-a-backend/index.html create mode 100644 docs/docs/0.5.0/basics/cargo-odra/index.html create mode 100644 docs/docs/0.5.0/basics/communicating-with-host/index.html create mode 100644 docs/docs/0.5.0/basics/cross-calls/index.html create mode 100644 docs/docs/0.5.0/basics/directory-structure/index.html create mode 100644 docs/docs/0.5.0/basics/errors/index.html create mode 100644 docs/docs/0.5.0/basics/events/index.html create mode 100644 docs/docs/0.5.0/basics/flipper-internals/index.html create mode 100644 docs/docs/0.5.0/basics/modules/index.html create mode 100644 docs/docs/0.5.0/basics/native-token/index.html create mode 100644 docs/docs/0.5.0/basics/odra-toml/index.html create mode 100644 docs/docs/0.5.0/basics/storage-interaction/index.html create mode 100644 docs/docs/0.5.0/basics/testing/index.html create mode 100644 docs/docs/0.5.0/category/advanced/index.html create mode 100644 docs/docs/0.5.0/category/backends/index.html create mode 100644 docs/docs/0.5.0/category/basics/index.html create mode 100644 docs/docs/0.5.0/category/examples/index.html create mode 100644 docs/docs/0.5.0/category/getting-started/index.html create mode 100644 docs/docs/0.5.0/category/tutorials/index.html create mode 100644 docs/docs/0.5.0/examples/odra-examples/index.html create mode 100644 docs/docs/0.5.0/examples/using-odra-modules/index.html create mode 100644 docs/docs/0.5.0/getting-started/flipper/index.html create mode 100644 docs/docs/0.5.0/getting-started/installation/index.html create mode 100644 docs/docs/0.5.0/index.html create mode 100644 docs/docs/0.5.0/tutorials/erc20/index.html create mode 100644 docs/docs/0.5.0/tutorials/ownable/index.html create mode 100644 docs/docs/0.5.0/tutorials/owned-token/index.html create mode 100644 docs/docs/0.6.0/advanced/advanced-storage/index.html create mode 100644 docs/docs/0.6.0/advanced/attributes/index.html create mode 100644 docs/docs/0.6.0/advanced/delegate/index.html create mode 100644 docs/docs/0.6.0/advanced/signatures/index.html create mode 100644 docs/docs/0.6.0/advanced/using/index.html create mode 100644 docs/docs/0.6.0/backends/casper/index.html create mode 100644 docs/docs/0.6.0/backends/mock-vm/index.html create mode 100644 docs/docs/0.6.0/backends/what-is-a-backend/index.html create mode 100644 docs/docs/0.6.0/basics/cargo-odra/index.html create mode 100644 docs/docs/0.6.0/basics/communicating-with-host/index.html create mode 100644 docs/docs/0.6.0/basics/cross-calls/index.html create mode 100644 docs/docs/0.6.0/basics/directory-structure/index.html create mode 100644 docs/docs/0.6.0/basics/errors/index.html create mode 100644 docs/docs/0.6.0/basics/events/index.html create mode 100644 docs/docs/0.6.0/basics/flipper-internals/index.html create mode 100644 docs/docs/0.6.0/basics/modules/index.html create mode 100644 docs/docs/0.6.0/basics/native-token/index.html create mode 100644 docs/docs/0.6.0/basics/odra-toml/index.html create mode 100644 docs/docs/0.6.0/basics/storage-interaction/index.html create mode 100644 docs/docs/0.6.0/basics/testing/index.html create mode 100644 docs/docs/0.6.0/category/advanced/index.html create mode 100644 docs/docs/0.6.0/category/backends/index.html create mode 100644 docs/docs/0.6.0/category/basics/index.html create mode 100644 docs/docs/0.6.0/category/examples/index.html create mode 100644 docs/docs/0.6.0/category/getting-started/index.html create mode 100644 docs/docs/0.6.0/category/tutorials/index.html create mode 100644 docs/docs/0.6.0/examples/odra-examples/index.html create mode 100644 docs/docs/0.6.0/examples/using-odra-modules/index.html create mode 100644 docs/docs/0.6.0/getting-started/flipper/index.html create mode 100644 docs/docs/0.6.0/getting-started/installation/index.html create mode 100644 docs/docs/0.6.0/index.html create mode 100644 docs/docs/0.6.0/tutorials/erc20/index.html create mode 100644 docs/docs/0.6.0/tutorials/ownable/index.html create mode 100644 docs/docs/0.6.0/tutorials/owned-token/index.html create mode 100644 docs/docs/advanced/advanced-storage/index.html create mode 100644 docs/docs/advanced/attributes/index.html create mode 100644 docs/docs/advanced/delegate/index.html create mode 100644 docs/docs/advanced/signatures/index.html create mode 100644 docs/docs/advanced/using/index.html create mode 100644 docs/docs/backends/casper/index.html create mode 100644 docs/docs/backends/mock-vm/index.html create mode 100644 docs/docs/backends/what-is-a-backend/index.html create mode 100644 docs/docs/basics/cargo-odra/index.html create mode 100644 docs/docs/basics/communicating-with-host/index.html create mode 100644 docs/docs/basics/cross-calls/index.html create mode 100644 docs/docs/basics/directory-structure/index.html create mode 100644 docs/docs/basics/errors/index.html create mode 100644 docs/docs/basics/events/index.html create mode 100644 docs/docs/basics/flipper-internals/index.html create mode 100644 docs/docs/basics/modules/index.html create mode 100644 docs/docs/basics/native-token/index.html create mode 100644 docs/docs/basics/odra-toml/index.html create mode 100644 docs/docs/basics/storage-interaction/index.html create mode 100644 docs/docs/basics/testing/index.html create mode 100644 docs/docs/category/advanced/index.html create mode 100644 docs/docs/category/backends/index.html create mode 100644 docs/docs/category/basics/index.html create mode 100644 docs/docs/category/examples/index.html create mode 100644 docs/docs/category/getting-started/index.html create mode 100644 docs/docs/category/tutorials/index.html create mode 100644 docs/docs/examples/odra-examples/index.html create mode 100644 docs/docs/examples/using-odra-modules/index.html create mode 100644 docs/docs/getting-started/flipper/index.html create mode 100644 docs/docs/getting-started/installation/index.html create mode 100644 docs/docs/index.html create mode 100644 docs/docs/next/advanced/advanced-storage/index.html create mode 100644 docs/docs/next/advanced/attributes/index.html create mode 100644 docs/docs/next/advanced/delegate/index.html create mode 100644 docs/docs/next/advanced/storage-layout/index.html create mode 100644 docs/docs/next/backends/casper/index.html create mode 100644 docs/docs/next/backends/livenet/index.html create mode 100644 docs/docs/next/backends/odra-vm/index.html create mode 100644 docs/docs/next/backends/what-is-a-backend/index.html create mode 100644 docs/docs/next/basics/cargo-odra/index.html create mode 100644 docs/docs/next/basics/communicating-with-host/index.html create mode 100644 docs/docs/next/basics/cross-calls/index.html create mode 100644 docs/docs/next/basics/directory-structure/index.html create mode 100644 docs/docs/next/basics/errors/index.html create mode 100644 docs/docs/next/basics/events/index.html create mode 100644 docs/docs/next/basics/flipper-internals/index.html create mode 100644 docs/docs/next/basics/modules/index.html create mode 100644 docs/docs/next/basics/native-token/index.html create mode 100644 docs/docs/next/basics/odra-toml/index.html create mode 100644 docs/docs/next/basics/storage-interaction/index.html create mode 100644 docs/docs/next/basics/testing/index.html create mode 100644 docs/docs/next/category/advanced/index.html create mode 100644 docs/docs/next/category/backends/index.html create mode 100644 docs/docs/next/category/basics/index.html create mode 100644 docs/docs/next/category/examples/index.html create mode 100644 docs/docs/next/category/getting-started/index.html create mode 100644 docs/docs/next/category/migrations/index.html create mode 100644 docs/docs/next/category/tutorials/index.html create mode 100644 docs/docs/next/examples/odra-examples/index.html create mode 100644 docs/docs/next/examples/using-odra-modules/index.html create mode 100644 docs/docs/next/getting-started/flipper/index.html create mode 100644 docs/docs/next/getting-started/installation/index.html create mode 100644 docs/docs/next/index.html create mode 100644 docs/docs/next/migrations/to-0.8.0/index.html create mode 100644 docs/docs/next/tutorials/access-control/index.html create mode 100644 docs/docs/next/tutorials/erc20/index.html create mode 100644 docs/docs/next/tutorials/ownable/index.html create mode 100644 docs/docs/next/tutorials/owned-token/index.html create mode 100644 docs/docs/next/tutorials/pauseable/index.html create mode 100644 docs/docs/tutorials/access-control/index.html create mode 100644 docs/docs/tutorials/erc20/index.html create mode 100644 docs/docs/tutorials/ownable/index.html create mode 100644 docs/docs/tutorials/owned-token/index.html create mode 100644 docs/docs/tutorials/pauseable/index.html create mode 100644 docs/iAWriterMonoS-Regular.ttf create mode 100644 docs/img/docusaurus.png create mode 100644 docs/img/favicon.ico create mode 100644 docs/img/logo.svg create mode 100644 docs/img/small_logo.png create mode 100644 docs/img/undraw_docusaurus_mountain.svg create mode 100644 docs/img/undraw_docusaurus_react.svg create mode 100644 docs/img/undraw_docusaurus_tree.svg create mode 100644 docs/index.html create mode 100644 docs/sitemap.xml diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 000000000..521667284 --- /dev/null +++ b/docs/404.html @@ -0,0 +1,17 @@ + + + + + +Page Not Found | Odra + + + + + +
+
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/docs/CNAME b/docs/CNAME new file mode 100644 index 000000000..3ee5c10b9 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +odra.dev diff --git a/docs/LiberationMono-Regular.ttf b/docs/LiberationMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1a39bc7563388b359488f7ecb84c3b8e5dcf7f32 GIT binary patch literal 313408 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

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

T?elFgM;Ir23>pFfxHgjak~fTetzX( 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�ZcW0TLrXVgyKx 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�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

&!AT|1yEH&7eiD`GCvwsCrT|{2%dBJ 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
yKdR46^bO`tj9^FB!yo6U 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�U>6r@be^lE9+ky= z6OT?4b5}l%9?<8IlsqCGB~cGedgq+Z>%IOHIsoYGunsza>LFfTr+&4Q9u#>Q;xUdB zAQBrOBFJyKFLHUNPHJk-?(5sm?LGkqiGH(xKIh8k=5y}pa8T;R{_S)AKZsuJ1cB_) z`=XuRd7j7FC%}1H9W#XapepM5FeD|Nw3(YF;XMD) zn-B4CchyE`RcejK5gq#w?qbKG-R&b!@-;E)alj_)@aZTI0l>cUaljDbj_7Bh@^b#} z0}=1+GVk!d@)beopMLW1RKL#A>H9!skK>*Ir{|KRg{${G97qhm^> zMv4GP3K9Q6l;!nBod*Hsr4b*C5aGcmr&jW7&-O6k@_qH~aKH}i5ce$~2S7mRaF7ma z5C^z%>gw?Ga4;t6kn=o$^AS?`5b*adZ|D#Z=W3u1=#cocE?9GPuUZS=4S}xd3;_V! zUA=0~%DP9U8?7wE#|Uvvdq%>IfkHStUlO6K(s3;a;0_Jl_P3Aw58?7R8|S4P=fi&Y zjvogQ;OT-M?=Jr$ldt&TUJ!{N@5p}g3!?mBJIiKkP%HH$I*hzRo3)&OD0h};NNc)2 zt0!pf5SFB7AT<{?w-5LM9h068B`Xmi^#JGa0O*we`}wc`4e|B{(f<|%5OLz@&=Cg+ z1c4BM41{1Lju8kD)Cpu4vEf6D8685*7;$6Aj|wre6R6H3#*Q7=owH{#9ZLu+&&{NH zE}g}F{Zc~cw{Ir|dHrVoJBKf#J)0KK-GjjHTs@aCS3@ngu5 zB~PYY*|NoT6jK(Aa}z>3fdmaAj3ZLVMUJ53RE)TgBS@4TUBl)$dt#h*Ctv?`O7*kU zqVI$c&zN&(&z%C`W|TgyN{Pke_b!{=ilG|e*gm%a6keJH1NR21lld4+gKwBw}K8*$E1Z$3+X|V zT8k~C*;4AzqL4aN@Vt=3dMTf%)O(;Tu@3O(IGbsaK`f4t>+&M>{dCp-Cf&(7N2*`{kOv$Qv#IkZMwIYgyMg+qYb4)VJH1kX}(^T`Y zg$!Cp9UTsW0FF4|V22$#;ea4Q4jFPtjdj*hqt1*t(_tMsH5_Q2(=0L+QQb7GO(04) z{3)*7B)Tq=bF%!YybLo!PR4)GvB*aM2&7BPEFynX@16(RiAYJNvdZX4zxv^4)QFUm zr`IJjV&{Peo|FjHorWzoBVKf}D8DtMm3CTctF`u8Yz=g%(l|`YjN9D!w5Y<1xNQ_W zZbMa#QgzcsP114cG(z6K+l&}GCePWSBVM2@Pd|&43)Uh8mYV10d47#~ zCY>XS=NyR55Q?vCi#Gabq?1;9=>m1w)`&#ac{)RJHMFo!hu}CDv#f!bE~clyUZ?Au zLbUXxMBU2k0e?C+!yz_z6 zEjc1w`%34Z7dui%-+%B4mBD`c+5DcGW~!WX&->z%!1_x*R^gBN~y;)~bl?EbhVv@dz^siz)&oi%=X>Z`Z@dhD}jjQ0P4*cJ}2 z{fdX5jQzQ1bM4bte|`4bcmI9($A5>k3*5p>Lu zJ2<+c(e44Wj{MO~g5(bmfww_K3bBhCyg*0J^Fby4go$utWE5xC#{w#ci#vG-=9moen; zinxv^Hjysrm?H!r=|L#Eq?wLc2`+mHKurz?DT)M&%2MJK2kz`1U-JsVKxai;Ua~K| zye74VSsdw&>7AATDW>lm8%@bAJ0e4Mrm86ZU=KQh z@;86@hA{7N(Y^3N!gt)Gjra1+I=;lX7Rm#sI^Bsn^l?gi)Z-t#K+-+(whturYN-|p z>QMht)T1`;FY35Q#`r-n2y``LU*)P$*9z8CinXm?W$I6?dN?GJF?2D~YfT!aR-z)t zsO8fK!N_V>g7uXqe|2kMBXZY&VAUe<&_~|#VXSt%#~++hPfWs^DW^hJs#ML^J!5jv ziuUuF0NrQ*N(gEZ10XV?tYxS~5t*SUF4Qj1;MC~sNO?o7|R^yE=b^e z7#P9AI!8Xta4!V#Vs!Pe2Lhz}fD50azz5#jiXuGWQ{uzIed!mzzBr#2L%1Fi&hd*Q zLSY%7(!nm?F@CR9;uB{I9`m3n&WN_;Cf_V^5B9NPJ_en7bc|m#%`h101Lc1>xyMDW z3X(JbmMI0>qdfoc%&_pKuj>GL#!m4th(%ml*+x>et$k!`JM!9y1QeMG{R{>D%ufyu z8VdM?fS?V{(4X)&DrG!}I$lC)OH;bimo8(bG0o}FdAie}u8F8aO=_B$y40vPBda&9 zX;r6MB2rxrTI1JIzaZscbM!~UI82X>Fjz0=2y;`}(-CEf_b2-82(xeGI4U)%vx%t~ z?;^1`Ut5I1cC(9mr5zYs9iS|{Q>2o@`E3}{FjkP$SYN)xnsoFU+dtu(w%6^IcDpy* zf-yHdFBQ*uF9vjTG32|kBX67lT;KINM>s3?Go3|=HR`y|w%LuMaF5$b*plr;QyWeH zKm*z$fJS1b`ibb;w)UCpsH8t3y%R}eG&#Hgnx}3}Ucazo2e2w#MpC+y`dXxo_1J;m zdY6%OkdKR70*tdwhD*UQ*i__ejNqaa@QzSvz*2$$)w?KT8E42=`S3~PT(TpkbRA3` zsdtT7v~{?FU2~_>+=SF2GOV+G-#dCc1cbEkrpkSeH+ewXBQnp!E1Y4B;ZcfeRQCzt zJ>ltg3*pmVF&?5L->!0dkfb#BvY*UaMKrHOZ?b2BiX7z`d7@`d?(#pkR-YYwVun-? z^O(v!CGa51CfA2+!0>L`5D*zTBhsvnARGedh-^mSBA3ND9da=hTpIaabv}0g2k;r$ zPE|^(^>5b1K|~5qDvARNN&!VG)J zm`E@__5nV?P`>q0FO@ilx5)^9fG;Qk6Zx>U!;n7lfV%AaK9Qm}KH9&1Yd@LFjm85v z^4q}iP!8sB4pd3Q0>nR^(mt_R349n1;kVHa=vYQXk#6LX4v17xmq81NS2M|=bLrcMqFhzxef{#PNLxVjC z7(sLhs0o3=D8waKi?vpRwOiapUF^kA^TkmE##0l5#fWyuLBwx^YxPt-uQL2#Xn+617;z zIXsoV`#ZN#zdoe5y#qgd9|Gvv5pg{bdaqJ5=BJHjojKGWjf8(bVXA%C=NQPmy1CoYbP^MDfh!4`Kli_?iols1m@f9{o`a3eq8! z%~m|Y-O@?j%OBrNiFkMqwh<#yQM{UIFNrXmy0Hk*37vvehtAnXWQ!vdiix<$oPz18 z%xNJwDxbGxi-L3uq`(K7IskOyzjas~xw42k%~HDm@XV9(oATL*I~r8;Nl?X!t7Wtt zxuF{?;y*tHR1(V2pFmW==?J_DBTvm6!^==R4ZhQ98!3dFN$oY8`c%E?OHS>zz_~=s zFr3IroIizB3~H6>%c@c(pbNMFby$a#jMChk(%x*w$KZ!MeVxe}KJ(-wWEGQV-KnE% zooXeZj$?tpkRmGb(rJaCEZR9`ZH!Em9W(HUe)!3hV5e{;kaS(wzi6K4iJsSqS9awe z1JKbXjZ&Ie(|3iR6`F}iMGX0p9eo%lz;M@q4UmM*SJRq<>}E;u+X- zjf@xK*@msBq9IypaVQ{qO4cJZ460cYyxC;3q$#Q*p&g!a-6Fs6A~3?2&B;}=0N3|3 z!Zvy%HJ#Y1bqhj@%UTMPv?ZpfG#aCw7SU8%25C8$cr<8gBGpvV$cVYK9iA%fh)&{8 zQ2NiWO0wgqC00r=dw8Yg5YDyz+rT))Lo|@ejf}Xxmdp*!j*MErU?!WrO(>Nn%kW#t z1)ji-R@Rsp$9dabO-$ub*jq8Da{$-VRZPW0#N4&q-Njtj&6dqw6Aw(m5TvcAg*4if zs1Pz<)^n&J;=Uv`)_2t?D*aiy2)Zx-;gXafN|Tz;-SZ~6In%%3sl55Ai~uaQ`mxV) zn5}Y)&`QS9s;aB{M5QVp-#}luLaMO}u(LYf#!BC``rrHw)BvU{zkn>s8n80rs|B8` zw-T%`VVlB&8~#nK295~)71Q~htjcO7%+f5*!i@Emh^KHUDbB&}0x!D#J?q^G^Fl8uvaY*v$~$vEGefa4Qn3vGV=*|^F*%kqA)_%ayD@^HGBPXVDnn#98Z$Yj3lcN2 zGbCyj zMdP$ZVoWt&{6%sO#&RCUb1ueo7UyuzMNFGDqBsC&cAwPsubJpMX68zFXgj9>HhUYk zVoQmS3BzRji)w4*1hqJP^S0l0i;PPvYRrg!g8+0h%wW5>ZgaPPfH&o{)V)*ajBZfB znCJlnCdJd#z!*3mQ4fRv`wS;cM22%X9D%rqkT}Lv50GxRhbA|}P!4Wt>3C}x`?G0H zVd;%NI7JkbZCyp0Y-$x0sFE99r*_4aYdLSmzfo={d7wF7xJ!EO;&0ly2f*hYIEM!? z>%^g%h!)4MDmtD_>(5X+fi_#KH zyR&PL-U-9LYk@}Wlo0I6Giii03^}w&$Xo14j7$?jI~85&<=Z@qyhn@#55P7IYda(8 zP;AMAY&;_EAKC2JJ`>UtNhmlykUO;7D?tr%y_Km_lv6u%$S zwE9!T@7_c*Lh&h7}9R*ZAyJO!i)20Up+d_Wx$oC#z^(RS|)+zL-Tj1SWo zBpL9TnD6kbK;WP>h&2!ogv~|@L5o1e;a=L@mg<^}J>q6T4SK;R#XW1PVl0+oA*^vH zws9K2aUIWb9=Bo~zd<8J!VbqC=iUi~vk&|Lq?MS$XR*Tf@Vt2zjOrt=`mRGT6pT(( zOG<>p^$tV4q{BUmR7ZS7N3HTO7wO~}L@w`dHb-;7U~mBs4l=K7&yLPFEX2^Z80$bl z;IQ%sFTWc9C5&~b2Y&U}7hwb?0bM26GJ;dSBl!#GOB0wYYd^$8FV(JlZMS_Aw zSyYFsj&E>YXLmMdQ%C1hSLak`XHtK)R>wtG@3dpQ7iFZMB2S5DbW@ASUbPmYrz#F? z^lG@FYd$hZMen?HJU+s9=!`Uy@es(sq(_UkN6+gE_CEG=d~B5V?}$VphfIlY|MJ67 zNYQ4z|Q?heNsh{6eyWINeGZh zmh?Csj!8zENhh^QXr>F(-N~LD^7Og&jQAO7K<>-RYJ;PNjr65N@R0NgZ@gb z6U)8-oJy=@$6I-Jwp@1zX!*9#*&_<^3$&b-c`T3oJ7zjn75~a|B zu~6C1&ebL7iH!G9Z@yO(I4_r9u0rKWd|lDQX@rD@<+DwZ}_KGraMgT+jX5Hzfy_4 z_|vgr-t5xA%a|~IEPyyCaG*a31|g{H*H7KSh7JwdJBQETzXRIcOB=&81+wey!>dYtoz$ zBBnbi@!&dqCjae&N7$oOgDhPhgemjj*|cgQyvx^hU%ZBMliJnWu<+r;a*u-lzN~sR z>(;Jc!&Z6Wg1U7Epg_5xdfhp{v3~;(E_^ug;>M37KPd0q)Z`HOS$2LIu=MKIuVc5K z?w>u_@6IXCE`H2r^Wm&H@kN%t^xV{AF@D5Q}`BAKL;OETG{lTSh!rIb@rS*4X%Vwt6u zTXNZ@mtTSzrkG=rS*Dq15{J$@E~43{n{UDyCyMbvCg+&xl)!?E?6g<^f>j=Ra1fq) zUPq!pCfb?ki7X1lrgSjPqo|}@rgM&fRchvFmwA3z0z0c+fLovk@yVW_L;-qGs8Ebr zU3~M&IH|1n@wbD2nif@0KVktn+5sQo6XZkn{5P6Cy!_J~Nn!;%E1382qY|`BR(k1_ z=m_LnL(^v29($i&rVehpHIxpXP@Jk#ss@RhTcN!<8?S-O;p)&kAlakOIlK_|k3VME z^8kfTMXQro`PdVre+Srez&QoWyX8IuKQuA5mSS0tKEgI+aks3lvudkqrNePU9;Um| zx(1bu9dFu39P@efz7`R<_dEdZaxg={5&{h^r=vsd)ahTWGEeFMam5rPS*@5#Ux}Lm z26=$4LF=O2bDt_(?T`U1pew4@raE*1r|5#qk%#V;K(1OZBYoXFCPz%OYY3bJZa)x1 z@Q*$T77M|4f2#%0IXif!5Zx-hb3j-4xcJUJ$cj}DVUY;MraU#BWVu!9=<|_1_58!j zWDwl5+35ytZjtNoPYU)<1uJ1qs zHRb&CWgTC6aPIti(#CS-{=n{Q#csVp?fmLbBp9>X{rA^r@6YxS_!Aw@fx)9sSNWtJ z+dl)rEd4-b;ZAqFtKRQwBsB=E18n5Nn$=2$o0J_SYYn;ojkf~jz^+BmTTlqnsO1b0lctGJ?w!1(mkL#alFSIUw6hduCa|Dsh35%nMBUK)N#z`jfANX*i87+xO)%5X?CYcI6=0TBppfWtAJY^~?c}YtCW*wbFfIR@{ zNL@W3lAgq*V|Zm4^r_>PkOYn_{ZS8EmgQDdDOec)?ST)m6v;L6m`6llw#t8?avtFc zrdM#O%UAMDLmEsM15afx2|5Iw26Jyz)pDX284oo-t*K^DSisX zp8yT$KLIMxfgaSL1?6W#8M@GZK6D@rh3G)fF;R&|l%N%5h&o7jjsx({SxTIaKo)Wk zDjwul4q*vB8bU^X2n3rOQAb5q`hc8)@f;2MP9(^(5i%~N9S?va1Yl&XI<^D?2l(4} zkO%>Hoa1LjMPC)m;?f5Mb*PuY9JtbP6Q4T8ss{n;__WFt;6PQX27y|~mV^9b4Q8jq>`|hFG#8`gnjrNWBn&?^@N3L>G?rg}`|c(%!`dX1r}xiDUUIR^afI zZt#`weD^z9beL6e=v%OS>5JfVL}GD>F~|;L1QEna_^7X8>_!|*VdYxbzBdvT6W11) za-M9oscp!r8WdX2O0a5vT2+uZyV`L7w$?fD*dHU~L|fH-M?j1+$pIX~3%C9i9UDFf zI`;8^)y0NJ5t+(ldGk655KAQa-3Utt0xs_6BU<2vfIRvU)4`yZC|y3sm&5Fs=Yh*m z{A^Hv=UnGv^|#Cd$zPk_jHtD`^&kcAZ*1^5)YIwtd3-)FOJ3)+NDm~Mt#NcdupBUk z%QQ%UVP`1k(bU^pOrIIMl-UAUft+%4(e1k*&6k-X9 z9mHWH`-aBGVX>3FLudC8+CNk_VeDa&NN74yM^?>W5#o+^u*9$&fr~@@aYciuRKFq3 zGKj$p=mUGXAzK!2lUsvkHOGYi%^#(cJmCA@dWZEP@fLO9f{l-NAUxsE#R$CVEbn(q zbKmdi_n{$BV2dZ(z{gofJ^X>;aUVS42wyk?sd{ONhJJT@%<3Fqe>LVBL3NK_$nF$AiXn{}v@f)`*%Jq;p!c982s7f2vx z4|4o^D*aRx^x)f09pvKd11<-4P(@u^m<&U|uwyRs5gkRopWz zjs@NqQOv_Xs1?bS3j)rS0y3aWB~^$S#QD_SMr>dQTE&i3N~sx6d3_k{jRXg_hB|8~H&1Iv~a9P{dT^UpCEywk(JB!Jj5|PuiRpO~Ds^ z{e!S%pFiM(Go_bG@Zb34+j8)N8O%dHuwNh!B0kJt|V#OIwKiI=P02~CYVk-h%DSF&LtOi%y0|J-(}BG0kW zP}##@j0&v;{u6Vnf7YHX?*3a-uTg9*TIt+OR;| ztOPll<2kxVh|t*DlmG{zquV%!hk(e7bxqM_(8v%4++blp8b=o%L_D-luNcI=@WMUB z3f>$IcA13#QXGVT@Kbaogh{DJL`+0Q)JK0sMe$&fkDvrn@y?p@#Z73-PW%Y&ZRFXp z3u@E_?r9`raOCB&#z<;KLxjax*d$(rBLq~&YGlS{q~K??q>7D(VJwg938h1NAzJvP zW-Lz%8blU791SjI=Z%P!Y0_5cE3U>|zNLX^(0k;Qe9%W;0wz(^iZVGzfZzv>1SXSQ2={HsVhV>JmBjlI zg<~dWessu(uwy=zNM&*+Pd<-I#)eeh2V!>Skr0V#3eC!Wgjcf0X_n?|!e(sB=4{et zZQADlZQ^Eb>gI0pW^elDZvtm)u>%4Cpl}RlagquP2Iq1zXLCBILl^-ZxX3!hL3PG~ z5o|pf?9isyJv3Og7vA;~p96W^#sznvP27U)BMlo*;QgTiQxVxbP8Cp)Zz4rHivn2SnaD0%$n zaD1q1d}okq$j-2i2wDX@z*hEYi<17L9X?V8^eAD#=bA!5nWE=(aw#07CrQV*Vghhal@LW#jK*WAUQFqkO{Yd6PK-HJQh)h^s>JbGyDC5mJMyEolRT$0|UTLYC zYNBkYrlcu+iUf^5Xmth#m$E7Xy=iu8DM!>Qo4#s;%xA7zg`k?@Ni;+#0TPTE-IBRu7;<+M5q$Q+nwsV zvTK{Ts-|Tr9OzcO#wmTWCmf`M8pOe;V5mCGCmgWMh2E;J!l}8m=|S|XtJY`#b*h0n zpu@ou1%WIFsWwDf9jRPN?BRUaRLCFCkrf086%=)tNX$cA;Gkj<2>7ii&ICz1Y@S5? z6Ly^gYnW^Qt!PoyRJ-cz&Vq@n&Qx`tS#{nheL_HWLV$y+XPdgJus|%r4y@C{X`A-w zhJs7e!e4{npc)2PPb3)Lfmqhg;8;Dt-kn$FQ5Seo1ju#~fuNpMe1~jxm`l8%#YKyM z{3s%ZQ_Wt+alH}G`t9Fd$-6#;;0g|f(x`hHEz&|jn^G;*+A5qHMANpZgJS1=28q>r zEzNyJp`FA292%#s&ZzYSjo8^&mfWAM0}k#$`dyjf1cvCUh7@%dxk5ny&3PuxTA$up zMU`C{;QH?GLP?rB72&3X;Sz1)a_Hh}Y4PssK~V1FZp8BvtU)|)sz&b9Uaept%5oe4 zzp)@GAxjcY?05E;gw{(#C-rtckt?>_NDy4y;3cQZI$xXhT%-6<=@vhDz@c`)b6t8=Otx zdm)Mog5U@f2v6~x0Y23ln}q#xNBr8ZRqTyk7^%KBsrzk24)YA_=8rmna1a~vA?t^% zS|>xSs&%$1(KfO2K4^y)E_@0L^DeTWJSam1dBTEK|LHUuxgSBW}A9m32sMMOSmlX6hgIS{k!>6>E3VK&_? zB13aD8wZY}Cl-GxdIkv-XR#C8sS;B%N1P`d0Ktx|1D6^BIfwH&D=!#J@Ofe}8B-+$ z(4=4dQ@_h*CiQtRO2JhJ zq*S$&v@NFi!%sz~)TniSy=*zjW z(Z2*t#_^Yl&cneZ%tW`S!@TGrU);snNLN#d#w?EiYe$Lht@RRZkz|V&6Go_T@FQlU zhgy2=&FIx0uf*yp2dNc_l%lp<|8Q%I_G=%um(VtpxLU5k*acOgk4fR$SP)v94cMT~ zXvAY#{^s1YmT>!)-tdj=HiQ`j&fr|es77>eH_qckPWTiMM-Y$ZaE>vl1?Y$l>6p$# zs?IO}H}L59@ceVQsLuc`xbZ|de>ZsVAkSs+Df7S)Kt&ISOSqz z&-n;Q0C`UUyT+etPmsjVw$v{y+Rwo_wp#4Z7fF|gr;h-cxcKB=5HjD<&6sx6n%8L1 zcau$wc?$;(;Ro@Iv<;E6QF*gjd6qw$mPZ@^mrvW4gLw}bQI6Y*dJ9eyJy8@DB3n|$ zxlNT8S%tbL_ho;W7?oWoffGk4Qs4d^S`ZQ)B`GrF5eM$kK@jUGZMYl(I)6oLCT-Fp zg^Mudk}G|ZPc*uoQ!AufdY)g#p$C#dTvIlwk||+RD{XqE$3`(76S8JvHx1LN^HR_F z(*7Kyq`NqL9BVQK&fe6yGeHw@2s3Mix~X&1BTYK2!_tsbU#y*zj6GpPu+wcfdpx1b zJk`@Z={8|Ro!5mO*f|upf4jF+l(=IQxQ~0cqdP+(ghzo?%$RvZoP$KOdAhw^ONlK^ zbuM9PX#Vz+UXj#JiLdE)mji;VSs9i8y(QIBVa5zoDsmtE2#Rf15tUW+l~!bV^{M8!*1bG$fJ zmXSaEjHR_^eb!`mRyuW!X+d_jkJ~fT=4-`P5^1&}+7?CT)^7EdO)`9N4OjLlv)~|C zQS>$m(=gAOZFTLhhW^)`xrBGAEtYMq*~{4pOV@s3S9S@@i8Yu@%KhUJC41RDd5Bl3 zK{v!-Scdgoe4&^LKLmtLJnG?nip56PKE#xD*ix|Vbi)SDC)(pHzLBsP@Zp9%j*2<~ zn>yLrZtI%S@0!){7|>TA)7R$zkVSo&&puHk8D$IvlQ|ibm4%d974KphY?v>XH5}?{ z>Pq36+IJVeO$O(B?t2xYj+9dKGI{ty`ReR^8La6suU_Y`UN!CNS7wm%rVbkKx#}7igbM7E`JrM7m zya)IMDy}M6WZ}brtCGa`4t45-pr^8Cd(QAd#DNEIwTxLa=Y#wDQRUsbc3!IM>iIht zY2>-nsZp;Ep4{HSbmyX*X5L&l+v3L&rkw}DA98_v`zp_lP_jvpzh5tB?)-dw`4Ai$ z5U9@K1qc{FQd}rfql4JVFQSPK3h*HQ23iOmhe}XK9R;rS#xe&t()tN3s3^(l1 zLk>aw5X5sx98ts$PgF6*3|Dlq#Slw0F-8q*q;W=d1ac>z2mY}Ktoei-l1Qz*3NoyJ zo)hSv2atpSfpa|ns*A4O{5j~ac&dVMEAkHNaVggjdO)AL9uSC^Dz|EEBabAbY#%it z*bGfMLlW~KGR?$FPpa^QPozEtvJ23y;v7>qfeyHGszre-5}_y&=&VdXmz;Akfu@UY z&PpK_NK%A&lMEi&_&Ufu`O>OTE=I@nRHQ#Yoz)=^*115ThZcn5f^{T>z<~VNvG1T@ zd1XgG`k-K;R~95f$k+>p?QcPgjCIJttSFq7+itxba-VbjnWwLB%{`Z@BlC&}wvf_^ zGPZ;G=`Eyr&e0MAb{@FrK02w=_kk&~nk`>JWo@#Z9nawx%7wXN^Po2&h;ykqb&HbW zST99b;f$;QisW8PMHY!;2;6a)wy-G9Gf@cec|b>zUXB?dSr3}$pGmVScRGea##iI1 z@;L`D2sRbyXRC1587rPq76_hm_>t2~fl|FWXRg$F8ljm(O8QZBi^P^}VmTuFKTXj_ z5Bwj{Cr{@YwLb^x64bJfKPAAany=KyhIZYq+0xZbGU zkkIkx0eg!3CrFIv`FtK$z3Mxwz5c=Ho~HzsRh_5siNr^m!}SLrd+>pEDu@M=*ehPl zn5Q0pClx!#czH!<66}qaJ2!R zV|`cQ$7arVkne>rQ~x{1^8$#!!g0j|xne;Hk|hv!h>(OKIpMNAP%d0KC}uBQRtmeL z5EitsZW&42MV^I~ZG8}kK@{Q;3wOAy#A7ZGa39Uy@ef|yBVi$lQWQg?4tzXiA5^>t zh+G8$b@Zbj%(Kc~@Zpbt9Ds_{yVOSV@sEE*;ze_z;&?-jNUg zP3{9|UR0zX8~Mm9`e+}ey3Z;Z84^);(JG}pWhw*SJtr)AGHihn#`Cw zXqiP15)qn3y1)h0v5si*jaAXq<~F(6O_3OJR{X#v;27vlbDpzX>G%;kr=m_y35g%$ z+lo8cSx0Yr#HzF`QNB30>1i6}}8A#_N-3}QoBT2pQ6;~pSoCr))5 zmUXz%nPK6nO^I4mqaGEhNmc4nnc7sRJ{77_mFiTfT2-rF6{}g*>Q=ehRj+>k6|7-J z7dqAfQ?Z^Et!Y*3TBm{;wmvl-dVA74o@OB*}ay zu!#-n(UNM)!YWm74jExbtpYc><%?`~6$xGsVp((Tv!DM|>}Wq#&>b8!EbaIQy)<>j z)AjT(acoMOkTl0*ijlNMy$58bvfIT{C#mSTP&S#wTczR?3Y4Wv+e)aZxbASXJ@g`h zzV*Z0UbkD|^r7Tf3xNsZ<7LLZlX&Imqy5Efiw9tw)UbP0_N=G717$2y>!Ayv)}*m{ysERkR)d)7zqG6CBd_ zhUCNY1@2TstY0V)D?kJ04_&hrUCjb3Z~bL4baCaZf^^hZlBMBL~ytdrse|$O2lFW)aQuhFU2(Zpix${8+?PaFqS<74&^qH%2k2fDg zA0Qe`q&rlbLJvAV?nt6P>`Uc7{}~~dj#oS85}pxz@zVm#j;00KY4CKhNf3dDJ~WvR zPN%t@$iwj5xj1E?Ef}dkCjhv<@#`Vg>t_0mrGpc4A*(f4K5OqBY@;ig4#UH z2s&B9gX#Zpy3l=oo^>d(9temYmCcCqn^T?WCiLVLM@)0C-z7d*H?!7jgWACGb}x~z zosW8IqaU|tVjy)OA9@w{_rbogksaDb<$8;sx?27R?5N@O*1e?w9bjTp!CT2o$Dh^Bq&jlVN zXZEB@1`z@segqBo!5?DAfkY`Jcp<(B@D_su9gGRi&Vzvn=1)WeO8^55c@IOTqzWMe z3+167E<|#4;~Bw^Fe*nNV#|awWJ*Y)M5MxzujyM8nMxV>ahMYF)TVx z`rwQlLBt%FBrW3QX!5Z`>MkqnF&~Z*0_*{1ARu*2r9A9NI3^Lq;tL=%WFH5rKITS0 zKG8oGZ-+)v0}lkc6htG=W=dEQ+lWiul7ih<^4wT5-CT0rT2dxoawcPvCWnG4oB}EY zvZ`wFAWo)4@S^w>MNZlxef*6m%_R1OgMrj>8NKl!ol%~wZ+;#lGW6&+GQ(dyV`N_A z%m@Yr-9t70@DG{s5rc#t$L#fRLwM{k0_QI+iD^5;!#b`5eH6+@^xwNjA&Byun9k}T2bBBzU2MsSA^|70V(gStwQGMh~!8l)f~#3Z{hn@o@N zR?qWLZ!}NSG*eUcP;)g^6Gli=Lv}>rfF!JZQd6!&oPZ1h4&V?wB~qj$B+^V&LM~*M zE675Efxv_;!7$0vgfZr49o$5Z4uxgv#0#f_IeU{Tws8%yvkftkl6*r>+R{-PWt`UW zQ$oczyK+p%hq1VGNYpbiNrf?&HOrC5X|StP4j zqzhPtg;+%LKdz;&GVc|=Wp>ErtZZ{CY|p|VEZgQ~28&Z)7)Bl1QiYBW-b8|6^u<#S zM*KPkR3_&tbmuDJifEP9+yu4B*E+=y~r*jqtbVA1+ zhYJZ$r_WaBQd(y-lt*@m$9DEpK=7zWEzEa-M|ftZcv^H*uV;C%LW4Nyej3wyIu(2P zGhJMed)o4XDu{f{XM8M>fU?4X;75LnCRXhS=Pu=^q>q2f4uED=EFh?W+{ai+m3kH^ z3CA>jsFf?e%U2XO)C!7ieQd;rf4b(_5p%QA-Sk5!00$lrHsxfjcf*z#0((3hNI zZYB3BR4c#S;U64O9dnYlZf1f`Ct`t!dWlN70M)mMWPs;G9`4RxiNt&JqI)g3eGdY; zQnW0nOFA$Qd8LcFme*?^I0oUjG`MTb9w34HfxPCyyzBwJUT?j~OPl_esOsy!>M%QG z_#qQ`NESFO8u)N^|JOhJYi9uLGwbF~`*%KEk%PS|Y`L((Sc@H6FkFf*Eh@|_aw;S; zj7J@@n_Rf5XgDvp_%Js(qZ}9+#TbW&_c2rK@RZGbJ5VI}G*_T)jk7kgZj3GJl|pY< zH`6MKi;P3rL3$uEB+Q`6)Jaq==p3f(J|K20SWSss4b^@P(1Z=sBBRtm=AC@a&-#)p z7@5;z#vfqq0c4HV%u9l^0((<%*D$2lQZ3XZIW|)HLTUrdBI!wH8Dk>`F*(_hnR0{N zNFO@N(O~Hqbvb7CB2J!6V93af(5RK|49{qJJhT%6)@jyit(0@?BG=*AK61t4SOg_h z#^QL|u%+72|K{32^CVzWC2Mk>Z_*~;xt-y;+|+rV*}0zG`6t}%nz1Tu>CN8q3y^CD zDdor!1r9jlEPH(j>)4L#YVPX-Z|DY3Up9&C{HN>wPLs7|p|_4nnv8@WQSM&mA9lDa z5IFCmZtA?~q92-i1W!HmPU`sX=VET*@(1W@I*+nR?Xr%e$9Ny?0d~6R=#nl-cAB9d z@u!2@R4`R_z;5s&j;6uFUVL{>z9a7DZlo&|PPzF%BJTuEQ6Maje7#z;CJ$~ZuOKcj zh?yb4B@6@TReKT-r0gaj}1t533hS}DZU z|4{@{5R6|p7Crc?H1rlx7(#SWj7}R-gRwS-(H4zSNC*-iXQU!|&mVznA~A%dsRGK8 zGa(l;#I5E>zxXY?u^jm`#LUt!z5>nf_q4ZMaGN$`-VuVX#?8OHff%MKN#iNg@hi4w z2LQ$$q6Q*>Da^6!G4V7qH4-E_(ynM6GeZ)`4T2C!ZoJzDh%Z5<~>(w2ksD2Aba>4e*47IE;fX7xO*J^3?uO*T*vL{&G|W zQ#_)wJPdQe4erc;9Xs+{{<`ri)f_6p63K6!`NsIzeS0mnvSqBj*nvqml2Ol>{{+ov zBWKJ&AM~LfaK_GqDZw5ygSC4yznU`X$^VukYHfaU|dge&9jR z;P+bK6+Yqh+Tr`!WM&h3qe?^50XO|2k1Je?4jR(rL>HS;yuFBsMM6E{)7dd4FDIN^ zv)z$>O#rn#U*$TfV&VE`dJ{j{C;qU#FzIhR|4Kc<-OhOvf3lPQ?x7#z z!5S;b=wH!4a|J;2V?dqlScpX+3N%5NWkD~iKp!;Hw|=X6tjAOLLbIHzk{Hs?TO>fV zUPN>Yy~sq3@Bf;{OOd8Hg)}6Frf9Ns@28?n@!mqdRBEWEX~~pJwc<>t{~}HGUc5o+ z@fGq#O$KF()MGN+UGhF-7yl}veq}mCH=G8~6aUNe5PvX#Jf0%)e1ub?UImfsP0cw@ z>E=G@^x0}3TfjnJw?1$D)a-|MQ1uwdtKv`(crWr{9)=Lj^&4|E$BZKN9wt?E68b8N z6@ieoT=Az__osj8XM>crTcMETtu_1aL|e1{ExdIrz*U~c75rt@T&V*7y~tH#hEreX zR@Hl7?x9k!A0YUhdk3LlL4W7|8C=M)puKbH44%VRP~JISX6Dsv|56oqhsYl)s@xn9kxl`0Fd5U7?Y=mE;yhEzQ?U3X4i)W3iO z3m#0ku;Igq6DzeSGpfFR3lW~1e6D6e1n1h>REIC;KFtO1QKsx~p}Kzk&@z3O&mYWv zLk+64=i1-rnU))_>--v?Y}yZOgEoloT_0~G|%IqVQ6onjz{DB_4DHg&-T|LUw`Kvirl#aDqP#wg>A zG}dS%Q;dEx48M%h$VR9fW}U-#^=!*Eh| z>E)MTLeP$uqQ$2eUr2^oqZ$76Gge^sAi&Q*9YV#Xn`%0F=bL%<>F1we8lV`rO0kU+bs`9#oZHI;n`Aek$syq?T&xsi>x^>Z+`^>gubo z#wzQqwAO0tt+?i@>#n@^>g%t-1}p5a=&bYTu*fE>Y+><~#40-opo18+(l!L`ve@dH zP6;f;$4-@ZA(fXw+jbixUz8o1?YdAlI@z%yVmME#|LL5Q=Bf%7majqkvg>c2+*Wl} zolIR&m0t3JtJJs!84Lx&Bx0$hr2kfYH_1>#$zk<z?D_Mko^SYQt6PqkX%L2UAK%%yX|+3 zPCLcVKKn@Bj|Jz;$g;&Hrt1-?dji~i&&KbbP*kw(WB4xEtTQk zE&4(Ruwd805S(6B>S?)dSI_IHE>Z6)E_vFNnvj*O?GEDVch`m3NoLvz2-h&_5_1UB450Cde5D`53D3?#q zYFDP7K0UjKa`xelg}^U3+FOZ$o=32U;KLvPH~^R4A-k-j|Vg)ND#oE z{`luRe|-)D>u?=g7=}05txk2cThY$+;zHVSrAlaVn8JA1mxj>ehd}(Hw1ODKAreuD z5I7<2Hp_MGY&1dfiI42)b9oO&R@{~ozf2L$g?kA6JBS%%byJ?e3f0y5!kbT%=Cp@Z0oa&L2#;hZgfaF(YP8l3oimZDN zAXp+7*~sOphbnRBXTkO$1`llBPZKSo)?WbJHqEEJv4@P?NcLSS}rgB=8>X-&Cg z6AGZard`%CG}4z(wLNfn8%F_!AX(6at?YdBp(kDNJ8e-5RHE20l9RF zMb4!+ zKS^ClV;%{;@Z{#B4**R&9*_?R?4Wt`5Gqi8cv}b3;F=V4qE$)q;KfDqlPikaWFE^b2u8^@r$^z@ASwJr^F&2 zuE`n$;qyp%Au|T*4j#$I4MjvjF?MgZPPk2=ad#o-wFz9qYuC9YIj#^$vRVc3**cc!0NVK9!yAU*?R!Dq7w4xJTm_Zj>D?TNop@(}E5{I}W7CAt( zQkuw%DZ(uK~3 zqDwM5W(Qg;GsLe5U1&n<8SQE-)Y{a(wzjj)?R#R|+uOcpLEHh-Ai=9vbH41P-?1a$ z6~ttOUC3h%q7Q`_B) zBA|tox*-dP_=hxJkeM>t;sJk2LH2Qve#8UC_t@yfb&V~!l|{QzW>I!iC&LS{Bb)`P zIXl=QunVNn*bvZpIL#|M8ScU_~7%7{$yz=0W>;z=$ufE(khYvq%UwM)tM0eIApZl#hgDBpJF1LP!osM7r9S zT(w6~kR-^;+@tvnLCD>gVtkR1gdr&&F~=8_{egJ+3LVA7s} z-y|pa*vUW8Vv$V;B{q+zdciUk0<${>0Tx}+A_wRegwil(kwdzpfU(1X+m&qA)MSN{ zdIHFD|F35g7$q9(#2=VJF*m^*n*xHP!6T=U8cuN_%;6ouu_^Y4LcFmY4>ud%Au0RO zf~|oc&G8%{wsF+KBTDgj0Wu)_P#`XtAn2zd4w4-a@_g>GK^KyI8&W3$xPe-T7$=e< zHJ5=~sCpeZ7&`(iOmY}RVk96GhHU6NYIP+dHZg68Rv5!cA>wGhvM2f?Cv*}OdN_xG z*fxS9Fb#-w=@N*(<1X|CB9Zbdp+Xp$vK%D16px6AmUxMnn2DOWiJaJpp7@EN7>c4e zilkVIrg(}tQ!M9(imWIs&C-gnh%4pdEk~zh#x{%RVkogFEQ+{_i6JlaqCUGgjDQj_ z|6L(=4Iwvjg*tg-5XzV|akwSK_$zg|h)uyUQlk!qR33ITW6!2CER%IEvsq6j%QDhU4Ut*5- zxR5&YFyAycO0hS#czOmgUJ?n78px0nWsOTQIE8~04?#kU6L%2sIBz031v!c3D2y7} zl0HIYPj+NAG?5KKdR#$6wOBi|gF6ujhQ#P@!Gez_Q9O$!Z_&jN%+nq~l5jR5J+eVP zPjNv0kU;B$OW(5)6f`~;WIq3ZKElX8Atg~!A(d1)KMPSm_me+gvyLwLi6``P|7?XY zEtHer#Slj4dBnzys93h zi4<$pMp%bk@$e5_C2)O~b#*izN9hywI3chUNQ1PEh?HEsIZ)lnP~Qnp4i#S!VU z1p)RqQ*{DVNV1?by<-Y7Li-9#*_gI6BR+MUD*dTMeOFpv7AL`Fy6; znFog?JStiq)LNZo6S3u0Kv-KW`JkbAFxbTv6)2Z4v|dXFbE7jid_{EVRTb)0p;wlX zy9i$RGO>mW|$F__TY7m*~r4X=ecF}B}+Gt59o!p6? z?s}c@+OF~Ho$o5I_DZkw3ZC`KPUBW?_TY<9cc$dBZtVtJS2b^nwSD;ZZbGqdI9hy7 z1#lH5g$4I$1jm$!k#Qr}4-QwYX0u71rbpf@;Gy>!y-4Avhuid1<`XqH#b5z zp-*;~v-6j`$aMbTbiX2$^oDf?QB<&Ybw9Xuy|q47XDwmp6oF@U4Qmtjw|41dQ%{Q& zaL2TBCw?0;CodLpAnT~l6i!oCi;zksnFo5Er%mYudgPjO|E6bpI2((sCoDdjp2Wcq z_CPlJ)n+$VTD(VS;Rt-Sw?`Hcq731F-=}=mhkaHxAvpmy)3-j$cYXWdKHBFLh?{&f zL3iWVX9@{zlqX|BhrYzQi=DgDJp5e5FEi0Ji-1;P?JHy(ioh<8vG{~d=4A@!5|#MO47k1 zT*4-N!XQGzD7?Zf+`>(v!Y&-cGTg#2Ji|78!yjD3IK0C=Y`{9)!$2IwpZmi?T*OA) zl0pnnNQ^SAqrRf$X5DhEhUd2`C;0k~U3p z-MQQ6@QK!o5BIs#B-@>vr}7_ec?a|P11`|sxpbq?+1pLMWogwcO0aWyL3M1@t697M zhCQ%5`H{Bo?by+-`rUTx@BMD5u3o zJkB9k5IVO>IFNJD9hHuBg)R6GfbQiK-fG)1q>gGA6qF8W;wALjcMzNiMT+R1V_}GR z$wS~m@B9;qJ^Gx(%RurSV9x>P@Pkl4O7e$aKK2Ay?0bc0Qa zWRp17v!MIR5ToUwJYc8HA5Su00hGm&_>ByWz&Xw2>XadRCUP0`f)7d~e-jm@# ze-e4lpcY;E5Qbk8)@Y!Q;z^Tg1_^B zkaPI>^Und03M9`y|2*JNJr}uiK)U{HS?xXP@&l+q@7#kRe(Va=&b$6Z!l6Lw(EEVB z7rk?UKmRe8@4o-^3&A>({Nv-E=fW#7Lh9&au|4(t!;3paGW^dzBomaex)MK}Zo~so zY;h!e4m7Pr3Y(0N!}`7~vCJ12wDP(Ob^LM2BbSUH%0i>d@<1;08*{}$(`PWkQ1>i# zPn=H7DvhB+Flwo)#X3-`0~s(Pd1SYE_SylO2WvyV7DUh8c;Af<1bOHGy?5Vu{|z`j zf&*T7--r9n_uz>KzPRC!BObZp4BvCCWWzd?&N}h@lMh10UJgM&Lk=`grr8b@y2{=@ zv@N0#+W74`9~x|HkpA3LPb3>lv<}M%*t1Wy;_80iz4z$@@;wr=gWo;)7zd_0#oPD5 zy%Raddp`I9m;CY)u46Gi(I+?%?z;27P@(ylfgb|A_>-kQ2!#9qaOm$Y@%QyGf9v?= zs~H4VR}t;igL~!^2><*yF#uW&f9J@Z{?>Pn_PsBD^Q&LFASglgDewWx>tFaBm_UV4 zFF)2p9tgqbleL{HY^hoi+T7$efs_qRu7ZFJYbZ9>;1CL(g1`;`S!6bZ)J-=QY zNTKLK5bp8gHvb@wLEv}*LOtLCqSKb_4Dz}zoyK|5g23s(lo1^TvSKAlhd+j=KuQ+m z0DvUez#uuNNm_(b5O~KqA~BGDSh9`}7*snR@Hs^e%prvW%>kk%O3}H)Py$)xl1@1g z?x~WMdyL~Jy%fq(mXenO@uk0j=}Ja6B$g1EWif4u%VzE}IjLM`D;2^?9eT2oLs=UO zz;>P)&hTxqD%EMiCMq7LYEal}(?Bg8pP?14vrjFDlq>zjnTqBsJt<06T0o9sa-{|VAwl#(Q;>3ueB=udH1jb$;iOD95O}~n1me?!nDQVxJs(YF zGtrBHGMZC;YEBa=5S}vi9|=(hP(ehhbAX1Z5HPBWlDbp~G}RzlEl5$x3}soL1LR!uFBCjB^s)d)CvK4^aGE%5y)%{g4~HIH%mK8EodoHTmp61HXCE^ zb_r4_+(g%`9i8quQf6K3>ZZ8~Iq!D`!rZdDH@Ue5r%<}4LwO1|R*gN#3=i8*H6@sa za7u7Ip-`g88pNIg864pz=Qs^FPH!9rv4=yv;SrmdaU}lmhGS-rbVXvgjmhjoNDBd; zqA|H<7;WhU@~)j;ZzHTtt82?E+dg(=9rf^sF};hAcR2aUe2v*Ff6L@2L%F7l>aTt` zX56G2`61F3GRbswfX~RIq}u&5T#<=hf^?bxt~bseN43o6{l0cS4^Zbo9F!2nalmWaBi&ZiodGioqFF0EKki3c5JtEhzwf?+R4 zQH)^xqN&HY>QtY)imi?{s%2e8fw%*K_PFd~WbBaB^7kD3JO}~L2iAe?Lw>&w_8TpV zkV4(5tXR70O(B4wkQD1s>veRRkqD-2W4V_P*xTrkiC?J-q}mXH<~p{cR&)^r&D1Wo zQ^`GBuO?d~SM{iXFI``>GZYQLwN5O0q=oUlO?U?K3S8R4pi zYMT)|f+&!TUw|Dn!p;TO!74R*eB*`xrFe@nJ~xJ7I4=+N$2?%1#zZ$H9^X|5ybr<; z(H7)%!FFC-b$;K2I4_eAQO7F@qV%?IG(#d4NU@xLka_&$Pz)LFhT1AHWpkI@`GD_B z!PIqySRLyNc{3ul4S|3T>XvPtdb-8lT9Tnl+)2H!+~<7|x7+$0L*IGTug)g|t$p7F z@jC?IE_J}q9eeHm2j1bm_kfw-53+ z6dsT(yTV>VSOUBv5bW?8EZ_mdH7lVeD@AyOq@sjO*m|6%X)YIini3bfXAtr5F6yEm zj*>*kHb9xON73^D`v58OL556sEzD+g{_!EC=2>(I0r0Re4fAsb6@~@T8)e8N%CR(F zrw;bOFp~r+0yr^gcrp?HMKFh`E^GLQ5mb2LGA`w^i0hCKGqWfC0WVZ%baXdx5a3Yo zvJW@%iGFy4F~f;f({@c1h!6mXmMAXdLJ*qhiZsKApxA;Ll`^I%iK*C!xx;o7ql>y$ z5Qd0|lgNsLaRC>g4(s4?bfbk^_!eEL5&R&FRq-s&^b_7#cr=F=;kZT|b&XpgP7aYC z>rpP~s21=6P&T&_w(*TrVFv!t597EK_^6NK*cSb`j|Op7@0b+^AcR#|jkr;C1(_DT zfg8zq5vSvhRG|-wG87gmkOO&+X_1kW!jTObk|H^hBw3Osd6FoZk}A29EZLGS`I7Hw z84(GSG-(r@;TduNR+BC{8_dx*vxkK`R2nmh5y6#RI(Zcjc^gA%CBso1$B`V%F*_RR z6I6DT=twKs5l9D-ChQe@3MMC9StIJf9#&};@hBfdSs(Y29}S|G&yza+#bOAeAah7o z4iYelJQ!hEGS$g;(JOeR5Lp8g&pBhs%9`g?%BQi&I4<^Gj7Wy>! zqBRCOF%)`P@<|anvxiwDp;Oa|O>?0pl%X4%G=cJ=<25ubL!uK3qgKP9lF6ej1Vmnw zX|q{a+i4Kz#B!-eo$drTvf@JGX%Hs{IaMk-SE@K!+F>ZRr6Sg)C{{UINf_rzP@LmA zDsraVgo``oO6|dH>j{11c@P-&AQ3V%^5x=u8!DC4$WIR9iK_SFI&XXU} zGcbeynnJ_0J>6%hEYv_B5m&Wb8NWFA2@M6xMmSVC)8G;7`pYv0F#Jkh6}x06SP&SyO06`q{?xIww5osq zC$dY2i(r>c8GEt_8?l|Vu;j)Q;zUm0VNN`ha!9Be>m(%^3flvB` z819OM03}dd@=pOZuZ?#s3)N5$^@vn;Py|z(1rcNd%TfCFRu~~tBxO<+wO6dzQrlFO zd3Co8N3n}CZ7ut53-?uFHC95!XGP_J1jSZ{dre#AV-lsdfIAR^D}eRZQz6K7h>L`Z zONvOPRFBJf{3f{s)4AGZw=-poJK2T%?Ucm9ZRz<$%b!g`+Th;5i|5aA(ON#Xczl7Gm zgPUCGWq9iAT>*B$LmEV@mub^E5LfuL5WrwZO2JPWVd61i6_&J;bthh0Vqj{eC5)vf ztfeW;r6%0MlEY#yCcb+?yaX|^%X><;kz+O7radNA>>3enE4>?4WFCQJN=8am#%S7B zkKC5TRyIu2dtCZE#9kH=VfKQ6W@hkKXpmdAh=xCfdcRT3ipOV2Rs4AIHE?96#e}A3 zI;&`3?7NGm#Lh^xL>eOo1}c;W!k1PmM!RVn>}jn5YOEn@AWVBI60Ya}O0J7+u3^N; zkL<{*rpS?;MYe`(OF6^Bs}R0s5S?s>m*X)6actn_b;`)L^!jYhCY6>;QwY})*QQ+t zjJaRNw+1X{i=uB1TyAuAZkyYJ0vCDjc3-dj#*u4o_m&a)7H-a%xxQ@00mp6*Sa7NP z%w0^lrmGP0JG8CqniE%XBR4}Q$8ivFav`THBUf?+G0rLXU`$$_S%|EC5py%QYnzM^ zIM=78XlFfV5I~27q8lTE=SL+-AI2Laj^}18i^P>Tcxa~(T9?q9XL&9wc2zmi4qbSM zG*<$Mc?sRnGuwc6CwT^^cL`0=iN~{j#7f5a%9d{@Hy=Nj#a3o#LW*CZW zH`5G((Z<|Yo_8x!DjTdvFsz4qIV5`Fff>5{da@^bQ+gP;XP);g5WMGmNCJFV-Fv^+ zAZ0ud=#YF#mO#xne9zZ94>5iBP<;jAANY`cT|$|WN^mP^gUj204RL<=kbdh&Fg&<_ z&Pabya({sBem#gr=qSa%N?gA&Nul+A+92-!MVG=c4dtg912h#f{qguX3>NvJCc358F1 z!QlzqOBlNx{H#u!5WoAJPT{U!2#O6--C@Wj#ZsJNl`hTy2#anwpJMw=bysKvH(iSSiHiJj;0~VQ^g-X>y@-JUjnYVs@hsg{ zLBkTUjapHTK|$lYDZ^o5Y~JQ>{^oEV=W;&h zbYACneiJfz=X#DB4_y?WvF9PelU->liYXgH*_aFe3FtY|<(YgD!lADxai7no9D92raV+QA)5?W9!8POljf>`0c1eiKEWme#|TbovjwUMG7;z8AewTMD7liq*)pD4!k(hC^n9y$OR-5WG;jWii znHOdpv5t$zJ`bHKC4fdH$vzQ5Mw+awA(+k=s(J1bq3#B;58r+f^v)5-xfW+q>JS~9 zhYXZDgzFX&-PoS(UaruW!w>s#@6QFCfG3>y;+&3t?FyadHv#N^(VS-p5)7{q9WR=5 z5uJK`wBnJZ)Oww==PD)-h2Ht;F_YX_F3)`bQJyh&@CbD*hnNofQ11}Xp0WWg(xNPH zINl3kpHHdK79OJ_S`q)LE&&=N0~(|*dZ7OhFt4iQb_32u=-s`8`RhUYv6Y;0@5U9k1Ld7bnrb;T$v#9uI z{9(+h2UORudaC4;s=nW=6l6i2imST+dOy56s>lzlBqTuVDG|G05b!V$;zE3nNUUKz z{dlPUc{F^F7_8NwK=yB`8HFXnPy82=s{nzZ-oFRyAV9EpE|NWb5B{Y)7*XOxiWMzh z#Ap%9Mvf&SmVn~nAV`l8(xoF=F{Q+fCDvWoDAFWKC?!AEe7VuU!ItZ2+Qhi-oVG)~rdldhHsus@1ScA*dU8?!dc@ZQZ_w8&~dJ zx)J4_Gx#>)xqj*-_PcjbUq6cM&e4;Y?*YG~|K?Rx_wT?&b`Kt~i`#B!Ma@JdCd^w| z-@$q3?A5J!7c<33|5m5-w=ZJ{2!V63gMgQR>e(Tlea?ZW zD1QFYF(P&R$}BBOr@HDhL>iK@iN-x zZ~L97VCN79ZsnH$U+(gtb0`&;E}h^T(OH=;l=j$S4^nnGVj~Ls!;;b#5sKBUtq9wR z=%KrAy1}&DZoKop8v?%j{+ph?`5rv)!u9t1@5Ad}9B{=GC;Vr72#UnwtS`s>AadvW zO}nbtI!GupCh~_Di4G{#RnYg1H6osI6)qysBt37%b?WiQIF9jor+44`{5d+4b`y$s z-+RY1c7T_jxntP{uKlf&Pkt1FyAFuw9eL1%IeM9g=D23qbrf`U0bh^E=ZK0w9(hy2 zPrqpA$4`2E*ZEBtcimCDKKt#d#+b`8Czq|ArE4nz+p{K;wuod13M4w)K^TZE2&4@i zEx8ihC?dE2h>hhdVyVgpl~NY6c#wo5EMW*wxIzpg71wz08BVxx+BJ#-xvV%k$dC)poAfZu$ zQk2np7AYGfwzw&hlDA~hll(Cc%i+?OG`b;N5F|cL!HXa8fqx! z4g|DAscy!FQTKzC8^HuKs`c|b@WbZ|ua=u!`HkC!e#3(=PVUGixqg@plOz?;~FMmA19=Pii1iCp7vd$w`cd?~K zcrmGad@)RDy2p7EvJgRq6#}}%2SePNJ1SxX0sgoL0?fb|(5WML`?!Za_OZG-u7e=| z`LIVmqGQ-|AXc&Fi`O~&dXa?u10VMw2zKTe88or!A7;Xha9f z;zL!VB?vxDi>0xawRL=z3qRl*J$UfN9&ydhVH3Mp;8CQw{W$JPDFYG~c)(&82v!NOgkMz3S0e17 zuYH}hwocxpStm-XdKJ822CoRJ7KsPy9spQ(1u9fV%I8E5MUZ`D_#RO4qm}vrB!3Fm zvlCedzD^7Qc=XXB_?Y25rZi!1;=`(Mc}G6Fn!|Le!ya9YO@`-~Fnkashf&J^&5tMC z;fdHd#BE6kKKvn>3`1bZ>&VAH{t<~7&ls?)WhX!n;v|B^CRQ>oGuE!0Pe{~4fd<&A4N8JDJ!(>y+Ad40Q4dXxnslU#)UB>2MliN&ZNZw>*|PPmbv+lD zLV*Qu5z0Mwu!Ab^+Std=TswyS;ThUaq{z028T`?YUMg7H)YeNRp}nGOS9{xa>Grq9 zJxcZp*r-Xl^tjc%Zs6D$Da}?aF*^DKcwz*CpTmM$Nzf0X}eo7u?_n zM|i>&zHo*&+~E(0c*G?>af(;m;uptw#x=fij&~fX=vW85Jw9@hBby!aEIDwpmvWY4 z8YL{Kk^@_UkqEwA?8I=O4&i-VE1a4<+eH#xHJr zT;ws2gg6l$M)#MtGkuSft=j2im&n~coAGI%;ykpDu&_|3m=qQq_R&SZ{kD*Po=2JpKlb7LM9T9n_MS*P zR`+4CmtEA))3h{NQbPV2s1#nR&%S0C@!WFF%o+V^eH+niLxm>fMSye zH=3}mnu~QPvI)}%(6O-&+Ld)^jW!Dus6Y;N0IkKqEV^(93G)Z#%Z(!B2lIJ{dr%UG z5TABH9e+5dT_Hk(ctZ4e2N(0KDv81=T$1(qK}53)8T1GL8q_c%N|%A)1%$bWMuQsb zQA6<=Ln9L(A0#x9D?#8`!PZH=rWiseghDCQL%|S2Gwj0#+Zt8!yZ{7|0aS?slO>K2 z2}*>PUfZu;qoobvm%wQp!GRpZDMiE)#ZzP)Rdk%lNyS%u99WE;uDS=Svq0;?K#cg6 zc=!kXcp;tfK$$Te*gJ>iz&;H;wfDQ9*4ewh3p~#%LhMLAz^aExU_-cYEa#{P8}p7G zY^Q|LGDOj`ynu&!n6k1$GQ$eAdRV(7jEi-cK?G1NE19x;V8;hwtUvjxd+?0P2(%)b zta`jhcZ7?%s)rcTk+su@ee?{+@~k4Wt7)`HYXr0Zd?=W3;)N%x2YV0*f*>EOnn>|c zNQMlZaD+&BL&myjMlLDGb0n*D6v%d*4SlQ!emsblbc~lQ$%h%yTe7YBjkw+7~ zu`G-p`4KDur{PFTZW_%gViG5T5>9EhCCZYcL!U5u05A~~71<&ll(TbCPdYjziEzGA zSrbGm7lo)W`LvT)*%&zSMW@5hQmKn5(oZd_qd_@O$Ve1LNhG$&2S-VnNV%0tks|_q zPm-DvsY^lpiO)14l>xno_$*ML42fUCB(E78Qdh|U>{)e#-i8Ad^(qViD@C1t@hg&q~DAE)~; z^{i5Qx-0oHp5qaa+sU0s2pyMcAI1V7C>2&`ZJ*@Plbf-!Xq}&op&c}0Q0jTm{?Q&d zO3w)eMPedWT>aCd!%}KR)I` zF)oQptW;R8Tv)K!N{7u#h;3N^5Soe?iXnSARHk#)ipU|8;2|FZqU;~4AF=fBusJB1z{xjG*>_2qB+^w0F5Lu%2qPES(x=F zc3LAky{k8(8l^o=LRu9hS`n6=h@3r>p&hb4i8Dhgqy>Y%64j&&;3S~Wm=R7btawruepS%`a6q`fC)zaB4b|>L}5j+T;i`r$gPzB>;#(cfVb? zpeMbA*Ms<|j*{FR3A5IE+JTak|AKN{b)tycZKj6$rq_Loh@uG4jfmC-UWs}DcM)C@ zg(;b`Tdrx4o64!3!o-@oUgDe}1Eji7JlGl~yQSh=ir83ukgD4Q(uqjRD&;D#0;{~} zEwVZ*z>5p*;x360uFsMyg+M)r(2?5OEAiTqJOjvG=_+gF#@xs)?23rzimv3UtmVQi z;Bt$<3ar5jGs?0o=9*n_bdJah$O^u!@Y*bk=&a8Qt=V+o(yFfXv8ueXEzsN&*NTzy zqOBQLtq{Jh7#6FmDJ!!=;ourBiI8CAIt%4G;Sjz_<5J=uJ}n0GfcOG60P8PM!;k>G zul(9CE1oZ36R;Ph2!BN||MERw3*6WUOS8O7OAJF$4)ZV&v!)SC*}_mX6jL#(X|WxH zF_ZGL8oRL+yut=v6e4nneL%8=IkaX2G(A(YAZxNgZVN_Bii2vG*MJ-)LYgJeDvvda`JUS1zs z=Dtnqv`;%XG*08~+gQ|4HG<1ExfniiiDs8`HP{tAimT>j7F(G5wR00TV&mppG&^Rq z5osN`aGQ&11{Zb4Gqh;d4n<~)1-I=r1~hTB-vqbt>mh=LhnvFnH9i@jb{7ur<| z<71tQNIu`oX5eeR25W1kE552azPh;V<=bq!=)X~ezNa21>N8jqjTo{{R>2-@g=^-P z#f~2XGxNI||I4{Q$!@>!EXd4eu+vts&gQw^_NZdiztWxy;>NW9dlp7bz>cUyu>oHM z)I?2Vz!GpkFuq%5zQqb;W~;V{l*ETxjkXZ{hoOz&b1=c&uw&qs2%c_PDWfs~xkL1@ z!7|Ii^=!|CIm3@6L@O~w0ZBssHj^zhLW#&jDs-JI%t8X^LV|>gFZ5$EL_`Mg9N~Xk#z7Dn4Nmz!Zc8RTaioNy`dRT0?_HO5Pr|?Q|0ZX#0?Xsj57D8^4UJauOuk%QJ)hFReD}^>&BA0%-vH+BgLMdq&BuhF z|H#aZ=xF$aS7_qUO!(nU)07@|st${{Is(!7=4DIOBusiY^SO9U!>ml%bmC&IO_Ik= zr_#+J|C&x3N`8d`;cONcjcyQWn;>`cFKzQyg%KGUyV~XvA3;HPfCmK7CCf=k?QD`K zS!DRQ(DHz7H>Zdt)e|u~Pz5Phfrqq!x7i9ccue8Y`2>zx@sqUAPZyTiZ~RaClnVis zo$4^8D{|F1K?1@BjS= z2zmnPp@T5+AVGr&1r}V$P~pOY5GJm(_wPZZbQ3pn?C9|$$dDpOk}PTRq(^z@)}h?! zZy(5iFgLC{XQrb+UK|hnO76wjqyt9E0*nH+0sorqN{TDy1K|3X;W6hghR z5b}BqyYVT6s4dx@3!0A~1fuRBs5}twoxBJ5CQ1g$`0P2Wj}=4s8I*8Gq#w(ou4@;s zUXQf*rWVT*Ht>^Bpct5_ZukWVC7_g;xV-sB56nMGhdz-Va_3MyaID_(`9$yNhL=#M z4m`=4NxhzH@BW-Rtnb~&pHE-D{rdLdC+Qg{%n+3JRzAkSy3NRww_Z=ZFIl`6Y+wg zh3Gtxk5_#q<{$)rk*1GNIo_yZM-L#GAx9%3aAZiQH7S)}Uq$xh|AmHa6rn^`a^z%^ zI`U`|WkIb|qGk~6bEar!R+-yIWN!4+is!V5;fx<0z~q=*dL(8?e|lu+M0i5E=tRSL zu+9a`L7|a!P+YJMdJ`Fd96QBrw5g@+BnQE8EL_UMb{v6vL8sb5=N$x~4o6-|>M?pN zuDPPL&pH0gbC|Bd3MMIvoT?7B-5uvk?) z@ScOxIZ-~9W!V?QA{lHFWDsb}C81m8`(VH5hK#1f8@2hS|3s0ECbGI5bqoQ%`tn=t zwJU>kv9}}p3vfpjfAsQ1{|4-_%sLO-)~rc;x=zxxUe$Dk$0g0u1x=^=^wi2t2LY_H zqFTb&wbpwy*<}Z3#tvqyz4k`Ml7tUG_SkbkuS6oi&pq};_)mq7afFUP57_e--xH-f z590ICsM6Rb@j~rAf_(%@dnIdWX&pr7318(4v)Ps+f z>Rg0RBoYn{&pG|rW4Uo~?UVODueo$i=^-KD&pim3!B5HR_zt}AFRyb^K6=Ogygk9= zL_EgC<8#kN-7fa9wX@g$Pr#moF8WAma@3|uyqGah|2^2c+3WfolP|ky=i9w(;uN>N z;*ErI-^0>GaHl)oSqppGn+VV#pupW>iGQ@S9ot&s0ZFl-1f#kR2R+ykb}WYl9spLP z$U~$QLZO2n1YrwLsI^yZ?K@W+iLElI!yWRlhevbUNaDeh2OuwC?>G?=@xh@H=__2S zd%!-L$d&m3%3A&C$Iwc`4$A$*W)#_ngjNQRKZTJ)5SRx)E`q#{z^;lTX$Ma}2QGFX zQ6})9Nk0DZk4TsiU4cX0M$}=Cz`dl2LF<)C-jR<#?xSJW8YB^;h#Qcspsgd1do&{&)z~tRxX)zg|JV!!;_;?P(kPWg92Y4~$;XXM@jY&A zV@uWn#x8c`coG_yAPFf+2$D}ke;ijS^|(tPQWHuSxPUs=u`03AsG8pVCOE^%8P+h0 zA8r&UhSD*isTgT(>g)?TJ@U@(0V|#voTokWsn3>JjRhvD$vt+k14Hh!pawlCNZKJ# zuJjQ@d_gE-%;1lH)YByGG@C>zYS4^U6eM1P=+QU|(vj-Z034K|*xchqlCrd=K7^fn z8hW8<5!9t2(Z@YHT9S*F4W~Lqr%zAvQJXRwX0tJDpqbQD*IWTqpf$xTY#F7{9Wb;c>ZnIQjybduy@wtjNsJjQvZD&2F^pLx z);yL1S#&(MBa|)ZJwgQ0%f|L*T*Sw55z5@g+0$xJ0IiF%!;y5@wT67Xq10Y@s~lFh zy}AOTNZzqW&7DIh8!^KJ0{Gf~NOvOhkWlrA#FYcg?Hv6jjBGqo4}E0ux%=GBbiw6b zj|{lL2L|bavnx(VLCR4U)o`ZH|GU~EX&6fEoiK_s1mEt7Z;Se?1XCtMSjSz6h)jooJA_890;{ zG?DyKMSN)l9{TuWKENv!|2sn#oks=>sz#+`@J!jf8wqi&tj3*kn^sauTcOpS{E-t+ z#32c>cS9VK?}$JIA^Y}szYp?nfd_mb12=fVAA;|M-&@}h2;4oiJz+72BpvIB$3K8{ zCj^@2%x4_3wM0T@jxesw$pm1rn6^FnaWyG`M>t<#efAU0h++y&e5*NhK?N2Nng5NY74;- zVJ>tM`e{kzp>mUl|1;j_z8ZSSi*8qSgghO-n&!>@oX>m8^W~LyW4Oy81noyb25SB4 zUEiSC(>_79hrR7{-+F8D`Wy%7dYH*MlBMKsXuLSb19(x7ic-e6UxIXd{=ry}$d2P0 z+m^&n-sQ}!{5Ko(uY`dUvDdT{=l1GLg!I*pA919|6G3#h((w}5s6^uM_sjg5=_hW< zi(>zXfBv<_N14kcc|`h6#QJGmw7`=VNz4HtiLz)Lzqrc+ng;nCU}msixP+31kjO_U z%k+KAO%%qC9Sh~11j@xzKZzUWnb+nm*+%5mZzvh(aRhpR2h&(e4dT%Dd6`Mb!}0Ng zBefUBWeaUR{{R+kggd|k0(ee66`q;Y!w$&OISk!Zq){Ke2uh?N_jS`yfyv|$5Mh+Y z`5ls>ZAqDs#j}hFcA1Ad)K03!#c_#-8@{2EjE_h7h{lzn%G4no62?&BNC7s9peRZj zxd_kk9Fe$BKEOnqj8|k-%OP6eM<7aT+@W7!A#j*Wc6kT{(2Kr&)Q{m<4_4lGSe&G2 z#JIVjx$PhXh*ne3APim}4K;^o5y=at-U<33Nx;MEY!+P=VSI((up!Gv@WL8SL;#|L zCr$)9fRV7l1{b2-PyrVjUdTh`90Zu3k@yW_u!j2ymVH1TN#NIy{F*q2u)m{(r0U`UGI)`*7+okuIq z|C{RR9)Nfzfq>?Mi012kChnc4X{M%sJjmWqNRjnqNCYKEfJl^hpii91KF}S(e1sOB zM4zzI${mIvLcoq-h#sEdkZ7YND#}C{3L)Z(lnmt0kPjKQ6FvgR7d}9kP-h`3NpYft z`>YA~ZN{6hp_~xpbKc1vvIwI@ry3H46%G|*!p3jv6Nj-7r65O^?bWKZ%BOJ3sFcd7 zj8=bo3VOhbtTb7Alp-(AMz8#e55ne09Lue3gtDlMvv@?b?1{F}jQy|@_MybLFkm1V z%>aHS%UDdim;}7^-$c+$Qb^^;?2FC_P0#G+x~%9npeIMf49IxsNW4b;4%x{X(y9%v02z}JM$g6?92as=A+sf2E0+!UBU*bUz3jfC_~TRLOl z3=Sy$#^EH+;xrdZJkC8tPDdCJ12x{}REYY7&ggKD79Er7untDpT-KQn25rOyF_80| z!|!BI*O87%98dBrPxClX^pFqDRZqlZovsd0_jFOq4I)QakpGYc{(x#+z7Ji-&-~Pn z&3r2RB#K&p#;u2i?4gr>sfH*JuXaRdpq|Es%}5K2u1 z3zY}GhLC!_s|l&%Wp1V{QU!zdsle`;@PUL7sge;P(dR4?$Wh-DEfdVxM-{0Vu&HuH8<|gh) zm{h6ED-RA9=nm{*6)c9(lvEj2}?FY`99^FA+doE0!aFZFtrTLrINRj=>b6${{1X^8|4a_{tV<$G+Y z_KsERj&E=*R%5wGw`rDhVQ%6|ZcD-MK5-k0Sy=~VpGT;cyMAv-(4hb7N^1?&`LfmG zsxI{z9qJsHaB)sY93)N-m(gCAoRNg&DOVm+s$m{fbd41KlGJu}+XrJv2?s|82P|EA z7yllscwNQmfiHT!Fs{(s0kc)0%2(zrn#Y|HfZ0QK@fWoG|FD4ho`qQm7iL)e+O9Xb zpFxE%Nhz^zU?p%ku{5giT-~RK?G%V@=H-o8I$W@Y*zgUj)!T}N_{i8#QAUg{OFab{ zFMVxN@@WSflojJG>_XKYx5XY)Bo@Qfw{gwZXe5(SSw}t@o<>=!uvIZ&h}h|Ov%y&sq9AwSuUG)Bo{^lbapePfVFT*nDU)4nlVF~ zq#fI*C5kmu#4K}&tSy_fLY6Z3@>+e{I)ocYavmd}|CYHWsFVTlW|3VR{T zg-SC&g2<^gImRNvB=lp)>?{;aLcE zGl^B3YK>oIUJSdlX?flNhhDoe2kA8mT&Fb;cGK;t=4hg3XzF!d<8^87wO`L3X*LM& ztz9Wg$|~?jNnI^;QDT#6T@}@MvxPm zwgxKq9)dN=@irhgjj62jELJxy{x1~F;Ao-S4NgZ6vfw@Q1|7F85Z2caR@WJ`!x4`1 zjz}RDT49rdR(nq&ufTVaXkxfnvMX_Ra6Vr_h^d8C=gq+~A1)^*Ix!u(;UBgICmu>0 zn#Y27%yBB`gWF*oMnWgf1Soy~o;54V zTZnz6Ss$_u)uNn20WNwmJ|C|yE_7jG|MEmAOJ6LbY$790=mj(8#xp)ZG|ur+^!G&E zBbxylxRf7(zoS8dBUYy4dn|QFEF?O@qqW9hRDOk*y9b#2>9#PWb3G)F$mc2v1s8@R znM>^y7bHgjmp!sZ3X1s(Uu2PFWD9Pjzj~yLQ+H&(HIA30D*|jv8Z=Exx=j-Fq+5EW z545HiG^Xz}z~SUYWCV%{xiZc~PVB^))Wit7L{XlJUtY*GO1WF+CHcDJy<|C>x209u z`B?@>SHi`)1cqQ3>s*v&uJ<}u0%l|rW?+`(|`uX<#I*PJY zAU9@r8@jx4;qRi2Wv`* zYo-{fLx3lqNc&Y06ebF8>gIU|l70(jx78A~uj4EV69qv|uO|WBv7MX-H@b|K$vc%1g_f=($vB z!JMf`w5YYrOTEZw(Wr}!zBZ0(sM=TDm%d-!k33@ssg?|>-4`j|dj*&p*qJyxN8pS} zh|5RJy};~!nX?hkTFzalJ zDoI#fPrJmalB{v4D*A9lt5#63KED`xgsp;WuEHwx@O`gZ53rKItO~2Q-fFmZ#JGwD znVKu~n*{Q+YVJ@_@2LL+;ki@iKS10&00Dx!e-H3QdhkyjL4ybtG9);W*Moca^bthh z?;Zj({La0bIFe*ZlP6K8RJoF6%ak5UK!L)d#D$UUV$Q5d66Z`0=|*12S)w5Xp)zUO zycv_lPY5wf5cB{g|7yvY9$2nBC(mV9uV2B26+4z}S+i%+nv{2L9m{wJ4stB&5Z}Rl z?M5Ovhqt7Cb`2mC>9J8~Ysxc5lnJ9oHc zJGlNt+ndNv-@$+T;7weY@87>joAYM=2il>%%>Dw86is^NyL`I$#Y61-0dT$$`t3Wp z?(gf^y?+OvIJ~8C*UJ07xFI1-1)@lDL2NKP1`nZ2(xRu ztt7|Z^KPN!(n?Ul1sQDcf(z7H#{ij>Qb{YW8q83`4LR)4L$ucNPeFc&`_ROa()mZV zuhKbZ#SGj_Z(lgu~aj5A0Ba%$?#l(Z^LJvsU8 z)6cO)E38Vi#9Q*uu=Kg-PM2E5(!)d-l@rpk)~QW9mnJ<_(@i<;)YDHv4OP@pNiEgX zQ&CM-)m2$-)zw#FjaAlJX|2`PTXD@**IiddXPrTL4OZA;U1A3TVv(ga9+8sOFr5-u z@Q)oLt2*hbiJpyi!#oMwv)ON-43scn6>R66c~1PNFbqjLPQ>ye1y|ls8=W^LXpt&` zO_nZ@{|T$rsJ$18e~t2Y+jEdq(%yxAlyV0uSyHE-e&U-;pTaO^jG%hhlFS}n{=uy? z$Ta>+o_We+cOrBMQyBty86Nf?eomU%(|ThjiO3=MRY@HRNlNEgsstwZXDBLc@WPy# z<}pN;-m%S|i+P!72Q#q7x;Au5>W5~|7Rtw-q6Ry_o&(PLnk;i&-dG=vVQyO2efl|x z?wi4s8v=jV>386k(kYoBsEQsba1NK&Tk#E__Nu&|M_Ox#0na&hqO}wysU2n^7|c+x z*mf!I#cRFWB-1&?S#FsOkc#N1{)RoOX@{(KB*IBDfCZ`yrd=l6jl!2I$k(ZJrX z|6Rd%1ZTMMuJnSOpcHc?$&8Mt|0g4r;5ldVi4t3^tI$VMw`G#b!^fY04lq=ned4NT ztamWeY@~PY0eK<$30fzT07dk^`1!0gDyqjnc;ODgAV-0bgI{y_2Lb%)?;jEL9{^jT zj(Z%0ADok5{#+Bm35HNM|Lf2FK)64a+=GD=xfsUIAsq<35Mwg@AO#~B7I(m zJ_b^dio~NM2iZtQ9&(b2tmGmya}O>q?0G9m$2#Kik9?S{kXuU~ zT|&Ogp$wK2DbGLf0mPnNj3f1kL=L}Fo?qr;A-JKKKI~DCdtj(ixU5UaTsWG0_!5|u z%ZC{jf&g9+ryglK-~({O%W3}7J`X^qGMQN$d_0p};9K7`DaN^DCUcqPJZC-sqfU0( zlb&reNjDMj&CS4L9_yROL9atlgCdll=p4&BAcz2a*iaqsoY({8Y0iEUgdOpzOWrEF zn~QqzD-iWZJtS&Fh!MnV1QDh^@Uf71J!xlV6eI40hQ`~Oks!b8o55l<|1>vJ<)=_+ z-QI{Q)U4EUdN3@EI$Gq^b3j$9Q;n)qsVdd1V)d#p+^Sc*nz67xb*zN>s#vRfRfMXJNoP!=CAtp%9@eg$Mg?&7Ezymgk5?PL9u`k13N4F;) zN1@3)1bN3fB4HmJ`t<>PX~zRb2?5D=Wv?PRKt?XhMR!z=Afq+qW+y^S&w_R(|JzqO z^2$=!YStvOCCFz(3!U9|Wwn+g2dtXH}VGgFqBJ0GQf*#jD~L0gg+0tn-i7h?o8K-+FAz)SQ*3Qb>v zL7?Dgd|kuw3x$0-8rl3MBqR%Y$wz8Dl9aqS$20zMkxO#q9w+(9DJdI!93&F*wse8J zqFo4x^3mZXi9b+D5V))uqiFFkszJGcvrk!l^bnF2|H*iR7?CWzVa4iQ| zmOKzbkfsB9w@Tl4JGFw3cZ{9vR5rWU#~W*MpQP$n|Id1t?Iv!slVu(C@CRo5mmad0 z9nF$a;=A>}_qdkS?s#9#xulrc@p{SIasv3#Y=S$THoPR1=V*QpZTW*Y938*gFvb1u zva(t=t)o|~Sxuk%(yv~ts&75(xe9x)62u+ER8ggob!nD}n)c@ya9&zTlGc2io4!ZM zhP|>^e<~k+{5~-RKvrUYi@5Jl<~c#4Pgq`{nwhr*i%-Cv7HR&Y2W(# z)o;o7C-QckmuMuI8UKRxVmb7WoBY+o+5XWY|Gups%;myHr}5&1Z;k>AfMP0;rg(Tt zjV^#4j*1{8kR6l)DK20gc4y%(@ThQy^3-UK|MttDB5f=x%pc~#<(ftJRKmP+=z0c) zALLH7jE{`8OdaHJKn^RhU@X(X$KRIjJj9HZ(pZkPr?a1tM{nTB$DX&`0xHm;t9oY?ovVvjqE44wWz^&ZI?-uzOx?@g@QR_pGLlD&j~m;D`h_j%G;OLXL)H z;nHDe+9CwaNO!1WcMPuPOz;HDt-+ec1w(@$?BQ%igE7p{@2UwMG9#JRXEUbopbko9 zUg;E1q9QH=*C60Aaw$h%ip8MmxJCmX|6qz3@9xJ~;+AshAbMu~9wH$YVlGn98S#M_ zDaV6;Z7q1g4CbL88voC4v7B94s5C40h7>`U|BD|Si{6@5}HSaBrY;xjZxF-$@) zKBpl5LOTWnhDs!S-f=)41D7O&GN=*)E<-o)K}0&^GeUzsrZGL%r+v;4+4w_1IKwlV zV+?uX4?nDdC@e1aL1nsfE!hx2|4t}k=tDaY5+U&tE#0pr;<7pB(!q3t3iD$(^brEM z18R=rKz>gh_VPLWvN~V`d?xcN=?^6g}Gf6`%AYC*09R@@{kSx`9RBsu-WInhK- z{=o-zlTMH#Ch15|m{T{!1?Cc@lwKuMlyf^fMLhk)Jj0@yE`>bVvpwDOJ>fGx<#Rsi zvp((fKJha@^>aV@vp*wkS^P6V1$02$(+J?eKh_}*6f_Quz$6S5_g+QM2y{Xzv_eyb z9gILhjX(z)gdG$V2u317{};4DdE!IK#AZH3LOUcKo(Uh8Q?#b?%Cdq#^dUGc^hR;C zJ%M0B7c?rvLLC&8Lk%Y#GL%FSBS^^v+%iN(Im8%aN^Mf2Y+w;ekFPfBL7;LpOSN=6 zbwESeVI6e9NEbwCPNGP$>_urrNgISoHDoO?WGz0kBsNDd?kpwHaWnR6vbJqy z3F0dI^jMLVX@E2i{|4nz7ql(9lt&j7C>Vq3B0Wh*shqZLFUKta_&9ne8$QDQI}2xqVhw>Ash5OO4nixJBUmZ)oA zz-vW(3)N_=#!gFuf-g$(ZF=4=J)+7l&Y>#|!s%daeGtGMj`m{FHf?JqT1{eEcTGXT zG-Pu&4j^Dh|2cG9qjfHPb|UsxTVWOgw$)7C)^D>_$owyF+)N$LEZorWB(jV*;-+5I zEV%v;*QSiua10Am;jY>oyMVR#FF-a3i&F_jX%%v_V(4DEij#UIg%@%1ewE%z|y$8t(u>qusCtOwbMj zR*l!BE>}xJdkBIy8W9e^mL<@E)Jo$4DKn2_k?=f`@%K zcS%%3h30^(mvRvo9P4j0u`RiXmB%KS-x_c06c|{gti@`K`!skZR_kQ0wqfCniXEb4 zI3`ZRm?Vr90{*9k)p(6HWk*AH9n?VwaCT!m_G4{#By2bi)ZkZ4wq++GT6JI@aCV1- z6ii0~kOldN1K5ozbtNccGoDt{1hFLMF#S&FAGXkmmA2p1!w;DSXVee^qL7T-GK*Kj zYh=w$fsLs;s=B~u2Mx=Wu}|FmL511)mT}ohzEwdR!dc-KWCuBScUM}4bb6$9F7~%a z|FPwm^Or<<7zqB5qA^XN zmAa~}I;okOL&VjORYD%{;Y#bG2CsUo$(oI`dP9IfQ#*Pkh?*$N`mNzQuH|~J|LMA} z?fS0qImW=OJvyCRN{RO3mWu>LH4XyRMZ~O@V~I#}o)%MFCA)B@V|Vs{7FT zTSFjiyHBLMOX6|V0-oDa2{GqR=2X3HG?uj6BxEzL=Uc3q#J&~8xl;w;|0r+Z$Y`+- zZX`r8C)jAQg<^MxCq!#Z)m9HEffi_0>-oquiVWSEQ`YCRZk;{USw9$ zvQ}&3R;}DqyodvlM&S~zjr_a5MsO2D9JP09XX2=)O0nYFrsOP%)ECLrHxAW1uGCSE z)lKfzUEPv0iL}3E#$yDOXs#r{)5&rUGz$VhYTTYB++~70=x|Aw|Dvgv$ceIsshAoH zpZs;7q)eKqNhJgpo070#kBH1>Zp9G<59DEUvK4OkLAHi_Rz}ZW4`5S{^ezU zt#Dgn)CI1X#@6df!A3&nIEt@03$O&MZEqanWtk;@F4dSYvhbU-h|utsn6qXpv|Ot( zpss3DOIKOT2K99Pq87M@^|qp`FZ(bIr8c`WDgXoDa^{ul$N^_F>q{XbkFZ%#?Rb z%XGgi!OwExEXLLe$!5&VY~LQq&-mF8`DHX{c4*D?{_&0^mAdmsAyYU@OrxNb{cXFtzqTv{=@lj&H_jA%ZpYs7?9fW}d3mPQ& z?wmb?kshQw2!U5WgZ}mrMEB3)#eEOlLHr1EV7qhj{~(SmSgAcTGz3$8m?ub@kqGC#6Ahx8n~fk)p#$j1-DNRJTY^+Wpa9KL}uLGnEKGbq8K zOp_`d_|t4smR}*Z^$Aqy%YknV9!Bq;b` z-GY11W!;MN@xXKUARHA7LGi+{a@RF|8g**n)vQ|=h62SvV%QfTlz`%4;O!CxJwV}o zaCgBAuvy;DP0%-Rg2EvvXAC=UbHgML(z}lRIywm1vv2Q?{X2Mi;=z~ie%?Fx@#({_ zH~$`eeD&kW&v##cJHd7K{ym6vlWPJFNMM1k|H(6#fE5|^Pd*U+WClgN6m-Bp1?lsE zQwA1vl1bI2q*-P#9k8K6HjS0wWQ@f{P)-m$Kw@jBK_%5W9wB%@JnzW!0A?_HMHpHv z4&)+8KjHIEl1dV!B3(hQ2%3ma9(YcUJND=oUHNby%2-k=Ei%Gp1%^iFz6cn`{uMLz`{C={9I`g&Oo6LF@!7C~^ZO%3Pt(p#xh9 z>ZmhaNI#(@r(@@+qnM|ldirUoj*Tj+scNBms;XwOx~i*5!TPGKNYOg0t)-Hx&Oq+u z^T0p$=(K0C#vW@Bg2c9#Q9A!VzeJ!>e^A97UZpoAs+C+K)hJH zr<+ebpkI?+5rm<+=&p8}X*GJZ&%9VhG;fzrzF5>i@y_%vng$zGFa!hd^lwP{7PRj` z2Ve`)#0PJvn1hKe25?9gOZM->1nsMCUoXZO8pjF8Tkle;Aqz7|uz9e~1-C)*kZ(|2 zuui51(8i9R1O2=+JGDUo8w)(MfLlRCUl25*z$HpFY?T(aY0O%0&9#C1oa4_t0d`Gx z*_0*NT0BESUi7@IYRxsl%~BfZtswO9@3X(6od@G|xW> ztXAaS0XKQi1MT?AS>lr)yu04;K#f0M7)Lq*j@atjLgYKhf&CLY$swAY&p8^32|?ws%kG)=9Ofyv z<7Vq=b@_g-Q~uRqrcW%OzE=#TY>=Pn zVGj&(5HeuHhduC-LJ0W7GLW+jKJMWkzcoo6{=r8>{_(r7`NM`doJr?Ik|zZ5!VL4M zN5quK#L4}Oh&?(Y1h=)r|9#xU9{bP`!%DZsB6^WY!TX35sc1#qK>!}-=!ZR8SP(ke z5sy;>$qxGk5_bga9{9)#V$>1FF_tlpb-W|Wn)JphO7A8nTZe!0VUOw^QjNjt)f4Yk zkUtu5Kpwam3rcV_rkE0ycDW4;JP;t8Rf>1Agu*FPsY+YI(teLRR6&l@zi*9ln8Ylm zF}sF9n#7|*5Aer5zSxhr5oB7h6I>x5u#alq!!Z;ah&rPAMVhcnXIfxu&8 z!NSL~ATSSp_{W(B!3WrSh>r~(pqgiVP(J?gk4U^Tp7Ttd-n{2I@Wmrv&D_Vg2-?iq zHEbRK4Cp&Sq7Hjp|F9y}^pck-3Q&OpPe2Qur$Y^bfD8U3btxSr8$)8xZqno(EA&V8 zBIHetHk6+bXz5B{3XzgF6eT6Y-8!zB5qRvUq9W~{89_;qm>zSgFuTA7)Ul4I1(T{= z?W$M5nk=^=iytxttFh7{tR9ZdtZZ$op3sUI*Ca%#ZZ!~G>xx&1q|cVC`N=(Yumhgv zb+Cjjtmgo`&5IT*PKF(j8T`?YwSGihjje269~;@#$O9kss7E2CY1xlpR}q$r-0iM+zYE^*ig&!^Ew6bEf{t~}_Pp$EuY2DMUp?vQ zw)3rSI`+4$MOke*5CLXl@Y}VaCfoSS_m6a;5p8W<=1k_Aamwwox67A%H}z*GppImR+Ek$XDZ6`3pClR9Op#q zNz1HJ|4Ck~sFS0_RZ-_4-artfTZ6R2jN2r!q6>THfrR>)qt@D<4SVXk_NkY^@vm?; z3}vYuB!9p8GpzahVG94|!ab`nE{#OOPjBcQJAN;tS2L}=L}Fg)G)UWsh1MKGgpLFx z$T#~@Y=gXmo#kBCJMM9=V1Z^G%eH8;80wEGK|~$;0B8pP!3(NnPo?{i_odMdns0~u zALA}}Q)!|OAU=Q}Pt~`7_>B;7AH3fo^|r#rU6^~&Ti*I`j7BQ1mYx_K;szr3JoRD5 zfcuBw@UnQq_YE3}2dmx$frma+nvV;&qeA{zU0gkG?mx9#SoMIny$9qDX8J=PzZ3bu z{|o+bgo}jcHn+CGN$%EFuY+kvbM>HZ-CrnI&1$*9`Y-oN%e~_IBZwwQe(s|kwA<(G zY-f+!+mrUT!$2RuV##tAa`FlT+db+L33VSdA7%&^0(jBQde{R2J%0ePD(+0sgQms$usr4g zijU1F*qa;te2dLUd)qUq^7XhpT5zxX;n%+S!u*KpSx;tl&SQfhq$@n8|Bvb`U-$*$ zB4;(p`<1ddL(-@I2kE*K;v2sut8cwdUUpL>7`F{J@$4doKDSjqp7C30T!GV6Vffu+{ z1)(draw{jOg1oYVsltLU=z=lWDlj;MqVgv_S0ztnY%2D6NP%qy=s516B1b_F1pzGl zfE5gO5JZGBb<;O$H4ujbR0aVou+t6?pfPhZY2xHP2Otv(v3JixJX(lG5K)C9frT`& zY0c}Kv!vJ5*VP>PkORVRDnHfm>6y-YI;aJ1R;h*q8Vy~66BH> z$TJXfc!dsf8eRwiU|1jsvUd;wh@l~fO~Q!Y#4(%LhHW%ed!;mlLV>rJ8uD~e+yaFXBSCuzF)1`K@`O>jmwUW3BNp*8Ve%q(1CC{Q5G%8d>L8Bz@H;(n zDVNd^Q|K=c;g0xN5b!9D$Mq0)gNIu}h@{vWKe921L67x#kC0K2GZBz?<0fK)4s@6@ z3h9mIQjSnHAcqr93u%wrs3H}qF&D`d^2m_eXjU`xcQ^A8R>xnf7>gfP9H{tpxYiuc z5kI^mlM|GSy0{_mkQKWZUctC!9CL+1K~vLc5E4NVJ%JH~fesw;|8oPPE=8gubkY)Y zkuY{)7I|?eP*oY1!4=ZRk5Ez?Wq}t$;wfy=Fj=`aH0C9DffN@umIDR>qZVp~*cyyw zk^*KHH?fxubC+#0J)Hq235k{{VjA81^ zFxeZiHk0vV98$(=29cAr7#+8$DUN4%_~CZ38F#a3n{#)Yb(foWhnu}AAN$cC|IwL6 z$%8cEhWl`MZ3t%&A|VtqFBqbO1fni-`6OB?B?!qmj)^BXQYCA$FW3o(a1kX%LUvkF zCT4P(XK9^SX^>%MC2TT~boP*Xl9+#Kp63~#XIT~9c_oHP|4DEXIGVXOIT4nSIUwtx zLFa%tV{)FrSDgVmC-+$l=2&w(vt>Jb}1u+ zu|k6^x}vqxqA>cRxe}u^I-@DbE50Im!$M$2ITOtS0nIiL%T^GKS1o>#daSc<*(NSG z0W9tEFZ;+Z-Qqp=@;Ul~8Rr5d`k0Y4(Ul|BI%RnwBH5mPfu$5uRs``e`S@1nP?Fg5 zrDz(ad3mOp@t<6QGH}|ZEyIx;GA+atr|Eeza)ObC)n~PoGqllb{Pi?ZLlBL6G)c2G zAKIvXBBDbhfi#h#Ksg{vBsLA^qadL+V&Rko;SX>I|2GFQH`=l{ccTt@V;6jriM$nQ z1@k(nqd5i@5}$OX(K9-m6P^X3J-9j(%EOMqN)W>uJHX19TLL||QxMJ5JG+Cd1~ELV zVLYIiJW4vP;nXCybCQU7r%!=U*rTl6!>iyUJmOOr0iqapW2|#pJ=YV8+^TAObv~Io z8}DOn^%FnkQ)u;bsY9bb{G+Lk$EmI{KqeNdQMEvB<`2B1HdAB3wT76Nq#UVnjv` zdaV7(Nl2uhArVPKM8gnHyiMLQ6pR2YI(|9=hmCyDg4N!zr7dbE>75S4UEnZz+U ztFq~8Z%|7UDRmDBU}gYwX}ksWlL_WGR8m zx2>d0FDWUc35&ocvI*$DIcRjWZ$&2&@N zX1kvIyDlZD5a7DLTU7gjRQqtTwChygV{gSfQ~5w|znD=Q#k}0;6V;1;;k#2nX;oOI zRR`O+kDIU!yCGyXOq2z`sFqd&GFQ%Z|5x|hRi@ZiA{JQw>$oUJjFDR+epx{FOTc(F zTAIaKp7jrUcv}zLz*BWvNdvglv04`llm~{u8&X^K+gl#&R>`#*#6`Kzg~BH6!Y>TN zF)YI~Ov5#7!#9k>IjqAw%)>qG!#12=MES!*OvFX3Owj;(K!v|)#4vMTERbL2gMkwm zCIH4Y0>)ZN>|G!%#Coz|R_wp2R$AVh#mc2?r!=bv0b;GVUm@XPXS_9jHDX*WUIv_4 zg`p1Pw^A=wA?37VGzOeECO70Hk8sR2Lv|2^Tv%RgS?GWixoF7Cm1Jeyk5m>KBnT27 z=03j$Gn*>N;3dD6*ku)Wc$VZ3W?&BwK>xvJX02&v4{KH>ZU$$Yd@OoN!F7emmQ@c# zmxs@FsDIY3f<~H9941V!$vSc8Hc$DMbPShs0QYoAhjJ&kaQk7<0zJ_Y z_s{}ka-ElP8qIM95_BI|bQkT>8NGD>P;-G}bWmp?DcwxCtV1$YIS=7-FbBznkrj(< z5Ey3`Ju%Z5z0na^p;KpzjUsE{eE*XMv30g)&R>^4VV6EnjH0l)o3iPfys4XC?bTsT z)?jVcV|~`O2_Jd))8=)|p#gY;HxT-)LTTC$hX+s8ym-#Ip9srap(lC75`4^ee43|! zB^P_4=R|H=dXDpd><4|WhuEK|*p#xX~Ix3dQLd)r6Ymd$;ceb}J=*)#Ec?pJ=< zcYdj@eWbm91hNhRIDkgY*$|k1m#u(t;iBI?^q4*DM zD2M~H;s=osN(eYO?it9`I^@<<*ff&k~O>N%$;ny_G zi@q3NZ#|5~$UB(E4#NmpD8<+30*%s0jp<;GODN2Rqo!oarDLi>fMjj)NREzaj_R5i z=@{o*+Kyf7O>}-c^{5UFNxu3irG@_I{|FHgnV$|hrv&1W?TC^gd6pzes3$4tgx-+~ zdR#z?jIcA2*-RinF8`mBp6PBrSS;CVIOEhaDU+FEnl>qm+?|>`>6(n|!$KL)oV@GW z7B~my9|~TorV5onT0vAmf8E5;8U1l8ni;v>8=vuMeeq)5@f`p0zlj#X z2_Sse>rdH_?$8cLfm1^A@=uG`6*8v#?Hbd$>=QJeT&dt(=oHh=o$vXbJ+Gbvioi$G zptuX}b)pl^>i?eJDM#tfri+!J3ySpknVx2br`0hRU@Ll-w9pChw`1Z~C zC#a*r!lPN9@&#e+!YbL#xMb~yq}hT|Yc8$?@uY$(rCKT@Rq8T%A~NARrPprl0;7^2 z@$BFJ=J0~*tdaVnBc~OUrfu)1ci1tkKd6fN`!MsTSuzsnH@zEDcm}biBjd8X|5bi|RB$BQy{IspM@-lR7_@%8FE@udn&OF6^nvJzj535TgqC)1q#vYOSo(s@?>v z;KJaA5&t>1`Y-3YIixe;+6xd6_WeT#!QcaY1`(XQXV9U;e)}Fey!W7;L3a!%ZiEo& zTs)2tB8D8fvEoGt85iQ$C@`Mw&XbP9|D&X(>+Y5vExUQ5;x{M z_s(EZdj>s%bm(iBprVrCZl7T_}0= zLNQ=)-QK(Ny~@F3Zt0Tz-oPsY0LoV>fCMUN(3+Vp8N zJ5H}=-FmgWbA{L9<7dy_fph+JuCo{EpIZo?>up5m?}5E~{{G2ccyHeGd7vG_{#{r&C~VeD?6^!^*Dd!*=J~L4eK6%)ELC9qvP~o;}O&9#SW~ z@yc6E9e>W*=N^0ZaSFh>HX0D20?p%zuKMoF4=o71>c^gY4tU5z5JiO0r3AyG3ju%b zLBI@t-h%)^1sQbEJC4@bE+2cCifYCL7i{oBhf=JIMHgX|5hAz7D(kF?jJ%5%YyTy^F3+ewq%mRSf`BoA7JjQa;#at*>Kx4PcR$K8FXG6-93 zxjk{Cbwnj^A9xJQR#{LXm{(Q0?8R5#w9Wz5Nr#|(i{87|*@rw1({&eGei82WQIbn0 z?Sc!`S;v69*zBx2lVg^7W}0h$EjC8^VYp_BZT9(RphrvRpC5y^Yv`g^@xo5A_RvS?>{OKpowIOKx?f=#6K>)1o z?wT9!xciRU05$of%QI9v_WN+e6UPZvoE4o%VxQ4geDcZlxrgtyEyp}G9slw7F3l+y zeRR@GH~n$T_+Cg<1m6F>c>V@^3%XKNPOwbH~)O})1RFkBd|9@heg@J9*AkP z*M1}UAURM^>ENZj!cbYTR6cJUR*T%|q;Mo@wi3>pyZhrI{7MjhCL zA5qfLzU{GvgN*{9X#PhQ#Zd_#HQ|R{-Qk#EPj7aGS4CQ2&QJh>j{@Xiiu_ufaw-uz^@e*ue`0(eR2{OkhabK_pXY&4*(oV;Ox2 zhx>6v9qrSePS%Jo{Cjkw15fQ=BXL;7%6J{swgjEu5Z z@_~RpQ0b5d{3j^va8P`h#mjg2ax`91jTw!3Ok|>OgK_X)a4yKqKt2YnLVxKubZz@P;Y?skb2my9^1hquI)%Uy`{)pwl5~IAQ-eCt@l%)d z3^v7_NJg##8;_0;h4eW`F~=escI0wo4#|f_4APDVX zlXU3EEchtOIn*&PyKEFbZKcbAm?l!d23D}FBdHp(m$&>4QGXD?9t121zdn-GJV*s9 zPYpuZJ|=OQd7~^xde#w(KCQ4{(Q9 zhO%CExnz+B!BxdLgjb9r*SJ_g$HwXlT?}Vf!$8YpRH@rj>n=9Cae!0Bc?ZX2uXFYj{V)4 zgF}3XuYnET5YCy^;|vO=VS>w<#Ob$&Hi*S~R@z8x)sbFJiBasa9V)BRzEP%2Kls5D zDH=IwFgVnX4c}`sLtms?3$=)Uq z;0Q-V_Swegun&IZili6C=s}cDs6A}C9RF?4h(P4g32d?r0j5xe(rbBKRVTs=gs^ZT z)Iry!$C8hE6inUoxOvWHcq(Q!2RhNgchQZ0Y9hKX*lTp3PX68E5*soOa|BrX-~fa; zt%Hq5$hy_BzHni)xP8G+s>B_FEK4oRAPyUtz9N2h${Ex%J1n@k7n7&WU0etFP`Ui6ip zamk*^>(QrP^{XFq=}88JLVlg~v!{LSZGU^*=U(@_=Y8*e|9jvEU--i(KIzbr>*6P0 z`LfIL@`+Lc7VwH4dkNG=29*`)GynHXggcetoUgcfp-TH;iqAp6-@M$q?q1`E9rW{3 zCUyHS%*r&j!%Pt{TdtI03}Ij zAO-|LM}jDmz(B=GKh{A9pyP;p(7@JN3@C^{wrCllNC!W;Klrc z!@KAxme9Zjn+P*#oSquRpdhAIdAx>+JC5NMPXZGYsu`0Db_oW1K}}{3K+w6=i&gXcQ&72u9C|Bz=%P1z|LB z{ElqYMbU7FN%Ds%+?Qs2Mr@=;Y5b~6@duA68g*z#Fe43gw3K!92f(X{p@0Wg5<(NK zi{JRbhxkUx`;L3u4tJbJS=7e0>BHd23^u{PL9{>X1H{W%jK*+8jy%N0sFTGo#2n!( zdPqr?Ov!>+$(3wLm;Yo*2#86Uq)B>!$(Y1Rm(RAd zOo%{BwG58K45-K?%(U#XiO@^Flnr>82jzeco%_ttd=8xx3CYyV!Eq;eVo2qPOMP<8 z)J(H=5tVcJ5ygbf#x#v}V9j`PBvUjusZyw#_y^(&3Y%*y()`3AsdDiX5%VAk{}Ue26`qh$IEl(SRzB;L)e}(HpfW?%0>xl!|}oQ7I)2C*6qB zGQYMst8p_3wo=Uq>!Ky?h%AlL?}!(#nVO3f#E{fZ>kLUkl#MP7#Om9^75ob*h*R~P zh)hg1dH=v7UNAMMgwXaFz#c3)hDfO$a2r80!-oK+de{MENh_gPE(zg8J}V1N3%NzB zrCS0Em$<7H8oV@nk9?4bViAhbG6++Rkck-8Mw^jTRaKc7wNV=nAbqV)yH#>Q)fM`* zp?CmxNmGMRRyPd|Y|9{o;8k_-)f+_z9es)`EvUicRca-TXXOabF$l6k3Eaw7)7Y{! zjaF_&v}WZRDvZi88H(!+6gm~jK$$U_yh~QgjGcho~?DtDE~GvLZFI(0V{la|!oA6~toI7J60saIX%vm{Hw{ zy8rVphXC0|WSqR=KFQMxa_O%li&_4vyHzDw8B$sJLQ;t(T8?N}y_v6kh$Ne39GtB? z_mHLBYFbn|PM44``l2zLfB@|v(P~Su(LmRtrP@<@+QgyAoPGio2`fn>HnQx z2NjJTOOTUW)q|o(ubr#a5L-b#3+;7GpQTRooDsDJMD3(owzbn2%v1T*)48<_bO?-5 z)7$e!7X+P80u^8b6;J{WVEaU1{5)U=PT&S!VEe>~vb2YTWgg3=3yYnIir|&6j4cZl zh`dCKkQg<)V66vmEuXd3TLPuleUEkMj#vFNXfp^Frd2=-)=dkEmc`xm1y<5!Qak)$ zdW*Y|AYyM>-_;njgXlDuRWznaza4fBCEkyIh>z3kJJN8EE;8a9b_wH!8Y;BHc>Tja zt;CRInLlL*KQst5z5sS$llQxTb;ykUgMc4rZY_>*&yXvgD36jFB^tW$lmka8XgF zs*2l?{cvba_Sp#$50X2OAh8kkwPA&(kd1a;m&g!{;}8XB@vX^)PQ4n2|<$+%$=i6$|-hj{6_P$8A>5SG>wp6(Ko_8KvHKRjVK zOUx5D5uE&+lRCNTHrW$-1;qOm$vSq4K@~&Mk>`n^lxM*dP2rS{_!Kn~n9qqk#sNIX z^Hh0?l`Er_^`#b5+R9%EmR%YaltnvbVHRfr7I^vVyQ|=k*_KYpS;wvxx)Tk=J{Ljz zn9W`nAYPbyxtF#Rkb{wIAPtyMA{c||mxKZBh7oPgF*UA4GIFDd$*Y=;!H&*;m(>=T zs2(GfQJFR#9Ct=*zfo(}pirKS~twmiUjKdpY5!qM)-VOT?UjoAio=9aslObaThKnn~(w>rYZVR6*)K;(jQ*df6gKa4+3LH`ZJ{p0dW^zP#JahXAGfcXuH zRUw%>S|AicdmusvH9{F&-sSBZDn}hC{IokqoiNsMsQ=VL?wp7`&B8}HYcuy5G@l55 z*oQq_H!8xPBL&Mhgby&9!}GKA=ACkLwVggc9kgxRwFOC&tXFkrL{f)D7?<&B@oGP& zyiGKpMb{*MNC$mj!dnelQZ&V(VPcL@MZ++>dT~YUfJJze$l$m}87ju0PzPQlnswp@ zV1%TZV|EBAM{Bg~Yr)5Nj7V9+c2d%Ih^)r7;KqIM#&HzKg&g;IERB7nB=cxUXN1OM zm!)=?$9iN&huq%Kcz1Qw34esV2MEZ4q{mMclnkdT$DG;r9AlEne~*& z*ju+UiaM(-g9y=`rLGK$4yLLym#48TOG$am%v?+CK+M>J%fO^dyF>uIj9GPJr>FBOsvRF=)6qG^!l^^C#XmJre6!r)cOtqP3APsu8{lYWc%qHjo$Q!clu2r zS}e9piJao_xo?iLA%>bT-u@0sH{<+OXc|9jnx&a-FVK3?1K3|Kn# zP94wA@sy16^h5Og@{t#c2j*0*C+{G~j_oua+}F=wq<;$`r1Q6LV84|eU&4$j6DE|JHd$N{ zSOSU%olr^;+zHg6P=f4guJhS*V9}sIeF9xqGbecsdX#Yu3o=_4Qo&yuXDWO ziA}3^EysjOW6t|`5rV#vD9_!4u#X>vdlm^IP)Ly1zj{03?K=mrU^;&P-V#)&PHV-v z5Dq+G>9XJheFXJohTyoPI((+_P5*|#?%X>F`Br{(#~8wcyrTbgYsc*V(g9$O2(RFenktg{mo7wxo^RaHGjRE7dw zP}5u$IyDqi8G7(khft(;VMkaE$e@ca!WiRB@ceTQWHRCyqgyed^N&5n?c+~s=ioyS zKIas~i(Lb$G*FM5L4eLa56C7~Wdl|8R(AqnRS!Y+*hpJ*2d#FFnJ2B*T0VTmCXhV+ zm|0_yV&(=Vm*;pn5SVY3dH?2}W&&#FTw5wQP?ukZ2?3!3^(ojuZ^lU^c1spiAVG_Q zWyS;QRS5xBfdV?HovPuV40R$Z| z>zxx3CUC1tpDYxFv(1_&2tK5>7+U{xK2I(oD<2NK@Tl-(WnCWAF5n;otD*D zYdz3v5BZZe1R_HqX@FT(sw>c4dtLI<3WF6aM8!6Bp|l1K&Sa3sRdh4*K=1x8j_~OX=Xvk3a8BhM9q5LJ-(V&UGB5p68$yoqZj_eS5fyF3p>Bp%KPa%j+!E<~|+Y z3_bdeH4;Q|ptmI0>14q*+Xgdt=HRceBhb+7s6W?j2E|1DeLMX@&T|r&0A+%(_Soi*(es}{@&PfiK|qo(iAy76@<>|^1Rm!Y z4a#bTzeRRZCJ{NKkqk)?P3qBzTgjnKP-v|jE{j+>gp4|9nUoXda4Ey`<>CZVI0MA6 z1j&>M<^N>q%xBKT3_E}(H4lQsnJ94}ycka*`C=%f5dJxXuQKU7^lF)_XPn7+z$31ce0hO{eXNtsH$6kT}f7}BB zX5hyqEqV@&YLugkT1Ub1VGm0J$frQvXhCQ?lbhyrrUsFCGKSlqTQKv_q*X0h!jf; zH>?u!9NQi2l;l~En_Bmy<1OxT5o=(WT;KxgSceMtx}tX;IKmR1uv!$mAmJ4eZWP`y zhdYuEA947@VM_}?TsjjGcR0mGq-9@cf|YyhUXcL7GM905BtY$WE%nW?f4Xeu zAL`>CQ8sXz*Sr;?;%CN-Rr8taZ09@UInR3DGoSnH=RX5F(1IQ`p$l#3LnAuTie5CM z8|~;vLz>a(SVx#6ZRtxZnr4{ZGCL5^#~Av&$2-t5SK9FpD7xbx#eSa821XdjuoicyIjpbGj1FQSY|my$s>DA&l^gGswa#s*$d2X7Q5ko4&X+ zYHIv)0DBx@l=MDTo$H~G=}Ap2F%Ju_WOVSZ7<}0nm*obhePW7AF5=bs?1Bip^P^Wd zQ8VGkJ_^K+vLr^}t4U=-=uD7yaMUl}c4oc(Jae#o{VO$((apJ%b2lS>cYaG&hOk`} zRX^?^*+S+|v<-K~buflM(c%dE3fIAYJnb$bo~1Q@km06-vFzCB*b8C?rGHqU1`*{n zKiXNM7sMSEbM4DNN>6@p6aw$K2VroRC)rl4Z7l!I=R^M$&D*x~5dZMUX2Ez7c<4jA z`G_`GhW$=`q-rzjXgxtjU;4tVFZhNk$!~A84(2OYjSz-C=P|#8Q(v&k22Acw)mtk81lIU{kOczARxxQ?s9ji%5 z4y6V#ts0gU+rRWnz%bwg%1Z%bZ>PrM-pua@mINgK&A)4W39+l7q6gA$Z zY|KE68PO>ZLAaB^{fukX0|IE&M~&7!)I&df3`=xIIo-p6u!D6u7Ry=Gbmia zAPsH?xq)1NL;^tJ4%!_Nz`YYZ%)@A{lLHkY4(gy#^1HqYTJl0#J zp<|ts^g)*r`oj#?AhP|GJsiho)q_1CKs^);8!llTD%(Ebp=+UxJkgUqh2a=_%44bF zIZ2VIJ-|a$L=+a1TnOGku$YLrU52E?!?7Av6vX3jkhY-&C{D{ylp++M5GkS};6WGd z$l~VE;^)-j=-lGz{!lk_~AJmfa@ii2wsY9Fcut=$vMyiLEH{cox?xy zT181rTxHQrBn0o3#7U&YW-JP3oJ2$bNH-2klk|?G6huStT0~%s$YcZzYQ+gg4HTIp zN}!`@5eO9Bju^FrdI&^678F1-qYJ8I$oNM>R9@ztL;oXf-P#A3i>;9VSx;e=9%;)sM|F{uqwm?TQ3;!qTYwNORS6@<}cqKuG*SY($ksb;B|^?cM4TRb(1vZiWhp@f(p1j_Tu=P;MqA3p zXtm`+hzwY!or6G#2kjrSNX~^gOG}=lOR^nMoJfj5TuqAPO}Yq;C|wA4CP(zhk4Q$4 zgojWnNmFgclZ4ZhcweS$N=l?*&r>f1Q4B00E0v1p>&QC-Re|}Re{$lLR zqAk)XF4n0o-YGBUsW0v+F!pKe^wI6)PNVfC@N|vv5MDt7#zE3W^H>m=?BqvTA4e<@ zoy5^@7!b=P(1KKIJvLBq#?6d+kHzs1T4K=t?AKbVWm+1ANOmf9GU=Syk08xxrOIe` z8c&W2&|m7sJ@i97yh&Ky>U#172Pq~9iO_{K*a;EDvbIoPiBJqt+p^YBnhFE}#vLqb zri=v95ItH?8pJX}XR$qzK}b>b1fgxH!ysW}J)KzPL=qlRQbAY}$kZDwaRev5tEsS( zD3MZ@o|3+5#VQ?=D-8s`5)gJF(*GWXQ6GU4AB|B}{l@AI3%nMDz{bR|j!zqv&nMZ& zu!_ugEEmN35rlps?f}TJW}?E`(k501G5yUhK>z}p;xNf9ex^_|Et9rxD~w1};eF;} zQOdtnL_W-edNrp&h!Z)P(_5I)IMX68UZl}_;#$S4(Andsyc)lm`QSOry6P2*GH zl+{jE$w;iqX4TkkRadzbSglOfhOMrK(mAYDSb@|;K}0_3?O@c#Jv2wvN|ozrRmR4u zks_2rm5<f=Z8tw&DE9V)#DtXUWsmB z)fLXRngaIh>oQHy#>6sWP5+>5hGZQ?X%tL*2}EWE%4Vs<<-wPC;SP93#(?qezXD;fwTGp+VV_H5pf|@S?pi3Cl27 zRGABr?p4g%3=7_^$*!1rC84#M**sSACXv-GS`h1S5-af%GjS6;@e@OF6ie|GQ*jkr z@fBln7He^xO_~I6@&6Yynx>gqsIdhZ4-~0^@dLkFs`Vd7U>i!HTEzj1sHSnD@vs-) zibG79VNO}uZN=HuF|#?F-+^F3_}oe+U`M?1A7Uen$6TQbD-I>Krmf_U|lZ% zaH~=sUJ%hY3-i{=(lG~FGRwp=XLF>j-Qc`uwI%XP8U)=*hyb>6Ug;gQ2@LA;Y&IvV zp=~qbiEG_1< z?Gc3Sy;SavoGKeG`I%oXcOOBJbZU%W_AO6njn)B_mhrLQ={?^7zfD#~%zMz^O22c5 z;a?1u>9GLC0Lq=>U@NpZwNud20lI8J55#{?pn-DWf_8O-GH6(TwO9kFSC=(dk2Sq` zAWQ3+ExQ8=9yB^dTR(7U6nP~J9^?zUSRe}D4IUvF>Vppgp%B(cQu*~4hJ_r`VG}A{ zKX_9mO5sly+#TlOm++wXqAI%bOBmgp+UaoPDRJwmaq}s1`>ArvX`ISVbN}gN zsKYQ8Bca)HKPV#<{l+!Ml`}$PNXJPvMh17QO*YEJLz09^oFh0cjX36IIjT24V%K>y zsz9(~UcRG$#3PX!X+jT#!#HGpE8AQsWY2Wba$)2@uE$13kw+qBNY3(WR})Dtb!4if zJtOj4P_v2z&Qr*wg+Ew?r*Tf6g`k0JT+GEmH-_X=Em0Q6VI+on4U1A51XIFS*4PJG zN~Q9q$9fElrpCvP(+7?p1bzsFeuz2Irmn8W>7^*IxHd-=I+pyV#i-|G*NSz*33fuwqYpR)eQcRMCzK+} zcuJ&sx&wM{x^RZMgs~^!$dKR!mScLznujUQTFZW>(k@_#=JM}Y>2W@uB@wTEsGh<=5Vk|^GMO$z_`d)$q;iv_o< zjUKlR|MK@$%}LYLOp>;!x}UnTDGjbiX;MsSm0szrAaJS|7MHR*OoC}(jp^Y~^Z%?{ z>zYE2I?!Z)!fA91cX3PnaZh}5SNw8cJajYnb8|fH1S-nbxtSGe@C;9CKq{p&sy;aC z^F%5{ShGP?>ZUH2%9siQN#0t#sz`jQr{-;vQTTYn$WYpkhEI;3RNrP+)!)-H#Tc=w>G++ZL@PM$-2^Uxn3+Dr7J|R zt5KM@Cs}MJ$!o$MM7@T)Kp?ESGSa^Oc)yNP$80Xf(k}$bY9PT!#qz7r`-jNVEy;qC z$)*F!^1Ra@7Rz!8*z1x_@Def6teK(&F|jTL;PcMnu$*V{&+_E6a|B~O?f*KpNYX~h zIF-|AIc+-0zSPP&>6Y&Kr>tUu0|dT*5B9Z#aPZzag$w;1JgBZ;KXnc%Ry_DFpT7tH_Qj*9&Ynhp1s(R= zXYt@VfgAV1a|lu-Ns9Q+HAHCl z%Db46B~J)Viynml?|@Ex>nNJMxh~(of04)@Y;F={d-?YD`xkIv z!Gj4GHhdUy;=&g$s9R?M3X}_d*PXMf7;|RLn>ly({CTOob8S2GQwkcj;&lJ)Vdi&0 z@aop7Y1g)W8+UHqyLCtQ4TXi@%J+8c0LmMAa^=fAw=15I^ybR5ne#T|ub)%H_7L#< zR~PX0?A6JaH-8>|dd&t(L}uYZ``*e6^QyOhAHQar3!`iHc|1SQ^tmTK!q!nsCcp+P zFu(>Kd=SD2C7h7L3N5@4!wfatki!l={1C(tMI4dD5=}f2#S~Rsk;N8Wd=bVD(OIXz z7;U@}N6+GkE5{yv{L!LxN?;*6c77{Cul77}NJt`4n@^$ofd8D5x&0KXvAJ{R$uOOB zsG}0hFe@C=y%NCV>w?IZbjV2GkX%Yhhth;%&CiA_4nQ&Wyv?~CpbM;>fBJc;o_;pE zXCjp98Lgsq?BV4f(&pi3BYYA)ugfp@+>}%Fe)H{2z0`?pGK$g>5{fr(it`~-pR}yg zSZ@;z%cTxHXV8n*vPYkDc)6(`etOy{AA1r_=m2{TI7e9YGL;qDXn9j}ojL2=E1gR# zYEM;^SUo7))GE77+Hy6c6)=AG*(XORW%ttvZ4#fOf}SX+W!Ntgi_^$RbbxU(bh$D{R$}^ zecG)E0lF+QgHdq*(TA_OcK9eFl=X7w0IKx4RGoVU;zwTy-nj?Tjp}izouK`R#LJhA zegJ92fEGGYe@?sS0ixj1N2h$?Eg9_*35H-Dic3`(;f4{mC}M{o`*caUAO85aMCZhq zuW>D+hw#D)M+XAK4M$w@!WnOzp2r)PTye@5PaJZ~9mjlf&MWu)a>yeGeRI(@Kb&;b zHM-|)6;OsJslOFQtpL+^@ zKwm@kv8SGUE@S6VfvOH3dg%>KTCjDJU%q*V{{K8ESi8=N#2$P$VleIcJN$HR2;hG6 z)VeA19|8`mmc<~@zx*XERRe@V!2*~-R6Xo0#{<_wD0mKabg6<0xnKr0h`|hQkb@xn zpa&}`!V;2@f+kEM3Kycn7P7E|9JC+|XDCA#YA|^9_{TX8K)w{cZZG|~$3bex6op8{ zBJ!dKMe>0)h5Tbn7E#APU_%k^J)m_c5l!nN@f~oDq$JL($N{kUkneR7Jm~;qVYY~p zcWB9sW^kWV;vqr%-El+sW5L_#gureA(2rJ(Ok2LCzXKZbO$%Fxs}M;UJK~Wx^5BK9 zwDQB6?PVVSa7q!`c^i1_uvQ}i;!V)Onp*C|AHsX1rg-r(2&@qT?G$4^_aVE)nBf7uoLx#} z=oGV5L|#v0CX^~jzrO%fpcS#l114g$pbVubLoDY;CA78zx{8_(@us&9I45oPQKX0L zCc+j81@MT|BIKlq=~6d3n%*>XH9eh8bBfc>`Sf!@4P8%(+Bt_fY9Ntts5&pX6nDtb zhxgoPW#mW^fB5boL8FL1sE3(#)c?aD?;|Ka-ceSw=CV=WD`3?sLsqkv6)|58Yb2}) z$EjUZJ5b^1ULEAoQAwtefi;*lAuv)lF|v?`h1lFiiVlah5~gV-*91dI!yDGHvNp8r zW;NT{%zk!+o((N%PiVt~xTA@zNhgWciIQ}@^&O@;8A^`n5aLxtAOD~TJRP#AN>-$m zgozowAn*X30c)QQc|aA{`pe^TX1KfU$6Hdl6^!DAui4EHwKSH^!jj5k2fW(_*ulVq zjF%mya?b_YhSKwrs=U`U?A-u2vdL;!G5e^=JeF#r*7Aju6{({_55f<7Lck|H;hsj- zG0UY~F^fSm)j2duwcnz(BLDe-3o{{LVZCIMxO|CEmozFDX6Y8MUBT~)J%v98wzR$< z{S9gU>Kn5B%{SLd$EV1$QdLbXRTP8ZI3LO4!kA%aG5YUbIEfE_*h5)0xm0Bc>=1Nl z1bfhHOU&*u4=>MSvc|jbQV`&edmz9J{Maz~&asbsG_QKeP02utrQzAABdl(Qb49|6 zV!o95%xPY8NhoZ@yh_Q)iRO(5KE{HOS+UWNhBR>CLy_*L%5RYtS-jfwo@p|cu!Xc$ zkrgegCF_Ng@d#S-5EaUP1#cw@N=OAy0})X2B_~<=NJx^Gpo7MAB^;?POnRNCr1&M* zJFy7xQjFbFKU++UasSMC9XV!bck0xMF%67l;~M5(8{D1Jqi`sUr*QA7PwV5%bY3K$ z{;sS$UOe}_^~4_cRN9gBp?8?9)Kvc{(?tu4D}r9VZ-XBk;R#px!WrIhhd&(R5tsPH zDPD1lUmW8Z*Z9V(V+1%vXB}}6c^r&@5|6LeJUdi~wK?8$m%kh_>@b4Jji3Y1utVfP zph(C^UUG!yJT>=d7GmTv523I;HUjwvKHhEH3NA5lL0h^jVP18sn+pgdA34=rk@x%NIWHzSko+d1ar=S~too&W4!K$9x!-*pc|8tTg8j(J0(h;DoG7E$I$6eV`-3E&_C2qN`q3Y+ z^Uq!{@R$emzMRSfEnVrzLSFI#p#A{?c;Pf2&oBM~?z9R5s0aek3<4aG$-b>Gw$CB9 z&HFZx169QQ=;!m`fF0N&1aB`6fB@&01m)K?C_5w;Ezda(Dq)? z{B#ZiME_0=)BzoEa4*m3k&juj?{t}N3 z`Oy7t!U(7Dxo8KM}3RZ z06Wmo6i+cjKF}gmv4Fk~@N`b(<}eQGaP|UG5M^%=^AP^BuH<4cQTC7!?TN}LVo}yX z5g{NSgvAk|hWTjgxY9z!9D)l0Lo}*vDXe55ED#m9ksI@a=gx)|)4>(tFc#_14`)vt zTmR4@co7#-f*o&g_Sg~p+5#9+q7VtH%7nrgH!K+;U>TQh?JPomPUQip0|Fg_0{^16 z_(C1rp&jId_*? z!Xl{8A*AmZjnN;^LHXn*AS>djicXX!aF`APCSQW_rE2iCy{NAl|ik0QWQEKl+sowD})LVi#NY=Gja zhUgfXQTfzCt+3C)_DS;~pfBSkpd##zN{nFw)3sv88ktft7qd3#PvjoIMrV{pTXaT}vPNHSM{;!In*XFoVvKIw z%ST^D-+1&e`VB`D<1M1-LjJ`*RIV9~6ht=0(IPBk2q<2FbX(lZT3&@Xj6+HdBi;Os zF9M}q)M0v}$CZk)Q642ye#buh(^>LzGlWhtitgyb6h-jIrTXHpHm!gjC`sJwPhTY` z_0%u2Ev9y;UEX0=dgc1cqA2HqSd0ZBcqqz>l02N0Gwu;FAQ4eTguAd5TU;r!3`xg^ zQZZyIRN073^+H`d^`g#3UP8<-DXc*9MSTFyJUDeTWK~R~v{j#Jfd(s)P- zXLTO7L=@E_Vki3S>2`9bmnx!nC<1u6?zSA_IFUzrm`9B8EPAG=dW;KuvUHF?bJd5&w&6p;s6s+SSjOtly+B1Bm0B`e&k1!Al5TLcCjjUZVYJ1 z07!tkG*G!If#!sP1V~T=$BsCQv{p#8O6zc6C~*;YabxIlG5>3{CRcGkD2H~ahf+pc zEkcNh$ex4(SA0f^n8=CF0gBe}Albw)`=X630*$^%jDC$G$Ot^}ayDMKfbgj>WVMNs za0!pm36-WN33f1Aw<6vsitw_k?xKzkRc;4Ek0|zY&b4R{f|N{2zp4vdR!NFf)gg-MC26UZZVAJzYza9Gm}-fC z4?|Xi5)qkj5gXAanGt;T0)H){wvq`b?!s4}S23U|yrAII?DmgBt)#pQRjYSP-(;k~ ziF!w^ff4SUHdjP&ww;WnmEcL9=(L{rOpNr2BG93qX8-fZ0xBPrkD(~YpyVu}n1rng zihzaj9IC7skFg*Bu_jY^DIn^HC5oc<#n0{n3klPLFSuA`Y%)U1SeMn(Ksd2f3e=FK zrC!Q=C2Me27IjEAj^UW6V3uWP_Kss#kMo$1=h%)>2RV~!@jL`)pNfN`N_VM>&#o^a zxhkp*1gyl0ZHxl8;!I?z<5}9Ok`cpGhw-BJaS@eqfdSI1BAKq(#I8=+x(=<2HN&q! zYHs{Tu_$7e+eCU(YH!jwpB_scPW7k?w{aOaaxaUR4VQ8q_n3t_nIU(XCAV@*=(JMH z9+LD!aQ3y{N&s&_kiWK!X`kAch{}++4#KyVBDe-4x{Cj6T>DqKnCo8*STS6(A`Dn2 zH;g8s7$-NQoDYIssH@qq5YbxMFt|&azDqK~t6R{^ydVI*)C)M+i(;nw#Up#CnKnyV6vLfR0 zvY#`=fXP-EgJnfVqGjH=$1)%>?N2Q$4GU@W-PE2t67E2S|tw2 zY(%5Cs$HB6%9bUbemOC(tRTVaO(T%P<}S=uZavKm&D4xX@T|?=Y#%InQF+N8?Cg2w zde5xNbOGZuQ*$*30v}uxHsuqFY11}wlh6LTF984Tt>qH}`e8Yj$=Qq=F&M2(HjN#s zb<#Y|(mtjHGHtUFs?#dX$4Kg0P#CjWmxXU4)mF{Sv?XRUi8M+qe8E#=Nht(ME1JZogi6iCFZlm9OHo|4u_=2y<4(Y|!tWbU1O+9`^d{JJ z=iF3M;?#cm!cHO2=+3sr^@L9ayimjLRKF$5?S#sW8oh7jz{DI_Cbd$J1yh$rQwIZB z9q-Gl985;_$Cn~p$QVwtx6VO>RWTgBWA(uNyrk!)UT_s(^o3tIx$y{tc;Q^!zSyv+ zNm+xGS%u7EB3({42FH)ev&);~u+_g_n<+rCTe)@bz?DfbF#pbhH-m?_eQ#fns$Yo@ zV3BWN-~4A}8)3bMBEUv$8di4%oYCz=V%-LTICx_n#?I{qf1Z`c4as8<;;Gws=SG%} zcgosz3ftwlj`7%!xqaLBxZA<~+x!1`bZYj~lT>HXmm<==TiNIOhE^}Q`Dph-YoUm1 z=L`VBmI=q!01s}mVh3b{KmnUT5UmHFeDIpm$$<4YdoOlZ7R zk5!GkH)P%T<;0g4C~rf`Hecfpwac5#xa? zB7y;qg7ur~@dJYcT8y=qdQJbT>rXhfO_=eCjK&>qh4DK=T-cprIILgzox++TYS^l7 zcp>@8pAw^!mzWqw!-+-t5tSY#sF;T*s-m*^y0-Z6A;hDiI*gI^fM(h2%UFXS|GU0^ zjMw;tBWTRD{o0v7+pGQg|9ITPo!pxr`e`bVA3&)>q>!P?kTXbM6xpg6xeOf{Gg3bv zS)U(WpMgtxuIg$_?#isYaWSOvPxqGh#_){Ao&_RJxLY=x21R*F~$Z+Ah zbMhLdJ4dl1MRgM`R>Y`rW5$jgJDv*(@}owQCrw&Jxl*M^kt1DRlo=By%ao35Et%voio&_63ClS+HgS#Y1f<7iKGTtx)xA z2(bq$KaTX_;Ly;cOP^kO-#LHt9#h}mw&_#C`uY_O-;kg9hV#-YWcT2nLUj)$7iIqd zY+HN}xH7!=pdHV1?%}1^LVf}E-Z}OZHP1hXDW#o46S=n#Jm>H;7GsV7@9bIxa$RL5jUG)MAN35eI>B3mL#$2|p_3+=xULDWVxW z7zv_xl#xf2lL|dl&rs<2^MF0|`18+GUfna#m-9RaK~oSBMqxkp+;hNt|HK!`Ph1Je zP=O5b(%wCDG33uV7bb;(KldPD20wW<)DM6RHTGa+N;c}~qmV{Qqz9+5P{M72ReEVd z>>$K~2M@}4T0sh#mfNNbbqd9&kLk$cPzd>!)R2TYvr};a>Ut^G_sC$w}Z}sq*vFh6>?x-BR!5W92{lsD<7+$3mc} zhPcKn@4Wx?)?4cZ7pSvNa+o$(ro8|MEU;0!LRZzmmZbw!XZ);*@WT*CEb+t((a6G5 z58boF4((Fx@yFD)vvIQDf%Z^>AQxqZKmCMinLP+tXkW@S*KG66o*7Uns2E!WF3vy) zZIrkbmHb(H9owwWJuX+ajdhXiEzA zIcc};_So_zDrM=yQo&rfgt_1G(3efHdU@BQ4{e=q*{<- zfe?(K1Sd$r3R>`j7|fssH^{*b<}M%rA^8LV0RR91EC2ui0FDFV0RRa903iq*NU)&6 zg9sBUT*$DY!-o(fN}NcsqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*vr}7_ec?a|P11`|sxpa=xowG+(IrE;zZzJbhS~ZIj>>OVIP#qifYSyk{4;-(4 zr0shx5hvGo>=woGb z&lR;#KO#;?RhnxK^d?7lZe%8mu&u+Mj|-(!=RmKu#$$V<4f>I7XBLUqkq0v5+>8($ zd5?z&v2#vm16hixK<$7g5PtKONu)y^x(TOIBYKsmMz3c7v?pJx86c1cJN770p%A3D znxO^pT95%Outr|5=K(9w1>LbmDFo}h2E}(mF2ty0?;P9*;< z37nI@owLtC>f8e`KcZUX&H)FjiLu5Ha7@rU_Y~;gz@UQcPb3ZhNV3TneH`+H{`iyP z1JJ>vk3UmBJ5jx7QtaEs0%g2$#}J^b@;@vajT_R?LM-uuR!4H(yaU-Bu*h%K3T?4M z>Iwm`zN)4yp*s#_K#c08-S)0%_z5K=Yh4U%dT5iMr}PD&+06N7~yE z*OgjmI|R=CgAd7+I_b|n^+dulMe6{ZPd&YnxbSEVC-1w#1_}hvJo?U~Jv>S4OMHJ! zOSDeF^&nsm)#`Z9-vb@@r;k1L+_N1!{@r76!|DIGe)tiMFR=Mk!w+z<#3m-;!#|&r zh>Lc2z3gqTd-?<4K->pE`B@Kp|Ipq%xCgC>;e&dok=_R*#vI)FuYBi=3*3NZHeuyR zSizbb1k~oIV?p4BGAvXLpbnMr|I5>(9`2<~P{7r3#YZ0&*J*Me zl0+{(X-X}^Qbqj(X*+-&@7i=zjQA3mIbG;Z1!ByEAoZgV2x&*5DphIjuBX+64e6u> zofghbn`~1Sdps1*ZLUpNxM~f1CIr?YIutVSFixcGvPOv1l0?Kr$4?8wi)0EUuX`N` zI`;7ZcWA_y5G5)E5`-C#Zp1c>jN~L+Wt-zI7D=46jS>?W5i>j>lZJIz6Ft<_Kc3@w zlpU=_JPTS5Js?0DyO(0maSx;aIyAGYovBm(3a!%;gt3+VEs_Yy+I)l-E@HdkIlZc^ zv>rs8W2GCQoJ$b2qQ{(2m{D5~qE3NmPI7t`mmUVOh>^>~q%AjBbE9rSq>QW}NtYm0HtVg>gATPVbh{`%(-^-f z#wL>4iDn+Nn$yf?DX!W7&25IFK->Yxf7oNL_Kl}Q0;`XIY*J?c{Z>Kx{AVg{m zIRA_&1Z;c}M;qkRB!%jge#~D`55&|_RVlEmDiB*E#MNQz6SGtU9b5$|T623_kl4{f zfk^uT>=2T7F0hVb0qWY+MkjTpjkk2ZRWbea$2{t*Mm;lRmn=&iqUl%Lf$)R35RiAV zA5d>~lr$lL6l6lw5wmvD_R$_ zL$t#o?vPJOr`{p|M+mC#_{deKJRuK{c%TS!a)PLk1(CX9}_|c(BP*p;8Zw6d;f4k8Lq*3ps02@RtPWneGgqj=yw<$ zDw9H*&|lsiANIh9u0ibQhS2Xn_hTf`jMu!R0Sq50{l}Wr)en2zBl799*geh{KF&J? z0mDOp8S*Hq*zaTZ`)J>flb1<*IFdxZ2Y&6((Rqg8{vNvL{gtLJ>z)6V`4M^i>ur9H z)^GnuApSl7?N5vl*1I0|r%(Na`dCu+^Of=FdVcg<{uU2Ni&`+ge+jBp?ANfs1D~>N ztYJ6$$A7)ze*j2!S$1XSmUxar7jcIW@c=Rb10d~UFb}W~{Q?2rvVjyQr-qcsMB zd-a1c_5d`Xg-v*LIoJ?V2sA%cg#wW} z8(4k15p-kt5G@!X1%ZVBp@dABg}Rjxbl7l1ScJ^chgb7QD%gf)NQDom5f^X)>aY&i zmN#twcZhHifgHgPP*@e=0(B1&Nh@)QL&1p}!4HuK5uON%dtpru@gDKvfuz_L_CZhX zrV)^p6=vWM{lIR4QgA3Si?t{ex@e0JVGjs^Py&|_y|{{dVF34+fR2b8ZD@>c(Hppd zXBeS|S)mV?LJ^vn64vO8IkAl$7BP7E5Z>sFS-xkMcN= zC2|?`c#lWH8ThCdpYa&8!5ngD#h|6wIk<3$F+SS&~&mG>YK!cYzW zu|SPtB4;9NC+QI^Vh}+|6c||-RmYJSb51lDMCsupKw^N4@`yhv6_RKWN-}v*G7vjp z23*ON5d%0^LMCZAB~>yi=Kv;RB9;~5OLS6^Q|S@FBoJ{46h)a;9CB@B7#C?5x#^FK1rAvF_&}s6LmQk$wghv zRb^`PT-`p|L`&~v!DkC5nhv^f8}fS)H6R5G(RCW-DYLmR32ypl76{1}k&9L7^;1LRQ^v>hS@LRmUI#lxSbl@Fc;al8O( z^#F`!^Z*m1rD-}rVj4eW>Op3@5c%^x?1QK8qo;y8rVhiWBvhz`$`En?iU4zZ8V!^| z4+Mi4q(T2gL5qq!Zp?R~ZDP)!dlqFu8c?jeaFFK;= zghOfvRx~t{wmMEb)I&7HlrSoFa5k(|6lYjutXzbwV5F>NMy$u`tXfn?XN0P3L8On? zeTqU%jA=)26i3Vlk?n$;sPS1sI-CxbScoKQi?k6DrEpqk5YO~b(X_58*m4IjF0}+Y z9LFj2T68}aub70S2_a0xWOU?L5CCga25X^>31kQnmkUb~)HHPe@JUp&u&Xp971v1> zYf8N45EFYcw)7+al}iG#ORz~3)`U$Y`c-|YP2a?T=oD7sgk9MGB#2z4Ne1`!F?lZpjL6xDngA#0KLuBpap0)cbe`9U8v zA({dj`EW79QJy!{VD;v;{(2C@CR6GFwi5DdCZ$v|6|oEZwg;63Wy$S zMY?X4vYHWBuecUKYn8Z|QuWnW1p!#0G+2doSm&x>m?D$Fh7q#HV0q|YmgT#;#+bM< zBV!8z`4A#!Yo7feN3{04OL|OycUg$!8#AI=Mnqb?X0X@)E0e=(TFL8}(aU_+r> zeHmskx}%drqZ2H_<7L6@<)b|Mqa3`!9y~emWe@YkjcD<@2BEDGa5^XkU;`mws${hW zrYE~AwV1+Ss-_XLCcfZXWHua%4zaw=`%vd#SVwXIpCJ$b)?hxoYba(}!s}K%W@1{) z#5wE43KFpiQN%}_#B#a5Id*DvI1d! zI+0vYNp{*)z*OcdEQ@6_}Ru?8bxuL{yKFfheTVPhZ4{&;D11Fq}*=W40N-8yJ>^ij*HO0TiwfJPUp4W2g z5FXF_FQL|kunfj-Ys(5jy^4FxtX5!m8^#9V%XB+nmDp>-{1M1z%(UE5p%_WloDs;@ z#juuhb&QaAtZZCWb~XZS$^vfH1_9uvZPUVS-bN7WEN(lJqN5qC^pS4smS?nS5b#D2 zx_J=yW)S)|s{O{rbVRNYv9WwKbwibKWXy015p!&mt{=6qOa}oRS8ozsuT0a+{{WVb zyKoMT%o)AW3_)~M+_plwOikBtSp2Xd{mdT!_gV*mbk#f2JvTa1hjOSq%?L|>k)+ZD zz0)(tFhF;6R?CL63O7B3T_zg9U6+*S;dO8mc4N1|Zj*Lt_nMC4cC*4tflCr|WONJRW3W-t%+z{QL0*T{U>?&qiBr+moFzNXiHiT&AGEZLNe(B}7j*3*6G zN7@izdkrCfyGMV?H-6XLLB)4`-6MOp-NJzFe7QH<;S;?;$J9Mxf8Mcw`Ip=V$PNe? zfYMR|1jyWf^xUO;tACjg-G!M{@wyZLXoGd~E=H@0KLUdNGJ?KQg2B0HgUEs|*oHA^ zhWJ2(2vvb%7|jQ9ocpqY5etY$s3rA1JdXX*LwvH#2}&qZgZ6#f&_aZPNF!i~hj`0t z{>>aQErAEV4`;H6b7+PzO}J0!5QTV#?GoYr(%)Pdgm#F9PWXmNGKD0bq-!`^;`|qh zxQLC2&)i)Vojehgs1>8Q5SO{*qhn{CXyl)`#EfBzj#!f9P2@?DlC9fexJVVn7}$yh z<>W$(By1B`-lf6Vv51zgkI=|o)-Q8c<740=#yataPWt55b1GX1P9^h{d^Ue%jlZE=~}@K zMiA*npaUVn4v`K73nJ;0PDiDl6GK@NnI019Kt1>%=Qim(stkzwkmsDf>xK>ls2=I6 zED`Du>7u@rpHArtMeI4TnIQ4%An|wyq?Y}8mUbuY+Zi$S@Tk1L?TfAhpw15KpaaO> z?Cf^z2azK>!R#O5>>hC>+i@hJ44EB6DvU~}ag2%Fp6`GT2dTcDpFZj9=jfB}>u^x) z;?D1r9zv)-?gU}(@wM;;aqyu2hyM--p`JGo^EDkqp;=ln1zMl$IV$6MTs~ul`S2_d zDxr*opMl7o5d%N}0Gq8F#-fr}9 z03H91>X=dVlFsl0;qVRv@eObE9zyEBF7?-5QuUzQ;1@xGN~sRCL5eD>izTN3a~iLD zK>v{Sq-q=_Ql^QjDQxN=2=Jy1@eg82V1A@~o`%cLH_8c-AfjSyK%e+&p7iy_?{L5l z?BMuF9|u4{>Tr+_Y7htEaqQ}#^>8p6=|J^YFZDSh`VheRNpI>95b0{54(MR|2Z0}< zHPm80OrbQm46(0tjI#X2N+e4n39CuVd#_DH__1%(H(>(!nmuZw*bNJ+&c*Q_CaWO&K(4X4IM&wcP<{o9RnexJ9iJlK7J7HolEyn zWW#j){;eB1vf_ht58$PQ8B^v=nl)|S#Fy<3Kr|KBKg}LsWJ(7DN z=sg!$Fvy1c`i<;&aHPC`f&ZPu$Iu>Oh8ZCUtk;*X-pmc_om(f6V7`tC7s~vnk72%l z4Iw+kcdjP?x_u8$&usS~^E-a$UNQw9T=;O}#f=|Fo?Q8I=EK*W6*)Dk)vsB%#_9Ss z?AWT%8On9bT_kw8;=!AZgL3;?n3y&Hh5Szbe20b+D}E^N+<|!S(0U9GWaNi%3IAp_%Y`Af0p`KoEj|4shsz)@ah_0fK7UhZmCk>8LpsS7fn87hi-i zMj2;R>M8abLJzIWo?6E`b?ovAtheZj!>;eddx*Rwk-W=1@ocmZuaq##=RF7>Pz|O7 z{JC$WeLiFeK*=a8Fu(^mOb|gV9SZR>i$aU=HkjNwN1l1k(Gh|J9&l()hkg|4vx!my z)S-X>0%Rx>Fll78QAZzzG*U??ZPBYZfLKQz9khY~jyT|8haFGhfWW$jg4|Axb=Fbi zQ-`L~VI5A7{Hn)SuadRNwaBydDH~_1O+9t|f*=x!V4~1ShZ6JhA9NZLQ$R9bE6AdY zh`r~5b{L{lBhef(ji!G1VYVUtTSO84crUw{7v zIN%q>^0ltN3g)rYOC3U$;DW&-31MZa^L1j0*E^CuAUrjK~y{5fZz zd+ga~M26rwryqOnK@);<^E-zZGv=u$+5ue)aGif1$j6?1h*f83d?E?iu5TL(ccwf4 z&)MN2UI3&pMRNl~w;=>FnkVdex=xpChvLcE3^N-0O<=d*hC6P#=MGp0f{mC}ox6=R z^++K<6$=iC9a<-FAPD^HZo~`!^l*%`yD_bWXX5Pve~vZ-M|=FSe4lL{LV$CT8@lz^w_bRCjI-ly$#So=8r>DMp>#xT?Mk$Naft?>M9lWN9+Rnaw^Up^=ef8HLn91T0c6BCs@TsRBlJR9f zfBpC8zkmPr-yU&*KrlEsZYJ?CiRJDwy#F=Ofe(aW1SL2@3Rcj97sOx&HMl|l4tCIk z9|U0tML0qdme7PJL?Lp}v8oid(1kf+2LfI=!xi->g6Sv$3)I69c0j?0P$)r6N&p29 zkR*pYL<(R6gD4t?FgAigVp0+^58^z=Y$C~rKccw0CU&tn7|Brea_B=Al;B-4xquIg z*pMFnFo-Z2;u;~4Mj|dnFZbBN4nF6_54IzZABiHN>d}voEwCZ_NM2wV2!YQ;aUJ&H z#Yq}6kLL-`Cw7_)*&2e5D>j6Se4NxhwDu5D!l;zO0VDQ)xXLpU%7+(th=qpu#+1Yn zN3XPFoj_Sa{RDC(@2H(U5NRTcsLh!FaF$5M^^kdltY}91$N}tefOCxhk|zn#q-XTO zz)$WHQugr@{#pdi;H2_;YFq~$<+!^=GGvxQtRqRdsjuD9OTE`HfP)1nJq@E6a$UEjK!F=N6Ypvv6%^YF|(2yiGGlAJZ;Z?ky zjs%+zvEo8K2^oKED53pCoj*FWlXq+>WcWbhJMIz5kZpAximF`{<&o8`5=tM)v`0Pu z!He76Lv;I)6IO?&)rN?btp6}8T5VSob=+fU{BRjW#yT{>_I0uUWo^h=kvUk${jgk6#&k*_=q$a{6#tVGrxF&k82Ak8LbNGW!p_HUu8}5M4gr)eaB& z!&n)TY+B3m)_=rxu6czNM*nisn%WWqA6@B4NZJqstTLq_<>*MQ3k4(5F}gODYD4HT zUh-M7dC_ZL2&|XA?xlx%*DGK2(l@>Bb+3KNtKawL7r*oUZ+!!NU(VfwpAqaS zP13QBc>JSEBDvF58PX48G9<$AipftMqMz{Mro))*@MI2U*m^Mpk^Z0fLtH2W99XDt23_gjgg5D z9na)sA{(TLNQb2;Z<)sRurWh$Ol4%sn9E?c=SYs6W-EG)lkSN1WvtbmZs#U4#7ww&!LW7Cz98?-gU2&_iJ4f z+t@fggalB)Zksh zqPB8Jw3#SMN9h>%zf)4WfJ+=96rV7_ankVmh_mDn2g*lIV@``#CF6xLdB{H&&@n{? zZC%@wj)sLGfls_j2v<0sD79S{G}oi7E_Fjn-A45|x7DQ1?mO3k%jdE>FCE5dx_FVZ zL3P`gDPhMBvK4OIQf(v}Zb&5Sv4hk3CYB}%WT9+QZ*YZ}OfY_yNruA3J!xDdeljti zAfR_bQJKm{`j$cB6w51VWbli62*<;erNHCJ@c2*`fPVBNruki&BEJ&lAo0rE*Zr4Zn?yw4Oe-iu?)8wD`<}KAp^a^V zLU*Xyoj{EY{ocvcpwbiW9Bsuvz!M395DXnjywZ@6ergPLqZR>-Jds-v&+s+^3=ADn zqU4DR$?Lz!`ag%jKiC7i!FU(Oa13g3y_9G@4b+JPd5;Sm3<62P*dsv(3=l4|4EN~0 z2uw84IKai56y>@ITxvd%!anI@HRCG#&A3~a2!W* z95!x&vEmZH|9Qijc)y0Aldc0Dp<|Op*#{##7D8#NdGS7h$R@rMyhzeN0>L{^oIExO zNXVOsZ-J9=`I0^f5P{q{&=Wxa(u)ZP{KSbIiHa0F5WI6W^T%bLKQ#ru+H36lV^ON|tXzvPy|gb8Dj z$BeW@+48u+G)S2^%#ehQ2WY2cF-e%nOMwEGB`XVJkxXRq%+QReWJ*k!ER)r+7ISh; z2nfu=JigIvlq$QIAqLZpMI!rTfG6SWupsy4O zeBcLrm?q^J9*gup(n1H$iL0to54#kbvDvUrs)?()hkH=T=fMY>8Iwp5rWh*><-rF> zQ%RIj$dnMV_#B!%(ZD@hnx?r=f5=aKP{{$b7C?l=wBZ?f(Mkl>PtW@krD2+X*hhFl z8I@rfmr=n1#ZUvy%$U#*orzE;f*F~S&$46DnrTJ;tO<~rw2~={4qcg+aflV285jk< z6Wy7fsX<*7v!N*(KP!t7)li$PJ2{b2M)3fdqN#O}(h{gCHX0%p@BqZQ0GTR*?yAx& z<)JLy((2Qw=c~H^b-KFf{J!e+HkpVA4^bcnDxR}D2ML3h*YTW&K%T+iG<9GqSF9wp zT!-2?l$Y_ULy00v+N-;SfY{))n3xQFsHy`5NY$y(F|La`rfP#-*6|?Z(b&sW;W|~C2-Vbih|npdTNRzvYeh&czvsD}I@BD_8Mmv#)zK-@ zS{*mlAyP4W9omweRK1-~Jw9J8p$oVGbyx?aqzSBSQw*}spx}o{og3cKH<)OsZ&eO+ z)rs*b*WxlEqN|BJ$|F2gR|oPVv3pZ`dP}-71Apj;t`v!My;tM-*MO~w`Kh1#nVW+Z z*bXuPDJ|3gZXFD@ELaD6qQF>3pSUpU(FcOE34*=Y;rQ5xb)H7uP<|=dk!9JIb=jAN z*_f5tnWfp9wb`4+*__qcE?S|D-PxZ7+LpB;fEn8B!66-57ppWvIXYUO{fP^-*r27J zjNMl$ItMC}+BUVQe%abcaj7zDONUUWq;(^BlB2Oz3VPL}ti_&u1tgltHbN4a;fYm! zu-6Yv!${g8O8TmlWn0X$CO!>Z6*;AH>Q{d0T4A)Vuq8%jj3rt#+goznwDrEft)6go z2w zT=QH1pYT@Ir5?=nPkQW`X+2kgAkBWth=OW|gSu1T#R=AZz2@zdMUyQQ;KC%P|_(45?(vi5k)Z+ixo?wT2PTlsy_)-n&>Lg z0jtb~t-#XM{9r4YPzT~NF1q5=yUMGz+N-S+Eyxlx!E#!7Au+@fV9Tnk(TXe!-e3=& ziP@?x6H6q|I^hncV4g57e?To9$zaw>VTPFC*zyPmwk_OprrqkT-}>MJh8G2vD+cZf zcaT#TRuh=E5>QLpCnMH+EwID=@}o$EuBq1#7SeV`<$>d z3$wqNvMMuS6jL!41E?SyvLf>gBwMsYYO+W^v^-T-3*|)q zvPG5&MFU+3AT&dhWjHG|JL_au)(HabGo%@1L3szLz&caS`R zFt?6Nw{;VVc3Vq$`?jc{%gpS#k1M#t^;CjLIEbJ}hafo!csSNPH;*H@iu;F)Yrj_= ziI9%z5}i?+!@Y2-OrB7=-Yb@wb~$pZMVVOX)wwx_$hp(xIhdw6phIaoP6_?sra31E79qN3gub$7Lb7eTcrt4&R7nZIZz3)k&rQ-_v87G;JnT zykNYEep{s34(-zxIo_r{%(K1PhLPk8N+@8yqZ279EHxxVXQlJvCgdpXTkGy?Ux$K+ z@SC8#&M9Kajos)Cz+S&Q#1C|MM}~+$Zg6nRB}PVfI(K2K>?>08}yb?NhE9=CV=!#v zGhXsEZt^u|ayX9iIG*w<*TOVhLzCSf^JYKAD3KExCB3l2e91%q4?#$UuJ8N1Z%}M2 z{;Nd7RPk^z#Yr?1LY&n^W4pkJ?{@X@nJ ze7tKMQS7^W0L0wv--ZB*vQ>_SHIbx!vE*6D;_hQ7}1+)jTm6135owQ;*k1W)nQbi_7KvC$+B3-75K zu>fUk0?klmna~6+aQ|*nk7;Ic#(fXfQ5QY_%mmUDg-vP^8lo{8r15>+wCv=UiO{(R1Tcf%7?I}Jea622 zBlYFn|4XX_r{-IE6h2m%KZENJi`!h{MJGHmGZ zA;gFhCsM3v@!~*v=hiihci`UxfA`c8jK}Z61AaRQA~@IXpgMdY_q`N&?;OsY{s^k; z*NuFLoDUnGtM=kWt6av{5O?+CU#=T2a}eOC9$n_4yGy@5)Z zI)y5gp*nm1Lef;b^x)cqO`k?3m=|K$v1M8R&i$8`@B_nk72-R$)8V_5{_>qOGcfL4 ze{~TnPI}j1V7h~arW-hP;5wO!_rXKmwl9RNTL*UiI!7cQtyptcvE`caR;D)?@{<6 zh!L9MPd}wKBo99I)FV?rA%Ztzi7v`G<3$FPfE^1Sn8*-!IpISikU9y72u1n!JtrrlUBPz>Y%~U}xz-ks3H@LX{3=D-^hrw_t-0 zqIztA7VdyyL+aGiPhwZ1_R&B10A)};8x>~{FaNwnRbtj6JLf(8AXM&`sXQoa3*48cG87-WXF zKS$0GJm;)*nNNr#^v(f=;gjAw_jH?BJ*Y*(SBCP46;kR7siV(R_SEwaFSbE&Pj9*l zTWrt&OIRUqv-IaA16HV)2q%pLDi$)5bvw$-f&Jh-35O5pJ{LW zMeckQlFOGhpAz)v3*XNFNB%^zGQjUYkCFOTwGV+m*t4|Kz(XH}$p_yk@{gPhjeI%z z4D*~9Kk02RNM(b-I_8G2wWUp0*x}hg*hY}+%*#?9gj)#b1qGl0%WXU&SV8C^!x_pD z9T1=)4Q+_S8R~F{^yuLZfrvvP=J19-Bq9%u7(^uwk%>k0;SZgdL@3&DF84@a!4$`k zbgUyD|H#KcE;o?%7^EK$8%UB~;<nXG@=r< zXhkWyP>gO=qYU+EPB{8eiJn8GAqD9~NlFrDE${%)LzWg7B9wFdWQ^?jNI|kf4}#E< zA2=x|OpKCKlwdI-9@0-F7Gn@P)}$Q|03!sFv@Sz#D1mdB1B(x%3ai?AT`j4|F_NzitAqzGbtbg+Co+;#+uB75K2$)uc zY+HxGSnJP(5Uz0Mkq0jv_M36VR3YqGR>goqHFo@#LUENlOr5nP|1Gg&W!?1uUSL z7NPF6ZFu0Zz)lvbx4OX}1VROp0~CZ8cug!iMm!L7?BfBxqX?6PA{EbaM|cp(7DobX zkgVjSUb2BeKFoz)2*{%!KRu0lCFfp)l$juC76_YhQm;)d)I|PmFrUw1=079)Ab~zd z0_%L|P6>p;5Mc13DU!&i>W`h6ISyly6??5X zBn35=F33-T-FP5DejCqt{7;+x8ppi)HEf|!uOjQEvI3!^6l)mmC_=m1N1QeirETs1 zC2qTk-G1V=QDYB~MB>zoaxy~_`&f6hBP*6cO=Jn;k24Acr}BL%n9s2zMw4051QD}( zsSJ@f#~A|X)yM%7B@YQ_SKxSYaGzgYIfUZl9TvYhfg4Sbh)cF|nMMf070&Rw;+5nN z*HAtD0ph+5<>DBRF}yiM>Xy44-x66z%2%GNbC}A065kP?XYK4tyz3mxQsX*L8 z$NMnZQ0QKWmJ719^dL8o|A1K|&#_yWP}d+#qN5EpP7pN@7y{jj$eY(eEA)#0W$~SQ z{GI`M4>HceZ}iLjY~r@tZ$McmZ|{R3Or42flE0feemzAlDx#*5O7% z7Y=UdNPf;f95WAdpX%-jp{$wt*^>D4qvT22EjtqY*pWM$sBo-Y{%xLrElo{m)nT-R ztTn`&(S}!C+CL=TeF+2tW}e=;RoulIL)_2cfgbHCo;6t@1Q=k_E!YF19zk%E=b#|+ zA;diV16^%VzF=Tq2_6OVlvZRIfM}pXwBQTgObjMq=CoJG0bTI%AVfg_Rs!C}1LTYj zo?P;&&_E>{`R&?)yam%42uHM#f!Its%nL_^U%$u=zs$`+HQSM$-$j_g<`j+l-3C9{ z1IRcAP^^PJtd0!ATl_%)I?RRb6ophEpgGOMyJ&>@Ro6LG%lq(+f2jjV;KP3X!?mQJ zKj6bQ9iOA!AOn7dM(~0e%tJl!pCnQuJ_sP~F`|S$V&MUd%I(8F5R)i%;3766Dvsbm zY+@&VV(Mj1KiI=PI2;7%A}>1J$En=uF$4mL1Ok|WPt682odYYnB7yPIQ`rM$07x@F z<379;F*?LC-a|4jBk0|s?-5}^Y$HUR1U~d4K>(vVKGrI>Vm8wMqKkOI->^X75Cl8a z<2~ZzjpWFbWI^wO^(Ty&CpgMq9H_1L>q#|`iR7}C=4&$gR!)P z*2Kh2AjM5A6npeUO$EhJ6va`@9$R3KSy%~GaYX|{Kxk;jyHJHo!raEaM%@9-a%_eN zX53yVk353L>(JzJ6-E*sW3-GQZa@Zati}dnhHwC-Y9L4NNhNa>L{lcrQzFL(a+Qe< zA@FIXV?@L{bXm0=ba;1Q`toliX#Q{0Ei*=5z3a zFFJ%^`sIXxmV(4uu^^^nCWNwFQ+RC1lKkFdiV2LcpNwSxCPq9`Rq&NUaOPz~h>hR~ zLeiy=jHYTvS@`TEMWj(>YUXMNiI!kVZC(T)A&1s1#BI)|Z~i852B&ZiCvg_1aULgf zCZ}>PCv!HZb3W(Rumb`>AVx?hb>>PBLZ^0aCwF$IK^OrXq{lkM0eQxO5gY_~x@JZ6 z3|w&XF}=E zVTsfH4h>>OZl&M5utS#CC0AfgSO%$>j;X=G0f54UeVQjwr~`PKCx^nph#sk#nx|BZ zXL%wiK`<$5{3o75fSlf^c%~^F;3q=}g;+#R0(B2^_)h<@4^SBDQ|JTV2nA6XMRUl{ z^#~=!7{q=2q5)|PXcB~0nOTy2MdM|cB|2I*(i)(xs+S@}=By!^&MK`QN{R-Go&G0B z3~7gwXKAFVu3`|MqUV|R&9LTaubRkyb^w<^XuoKm8sa|GVMzGdBSli3QqyM`DzxT? zP#_{mD55f@Qr~RSQ*cC*T;~IriZ*f6KQ!n+JdV8y|5Y-oUNJHRtHNZCB1GTSs=n^4 zp783anJF9)7r^>y900+7!a+KyK^)MEiK@f0!okm!Xt5$|pX!UA4n)K9YJWlid8&ar zpu@!)m1Sy#tPaFnSt(z62+4MwR0JS_g_Xga~O{#!hV4_NksSX^Peh z*BYXUKvo_i*kM4J;aMiyz9*bLK;nts@eLSy6@|e;+Bo9ilkHZCZH20&#XgwJO*E)j zncvWEQFJXW<2Ejv_^UxcEM4hw=duDt*|sgv z$(p1cV$h|U@4(t&FbTgwoWBhOnnBhMB|Ffh)@lLy)}gK8gD{ym(4k^13$2k z+^5k#EuckhUPZ+EA~S?)LA>i+W#JeR)Le=)|-cY|K4;VL;{;%5f?g`C80~`Q3`ypU%9YPRZ1e;1MCa(JNP;s- zmo$)=Z+z$gJ4{y;x3fvVG)%{IM4&W$^r{%kG*0KVP8S4Cw+9diDn9SDP!Bax7qw9z zHBu+FQZF@AH?>ngHB=ADpQvY4SM@h13OHj5q)eef_>5K$Oln&7e1yuxl}D+FwV0%s znz+iH=#4#wD&Fi9pmDW5bsq%O%)l^+gP^s1L}poo*D)E!%d7*n*q0LjH63=#x15B9 zmUO%r#AAaEl%Ywxm|tY8|A`7ITeHO0r5F^Y*frA?q#7MU3SjR|pe-ptM3Y@9xdwvjpK z;S|nuvqTU(4nc?!K~T2@@;LPG6lETwDDB+G?c|O% z^-eQG_&{JPgR>-D=+6Wd5A`Vc@icgXi#YdSxPU#>_^|kflX&`6mZu6@&wckNZfFjia~)2^0ot(6H&4c^~%(snB}g z4UWwV3&9gzKFzmH(Y1}awv{=Wb6c8w+nR%$n!kAyS<#Vu%6)T@7m*czL%?481-(U; zk`!LPI`jX@(cIb5x4u$t`q8)sl4Dd-A^FxJC6Ws=lI>3GEHU~ZJ$io~x+*C;AT2~X zff6$L61XM>r-$n*ExM_v*i=sK@gQ*GN(Hi6hSb(2Lvv$Mszt%v$Lk@_nE37A)TLh_SmclB)L6LI$w z2<=Qj4OBsO|DCOU9oxN~+jZ2t%X_?!RK1_nyxTjx@B2nQ*6r+Q1AoeW&s2f$xxD7o zIqVczrNmD;7K#>duK1rxng}1yaNNEXRCU!uyqQ%EPY{c0b!+?zwiU)_;AZ{RXM`T@ z!R%NKWkQ^+$+6gLzvV+LmO&gATBSVg4OYECRt}y#Vs#*1eth=uTw%Q%&UQ0onqOw& zd}j&$jDS|v>DXyu`CLPRYT5O-SA9Yzn`o7x*J&qi=~fo~wQm7eNe)+W;Z?pW7jvaw z@BPf;qNs8cvJC%Zp4G5-%`1x57f=w~dBx zh1cRY|0&@sn9Mt&bFgheG=7I!7>4nahE3S#R|Mx5gqD?9O`zChQ-txh80o_p-gA4f z&=_{uSohr%v)z-hF{H88^|7VRkWqd4DgAINnc35M@-KvbaEO#WKw(;0Ietc#u@#qj zS(NSw!2Kl0otd`a9-xJfo84f+&DrWMP^W-D_t&mKFxsOH+O1jq`Y#&&BE z>T$Q`JBRDS8$g^BIPhFL2oU=1JGc-6yL0sxraNa3!a9Nk4KmcYaif_B5AwOwXzzhK z2>1Riv{!K9xqBR8#%y;^9>;zCG+MkUFk`})KY<1n8Wai?0|(O;y#S#E6b}cRmSE@s z|BBR&Q5jw+nz8BAg;cFB#0mjy#iHz>RuyWorbc>i;l4!&A#U8cb>ZH{OHVJ}zIFfF zrMow9-obtk15PY>FW<$68_!+1&fdQVkuna|yqR-n&qL*%Tj$xI!iDPGwR32Op+(jV z{qbUWAmu`R58izq$?{-5(Fc9ze8_O+=m!TlJItMrAB34ALm!CuPTm822am@L-g>yo z-!U!XdpDl^!tEN*AG8S3`)GuwHAkOb{rbY2Fz;_nuX}Pmf9E1m?;P>S8_zuWCYvZC z1;Z=QK>jN74?u<-ng;@Z0z7D?%m#$eIht(3i8}%dJkY}vJ1goa2-H!EDYae<|BEab zH7aW%c3gbXtAlJ53&yh0DXIi@)ENsXwltDxr*qU%a;GMjWYWotpj@)bC#NLnN-DD) zXiF`-6zEGY!;~`0F~vN{oqQhn#~$}kj8o1zH3|*R&Hh1fp?e;<6M=KkVo0Cb4%)|` zg?x)ACL%T4a3MA&+Yf>V^bz!dgLolyDCH_b>p2Ma(bPIjHAPQP>?*bGQlKc+?o{Aj zZByuvNYWGkL;zJ+Im!+x1t(3FP6&c!=%$(A@s7j#_;aW&je6Bc zR$pITcFv+aSm%PKpfHFkC@xsXNC*s2ik%e?Y8PF0mV%%t7Sd(GDTd^||KQ!Utg=zw zqJ&%vL~jvJSYh4vIme%QGFw>UiR=7svv|6T=uh?*;zvY=<~c{vh8}o{MO-;z=c7P_ zD()bam6epwcGPs~pg&FC^qkxl`ZQF@Can)=m}Gu{W(eG|8K_7^Cc4|Ak4`%0Ut{`t zA(SD&rzDQFHp$eV=J`ihp(2*ZWTr>f@6~*EK9(W~&<0!Vp~_bJAb8HJa3) zHB-lKhPu`$Zf+@-lid{BCT zWl7bs44+8a^cqx$@v#RVWntp9=X0PthZi&EsR!kT{ptRDS~aTPI_&?^e$oH-xyPP; zcz(}mj^uZ}?7kc$N+sMpJw=tPaMqbV%#K*Yu+B(G%=3Qc?>6uWrE&do?hKFS<;n3qH~u91yx zl-TQn5)axuK!e(Q$3J*+kE1c%BA(22J9-*S+K1#<)%V-dZ>aipyHMuBz0IxKA{1qi% znMsCFEheR0B`P(N!8U!8S-|_p)Vg&Ld^l_<@5qNS_mMUh&GMAC?AAI0*`|F&3z5{U zrAC%{NT4_qn$kQ-$oz;y9V(NVn_0&`+LXXz4)ZkL9Aqoqn9n#}-~#GcN54p?Pk|1U zpard1Eak)xaiR`~26gB|>68vPL3AS$ecOrnF+t5(l%gGV=;OLL6pP$r2RrbiM^Tzm zmBOSQB`qXEQDl*evaX>kwdqRD;E#SpjG{T+sfX-={{X$QY$!hE=}nP3F#|ABj0PKs zJd+w#skU*M1A*y@(5c3nPL-?r)WFVt!;JdTj3g4xz3fY zb+zkV@tRk??v<~7_3K{&8(6^(mav62>|qf*F?6iss)=>%V<8(^$!=sileKF)M0Y0~ z5v+_F=}JU0yD*&y1ge%bt;DJ-kjBbsCKfvFYmq9EnYQ(rtBtGZ?o|S!{^W9*+brZ@ z^4Wv*R?*Hx;=?Et{{cNZec>XFKQ06G~$SGS(KxM{~_tS{Y@AgMXEdL`Vb#lV=sCRyva75 z&})S}0PXVTU$^FGBNSe#Y~xxFeRvmC(tRtq#04(8ad?cu-B(0NJSYB2n8k4duu%B1 z4+@8-Euk@IL(Va_gMLmwZz&8@(95HnazqH*R3-d1-SMV^@< z@6c5|@AQs)WU5UZTSx9-StnEagJba>l$+{-$5EaHnv>q~qB$mLLjS|ih}NZ0)Db;? zxKPuU;q*dEUFgYpI?#hQb)#c)k4oES|0kx=N3BuqYE|>c9dq=@hEF4EQtSHE2Wbaw zFl63PTV~WA>h&steIar3$sq91hcWX3U(V<*y&AdoMc}jS2Q)j^n}&5ko4gKv)eFjM z$?|=tJTQVi<=qS+*W$Ja(#~>Z%m<0gW8?yG$NZb%gb{dQ0$y;$C|ofNXN2eRN9) z&7pqttZ!W?L`Q(p-2;z#KoWV}|5Q8MkH<}fFx~08SqB~Kfq?y;29o!%I@Xu&^}4I< zn1MtV)%|{T7k1|EjMh7RoC_TBuH1WVA}eU-u@d#Z{U2>dWZ(bZzpj%VqWU%?z>rek zeXq-2RSEHl)1i9Ly8d!264E+kAC!KV2~B3Q67PY3rr`fx_{Asw@v&t5@++QY5pNl(xEi)NmBmLIRcP^K12VE3_p&H0X-x%v@LfC&;Z$Q zBMv}%5D8f<5GgS5GboTF|J2X51m`vQ24hmLGiG81m+S*ICj@y3-5v*D(!wj&h4oPH zMvB5c@TwLT_S;QP7V!AYcPqXOr5*^oux z5FfP1I*5cwu;&0{1$_SSR{#kPISda!X~_yD0%veD)Grdeix3O(5HpY=&|v|SOcM=p zRX*bqIV?{OVh7IQX!s_{_@f0wqz?sg6G^cW2MS!$;mgWJM~V;#sVpnD;s)()%EqEB zF2`$hkl&6F2^R()|8!^i^6CjU0v+6>5Dmp^)@hkEf)_k21gQ~0&;gz-?K5!5Wh78Q z8tuB0B_}l$^B~wTQ<9@?*1=QA2UJ9*KG2g7wM7xF6DII+mjts9=@Xx- z<~?U)p>hR45fVk3r92t44<{%T?JQ0TbP}QEGjpi4(sKo~1FuSctodV|rdCfaphi*vEYqbTeJ(Q$pi>(r10R$9rNXSFLAP z|AS(Mib#Y4Q$GJ_SqF$be_~h<2y28$qqdblFT{CbNP{@YgLuYSjcA0()2u)Og$|E} z&~=BvRVZX=Ttf*VZir9iiH9_Uz=r5<&Vhl3$Xub-TMKH5z>GqoXuhZ@jIfAYhGe)B zc8aPO5`Nt>ie9e@^} zu*uZ6sh()5WZ6kTNib^jfjc(h>AryV@i_4mb;x>Y~c#yMx z0>1!wzZO@>^cS!mH+6#ox{k~p{vl%zk}9=pf`}PxE~U19u~|V8tnNXEWz|? zgV{>MIP4)mgNaeHhEF7gHv@(7*M<)wLq&{iNDPL5FdZ`3LtNB~ZX0jo`7v8EYbg-YmQ#lzM#BtMT$Kru(>v>;Zek$?VWBq#aMH zr@5->$UB}VdZvf&z>cY3E@ZIx0W5^_v<9bNbWvk?EMhMi|5@+$0C=v6k@jHn_Hxe% zchfk@1hB<~H;1#Zlhd#R8#xnOIR{&?nWXu22l^7LlKY|hE}Cu~!uuX&-0E@srWGz# zh69CS1UCW(3lKgeWdj36aNfqWL(nrwTO&%a15uDSR4_E@_5}wJ1W`MgmMj6`FCPv9 zxEJt4)GN04I3q#>R2jknZ&cg(X1QzHJ&u$-iCef;aWv+EH3TPGQV^tJ3vpu;2kncl zU$Y0rw-;B_Cvyab6C{$2R|%Q$uy8mE&GWKXFgr|Tyyy}XXddUb!gAoyl+fKEx&^;d*`|YX9q&t9q`5=)Jae! z3??^cDS~__hx{gkF@`Z+$jjm3lT< zqakuc0FysSlQ8Yv+u;P;GxI;DogDFX$DVIKux8xXkJ``O-7}*w2@>2PKy1uFAM~Lf z!e-DT^sS9ThAkaNSaZrcosehv2V1jZZF5M9gy2OzNgTWPB%ZJjyW$rcu^U^lGoG=1 zkK?^&P1?jc=^M%;LOT6nlAko?^xHhQbLiYOz)hTwa%@3H#3qO^nRzMQ2cWv3bfk!9SzA-=|SZl`XL_Xafqm%88ehz zHWXbt)Sl-BUf9K5Mzo7cG;>aL2L%SM|63Hie>X;Ry00o(Q1E*rc2pyJG^K%5NX<{Q zg91oqHE?p}%wg|3aEHY42RRi0AMvly{DonR)dJV${gdBS;7-S1xS1 zFl8ir`Vg***l*uSh6N8Me0eU?!hGlA1y#w?<g)mc7aM8n zlj~jwhezD_1LU$J;yZU6tZ(4|grA(ZI%LnRCa-4~yKWystr0UKychj=@`Xvey8j1% z;ktbP{zU?_ZT8kwKtfcML)Z0ZF5^_N$VU6^B$MjnY|l1hH{ z8IJs%w`7!GrSp$HoAGmiWK>!yWtU`a>1CK=j!9;jV4;O(T46nQ&kj3OXJ(vo&PgW( z?YK!Bft@|ZWt~Zy;ZHwyRb~$Y{QLvsSbz%Zr9;Kds z3MyFFou(&e;K3OxXZqZesbuT)H{V#RwwkJqv(}1huDb5ZYp=fk3T&{#4ohsY#vY4o zvdS*YY_rZj3vIO0|4vJ7wbovXZMNvFQ);%}ehV&U@$4ilI|!h&nYrkmWNx_bLYqzr zED*>}nu=}3SVZy8TjZvub^30=WsYiEw>7Rf&#&p6(`T?8V)k%E5erOlqw@AuLZV+? zfL3D#+S^sWcXizFIc>gKamr!dxkH|0we!zt5zTYpKlt!wQa$JBxsE-&`~x7(>)|Zt z!VLpEF`-zUl(foDkC`T#8h51*kS3)QZ(<=s;jutg=Q!lkVt3gjdjFgwGX%69V9x>P z@UvAvaECMxLiyMO(b{dl?WfViHa%I=fR9Z$k{z$ZG1p4>(Ki#wcT#?JcwbCFl# zb|$mWMc!NiJ(p zOiVnXkh^!*E=D$$ODR3ODX#{u#uNb`ZEANfI~Nd}T7xtxO@A<2gUP4kb0odl+GdB6h# zxfGZLa)yaY2Xd6Nlmq;9A?jcyQ5Ry=LG^tD<1WIHQo64pg56A}uc3{4FXtk-(flyb8R8E0Wkp)ET9Xr|SxGDk< zG$LCFVu|;-b$ku6Te)Ijy(AA_#Dqc58st{yG0ug!R9}ZGl_ID1vwG}cLg#?aKTEsQ zNS?&1k!V~&)PY-d90aK*K}TKn#md{}cDI$Gt@gUJ5WLC;La+Pk(wZ8>e?ovF{|Smp z;~)gxtxn|u>w;@Y9^h686va;G@L&qb3nS*T^0EQzSURMKmX)Mac$D>BND}9h#@e@? zib0HF5(km`GRLdz4HG=hX0T*=_9W=2Qf~L*51gSxJsvy>FVZHGELb~Ys&0hf}=T|^n*AWNh0Sd7nGi8(?=i)db^5_RnX9Qyri-&e5(=G&b z2AUI-IJ!sPSyOkAN<+G6B^)Ypf!_s0$ysf_A@T20*oj}q_D*;8?61}&3xz}p*d&(C zV;tQ)M?3Bj&V8J-o#}XIIpcZHdhRnG^Nh!c^o$^paIvu#Y!b2}lw3tY|EYe?p;gj2 zG9vK{NuxKjj(UtlDkR3oJ3b9+-iCxvz_rq2JPqnkVst?qccTiy+Y_q^|2Z+bs;A?~ngl@hEhME^6@ z?|4%77NRrGhUBy+(ML%l0^x`xoGZAcj3P}p-SC=3$gAHsQ z1DitMr8NXbj`9c@S*fD_Zg|HFfqmSgAMxn%Jz`pAmq+_rhvN$r|5kz+C|m%(!einE z*pbhLIGr7T>C4iO7rCkDlX%!>BFL(T?x7cHAK00Pp%tuBS*1-KyIu-EFuV}(3@4TO zVY|>r=To4bWKavsj{p^3^N3JoC$IZ^S3ryLDgD#REqdF-pA9g?`%*?)p-?w>&37vY zUAwdm{A?Z|8?xrd9t6P}Lb$Yfv44w-(+=V}{~0v^RV__NNnDyDmyX!)SKG!*%<-64 z*|4krMrIJJwFJ%;mn!le^JxA&i1ZjHF9aRHDP;;lvwY`2|8%AStbK6O5f-%)HTTe@ zD2r{)y4r&(T;e48&2N&CJl-oA*+}?N>f;>8yh8w!|Kx!U{}VDn6T4P_IU#myfrwpE|B9Z-imm91uLz5=D2ua5i?wKr zw}^|msEfPEi@oSH+X8UDD2&%KF2iVy&ayA`@^$z!X31DGop_Ab0*b-783>~=>lKaJ zI4Ktc7kXzBi4!?b1UV4_jwN$4si=+2vWTGw7BI7RuY@1&gJf*xGYhy)HFGn4gN^CP zk8{F$-bfr@qc8l#6^%7}9oUF1*pDeijiYupY4Z;LK@>3&H*+&Hc7r#wVN!czk#o{q z3ki~BQgre(CGKNx`ZYNvQ->khS?uT)o6|X4krF*bI*A7Xr~@ghqmk$sCLhU?KN%%i zhHYFXj*F3kz4sPQw2UM8JQ*`;BnWmZDU1hq|1EeZG5+v9aMvD-WD?~AAXK7pOR+x0 z(LQ1ULjE8^OjSS!6cH`NKQQz^{}4dyRX_LRXp(W3X~{q#;Xn|yL;pZQKq-tsBt%N5 zg5WkfOPN^A<8^4Fl);lkR5V3V1AHbDc7UcweD-IWnVEjpnVadEZ-$wo$(f`Xnqu@v z0J$ty2?2$4NO1RF@c@`h(MXTP8nVT3Jl1`dluWcl9IgaPq6A*lgi5M(Hth$Tuv8hy zq)fGxc5-tSLm^IQCz!DKdWX4R>y(1~6%p`Mj`Q?b_LMmJ1WyDhBF*LN5z0Ap;U>|R9qsVQDqqrY7$n3Rgk7#e^s5lI9P?{F^9FC?6g?eiJ1I_m}pj5 zl{sKiX^fe*S=-~1O95IwFB3&)ib0Yj@rb|(i_u=P^1^`X{v62gUB#PwF_ z=Ua9KRl#*L!*xT&1*JHY8p@?zK3Sr+=w9%3bi9+IRa9SK7GEyPoiFNT0QREiX`{z@ zU^^OcdKwZ9hBvqcVcKI=M{{BEr(wty5gjIDl@Vkk#$vT$V(6D*rAA^1MV(vGs3<{W zYV&wirhjE>rmdHIhRJ0S@okHF|6gyard{SvC}V`kA?Enz*{F zx@xPwT4$yCtG)VWf<}4|P-xMDhl*BEcS)g-7HJXT50kbKl@<|~rWvf}Yn?`L=Qm(| zvSKaKt*h2+u{Jud7C=mMfVm+2P8}v5?Z&jKtgp3VReO>bw0awyVG^o zX{YH(cK%>?)xw&Vrj=ZE{|-#{c2YQZ)FlvY$1ZudIE&|ZAxoQPICxpApN zrGGARC__ehG<%DzmrrQ6l%t9!vZs5t=a{fZd%K53Ncnqon2yDVEl+!`X@d{^U=Mo} zVS+Zb3|4)bwt(5^e1Jtsce-%krxQ#y5;_Ne70PA=aX0M8x$n0RDCK`(QGoZiag4Wr zGYhw|h=FjSfpbB-CHR5&l^1&fl?7sg@@2Fu+HEX|xv}djh6|t(5fAY*9ru7UHrN_D zSRFfP8|*Wry#a+9f*aC79iFEjNVpG5$i1<$5Kf4_90YiyD6@BGyzPq_ap)rgX+;X@ zzP*CHWTA)E!iSmR|A+PKzlIYvEKrE&_`kifjubl?jyNrqXc>iaD5_b&5o{Tmn7f?# zFA}UP(|9B5J1wiYoUp=^7%ajgOu{8>!Y7QvDXhXP%)%|~!Y>TNF)YI}Yy@yXAnOnZ zIUEN@uoN|nz+`eZyE(%{OvC}h4n~l}MxX;X!VWnM1f!2UL#Al4gWB~+GoWo{38S0S3OZ-pifW$ofQgLh~Fn^w zfVULJK^6{_|0pow$&9SZX$%Ka+!{!{!w{hkHN3-X30cv zv&!d;&P+6!!u-qe>=RAQ#=aar^N>Q$=US(T zP5p5cq>~RImTbHLCD$Al|Im@v%Agzp0oLjj`rvUB9bWmH&LOSH@Z2h`3y>#PHl2Ih-f} z9m#R<#5oKBYrMq349~oQ)IY7$d@azxe93Su(+jcJT%pw7baOWZ)ew*mO0gm%X4Sm` zws-{+eV21^LmP(X4)A~gOKWJTgVH+?C~8gGYc0N9bMYj z&BE>6L#Zt}t1Z{9{o1i@$LZkK5uw}pEYJ&a-aD<{QY_e@;oBzx+|f5=>p!t>7w*&v!i7qqEMeU2%48+pf&p=H1uro!+ng z*RH(YN!-&Jz7-)7rHOs6AYtF+HDaWb++-yW;Gr=zhuBT(75;F=6~`40^ur6zEOv@T>#tAk^&*+mRd+P%h(E7-92vS7);MPtPuCC!|(jvNnYV>EXS%H z#k@h@g|07btPr`a&p^=1w7lVBi8l7|b4=xc4{_olaoiCx5fu@ZpJf`xClLj)|4UbV zxeLb+<>zk%a_Yu9L#})0v5vu#oWxT;%Sj9oNZ#JDjm&Xy%glkqZ~z2@vJS9p1jHWf z!(QQbyxt~(#8dti_mN{K0?nCT=52wGizAmi)x|{PgE;dJ4mTYm@=|5lmjA#D_YlIe z&h9iU;z^Ty4wdjl=1DOTcjPkPM30xcOyYL!pB-ZFFWJ)JN%*PoYDcq#qDW>&BBE&uR_`zmO2?nAN6;v5p>e35{ek!rJ%Zga(P!t|N}+?NsAQvWF< zIlNqvl153RaGLj9pWF*?xGGs!MxrJJdv>7X-(9=VU55%-oc_jFGwLTPP=r8Pwv znZSpX$)lLgvpmt$yYu_^wMdo6XR#=Ol|Q-?=^XVormP}>tV3C*fvzGbemM;`t z?EpXm)F*XmKzAuC%q(cnoFW1t&839y*39*^&%9{4Kn?UjIy6BtFZueEJB3-V_J#Q{ z+Othm^UD*NQ8Sr}8GLnEtHFAj>d&jg>i+Bxtb8Q@bTmZw0 z3J?$k3hc*gAcT46+Cflv&>;i_=hz*TckZ0LhZ!NPd*H7g0(<)gs`K~nUcG(~-VIEt z&tAQI7$LBGU=rWIbM^$1G>KBBMxYMi%_}+2C_I7d{{6#u^WVCe=kl4UiGY{CgY7N` z<$92#N01@~-a7}CAU}cj&PB3^uV%WgaplgXTi5Pgym|HR<=fY9Mks*=ml#+AiU)y) z2}4MiPI1P^2LqQ_cOfuh#*U#ZF1)#NU;_dtuhYyq=(?>3(^+KATHWf_u3^VM_nNjv z+qZMm-W|Jl>)*0(*PiXWIPl}bbtlKoocQpD>gwSy3xar3%Wg&*Yqar39COr5 zFu_>3AhE-MG%YfRh@2@fvkb#b$Ramma-G0_guqCkP#aN4EVIe(Tlea=BjHGZCYNS*WI`Y@6}2YLV>Kmm>90hSCD z2ptRuT1_Vi4oy^@MIn^%pa(h}NFPSiTPYurv~p)4{}KBdw9tY65o-s9T6}TRF>AH; zR$Oz9>#}s#F$@a0lw`6q(}+FDGGKvRa!Mx;ip&Eikv)$}jjYu5T5PX_2Pf{b#j;GU z(D}!nMECKBRe?UFbRb?f73jf7T|Ee$eI7WKFRC!SccbB6EbyW9>XCFo)NXq*uLvDN zP2hp*DN9rc@>w$*u`DY-t4nF5QZ%a1$WR$rAO`vq5WEL|cp)Gb; zfslPs*nwnjaxtBughD@RGqTnpdWtr>XmlVr`sk#WHo9r2>4Dnmsh6&rX{DpS`su8x z?%L|Fv5s2mu(=+4YoyCgd!Tjf`R9R14o)YhdHwZ$7}TvLV5VYtP0AePv|bM{TO@WT@yC_VZ7i3DU92Ra9z zxnq}oc3W3w$mPglZq^~4Pj~s{gL*d>0-e#B4A7toFb z!3A1SxPY&A2LS^_i5;OCNDNuX4k-o3|3~X!L6B-FLmED-SvKU+%!IbQ5+;#GdGg0R zM^F(WXAIE85}-0JLz84HFSY|$_C<f`k9;7|n%LB) z-p*0KxFoV4_PB=u>2s(>{i7j%{|r&+4#JBE+~Xb!eAhYU^2}&X(~S=4$01oKvJl2n zp$pBH2Y$tZ5=g0n4~-~#48sBs$n65ZD#3X+s>6yNgdG>nD6@F>!pp4e-#CuCg_3?QL;K zxK-Au_Adz;ZD#dx57}PpxzVkQQe4$s<7QX8+vRR|z58A8hF84fC2x7ndtUUWSH0_H zZ+qSQUiiirlIU26a^-tp{N`7``{k=+SkNtYU=k=eV@xXTyV~LMSHS~8u0;-v9j&A& zi8!&y1s8l_{-zS7x&;cdmKET^1cksJ#?fa(i(L%M_q1#(OI_OW4=siW#u{{bh7jX7hVbNa8Z~_{qSNRFAPkE@${FFuKGJ-UKL1&y z=dhzdDgs@Hv?Fh1L2+FK&6hRjS<>jWUGH%A7!XeeGAM;1Dlc=S5Fbm!n~{?XIU7>0 z;Ca$DYM*2GJRX0fqn2rj^{fYCh8DBzANDJk{PPd8?u35hnhq~C z7HPe>qo)4Q$9eqm);7Tf9{NaXJ~+H;aHDKxJY+JRF)iSoIfRIUK}@Dm`YRrJbhAcO zo`uh*HnQDY-&(^r+VaiseS0n7U>msD0Df?R^IMqr__j-5JrH-;3j(u__^E77kiXe= zA;Om5K$uD7|BMW!C`U=kQkt?9sHA5qRk=!53`>`JseS2E(Ue>G5^{ao~d(xp! z-t_u#f{<+1-T_aH)3cs|wC6qNl<-05W7!Jgr{NlTbi^J|p$laQVjS`ih(HJOx|Ap* zC{hrMJlHxIy}aj>uhnLK1ZAQRFWtU_LXvz)vtd2PXHuH8FA-09S$YXfdqw-1(zGep zxBVd<7YLo~geN^UxlgL)A6@$XK=6cWprkr$#ZEt$Rb>Qzu&Pia;fQ+Z--=hJ4wes% z6f`5*{|xh>&%Dm0#rz-^J=DXl>q9{NLqQBX-}s*J z|FMS$%R%(h2=uX>^=Y3*Y@A076xst1bh;mbaG1KXJ7LQR1|lGS0+k5roZ_pXDeNjj z)1ZFfAO(bgNBTlow2?PUp*3V77cz~(nxTWp#T??S7V4p8$;BXQ!y)>)u28jDoC_v$ zqQgSF`H3;v1GE_9qP+W}Fw%%I+PjRvBZttV?>Qv1q97Gn7l$CEGExnL5{N`vq*i>z zWPHcJKr%}*MwaQMo#>=bVz*2hB@Q$tR8pm5JVkgs2s8LK#BxR?gvN<;mnNJSVIn3! zfrybwrg>PV3Zn~kVkdWc8+?eTc^arcx~F{FCv!rlpa3Xoq9%e$M=s2(fqY55|8OXf zBCL^`NsHpF;Hnvp@+gWTteGIG>N_bTBCx^|K$t8og!~kRoVA>qkDkh^v7n8&Qiovc zs-yy|br36LD=Uz!C$!oz;&Lmwh^wTct3kReS#imuTuZ(BtH2s8sAJ3RN=mzEtizHl za@>o`l1skSEK2Gu;Q}qu>dVqvv6`b1*6J(T!oj(?t=u9^$n2}%(xIG8wFHaI%WAMi zybk6%tm)zl>w-$m98Jvd0@ZPSr>U1de6S>yBSfdrf`qBkcS5lNUEU7 zMmtXeg+3ivPIg!a9iUGdX$*~+&x~-;`&7v5s0f*;h)o0-FUgbe^q{vYP!RP(IH1n? zP|n{x4|T}R-%L+9fX@XT(cd%+-tXvu7 z2Rf;V%`vvI8XtMshqv(vu26?%dx?K=HkvET0({aa-JBy$(mG+AV@o!<;L?upQY3ww zFdYjm{S;yw36F6PCCrGsxuS%yI7TrPUdsq}*oSw3wxGa=A`DSN|AjvHj05GG(dmSW z169x7gbNd0)Q!l|;3Uzcpi~=m)E9Y9_0-Xfz`1$|AMR+0mxzgyV+yC>4t?OIlZb>X z;!~-hihr<*p{j@5nvMrhRaUJBS7nJ#DOH)Uu9J&Mu2@xQ;?>O|RhSqNTSWj|H4Bl8 z50Ybuk~oQ!nA3;&2QM>1!Kn|3V38w~3qS=5eZadyJ=dOV)aV*fIA8~MVAmau10Z-# zI7kOIh=YlkPj%o_IA9t1wA4)1(Z;yZfza1RjZO&YO*K#lbRbxuXrw`ToQI&05Q!9o z5Tv*mybk#g4!avWN{GCa*a`W&ip>zN0NFKi6go}Cf#|yi|6!TE0g5&`k94@k*MSY5 zI)}L!SB>zJ2jGQz=uUJU+6!yc`RGmk;8X>b*MyA&2uRQ7ywOGt6o)NXfVEm3y-^4~ zRQ;&hPlY@q%u@nU*#ttuJY`3xYzjm%#Zf60004_Xbib68N+B7veTb+6pimTBo>JRD znOlM)Th)kLRU{xpNt8^1D>Z@uSXqfPf`ENM3$hT}0GtbVfCmI%BFH6L%*8KteTdCv zjQ2dy=jf1EqQLe?>O7&C-sM;G%PvGR#^YGe-Xr#w8i@I${2&l2L#m3f1S|}_< zc_^rJdPU%)Tb0FK-Hi&?Fp=WzTa5@__;5$Y)xUn}id_>3vHwy_Thdu^6-bKsrOXXq z44Y97>)dqsT&5LWs9jwWJzsns2-i*BjELWW6^QsfRI`xX@c`T8yl(Lt(2=bf7(ri@TABgfI~V;S^r$y@wcAG}Z`z z*wz$&WBE!?d0hu}&;f*HS9gV1&^?G5jsrEQuY2v+f&XY!9asm1#bMG_(1RdkLl%hE z5Ebc~3)?}_A<&3aoC=KOnY^wu2 z2syfoe#jyNu~0*^m~6}lK;31H_z(t!V_|-;NcGKzP*mS!RHn7z(p69RWEu4g6!$e| zNr`6mrBC{O+7VSzNoJ&T!iP9D5leojj;x75VIq8Ji!UBDPqwFu-~}_7hkAHrbXI4P zwL6aV$hfFyd{7`ue&=|eXST}7cG?NVAtyhTi-b4_gRH$naSJ#8IK>h&shEcjf&ht* zAAZOtQ5|NFhOY%(&O=VoP;`Y+?ptECGTaz3Hw`tR@-F~Gw@q6T)h@BiMD4oJ%+iLmEEH`D^IpsyHHgy2WBD}B)3gEmJUE-O zkvTEhwhP1DOs;q_XmoBGTf`e9RvlX__W$fT?97qujv|Wg(9A_L-@eCkla!|$?j;dJ z*!J$^reNl-k}QLq_g-Z;2D5(mht)#E=#hCMMWZ>ibU^>cjt*CD1|Ql=BSY(R5_cO)PCKQ|__Pyu zh>hwYQuB(Qj7!sOwZuZmrjj)+%JGYX09@k^$y#SbVraXoN6hc=}MD3{W7S@JdAh%v2gGu3hr;quL~^10fVRb6X1eH(t@;JHZi)+n|w zSGJ|FQYlt+sc;wg=EQZvP9j@P^58>!CD+853u1%@c@qV{t`?H^GoMN}{*S zv9}YH!575z7)+ZHCJ=I~=)no0|pintkrPYSH)wcomR!vr3H`R?Wxm2a4T@`i$X?A8s_FPp* zqL5aLHt3$XR`T2SWZDy9jdo&ZxwisvDm>G$(C|^cxwUAEw-`-&oWR9Ex=kwj&rDvzH&ykb9I(b zJGWC0_HYmQsJoHyR*}*>x&MGz(<$PK#pJ-VtB@V`fg(JP^-h*W*;OW6inS1n4GNt% z-mdUi43_2pfY}pP#u)4QnAh0CGZA$!Q(GSh##0f;Yor)a?^v|FLkB(Vdm#|>yk()1 z-08sIi9>$TdYJ5zFUe4aYQ3HFc!Y@ii>pN2yOTV*XvWyRKT+_O6o@h=2(mrmvsL1e zP}{YQAmS58mH}KWGJL_OVzWJby&VX?JqV$O+k7heExwe()r;S&V$X3~DOCH1NWN@+ zmAi62j3vzJqeXl7_k92DWXZtH8y@cqjA=RW3^sk3EWg@LqKA7w_Uk3$SBLgIHr3E&nGR74MJSz97KyIKTu<%LSx&rmIJQfN}vs2`C;Q5QI_!Awmxd8A2?$kl_U= zP|_hRc#xsPi3}w+e7MdcyNnMZqGY)4oV=9uUc!8d4noYBGi$=UiIbjAoIPv)v`KSk z(40ek9tE0I=uVzXjW#VR^Xb&65ZBrJ_aG9+lwQAr4J&pm*{|}>tsCp^9NV^R->r4q z_MOUeW>EU$1@XW?i25GTEgRO}xvmiEp+(qlU&@vBAQDdd;DBI+?9S26#}7igbM7FV zJrM7mya)IYPX7kGxbeBi3?qw8{dIN9(4$MAX1K2(%9Z%u0S{jJ>+asIA)~#Vd2{E_ z2s^hN4t8BVf9E1WygUzrKkNtz8$Op?I{EVE&!bPT{;Nd;2-R5}2r{8Z2pzrNXUHzT z$&DfF)At_)=vY*OI_k_P)=JSal#X0&spH^-=R`Omg%Unk;e;Ayh@o5@e(0fFAdV;^ zgeI~@;)xcjm?DZ7viPDp2)UEb1OM2Q)_Obgh|*a)hLuim!13eHI}r}~PLW44gupo^ z`PG+h{xF1CJYXFt7c4q4a=0em#H?FH#Do90co>)Eor+pb3F#X2yvUm=K9c z=2&N{#{XDKaN;>01P4$V=9oPano^z&{RM%VY;xwAek}C}fs+V8v|DHJyjB=P;#C@| zsH2j4o<$z4b3s8D*%#kB2|{2%eC)W#kgNi+GY|w8v2ejUEEojQtryU0(nR^)YEgk? zEm*3v&q5pRo9Fm5k73ec>tkZW>BE~>-J-;gw-C*9&XtZnaL;>le#OoM4?sB^FTW^o};d%{Z^(XLvF(9rJT7r>2FGRGL-MW5UiyzSP9Q|Z>Ikk%q~LsJTN0f zk(e9SJpW)S7{?wrtS`Un3jCa;@10}MS0k4^*0l~w49_|I#JMFxpk^Di&_jErtkJcO zWdHO@2&JPmknkCuRz*tt2SL+O2iU4d1^`<^*UVB%wAf<{ZN?5{2mPaT;C?&qn#ZAp zjz16BQ{6v0COnVc^Dqb+TYV39&Oi9vqgA{Nzo!*Gk=%&#KGfo44?gv_iy1_2p2dq9 z^VFm96vfdxu81tW6wR5m2TZW_t>*fU<_GTr&zSx zj=Slmp*~~FkveB)y7y4do#165;Lkk>n8AuAS2R^|d1P{%rkB|tm^GLV9-R02g+ zB(ceHkcwPSI&gHrM#^kG{J`BJD``nPDh+>SS;;+iu!AXHGL)h;U^_f%!65QzC6OFj zB1h@Uub9Cf{kYcnVmZt7*aHDPi`OfA=}S@>;C%f9TU)~S%VQ!_R8?#XD*ty>E>L2t zmB}2XKJG!w@m2Gh(pkp|DLBnSR~p((9!WD)85N9! zR%sqJUbIIb9ppdSGQfqRG^HwCC_9W0Q6uPJRP2Z-5UwK8iKb+xai}S&HrgYflBJ{Q zLC4>mMbxkf<{q0Fnmpz~n3Iwx9TFUzHodYAz6_3oUr|Rr`q4zKt~9J-9c!h4aMOr_ zRXys6XiOoJj&!(`q7YtJKY5y9IEmcAP@P`@f z@qod41ABly)eXsbW;QsS5n}eGwki4poy4@o>>u_N`5YW3$ z?ZY07JEK3FC_(?Kt2onj(-KZ<@n8yeA z#;M$8G0}cLb3M{b-$!%oABL$%F6*Hc70Q;vg_aTsEp-<|i>1d5Ib=}R5s!c5L&&<` zwL+Dw&Edj<9qa%$cXv8dIHW@jaVSY#)uB^3Fb%F&W(am0B<<}sTgg0)s2bFPj%tHt zUhX=SjULvH2jrTEUO7vCA>gyKoJ}kTfEUaniC!qBBmaq`>*3`FoiC52gI)J#n!d@B zYWj919u|h}$Nquuf{!pIK2!Kf*8Iapu0i-HO+wz#JGLychF5g*ABMF^{#*YJyo|lN-*v-y&{C+H?}(3%cO3J zs}}AJl9R+R9+t5qr0jIT*_$?F!KyOkEcX!h4rEytcI+TuCs#S;EALKUrv&p>V{2z? zN^_e-0J}ox`F4F?`q2NJxMroOPCZ6+ypI|!j{kuOVsvCgGrTJwVU(ly9OagmOI@fd znNU}Z2;-E<+JscLkd}Yn_CfPrVsd{Q@$Zh3=qJ8=f}`W{1(SR1wX zbzH~ye2Os{$0`Y*cqGa17@yy9%v;gT^8H4Vl!eeR7#AVqeN89)l`;%9(J{!{`FkVJ)!@R z9zyuvOT85VB8Oqj8)_t--7Ve3oI}a*p8o`f2_@+jjx7uWdeH!_MN|D47na9mG};IX zN}?D_pA;P(#$BAapd4048G~(;aKFu_UIMJ+!pt!Vd?Z9_lS$d2qSq!ox~g<_&~(Tpu{qI1?lwSn_$e`K}6K0 z-&p9_o$Qw1^o_gFTS}yZlQbB*l%rQDTsl7DJHq1~VHsLM*;yr-%sHX`omE>g%~_!g z{z=q7`XlPW;*MWJp?H7Rn^-aE=Q?053dG^ngXV zoI^@F57h;jwpbWepw}_3pn`1-KiGpk900WhRy<;5R*Fq%z0@fh*GqYfCgvmRg;yLn zS7W#o900+!tiy2`0b8c!S`y?dO4%ub1w0T689mewb&*ISL>jf28(kzuO3;n$!=;rD z6xq-N8Q+@h0~xv1ViBQYN|9i!!($FkO#V#xV38A1rZ?pz1a2ln(2x!(QFe?`W(JjH zLeNyP-8O2F>PQwZ+ygYJL;q|-L_EZo^<1S^`sQyc5*9*>4zR<4L?S-|XL2g%axy1* z2y%n&)|0+Ny$!T)E47O9|CO1xf~j>?Ckhnk)Tn>tI9`qGnTi{Ft)INH`&VmnJoUFb!jL{beE#41bB&8mys6;iO@Qr7Z5=N ziMiK;?dE(Ppnc(2S-3-}s*XG$k!uhJsqzwt1z2FHgFc*4-TVVDG!Kgz=8NeUe}T*@ z!K#S;C3}?^f|(RV%osyF*nfpsOM1nFq6CI%7>7N`he_Cgd8&y)fV8Fpp_y9QqyFDnY1xvUUIBiY z;ZWHLQQZlZ+5ew)nwqhho83#R%9#r>%fr4IqfpD9MFOkV*TiB_o@JU>(Zyxt1MZOw zFJKUG=ApzT4x3pP z8xR~@vgKd1JzKQB-p&Cjwjr0cAq2O18+MA@qLkZnWL;=JWxKswQH}+>c}2N&<1;>G zybYYy=$o1xz?d{$ep%dD%o~(&BSJ)OzTHa(`di0rTyA`>4~B&ZCfvde*6D^W15R9& zLQEJ|ZU0h{uGMfHK6sq?iAC7jVBnbCjhgN7iVDjSq03pu5o#j+*`HkH+!XTb>FpfQ z1t9XyrKK9i(V?Nzkxnf>ooYqhdqq&yp^W#Aq}MvGF}lXtd0m;PNj@-!4DDUIFvR#$ z-PH}Q)odNzwXa_ejM#+?1PC5#@UJ?g-PDoq^UYyb=-rdDuK|0ZHRhdvxfS2lZdm}H z09y{>?StVRY2x(@<2fE#K%V3YFY%)AdZ6tnGFd;?-}1%*6gKaBSnu_sMBS!dL9!k_ z+HklTVC~Ibm2AuH<=*a%pu${6TksO@p<5WCp-%pcx(wfgq{I6%$IHlr_LbClBr#h6 z-~W46VD){W0)H(+C?EAvu@@;Z8AI_LN#6oZv0M}%>>hFUvBef&a9MnxOl}OwjRpB> zg-K>91*dQ!kBa+cUJGyD3(sE+bD~_~U%W_Rqk6?8U+@0OYY%^g97RSD)7Jt{hXZ;? z`pyv`R0DZkAJ4vFtA2lM!iXtbayFCPWEmI;C&;r{Oc#b5`v@(CJT&_bhb zz_A7H@)&C-E6?(6xS+Ux#V^mGN&YUDK9Eu)4RZkhV15Nt zBLu~y;AlbsHD<>b$#TJDbXfdiU<6|Try-U&rD7!G$AEQZG-Cl4^TymRLs+$)ShP%P zH34rUA(O>7T8y1q7&*4vIVPYwx@$Y8^kA>YJjTI{RM`=>?Ix15VIwC%^6(<_s0;Hb zP#YvdK4Aeaa(;P$K1y z`OQ+wSxGtLcJ~cFNF`NTC1IO4dT^zo*6*MqgjmirS*E3hu1Q?Nr4?QUeP8kux|Cgh z1zxTZKI~AplM05MVhc3KBfnSDsiexOltntE75}WHgtlAFua}3ne>;y9 z5?S!WK0N8f%jsnRl;Y7+JN%9Xt$JC|d%Qoo&DeXK+Pbv(J3IpXBDIHrB*aF5gs5Zt zN6dVzbPd7FJbBLxdT?dLtopv?6Z( z2Kjh-5T>4&fR7llekzTiDt)L1o2P?LEy|!jLzckpgmd>?O*s($cx8fSLdRYC! zeb*b9YtX%lHB5_z>(CF!JLKiys8`y*m!@)k;;rfp(khOa8m|8RuKGyh59{8m#HRKo zS*WTGy;rur*SESD#@;=%#%dt7{I3W^e;A9S7|ow&jsLA=(m~`rpev32WD@MN#sFDG z?-K=8IEC*ch43o{@iWEm8$VPa|MCw%^DD*NES@!LA9yl3C3*ER|Vo#CGhQk+7YWl+5-l1~zS=wJ1bjZ4F8Z$SSSR0t5ts z0}0BTXYZUmf)Ef!vWM@%zjOlO&GYwfUPgEV)m^+-uit}r14HVwSMQ!ehUXkYlsK@S zJp}dsJy=JuUBZPsdGc&nFJHu)0!yAuDRAAtfB5hz9ST9;Ie#A`)$2Ks-MM^bA|l}B z52j3-HU~zXTCXa}2PRRfOuDq`zo%EBN~LO*=>J-yDj~$2S#xN`iy7x_gwXNd$B-lG zHg^0NG6X1-DVG>n0*VKLm@Pv{myR>f&;%!!Sa)HvX3wCZbiUmB^kf49ORrACmUrDZU1GLTDoR&e_4S0~qA!9D4+cEyv&<^RZM20lg@B#OhQds>OEqmx)O9AK6oO5!(#^_8U40eSSY@46AbEH>hnIM0 z-SyS@=Id#mm!M)Y*bwpC34u5X;^m)uc8F)6a||0O9e(86NgW*>oN}O`(1Ae0vK|<7 zr!XVYmY^@yIR~%9m|{v>bk5vSO>ptaHrq(Xjj|^q2?|qJ2zEG!u^#bNN8f?edH3Fh z{2l1a-tbhC$$<>UH(`E@wCs(sysc_5zi^ciQ65v};=dodQ8*H}|aXC2I-m67< z(oj<+m7vi)AoXi)Rqct@sNH@W?zq>3=O6jxzPl%19Yg0Id+^=IA07GjJ6pif6^Iw6 zp@e|%J<-|cftw#KxgPm+Yqu}EAt;n5t}v9`OO7EpCuB~6^DwJ+C5AvZ=0fD0MlJ>V z=gpb_K}x$2v-(X=3uP~v^raVS{kYeW2EKH8`XTTfA4Qh^y^hd~b_pLqbD(#Xa( zK4xSq8KeCmkSHED&yH(!qZkK5MiCt#9`BGxkG9k*_fSrAT*MvbruTpZt%+bW1E0+f znaD+&?~+IBBD>P1x&NzJ@+y+76?#0$$btB=dVmb15Z}YU!}xDB0VLZ(6o?i7{f{8M z>>30Vh>p@^D}tl6l6T1So$)Xen&64%Go@KgYF_g>*32e0rvn~=xFaZi`xPzaMnt-# zBar;?$2)|R&UK2e2nW7`nORiO!Jwpr^eEV$oNX%v%keC_(hGFJ@IVlj~>@ zCq>Fp=e@LNJONru9fMO*?xdy`%jiZeMp1IsGBc;K+C_F9ICbbS0SpVv(RJE$v$cEKO4N!v6JL+25D#U2{V;(_lYdK9BnPc(fu0>;-oz4-k z2!%`?uH;FCPV|^Bnd?S<`eyJ{>KWcJ7Nd^IMGZ=7E?zdD>)Gta z_DB$j>=U$^C2b*{C(>^1aRahEQKstoOO)Mo_90X3RNJ% zRV_h!yIA4!M7cj*$Z=sikkc+CwR2@pq$p!m2cDHT+^HK_Iw=NW z4|MGo0sm7$fEfnFn8=o~Ci$?(WbxFIbL`_D_SlDdc3ZR_-6NEI9Z_t-h+-92u`&F3 z@g+Y@k#qFJ9x&!ejZ?g0fqpnXyfDK&>LFOf>Fgdx1>;ERf{>-$qb73N?S%1BVRXF} z9}h9=PKfKfnTATdDhC4^)S(vjTFq(Kz4C`3$@0@e z7FLsetok0uA*wq1(T{yz1s)oW2tMYrj(jL35_8$@JMux`f9xZlJj&)$w(7E}v$XVWUmv^buv{L8GX;m-gBQXgu75+ z0c3P@j~(n_-#=IS(&^idqsN-RuQDUksb2N_`lBB^ze>rh-gU3D)c}LWw0wcX$FH9q z?XJQHaH8(2G$lRlagVz`?xFRqi%#x&*Zbc2-gm$M9q@q{{NM>+c*7qa@rhUb;{O@n zc*j2;@{yPP2C|Q3<4pT&piqdRuFIi$B(Uo?tvbIyqpSWZbSP*r2KhRNP z4#a+pAh<%o!ml3;a3JO(B1BAEV(kFz;Q-D-1)~S=fbRx{&ttlz9`xb8SF^QHao0j1UC1D>Y(c`x+x1elVHBhBt&zRy=SCvoJD5kS_RPABZs88Y3${FFxwd zVbmkm!Y?xRZ&ujwG5YW8kdT&?@IB}=(Y~rR zdIze6uF}fr0rL=V*vap>uqUD|9sCO)polKaz?5)q%yuHr@{1#C%?e8i-wx>g6mUJX5jbW< z6@hIi)IlGV;w1io7t|3C*W(>@Z7Et29AmM1R&nA6LLNlQ+c3vK>alNVA|D6h9GguY z;R7N4pRLg3&|Xf+?IrE!g5HSSKM7K*b>D#Oy&|wyh^3Br%$zUJyeuL?SHrqE-$f$WYf-XLjEB?VNHp(x?;wjAHE>LqUITI{J z&LufbYd#}_RHZhoZ$~h&Y+&PStg1GY(-D_Ro4Sdcu46i_vpU6No3@iWxf46RQ#-p; zJgdVz>Lxw(E-4pcKbmqNZsh@Zp&qpEKlo%o=%@Fv1wj;~ux^We!lg|9WM24fCptt* zLL@#!@hVKjLuBhmo@7RNYUix7J)7lOqGeik#9DqO zTVgbbQfjA!X4qKb*3^ZRID%o~B|wMoV)8{!k!Bqi0$>DUU<$@*{8VA`^o<5HMBq>k z`xIgRv_KVVCvt|fV01kmm7;jcdum2}Ow?8SNm6$rP6fhfutiZ)=%%i|Zc7=bZ~i85IOI;-Q*mab zaR}mZm~wJN2YUhx{seRxhCm)k`>f!Nxdwv52H$$mJ>I6H6#ThWskIhCIf;1F|Aq!C~Zh6an>hw zb|`z6XMc8wZZ>Fhc4&9DXlbZ=eCPpyDDIXuiHHNoW@k^B$cduTWJao`qV|!l$Z`%g zVgZ$Pz9@|Jh_xK?jL=n<>P9N9ZVR@5nJUl-)WsmegpL8Vku-Ns*k)VIjj{ zDM>ysmSOAFih`(HCDv;x_9=%;VKes3`2Y5kex`8;DZp@R)NE-3ofKthHf32aN}up$ z*^66R6p>`0v? zaVPwt2FbK6MhbA&Cre|i6iX?H{HatMYvTxtYz@lnbSjki^b@VubRH@p(&T-<*KrxO zYzIQ4NY#9I>%)Soy1J)WON1>;Rc2(WaOIa^`SVR5;I($EdVLBq?suj>6@Ezy0t8q+ zk*0cwG^r*HY?|t+HU;IXiXbX@tAy^UzDjH=c&x~#mrgSK90LoD^{Cz|uJ&$Ocf!B^ zg|SR^uhPV?bcQ3GOh1pZUqfU@oBs;}eoLU_sy9N0+{lEohA+E*6l_Q9M?Gs#j##u_ zxS&RdkFKjpFiX0mH+`uKfl*|(2%@&ugNh+iv3fXo$}E2mV+XyMHn#;rbPH*C*oP4e ziXGSB4EP^J&y}JJiFpE!=Qz|P(7S?@TFQ$f%ImyPGQ1+?CP-Hx+^aR>i-hObgrf$( zCQ)P^Bd-vEA5tuwo+7{mV!#UQB8DQt2!p|}l0PBrG!LUDx-23t3~4g#9yYAQqF7+r zCd5W8E{W{M))oSEY%60dO=e7Cc=^vB1DJ&@d!?8l@(jq7xzCD>#Y8lH?M%%Uf)}7n z%IIfq^bDF?8P3f3;GXOrqW{c^xH&7YEX&*soL~8sq$14bObjW@%tS=V?rhEAxy>5u z&D>e!1dY;CjvWw<0|#2@#;$-MP0|Qj(GD6{H4Uv^Pv!P^l0R^T|BFf9p&q@B*HUdN z4TRa$?M7rRwnz~&a?RK}x_Tr|*pPSRLg}sOxR2rQ{U#EmkFn zr3235=2@$cq#~Vq1s(3<0QIUlQVU7Wx@udubS{LZff)Bkv}BhL)5&hF-Fva^n`Bm3;aj;j#b5r1QQHQV-Z&o_X#J>E{V zCy(wbd#+a7O;a1TV_UXoo3=qvJA9+Ib6dA}o43X9w$GurgIl=27T+ZP>*QJRxoW)z*#bw1e`T-th z93BAHUJfQ>a{qd)Q)X6unLW(q{*H}MKl;Us+{lmIF??fBqD4OPN5?JqU=tT?-2+@F z(jIbzw_p{?x17se{I}~UZ=YPHE;o{<+&#Pqj3S|=P+Y&&yvyGl&NKYDJF3M1xW`G{ zQIh5JmLw zL$h7n$5K77w|%W#`%&Hkr^%h&+dT`--QD9|-shd(>)qb(9pCd^-}jy0``zFF9pD3A z;0K=I3*O)l9^n&S;TN9a8{Xj`9^xZj;wPTsE8gNSUWft$03rDV00aO404x9i0052y z;sF2%{{SHf97wRB!Gj1BDqP60p~Hs|BTAe|v7*I`7&B_z$g!ixk03*e97(dI$&)Bk zs$9vkrOTHvW6GRKv!>0PICJXU$+M@=pFo2O9ZIyQ(W6L{DqYI7sne%Wqe`7hwW`&t zShH%~%C)Q4uVBN99ZR;X*|TWVs$I*rt=qS7(BTJr4c_cdo=r&%?Z18gB&!9t#zG(!`I)dxssE%XgVCmB$?VU@v zQ8sOZwnyvU&3iICBdU$)2+2-05Y($#cQ!sUw?^j$p$AQe@83Usw;j6sC-30)?hfbi z|9fyQoOWm@Xag)&=9onIBU6MgIZ;=+k)k;PU`K56SbuIp7hb zAcGFwbIt+w9B>YT>Sd^*XgUPP&N@2a2U2|q-FFa)&COPuiny^DlsphZ0AoB1vBS$b z`@|@ajX3JKP&@AoBw;%n7HK48a42_>I>52^9+OEL!5$p*g_tC3u%)(|hyUT2mJGZKl;4KrkijEcn&`P{Br=21HE$( zFM9q{&zF%{7YS_kJYdj2_CNrSK6Cz)PoN69bIzj!&2x^O`dB*91Nzjs&pYk-|H#g( zu{H=1Jm>6iaclU4hn}W-4c^&I5sLk=SG4 zKiMVp4~7EeDUhKMAYcXr4m(uqK^IGez&W7y>hZ^V5u5NpNy5PnJ0(NVArQsEk&YU1 zz^8ljlJdh6rJDlV1#Oj;_&%i9k<0C@%Jn&vR58xxvpy`}*jym|9|MO7B1p)q$ zIuL_w_~CRByQFG?S_@(v$EgMZd&7B2?0Y|Bo4IQ~dugJ6fg+tPi)oWe9|RBFBhWkN zM1uL$0+lXkc3yL~^+8z=lqv+V+F2;?9J75}-kC1MI*nwX6J*}1?}MO(BPS&IK+`jn z4nO|@i}?23qb0II-$Rg&d@Bzf$K?BM4gu%`iLQRLoh!*+Yu3K!esnILqdL_6=>5;2 z12Mw`#AYYh-EDu+sfXDFa=U`8V^rQUTiSMjwFkHZSG0kS{u=U+RzV;i{}>1W2hz8{ zy-gt1QwTctVZrXX@P%a2lGIdYtecS!a^^!{<&-qOmZ{)meI}407Q~TAl%JA>V)|5Xcwh3UI6d!#y2udu9l0~eGgx0uL|B$#LN>m8clN&Kr%TPL` zAN)8ajKH%{f>dyZz_S(gPWVuQs3V@r%&110GA;K&U|EBtVK{a8v-a>ueC@$p4_Bko zl&a5>K!{S5*ojFd!iX1Um`6S0i2#4xLt^|;UP0|CsDh;`d;46Hp76n~f4m1q`uyNI zkhjF}=#6Ou;YHmH#4xDoO`^G!O+MzaHmJ=*tYmf2R|&GQd(7jl^N{F9=So+egeW-S zWKwY6Q%!O1Fimlwl0nWCSRf>fu&g;OaNuCrms%1yBTZU62NI7q?P(w2c}G4vwU1*~ zRZ|D(6h44;O4NYxACsD>9&r_@&sy&v?aEJe%9Edd|McURRn(i__?cVX@^gK*eVv4K ztGC$J^|;8DN)k)rC2_q^y$ zuX@+Z-uAlpz3`2%eCMlCbYzph_|0!Zp19p~lz;`mVh0ok422RXqy$j#z(D*9V3Isg zw`7iM9t(p!U{b4@Q+qJmkR#F{OKtuExpALgBDf z(6Ls7RM{#74s(g~GvEspq&^64F+yHE5OtK9|Hg97u}fg&Vg=61qDVi1ftDsf?OcP1@7275DbM8o0%c0-pxBs9hX)|WMhFE z^gudj5Hl?BX7pYNuCNN++dAYOp^Y-I6vZg=m~I`BLap}XVOf8e4k7B$hjr}r4_*`y z0&=3$#i7=4(-FK;2Tyov8={VQ9Y~L>|63Hu6Qy#4LrPKuZ@HrylJS4kNq5BEttxYl zBbFC@<`%(|p7?~hlIw{dD2KquU5>&$`6Cj;ZnMdejuD~n>CzDJhjB6f0NQM-Q=huX z|GJFxob%J@Cnw0#fzFcwCwm>(KDV<+&FyIqq}l^9K$x{%_kxf+%!>=R1#i(re!IoS)M@#{3p{ zHzXbFh=-@5#B5$jMc=W=%Fr+(~re>*}R_fQ>Cw>}R@FG(j6 z3+QkS$ZKUHZvJgp-S%uLR&8ijgVd&j5Fl-w zrfuTmUp$y*KZtAs;e$d*cn4v43&wMLqYioFgiz>&dlQ8`H-%DYg*k_XSEz-=#f4kw zg}McXUnqu8Xogitg=9E}>mx1`vVrY(Zw( z{=iS3xQGVGpBfq1wl%Ik~YP&i{jIZ6_JYu z!8#e1HWLF%ZX<&hBTTjk0mNvEs0fQaL4zzHccq4R&!&XlxMHy3Y|S==-8O3L@MhoG z5KOom@^B-(a7=MnXPvPFabt%tvU=>W1OAX{0`YrUQ|ACV+IT86pOemR>E2)YFfex;yWk0EsrNoo1Gi5d>5M_fX&OvDv zkwVjWlD5J1oS0T zXqvECYo^0tq?vOj_z<|64;wcya)WVnq(S>*5mX77!AV@asg*`3K5zDw)25aO;f-Wj zj-IBSXsK+>|CWwW5GZcBgeO#ap=Wuh2YT%(dZnkH@5!F>S)Ze4pYeI0`dNBkVh?%} z3B$P-cKHy-7(4FJ4z<>dW^xV+DiHpldvin(d6W?ebZ@BnMOK44efbcz79{ylnWxf3 z2k=Bubdnp|iJgg|Y(tL^gb(lVqA<#m1aYAcrr+Au$dD?}08isvZhH5Af?ofR8K$mJUpbkNp z{ltH4{}ntEN=K}OeN!co?1n$I^8mI3k}s($j1mzY`cZJAk(#tBOw_3#i94Ih5Suxp ztm%>x%8)zNV zv1#8nV6?GpP;dd`rh|G{t?ZC&c~@raaBd=It=Q&i*?IxnT8?SiZP_|_>SbTUu+5neP$!SQdJqbmu@C@IT)Gewdy;EpAXBEY7mE;QbZehBPy5rc&RP)p z{~%Q2bAdFQ5HITx3Bx=Dfh!(4R8|^^VgwOsv#}(UoCLA6EejMhSe@j_t_!wzW#VRG zb{c|5V4ju^R;#8pcx?rSZAu8I&=?tJz;AX@uLgk+{9q3iat{9R9!wS~7Q3MM3IXUa zC-zb(u+dg<6<5G_wt@mL@=~&dQ#Vb8Iq-@P1{16fg|jFWqBoUOJ0(Sp`?!d^REukV zRn$u8!hWrajfu-t4>wypy$iapQV_T65Iyx%W)M^x*gqSKtXcOi5kVlaI}ol*yDjLuzJVHGAsd8ZD83ex>u_2lS1Q;Oz|tqVz*9h#HFTIo5aKa( z&56MpY^bqg4|8&gICh$>nZYpku@EuBmnBg>MS%se!$VfGBqX>0wpnx{kLuvUmleY^ ztiU#BfJgko3|tU>gL?^~S)Apu5MV04M!i!U5$nK0*U`hB(wtA6#6TPv7jOaUuny(g zu7tb4B*C^Cfrl<3ApJ#9S%$|M!4D_uvwG}8+UO7ubPqO$z;H|wJ7$ml|BGsz$P#u; zU1rda^NJIZ+z*pHhX{Z@23ru7e90bT0OMP~?FwOsoDzDu$Q+@?FY(CJr4P9_6t3*a z`D-0f91*cx%D9}%y1dK0+{?cF%fKAW!VD4i#lpjU%pSvE)x}@|Mzw2(zsyWyq>RiN zamvPw5g10zIw6%%;bC6^ZX>qIF#xAPSic5@JL1gSiNBpjV}yKT+KkOShRQ$k5B^9U z`!bx4i5g8-e^7>G+x2A!;m<|E%}&8(!UWJ$5w)9)welN;Z|a?Grj8<^zwL|>a=e89 z4iw~dxuvpJhTA<#}?X;Ws>O#!Xs{Ar=q&^AaPmH(;{5?s1d(zTqNrT7dov({*Vs(kZB|NnDr)y>5y*yjb(~^o;;b;bB~f~|*|9Tqrk&VbYJ_lC ztq#48TkUr|xUO7F)zXICdlz^#Shfz7p8I)v_-WnM&3V_Y-P!G)+yCv|-3_1EU3#i_ z+h0-Eg4#l9J#VxmF%*NlrUao`%zNwxkY44kh&X)37lINvf7ii$+?Rgdmk`reeF$)U z1EGK0w{zWRI_(#J%J<*p=hrS6fiVb!5I%kqUVjh%ehi`DjH)UBw}J&I5Gu%m-3hFuQkXfEby{)KJ$KL^m- zWr5zNv_I<|N>Ru+eiONU*oX(>KZ0mcgt%=5JHd$xUwn=nPSf1uDatHq3UO>6WYj)O+Ibs8IA)sj`(|)V%cKoc&0q~mT#;Z@3?1JOcv;U zMz>MtK2T5ucJ*N%29kmDdUdUfGRc`RvL*&MIHr=>Lk`>AIE!)|M`Bw!I>k@GKT( zJ(!4QNc%9i1{K5w@t4Xgn2M^mEOeX`p+y#&qMvyhtGb7xX^|cZq6HL7{-c?Yd!vl0 znihHWAGMq94)(e^^=BWNdebpnpP91R@JbEp5mB5M7oEB_oss#QQHS?>Bg+V3_tBA@ z@lvHqI}sx9MNX*qCtsajOWadE5NSH|1JRu`E%{Y0o(4vq=9%-;Emz+y-rSv^q(9!K zKl-N+-ldQFtgrg1A9?-xpMb9wWi2XB7$k(Khh^WOStsARKcN^=p{og}HM&52>8X@? z?=Ui=I?6=HU+H*@h%Bn5MGC|;D*b1l5X(=ZJO7&0ARDU_@uWja{YHxRNZN#%LZn-I z5#k@EtvRJpO1+5B>t5ud>u>(S&8-T3mfkq|QLTdj!43+P3lJcbfa1ZRK@U($EHsGl zA%unx(G4u2PMt)E9U-neC$D3=b0tldR7dip$&@Qus&v`XQt&#tzN~N)u6m{P^+eU7d9+EfA7>mIPd`C1APz? zoMYEf-#>`^{4K0^F5Xm)S?!%mw~#41gZ=hJWeZWCS_r)8YGrrs9fWmp+nsXDbwhI?qO)PbE)YTnR8$4b3u>aQ0YdE4JBEF@`f z_;0Pj>-M`0Z{gp-2G8AQ4l%MwkGx$I_t-l7c=8YjdRTV>A(X%k39jR~(7?b8>qPGKifA?lDLm&!&>`fw->v%PSd)6K|n=9%x6Yb7+L%EhMpu zY_f$e%WN~kI=f9t)qI0!$RZ(d=SZs}fw4F-JJQm~C4;m|%7t!R2%iVe^2kj%Awm

dri^+OtoH;5mmM&LE&}q3c}4Q!916jPuQo z5DgSWQ5z)nKFUaS5IIywRA*HPE^zKY}%u!LM63`ta9e+5=lGj<5JSYsg& zk+~8f;>9yJ`T6LadOSkMp9k!z$De<^QgR+|=ZO&6lES6xuYd5l=N}yxs#6_x@rk6V zIWzPJAA9ftFRCUXf>K;w%$TPhHZ{}GUVPcbav^s;i}#;7`SRzSeeSVmA15KG6XS$y ze7E5_GoFg8e*+#E0!aI@=bqyhIyvQ)HKr=!NvT4>pL-B6gC9a6P$%MvE55kSb=1wr zoLcJ()gy!yvI@eq7iYY2#~-IK+258`7@vR6 zefX^{J5tB;2lm$sMg8n@<>KBXdX!)u(_&zpTx|dcs9d* zpKxtgH+R{jf?amnsZz%tYyANo;VY4k{h!(CM7yfrixAh0fQ0snQZBR_weisCXjLK2qHgdUQdsK|oB1D?=@FMM1&oC3qI%&I5|y~b3AMwBqFdgDK*B@EwUCKd#3EJ9;E#Un zNr_wR;)Lvh07>mAD`50u7S-rD1F%hSyfO&{*EmNy`Vf64iK2xH$U?x>(T_~j$34=R z#6S-6H$!tD60cIoKQ_{lkA!3-B{@k-R??D}#AGHlxk*lT(vzPAWhg~CN>Y~6l&3^x zDpk443ZY{id1PfQWjRajO^ue2WCsGKM4?>nQag*fz4)m5!{#9*!B2?H-7_6KZpk=onX2 z?g1?eZL~u2n8#lfdZBWTr<^7ArwL;Pg?93VJ|h{Xf|3c(RuQC`y-I0L8JEHbebb;@ zc>qpX!_kGzqbWs$ljsg$j{`)ihZdb=J@i3Q&HQvi`>?8nE;CXKp_Dl%J*Q4zc%Jl} z2P^5I>fq*SIC%0YtsWAgSmg>Vo?3+;`@rf#*ue{l33YDg047%i*^zc!OmzGtAyhe; zR|_$=LjPL@mRElRRzuDeasx3{;p)i|W2UMj@xf27%-UI*+EbklX(xQv2}0!g)w0Gi zOEBwNE`Owhau8sL#UL9MGcdGJ|HxNVAVn;NneMF~amN9QH&unD>jC_j+B@#yn5In2 zAnj1DKfuI8bvPHg6H4xK;pC714Jk12&`107(NgAoGoy-eiEp~AuJ0~Hy43xLb@dV7 zg{&hI%KONFt+%}09#pxwV=j6AvKipE^Bw}s%tFG8U^p%Ka{4giU+}TI*4guX8N~=rLp>51BAU zF8}h8k!)lkFPR=nUNV%CEafCOIm%X^GM20C@oW68CCKWv>EKk#+s-^Wz`MqDpvfsQd&KL1^%!G4)a8{+`{U2THs?Nyjl1cb<6O=)qoHA4k45kL za=5-6R9@su2s{9ro(Ae73|baDq^z=vH@($*Z&P7p9rETCx&MlS z6rvnu;0HH&!e>HoqbwZZ4p+EMB90TDDf=7;u%()PYn6T=3C`E$b7bftsOOgCAK3JW zyK;!z2drz6(0h3uS9 zJ$GGHm~IfJY^fa&$OqMlbX~0T%e6o6>N&YW+>Uf9Phj`R)y8ggAHAkdRp)xvcfinj z6n#_Dxf;^BI@ch=SXT7bca60(5UzC-ceAMKhD}y~ zy^uUJE5AGV-8u4y97#p7FX}r-Bq-_`jc6oZHirm0x?U(qQ>pdpcs+T7uK)U|xX&PS z-_q3-o1M)YWa{O{$L(_;b&nkXH4uo+^J4>Ya_#=OTDjV$tP7FA%*Y_tPy0EwZ}big z=6D{FzFPXFEeKpDF2b+<j-pkiq^9W)G5BkuqvpNKrBHA2Z}HWF@u)NhYxfnm#7XjiHz+tloDKt zb*qXH#JUf(8c#`=YU_}yA&(23Iu<;M6EvS4lop7{i&qN5g&L9KgTWCLqp+$PdFTg| zOCShHLK!?DPC1|fw8S_m=|vo7PqKXkG(^TR;wLqRmeLPSJByfQ`1vi`CMb%_KQ{3HlG zsGyjd;sc4Ig9v}1Gu)Vz#mG4FSchy$y#z9ZliC9bd_cvpn2=G7m`KnL zp@RVJvO!CcBj(USt9r#)Je#Qi!Y%9(kTAxLyFgkj#bLX_+u(`=h=+HOhmv7NTO>bT z%tp4$!c|O0sK665&VYOh{P)`HeAEfGA6%^LwF3pTe%2_(1-){ z2t8~?hyzH83rL-qIG-p;pcqJlOh|+j$cCgiE@29%aKKQaME~T7MY4#kIP-|kQ;bQm zi-n>*&bhv+aE@{dE>&EUm(ix@^N^A>KIjm=UBsFR*^b@#pXHbysql`q0FUVF$r8h@ zq!S;&az<^`j7cdO&Lc{5dd7213zWo3*kFu_>4$i5!m+8sbhIq8;+yuM57nBd4>Az> zC=mYe4*(I6I221$p~H!|G0&n3e^fwGp%)IBrHYh_k88gmV-W%h6B$7g8_~)fNi&aV z6ixw^@IaeEaT0Ax%&1V5v*JD+gcM1Eh^)jEV6uu$DZ}&e6o`0C?3oHVA(O4+5>6?T z(+r=S8;Qv*!^q?jCcF(bp^`#z&2vnktJyuMgn-oS68|K5#0QACra&6ZoXh@*6;rW8 zdE!1-sS#IsCsK*Sba0in#1)6wmBbOs?HnRlv1bE$xUK5TcvF!JGBS2-6BuAvMx_+&?&UJnocItia2t zfU}4>3E$A1sOTJZ;h)|d9f(i|<5C~?X^H_-82|Z!9t%RA``L%lqoDce2>&Tl0SZY7 z*dv)l$2nb~tZ1MI@*W9F(+aXs@e$NrtDX@gnn-^Y zSX!D!O6nyGIarU#rGahNVPb(|V$P{BJpYFcSW7zztz=kJ`qqloDqM7=;d3O(!oIM& zOp?u5e>$zUfmVpPr@=cWsxZ8k1r~ieqLYoKV+B{MAgG^`D9n)xEc}Rvs!=?3)Z}|A zR*WQ(^$U|dN1N@Zm0H>7v?=ZbIEkex#>=PeblOvz)&BA+A-OoFa;l+nk)yJQqzc=n zBB~bx*+x=Yte~u|^(U@0D?LdoeuPrw7)c6|OS!E)uE8sVDlD*7q{s-YBk`iaHHgEa zp|<^_x2@FhlSIEor8Cs5zmu_uZ9|VR0MQx{9b?(kVyBN7(pRP2j5MXLrIgyz%L_dR zvRjDW8W9;fNmF}WF(p&1m@t1xF#n$MuIQSs58FQM`UmY|#rb-!Q2dSEO)&Dx65%wN z^g61jtqKckuq=Tv0~0T!V=xS>whj9S)`18QtF91ZRC@qQgE%qi{fG6U+&OBo0GV1f z1l`Rg5LC%A%{>rQ=`mFKv3?9PM%*$&6yPu`;4vfM1YSf1&awj@#07@nEITvm&7`hv zvp37Cp=7T)tFt?!8JIhf_ez{#ldnOev{#F@7y+M0i!>8 z4Zwx)H<{hywUP*atG5#PH~+ki7J)m+f?G&7c1VSMV}>NiHg32$cH=p=<2t4|b+9;$ zBc-nGxXk0y@KxAz7&*ZxIcq~X&LL#&XgLZ-yH9ymp7V`5NsAp}O$cy0n!6yYh~)A0 zSfblTy(>y_fn5n(%1@TbwKJ!-1Cqrw&8w3;y0g2O%sZ{MVi@YXEH14Bq&H(KytdLe zcYFvt^t=CUC|o|-$UBG06Qx+@s;DrqI zjSVzuH=~d#T*aC2!9rF+R}2aq<}DGFK@vNQ8pO@c9N8OO5+{U0?0{)KwZgChS~NjV zBlJQr6hnhXAfQg@9y&wnw5f+qkcf7}iO$=tw%=Q^!yQ56RSYKwK18%mLR6Yhu0Xl97L&{z(N#i`Arz~xg zG;HI$hpN2Fm1%9)rXj9uXgPcjdRxo;tq-&88?dbs0_@3UC1*tK{6Z2}eU(Q5fiqmFcX`i@r{ELgqBiW$)zLkFJW_ z>XvVbkpHHRJ@w3%8Xa?Q2^aY+(5SgjrP0s)=Fg%zni`RF0cB7WwF(l2a|Fe~RBcfB zR#A~*Q8w}O0~Kv4wg(!WVYJaukJ*Z5`9&h;~ghCRZC~}6=PKo!rG0V&v3USSO1M# zC8b`SkX-!@cSrYmKbBzSl_IKHddDQ3<=8_)+EAia1#?ykj$JOoaD7Mk?7-G0g`<*q z@Bf6aqmA_yaTTR?6~)UrSFEsji0Al@_xO(o`H&a+ktg|*H~EuC`IL88fK~aH2bO|$ z`Iy%sX0q*3nO7o-|0j=aBzop~h)>zky$YF)C!3!sd_sC(p;^QldKcpN zfhs74p)~SIE1-2mh$^b04R6O0`l#1;sJ#kygef#OJhPwKRTp~_((s`P8~d`JMsH@- zSX(?bTeMv&wLMydZhMZW+qR+#w3?|c2SCEVsdNAP64LOyIzFRgFT;&b#3d}lva`nh z_r*_m%av`+eTe!MKpN{@hZrsWeHGD7txl(K#rId#EhW`;9^1;`B)R6;-8kB{ivQul z-CWn*1LNH}LEifMzThq2>&mX}YA*UxUaer>@hUIqMX~ACd{vF#7vts6H+_v>kSfP5 z(_ar#>EG-}K#x%C@}KJmhU>bf>-1;;w|0NIR)6%bvI$OIFh?$z{hvkps8Xj=t!niu)~s5$ za$O4LE7%ePOF;1;kgQk;>C&OC*_Pnf66-E}HLI2_l(b{>&i!gYVBB?h_5Uti$IxNA zg^CrcOT3t|4y_J?x_T`Sfb44f z_ELpFo%XvYP+vcXM9=km?U3C$dIa-5;J5JKyqfC%9XS5r0Yaw=vpbCRFMB$FJR$TO zPw)VCm@Wl+2QU8W_L}d`MTdRP%+Pa6A;de3`#*pI3OFEv1sXUYSYWYm!C7TBNZ4Br zMTpW@yOCwrgA(SI;W}S22*HFm8FtcvC7O65Q}Xa~4lnVb_+m}EIW^Be`vG^{4);7z zoI?h22LUht)U!i8`oiM<3t zl~<~h*uif*{v-%Bmj&Gl8yDhifYU-Cj z>3GGj4{OhYV7eq>)7+p1Cc1}?f-3|F6B;WwK){4ulK#o z%X!oeqz_G7ty7ObMa7KIJ3$M*cl)hb-huZG_~4`! z?wLUDFh{DVU2CQCP3bKC4nO|9lPUzW7Ict9`q(VcsRPw>j*B)qS(QNu2=stHHwpXD z1J#AQ9+|EGmpVcF^wZ9f)hc@q){YB5Jn@d#H5Z^tMGD0Qf07M>0UomR*Fe!T&(4Qm zEw~N~4puKc^^iJheS+xTTX*s4Z)K!E^PH@HRggb*WB*P46*~|=uM#v5=>nyctvaf7 zla!>#DJM%zwj$BLn!L^-`8Y>y=mY@;md++LQk?+_f9iC5TbtN)S-QrxycsuLM1G3cgM#M5mZx2SbeCPo_dY2;hSs z_OQnR&Vj0so#TGA^2Y;6qLJMgPv7iJW@*gEF zc^tB^zyl|{0H8`>98hXclTqWOCmR*7=k0}2BL6C5Bx5Pd6eUqAON_?>NQTBK86-{* zQ3p#Nun%8Cz$cIKN0a)&BPitqi*2ePZ0vzW@eq@abqr>kkOUKHN@SQ0!G{!|@{VSz zWFOEJ2>*x)fe>D8mhOBfJT-NJ3#elq*1Ke3U>VPSK2mqnQ980irFYv(uq)g+(V>Ov16MkO4FedwWvltDpHfG)TJ`DsZM<=RHG`@sZzD7 zR=p}#v#Qmta_96J>X=rw4hygZx`$96HxHu7)hg*=$v^Pn)0!A$G0JJmI&v9V%-yxKp8f1f zfiPIKayBdKKxpN+7x|AW<2Zg&Oait z8+CY&RI=fPvmmftr?AY55a1uKaQ{XS);R?qG>b|K_Q;1u_S+VW<2< z#kmv+bs(Td2z+_L27SsuSPTJx!nn{Ir_fgS9iGlAm(gulWe9cqXJLRhN~ zBf}wFs|E6q2fP*l4@A&64lD%Fss?qSgV9XM?s6XB%XWMTC5Aje>*m9qEjL9+#z}_& zApktb0P`G9Ss{OC#?nD+c8vU7Jx4kY5D;x&0es^pS-R1P zcJ_b)T;11Zr`b2bG?mmWV*liTBp(;yowG>Il=+nIO(5CeK7`^ES`Wk>@IV0j*ewu+ z+{4a004cBYt?zw9Ma~cLw^~rk+`yvs*sz5FfT<1bA0rvz&jzq)*J@1n~sazS?Zu2R8maG^3EH5 z1jPA3=94Y|T?hN=Fo?@VFaGg&cE@Rb4UN-kV`Aq$**K1Ezz6#zq02u^qkRp;feZxp z&bQ%7CXPMagX~O4m1N03yaw|LM98(u1Kh(ssM%8R&p8+oLGVIuHHSlxkrDT?`0BNz@tY zB8p&Cj>O_qw8KB>Pi%O^MsU`~L4-X736snN6kg${*dlHq)>cR!V=?1XF%-QxMGP?y zVhjc`V*f}x;?sWw5jyUPKNUtx=+77$1%sW~L!_8P%!5kck#YFM0YH%lX^S}C#>HWU zxZNXC9S<-{A!p6aqG%B2tzs@pB#PwYP4L4$JY;_09CBb#_4SlPw1dm|#4_4RL)r#O zT17;9WKn&M*|bYr2qP<{OZD{7G4iCLfKvD5#g8~oLzxm&*rUE(PDO!aO-NHZEK!ee zjzgG1EKVT={vQRxL>NAWJLHl?=);q!!?ZMqC%(fy1c^#mQ9I-k)j*$Fk_lRuNf=C27)g*}hSelhgrzQ#W#$=PF+G4%z=J+GQ$F~jO@0cvaF08xjVe({DLzDq zkpB-@n1xVkND7S-LzxfVG#1BvOvaq1YCa5Vc1&ur=4wt%Y*x%{UJPvB=EPu8y(JV> zI)ppi3ItH4TC77n`~#Q-BtU)`oWO<|S!MNgWXMPaMOXwzXaq-i#2m2>Ntguptwc-g zk#)|5T}p+LG1(V6**`>9lzAGJsl=5breI1%PE6-`XjD+-hfyF!jYKBOjAknl%39b< zhy+GO-bIL@MPEPx^#leyVpbUm&fgeLgqp_Tpa$VgsD(=Cg>I;Zb|{5n25iX2Inc&I z^(H~|#%~zcIxWO9MNM*KnsWdWEjCG*MNRiTMSMI&dxQ(jSktW)(DRMSj;aOBSpUUC zGRLNMTE~GJ1c;i*JziAgs6)(0eLP>zCvO|vS$eQ>_1qum~7>PE8iIQy8>4;NNq)M4w37QCm zk9x^*ss-&NDwb#oRy-t$-Av+D-M3-glWK*U)P&}|i7#PkOm1nW^a)Z5iuX*2fIiQ< zlqs0D&AUvBnOaJl<{GC!qdU#%sFaG6oC@ZwibJ@{%Z$gUm`AMuXI3x^uTT-NFe;aL zniU~UXvkYrKwZX(&QEll)h*!FL1|PlYlf{;v=r0lV5zEYpQ%cwf`&`jtpDosu+5{m z>Q}H!F}e*a=@3qQMZNUo`Ishd(q_Qgrfd%E#u%)})aJn!EW-+H!xC)8gv`j4jI|!o zoU%-1j3)#XsbQquK=?y)h8@mmY*jdo&tRO=EDg~>1oTmB$_`DXs%X?H64iAZ$Z@Iy z-YRDC%*px>eQa#itf&aB>$ZH&Jf3O1`m4N>qMF{Tyn^Z5#Em+vDHX{TgmUPIVr_sW!050h4PVZO^BgqueV*d(7CJ(+ckMj`5 zJxvcmgl_gURP%HXql9kwIEvYD<}f-axV{l1hl|_Z|IRx@0P9im-w+1Qnq9jus5D5xI2Yrz5v{UAO z3q!4te};(+!GsLaP-nUj4nZy1@K9d-5bV-i5j~}@I>iz-(Gx|{6va&Vp#v6a(UJ&6 z7x|VLfuK_ik{YoQO!Q12?ZX@mt{r_z9?=dT#SsPnQ6M!%2lYb$4j{?kg8?ES^X6=Z zS)c<#V9$K;-=fh2r!b>_uh5cj`C`f>l@dO&LnhIq4>#0HssBqTjnWTqk`SxvDw)qI z=2PtEFmBjx=jabE>C!#$(sEWI$#_#wNCskpVT+C%IXzR8a1%AHY|&uTJ_M>dm@yZt zTsTFA5pG1tC?Q`mE3&bJuxD8g%sZw zV)D}zvI?eDGC`f$BV$#UJ`}bn<0b=$Gumf8LLWbUR7hzGDpxF1kd#S{;w}VWC6j0+2v1-#h4E70u80N+zrj9IT zV-_StGxZ})X7@C0xkNQqhp9lgu7gPRUWBH)r2lU%1MI^ttiyIT#C|qsgLc9q>}ziJ zXq$Fvdv<6?jBXxw2}$v9hL~~1ww*Fia_SW3@##P?FbFRhbeyNJq$iZ6r<9#Tds-Qm z?KL_VhIHhqEji=~C=(a!v$&eID!xO%hug%b&aIndF{zsJhsP4C zaxQkyD-+YJqFAPx>MO0rs(GVfu8#BY@G7a8$`tjgnXd`4!iurdZL*H5k;-hg>g~2x z-OVETR*0)`liOh1V=L13(8yo0JghRby9%+w4)j4W4RtJKxG%{pPu zCb@|4Y|whz)C4WMwql?Qdb@&+JBm%xn$OavO%pRZ>uw0#kGr>Ld*Uq4+O{pKhyTgs#BF1=yX8EIj^AzW7~bCAM4>`O;yT3P24|)= zEW;4TlMn6)WA>Me-|YT! z`fxOk*MxBL?m#XO@WO`h4hw@9U%3)Q^`hQ&JT0ug60fH- z$z%N#6GSgbM=-syF)hXyfBz*^%rO$$F%#N6&iW4@69hO-@=XA8Ieix|7c#NiJ#s0s zJxTP(tN!9gg{?&rCT~SSslKjtGE7C(Jr}z^i}_FC{1L5kR=Dza;C`;jauR#8Vk|sU z=Q4ntJ|qP*Rsa<-BR}?MzxHoG_jkYde?Rz#zxa|q`XSl;*PKEN$YTk&$h*Topff-qI5%)0JqQO8CRDhPVMB)xAx4xqkzz%Q7cpkk zxRGN=j~_vX6giS)Ns}9a#8J6YT}gE+btp`i&PW_13tz^Gd6H*OpC|YA^U3c4K70@O zQIz-KoIHwV9?X+Eum9aot5>mR)w-2ySFc~ehJC0*r4e@PblfyKvtdoOGSi8bJ9lHy zp7NR=#2YUnJ6`AZ<(+8HA6>(T5hqr>m~msr2jSRksII2XmJldMHj)y~&a{zjt~<+; zveHCTtt^I68~<@Ng;rcCE(q8`k+p{GIVX~O^4ZO|ejKds9;YB!2RWmV^DRGr?y2WT zh}bzNAE^F8fS1A!s>dD#tb4%8bD)%RJ|guo5=kX_!>37!o{VzJgV0nHAuquk4mNn^ z@#mkZ;5kSgKcgg4K#2ZH3ZVo3Iq07QAV9zj2pFYkLL}jY^utX#?bOpxL0#;`8x@KS z4tCfv6#}w=$Ptco)QE!}2;5R9$2j0PXr>rxG!3C$eLbkw6M;BLB{kGRhgXMsyzw0$ z5$cD(g@UXKf_5Ir=O6^_si;Z;4|wp|SrsA>fo;#}mLX{ws`emkwS|b=hS-J3+=T2> z=s0rI@&9MqhwgdcvUG|%=p1~~8Au&`&asrji2izjmwHGI)#8gW&RFA(6*`fjoXEWu ztvHHR34)Yjit)tDXbl#jWnXqVM$|wS)@6p8U6esO|84L={C4K2(aDT5>auSk$cMiP zzxx$}2ktpYXou=m$iajb?5}8iSe}~Ro*9Y@YJ7#Vnrn5?j%4TC&fyD!9nKLj;i&gX z>Yj5de&|w)+<^yy!2HRZ8g(JXAxH-%Rv|DM<(Ac|+2$QDhf!wJQo8BZ z%V5SCZ-jb;t?JkcOsJl7M7z47DhUcX?xd4qTCaWv`sd(-TwfRLBvZeW^@Cs^h}@@t z_W!*hd2l~RcYMfJXdV6Z6MUh6e$HoT2zEz^VTUoT2rmN>FW>z0(NF&&)s9DqamRIn zTymW#*HxwCJJ%fZlQ&l@{}3|=k(_mDcn~<1q+6de4!2>?{MJ@EA)VwJV0F#cvM0vHIcnxq&w>K z;SYfrM2x*iA(j&vdjQBOz&+l#py4>d-;4AYdv~sS0vVq+d1HK4U(Ncn?UYL!Q;lNY0a<^|Yr*YNV2u zxM(FNB3VKvmrwfribO1fA4>>YnwH4YS3uB=W+Kuf-u&mCUc||8@S(PUunchcum?Wi z$dF>bOM-aeg&F2ik34qtqsiN)IxwnHZZ?FaAdS}VCU}mMrZkTbfX6xdVgHYNXlhV^ zxraR>G!X=yV+RW1MNy8z$P%(s9`oo?KIRc9gy7|22;j$2gY*v(-IJ_kHS1YjS((lB zN3ECXq$)p&tD1CXA+o_05GrO@o8)z_c*_E(csGV5S|I)Jq-T378QM?~`w+IZx- zkdab+MaW?QS|h77 zrLhp(!Q{KG*dgusN7)o&Wh^UXbs}1aJ%r;M$L@w}C%%VNPjcpuRJBJlesW_n9A_PW z48s?IONWKr5F+=d&PitHn;(f6Dlhu3lBBF}cF2f;Ikk^HMtkND4?7NVdl!jFAy8vg>arZtYvajvZjGjHuU z6n)O&)Ae9?-Cr(VIkiFzzyb~T7)NogwvlbD;r6Yg z!%)Dnog*?mHz%7R?^w0QU_F??=_ApENe8_dVuk`X4to*#X;b^d+jlDjH{3yPdEkSd z(Hw`d3JH&M$cK~Z{G&S8XVt_bvd)m*o_ST_rnIl_0-G8RX+0lOXE~Y*0YyW4v+9B|ExXYa$ZhyPo*^c+N z$6fAvN4wwW-gmy=eeiiN{NCvf__`nd?-0<nv(%l&-x^}{!I~y zlbNCwd`#_LPY2bGva9_BulFZ2zEu*&smw{O{WuLfvG7dI&-t5{3cK z!2uyK0w0h8B@hBH&;l!vdNPm$H&8!15ClK40slu(VM>q!Colv_Fa=Lg1r-J}tiyzU zZDS@6BKiTC@GV+!aPz9fAP^!*_#t;(?4m>nN8Bm$vdFrgB@#-DT6*bSvISjgNFtCX zTp(av7UEtGBweaWA>8F!qEKGAu#O%=3lDJH+WwE~4iNwk5y)U;>Y(l0uI<#;q0bNz0SPS-o6h0> zf*0Hd-uCSw=HVZ1BnJ;f6jyHZL@yzPqaJqPvd%%Penn`;s*of?iv+0&tp<+7$ZI}k zYmR1il!mf2u5q3Qn0Rr7a0-mX2s3;UA^(oinQ$s0#HN{OttikYZR98;s!@fi`u^kfv9&~5WI;9310v#ys8u!5;TEZbA4Q(Qln|LA7*6<)4vS-j?A2N?4wCICK zsDo5zc>3s^^h0(81cHR|c5TZYjd1cpAgM~kG%AQ9r}8mG_bvD*Ie>JBj

5Q@691a**(MPR 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
hA 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

sU|6fk;8|`?Ioyz0p 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

cw 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

03sTDNJ?~MN8 zh)vq0hT{bR^3V^wqhGpM5Vbf^KzBzoHXDd?j0BO41u=}p_-E4;8--Je0zoPpXnjWp z0k~m<>9!CY5_*?-j&t#G#}D z5WtLHC`GquO>MY+4S|N+BrF_q0P*k+=eAA{ppen1fyQ-TwpWn}A&mp^kP$hNCTNTJ zfKnmV5MbjV50GWj*G$&O5RkYKGK7vaSr@d%K|}v2RHtTyx@J@HIC8FNk5b5wLm7%x z2yyyIYxq}`0a;|Zqb~(%5V}Z00udh(;Zt}7jKb1$I<-z#nSlo}m0g$+Um1r7!Ifs3bmenc+9P+&nGn>I zn|?W+X)$=HmLGhFYJPWwLOF`lmTgHgZA1S;kJs56;wg{arjJVaa25xe_jMm*hbX1F zU4-Rb|1czSg%4lTmb(~De8eHVU4XIZlGTLV#EYhiD+ zR+$w?Yb=tO-6@YO7Y7+9MY9G6Ku}lfAaO>3q(yq9=t-2QIBS(jfV9yw2QXyw$t^H8 zbp=5mJ|~^RLu2B#LKNh4`_Lp_nk<}^r7xy)50R$tHK7Mlrpa=qH1lJer4E=AX(kcY;4!r-8EHY=KkV+T;c@jFn4jlxT;7O(07^$4vsbMjx zCINVmxex;Bsiu0WU;(Nn0R$`OqzqB2s2Z!XI;*r=tG0TpxSFfFx~sg}s~KS#w&$zD zI;>OS8d1V7y5%ktVyv){8-GTuIhGs2su8`>J+c}cFxr=fk{ots5I;grZiNu@^Q{=7 z9ozw}2ytd<1`+9j9_E1%1gT5$F&{TJsB02zC4sLP;U55!aNJi~-Kr}2qiq5;Kk(G7 z{)(>3IjyuZBBbQ7ddQb3@((J)A}#_WGQuYR_7NLP5i$9%t8q6#q7X`QNpwRbXH~Ko zlCTOJTnTX{p8~U@hgmPGXv6<<1#`< zAuAS_$~lfr33@at5WD}U50{sDLsNUVmwRqEdP?&TOp{Z;hXAR!dIySot_QxnN4~Vj zd3ZIy=xe{?8+$qOzVX{xJmWJ!BM`^;56Slcj;k{TTzs>)c^iZ@>)XD=!o3e6H9uE1 zYP7B`Vl5=gt#6|xMMg?(3%A`hYgj{cgw-X_d zvk1Nzd62%Bi~Knnyf|Ze#Ld)r4#7c@6%Ek_xs2_hCCV+>PYW2N%m7oC)-c()5&MGPfX-b0HqF|JV$;+I-ip`ww>EI zjN7|?+rF*aK+N00{oB2bQ5t0r44V{beNrN&QiEfX&dpM;Ok6J+Qxi?fs#0yS=u1xt z(ro{^%&+{+={qJ_$wz1@5WrcMiyfA8NR11Ut$WrKmFxU)nCXVU;q~E4aN=+hG2_Q0`L;G!){vB_+X`2I)Yl-wyLZ_YC7JLE)aB@ zMrg|Jar)_`w52lU5OBJt=pOHON)Rljz>2%4X+&l^77+pOV)!nayS|2YQm@eps0h(x zM~B^pc3%cgt4r2oPv+s(o)C3j5mx3Buu2?QmJ=th5nD#AU-uBQK-5o`7m zCEpot24^^t^JlFPb5>`>s%OZ-XK&?aA5Rd1CL7ld5f@MLMOGY%*7GV6^^0~Z-hT90 zpY>Y5^<3ZeUjOxA&#UY}vm!C}u}KjT8TM+=aICg#Ah&9yHWD}Q5p%EQ=3Egzw)7K` z_d$WJ_q_IiuMx6FYnj>+jyI**33-Pv_fH=Zb>9#;bP?z<=pr%se~&eMnG*bZ`6Mf- zXT1)`av$T4!1b_u3OxFOKb?TdYp6dFc~|&L33;#2_)=dHkDpn0PZ9Odxg@dst^e3B zVbcpSZeWx7yY&zLUWM^ zJbnID=F2HiA5^yI_6;ri;Aqm5DOU<4YxW;nhWGUD)5@^jIjLW#R%M7)tG)*eALuhI zupd9LkRww>a4zj-&YeAf1|3@TXws!kpGKWp^=j6wUB8AMTOI#Gk`&h=#2sg$j@-G^ zL3r4E;ceVTbUrjbkT}BR1B3e($gX$7%NPIQi<@>`NPPH0*6#P%UcGyT*FEr84}rb6 zG~L>Zgq|}ymG`^{-Kz0kz3^Tkgx6=h@&uA+o{I__=pV`kdMUqu_UrGm0uQ9DW{~eN-M9tjJG&8r05_x*kQ*@2zUcRIyll%BaWPq zQ%AZu;1DRCbdWoaI)>z=lOZ;>1VSK$)KCYVJPo^uB>Mj>%jbcPczPh8f%<8WB6&2^ z>7orM-QltW9!N_a{2%}+t#tf}6w%J9oPJuxvRre| zMK@h_*JZa|&$QHOHZ`N8jZ6p-f&hp(CdyMwatGDZPKp2q&Q3bzO^e`4a~&vAbRc+) zA;umpwxn|+A=e^?A@J0yY`ep!RdgC1=vtv54p|+QZ0X9araoOlG<;T*4ERe9yc zwgNe1if%P_W0M*3wIZBzW|`Q9HyoOx-yXQfS!MqXi+N@UYDVhXsQ01lo{hhn^d2yG z@aNb0c35>>ch_dSZMWZsJ8mqsXo<3vaYd-2tmUpo8+>3p^)=4TRu!)3 zSb^#}XPtErYcX=Abu#0DMgwz?%X6ZRuC27#q1;vcCU1+a4Nct%=*k4j=i7!-S3PvL zHWSG8&IkIOXtR~09jetU-d&*H3G4@|r>M>S<;#SGUG{33hd^7-v{n9r9Y2ftWVycw zKYa1WCtqFSa3=^Mrt{uAj(qnmIJtBX+6?hJ2_MM*!rwPeUXmEc6_*M%IjcaRP?yum zI_lw%i)qYr)Jx!}Oed7d;o}__#9+%>=e+;wJwQ$mI9UZTm_g3y&VXOTi0^EJkr7@{ zg8}3nwI+3dc)UX%u#(zmGW0?3ZNyuhQHML)K{_9SW?1DzViJ|OL?$+oBFw1>;2_|p zb=XT~@AF%76qi52aS?w4(O=+_qd(^0sf$Zv(9R+@kclDiE17B52_JYF?Un3PYt#wr zbV9nRQKdkX5(pka!$%kzk9r3%5=8__5j_TNju5bkW2i?+&-f85o7t3OhP0K8Rb*8& z;#emu@(0KrtHjC4zfMT_ZG?F5ox+X&= z)5vj(2AzfM=0Gyk$#&+kl#Yw1O&%6V>Uqk0ompqGCRLb$GK4;y(n&fpQ@|-|4t)&S z6+>4!QHoa7q8ANZZ)UO_-0a4c4C!0JdQ(ii<%V4IGik{*8oyyS2M7l-$Qhq`A;$cJ zBkD&~uN@cWp>S*3*U_6)F)Xc;UsZAp<4V&?c ztR6I?)hz4R7`jS|9!))D;v`+GS|>%rk_ky;Rl-iXy4p2^Js$8os)@uNYvF~dr9JI2 zF^3&hbf#+Lv=hc{JJy>nG_Au8ZY$y1iNL;+utif)2uzBcUs+XJ*zK8%Je1n^elkpV z@>%Az>a#G_7aaeJS&)Mygd~8zpGU;Z5P~y@w=$MUbugk4j(7wlzopAk?ov$!$D~y? zxrx1X;u4tbdLZ(MZ+hHg6CvS_D{}FQI`k2e@d%i6eqk=>BGVJ?0>yhTpG!&V!W4nf zIaO3CpklTXm!L<+=wm6%SvIql)I|#DVO5G1p;jhWMA`W zZ0LO^Ga|=#+>z|R1Ww1J)7g?pb2FTU8;)=Y4_I$DBJmx`< zdf20}eZWUPNR9k@inW%Y)*}*4sfp#c>(mE{8Y!g9N9O*40A6g@MKF@lW$5#u`!rQQ zrhk;<2h{&=13B+T43Zt`Nfg$dR9aao%FsVH)S(ZBXhgV|jP6r(u@x!5MK6lc17@V| zo%~)PIr3qTek8rGw4F%XjSP~MI@ik6}++* zY_Xom=oa7u7pMR*_k+SCgO@0xA9~S^_Q9gr@)t4kKfm)rmXe|a#3zS=m`y^v;EEh;uy*~8l9OUaLR|b7!0s`nrr%)?hqLVoFIP68Ffe+>e?V> zsT!Iosyjr)o#7Za{23b*8VQ0VW-~;jk;LF~9CQ0aA>@okyc%%YCa!@1uOT-G6dQIR z8%_KQS4K!}}V@k(|L}!^Qj2Vw^B4#xbG}x=Y5Lz^4In#sgBs1X`d5Dlg

418lrP3qR*f~jik#QgQ9b)!YQhkkGi6e z$`fRyt%^WNFZx0=&-k1ay0WX#tjxV?O`Z6wz!HeT$`E5~w?=D-#5$e}HB`rfEXks*5rxzi z{l2;UkBbtmbg)#wV=G0n&Eq8|L3&1U_s z0;?`*_0^x!3qS9WoDf`DR$iDRV*`ogaJ%CB?EwEjA6C>D!RoI2SF@uE-AdoTHV%YzQrPzwK*o(#3jMdnU z<=Bq(*pCI-kQLdH{V;Tp9Fj%ZfsnE%!LriOvXtf6bSME9m=Sh>f}4ec5-^MsfC3LF znVE$%){w_qh1qtYNXv1O!I+0Bv9;A`TK2?9(U7wynOeAcx}t58nY~#SC;_;mhzqz` zpH*3$&Dovp*?|Dtvt^RWxrZIt0c^!uwrK~q^_rkPm4ARmp1|9kfJTq72b8FdUDYjG z%+XbJT5L)O(`T+ooTD>1%|j9eumTb%XUp}5%#a2lB{+ppkRvE`V}ZIa1p z+_-g{NwM1mdJ0(F4skI}LY;@Ru!mOhngfWeb0E~vc-sHe=v~85T+rw>UNbq*;7Tgt zzPLNy@d?{?NL$fOzXs!3odsRBjT6E>4bw$k@loB+;D>!U-tS#r(ka2Pp|N)G53hk+ zdP7{+_}#Av-X&UIDM?;@o8R!cSpyIV5BS{B6^QAbBC@4kiU44WFaQ?F*{}^@oE>0+ zxB#uqS=?C%o`nLg}{g%1s8uv2Yt{)=nCPyH3Ot|74y5TGc~X$%+ZY4 zi17M|ka$(0(>SXjIrK0&kZU}Bxtt&dVI67xkI*wsF;_E&mhC03A3$>sf zt6SnBCOQs@y1l?1oFgT$t6$G}hupf38OgdUZixSjtKpMNIf*)_nfr&DMB~+^W0&T9LT)gkdy#RT)jK_09}iXg&ikrfrBmB;kQLi)k2gvA}K zQ#VcR!zjToZo&;2PpDkL+;KpxxWNC81}6{{t_rLsX3?tMw(ZDnz{&m!-8N0r4(<{> zUei_-R=(t&uSY+&0>i#X;bs*hL#^mJU=6sb0UYM&~Jte+QZtFX{ z-0Ezco;!C!&to-HQX3Bm z2zqFNg@>om<0Nu#oj`{-&YAyxc+@ekU6nEOPT~bkJfbl#7Ie5SuoDe@VnzaDh`w#X zZPdB4y2gIYL#t@Y;GxGw93@1N9eu2wJj_OhbW>~0LEs^DsPuD$Tu16LafuTkr1dF0 zubhR@OxtnC&>2c}G`n_7$b~FTd+JnY?AvyXz)+`bOIJvUXs32wuJ&oS_H4)YZ3pIS?{;nfc3(!U zl!yewRiZElLV|n;st6wcn4Gv22!E*N?;}6P&}-iP8kj5~nLJGeVxXOTbcl=~?`cY} zyh>=5O0)!_fi!p$x(xplGE&uEp@w%MO2O6o%gxDv}LO2ekKx z4L&d6o;jj%y#|dU4n}d{RErch49bjn(afp{@6%aVSq`$KSPy*O{zt9+k!qFoaD7wU zL>b-O@)Q3WG8B9r57ZmyZKPO-&b&|Z!z;`DaTRaO%Mg85uL#HwO++Gn@M+!$zS-a4 zU!I@fC7)!TX9xeM7Kq!w0Cu?Gt-XMCKw#+Q{oMEN{r%kA?_>;~d=cG;$(jdq?_jg< zjQXw!>n9Re#0smS571EuJ!R|-?fBo`$yF)OL=CR?1f9O$3H}VHllf0Z3eZGVCju>& z`1cG1-PQ$V2>fqtBL#?k|Ik4w_yAwQg6huMOXv{7ynhHDQcP&?+`5A79_UNhZ(qfG z584%UckW(61Sc!9guw3HJBRJgxq~2(ph1KXRHCf-G33aSD_f=km z!${}i5v^+VD%OfnwsM7Hpy0Z$TT3`hCpM$Pvk)$bh2o*C+7eL6Lhvv*p#c_i_0p}n z?wq`=f(QQ-E^PQP;>20a>`?6Z@nCrv3G3^}va-X!^(dnA_rP8~fB(?(oM(Do;DnL^ zW4##3p1ud875+OINjB7iNFO5bcMpLXelQDOOqcMSPNM5-=d+iOp+bM>_T96$FQ#sg zE%_b1cfjGibLSc-R41Lfb?jHU@i6?4E5r?+ncGZj|nuy|V4!ww=f(6xgUw-?c=O1KEQsjYLP_R(K1rD(j<&;%g zDHs0>9>iDB1yPoeTbNsA`OuY8dI^DCblKIHLvp=k)nBPOc_*HE>bWPMeG(=aT7qF# z(V#_*Vv#Kap@6WJ2%cqv<|Wz4zsO zbS5g>KJb)hk7xcYdLv8g>?2!p5Tx^uKRD9*fUS(uxvPb%4#=CPJ?S@WvA8-UpnS>2 zBM`Cs*r^eB$uDDe zDXYA4VZSyME_^J@JTuKTBi0rRSp9X+4m%iYGtfZ`Epak)NOAbXYtq zc78hQSf^703!Jjk6`T~wnb7L3_X)OmVyC{l$7esP`JFS(G{d07dVOjj$Fgz{euzvS^SH?M3^T#USP+Bl z%UWBY(7mdtBV!Lq$Lj9V67uQCgnX*g2V>YVl4WH%_Hl?A9&nm@tgjyw1dnW*lN(1J zz#a!U#}5yKz&kAwD+*LhJ@i4qJVkMeRoO@VL^hKQ76yw=+M*1fX1;ZN?|fBBhZWhR zLYA=5S7~$-48thLJ<$*={Md&VEpoCHoda|Qk&N6P(hl`FYJFL0Vv`VQl_&Zwk6MhN zVjSrhFwSvkTlq>|R7k!yxkP-jTO(fhV!lptC3a!b%Unj-DJ)UxYmon}B+%aRM!(h3 zDzr*Rp&)<{UOT2deKD1=h8oECD(Wvq2XLS3AC$36Zho6VHu0Pm9GdjtYZ zRT8Bg*7S!|mZpw-)P^4`f~GY8LCxwx(j?RjAieZM&Ig$DD(qAkJoKTde2h>ZkP;7o z##zpDMzc2RG?G4psLFewswVT|qM-gc9dtDlU<%O(s6g`%UO2QMluXP!GR3QB7Ic~v zb>>6lfh~W$lO^iF=sz^d(S$G*RvrE0O5cf2gT9lQC~ev$JEa#bZSpR!D`iDE=@5*G zX zT2`~hb*pQ&YhA}W*SqSqtbC=bXYRpGz}1o{?sz~=a;cB+5TzfyOvu{wLll*$ay1Y| zriJF&z2#UaQ2>NMKR5!Kd!%L^#Ht4ZtYeYs*yA>PB+5qqagRhP&pfiNM`+a(T78T* zH648AKavOmYewg`xwXn~73LZf$tFJVn1^UiBP;!g<{r3xfNn)w57NHpHBR}*m+D~; z1k|H8ocbtYo*P}$Oqa9x@N7n2l8+opgcq+xuM*D@iF)KiHi6o0Z@~hp_kt=={`5^f z_8YHr%vUxDux~=dOJ4IP+p`b_?WYPxf z<}0Zc4@gR~Ae{CUrL$8JQDYSXCh;SST5Xt8Ljceo9Wqu0( z)m1Xiox6~xj$~|=X|U@Cf&FFf94+O%sw&T2nus$X9-=zWUqxf@pPRbJ7R0Vbed9pGOzAOk+20=iWM z!qo)I)dCtIy4XW)M8cZs4dFe6N#NL*K>+1t#yOb5L-@mE6$Ein-3Sr}_F+W(y$4#v zUZ;eHeytX(=*~kZ4edb3U*N+#3?UJk+|W_~gj1lq>G9x0?BNf-jQUlZ8{QdKnS=$2U&{rPV7!EK`ChMN3PnU? z&v_%x?P5+?iPI4VI5y+a@tnM@LxxoUADi`^Eot7vVWB~^V?q4SV7y~I(u+Vigo5zn z*iBBT2Q#X0VTR2G|Fx>{k{ObB6;x{aj# zbw!|*5M<(AQ^Cb#f@CP|MIsXaU`d*!$1uj>u;gWA5d!c-b+lrj{9!?K#%F{E0F}mR zY>Q=4$ZNy~0Og2>>MmGXq=)jilh9~YfVa}U!`c5Db6Li$iHCzCf0~z{_rS%8kCF z3{i~5L}ZP5sG)x7`#Fip94aii4A3}gPcrJ^;Ec|kg!)J-rm~39Br0V1V5Y`U)J%=d zgsMtXgd%+^-f)eXcnzIE3NxZAEcuRj0IFd`7Ob*Q+>~m{stE-SM(tFt~Uw8~KFU}{R<83K&X*A1W zMW8Fns6%J|su95d0jI1(9L#GR7(qq6E3Nj)&Ed)OG|olLnO5qm%m`0K5bRa-YorRs zsS?dO0IU=JTw?5NVi;^zNGxP5tnv6N;vf(r!GpWh*$XO$8JuAIu!9lIs}bmcp0LBb z0zqcbYrTSB%dU*YLIwo2Ys+{RJ_xLy4v-V+EYAu_t3YW;2$w@_ki@XzLntj#+-%XB zs>ar1&_)c?UPa9s#?=-^)h-gm5{4Q4PpE_l#_Gw~(hksKg#cMdF#5{b;?OSg1F=DX zKk=9#(T^||U#a$5Khy(%sY=?;+*QnNkiFSdU=I+$?7XfmVW`8rs%%-L!^zs~LojX} zIBv>htz%UGQJ=7fQy48v5RnlfksTdG=hn~zd|DIH8qUompZL(&d2UN+Zc@x-*#@l4 zxb9$JZtiyNVc>28@vdO-!adN#*#JoGGEvl81?SS!ReCU5OMz}z^m=vu|~X0I7+Z$h9$KY+;Y=m5&H!#e1IjtL7BiH{Ta6ufDJPPfiSsfmEZ}O(@OtvskzOY~@ z8VG{_UFyI=%x=iZ)@yF4!@Jh&;lhFA(ytNMD_Y1az1FWoCQ!HlRos5 zL}`cMK8kjP6peCv7^B#X@Is zLFZmUcd@&5Sb=H8l+xDH0N8ffiG-Ec1H58#9fgJwU2r)>3)b0ApkNDTMJ^JBN(0Am znIloG+?Ne_=;#nx;^&qkMYgpC(S-=%D6ba7eN zagm^KwX{btwOC)YOJuZLdjwn;#79$D4|>a1Ux)&8^oDJoTqE{!eb<+KHHP8;v}+}V z0md{-)AUumbW3pdOuIxpI0^#TOFVFst(F90$*m4^b@yBZZ2$Cn%>y(OrXeF3hJgnV zKSZw`9On>p2O2RPumd{~w-?6&5U?y9q=Op7L54)GIBO+!?=Dx+CNBIs$trFi_J^0xQVa-H&42Ek=8M{ zrbCc~I9|?pLc}+#r3Q(wTHOfol|ev&=h%Q_g@0egmG8IxRNX#|GXzAQZjhM{-z9`7 zc`!LJZP;0q69t);nZk%G9Pq!g1}Vhx!SdnrA~P#!X>@ zYq;h`-LvV}8!a45fVTapxHD$r0%bS_$49GoxK>-uJraf3g`+-l-5ELrXg|8gW!r}v zVW(C4vum}^sRPWVTtRd?v+KG(Ry(gtJEapbf>RB#KLAclx^WQyvCqBCvE%Kda#r?=*)85O|rL4m%vW+iv)d4x5wuXT5tx*fT{ac5oXs zMF@ANH7@+R?7aGUbpOIZE(Ee(dZ z+S4CLPh>eGS1Aa_1U=F>?d4(rh2)nqI!sDFsKXYOw?o{< zmrR~L9A4rPE$E58FF7#L-_#!`1n9SfKR`R@Sn*(Cysv2do_GA8o4n+v!<{EY%9DIW z1iy9{MDYJ}LA1OH!eQrWec(?c7v|xs3ewIKMiOe;(x`Mo@U>TCS5|003$FS;BV@yA z;p#TmcJ7`Z~x^ol@_S@%Bp}cbk;=Pmi03U>j6)&1RhwoiWmkRMcNSE#bMui6x z-el+yqQsO1E!xz`v7kqgB1t+_CodgGh)oOj%(#*NsL_xkOFldY6~fAb4-OEGx>cc9 z2=vgVMT-u?zpx4q{1Yoy--CB^#kzGE7s9-Ae*yoU=kQ-XhwcIgzWY?6RK{c1Dcsj@ zZr!^M!Qw4gSaVX%pFxKfJ(_fBhjHQv%uTkSJ zs9QBr;$n|G^j$nTY9lk3gMOgTVcoB9Ap})8l;}RW3O$2ncTOHr?xYdR^Xt0cfd`nW zD;4gr-nn>qZ*z1HKeU;1^BW_pAhX)@XRZSbbV@)7@_B$Qju1Ep0gmz`Dnj-kJO{(< z&M^$ApI#$RECh*qtgEc*6HYs=xY|!Xj(GY1j;QIXdvCnE)^SZBf(p8jBN`R54uZ@+ z6pAX2yu&OjB00neNU_peFT)LojISUenOqTq^BhVNysR`c(Zwx~>{7-dvog`F80S*6 zB#RRJ3%4<=q!7S@>bq~Q3gLPWJnGi*Yo2#vYALdU5YrPVms;Y-pLcK*(@#meq>QLM ziDDD4MDaU^9@9V#Rn$>K(~Y)u)X||f2;hhV4tCgS6%GhyTXneIdW%C1iPUh_q1kp@ z$JX3X(?Pahixsw@=!j(wwP%0(?4AeOLG+w^3d-l4%e3TDvVR^#Q#5t1HLuLk`r(I5 zkII99U5D6t;DHU*36H3F=XK~^cSQvM?VWykT97~pV!E@Sf)zY8-uSrU5L<=tr4j;l z=b{+N2M#6ICfmv-3gLjcGHZu^SA6W>NZ^%s!w4VdXxeHaKn&X(9okVLiyeB|+K08} z7DR6g@-AG@dM>h{NbJKaU7&GRNavV4F1pF>&J7yeFCBV^A4SK4>SU_L5*lk3%gTyn zvD^f0-+fu|tNH^XphnBaBET1o((n*IFH)fN|tyLpl2Th%SNQ&fve}r3y z_I&Ko)=05D;>C=4>VaD`en`6i2Rooc^Xr@)U?eFfemL?7UANBeo&E$XlC3*trk z2dEeApQ_VV2%dBLu}67_)^GoPt^UF19@^PMz@K{%FoU0M=XO1nG=wMzA>d(dcMp90 z14IQup8c=`f%v)aE$M@RKOPW?df?+H5Q&66>hcf1@k@aFIEO#*VGn%7XLhx_9d2l* z5StBfHMGNr?Qmz1-SzHgRpXcNi02vIJ%D$uhAzyZ zNp@(&sQ~XBKr9~O^uay_eK3T4V_xuv_rUc*yeTN??Cqem1 z9aPQ;wo(Tvh0{5Od@fgT@C_VBH^o;1p<(MFWi4mf6xKzHBfc3HUe=M1fBYj7BV5M< zZ?_M4fK4p%@XiDLv5!A$W*z&u9hjI0nsodlK}uO*{qCfWe)I!C_lQ$BZ8OereiI)C z!;62o_O}y32!sDuCK(n9Zj~vt1VK z3rV4=Pl3&GPwWh*I&*eTrJ&WD!)&KQ@+|jt>0U>3qXi0UF0yeNC_^8JQ z|4}&MYF4?^9aVL$n_ca0H@4~!-%+_6UQzKjwm_&H9B3(C_0kp|b9F3oN9C8J%D0(d z-5+SzODg*R=C^q-NQjC;+>=7frjr5xM1!b8(i4Hcucg&=2m}x*=8d1MFl&hYmw8|%2 z^+4qR)uFmatVuO%R&#jIM6UB{hI|2z%mm3s#tV}3Y@1+b_8_%R^s{yA5l4$fcVbkC z86LpLqozxwx8t2~%y|HN9N-+der&2IR}X!7I&xtSrMpFgZqlfm-IAksX#iVWfjHYV z`Ig+iM~vrn06N*9Ne5_)-RFWIoVvS)_QPi@ZPM^#AO3y_Zs8@Nx!vQ`?RcU&4=p)) z=NH~!E_G=}&R~nn7T}UwIjLG6;vpNLARgc|1dv^jgbSI-#^y-EIbr}76dBJD;Q5e! zUXTmKxyTz@2a=&MXJLb;*$_W4q(Cfj(Ev3ac!f#cG{ZQc{6mw8ecoD)OZ7+$bEY!? zjEg^zW|Mc^BSyD7;5`KTIL)|unscxFKMn}0efIMJ2wlh8Q<^opXY_#Xhzm5=Jr?hf z{ntck$J^s>xciasiGW+Y-8Tam@F6Dfe&LZiHqVdFF%J?&Jl z_`ehI^|9X&-jk_!2*i9;v=7XY4$tK%T~@61gy^r`0@=X^f; z&3_L5f*7FJe*S*ayWeZ!0D8~ppG(y_q87EVMgD1_fBork|N84+{`{Z+S@6&Q><<9< zj{y760RIpF@(%$APyq#SEf^329WVkH5QFZa@+wU0K!dml!t1Uig2bX9zz&N4{L9mP zq$5V{GjykZzDZ#cXn}raI-Ktwx~CrO0Rf&5W7K9IXw5uiupVe|R3M^$Hjh14(2j=5 zjD9c(O#+(g0RfsQK=#2NYzO1w<^>rDBaq0R>Y*P9EF+e%U3Be_{sGtc!Z!Np9=h-g zHDe6NNQG_(D&S!r`e}PMY75oS3!lgf^Kr~OCjNmdY!C-&XN0CNROYY_wP&M_ zumz2-L$HmicmbUfQSbn<9vVc1)~oz{j{AU)*u+mEfKDNhZs3Y8JA7;uiwzZ_faW0J z6j#yxs7-+2Bu>=f784^E<3vt$F)(3No0I?H$jRm$Z&`PoUXt5}H?ohZ-=UDOP5^f!q%_u_y{;cl6s-j_l}8 z{?Ug*#Y7r}EuLhP`~)F6;$#fwG05eB`qD3jqb?6}MM&Z{Zo_u=kt3$>U-V>TF5@yW zQ!|gqFW;(W1n4oi?Bzr=GZT|}RFk=~V@U3aCqacZ=h8+1D6WRDrCyTXMuSq+3(wNw z>4vN+KvDdPk`%=c(4b-|rP3jQ&gP5^(1c?--w!6MlE2`Afu^m&x^XVhq4_X#AN;|c zJR-mU(7~F7&orn=A?hPXcH%A-vwHf09SLMS0E0>bGqe`uKI;=txH6lt zjfnJ4OIbmF!IgFE?d6CLK6cjAXFj$QS*-+RFbA>88Os{O0+2Y z^BfomacnatFD*Y26hH4GAE;-BdJ{OeZb76%ys$4jmMuAxjylDnD4mlj3(iQT^X7~c zDxrWqu(KAYX#%Y@04eYR7w}38kV_BHOA`=F!L$Lzv`o7cOK-v+XeScRF~Y*LC3|rj z+oDWxf+PH41R>xIuY?Un239+JqA@0%DxuR@qti(L(E;ghV@j9nkE~G`razR|=FcHaMU8<_QYA&+mCk~S%0Fq#dB1%NGPC&(CL57Xs z!n7u~u2l3?A;3$%0&zGta!BMyax)TfL`Qrx5_vQ<2-87^Gsy-H>YBplpx^?GGwH~$ zXW0Q3$1m8}Vd~_}XNRufg7yN2mMM*mNrSfircyh%bGt5S9@^Bx)b*}pvLOEDo|=XP z^(0;%=5X*rZbIW}WF}iyN>Dp#Xbg2VI!0vwHNz`w3@?1rkl40vnWteaLaah&ZsF=} ze*$T=5-;iYp0-0>$^>yig;h z0r-K5Hj!`qv>?y{gPgCQ4kddk$&bdxhHxl%vZ#l+$cqHFVv=WhIQ4>Dv`5Lvk&cLa zUx-z)XMg(Ve=g%;sqK5UFo~9^i8l3k%GV*HNGbG}iJWLO9%z2NYJ%nmiIj+d`&T73 z_lMF5Zp7yv?xF0G$df)pf#0HqZs>jgW9W1pqJl5jPSclWUDST?XT3ZC>ZA@{T(|_L z4q}ju1w5c(md;s~E{13LHEQ^Vd-o^&8e$p%EIPeGJIpMRw<6DJR;XuPZPJH=?C1oR9gjvJ96! zcXHCq)HJK)w5g;?-7i|X`tu!D_ zCNWLZ#Ns|LEz>v=iXizkGb`mr#nmKBr4#k!NQ0_B!>T3At4HJ3Xv+-`y8NOvG;Ftr zRS{a1)NrEGr;9kKr|gygFO7kuYaYDK9^8rB064F~?IXsm+%}7=MdjWe3#;2rt2>LO zN5ils%dth{Iy4yWNJlaJ7EX(kE3W05$LQK2D9++M0-XoeCHV!lW$5Gl zYpNN0y$~C6W_vCO+rT7ywJ1BEgOo{$^jLM8D6sQ)p-#!pk0X|D=$dYdcvzJ~JG0)E z!bUqP{GsdoW}C`RZ+aEGL1TT6H;YFj`7pU4F%Lxij`5r(??OYSbq~EoW$;A#CJ?Xf z!1nV1Pazzyq#{o%CQl!1+U>Y0^NuL>I`6zeuPsFHFle+deDn4=Z@m*7eqhhrW-m@` zkHFjeznhIQJB5o-hggu! z!LSd3uwB-{38C;vAYuxuFf`)D&9m@`(r^v;5YO#=GtBTi@DS2>um=Ms5aX~Q7O@>0 z(b2h354Qu)8A%Wcan29%!%4-1G?9J(+zkCPDl+k=rhJ6A0`n2DpAf2Q3r3< zqJMj>H#<82d$|N$G0#L1{aO*wU{My?`b4F*TgO#gqtV*49bB)y+qWItsZra*o!h_N z+s7Rjv5|oefK&}^y1x-D;c6XS)EyzlQyii}{%78!7#<9_?~JQLxS)qai_K;5h~(OwuCrxKnfH0X8x#GQK@OBP3VydP?#iDzZIc zv*cgx;8|S=1!QoThadyqL;Ql4bsd0k5^ypWzg3&N%1DThochZxzRcIlyX zD1~=MSNXXi=PI)@T|;^xrFh=S@ElsE`=auWdo-K#%Emy;{74|(S(_c3pC}`7g zOcOBw-;7~Nqh<}WWx*J10kJU!?*f^m8If+s^j~z*m zGsl;{Nu!p}tn>DXIO?Sya=P>C3yiMEQ?GBsJcXk@-xEgI^GKFoA>#7^Xq+_s^gbt) z?em^R{S!<=R6ytcd`rVb40OSn8se`_Uh<(q1?E8mLqch^LQypPf0HOSltDT){v$C! zBcDXqA5|Bk7Xcz21PJ~14Lmr|-Z_B-&)qvHuiv?I|IXn<*zTM>gd971JgAT%1cmGW z1{UnN?p!^D_0E-ipzk9Db`vME8%XmVgnaxUWOO$$;>3yPx0q*?-@2Pj!PVnuj?DMPAO4{q&x@GFF~5Y{ohIhAYDlp8tHyNmZOItY35?(K{B zFJO9t0T=Fj*e~C~i32Y-{1|a$#e)e?c3io!-piXabGCeNoxOh#B8gOrI<;z}@?0Wy zS2OlGo&I#5t589b6q`u=OQH+Y4Pat=Fi(&e1|{(!S5cqcf|KVI_W$BT}t@>dm0AO_)e(_6{TNqSL&}AaT5O@iR0-;+BcxGuapatA6RDG> zmRxGNWtXyj2_~6diW!@kW1?A;nrX5bCYa~A*(RKG+DT`eW#WnFK#FPi? zTtF2R0&NAw1?yC4KveATI8eh0vm+G*OtGLa3soT`@dXcG#UzmuGZp1r>i&yz$||qS z@=^PoP!zjbPzu}Bg8XKKM$l1y3aoFfTl;?^FTX(Iy6u| z_d?(tbnkNXs=E*AN|#Z!)d3KM#HM z&zrG>^wPIRC~7$$gpNN1uJ;e2<#E*g_x^-G(CYK7KM$>~oqUu!q~Q}upp&mdT0Ztz zt##Qnp2G_>%%dJ)GYUVla}QOSt~V4BU3=^y9Q5^Qe)apu#Ph#-4rL!yfyvkpF^)Km|g8TIZ;pT+t)0 z8_0~HC_n;=(0WSoK*3m0f{Nkfj(Ow=JE+0}51fWzQJNefp@2s{?h%oKG~QZt*QAXh z#meZVb!=NKhI)B(x|i1Kt=@)pwi(T@vGG9Ul=MxDuS=T%}Uhan7P}^HSNIn>xZNOm|{%o)7>gX@==Mb{r6$ zk!z;fEONdBnDT||nC30b#*crp?parJ<2iuR&tL-oRFfQK*#$13j&*dbc^xgONl%JW z)L^e=jY_FYJ(3PVy>zBDiq)e`wWL*uV;Qu!JqFVGoPg#42{NjBTuA9}C&YN_Mi8t*m7)i`mR- zwx{SI&t^XhTEfq@d#O(6Wf}l#H_6CttHty z5x1@^BlB>n-&lrC;r>gfEMu-}j*Fw@&Q7}jJ*~(@iWybsVs&{JD}mFD61?HfmSnZ{ ziXl|dN0M!82%EIBQOP#CEUPU=sg@ZFF2PLWuHEhNpWq!Fuk!|rWy%T|gS z{1NdWJ1~QdZCuOLn&iR>)ysz>v{3}D);V92%UL!5bWeA5Jdl;;E8{JhdCLodYl!jMYc|_032LXF5EIrGLoqAZEB(OxNgh9?(W6*5!Vo~Vvj4&C;wS_k2{q+9fK5$=SerE1K8QPTBTOa}>s9~I zM~Ib5Y-8W>9;D%ig{qxwawBKjw1Q2xsfAH>(E9=QP71#{0uOy;Gas75uWT?R@Os~S z+{+$F!WZr|X9o(}e5N*d&izkyL%<*FgqlDu{^NJ2X4~D?4Y-9}Q%J8vV--6yrD<#1 z6OW8!R_Szk3syTr{uI+Aq_$`Oj?S3RXvQ)~hfLEY^K{B2J?fa5y49V2b;)?|9xBf& ztBvB02LJ`uL@T97`eB7=Aq$m@!jumKMEJU*tCJ*uZwgi)ZX>c_rFVCnDsya3zM@Cd(>~8GO_zV@Lmz< z;PCYI*t-iCuX!3FKEnSvGHy`Fde<9LB@jdYW zA(FrkzVI0F_-fX{dCy}=zWceb^8o~X96f&EaGCtvYianB4m~ZBREvPB#QyR|Da?|5 z|B10ee;&=>#6(w-^Y|qHCwX!w0SJJ5LVyQofC+de2)KX>xF!tvfDV`@JwkZrZ~*rP zR$nI*{Qxv%cM!wGM(02e2mvS`L=nZ+5%M!@b{Ba`0Vr_O4ka`Yx&jxT<4Z>Y8+m3F zj0P<0f+BX;D=+9qGT4KN@@^VZXGlSVNW&_?1{di7f<;(;&I2`*GayCbgijHL+tGU^ z5)bgBXa|vnShI!xqak02T{$>~hSD1E#x^J@HoVb941tE?mncA3HBmE!`LI(zg)x!_ zGPMPNfp}+3fg)!{h>;W|a)CQFcVebyeW;dH^1urK#5i8(R5Eck4B>$gplcq{b_hW) z^{@lLbPmVY91-RJR->X6@v>mH+KWZgBS!JxY90Pb4BukL2MHV zO{O7Y!)&O8i<1M3e7GvhB4AUZ4)t?`{Sjeo(=$78HQ6DJ)A%brf{Oyyan7S51r~;= z5{*+rjZ!#=&)5+HaWt?D7D6;fj4&73nZ)29qR-h>(g1 z7GeR2@y8KPA{W6kIfGbqjVFml1rHUGem$ju9f1ylB8`n3b_Hl}x0R5Frsb2_m})9!6P0E;$kp z04ek~E)6kJD_1N*xgwvEi75qX#FH=wS!Rz!bX5{OV{u-D`H&&Qh;NaQ>0xwPCv{jy znNTO0RacplX_=XcnVadEnhBbn8Je3B8lzDfdv#PD$q}#tCinIa&Nv}*_vK@-JQY;|cYXVq2Xp__e) zQh%xcVro$(MxqsvG+vH4JOb)SPf|!!@`x3QB@p-~5Lzb^swWL-p%HkY5h{Tbx}g<{ zp&zQDUg9T!A}AYaRH|7wjN&L41RIw~O5Y_Z2;nI)>7qB}Yu^%#zmhEO$d3Dhj!Ka& z-a(wJfh)SgE2i>|KAA!1kT(1z6Fb_QM`}5xM{UwVEt&!@sS%{ld7rmIdce4WX6Z!b z0xKZ0rH3LcGTILrfr?H_q{U*SVCpLZDKLk0Fi|mTwbd~na}ax4F&C3DiMgjd0+C&@ zbCwpJ7I~2`Wkxb{S12kI9$0I_B{UsTG(H0~NrRs(*mWF%I&m{Le8Zy{)HSk`6plmx zHbZ(gI=Dq8LX2*shoCw){$n>|~uft=jqJ$-jRD55^><30#>suW~Dl9xaGGmCTv zKyg$+GSNdv#EV$eKnL}E5riUQL_Z75jvB;49t1*TI!O(CLP&HDDx^f`*%1{hLo~E& zIJB}lgqsu_L&gdsLsUdZM6)crL+m(Da3n?jLPhsrMGT}xA0e_G^g$RX5r^adrdi}b z8yhGctFRWdQ+7mZcg9B~_D75~NChJ$193=+O8V4PvawF;&}%W~P`KnxsQ5zuluz{vPsrr59KlRq`Vr5RP52;9!B$O7bWP8; zO(r`@h09L)L{3AxxCHeS>Xd@`G)^%VPddvH8gzG`o4P{Fxf%6O#NsRi3D+mx#o$3+t3%~v%Ru@D6R?f>?`3t|m zMYo0WyY8h|0Bl$XoFkK`PujC*2n@jyEWr~@!4+)57mUFftic=1!5!?u9}L1F>{6X& zq9SauH*pZ1&<+i%|8`MGGjIim6e#V93YT)hp(PO4(j|@2 z7AMoMnQ;p}j)$Vr{vdKBhY%(g(-=otGDmX_d2{4N&Kz<7s2elRk(4_^mpk+7uf;@l zopG65&6!^PnW8DyU_F{l*VShI)o2~oWbGJRcgT}i#^xq=kuo$bK^$jF5VSc%YZokC z859V6vXqB@Mss?3*FVhnDT0^D8#%~|hk1-=hh0Q|3@g|YL=cGG7TNcC>n3`_BrA7k z*tmBOt*3k@f!U3n&$b5~t2f%ZcND0d9KQ#C!bg1nV0@xY+OPN6vG;w!m)O&%$zHj@ zn!SBD!^y-V+rBMX_ffp!O^UQ$*0c)#=0Pax#HZ(DU2T_7Ufr5o2YktHuZ@m+- z8iUTbggx@GILM^mSxicb8l!`U2M&X==s#`9tbe_0AF<#zxU2v0gk?yaJXnQK5i4T| zg+nUb&sm2MGM*tm;uvCvUg&XZD363Jy?!lj=KzQ2Actr8yocq72AYr*Sta9jh=~b* z0NR*|%**up&MZTTmY7z=yovUGlG^wH=kNfico3m@5TjU%F9YUSqlzi`%Tj9JuNaFp z$>Q*Mi_7@asp>Dj_>Xeh=8aoz?O}{1f{dR;=Md10%7TvFxQ-XggV>0V+nA2tDCoIZ z=XGh0G0u(BnCLam5J@KIEj}Xk=n?k_0r~jxDxO1L1%7~y^)flJ`gN9*E;;KCo+?U&W<#amP8?+ zvB8tnCgJ%RljQO2iSj~jiIl**l-TZ+hCY@xQI^+PO#Mtt+zBRIY3`nWmM}gc@h-dY zF*i49?KyrZ;trSgAeYTHDfJ#%f7z~5!RiBAn2>as4H;<)shGF}7g3(o9kJDFUDiv- z@k;0M8Q<|B|M6!X@+7YtrfC{zHOZ{0B|5PWv74DDo{-7^^HABH38LuO86X2vAW@GW5dJtpWbgi3p5B@7 zTo0T|)6Lhn9`Ttj^ttr6+F1ViBTimh2paK60_BN`plk~zTrnjU9~u!h-s}C{<{kKe zFWwY7`0m}_iO=4PfB1^u_**iffifs+HOY&DAdRAG`i#$E&f}57DKk2h!zyBHuIG`W zqYBjXu2QBzD)e^_r#hOWeBQbb&h*-fEU3>aSt_JdT1-~z*SgR8q3Bl>oisS|7eG%bh};2Nq|lloi(5dY9YAou_uL4*kvsyla2A%uSW z9wwak55dHV_Rggv`0iXJg7+S@Bj~On!iW<&B20G@g2t5)&K<;vFyFa%1Y6o880lO* zj43fPboj6zKcPK;)?`XlAxwlb6XJWIPN7er6O$%{N>D0cyQwqP!vP( zpc$b77MeqEUc2s`yuYbcuV&ra^=sE=cEF}x8-l!Zjs5EDhcMnbUS`bnI|mP;>3R>* z`Fmimp1*&(5j31veI9E6gt$-dRrk+eqzC`3LRjZLpS_!BAxeCRJNUeMWcTtjc<%s8 z_89%0qpMeABzyD;Pq*&A3vayjCPKiUdk`>#ADjs4N+!H&D(`{w(j!Qn{r0)Xo_%s6 zXsd_l!^b{~&N*i`$2$BlM7~T!@g=*wsxYp8?3t0nb36o5!~`Fj@GJMsfKNVzczNKS zd-PFgzy9)Cu)zl-Oo+I*XpHGA+q(3UDGxG(f`t+;NQfOV$u#rK%vkUsrpUxBVY~~{ zEK?yg$9xll%r@(cw1hINEHBfr`|?mk6IFCkMi0eJx4w8wC?5JA;D<$mrX%Sgb@1_S zpG_gSM@3T4@u#f+e)>U>(0u;+ClW}>^EAADj2kgOh2jb80e|)}l+b;`!;3_P@G*5S zcn)ChAADk6r`1zDDthBsKuXSeqr&h=8VXoIur#&uMX50Gb)P=<56;!^~ zL6@c>D}-Rd@ZM6#U2^fus74BX+qKtUAz+8Tbf-F2uWGN&7NL302~}Gg8@2dijG4ON z0(I6gAh0z{+b(00OE&prl-tV`Q_Bo`A0pNYqt63y=11jHGb~H`DdW}nv8|L zOuJ`?9VQNXX{MY0vK^#Hjny{Oc6PdEGyLfX&a1ojy34G$cFi6H=3?h-v}-mX%{{p- z)!ww@mfLCnV@aL5wuqIUJ7azB;d*bt14pRuzyB)lTfGHWd~wDbcl>e4BbR(~$}6}0 za?CT=d~?n__xy9vLl=E?(n~k}^v=;)=Wf(ncYXADfP8&++H1!sof24xm7T!=eMnH2 za%Y|Dw{186P=U0W3>3Jxmd8LL zWIDl}XKFG&2t;s#Un+r8Wd?gZpo9uJibCcQp7V@nR0puf0pv2k zb6BnaHuca4{yz9aAm$}79#}{Da^^#V^htc*V+j(w)WIM|ku{I%3qSU;j}nT6d$>U$ zJI`thoV1o4NRUCz+V=i}7$0!vt(}V~J0_f1KPJSDtns8)Ej=@KT1(?c_UCFqt@kk_)_$`9$ zKw{2ai5k&+Vv`Lq9qSMiN3a?w@R}DP-dl-xv%AedMJ6!g$u1%@jAF0BV}v}t*?Td9 zj+qr$9sBSHf|BPQ*b;;nD}+F=5Q1b}p(9wfWDRoimm4qoQjO-42XXlS!zC}0%9+G9 z%7$5EhS}zW%LqxKRqhd`A!P~3dv268#R{_T4vMTf{v9}Jj7Rgu(RVoZ40*ZNV{`tP zAPa?PLn(b}f@0dBnnoz66`E;KZ#vYS9`&b1ZBYJsClXQxnvo}BlDh&)9qwp{7n^&W zbKDvs{t)SCqXYo~Z8kMtrgLtp#*zn53pWRdojj1V7B;ic&0T)ZN6zHDDuaZ?+v0P# z8RcgUhF8V}A+$ou?Z@&4Iw9v4x1txEm;ytZl#-roy(N2Zz1ln9_~xs=`^|5{0^G0y zN9?{0&exKpc4kDznX4a?j(0>n;w@w3LqrlQ{U-R=Oh$^o~Fn0T2Nf2j#$F(#&H7+U$byrDjBYd;K}oQ>%iq+`DfT%Y%I4bi$DouQ4M`9Kup zoS`Y2hDe_jtR1M?fu-W02dkd2@j6H+`|TNuJKan-RMn z!f}nm(LW=MLMfa=Dy%{)yh1F@LM_}vF6=@t{6a89LDgZnFf2neJVQ3Z9o+#RJ6a<1 zQA0B9vf@EQ%0a?7Y>nn=Ejrvo+sU3WDFGf-2qTKE$SXAS{~5&dX~Cr7L&=H38I%&Z zIxU@GDSVJB{h6B7^B+i=hX4vWM*Kv^X`n!)ymVs;wz?oD${;{Xlyd^b$O%D&fV0~R z6%(O~rZS3KB#0OKhZx#F8nU5WbVXrw9G*kOwMYjilDGA1qD5)NVQd^&ln@9EqmjXl zkMkm#6Cr^inP!Z#)_MpXoLWK z=rx5+$LlgcG-F)F0Wk4J1Fr?LmA!a<3wN{k3eb!)e=im`U{DzzHK ztz5LP^s}!z#j6W2f{Uz!3%Io$xV9{~e|t-{j7z#?%er*SyM#--^sCDnAb0{rIB#6|45dP4^viQj}fxEpxu8B}C-@3J~fG(@-OuneDWyCJ7BrEP( z#*A#Y@mfV?bjOjjO7&u|uenEefCmKFI)C5@w*ZSu8WlLnI4SET|Jpj6(}@A&6i@7k zkN7b55V1|^3KR28=$r@@dq?yWG;o46vO2V^|2)mj(=jOEF|Gu?=u8M9OTwkO$J}$h zia`itQHUvflKjB3gwQgLdJQ8+eqUT|yVynIYEm8qRD^)B|IRYmHJ-0ftu0&(E z?nDQ8Q-{^WHMdI3%F4^R+)KRlQoa0AF%45P?b0zd(=y#sFhx_mO1SW_hdYEB^h^kU zXe!*%d?DO-Bd{(jnVKxt0X;pB-Ml{n-5VqNKujsvlP~Ry#-?q z=YS6BpbqQ!72VT|=c^LwV?D*w)#%hdcr?FuH9t3jlRAMn@!P%)%9D6)Hw5)A3u#St z)k$bYhc9VE7;Bk8wDZQBpvMpPx<=aGQ+b<#9zIa=| zFd%;&AWEc4!>Au-@kDi~hoJh0dpORy&D;b6g1;SG%=HU(7~8yUi*&GCvt0<$9bAB6 z+tqd38dMD)`rIz5MQkOM6G|Z}!wC5U5Pbj+&HY^|(t*2Whjq|_)BO^y!U)q<3CC>> z!|jsi&6(Fln^V0FR%Hq;|3X#2(1@G_Uhl0PH~`$gv)i&A4|M?BvgKSj7+vEH-?G(> zb@Se1MJvn3z&JrC8Y|@8~6jI7nd{4~+&Lu+N)Gl%az)DToniI~ z-8f*K`0d=r5Z=xmTaF;#zio^hzT2}EU&FXx`t9MB*xSyXUyRTQX1QSQIh+b}6-Wsx znyLqzG7P3nD(Bh<)#DYtkS)uFsk7h^%ca~Lm8mS=;@j{kN&AOf6iPI{2Q@ZfOPb^U z_(=zWfE&e#fHb>l|Gb@bhzDMzVMMkb9xj~lg@gKPWC##mAlO?tNC!2DgR?PRbzovR zprHCyh)?!pBPIw<=Hb4DfU#8rbwGzue&Y9$Elj#Cg2=6WXh4OqOd+We+yEtv;4SVk zi=Nm)ov<m`JUG7`Z)NVF*iz4)dX| zU%U+X|WPrNk-*3Q0F*cXYsw~d6wsRcH*A~W%1=)vt{D($mgd3 zm`fx!g1E$D&ZIcY&peB*QXyycY-sXGtd&^4ihg0n><`npE2<30RzXy2UW+GtfS$|? zkC<7PerwOk;fj*!bfD>TwrQN!>C>%iOhyQzE@Gg@X(z7VzqVoBKx$m2k=40s=hBVk z!?99gFsX!)aRu9SCtzT;jTC=skcxJec zZO|cN)a`478C!Gi+dy4s2&iA9_G_OO?1}j6BtBi@zFVzA>_gqH74~Nw-E0LBu8S=~ z2vBQe|8r;<*07pzxrZ4e%ZsV7nN=J?i|iN=XFpA z9XRDie&jgld?81cV2imj;L>itp5d^oauyI4Iy#*S|s&m15o zTdNpivfbgk_V3>AVFsV+zeNzf=5dzjT&o~#BL;%-Mc=?qYTg}?4dFfCLy&1H*XY}} zT(ywk(~t~ukspEXkE)L-i)f*u_v)&)W2Y#@J8Zs4@ z|ITqi-y7q-TLeGfyB&}IPVk%_^8VfLA~y`Xg##dflXW0pBe3*Iuk;}|?%=jt1h0u? zSr&smjsTPvH> zbWeA6Uw3wIcXxkxcu)7Ojdyy_akTYYvJLEeZxqD!i@2?KfEUKPz1v8y4JHnC9|!7# zx0rtC3&ovB$w`OCEgHzZu*bEZ&vl1?_?6y8xPbq7*qHAl{}LOH^yK#Gl4tno|NV>D z^&Hv_MwRjh6jGt%xLumB%m?_f9S{zlca^LKd7w`X9yS8vHC{wXUchGFi)nbFpx^q`i1MMpbn}&R^<`i5ecvO__oTO9v`>iqHT&b>U;oXE z31+1S8)5G#VS$FF1fHc1{uLC4m~#+e5+>~p;nSJXDPEYf0*;ov=cR)l{NMuNz<+KQ zUJDoQC``KiK;G^U>FQfwYpxG{K*eoy>R}-7;W+qV(|U>7Q8sVf#LEyj*I|33b;7=B;l z;QQ#~Y<`H%7p?CfWQ_29U9?!yKmUo4X@$sdc7S9_resU*Yfa{4QPy{PKKa2eUsEQC zR9@w5_ho>9072b3djcck0J9kbUzH>k)^7A+Gz(0Xe zr&fJR(IUp2BejAJD|Rf|vS!bsO{;b-+qQ1s!i_6;F5S9z@8X54BTk&0>iF_x$9LUc zAQ1RM01`(B1S4^b2;3WIXyeB@9YZFGnd0WkkpITv+4(8Dnh%p2|AgRC9cy)w9^Cv% zk}JiQ@dWNTDR6b`*I-Se%;(UeJJl;6>Vqv1CrRF{eS@`)TX)iX5cctdaPM3?u=38` zW5;fXzkUM0haX>_ENznT&h5x6e?I;C_V44*uYW)P{{GKO)*VFwF2t7(g&o$HVvKbL z8c&{GW|?LZKGd0FkO?-KK%)U=Qaz^?1i?B=kw~I|%;nVHME@L@PgWzAXrflYL6A>& z#EtmjL-m}q&T_H|1Y?Zcg~g&kE5{G|C*0-J~d)$J%u>jQG%G-1IOirVoAGF&GNt+_O6S;fau@_^UvBn#7-0@qALA#DRIv5549C5%Q-pO!4fMA`} zI;O@t>!^Y9M3U*SPRRm+oHJt&;jDAFndu2KU&)4*|Br5jrWVOL7L%kdMFd$FH9zV) z4YgP_K7_AEGC|;O)er%B(9>x3bG2;Wb;b5X>^$(mgA=8Lz&Se7Z8zS{#yxk}6F+1| zs2&quxZ#H*o_K$b9nBX2fS=j?NjJ^P>}>Qnr9bPuZ#zzbikug5-n?N4z%6Q=_~iO*~QP$o6Rz{^hiSiQ$L z5icG+n%zX-0ltns2!S_|_u!BH5cge~KM$z+%ma_U1uGuE{PWXafBiZzZp6;&XGF^gJMoVf0z19q^cXImU28OvzKGomq#i_;c|LP(nCGj$pR2p1fEHaP#fGUA@$>v&6)0TYr zqnY~gCR@NM&S-M-m&0U13H%*#g8LQb`yLn#m4&qvb|Qos$Alf+!9 zJN+`u3s59d$h0R=@VTs)_7kNk{p5ELN)j_XU>-u9M+@cg0G-}Mdk>k%2vs+f?Hs@! z2RMgP)6&tqT=gs^O-nuWQOEpj6)j!;>P{~i&vooGpI}J`S!a4oex8P`av9M`%i77F zj%9;6VMihNfm8^XM3&|Qk2c#e|Ge!8v@BVz%VNtC){8yXuIL=50R-ZKVhY5j5O6C! zhe^|kxRoLXU_mkC3D}i>R-fuD=G@kSOenAurlWXJRlxqb<+O+sWzXxFH~QIm%U z%gKAH2Qet-^(g*WRSVaF5E?%09rvK<2=V3)s&vq+0s+-NfT)j_rid#3aN3~MaStf* z1DDdJ?mu+&4-!4pU3-I949$yPT&ATR;wA60&ijD$PGr3nbT51+IL5J#cbsDg|M>XFL8eEKeO%-nADPEM4sw!j++-m$dC5kWGLosRU%4b#QAVyhjB?G?3-qqaOWu!0;xm4?nj}eJK4$RbBPye?)rH_@&pP z8{IlcOPbPrzH~kQd>&1Yl+##w9;j12YKoX7A3*&F0(gN!JmW*p46`(*X&q`+cep<< zrs;@VEYlWK^r$P_W@$hQ~Ps5KrPYt&e=_pKUIWOcC?1n9gL>)Iu5WF!Z*!UPqX}C^K=eQ>GL~nX+ z&IW1aefwWGl?9Z=PT{&iING)svD#(^zFp_to=tls-kgpt(9i!@+bc!=#iQ;9g> z?$wn9B8iApAn|0%jc|(p2}DFCUyy`g`Ps*Z^#o2$-$ZzyiDeu1X`5Qjpo`hl49Xo8 z@Pzn{N{vMsm=WO+8sV26VU-mj5;CC@CgGJmA(t(o6E-0fPT50v50pg0#renjiG}@5 z#BYsA|E@fQKd@O!WX16zn?@1IcJ+t}LI9}z3Db#4J-kjN7+M=b05sX%pm&~RU9Cvor|2QU7|i0tFqKL|x@$yZ|Iw)XTjTpT8g< z|0M3CC@Nbrq19`3$7Qu5^nF%}wIVxsn?Pvf1+ar`t_j8O1kC!h4;FIbL!bi(Mc8uviQU}8P|d?b&Dl|&LnPQkazLIsB+v3R578lj|3BOV z0+_+a)s9rYWa_Mrqqz?3L{FtXAOzqJKIjgDDaFhUXYfeR{8hk)(<@Z3kAiHfa4Gq(OAI4 z0dNorJK=1W!(i#DD*sE`h&;4O*}3DHdtrBDuO=#rd6hr*}@ zVbHSF=#M(3_~a-&_5_dC%8@44+q{rl2FZ!q(CX2sk4EW&j?o2NKpcH!|AIOum!46B zw#8MDX_F30nzE^vj2(4?2S9CUn_^Kx?Z83V1tXHF8I(s&3QHW#5gpN~Dj7h05~!Gx z2$K%#7EKd1u7#VWsXp9;p9)JM8PXXpYNl%HrgG}PP!c8SU#E)dsFG@_n(C>dYO1R0 zs%la!%@P9C606GUtkUXzlun5@j!_ux=_l|^{1v$E09h)=E#$jTZ) zi3XApsB2Du3O+2?0W{Zhp{PIzSam(bbwPt_+8HATn=A6(ASEH%ua~1xU8-+PU8qjhM28ZfJ&V~$(;dFumRDq^;xR{ znxGNdPaN872q{p=+CzBS$mu2;7Ky*0X;?g8JoL)eLT=>#3Y$>G%BYOZ6oz2HK|0io zLSTkEWXKzZ%gX}FLZpMZe6D1a3}2{$I-r9eP2S+3+>xkU|3$D|lD?eIwxP_0#nVYj z2^|HxF@;lr#o{6^Yo5c0O78M9ua`)MU#JOS4aS=&h~;F4WKf15X)haf#%3@}=>i4i zJ%Hsgr0$W#=5<~heqLDg9_$f{bzp~fM6An!hj@^OzW&CY=IgmOZ~ywQTu?61h;4x^ z2K54voP00%!tB{{hPPOTwJb2)>S6zVCJH7g1PEY05TG75rB--g8uB3oFiBWYiItc| zORVYts_+WW1?0FBn{ZA6Lra1jaA(BugK$fQkZuk`P}eFjNpzGP!l4}AC>GjbYvv)B zgz!@oVyZmE$PunLYK5)L%316j3uAE>vqiJkO7uDl|AI(MoOA{RR}R8Xiy8B<17`-f zoG$6cE|;LA)T*I+R^~alBL^!gP!#0Az>o1k3~nt<VDGMBRKQU>Rjj#6vD0@-GAPo?Oo3knR77@#P?E44bRxEHeQwGbkqp>4>ZZ zyC!V@$$2Wz2-Rjn;ihi#W-BMjE9V6DP{j2F+keq-_k7QL=_JL9)RORnJxEoM@^3KP z^Z(*cvg{AZMzRDQGaL+1&NdLr3=$SDkO2|&|JV`@={g3q5|@aMP=tz)l}?1_t>^{0 zC?4;SlP=4(3XwV>*Fzjp5?yFW3q(9%7jD+`J+pL6FRUBW#}|c>fw*){+jKO+E`7Ms zP4je5pHfcG2O#lRwxvSa2)So)aU_)1!JK-P?SYQ_DTb>Tu&=!vxQxc#Ytrx zVtdS8_BF)J-D!l|Tji5q2BK-D~FV^UEBQ}v2HJXOQ#wy(+u zU3-+Ht;JZ$HsYKWVT%P@)zpEy*kEclS}5pphXrkKSKwB}VV#3O1=jWu)>e4;oQ8#Q zw*`7@6>?*@8o6K&#vqF^X7wfJYbld_Qv`pK7Hf$QfQsp8Ywd0Qigt_ezq*I-P=w$x zjBtfTan*`RgT>DF?9WF;XWW5cb5g+fSRcpo2}uw-o6^B#9F6ih3nLss8OA+jZm-s znw{V6p}X3r9ovh`Hj~qxJcZV?&3D~Vn{$hLl9vFtc^kOdqWGW`!ZoA7#d^WXIxyNg zG2S{d<~lR(y1^}@ug^NHv)jVGm%~lwVn4;iRU8+}CYov7W7o)kft+7J@jUHvgv;*b zW!=hg-3{gLW(x@Ks)f-F1ky>}&e5UIZ3NJP1W$k+d8Wilw8Tr)?$)X2*In_BPn(L7 z9gv@$bgSJku^n8gWZIn~|7P`I*)e7is<7VqtHpL9vge2B|UY*6buWI1la|GYI1PAdIhaWfO z4K1I(PlWS99~4NR*=3vfNt+FRx(=fHVSe8*g`adY{0g6+#GAR+YeoCrU;e=#{)X94 z)SqnN-vfjyTJYZ+RxkjrUIuTl61Ou#a^fF`V7lwn2dkhVQ7VmS3XZhBCyol=6a7QD zAYuM^3_ipv8vJKDz4kGFEF%0c{h-y~qE0F z>1Y0rRkjuuHGU9y{{+fLa@^V&QiK`K8s>3&a&d_eeuOdCUq71@f_hHs77E>)+zN?Rvu;Y6B z>$>~%I{X8Buh+W#*Z=$DfBfhF{M$dR`~NcnM7{_A?5%@v5Me@v3mGsyzA~?rRp}v0!_xa1X(V;qZ6%pDymk!~92L~VMOQ>(=!G8NHdPH#0CCr28 z@Ue9G-~hsO=j_q6*>I;rcIV_RbVqgGM}#$vBAogT!a9)c&bfoY6(LT9Q5T}^`W9|n zxpV2(wR;zD|6aWap+NDl?m~&aFg^6WuugD^ga!<=GqAYvg@b)r9A@DcGL#FB4<ipome?M8~I|p_=(}R&vG6cU+9dG-? zc_O5L+^DY-BFn7owu7L%wfa-&KieF95W)y0oDd??EPO013;Qx{JPmVG$3qA%&=51F zLi7v*&=4}B?S1n#~y+Hp~$0q<~ed68N)iKo`uly z=K*`_|M6$YgNj5l$%G_IZMt(Ju?MFrnfnL0NCsL-rv(#2z@K{%FoU1>fO-ibq7?Gy zoRMH8GoK*kV-C-KfZPYZ@6=p~AK>mu3Zbmd$q^xS0v)u_h6F^2z%k1_Q$dC#Jx5S` z2-T6)QcXQoFAoHRf`t+!^J>*rUxk%b55x;>Lo{(^)m4Sq5sU>}AwW^Zg#_~eMlMlZ zmf2>VZHUK;-Vx~mfAGoeo^!O_)+8&>IZz>W@F8;_aI@W3+ird9ryn#cg69Az|G74y zb@KV=pGa~ul%aR>k#`>e&4a+sgz%BAt98a5XdieYwFgRn%I(ylb@mwuy>$Lj_u+^q z|9VU4I?+*kzxcwRkFJ)^^$@w-{A@# z>)iD+-bUnABVNbge+QlUg`&4n9VJya0*-yxiG%w%j9>`+z-e4cY-Y*V-65Ce|7nTN zn8{jyq4$mYSNw(sHtK#-<$vq^y!yv$e_i>XYVt>+0#fdP2Sf-w_<^qj+)giMIENXM z#ttKJ&j>nj4Li68gnD()d(!KmsRp>L61prMmlTa3elnc+GnaE^6yW0IU!x1D8MMr#SFZ_S0voE#0Pni zAv0W|QCx_z7&=6ZHB^Wh^u&+rKtLai(^d@I@ekt6iG@1cO+V^Uk9-`bj4)(L9OdXP z_W+1zKmZ~4&X^Z9BwhmyA{{x&ulo0VG zC{uZw2OLU=`?%vmWI3UJv~n%DbVxn)(a2gVv5EK#CaG>2mnqKWm~ts5T#{)NUfhEo z2U`#rZ9`3ktTL1=A*Cr%X%uX>QXh|26LJdU(Y+pI{tBvStf9p2@wd|ws}fj zE~K32WaB^7iH?5!qmj?j0S4Kz4jovsHIr;eCBtaL88uT!5IvPdWF!$pHl!Ve$`;`m zLeYrSry|*r4*MMXOIptIK~rImugHswp#XI+ue{WTveN zDg-=ARFFC(qe%Q#MT%O*Wv!`eU(?x(Au~QK@wlwp#iqlsZNm%0j_IAM(n_ zNF8z&%|ak6W>L#lp3)U~gw=34aSBV)0i1=n1HuP^t!!yaRQzUkPRVU=MRq&fxBRxM4(ah(Y~m<6!cQsx zU{p)|kq&*llPD`@-+Yw}F6e5jdg6$ zrg}sovVs02z6d>#L$?!Yk}`BX6b&DBkO?1t{FA8fLFxy<$0c6^<(Mn-k5neMyh(Wz z1aSQpkJOkUN`}C$dkv8t$O)MHu!ot{1&?`92}urv|A4cheI#ke+K&UFYkm%~Nu1BLY0%=Ki+R%s&HI-Uj>hj)NPYLOV!o%|Kh9k$*8efaV zDSnVgN19B5W2bZMjSqaUTpx^fw8djSCs_}qHv4XMzafBJc&m#ZNmqK(eD2t@(|&flk91;hF;_N2_cCt3s*v4C z8)j@~VOin84tDSz0s{pC2jP$oHN*iVl~hNc|KaduN}5$6c6PkvA)t6Rdk_NLQ-eCt zL3xG<!%kVgZ2N!UUiU?B zUp$oMknEtTxWOUHQqCc+d3WX1VRp#!=lI@=6wo|WB?(s%0#iIz$4ej0x5FPmd+D8n z9?wC4LbCO_0g~m22l2k}g`#~3SU*1X-Z090>yWHu`5<5q0z{AW1mpm0VmD}OD$)-j z1dsq{@AMMwP*!iJOt1Ek=JviU_>S+(j4L4)P@c3S_DGM{%n$V_<{?-wJnq9KI<2=< z&nkAxJcv(5{*NKDFRYlakO-!Rs_*%X|04QWg8G^d{}3Q2_M!g}BKX!~Ii8GtTyRdH zu=}`=+?LD+A7Tl^gGpqD%{+yBq@&LaDh@n|dmuoOG$^mw%w0UM@*oed+^`KTiJ{C) zI@nMl+yahf0v%+p_fl^H!{aQxLtH)yAKayZ8Uhd1Vh>3$|7fBRRYD!igeI1(e}DrL zBQYn;L!x%$IF1c0$O8iQ0VA@7%p|FSC=I@PLlk!?o))68Zm@mwoWCHxS zC?x_)>K39GCz0L;r1+-rxMFb&@9ziuXJ7<0u&FjeIlWUNGu_M48v#*j-aeIn34V(P#=kr9vAW; z0@5KUvLWV$3*BrX^zO?bN$@f+4$LqP(9o>tu+HG{AlQ)d@=B4ur_a#D4)y97U2Y<# zLbLvdALXGRw56S#V=A^~r0@_ZZ!3t1G8j=qj$R^cs`4u7WMK58)}G>C>I6OT4s(DEU8feImjFY6_W-ftLdu^4N^EAdYm zo2ZHqF$vcxC?Q}f&l9`io~Q$A1wAKpPi zCp6$Rvne2SLMikud5|SQX_BG@A%ra^PO~9!0)iYuL`#oE7Xp+7QY^QxA?7bTb7LK* zB>bdif)^e zT!ybM3Gp0`d&JO#RH8lOP*mf6xN@4J_ps`aI zLW>yl9nXRi|KvNDf)OjRF>5n8YYQu|u>_$p2~AZYG~%LCCWde^8!JMB&L~e4B3>FI zT!ASgJCYrD|0+@%sT~ob9g%e$9d0mr4dK4kHjyvBnn+vIRUv|vA)+zhz(OpZl(N>< zUy1cyc@^qBP*;`JSdU4w`1OnhTKpTXXChY>}V`x3rC~oOKnyUDqgSMJOD$0+x z5I6q%|79@gbuAyDkw7Vijx;%*LOejxD;yV5`f@n_mLg6NY3h)~dJki>en_R zuk6f^P22=dknN*}Q8gEI?!qqPcsLu zS@?=sO!Rk6cmqq6BsQ$YkA>M{f99Yt=xf&sgV1DZ!M18INU-AItrlV(ycr0@|6`nK zwO+{i&198>FX(G^reqLIuNH=i@s1z24zuVo*SlPSO#3Kw_4mo zN>#>V4#bLOXk+k0g$glTxQqSdh-0>^UBYFe1BxLeD0^FZP2>f2*~HW4gv#m*A^Zhk zE=r?g$Rq44ru!vP#xqCjCQuekLj$5tIg2iQR+!gh7;4s~*GhJ~sX>0)Sv!!7OZ9B5N=QhRJ*8+~SbH6&%V zA!oB~qs_FobmSq`>S0_iJ9NUXuUTWLbmpe2R7-w4xGhJyo#we|Te|B)9iZ60A}6jE9t=D{ai!IcMh?t59L=QW&%!W%pt zTx4I^!9qC1SW09(K-@t@vspWQy8lL7P;oB;$b5RLRC20Rj$1Bp|D451$3-Zk1jcV6 zM#RLCW5gfgSP(+Uk;OKqrfLFw$7hFYcED?*j&T@J9bC=O0%|eC!XC6JHv);GAH>EV zipG~k$7SlYpS*QQ1PXvWWeg)cJ{$^2Tp^C!H{g89<5kV4J7^$+;IQOC-XUMW4f{vyc}GN4eTA?*Ci+&eFJ=F;=K&mRI} zuJ2*t)uki?aTFq{cF)QEN78F#%yq=lh3ULYy>$8lLyE=DJwwDxgCRV9MOq}&iJaII zA}}sv&S?uVd^~3=M$dVjXLc4%mN{D=Z7M^y|P5Yu&|$!d#2PQfswZtF#seYeg+%ClLF4aFmF{;|p6MXK<>{g2 zU4G_QzUKe*<^dJvX@2KzzUOiN=XE~jbDrgczUYVE=wBY`m!9XD-sh1XO70=zAw=6t zG*iE99oCvW*Mj7}PQ2T(me1Yf#N^>rPA6Dy=U@(Sc`WWOEz`yx;~;M1M$O|iCDkGs zQ0V^Ee9nb|t}f8d>=tg*l3CGmZsKHQ9k|Wg-i_HL|6X-Y9w9J3G$zT|BfsPMV$K00 z*~df9Njxz$9||yJL)M}5ljVp;7G2Z<^|wX!x3cxG^7RX8_2+2zo3Hj`pJZ=e_g#PY zVZZlfpZ9~`_k|z$VV^kwEK4z*>H*jx7UuzYp&sN^Tg)9^8884tNhudKQc{%s&KDva zkPj`8ITYDhGkb^uaBti80ZT9fG4S^^us_PyRgi@j)$dU(77G$S!-AIuH zRhlF@vgA6A9wEqNxbB=hj6j159ZIyQQHk<+|DEF%?B5$v~*q1FfY2&%)! z7$02-Zxhy9b)z zq0r5)u;)+b@Z-y$9~9odsPrK~jr-I%Lf@JZ#7jR0`NP{@{~Wm2J`cEqQBTJaR8Lgw z_=j0(0}+;xJpG(=&VBe0RH27s5j5FB{}2{5;W`yY=vrw#ktm~d7``Z2j52zt)o=ry zlbA(3La<_r650+N|4{Z0P(%*2 z+B!W2_*#Yv5(L!&@w_7sXAM0t8j2R`8da~P-FOZ@?^J6o1T97jK~L0LTdlLQO$*zT z&hpwU1iJ#;UOoQ&=47}bS}E_m|Mb=i0hYvVDN}Z69@OtZEJ2Zzcm(}h(?DpVqfrTS zv6qm0ZRJR!I)F)h4#gH|{yM;{vmjlSUn_!-AQULoT_R+flxemvO#F`01$Aca=Z$oSL7|5&8C` zLGhf+4}k{Fb57LkAVwUr{|WW}fYJ0*S2}xkXW-9WIXae=Ck~T znnkiZLJUe(T=(A}1UKLi%=1s*4)N$)Bm-R!fji0PjnJup{dj)r{P*vFLZjP=|u`sVC6BnA_zMC@c?_U3oZkp-aK|V57X(#Lq1%HI!J{N(ENig>mXG=PFN!(83Zc4 zFvC3R0X&AR4j=Zw2X2PQ86zT5iA>atI@+}l6Yhg~?s&jI?tzc{h>?tDWZwP?(yp#C zWHphnM_zCU0WKC%|Ba7vVnGn#k9#1%4E)$0y5<(Q4m$FYR`LLKSWtqT0Bn+#GzdFD z!h-0Gi8>7P4kj&mNhoyEI_4qWOEM@YNV@WsrxT$<-k}dt`2!zui3hD7P{`nj<#-2K z45{`3ObFaVVoy^{KfVHyb>!n8|A+*C*3m{a?t?APqaD|HxsMr!lsAC0J+INzxABI)oMNmt6!mIf|>rhG_G z?y-X%6w{?R|IH~v+ELSE0*xrp(y5f>fscCBqm8)3h#CCR57!CxsZfn7MGP=WPqLCk z=##2eCAv=%{d6e0yXjV!6OVBAGAR1Ehf~MO*0#F!t#FO2T<1#Hy4ova9;?s^*v2~cv5<|dWGBMd$y)ZZn9Zza<67CxdiJxR4XtPw zi`UVb_Oz%?t!k0e+10xCwXlt?YFjJY+S>NExJ4{&bIaS_`u4X{-7Rp3OWfibw}Zkx zu5y>l+~&?Fxz3HQbf-&Qi9oly*v+nXoqOHwdiT5Fy=`~HOWyLD7qsI&uX@+Z-o&Q2 zz3`2%TYTmE-uc@1zWBvyee=uT{`&Wk`~9zg2Tb641-QTnPOyR(%-{w)_`wj4u!JW} z;R;*$!Who5hBwUN4tw~+AP%vJM@-@poA|^iPO*wt%;FZi_{A`eF?<3703rDV00IC2 z04x9i0052y;sF2%{{SHf97wRB!Gj1BDqP60p~Hs|BTAe|v7*I`7&B_z$g!ixk03*e z97(dI$&)Bks$9vkrOTHvW6GRKv!>0PICJXU$+M@=pFo2O9ZIyQ(W6L{DqYI7sne%W zqe`7hwW`&tShH%~%C)Q4uVBN99ZR;X*|TWVs$I*rt=qS7(BTJr4c_cdoCNHBaskvsnca=kn9u3zBoOJ}(#aSK4 z$U)PnMcO-;uH@|6ByZD9cg`NheEwpO1TNg?zjMgtkzUSxDLW&pjpzu;ZZ(k9tXmtb z9_PAj+P1;x{}wNkw{MH+l9Nn-PC3MT{9MYLH`_hNbol=L!-t#Ux&!**qfSHW)YH!c z|J*ZRa}0(CM0Tq!=#e_BO-E2V=|JaNK@`SeVMw}-*WY&|!ekys_2?s^NGYz^&_4aZ z)J}UE@$&#a_&gAwfB*PnhCL6&$k03gL}HIV=kU_tl9K5V9XspjupvkoBBbF#RgM&* zmgJGRTW?gsC?ky+$wQ`@@i27H1MCQ7rhN|0)+Up5G6sis2dM*HYYXamrx6drVWE_F zwicUetW8PKl>;FfT|tCKSKK;#!XX_)v*F{b!;3ou-Qy2}`#{@J zI{^9<377&AYb>$?k!mWc0v)HGs^|DB&^+f@>#dI9Dr7F11Hq%uwEyH&E0W0dyU#%H z9!rq8r~c!sz4+=&khIiVJJ5`9D&$VO1hEUPJ`WJ|fIbZMvtzj&LxjLN!q#arVI3CN zD1>pK<|NB;)V61Ks5y#fL5vDyv!W2p%o=XoWykYDv+Y+bn>q)W-#@|~s1LLExVKKP z2-x#4tmo`wPb952G_^nVRDHETNcwY6J(2ht>(*U&yXn~ng2v7{`Ivzq0=)P$P(Ah_ z|Iq9MDj&oSg7@UdtvYWT_yD+0L+##t^%eBb#}EMMc7lq>ixA}WVr^uO|KJACJe$sA zIy{%dz4$H^V_>T*&@LHYwm3ZROIWZL^g%H5t z*#G)bz=4E_hY=Hq2npiChO8-uGlal7_=6mE;Nu(&LEi3$*O1wqqaQAUo*4P^vOKM3 zPTYx7cObAD2s~&yjCz@b?k5mBzK>^&x>AScWJd{-r+=H-7(p<`LW6uT5@8IHIw;mH z9N|bphYTY>xM&bXGV(_1$fP>B27wJiARqslk;Bdhfd||JV2%`!K+qw;ft;w60@5TW z1wzCY=J11Qg1`>WfhGxE!1HlSAU@PsEHgPv2-LEY;(6tTN_onM6eQ8e zlTipbl%xGhhbQw9A5prgAILclJ_a(kexdQ9Cpsxg#WPWZ5EEnq$p;s8ic+9)v}8ZU zs74`>Or7l%Ik@Sm5lO01dBF4>GG*d5<;6crPLUv2Y{(U3`hWvOxHZSH0HQ z#}1^d_#^2|9g2^4c=od!1r199*e(c|=>VURM-&s{&(0JLk~C) zXJhMGha^?A1Zk>CVawY>`cbkoHSIZ2`wrD6S0F!K$Zcg9LEjC8cMMU7JK8a~;6>zy zYYp#Q9>pPlc5*dpyiO+d2}e8`6t9ErYeD2I*uUZ_I_Mkhajy$Zk&+FV&ZKQYMm9o> zKGz`x7Ko`bi(G;Dmmr>8N1I$KD`heSv&KBng9{>62w!tz^XX_QjTe!*Ma;mvOPOuk&7mM zkT$z>etE zhwRE438e!<#zuBsyNA`}hHlbA%S^m5!#wJ-TGpN_ANDZxdEmVddGCX9L56^h@No~b z4uoCjU?9L8Tkv^5WZ?}j=A{n|k1yII4jnjPec6MBPL>k_j|1QfACnSlk&4sicL0Z4eSR@E-~Nw%EE)pym}IM}DR*_) zV_F&Xlqaoet$6S%gEX#seyD}IZvDMg`}kjg6|#7xD*M^ zZNdTU@qssPLV+s~!{cfn5o3pq_T!Mus~D95a*;av;m&~&i5K^fJVAEf`_{9{Y(+o1 z^7(>LljwjQnJn_KmrwobTVF2CFA2-2eEsfw|NCXhKL1I8P^qtj|NQ7rzxvnD{`R~7 z{qT>!{O3>q`rH5hB0)z(@lXHDWCj7DMiHOEf9jVGCBOp3!46QcfKX5Z3Q+=3-~q05 zfPv!?L^W;%s1sv_92NKxGcpe@cp0b>2e^PNPyz^q5Ern3 z5=c`F*nkfhfdf&4JU9{#bq_nR1H#vWI?)b87)~A7LjRCXOw@!35m5z^bEYC3d3Slq z7boHb5+W!OB{&i6!GaqRh7kcD@icG?cM6rMdAP^ovJMak1u-ax{*i{b_71QZ6}1>A{*Vs(P>6r0kA)}@X24LcR6GpP zaWOY6yjPD{qbZyseCq%zYd0{ZQZVXrE3NV>IwUK_^M*c^E!z@70TV9-LoU73FK{w3 zh-ER|ax?-%JSJHX2*Zf`vQuLdk`g&C2LB@vF_|yI!Z39=N~G0?4)G3VcX^{SktAtS z5Gg7)cX+nOAoOzj}nVF@znUo2dm3f+<2?5hmPFit~ zw(th7qGX*Z;*uh=V!Xxe%OlV$mi$I!QYJU^?^Ac;%@&jMJU3 zqeGvAAhXjqe{(zX2obZ9HvPji-1#)#nKa3%AHq>KXOlJyF*kK{H+i!+{AoJ_!JufP zF0FH)$cZBg+7KA(ptNM4_CY)S*`B3yI;oR6KCzeFD3{)dA$Um;GYSEIX^P_*M0EI< ztB9jeFpW0afa|cMg&8rt@l@(?q&tZD(~rCJ)MWZI-+T1CUsEX&1~QX!iQ(GS(6o2(P3|2Q}FKoI@&ZCC|@n`d1#C2Jh% zNBSdD{qsKoG(fX8P9nB?3jY*w3{gUJvPkCvL_(x`1@Ti)bUsl;so=E`zl9q}6kPwv zsYB#qJG50xR9hJlB8OzDLFGTt)k=6rYU*@o9RvX%gg~hZL5N6Og&M1fst~-|X$hx9 z=g^BxHL5kFLd7~0d&vTE`GYfBqu5x70#TQ-A(z$4qt>W{>!62#`IiVGi{2*>ypSY! zXO9BO5c3c^WRp(qiW_oD5Wz_hrcw_(V0h=yc&;=_f%9Ws^hXa6NF+u`iE2oXl}O^T zNa|um!n8`V8bsXUOUwjdZ3bPpq-fd%ZWOyo0Oqidbg4NMA|?2V9otNv7EQG3W~QW7 zLK(3Akz)s25D#XslmFCcsk9&~6-uQwO)aZ%F~(>HQL`VLvjcIny*g*qB&tKZOdi{! z5x6|Jo?R_lYfp{-X-qjgw~4(NjmLal=MpUMXh$MKa);id?I4pON}```}) z;;Cbyx%;g_Cy>A9YbwMN>z0tvCfHM8#226=cyx zke@VEO=?s&C9>)%SxY5ck(*L8%cy!*Racc&s)`X?l0T#CREQ;o8|Gn~8(N>#Qax)` zF*RAS>#BsiH|ttc$Wbf1+qwgRyI6&3$vTCZ+Y@dXM0!}Y<_NY}YmQo5t*9uyUdxKo z`>jwgCuCc7hW{y=smYq5Nt)w(zT%s{=BvJ@iN5RmzU|Ats41F_Vh^Vh3DffwY)K(xi#4c$VGprVwtH{O<-*B@!v;aa z56rp>0mMRUb3NQ#{RX-z%%(Tdyz210-5R}CI}q4=t>DVFSG=v%sDtR>mzngv%4?)% zTBcB1#%O%TYD}eR%*JbsrELtyZ_K4}Y^6#xp!T4)OR>KOkq*3tJoMHi8a3MqOrOSBw3V8>d)7)Y}YC$Spla*@1INd#gyc3GO-5GH16qnBbs8_I`E z%9B-LmvvyH%)tEtND&Ol5U^kn5n&TnTC6;13Kp~k(Pp%)5VlOL2eHedhQQQ0V$m3Z zrZ}|_P>oP<0qkhCdKt~^0Hgv@%@@E9@Cbv_9FC}{&DYGu&s>MqOqlWbvf;H4>NXGg z+otOZ5%XFQ^Q>_H$S%1wIMt*M{Z!^2MQ3m(cL`x=$nr{@7Q{hT zX+a!m1@zDmA<=oZaUQ&B8cWP&rqM7KYW*gu2+^*{st`oHKO9WZ5U^%;24@a2co+*U zp#Rp&Fa2l{%+fBs5O?pvw(7iAW^j;L!N&_x&ll>1H9QdLFfGioDY0>9@Hr1~GMoWxBp5@W!(wgN zrfsxUZs&$93O%m>7I23nauyfCM|&e6w=T$WkOVh!7l+smr_deO4(*`$T5m3Oa-RKMuFY=vU_7af*9fAJ zw+-77Oxr0(5R+ZmZWC{qy%QeLj_(Lz%v}QTNK+8V0v<3T=m^H=_}tNbt&{wB>eY8F#F=5bLmbb;qxq z2YHfru{vXUv^S8+Jm9J45TKXfe_eVBa(bOt;HD~P5a4={7kjfuXjhcXnZ=Nu^2-9Y z4r<4g6{B}%6Wf2*vl@+4toQJFB-+*?JXD=Z~^MD4%#f< zHUJ(~a=_E1doo*2y7=lyY5q+*aVjdAGI2^$d z6f1ZWv0i=Y7=r-agE@-DcG-$}c#3>vb124uiHA5O(v{Tb_s&!-#e3-pdtQSzV7&#K1_z=)|5-=&l~w;O(_jJ?$1D@AFO)^ZJ+ zw&K;i*bBYn=$F%L5Ln%g64;kjjE>=`j;W#DNM3#P$Q2`RMEN++_;A1o5s<=>d8k}3 zjtVddsf8l$kY0I{6sao5hmpXtk-p`T$7GXYiIcuE>&BXrJ?r)hA@@3YFEV+dX}OZ$ zLiQxNlL`|pW(kxw52Agql=s~&Q8|^*;<6b*l=ThxWciSbZ$M7D5bDtQ&GPu}UHD)L zHg8|{U3vM;i`44?m*IW2M!(fHdd^b)^HtoAIVhM)oz4c~zVQpc^UM3Ksr$XZ`@$dm z#Q*#9Yy7@nzNYz_=-w1j-_p1_&-!r5h-me8J}e4h$f>6DSpRd{$Eh?QI-&;3q0c!s zYcrjqOgPxNqUY&MBnuWOcaGslk|j+Ngg4LMzj-a;5nT80A3l6CJ+eEO z&&)&wy!?F(Ir8Mtk`5!)%Qw+u!Gj4G!jwtVrbT_{{N1Z}lqdw8I(hoEh*2ZQr4XuK z&05c*L4*oN#++I6U)im7?cN;FciXm zDLd9{fFR>_lPeQlCz52kbEQp}R!91@>C~%Pt9ISm_5V59v0<;Sjr;cL+`MfyqJ_Xa*2Icf;%Hl8~$5bt#A)vXhhcaAR6e)kCK>-Uk@xd*)JRV0a%-p8c;O0zVn z?%#p*4<4|)>u@Q%g9MYdBdDDR@>y#ild{9FsB_TEZil)KxQ`%p&asD}Nd8GM9e)fg zh(nWtBI%w7)FCLH2k@~F!xA^V3&f8cLN6ZCEZQeLk}k}U#STq^ksuj``pBJg5CCe% z>qx4xr2hgOkgIbBIzS%?-Z>{hkc>PMf*z-Qs6dmJ1gS{~=Am#poS>AFN-HfAlE^X3 zG^rmC*?R!MFbT{u&*}Esi-ijW0}Rm56eEdHuK)B}>aWNIEtE1w*U{@w2n-!6G$8fF zG*eAC)vN-W8Wz2;}5ZUpReL);o*N)iX(wmi?~TGa<;w zz>wTo7~ku*gaATkAC{6?f`A=r-fW4TxZ*1@M)(1RNj{0-k{~uqU{W=OES+`!f}$ct z8MW-Qpg(%7XFwO7)X|R=^T5%fiKX-;OaE`Cx@xPho(`UWw8OgVlT57(oqy~JcOQT3 zwJ5u5E#k#r2y}!%>^afd=K+?pK zHuPlvP~(3>&gUPPfn2^_|hy*-@I?V z*GZY5m21b8WBtngi0_YfS2kpmJTHy$cJuN5V%TM;oo13KKi%5n|MuFt%u0+j>BtOi zT4rLvuz2?1NF-*}z3zc+D?*x$bV%}#IfcdyB=H9? zK5_ufF-wJbYn^_KXOZCnu2S{zN0(T4INDX}V2=w8KHjlJCVs3Wp@V=#4D$efC6S3u zv`gqXHoMZf&5Bo4A@+FKIxa#WI|qozJLGYqBH8XpxPzSb#>l(pMeiJUgQ9iv_BS!c zv2VkB0Da6<$KRbXjccr)Amg;U9kT9JB(%%-niD?7kWXnOX`e;d5kB#KB$GpfK>N_a zm|@YcB=)mNah78o<*3q?$9ZKdVL3}#*3ve#yrnI5bDUNsWo(ax~0w8bJ0C6KB7mhwshPJ-aX zc0!T|nXF_zyttDjnLZ@eF5dmFof^|)>ySk} zgsM}a1mQ(M?J}{3N)Mn2rCmn(xw>wOESS`RjAM9Kk)}c60z11T1Pl-TGj%CD zB&8QWt%C)Dx+zU<$~2|nluzcXA4E^ORHk+>R{ogB2%9QQ?%@SIC!tc}Aixi|y-8jC zQJ6Z|coP0Z$Szxg7C}U0Cm|&coFgQS!u&~;e6-73{ECD%V@6U5z3zHkol{<~Ih_e< zRdfU?BS9pBHo@+-VE;s%=0B3{dd1FN^_nvH~RtY#m#Y)`bxNEQO9v1P&7UvEgi}w zYGn-Y(-KhEE~o@*5+G$q zsS1LKLg6c)6OHR1(gG&}u7UtFxJNp3trSP{ab7s7BZ&Jj?>@rF*O8s*9*TU^IlL>O z2S@mZTj7U=1&LsIoTDH1xG;y$0bzSc*ok9=tQpV23p3249%E&j%kH7hx1B?yTPg90 zQ`{Vm;KRQpn*XgsF{)!82l2-zamY;W!4WHglfOouh_s%HkBIQNBuSQDc4%y49B;YH zFP2b|kNn+}cz|atD1oHf`Q|vM=PxYqzz8qEvl0+%&pfU3N7!-aJSXjaF|`cRjOa!- zH`>vUW@>ova#e!7BbpEJ2R`UhD?5>7UL4s+r|;pKgEprh{m7;A$S;w(yr)vREBys9! z_OQ`>Sl1PCR~*^UrPvW-WPb!7R-sO{|B<+Lz*^Q1y`l6pN$zq+5#48<-AWG7X&=_l z-P@T5u>UX}+w|C#wmt%=vw;+FaJ!YS?Uu>AAw6-sT;KxgSO-q!44V5=+~Xey`H>{e zsbhxRzQ`m0uRMtwVXtWsXwevfwVExyKH6!0(y&+~?nIht5Y0OiYEwUDW?;J0p$v1SR~_XBcypnzdzyM%-RocH)VWPVbUl%Y=U_*B+DW31dq^F) zYA!s1ld6N!ldqZ);6Rsk#KHD)FoH>B zPycqWJ?>_<=6&5AG7lJgJS4<_;yI9C7vSTCW5tR)B#%!W-(#x!dYb-puD_}0L$dpM z|30@>4XpWmSW{*=#|vT44kOs!2s*eKJ8Tbx;@uwiU!Fg3x4$WLl;-uCN(Z^Xhv@r= zfNQl>D~SM%3IZgF>?o)3Q>$j;EeXULY`i~Tzi61)x( zv5Sd$hI#2Oep2?d-91|$droCyRR4FQxYGpHech=lJ@4$%1rRtY~4q>_H9 z2c%FJ9IO|+sEXJ)7QKQzAh18%)4?oJ2it=`UrC4d%RNuyLj60KQK<)g$U;mBG5?x) zfDSx~Q9A&8IDm6-!;@G;iKs)Vd4RwHK{)D{?&*g-3`D#*!))?H8B`D(?3zKOzB0@c z6|4?M)ILY74qmtidN?-^LBy)rM3T6}Hna;kltVhai%;x8eGsGvaFZP{gH~)snZUf5 zFtOrG#GyzEsS?FG%tMl3MOXAe$y%>|_^-#)0rz8vb6Gb5WsDJG+vgM(m)%x)6~y5kDm9s%a|6_#2YtNymois!pWEslo}?OF>F3L3*@~ zc&rXcq>gi23U?$Gf0VIm{KlbZhip8DZEV09vBrJu8HRE=vvfR%JV+7n4Q zc)#nqkXWOOcAz1D$g9hGhkMAViCCL^xV3#KoT1nn|9cjsu5=f#Oh6nPBY?UbD~ZC>;E=U64Gwt+R+|aBa0eQ~G&KAObvU(DL%&Dr%i_6^ zyOfTo#22?L4GwV#wA2SHIX86T7l*(HealF0OgMj7n|1g}iBpGY8k>#ag{OpozdW7H z49cM_N_3%0rL+j9?6txXN@Y7u37N7sln$&cz&j!d(S!-o1PaqUnE#_pN~?qb)?^{j z^uTN<&V`9HZpiH>z+AX@r0h15fJ&x4t<~46}%uP{hC6!Z>)Om$W~RD8?(ay^0XY z0)?EK)IE@d2?v!)1nnFIwaNO43c1)1YpaQaVGE}a3bELTj;M=xatPb`P`9Xyf1p4b zA_(*(u#R~$qNo*dGzl1eAs4L+b}_%iw1;sysFYZV`RWxRWeJyHoufc6n837pK!6rY zNTuor8Hy7sO|uh03OF%Qd@)iYWu1NaQB3R4b8t-7kuoZSLjSA43ax;g44sOu*a_1D zi|et{HjRs^;0g}in#)SjryvLsC5v{_(*|1!tT2edY|$T^(&BMb_~MUs>rg&z3Kjj+ zj2O{ViHRbLGJKfLDw|Y4y$DMU)O>*miBJ_GL<=_cQ6RMl4T1n1mC^7#yaScGkAwquUKM1frHBbk1cvoBWtUDnH z2uTpqqNtN-lNQmKVtd08DUq?79o3i@GQ|t|;Lnp-SpU>$%)0o#E!jwOJc&c3mb8*F z8`UKH09o}=$MslE+`OwcG6{}l5U{kjGR>C_CCl5SPcRV>0-2a7;gU5W*<;z)o9$P# z0@!}L%60VDzQQXNDGVJE5n?fsdh1#L_*pSI+G^ob3S*OXOeO3|Er>DL&l)Fc`H>r> zM~nqaRq8f|t=PMOSi6{5+E`lzAeVjcO1LQqg<;RG4H><)$dW-%vZc?Duv=e|qs2SW z_^>_3u{~tuR(g#C2(Uu*Jgpn6| zK^rLg+Gn9c9`zRQ*azPkHAVat_#!6Kncd;6$p4bK5V@1sHXR z7cNm3*!>9R9ZPR2U(!8atSt=G?V=IF-Upa0^yS|z@xARWUi6p{XB`dQrQP0rMqmlP zxca9CMvq8nCgHRQ`z*jy&0C2AU~bFae>%s)fMAO-U{!P38|}Koqt=pW;lkj;Vx&LY zgWNcfT#)SC%ze-cg#gQ)Nh{1fb0wC~B?#dKoP01&qG+3wXyfd;tmuWP=|wDsv0gaY zBi{2)Bi4@IamY8$o$a9`$MI0Uk_RT<8Wcg|5-AhZSq=2K9RK(+K=va+UgXkM;)g`! zD-H>1UGv9x~SA!tu^qet@|12hvr%m$cCrPKOw7TpEtt9tO#07FUY^;vF`LY-U%2$mRfD z3L-9^!i`y@OJZ;`BsDTiqF~)AE(s|zk<0qqex1>hP$=_*N(|G{t&oUQE+;akW4}o+ zAQGajQ@4qq1<=Rew;BP!$rfsR9BBXeft z3i+Zd>d#}2XM{dzi*_WE#$|lR;x=yDCYu@F>~8IP2JXa` zmvb;##R_hy9gLPPka79;(I8Yr}hk0dd8%D;DSnviXh#!V) z3kAo0{Vj^ItNdMAU{r3qD6Dn*>%YRDZVX646WP36XB9UqZxqP?Ll=!fFwS~sgq;?d zEfK=ismI@Y^!Wci@L>M5}@ZCom6jf6^^8?zR$D zNG$Pj7U%0gPn$m<2^k>~e5g}2p6Im;R`l@LIuF7>^t2Y2@}bbpl8_NsHoOJBJrW_% z+cVI{9dK&C!Y(Y4E0h*%{`6E*b!rYnZid{CG)W%zG&RdIs2C6ib8~K-u^PKEzD9Eq z+qSwOPw<2QUN{jvj8Y(xulcGksT7Z82gSQ!AwIw2AVV<>)Ak|T)K1N<0V^xKuUv1_ zU9YQNPslL~cK=;pu!UDK7IQI+ICg|~)__O&m{9nS_H~Ch%c^i2qsVuq*fuc(_OY5P zf8Sf^whLuv!w%&4&c28Fnuln|7no=EKmEZ;x8E-g*8DPgQZ0Ght!kRLd7)tWpWj&d zW?_*u0tYWi_ahboXX_j0$#X^Z(`i3A0D=)(2dD@8uK#*iXKNmAKL-bme=8ndW1(MT zr*Bg@Xp^>L-wKsmw&oB(w9!jcQ*%Z@7BqwroOq`0CZe_pe{pxCzh76-u`*-n@GE?o`L?K|8*J zvHv>73q&AQAYlhHZfp?V0|Z0C?wofna6-$N5ys>9?}5L2UL6+tyKMd=J%(0=(f z+G9c1E;ZJ&mx{|+rb{-&&pyo>WKU8Iv2%`j1!a2AVg*(EmF7LGj|G z7lAwOZ|_{oT)7*un~pxnLVyo17nz|c1nK;v4@U5uv%^8^^wZU*k^J*dBp0@Gz(4*( zGVnY1X!&J52HoS&m;1PrQHlp2l=asCbZrt!_>6P_ZtFM=^@V7ErnW)uPz_qH1);Rh z)B2oz(bQF6?V&pNe8vyH5ZKLiL1pjh&N*urWZBq|D*gcDWSfW(Jo6Xk&W z7?k+pjX#bz1fh>!`axfZow-2^*K|7Ss-rx2)CH-d&(rqQ^A9h$L!kRg?;J2XKIS^s zFa+yxJgLMGWDGK+7fbcWm{t8II|1B_p4ICi<5ZJ#59uNXxyT{;~Q?rb0Wo$V+h&~Q* zk$&{dAf}mFL7+6aOqtDPPs4{>wp0*yeCZx;8CX9apbz8SV@~z32Lg`w0O=j%Pc1A+ z4tH3O9
VA>p^I0dE{GAM~WT+uo}Qx62#!*>w)n>``{nvBr!A2uuzT8?7IdgKsa zR$StWjJT|S&ni$X^?FF5(*B3fG>5Kk@ooqbqZ34gq(Q}Xi9UM(R3y?rI}4^UK4fO z^kz4s^i6Sw^O@xw&^XOm&2*ykoYq{YJ4>RDj;l()~z>9hW z>|^Jcl0jn0j{*GyLJ3jFKSX#C8a^O{42dOX+VOyV6yyLE6&?<~$PmiKi*TFlhe&IJ zlKIe(Xb`}ty*6qPlqw`s7X6}{GKI8@c$84;V3X4bB@!>vbRo>k*8{wgjt3M70zvJT zKT^t&qi!f3ElgNJo*J~M&Qz*64U1L71p$&CierpnoLe+R#&P? zCXr~3_*j6w9to3|3h8Ub=99gNl@FI0TgRaYyUbR?OgHiXC@>wVURiuABv!sY@M28@J00ht>({6>dS`c^uKZOTF80yNbMZF1{ zVwoP-8blwkMWR>jI;;)-)N<oC8^qp%FtuLr>;#PY)gC9_hjAjxx>4f5mv=EF_`&fSM?R_B$nhI&Cutb;|C;lE0l!4sp_rZ3E> zO(PZxgzB(aHW@(*CXj)vezgK&?dn+5de*jfpsaCSYh5$YAXxfLBnoOA6EB2v(!6Kn zL^>8TAjBUf>}Z>d%g35bd0k4nOVDbYmj8N+M;=Voh?94Mrj=GZlJhz9LDo?Ze@N2W zi%GJ}21cf_;NuH%n>_r39*5vux`(1@;gz}?vAcQ-Xt2k7>gaO}IMOGnbCp+P=|~~Uu-^+cLQwv(#F`J(-?Q+h(GjwUpn5Jxj3>_F zsdH`SoaZ~|=Fh!0(HakT3l&;LkI+5gUvpI+a} z46$rU8?qt07R3CRq1=6`UA;(1ZuuQXsNZlwn20n-pNubPUu!{PnomXWFFPOnR)I<1PgqPsMJ)E84 zS&*Q8Tp$^j3_%JTy5VT39Rh>~0+_)a3E|FpWm61DnxJy7A*b z>;r1aooRhWRH>n_UqU3vDm4T=JkOWlqpuxg@K|I)yhDYA&DTvLB`PFCt`56^ zhChmAx=|#d2~9>qN=ru7zL`jdI^5(-+MflsqCq^QOD+pLcu7TKpl5YN zBi7JIK21m}qv=f)Q~n)Bew^DxR8GPpLR`QFsKYu0pF4sjS~7(^-b7D8q0qo!T7t)0 zMo5Z%9Q4IyLgZCJa#@gkC0_pJMjXiwB#G0R1hy@o8Tdm#+$CU2M`A9fV>~8f9>l*i z=0O+$Hmc)dDgTK4S*B-RM1m+tVWNgUzN0?S%V%Q8X-;Nctfr)~W@^T!Y|bWa)~0RV zCT`}YZtf;;_NH(CCU6F)a1JL(Xvb(0Cvu9*dXPu{4F!6r2P!6Ka{kAKkWY?03UvlZ zlys(a!c1r`2vazSLp4Uf0L6&(N}Zu6Y%)Z7e#Che#e24fnb zOpA5`iI8+BJPIaZc0`kCAC_o|xrCgrWyv9KUsj^fPqgPw#EC>UQF=~BhIRyna)gB{ z#fNf4pTuLHcpPuu;C-$R%lU^g@u!MPigsS8fL_X4&PAuh;HtC=2iDQ{<*2LFQ>@Gi zQ*@|K6#t8QYRHCi1d(opkrqXhY6Mzg1%Ux4jT95LG=#TsS`)UTe@N&~Fw=~JWsM>P zx+KiJ+~vEJ)S03gzUa$RENN?0CQ!(!M!>0WMCnyb>2F$EsAby9S&Wuy3=?{cbshxC zaE!^Mn>n6km?{O;A;*}m%V$xa&=6ii{0xIs>M)YxKzeDq0gu#Bjn!a{*4&Nd*v>-k z*h0)FLc9))6mM$YHtO`=^6 z#|aOyMkhkB>SKt`s+f*5c@gVyj_cSe?8r{F*3RgN4Vsx~OmHNa)D5>lR;-K&CRgG-VetJ*&9N!TBX~=kwprDTqVg#5LM6N;5t~uEBm5$*ZvYZe@kdP<_hJ<3Byu69Rz7Q47 zPz~Ks+C35+DH;$7k<Q9$DnuEb5hgNH z8zrq01+C8-1RY6Uw5gFEUF}6|Z6r++Ar(X?HPk2J(He=ZsVHsP3ewpY#3k`;S&{2S zyb>2;EhHK36d`Rtd6phU!mEnkIhfLyq*A-oZ6+buzxrt~v7?0_4eZX`L2AxGV&WRtnEVqNvtGd8$E(9&AmQ-~n(#s041U4s@kg+(|F2F8{{r*)U8h zm;HuCbNMiON!M(#ALn70I+$1eD#THFS3!i=c!f!M!Pj#&@!c-Ve8FIQaq)Y>6qrbW!jNv_IO%mW*QJtJX$$Q(JUg9d~1vh*D6p6*?zZtU(gUh}nH z_cdVuwP3SuUK6%oqm$Axojn|9Ym8|+NS!}W9r57VDzPx$ZT}wE(XH3b9}N%QYn9#E zp|V1-T@AN%@xHW97}#;e@i#97-{rJ5n>J|Y@HkU5m?55=SO()+sz#t5Y}*;3fnMA3 zHZ^-7X~*A0aWF#!*8{*G9N%5uweTDpaK@G1qaAk$_OZ06j7q>>@AXyi4WB`T_wKDs z?{N&Zg!eJIHSP(@mTs^kKe9(O-}4QdBv0STZuZCYut8*BX6U!~3C|u*)B_YPMx-G6 zU2oCr{RA2*=aC0ui{{1h410YNe;Gd!7LM%8GZy+p7uY^M&k%>4*l=yFJ z^Ufp{LZJ9TbRbkacxj7Z0bfoDMx&;*6ijCLpOIl#um9gNeqfEWo}e64sr~Dv8R3fp zAp{6velEF_vp4uKArmsHd>?dK)66K{Ove2oiDo zZsR=KsN1CAI|#!#Yp zsZ@JE{-ZMqAstb{eUpz(6JV)r|VgabZ2ufa_&ZXFvWAO#N5aIN7Q|HWT%Y)s*83@d@wdh z=vkucJ#SDw;hThbM#u>MM11Z_lFsSm*Z=9`dqm_5Mdqu9wDty_=0<(Oh>S#ep)SN= zSuRohNM9m;asWNyA82uDQ$jE($~Y*OMCg!SzD|UwhAREs`Th>-{zmYAnJD*&#s%5( z#^>7xie?1KB}$8$KDRtSrIbADi)_`~C@~tu4w!-Wd;ilwG!pTss*sM3<_nO@3Xcwj zod(OU_CAsVe-67pxYNI}XrGj>JZUU{ZB!}hR|`O>gD{Zbz!FeO6jTV|pofC#1TK^~ zk>bL2=j2t?xRGN=j~_vX6giS)Ns}j0$~(92Bfow7`b|{1Vm)#UVqr z?8=r+xbWcIf(BS1Eb9<%T)P7=l*o&aUBPt+p|B`%f#b!DV3DfJ8GZ369pc5#BkP1l9HHcX{KwNdNvt+B~q`fq(uY9VPhg97fK|;{_Woage}?}7fHldh|R;L(SW7zt zHqEah1kQ<6r7(flp>>1~QzOR|GO9xf)zNzEbGrUoy0FD2`)jkeM!Q3`x%N73 zx7UWdZLz_Ydu+Swrkm}%^~QT|u=4}gS$;GF`}@lMAwmo`UjuP`ZES zkw_iV6oU1ENGq!RyLKMPXP^T<=a<%aA)m-VoajT9^`w}3_11wz=dJW(Tc@{FiNb11!>yPB3G8p zFc5+c4AYa=QI-W-EmiM3;0HnYL3!}v9K47}2#JC?jm!gPj0+8gTq6-uManq!*g-t@ zagK;Rgdf#fh&pJakpMF80T4jP?v}PX^J#=94_F+(SjDO!K2IS_BuelE_<%GGaYIF{ z)%oZbi6Ei?dq9N0Pjv`VM-=f9ks}&#e6*?_5P>+Z=1qi(!#T$ZA+UpU_~(sqlp_?Q zI7L(ik17QLUqS!+7)LM8ZXtwRU1}iUME9*PBw-vQ1pe_YJ$}cL_>q}ZD!0Ye5JVq~ zL?Kz&l8(cag(nOw+5;O%kfb?xNz#}?26J|$LND*}W z!ya(lhd+Wiu9y*o7cU%$_KcXxf}mp`momvk5CnmGti&b=D&!Ys(vQoX!+Ha;iG)B` z$2p<|i{o4eI16G=beiS?rDKr(q;ifYLa9UZDQ9Yga}lvQ#flPZccfp zbmBS4{S8E*hO{OG6#6xWo)3#1rI$Kq#?DC+#SHz-$3MX(J(Nuppae1LNb0!~d~)o6 z$0SJ9#;5PQ+&k88;*yA{nn5IuTl1$gpEnpau$VKv35Py7%Ap0UEz)rGL{oQkQ=VYWp zRC0iLyh9$<>&Qb7dlD?xPOvQ7OhYYF4}Y|bASG=lMJ|G$LS6(P?=bCY=eZEbCM;+V zs0wLMi`wlKY@-lRDM1cN(bC4YVkE8YZ4FjTb%dFZ` z_CN)x9bA8E7JdnpN=3`1M83ORp$?TG;XUeHzKagI0CB2@L6zU&+c)`^Exz=f@7d~$ z-~0c*ZNG8r@7(NLwt={#a?CU)b~PebiKK(K{P2fm&~rx_{;nYUpy@!K$x}RP?vfMX zVkrmmfYKxpKbXbsg(DeVir7SCCib6HP#5A+5;3(CArJLTIYV;IGbU9NFQa$}EjWrt+ssER*=#TXm8!ls1lUXX?u zo}>i|7g*(A44^@FoP{89ZZkWWR2Bs)NojSKGo76}7dvOEF<3_Mp%IPYbNFK(Z%uSX z6ugnf5#%(+WS*GvP3*5zllWeI|h1UKK4lB8dEt?6F5EhCXEE~l&${tYaSf3e8bcQOSQ^Td*s6*cnNSc+F z8dNK>B+zxvi(rg8k*YqL;S4v!YZ{Kso_b``H1=gU2Z9dfI0Ds&A z0cPMws=aL6R~zOy`EWU{)^(13+{0VFtw_$F#q&%{2jcnJ?AE*P5wP#PreFVtVL$A_ zcC%}p>-+F}BhxLs64Kn}(dC5`?{Q=ZY!=0%T6)u;UO06wJJHOw7pBT}{(!3T7IA{$WaoNxQ(UI0j#p8u(2#|_X zuxZr;_7S9@Y|Y91l1+#2Dp4XC=J%QGa<3tPLmBO(lqvN}4mp5SL+NY^LsXo?S;_&=`qsj`3DrA{G~E>`r9IrvZ3 z8c+JI;sWDPDfD3{?r;wcClAfgBcx^iK*A6Cun-OL5D_sE6>$+6u@N2d5g{=W zC2y6k##qgoXu* zBuWy_^-@DH=#VHv>b7F>7foXO<}fn2!hVFwu&x6Ac2Tlw>ns1TNF{rt#4R zB=&&uBM>ezN?;5ZB54B77PW+E`pn<NMFa0jIDBii8~tZDq>V;%L$ zFzmrNc4HnKFpVN38kGVa2*eqi(JP)YBm@#92of7hq9IvuA?{&iBxPV6vK=)7OrnY- z_^r*drfS9!7q`nJ#bV(w@+3bZ2Jb35UTAZY16UrwnEHVt6J$r4Dc1(a9uD9fX!0u- zGAZhzJ;Wj*wSp)=;wL{MD3MPoloBLzOHv>UB|!qs!0`t=ti5UpA|S&grLrppX5w(} zC0@wpUgeR3Ox$#0ntTE%gaR^R-`##iXyI2WLPsmw1b^~gj0s3{N@KhN`!sXV@C7`K0MPKd%`zV z6F>BWKLVyUOJp_+q`C+~K^SB?AEa<50y-(gLUu$$IAm*1#yUl$H%TNrbOb{pav3eM#cp(7Zj)w?BU)mV=;Gx^FNS3Nfm^)gx%NR^$YmqU z1zoUiV&3Igkn}NnR3Y$1Uuddd+T}_U%wD)B=w4=F8U}M9Mq>O$Opi2KE+%8nlw)-C zV^H%VL91k%6em?ie_Uo`8WBO2s)Cs27Mtd1s&aflQZS*0FOOzX#bjCXi@yR)zbchd zEj3dybyNN8Qae>sKb2Df3{<%$aH4~7f-ppD<%uS(Ul70@TugE($8u)I7`=^iBB!4| zlpqGEfKDfM?g!>JqJ3ry*{{_u&BOa=Iz6aC1wS1(Ef8K{!c>_;nqR6VFepDx~#Pu=bFoE`ysBFoC{-Q4?s2uY( zmN00%+6z3`6*4Q5giHtrRh5ODqT=-E0nXt8x{M%Nl$w&`hH_|P$ESyK28cZ3!-{B) zc#Qs*CXxo~i~`9;S`5fOiC49V%>K&!T4s!b=XlHrjnoK<+Nj6U$d48Y`ig5==m(GV zh>vy-=@ zsaR=H&r2|w${f1{Usupz6OEX_5=8&&b|IFjnSkh-B7$_3;~kz(W2;FauxXhfhnu{q zBr40E4ocPbX(8kRrK01rF3Melb|HXPx}?IM7WaRkuciEnX>DqtD%YT-b7w)Sq8?YZ zWXCgcho*Y5LoBMGR94zJYT2GLb|qw_pf#WdDstC}xUlvkK=-8zMyB=y14q{pfhrxi ztIxdaZ2uyu$g6GjwQZqFs&3JjL}o#`N=>F_c5c*L=TMeAAbF&$oQtH&NEA zt^SbVLexOS<|p)i&~c|$?-Yx%ZmuFAD|10&vUI9| zuPcFtB)K9%dEKsqL@S}#iMRjm&Y@(7wW#N{KA5*2OQSLn!#)bOPVV6_=>~$i^aH9*{8tlVHxT7ZnLJr9!wxK69O=kVlCIg45|3W>DUy) zV><$5LyYGPtJmNIk=!tHWCw!7thUC?k70Pia4hdCV#gd8%INPzqm#%qgp$ieg{Mtl zBoJn??OZo_kO|`EEIBE(47d7$%VPM46_F~*md)I(Xi{*_s^re{EHT_HF9NQX0j-I{ zBtWGkQsvgCa){C9SN8u@RUsyAa2<~(FU6{Mg;&~-o?&Tzg?$WN23qq+uh3vfT?CNfSlUnCSZ2ejT z?&L1((9Z40hWqN))O>W(GWvKkRFPtQDWxf(NaKyM9Auk`#a zu@PJKS_zm#vXP0Uw86 zLF)g&TKhJTHNMYT#Ba6D5B-`${UDkBTKoO>kF+y)9cX)Le&dIVdmZnJw&QsK&!qt6 zFG#Wtl3|<$0plFS%RecCf)e#B(oqSa zToL~p$?1q54Z}B_rNi=Zt@v>||1q_bg2_n&BENjj@f%F2T!=psE6WkjOR`|;T&2a_ zB3KeUe!~px;Q@3nUV3sKY%(H(;sA7#Cj+uBnKC~A{L;08Dy_UIu5x?Tc4^!kCAbpP z3sJLO;*g?eK2$N-g0fD4bg<;GEQL{gi;pFQKe)-Piq$ORxmXkIF!+oJ&fYs$|D|x9Z@vD&Y-Y z;lX!((HG$tKH?ibO+573D`iAq$aM+gy*uT9Lxn}%mE?@DNNwj_Y7|T1G)FxqCO2YB zt0+qqS5Hp{z^R>O{8C#GshH}^n2fa^aMVF?P&ML~S#exwb8vOJbhRUT6^Z|- zHCRb@*Hn>?4w+>`;#n7he(dLXpiM$+ z7lLayiE1gm^1V`QkA1TF^Dhz~ZJ~gc{IzKcZkOOz*(u-mDWsUzcp3B7nV`wGFGrH8 z>7xplYcsB!Vv~TwiE&T&_0uVMuMD1QKgyJ%cw_U>1tNI?dfA{~FPryyhrb|<7+oK(V^r5|l>CVkH*l(Xvrw8J_llK7M+IA2n z=3R?;T|Iy2A~EDT4}w3(2H_Spcup|l&73=X{tP;_=+UH0n?8*i!axHC)eXFGFrh(& z3Kx2iE%A13gX~_ZDIUSN;0b?Ap0s_dXqb zRq@oVhc`bSeR=KJ)o*v-o;~^Z^5M^q-`$|Qd=LKFgPK}^4LJp1QtAJ^gCK(Z`16iB z65aDafe;{YPC;jxwa`BPEL6`q@gTJvVh`wZ)&mATZ~$F)Ep(Vf`(SvYW=nAe9YZaq zMj-+W?b8oo@GNB6LYWCjWRXT5iDZ&WE_u{I9;|Z#LQoWS8x$9;)0{yDyv7b|3vFp7 zJFuw+1q)ZQ031VLUeM)lwG9UWm;)up)N@SUiD#Zi?sJYm^IWE9XashqPd^f+L!ny? z@ndL1^LWVH1NXER7*gy!@PLI&LD-Id=S&JgKIf=a*If|YxZ^)QK~O1E>U?ULUP#UJ zkB&?M3PD|<8U)Wd{J;o7keJCBXtBl~i)^w<&dIEo0x^r5LFxZMTcB&qLUjSOY0^b) zY;Q(u0GcI;TW4X)o{MgvX6%qIXM=K9=uh@U@(-+EDasH!{ybpMV*db0;XU&VJWq`f zIA!iq>Ij8TB>g!E!8$_aV~?n&qPmb%yqGahJ*_guPhj_?h?lHKF$Qc>2>5dk0%q_t zYD4|lTiH2)4%u$bI`7OglO9OPLJ4E?2DH!(v4ao`9^e{fau7FNrqPcjy|lN+MavLE z!8w<3&t88GwrTHf7Oz3?{KLyVoi;?_+6}3Lk5K!#eb03pV%1MS5Z9T{KmSA`;W}~m zx6h9y9~IAw5BRf>!Ah;OPk%CE+z>u}uJukn`~I`fhmQZA<94t%3rTF)rk{>_>R(@Q zfjaA~S+3)%&rZA7V+Xik?Zu|!pK1J%tb6dn4^KRi+On|LL-*{kL+Hgn4}EIwFkiQX zsL2&Ql4khR53ZltgTSwvW>0?k=Id?%&{da9Rq5xy4}axVS%2E2&c{ERKKFR4{09?Z|E7zQ6+={B1~j(2*e;Na9jfk+W3-^t!?p! zSud1G3=NXRtrbam%mbhhuV|3z?Vx&Vp-@%mL6`ry{R1ETGf0Q52NYiXYa#Op*%0_Y}z7-t9%n36=KbaO0?F{h-9ZZ3X&nWONtpDK(KkZEoAt>#{>9rlzu>xA@k@D z#UNI<1K8sLz8a(_KY1=ELCHyLNe3LWwnyS9F;}M)P#{4m$3h~-9(Nm%xt!v;$DG4f zP5G4f+MyN*)Xj>pET%C9w3@5c=845=A)WZx#5jqIl+N5^l+cur@nNZmQhQw2j@hmT z(N2~}!N*u6f)<91NFru<3SIs|BBk_-U3k+QV%$-d#pwfL{-~ueA5au{=woyFI3hR? zO2TBW15IOMrfjMiO{=L%Tfu>-Dxvi>ZAJf7BClKsPd=KHo`@8rB_U}_OxhBZ;-sV@ zRq0Mz3e%G8>mCLL8##@l58yH6A1QJf1j=HVa~i~c5NIVsC^SBV$?hoYSX@02U=NdV z5igU3OC;>!$bXa(pLR<8~}}v~z%QA^d^a zIsWm(xAF97n5yYsDrA&*oa2YD@`~s#6OV6pb+#8gUPHHKR<^q7F#`e66L*WsWypn&!kIxZ``tz@gmDW&M|(RQId_oekPpa*h~M%62i*fk!h!(J7!2bECNo#Q z39E4YYt|$Rc$IJhD{hAKEDI%=qq22rO=5adB&Sr#D@`&>pX}r)FB!^HmU5G;+!A>S zg(!`6XJ}kgoKjFD+?HXByL#=Ja;-!yo@ZSZ5MG z*(48OqJ^w;A>O^vj%wK<=f2ITOv%xXdPH6zjc!Bc~i+lB} zx9r-*?yI)F&sRrheU)3+!b-Q2$SgrmtKZNDm$=BqwWZ#hNb4G>mz5H}dsM7H1>!|u z963pYv_&HN;+MYw_Nhb~OsQRDnag0d=9%s4wWM3P%g^^SZvGKzGCvyCm?kCVK(T0l zEceX|jpJ1!Wx+3Zptk?tp%0<>10NECo8RyO$F>>8=?|FOLh3dhf2t#IwBEMn2q$X@ z5LMTeExOse$~xDC!Am2depR3G zi|Jnv`_UT#4uOk2YdmuRE z_PAGf^o<030cAghD+&!drlRm9r9+HlOkP>u=&E}3qd)iPI`ZESe~AEr`nGp}Xw+eQ z=jUoY?2M5(R zb<2l)5Tg#WhkNq}2l^L+J&1b%vJTWIf(&7TKjDN8k%Y__I6w#o&9@YAfe-$`Q=zjC z^zt_n@(%Z)M*V>=_@s0QC^|0!PdV5S?NAnzQGn{OVvodFWq5}FpeXeMeheWM_#$@a zaAI~S6#TGeMiGdVM2HZOPO279Ng+u)6^UJhT04k|v4?+g5JF8ze^AkZ^k;iT0ff{C z6`sg^y669c8aIVdD2kT>ef0N)M*$aObcYt=KaJ!!1+sqn&@cA@9ZlsAPZd?Vwh!~N zI81RV|8Ng+(|zjTh4-L-X~7~R@{8X#4{+f)|B!J%g(1+$jMJEi62XmVW)P$0Q)8AC z@U$rYWFYGh5C4!4nMjYX7m8)ngK)qO?2wNT(1AbzeQ=NtY7hqn!GG!yi*O(<=@5kt z(U1%IkPvW?p(uS2V0&ty4(Je(MgbQ9aw+k|A8XSNCB`BqLr9m{5W?aV^pq5+W+AU~ z7xZEw>A+!!a}Ch@NDJ?ZQgDEC0t&$ni0XOHc6me$|>ZlZOaSrxWk5MUl zp*a6_wr3%+2!e4SeYOVy^XGg~7>awdkrKIzt~iTPXo8z)A!C`6^Tr<-v1$hKh^Jzb z3!z$(&`QGcD)<67jRbWDfes`oE!`Iw%ds2|Q<6x5lMSI-p7UO6QJ98_m`c%@?iDlG zrCq`_fD+*pG{p`(z&&g6nGgb%QfZo;caIX0nz@pH|7ekM(3NrUl|HDJ3o(|rS(aqk zfAg1nu?R72DQ|#sMjOW=UPd_vL1HEroI8h4=> zI*t<2p*(3SVYZYh10q_%6|S`zKJdOR^&s^6)5{qNQu`rD4jX z>QsqE<$e%iJ?VuMA10%5T6goOmFu7mI#7}MxR3qlnm{_6Y5+n6sgMg1iaM|k6*-`? z34#n!sE2A0Q5c|f+KNdbEO%)ToZ>0Fa-6t=T~tbMOCc(x(tVL2gIfwBFUJ2OjAD|c z8g@(}NvHyYHdt<@b%KdPTI_~63o56(+IFRQdk%t%w+D*#>8E5#fBGja^tU(q`KxrH ztUXGk{Mmy3IUn3 zIh`Y+pXwZg!#U-p4z#p5l^3N$7dc}T9StZEKf5oCLrimpv~NRxr?mfdrCGCRqc&5= zbqo;?`NT2|>#$#|c}jXDI=~LgL8r(HwrQ)j^(D4OB8r2$ws9-B2-UVl0t8rSvU97q zd&{?d>$iUkxPdFUgG;!DYq*EY6t0K3i_5s@vwPEbdqeuTO5%c`L41vixtTj7B8#@D z5sQc#F_XFwpSvWL>lxoCTk$h~PxqY;aejaK6R+#F3*ip`U@#VVSemQ51th7>8X%k4 zxk(zNz+1Wn2pR`CyV0Y7|LPnK_<#}k6V3~P5||W#(KS0@2HBgve#3gZ>%H$2ibn8( zAy_0RC=p|6zT#)R8x*UhdK5I+OV9zoF&KWM3t4;;ek=LC`wRa+(|QyW8-%SvtwxB1 zM7V^k7`grlxim_s25baZXnR@Mxi>k7q-rXLh=&ZJheE-J=SUR>vxwtXh&%NVUQXcaw`^#EWHo#`PMGW4sh=oTBI0Q(nQ8N1>et5qF3DuI`u=MVznj zmBf+!JgeCdddiO)>yKI)kOR4&2bqu%8Klrk7Yv!36M6rAuZfWw8OjaelC3eS|1gt4 z>7b5$sY016JqgP{Nwd0i6$d~fs#OpnnMHy*v<=~txdNl_Ys);T8AW+nNU0P`>5Yi& zPlepbsVf<~EXmufI#ijoR_UXh=$c%~qhR@?j~dFjS)~1!mf$SPM-iCwIG9-qb&?6C zv;0k!2?388BZjFClW8e2lMi}97$WARb9tPRd6-Z-f#k-|n7Lh>X-l37nvK$#`&iM4 zLCXsu5OO%<)n(;x{WbyokLNpYT6dSO(7o*JFH4#U(R&DA;s zpQ<_1tXb0aNzSqft@^1cC@Y}y=hC}Lpg1bi-ef8kiVq^%t~$-30A->eTGt{9#{x~% zglN>F)1XNmq8Q2)CHkR)Y>uwNqGi?^kL{vMvC}*)&s~k#ro+Hk;m%m;nmcONQ5e%g zY7}Y>r0Y!DuQ{@$JkuuvJi<4o8fp|YA`xYZlChl>K^-v#QP4VEBC?I9o?+XXf@;Cd z5N>J|Y?|B=GHV;^rS6;A(Y-Tt3IukFrv_oke5$hdNtS@R4uZ<4`RAxWs;Fq&s1*sR zFD;9pDz3uEs*$A4ud;HfiYo7o7`nX>y^a5=5FizrO0)LO8Lw)R?Q1aWR#S*#!*pS* zU5u-7C|m7Re9|r9#^S3#8mw?_vD{tZX6>xhx2(@f(#@LQA_xT2>c5X;t`^f8_8L`p zofPn@Q~FA;(0C5&+TwrBSiQY4fw8UKO0zU>pW+ZHUKoWr^Fal zVUl^1<(Zy6bxR~7gF#oG$+$Z%aF_145||Ldh%Yt-g7r9w2uc!Fj7Xkfj|M z=<2zy>jENO@Zjse4i785>%&g$#cu4!j_k>v#2*yl%AP=|mn5qv8j34C)b8w{p+YRc zLQIqtzm@IH4jSEAZ<6eI4`(DkbSEshf)d?=>+2bpdn~5=?*0JoyGuk-1BVO|MZ7g_ zNby_yZX{IHJeb{g=B_f+v01chyGU_H$7K&{R3L36Ijqi+?7r?>jTG|E8K_&o#mkW;3lt`gtz2OJMLuE zAnrapM_=qS1}8RVQP3n2;gS&4#O?Zi?j#ZW1~TWzmOO(bn{-|s$# zQ2+)l#`P7lV`MsUWK?!#*Z)%1pZ!+0{aA+m)zAIl@BQ8X{nU>UGj;jJ@^(3O%?j5K z7)Vs^*J{1g@@;90LV^E_Plw0V=!<3?j7|j*2<+{HP|)7FefA1E>ejDeyOteW_Bq?NX}`|Rd-v+zz<TbWB4l)md?skyt0R1$=sGvyxVK5zk5`>^156?@_p?e-s zr=WBmzz0JOQS6W}3K>-ALI^V4@I|9Sgb2N+3M%o$#8hPQMjh2VC!_-aeCM3~1SHTv z1a-2}#Ui(}@=7eT)N;$d{_=~33k)Mn%+VZ!$jqz!`fjkw$UGA>H`nniObF1lsDc;e5z358x~qNIQ4J^InQ8w)kQQ;JFA1bd-ZB#p+zE-Ve7chXlMUgh(I z0G|gGdjP2O)n8w)(ts+T>2uJxzbdF1YkBXBUyA70zyD=NCu(CG1l(q;hxA8#4yoV& z@^(QCUTkkc>6>E!r!a^lu4sMp+e1V+FbE_L9gqdpu0=K} z!r5VSa7e=*LI;RL{9$bh;tu!x!yX*N;PLL_515Q>fRtj8yP{H%eSBqR=TH`XWEB^g zQOH^CD#*JgxD!et0BGTp%LDFHtub09fJSnkJD4($O2rXNZj7O|$e5Ek;%9(%R7oD$ zwY6rgV?XLTq`R{9p(?2=gOjA>y(l9Yewn9XP`JRpKnMW?%!wVIaY!gR$qqVwsgo=i zQz=DBN`@)SlwJ~C zj6o|1tbFu<0YSiy#Dt_yw1ygD%B+8K$w#yHhaoQRB#;l85jP*wk7I@?66yc6$~^v| z#<`TUC|;`(Jpn1UTDems@qEZUyEqrMMd}>uDp5AK$v$)*RF@N_s9wDE7g9EkmJdnC zMG>VAk3yheUP4$$y>ymXX2t-lECEaB0>g^NRHl0|gM=pPM7SV;ANR0F5)q}6gXCi# zonjsYA%YHn%#VAZf&iuNF%PKDqetDjrA`hK345@Lsr6COLjEzTbvD%>_dtLd;8PTF zijOqH%STUXv=M~xbRPf&Cfhe$hSBy(o4CGdzz;z#Tr7K+S zijTZLgs*;;3Sj3NmxPXOU0lV7SHW5(#WHrLqa|$$`Ne_~(5WEoIBoxG@iQ0}ctC3x z;8zKNMB6X9HX^W!ag9q+oLc1_`VgK!@WHX}t;R!?$|gi|CA@u9 z_a3s*Vo>_gk1tvU9tTM3SU9#0tNkMq91H6^@=@M>bTO?jwa7&FLDZnwBdHy#ZdfVk zvaxXVAKlf6ei@Qoh~UFfby-J!SB7787?{5h{T+bSnwSBHO2PjVhy!5X3onnjd zemQ(x6sI_E7r1~r)?rH3j?aB6rg4ogmRv3IgTOZC@lMjA#2yD($U`RWMWMg~x|HS~ zJJ>;WiTq?J+oc^$-Yyffl)oqo*$n>Z$1i8<;&p^s%XhbLaE{cLjqa6*8pD9|>lcsc~ zEq!TBXIj&n=5(h${b^8#TGXS~3p?=XCsU(})T?H7t6lx-i5dY8=Z!llm#Dso|{a@Qsz+I zgd*T3cDc=cZgj^52+*!IxwWH?S}U8Q={Pp7ts8G@Q`1k^-pga*7sbL3*bMe~05aq9 z4)tdB9Dz=E!yW!`V(S3e>{y2m?5!uo?4;h_Lt)>5ugDgGWk*H2e#GvlX7%m5q zCd6I-a+q@(4$-F1v2P6|b;$bG>xP58Ek5&Ge`g)gzW75nPC=qWXYT_qfzVZsrb|Fhn0fI>o-X<0T&Ngx zyyso-h=z9@>O6FIpGD&AuC;k=4(+o59@)93IrEZkbizM~+3YU*P7X4bdkBv~VHrzV z5OtKbFpnYi5QvA$t`LUIwGnj_IPWc>IG}d*^-ceNW`U|8nMV zU~{)>ZXDW89{wVNG?A@(KGw!np~YjF1BYqVOO3S@cKOg96$mruEC>^T0@#ztGGCD zwpxRLbyK#Z8@y2|KkmD}3#`1O+qk}C5DT;_eOsFcKovkhaD)904zWu96}---zy=AyoVgyH2`2yQnS6*eaT2JVpuM%ZqH%Hv1)GaGI|t#> zE4o+`{V75{+(SO(6TnNmBus}TY``Xb!YKc=H$i+phtR?*)Coq!zJg%HzWWX@gox^? z8KVLkodKwI;2!S*ABT9uxPTw|(I5MWp1Dv5cW4K!aGocst3HfHS)4_=SiE~v#H(09 zCKMGzgn*;t!bQZuNEF5=)IgehL}b%GVzk5%6r)BmK?;M2G+Luje6yV(Bs{7jXN)_I zaJLd+B3^`xGh{4l=b@;wvgu;q@ zhB2+=+O|#B&Tu zk>ta}v$YdZJX;eyLX<~eBs_UT5qAF@l|(eju8GN(w6{luz?suIEBr#N(yH&^EYG4a z1Q@HbIxA`{2vLlS$$|)8P?3N0nAGSI;K>k(d_G+OVJ$7S*%2Q(E)Z4m2`Yb z(riuFe9cTV%|ao(dxTBfyiMFBG}-(UAaFXq%uV17PT?F*;w(<%JWk|HPUT!q=4?*q zd`{@J3v>vx=v+=yE0k2*lX(A7pz0LM#b5!BVTX;fio;2amfE!|bF=QOs5uNKKS7WA zu$Pd-lKI>Ve&UPwLeKSNwU)}QwA+b-K^XA_47e!I0QD0kV=~R$&q6hxT^3&n@foTiTRxDeEm`;?ZcWKdxY}&2^@XB)lIEa`#$(o3^0umqOsqIH2pJl?X$LhuhXt*RD2OmPUXYc4B|NQ5}M|GbNKkO_a7C;d@} z%zKaQ*t)KZRS39<6qQwwbUTd*R({~lP+=}5vJPJOnX40vR;{L2^*UT}R%qo@jMeluSG~EY%rIBPPz=bi6VT97s|BvZ;0!1rCD4dbxfoL$A|f3!TOLANA3ED2 zVq3RO+qQ+-bjVfl#;zkMSrE`Zz^FqR;?&kNAjB>muBud4LK* zRsTpoYRnwMh~PSdu20-1V#6 zDnVV8f!dBSGBEj4bwwe?i3l~(-N6AE#%P>!O;>wWx$X>#CezomY7Mc zPL1)~<`p@%YnhkP30^R`fujQK>rCJk8S2QUc;7uW}RT#$ci^nnExw%(_ zUDz+?oq`?Xge7AzR#-7EV>LcwGfrbRUSl_oW89&j;2E9~r5K2{ig7eSXl z(h&c&9*{gg(e1?U`JSYN0LQcoEW=?0vY<06rc5oM`6(*@u^*uwV*fQ_LoSjE(&Qy( zVp0OBCsvpbs-+W3)Z#^$Ro-0{Vj*?#(%)I0vW;83RSvZkB3$O>x%Fkc1?F6y4r0FL zU)JSbrVedNq9v-NJl+W?atNAX-lnQp=6Z-Ml4gGbUpsBaYyn{Ng~e*dCyCSxK7u3i zEmDBOiaNR@LjqugN~A?vDDn;G0T$I!W?~P(BnY-*PV%JDfU!|}2!T$eBU>d27HC+) zVp*csHbdU$giVkwsz+YDyTnnJFM&Iz63DW56`r|QwBFyewhDy8Cx?+ELtnyO?y$e)~upcJ0Y znuyPu6r(gNb9!kA7_1~?E5!P%#R{xwEQrU7EQe@HTYOM~8LR9Idgj(;E`}&fAK@;Cpf38TuM^v@ z*XS;FI90hAukwOz5W`l))CtA3FUDk}hfuJWjT{HNFI?HM{;I2WurL9OOz8jKWXBHf ztQ)bND6s>pQ`Md{7IQHed+6});635LLi@2iJa5&;-6R_t1$FOxanLH;lSd}BE$cEA z1G6y;GfSm!VpFp(VKb{%4Qmu|K50+q&6_3rxgNIMC55CooPj$taGB#vmO)Z(cz(h$a)N>{ma}577^FY@&3HMOK z4AX2ASv2pC3;VcxXi^e^^ghW@h@f=1K!>(|h(|AJyO?r6vGgqkbZis#y#RH&5OldP zgG*7bQStOGarHzWi$ecUL??8JFoUSz2SwHg=h%^dFgP|>^KLnZeyE3f$OmOH^b3s( zUN@ou;pvG=M`#OhyXZSSS4Jze_CIg$3qtk0@wfMwizWR^N!Mto4EH2^03G?beIQ|M zc6UE9Qa~zq46Rj&Xm?K6@(YspGADJt@OHZ3_uKRLy1-0&P%zUI_Ih!3aHn@oKZhVC zce-f!h<&36z^5HB1C7^sv4C-~xCmeu_K$N9yBYT(or{d$cwGPg2N*|(e)y`G8ayMQ zIE&+xjBCW4xcR#Qc#7e9jIqc!rRI^DQ}A{OpeH%HI5}qQGkn*HrpL~65b~>tdMkN) zF4uRwX;ZxL`MBWva-sUW@OrCIuWhD2bEW6r=rw?|f zhj%$85jwpK&6U-Uj;WpOZoI@fp5!^7)48B?yd=kY#|cWJeL?&<(OR^ zFkf}mV!fGrfG-bEd$Suo3d;PE;nmJ>R^fTp-^mcMs|sLk{i=WmeJHPdAZcY~J7$Hu zbnfj^g$v(@XCDh`pfNkDsiJ0=t}>F11bK(SG_U9VOnd+Lt|0W(ivHB|f_;C`hoV5% zATu5N<5zdC~nH}xlY}cX0$NAq%b_4Hmeu%JNT6^{G$wOGr9)fxlQODJH&fmRyk!~XY zryOPT=h0!RD_WlVMbZ@U)ypTHwETMXg+^izJ_C6c*FXGlw9r9*Az%gs3XTQ=0_TWj zpk@s|_)lm%oKqi1UfC1L1O7-gPf_!r2v1uk{)6H?DnjtndHD>q(mEs7gMdBzV0Bk^ zWc9<#T0wH8&VBjqC(k@T{aE6ODGIeuh$A9|&pDXw_mg@PJy2nI90cr~ zlaCn#A;1fXJrT)Ua?7>%4|M&XyEaxM!c50@`Ve=L9%lXN{3(URUQxDdL+D(37jK zxuOFBgAPJC+Js)N^=pP_#&gd(2*jgRJj8mG7)B2mG+3ykb}1CLV!^|ri#%~OEUaN( zc2Klry>kwX5whDZTd&1YAV+Y-0S7zm&NX ziIt8&C@Tw6Iye85^Ugwf7SB0NvUUH@1L`3B0H_cQ_47IESQ(*_nt>MeT~uEQ+E4Nl zeULnFakLL%WSKqI*DkZRS?Wy%y z%Vfcv5XfhC_@G+pdU-cOjms=@%_gH9m&%%pWiw1TBRsTIOE>*ALY5zd`QtQ)&N*nG zbCk}>fFnL#=WNlwHUvihxVYMZLoha6Qad&^)c8ovwbg!Q&HUDcOL!Ip`y}3z>C@eF zkhMbPzH0afrOnpW2no;D_IzpNuKVvF1TR^o2|TH3>%3O6X%GMrhYk=#3|>q-$i^hr zForoSVhf|6SPHn7v~XlD=y?C#!(^2cepB@G(FL@S{;He zBxLcO%`Q{Ev0O1!1sWOKBJshouy8Hn8p{}AC_^1`q#b?3;@`Bm!S+FbdT7Mq*$c5`|2r(od zAppt3>FzU*?1|ar;Xc_Se7v zMT~*KIpA0vNI-V3b2t6Njll-!&eXv1AoUmtnwp}>RgOgfen5f09{soro>Ye>yi|yj zyvZj7_PLIJMiK(+NZwu2F;U2%aiSCr$|-Fb8nCoZghSy7^*)1+eNam@Bdt=`K0_5* z7RaN~Y-8DI>P+z+WKAFgS7>-)(}Vc5BzaOK-;g%b;l)&ga?BDG9r_uCj)|cT^&=_~ zBuI_~b)lD;YCiwTNXiUUR3n8bC^ecq&wvz_B1A}5qq>btDG? zC|2mY(vE5ns$n~bOyjcu(u0&VE+S*;!zMpy$rQi~5W*?BtgZKl5+?;J(Y(uPl#VeftBd0n22S9eF!!#9|Cj!Yr zTm#DUfb?6*J%xIi!(B9@d;Mzh&T)Wvyh9#N15FIcGSTObB)VlC$~($yUdZ`VIupf* zdCz-O$FgNW33~u!peM4mh9^;@vG1`!Ga#5E#Ie#mDqaiZ)G^h=A8ixOL>=U*b2xZX zadnwx{f5*4KTTQEJ>}t^DnsYuj;i^v>PHqDVTm#nx~2@QGhAi5*|_=6Q8zooywIir!aCHUgNi{QU-!z_zHqK+ z-_Ax2>sUv?^o0<3>0li`=bt$7#}T9}{hi58E^Hh|7NsR7BO26CeSi$`I~J1PWGpP+ z9*}jJa{b&6;dnF!^~TXTyx;I;OF#I**RlNw?;MGnm(+3TxjjH`)y?}FKa;L#mzt!g z8_R%n-QhElP+m=3UEptP_qAM}lx{DX%WS5>o;1F|7{26>=IFb0MPl!j&*bOJe)jHB zl_e$ruBJ_~juEtD((9!B2iTvSc2BRJ?sorb=3RgLt>>Q7JH4&iB`w zFYu>LsP%3%_-FJ!c-0Hu?_!_S>X}UV9~q5l_;^%EOuLrvITQ7Rl|P#!^7mwuy(c1B zB1eqI)0o3taIgl`^u}tC1UU^F(9y>KUBBixFHPXc&pph{!(- z5ORQwJ?IByEScNzf*H(1J=`DKj0ZjlNaAcDK6Ky*Qbaz8V4*13KHS5O)Q3B`2cE!3 z4({MS)JNilhFwesTRF{u2osYPo`l$vi_8PkjLj25052?IMeNsC8DU$TLqFKVJ$#t| zTY#Y$Y70JaiC7>2c{B(=V3ONdVUIl+G5KJn0AWw?gVUIyRD59=Voetc#CceW;joH5 zn1z`*p;7Ha3%=k6-Ny_<&YN8oiV;%`LZU>~;0=->b&bslrr?u-pbd`T1_>b#9@AYU zp<98`BMt-&hTtfoTR@$IC#s+}i3d%|h#}UT#swBChZeS& zkFcH;QXw;9RTeg(cT`jA^+cqx1^ngWA+E$W?qdDn-#s{EG%+GE+8bMF1pun!(FKPQ z_?$Yl;{YMx&!JPj%my4VU`gB~5Xj3qv|~T+qinDfqP^479Y;Q(gi4eIXF$dOx|HBS zG|N`(L$s~MJcQ7QeBL@BWJ-X?Ixr+btcyAT#)#~Lv^?L4=tqQ!q(JOUVi@BEF$5Sb zhX?h9Wc9-rDT`zHnoa5&)g%Y9v4u!P9~8mY8a@ZH>4Yl{MNu$DOyq-3>;v2JB(a@? zv}BT1BE(6?7KEh+N~s4@9woI+iaylDKEMb(0NX&|!xBwpPgvwuWaLIFWF*=ZNK6P; zj)`1$K6HTI$4FUS@7C z(SYS-UieyQk_Shi<~1$LIwEJCHCJ*z9Xqg4|M(VjO6NMJ%eqYGb#jx=cp!3~(rkSk z=1tpJR3~ru)6xNw znmQ>u44s;~>6^kS{9qS`&gqJ>!;7xtoq}DQ@@bT&LkX||c(4N$5GoXuKwOjn6nFq; z04o2*oLS9XpGspdDhrgrZLP%x5bC0? zPN5nqqADsvu4R$>L;~UsHnmy6#445UMH*;s;Yt!p$|S!*bJ-w zJ%AJ@#yg~hAY<*its;!H)>*qoY{;Ugyov^3cn!Tt*ldo?J%CL+c!;v_YMm{td(NzWJ}hnB ztjOxDXb`Fa9E1m$E4m&;#-0hRYHUvsZBG~g3m9sv7Hy#(?Ll0CsT!)6tV5zg0jiEG zXn^d_!fD6>D9MJ#`hkYBLBRfDMq0%MHf>OAj)qAjBzUw$L*$84)I?J}#ZHVyW#9;J zoCHUv(L&HIWJm->SVT#j#E9sFhZJr_c*s;#1-OoeVKAjt!Y$xtttv9OM!{3 zj0yiDBBc;Y5FW~Z*oV^~i386Em*t|XyjIDI3L2710!K>!?o|N)$c=D?j&u%)*b3>Y zFlfx~(W-9JCJgLygbYJ~?NY4MK1{jZZpPj)6!>fn8|pgfaPL|n@;HV%7;#=8F-1*H z663`ZBb*a&jTARA6GL(GT=5Z8aTY7_7JIS(6@PIQgYg)PaT#MVX?TZqy;;1v-)Hc` zIXnO_)B}>;#enXe%e_oR5R|4C34cMJ;Bk!E#mwuBOzdpp>>Q`!>`fhc3?XmM=mbsa z@XYMZ5$QaP>G%%tz|Z43N8-2+3O(f5sH*Q6&kCC|SvRxe%wZ8x6J4IuBOO#sxD$Q@O=rPoN&M zQ4vG^vMIN!MPY4Fyf7^9^6L_Gt$GIkEf@3*n=8;BYOM~CD|?p}_H&uS1D?!la<1>* z@-y4)P+P%P=Wy2UEY|)Ku4`Z8+6nn^ebB|RWr24QgtpvfmlfN zgGF2Ul5bfvFIk_pSwk;cueDlhuUmI7T#s*B({)?d^;2(i*!9O{*A2DPMKH7?E+8`>JB75H(}>G<($;dPNkCWwuzlPns#VQ6EQwP2Wp4 z_2@peIz;s?Pc=a!gjUBg6s&UpR=al6QZ+i*E(?VvRp&8?uEta&V5oMWfyUfBek z8<%svmC(J7n!7cdbdefSj-Li^5vT1DHhS~C8JlUJ_Rdc1)Dmh?0Ih6aEkVn!Y_r1; zAH;%R06T2$sb0W3Fs;Qxc!SsS&zkFk^Dfs?bbxPZFwR3?U*}(kM!E#`?=V#Hp-{?^*d7FEUF#&@Ay*#_m2LjvgdpQM?seVGz_{kEgy#_91)Q(I6xQK`B?E3Kkn6z;1cq?kCHms7w?iQ-WrbC!7G;A-ep)xHmPqhAOxs{qh zD!wO*lLZ3s!wy#WO5g)O*aN|i#|P2$L7;;`SVvK;MD~qiB8rA3wqgRmVqga~q^2^1 z*^;it?8iqeur_mcf9xVxv^?;qf6kT}_(MOKxXIf*m>R&YH#-sI#eLsA#8&EET=)C% zXj7jkT$Xoe=mX3CeA7Gq(?fmKOa0VSebrn2)nk3uYyH-9eb;-v)z@i>PDRasy}1;K zo=Pg(N64K%Y1q$}+nXq2(-zyir`ne(-H!#{pD6}*Bx_h50Kvh~OQ$@~XU=~8PiU&) zzh|bB1>=XtQwsh~MY(=D{%8<>Xk0#MRK93reuOAKfokiRg6ij^Cp)xbKE|BEEL{Ow zo$BXj=d&mO>8s;CaQBL)!%UKWN93Vtaz5@y$k=ETw$lDu3_o@*D@PnZTc86p_C)am zPVR4CekMOJvHbhMK3hzGEhQ+sm;p_s#0SZKwn9H<`2G>@{y6he`6GlGGzvdhqj;Qg z8Z~J2KR<>-X9NNu{h)phyOaLEe)R(c1c3ty7BqMeVM2xW&ZSfM5MsoE`}#?=coAbk zeh={Bd%!Q^y>kcb9XJOv;>M02Ev|d8uOLH*2r1I6m=Wi|ekcv@v{+A{x`Q=iHpD11 zXVQm0F{V3bPiaA?P^0SPX>n>)UiawXI|oxB(yB_uUR3GvYC@4DO{PtFmL)-b2LwJq zAaIBO8NGV{{X<7^-M@1;A(SO(cx+;UI^x7J!fu@oBZ?2En`zL9*zVmxk?kO+UJaqO#Cs3e73EyeG;qSF39>tP*PwCaQG<*A4G}SM zh{`j59&0@+^`=i1dtK*TI`q*NZL>b-`XOxD=V(7HkNZ5qfAt`=JLm3T>Kz*QnT}p~ zyznxDL$ia_$;>gKAUKdfBY=nl4jmRVfC2va{^5m43}5^w#)9Pk z*{4T;=mT)3cK)GDA$QKXQlNS6GZIN9nS@B6bJScDEPwnVXg7!6IUvY?@R3oSdwS$2 zwt?KC@d1B=ddN#KArKQkeI6j_0evun=bZf>Qj}3gAxeiMgBYUnAANcgD9tt11S?cg z!J4zqI|=%;%0UNGr=NZlG{}r|WE`kg8C`6(Pr=l@ZJ<)w6pd3)2l8s5<kTpDo*q zXv!+V+!e|T$^0kDC7Z<6R=}Q&a-eo-v=K)LbmY-TFz=~zNP@(z@kXi^)bpc03nd8A zf^zj1Mj78FSKf1b{86BFh1~YA(UxuYfM?C!abR`XZ4w@R>dfcUfuarc%1!(KG8WB6 z2Ws@uNJFmlP*FvlN2)Dj@+TdA2wT|MfoN`6K#SCA?A8x8)bKmTe%8<-1b_Yx#0?M1 zOhgQSZW;oki57^Rp*>6}Fgx+->q2&Xyl3lj`)M@Edw{LS9t4zppyz^&%f}2K5#Z%b z4EySc>tN6E=bm~Z>DVZC{^932g9ayvMhM=H`=7b%RtTPXnw^Jocna=TAf_1lJ0Bmd zZMN^R`*g`l1ndFpp~DAC90HdSFarYCEkfX&j1zJlcG(r$;ha7b-p8Iu0v#yw$txGA z_ru}FgAbd<4NeNFVkQ72tG?B1}NB(gc z`}OT_#0uW<1VRrZ9?^(@!CmbBff3r#?;uM|96RD65(LD9O7Wndm>lMg2PA4{Fq9#H z5dw?>Le=1q4mHG~H%wDU)gbh~bTDmcSA&3M07(!%3JnMX zX^a}wfsR5dq;u_Q#{=@QLEZ>N9b%&%LcFvbgcv6_2XNFoY6pS;ND5?oei5{kLd3+%ft<2FlvG^rZplmA(UTwuO{FD2l}QC|@*th0C?;`q%=am? zV6uE)GzS9FgFZl#3XR=6EvgfY8bqT6Nk>1Z#}I+K6e2MdOFXQ%%7cv4WYtueHKj>S zHGT6U+T_whx_MM=B0yyO7$`wNN|1is15{zWDS)<$MuiCf%|MO$6dxlKheS380uPc< zA%!-pM;cO)0(ooH3IxcV;Zd$}H3-RqwJ3C`bdZ{Sh(jKLRZMoIBMP!*K44-W{O}c2 zBI8FBf7-h({pOm8ofRq3!@Jllwz2m)tY(E1MX>O$J!Lt7$T*@7*Q!H!!;HkNBEng` zFw`kn-3LfSQn<=Ywrx^5hi-WrAcVZAvNOq~q09*ZbdG1WvZZZ7T#Jw=9^|?sTPi+# zT3X+5^hyB5QCT|o7llj~A&`Xtr9fLB(GDcLb(t!q{;JBrUUaY!C@ci(n=Bl)_O-F) zWoH>mkof9%zJ3L)b!eL3{g$&IoFVT6%-djv5Z18&V)+bulMCL#4%fNG^{qkD0o+T0 zc()MftuawTFoHlzQeo<0R$q9T@(NQRH}+~m)M$_%53(^jkRt@ps#dyk=&l)?YhIzo z8vLDnbRI3)l-dMxQ;6ibu@9KB*GMOXH!zPs06|0L(s90FG^&Z zk_IQ59@ol&fOwxa(bRZsDiB5IgV7J+1wRL}YQU6>yZSsQtIGmv@lvHMZhi=yKZIoz zZW+yc-j=He!saXkyUT*jPnhGEX)gO0Du*8b>P#G+4@kFqIL7|7!H#f;FkVz|~(wB}%yX_55bigVf>d0p!2_n49paWa4 z-G@IElilhdfC7$zZ$J9oiPno0nRYO^w(f9{F9h-Q&V@UBVhxNA!l9~g^oaQcU`QV{Gb*kI@ z0Yf)v-Bq42Lr)&R;EwssYpxD?{H830S9j%CpLuz=`|t>buM$0qg36%7pUAaqK2L^n`{?c$8IN?|ka)brymCr4#N^Ck1OFNiBIv{>?8Dq9>@VWY zAZW*v62eQwCzn%x=auP z4h+67FtF?kJB*|6RMbEuYY1m={>t$7$jk`;F6~@Ms8mKMLQuY9 z&>%W6AvSPzhVTj3K}_c19XvwnPQ*(*aF9Ij9r(c?-a#nPP~PmY`o^y@fM6ZeK?f2E z0@%on;AqIgZ{z4n4Gis$;D8{6MhDhG69wWyHZC$wG00T${KT&np9Ug!qdmODu)wEJ zUd|w>BmnCVp2V*4a8V$1Q6Ol?u)Yf(01F~^LfvdBT;A&;JVFK`g~N94fGp)k5HVR~ z3e=vFA7<}8-s6DY36q5Xv7{aV9pU3P%uyjoN!E5x(nKog?6J_c@qNH?8Qlqr#t|U^ z5;)j~qgW}E`texsu?=tQHsEI_)Tubw(RP&aAdGPfu}T_Ii5dkGPEhI?L5&x&5T}08 zFGhyULUQjQpc@kc8Zn9^Wy2#cGRF$c7pX89&2SODF`ecP0@U!FO0q7-K|un8lI#I|rjYh{!3^f19-6YG3QQyM<1Xh|FtPNz>0fNx%h z9}x2)kT1prf)_XfEu`dE3~acTXCBHYHM)y7Z8I(+;vX<-D3NC{KC|aKQ#nPWG(Uwk z@4+=;^EdTL=Sr_2yyzdmW`Z<=BS7=Tk`p{nu-<~?Z@dE6h{+xl#eg&>H_Hh!B@>gn zr!kX|+=%2l=Myh|WG{OpAN*4O%tJ5LF<)r6BL zltdu-VV$7=a8klZhuHH%JXA=%lE)ClL0$z(7333HF%&aHMIaBm4t}I)`+NuRGwnj+I%_ju{i>hQF`Y!K?@x9g|Ou=O!=3%k|CBuZ!VG<%8YNSo? zQzBUNYYKvk5{6l7=2h$=NR+8P-XR~@#Tze-PpPYb@L{@OMONTss5;G3D|J$35Fu(s zCs))AXRuBX5>U5OGzt}Ga->m(#2YuYAZRB~laW0RVi5xcd>#)&EX_`0wN#B#agL-+ zk%vxvL{&5}R!opit7IABv|q~1O^HNS55if+wAjeBIL-9S(lk)k^jZgIAIwc15Vcz! zW=}i+jaFwBL*i6dur*vq(jd51naU>~8mA!Op;+xiM$Qxh9zDI?|3NC()#wOVmXJJw`R_8|BH z@%{s4TXv9|#Zwc5WpjcN0}@?rwcK2G$7)t*tAb~H7HET3Xoq$zJ~n5p#uSNGX-^|< zCX0S%c4@uJi!PNkpcW%G&mgc?O1!5YwuWM(HY&6hY#%~w$JT7m7HxOTXaxiaQp8Hr z7H(UjFZN+ptu}5!qZucVGVInO2Gt<^wjkm`VDBMj?=~U;*Kot6Ruh+T8`p6k7jh&2 zS8_W;T_@LaFBfw&S93R)b34~_KNoaES9C|0bW7KCPZxDlS9MpHbz8UkT+el5S9WKY zc5BymV;3GKYfFevF=|CuZx?ujS9ph)c#F4XNvR*|;d{`7PK~v2^=7DM1$-XWc&pcX zuNQl>S9?3>H`bygP9h@mVlT{~F9Hx9`av(XSAEx)ecRW4M|YRh<8mrDA;@V}9_)Sd zSAX}HfBP3`g+)ya3OQ$UW2}V4$nIEX%zqb{fg9L?9~dW+XL(XBzJ3UQ{&sN-f|Se+ zf;-rQKNy7Hx4GtXsS4^Ls*1!EFN9Z^giFZjEX>=muGevzgA;{2<16hy< z`Ga>!Bo;PcnboSk7E<(Y;=w>C^k}nyPS6CftlYTSVlRp`h-508OHPa0g=xaO`?uyMGc;rNy*G`^SG2$6zMY?C_IVnu~I?9D;Q93m4!7Wht zpQkyWUqzZPKq{IUpcCSn`*}fXIy|n7O&MBfQzN1wAZ~bbQK4i#&!H-Y18tXC1B?3hvpaTLd`eT7%yjjp*9!n)(HyXkXsP z(ICfUUZr6pf?DKsM&PAf1SVa8cj|5xHq)EhEN|xJzaZF33 zI6D;&QLZIh&SX-Cs!cjAPRu1=j}?=qTkOnRP-NR=9~(nFyR|7B0xUb4Mf)H&dms!T zrUkmgrFpbBe8d%mpfMY`UmF5??}+{a#*^s9XI#c@yvAYw{Kj=W$9r$beZ0qgFUVtj z$Z34W>EXwP{K%7>$d|mxk^IS-+{kg<$(=k%?qR(JgtpNHz~5&b>XnLn(t`%Ia1Sg- zft!Fr$ZNJUfo6z-Ovr&$h#=8qZ-6L&(!4#_oI7!(g0|D5`(!b{htDktgPdoF6Mnb zb*^HH&H--zr;_jWe3qwqAlj*&=X*f3&qHVUBE24_2W&??vo(CPEd#^}BH1Cp#LF7A z2MMQ7T&pkD2cR`e7Bz)Pcwp`WD;Q@G|9$-&Rs5bA)*pxm(%+8s65Kk$y zT%uHJwJIt=VG0IgQ>9NTrBvzS3(}bW0hy{wB<`uBNdBY1Vy9gEA_~uIET!V@>r9ym z?d&%vW`3i72{1Wn;}gP`M9HBV{^J!_fU#uNV+opSiJ^p^l-7HfNXeHnDVTP0ojmGg zm&pmEcEnjA!wWjum%Xxcnrfu^LNt8rrG2sidL4Wk#ZMd|;u^LULLPX5si}9i;g|y9 z0Rc>uGuUAVc0=K5)pmHK9(DkWa#p5H3=bv$0tx#|BtukB^=lb3E3pQmhBGj-_-n!b zi&6tD3d0bxs>AZJHO{ijPhRvu_zTt5&`E=y8LYnTY^v(T*fN9*z-%(QMRwS+JzUkkQG#`VvZpVJ|=rP(2jo$TNK!@r-P zX9DfPU)gh7va6Y(6-4Z*)#c~@UInA5Lqp&tA~hhCmkf&71_Ff10N_Hf^wd)<2L_#PM$$}*t26t2SK}b?%uP54^MA=c=O)TfA3CS zy?FNL;is3so_u-w@9n$aj-S8&{`dVSV0#3uW6wViL{gY*3??N{R1HG#4_XHKLm^M+ zm{E{FybyE%Xaec;09_Fl#8*)Nr0t|rP7q9G(1QoW^Nu_Zw3XBY2dD(oXzSo4(M}2B z^Ujb&%C)0eK@wRcicEo2;y|LI*yD~;N_C-$_4sp6Bv1~;m5mXeDAbfJnq_5L=fpT; zjb6=F*Ijw-Mdg@(<)|4&=j^j!QusWOPC5_dZ?z{23zc}!`5^xvB{FOtg_7t8|*pHIvXvu*H$a7vDtPzt+v>HE08<+3}(+d zn5HYxgXl)+&s_&iNDu=5B^9I(h!E`KPgwCFHLGiY4J4vKIR40@iv{h2FPmQRf-gY< zhxh=&c9x}L#JQf6kHG{lW>Az)UK-^A6aVEg1OuPx6}<>J`X#0qr(E!gXC0(4#9$)& z7*8e@8gt1G2R2kZ5A4GoYwlDxPrXLc^^jz$d3C_PHusYkJY6zXE_WCs#j?6!zlPg7 z7u*H~P`*KN!8)}XKpQ)o3gouh?9>JUY%HwJ0&WD&eF5B|0%z*nu*J&Stzjpw_~MK= z?s&TUoa4_tdp_9Uh(W+dl~p6~)Rst3t zt~wTsp$un8!x}=s3_Gx)SJ=fG1n}b?_9)js+Jz5(*ux$NkQ@RrM3#Y|!ykdl(h&1! zlzCWj9=KXpN3!S@bsz{Ikr)gD*MXpX1W`rpLlZB|FpqkmE-8`o2R`h9kHvVgMq&KN z7|VFZoTx+pOZx!gK1k$_!Q2BMAMqm~1xX_EZO9|75lSTNA)+aA>Wg_?BKQV^0Ds&A z0cPOG>>NoDEj`R%m=q&I_$a&DsgaFtlpjF`2(?S%QI(gG+#KuZG6*cKiAh=7IdbS2 z5)p7Rt5IM->~W8ZNo8}R`3F8e^MJVgF;9%lpC>^nN@MDX-;{v^HYK&6+w>kLN0#up8yT0KnFSy9QJgsx7yXg>?3*v%`D?CZ~=9!!*Bi6tY}9|+S0nl zppN4QSxw7YuxZYxm;x+|T5Ay5()PA9hZs)T17V1YNq!;E#S(j<($OE_KK28hiNgAFGQJdDrU|1BmmUFC>Zo zEZIxn`u_8&B!RBtmUdkGnl>JJg(%qcagXoPmcRz~?{vvHq5i5@!4QtHgeOel3S0QX z7|yVUH_YJejS$=MVXd;q{T9OwanTFKbgfX#9Ikg zhZGW;kjRBIa&Y)25Hl~?D8=pXm*;H3=I-FRt)W*<=wXm{{6o71@k@d1;V=-+l&T?p z9G5k_=W%W(*hR?WIjlz)K-u`)oRVE+B7{Khqy|cx`wFrN>#4^IFI9! z@f?88Dy0Q7kHMG`ff_vk5*IkbM-SB3%LTS(Bdxbq&3tW(P7*nHiW}L7Ax^CpQd!WR&A-J(kP))5$R7e&M znmbsKPeWjZzhU;i^*O>Y|Hd+G6Z5DuVr_bl_#M>#r?!!Tj}8UKAL-CXtOa5Q%mMaf z8BriHJNnUx8)O}kIO|E<@gYW`@g4VY*kH(V53lYcYO9gQTgifQl@o;JfkhsR)Im*t zc(dmU)rT>Ojv%8CWXE33N2VLp^Sjos*di;YIQL8#y z3%c`O`gykoNm>(^<_@uwwCraG`$6=vE4287tgQpeJEkhllQR7QP9KOn9O@5!nEcrG zUdP_-mTyoET+Pt#8*p=T`F;Zzp1{Stj$%5X_>_J=r>_rzQlFpIyWaG#M}6#75Bu87 z-uASg4;1e)bsbJTBl>{*xE_!djUS{R7N>P$Ih7Q8S>{17JRC{!fk;cT!;pwXV?R(* z_IqTp9_BSW^H{@oPu3$6EMYM9N!qUK|KpH}>}X@}QIGAD=#JKHrTpJt{}GL5l6^uL zn4*5w*M8U+e^SAH_27Li5q=0VWwWF)RdGGMKs5x&egY#o^oM@`F2fH0zz;npA+z=& zMv@N`hyWFsO!LrKSF}=iCKd1^N%bH^%`<=fMQ1yTS_TWAa7kaIN9L?cr1ebXO z5i85aW<;oFyOD&Of`maPpS9~@QW_SJl)} z+UJ7=ku>5aQ)omGhDbn(NHW&+Jm?h@79tQDr5eYxiDl7=yafTB6IZTLiFk2|i^wUB zxEheyCOdNgDWN$gp^AvOF}^g3S>u5q$QrGKK!6ewZbFOy5MYajvT>SYWzK_C+G8mY zkaBU64y5=Xz2|TO0bF?#Dnh7F{)SJp1RL!lZQ!_1_y#H)#A)S79jJ(nA0`jHa1OkH zSvK^02jLFzfB!Q#u22k<^DkgMtx0 zb22Hjk$3VAjjllmszv10gREV3bTXJ&H&$8Hti5vptVT zZ^?EOW&;$JXJp@4DLCjR_KLXDu!KZhF^+?XSgk4N~T_VreKPuVp^u*GNx_% zE8`+W=OR#cnH29*7LuY`5XVUY86x8lJ0Xe@v|C1!;(5#GB0W- zv1u_MDXEnCp%Lm84p}E8ny3pCp>FatIa#Pcb4rdvG)B`JNh1$S6BnV{GdY?RQmue7SbEL^eHecx+w2^TCM&>twGZ4mVH+Z8rXZde$vneSgDuk0}p>?Dm z7DtprP<5ISno~gn6KkJi5TfH2GI=`lb$zY48uz0<#>1cq13y+-SfM!(>qYMSqwJ1A-pgEblTN=4r4GX3+Bs{ud=)3ADX5C?P+ z3dEB$ubn17)_Q3g1cV-hK_Ikgg@Z06gh3{h4k(13%K>mKu|N2_!deKe5;@gQr|Mhj~*x2lC zORXVHBZsl9p-jxQTO3hALLp7mWKC;3NZRyCp)^-;8BPi}OXoCd?4VBY)n;ZRE26u( zoNG^DNwY`RtlasQI{UhpLze`BPzbV6zz1j(rD+$n4;i&l1mRI2K%pYiBRmIMM~X@?c%q^=DucUiitu z=EXqiwZS4RVeW-Dp-Ua|Rl`RbWe=P<`&+;O_P&F<8VJV2wn9?eD?Kla#7_LgP#ncl zjE&RM5mS7{Se(UL47*i)4qN=iU>wF`EMr|f#%6rRXq?6tR>o@F#%}z^a7tNhBcJj=AqII&#IxSY$n z%o?}6%f9@}y4=fDz&y;v%*w)C%*dR~oP5m6+|17G$jtoA(mc)7T+P;e&DfmH+Pux& z+|Azn&EOo);yljeT+Zfv&gh)Z>b%bE+|KU&&hQ-1@;uM0PICJXU$+M@=pFo2O9ZIyQ(W6L{DqYI7sne%W zqe`7hwW`&tShH%~%C)Q4uVBN99ZR;X*|TWVs$I*rt=qS7(BTJsF7~Q&clrs;G_YNsL1SUVDyU1CyX@==au)sW! z9hBElN+>J=#lyhVt4Xdq$NL<<(|YmsKF6A5yL0n$raNa(WIlhzLE1Z)uH^LU6_+=^ z_&j>Z?m_?c|CR?_pz7BwO0aWy;kE77uw&1zJ+M9fk-P8h*wL;$-gf)lLtI4d{L_y? z>)6A~Ki&yc&wvCaxL|Sf@bkbw_^4x&b|Im|8+jsKXB~AGacGf;=YS{@iYhvE4?ix+ zGtYD_nid~y>oKIxYZnxhPHOTcMB951>Qt7#|FoxnuNfea2SE;Lo_wysc4$F{8e{+qvAG99udn?o&;{qkmZL!H&;~_%NG{aq zqbI#XXj73sWRE}T=#ytU|LC)j8BUUG?n3aKvjaiu^wZC_39S>!KmSA$T{{Q-<4+{7 zLh#N#3tm{yK==4_;Xdv(B;JPx4P5X)2Uj#5KK}f3z^TyQn{RXy|6}k#?)3YBKWYjz z-9Gs0^Xx+W`U~)OMcyMaKcos2^2iW8tR%_jR4mXu=QLdN%{eRNbB*xmqwqiZJgd)e zyzMiPIyOImGeJ93EKt)=M@>+|3mZMqtQfs>z|;7EOt8pacZ{#T1 z|5MLDyqHb)KMem=D+KEhi=?g)1dD8tz(OvN0XNe3xU!8`j-`F^VUEzX1<@n==%SBC zI_ajLUOEJ-uiiR6sjD9Q>9eEGdh4~1p1bR~-!8lFv;%MZ>$}4)yza-ZuJAoCGu3TF z?mW=2xC0U0AH4$g!^@PW7O4;d=e*qH&kR9{AwKxB#?FQJpdWBQ59s6fJu22?4+4Kb zAZgt*l0Ojq@~a2^EHWJoWi3bM!w32p^uPGc4@B$08v^WMHIT|dE3-E z@?nMxA%GYDkmCLFw?CUy?pKTp76g8z$H-wWS${It9)W~8Lj@8Fwt@g43E2?P-G*wt zQO9y1c@9ZZvXYa8q$Mf2Nlj*wYMlh-Cx;VCQjRi`r{qm3QF+N#sxp( z?HmWVVN#yQkbc}lAk-7c7Wu)Oe(7c3f@l@@2Kt2R= z0BXwceHB!QJ38eMv=O8q;l#*v)E7TtJ^-8A{9igh6~2SCsY&lzNH=q&|BhGPD@W<@ zM>x@$5OaR%0a!}M1AYU6e=16#<{^+DnWY18piFakhzl2I(T%{ zMv@d;B9R9#&cTa#IL}E6na4k{6HEv!s2)3r$3D(+M1p|tWnT^JSj&1FelYNv*gHr& z$@l;Wpu?qm1gD@N@PJ>+P=N|0ltDMTkvDB|G;;-JT?rd8ly0j{{S=xy0GlC!+;y9Z zdeuVJ!C7@^P^AbN>`AQ(fgQ|LAe-&%Xa5RV!Ai7MakA(@Qp?%Z|3ZME25D2A6vbD+ zj?_^Sc~dt*Tad&;Kp%^BYeFX5T7ht?Gx@OEam>cszUs6#>4?^As*^{_{d6EdwGVcT zD%3&+30JbQ50<|Bxu-%^B=8VV9fiWngrMUeSK{nG{DCEn+Ldqx;YFSV;@|tG6CL}I z-bHqkw+F3*Q$jlvZVe)jeiYL;tr<@9276nMTC7zNa4>@j;$X%aq>b97?wiixTTb;R zM-YBwb9O^X>`d4o94?nI{{gK_V#me2+3;&M#bScU7I8i{F+o=B+X`Qpp})<@o7So1 z9yfSE#zm%voqO7Rz-YQEwD38^1Ld6@ZjVguuCma3knnDI|5t%xvw082=A}X*N9;X_ zBL_mfdph6?%ArPBftvZD>X#`ga3KkjNqts-x5wA>*WEXZ*3ffy6M< z=P*M-I8BgGD^`~h8Sy~Yxf_~E*uzaa0B7W}(1`Ns#uu3~aa3(V*5Eoq_3#HuR}Eqe zE2PyjMlwF$!R%%e7sprp;g24$o!uBW*{*U&2V(44&$`xUb1y{R zRN@XJC}>N@@&O|9TnKm>0$?`xJ7`^Iot)W7J<{V(*J2>3k3 zZH7GH=y}~vmd`2mV_k8aGRnEtDFXFv7rV@BGsxJpK5l^+o9VMHbKBJk;=_u2?Q|8$ zg6MtP2jjbFORqU<`<)X%G3(8^I+AvkMY$ufBaxHi5j&8Co(m){Q4py71uoxI2*|ne zopUO1-^-D)`ePoIR!Ykm(p937c748u06zviw4XcIx98Si{8Nq7w@MGy|8o4=^@Zev`6dDw&SkB-H#5qV)2!4ElUkX8jaXQ*wO{L1o91SW4G@$>&$#^L`3ZZ|T-B|Ce{y zbt8#nXQ_7^H&Pr%0vnjYIj|8Z>Ck};2RXwM8^jV+632QYVFvjG6|=VxU4;$`<2M;o z9K1FVHb`y3_EryAL`Bph$WKtU%|cDlDvTgW}` z0x!b04|li^sD=<(*oQmxb_CHb{a_D>|0qIsh=vLygvmFp$)9G9)i? zg&_GbH_@>U)JQmN)qY|nG6H3U1+fkZh9S;35W)eD?6Ni&(l!xNjvqsI2k{Qiu`oaf zhsTzV`@mM}@GU3PjnxM&^H^r&f{!x9kOHNR#}<)w2LZ-55NgOiS7VV5>2A5Dhyu}$ z4Ot`XU?KEK5cdd%7^5-Q*naEak90F7ZvS;M5I9uKH&RA}lJ7_u7jOaUunwZ9dd^rE z(3lZ1hZp2RfJvznPYH&x7nK^ZQ%}NT`+<>GX%+yo0|K&g7J+PbVFv!t4^`QfG+~x# zNtJ5Z5e8t3$mmqP!FX>u7Q)dRVp$Q^a~JxMDR-F@f0>r{1Y&`Cn24E}in*AK*_e*` zn2;Hnk~x`_S(z(g8GC7&nu!vnaTK2s8VCS@6w#TRSrMNp7Pt`|mopzklA5|P9Clfn zO_7(pk(n5A9L{7DyVVik!77Bw5vw8*yD1U9ITFR`6HBuc!HE>jk{;EB5P&jN8;B4_ z6`e_BmD!9KoOrsQ8{RjD#peGN4JqpW1m>jGmc2Hl-mX_(s&!ubYkhEW9(9-;W#f3VK3%L z5Ha&F0n;@?GdP9A5Xo5(hW|=HzL7B-6CoaRlREP@JOcqGaUAFRhJ@p=rGo5o*5U4kTUz#kDb0eE`M{PmiTGLEHcc-l} zP5TPD@Pt|W^i5GntmM=X9M*-w1tIIRE-Zy_c%^hr@|^d?rwOsSMdDBY08swbg@bi` z359ML6;OHzwKXzP6&0|%Te}_xydd?tQHBw#8<5EHO`?{F9u>6;fqfp5?R~WTy}+5CPG`DwOAwx zsyZ}U0%2OD!ojv>!09Qh_J?#v7O*Dl!TkqYR9YRtm%JAt!Sn)PrPV#q%fcU~DSr3A z*Y%6q1qIyYQ{F|kZf3;aTehXgX6gmL$A-R^8DH*86p4FZ`K1o~rGF1ll>#0WZQzFQ?Ke8ulPEz!A#752F%BNuf;sf z%)HFboXoN z24d!%Hwf5;>kw?)*TZ%fo1o@uh3p&PmWKruZC|WV)#lIO#?F{bZr#Rv-*(V{M~S#} zZe@n06H(8?mQop(9RHHg`FzU6mdf(X$~5tBX(qk|G0V3iIlXeNC%tgFEFTUhjOy^V zp#L^;fE!DK8@PUp(>qN|J}tL*8`OI%)PpqS#$pV3Q(I-=NtP#Q$)?i(aILCD+sSslA!*lnLd#9=? zLNw1(*H1TO3SDX{%hxe{e`WoN!gtpjv2`tc9BgHfqpK-ZC&WGBc+yfGk>`0oC3>Vc z5Sq<-)8cu=5-6ITNH2XT-3qSdL&cEkda(BtiE9vbiY}6}dj?^9zvox#FpHI2dm!4Pk!W+Xp$^0ijxFZ> z9fmh9Lne-jK2eM4p^LaU=f%hl#|VtlQUb$h=g5@j$rz@A!i=8mrdTY}2>(&1@^TQ_ z70e zkZ_ZbA*nDI8S0I@-} zz)ID9ncw{e?fJ+ys6MTOF_cAll&M|lhE89Iei2Q17gIUz9g*%#x#aVWUrC9TPKBLJ zs_sO=o#kE;WLXz%Sy2Aq%qDej}@*7 z9|bPxx1kzLUD2?4^EnamKTi?3sT@?w5yuIiQYsxy4-ro45K9jdQ@<073LMR;9_+E; zW=frjVx1z9A6qH(IDzj>T_6KilP$xf;|VS0Ng?Rz)fy4?Cqm+E^7I~|r3yj!3vr(v zV)ricLMlSOO*uzzewvMYAkpVqPqhH{pnMe zFyy|K`q+KM*si9(NayT9RCli+zjrSO#_UMZVnlc6IwqWV?jeMvOPd0PDD~XMi173= z{Fm=%LVXq8p4*31=>w)tH_C)y7OmQd3ma~Q*lsLX!V+oP#F@~azrGLB};bDFK1q=FO=wl6DQz0RL;&rdP9$eVR6uoDeSTMooF$ zV2SjMA2*H;0&?WanICuloL=Wet3x}tCM>B2!V6tgW$db30r3+eDGN*KXwed z2ScME>gNG{?5XD-vLL9(9t7$sC_k{|nJ1(ZK@^ch6YGN@q<`?4Ypn`*#PA;%LmaV0 zvetRPpL!6mCoY}fvL})xDckU$4k0ri9elvdag) z1d7ZFb37*!d+;&nvApIXX&yh}S+h+qX)N+aI{)p&^B+A?RFTC8T!cWd8S6t*NhY0y z;2!)yMDx%)^TaV!QAhmlN_JUhm0h-3XQho6+GDA`)>>q>bqm{Voju3fZn=FHTye{tmfUdF z%}E^=&p7~2Qs=dAQ_A|ehpqnt{RaVe`oR<;0_lk;AG#{~XC9B#DM_LYAAk@ngHMX| zfqW7=0OB=2ObFn@szRVLNip)6)Q~h3F`_&I2pX--J$NfQD&BBDc;*`s&P zQJAZ9%-|XVujz$5Zq0UMK{Qouy*sy8CE8oH&GJJvqQ3J!EwyzvvwQH5h?To>#~+9M zad~(-hnILF$2?|x37bbzeIwf8oCib)R3Zl2n)xzSa~2gwd#%H zJi@pP*3gDGd>lL|0x2BM>pnd62s-{@5A^NBAH8WALf*j-*GYsIRZ|S6gcvY%?1Mj{ z8qQTvgdYN3#e(beh&=j%Fp&uCEfLe-07q58Ev_Sr5eZO!geDO)Jiuar*8n@sbGwx z7zWO#j(3!ZJsyw~r9i}!eC%N?OT`&hA?|Le>YEFNwL*xX@HDAPh%Q;^8etv|3Tu%e zMrat3_B3-l?nzI1ocWz;hX1FU<9X&a&y!7VQnQ=kfyg@SQIJS1N|vMg;m5$$lzkwG zX`O21+9cu+cVdi@xqFkS-snpF4CjJhv|bqD6_0nw18GkCnjvw-#*^*yNpcikBkSRh zI`PwzqZ}6SzBn9wyu+g(1>?||ho@FOAWIzmC`c)zKTl#50{%mZNK)$2kVd4Xpd4sH z4@%0fQEH+UHKW3aVo`{c@tjAM6)m}9%U9*Hgb)#?z-)QTh(wiy#0(BPT2s4ZN@SV8 zOP9IWHCC~fHLPc?mRZw^)@-S@t!(`kT)PD}gAEagNUhghhc{Dx_~RWp*^$-mnUK>- zL?45FDPs~6Aowlpf&U+w9t3okkOv$fkQY?wOA))%!VoB-5uFbkGe%iO;r&pr%|WV7 z2-O7hx|`w^sT-u#2Os0Y(0H(fvk475e3cOJUVt5T+f3a)gE#UbPQ1K~DtKwL%Ndr^ zy7$E|+*;?4d6+Z5^hqaX`~#6EM#LZRgaAJ>34yG@Z$rjY2WK(zu$g`29uJ^cRg9Mp z0r4-O7~zR>DC<(N>Lc-56yhYgseqBK?_vsK%P zJEq`(^>{ue?*HvYBZ4R88QCM5t!{{O>(ZTFP$DX>OpRrnmvhL@rpIM1iT_(e;3(CY z^QG}_T%-;)`vy3`#9EtQWmN-!rUZ5tj(x|xXFgNL3^(g@UNbY`u2s$qW*Fn^910P1 zFoZ-T$&Z8X;U_=MNJ2ebSV8b1rGNCMLKd?JhcPR>`|!dH^Qeb}3BwPh-NUjd_6S80 z3zm@BNq4j3il#Zupv)q`ANN3j8JPGL91p7?`3N<~*aVk*H0et~PH?MVjg^W3I#A4Z zwq;n&qgNLj9_Q$XJzRb5eKdO?&o-`-BV=e)tC|_B7A z10Q5T3IFW&M}Q05VWeRJ2P1NU50;=e3{S7YBf<`ZD}2sR{bimp-EWR}+~b)E@MQ?y zHCEHb+7NIM#U%2*g6u=(nmU$nxzdk*Ja&fpSV>Dzf}w`IZnmtm$v!r&Oe+Q!))>LZ zIb;qNcm&rV_<+%)_qKEm9Mt7ABTM8E^q;L ztfRadk9_7ezj>VMl~jG@{5jQb<y!bKg)3+XOz+pjUhI5Y{?4a?k$9?V{ z*Z+>%Ys&NbJfQ9$X9j=t!@t5u{(p&Yd{L=Lb`?&3^nqdkfGa%DZV|KewZDCjB;75) z50!$rA2)s6UU9E_aVtG(Nk!65_--rE7+!;E(L z2Pj&Hn%I%YiX*SG2ZC^sc^JI#$($C98+4coBJ@HcEHfL72sR6i;RzNFWG^xtIRD4_ zsxNfIIN2QGpopre5PvWORa&qiyE4fjB87k#dpLkD%fjG;n|er$H$=n<#4aDCjC6Rc zuA(Z~u{nBa!$h>ikfRKK*aw)(6pdN8uOW~XyASg_q%YAFA(R^}w8T|pMZ)NnV2TwH zS`{6nFU6@d)Yu@u!3~LEIM6^12=Oi`2)H%OsG)1c{Q4`-!$cPIhjbXZen7B9!U!|i z9JP}-p!l|vQwN%xM6Xf_suP=`D2fY$366jWzlb0_0t&JCnsUU8`Z$avImE?ijK|Om z$q>V1)W^(u#q~-YyqQHbgB4+suiDVX4K$(McsNtRyyEyKZ1Sdvw5EsLCjW_q$cePb zip0o`yvUB!NRMQXXM&G>3C#LB1I zm0Ix?V1dMNniH~;D|A__w0tYIj4QSr7q@E5wUo=aq|3KF%XKjqu6UPti9D112z>dR zglI{7a+q@<80a~eb4Zv>V?EWdBa&1Z7^@ia$(fBAHFa9CB4i$D!;G@Qh_gwXonf0i zdYh>% zMcq_SdfA{3(ymDCo7T(?Uy4LtnoS50CK$3$u&BiK#4jC+!`}?hAR3|~I-lHNhu&nU6(lDF2NDp3J(B10X1a%07_- zQA+%&NSHXZfq7qEF%JtbMQ^1 z=*Ho?#>q;cX=}mEQm!ehjOHq?#(6GGnl7S3EaWaG)sGlC*l`doO0WfMus>2Du28j!d(6tXunhYo z4*QB<6&@)YvC2TQ9}7<`YeX8`vTyS;Wvx4Nh1kL%zid7^K;?Mmn}+ zyG)EIwNpzqKE;S_8#nEoH^r>CUkkQj`>}lkGZ8%5s|}`tTSJPAIAY}5gfl0ILyd>i z+Jh5DivwAYP$B*_S**>!b@hmmdxwAEg?kXflv@~{dq0?a3z^%-nv1)s)46c+x_$7u zi26IAF-DX?yVH^g!>f$MYY5*IKZmtix5ZqKo4m@qyu#?u%+{^VKw95LKNDP8QmI@7 zTt9tUiT5+!=#}2-rQYhb-s{EQ?A6}w<=*b~-tPrpQDHz-4d3!L-}9|M51crG{D=;` zGx9}B;zeKFLtgl;4;7r>{Ix$C6vh(ZT}J#P_ElT<0$?_DUE9;&)05rg#Rvy^i^Ig4 zAi)Rri$au`LR@38E6mjd=HPw{L&^wL8aqRvP@xchoX_px%@bV+s3V+JxoyJ}1TzpB zo(Dec4NW-!KorCj=3&TN#9VB|N90kfWR(pDzQyg~j$2`|6R0t<)d@?j4BaFDY6nw{ z$t1?&Kx5IUdePLN#R1+Wk6BXg6wf*2VNNRc?c!UJPl?z{AnrA-n5*LTVZ#A2L#x!$FQ-NLK96fCtOY) z=WHSxlTO+(;*6-12YS%+%%k))=p=5>U<@IEWX**>AsTh)!2wq{fh{sDhC(5LzNr)+mh$^}wQ4vuRU8PJp(W(`)neJg0^;j3h>D;){{iM&ez0sdG zrX9UxvdrWrMdc?I_dh)`;*{>&DiENUv>;&FjX|Sb^lWepD<*SHLbw-Zq<0x(_Fw5d{m*Cw5E-yH|n9 z*MtouSYlYj;yUQ=;E8Rds;nj2STl`%vosU%?+#fz!!tF;;*@n`6hr`iXtug?k$1Zg zx`-*6Z8Vdr*+|r_I{mno zqv#axH_?5E!%7mU8$$`U9lWI-y?wc5@moHo49Sfk%DrOCt!y5r@*CP*%bO~4UE?Z` zCBe=N(*3X1nZ}G4%=A_#bapTTPd5S`kaSN60+jf4P@gbcha6OI9ACc-RksW- zBO$aPPL_RCNQPp5Sej`dJqIc@KCFgtZ|Pjy1f z3`4wjxPf5|_uRF+!w1O2&twUEXp1O_Qq+IkLY%f2>5VM_BA4R z%n){tTW_4YRsV^&u(fFT-2G>Kw|EDH16^O3SO@jqP=`$ib!vx$ZTI(#2lf0|hg|>n zh#2^AQhA9ed0CG-j)#L;FN}~FiIQl%l*lJCOcsMZ5*oOdp z2Lg781OGTk2Q`R;pXhdV!2R66m6n$X;vfFHPl(@N`&)+qPgetVKnLURdz2}ym6=S( zUAGD=Ae+G%PpmSf*SYE z@uaox8`5-41{K z^#5K2eD6U&pM)1PZtVCm;WJ!%4P43p6`yoPy>?Hms43uKMbL-X-y_kHRR-8G_JZS3f;_-)lDY84~ z{T%M@MISL5o8cT3Vp=dZ4?EU(?=Vvh>=Mv+6EnM z#^v=;O3O7zQI65EwN5?$@WkVd5d61cR8J+z96s+j`J_$K<<#Cu_&ktKIu9_&t)~|P=OBP%kw+4Sppp!7%GIYQb?4qi z?tC>5coeM)nXK~Aid&{@!4#iSisf_|jlmN3Pn>)zyDYQKI{PfN(O!m-K zN%_e|Dr%nzJ zY{j#qv@y#(GtD*Id^2VY;Ty+99PSLAh$@o1^K4J;tQd;-B7Jm?jRLW)5l}CdQY7}! z^bd{d9EcBA|0q`RLkReD4+3WJ(=etA|9D_N_Atz#IzsMqk3IXGMKD+VP<2n457Bzg z4j09J&fIn1z1ZJ@U&ISlR@!wDUte9cjy;k5v)x9K!wLaD{Mcj90q6K5EY78yemd%@ zt6rfFIvdfhI0+hH^UwBu!lbUArONo#32%~h(QDg^Z_~kGE@sF2evY5uiq-l)6jzay3Gg#tE4dY@+G?tQxB!d87JjRy8;O3g# z+zT)D!VX>#E}SRfi{g%{&UJcGYB`CWpL`NKs39bG4{6=D8bYHyHnT?c!PlSg=_fJb z&H?rw63+SG~Gyd@Fi^LC|tCz!AmnzyRBqas37}1&uP4s<;Wg9cyi>Oz%{{1fyP4mt`4XRM$icN`XWE#ap zv%&fLNJnggo8wZ1DNZ5J!>D2vwU~EG=G2MA-v4qp4R07LV}(mTaN?Eg^mM1{vsGHu zVPe9#1p;L`%fae$mm+b6FMa`xV8Hp~z~GWG`+W#J00-bDGkJ!rRo7`iln@aicxW1t zu<Pgl`jvUnfL~oM#;qF=TVV4y%=cdnjahu&d&6BJd zO-6bj=LYnp?;NOa1v*EeNBiN2U}euuel(;l=(CgE)2dQ-&4Ec|WhwKjcwrt_m+cjj zg3yS<^(iHp|I;NWb@(Jl22+-{r0P|lIL>pO(XEo};t(P9K9wV@`G;Qx<+*I8s)c(Ymg36+z9Nhh&@E&?+~&*-hvdStZ{tk~qQ5-Eg(;`E|5Lm9Bk_ z-GeJ!-5Im@#Wk*#nZqb8D|b1JMgLFoHm8W@GFR7gqlk;OF8a|st95>Yo$M;T z@uA(0TL=9ew{%EL;O#Eo207T8_S3)q z_W$7fN29`+sbe|*_kSwgp8yV^=;fbi+)zQ}kfSXNIk_1x5Fi9bpalMqJHUelUZ4e{ z)C6uI2X>$bejo^jpa_m236@|}p~G^RAP2I;sE`H=5))-)(ap%93hq!klmH7r4?92s z4?;l+=tT)Yfd@PV4jLS1l>Zr^)!>~R+SQGQSIk3%U`l96VPy1CWvo$#SRrL#p%Ur| z4)P!ilt9yQ#Rc%-5OPNk`XCSrAw`rS8;S;V+`|s+0Qq&{oV3Fn;)M~OM5v$#J#54y zIU8~`VSU&GMHS0D=#3&(1{HorBR+-}O2!{8+Jr=6WK5zU+M%4JVGoYs{P5rfYy_4B z;SaJ!5T2n>fZ}K{M?RMTXfQUHDiTIIbP_49;WcI>X|SR+?g=b5hWRufIqgF( zc1H^enIW~q;owCbI{yYTZpJ(=h9yeNJ%%IA@Sp)aga@c01f1eSY~v30U@30IHg1Fg zuz(Mmp`fJUK|aI4PV_T0$+9QOFcT3D89CBm`WP zIoXun`J6}1)Md28QI=9neH2r=)IV6%cWjPSQUpiUhEo2O#f;QHl+;Pl(oM2dQ@&JE za%BhdWArfOMhav=s$oI$U_??xLQ;eQa3UM_B|riuVfus{LL_5=<3`W}WJV@rzJz2- zCS_LUWI_ODX8-19(!*t9=4V!BXj-ObZsur4=4o=KX_h8vvZiRdCTVtNYI-JYqGoNX zW^2kO1Tc?Z=!r-!hCVQrtL0)pkfh(71Hc4esGLmZF-A%_k4)i4EjbVWFjh=BR(;q{ zJs?2c5XnANj{VGAS)CQ!%w%6lmR4M6JD2&=Ddf@1d>gady=#Kg* zB?;+_68|ZX{-}{Asf-@!kS?i`wy02;)HxggT4u;^5(YUv058IxR+W)f{vEgLA1@^+CXXu@`x`7sTkPcF|m8 z+^JAJ40=76l=SJJR#%{67onz?p(eOIlxsh`5BP_f&h_Ll?_CJW@{8)_(s4kU&a zB#r1Ls{Um{ZsR(rVu&_oN0y*GkP|O7Tu2h4UQ{3gprb#uBPA~9;(X-}!~;719(nKs zgC?9j7D-FIM2mR}yYb5dWyes!R8lk&1Xx(Apv8vC7_~~*ht=4PfoqBR3S@XIhN()7 z&Hq@Zl4~HDYr~KjhryYAsF=@9tKHeFxYnf*ro%<@;7U{|hMwxIwjsfy>NSFBLjL0q zx}i@X>`6GLG{VE>#3F@UX)bA$pHd<(6xlwfkeUrRtU#7hRODvvoS}qQG`Dj=VpOkgfe20Z=mrw?CFjT6+u9v9pM!XuZxo)q; z?$h3y)M`}cf=%zE?M687Ln<%BUIg?eEZCxhUs{FRPR@!tsrT0C z_vUE$_UQNqY55}Q`8Fx|uCMsAFZsH!`9diKxI;^rD6=T^tq! zB!{jV3po~vrc6aqgu*0azO4^;JI-3Ub z+hg#Yy+v)lS#H0EFb7iOL@w+jqnR~0iDfVkHKJ0 z1QW)~Q82_1-AVN6#ZU~+U4+hY#XJyJW3=%H4_yJ{uHamrP1G?(-0{3MOjr2azXZ$~ zdnz1%AYpE8^h_wqaAL8jgC#@2V)kG+X7a-x=0f@)L;fXKSZocNflK1a6!RfJ&`tdo zi>{H1R)D}Kz_uq4=N@<`?Jykv_M;LicT*R>tmj*a#)O%{XEb4 zp@)=&N*x}>fncA%Op*Y9R1KVL}$naTtNTvFs(Lm zRa=NeW5#^}SpGa?SO1r&HbxxIVLX;Kgy7*0=pks#E|ZyoU_>#W^xyvhAX}@B0p#;S z)9QCP^Iks)6W%Xnm==@i!#&tFpETekQSM+zwq%oF1!CX@s{ia{XSQZ|Z9QnyXX~rJW5^HluaJ@Eqj(=xSAXgt$a^%HzgVRs*6eM<(?Ju+8(6E@XqPNYPds<(h=o!ePV>Ip^E zG(?NQ<#Uwt=%}i=aq9KR>3`oyoe~D1#)Y8%2a6tspy@?e zd%0eu#5s&KnrFJh3E2Ex8=+8{rX`9-ELfIBczpjjZD84!=?k>FM2kZJ16M0gTh^nvprvxTuS8)SegyH7l7Rh!^=x`7SEp>Ui= zbX&OP1i0zDs67Ow;CW1+PBS(x#qa!6NgTyx z3!B51?$u63cpS(<*}SZt$sv8pjl68^Ov}-1TZHZ+r#Qx-G0Ld%OEZSiK@Kk^ouGuV zC`KL2OdVIe%uVsU+N%@Sppn=8^wXsPP5|>u@KzxH2-^?wEe+TQkuzxapFjGizxuC# z2%?~2v;Pc@whJNv40Z+$!hZ?fU=9|>5_1Ks>OVlNgD{X_L4yYoCR}%p;W>N>Ax4xq zkzz%Q7cpkkxRGN=j~@r(Yj{o|$cgRF%`H z6*`n?(S#*fK!L)d1iOkClzJ%0PXDRW5)n&4kvb5n)}agU?by-IXj!vo(WV92PV7CB z6%mX)M~~ncPQs5$Zw?g;~CA83mk~7DaJ)1T}d44CFc`%RnJhBkn9bkC}C8qOkuryY$HP-`uJ)VAj`zCMm zlxWW%!glWna_hIL&OxA{+wPf(p#K6qXF!dx11iFmw7bv33o*>lC#4J+$O9-$Lv5h; zsH(~|_CP$yfTXhWszj>{y8i$vt2!HKofesDO``cU?6Jpp;;SvcityoOB6!Z(;UF_` zOXnYbj!d#3b^7Ti$b?$L$De-=cyOIa{`n^o{oc7pFudv^$ejcJdBC6U25M=aF!iaC zqjuQzCz6{8Qs!wpwka<#yU=vGvwkaJMD5TXVm~Hd}PZRae|+*@f5L zc-NhGUVk3A$4=UYr2j~t115@VUkLg!vMvWzi%8%DBde&Tyi)CKoiOpiCrqCDc|add z?}2R{H|s&bo_z?C)1FA&^oSk2?y;Cp)waB+o{TTec;k9H9!Q>fT3U3Vf2f0iO-f^) z`GHFlV&|NEbo&PZUiyobVv7eO$YzdVQ>SQ}UG3Uyvxq&h)?G*26~$a3u*$q&At+l| zf=XK(iVo8TaUIg$j!4;oY?6y1b^7)jaKHZ!T&}?hM_h2jM^gN7#v5|HamWiN{2a+6 zr~GowF|Ryv&Ox`l^UGE1G&-bZ>vtkv&Ut{BdK8?J%Y&4ri=cc|W#}K34pL|KsUCP> zU@ZMw8A=Fn|NpI>2lBC+##qHNdXSEFv`AFaaU-R?WNdj;U;}g2m6=3v zfoR*+hySk9mFN6XgB-NuBg+DhMDg%4sp|{`yA{-7wFS5U|cU?!ghIJxV(ZA>2&(2azor#zVzENA(_oO!m4c->|?GFi4X+}QiA9S=der@P76YzGmJ#Y-Uec?aM9~s z^_r(V%Z1N#=`&sT^k+W*xzB+16QBh>7eN5irbuA3GM2PRDT#Qrcb>xxqBPh*hSo-j zrqU%PBS|zpT9RNYq#ph_Ms#3h*T=avu63QOTqj4@y9$m`xci4aD2W+|R>U9F>5CT+BEvQ! zlOX$u8Uzjtkt$lmI@cQr8wcV>SO%;>NL8u&Hu3;~@okF7Lx@soXV!u=YG?H$2xcpC z#&tMFjSzsXW~q4)*g}=Jb}WyK_6UIwu||)%>J@9)LAQY%_X6x_jZzLMtM@DyG|9!F zhlF)pWK9H~z4h)!ROpX+FjTN5tO)&bshadbgdd?aNTj^Dvh=EBy-5q+@DQ??B>xWN z9uN3UqtcsO(VP{Ro+ZdimE*LEB_1HL=4PX?oz+)7Sxr?0a;&PLCmk&=Bz8}V;>p2tfcp z?qLtVmLx9s=*>J9byR|&17Dol5|eTHWS`x}$1ypnJ&FiJ-=z;_|M1R)2Z8{9+yen- z;75aR3EF{}l(F1xQ*#*X7_FUSA4%Rv&0<-QyWry*#D86w)K6A ze2{l&%1!v-iCg6I*tk5XPZoQ?J_ZErkvvv4Rr29M;Bf$a9O!rG1TXtQ zY@7`u5@zqn*rm)NrTF6}WZSfwoXpEv|1oaWq}zMMc632%8>?%NDccEA2ff#QYk?2k zBNw=UI@ZBlS`(b%^vShJ_#toJI?1ICxA?^|en$gV1T12)cg8_(6t?WZErB&jOHFJB zfAoXA^+7l*Vb02Dhn(g$=ZFDt^y(frM9wz%xlcsW5R-!>QXhY+J`%(#))DTaKX>}m zp&oUqPn{+wgvZsf4v$(=o$Foq`q#l8cCnA0>}5Cm+0mYMwc95ing7O2+owKWg0KSt z&=NS^?QRjevkLAj>HB2ucgA&i^nZT*1>rqf+)t6}Yh?c!$^S(9k0Q)KFvP?=?oTmN&myvq zV(PCjzONz{FfUrj3>b?aPznO{A#n_%9sa?+=r6w#kc-ZtAOGs19`eD99PltEA_Mu# zn9d=>#sdhTFY>^TBh(@Cl<%z4;rJ+z!f?>~DlRqxFf#^Cr{)hKf@3&}qaun>RV?CT z`iJ-S!2=Cq3e5sJj^haV0!|LX3Ju}_4+0F!0t;R5`aWU^ErJYb&kQw!7w&-`MB;nI zFev6w(9*{UDIy7{g9-1@35jU59w6~{zzhhH5W^(zq-F$D3IxducUnjfmvABmu@EWn zAMy?z`oYZVLkEzL9o9hydhjPkBO!PYAx04hYXc2G$gFMy2L0nw1Y{y^12$T*BKm7z zq>u^=!V8N+X%df_I_o2NaS>S}1Si86GeQ;hj}3Jx82{HW2s=U~N}>*bf*K)U7Io$Y zPXZPZMk28B8nuxiP9@(Af_e;sANGM4ch49bOBW%4LHMg1FG)&PD_`mZ4x$es)ZzFh z?>Y7nAB{i;;UEV=5g#Y7B-R1?La`u95up^)APN%ss*NAvAo-F-RQPQ{@?=k3icn1D zQSM>d_F?NHLLTM>WDp7?^#f1hjU!RTQvL!=+(aKPrBYPoQs6-!rY#@vYqgx{U?v5( zY|FGN0!b1rA%t?b5(0gC?(^p4Nos@zN8)*;vLT-59i+`L^kYrhOTr{0Gi6gc-FCT5> zAsI3}XM*`=a3K|9YA$9VR^}gCCQ)4KYH(&z>cJimpi>^;^4e&HWF`_0Wn%JzYD(fh z^Ydl220x8PP$JC)A#`gtswE=99(3v-xDRLwBBTFir_F?>&fvneBw|D>Dx)LbE|Cgi+N39m$Uy4>L2ZOSt43*<1}~mQ-ij2Vz_dYG#%1JwPjR6ni8P5Tp00aQRKX<|U@VF)ct3-xAlW+38JQITpx zJ5)h3aLu|@Hu+3SA8TGzv_vsNu^?hphlU;E!7UKrhW;TQ_ND0RF({Ao9IzC7KJQjL zqe**%Bq2btHuXR=>Ciroe$FjCz!RJB5f1;@fgP3=0yq%}m=6xpK@H--DR@vF;1dq` zW(U=?J>_#W8j>Kg6+E2}0wPZh)BzpF6(a8E9ivESaJ7l{Gtdm8QGO93BIP;XHGeQ_ zUbW{RxF>+z0#qvGf4avlK`$QS?;!f?eCo>~`bHh((jt7v&>})&|E6O1!x*QB9tUC= zchMd7>!h-=CszhnfzftWHvK%z!AQ@MMD_#0v3fYRLRvyiaT6i-6(RaHiq1%WAb@`C zq;?A8XZ7cLI)h%>4I%LLUzavu2lja$mT&57?&jiX{R@BMRcW)QUMJ#d&kD72);=){ z%??6r7lUD8qi4eq^vscSAV6a;hhzUK;$kU+ZYj1()66#aVP_#=l=dgRj5DOn_IS!x zP>FJ8WyjFm79s?fz=pLpz*8S1uQTBD6XU@7A`b#&Q281XJiVh`$@N=HS3VoE6mRfa z2ZD4F;vwKsO&( zw?A07a3FR7i zj(_QgLo7v)=a>#m&g}O6ILTKL!i^!Ikdad2Zpp&LmwZz%ac3zX5E&vsDIqc$p{@^p z8&;B4D!uNPE>rLS;0SP~Y?Yd+sA_4GlgW%{>yEEajoH{%R|<{y*qY>GCW;ApOmrYz zd5&QjmuVM)52Th8Mb7_F;#du=jz!8|*SL+<=aGAJGza33AwrQEIU!Ezk_|$es}vom zBp=jaeAcxfP)0$};jgU7v7SSf-U6O^LVUZqAmkXGcM5W67d*OiV4gS~qIh$sxQeg1 z2LYOO2Lg=KQ$7>gbiX+IR<|U`n3FRpXZ5(4(e^eDpzY-0Y9YdS%c`P3s*_=gshaAI zd8wpj>ZJX+DG@@ac*>=$lTRa}h=NavF_xwiLZ`m>n&m8#=T|}4Zyid?WI2waCW`p% zQXA7vZ)#MN~BH=-`AbW0 zv+DSK@Hh3myN5oBvA;XBj7YXK{u<;uLj=QJl_95i9zjrHrr70ZsvAcP5C}Sm3=HVT5YNmLiQ6elI znkwRe(l2p{@863&P96{I+{gwq-CrC!)VVEWH>^P%wDGEwRBl%fbR=Ybi6t;(U+SC&?RY zK)-e%NDRHBnj$bPe7^A;%~oaAtGH9vP8PjkbuIp+J0#5Kr88Zu50`HU%)%o5AlfS- zM!gCJT{XbOFjK?ozEL=&V{?qFH3#; zoOb^U{U8!u)ZNj|B^=I!J;SSz*pas&-hm%ruw*aLm_wG@>r1+A{jg757Fp59LcLEo z9C#dk(qV&P_o7G!^YRL}nPpwuhkQ!Xy~6RlATkpn7}lF*gFGc~FV0i)zEhyB{EBBV z2l-|Oz2l$LK5|aE0)JLysrY zChbc>K1mhr(*BH52K7Q04bz%=+$rKWkCGSq5dDU<*0ZcPwya@{JLn%OmM$GSN6;P$ z?S`K|>T~r`aaGOO%*`ek9J@@)u=-waJ_rYm>U(eMN9)q@1wloEls7cY^ke9EQRV+x zo>DgcTOW&!XFq+ zsqbIi0HPfP2=>mU8wlYXK7n>ck2EQrtFzXJjXzRTBhA54ZOR}MsQuBgqZEZ^~a z;4j}fGY!}6%ej!@&73<48bnxgAUl2ka_)mS5Z-~F_||FU=yc#ber^4gg|IH4#YlD` zusipTVY_qgo>FxfcyQr?>ngg1JFwqAmJs6Y>$^`L!pd#`y)9`Er@wttAwVQ4_HkFi z{|GZAeHo!<&YnSwMi}oOf`)SGPKL0XWpAvZf1afoRxe+yWo4p`&Uqk3ix}^o{3voH zQ@kj-ugtd@!h_)rIc6WIuOGtVU?7 z*x)-T#>iuj4&mrykPiYWWRXT5iDZ&WLa2^EHZBQeb`)9|B|{%x83!CyZW*CG_|#KR zMF(<8W`piL@STs=t+>uP_OR6En+|yirkG`t8Rwlm=Ba0&e*Ot)gX-||Kx=^_Ic1qZ zP?#kUGakxiJk$9FBcxoyv!0M^syL5q40USgK#~$zsii!EYAS}PrpjuouBwQ@1Bty# zYpu54%4Mjy?#gSgzWxfVkh%s-Y_Y~3i)^yWF3W7Q&OQrmw9@}hOKr8*UW;v@=&X}p zw%&dVE|2ld3hB76va_I(=%N#DyUnIk0t?5n14X@1l<-~&P@? z9Sd6T1r4PG@4fl1tX1e1fMG}_Q>^i&JgDg8NkB5 zARCr7^eJb2uj_#63&qA>H#qw67r(=Fm8d_6kKPPI<^4b|O$L!Z4JNq5cxjR!iDZf$ z5Rphk36Dy3EBoB1w7zCA_xI@08oS;DadF3p$`_CZ-@~p9$>0BzU4{J zdC6;t^cZ4*tX+?Z+5=zKJfgDfIjDRMp@$d0=tci_ff0;i9Ag+EV8%11ksf699o0z3Il57gaO9&L*LX)Z`q7Sq#N!?TSx74P6b*me%my=NWVNl9VYL6(XP@Mrq4M?LO=wtCnD0rhB0>KKAIztkfV z5hUeBOsSSs{v%>d(uvPxrJc5XNh@+H<~@!%tAa$r9{9)!?Icu?i*WD(Tk|D8fSH*G zwDOg|SqB6WV2|{eWgqs41XhR$&kIShiAqc!*q-RbCJy9zmb;#7!dAt5^%Dxlg8)AP zy2Vg_?LQ(>hr<|p4u?WCq7P-LL?L=ni&p>iKN;odM#IxlkbbnGBMnJNNjlM!nzW=8 zO({!N+ER?Z^ra9`M=j5BfDdkIeGcNqIUc}^deE*Q=h&ZG&cQQ;7;@EtWOb`u-I_Wg*1xT}C_Nxy;Ns%? zkk!aYR0ofuyx|TGdTh5yCbhu8D2=i>G57G*1>Jk!<*6p7sV(*^w1yd6?Cw zWjl+nb(rn5BW!zB-&@?t4FeWaP-fq;Dg=uzz0!9CEF7f&MOX!Y2EXLbZSzI2O2 z5DF|p^zi@)prf!40c+;e^B0PIvpfF-;R|Ps3!mgJcdM?6*aI-aA$7QOAPLvu=yMaER|i@g#dC5Ta|M}0!C|kD-KT!V1|HLByj{nkdfCJ&hm>{6nfuO@Q3_-_N7&xLf{a0w~ zI1COOmz+8E!>MU8On6*Z-_eAaAvCsezaADahEj5XQA_fF4zj71k!VvimNAhZnd64M zO{*|&FIozeVE`M^HD)_7LnO?S1=p*=WILW`pNMABLSbtbhLdR#g2+7QQO}3mv!DA6 z=sxmU(0?X$p#NBCL?4=vgO>l}XzbCJNL*7%AC3@HI@&1n|k;| zzom|EkHaixf|d;mUVCC?(d-axt7Wtf);4I}j4yONk3)5a%$>U{Q1#-R z@2ej3q8h&r`3yr|&7h-Q*M7%kZ>-NtUXm}AyNe5QvuE_|7RI-$DGxQr-vbr)M0sG) zc5LM?P+$lkkJ{^~Y!v^g&5nW&s`!FkKq7$mrO#c^v(S&-Ob`GHCAkuUn3EkC27)~} z5Xt8d@4yyVQ5V3mLzEI5y0RS)z#8E39|6)75E2;_bQ_jo8YyytqVhni5q=IaAk;A$ zv@t`JVTGrm9jU<_QehQXp%q+lhN{to!IlsMb1+ZB8TV0yVdy_M#}G%66s(1LJ}8KP zasd~h4(q^l3Dt#zm|;LjBX+2II+7wJ0ug7$h?iI}k@X;L;xaIUi5XTiw&hwqa%x^j zCt>mrY={3LX5bI~Fm|5^i`QZRBWQyOB`~pgS_dN%1UDk9qI#o39ToQ=`Y=1VXpF~* zjLE2s%gBt)=#0+@jnOEL(@2fgXpPs1jSONgt%5?Yn2mljBkOW8;us<50xa9OBIpjR9SSI9nE$-+L@|Z0~00+mh4p>4Z4PlSGs5m6%JMs06*-;QsC5Nf9Ff5Uf4uTZ^ zc#sb$kax0>5b|ClQjsDukq>f_CK5bH(vi(lH6KYP?7%2S5F$as4j%#px1o>osFHoM zk$@tSMsg1cM=R-&68PYapK=u{p^-VclMTT(*bzB3$r(nuBs9hnO4%Uj5E8?OlngPG zd*%NpOi7UdNr_lFB37x9S{Wf`a5S~C5>u%r5$PZ}$sIu{9ZU0*X{lun$Pb=pUl`R8 z?U0HucX?*{Cmw<&aUhH$q7EN&lKqkniJ}pL36owKC}bHV`*AB*@l8zSAcQl0Hu)Zq zSxuHXN=z6NdN~k|$r7NcBz&_snwcH-pbwQIns^x@j9Db4DIqZ#n~HfMuo)q;*&w`d z5A<*_>g1ZhMg0G-fj5rIb;!*n1a8Ju^b10P}p z?63|xu#Y|hHk@IYU!#^uf}4Hvn>@0buEI9I!8VYmkhkM0objGN=ysFoRje7Bs;K`T z{)v)gHID*XBJKH*tdpHk0y`Iyo?U5)BeI~g`Jf|mFom(6D?*m{2?6ohAhrV@xr3kZ znV$o3L$$*gEWua}!4LZ&n%H@sRRRYU!WrsNk{&^$F=_-J0tY7vo-tY>g^`a}5}pWA zo`BJk4AG<9iI0o|2PU~iGE_kqltDCPK&630_pm^M!WIHoOS}MM>j0%fxrGt5CU&WD zoH17a)hX_v4qNI<|KOz!f;az>9!|m#w{;NjFcr6hz0xQ0XzJ;gKGCY8-%igo9cV!L8j**sdZ;_ z2;p)JvZxG#sOn)qodQt?`4CbimHvfWwq(;^a!Ogb=bsOSZ%yhmj9&BOJUy z65a$(bE!+bv{&r#5Bw06Kg$pRF_Ml)AIM zM6yUzv^0yfPg1y}@wp~@4+f|kDoai+J4?0n0H~|FH6;|!bhRYn9L9X)y{1?7;sH`U?Tu2?Qw#2kD>& zanLbSq7ERdCI3{UM7ptr*}w=4u`3AyAEE~8fDR4J5`(o?1JPF6v3~C{R_QW#jCTO` zqaz)|!OUe=d6^DA3$*&_5$W)1hmja3OhD(bxu3~)Is#R1<%XQcY>xL2a+P9hGeE-QA1}emIiNu^icO{%uQ-xG_dZHVL5Q{N< zUi=&>3ISHE#(xz|DwiEC><}w_NjA(?D6GS;bH++lC~C!AAN*CR*0q2tpoUC&1A$kr zkzz{x5RiHpWh`HVOjvB?RgIh(iHr~<{54rd$A*DjS=j#&pd4)R&{ufenKO~1G)2V` zCC3gjerK8;vHZjc5i6f*#|V*WnNb$;YZib-a-)n&y-X$$D}EocH6Z()aj=pf0s$Tp zB8CaEE1|&?^1vLs&Du;QiK4Julg$=q$M>~em)ptD^#IW|UDUxu^0@b&(sxps(5K^TNIl@bLs(J95P-xyk8O0&jaz#-L(_@ z&^I7)p6MW54PtuwvC#=i#4ZfN|7D;&tU5EtUY*A@#FaCDOn5R)UK+PMY}}tKJrn*_ zx#+wp^Ti=5(pV~GLJ105UQL)7Qoc%!GzJHh|dYMfr-710&#oNcSiG>xw|7u9|D z)D5v8kMh$G5O}8CFVIDmizC#neA1aCWg2~WB>fN{?baDR(lZeWiBqD)p~atKz3_3J z@dealO`T2<+QG~YEV7a95D~nw9%3ON>k;EDWHUB2M%L7( zEDt-@fIW5?BGJr@mk)h2(AEb5N;$7)VNC<7+6)0ig5`kk?AmFZ+944?DQyoAkP#fj zpR@*1GqGj)@U7!Za)NOk3^B{^;bQOmAkQ}4oRLB%O%nx@(p=2e&QTc4-Q4eCVw`c_ zLiRK_eQqip-U(3_a=bWHCaOb?%zz=S#2f$GtlisPmfo5M+BKHnUX7xrJxmKB+8gI& z;V~1rEnm93TVn#-MK<6eER+WRY>P38a>$gVjp1PtWo0qjA>JU^4aH6QV%LowvWgBH zkq_#?#u&^H?ldDSCO8}daXl1YN=e@iX(U0)LW!LYiw(_<{n*vKu|saa2%*^++sy;f z^Qz>sG*AI+)`_ZjH0ae4z9KkTi$DU zPA-1V=9a$dWUl3}&WEe!<+C1t>L3q873zhNg={nIv`&?ao^hNJh~8`H5dI#>Md+Ln z=tQfp48^biz+IsSQHilBbX@MDz9rl_5tD5gAM(sANnF%y*__SfPyX1I9p#h_h(2c4cdEx)?_HA=~tne8R0X@&~X3pggXYgTx_1<;giKn<)UG-vr z^#c#<9k=yY?DCD8g&rrbAWrj7|K2r0Q!gK6E#I;uN^uQg_x7_6oiY#aP))ct8DlkZ z>44`of@pqF=o)wWq*@YH$mfc!y74f~2$cqWZ0;m#m@lVg0m#%atT)l?}7vew3I zT$bk$r6+p9zjk4zp&A-Y`&m=BPs-R|{q3D!T^ES4O57}g{GCb64*@#SKgKHRpKI4~ zu?xay^;U*g{zf0&SN;DR^Zgv1_c{-N{k;zm5Cjgq_n@6XcjxXwV0Z4_KnU&5xf{r@ zA4Gu#4?;+|5JEnO0@IzdH?ZG6i~{%lLpSgNK7k+~LKs;RLZox?Qkt}g5~IbG8WAdt z8ImSRlRh!7Y$@<1#CQC3LbP`-oxpeJA|>6))Fn&^Rj&#>2NnU*lwt>#-HB1&Ie7x# z#vRD+!2@;>)je%%7ca!Qa^VV$cTODye7sVcIk&E@Kz$bls)dksYgnsTwLa$D*>h(j zaYT=d%aWCWQZ!JKyp$Gp`=s#|>u+lt^)T^XIrB>^tWVpFMo~CTE5)?_9ml_0OH# zQP(K>i9UnpoPO-N=KzfQL2JH$@VSS%ydY4=pL6!P$DVy=LcpJU5HN$E|2ngeKa6;J z37-e}ace)i1Ul=Ud19QWMF`#+3?dWpK~cs0{!wZm${=8CpaBa!5TYUtL=dwEAN&h~ z4LkfWL>p;@V4eGR!V*7>+c+(GM?TNt&O5%Odw@FY1f|eI49C-t zM2Hr}sL}uQ6os@?fwD_!yY9Yo69Rn*#K=xO_2lYROJn6L$RXGJ6F&JcV>4LJa@=vn z8(maL#u)))vBVQo9H^du1mfp1i1O?#G9b0e^`AX)&6C{x(pC2{9b_|tH9_6QO*MFf zqb)Qz@P!Sdb?^m(%`4pnxZgP7_%}A=>`e}$(CX!EoqYcJCz3rC4fDBu;Mp~$cvgDA zpM9)MNj!)Wy)xp7D;8)TewgEM&4CUu=(BYG@dqN32Qt~S4Zp<5zK!O?$De-=2wFmW z-~@T2ck+SL$Ej$xnb9yCR8P=;`nmd^{km>XudJ_@uxfn7=8UnZVJ2%=iw?T!r}s%)!mu$q>u9*o0UWC`{Q=1ge)oBf?YQTrug$vjVa`X5A%N$Ar}0sl zZ>>{e+2yw(mY8CJat4qhC5un0y5^hxRy`%r zQ!W+v$|r4$_TFiX=N|+xx;%50UFFzgkm&+;*3Un7{8+ZzQip7@)#;lculEZc>(2Ee zf1rGPdLa4)C3_59fu>))V*MN3d|dzrP=E|e*Z>VU5FM~X9qMomZ4UTA2u4tX6NCUi zmJ}|4QBZ>$OjkOHX0{0i34;7s-%m=|maHU?gDV{230e3;GPw|jGo)b+ZFoZ*PVoOX zIfTe;3dTbq1`&YvKtRhPgh3%DF2f7nlnH;m#ICD=tT zhEa@TB;yTt7(^h*#$XvNV;fm09Ul$uiEd0HJm$B;ISvqLJJ}=0TIM|v(ouqa6lA&x zSx7`CQjv>fWFsB<$T1EMl9QxlB`tYLOlDG(o8)9CJ^4vchEkNHBxNa0c}i5KQkAP@ zWh*zR4w1Q1mb0W~Ep2&AT!s-IEi0O+Cde4XBjSb~! zM?Lyckn#{7^B|gxP$#@2)`~;*kdx~RmVy7d6gtfaH6Wo`d!)#_NTrLTnD zdznc-izfQHR=2z5EpI0z!`=p0xWm1xI!qK$;wD$Q%e5&2+{#?&MpwEZMecO1dtK~i zSG(KgZg;)=UGRqYsOVTnWyO15h{VH}VpK08*^%29zW1FrY;Pgqp^vdLHXS8kfy&qc z1pq^#1e_@W6g;pS{+f4!Sn68%(CbDzbxpw(l*l~VSd$C)w2gVxAct9q;X-=2sQd*m z3rcXr&RhV%2d+zi1x#QA4@AW=ej%3bv4b5{_rYRp2adTmVThc?YloFkJ^JybK-Qx% z{IUlx(6zEMS&fDuCL@*UC}Ig>d4pDVqn2lQ4|Lkn#Q{d~W7Piv;0s_R9s7OpV+zb- z385K=Sc>J23;7lx55x=)fELpxh9^t4r5|Cg&vU4Qn{k%&oKx1Y7rDIQ$Fb1M6nu0U zC;dXl&T_@;m@%9?la4?Zc))I^u}Gr1;AYubk$BEe(mYd@G9L=QZ@EVX+wsqrez?(F ztTY)fZNOhgu-9V@HU~2;O8^@{ARcJ*n*}0jhPZgt7=boM48Q^buQ=KPp0+?PKw<%- zcpU|Xf{D}Y89J-lGw(Px4q5$~#PIAKv8L>9{sGp}30h-w}F{+K?-qYnR!kLSKm%SWu&MK_`utyB?j z9aauLIg7eO;2p|YP3d*s~ROa6>L;;QC#Jdds^ z>4##huDVm71;u?ryu@@Qu|3&EZefztk@b=Ed$j+k9z?{}1M*C(_S}P|T!Q2CpDcYa ziOD7tlADpAD8;bSXapES)c*zUv^sddR+O;XdX7vWCcqJ%b)z2p$Q9zJX9F@oTB5V~2m>hy4?X z7K8|aI}{Ln4g?rM&lstaijm6sF`k$YIRU39qd)hXi39Y91YAHw^1ErPyJ}mry@QA- zgn+=~G;N~^HWNHivqC6PHYyabb;v@*OSPk*Cc_vBGgJpOq$V{q!!vZlHcZ1cOrJPp z!#VVtI;6up?3z5p!#&)OKIFqcd_y^e!$JQHL_j=5MTEm56O#j2uig7T2;hZtcmQ6g zhYYF;0x_G0AhMW9k^T4w3uBb2qrfNe3~<_rcGwhwkeLWkhw7u0ok$4yY76^_s83Wy zR)hdo6qGUXw+QhdpWqtQ0Wn|{iJyu(2q=s?Yc<}pi(*Md^4LY?;T4mkjDa#BX^e_rKQMbDtc&LEiskdLg$i)~!R;k(715DOM`!OtiN+(?I~AV+hYx6g2_tQbXD3?|C3 z41qXCnn=dC&^c>2jPd5HyDAm?z33j#5yjLNB0#$n^X#{s97SjrPbtyYo6%Fqh4 zp$u3QDgXjY$UrTh9KNHtK(efjq0}9tJjz3Pi1>+!0AWj75zD4(M~5hy3@S<;QID*c ziX8|ElG#g>F-*K1h)nYlfmqCq2ojlbin75aep!p2X#u!hL07vb(&g}FL?kt^<$OjcEkN$*CufjK~s6_o6 z8LvUHdy9#{YRm-l5+^Af$#_8YsIAeOGs=^p{j}#y$_S0-QHzw((;SE#g-9q+NE}VpYMW7X2)qRXQhp)BMJz;ZwL?Sf)@{{8Z{^l+ z^}}!l*KrlZawXSuO~iENLxd1Qd*DqD`qKRH2SOW&FnvjBTGM@4A0-<}LHW!FWlFEA zN>AOVHO3{beVN(kLmWErBz$;^QbOWA3Qv!I_$9UzAlOH~Eb zNlgjW`igN3iRk~N)sAgTfnZp{Oow=QfPI)R&PWJ(u#X5KnU~!e&cK|u;3tVlo*?nc znB|O+9aazEG;+HNW^2~b?6$sZR(9}0fwR)UnJ~t`S_<#;MVr8hksMj8gC1ub3xI?G$XyWo6p7kE3(j2`&yB~KDO`^@T$HWG zrC40eY*|rBl+pDF$4!gOup_wij6t&=(}7vfKoJlckiaxi3M>}Q-3fphiT5lcza!Qw zVZz!Nvx@&YGZ%9V!wWD^O9$+A&1Jnd0mHV9w9RJ3O*4S1B%<4tD547y!aczUey|5c z^9S|lPk}%OI7vF9*^?K678+r`qKiLAQI$=Jl*HwgOOcg)9F{2~?n?^lT>~zLEIhQ>_m3flgAmb1Z0g?NAoQ$QAHPxvJev|}e6&9|P z23A;7z1;v&Vf7#_Kq(f=u#e!h#r>G5;T76^OOrD(3A^n-2l+n<`4kP-5Eq`3HXS1m zAUAWv889w^bE}I2V*w8Um~W$2ZyVz>E}b(@WARPa8y&;+b=xpT zn$$&%ugMQa#^gs%+3TsDJ8ohQ&E=o@quRpE z*8Q}p@ed%bRlji?y*(O~vm3o2Wu}p3sA;GRxBzun2d=eaJiasD;~)~EshE18n!&|F zI_I;ppj(NwszOLyRtOx^v2V_y9%IRH)}TM-D0#3VEV?ZKG6R3;2e}O+fhK6HA|fMd z=Ypmw0{~+=9>WH!XEBPf{gBsnIi!Y)2VxFn2-1gIYb20vXpn-VQjSoPrf8L3X_o(P zX_tO!n2u?go@tuSCi24Qnr5x~Dx;mgq@H%8`%3AU-mm_`nYC?;i6m;A2B7u)+nm-Q zi_T{js;~@0XI|U2N7~9TDz@_iHxmLBv#MFMOk;%W^7v(=hju#U54RWmUpH8|7WH|C&@Tx*h) z>c`l#KI0cL0q8;d8AG!NM5|LpyH^ep>>M&}L_+N#B5VpeHpSYsv!x`^J zI;CSe0tXDJql|Va#aRT;tNZY+>$-2Drm!2kaH@<|_G1T65mAvj2ET1>iaW7g?7?HP zyE|$fwKl)wZXzGNF)KXlWm}QCQY)R(D6i7lgHkJ}(kq|xEU$7b?{Y2oaxVXJF%NUf z!@UWgTlC%u-)jpmp$PYWihEy)IJWpT+aBw5WGPW%=El2 zbQM&KckI#_jG1g9bsNM%ry?m)vBZa@1|6a-Yjxx}X?5Aw6c!rGj| zDvWI?gjO(|F)ysb#-?y=ZC7?(S3(q5Za3F%SJ!VxS8YecZTEI_2lsOq_i)d4Hf+Q? z?cy5ZZ5*k@O9YsH@Q61@P`L&t5W&t-JQWo8iwRH1ZhR70T;QEOhg#&LMkDy)^TvY@ z$bSgNWF$t!m3WHx3CdtbZERh2Y(;}VST-E?Sm)}65`51UK}oIDkQE!n25SdmYOt9SsSyi4^+UW`!tw~ScL zj7oLL%9FLq&6G;9q>Scv3Z8UJr$l(6gnPR*O5A8nlt>h{ub>(Zmv&C!H{(p<>XTz1tY%{pFsXy4Hnn@ysp)H_#c z-Nbq{$7$d^PS9SUeia+y#0cX=hkR8|0B2jF5>Mxx(*get#bDXa{pe2lZqWanend4x z^pw-@KTlJR-gu7w?mtw-2Mhwe{t87}W(yeJWZnFkN@xjQIwB*~H{PohkzawW@_2cbYQ zATS-w3lK^`@gNXqiGv=X^c>0a;02f)aq2YqGpNC#5SBt%2b0}SpeilO8%b{~*RALv zbnW^zEZ4DQ>6s;)HtbrlV9&NK`&R8-wsqZ}MSE9n-nd@({_P7`ui(OP53aNK??I%E zE+3baM-lSBeGuGb%=pfrMKdD(@j7_Gp+S8QHbehLe6HR>h!xM-Gnfvx!G4xUNZP#MGyiYX=~5R6T!2o*Xom7tC~ zPN9UANV8>jkvc>cd1R4BBAJM$m3$%53W2Q(*{8#=fs@p19z%Z_0?J1 z7wggx%=6E=Dn0!(%~P8yka;6%nzYTo4t>zD4E3ybpiPSeD+KU-#8N*kV_Kj=cl)Oh zN${M*&!(+07e^*0;MB4eJpN)dBjqEwu_I3DPCnm9THMS)(U=$y~#)QtulTte&< zSFE}1x8t6>NoMSzJ8mSSgaAMH*z@K;q!;S4cf}oqjz0rxc>Lb?%v1e5wL>5o#Ve_^ z7(S7}3FtbDbK62`8XdlGe2Ws2_ zr+eVzA5{b3IRt1A0%k{SpE>^rs2b%x{qgT3{xjO|*yld@F{o~bOA!9P7e0f?kAC)x zpg^X@Jd{l99KEZS2nB*TlrXLz_P9r>YQr}OK;$3zXvhNy#Xtu_5CRDB$2|~W27c7g zcT&Wd2jazo5(unXR>Y!6*ntxkc%VP<;t`<62!$(VQHy5`Y9dKMKt=jf`a|q2@P%$jTu2 z@EA){Nl8m0rj@TupGf~cxtLjwawLYcA-0UUN|BWEnKb()1P+k5l%(SyjD$`UZy3Di z{o`^iJO?3xSRH@-;{fec2QOy{wRhwLo%;YA9{cG}j9uUY>R5-uX!p;9A~d18)8obZ zq|k>##$>PbP&mZ{(TmcFA3bCtMmy?Jbb;=SE3wEucCdqXel(>jg=jlWsz^YhD?BUh zs66mdk9s6fdEGICKl%}}nF6&n!uyBLI2zQWBGmv^WaGpzGB%__HL4;TCPrXNr)i;7 zs&|ZsDVZ2a59#9`Kh^3-$5)xGa+9oTT`ODL>ejcyHLh}(jEh+S+89m5U;Bn_~SjjT!@8&t*83A4J>Y`QG#yUFI&v(h{p zV-I2kI9xIgs*QsYNOD@M-mYk+H7rCNWK@L8$F?HL?Mm_q+gE9)C25r+Z(AbU5FHmp z#brry(KTG#J$J6rjjlo9;kbCBMxpF5f@+PRgNw04wLn13YFR5y@zSxmv$b715-7y6 zlBASy!pB!n(q2m91HL0$8g&^0AClbTznG(tRSB#TbX+8w{vAnwm8IX?8Q8ez1Ce^W z6Jh2~7&2z~R3#(X;EjEla_-IVO5`iV`kLgv?-hv|NW+f~=>tl;{fEn@8(fl@tRFYc zN6bu2Up)T;p}eX^v53^6+V37DK-_I@A&;Ei46j#nx5USP1bh-j9>5+4XxvJsT;*am zt8X`kn@&+!=8O%lBxznrJ@i531&R5=z?HM+)+}L*eyGB!u``D8{1{%`gC4`gRERTH zXpwmN0ai8%mbJ`fl_Yx6`Y6={&b9+HU>ehujO_T%QR6X#t0Zp@0)+DdpQ`%dBpJu)B_MFfU2e!Clq@%HRVxLXhEr)ywRc)ad0lN90|#im;rbP3H&8Xo^{kHFu@|3J4SB9 z_J6otnCHNiJMjTed9noP&t%>@sLr*b+vDg-9|_?R<9WNK{A%KX`pehN^uwk8eCq!o zB0mcFopmZ*Af@NI$x$y()fWPCeKI0vz4e zqy$7nLOmD{>13cjY+%Kh6_rsE>BJZl)k6uQM0DgsN0<#SFp>v?;9|g_$K1mVGEWMw zV8%({3uc`4A;1Hv#6MWsXb8mlIZ-!NQ1DO-N=Tt+Kw(PkKon)iKG*~JFcSYf%mX}G z&nA(f8CK6Gk)R2}$;2rk6aJjykwia)MjhT^BYBSrR*kek#3-fVKb+wghM^xx9_0nm z5G}^Bl|&2%Aq_^w5lW8@;vfR(;7HgZVn`wd9?%7rhX&RI2P(=3h9DqG^5~3Iy zgkWSL6}p6=Fycr=BNVbjJSY+ZI8!_v8&(~J0e#)43DGZRM>#H{Km?-o9N*qlBkuU$ zSPdK;umd~HW5>k-5QG;Tq=Op70aYxSIyfL4%tSiK+DIIvY#8JLLO}mO`rmj#fNH6M zI-o;Bn#7wxO*;fmHx*GMVPGeb1ZFs!g9(JmbO`!@q=9^sMy?9kKpA_~%>hJ;$uOcw zt`q&CBuQYT4Q-@kyd$G2&Un~Nbr6XmO&&{h&qkR9Q5wlGsl;>rlD+N9nL&WGag<5E z+Z8fM&V&#>bmc)P(#$27d?=VzB3o9@kW;n|E%JlB})p#UwY)F2qC!z{x z7K>RPL{i$3{}r5S5sCw{T0TZ(96&&jeb+(yUnE(iK~$$eROdm;8vYT=b&f=_*a|vq zBx+iweR0a=7!sBJm{EBX2Z;oDf}i6w0JK0$zlwUUXMyB{Wzd^M%#1+Dr<$cCe3m4K z5SdAsOw4rQW>`*D!iOT!+ITq5Z%qfv?8AbB8cCF#X`0CGRV7uLB{#L_T?%NU3@9~{ z1c`=U4~?a{WlEX-Qr8p*YswZki3>{f=XbiLt=K1iVv9S5%8gEnc(x>Yx@Sq~C&~aR z<@tt>_z3s}sDXN+iH2Qi{OEWd*Jq~6d9G-G$mjz+i#+gSBU8(@h zgfc{h66u42Q<_rfMnuAY4PSNHpFxz(M(}2ss^nK}Y0?PiOt@(s#p6g6>UbPks*RUw zJ!c$5C&6*2buuJ&PHICkHQ`7h=pZ-uuOzTmmgtJ2HN_;E?po1gjgF28UMIHqBI0ibziIVPvKL855PKM2r zPN0fxwC0Y+G2)@7L!vS#qe7>pGFj06qd{b<0YYG-avY|b7yjKzrzY$RxrR)&O-}xf zZtw;OVQ9XR%&TfBoP#dWP{3LgS#pcvZpV5k5+ZJ^;E_bzR;_&m zOWhpE4K?oPg2(yr>(-`6r(ms+TF8Y66MzT^o|P{Duv%?}pl-ve&pB|ddJLyLgiNc3 zZAz-G?{X~LD&@7V2Q+Tf7JgrLr3BzY;rL}n`TawXM$M9JhVae__nKKF`Yj%H*GNPv zbg0&Hj+dhp?Lls;(pKuyjs*NlDwDx)cPUw=zNe4gO4fQQuY})IG1!gGsMhB1s2~g9 z(#>WB3))uYrr1of_-E(p??{*nv{1~n=*)*kY2TsPqKK$SXz2WL8%~VC29s~az%%NsW9>Z(|S+{pv35ng|La#7X;hrs8|aF^JtG6aM`AA zrZ_P2BI&GJ-38CE5>+vPatey-?yfxX2m&$x_z^G{_li-;3K6d`cZ>-~D)Df3FtL?{ zqlg9=i|{&3%RIcpe>4Z_UA*Tbq(C6@CL@_ZXfh{LD*X~1A{QV^q)pVUjR-X{7t0L*iS96-X3&hFs8dQz69dQ1|4vT?JIy!Y@=PRI$C||8Fq6BL8}{H#NA{i9#t2u|o4GMF zN|;PEneajU2a$F2EJqHiRL&1QGb6T4Nu0CRaLt5u%`OYXH|sD2$VwMh%nxq_R!%cC z2lFuBGSKw$4W%|P^&+C9^4n0EArlCMhB z(E<(`0uEp#yYHh4StuiFc|{V^uGUfu*+M|As{z5nEnG^J5C$2c1__Nt&!Gps4@pl1 zI_k5RUiAqLgvY3m6z3)M-p%^7&sU=mTGx+fres;~PoOZ76G0L5lF~(x9kTewm(8Jy zS~2xl5B6x!DDgsIE85?J4)M@IS6wv_4sJDL1(2`+l+9R z&sH~501XiI#?W7bc5VarT}R?@b9FTv_tM0ePQkWpqag8~Lw2inT+h#3kGH2V_M&;V zY@UquT+d)Dc6uv{i!E-g$Z^Vi+A(^!F~;^APGt)lcJ(Nj@3dNXb+W;A7oZTeCp)U8 zid-Bx+%9q#8~{Ooti!<>frU?ag&Qq{H!XK{@<~`z)n%MA)v`c1Qz#9%eY9UYRqTiZ zQZ}7Z4VDwOq&PIaOjljbi>nfe z5*?68P6(YjP#KvsiVya5g>he zj%yQV^f(39_{@pOQLV`606X}|CqERq-P#=`CUuV+n|6mokp#4#ghbVqv>%nVCwsQ5Rj_Z& z|6#I1A-lHIkpcZ(vp49(&|mBRoK4{rjn$R90~NfB`@A0&w`&X#gdB$-yR*~#K>^N4 zIv2k`1~`rc!8eotjt^*C8GKMJe7`&V!$bVT2V2Bbe8pS*#bbQNYy8G@e8+qI$Af&x zi~PuYh&rq|$)kMAtNhBdyzV`2%fo!k%lyn|yZjkRxHL4)>-^61e9zO>rDa-+A+$iC zLq9OP&m(=(EB(^1lvIkgJ2QRMOa0VSy}DGN(4`9C3e!KFd)0gW*Mt4kFC!$r%%hJ4 zwTFG$tNq$DeQBNqZldX#vi;oCech8hnJ&(ql0=%@ec${2-)H>B8idQ5M41Er;Uj+H zXS?TGBldnLSSx8n%%)Hk?AMWuGf{5VI^zJm?CbvS^Zr2rkhS)H@C*O&-;O#g_QVr^@+<%HgUD?1 zHS`=Api7R|Mg>k_G|z4bAR`H|M!ExOQ1tVgg@eQme-&EKf!}ObbaEdgX|!W zj6@8J2nE8-1pI4^ML1RYYYbIg1cU+v1c3ty7BqOU-MM)O88&qI5MsJ>_8?ZYcoAbp zjT?~e@>46|Sm@rE?ECB_lK$}2W8eDho z-i{sZiZ*rn6lzqdQQIlKcW#|U1n0PNr8jVE*K=PD*27wGojqRvvI?BX@4-KO>ZVGh zI2CXIUcDOa?&V0*q~C(~_z5kd7)ssbU%AG{23I2VIME!ioqrB^$enZMgkYX?+!6I3JoN;%A$`Q+Y9E38Suei_OafC(e3(?{9ys~I zZy-kpjg&>{pipp~mpFS6f(R9(kRS^OGC;ALAmFgU3d@CJx1qkRC`E$knU~&q(Se}e zdhgAb-hKI{$6tN}&Uava@%^{peh(ISVS*br_+Nk@Ryg8>?Vb4IiZPa0d7ZA^oB0Fo})+1d1tl;^3|Vv>XF*LbMi^;9|U+IHtD6CMh|SU$rk8p zqiw_<(~()p?C$7=vS`P;lBItyZ0XaU&SB){P4^F7b|`9*YB!* z_TMLe{Bz=me}4P(zn^~e_y50s{L^0mGn1!t8~|E}DH%j~agGP@q8_1Z-~%IQkoS;9 zAXMWAS6X)vb+`(04|u@H96~kMwBrH!5Xb>Wcsrr}%^|Uh&qD_Ej&np}ApL+LK};wR z6snL`nyScq@N7g>cafv+EogaR>nLgLuU9bp%NVKfG2Db;OJzL?ehk9smJ!pixI%bcjhF zaF2ngLuWe6&Va<&OuFrGAjVa!Lc62dDTL7cgV9z<;;i@-cGn?75;VL1p1B%`e z0_$v2Lo<`mg7C2*|M;6nUBgWl3Z#z5JZ2>Fc|(4h5+XNA2Z>-}5^f#uc$Ng$Py(Y# zN^&xJ4C={Hb`w;FXb-1REhRku(Mr86@FJ#})j+gb5MDh0haid^2s%_s5OnP00q&fX ztO#P3b-ZUz0|h5n`@z9;*fE`A5fL{@(iVayimd~2t3w;|o~|%PorP&973+GAs^Zn3 z1^MfU0xOWgLLfCMRBJ|#GAp;j)jQHOh&&qm*nt?9D~SDQJ``)K&bIX|ksSz0;_^n* z9hM+G%AiC+%G#0g3AK782ujx|N8a!j0(`~FQN|aT%;saWQf)|rwg<|ePEx4{IUZ4m zXPxXKuQJ*FBor9q)Pq2EV;1As$2`Wc_B!mn5M%Fr-AiBi+E>2y)$e`xn_q_|${uiv zgl+MH)r*w%APA;xAj8_S6(aYa4@h7~UOU_6YD%vE2Qke7;_(i7)G2*+mlj+cq7r!ykt1iVafY6DK!E>!^o6ZV0%_;&>fLIb4QE3u6z17>uiJtvhbq zS9sERjT1S?J_uYRW6|+0EnX}{hu8&)ff{%Bc8O;RIF^|J6-G@*&GuBPs z@xEJ-I-d)al=N;TEtFk!@Z^~0HOeT389)H~&(MiR^rF?L=teWzeU6Saq~#~+N>dtt zmWH1|+(ETmJuWW>wunE3QxH;u?dv{|iGi=Sj~`5|Fqh;tGWOfe7S*Ta6uR%YmChfL=~J%s>+Hp5eJk!v&T zP|&y@!w$~C1d`e6jzAE80fmQh;K@U{@K8i(e}9}jx12|nuWHpVA>|-8Jg7XuYMXO# z)Mp1(2e(7GMTo@FHL*HqK0X@FTMPS5>83fGdtKbj|s(*Di?Y*vy-g2YbVx8$K;Q?An0MJ zK^YPy(imTQSuota-&cO>a%%dJdHwa1O(kz?f`h#^Wes*q&4}0L_=-qbvVol?G=<~Y!-#Aanw*LE1$IA?GJpzy>@2FXOPMyGD-%i_i!$V)YE-9qc4dl%-IZ&>x%-EY4v+ zgk)#VZ9lH!SJ);qh$Pn3EFUU`N!H;CRm$FQ4FY~?Q1&7Chz=iE=K!h@4c8$I*Q6lc zVo(+ja>kFO)G$ui&^CxEPF8LX>(Ej*B_I9-@dN@NWa%R4Pz=?q4ENy-g)I%=O!VLVOA4o184P$ADiG7w6cQpMQX(gkA}i7&FA^g&QX@B#BRkR~KN2KEQY1%` zBummHPf{Q{tUTaBAKbAbNA9!`Al>|t9c1#@`VDwgG9`5KFnDq$Y7#VRawdxrC=a42 z5knm`u^x>84#qGJo-z)M;2@Y%AoC(Xpo1PSk|h4jm3=%ZN z5+km%BiNE7)bb+SQY5kxFX*xe>CrCXftXx{{!#)*805?!QVl?yOvI^of9ReM=LK92V zEHPp-^&&N&v57n)GBaW}KO!16!VK0zNwx_s_aZh8qB3*lGigOL(dijIQyqDW9}3A= z!lxiwrRDH4I1A+*`k@}ChNIphE|l{jqSJiv?d1*x2pIDzIddb_;VBJMn9^Y|rP7$% z6EbU4Ifm0P;6i5}pw!^#fPN!5EJ8p3u0I{3cfg4*yKEp76e?tAHVU*M>VaAeLP7D< z!j5w)9CR)1lOt{uBQ!KFIrJiU;U4Ir5n;$en<7Q!sg4M=B6yls^kXW#DOs zcEAjFbVrl_WG3+@J1>;zNRDdW2u6WJMhikmdDIMibgcTp`2Ir&2$LPwK?mfsDI|j- z;`1Q1v_5z9KCe?WOyg!uV;2qLKJw!gAA(G&s61cP=0tJcTJEIiG%DT$C%r6BIif{gXDe#mpM08NWbRz^6IS4f)8nG<^btP7`O<(Lxr!#@{10o{TOmizs;EnlGZy@+# zA5h9VNlro26m}evO((EX;>kbYpfNpYFr#ue)PX6Z@;u?dJ+IVNqp~g5fiba^Ahuq)a5x1~`s7bk@tW);S4ag^DCHBm3KI$CAzKB?3?f!$ zrB-hL1zUBcRAT7I&NaezE&M9tM?AGxq)p$ZY3NAeO?X5^#Iq~@#$SPjO2XtjnM7J3 zHJg(bx#A4n)wz%^s})nx2dwjN?$A%fOmsz)TSd%#jhKxmC-Ngt~7uHbM#l$LG3 zrhCA&YrS<)Zf{4%6#{k!Ly__+AIDeGGb^SPJ)hDfVwEwo;%^CaDqnR(h&5OTH!u+Y z6Fq_Tsq&_neC8j3rmAj@XzWI?+{SUrMsm_-ZMH^mFz26SNp3jDB-#jcAYybzQKBLT zbxQXkV)wxW0)*mEjK&Qjbm?|qg?CE_B0Q=u_0=9|if!Owby{aNf{A%q$8`irYHH8K zdkDeS%vbY!jre;dyVID{#_@dW&=OLJoS9u4bW4C8YJ}?ALMs+vGbT7wiXm@gK z*NM2-at5dHGS_f&sB;zPa~sEL{#SFS1a~sG9(G4}OO1H7 zfYCxOEUfzAL_`utgWJY{8})|1ueRVeZ0Hxq_91!WWFRzVcLOPcwIbC-M|f@jcy{CA zDiA;oe9k>_* zrW6Pe6Ascr4dQ?%;!_C3e0UhYLA95CX8@YWzW*?ZcT zhJtfIOoLt-G}r9(A@#{kt*G$g)XOjk6>a${_@qA)LKFKmFjSclKiPfn!pY8MYh4jc z0U4w$IfpNZhZb3i0(pznfsha4iv-z)?&6TPN33`Q@aTviof+StIg7ggX^{U9R;W#w z{;HUbE{80!QPg=r;(^c{c}U$fNcIN;NZEc&xgtWjBKX;p!NQyNAzpNV z=b_r!pIG^J%r=c4qMM2H$D%`UJ?JSBt8c|PkK+IW&eJf3RdBPzkLwtYRhn{zl}p(Z zjRhj555n4>35a~|ov#C)Rt}@IDX;KDq`)owXl?N5uA&a$qD+cP-qd(|i=nKQj5w;P zy)M@Z<0_7Gn2KqdP;MWr+D``pN$#18W`&h~c@%4EpXdacq8QaiM#Vgq?|Rvl2ZWl@ z#FUA{*B)Rf4Wg*wb(xxJp85F?1L~%UBc^2kil&xYs#lP$Yg(YH zIWiV|xZ3eGLrSl|NvBzLK!~HSg>$X=40h=oxz3w?g&88w z%7_D+0R6dFmT|Y|u9fF>`b4alp9`uD;;R@U!U1c@gou|9!mI^?>F)Y{MJzXE?VwF8 zys<*dEO5dp%d<#)yfM2?%-fDYYnVm6xpY^*A)HRxTgBu5ip5FGt_ZN+=x)qN%o2Ir zvG|*tn9jXL48a+Kzk}H#0Q|u_7XKFCTpj)~QFgPR6x%yWd5 zq1>+>g3BAiA8uMa{x*r0I~|%k4ixjbN&329bw~|q0rN^E}xEdRmHV`Y5sL*3O~0bLoN=r7(A%+2kIAEQHY=abJR z*GlU=Gw1@(g|)i}!p{w&;|t>BW%^Y+o-pTlrD?jbuMM$rZP{Sz;WyF5zOA9c&Dj>b z+|F&U3whmy%iBD?A!0>*Q|+a~DPE7MEZ!8>3S#KN7B%e0=I5ONbhBNS~MfUez8ok=`J({;d6a9cpDB-r?`g z3_W56@zNpN-$5B&q$`IW?Kk@%Tn)n6e(5Hai)>ju&a=+fK^=4ekGa^3!5E}DKDzT< z4T9{9+jt-ZR|nPsj{`lrt&|{)ANfUIK0BWF9oHe?uIzfQ?sHA;sxHYm(VMsKpsw!e z?XKY+BJW^m@1!ou&!73q)Z>gfPG^qr;h$y*Em9xChT5?43F7Z!rvK>!O)+9pUPeYEv_W z#set>SGbS&>C_W1cfOtbVr;0Lqf4Jo9j=i$*t4Ttmp!{c9dUp-1QJIFgzMeQJ4}}z zCBpU!*>^{I-N-=l_V2@qV`P8+=<57KRwNJnwznudTs_aI;f zKQj7QQd_H(lgcDX+7J?5b$Y7@aoU_k8_Uwb!KsHV! z>O`b^2jZPK38V;Xr%w-rfQGKwwjuhRDx(}i6>%fXmm<4$r_SD4*4df zIO_NSj|0{74@HhS6sdIoyG5xJq>_U9Y`(-92P8v75=q>)m?|`HXJ9p{@WKr1fSwWJ zW%{st;6;3&de^~`v3b5`3MpGd>09%P}_x!94s3h$fgIAAr|%>HOmlPoEl1wbi5QDdvZn_R|m8 z_Z(@qh$4v%wntv$vvzd1C1x+k*#e2^KbYB#Cz$y7^UncQ{g%(&`^X*k*vXv}_)m%p zb(qgtnc?e3VkUPtN#2sCkAP3&3;{d`+>MXY>ZpAY(@taNGR!g$G;~v11GTt9t0(Oc z&79wyGh9474K(flHFtiRJ&69ic-2=YKKs$E&m6q&#yZ#Y&u_-_4+0Z`E_!p*PSm^4 zzY|)SL#X?Vxo=Z`+nG9TuU$Ig3YC2}+NYT=Qu_+!L)Qb?Pb4QD!H)YHKdn(%}uOrZ)pm=3?a z4TVxFAwL>e7aGDPC!SlO4pBJ69r{o@J^Y~%he*UC8u5sanPQ`0I*A^dcHhsKzzA@r`hdW2SPnJUQ;riA)3n zdf@OeJNohek4uCH|8~g5463M(hZIUY9*CwF0@8$ud}Na%DalG&@{-d*zypYe$xeFm zlb}3d9YaaVQkwFVs7$4FMybkHy7HBft7$i!egIGIdPE>n{5(8tI=`OIdbFdZdeL37vvg>FKj1kou06g&{0Y!*|6aWb3w ztjSJ4GRkb{T%l9uVMn!mv7MN-rz8uR&oJUMo84qV2~0Dc3v`p5r19oA!#Pfc7_^~3 zjMF`Kume`&^P*O42Sv*k&x-)%Z1hmbN6i+}i_`-*zOn}|qNNa~4bYJ))F(#!c~3j? z^O7?E#i&BPNl*ZF^8yn|2R0Yl8F3=iBR>^loPsvfrn>Pn9i5079uTm=O|_~*k;_Ep zQ6L4mr)&qX#{tg4E+OXBsgFFXA8%?&wYKx1>v-rB*NKRB zA_ic=HxD{mZ_8?pqQG2UG4sZyX%Oq?L0F*?!rYKoBN0V zJ>12M@7}|^J!-E)%F8+Qs<(9taR+sMrjO@JC%w{DNIR(O59{tXyZwzHex(Cnn9cVe z^`+f^l_n4Uimx4ilMYhct0H$)SibcA?gbIN-V8C=!Hj|Mb|q{x6~8yW7tS!8HeAWg zhDx=$1uX)Fk2GLI#Lk4=_yqPneRP{R1bR~z+D`fj-%@Tkq>@3 zDAe^B^{~X`wcIcZP4!Tebd-{hsa}s44J`Gk1!QXx-6PlB?FX!79jZ*%8csf|2Lf`{ zMQ3l?b$I%8gOsfgQIp!#sE(?qdR-s{0DIP&X6Zm~eQaG5iXH#p$25f!Z--EK+`cxq z5*3CZT3`Dip5D{8m;LQwr~0txAos76*Y9+TdyPvjt&mSER3tmZ;t+6hTv?lzp+5Pp z8;1gCGyctWc)ZF;>dX9&qz<*LTsAIWdCOl8bDGcmUUa0}oas=vxkub}jsq|gxW}CiFV67*Uese`TkrbUFQSzHk`AQRYzh-S zM-^h8K;+P!X?0cF5vzen%`_j`w$6ltl*AU+H^Xtz-pw*Ky61ye{@k@z4sej1z`gH? zuW9rgBKHi{U9oV-VC83Y`MYN-RfD(FIs8uc#W(&O64|`rBQKPjz+2wbA&Ps_QJB{; z{x_)CeBnFq6OVv?I*>;=Q*Q5g!q5HkfLt;Qf(%iMV?4A(bzL_*B4p@){Id&PM^d5u zWVl$FxA>ID)_Gw#tUvrH@IXL_`~fm|q<{U>tTc|!y91t`BZmlSS}{Y|B!kH70T6%= z$d^;yBNPeo0GPo(OX4wZ7X?Td z$^`)j(-;Ou9TK>104RWmw-u9TfDnLyr-6a)@j4txBP(cv6c~aRp%U-#H`AnmOY$K( zkr*+-6gcP=pkhHgI4>?3AHNqJA6SD6c!OGzgGTd&6qtPDln%AkO$jk^(Z_v9R)!D7 z64hsh7e`c{1x^p;9?v%?DF=S-1P^<1emazBP4XG;r4W8N5xn3pKcf)n@FWg_4jW-( z4D&1Pf*VS~T?80<^3V@QvL}Y36lOzEQlb(aF@lZ=0VgF8J2(-VcqFEQgFFH%m3WC% zQi>6@ccD0n12I*x!iWnqi;yTMFerF%(TZV`EvJ}!8fX^(tN0YUNQxz>7+m)c^EQk< zm0V}{F2$G+$B2t4=U$^2iBhO{zi5fUn2BeTidlG#$@oYb9H5#Kiug7%Md29SXkkOVo926<-!iI4@UkO!G(3+a#z>1PSaX0&4u z0ul-HRz!T*B#20FP!cDS;}HH3X?91AEO>Rf$ctb?Onfql5K?u^Bo7wycOXNHzUV6| z*&C$DXw{*L9jI6b5R<9#06ghGvY3;eNIUgVEAe7Mq3DTi)EC}(EJ67WGPzEsSdJa| zlqf}%f2R`rkdego07CTuHQ|#@n3C=Vl`T1i)KZoISE+a#XpTskb$*nN>adR3*N$bV z5cDX0P{4fi*q5i}j_BZIA+(P;88lJ1bWit~jv1Lc2bq&8nLbCEmuZ9)!`3iH4&=GIES`54zUlx<`(Odf-_ix2ji8!ID#Nzk~4^vnE^7b zHW<9gg-PO@)bTp&AQ3c@Fp_bcol%^)*@cWldJ1ElGstKzsS&<8lcmQL%lVVoxl%M4 z4-c>pg8_Upp(5l6p3JE=PB@)}p`C6So81YVG2))$DWB*#PH|;h3E^3R8HTT=WP!;J zBR3ERdI9W^TLE!4b5wV()UeVs*A21;fBx>bjEXiV!j4`O*ls5u=ukvIFL7Zh^Kd=Y0i;%;7iY1XgNLL#DwnVW6;?{4N{XV)m=J>Wg47`w(^8}v0-sAm zr7~I-Vw$B=34u78p5B?2L_;HCN~U+YWFv=<8j27*l^c1fPy#V!-ZWR~P^fJ9m#Otl zs?~jT$W$E~OlHtrS2Us?#SgebnjL`vp1L5e7K#Ib4u~>eeiNzyV=m)jsX`GfoziTv zf+|xvt*3_?=&>ShCltEN(`#d4FlYArijj7GX4(K@W!G9u0@J}UBuozW|u&$%94Ev~kDUT=ztCza5 zC&Z}}@eZ5gGX%sKAv+??Av>{JGy4!Y3uHDl^ggy(I{*eJ&yz#E2?5_jJ-gaBf3r9@ zE3-;dK2IZj$%?bn6Fv@pZz*v!R!>NP8iBsx?5n zRg82#Q8P7k#Wnd^v;#r4O%k^Mz>~F03mZqPvG4k|(BZZmD-;)S0qU?03!1Tc8@MUt zu`*P(w{%&?R5g+(xbY!hj7v+(R~-^XQIPexmfI8?WtS-wmAr(wz+?vg&<`OhxS%V# zmm5n4Ft8Pia_V%tuG<;!bR?$9FqG7}=)+F>a1Wy^xVgK#ulu{e8@$3hyu`~yGIdMfIk9#h5t7286KwGhrqM!l@flt$#cuq@a4bitM|&&R z8$oygLui91iiBFRgg?nPR~Q&)8_aU98#JjptA4(Nas zb*vHv@{Hr?5YlKC)QFZ^1C4^*dM7ayCfSL&kxnbe61JER7EH;qJj=9vL6+%_KB$w}b|P&dwP~>)ek#ul-Oy4TCPtwS@E{NHfE4PQlhNU>;@YOpH zDj_BzjCZwiE4hLeXF{!Pf|3sX(lE`x2V4&cyudLrzEV@UX@R!kJg(JoCVL~ni=z@e z3pgS{Jm6CmPfIum9n((z)bK05mBbH4xxP?+)mS~iQvFA!)-;D^)ma_ZV*S2bZAbmK zvOj3QW4+czY)#hL+tzR$*K$4AbY0hWeb;!M*LuCzeBIZ6{nvmU*n&OSgk9K%eb|Vd z*owW_jNRCd{n(Hl*^)iklwH}DecAXF5C9?h1ONg6001li0001v1L6Sy2>$>f2pmYT zpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m$`$B!UGiX2I@q{)*gQ>t9avZc$HFk{M` zNwcQSn>cgo+{v@2&!0ep3LQ$csL`WHlPX=xw5ijlP@_tnO0}xht5~yY-O9DA*RNp1 ziXBU~tl6_@)2dy|wyoQ@aO29IOSi7wyLj{J-OIPH-@kwZ3m#0ku;Igq6DwZKxUu8M zkRwZ;tQg(8b(Av?j`t2JI|L>_qr1piv(L|C)0JR>c_2F|u%VPtSOSWNfvQ=PTz9Vb zIeez~;`4p3HOY48=H*Ox&YsA8{)~gPcP?E?>eeeVcYYDN^pM_z{{QnWZz=Yst6{S! z!Or0Y*tcEBmQCCC!1wk?^1ioYN4wy9wbS1{#YNQ4Km81(4{^S!V^BQ>610vzy!>O_ zJp4TH4?Yf-v|UK(^j4lo=aEz*MITxe;yELVv|@`6-NTPd^2|dWj7OcQ)O@kE$B;U( zT~JUus?nEFZSg?>BospG$0C4#$rGVN>x`G6Ks%VBrI!EvGg?9Y%t+8Y8s=k9hXfvA z&jII%Nm7a+)uT^`A?a9Wbr!){k(_jj#AihNTWI2vUqQt+*VUy=)@(ovI$rkbYo z&ZA9n`j9>Tq@$0Z1f}!O0SB2erM&tu1kX974x~;${h*uBI+1i4iFEB8@Q*){&??Y7 z_f)81Jp{Jb@=!*udLk`{LjGzef-bF1G%H{1OCh@5Ow=> zsSmdcCA@IM+$nj_%ly3haKtZ%ED*;}#(a**0?l)d#zGTqv_eed2#-D&|C0~53o^Km zze7JzbjwJ?48hi2e@&3Z7*pM9(-_J8a?Kt3WBTc)kA^zxs;{0p1g^gxJ3Xzt zUi<2|vkrUgxu4#>}hd=#wi)QsefIY@`vvcgj9+99~L*Dm~_>G4<>M+?o>QO(V z8L)yQ8X)>0@DDdZKw$z&VF_9IfUAkhMl+;NB>(Jz4-I7p9`i8SJeCNL9IB9qE~Fp= zJ2=E5{)1Kg^B({S;wy}-1A`jmAOr|xoG?+5h(@#sbr|?E2dXcE0knzcngzLM5$SS} z>YP9*rzmPc;EsBXoNW3Cg<(N}k435+LP&=j1~rH|jy#7tAnC|SMpBZLWRN8zxyedq zk~p2z3_$xwoFl)W(}DLIKsOqQ~hs!XMl{&$W8_%JEcV@N;lArR~t#2;cLh^gp7 zkbIb}H~&zMLDVs?g1qkm(L;zaWz~)cC29Z)UOEfBmWYb6La9F{7l>ZK3a?hJwoZ&ql(4llZ05}lXXQlkvka2b} zJMlmtuLz>hKQfel0EIw_BAO|1qKcg}q=-BZ@{Z(e(+m$42uIZzq4(tr0_%i8JAI-# z7CbILc*LXUuC=VzKn_`fd{(m75hS20@*s>X7fR&8i*xWI9!$xlLgsPBUcyTt`|4Lg z$j7q^)nfpXy$Ib7fR9_7$?W|Sf) zGUjO5+Do_km89p01iDI;PpGLwuN)ExT;2IchaEJnX$|2&6Vlg`LKOl#ILE6li&@R) zRj+&vBCzx{(SeXQvxdd!K}w{nKmS7Dt^rM8L`tgIgZzVop_LVF=O;K|!Sn%xeQ9B7 zYMXR;3pUoNqaJl?RD$3qJ3kd<<(^fn+2E%`)J1AYm1+`rj3y zUJtOQ+%#(3bKq534HgK2<$AbFX6L{KdGJ48nvZ{U%fuoMac&E8A`cU!wIz<^i8ET` z56dIL3taHrbQ=*fWH=ui)+j;8=;D+L#Kt2t?u4IK;VJ2aaepkTbg$LjgW&PHKxI^y z^C+n<6BP$uDiGu~Pycytj&tzjJUluV&(6o2v!3g`=R5Z~&%+zYgkBa2`W{8S z2LWd!ujV!JqLd*1@ZLah*w$N0gu(+kCvSpg;EYP?0GyG>LB$zT6tk37nx=B5BV=kp z*TWx)T{WwOJh1tFh&T9nhpuua7^rCyO75nM(C$Q zJ?bHEWF4=LHG`GIFj)_T*2P72aWLIM^v(p!OA?Y$^*H8&w7XhN3Nu08tzBZ#2OX44 ztC|bKW?1_Bl>ldDz&$x|Q5O7^2VW(@1_bx8}w`n zks<4T6V21l(X$YZ)Y}ke8M-cnc5B6|}DO84MSbk0h0Yc`3Kq!Q}#|w9L z4_2py4*y|=Sg3_u$UOo0eFNc$4bg;8*cwqtgBr4OG~of?5-!3tiX|W}B32tL-~sf7 zcd`LGrihBlqKd32f%GPCl&66k2p1rz5F$uFqz3`yvpsqBGW&os1i~O)rz8LaiW1Ud zDj?b7lg>eBFpbqOmc%!3>yXY3Zm=PO?7xLnM zG5^^UH@Ok~aD=(iUO9P4Ji-E0;$i(UkU@DC0#2@wYZFY5q}`hb)cCLt7ZR;5Rgk>w%8)e$c;61dV4;r~gS z-6;{@ITGjj5Hdm|K(vjIF@V46FGUqEiBum+l5V>Jlgb$tGr49~;xAoN5C8K3iepA& zQYL2tE48#HZDJC&sS$r7o7WMW67ir95uqc2p$>s#EAe2Nad&>i5SHR)f#fWd@<+~? z5tX-}RMDRW@hKA}gzi(GrXqZ*VrZ^XG2p|UI5`yKX-*Ux5f-Wx9I6r?N*P!-W?Ket zltZG5RDs`e8=DE7+QJ?Z5{obCo`~6T{CROq*e;(}Fa%MN1QB|;v10n-hW^rw4}mz* z$VCdnF!SRwYBNR~nPdpDn*~9qN)u%zb21X5GU|9VAOkgaLo+tRVL7v6@&DN>aSAkK zV>M_~s7pg01OZL}CN)%}4rOyT456n3@i$%rHjX4loGPgU!KWf4s%}#;cba1Q`4ESS zHv*wIeB(D<12|{FIEoi-C8`))2Kw@q7m0$p9dkYa(3h-X;HJIE5}s?0fSWXM(rbF@FPES zB}Eo=a{V))6(>VGr>|Oy5NouCZPYFFik&YsMTY}M8?$MFsOXFcnPC>5pgIAxYLkQpwrZ!B)bW97hnlk8<%F=oc5mPgDL)xSyG{+Dg zMQS_ubP{n+_R3<%$4+r|VFE;TS(hF4v=H~SP25pY{Uk;_CsP8oWPem`n0rw@gKR1# zQKT2Tnj3bd+fm_!vllT^9%E8~`)C^#t6EW0HwCQIRiY9oVzA*;C#qBHHXCPlQ=A#K z1Dlvk(Z6p}qrr5xgZZzh%I}wOZu~7VzO*-x6IowYx^EM_@LzJGHd-=3TG> zUc8%u$=jIb<)ua8qU_~f>HuFIQcV=|4qNEG_Eix0wZQ|iU;P!Ds&;b4F=Do-k3Xhh z%4RCQ;b5g^xDg>?>B#%h0MWE%F7-}Yft+#5dP#QmFNjFK3x;%EhV1X@MJ0wM1=Zc@Ph_xrb|9sRm$(%g5c4ZIPhJ z2bqD&>>SNjZ2HK#g#v5_HEh4(Y{q=S28ndcmd?)Rkoh-l?;vV|Y`avV&BA0--PX>G zY)JSyya0DVh`;m3yYIFvxjWF?Wh7mOZ?C8hP%CIsn{cT#wOu>W675P@Ytb2v(G|_n zVN13e-O;fmNf9@3_JEo_;i4H=Y#Y~cWSUT92d{KTcJTi-5GZGTDOz=O2XjZ*X$N6* zy5|t;I?mG^cQDsFD%`Df`mi2YxJk$UoYd2Qh{LEf)cOwjWe1}JkCwLIhc!viriMMzJG1rebW|GG&S<0dXfq9zu zfi@h1f-=OHXhWlC5T<9ZsW*heq_++6e-I#h>coXUZ4l`f)D6*nUyTs($A7?5d}Fk@ zmz{jAHh;~Re+mJ8Pn=K%jD1fB+T=8P!L)r6VcSiObm3PJy6tqcm4BT**6jDerMG{y z$$a(KCS(VXVljY*bY{W|f%B1o5!iqs>c|Udi=F=ir5703f(?2en6`)Qi-HnSKWGLC z)^_A}#3%S_XSISYI1ew_F`qqyQ;4uRIEIcJuTFJ{lARECc!bi7i438M8p4VC{fXZQ ziCMUXuL9j**xwHGhjAE)|7{Qj-i98C;c~dn1kvHWt%v8phkgi$Aui8vXNW;Kgo=0% zj7Y=_^oUm&;gk4ImFU`IA&Tm8ilzADvd9j!*oxm$0yeZq`VYco9F&U@Yo zA%gLcA!g%&!*~#nWsJz^NXz&y0n?`GD2>$kTh{nj5D82JyAB1p;RO+nBUz3cf{rM; zj_vqc@5ti=bLRBuF9CU%N_{wQUMUN+Oo9K7lt}gF&~1hA1LzDX=o9SPYp#vXq@8gt zk`1Ae?&#P%y4HQEk}TfY`s@|nU3*preZnVFx?mCks<|Azo)Ni; z?|#{vR@xB8>AUhyoRo6#PHB|MDeyLt>nQ!45~460B0kkA%N24V+L_ZBF{CPj-w^MY z@cG&Ei5vAf@AB!ZBC(<)PZOwqIRF2Nu>N2M_V56~*t744plGt7Y+^$q0rD21p)aqO zAbO(mCq7V{T_frwQC{>X5%VxACj= zN-bu8A63dT&jl_(Uh3Y?rBe=??BXthVxUX&b!KYlQe6;P#eQr`C4!1Dk2xEQPnKdgIQtV|kIpMxzz8;>Cct*>0l z$@BVe2K%fp`=?C%soeUkjQg%U8sS>^4pBYVBPeey5URee-xEGWm%Z{jIthzT6?;N4 z%di1vvjoZzCQD8N8=5++qhU-L zhaS1EE@9TKUB8B1me>C|Uh!fRE~#1Mynk{bwA5Jg9y@kB{JGqS;N01ay#CeO5pUl) zcpTI5`=?u@x`;?0=-a680R(hTH5Rm*GHXb=4^~da7aw1DjbFoZ91A#YB>Efwt>59C zr67RIH}q~pFhK79)vMQ8T*2#BJE}zDYuc(`Ntma)Y-=$`tUL6p9hB8h!^BE@@GBr{@VzheI9V9 zFV*VVs2-DS!ZM=+)%!@EetJ3wAB}7>h&iTK+bBQ4%qS|KDmSv{fr##*>8-dlI_Etc z{{%EpK?fzvFa!U*EbX+;SUhn<4L3?L#Ktyilta`iB@K$RSOm$%j_3h3R8Y}@KvYpl zH8oUJQ>ACsR9!U{)>BJmRaRALeHGVOb)A*fR(ZYES6fE~mRMnn{qcr{x{^+lR7($nFClPqqmmAY=N)+-FcT&F z#Bvg_b?WiwoJcNH3j%)z))U$?qh+{ZhabMp(5Vvrj8PIPy%;knOcODqN*{%wQgjR} zfjdq=@^qtutbItKmKRzXqL^Kt8D?t-su`i29oiY^n_t%X=bnM)S!knK9(w4E+|jAW z8zG*Sy?6hno*Jfi`pf8^2eea8&ELp{AV`h0wCyAA$oek4@gO+zysED1SEGHv#uq7@ zUWB_f<+_r)pRcM*n9qD6CcJRN4-YBAbuOq-t`j$=@L~f>W9LwfCf}GH(+o>&9Tq0N zoN~)Q`xx`XF7A{~#8+Q^I)CPY_VB350?s<+x_oI#jpjM0Yk*LV^9C!}gX#^eqcz`_s zmYx5MDCZvY0O36FRua{PBq;cb!~_1(opl%~ANE*YyW$lb+L&P;^`PEJ_<^r`APHV^ z1J^mg77_&b;~oew15eJCl0J=3a0Y~86r~6l4^)T+B`{4!*kMI1)`T%EkPxIQR5A~7 zF^gLKVi^19s1fC_MJ1eK9OVd`1)`*Z@AwBV?lGX`2nZWRolQrq+QDFGtLt{46na_mL`k=r9q^SSq z9y{1UE1|hfIkp3vgnU|H*u~AhnBh3F(~CV2fE}-q)1B{xr(FzS#V`)=Amxi^J`qPG zgMtkkDn^l=Y#=B0)I(Plsux=@BT)S(ZBXhbDCQHoa7q8G(zMm4%oj&{_e9|dVh zMfyv0tizupMQKV^x>Abq9l8(KU1t%5fJzKg{2=G%NI2FuS*1}Vw7BzhV zX4QKqP~RQ{S88*5@Sp+*I%H+KL|q$uYgIPnr7KUvU>Xz51Ga*l51vBOU) z602{8D}tn{DU{G}W7c^oR6&zJyYiAX1dMA+hv^YGg>W8x++lon@{xYdV#5{Lb zMP;bDl|h~94&#^uk7#|}x!+-o+Y!_vYgoyum4!8YEDmS5!@2tKu0q@^50@CkCKhpq zF*qFat(GJDV5UZd0s$mKU?yVuZbkrVS{g6swb%8?I^$*Iik*R0+Ba16VJaLF^fmi zvKFdzt3Y!BvXn(lPH86QF^js`$&P!b%$yozCCX5yIHp$$hkDcslE-XnBRlhI1s(`+ zom{*ZHpdb&c3n%-bD}eyN_q)9Pdgh@_TyG4K_EZ_`n0>8cWZ8wx-k=KT!B}eAp|=r zQm%$I$SReh715d_749~JYSe3}(OZ}lgk|{{oh02E%t<`zmz4jg^cOfeWlkEY)1Anb zZ3r|m-Vb*saN~DZD?93AVTKfl(CsnQtM~ z$yqM*m(x7v#9CIf9`G!~4f-S1p0P%5?5%DwDaSSjn|K0^E`SM)U_Ut+!e7~Nd_vsn zvjlEmS8XxlUYxm!5;w=$=<$(3#$+P*R+{Bpv^>w5&w9r5+ua^_y2IV>bH6*=<*xU- zBV=h!vj1N+%!f1IX9MmbeBSnf@g~6&d0`euwxzJIgQ^!6MwLTgs(fvL_NW!e`Pwy(p%JS*9kWLbxim zYU&fKszPVdDkS@>Z4(rAVy7)6L!O!^&cQ%V(y9M41SX$)zrX;fK{+TIWWzeN!#l*o zJk-NIDh~VA;d;>Lj|aK$))#ZH_$T!b>D0L8pO z2LgnVbPy|i*u{67iMFb%dguogx`!P!#b@+GAdp2$bVj{U2TEi`l}U$GyhM(;#yH4E z*YL#F7)QJ4#k{Bo`htyjoJLBNi;tAWlh{jD#Kex&Kbd^Vzx0h- zRLqcoi%+u3vpA^uXe8ZOMt#trd$^Wi3y2^e|U_gaAr}0BK}JnDk5fsL%F9 zPaRcHm@LR|Jc}Il2!_)MQhCeYSQ|@13xQFjY@-U?Sv2|Rj`Da;ZA%Y)`4M$UAqVXU z2-S$RD4PJm7A*adEfonc%?ST7)wY$`hhob`Y3UQC56H%m42W{aNyueUk71-J{OmAdSEuzF1 zg~hW;R+x-bXT?@RT~z;xb%Z4D9=EJ z*cy!kH882~EKiN_OC4B;TclQO{Kt*B+N{0SZj@G{eM}Pdjs3`)2S6U@)70*9IEJ%T zkXRmU`I1P8JdaRSwveDCix;~ELZoP{czMW*WUiuEs&u#=<-0Vxs34(rTy7K0N{ooY zti-;A(Wh0`X$;3dl|}ksR>?h&X^aSq4M-s1$dR1bjTIPsq`#>!5`0LZ6=K&8I>01i z9+IWH)NmmfV$J`6*$4UChjYnW2uQ3RQp+LCium{UJ2O)Xf@$EK%R7I^7Nmc9)r`=kp#Yv{!T>VQ$H~@m!S%;4_0{flc z`c+o3jo4JwT9AN;13;w}963f3$~O7d9-Jgqg4?PKGD-T6N>Yc`k}o<8*&y?z@Ah=2XMdBxh;wYBlDW>8ow&E+s;w;wUEiOey(Nn^YCMfIa4VRS)RU6x~f!9aGw z8D5%yz?*x72sdWrW+GeAWsPr)-;BjpNycMe#fx+_WI1BT#nN4Pl*eUx$9Q}II+d0O zP@NqxgH>MTMpDE^hGkjuOC#_{fP9UE?1)LlWdzCNi5lFy4T*^)iPaEh>t(_-nT_dS z!U2utW|pPXH5>d5Nz^ULlN?EvOw2Nd)|k|0uf1j?ut`e9$vEy(skGa6AeW2wpfiplqZ^T4$|82DOx??1#??%Z)=W*` zluga72hJo3+bp5r6uLZt>DOGwf@ZFB$Okz22L#{+L#j-%!pzyM>HFwunHCA1-q&{~ zPPZ^lkZ9G6h{CKUUgZP{idIVz#^|v=96#j}uik3LsN#vPSLIQPC1USmsLDKt5Bc|9re*!MAZNO z6$vVJn=74Qm4*^e-8H66A#g#cp{ z3E_~_;~3`QC=T&1?E+k{)K+iR2FyNfZ_d>L*dEk|?a1Bc?OeX?y7pg4rS1D>ZrnN7 zn@Lrm1?zXFRe43#kgy4i$Op%QZf-Rz|MZpwkLm+2*;_pado7Za?Wqmt)vvy;6awV+ zCUHO!R`>pBFELhFjBTjxMrLIWX|?T%mGQ9M+Dp{vy&fl&MOS(iUIKU52Y}b~=y7@# zi3Lvz2VYBWy-x|3*K{@Vk+|1*9Zu4&9)JCo?ZEP)8;Jsc=PE7nFmD)>-j4s)cF{m( zSlRB#hrRJ=jo2E$Z)wHY^IU1S^r0_V=-HhuUwT=aP1(CZ@^v^0=+0StX1=1!j~$^7^3X<5?QE{nlK^i@@!dU&b3tGswiX zorBgQ!+lUVDz8!0^lV>{$fa${P1x)lbwY(&%~cuE4c*Q?chDtWXFXkL=A_+?A>LeG z;QetBi%6CCTlO=8RxpaaY#&HAxEFU;V|{kz4sVzwH3-6bYuJ?Xchw z*7IfAV3m2t625s1UhE|zbO%CUfX?|3zF@KDc@G{&tjR$U2p>6nNUPmpt3lq2*9Q#jXOGw?i#lqy%UYzYAh6c6hz!1S;& zq`?wUN=Vdcb6`50E)A|bCvPayq)L}EZR*sdymRX`+Vgji9j|lyj51_*4gtZa_ZAXt z_io_5bL~(jB-^wtN{&zG3Y1ItF5bL)_wqdm(||w^I|cvxBs`cMOqe`#4lZbb#m<@# z5GP(d@Ind5JJ}IjrxOZ`5*IQSJ=*s)>eMUW302K7>eP(*cwOE1t{vBdW~2iBrw=2% zb2|vC>({S!!-V+!{X4LB;JQfv{zZx{@ZCLL{~r9SH_+XI?fxtZOt^2lKF%52h4&W; z;y`uxw(~nX5W9Bn-XZ)u=ijtI?wqrqK=YjAjzIF!XCF%J{o@{d3C{OGeFWjRU3UWY z_a8w55(t5T2tuGBg$y>Njy}`bQ_nxVhzLP+(^Y3-b{G;!Vuh~hxMN>`!3f!C5ELfl zVTmQn`OSK=A3NS>E@Ye-YI9EaeBGupM3(Vr=WuR^T0jo@fa3w8R>I?M7RN1P(QQ{ zWZ+uJ5rn`wib4=oZWtx>4?YvBx6X9<;4__d{XC%0iuahd&IA6`gMdBzAf%N&k<^+I zJKWu~YJ}=AcTYX8GUzI-^~fraJo6+pDS!MB6kdYICi{SiBnA7=u>EypEV$b)`)aJF zMLTUl|5!T^wj*k*>_lGWV+MB!@M0B=sjm7@tLQpw8o9{QyC}j5FD0dALnc{QIuA2; zrD8Kl20=OzA8A+#7DEBpOFONj@s$i^Nzng8{;BMrIw`Nrvdb^G{Ibe3(|nH2H0LaH z%q#EgbI&yg4fD-74{dbOKMS4o(Ml72v(rdJJtB+e9MJ8KuxXUl1H9DZ);s-klu&HJ{szI>&$aVFJ_Gfmt3gr8U7kYF3Ww1FaVHp|bn2z! z58x2|-H_M>-Sa?5={$gsK#kW0IZBDErw-%)I1ai%lQUE~TA0_hdFQ5o9(h;ioOQr& z?{tdy1A6oAH|+y?jxp*A8-ILCQnC=F!y8K+rIM7zHYCT;SHBKS%x{cksK|T&JyP;y z#Y;R0Yn_oh@F1|2KVU<^`lh=Nq+S0#JH)dUJO!o055NYgqbWn+B9OCv=~V>L#{+#cXJE3B<|*lU z1hHb3$U;3LT}fhs;YpQ3VnyyztBGbjBXIg-9UYxdBvJX$`#vZTUi70N#Y4wGXorq{ zJm5tq5g-KWA(f(hNRY8nok8%$H$MXM9QPQAS5&4RuMkKsMY$PS5NQzjY3OeG_=i9) zNi+9(gpxpkk0@W3$r*-Cj=ujHAShu}G*S}8hj_D=5D7^TL&}gSvqU2>kLM$dWsgWd zvEmmGf<-AB<|l#Ko)-s$Jt(MWj3$#~q2M$qKM_is*`(7q?G#Qtd9$40G^aSxNzQY! z(@xN_$95t?OVqScBzY_dCuL~{J6cL0@e&9Eu~rg5(oL7UIwUJYSr31lBNDrE%Q-kF zk)m`2W2lViJ2I-#BW_ZT_;^6Z9?+4Z;6tMuH3>ye84;42G@~5Fr$<4mxshVDrS&Rd zK5%&;gAxv*zAULtgDF&m4O1P(lo&F%_sr-O)0hNF<`o;0Omrybf7U$6$xaEirg4>N zUft?fb=Fm|l2xo><=OvPftJ>#l@+a1gMd5E_78ikF>8$)i9g=e$})0FZYd(jKKK>L zbBK^_06YjF6KBG^0W^k^OKAMS0)a+KR3Z<6R0|i|5KX>Kjsl97{2)L?mRwe)nq>%Q zYw1~|7)Vj0)rc+E!5JZnmaz~pVlNHy+M)7xQ8k HwDC|n?lN@5am*#WX8Wse;} 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⪼%yW`Fc7T*gXV#nwlx7br-4&MH}iP) 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�$R#(p%P&8~ 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 J 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

0zW-CW#-G6hGQlP-lVn0cnsxl9OZSK$4FIu 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�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

!x#SxI(wKM@dGKqS%=npJ-ms&^sAlZ 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 z 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�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 w7p1^gP&;@liGpUqJE>Sk`$gC#}v2L1W#e~qo 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�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�zBL$)lWlL5rMqo6L&1NhHFwgJ>0Uw1MWtScX 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

@q9)8|#36o(c)niMVs$O}~)%xUo^ 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

+P3fy7s%tw<0xNj!B+ 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�J;~fqxS&m|{ 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

f`N8OL|E9DAlw#qOh3ry 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

uX{EIoePv{4W4rfF0O82=3V-s@Ys%9aPI# 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

Xz#5sDJ7 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ෆ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%0DWV8?)*f*lE2&crqU~0}>r6pRCBtc-U^p%O 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%0Di%)~cBc&&hHV(sAxCMV5Oc!S zI}MIQn@+Wqpr#FQ$nzDM0@+ep{Dcv+Ef_o%u_}UJU+8m+XK0DcH z|H0jDQQL))Wn{)>0XI0jZ4faSEU%%{1+go%(ku0mjce%_$Wmx!%_z>2R=-Mj?9(K^ zTM*r%UEq>~{awTUBMOkSAdJ!(JFl@8q zIHNOg(=$IaB|>w*4uLi&qc%0ZG;iatSFI33e&RTxH=qYn)e$&bja-MLA?+RJ!Ezmr z6GrttIeo@wt>fme1Ltzq=5+q%b^bd1B0GXn+#il$14Dz4-jK@)_oi>0ni#jaVDKk)k3-EE{sghUq6J=()PTtB@V zGc-cP_oA|B5l>|7{Il!n8trYW5VMX$-VGCK4vu7WM+R|RYUI_8?Obuh9du+z3|GDm z*KrWHarR#C_?}4juJ8HYNFIlx471dK!RM}RCr%qnvs6n5t0=0Ziv7!MpA=q<9#)Fy z#t<>HshLm{bF(=c9Xm^HY=;oJ>u^E4zZBt127&S!@$v3f5FAx~B5#9J|29$Z#AydX zO_*U#@C0}-KTqHE893WlEZk4|`*G-$PZ-rZ@1%eh;qwypOf_GLNk3vjfjA#U?#AWV zE|@5&fl{G&T!zz9FSYdwA>4aGQ;@id85lHvnc;6%4yCwE1E`oP#&j}=)kllrw~Hn*i&@gxxyiDj-4T#q+W zU!L_e2xi0O+hp&J*dbjoRV8p}>%KfDNZo!Ad-v_-nn!G<@I~`?;JjYW-#V+N6_Ir2>JLyXm>7UL7Fvd z_SDGZbxqby3_A3-9 z1_q`hdjUcTC>{o~Em6<|l(;qF7Q8?fD_ge&=hh{77s6i%>&Qx6OZV%#bMk7^gB%$$ zItY>_Q??u#b7p#*GkdlS`f_E?qBWELj5@UH(FE7o`}ZIc|5mZJZQsV7o2$HY>%_)% zOz_`#H?OJh0n38Jiyxn;oVo6S`vf{4`A+=!qUTt;gelWt(1G=O z6ZEbVxXt;l!;crQ`vGyA`?*VH4+8gmvy}SJL=;sVXu=AC zyhB#QLgIv4R963>~scP)8jqn_?_Dq#$DR z9Ceav^PxB6loQT4=cE(QJMC;!&p!EN)6YNwg-Fms{|9m>p9lW2$G0UPg)~yJcyko2 z`UX1Sfr1{;$EJH8s1yPOBC5%~cxuXY(@typG}I>(66*keYU0$Ul?s!{#r0@Yl(O!= zlkmY{)f}kSM|r`HCS)Nka-d!z*eBT<8Dz>KVhNH}C+}i{=c|40=_j6#?%^-mO^+mK zR0LMUHN6*ai;*UC37WQ92z-LTza4c{Qr&{KJ*Qh6X~Q?ScqK)cAhJAI=K{8%=x8n| zE?DPG1JYv0$$>7Om>snsAd3ZxS!k;ujxWggEibL)n5;1u6E=G~oNG<_-n6J&fdg~!DV~6Xv=boUSzmjJj zpz@hVU;poGpbb zY#~id$hUJqP=biz4KK_vk9sr>cLc#;1o<e}@{|Ng+dj!)T z`)DN=)dLiK_+vP`M4L|5v5!Te|BD?MgdlQ?`G8|W69V|SnONq*IBvpkoUxfAO~6S@ zt}xS?2Y_ZgqQ%X9sOg6#qGmP=B1K`Y?v<8G9RxOlHF=`5o&$MDK7#p=eSA%s?^R89grpHp6*3_og z`=s^w!OojL%3hgF2cvivR5dc?r+MVZ5ot=)n=*AtNwtkrdpcE`{f?1fVaz>tumf*W z)vI3xtJt@(q^*?sSYi<0B zR>JDW0DO!j%piiU!Zy~i|J?&8M9RuDl6Lj6TT$!w^l=ZqN@}y6wMk}kS4M_fwv(T| zDQdYxT4dTrwU>o$Y-KxJ+Sb;#x5aI4b-P>M_SUz*1#WPKJ6z%x*SN<;ZgQ2oT;?{{ zxzB}ebfr68>Q>jf*Zq$X;1H^H#KF69FoI3AJ6TRDl)RBLFLu?tUiP-vy;Nm~5xi>z z9mtFw-UWhlz6)Ln;n$|<0HCMVCzg8*xF7(I+Vu+jsC3v8AD~?wHu3SxrZm`;4}Nck zHN0UC{|5;B^)7`Ur4H}bw;+*|Z+Ht=;+xh(A0n=xZ6Z{v7iV(D{|Vy$xFX8~*y8}_ zFmO|H{D2^L*vLml|FVX4Fkg18LkB8OSmbn)Vw*_0ur~$^mRYK0PY$h#TWJRgWocS3 zdO2=MMsu3g99=l@*Cy(aFL+@E=QbPR!*DS1liLhlM|JnRP%a3SU9(?6LqN~-d=QN?NJX^zDOMsBaAykFle8N}Z0NSv8n7($EJ z%_XXKpr4JE`+~U8BRxmpibWv-*_G6w@`(7N29J3-(|#P)3A^20KY@i0D8zC|K1`A! zUeFSR|F}mz|N1eV5?$Dqj)Jx71lsO@yqhckFtBk3VjT@ZK;mK|lq<4IKv{+!qe%P(vIfl45mq8xChlhoEVqbDZ-W0yKAaej(spHK+p} zKCj6R-ZPKpPz2r(ur=K{m*5!JhRf-}cj^w%sdtddeTYfNF`e}QShfQy9X&^^|7F3g zd>MIF}RirnRtaFO@j?|;9kv)}Ap#B|%qEFXFtAn@V(3fkF;L;BCJ zt?fb!n##yVOymoqD`%!BuN`>+{4TZjH|tM-6u$cCZ9>jBEreJgFh=Mh_phmj@zwO?}W--y)eXhEC~VjH(fk z_qaVCp}*SrhgHc3?4TXK+X{4`rgv$I2CO^iv%m|)Kqc`rjibJFus+1gKE@lrvmiWz zC_iiaHtnlCH#jmLoBonn0Y|ct*BK zB6blQ^?(~sAv;8Q9iN*oUaNTdLDS1A;oMGbK_H)cKk(f+BPYA`K#<|8pQ9 zirk7K!bk|1NaA>?CkdeunuyrI2ig0F#0jQIs0VOz8;w*drXZ<`P?q!|GN-AufuJAz zAr{_J+(*epqUy`LZ;VHxPrNSXhp@huH6h#>1869AUG9g8Ol+4ZK%+B;o%FCo@ ztHsYG&C)c@P^8SA0RlzS%F}es*M!a3l+D?s&Dylh+r-V>)Xm-G&EE9Q|KB7obdW{h zB+lYA&g4pm=*i370Sueq3#3rao$>Ccld_@640V?u+AC~ z&ylcSvM>m$O5?bt|5z}d>AHTXhkD3|uR*YDu{Ww)t_>A1{tPRtf&%ws8!bVK&L7HZz31wANE#j$9fv|(92}lE1jd~Y%Fb;02v0!DC zVUf1UR=oMhtM6}B&l2;Ra+KX6ym!bPI27euv@YPR+7X}{{zfjyycu};nPcEUDEw3nT=FN z^^(XrlSqZsF~L$xVqTY}i|BO{=vC2~wTV!b8aiT+0 zU-5ksQnSIlE!9{33Md^ty>k->EDw4}8z{tIx*Ld{x{iim$1G#JuR9B|yOphjfUc8> zX6ZU0sk)l5->5-gsS&%}AgQ8)fDQI3_K0Ach&s#N*lG+QE$cdRqX_6=3Z?T6rhAfr zsfiI58jV|EuA{`;;0^ao;fXj0=xCOBAk?qGoeS33fsmz{@J0wQ;ta-~ilE^d&EXOK z9g$g7m1)lA#o~q_3rG3VF5P10@g0(t)a@PO|M!xIH01?3U0V9(iV9W};8Q+@V7{uY ziF7c&9ZA0B>j>URT6Wlhwkn*DwL`XhJ=l{yc40jSvKLR>L7IT$M4T{0o>kjm9G$r2 z52g)AMv8p7n|p#%E@P;HP`X_rCDVfy&SQv}_&iTWs1%{F)oVTVz>Nrou~CMAQXUwE zGnf)SJR)<7}kALuoAUoyL!zEZItc3xEmdGtMx05DD#EFQ#=6x-AF_RF?XKz>HYuBjG#jjE$E}(zo>9bl5*e4v@Zig-8~MxIZ7Z2#nAO_F(9Od5Wl*(;v*D z+xTb+oan09<*fM2+6bM2W)lE(L~nFyh@g$trDc_16ACJ6Ds~dIn3ydIV?{+-ywHm) z_6zE*3&QXn!~kb}rko5%8ksh2@<^9+ zP{&KcYzdyKM0L@h7K}5&61kux|3@X`FasH`4GE{JD_x|BNsCTx&XY+Qf?)BF37L`6W)^o6F!2(V z#ni3f-VIBkoJlk6hGgx2(>zTYwoAwABu8>YilYIW0{#kce49o-%Q=e^(+at) zoihIl*MXndF~ZR%bE&(X623+|Ebq4Aa-HahspZIjpj|*eUaRUI4MF(03-N&C=NQ5g#RxgUa{^&#z_HWwOH zugHt!4-isQ5n3Q>oVt_%3LA1a&Ow4x7s-Xya zb|(TOAA0Bj&Y&Z5NtytOG5?>2{4$6PBb=O~D!QV8T6S!|Bd%~Ge9zl=A9R92mvG+- z+%fh9x^{OErc&}<|7)j?gFpPC9 zXl~6u1ZWcVJA|$FjP_{R(dmC#W=OpCSz)?k94PJ zk{2a~OKXy_qo*ft@+h!4r*iUga!RLfOsRGniFb;pYCWhmm!^C|7r*qU{RHT+%we(| zdyvv7hsyYouKKNjdxm1;${KhhL8;Vr^oJ%Uq~E1?z#xA>9TpD!sV@vC{Kg5gdxeU7 zVsj~&lBrYoTA0TvH_jaa_ASx69;uoc(03f>L#n~vB+=ImsHzRrmzl16y2!LD7Qm|f z%?CJ9-(4azV8iBKp;JP?U;}|(u^r*{x z{-6%6YV|7CtXj8n?do+PJ0nVs=m^P9DG;PfnHoGBCoRc){0^c!cTS$mbol=L!Ul%iO?D#R{$SHxWRjLl8I;CX^rb{QbX~E2KHjmt=*kC<_@~ z@jAEf`a^#Es23DZzBu~y>esVxKM@YwgX+XGT|FPZ5z25jFNe<*YEnxvM-X(ptu-J7 z{f$Kx1nbZT2U!g1V;6{1e+d47qboJp|2j&WQRv zK+psFY`4!l?SR*iJ^rMl&u$R(_+yan8F?guO{ z|3F!CDUg**{RM$r2QmcDJpTMM51a4^B+oqd?8weJ`Izy*KM3&R&xUH=Q%^q+q`1&O zvI%s+KNlVV0Rm<~fapUyYN+A^G4AG0r4RtQB&VHv`YEU>NjYXg@WH_jJEkW1)>&|* zqedL;K=7G5Zowf?X9X6dE3Te>Ict4V!ljfN>Y&4`Lgy7EDM56mcz})XoFi)_|HukK zI{xg#&^-^VmX2!zo#U5X>fm!uq&qIu&piTdIuN_=78xqN_1b&yy;91j)U|FY_Z9?7 zK|onq1xmRZun2%s^Y2%TuxBAbx11ThQNIVt9|t&StQrVhyJL^9(-(rO36{|*^r zdrrIi%yrK>q%L$ZL-YJI=DQHsjPtzs`usD{K?^skK}2J#*>PzJOmM;*@;lJPO&f%4 zfs{4n)@o57RPjJGlc{n(b9KB=t5IXZO8h5P6snow|fqZ$v z@nJnV!g-6 zpU#gz@2FG1{rKxIJOBeIzyVf-GH+RjI&=URQ=v*#Nh1i;#G;0EtOHiJ8i!;732UH4y6zhKJ31zylCx zG5N6rh(at#&XCwM0y43QP8434EYqMVMG0WgYhGnQ7`de&Y>QIFRb?)dIpzQXKlpJ7 zJal7^d&F)at-%Kyzt%elkWU@{@XkH#fg^{!=o~vJ2rpa%8$-P*Lj{48oboXbH|@}n z2uUJAAo;{eQnHdjTh3TGIG?es=7CoP7KGxkAA>kZlt7SKDVc&wvB2S!QvajguB_M) z1o#6_?Lx{v@btFO!Ei(nP)Cm*psjW|Bpv_g-uw2_mldj`AN^S29V?{64LNg#k?ffy zEve0Iax-{ZJBbe10WuGEvz+EUCpy>jO_NONg6VuGJmV=(tgN#nKzNWV=c&(q^0S}* z{3k#ID$s!vw4eq(C_)pe(1kLzp*lea1sy8UiBdG4=_mmU7{m@Ja1;t9P)G@&;DLc$ zG@~RT8-?ChQLCJbLQYzVj^>dbc<_TS2k4ztoP;6y87ZeL6%Ix@%7PLcF(DV==t#lR zQICRDqysssQ%6F!d+cBb#Qf<{+EG=Qy;LEAnVUeqdJwT9q#oy>%KtoCvrNt?(=SLt z)LJnj7n4Y_c?b$0>Auw00er2g0EvkGtdVzv;CZr!tNJx|VOU0hl zuY?7Pb-IcW+Q^TyVD)T5Za5H_9l#z3I0qr$I7r?c(+u`_z!D+ixsT-I0cR6PYOF~| z%d#i8TZ`>whl12~Kvl8}Nr!GB;Mk@b7r7-NTVR9xlgu`RJKmX7cfJF@?D~~X2VuywT>DIN#YmwP{guMx=U8vkE-Jo#P00Qv?@zzMEg3m zQS+G&nNZoLS)vp1V^AFO5Qs!1kauuTmsEjqg2MO>%3}9HN_Lrjx)~{h#165N~Sbp@lHLh=s4hZBr*SqdDu73?| zdI%fX#qRa7ea-7(Cp*~7HukfT9c^XT@*ap5T83%IQ~&txHoE=bMM4muz9BEFQIBd{ z+6aO_f>?*Q1VNLU*tEz#{o_x8N)esxgeN_9Pfn4*E1sYN?=`W>mwhd=y6jkQKndz1 z6Y|HO{ymU~M_kGi@i)N#L6v&g0|6j<0968|j}P6WhjCKZz~#+IuEL9u2YJ!1X(Uq! zaNOf30#K9@phtn^`%Zb7A_lzoXXgV;h@a0Iyvjt|qR5v31e5qaE&0urCDOKKEB6q{5uR zUAfW$_;c)U@P!Bb;c=JvvMs(sji=D#18;c2BmbWAivJ~u&T&)UWxFBV{yb0VL=S|h z19k%$7v;@`E(ok!c5UOi5oKGXYF#VSa(q;@)F-DgNh=ZrnJwt&MtfXo%OWolazT#2 zk=^h39KJWmioSdFu@5n@T$9$!)o~6-DI{e_nTMma&q#tqzmP=@9kd`IEwC@dI*7&o zhPE#d=0hMJ?q*014>Ejg6<@G1T$zyVpX~`mi0wf6F@*aGmtnDhsO?wVp&CIzV1Gfy z*^wIE1=w<}17)FIL-<|c$U}GVLJb8@=P^X^#ZO>~8)BtHO+kg=wam-JOnF%wJM4fz z1PS~+1lN2_$c)VGZOm?s2>m_Ei2>iXss9TPf{YJVL`@+?6E2?&9?FT~O8MLp1mqt= zaGU4+gAS$4RsGUyyvAyfkDBb(5&gvj+*0qYQ0M?5`AnJf=@u6Xgcr_V6bc^lQ3Mti zL=uV&$vi+C;bHsWL&*5y?;VrNnM)WV%o+*>Ql-O#anxU&9Rxz)KtLc=jY$P^U47VDZAdphGUf*|@;X>OnwDox_Q=QAJb?O5sjA zwBhIoVH669(LsO_x*}2x-fcaE`xwMCX2cN62~@~KKiEZXsMHlw9}HRFyu8+Bn1~Be z$hBzS4ir(Pq|umIBR19|0RmAzZ2y@s2BAgV$pge=L4c!Rz1|SEkVWhvZ!ja-AfF)q zV%d<2(ET6AkRw6ZBR>Abr(p|aQDWPD;;FS=CR(6zS!5?ZmPKkH6kN+F9)t%D#IOJHk+=cWJ|83OQIx9&Lp$NBuky-~%awE_2 z)OP-sj*MTj+(SRagEhvHe9}l`4urUUSNM#NLSDpy{$4-q=Rh!K({W>U;!2&66xOwm zdRk2DgcyH1M1%Ika4nc5LI8f9W+Wza<#J34V zO&KXkNvcn*nrAjh*>Q$pQH46ZDg?}0M>UtM2H0p0m`4#9-;rb~(u*0C81NveLG+a( zji0g3+nb!+u?A$7G78Jc+dODUAiYLx%6bpEO%#f%@$r{v3EzeP{)pBBKUSd=MDYwp7O%N-=#@NiNtw2N*g-nyUec@=~ z4lN43r48}W11)l7~$)GGf4n*iWMDJ!9m+H*y5`@h9={bmQXxV4w3e!G(;XAa3Kjee_ zZ3y93Z-cZB+_0-c9PjTYZ{b|P1*pS1z-R}St=Y~5+KNQ$MaB@mgfZn|NZhZ%nkq{0 z125Wy{%VB(N<;vcgtUBUK&=`JIK)&{745#SO=#5)u$)Q^;*)z!mZ02e_X- zm$4b2F&d|_8m}=MN5)gAg@8DPQM54~*Krt!#aMt)N4NzCO;H?2E?O`VSv|xcFNge&uud2}*)Wrrx=G8&(ee9(sx*hf(?g?{kIFaJlEn29P6h?gLUf)F!r zJV=Br1fdxk;>3-Gy3UQ^S%~OaLMR!NIT@At81desAchsELGp@N+>49|JA7Dlwf_Y> z8^n-glR?M`jch0`-*Xpl4k=Ml2u(?q@N+U(4jdB?)c7;cozS2R4q z3Rwa|M7MkklyVzTs!P0RN++XUxi~aTpS9WQi<26UzdVrRG!JMTOhH@DPh(DeK#cJq zHT{iqQ@c(Za?FArgrMeQF;1sdS99}40wfoN$r$j-fzvDe>b3&xs z+VCr6Lj=w64c_PtL%8E%Z?zSkmiIxp=TwtQd{#JnJLfrIs_opx zixd^N<)B+?2>+mt{{W7P6Jb5~H;qe_0RaI5DUd)gP^#FpCz(+5O#e^?*|cYiP#=4c zawLvsjL<7Jcx6O5dY_(3rOaRmqVQ_CLAdEb)M*i^4VAO^qH3!`+>p(}7dj%ASBrJz zUTGmosY%y3oC{PG#ldBG3G&=D1U=52Yf%`HRG))37d1H!@GTAvsdK3evU4xvM7> zCIK^v@Ny@~5^1v%E9r5Auu?vC2`{gbDg85dM~_(aF+#{JJ9NnJy2+IXwwz}1Es?I` z%5AcL**-85`EsH8B7`xCuG`v$rZtm`=_}hRQE2>aGTrTBzyCVB6BbgBL^zF;X86Ps zx4XUHJ50R0NVJnms4oTmI|V^h6mpup%C9_Rl$1vO=tWAF%U6~TcYF`0d`ZOA zOw|6moqFM)FN=a%JT} zq?InwPa?mSx@W{-kwjhHRbB}MU>(xQz4<$>y+M?{7^~{h$LeV^*4{A}iEN-q1nI}e zFT2&oX9<3wX`X4J7DA|)|CQEhr539j3U2s=Yr$4V$p61rXa>lw#vHP|=;FAe=ZP#^8N;`zt@<#56gV)@S*LB$P*R?rDfPUq7@`^7M z@XuF7awJ85RIAb5jv9onLfA+x|Enz+fi)OXY;F5;KD}Jnu=+4Utn-F}&pVHp9~nf5 zX%>mO3w5R#A^CQTr9P0oEs3n_quCjbW%G{pn3YW&?g&}X4?jRa5GYXHy?+n*y&JfY zVMB)S^!a=6FCV*s_|6SXcg`LJb^8AOvsdpQFLw?d%G-C)Up;~E4oLimZ{5X=0ylOP z=q zC>I2lfZ`!DloAlwMUMQrp=Qzp4Tu)aIkf20omE2t3gJR*&xY5XyULJWZ{NMqLHPYU z_;BCFjnhMJeEIO^#Dyn+empw!>dvo2mw3fyi zsI2^vFhqfF6p=)Me8dSz%JQlQ0eiZ#5kx2dIS+z*>_LE}2fU>X!wowWPtcYK^-E5H=wuSa9CsYgOf+2_ zPgA>WJ54jrATSN5bVM!fwuMGpr?$;TEp;H%RE=yh2vQ~WRJ(G^bfc}bQfF6Q&+!%5 zs)QZ3SYVIkHQB9}?e$k>pJg^$XNL{eBa+TJK%q^!?bh4y%Jb4N7#kwDA$9O;=t6o> zLN`Bw&cSC_b)p<_A^!$q=Ya>}GyiO#ej1A8pYGD}r>hGUIv~Jz;Dg{p9vO~gp?^^_ z_r(JT5}06vwd66L1EYi>ryvtvxM890)QO>oUjh-zn?#=cFbkDcw_kI0A-P*S@6)+&?Tj>0*NLocxr53z?ZF8rTpnJ|;U%8J8E+iiM;Wtt zAjxs!r^|-yb0{6l&)eu82==M-o^!@3k2`jD@JHx@)S0a@iWzzUpVnKC#4Lm%$fv9H zPO`Z_vj&2_T%ac>UUu5mvH!heDRl~YWZZR!fOoqrN6GgCfOme%h+VIl^ntK%Xsic5 zhxBZQC>2_GhNB-Fbntnm)Pu2(m@>`Cidy;dvyK~gVJKS?f`vmenN%3f8 z;xU`!&=wgFq+=bLfx=ks1~!-d3aAtA#^RSxnl@d!^KxfxbEpjW5q`R+qrV&cWf zhCdfM5m-F>j_=M3FJQp0><)% z=YcaEkF0RwH@AUGZYAWP2nX`P&VWiFt{ma1Y}q#`bSH%lS>ZyGqnzweCz#U#&M=Qz zOk@gEnaz~WGL0$Bfvm$G2Z@9iO_@!@L2g{ctDiUZQKN?B25DFk=Rnd0K2WmG9qqVK zIm2_s+~DIK^|U7d^MT3UG4e~0^W!(OXt8t9FnywnWEh zTGz{Q5^q|>Dr>OL+AOnHORZ>SYg*y@R=FB$CnFL`44azQZq*PyDV1DB7w4Y*4Fs?a z3Ex1{=#am}uyv1#2^!VN5ZtZ9B2(n&i1MV;m8SGUnM!Q84%#Pc#f+f}q3lD2@)YY` z_5s1E=xiFukoQatJify$=+-F^lkO2Eops1#9rCaAK+P`uxJN(YamRbSYbAQx=|W}; zz|#U%Q_&4xKZc7`FDey0rPQlaH=`;Gj-`Z`sbJnxa~XEbN+9XI06W?i8MamCZSD2j zdSPkR^#7{nmA*{rcLD63eVoG|^T1|+5ey!_M$WH5Q^#%{!jB(%1i}j`kDAE(p2ZM# zUs@B2j{X;ka|CvfmMq>r&!ex%YW7@VbcoYbCJ+&m*daEhtzAM30j2Hcc_#km9HHyt zhE$QmYTPkKMYa&nF~r7#(Fg7XoWGOqCNH6x&FqiJek%Y`mlnK-0!Hv=rH(Nq8#*Sf&Jw z#?6289BGG`VF!}7^kWummo;H%9>m>rJ~}Os_uKke!a|)I@s- z%>T^;F;EtRvdDheW4RFG$~~}TAs;{VLo+c5zk(JNe#oxZ3vu;5?x98*{W{nT;b@%6 zGUtIvBt#e~?ZtpRF#_WwM`|oKK8_t9Zr8)xqE6C&_%UpwKGMmLME60uQyyNJVIK9M zGE)V_Y>Dcc*Aj&Q92fXEt@J?!b zo-bWh3$maDZ6oT+TP|76uwa4;(UGoc zZVH8?Tk%=bwUVXL@rpq2fgeMrz7+z|DQKxzpY5 ziHFKQp!SY@B!$K=Gg7wajvu?nVt@Yic^s zf^_e53;Z$8_JOm>4}&AP{M}N&ciPW=`4?twjLFSCcCZ83&!7MO|5iKlZ*=g=adN}_ z{BMo;Nt?_-b?W!KHHiTYuc^Ysay;z27O)>I&@nb}VE-QD14Hlt zug?HhuI3(1E9eXbVK4?8>z68|*??=EfG5=UW^Ab*h&&2l#WvjPXg#ZYY_D(XBo>5LRKsYdCJ@+gvi zYJj+iSAGyc1R@`Di@Uh98mFY2M)X9%G)%>GaHdjgRx}-2v^`%mMrTwR(G)cYqDQ|n zM`IK%EmBUQ@;ricW*xC>u*C5NIKub$GtiQ?2z{vGo_* za{_hXHaXKXLDNN9bw$B#AhdN|jZq-fm0fkzRb%ulL6YSD;_7s! zeA?{FKuk#C1);`Fx1f~wGHJ%XgHEcf9uL(;5(zm!X2T-(XQ~xjF*akvR4Ww`D7sP+ zt5QwJHC3-NURiV$UFS_ZRwIBBDDD(2fnXpNl1>E{R}l(bWXE>?VKzJtYID6>TsL{f#qKNpx9_--&2&{W_J4jOWtG!YJf0GrmqApebkZsT@tNmf={RTJAaD2{I(u=FIEV)KL# zb7VsDNNzbx&tR^i@qlXW+Kvg?>>qxQ>t^DA)Pd}}Cmwnt@-&xot*s@)wscMRbQ{7} z9Y+V)p>^IBbzwJlWtT)%w{fl#U1v9Ub$55gv33~;2s%=4d3Sh;w|I^Bc#$`Gm3MiW zw|SlSd7(FYrFVK~7abswda*ZqnNkn=&>u;K1;nK_Mnfn<=zAZrTc-2{wKtn+aOq|! zJ&NWG;lXn7BjYwNhNxm{GxmPd5Ec8d(RdCy8DdooO?;{9mS~B98|VJ=PYTyph5+zG z-B&1VF^ei#T4nJbXz@q~VjlX=>;G`#E#)PndLnZ-MHL~4VfvvSL?p1#L4R$HMJO{& zUpS>u7z_PZJZ|_3_e_9U2dgx~R{E=hXi3m6V}WP*foCZD6z&1Mi5p$S8nH2PP$E*| zF+VXZCw!3@e`9tBK{(Pl&%upah;S~V7pDG(Y_Fo)xbj8Ra6Vx_+9A{}T^ ztY%5cgwb1yPKm#ZiC1bLfrcFjnfg9NYc7Pg+9Bgc=jt4`JOb-4@-2yrOOCz8jVs2I zuT_)%501gZll$+ftSW;<#ejwGfEUd(BnUM4Yk&dRGe{EVT#o2Cxewo=k1bJ<)deXn z<|vaA(u#5+%wU28qiG8ic>kIeQWDcjSx0mYgC(6VCl6vLJpv?bk}h5%CMLot3KUp$ zB7Yl?PS1O32o4v%1cH(nYQat8)Cd5T8+J}G;11h9K zoHIq5qmD1a;snd$EOf%3*u=uXlwa9YIB36C!v&Qfwc8aDi0i}rsWv~GgQIfAQLUJt$1PbLRBm!l#eP*j6`$i~bFAe)o z$mHm5I;%8DWQ5ou04G%x*tP)&R#s(JYDJGTimc`eS>noAj@!748(NlITAI68u7xVJ zr5BUhVy%0kywmK~rClmjJBg)UjO0?G4B6x{U`SA8I0kp1lVL2vW+Eopt{Z)bXFAav z;6R&^n3JwCO1(|Shf_ue`{!lq`cRMhz9FWg+QL_PE56}-A-sklj>ayOrY4xiXow4< z6`X5I3~SiiqyK&rnT3-$jg!EGqEH1QzoSOMQ*Lcknw9dVm*^%k?8c6J`&9S_tAu-+ zZut)nCvol(sf}5w8Jws-^Z`P2Ack4VI7do8XG2G)bi&9pQ|E`Kl`;HCLTl%C8VW+? z%!`;cIk9NSu{?Q{`HL8-f!ydp9S<5(6gJ#C3eCE886e4Zm{*36f4q$Q$CHJSm~# zjF76rkeW7;x{#5a^pTWm+jno#i@mm()K52zgSCBiKsEYr!)SiH$JF4eyFWun!N0qU_Ho(9H5x)Y{YCbxBBFeguq;a2V@#ts zYN+g;FF^`XN$THFDvSQ9sE!Jz_G6}M>ZYh(r!s0#@u}X;yibet*r$o?uj|=|{!m4# z>i^X@&z{PNF+-{je&P|nHCkM&9KNe=3^~UIkwSq%f4L002D~o_@+_CFv{N=cks~?)p`1ePBqieE? z)uaKJNY2m;FM0?z9-+zY=@F z&)Mtw^WnUI2qq>qc<|gx2s=0)OlK8>P@)KpLX=5$VbY9hA2cOv76RIp8Fx#2&o&pxr@tQ_uSCjj*!9uLx~JAkBDe#pTQ$LU|4yih+acqCYR;*E(GY>a;_+ zU>%Bw?9nrpfPx)@2lNOHut5JlJ;Zf+o7=ySKYw#GJM{bi4`6@?U9=rU^8d_}R6g^- zgV2EqE_e_={Mcj90RveE0evJX1lK$s&I1wzyr`rTKM1X3PbB{Um(WG^NrYKH_S|#8 zLF)K(&OZ0pvky^gwRTie|KM{^XE-7BltcWeM596@-gD1gH|Drwj|$f77uHznbcRnP zp;;Dco_n%&P^3*FwPmY=dWxuW0uJlJc~G!W!UYMjV=S`DE_)se9{UUi!0-ZlyxtR#N!*^UnbjBL)>i z>+BPnuxc$iWWpXl0P@NZh>5V4v>B(CKAruu4}&A03eh~8;T)IAD671z(4iH5&^!5f zNihrg#%mCVNG(1DFo&KGzNbKa=tflkUI|Pkid(u`m&R_w29(+{Hf+ef0me z!+gO7Voo1l(gS!q>Sp-U54D(gzE1h(uY<8%k^lF7_=3M~4+5IiU3~lEZ;yZe%^A?F zw-V83FPZ6YfCR*!nCx}E%el>Y1*Ay#PN$E1-0yO{Fqpk~0g(shCxR1fhz7C8u#icQ zgAFX92~UW^6smBAENo$O+yRdm$}onnaiI-wh{GJ}aECnXp$~ru#2^ZBh(s)+5s!$( zBr0)AyI1`{c4zh?qMQ$ zz2hAHs7F2Wp*3{;Q6UZ*ohD@`Ok+X-mp?3|eVFOP@IXP44e1UPLU$G~vd1Bj= zo^3`FTxxk_89myb_*k^6&>>^C-h&?ctwUSbJljG``VNsEwLzx@q zJ^%^1+)A-YTM)Nbnz;rfHPvb8K` z@spIq99FC<`Um0?5?+51_pgr4)oMf2+JtzQXt&+oQ#16QXHAtoV(cnIsG5+^S!X;2 zzK%kS6&-Aahl~v&X+r3M;S6JVF&fq|hdaDs2!J@mBc{iPL44v4r`W?H9`TAZ{9+Qj z7y@3p2Q}Bq);X4Pw4-y!1CDZ6hV%o24Ux%_QWh{XK%id-Ic!O;>mpG$1RnE1*@qa! z9hBXp9{qTLkIs<~GlT{Kyy#g{z(ml0(1prY_RwpJDP_{yNXuOIGI}qyrqF=Jw|W^9 zn8nPMGE1bfcd7@N4szyShK4SD-v0}Aa8?fl@F+itPV;u^5x>hmU^`vb2W{`+5(JHo z&HuRaZB_}-q@81nrm-UgFpU6B(`6lymh@wV66P@r`abDR5zbD;Fnq*v*0r8=uBu#W z4`KPtdHx4&U@dF?O&B2qPS0l${9vp?;5r!Hs$R57MsRgoItSr4xc@ggv{>*Q>QJ`@ z+r4gfyW3#!UU$9UJ@0(oo8I}h*S_`L?|S{)-`u(EJW-3|LFw2dJO*Sx;u2(-gA%$>S+(=1lU>@@VS#`f+0k)fn_O5e zFkL`8_`n~8s@1vX;92qrGy z@f?EL`O;(N4F80A-WM|dLf)=xO7VmTA!c(IefoEW zbRiG@kb^)YehNW;$AMS=#1lobEctRIQn3Ry@ne|Lc4C++K(mGUP(wioeaY8^88Qct_HKE@Mn37GoyX zVklOMDt3x2CjW}52xF`$W2U%@u{dKVVh^1W2}?LmCI}H{NLswHZn#1pTc;3!g>V+f zeX7D8?$8cGA&mDiQ}lrk?;wrS2!&D@B#|?S!iR)r_#)6ajnwFel5=XzSB-u65D&0} z2oXEkSTN*xBK3eHFc*&5co7E>5ASeJ%29@`VRd*V6n5kf^7s&3VFvo35B0DWgJO^P zm?#+nk5E^R`L`UgV;dTh5Jl*a@u(1o$R!GSkNL=VP-RWZf?$I;i3)L&T=jRDn358h zf#`4@w)cq(VPU^zZviK7@iuS*hm$**lQ*f8Jt>qysgt{rX7)gWxwu!mh=OPFjqlJp zX@w9*w*L^Sba~tte5Qd|`n74Xw;Y?b5LHN1tg#L_F@y*~P+OE#LLp^rsSsjGX^~?b zs$?0C_9JC!jt=2m)JGd>`D*N@dv2sCI4%ly z0qg)(2Z5XH@GOXQ0qgJ{nAn?8g@N0oU{)nMA6QaoQV<|WOiTF?ym(fiw{ZZK5^c0o zKy?-}u^}HPC=?+a3E>l0se5H|jdZ~jP9bxWQ5D*A5ap>AvB8Amh!-GXmwe)WT^M?7 zga2r&v!3@EnAD;g2_YD=p`L?<9Hya|kx?nZu@ek|8Pi7?o$(o=F&c`onW*twRN*(b zb)fZW9Jnzsyb%`!S}EhHj;nbb8p@!2XB|-0c*^;R<&iMn!AQ}8iRs`S$0;A~0UwYD zipED#l)lxVVxGqAye@oAc7DhB5e6Yiz@P!? zUxr$~2Pkl&jSSH!yK<%A7bRn=BV~Fesj_|cNn>9UCO!uwXEG3K!Y2Qjrs0{Va{^qo zGAan?Ct5P7KSd~p5-g6fm~6@T=`k9wBX8)%m z>MF1zEB`<%qnfCE6{fpFkz)a>pTda6Q!I$IEi^?|+;S}bBT3eREx!sa!RmmUD5M}| zRz!NFAgGHCK`-{QnA2J>lZp`5DKHCBFb3l~3KMJ&12Ga46^gYSj>9oGlQZYJpSQ12Z+VEUjcSA0tAP5jd(!Q&K}TMq{d=$q-88FOc)DE5i={N;PVCHH)(lT%#oi zn-G*UHf4jY3V}BCI+bgq5DPRBa+52fcMuedH&xTHS+f)YJB2oQT@O*KCt^76l{hEM zH-gEryfQclL9&+ftO>C>or9a`=Bz!tR?!MC9M??ilRCKrpZK#>%)zvG`u{qCl z#Gjb!xt|NVp)0zhOS+|Nx~Ge}sjIrH%R=|ax~~hnu`9cnV+3$eAnOnZxf=&Yz!0^Y zlvPV~vn#yAOT2u`4n~l>MxX=i!Vb9$1POt=y34yX;k+nhfGGq^!8W)UYY)!#yKQkw z#Vfw!OTIv$ySl4=&7lstyS#pp4#+#brNzG18@wmfC?!G>^MGIWkpI3J(oWQKA8 zYrb&Mz6k8WyE|*=o4^Rsz$fCu3ZcTud%GbF2g)lE%;j96@tym%4>hD(tVKWV&@Ta5 zzZQ{OC(>T;g%CXaTnTep5y2bZ**0cUnpznVxwDlH06#&G}^&D+K=+z_4iX(0k_ok17OrW4L)7>~0sNera} zv1Nzmze6%?j$s#pJZFznX9#D0h2?QbmM2Swj1A$j{R;s;2LEJXOvb6K$|c3d6Xd~g zzz*#2$`C-nK+wE!kPd1P2RH%0>cGcvkWF=*5W@Uz#N5kl{Jap5yK0~g=s?VWe6b55 zb^i$#dADTYDHTmSu#60MrZRVu$`CfE7dZD2xKWpXk#3;_sj%paW4A8f`)g3t@Gj|Z55IIDc< z@XdkAD51<4TbacZZG5(ed=IfpT2mH8aeAq@xK8p9^{@kBa}JX!%82||^nA}Zjnhli z$_ug6dcnT6tjuvB&~ZS}4E@k}?8gnA)C)bm=F7W$Z2uV%tq>E(9??dxEXhxg7@>!q|(g z*aE12w;wc2j=qtxMl#@#4&HXMq zzz()&;IgjkyUy#SL+kF6$N$YcXq&d{-RsAW?6CXm?E(Zioan%FxE93P$xiLnZtc>e zxtj|QoqO%w?(N?W?%^)(<4*47Ztmy498dJU=+5r#PCQw}YLx3mVB|;!#!Y~y7ia`d z`I4*d&K!Qb?(9-Wca%p5ut)yTNA@zbuscXc#I{m&NXJqFP3N=TwiGmaRg{!b?qW&J zi>8g|D_*qA4ba(=p;(&1W005rOuOTr$$c}Qdsw^ zrPLwn{q#@%k--5%P!r@(+c>^$KYOpfLPLKha<4+Lx$#@fQB2=aJ8JCAQIk?1FCtG< zEA=8S#ZtpD>Jn#D?SNBnGbk>xDLxhX`jPeka{1#I_2irRbHCC-W%nuMh?Dq$4YsV1 z2c*WrU>N^Z*CAHMx|~NUm0e5q%Q9Cjb^BX0?F*q-bJSP=mz4;37hT_ETUjv|GZE88 zty0_>l4T>6MO){kcAIrv*=j+drSNVKSuD?bu6G<5Lg0=hpJFYKw#Ij>DG`|!45Rw)hpJnUdLuN3x(!| zwpy32J0~wBJ-m7GqJyAUFJHfT0SBfxIIv;Ai2wE_tXMGP!;lk8UYzh=(50C*Z|2h{5^XQ+opNnJ#|GACV!gaPN40&`%XXp1oF=ys3xih0ef_kZ$9q4`)4!=>ahm_ zjvfH=pQPqFhcAa7m`5NHNt9@`bu7eC!vLwX4!aFW z+Q*(qCK_lRjqt%oBO;B=aG)5+OO8YP@Ea(|5<%SX%*^5%%POoO5KF>z-V94FhrU_| zuB+gbb0D$qZ0acp?2MDnr07adLYxvkM;-qZy@^prA8pi8NF%M3(n%G)RMSio-PF@g zar#u$i#R&xfdBZ=RCQHW(G1N@rPd2c)`56A=K)^o$q%Fe=`l(j+6FoYpGMW$PoUl$ z%55Na9(Vw=rS|D3B$k3o#~+;njP8Kl-jQv-UA>LOA!&`G)uD4Cs8&L3n>=UNc!E0? zQ2@``w%c!!(vd=tND7xe2>bg_pwOT_(_ewa70I1*5U^3h(}Dx3T#&r|@uG8XLu!W_ z=ebRtbH0SBVS@8@NL$?SHFz_GAqZ^;fxK%+pmrX}r{t9fqS&F9<2`gBh8=Eo=sMeC zfhsriOnR+79cntQ(b#mF(5%3EbDgG;Zu%%giT3(yum_UIR$k%>`)su3dv&vPX_i#}Ua!!Yz4-vfwf_-qj=Utc2xs071{F&Avb!gIT=Ybx;r}4(4lrFk_ zbSkZ(mT`N4+{I^od!TeBr(7M&imGuA($5e)*%qr@q-B$ z2=|ckd*E+@`hi&Vp9O+^poIkDcxL6Sw34RTi<8}C2_ZN>Vfui7J@(l@YZ>Hv1bSe% zf%M7!ccY#M*L9GLM?UQ{oAMx?b*zFSKdCKkYHQ&W)$p{d09Fkoa`J#&@I;fX8KrCZ zqhJMv^N$)?P=gj+8)-%Wra)Q0=eFjF?HuWI2rokC5OnP00Ur^_upF|x{oF(%tU1&3 z=n|=Ppe+9%IGSDONCG1HfiPl+x}l@))|t*3u64W{m=1Y(4i*|^eYO+cd|tA<-a()` zHjAS9s`x{K^+Sd(Oy2U;^FhF!a3J=0fJN@{kCP=TC?MNGvsMTX;mJdc=fEI72C~I` zu+WLy>mtjls6@Ju5J(vWWFh63#QW)SjDFl;XZ|FitR<~YO=}Er_G zR7$KtAt(_P$pjrjn8HxzF|c&ZUSw%YTHZ32x#VSIbXm(-PRSk;iNp~rdCaeMFf(o2 zUI?MLJi2HMB<@QUL1;KUI1WS|?r2AVq$wX84(lD`B zW-fV=Ov;IqR2xVsnUzURI>e|21WPH=@s-B0G9<1KRE=^|;uy2B%`Hb=792k=FmmmOG0Vk0y!-i@(<^Q`~( zOsc%2L{=n&jbA@XBQm7y;~xEphaT@iLzDE#qz*al>kvywdfttUlNE^jL{i*=(Dt9o zrDSj;H(a(JMSpklUw#@mmHtt!EK^|zpae4B3$O!eO*vXrly=^%mG_fI9j{qD*-A8K zSHGR1n?L4Z%>4$~Gj5HQJM-&1B@ToiHdO~tK@yr4jV>LrQKUfZn6snYM|_bu2VUb? zO~sC;S$uVDNI-T!#+7y;9QLqCLWjdd_=f0ba6Xjmk8tld(E`G9n!Lm?De@^!l>u)m>G1SH5d{J610w0&egB3mLs2@NmIFpqjP z*^D4*HnRP>>t6d40%E+iQ9`59d~~>E{suTt<9&~L-VnaQL3{Fu7GFFuw_l}O-1MH0JM?V6alz1!T ze(JDCLa;TnjVl%(#W}#*OFUH-9-CLq7QAxmK9PO+eLsZdHkvKG^@SuS?_|~&-zI`Q zlI)!}Yi9@K_wl87!W^skX--Z0_s=?dYO)W@P{Aj zQ^#Mj#E--(_B0&@xqjzZwSIoZIQ_`vhr$C4|MTY``*C4GX6SN{9oPZf(?0?%z^`eC z02~~(N*lU}KLbR)`Ku%|P#geD8}3^N49viFcsrP?zzvzee(=E05<&bK5x&7NwgN#C zd_Wf5AOo1Wo`W=;fVmc|K^t6(7`llCM4Q{YL6LC3W73CvSV6F{l}LGw#v?+`5JDwn zkO-_GDp`mD)GsFVK`XpMEX+bJ+(Ir~tGIy&FbqR@Ah#|oLo+->G)zM^TthZ&LpOXw zIE+I%oI^USLp!`fJS;q(~q`+`(2UA~F(0 zN%V{y)U-+}jf+7;c;Fk_NEOk86%4wGrklhH`b1JpiY&50M`N!NK*8+OpOdk#MSL$j zIkd0&zW|)VQ`|-MNI*+W3U~O25DLZ+S_gaRtOZ=CftUxvn;bv8l4Cofb%=;#<3P^1 zhgmxtZ|R46=nlL>2T^>m^T;(`1RHQfBW&EoRIEWgb46`Js{R<1`zoMO611s68>%Wt zeLM>CbGQfiposdQc~FRau!pz15urF0dpLk|$i{+`wJG@re=q|!vMJ99BCqj|3ap2U z7@~dDAdY-HjQqoOY{BiS#mqkn&uL~{T9NM7tmUa=LrITUuV$#BGP;~oihSI~cX-K}{6)jMwsTv)O!BU8>Lrg`XkWe(R=2=XMXv{O=37-Ipfxx1H zdCZNF%*>F7*7FAvqD-H-%q7aAn3#x;ln>anOfwmZg@~eexQEVC2ol=NpRox=(GY(i zEWaW_HVO&$g8<$v3ZRJy+q4MOj7*O>li&Xg&VNv(=wu<$BuHp!hlt2172CAdtguVF zB=^!9rO8TJoD%}7ue0Ea_$;8dc#A$$%Ma?M$nej}0MNw{&{^^&0>vd?vJ7`5MVj71OL26fKaYKoA8Xp$0*<*(|Lham^zMo(_2sAQ_P|v61yr z5f&jB8HJG-oe}6RKiRWD(Ta62RQ~)Kv5M5Nn$)tw6iT(! zO68PG)s#}fAXI_M27ORbjhP3aH$KWlW;q965eZW?M zK^bmAu#{*Sg{dj0bkG(12Wx4U}efdG*3DzFP8OoYggaV16nW$kc zH=D8;<;a+%;Fy>27>vO!xcSL~2?<_RnKd1_kl5CnT2{}QqdRr6d*xH3anDVnnn0x* zsA8yI#0oDtdRkJGz;hWJQGQbfW!r@7F zKpe#ZEY6T0)1e&8(IL&*tlR&|9p|ygW+GPgnH-gcS(Xx>-lBwjR41y{c9O zi-f~GzTv^y?)jcF%DoT@qUf2ia{xPIu^#N%EbS=`gRvj*F$Qw zU9mY{GJ+)OP$a4ZQ@sC-x}W;9d&EkrS*ii@xu!s%_ksZMGY)!2(sS%wjDQ=}%VP)5I zz$ltR3Xbw9kP@j=At?ug3Y5~Q5q?*Zh+&?ptOi_LellTw1r&Rv3ZeSmtpwk+;8&$0 zDn;9hr_ze3VqcYzuuTP(F%}g`%~Uc*V>2$}ucDN*+Oolw#QzndQLTyA+6ThQn~+ea z=hG|o$zJFrQ*Hk`T4gys)@5F(&@6OPtJdOrR-Cdd*U2pB6^YKGB1RUi zMHwjK`bifiRlcyUnw{ZCo~_f1+1rYi-RiA=cs5gZt>+>cOkSzyh1Xe5V#m8&P&SH9 z4!@I(+wZ!7@LCJ>k}tA|uk|uIW0s0TOJ+dXV)$wcgbia41;qaPFQ_b>INo4zh5#KI zKBh$$1`A>liZDo}FkY$E&5$yOU@;p8G0qh+*2TyZW7RvA=c6z)rI0ZiyX1N+Hn@AU z9L+gcAh%(vZj5qhJ$AqX-J^89f`=YEt6kZ|Gb2>c(lvKJ;L^F#(8?-{J&;CfXq#FybT*YfH;B5ZGO6z73 z`erL7iBS8raeQilK!=1-k>W_T5i%{qX|-32wNe!(mM~~sJL;V{2VQ$NY74e&BWZ$G zH+@q!M-GXCd$wAMwrK-4Ys0pCJ2Q|I2zRT8aAWIC-rc%6H+)F9d}BAc`ZmCZH+eGy zdeduZIFMkt)kLU>!>g97I7&J>$kw=lcHX^Sij*$xmpfq) zrV^VuwR|nN!bUf!lQ~u-I(8U3oin-^6o{XLD&hw2li9hRqvkoWMG5*_r4GdZ#k!lg zy5s-UrYm`X#0zEI6T3tqJ7{#qgh{&rEKIlKjOf#*!@E1d);rak7@36%*&95|RByZ6 z?iZ>Xq-|-F>O6^vy!IAbqhLmvkUq`pyOZ%e&=Wo93kl;pvjbnf*8DwG2E6(vE}tl} zsa+=BGnwkc7T{y>g&4lo#^nchZFr@=2~Uk~TZilh@TDN|%ZqM8+rI9DN2E|#8sEh^ z9vWH2LLfXQ{ENCEN0TA{=O^5t`n$9v-*NHdKmRkFTy*kNM8F+TzzterEi7^kQo#+n zKn=t|x8!p9@N&NHDHAl-Ni%c(0`o8@WSM+H_8RU&Nfa8S@;Jsc4dc3b}#~7Hv%018+PDzAW(^3_jPuq_OszMvaX-fI(8-x?TGOx zhHrRT*MVnehjq{aegB#)Gm3l{iHq-d==QU35BNzV%EEcRJtortalj)Ej?n)gd53R# zmk)I~z;;%3c3-Cnb-;CBe|I>rcZ!dBUni1luXu;Z_$di`km&hm*L9kQ18C>)L%B|l z$WEFmPY$Dy)Z4twsLh%1Yvsf;xS`IiM+%0iFdb=#zx-pRUALbe+h_(cV5pAn!om!!24$hc9|zAqaS*{-<4^HccDj$xfGBk$&O~JQw*~D z#J220(GrNk^5mhbB)yO`O^ScW#$~b4+gKK)P^b8aWF4-J)8FX1kA2xM$Gxw>n1_Rr zy?qFPcp#W|I7kOIh=Y{KcXe2NIDiwP2Z`iI{=yds;@|sfhX7tz19ksEhvj$tw`o^j zt=Dk1{D|H(jYY7F0U3>1*Uj*&%i^h5eU#lfiuOPNcSz}wSpP+7|JlEP{FlVNXH{Mg zip8IJfQSPGLYz1dfW*-O!AKk<5FqF%sP5syh7>O{ba?S$#*G~-I#gGX9Y>2BPd;pS zPToa!=iWicw-16!cjzAEqnPfTy@&SBrK6bd0lJ6k@FB%F@!`93k(O@!Hxt5+bM2Tq zg^KcI(|8Z7!rXZe!ajZw?g8C;vFd|!58$cQd2VdkvuWev&8v4W-@bnT0uC&AFyX?6 z4mIs1r<^23GY@dO+i35>#C!iPI)~2ppT39ru0K47 z?;^f)dD}hk{f^%`xOl~rH$Qnk{rdLrnranVBvKs5jiy&^Exi=eZs)kO4o|=NbXRc3>9tNh{x}8VJP`O3$wn^1 zXro^EJdjR04*&t+`Q~vSFx^mp-0`mrJ%G7vef3)dc^+14J5l;)=r^@PJRO3+;Nt6(HTBM;AZOWyptFqdvtFOWuE0zce zw2nGD363`tfL067h$HuI>UyR&^iiH)at5JxpQ3v&pG@=>8@CN^}|m;Q#~ZlO8x$O+j9^?z)L?D zG1=0<7x`;j!?HpgvBVQoT(QMiGPG@M0&2XWuos<~vBuOI*fCTGZhNxH9kvO?u137f z7cURob5D1;UDW3~|KMa#x#>D(k3J9l!(m(q_;ddc0%ou$E=B#oOA*paGi`2OmY%c2 zMl&PzK$8^t8}LK%oWqM5WE=S7Xfu{g`AVI&Y=?C?YMcsP$s;zR4;!?RTG!E=B=nj0P0JNcY0 zl~)^CdKE>hx4zHodZqJ^KPMga&p%3Sq)tEmXazw$nR~5ur^6TD`|ri$9li9^Q(wLH zSJru-4(yak>*2BT1L*bRlV861=c9jp_V#tWtgQARKrg}R(_g>+_v4@cee2f;M8=W3 z%T+s*itO}fzyl&MfeKt80~_eT2SPA{5}f}a1uJO53t}*X8r&cUJLtg=f)In~KvoD# zXu=bsuwwBL7ds@CzjTy<1*u~P6lw^C62zqhQ1F0GVwk$dm`FMBNnrxZBg7xxM(3PS9&Mk&DWI+k$rZ(=YXCCrZ$Xw+{g(mg>4&8rKoWVB#em?u0-u-3U;D z1_++<)L%07!VX@XV;`z~XhanXwyd4RB`$1-)6gQjhpp`#ue-+sm;=(m*fTOIJ}NSa8EMLg1%04C+HJAjTUKY#lm; z0vUCgmttP<9RsakL-WFpeY``aUk$58&-J8}n1Mwok(cs@rYTNclOo(%9`W{K$U{by zBI>Y?*Tkg`efZ8E_4o%bq67bdcbE=!6uIjmfulu>%G4-)<%iP(0}p+)E*}so4~qU8 z*ufTdFY?$2&-~$=!zT83M&oRtg5(Y(J-{FI6bxcphmX|VqjrX6$~|}?y3;cjMfRkII?PIrtgsp5R;@RecR=R2(E5*xk0nNHr4FPw?T7A>r|l z)SYdXZVG{Q7}cu4e27ok$W)39l_Cb9mM}dW{9p?+7{d*Yu!J>?U=L5Y!!)9qEh*U5y+k%8WsMz5`k|z)Ac{FpS{ek5 z^pLqygdfKRSXoa3k9q%`cOF7^k2=nKk9zdu0Wfh%KAiIp1n}axKZ!&qiN>KH2U*C5 zbtPosS>%5lImwm%%arZGqkmY2weRW)lbsCZ9mmCxNvj8yQ$*#V6zw5uj^#RHTMq=- zgI|G}a+UM^kb1yxun#a=lJz0jdpL}g@Wk>zggg)T^zmt!Jc*^MiK-#NVLKm#4nu<$o`d--j&KpGZ9y z42vynWkUg{5J+~j@4FSOJ`%4&RL4%VeGYDW``g{tHn_cAZgP(sujf{Gx)Is#ZNFPN z>qaE0278VJjM@LhYDICEP3aFo-{u_j@YY!&Af9d?MLs%)lEO;b7nnjoRLn`ozmpoG z19Yb;B-v+E*hLm|o+QQZtfIsXRB^%VlWexx^NDbV@xxvUFO~|@MK~TK2(TPD{?av> z@6vIUP|Ah-Qj5qT-jpSN%M5s_%5mnQ^lz!{AwdV28C{<7m=C7aFnPJgYwU1R*_uP_ zNEKdo-YWjGK)yXK_OSuX)Sq%F*z|SwPz$<_VG6sz#*CmmAj*r|>06mw5xL0Oijo+k zBpvkP(7oz{mZ13S9=_UvKR|Ajt!@S44^T>()Da0o;Y=p)jLts2z9`G*tlt~ieCIuX zszKi+mO1~ocy4CWr?}8-E2YmA&gHY_bz#0QyMMh-{4|z_41Mqxg}9KWQk4Q8B`Hhk z(|O-Hzo5_z_!|km?LC+EiH1n@HMvPnTKh$z5XC4-0iO0(mBw^PwT3|n_OaVOcc#YC zGIGzmv3IId9LCX7*dIz@n+Czd6bW7fotTHH-bsAkIvET~pu;{qfOHL!p81{;-P)g= z6Y2$#wxvVpjR@(f$WIsz^Nk!z$kYeo)jI7(=|#=#iQwqr1=*cM>6u{fp~ypIM?Pp5 zVBnxy$ph5f+65+`3N9b&`2=;GMU*7Rau`L{j9mrFi)9R|p6BQl1DA!Em9fxYxN16a5w2|DnXO<=@-^lpOY-FUjHEK>>3N;7Jr9MNk-s zRTzg|m?35uB5v3qD&mJVVu&3gBTAx(A&x!pOeDCV11;crG+H1qY(U zEgr`(njhl4$jt%caGasP9KZ@OlNKIf$R#04xWtUqh+aII8R&yP)WbZ02Q^yb<~`0c z>PRvEpkIWcZj7FZ1PM(IM-E;UJNjC*8O0m!)Un~=Mg(M1;obfXB>%}FIxJP0{2~7+ zR#Ci(Te!^|yh$WPPNck9WJXrxMw**NN*$irLjr2zzA>O6r5L3Ep44F7MHEL$njWff z%0`gX50wgEn9fPqAc(-kp3q?F4TYzn;GJ+IJmq9zz#ym;$5MC^&hX?HZiR2@o{Ib= zaeP}dZbYOEhEJv+X=w^J0vw14(oNP=qqK)!?880uLp%)OJpc+~U{pHk7H70>wRgXE4MES!!WFp^@Bqy4rLZy`-=?m|u<4J(jNf`*DoR~LO?bm=kaaCZm!k5jEY)VVvqbtb3KH4zNLX=+gNapibbMJy_a2;K|!~O(lv7c!t!7ZiKw_gFUdN zQNYMq2HKKUr|0|xuJH`PpdbW%Q;}Z8%+w606j?;wLy~R;jKpVD4#)omo(`3j2b(SF zJ8lGN;)9uSN|WM4u2IC8);bsrW#EkP@k( zrl*fC)6JF3>-eb|0BUU7Y1JrcWjUpn`h}I+3@vs}bnHye{EVFmjg{p^rQ)fUc)(Ou zRZFmH30T!_=nxBdfV&jt4GGw*#wv2mYOQi;i0+?S1fokJQ);ROj2sfbAS-cQ#PD2a zdf5eD?U?hh-(eBfJwPj|Fwdd14tuJDJ)F+JT?K*KqIjIw0i;)yt^)=B&h|Bu7Jh5E z?n8Q&2b?KaFlr$?02Xw?1-aIxS};;+9bb8!D<0{q=9_>J;*#|x14b?f7V*u}TJuDQ!*Vhd$hc-!2A3dE1N0r{fj|y>Ek;fn6)lCJr<13aK^>Y^^1mTv31?(4#C?8@%!(r*9l+V1V*F6myDb%rpc-7|uiJ&8{>AscB5N)Cu-VNDh0+@cxexP%lcnLvQ^S z2JYZ=mDX$xmvR&roRJjOMlraogQz5M>Ljsm5zYT;?Nd9LBGAofb9zpUK15NT>IrWJ z8v6-xx^NuJajR&EA7O7n90z8!Pf&==wj2i#8!zPma^-Z4Wr#@+>qVnI+RFJJpYd9t zQ3Rz~8m8@AT*ZYXYuV?RZzM6=rY!RLvBN*`1KWx+!wCtI(3p+k&N{@yKYU_b%$U-t z@*LB0EoTX4tP`;K3a|(ZY`{S}C<{qsggS^xurM3{WRLzz$S`9@t`vkCr~^9i&q-kH z?1hxB8QnP`T`2Aa#0`b)pvNa-tZ;<#DC-4DDP?RPoV=+SbSg((<;6OGTRYowJ==4C zV8$&Ch?q=^<$%WEXar_J1v2k%hfD~ZfC>M$;6*hzvY>R_Krx?GNGJ5IU-4)jaiZ}! zzr>LEZC6NVSipf`_C-@TElOlH zJ-c*Ri}hk~j2YqbOm{|2heokz#DfSOioDPaZqms#xi4HevUq#-cWj@$KeG` znFx*IqelP4K1eQ)_y~~5m7&fuUz{8)JNB23b!A(2U=(lg>@yydiJ9EANdR@6poCnD z_D+}foTS4vTa#2LrB%jdq7;d}QUw2_I0|1}^hIQ}R0~HuJitD98eUM!D6J%5zH#sb zpG0>`@esEfUv_glcV5s65ZDT?JcKU)%CZCwu~fvdB#ZmtFlSuLTT9E~SWB+>bZfK^ z2Cp_saAz|vD0wiUkHP1|DIrP84yCZCMh68v-~?afOE!{l+f1RZkqwOwIK!kckUsZ< zKX)H*O#9@q<-B#Vbj;zPOl-__%IL((ocC(DOhdr%LQD0Ck*T1dDsUnyl|Bulss+TU z1JB^Y=lugz==Vcd3XR4E)|jZ0;*k3TSjGkKFU%ii>j z41dgoR|Fgs4)sEg1h##!Y9#+b_4y1JJ$9`?*9rZeV#}+rM zZmUS4wD}|H4)3^c^K2_c!~=ER1D~I?`kAl&I{Bd^dS0mZWNc6O^zW2dZK6y1q?gd5 zOGf(`^MB~=Kkyu-d-|tCkfle4{}coO0f^_`IjF1pskPNj1Xl{kvCHt-u1`8T)ucJibLi=MV5d>q= z^#m6z*&6Rc#!oDfU;4$i%M}&1OLA7sQ;|`p!_l%K2eZ$i96`W85z}0FEw!HqA1SU{ z5E9S@(v8HqK71`yhv)yhYDM`<(&JE4wH9qE36l5L4VUd*x&sZkJBGi&r3h~Y#EX)o z?OiNgjDxznFeTM4=tn)X< z@hT;kd=lS{Ial#h#A`jVbpaN3eHW{#QtfYlN{Cl)0u98X>t0xYY|WN&IlpC`e|6~u zdQt?zMl2IIW4CJ~7loJZi2ngA@fUB2djZ5c7EmrgfKUR82ZIPpKwt+2B9w*(DISzq z5rTn;5fwg+IFTa4jZoAXyfE@2MwJlOos*}MUQC%W(LtCwv*t~iId#(Gsq^Q}pg3*z z9J;e8(4<0_67A^|g1-m%*sZjB6>C3CR}X=`eP30suGjkCYY6r1A*lE7f$)A0^x3O- zFRi?Ji_=nsH_zX{dE4O`yeF1oKYm%~ovT^#!90V+jU#_u`*!Z#nmKz0&08hfif`-x z`y84b$nL@CpV=T->>qsYLGCWB;KNNfioR2BJeF*Oa6W@}V5_%t5?t_syJ9owvdkcm zj=HlFb4x%14a{n}=ANq#zZz>q2_%FRvS^}o(qU*NAS;5Xgmq3zh{PXL3P~a(Au_-q zBG>;>5+ny#gy6DswA}I>b+Y7AOE1CPQp_>C{1VJE$5b;-G`VE+O*hGuGfXA?9?I%|wIHrRd;x@6xtltRN*6Vy;kPp&*NP6mp>@E5g_zh+hBG zabt~n%($U-AgY+-t6HKl;+9>0`73#NIfs{cV7?jWm;vVMV1uvR@PTt4;I^W=ezlCB z;CQ_Uf_=vOPO`A5VrK_`oUKTml1M$r)Dj2gHM4Q^*{v*hvP#-2f7|_fRTFX58d$C= zS{ozDrb70ro}0cJqkrbxupNpx#fNaM%Z>`LvW~W!X<-?I+bs^qhTw2O(G{EQbKF7a zfqV#7O>To)J8$s9DSCS)zcoB3aK|HooT5ko>(EpPMu%9^m-eq_SJQV!$VK$VkD}Dc_v7HA} zdxxKGG2(^qiqP5T0kbj1ry^A;(-Jv)v5~*d(KuCkO>E<-+*JhDuh1O`JO_MHXF8`p zK=~_Ph3W?YGle&+=&f1(dO%4Qv>z@l>>N7?Q2yW%I(cl+Lme~-1@mFS1X50Ofx4XJ z6sWnkqy~5ptle7Vb;63!(1NNNAp}ZD5hP+nAECjBzleyt&ml~GIHb`JuLz@Lna@T~ zBGJh#Mm>sL&v|Av2}Goaq%(@ldKWPn6z;OUm2?jyPdN%rnt~KP_K}Z&6r@oA36()A z<&aFF$U5wSoJiCTjFE&G`ntlq742g#B=SdvXfv&q=;Hx@qR6G@HoO0PxuYF#p;nCu z$Ui3L4uL$xVG>vJ00GiYE#Uc17g|~P$h3s zk3Vvy75|t)ANr`rJZ48sV{%mk-7;mM?RLaCindZ&`I6s9YcX-N&@4&c~>d<@m8jVQ^pETStx6_H)h z%#}-$nM90KaCCTz=9X9)pY zUQuoT^vYl<(yY2#g|ZMZ16BW3JGz0DpqhbeV$pL;vE~bQ%lzU_C6*8)B@Y7EBM9;| zrV)a$ZdEB zUqv=anEK_5tttsibgq<+x&Tp9qB`1DqzZuzr6rc4Y%Esl(zve5tAXzgA|x+kUxRS7 ztXYxgyq@`w^Eg(S3w>$hvL(&@MsFIE>=+DP}<s$_zXB@|f$jvwBTuGxH!Ciqgz2RPn+L zX4oLnT7q7|7H~V;sSYoa`4~h@L9`y*XYO%tPWcIZpE$oLqU|o?7>i8;Qspg4~ z8WvQm+LfKY$EP{uVMlX!)L!B9J?=3WV>fmk$jSeQJx&ZS#@GXtO3R9{i5==&7tPaV z0Ch!F*VV>kTR4fX$D%RfY6acWAj@txZKO?YS|NsILMC%XJRlMll%Qg6@i)N5g%B1P z4|*agfz~cC@PG>(3I|tSN-SDE;aaKC`_}lzIc{AuW964z%23F+l%aUI`T_h9^PO8) zk?(*>ik$jKg5dU!fAHcSEyr3v`te{x8$^Z<(Fbz;)}3c()hhEynr#}l7<^>s06J&K z&>^!AZoMNPQt{hS`$w9sJv}cvkB3@qvybZNdy)7HD!2uNk@DyqD`ojp3mY_cPoI#VTY@O>UaIEgFsd17CiqBpmluY^j>@4x=P+&5v*%{A6%c|IW!O9 z#zW@u`=NT#F|rP|2X^qFUu5D*FF2mV4(%P6J@hW1j&z2<`y$7Ga zAeN4QGz=@m*C{{X?PcR5U-*P+K8v&C^XOln%oF2EOYX6Q9l#y?;TQkS+Tr~PMG~Ro z&x-BW(SG-@!}_3`uAt0dwfU#*fs!mv($-7e`uF4hdT;;!q5rbN9Uh?P)K3Ac%K-ch z;c{aDMP4lh`Z&21Ot4Apn0)lA_ITz^}SSumpDx1@}P( zw*np>Aiy}#25%4tb5I9&&}G~K9)AB22!HU=c#sH-5MhiE36oF>myijY&boi{FtMVk!YaHnWm8n; zDj3B-9%Z#u0x`oxF}44aGAq+E?XV@`5e@I6C!aA63K0zk$}7XK4A4I(^kQZ}vgCj~M=U-LD}Qyb6I zHnZX}EUaKi$snxqu0Ajwx+^O*^eOd|L`&2})vqRN@jyFsI-zPbyYn5#lOhsSC1?~Q zY&13z^d0}uM-@+~Q%C3RpO@=`~y^BF7ROw%++8FWo^QY(TqNF9bB7OES; zWsB6SBDM?BloH4eqa1aQN)HuL6LolEG7U?DCex551N2L=Qx##6L{t%O475=#15;s? z7Ht#=?9m>%!cNZr6N4-Y}*dc4I)KcFSU-MO8^)OzC$0f^jUjtTP2Q~}) zHD`bzA*GdI7nWfg)?ptOVk1^!CzfI>)?zOfV>4D`H}?9_q5U`(WJ7kRjL9u(khP>s zQcU)HNLC7egar=8BZvemrpIO75Mo*)0!5agF7V?bsVt%;U$f3;bFe@Ntw!ES`E+VA zfHrBjLTLMDOENCSDp1RQs{{&AC5}YOI_4v0R=Biwc(~8|JW*$Jru=r`{JO#&{sFGm zmSxuAFKEsxs_4H6?^~11TbVU(?>0Hn!Dvx^_DTrX zaC!f10gDW4u?C|ogG#(s%9@NI!q!mB7JPmWE09TjNS8*U%^%Fb9uUwf#6v>*#2yad z9F&q6|Lh-9cXdq_E9*fY9_&sjP;a*4aFNq{Y9m<~H!FDe!GbrmCa`#%J6dN?&CxsD#e7NhcPEf}vtoFg zi+sC^c+*E}Ps@3YEVfc&d4MElMMjOTEX#_AYh^a!20|i!g|;G&;O6ObNAVr7Hw#7A zt@hy^E{B8B#dSvsNjEP8TWIAzQmN=AgaZRf!!-eAFp3}}9~wl0GD97P?)Z*_7m)u_ zyvXi0Zsqe5L^x`gBHZCGY@>GpG?~9#Z5C!XM@rj3zMj!YQp%mkolK z!KH#hr!gKQGT0`T`r|*gVl+zQG=RuAfa5g~`9b6(m>A?mcV1Z=S+ zb3>*`j^v@FUQW@=4vdZ%@|O?)~|fcm6pYEKHJ4#UuvKM0ozL#{Y9awr8J zH8e82q*I!js|Iz#LI+jSf{4fERUD^sA)q|Qk;d!^k@;m%%DSJ5*jU<1QQ*op@kLrz z$ttWxtg}Uax}~kbWxc$5T>yHEIOMBig0M2a@%U23WHVbow{0bGKY;JK*DfoLnRB5Q75e*$Vf@VvFt1M zKxi<_4R8d9a7?GMvIB<}C%bRual~c0=j&VodcDiWcOdJmNGH7c)^#4tyIBXlUuPwl zw6iGUb}UW7hTa6i8d(gk-iYbG27Cy29;E)wdtB7Kq=Hj)Tz}W(;?feYDb0!s;XoO z>F9a-6lh+yR)c5r70@b+A6Loo3^Q&`sAAidDiWzoc^xL z1N+L$CjC+jgFO78_{oIwsr0P9%w zZ!W7&^J=g9q1IepsXB77tSaOKMdpFNv0Pl*t()7qLgg(huYY;3HH))ud~PJm<9{rR zWZtn%i^rfUE)v|cJ>a$2D1c{+V|J^!u8g>RE8;F7xVF~pAIi!y!lW@S9U~28#gO5{ zJ;X`myxJ`=)nSk+qJ7J&??Yvw1&rfY2fkRP(Ww7?CF;w85?k^2E6D_nB0?;yCBJD5 z?B(5h!Enu=9_+`(4@#q788U2Jw?Eca#1 znbdmnr&d}(ANEDZ$7ltsJ-_3M?4jmJlP$x^^2N!Z%#)#?%9y9(uuLMhjFi(c%>x=llAR6?SP^3wd2o*APXi(lcUS{Ui zdw>sOzkMe~@}qh0fJk`f`q}GgvfsITIdlKIjASt1xp*yK#++Fbf<}%WK|)}s6=J({ z?nILOm$WRe2lwt3(Z(Ui4S37=eYxAhcz*z}H_=giE zUcG$%j+|KWqRE{LeTqDrwjf-&bS*=4c}`x@#(z_*Ud`I1hZ0bruqbgsBs=Fh&K!JV|wuja0O1Iw5y}S4C;KPd_Prf{Bmy%VJ zJjebV>hoWzIaO_? zPeY8svsG6HeHE5!^YGKqMg}2-k3awa9H5|u81ADX1n=Y{5o1u9WD$U?nTVo_BE_@M zi2Imk&`p1>vkzYtW;7#GBF&>8YhSem)I$dO2&9lP&bUvFY>DKdNH=oF&Q1z#sMwcq z4ak>^2ElW{jQFJYSC(tm*yNKC(Mh98W;|t*n{dj>&V_5f2$7LU?nY*X>!_KbNDMl7 znt7B~YN>b^T%gW62E>+JYS{^S>8PZZYU-(|eurMFC-H+LtFV?Ap{42kV;6+yNEmBQ z{Aji-Yqj3`>!rPNmkx>#4y)|4%z78wv$C<4-90<(uwt{=W~=SC?Nr;JoUCRi?6#I} zy3V=iu9Iv|vr=k?KmF*MTD$+s+Jk_IRFZ4ZyYcG#oxS*W=gtF?`fKpPr5b=6bMhAH zUy=w%Eb+vuS=1i5sXBQr#oqDapMSi}n`@=|+|%%1^!^$bV;gT<^2r>VwDLYJuLjQp z2*j-O&OG<*^UpvB{g*rN6m4|T9}2DX(%dr5-Nzq0E%nq?S8esxSZA$u)=>Mm_19pB zE%w-Cmu+^{UAJeDI-*J(k78%XE%)4X*KPORm!{3$zUP=RaXO;mE%@Ms7jF3BRO@{X zL{8axFyP}NF8Sn?S8n;`lqwDpI{o~!uD+0CF8b)Cmu`CDnnN@&laB{}`s=XAF8l00 zv!_ox=%AyHJ0#io56u7Ey>kyQ7}f*PJz6FWk3KWzlP?7A9Pp1nk+}YsJU>3*kMXp3 z@BR1Shu_*uy3d1vJncNNxJd7uV<>q2JfM#~_1q(BJ@(eqkYotug%4j6Vh3ODF(B(D zMIYzbNIfVbz6Lt*fe<9!IgGatsF?(C+zStpQsa(uzL&pR10g=$9Mno}8q7s+LM5mqO0rLO= z0N#N>8;XU9IYf;~1B-`b0vL@#s(_ zE;+#4m^D&%RWsYk*2R-blMTq=}j#Z)87a>qc zL9);!#7m7jKDRbfp3szwOr2@YVK&sf1m>*ebi)C zoYIyumL)%|JBa{IXqyKx6C%re9xJCw&1z20gX-7;0_FghKxn`5km{M_k|!BUYj_zI zn8+lUKZL+0<1)n1eDa$K6bM1^$ey-EWrXy^r#1J<&wk479QkmEIskwUcJv35K+z?b z5;)FELc~hi3lbRr$S6m#X*D4lQ8FX-IgXyhqy7x3NJomb)Sb{DuezYENXpWdy40Gf zQ^#3a#xLM0%UtPeIu|Nm%F~|u6m5FT$OGU8k(cSqV_gf`PnXKnrV7oZHA5KDj%GAl zI`yhp&8k+n%GIuV^{ZeFt60ZM*0P%QtY}TETGz_fwz~DLaE+^6=StVQ+V!q@&8uGb z%GbX7^{;>ptY8OA(trQ}A^8LV0RR91EC2ui0FDFV0RRa903iq*NU)&6g9sBUT*$DY z!-o(fN}NcsqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*m4N1J?kV|(XD8~nFhUPkEBA7ZBnkKez42i_6??EXD`Pt>hhlwjxZLTlQqUB8Y! zd!YOJBXi%|v7?>uvhDD9k8lvV^N)1|&BM?KL*22$IRz z4Y9M&JLe(<&pA5?6v;mXHE56-Wft^t$PnoB06`DvgQuPl{3G)~>h#l(#R$D~fIk~9 zcMs72?BfnW@7%*no&VG$5OpdRq)%|V?IVys{t(3Nx&tLT-LrcVZ8Smdl=y%@j&iBb zclOlt4=+bsRCb+cp9uA^1FbXi+4>m&8yeC1EF3n2V+%Aj)mB3QTy4%GsWj70$9Yek z{7_rb+sb(E#s|Nz?k+^2%!wd{U053d95hVIUiA?;U z40j}_2jHVfy&IuD1oe;X5OIa7p`i_ND3IMjARWDfKtEhq4;aR&boZ#o94#jiD`GKm z)fx^DAs|LFa_v*+Xwc-kWv&nwszD$6$8e_Rk35o4AlqTbKlpLTt|by5i-eLJ;RrT0 z{^N%8h?^-<88=jI?_T)vmzAIgE9(iQd8!)N8?WTNSmhE5@`3;^dC9#H!trRw@ z9Rl3Z4?wQw9P~iQI|su5n`5eDcO4{123PX{MmEGoL5jpd+;I+R$D7CA=0hs*RBcuz0~Fv|#KZ z5`Ck0mcvmrJs_k6nczXvu~^>S0|NVS(SSxnCIPZz2mV+qmw1Md9v$FiRf50+E{mt5 zq7J8+746d!$I;XO{WDM;f zx^18ywcZDeFS|RH?RA6lo^&*N0`yd#Wtdgt0=mnemoQS~(>0V~wL7iTS z<**KsC_47>fL7}E0Zw}dKh6PJf$&1WBQ7yPcta330!KG>f^MhM1s&DMqaQe?acf}; z+q5R?L6aj$vvva|jP8J{CH|OnejMc92n32-ZKZJ`kPjCrw<1{1hlz=Wx7-Ymx;;9F zb*Y?4ArH9!#y(B&kPDInp5RZ49$;uBUa<0*+iHhOD{nTpH#&F;!HFyq8&y&BBa1pzw2yaZu_2wizt`ZPM4 z*WFfUd`IF0=QpEHb#hjHnpdx;)whmyt}`>IqWXtDJiM!QDx{qkD(pZ^Hjt4;_O}H| zyFpG1vqh_kg*YQ^ebdEW%=THe=*GCOVEZ$KM5;I~PRKs)(T{li_#V)O9n4HVkOY2a z%j;mzmoZ{_h06$zT$OXlC;E4ZXPb%xxzLHIn{I=^_amLRbUzU9$?UlKR=% z`9ff6FHc829A8Ua z@n{8s?rXonrpEp&B?jBY2+JSykU3bAZ9u%K!}JAtF+rmJC)wVg@&fTK5FmiHkwAyW zECtn4dpA|^1v~A9e}ZQa7-d~G_5eKdG2Zbhbz&t90yYjf5T++0aCBK)_F5)(Zw}Qe z9Rg@L!-AH^LKr1o4o7+qXmWz`DjbC%tQUc8cMfW25Gd#nBItsi^Co{cdI=(Lh$I~e zXrM1i&EIa@VWOo(tfxO|u9d^s^aJ2xWJV=(F9B*W1qu7Mfa;~K1T zhVp?K6J|XC^BMu;JP7e>j$sBY;}-On5I6!I`7jS5RfVWD4+wHoykG`q0A!H=WoQVb zW{0>Uyx>KGLMZkyGDH}FQ8QMGR43kY4vRPs$`W|4H4uOTdE+4@_MnOc0c2JPhzOSt zKFEoqSc(FH0F`7xD<&Q#NMp6$$p>GLn>kt91`I(?$3I zUjOhY?}ra#bTc;MLkIYB@Fb5yLF9!2%v2A_&8D z2Q!fsnJ*Wakw}MXwsbwLk`Q{RD`iJ^1>tYOkvIcFHB=N23oGE5d_xMq+GNc|>D{J~Wg><~MK$0ZU0YPFYdO zK{!nEi@s%Iz=3)S@eW~GG(R{ZQi*OVb~d!AQAo&@Oled*qKnPA8f!y1kOh@-Vh=!L zR6}`|4xyG})0S7cj{HP_n^QMeG1Ni_Jd9PH4S zMblzm*pPs60T-YS>(G6FrIKgyhb9qFI8iPv!4Eoi6X_s!ClMrx#}mCdJQ$&y5;2^z zX%%hd5c@I?vv52}e1-`Nl0 znGoCg58a6n>A9ZJNfZVEks?`4y8(dnc@;ON8`TLCi+P*rvJ#K956?Lh`fv~ODG@Zu znMQdN3A&)J_8kT)5fQqd7@DCPx}hA}p&t67AR3|~I-(?6q9%HxY2g{hhoUUnqAt1@ zMgRxPu?}%iqj6va2N9$HDLMoCqCWbgKsprcU<5U41Ue8B>`N#mm=UOATBD;es!fU+;aa3Q8mbIatFl_I(vhTM8mlk251Dv20QW>uG)1YG zLTD6U=TJ%Ya7hcXNdiS*6?8$`R(~?GuoyIqXUC`ATCo;O738`upb7`Tu8-2QH2bn`Yp=7asBQ`+Y`b^Tfl*GgWyn>Q)iqxd5hP5)QQ|Rzn59`gs&0&P zS(#NW@~5p^`?!!h6d7v}llw+z8nQSW2WI=G5HPEA`?l?BuL8lgvl^y2O0OqUw+4}B zBp7gA#&SrvjlvU?08b*k$HS8 zc_3(Iz$Xz5g(F+3d(dik{(BGy#KG6uRIpy1X?Ez+wugmfNI{0=;Ei8)Et(32dl90IH{I zzz*!a$Ow$mc#HVgkN@ZpJ_IuK7$|!GN)RBlBY}7hg9urbsK_)UjUn{Nku1iVyvZL? zs73n2rdp&YLc>7pyt^6)s_JS)3I{+SBI_`!M&Qb;+{yra!~{&FKkTzi{Kv4{l}#xl zn|U^|h!DMrmRyphuaYx6(~^jTGsxVgMaj%B$;s4Q%`&07D4_%F&|NF+#@77J;LM@e zd=llV!{L0+=scg}Y!X1AtF)ZX@Ep(bJkRu8&-Q%J_?*xBywCjH&lX`BJL=B@JG2@phhbOjT^zCpZ?sRW|tDhAw*Kq9BX0G1Z@)uqaN=`5UZkO2yGB|_0eFmAN`Th zs3RZ|jSyF=nU$Ga3{xTvLRyLcmLV@)DOB1Zt}N3qJrgjJD>MQYKV1?*?Wsl0R@2kb zJV$hC>U2oAC0+87ACZzM&4~d$fOo1j=+q~KVkn5BCbNU2GbLkp5P&iscH1ozUL!2lHM3~S?AJsqnGGT|#)>qL!yu7!H#-tMyOB7X zb9bHOH3i|DgHtpnhBR@|1v$N9nuaXAK6oeuT2oZraw2%Kfku) z!N%h_?&CV%<3g@K0c7A|G231YSdul|e`3rKBtdWou>*CxsEB%vj7TIDb|(a|Ms#s> zWJd$IMJiK6r^H5qba9mogg;ae4c{c%()RPWK)QRRbHRze{Ib@DX!HE+zUUVbbvKS^;xJ1&kRFb}QAHg(C zPMtT#T8?pJB-bePv5A%Pn%2t zg?bH(#Y-q$AxAb1b#WJ-SUj~8H1-R*yEg}z+~r;1Wf9{w9kgXFGsk)qf%p!h z_^9>wRu49b-(8DuX@*kC`UTUCpWTmNA=8CcYhBl~VPMkt)HmPjwj^pikMnaiFY{qx zJ)eg}j~E=b((~v0OOI1AHfH^qWBCVTBxYj1YqiCX`MBpvJ|?@=VTy=r5JqN!e5PjE4P5 zHggcLi2wmX;6Q=}2lm@%aNRkE4H>3eXm4P;a}pOiY?yA~x(Dan6=dg-9YHe>9_0H- z(B1=e5bpgOXz!dxf#>cK+}F?GPM$q|{scM@3KRnZ(+#}II!NmiVJVF_wPX@nn5jJ#++HRPkHCoVQzPhZ9#nx-tAQ9u3bno1Q)h8So$>o z!G8w`9)LM8_3Cr5H$#wFxt?bToe#u&C+`8ig9&+t9$hf!&XDsU_=^ zA$7nEbIdTsBoiYu&s?+2G#zSF%{Lp06V5r&JoB77>AX`4_aR=-*M%Lhf^bo5XlRzKyj zR)dB!m7)e=b*>;#6D=s(fp9%X*Z;7EK)@ek{WMgAD5};d|BSVFr*)ThBMGyJB3+J0Llco!CYyUWTJ zi1SUQTb#&!UFWGEUIcnOXr4kRi1cC~=aKTE6Q#NMAax(7b= z=eW}isD&8RAdlK6LK0qQGWEd6zQ~1|^zh0a`xxSNAZVE%($IzlG2sHQr7#|ev4=h3 zpgOvEk1x*Vi2q395*atgI{t@(0{NF3c~Zt8p0R}c10D#eIIQz!#sd{&K?zEhAxKIR zBuim|2ZBa1ESZXvP>AFtDG5qVUQaB_qteQN;-yBm(v`1-CHjaHl=L{nISRsvtswA@ zfAHcS?J$UofSI5$>5@oFj9}$>>C0i7tsniU9M=TokJ>c<69VyI)dT#okLYl4Bl{3k z8)JyXg3RL_*7QkeX45uIVN){O9L+oO;SWLWV^cT;q(=ynMPvR%p7i{OJrx4Z2oB^O z{Lp4Tdh;$e4#b_>JZM4}$~c#Llq>+-=O29{(twgwAm+4YB9S%GSQa&B7r1~r*3mNW8P%yzg=$gL zXFh)P^QowMB|jJ$)pQIBeD4@oRD06ZaREuInjz~~!+O56iq);+OCBgKvygl2U|`qoKF$6^v3y0Xp$q`YQrfH`ZA@)!Wee3THYBh^11e$Rb-s1{BcOP7sy^=F z*+j+TZQ8s?H1{f8;$o(^zts$LcV^soCf9t=-3M@IyIt;f*Sp^ZZ+OK!UhI^wY4I2d6k z2fi(8Ggn{=SJ=WA#&Ct%VT1)6K?gZw$AW?28U{DmAR&&!h`Bpq`lJJy_-L+(^5I*3 zXg8P`p+|;wykj2s*vA9`LWviwTtum3!5=372;DgBV6z>$yDa_^-m>uiT0h4h?H=ZncCv1MQ7B^!x7W#B28uXf+d&1E%_u0>X z2K0B~U}Ds8xWT4U$AKFhWH=x>&4X@mp%lzuH50_m8!2(6A@Jx9C)m(%@NiJxaSvWx z)PMH?=sxBH4}AbMA6sh&Zm^?ggSg`y{)2!yKT?`{0VRL5foO&o*8I+cF=HO2Rk0V=@f?; z4(U)s97eKab)XmyMoGt|3nFrmlNe|R`yxMZjhrJ#aN>2Q0CBa5^L>rg_k=`-+BZe1vMQ4m+Qy_GWrvDzykq2 z^M~J~zIetrp1=(^2;`}Es=o^lhZyBv3H*AnHNZq9gJdAtsRXq9|*7*qCfLI z&TqG_yHEaMuNm(sr9k-?e-66;R?Bn-*Nz8%@P)76NuO5o>7abpFCPc56B_v%ABgC& zt?AHz{?gJ{cA-pPLe#VHI0b5b6H_!UDECBdbi=8>x9V@7>|@x}^T)j}6VTz;-~RW1 zZ-))CdG;(A>m$|@u46vX>%Tat9O*L%1S|*z6o~61v<_3U&x5(0*cQnNKa_d^Mk+s< z6Ag31luqe2s8Ozh8i-#L!Jmjf{8PadWWnzWvJ_hfbSci4U zxQ`nMXw!jpP_gP`J~Sf;Atb^EBs2tkL2&a44vL(yVJO>Eq1o8L+Ho3|qBAx$(3Zugxs(W zqepZ>v16P=>YK@w+%3zP2ZTx{AaSv4R6Mf4jhr}-#|wgE>D#5G-m0A7=vet{$Tn?0cD z2i&yH#PrSo-;AZ~+le{!KZ=XCIGDC*`;5%I%t~WU&g-@eiMB%&5pAjm1o)yH*$4d5 zrbkJ)b-S_CsyF%bw|(Od2w=aS$jyPMDxg?T+^I(3l+XDb9?2_+8kD$Oq&Oh3IE;fn zj`O&ZD@K!x%8@&?loN=RYdL-F4Dsxc&Unp%n7RGix1C!X>hU=k6BD8PiS}feH!27Z z#WxV8&k{9JM47t%t2*giHXK~O=3_FjgU&FyTbgE}4;pu|fhV4}y>l%s9Wg z8J7wjQOnp3)__&jkX1*u)m!BW{cAGlE5QFN6-&J|H?6)y)YM^JQ)AV-1}jj^P#2-9 zKq?dnNXZOaTc30IKu@Vnvmr8q7!_^(%h zAw0%;M8bGoLSkgo=>!ViStBc)LcL)esR@eRq?f+@9y1irbif+@07IpLJ#mHDTZO~_ zA+t6itHXK4Lm{I_KcrYNZOX|jv6k@E=qtp<{0Tx5qGpU2Cvu@EY7qdUpMm2Eb2^6z zC7>z8#3yYa*GQlf(!}q%pZxLJh$Y%AZN){?jbD_-bp_U2)Ww)23tbr^_r(5wXfO@v@AqL?m3zN5)jXw zh@R;gU79J~s!$~e2wv5-3A=*Zx%I0Z04&UKhky7Ub*Kk%!y_V_UYU(n*xku+il(28 zpk6e}ZG9zl*ja$>d9!|LbcYxvlqG6t3 z2QYG!ow$??apN8qm1N6JWz>4&bx@g-Io<2w;wv_#ftVSZX^M6(h>9s5 zPl_vdhLC|{48n*D$N1-d2I$5R=z<=Mf%a#DK4^nJ41uPnD6O#nHBKkPgot=RW`lTR zGg<$hnQ$O0TaJ_77nx|ccN329jGdak z>G^S&L1i(QhUw8Dx_h`@)0mfWE4Opw>O#S4cN3I&!=rg?X6Jh9a?xp6IiR@K>a~99 zw%#K=O6%F6>d1=3!A5Iw17@+xXRuJEu%Me3hMD5Uk`z{@$>!gu!0aKp?ETee5fRKj z*%Lfr6VgWQJSlBGN$t~C?bdda*H&#JQ8x%~Z2pqyp2+C`cL^aP+wBZFha5uEu-M?uzl~@iE#My@283@l!@ZXP9=BdlHo0sb@uQN_i*GTaAFyD;=!>TyBQJ)+7^B2l4OeUSfT7 zj>~DLpqsLzj1PUHrYl!0jd%djX>R5En|w$J9ny^dFQ;(_I@DZl#tr0hHF|RU9v2Q; z4lU7=NJ#SEXuBZo@-_F5xyu(Nz3XgNk8P#DzZ2rPGw_w#i8-fpJ9iZg+!sc#^E-d5 zh=GWT(TH{C63TvOhwS35lC+2(Q{nV|7Cv~;AKRU;8TS`61}jONZZX`6J$(Sy z%+o|#o`3Q6PAal*2 z_Bq9mqZuqU@7J2J(_okObs&PQfCw$hoPT!+c5kF7rXC~FbW~~*6Ca5G=+TPfJta|(nY2Kjvp99p=I4dx_=fKI z#9(NU|MrUsK|ehVKeg8r~G29>5=U zsJN1;(2|UIjnS5E*M|Jqj(jDicF)rPfc^P>2n36e}l#zJ)ACkilna2hQ2m%KZ6u9o3yn+fBGHmGZA;gFhCsM39 zaNjw9^U_)D=qu35%!+7WF6+D@+AisVJ)jhzsaO6vz1=Ar|S&-d>2ka!; zBPkH5K7srGp&M9pV84A0)t$Sy5Z?oJ3*nvP_mAkm2kFv1_-9WkQ>Qi|a2%MfDg<`t z-Vr?Mj^Mn12qd-@_}1z`s(>&5J}3!+>RAXy`<`37w5ho)xC15IbBQ5DT^Q+H zJcoJrO6;ugv08zP2R0U%Z?0d>1xNEG_?IA8uLM^MY>ij%MAHR7hdy0cAYy^ULo)XW zD!-um&xKJI62kg;HmVj~{f(P>h4X`lZ{`|v(FPqb^Z~uNnGdu9} z@85Bxb`QxjPf_{I1CK!X@MDiX2V_(k1Opa$;6MklR8UX%%(LM<^YKy>R{T_GPbB}q zRnSP7K~&T~_}mlLP!XQPiy8COBN=B>HN;O%_Z)!RIsMqH9xCWX)BhhH1 zWC-|k4+3WJ1DjlQ4P+PpLH?ZcRYX!!X(em~@#x}@5V%v;J@}ZI7;g~x=46dGt|bsx zLJ}#EKMzDw4?eO9BpgBNc)8C#_UxnOKwg3w5upRo3FTUG`nFD3`PlQ?W_*4rk(gCp z$>^X*Ds~QIcY69LM3EwQXrhY>wB|o;zWM4oh$>2|f6aMN9uzE;Z~;N=04pr9#g@l{ z2Yq!1YzdWJaO|)@E!!*v<(-!vd<2yj9z^o>Ixe~8ntLv~G6v|7m*=>ft3dG_5Z06s zLeTEJIzrG>I||+N?z{d3=4Oi!zVi<+_w+kcKmFM2P*M2!^Unbb$Gg-6{_HcKs|2mH zPg$z&+h?t_on!I;Lnmp;Rg4hCgR#ahy^{~g`xKXDUFY02Sw<4gTyt?AgWTdk@9^l) zYi6j1Dr6xJ9xI(^*3 zefNonS2A{whoO&x7Mx%OnFB$>S;T|m!XUjiSilvsu!SysAq-{S{igt>>L@geizQNfs#4uau>iUnE6ydoKqM}~}pcKjqLLn+E70zr^r^kj3?5k@}R zCLMYIBxBcBIj%-Rz$Fu*B}4vofChDiIcEyd|Nh|*GuYz+_;ZLZc`2e%GP9Y^e5MU` zphtGBLkF5P?4TLNEafmy7f;XK(Kpzhv$ODq{kbW#vApg+mL|mHB zp%S&IMx~D`Err}FBfsP#80D;u0;vc8 z_UaK9!>ooK|KLYk3{|Uo^y2|6-Pbv`$B?%YWL`e~QI#Oz*N6PnOrir-UXQBS#WJ?B z6piXa_6Y}eutTzs1%e;pkPbD(VJNRuMlaoT^9$E2=WE%69bEqRw5D8shSp^Yw5ZAHRy)Je| z`P6=fF-C=~rXe8^MhKLWj}Uz-gk(Dq^$JA25Zz`{W5iz4y)hpTfJ`mn=@tk)05C;4 z*a4hX6Lk<+9g(=HZM<^Eg1D|Ym!ZpT_93EwSyD##pzIF3H<5HGIJ+MHFo?1L_*D0e z*e|P;CLqUKUI;)mzUw`0dtuDt(?YbAWGrN5=39_B)x#(yg{M4>^d;XEr7X?@Ai&(! z7j%GZq!1}A1oH7H-z4Z95jo(O9)P-sF!=#a4l$U+EM^}vRIiVXLtD~u;_#|C4(8>j znmaoX8<$bWbT%z4>6}!<=y-2^q3xCyIg$g!;~nylOi_xmkG>oPAMbcHqzPivyEX(X zV|l=4sw-IOPQ@MVkc-kHGU+jsy40qop&n<_-J^sNynrMydEGo?SmJojcD}W0`FUqO zj-}57iPHfPe3V5l1*erlRXiTB5B%n|Aw6a%L}EIi#0n(XI0Y(lP$>}qO4wN%*>XaTxcLbac5vOPVSYn zyycCXsu;Cm)mC2?-m-?dEZt&C2*o+(Iv1o?YJ62740NDwjD$UG`j2&e=pOgb>7?wm zw6^5!LWas!thAIN4s}Q(c{|5T2l63&0FxjoYU4UcWTL@Hij4%>I)}{a^10K!?jNzH z9{KH0Jyz!3wtjO)<6uyQtRs(b0K$>~X@tZJ9`Up8w~X`1?}ott;{YVXNA%bMNvFYV zZNPrO!UVUtZ6~>B5n0_~kweLcsiR@`I#|Mx*LsJ6wDhUBJMMF@d;j>lTsmL}f&IPv z;S<03E$=qj^PvSBgG1LKOH4tL4ep1oo*@QTW-1kg4G9-QCa(?4wm_t=A6Vl^bpMi zATzxM^{h}Dt&x5)1TNX#{XK`Uh}=SW2Y3|A{yBvI34{lNORo@*@t{)yI*#+~0Q69V zJN!c%sRLcHiM?==CMiUZX$KDCgS|}BKeWh^Ws(p24m!C1oxk*yC_!KhB@%&DV8V^l zCT*U!dDwSA0S9(XBEf7(>d&tgD4?E z@Dv=%VJ{8DFR4_82oo_G)9=)SK6uhT98)MUAq>&dN4XLG6+|-4VW~Zb2dqO0@&zhs ziwJ(8TU4O{LZKOQ4jMiLJMcoTKw(kDh&+)Vc11DBdC^`f?EXpEc2(=Z2P^Aw7sw3D5giT%l+n^{Rlp%-f`Hba-On`(G+&I}g z+ygIM&4o~)S-D}7>4-lZmT_59F)76D@FUhZnLEr&#th6mY)?DPi$8ou1i~Oi`h!K@i$aP81e9c1oMcEu%*0eoOTd#zjuda06zZr$ zO05(_tm8*`q(GunSQur6lt@J~3Q;ztmZU?&q?vF<+e^kI`VeDPwMVibqk1T#bu5H4 zuE%$T2U&XIKmbd0NXvIH<3f1jK+uC--lbhO1zzH%UhZXHLV#cXWnj`nU;1TX?&V?f zC13_-V%}wA3MOMNreR7ZV%|%CWuZ8>BSf74BU`LPJp6;jEksY4SwHYXLyYEM?TgY3 zRy{%hbhTYC{@OYGiG3~IK%f-@sMT={N>15BJ={Z1JfT^^!#qq3hiJ_U&Z8rp1Aaxu z0zv?8>gGaaOg$igq6}L;m_b<}059BLMbwo(_$F}PW?HS)(jXmH{DW7qiJLfFN2~*N zTBp7wCub~EQJ|-hfdq?;70UgX+(oB(k`!;n)x_LG4c--Mf&_Sq=S#?yf!39lP*+XV z1E;*oTtR3_Nd_&3OMG6Z{={WlYN9ia#aVg_TMC4AP@*)VR*7bdd8nv#py-Qspd7b5cd9 zHN<6<#5^bsRlv?b#OXVk8O|I)Qn(Igw#wPSX>LtjykJJK#Yl2|#7Kyo>*VPZ7vFfcn-y09RHPil%u)$NZLGWaYo?3?j-ZTePYffE}SCNjefx z@Pws^o@k3UH2mTG3oz!N*TpfNoRhuJ1N zid?uFMubfm(~QK0b*qLIN;t~@W?xv_PVm=Y%xQjos+|@D)(FI9SWI(~T@mKjT}(`V z=@m!xmq0As!{AIlNClUCguVI&y+UecoCP{moLjhON6w}v?JETIE5+*K`_$Kck!nL6 ztbfe~#R!-W7TAI9M2Ce$#|)UuBAAwCY+}$XfxYa*`2!vPE7=(g$F7hhrh_&<2S9%UE>vT$&aU=xrf*}e-*%AZ+ zp6S@UOIUzuMZ`&{2AR8<$eq|LXF@=}?#6MwNU;D6rGnkbxdT_Uh20L>ooHvpjTFO* z$iu>Fqc(|<;Vs3=iB-t|MahY5M=)+ad|5GR1>jz;saOP$As}ZauH~LeepZN&zR}t; zhpP-Az!(%ft@3y!TWq1y5(L%u--$l0v6`SUGOHI-?XzN` zvDWA%!P8(qCSg*hVrDP*I_CF6=45&=`9@~>j<5Mf=7@wvBs5|XfvrRAZKH6_sM+YA zN}65i>z1kMVR#y->E|2mpo|cjq2Y+$>Q~>I9G>0_!x2`M=z~7gLteZS0Uw&GtV2C` z3Bx_Ez$)nE4qBmEFzMRF^x&)rW$sRVeR#r6_l3o>qcplp0ODR=^78I8ox0c!*PzzN^RPM*CG-8HiZ28l)iwQX#VP1 zVO(Dc8-HQjJnd#+yzAxKS5p*QYHUqI$i=5x9zzu3NeF5~AWA>PLy+x>BS+jH?*-1R z!%#$SM|8|5^OwZAFn^&A=Ym8}KoQ^e!zH(H-@NcZ$m_6~RVvqTIwae&IfWq;gdaD@ z%noyAgk}*JvL0jFu3~bSoaz%#;K#X14Rh8N~^x271i=W52XXZ}vn-VH=hO)AiTWz0;FO zT}f9RuIP%a;FX5NT|t<3XBP^r?8>aL=dBz@arbsHp(4UQM5v^;{``stR*T7PqqPK! z|BxWGNDFo=i*_e%^m4HlhYMMMV&kB7a35s6yrc?|UXqCpzxa#o4NMRQECj%w!t~QU z&U9n!B+8^s%s|Cq8^q9vjFhm6$*5qUtxP%!_}cu8-3%M4nDXC1%3(wJOIXUCti#)2 z4JKdsLr6H*K-&Vbww(Bl=|M#0U0&vG-au&hV1w_u|Kr1|>_wT58ue|2(T;RFnj`HkI@^E=`XgNiA`3#Bq zxVR29*In=oPgSI#lygoC(kHr>_vHjon{Unm-Z6fh_?-XZxr`8lYmNyePo{%}rI%0$)zGH*2MTGBA~(9JpE|0i zx~i`_tGBwVzdEePdUm~^tk=4&+npH&QbU!I7mdy<-#V}ddmZ7C9swMF6w>5b6~ZCA zuRB~1+DlIWjF<{Uw7<)=52_4a5)qdAL&RV_&juCp1trz9u$TKMnj6sdM^YL8J8H4l zx;J}bJYpUSgm!YB#nd~8po|)#ogWsHpJ;ssO}jZr}z zRLm=sR_%JkmzJ^@L`B(rgTR6!QbDOFX06<0ab&YPAgdDX#9SAiZV$kj@F zMqq;0l-$B&-q+Pk&co52!#y%@qhUe4zlEWy{RS-(T*tbyIs z#VRxBmMcLRE&|MRUzk7o_hcKXD~7eJLo^t_X7;^S1o=P2xxN5+K!?8~r6WK8XP@K~ z1VHGB6DJ)6291!aA|DQgC`Tn_7 z%5Dc-ktroZ|ZE3 zTV1Mi*UqMywD=yROZQ-P(xq%)$5#7K>c#_E1xJ@YoqBca*Rf~UzMXq_?E^($EDRy# zXU6JQLWJD1{7TB0J!*C-f1^qH;DwtE`@pKus5x6RsGf7;LCYV0raJJp{q%?^t`2=s(M1_; z)X_&FjTBOfw2WgV!YTzV$oJN(RLaCEb?=~1b0XC~%z((z2vyNi$DecdxyPP;lv@X? zeCz>pH97B@$JcqdLVzDx^LgMO2!$oqSO_7IXC8ab$!8vT3|hyYNd8fiEeg-sK_q9P zm6qC}V!{vtUVjDF&~ioM#Z2H3lvLh%>8;n^d+~)-2TF}_|56=(-P`mrj^LmOj!!pQ z$6z1|N|@hZ`HNdN2K~ z(}5lIVnkT$vB@sm?6c8MTWz?wuCCG~*N$86x#_Ok?z^>Xn>rvUg@a+d0S{d8!3i(i z@WT;LT=B&jZ`|?6A&*@0$tkbg^2;<=UI2p9>u$I}cs-(b0-WIlxVqlpO@{f=3^S z@lK}%7MLXuirb+mA*>Rh@F1tzYv&6lnFJ->aHnJn|Gqk<=CL{-f0Vy_%)qCQ6k6Cf z%9dTVuFrb*+gT{#&#*4I-S>^y!9Dlgd*7)1_Wy$Eo*j1B*?7a-p}*wlyK?6rbJbCg zei-W>q6**u|53oH42W6t;D@oI=8<$f4Ii*u$8(@2we6r|dm_0k?ujwt*y$^&$Gvq;!OALro3MzqL9FHWUS8!6cV>~Vl|fDi%?#0R_*<})+c z;{p9RQ9bmbK?v-_j&rNt8Pm8%kC@>B>9QXo{|#vh;o$=dho~rUK1e#&RDzbkJmic_K+R3X^Z*-Z`*`7G@gc zmoB=U0Sw}S^_3ESrc591lqeEYio^gc$esCY2Tze);Cs3I(>izuh42{>EvsZ@%1C)P zSE7X-w8G6)?ii{+iVA_7 zdc;8majUW5Iu~f+!ynACA1`N#G`4Q!hV5X^Mw|*&sb)2!Ejnjv>`7228pNIIi>F8C zxe)^dv3>8n-DlYuMEAVUvx7-2JzyJK*rEdhvXw1uZ5vzM=9V72&8=^33*6h*mbb#y zEpdN~+~6vAxV-HxbC0{Rd)U%$3suWQCAf}w{39Pn)Gl|0(hsi+Wug#xECPJXr-pBf}der-BXQ(IDGn$U0pMw4nCXVj@6tYY-QAGKlfqEIXBm#C6JZ&IUQ{C-Hd@+0_}&c!mNxA#mqC zqjog2)QQPrqK-o&TG5D3^rB7HXh%z$(U6`Ar6X-=nPB?TntrsS&%x=b4;4HQ&?-z|0XTW&0`HRmP4zN zN#;n;5n*+l!#82sfr97Zn`w{Bh3D8MQHE%f*c`wrX`*ggur--l|9p*7=PM2R_N=A4uIaSAa7Q=$~U6&_ciS0Heb0C)v3Gpxd-`$ z#`*o=ku58#jn(3W@7+(IrX=$M>pl4iQz0;xvYcZh$U6sAV*C~!LJLCj=toSlC8&T4 z1>t~csrFMZ(%Livaf=0XVypD&%(hvuMQGOAA~49X*%%eZC> zy2daJ$?&<%Fb#|A48;%)*H8_U%M2679-tx;tZZ$%?<_EGBSOw4`Y<)9O(>EB?cz_p zAZs^zfu$4 zjXc6+?r<90?`C1QJ5a_9U}2ea*!-&(e>tH z9Zpfc{|2ymG;syfuXx;I{(jEYMv)jx5n7;SA0Q?cWl^eb5%>U29hz{RRL%-TLLKwz zjP1HV3A3=>DLv0@g@*fA%9}Tk7{?Q=Zp}y>4`|$AR zTJ8JFDj3a+?39iXd#>v^N+=v8cs?X8VDABFYaf6O?DUT!Rnd}4YAX0hDYz{xVx=GA z!T#={IY@Fus8P+lO%-Ef9W--1N^BgRCCLkxt$3_?LF(Iq;v^USU!w{a00umoYS zF61QH_NX6RlCh*RC)t9BLSz78=q5KJD$^kz9$+72Pbh`LC>O<(_-P8&2?{P?_&#g2 z|LBq(0L>uq@&ed_pundt?J1P{QZHc+`ql|ATdSZXQgk419`0~%@{q?Aiz@mm-qn-W7#E|Wa^&{BB#%)f#1kYFu-H5T-YoGSRd9gNuiWGbL~uQ#qh{9$+%Q4rnE}U;7TX!NM#LT z8jug~ls&iTHJWZC+~pqbp+EF=NBNXOkiu19MOJ7E^}wKRFzdZ%vE94`Peb};O8vx@t_O`L;bL(3?d%xN`Z>?SWU>8|CkcdmWJ2< z;fGQNXLLp=)S+m!jw=bvurQM(Ic6U)#78}19ex68TFj)PlR^%QGL-|PEF>PhwPU#A z9i9iMIwVUG3;moT$68ZkzSVx#A!L9m!IUOtR)%9_#$aQnc7i4*Y=&Cbwf!m&Pp1N2 zSq5CCu~7q7WcJ}DAz)wCf?ib$IY)?Dxsp+-5oFT>9!d&=l!qOBNKh>HTe$)(A7E!P zW@9>LXOdh^ATNLc>i zZ7E7_#}-8l;8b(fwTLHh@y7kmRxs2xMb=g@Y-KjYwmbCU9`trzD)(}$BXj8@ay`Z^ zI2Un6cXUa&bWQhkQ8#r}cXe5}bzS#$VK;VV7ezkDA!qk?aaTH0CvbKbQdXyRUPo|b zhj#X4F{k3?hSzpGcP6|tck4xQmG>{0$9bTKaJEUA6mF6h(IaH)`WDrD>`9=+M=e09 zc=c(CdbNDx2W;!dd8wvs_lGTB=siy?f%M3+%FiQu&>%=iS`&kUEJ%j3l{z>GzCH+h zi=%&MNGDN9g-piQ6!L#wLVzPFd%0h2n7=B#C#}oO;L4LMbd#DGK?F&QR%tmyt$UcwStX z!>CCjaY-}x!H88c*~STJOg5N^qC>99AV8Bv>=6L;{v%$z1-}m}tm? z86}I^SQ@X(kSEtfE(-#z&N|Lpz{b;x>)|ta<*+_+%z1{+?nE4-G@TX>@ zt@Poo;;O3XN-pe*W%6pT%qTb@;IFt#gspij3hMyYwb}4Fs8-OiVr-nFYAVv%vifr! zGK&fiGoMb&j8RK55fr51QMC->Ktq}_r3em}%cYy^4P`nGXZodUI;Lqlr)@g9q)VZ( zW|o6fiiB^wN)H0u0W5SmyxQ4;C*!=*3p$3`AeI)8J80PCi@w%WK=SLy`inn!43ITg zBns@nd?mq{g{-E+!9=2vw3@>BD>X1o!|BOt+A;9iytH12_gp3IH`W}!>E|#pxh9-WaEMBIp$`sK?g{|4V?5)FW%*w2= z&TN2G?IKa+KY8_h=1I;X6#4E!TC*x z!h5{oLR>{6y(8}6iU~gBg5g}ky&rA`|0PZlQS;&&lfuD?;~*x$*NqYnT(G+~h)m9- zMLEWK^|M+I#y|QBZB7eME<*3Il7Us{yohAUCc33_k&iCcLa|}6+apw4@tV#z_bBSP zF7vD|e?M}E7BMXAPV6MS$SqNbSMQM9?v32T@8nJ?#;5k&B=xd8Hu!GtUQsP}Pw)uO zKEX3Fes3ct5Ar0>@%VhO$))NxuZk&_j6rV&N6*fya-Q){D8hVaL{E~hY!PEGsJlYV zU+rcNK=-1C_q=ZDCY9uZZ}^~~_)zY%x=;#B-Nt2{LDy&cZroRW{AjapamR+pwOITh z03DDj@b&>j+eL_x&?6f4W7&_Z|45L+5EEsh0C(U3F{)vJ zkO2in1|x74ClJoz;sQ-317EO)hTQ{0kX%O7)!YyMoYE+s-590vH`86x*8<#WiP~}S z-W3sI_SegYqTXK(vJ=J#H)7qvcnQzZwVyDQRh{{Im6PESF?B}^xiFM_yrpmYxL_LO zKfVk{-VJpcr*}H#QGVr*YYyvBbMpn)8iu8M8FP5fF=`hIZc3DKZzO`#lj6 zz9T$OrCuBD9c8_~7CW~Y|CwGDm!5y|w^MRJdzk~OEoCRFlgThhMMA|_|jx^43J$!jO| z&L_zoF4%IdiIT?JTn-UnG5+^hEOsMjT-{LAgqWHNjJ%b)%wEXJFlKF4% zEYor= zZ-T;UYbJZHvFb<^=^{tG8$$2t@E+tN*!i=`(?Ht;6$u~XI`{`kj;2p^pgQ~zF3^`q zQ9Ar-M3P7L{}~Wb2?@r85?1a#2w{X0x@X1?6JCfROhVoi;lqzT_8gFt zUM4j~5lTyy)YU!n%s7vOyikP~KPTA}$v>-6Bou5gmGuuk_XIXpR_E|y#ys`(1_5p@ z@k7-;2T;UUKlWHzQa?YwBoucLgr=TQOgh;c0{+~CfEoOVCRuRDXFi4Hw`ik}5+sj@=YS|81ncnVqjPoMIg^wnnc3u% zi%mCBb(#uF=y4_4i6=~IvgxL16nW_>s==W)5UkimVvjzPQgq`z_oSudnWhee>O8aQ zc@Cd`{}y*BjSglQp$8g4!9ocO5yZ~6-F^$MMl5*1+y&c~prX1BdHa>Q=w|d01O~38 z(L^vch;6_A{tIxx0<*NCOm?1waI^!(b3kBgs<>iQik{PsN%th2us;N;gU>%jLj2A@ zyxddqdj0eR@k?dlgQBjq&OU|l3W1u1c?yBEFu!C}aeO5SK|C_k zjMY2&_*2+E>c#omWdz}q(@g5v12xSsuhVhVnO=->))2g-kHh$Ih_>1sLU3@xa-A(Q z$t+>5@ojUPq_o2|Gn*ZCsDT~WKl@~Qwb?K^4YlFwVMeiZfv3td-ZH^+K;vth#1553 z{}R;q%zyhfIRpnhQ1aGY?^80_80S53?6R+P!3FB96B4;D@jH9(zW)wR-zW>L9Oeo#6!wy4xkAC{wVgPZ?i$NIU*#j?# z!SrD*Veku>(9&1G*agaP=i{C}?qR?T&g6tCY#s~UGeXwc6APRAaL@c5akBG!1DshQSY@!pN2*oH$af(!|q7|=*#Vl%Zi(KrY7lC2~|2VvD z9dRgQ9E`A%Fm}+3K0?^Fz6i%S%5jc#3?4g-P(~x@09))RBM@3-#xruxk94e5S>71C zbabppEo@0U{volK%)@i|NLd{(iOEcAa$rCRWEm|PA$62-j{!;t9?>Y3QC`w0h#VM| z@R1{$1nL}-Y{|tAaH76!a+kd9r7vxwgFLch9Xdc|h6cluQ?3M=s}z##w4$WP!Gs_C z*hei{(hfOYtc1VprZ>M?M>q&_CF;QA8C6tHaT=kMa3Ezd#d*g3kkO3Bq=+(463BW& z;GKCKqdDQAN0`7vAC1cg(y-_S06&V8j*~Se9W;B1J7zNwXI(~E6nOx$hUAZQu&5?{u@E?a3e=!xQIv65 z<2(aNlwf+Yj65+XQZ<#&G>&s1N1f_GoNC6#^wE?0TuE7gg_nOc2BD*Im1Oc^hQc6# z7shLeK5}x8dPL$yBZQ^Lh;r7nYKEN#{-Jfj^5luEHL?pjtJ7Q zfw-(^W-wi>T;h%g%=DVFI)?&<3fj<$wunkip*Z2d4tAV&pK$;}AK{P=HN;^or&PyQ z;V>FgT9qL8bc}BGSzD$45dvjYgF4XB+m@gzDOe$^aSlVZ1EfVY|DUCet4!jkk|p*$ z(VebmNvEB2h-psFgg}py#L~T);T$`7scl}eSQQawF~WJwIXHHXnDoOnJJs4`M+@Kp z3s{FrC1)9vv{hoZmbh_%KqvQjPo+XExxC%&Rd;(&WfC<>6!z-mNHe1RmKD09$%kC% zWExn)5@OL=iA^a&Q>vL50(8>V>0a|js;Fbf>WIVxD6$rRJa%!O8ORPq^BBAALq`{D zWK6|6kp9Lb9e!EkfUk_@EJv@jCgCz;Mj6aMmeIj+fbcjsT;Z-lpu=m%@Hjh(#;vM| z%_Y&*YMcvV8S4nel1UiSUThKRAEyx=iExXq}1^=t_OXQ`?=*YkEI!g{Xs=8Q0Nlcl1?3vOoc>wcDB4~mv+R!yF9ibWROqAf`9o+6VMY;kdnBZkF z4?xa;2NGG#J{n z2wU2vQx&1*YgW;$V=O3c2`?^N)0;vd#uBGErFG?~@JJ@d8ZSv=?Xh0OxilrtLfVbp zQu2N~rrX>u-aAqz^FbGx-aPNQ&tuZb)~-VxIvDP0|5Ll#FjHjKcvQnW)*)Nm5=5yw zSjTV&67;H*av)T<`h^efYpxEd;fpykR`P5s@|t=jFmqf&JS9;b6xc8 z+$8PESiU}5aW!u|8eOWx;L{UlU9nbZXf+{~Wb`j-O< zFk+k&$+XwstHrNe<&2>wsw% zWp@WyZ7kz5CDb`PvoTyFIu#>n-+>p3w-x`;Rw?E&l_V7>BWjCxf+#}~u9Gq22ZJ#v zg9`^RI=~J)mUTlELNdsMJ?Mi-M1%jbR8l8IJNSb~h=fUaLqX^-K=4odr-P-Vgi}a` zRcM7*h=p0Gg%OhGR&E?ST$YSB7aQF!2CySj2`o#18NEAOjV6YKS4} zpdfF<4)9?g_yQoKk%#|+5(#5Lb{IVygfLb%Fh(&CDgF6)Kvx@37JTV~;lXfj311xXlcLb4Eh{8?% zFl4usOXK)Tu|!oOXa@H10GxG)*F}&hGLHX9BQQgeGcq*ym~9HlkPg{A*H}ZB*l4U* z6A`IPb7W0DbPyh}4yCvpDM%oq_=${>f)gT-^N2q6=o0L}3(>NTfP*w#^AeKrUfDzt z+cXf+BoykgSV?kt{ql%LIS@$6|12X|l`FxMK6x!onUp_yJRqq;BI%XLBZV;`l@LIc zag>rgbPyPEFZ7}>F}a5$;fH+)5(%=Bkr9d%p)L`z5&E+Z;sP)GGL~9)b62F3Ex`_d zGLkUzT_e(uEwNr!)>BdTV=y-m0!a~;)*UFQH6?XYmC-Q%&>8as0hI}vcN3Wuv6$~L zlA1{noCy@~a1R$(7!!35jk6CBHBbemKkYD@rP&_t&@eNj4=Umh#nkUgC#wjP|X;LVqQlrsQFhQIS zbDX`RoPu$h1m&Da^HycE|2NiYI0=|OZK){{@h$EsmwQF>97v*@DJxf5c=?JEYWu@(G^KDS#4rjlBIFQ10>m(Cxlgt zhlO~z*fDwcZI8KeOA2FTN}bmtn}27OG+|i!uu=EmAoXxR4)p-}@m0827+Uo+Uuv2& zA!+_l4+!8VM`;$B`B--vR^1qY#D^p}W)gCW0CZ}nfx`}t)fjqmi(BfQPud=B`leWc zsfER*ronslP$I%yE8L^I;c}ws8MpL;)SPBcAE3hGBkoXkSeJTWT6Cs zp!G5s3_789SsyK#myEHFc1a-03I!OEtj$V6Z)9JOrViIyHrcvv_ob~E!>#KUuGspm z2{W$STCNCluHc%k-rB9}YOd`Huj*{923hJ@!1{c_7f&6vH3%> zvT8MtNVMtY|BvkTvtR!Xj=PhyrzQ_Q$qUldMEmMUmBuu@1_9_`9>=y7j7t!Od$>6P9HNW3XL_ZQy91O96iT}l;^7*o0%Dwt zq|Y^*;w5T^V`PzYv$p#aAol>_(XWmHyMPli2f!SdyJMOgAfVg2gr^uh)?=6HY@RC~ zm6W-ci5NmA6)IMZXM?*dp}P=pWF;fJVEVPoRJ;wel0>>KJTa_&__lQ0ho0CNZ40-; zS}*tF|A{Ixzc_QZs0I%{qKHT2x7g&Bs$rT!F;N4-3!Fu2nne+s1_926h=F0Ie%h_+ zAQ=;NjS(!MUD?2t0#oGmMi*SY&r2{~awn={XL1KqU|ADsWgctCka}?>3`cCxM-#f@ zizaLm^1#AAaw_MLr!BI<1OdViqO^nfXhfQKAm+qn6KRvSc7290`a{F{V8eNVma+1} zK*m`@j4(tDtkHTOa~r=D@s`KRmj`jbGug)U+Yuijw@LE9fmVqqN~0;dqci%)HHxEr z9LRo5$cJpBh&;%N%*Z&pBY_bKiYi10yb{Ap5Jp=P=K%s$M+Ws+^Nvpl?T9v_gKWOx5~&N!!@xE^~G4?WQlP0<&Ptpni>e`OB^j6{?SvSSI$bux~Mt8;v7I@&89B{!9ITDda; zXqWqJkw|DLZ4%tO5;)zn;D?qjt->a;7B$t&%Pbx<4W{kU6>?}zMu9l*%*>_p|8i$h zUO}xGDH{(Dun*x8(~r7$+>FaBy-b&4y<2T^<(6_bkm6T@skh8eei~tt1 zyd5B40v*9EfLG(iKt|iwd&cx3AHnJv{PB+PK@^_&paC)<`^%09vJnfy|JXfOA&5Dv zU}7nlG9o3COQEJHj6x{GvdWh2eTm}0IC6bd#VM?}+ z4p;{+DI=bg0Uja}-XjzaH=rWhLA)fTG9Kd{C>wsNpF*-MF)MBICh&$U!$#DX?BZj$ zj|%?a#)2%Qf+n`@EH855%SSC9ZY{4e8d#p;44EX)Co5~h;|CZe zUn1P!sU=*JEHZx1-J>n*y(8JZ z;-3psoDYMw1ZaD2(-kG;f(QdU98-cIQ#ahC4xT9!s@0#BcqCz^WuE7G^3N|gj0YNLF$XQWCxX5}2bo9dv=86El8; z6*h)C`k{edBdcZ8R>n@67RfBC_4IJ?QiA50X7K5%4=y@cyD2Di=EgFMi-7K6R0b`QALO z_=>V4Ki|Ya-jngnj6V@e5gV^VAb%n9fDiRh4;|x?{enPDJAM(=5P1F)Q~c%TEE9-Z}A|AsgehY~`EUEf7`$O3w(pnhnIX3zC7R6%5qEjHiw{=$ez6wDVii3!u# zbyk*eKM+qd_YI_p+)@G_?~>q>_9oG`hkuF?Z$5sHAryb}E+vcIv8A^NN}F?=!pA`ulkVh z9{ZjZ_!zSm6)a0a8_sDDq6V92d9MYT*$_Ttf#MGf*^s4w)M458J3SMZ$Py+wj&Kyu zL{ty;xkGf#_%D$TFe%Uz3ef8hFc}K`BR~0A*^@ZI|I=lGG?Cj#L`iqr1Q6%iL4Y9d zoIHXC;}N{~fL+3a1SL+SSkdA|j2R`SJ7-VhN01>!TC{gA9maMMLzX-_vfVq0_XLil zS<~iCoD%o-%h}WCPoP0c#YzdY?Oq@btC*m+vgWb_f3Xi`22F zJKYcb=^O3O-^7L|Wz)9Zvm`!${|*eCIJn|H|Jtu5vcxT2qPlyi`N4!Nxo7FqsaF#O zFP=QXb&*gHf8YMWc!KFdw@l}6A4uTlBaR^Bkb6M6*-~qcvU3`A@IQvKgAD@x`r*&N zoR(AYHhj+6$TxNL`R5;d>iLJ42{Zb~LBe87u(sRw`iUr`*4fG}2$*szN2tD{%A%_% zGGMByydp9z9*KlvvLa*Xl!zWGtE3Vg2&}XcOD(J9vP*it>{3iE$=otaFwOK5 z%`w?5)6Fx%3=_^Z<;1eJdt#Jv&z|~nDXxvyiKjM+=9y_Ui~8XOBg4+}4goVD(2XF^ zB;w~di3|c%qkb?e@tzjzu?GPYA9$>!|48h?C$*N?N$nndR`dv`b%d)20ec{XK&Hnu z;|u~+Rb@4&lK#ObJcp{=6arC6MeS6RqWXuQmeh&vo_accZ=yzf>QtXk3A6SeY_(+% zHGJyH$2SPZE%yQP+IavUhLY8&R)22IH73U-+KixJSN*3Yc;<<29)#hMsM%5YXlB5LooKyvFiO-yz#7f7fs!AuFAgy{*BC6JD zvZ?%NzBy){X(T9TpOL&MN{TpgaA|dvUb?}ipLQ^6sn4NW>Z_m5nrWxC?waeWt^RuI zv7s(o?69|rd?S+#4x0&@B@6R+#=xf6JDkXIhr+j3WbNDu^n^=sdS4_S6%ehx$7Lz zoiwtZAnM1*$$QudVw^(XG=}Mb#ZWihBD=TaJbk%ua*_ocVdgQcno%TxQ6b7>{1-C; zJ}F4+AWHv!h7qLYPl6Mai#&L74qhyTf*YI&-9l2o$nBsZdV|1e>al}(?Bg5?;^=H4Nlm5~u2>R_WfB4L?{z)*(9vz$cc)kZhM z@d3qC;;io2#y3u6AG`V0ckpq@HA*CkQ>2s?vFJVL2@;4GF(MKPGDv?E@_d|&q{Tec z$EchGCi(bJN+z^8L{1TeS?nYSLDH3Uq=hIa@!tRkD3Jl~tR)BhUjnOw6s7EJG`Bn& z?p%3HWI|>|y-KFsJP49i-i2M#Lq`=U!iz~x1ReW$K#CxMxQVQa>kSd@o0nev`U)xvzZkU8ig9jqa6(pm_YiOE}ycaqdc%?OJyJw&O%I!L~tT@ zqSKYSIw!7%HBDbtlUK#srn9~&t#KMFTI_+ENThM7e0t_bqB#-a`D0NMf!sn{N0G|F z&2R+iYrEXh4vqcwCK2tR+v4#KdCY5b`=l3Kw%AHq)x#esn~25$#~YL$?xp_h;_M`{ zN`oBWv5`e+|3}WT4~-)39kZqFL;?#G#x4{ew5{zsp9q)T@^)K>k*rA8p;^vGE_Dz9 z?POCr+VD{%wW}>IL5MqAE>e~upNuC?^Py9j+I3Sj#qL~jRuuLewPs3vU{u5M6$e5U z0!y99RH1?ns<08O7162^tEM)yrR{70M%#Y}d|&}5*uVXg9C)G*FAkZy})Z-i)d>kAJf*Ff6gu-kbNp3I6;S;x3yJX~JJb_}E-CeRDDPbWy z*O^_unmCju8{}nV9FGU=1B_&}T}4DpVmev`#TDU*6G6#jlsv#5jp?ySa4bn4hxVJJ zJ%EQ_|7_&bYMIN<>Eb#?Jeo-2bR7@b=|?nXGV)fKs7=wCT26u#C|p36VHr}O*L)+4 z$)4&qmM{h}Svm{@Po6$ta-2G+4gay^;^x_lqP%jU{*hyiq>+XbiA)S9B5Y$LJ0sqU z;%7$pVqnV{0`O>}M0x||@5H(y^EkFhTnvG4TZEgB5#94fd=W(vB!;4Z! z$D>`<6bG4Yf9-YN6d|{?F(T|M5+=^XK5ck4B08Z$yVFiWF9fQZ>5V91a?Lw z|M{k)+%y}2x}29=C!IquEQSkxp$@-Bu04m+913z!#wH{>^4Je9jM8NJ=V2F0vR+U z2=K=}AjJ=c`>W~_XRg{o60FM1aUxE?$2~H$^{#(i+Ym6+daU)@d*q5dhPlVm=V7wV z>YLXVIs85n9~cO~Dpu^O{N>3*(zD1*s1{+n+sy!XxTUk75|2zj>~Rl10^aMvwwLHB z68V*cT_UZCL_Io`vA9E^&L82&ykPHK(YD+JYGDhGc*^{?P=p;!VSxwIIF|g1{{{Na zfBssm-%CrUoR<(>dCbj!em&3pBAZzqLnj(s2uXj_L^ag8qXBs0T^cgTnA05`(JBIFx0is+CDya;$Gv(&%` z3X6*3GZu+Rq4`+A4FnzPPzQTx4ga7Hnb5xu{5f;$wRVX?1+>3+C_aB!m%oBR8LU5x z)3R{dwTh^~3mi8M+&79~yH`oU1oRJts1>wZl^F5B+?%ne5D^FrrEM9$d*LP&ghKQ? zzYDkkbyx>Q(=@D0Lphv7S5m({aU437i^M>?p5TWX6Nx>{Ln`N@b-w2(_o#Zd$b zc}N%E`-fNKlTk564r0Ym%ta0|0OtEXO>>a)(nVn$#v62y65JC*sYGJT2z|JRRy3{= zF+!SX#%D}JYTS!>h#}#)hXUM-v8y6wl$&c@Msh4ib38|MOh=)ckuQr(Ib6!fos^MCoWyX9NuxZiO)RyKaEE`85_QOyS3wkgc(4$=uz5JaMB0d0 zF_tu12i@pDPE*M=gvo>;ner1ek+{kc>_&aO2TdYIbhtW8q_~{?jH8O9qREH@;uHIDnoz2TdxzL%I*N*bOrvsab3$ zu|z+zY`8eAh|$c5$*jz`?8oRT$9fo$M(m29$;f2u#{GJ#IAY6={7b+zO2O=`3sRvt zEQ$Fs2$<`v%sH+1kO}IbHHgrlhByo7tgz5Lzta>x-n`C>|9A<0DN1~7&EDjbqN1-_ z>Jg0drHU{)wJ;K}pop<33!Idw?SsScoD00D$KQ;cz__cVGo8fvLy2e%f{YB9tBlLY zjDMk`CIbx;0txg$4b@-`*GLf!fsyLa4c@pmn+Oo$fXxDli38cT7g>-^f)42rz-Ypb z2@S1w7%cn1kMcOqn|M(5_zq-&QTULL4y}(HC65ZZ5FMll4jqo-@UY|%QRcXfseBq; zQPC=Dp8ZgsAO(pECDHYXq!1aA5;>82vWOLtOJ*COo^c^2pD9cp2ZYk^9*=}&L*lzIRaUL_Y_J(qb=7tZTda}mDcicTo86l8GxjDs6@S7Q|x}}^6 zN(#wKj4XlKL^PtgO^MnR2Wv0}^O}PNn+01~gJoERby$UMSgc{26?vO@L{w#o9lU8! zyy`W|!mnns?r`U(T0&0AV8sHiFj@=1#5ulf`U3&J1_Oh=3* z&A<_%2jJLkGmnY@v80Ki8B(bm+LdV8A$I7Y9~vIrtcU{~qcUQpCF-_fvx!CWQb(c= zNYYT*>7p+pTuLG%Br1tBI)F6#BQ^@8IC5O1r3l*1qZ6yKPTF1DeX&d$9z@DY2pHXp zuqMTPBu=_E@T|Aa72egXiPN2xu@yrv|0<>MLZw4erFZ2I)U7aBk|ijhrAT{Q@oTDC zqSs3M$zOsBVQSxu;M=|x3V2v1cN|=Sx(L+a!#AQgY_bT4@}`dzCkH_d0Ii7wY$=0U zr=SWYc&bj32&s`OseIbNs-xa660u&1CI&vJ%~2?eVtj6WRtx~QniMXzjXyoMLspV=eG~8P0%H&vMWj32J znYbxp`!4JR;)+OHFPylF<4d=&TPeQCEQT-k4L>SgD*Q?c{qo|yCD?=|n`;g*h{fh@ z)@F%)*l&(la2{u-fiMZP2bwHLI_6IelL*WST*h6PccTca{6LnvDtQiw*tXkHXqf{f(r>{tGax9wwjK%gg)L^UL8I>>yu6*Zfn$Z+v={Kh_()ibNg$GShuTn zH;Rt8#>v(qvbTPU>w`{0fBQAGE^C2vY=RiJ|MTZ{8oMSkI}OD>kSM*k3qH-5ySYv~$ve1f%{vO?JHLYn>lQrZ zD?DCBJjF}8##`>&v%4Ycwa%+=2yh3@la=|lJpTs0a2>tHZM*PJJ@Ovr)_c9!!=S*U zz0iwZ^RDZEX08Y5z2C#$h6Cn`z|7;D?{^H-}g;l z`69nf)$NEJT=shqf_T6A;6_gUOv9+e8eE$F+e+j8zW}5>0;Fz>P(cM`z`1rn2;GMW zu*7A=CLE0d}z`;r?TtO;d85d*^9-P7LvcYh|LBiHSBJ4p$0zx7D zjyE?#EKI^N|7F51cS8K5J1HcWG@tS#%)-eLbB%yDb^yaFQW%{2a7Z*m>_+ILT*Eee zLnv`-9rs5%7K)OE$3^^!M5KvRZ^TvK3qz!!RNtUh4|Vi=L`{=KN~HCW)I<^T?LARs zc*I5LC`F>B31M%y3O>5&OF?(3}5S1`9w{5IYth?_qpla z$LA%+*KGHgyXmfQYulveE8Ymo_ldT5`$P41=?l&bBTj<&I@&>9jma_Y+^*(S35BQ^ z=@ffDsd|>XPIfj;#J8*Ed{lmne2E`V1v+2zT30J-{#A0fxl0B z|HN3p5R421G5P3>^1|vEr3@jPvIM1+1$}bTFbxQWCnwbod=t|P-HqNrRhk%54>i&d ztx~c^Zxfx4#E+fzPZ5BycPI(YvC-L3`g7EbDd+;wGJB9kr zL5+&D;Ju{(_PHwuD?bu6GejDg|10m@y6Wv#V@$U$-cp72&aq?%equjfIT4(rjt~L@GZ1(d{HISMKcNb@ujf}k z59kBeJ*+`ck39&)^+0zJ2o#Au_$WmaJ4)Syk6mkJSJ(so)PsOMQ$cVKcMA2xPeBn* zSYd|{p7Rer4Lv|zLEj;0-hvH2C=fyH{KF4T>iF}|J@pL8(nRptnB9N{)^lJ>MIM=C zOAg^vPd;i*X(W;lu++{2_)t}2U+a7r;)n{F_#gx+u6T}w6#hdKJo6MekDl=8$p4^2 z4~j`wLp>Eer%s%Vv zvB*YSY_-B(OYOAH7Q0Yf=NzCUr{j{F-F9yJg(F4+ozo9#3l)igJN=NTkb3lJq|ST= zor4dr>Ldz5e-hzm?*oJiSg%IzoP$7|G{v*t0fefqu7Oz%?z3-hKORoUukKE5tPfQkUCyMyIimn5eDJ4ce;` z-R;?fpyG|IW0j4%j$m@%os+I^Bc8b8i%TRAFX!+Q595=Ud#-mQ7sSpEM7gWb4(B`o zI-g6%mr*+W{PSR1_du|ZiY5}Y-E^A!Q?*3uyqhps1U!FHW)`S8M1CD&A4cTS z4>0x%dJs4V>(mpH`EANk!_(r59`KWfq>Xy~@?Cb+mY@@5?@|yjBN_!I5KR?CHOC6y z6|*=lGAcxo#1c;k5h%%Eg%3^Vpkriu)g(FQgOm2KV~PHe$MCT+fmLkW8Do^jNQRD+ z(?g~2C>XX2sz`&G^W;R7=*LtV@jA28%HZY}s=L{+g)>wL4F4Sys)8hwhNz0B;GjSq z9cF}w5`m6$V$;p$a5J34`6h9^DbC}ZGdby8&Nw4!4~Ik|e8HUOe*pOxB~FBB`*2TJ z9$1*CVMHHbn#j%WV@i>@qaEr2*%)g!NN~mD9r75H8q=s6<4N#E>!^o6i?M?( zh&!zJ79y&3o=Ci>_9VhQ2*^kxD3J)0FmfKrO=MycAy7t$LPXqE2a@7dM-8G%=(3dt2!Y; zY>1e3+)XoxVF#@WqTma#LvDhJn_=kY;K4C?nR8X}W|W!D&H^~ZA>PM1{4o!Cia3~? zHLD;M60tW@Q6l@}&njDj)yA!7JG+9<8x4lAzW-FWb^my7QvbUpn1rw(^Z18vceg!Y z7NjDmlgNJ+vg9UzMQzBtU6O@NWZP0?criN%YA2$O8)M|kfC+LW$ea-@KB!_rb8|-8 zQxMdl*mO_kBSp?J<@1_!f~0KVmr=w|JWoW;e);d`SaV--?H4Q+QJgG`$cOIj|2S4m#j{}sL zG!f&48O(4-DXON&3W3i(^rR;Q@nTFAdf+tP4W^s(OWR%nq6Qwi4Zg-mj-t56Py(`iWd)z~Q z0Ux*_2}SaJ+Pg1RPD&)|VV1RoHDzV>3qQsb^NOaG))4T(30Y7Axn-{DPoD@o7Q=!P zO5_43ECFe>KH;f<)aqD2wTET+mB1=J?P_29i)@{fj`nIQ@!-ja?vcBA6#XHy&gway zHxUyBOHu%H3jj4HmwWi#%rY5ZPJ+C){C#L2tf}%kG^CV$hwY^VU>N9*~)#V zvbZH;mi2xG9_m#JJ}}FUqK7tWkpI8QB*jr9-={(}tq5Dwa45nh@BG#%EpT2v&R5jx=${>2wT1!jqm!GRzY z0){@^Lk?EQI=F@NU56HOVgCb);pE_5O4wZydEr%Dp%IlK7Q$g1%HbT+VIA7x9pYgg z>fs*pVITV89|B?^3gRFVVj&vhAtGWTD&itCVlbh@I#6LFO5!9^Vjf162(kl~ZOT!M zVI>w~sjvXLcm`#Bg$#jWB(}{ZHK8Z6VifiYD*DiOG>sm59xOuPZZ)7EdDdM3hAy_^ z9Io2e2_gNF&_{JxDOwn-kecFfpa-_$FG6EZl;GyrlV7;QKjerye2J0d&N}dfj4<9G zxyd}hUg4pIhRBFKc_ZP4BdwtWRJ7PV_>&Rh;sE+$K~RdN^dd?D205}`J0hYy`d_9E zqe#>hTHK0-OM5;YTG4f>#Y29HwMw1}e*FoLcxusKL z$2%xx9zx|uWgI>&Tj{)sKj{ZX7)>Nr#H zT+BsZ*abXJ#Q#$S3yHWyNoY(*e1x(+rf(`mk5$FxX_0F3#f|WUNOjqD>_ktHMo_tK9T)z~_0bC(I73WoGk=h)D813dxg@r|I3P*UvaEb(t@Ma>R#D}azdy)i9 z$OKK$j5X4oN<`;+5rt7$=W03yu?*j<4O4{?4&ChKF`h~baTsSr27|hgXmlN?or(6W z({qedhMLocdMG-5s5*rxJAr74CWmxjryWkFcWIA!kcW1GR(A=YMA(@|lon_uM12@k zY4XQ<0mw~GgrR6kYj#qjJW8ZYB(7b`o#e@$bV-#AR7ettfdHw1Olg!Lh=TZugTzUu z)Jf)W-2aAXRGNqgiJV|a@{f>yDObq|jWh{9X(^9D&C3i4m3)bL(g$Xa(UnRGym*O~ z*vyz{iO1O~pax2rU?-Y@NSU&UJ&B~6+6kWggR@B>ty!pDtx!!QWJVN@stl#37EY|N z3a!}6QJMtiNLFM)7PPFYv^>_Usw%9qs;s(dtSXDQ*hRPi;)?c?_OMIm+}U~+j8oxD zM(B$e^~=8m%#7}+kELj(v5n?|mDn5r+34w4SY}-ogwW(?NERq|IG#jYjoL)(#88Kv zwcWL9%u_iH$dGGe=0wSWX?IzsLX7J`&}qyBAZndCxlV~tkId4nnMI~lNf42S6$Z8C2K|pY+9XW24*@- z{%c0KE!^hTP(hc|+D`+`SpRg;x+YIXfNl0gP?BjY+mVn72}TMjD8}}s$BG&XA?3%i z5H#J8VC2x_0v5cQY<36{%iblBkF>@B%w<1UK*mLvV1o6Fk9X9E$GQY6Q`= zL_#gpsWMbfMd|V+;IJ+P2m{nfnIF$iD=r-^i!tq~78OvTh}2pKw^`LoA>BWfF9Tl3 zQhAh9g;Y~j8hQ~|_{eJ@O$1B1RJaMmOhr;n85IfRDY%Mn4F}c14V6zB)&Eg}&MNK@ zM-A~V6|weFRZwbLLng*s`OW^ymEU-V#okq12{2zhhF@te$)akjT8keS7OnoVAP2Io z&Z;5T>LDw#uTYj{*@G?8;RZ8tPJGtiap`56&2*&})N)sAU9w07Z4dvEece)F=-1GJ zMSo?4dbLk?u?G&vmO~|%LJ(X@;g)VSXNQm%{`7-+i82c-gmLW>a!nk;F_&}EvMWo3 zCWkNGDl^z@t;IxFMtoOzUB@mfh+Mo@_Iw3*6!>sKh6?qEdz6xucm%8_lCl`$Dn?wLeL*~G9N&f|#>2v~JGP*)QMr%ZkBASya3ZJd?TiUYe4Vqn^2CY<+ zgqGT7d|Ifn%4U$-{bF^d;uT;9J>N56$QmJTa6abRuJu|;`U7cH+qF?zvSEb7 zIUBU0B(+(aU6kC9{>9EcK+pYLCqddoe?`&FNCLVX%*oHkG29J*g~SQpQ$miwfgAE7 zF-H!Mxpf(3`^Cw>@g(;yb9Bzx;jr2}mh<3`6Hj0>b3rAVIIJW#TonnTabzk?@$&=URaY1mm z(=BFXh#lkV)#I9-;c)I*SKRCnWX=OQjUrK=A5l;;66(8@7WPY38=Kb{WIXI2WchUKS@`=QZgCX=mbwPf( z^`+T;#~=3@iF%iY{o&t18nBaht|Yq+vr;))JRq!DApf~gpmlV)4Td@8MBqGqd6r{` z2DVxUeju9v;xwKq5T&4-7flP&8WC;{0>q$o;JFI+dE&^!4r<86G7b`l+LOs;l~{vwEw$ z`m4iwtjqeW(|WDj`X6TEbKUx`^LnrQI^`Gv9H7fO#6hvgfe~axutW0Vu;s5i`?Ev4 zle2>n6uS}Vz~Zn&u>*lg82hnnrMAygv!`7;?DsyWOb`BrKZ2u3Y-4;!`@6&Yy8}VD z7kj8%hdLDdwQo;4P&=}lS-yumKk}bqPg@t-1^=NpDo+C217T#oK~B6we8ls*4pcik ztb-2tyW*rn4)(k0n0w-gJFOvfP=f_O>;wJAWurc0RZ4uzyZo!efwvngwI4fas6((H z`@F+}zGHmMANzw4yRm1yM09*4b^FjmK+jkEu+uyoSi5%2-Wx@+Tj)cRsON7+5=#6- zB)AE3BBs`JeP1w)vKd@fgk~}awm+nUJ|KKXe5T2%>&wgi+@m?Z#{m@veYbZ9#nXGS z69mocePJAZvderT4L;HLy@m8W(rd(1v|By&T%7EKwS5SU@+oVqq5rr=kKo&(jGK(0 zBP0h2!5q|l=qL)Wj3crAHD9ZXmIvL#e*f&NH{ZKp%)`OV+J4f<0T5(69HfI9#6eT^ zyEHm&5QTjuRk8}p*L+1k_|EEAhrg0uyV$$zJGB=h_Pcze*aQNw0ACDM0MxtS?ss3 z9b|Vcjw|o+;Q$51flmJ?BfUF9?+x_=lzQbL0`YEEz_-B z*OA?hdk^|m9Qzh-T)A`U*0p;VZ~tDsd-?YD`xkIv!Gj4GHhdUyVz?8(W@H@nppJnB z4<=kFQf5huAwi<-%yBbHg%H^tbjx|G(Uvb8pQ9S_X3BLmGuAtImbFFK5N6l3X#4Ej ze>)-MV;S)rzKr|diCqiuhZP| zvDCN0{={D%8sf$iK8ir3=zSWcu}#V1~GgPg4j}0Eux-&YVAQZ z!9waS7Uh}e93&w)08R+pgrG@_(s>6^K>6|K9qafsG$PxY67EJJ9eotiNF|+=(n=v! zh@f@U(V-v+;D`ebcG&q84v7c?@G^(gSZ5tIKy@s#bvhj|R)#E^NC#Q5q&3TfeElye z1a?bF%nTuHX{~l5V)3zk&U{x1x}$1maU88jfq9bNs=_ z9(;&%)}}@+Qs*CZBma5eAGa{(vtxWd4p}Zb&)K0PUeNvUs*JGZHmPxCZc$r{guQ2; zp6AIKAAany=KzTjr5EX>m0p_Zrk$3^UL$5zCu+Cov*^By;BW|zfGt{wYaklqE$Xqs z232g#_-o0be#e?;r3d_J_CjOJ)c9-T{)r?w2u9{jZ@%YB=O2GkQU{-Z{=o-Pb^2** zE1Nfd+|aCElsKYzQk46iqo4j9^w32go%A2O3{MAkq{Gzf(p`TY_Sj{gop#fK6;Iz% zYu}ys-hKZa_~1_m4+wkVNIUrCm0zCu=AC~Y`sk&fp8D#ozaIPSwcnom?!EsW{P4ve zpM2+7Eg${#wf~QY#!1;h05Ev;8C(6N(TEKf=t$Md_-a z@0jBv1CFO1=a>iS^5KsME=?#Tnv|F_@(&l~EG`^eppWp!KNgfATw}Qa{|0CgcJ$AG z02H7_Ryf1M%;p|D*nzS}_`7!KFe?{a(LX@Qr+V}QWSz^%I#RSa&p`k<7J(bc7?+WB zByMqLYho3Jgbth`D`xY`pru53t$Dnph;Jz)T&C#6=G`NVLV{ucQkWEV@b3a02~hz5 zx0L|4kWY9-%xu!wL*QXch%J%F185eJckIm``ZxzKzE(Ih*n=%ep_WCmasZ;8BaZxd z*#pA34*yGHQY?vRdwdCGzR8PKvHB0K z-v5KA|Ja98A+Xb)hN~SZ@<$|MsTX%_&L6Cdh(8R+Nf4D)A7Sdg5gAlU`a#K)B1y3bFvFdWb5jA=bz6fS%S$3rF_3))sQ*EU zB{%b729P0u7ZBdcoY2@2c+BIkK7)r${(6riK7d9@)Q3^;kxseDn8qNihdmH*)CUBI z!WQ;QM7;HndnB%{cv*+s>VW`z+$e}PiCK_8G~~RzWO0l|tAwG*V;=(4M{W)R@IaMzc&xR*!tN)y#56VvO2>u85rTElc)Clb>wQzSWe<7mmn@ zQ{1x^18KMi&22*WXx!gg8UnoyrbDH2KTPv+(@^MVrv0}LPd7Iy&(*MO&!G;Xu-etE zZuP5W8*5n8`f|3eHLhQz>s<5NMZWGeuv;YTU=w@RvaX0aj(Uy*q*-+NjsMGj4||TB zLSVos0#lOCK@U4B)(Gdv+_CK|L0w(h%>3G(S23-+5<*sYfiCCN?q?#RH`BxW+}`yc!! zZAUnEBE1AWBKr=?$g`rkwqpH_GLX%1oNPSQLI;Iv0(nWi2_ymVMLWk5{T0r70=PKY}xr zs$3;2F&Vq4c3^grKXEl$X=jGtO%!fMB_BA6pi&Ws55pr$<5f9(QU4ex9d&#xV}L=q z9`!^w(Z&)T56DMQ6<(L6M8b1ob;><^-gk>%C?5}~u3*y{lLyf4kp~zXx*Y%bJW0hY ze3?A$9S?aunY^96myYivvX8>?vhatu$mc^Jp{MY$LG3L5;vp@-bXb&sF`2ZbjecB9 z*YGP%r@Ht1_|N~<&@J6hwbifwSPv$$Y0`#E;vJdf2A-p1CXWa&s1E_`XeT4=1_Jo* z{_^kiTH`hNZjAn}IId#wi0nmDDDi*}fn@6|CND2AP#*fBMLg(1iiIk;Nvos}FFZ{1 z$jT)ipdzH|un_P7f1~T*iOV*y1C8Y+6zywdtug)&1v3zDD*y0ut}n^P2nb)KF_!Ec zdXSr3BwS1|A9@gzR!~JiFe8Aj`bI4s1Zn$x%lulx=)lkEhN%lLt^8t0>YxBg)UPE} zEh6SCzNqUB;mZx@(7fXCyx@=y)hiF#YY*M44!_18Iwlh62Xy4`E$DBq8bux4p&htM z;v!-;9`Ps~3)~{&+%|?09q|Pnq~0pl$n954x|&FUyHIRYh6BJVFI4_gj^eHQ5h z>qa?dgG5MB$?Cx$&LI-IMd#M41$9G#>OxE|P6pGc6<^WMChjHn;RsI=729V<`~u}> z10S9-DnyX;G^84zF(ZT}8RcRfa8Va|ae{oY^v0wL`~S~JYAcYSAdeEt=*F-k{abPjIp$6lE1P zk|f`4^IGyIx1!JNp{0^?E{ZZ8k@6Qg5k+jW`aB?*E-EJe$sMuJw}i_b*E?^xPYMB0#FP$zQ{W8+xf(_d*V*Ftq2>)?(ERrnQ4+7RjtAavUHWS;Z?_7cr z0?27J0kSj61zglkB_ZG`a^@4;M<(B5CSIc>J_J$NYU?@z1G(ZKjB;8u()h4)Dp&K) zV#F4^!Z*iaY~0QwU}_~OWHqIzH&yd1KJO%lvMT;TIDfLNG*90^@^HSfC6IG2CJ#4x z(j*fu<-n7`3~VJRlk$R!Hp>c>z~pZRPz4`lxI_&S8`DqbsBi8FhR$NS`X`wHl@pWIG56tG|wLHOyP2I+qMD$=0?HzA>J~A1LyNTQ>#f+vch_T?ONvb?twU< zR7$CoJ0XBhe8bF+G)d8pXM84&xYS8oB2V`LNl9v1k_gGXV^9k~lt}fjM?B!7GOAlXwFETEg#w5LJYZ}jiXS6FRWWK*(ZW_0Q z+mAwH@GWxjMIuCVHcN>d390TOu+Xkpu|l>W3~>~Piy+{Uc!5|2m2#*P7+r{{KxQ9S zi~%hoHUlj?7N;Y=G>JCG9(c+|@c(Hy2M}{^Oef>P_~d3Ea^`Q=A#t!3E!7n+lj0pJ z2wQWLD@bof1rT550v>9TiXMm^LV=I<7Mr1isb1e3?u>93d0rngPR$PtDdoJJt)L|X|(pF^@S6!z< z4X70%_r;X%k~9?iDzk?Rb z#|+F4KGCCW`{8Wm2?183-jX71*A`OZ)-dD&AL;=||3MuOgU8&qYYpI2Wz|*_sB2^A z{=!x<=!9#%M<4D%Zq1`{AOClw6bEGOB68#9at$LM;%08}t}skVtQNO$N0)R<*K|)8 zbyHV$SC@5L*L7bPc4Jp|9|axGXLfHFcl&~UEaiRTXMS>*J?NynFQD`9`l3SC4`Agny9HI z_+cOPi8QeVX1U2I>!}mRiDtC8B(v#O9Yu)S1&19)hszi`B{w6y7+FP^cg~nc*l`TE z@S)5%CDd<0FKU2_tGOhKp(tvJM3q#>!ihWTqh=?HlZ2!+u3XbWa@0gBwQ}YVchO?% zO-7P9YAPZej8CRjr}FBoEJ6W=im0IDsFDgUwpYTOs#h(mv6SMfD9bbLVzRP|u&|Y^ zTno0oNv+t*Xz9YVHvyWtunB&SVkhvt4S+DE_mR)3>*`u}!lY@1ug$Rndyb#m$ z5{CZxpD%5Wl*>N@jm!E_zUq*n@z9|oS`Q_f4=LIYCmN&KtG=4KA~E?g)5skFP;wG% z!7ho$!WiuzR4mS1Y|m^$Cvt2r z+zieV#mhPd%w`$~i|oieXqdr~$(#(zVi3`EQOMkwLGbTKJ7&uYX~%kuse8`j%IwUB zIwjWZsEhi|awgA&8ph}hUF;0c(t57pDH#C`k*m7UI`Pn^Osi>n(NOHC9WCeznx7Rj zC^C4DG5<}|$hXtF57cUC)HKbp6*`R$@*z9>*BtV*88Wmzd)Pp`v_<>0Yt4u}=-FVW zk-1gE`r$PsCppB8?;z0I1ho=tyVx@9rA->+SQah{uHCYc0S{o_Jn|w-k@{e+-&9c= z?->GYj<_w6Wz{n;a4sbrZs#Pfx|uRKyagvQlDc8ytU*rX@TTN+Pa~b1<#_bvLQb76 zg63@QEwsBMxEtcUo8o?MZ|hj-?2)m_51@UkpqTD>$8W%+ZtDC|LSnjy^jH&Mqi-nbct=?1`si}86E>ODLOebj&|7@^sLXch3ST39p3iFc%XEsvlLQM3x7%h|oQ#}@OkVHq_(6gfl z@nRZvaBRi02wmg|8A%BvFe6|+Ok{luS3Mnni9e-63yaRu=rPY(_0H#f&zmcuy8rMD z(=dr2G$kHd4lTN&Gy0+{+TGh7-sk<@>s{W-3lIg7tLcT%b3IyEEh;LJrE^dcEg~8_ zNdJI)5gU=`F1=cjRnq~F(@D{mOmQ1gQODU^k(><~>l7W2UC8w!9CL9OpRycFUMU|Q zFNQG&@9h}h0TzE^8JqFqQ_`D9VReQQ6 z(jKl{Y5IM?{sa{V<)fT(EKRhIxUwVkJ}Z&MBsYeMlYS-L;x&0ACVBKNxc|wPYVu4h zIpdESIKiY!A6`Mayf4%e-}-?qXO?-p_fGP}@oU)ff3hmCvXZyL?{_>WBwr|kJoqI4 zn?~d;?Sk`<@*I-#J|TaC<+4@l5|8jQBM`GMApkK26Qc;zFpD3L5_4AjNT7@N&$~7< zCo^{F9y28;iwCP(!c#Q6f3r^$-Gtkjm$Eg*a$5y!*adY&O*ua^;yha-UCEPOc~U#2 z(&LS#IK?s}>>nT?2pmXIU^;^7&fOyj?;O8>1nr$WDDWJ^LyvMxGq|?dxb0C&zsc*8d4Cc@jcVp8a?U zd`J-}gsN8+GIR*h5J&p(z&f7gtvcTB*W)ECvFVa7)1xH6t3$vn22>u>Ks)x@c1a{}%5o~wP zU0QxE?;Y6M&z|_D{?6^YXK$Z&fkLgO?}|1)$I-mZ%&WKaf#=X?mPC=*qt65Xl=j;L_uQk8K>zsZ$Dd2h&2!Fe5U7*h zdhNZJ+daJXRuF<|*;kN^>apjZK< zT_{jP<((JWm>hX97!)j&Z~;N=oSEjDY!1eP2UuNjW(j5O<))eiwTUL35DZq>VU7_r z*k5Ns<{O!eHtOi3kVXpWXd=pY&ZUiVc4)o4H zyxc=7N9y#`PpBLIXW?_~=p*1i`>=-Hdr@|m);dUiT9AT9s%lSk{_Ha=1U`0DU8+55 z%27NiJrJ#L6?(Z2k{||K(6wp3lTUQO8by$c)B4xtbN>RNixxZwu!~Qn*MX<3K->!W zErq%s@W8Cy$~?_&z6$bY_nw-T%gW62CxO^W6Rwv^w2~XZM0RC8qH6{M>pMcI{%RDbVpE2 ztrX9Jy2gP9IMa{JH%`D+i=G%X*+D2%5Tk(SuOY8n3>^E zKUkUVH{hPxgTO;jPBwVpe51Aar1;cB-9N7pZ8+kMXD+D$ZUTxHWSGLN`RJsRULB@) zOA2r4tXrkeJ&c$AdhC>~^AE6YqcwZ$X6+7XJpT`Qdk?NQ+m1W$$S1G-^2|5y{PWO9 zFa7k?S8x6G*k`Z(_S|>x{rBL9FaG%Cmv8?0=x2t`I;p4c{`>GV8V|9_v-1;Z@aRK( z{QUD||M}@C0SiRL4!0DFBZnGD00$^3&|OM&{fpqEPIsyH-Hbc)*j_^P*18H2+__wxlU>XW@%q*knMfBv2qSL=>bTa}T!V&V)ex4Bd8Mx5>EU zA0pfiE$iG5=DE3Zft%m9(_T;{jr<&2cI>kV7UiLTiM8 zsSaR|12}{r;0ewHB56B+n86+oU}W67xV$z(fIChEiYa+A$x2>Qkoyp&^-Nh0eW0;% zZ1KQ4a+sEM+%iymnzB#(!nW#T=X3o<%k)g*pY^G1_B=< z$OBG9tw=)PA1qypttMKKcie*)zyE@fBva;{FX@9_`JiJvvgi++aL|ZZ^p-6J;t!^c z^C0;HDjh8&5q$XL9|v$-Na4v-E=38es=9}O_(8v|oD?%Q#VLq%st&Pkl78zjj#7!$ z*0H`P9k!xKI--RZcO=yxONEY89{|;#f+(m1(Z|Eo!_{*26t9H43STi3)x*NDItsLo zI(!widcdluR;lV$vpNtELKBy7fxtQz1E+l=rhoq^(V)CI3~qjQg` zj<2F;*(wBzZ*(@+lI7Q6m49TVEXG z+QQ^r<1n9EMfnG(A2NYDHQ#)wFtOL=Xdt^cudk%F>da;(Kbfqu-uuN0h)0pP; zsX*OnQDchKqc-)WQ2%{uRc~6;tX_4DJbR7<&=`E^HH&)tu_gBoM7uR!Q6wHgGg#u7l9|!mI3yX2(K$ROFMz?9IV6Q}Oiy|4 z^;TP6EOv2C{*k!7Rt(5v!%Vg2UGK@7>ahkgPQSG^(j8Fyen_)%N5H+5aa-HmBAljG z4nB~AQ@qUo!M1NOYY^)U3%@4{Nt3;T7j?fk&v8RrYi9_|LIK)P0EI1HhWYZA3xuC? zfx^lU$diXc)MoNkXr2s~Mq)uZxvR`cmy7cuB}Y_CXs{9b`1+WycQw_9L1` z=-wPT$dt;RmH(5VVxrQ4Y6UremROIY^&j&U2d&M1~Zhxu9oDsJ*Zy zPc`p(yMOK|cpPVi*vqw5LW+*44SpZ~ARe$Gz>9gh5hf5*Wh=YVCkp=nit4(Rt8iswKN z^LrE4MgJIhDpese#=<72LP!0V5B~>B0Z1SBhkE9>fS1yMwSh?gXMkX_C9c;+utyuS z7i^dULluI6zczin$7tzrN5eM|&G%1*f_yi}asrWr1HpWVk#mU?eI4O*0`Xki1zqB$ zU0ujs-=&3L$c189hTUa`VR(jW_+7(c4+0ViAeKGa2NWSiZInhozy=xQRuCUjR>md} z&bAcp&<@zKhnFFLqj3Q9b4U(2FRHbH6NVYVt5Woeg#>^6fMr7NEpguM4Q_mmepXM8UQg#-bPu(fhJluwDa zN6m*0bRl?F$PrlRYO(fep9YWg2y68?kM@|4__&XurjM9LBz6}y*e8cZmtJC&4!O8A z5_NL8p>PEOMMQ^RhQ|`?22Tn`5?+@jU`KiyLW;U_ArAm~k*FEDfpD?J9bWc~omemv z8Ei?E5-Qb*@$dlqpnEF?6c8C2@^_PAcMdesaZSOK?ldwZDxfzl0AzxH+7FZ#5Tk#O937TR-7AT<-wK)(`F%=Gm z5w00xtO<9%frD65EY$d%5U_S6fts2lNBER;ep!Tpp(=XeTWwK}?%5WCfsVnX7>prk z(kGUI**9l(K8TqdVWb*VxtOAK8mX}w!|@^wi6gwRD8L~caZwz{QGh4{NB_ThALo!C z`{9wSX*&ZlWIK`}39=v!@*riUCFEI*Ol6`W)*&AfA_Wl}CBjlE@}Zvz0WJa~OClsT zq8kxfq8efr^7o@PLL?EEB*S!Y9W6R5HJe^E+6?EhosT&z1z?v}| z(=i{jFr*?fQZp8sS)S|SsvH5Ua_6Ek!!9(ltNS1s&>Ed|G^=09n%ChgIp!xR9XqX(BC-_AJe=b~dmk#JGP$DwPbs?Xq&cb3$|t}5dSK)ws0G_ayz$z)V6N~ zm;|9lbi22F+qZtJJZ<}Bfu$D5__v08xQLs$Lld}{QMiixxR4vUlB*V%(hu*D4gjDI z?qCxyg(*o?S^t1oi@8|Gniildy6wk)U9?%ZGhm-Jxv(3%vioyfnhxloW!f4TfW%y4*_2qGuq-yJip)d(*fSnzu#f+rR$%zl|dm z%0a#Cr(P>qc_&*L2VB2e2?6<_gCU3=JqW-QT)`IHH2<{WBI{edjoG418NXG@iKgPc z+VQ~od%-B2!YW)d5D^j^%zoI>yQSJ}s~W-=0!4WOo?F?K>}nQ*M{K|J!z(<*L~On` z1^~`ftQ=et7^JSf+`Y20_%SXaI%w){C#C*)ioXpC+%*@=(&iu^K z9L>@^&D31Y)_l#_oXy(2&D`A0-u%tr9M0lA&g5Lq=6ufRoX+aJ&g|UI?i{uO0RSQS z1ONd5001li0001v1L6Sy2>$>f2pmYTpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m$` z$B!UGiX2I@q{)*gQ>t9avZc$HFk{M`NwcQSn>cgo+{v@2&!0ep3LQ$csL`WHlPX=x zw5ijlP@_tnO0}xht5~yY-O9DA*RNp1iXBU~tl6_@)2dy|wyoQ@aO29IOSi7wyLj{J z-OIPH-@kwZ3m#0ku;Igq6DwZKxUu8MkRwZ;OnGL!ca<}1-pu)_5jg7zu8TuDj*)|( zL&r>a&R*x&uw%=1$j%69BRWE|BMn4!Y10OG$LYPg^}u=j9{j_njv#__(4o^C_&oZ# z=>*;VlUH!vfq%=JXaCgB-63-2%pIn~2OeL#+3@4b2MOdiY4IM_kpUK}8N!=xqfBdYft?;t2Isa5Xt zPCI4xVM~jJLl9x&^+h30|7g#vI-(Zp^mzcJ`WJ|fUI&Rt88ooLh74+q48)R zY473rTWE{cSx}-O{&pw?)|U3(uG4;Nr$7JPQ%^q+Fv*T`_ptYALC<+9kUj?>gs(!r z5)>;z{7AXbKd*jQP`?t@%g{ghB47pt1}`h|#FR-pZb5Xy!45kaL%<^tyTOr;8gY0D zpgO|AA&`IEBC74m|Gf-up3)LWni}e$(=tMl{9|uA{_G>r0bL5D&b$Mu!!SWtKEO*o z7emnW(@`r~X21kRtPq#trSkwj2bbxP()luUj(gClgU>k>x9v7#(%MOyy~6!C90a66 zP+x9|O8<-B&H@2G^S6l>IiS6Q7xc9{jH?q#vFJRI&p=7`$Im~`x&sdaS^9Ia=A577 zdDy>#dC$f>_=Dm?@0{}{1UsCgsnx$Wl+NYOBE;G~5bOh?f>pmQ{P2BQY>@E~q_f}0 zc*mhPfrA@8_dtSIFLR>xohF=ki7RTIb?LBEE9FR|v(E#%A_S(b2CYweL2E;YY1soK zo6kQ6A?%R(=sR>aL2DzP00*d-LfMNT$WtDHn3uP`MK5{N6G-+@BQptJuTB$eR^Tew zowL2;gCK;!I_6cmd$ns|LOaMmQaBL(CCwe}5Z}WXLL>h?06_$CAw!5YyMfUUV)!GV z5dVi57e)yvf^}ma_- zjPFATmvV;?TFC=f2W+9(jE0|qi1BrHsw2dTHIQQw@sEH^OMQm34t3~&I2qem$Cw92 z=-EaM>sSZLR5lQ4>0lkiu^@qdguwk^(ux+mV!0UNDLfJ+AF^B7r_}K^hO~}%26<%~ z3zClKu&*Jm>IVyRILCJtEorSph%e*FrZ3GgkjPBtR>E~35l$;wcWY!5?NcBK{sun^ zEDbj8(;Vz+3kZDT6GPPD4=mlo9;ylvrt)DAR3hj(_s~#z5WtUf=0iEEp{G6ZIscG1 z+T$Ggm5cvR~M%xGfOquSb|$B(-8 zt!U|JNZuYZnxeQxGdlYscfFtnGNAS#&juNoIS?qvs?nY*|o(I4a}< zvd!&4VgQ;zWxqSy+9u?-;)MWsaZ8dB-eU(l&}wim(hm44h`9$L4?)ziE_mUGzwAm^ zTLmIUNS!A<{bA2?WcnQh*909GHOM_U`jrwMI6c()9(Ev5o#<>>Ao>+egE5Q~=n@6H z?Q7^Ur*w|hF66=k#>s4F>|KPYL$(*7Wov0`TlN|a$L(G5d@%wh{1!w-zp`p1?4gfy zm`Wf@X0nqJ;wm(`=s^I}XpIy#q7t3xCiT$AfcLSwu~e=_4Z<>pCR8CcWvKtn9P-ew zL_{JJmH8$n9tw&NqQmR9I3j3%(NDs=j`gN@A?b+mZOw}i^!6vl9T}l@hn%8w7+D}= z%F?8vbdDNB;GZ=X-)WVkDJL1TO=C>ZFN^sTGMA-tXKGTK212ES)Vd&V&NS_n3XNSZ(L9_0OYz-g~5AYZQj)pdm$tzn%6J*f_F#ro_8{S>b*xKsVE^Xtu zj@v?kyE$fvq$TqXNS~$14dKh*|mdHp28tP_AL-p9mMCj?p3Q^74V9@H5>{i*%!57Lh(AEe$(a~Kc>QgjGl zEuum$$Uh@dk9%Uyj`l#n%O3zKcIm_A_h^%fYX^^cpsPYg&A0zR{+$q9LEc!%g+M)` zKYc>|v>pgRC#C@^p?@HN7aNxdIn&i&cfm_uI+tMwv@ZuifWlTL#dmxaVSU&KBI_r8 zn4%iXXAd;;599JK=>mWju@3JSe=Kxg1MzPYSb-ha5dX9sZx?lQ^nmThY45=f1T!xC zr!MT$LjrMcI{|omhj-8BAAQGndnXXpR%qRpJUcdcv_*taz-$mOgh!ZoV#6BWlQvQ~ zh3Zg+-*bgiNQGN?4qCW{UucC`XdPjgg<}{UWk`l+$c13IhF++0FSj5zXcn<&Y;*Ka z=P*{v2OWBdYu908Z3h8oBZX?iHpaJcTC*z;@JkGVVy*uZ3HfynqXq%Gln}$_Y6a0c z>31|Uln}8K8uRclM*~sWA&JHmYN>PpveG)9<`6yeGeI*nzjQPKsB(cQHRs?oP{TC2 zNHzI$HHa8Q3%E;dWQv~_Z1JEaL}M?sXc1uIX_{y>=P*MkmW-R`5dWka@6tsOFl+-s zE2Ab|Fvt%V^NK4Iivn_sIS6mLy3@KD7uDk2qi~2|LO5 zmA?iNdv;IfXOq|1m7Hc(2M{$y$v8)8IZml;xJ7&B_8vTFZSXh{@VH*%a*zK=n9t^H zwY6U2F_;LUc$EPU)OBfHQHKrTjS$c}W67Bqb!P*?KP2}*q+*B=FkJIv5qp-6U(yfq zLzf&+0-yP}4yVw<(N!W}X$X zX9c#M?IWI~`A^CrQ(bs5);VZPxH3Q%m;}L?2T_=^b(lWZZ28!C2HKBMU@wq)5Ry3% zswaAn$9frhp&Gh+9QvW5*P$5dp&<&QrN^O)Vh@-S2_^Uyn8^^DnRT+6al14^ok$Qo zw30uRi0S}CGNhWprhfSbCI@gC9a5a&IZFhglDT;f$kizgVSi?z5Bg9K^AJQtYNWvw zBK1&Cka(Uz*_^pT5hH{TAQVC)ghSAkqY81B2H~c(V-P(WL(}-3Gn%FEaHQlZ5dV{= zVu=y!(4{=tq)+;#$9OTYIT5RgkUIZ_r+Rvf|FjPmQ>JJ7K{$FsKtXpZH=xf3j|OTG zpNeVzh?t?ej|^H{=umBpGodXNgZwIkP9{CV$`2di&55ky}NIIkQH)#fk5M;(Gq^J=4a1Z?u z55aj4Wn-3VipseTUgDe+;YSDIoz!VZsiqKUbP)S$pK3&Xc6t!%+DE_@pTK3W zOF5Pl@f?%bJN*Ezv=*d^DiM1olH(;d11k{0Bwg|F0Q>Nk^m-6?Bou^p0e=Yr&ISb+ zP;No^cPh&cOehd8djaf_ZrlI0vfFlOGYhk(in7n5)7R1UgLY9oT zL=a31Fty1_>>5$1Ry(z%otU23 zLQQ*v2USr5kx?_UWd#3aP-SaO#LH1Mp>jZu%v6yKWy(cV zuam$wNpfqGe-7+ZK&2={wL;++$eX!TKP6RAX3I_GEM65IRdrQabt9LZtH0%6QSgUmrnG*8k~2lvW=Y*vJE z0T-YS>oBuWIJ9s)5pp~d3TP9><`VqyLpG5PZfh0(tgx%`&l$1L5)sgRrGqTs5bgzE zn>^3PW?u-25`Kyk`K%JrcR5=N6K0?~N2?Sa-47qV5+Oa(*F{f0qn;kkR|a6kX$*zG z1<@5TToeC&64Y$bLAnwmvO*6X6Z&uuCXEz79n>i?)PM>e`_R++0@O0y)K2}>P#x7$ zJ=IiQ)mDAgB+*&Iiq%|g8FN?`q-7MQg<7h`7OnMKxf#0$x}ayh)fEAq6Wi6NX&r72 z633NX%jFj7Nfvtz6c-IE)g`StJr&}{T^mghhL+al)nn&>BhhXhVn)+n z0>)?mP@4pXkT8~D?ZIGdWfKr~OcVBM^YYmlW*r;WVbW0$mK`D^_K`2q*FW*s%PY^- zOwm*FYo(TK zpN7pNUL{weXZ7u*XWc4TLEbA)zk7i?@tKYdv|T_$>Z!=8F2dh92P?8L6@#-8lX zzU-yvdZ2z4_56$0MSHfVlqJ_cQOFb@+k3Ak}!!r{x;d_v5E5g3BU(tuyG zeFf2d-$xIX4zMEBf%12r`A~oNN8)3HE;NX#7#J_qHJ0~gfCVA( z*6uIdc+V5Tfc21l&#)(#3Tr$=gWvNUJ(B-fq(xtjxwn5 z{r7t}`P+*<>;LG31D=>dn1qh)^GH|%O2~vxSlpuFs=M0sz54WK$g5HB^ivP@YAE$r zPxWL7htzcdU#%6@uB4onhjr8su+;5-_+k4Mh=Z6m0d$C2bFIUKji0-}ux*U7X^F?= z;nApab*d1b*xRCb4&e%7#`uiEk&3IB^All?$%Br|D2=s9HoT~dQ8P8WsHFFth#9Y~ zr5KLLsEo5%-wuKJvE-!ENR6St;yRg@gQ=U+k1v~)KX>ftj^YK66H1S= zWseIA^#6!$5bBP=-a)J%83XBL%nJ5YuJ;NFk$rfj>S;}>8oU3~JHPX1SD8AX zxkPjyk{?GoIcbufe~FxZmM$sCF)1EHS(B{dU2?gZJn56E6qKnXJ{sVKH&$^zsrgr2tw-5v(3^&Fdg*jX-FuBehZGKk{EPp!j`&A zF1_ZS6K%Vf>|+i;2%F9&N#L!5DpdQq^;;bbQv5V?~ zf6h7(!R4@m&_&jkZ0Rlo5W4FE%ov;Uv4bSD5;BP@`{*x;ux#ltFxR??`r zVY5v(xpLD@IOBX10y^uwlb$*0+%wKT<+St8KieD>PeK0!w zn3#G=Q-;2K3B7qB@Fxp81anPEYEnsb0?Ns7ED5wpX{RaMX&ceOmR~ zSAJbW?_!1y@CT;vLV`!GeeUTep6c%5aB+zOcByUzPV^Sr^~443Zv!3p>5@nIQ9OJIgXgncU3Oqb~Lb21mc#A`jnk?-?*{C)I|cZ%nMeYo-)aF}L4 zo6@^HSmy%1pwLJ%C@$Em<%0}}lAR|Rf`5H>q=euu7T9Nj%J<`+-_0IVzq{xRP1Flt z0u{KxVPRw*lVV^5<&w5cA+RO!I0uDVq7VP@9E2YoWDn{3^_7xHE**8#pnu|XH=EsfL zbLh<_`AFTm9Hb5r%Em@5F-i_|=aLg<&?Ql%i|-C{#KtwRM%lq)s1C*uG|EMZUxa`U zfrlfB9i)zjqmNM@W-oQE@gFlJU3B145Qb3EiZ|?{1Vd9mO3sf=lyu*^F!>sFY?3mV z^q(dv84&@}uYV;tZrH?j_H zCWQy7+dby7%z3DZ7rojc?j9A1(}@3(AtkXOO?2`Pe3a(_W-19U%rK97h)|6Z;YY7P zCz1K|!yfCDh;^(vl#(nAi&hNhILnzG1o-0~&EiMun#dy;Z3}oqQOCA6XODe^Y8}nV zhdr=Jm1HurnaJeFJtQim)F2?E8;uLbaCr`0GH;sI+!S-tXhV#hL!9JHWW=)b(1J*` zkjPT0T>AM>GX(TqF~K7rpJz}Y9>pG}3h8ccau4t26Qv_68}OI7(9SM|DAzV?+QwIs^6 z5X6*tu<8N+940X(Qa7lyBvkXcn`xWFsjs{vAN~;1KCC!UdOguN7@>;YU( zX?7ix4KDK@Yoy4&Lm#`v$7`&M-LeTbJxsZ5W?^!i$jW84x<&0*gz6~hE`@m+Dlbud z3*4nVl8#T2$a;?(-=V;Raze^3P*nag#7@J3+h7mt;~sgAbG!cBVLt;JO?wt{ zRSF$wMmO5gkA`%lB|T|MSK88-#&o7Ny=hK&+S8u~b*M!>YEqZl)Tc&us#U#eR=3*K zuZDH3WnE+=z@cpGh(oU9V1$>{y3VXV&2qLnYhoAM*vCe8XxL$dTpK|LC1XdffgllF z>zdbQl{T?&sgq$VFddWSrlBwN4-nF19s^EGvemtAcDI`}K+v_WJ*ygZdc;;xC7J%ux-8UBg5j%-;27ZccL}z#9(t#yHJ)otkPl zyVo^$RJ=0|fuJ}0);NcQv#SCReb6@_cRNn()N$R~)Z-t#P?CgB>kkdCgPQ+{L~6E9 zS$lXL><4+rf4NDxda1*k{E#DOdBQ28cq)Zb6^^M!=e@&agoB=$Pb_7=c*Zxr)BRR* z(RCdWipN{m8o_zIBO>{wAEe_+w{}Z1e|i5{9_dyw>JEo=kgOXIJ^9cNvv?8VQeosC z^@s$89?Jhsa7X0zu}8q{qmuivl}%U){m1S5aVmO|PHEn0{sIsm{i3h=ux7-I;nXsmW%BnhNIyMdUG5F{s( z9BML?bl|&#Fa!7S6e%JK!MO|~$`0ZP8g+QUq3DMk>b~Ss74q}J9|Xb{tGt)!H#51v zi)+6Ei~|UOw`cpj%F_)6WC$trJpO}#&+E7%tisN72@*M&2V|Ef%7>X?9UCOLbn~Et zLL&ddg8;!3Lozh3=;@mQv7laA3$~cU#i^aSFbXSj3IJK67!r`j0yJs)h#j<}hxoN1 zWW+{v!~`-wmx#o5u{VmFwp?REf4f4Y)50x0IxdvL&x1E!yT8kz!Y+)M90Eh35W{dW zF4RenyMdvWFebb~jaH;X;h>mW(v%`Gl8FuMO6 z$~7a*H6)xiwa7##M7mN8M=Lyta%>5bRL62`wjnyj@L(HQ-gI_2l>lChNwIpSckF9M1Q+DiD=8WJjru3JuYO)fyoZ1 z_=+&hqT&j>*TN%)5S+&H6ebGHnRFreV8iynKu3a!e&B^P6t|f8pm`a&OSu^M_$Hb_ z#25NZR|&|gG|kg|#L>&Oq>#Lf6ibQVM%C2BhOj){_(pl7&3H=+Q9L~$;5q-E10=p= z2;j=S*Pt|5Um3c zGIl^WS6MF9f{Jx0NaGkyqFAvAvq8#2Ls#Lfd22%uQimRuhzCm#+SAV?MN)`d$pz8@ zc2J9~{5ME5u_UF^Dz#EcTT%rwy|t9IDZSD!1=BFiu`Ep>Ab`3EoizV171K3k(>8U} zH-*zUmD4$;(>k@&JH^vH)zdu{Q*=N}J_XbS(v?;l)Hh=X7gP}}! zZ&R0Z12APZl4iv!W^IXKm7I03)*Y2FQY|ty-8NK3#YKhIZ6&sQaL+dbB`A1RSBaVb z>zPTF)lOQUOJ&zy4~t5)e!!i_IspHMbGU&kI8pfre=q~_ zNH~pi5Q(K&hJ65s&5w~~Ceq>+e$3d7eSnVDD|96?Ri(rG+{?}Y*St3}PU@*wdxgod!Vme&*QFv1^bB_}EPv34%kYQz5*&>{ULm=<(EzO!rLB4)-ry<_5^0BnT;29;NZECd z(fHlq{Ra&?-_~^$YC0@^K$ZB-yDdYA6zsd`o!*0}-nGTvs?*-P(T7g~mhfGQ!JM#@ zS%?0?AHSUp#LXm|sbB&sAi$ttNj)D*x{S)8RlLfkJSh}CVH83+VM9q25>8DP9gaS_@Ls`a9)Euta?BI zhRWL4*j=4SSk-e^ROBXaQr>JbV+26s)QAptkiL&Vz9>##EZ!F}t_Ly(&*VE+DUQxw zsfUT0WJYej?07!Bn&Uc7;9AP#)MI1Wod?lkruQ1;LcTFjvJwe?j3FA@l{pBV@mVUN zWp-v|hUTYvW@&C3d+|DdNncLWVeZH# zoj^FlaoPvqg?fM>^zc@fh|UzF!K`ULCPql$@yvT|Bq`fprr;YhflPEhNC*h$aXyQF zCTA{2Aa}+-o2-k~l86>;o(4q7(ah)2C<*`QGYU{`k69rRhNhJgoyD0Q3WW|qMCJ#q zFu{7(=Pmw>a~kP&Nx{eJkAq2R6aiD)UZ`sR++-MB%v1Emmubdln1Bfg_6_eP9=(ZNeRK}tc|FM<(w2pehWnm3Y^%7 zL6nM;IEj>438thAJ6wyl7zjo(p0Q43>v zSobtTg0rlncx(2Mi&i=ob>qRu2PSqxcK>QbtV%cx}pZCgh) z4XoC*ZH9@En~e{t$AjRFWCRWuIY#7QJq?*h13?-EsYg+LMwqaW3b}5MKCbHs?~^9& z`ml}=fvVwAObvQlx?mCh2oD&M5jQH#&cKmpEv{Ai5fRaeQ+AZ`evs`}4K?z`1Yt7c ziSYCQMq%uhSQOb7>2LC296qw9p2nE@29g%r+jK}7S^g4Xwq@d$nHA^YmKl>W8C+Fz z2^n4#90wE~M`0dU;T*4FAfMqO7xG1MlpvB6P?PRpVORcb3CI=|opym_nj*c@c9GMCbo3m-2lf?ToP&056UShd|Ou7;gE=V@Z}7xzLHB5f@_b zCjOT-hnSA}7~*)FcM0Ylbmr3o?&t3Hlb;r8d$#?S>GC3&zfeA=2*}5S>N@l37fI8 z2hqN?B^T)Xgz}cyLq`X}mY~YXA>H1Mku;Xdw}y6`NU=F;c9=+Zm)Q0K*Bxm`^Oq1E zB&u)c@tbS6V$eXIVd)3VvGd`{)XJt2rR)~T8TU2{!R*0`dlVwf~NL7a%u|j`F!H1wJL{# zD4U|Ftg=sx(y0H@5B=QdsB0Rjk`fhrVEyyNDT98Ab8@PEYItm!eNC1KqS7gU0;t6V zDr>rQ0M02uN?4>KobLS2OL-~f4?#bgs)T}l@x&@+y8Y+R{-!5w^Ixc|nuyq{Vyb}u z*ng4o6bqu*sp)Ls0wLHtmu}!Wd;=lCJJ-+Ny#oT}o#SO@UcCnj7jo?A@gvBP zA|ZGv0R;++5*HS-Gl^0q$CfBP92|JTWeIfxZ=OuKlBG!&G$EKQA!v`0_yMMgy?d_xtKjIrrwIA$`@%GW(CzYT2{#||Gfd`E#TlR+;v}oJN;mF4%;1NI>I z06QWv=iENfaU@-4z*&dgLI^l_&p_l|_S;t-diY^h7hIsuItHBdlSoi;2qKFuy7(fD zF@6=6j2`i$T#Y&E7*aa_7`P)rqB9G7H~NlH1Tiziu$(o|60 zv%~)m5mNajm|=<;QafDsb=Qti4LK&8T$$ldKi0MRW}IEwg8)DOBv=)la<++8pD)UT zPd)Vv)=!dm=DFvejs9tXOG5bx5>#dl=P0I`YN}OjW}&Gggqw=`kv{iKI%cV-TD1;g z?^%`Vs8qrFVmx`a^%jtSxKs^`i(uSn^Xz{02OT&dJYObui& zzA;u>)}{0soMWeDjhkdU=gdQGI_Inz?0FsiW7diyReUhVBQ>|Mu=n;<0;3{ba8mzM z1L|AlGvan)8HLm}Kb; zR+yaYtOa$Z5l;;4#tX?aPeB=n)b&(OiznI5_wYk4I%SD1?3GrQ43au0a+Hp}Nrm(> z1a(7!qKhitJh+TBP9@I+Q7x2MB=+c2(Sw}jV-MN_^|Lm72iSAKIhYF+9zOUy;5n=Q zm|@QYh+?XBv1BjQ@Y^4`E>d5bbME=z`=~x`J^EA*HxwSMb8_%grSm&cdV|C_1joxL zIN{N^Xt+r1@N&*RipzcuqZFA65;7}lsi40ZVaSx<% zrXKrakUIwQF6ZQ|6xQQ#&L9Xd`cwfq7OQ%qmOeGNID=>lXSSpDOD6C zT(r0lE;2+POk~vKM3Wmea%LY%Y@Q+!*+{K;@gGebNNxT#MRm-@NA>?u%qK%~F}HD~ zl&2h(0G|TEpBPYY6I`G`8aNOW#jPp7sS3ck_1!O}V6`9ghAgM&;6vLMfGjIk0yui^%z7{r)@RhB&j2pjtsT8~kb0L+5 zfC7gXv*zV(fkn|Q6b6Xdq^zT}&fICl;&Tplq&7aRRqbk9E1K7;mbR{ytzT?ATilvO zx4GqQS$x}D;KmlV!VPZUUU`lKELB?~9LYY}SQa1(Bp;(I%Re3#lXKAHK5rCALQ*T3 zb9@d*3{}|!##*1;fW#f*6G+A4p}q9%NgXH63PtYOB<_HdF<9fVs5I#YczW}pCXQ_h=((18;-8hLODfCD>@^qJoVQ3#~>&rpB z$Br_?i6iO&p-1e)BM3YIL;uaOfza`Qe5i73RcTTre%Bd+>|i>FmS0vjX5DJmkH`lp zw2BjR06A&o&wq|Y4f!eOt_YeVr8YIH1@Zt2%kR~vPPIUI;}6{REp(wf45TFun@TsP zVwi@&i$C&dL+AP*ySCGc<%eU|g->1iKug0uDH#7>qfN-szOSZG)=!rlM6#B3G6S7V zyqZWE-3>&FQHTc@CVS+WTh0+YE+%GbJy#?LUff9|jE+e!gcrM82s-xhfLLDVQaDZ+ zTPU2BR&zui{lG4THa0T^o@0-Qc2j!u!Ek~+KqqmO?u3|)m5nV8P5-ty#y3(B#|~s* zqOnfG7w#2`3&iGr>F0e}=X0}IC#B~YdHBpyGQuu;e{wOGVqF(b9cZ7yZ z{jNaH>qB?6BYghV3eVqnfOH{F=3d8+ni}1eb<~3_kzk3#AP_~VgSTJ;_WFPaa$t(g z{vEYfaY6P`^n|>l`qp2F>Aw#PsR|UsG!X7kQ+&yNCr6>F!Qe{`Am;(t9!ZCTkd(^t!@>Db{S8F= zyidlYLtc2C*`*hd6`_SS+Zf&zB>IQ>92*48!#_k}z3|h5+685qLGOf-!;>}#0{GGjg^Q6 zGg(O~HjhbSStatz10@9n0aLx*qAPlc8OV^i#9&7#)*8;kao__#*u&9MPLLpBIHxB#pGlaN05a#hJ=OO zgF^8`MlQs~sT?G>2G)(E`Z*3~jLTKt!#&`TSYAX%sADyDoK#`YJ+zehNF`OyL&mV> zZ8T%wki|YMW(loeNnQVpR#_%ynh)yi30SGzN4#ZR&gDSVp0fB*lkv2nJyoMrz1L|NIaU(j{fG z7;kKd9u{BCZH94V2Yo0=b9B-@hKffPr(X?dNN|UDEDSq5&3NpmdzeQSs)r8=hbYVe1DyxxeuM@p@U=qw{*6zFqA2YV7{!C1)9WC(@&27$1sdO-k) z-cN3_gJ}e)|0)09MskqC6-Ix4q<4CRh>%Dowqlb`X-N1aj6f8*ED4cFobmXGvS?|H zGzlH$;@y`|DdTW=FHCIiW6>2pbR3OU>Kjk$t?EDolXy-7|K8V zVvQ(@o=(Z1!l|)9N>4l|2l>SnDyj!140zTEf_lrWY=y3uNWvSezD)QWlDCx~q7 zo9YOtN~)@^Dyz1ttG+6%#;UB&Dy`P4t==lG=BlplDz5@ixV&Jm1}m(l%eqYDR=i7} z3ahg6$i3tXN%qU#0SvHuh0R6kvSJIRPHT)bjCM&2HFAyD?GVObVX|K9rhE*tSWrs1 zs7-8^1G4|j-rODWXeWzkiJO}1x5#Ow!kEuUSW;R>fF;=*i&B02K+OW-67K@Sfom2P?b5a(%A=BM~tjtU-zGjP+R$St&2;(>o z7-89Jgl$a&%aS*#g2r|-j4LhAGGuisXmtQ z%&YMr4+bVrOFGZVrtG<_tl3>p_7GV?+!ICcB=AL{{+tgnz7PA1)i65Bw?b^v8Y#+p zUt9KxeUK&?j;R`z>en;brOeRFC*pWcI>VxF-q7O2rChWMZwZY%+gM|Zmi_eDE>{8rOW{d zF3BzsFn`o&(Dh1Wz#JQLyA$@B>${2D4K=vFqek#lQ8_ zKe6G1=&j{|o=4HBaeM?BRmh>`)l_*^3YXZ#-4Im$##VKeQu)wT)q`4ACRb6FUF~0w zend+7!%7J;e4tfK?PXsv#9L*TTn&U1=Ob8|u?Hiq4%fu{a@=4Q)?tl=#8PY@Ki0Ft zoygkcWn~uCa@LfQ7V(HyW|`Kb7GnwyS0)En2$G;Do8Tv-U?~6ACVQZ3CD+9;*SB~r z6L&;GIK=O0FZ*?uM@*P-h}U1iFa)R`0x9EUjzo+NS?Z0Ief=$vqn@TOd~n!4ZgYgqm^6z-etE=+DRY0e*d2-ljfwxWu~r2$ z|FQq|7-Cql3{q@Os53}j2@4>Z|2i4HRo2Qx+1baRWZmX!msP|)UJEPJ zZAX+@`%o7*nr(&HGa{{8j@8+n1&5yT*)RTCRTv>Z5t^YH+Y~7p3CC>^sh_Y>nx(O{ zF$1Y}Y#K!?n@WdT8IhV{z?u&>k4IOSN7$M=#2TSBp&JJEt=XWn@!GciT58C&M-Uvb z_2;qi?Z5Q&Kj&!-PBzKJpxUVzoJZsw!zt*)nMK59bAG}c)@A?P?O_P`>E2c_ zoyaj($>9|eY8+`EpLG;$r~TyBWu1!AT+hK4&M6#lUd8socJ3YG(3M5eB@WX0#nOeG z(}niQEooQst!1-z&G9z0t(}jO*CF~J0HXCqo}E1tAb6FwqvVoH@-N(};^5x3T+emf zxtreU4d40QLNl<~L~!C^umo>#2466IzqfqXcYNPBeUlUASzfs|%S5L(NXRlkG4ShQ zUl;F?#PPB^u%7Etc33VK{TU`W-uB0F1@HMD@I8$C(dbreO!5J^S2o}C0Y~&rU-yxp zfh#Xo)b@#cAIF8?6mcKzpFnl1a`ig-c(>xTwr=ImvRT5c_)Linv3$9 zlX7jXU<=xVwnoc;OZN=2mwQDt=Gw74c7zr(BoK<#xR~@WcSIL5q=Zw*tZ}wi*rAV8 zVS-vKPWRvza>Su0;roH17y^13_PO>^<{RG48gh21cSIZtqE$G$6hb<2UrKivx;LKR zspnxcv*yyk1x6;~A|B}o?bKa5`P5P(QvA&&wu~ooA_RCMC?47Vw&bzX^#TsC0RwhJ z*D5T^BDvK0(cMzG4F z*+UrPWm}?T& zhG*_Q1h~Uyo>bmnCgF#sU17JImAx6r<=J=TuQ&gMYZ{5x%O=T*Ca85D;A>27S_W^{ zhJh4m{U|v{2&a*(yrUea4gBxLiXI3+u!As=U_l7)^7(u4Z(lrv z5ayk0SJ2+MbOg`gGl)Rpzk3AZ?fdt@-#&Q|);+LS5Z?oV1o55o_mC!piWdiFB*;$R zNQUqrusipzV7qhfYCc@IZ=pt;7BM_oKdG%y;^R&()a9gHj9`wYcu}(;bdzM0l$AQvEI&IJFalu zeC6S*R}bI6ew=yx29DY|aqHKu8z>=`g@@x)&7Ko46?=K}=l#YMAA57e)95qnyZ1fq zx_=DcW0g-IzSaGTV(Nx#AykH{-mQ%}4pQ8Q{D6Vo||wh3>d>7Vt`vZ_oh+0-f_E-N&W zyAr0G>H@Kz+-b=sp~w@0JNs;Gw9@ix(@@1++W|H>r*h|?G$Bx@o_-c0u%LDFxlf-$ z395%Zi1=x$Kq#C02cP5CIp98gMm;agF(q8nAbIAg2vVwK#cG~VO>Om1g6`qRM0CWv zwZhLltFtC`#3HMpbfScU$)ublh}p3OJ?qzPF{_Kwn&f#vTY}#CClY(~IfoZ(?^|vp zM*9(VAlMGD=YVtM9Vk?MTFU>|K7Y)x=Yi+Yd-cLx4Km8uq!6x(UVHK7mY{tIF0mec ze6%=l(AP=M+sAQ3Y+Vdf@4KjcQ zY4I%Evylh7Ku&3=TW34aN^q8{l()|8os(U3xhi({c}MD+5IEXo!k}w{~ zpS|XN;3C);lD(~p@bUlWp92a#yr6qncl{}x+F9P(dq(0X=*cT@%XHKiQhgwGuzx`N zOBv@qX!5hyF&)uyN~a{NbRWr|-XZw?dEp@-{vYEnx1ROvV|5E@-9X+q90PQ_UQBFQ^M@x?k z^Jfom$~}~}H?1JNa6$@^HAPAz!@0`tg@BOd}cJ&lFe-nM1lx(no#m# zhJ_%27k&g+t>CE6Q8ox!VG~=RYUodBwXh%rg}@9s*0u#ki-sagC=|SQP-(4$p=E(% zm;|^Ubzn53=h$dR#q&{+inOC7&8SHQh*FJm^rS3JsY_Q1Qjfwkq%@tWObaBbGaVq8 zWt3c1(AfV-@r=$|%0qxV`q9aqoP!?AvR+P371DOzxL628ZU=g`3R+8dj747yMbC<*?Eo$u0$wA zIRNJ#!^@)N^R$6HPd{03LVyy~p#OxM3TIR@-x>sMWLrnGhFcZB^-VMKh#4=C)*>@n z1+VN-)WBM`gL8=M0pipp9slB+8HMR1`w$jvE>f2jIsI zjtBqbW3_B~Oe9Xmkb!9TG;4BfI-v%Ed^|viKeH_YAy8kTmg@k=aprs98;Q(4OT2E8 zujW{VVGR%D0foh{U@k1;4G%;l{>az(_{FbQ{Wri3B(PB9XI9WICc^e*@jqPb76aq1 zohJ^88}mUxqqt5TF=kc5Xq#hL-L_BZu$x#ef{d6 zYWv$-1q*A*ZyYw1Z*^@3k#K>?)p9|~%tC+04a@)ZSh@>J=CBP~NZ@Dvt zT9JMDIwS9J`qK;YakwxVB~5?2(~oTFU0eO?1xXyzu~PG!=X|L=C;NRNKxh{Kd1>eW zVEH>-?)B{gebhgnm!XZU?R;<>*mDlI-Ny~l@tND71ckRj4(~SIzI)xtO*cAb_}+V8 z>Y_NcsY+{VdCiaX@}1v&Nj=Z`&$kq(198WK0|Vz1O?)bNbzB1<_g7^PWS0-|RCEb4 zR?XQJSd1*ld$U4y2#5s4%Z4h6O?+UtB+h4RH;OnVP4}$GO7}~>74ZoI_M61x0sClh zgn3_(+s8%to1;mX`0Gv-ho2yKwnyZ=dllvvgksP4xo*^+M|%!`_7Rqf`{D0+0MAoK z#bC5;9R#A=1}Dm*f}i??WA5f6z-BD23~pZN0@xv<2I2zQ!CAQD0@h(|Jca}RBMNQc z?S*s*JSvXO;$mj}VICq5MOZH>To10!L45qIAcBk__<`*r1?*;JT$tur635b#1gm7r zAcRjOzEArA51HJ@tRUhan$I$xWzq_Qa(sg#0FNN%fePmeC;sdAq>u@-@8yPPzy9hR zaL-zRkS4yc3aLW)Zl?`d%=gMlFzT=-`azC-BL)}f3Pnu|`!D)fqSFk*3`tBX`cPjY z$spn|3>y#vvOGwvdXJi}v5@iXqi z1lLV%q-AYrs3!7_1^vPdEJsLYkS_2kALb!4@PQxf0b=}NRKkiE%)ku)9!;Fg!U$<^ z(!dFv(u5bBsb3n7aj-B5SFj+2uP&Hz9&iQ?C(%Ck%N~$vOm43Krh+5x;g0q!mmW>j z3{eN8ZLZD*bN+!#u<;)50d&OC49L+5aUvqbhn8gK9ym!y66YSOaUO1^9eb(Pf@vWe z()1|lOawzA_kke`r;(!R&N`7M;87kiks#`k3-OOUD5oFn;T{TWAPZ8}MpDA?(H$A4 z3l$;~nB$#N@~$+ID)vPtjW6w_&pbTfZdf31bdD*V@+m>XI|@Q>A}?;BQg4!EJGvvw z~LFYBk0;^qXXf#P9z{J~N{B2>($7pIX^U?ZddfTzh;WyUh-9yldZ zLjV6|&DH1a&&GJvY0xXbAxxO(x z!}AvvgQ{%gGTwqRw8A|zL_QVcG2$;X;8Qi|6FoBow?t#o2!%fd^sZh5EhR(dYNR@j zr#F5>D-<+C9uzs0gE^c7Iv6ww8zVvo^g^_QJE+p4)&o5MH*{;X#6TOPGHXOZ*y2EX zb1PIdLtd0G0>pmcGBa58FEt}ZM|4Mdv`2mPM}ag*g>*=Xv`CHgNRc#2m2^p&v`JYe zMpVy9rF2S3Bu6fUM|=cGs8mCu>un(9Rl+z9tb#!%wQ_$ zJ_;#=wsTHBDC#<@li0_6w�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®u;(i2F} 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

hq?a@QYiKuL>-YE2yH^B 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஬CJ zN4qns3<7c)>3+`iBHH_<7fDTkzKd8x^ou*oEZ?|G*UoPvmY zxuWdQNuAiqo#u3%dJ2i*X`br#9_|UB7DAsGqo3S0pf>3l<5MJr3abuFt61kHVXvq> zH@rIPqe2QWN9ub>;-q-Wr&bDWTneUS>NaYsU<|9Fz!-&5s;7Qxm%4bdG)g4;QK^)t zsh*0XrmCv0>ZZQ$$c6qC< zIJvO03X=JFA;{Rv9t*UXj2$YA$)IGk5aqKXLKAQKvfhlea9IA*Q*b)hhXYTD|7QzJ zYU{T6A-CGgnW4G2I0Co~<-isrAB_vSl#73x>j00Bz^Ka*!-J-_>m0hPNhX(&&6pj= zi^I-~ejB%qNwdAYP{1Byz9!0F9&DV&kfZ(!z6vV37HlI(>?9Hl#TYDT`uUY5?AHAG z$3A7l$_t*?bS%aEz8GVRhf&35+C z&FB7Y!rCg=c8#vhvG@(ugF@@B_O=W zZjXjbLifCTYM+(Kch12*d_K>6Qj!m6pbs#GgZnnb$)+zhtZ&x39DKLWF;Pm&8O_Fl zNXN@KUNh*(R}0R)P0n4b{p2QD9pVz1l_Tm;J}j}jJ?pwl!2f3dCvK#+&e#KFu5TG1S!Xxz|9oJDv z+z}pk0v_h^AL?;K7SdlTavv|K}OIXZ=NMD((7T8lF{B@|4YIq?P;agq3n5b>-mv6{L$s* zb?9FP>D!*7-X1SGGVQwz;PKqTx76mC68DhO=A;rqsxl(h;lcx6gUi+|!S-ykmTN)Z zYdyd7L;q?=e{4A)^~3fpF+?tVsHd48?)!3NemWWZColw)e~l574)XltEI=ursl`|y3fBJKiz;jWXs6Q>wr;A3F#T()rs*FrmVQ z3>!Lp2+<*wi4<8}AXoy52aHfkD9q@QAxMSn|0b^ExG~|#j~zLBTsQF|gq0E3os$
I{b`Je}I_ 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

hGKHGyW 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

Ma7YhSAIpR8D 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 bslD2*{o1iT+qHe$xxL%H{oBEvI|2d#0nNw4 literal 0 HcmV?d00001 diff --git a/docs/assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png b/docs/assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png new file mode 100644 index 0000000000000000000000000000000000000000..c43be03741d638d9ede87923d7df28656abe1cc2 GIT binary patch literal 116989 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

Gtq~WOYd&*LnmqZmjmSqoJulL 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%0D4%X9M03 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
s__+q{;n-pkyf^xDeCI> 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 ntfqb%0dR1P|6gig1CLkfQy`zvSif

  • dY(yon0 literal 0 HcmV?d00001 diff --git a/docs/assets/images/nysa_generic.drawio-9478454b52585f4bd5c3a825f50917f2.svg b/docs/assets/images/nysa_generic.drawio-9478454b52585f4bd5c3a825f50917f2.svg new file mode 100644 index 000000000..1092d0cc5 --- /dev/null +++ b/docs/assets/images/nysa_generic.drawio-9478454b52585f4bd5c3a825f50917f2.svg @@ -0,0 +1,4 @@ + + + +NYSA
    C3 AST
    C3 AST
    Solidity Parser
    Solidity Parser
    C3 linearization
    C3 linearization
    Parser
    Parser
    Solidity
    code
    Solidity...
    Generates
    target
    specific code
    Generates...
    Builds
    Builds
    Target Platform
    Target Platform
    WASM
    WASM
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/docs/assets/images/nysa_odra.drawio-e8d8d662f0a2e5e364005985245721fd.svg b/docs/assets/images/nysa_odra.drawio-e8d8d662f0a2e5e364005985245721fd.svg new file mode 100644 index 000000000..8986e2d04 --- /dev/null +++ b/docs/assets/images/nysa_odra.drawio-e8d8d662f0a2e5e364005985245721fd.svg @@ -0,0 +1,4 @@ + + + +NYSA
    C3 AST
    C3 AST
    Solidity Parser
    Solidity Parser
    C3 linearization
    C3 linearization
    ODRA PARSER
    ODRA PARSER
    Solidity
    code
    Solidity...
    Generates
    Odra module
    Generates...
    Builds
    Builds
    ODRA
    ODRA
    WASM
    WASM
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/docs/assets/images/roadmap-8255e4b08deb4134a7e97e32c21ad0dc.png b/docs/assets/images/roadmap-8255e4b08deb4134a7e97e32c21ad0dc.png new file mode 100644 index 0000000000000000000000000000000000000000..2feeb56661238f10e847632d1a2162140d0e10d1 GIT binary patch literal 164814 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%0DIv7sGW)FaHc6R4&nvp;^xMW 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

    k3u{6jzBL} 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/twitter-card-941b7cfa84d4da7dd4848d3556845b53.png b/docs/assets/images/twitter-card-941b7cfa84d4da7dd4848d3556845b53.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad018378f102c16bb0b70a7f04c78aba3ce98ad GIT binary patch literal 781655 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

    omag(=9s$t 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� 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

    a#J;ibLLqVCGTRN?xS}C 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

    oYZibuqIeaZ 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 z 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 ~T`{J$^)K}A>9xWfzIVR-cmhD3M1kY|V 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 literal 0 HcmV?d00001 diff --git a/docs/assets/js/0030fd86.36a0add6.js b/docs/assets/js/0030fd86.36a0add6.js new file mode 100644 index 000000000..eedea8c24 --- /dev/null +++ b/docs/assets/js/0030fd86.36a0add6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1887],{47619:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"0.5.0","label":"0.5.0","banner":"unmaintained","badge":true,"noIndex":false,"className":"docs-version-0.5.0","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Odra framework","href":"/docs/0.5.0/","docId":"intro"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs/0.5.0/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Flipper example","href":"/docs/0.5.0/getting-started/flipper","docId":"getting-started/flipper"}],"href":"/docs/0.5.0/category/getting-started"},{"type":"category","label":"Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Cargo Odra","href":"/docs/0.5.0/basics/cargo-odra","docId":"basics/cargo-odra"},{"type":"link","label":"Directory structure","href":"/docs/0.5.0/basics/directory-structure","docId":"basics/directory-structure"},{"type":"link","label":"Odra.toml","href":"/docs/0.5.0/basics/odra-toml","docId":"basics/odra-toml"},{"type":"link","label":"Flipper Internals","href":"/docs/0.5.0/basics/flipper-internals","docId":"basics/flipper-internals"},{"type":"link","label":"Storage interaction","href":"/docs/0.5.0/basics/storage-interaction","docId":"basics/storage-interaction"},{"type":"link","label":"Host Communication","href":"/docs/0.5.0/basics/communicating-with-host","docId":"basics/communicating-with-host"},{"type":"link","label":"Testing","href":"/docs/0.5.0/basics/testing","docId":"basics/testing"},{"type":"link","label":"Errors","href":"/docs/0.5.0/basics/errors","docId":"basics/errors"},{"type":"link","label":"Events","href":"/docs/0.5.0/basics/events","docId":"basics/events"},{"type":"link","label":"Cross calls","href":"/docs/0.5.0/basics/cross-calls","docId":"basics/cross-calls"},{"type":"link","label":"Modules","href":"/docs/0.5.0/basics/modules","docId":"basics/modules"},{"type":"link","label":"Native token","href":"/docs/0.5.0/basics/native-token","docId":"basics/native-token"}],"href":"/docs/0.5.0/category/basics"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Module reusing","href":"/docs/0.5.0/advanced/using","docId":"advanced/using"},{"type":"link","label":"Delegate","href":"/docs/0.5.0/advanced/delegate","docId":"advanced/delegate"},{"type":"link","label":"Advanced Storage Concepts","href":"/docs/0.5.0/advanced/advanced-storage","docId":"advanced/advanced-storage"},{"type":"link","label":"Attributes","href":"/docs/0.5.0/advanced/attributes","docId":"advanced/attributes"},{"type":"link","label":"Signatures","href":"/docs/0.5.0/advanced/signatures","docId":"advanced/signatures"}],"href":"/docs/0.5.0/category/advanced"},{"type":"category","label":"Backends","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is a backend?","href":"/docs/0.5.0/backends/what-is-a-backend","docId":"backends/what-is-a-backend"},{"type":"link","label":"MockVM","href":"/docs/0.5.0/backends/mock-vm","docId":"backends/mock-vm"},{"type":"link","label":"Casper","href":"/docs/0.5.0/backends/casper","docId":"backends/casper"}],"href":"/docs/0.5.0/category/backends"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"odra-examples","href":"/docs/0.5.0/examples/odra-examples","docId":"examples/odra-examples"},{"type":"link","label":"Using odra-modules","href":"/docs/0.5.0/examples/using-odra-modules","docId":"examples/using-odra-modules"}],"href":"/docs/0.5.0/category/examples"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ownable","href":"/docs/0.5.0/tutorials/ownable","docId":"tutorials/ownable"},{"type":"link","label":"ERC-20","href":"/docs/0.5.0/tutorials/erc20","docId":"tutorials/erc20"},{"type":"link","label":"OwnedToken","href":"/docs/0.5.0/tutorials/owned-token","docId":"tutorials/owned-token"}],"href":"/docs/0.5.0/category/tutorials"}]},"docs":{"advanced/advanced-storage":{"id":"advanced/advanced-storage","title":"Advanced Storage Concepts","description":"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.","sidebar":"tutorialSidebar"},"advanced/attributes":{"id":"advanced/attributes","title":"Attributes","description":"Smart contract developers with Ethereum background are familiar with Solidity\'s concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.","sidebar":"tutorialSidebar"},"advanced/delegate":{"id":"advanced/delegate","title":"Delegate","description":"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.","sidebar":"tutorialSidebar"},"advanced/signatures":{"id":"advanced/signatures","title":"Signatures","description":"As each backend can use a different scheme for generating key pairs,","sidebar":"tutorialSidebar"},"advanced/using":{"id":"advanced/using","title":"Module reusing","description":"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.","sidebar":"tutorialSidebar"},"backends/casper":{"id":"backends/casper","title":"Casper","description":"The Casper backend allows you to compile your contracts into WASM files which can be deployed","sidebar":"tutorialSidebar"},"backends/mock-vm":{"id":"backends/mock-vm","title":"MockVM","description":"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing","sidebar":"tutorialSidebar"},"backends/what-is-a-backend":{"id":"backends/what-is-a-backend","title":"What is a backend?","description":"You can think of a backend as a target platform for your smart contract.","sidebar":"tutorialSidebar"},"basics/cargo-odra":{"id":"basics/cargo-odra","title":"Cargo Odra","description":"A tool for managing Odra projects","sidebar":"tutorialSidebar"},"basics/communicating-with-host":{"id":"basics/communicating-with-host","title":"Host Communication","description":"How to get information from the Host","sidebar":"tutorialSidebar"},"basics/cross-calls":{"id":"basics/cross-calls","title":"Cross calls","description":"Contracts calling contracts","sidebar":"tutorialSidebar"},"basics/directory-structure":{"id":"basics/directory-structure","title":"Directory structure","description":"Files and folders in the Odra project","sidebar":"tutorialSidebar"},"basics/errors":{"id":"basics/errors","title":"Errors","description":"Causing and handling errors","sidebar":"tutorialSidebar"},"basics/events":{"id":"basics/events","title":"Events","description":"Creating and emitting Events","sidebar":"tutorialSidebar"},"basics/flipper-internals":{"id":"basics/flipper-internals","title":"Flipper Internals","description":"Detailed explanation of the Flipper contract","sidebar":"tutorialSidebar"},"basics/modules":{"id":"basics/modules","title":"Modules","description":"Divide your code into modules","sidebar":"tutorialSidebar"},"basics/native-token":{"id":"basics/native-token","title":"Native token","description":"How to deposit, withdraw and transfer","sidebar":"tutorialSidebar"},"basics/odra-toml":{"id":"basics/odra-toml","title":"Odra.toml","description":"Odra\'s configuration file","sidebar":"tutorialSidebar"},"basics/storage-interaction":{"id":"basics/storage-interaction","title":"Storage interaction","description":"How to write data into blockchain\'s storage","sidebar":"tutorialSidebar"},"basics/testing":{"id":"basics/testing","title":"Testing","description":"How to write tests in Odra","sidebar":"tutorialSidebar"},"examples/odra-examples":{"id":"examples/odra-examples","title":"odra-examples","description":"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.","sidebar":"tutorialSidebar"},"examples/using-odra-modules":{"id":"examples/using-odra-modules","title":"Using odra-modules","description":"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.","sidebar":"tutorialSidebar"},"getting-started/flipper":{"id":"getting-started/flipper","title":"Flipper example","description":"To quickly start working with Odra, take a look at the following code sample. If you followed the","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Hello fellow Odra user! This page will guide you through the installation process.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Odra framework","description":"Odra Docs","sidebar":"tutorialSidebar"},"tutorials/erc20":{"id":"tutorials/erc20","title":"ERC-20","description":"It\'s time for something that every smart contract developer has done at least once. Let\'s try to implement Erc20 standard. Of course, we are going to use the Odra Framework.","sidebar":"tutorialSidebar"},"tutorials/ownable":{"id":"tutorials/ownable","title":"Ownable","description":"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract\'s critical features.","sidebar":"tutorialSidebar"},"tutorials/owned-token":{"id":"tutorials/owned-token","title":"OwnedToken","description":"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/01e5113f.8baae4cc.js b/docs/assets/js/01e5113f.8baae4cc.js new file mode 100644 index 000000000..291ed039d --- /dev/null +++ b/docs/assets/js/01e5113f.8baae4cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3052],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=a,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:3,description:"Odra's configuration file"},i="Odra.toml",l={unversionedId:"basics/odra-toml",id:"version-0.6.0/basics/odra-toml",title:"Odra.toml",description:"Odra's configuration file",source:"@site/versioned_docs/version-0.6.0/basics/03-odra-toml.md",sourceDirName:"basics",slug:"/basics/odra-toml",permalink:"/docs/0.6.0/basics/odra-toml",draft:!1,tags:[],version:"0.6.0",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"Odra's configuration file"},sidebar:"tutorialSidebar",previous:{title:"Directory structure",permalink:"/docs/0.6.0/basics/directory-structure"},next:{title:"Flipper Internals",permalink:"/docs/0.6.0/basics/flipper-internals"}},c={},s=[{value:"Adding a new contract manually",id:"adding-a-new-contract-manually",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"As mentioned in the previous article, ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," is a file that contains information about all the contracts\nthat Odra will build. Let's take a look at the file structure again:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," will be used as a name for the contract - the generated wasm file will be in the above case named\n",(0,a.kt)("inlineCode",{parentName:"p"},"flipper.wasm"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) is used by the builder to locate the exact struct where\nthe contract is defined."),(0,a.kt)("h2",{id:"adding-a-new-contract-manually"},"Adding a new contract manually"),(0,a.kt)("p",null,"Besides using the ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command, you can add a new contract to be compiled by hand.\nTo do this, add another ",(0,a.kt)("inlineCode",{parentName:"p"},"[[contracts]]")," element, name it and make sure that the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," is set correctly."),(0,a.kt)("p",null,"For example, if you want to create a new contract called ",(0,a.kt)("inlineCode",{parentName:"p"},"counter"),", your ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file should finally\nlook like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n\n[[contracts]]\nname = "counter"\nfqn = "sample::Counter"\n')),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous\n",(0,a.kt)("inlineCode",{parentName:"p"},"Flipper")," contract."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/02192c58.00b1f2c1.js b/docs/assets/js/02192c58.00b1f2c1.js new file mode 100644 index 000000000..156585641 --- /dev/null +++ b/docs/assets/js/02192c58.00b1f2c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4836],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=a,h=p["".concat(l,".").concat(m)]||p[m]||d[m]||o;return n?r.createElement(h,s(s({ref:t},u),{},{components:n})):r.createElement(h,s({ref:t},u))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:7,description:"How to write tests in Odra"},s="Testing",i={unversionedId:"basics/testing",id:"version-0.5.0/basics/testing",title:"Testing",description:"How to write tests in Odra",source:"@site/versioned_docs/version-0.5.0/basics/07-testing.md",sourceDirName:"basics",slug:"/basics/testing",permalink:"/docs/0.5.0/basics/testing",draft:!1,tags:[],version:"0.5.0",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"How to write tests in Odra"},sidebar:"tutorialSidebar",previous:{title:"Host Communication",permalink:"/docs/0.5.0/basics/communicating-with-host"},next:{title:"Errors",permalink:"/docs/0.5.0/basics/errors"}},l={},c=[{value:"Test env",id:"test-env",level:2},{value:"Deployer",id:"deployer",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write\nregular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the\nprevious article:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},'use odra::{Variable, List};\n\n#[cfg(test)]\nmod tests {\n use super::DogContract3Deployer;\n\n #[test]\n fn init_test() {\n let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n assert_eq!(dog_contract.walks_amount(), 0);\n assert_eq!(dog_contract.walks_total_length(), 0);\n dog_contract.walk_the_dog(5);\n dog_contract.walk_the_dog(10);\n assert_eq!(dog_contract.walks_amount(), 2);\n assert_eq!(dog_contract.walks_total_length(), 15);\n }\n}\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(module)]")," macro created a Deployer code for us, which will deploy the contract on the\nVM:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},'let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n')),(0,a.kt)("p",null,"From now on, we can use ",(0,a.kt)("inlineCode",{parentName:"p"},"dog_contract")," to interact with our deployed contract - in particular, all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from the impl section that was annotated with a macro are available to us:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"// Impl\npub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n}\n\n...\n\n// Test\ndog_contract.walk_the_dog(5);\n")),(0,a.kt)("h2",{id:"test-env"},"Test env"),(0,a.kt)("p",null,"Odra gives us some additional functions that we can use to communicate with the host (outside the contract context)\nand to configure how the contracts are deployed and called. Let's revisit the example from the previous\narticle about host communication and implement the tests that prove it works:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/testing.rs"',title:'"examples/src/features/testing.rs"'},'#[cfg(test)]\nmod tests {\n use super::TestingContractDeployer;\n\n #[test]\n fn test_env() {\n let testing_contract = TestingContractDeployer::init("MyContract".to_string());\n let creator = testing_contract.created_by();\n odra::test_env::set_caller(odra::test_env::get_account(1));\n let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());\n let creator2 = testing_contract2.created_by();\n assert!(creator != creator2);\n }\n}\n')),(0,a.kt)("p",null,"In the code above, we are deploying two instances of the same contract, but we're using ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::test_env::set_caller"),"\nto change the caller - so the Address which is deploying the contract. This changes the result of the ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::contract_env::caller()"),"\nthe function we are calling inside the contract."),(0,a.kt)("p",null,"Each test env comes with a set of functions that will let you write better tests:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn set_caller(address: Address)")," - you've seen it in action just now"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn token_balance(address: Address) -> Balance")," - it returns the balance of the account associated with the given address"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn advance_block_time_by(seconds: BlockTime)")," - it increases the current value of block_time"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_account(n: usize) -> Address")," - it returns an nth address that was prepared for you by Odra in advance;\nby default, you start with the 0th account"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn assert_exception(err: E, block: F)")," - it executes the ",(0,a.kt)("inlineCode",{parentName:"li"},"block")," code and expects ",(0,a.kt)("inlineCode",{parentName:"li"},"err")," to happen"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_event(address: Address, index: i32) -> Result")," - returns\nthe event emitted by the contract")),(0,a.kt)("p",null,"Again, we'll see those used in the next articles."),(0,a.kt)("h2",{id:"deployer"},"Deployer"),(0,a.kt)("p",null,"You may be wondering what is the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractDeployer")," and where did it come from.\nIt is a piece of code generated automatically for you, thanks to the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nIf you used the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," on one of the methods, it will be the constructor of your contract.\nOdra will make sure that it is called only once, so you can use it to initialize your data structures etc."),(0,a.kt)("p",null,"If you do not provide the init method, you can deploy the contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"::default()")," method.\nIn the end, you will get a ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," instance (in our case the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractRef"),") which reimplements all\nthe methods you defined in the contract, but executes them on a blockchain!"),(0,a.kt)("p",null,"To learn more about the ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," contract, visit the ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/cross-calls"},"Cross calls")," article."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We take a look at how Odra handles errors!"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/028141a3.cb8c70bc.js b/docs/assets/js/028141a3.cb8c70bc.js new file mode 100644 index 000000000..c6f589014 --- /dev/null +++ b/docs/assets/js/028141a3.cb8c70bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8283],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:2,description:"Files and folders in the Odra project"},i="Directory structure",l={unversionedId:"basics/directory-structure",id:"version-0.2.0/basics/directory-structure",title:"Directory structure",description:"Files and folders in the Odra project",source:"@site/versioned_docs/version-0.2.0/basics/02-directory-structure.md",sourceDirName:"basics",slug:"/basics/directory-structure",permalink:"/docs/0.2.0/basics/directory-structure",draft:!1,tags:[],version:"0.2.0",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Files and folders in the Odra project"},sidebar:"defaultSidebar",previous:{title:"Cargo Odra",permalink:"/docs/0.2.0/basics/cargo-odra"},next:{title:"Odra.toml",permalink:"/docs/0.2.0/basics/odra-toml"}},s={},c=[{value:"Cargo.toml",id:"cargotoml",level:2},{value:"Odra.toml",id:"odratoml",level:2},{value:".builder_* folders",id:"builder_-folders",level:2},{value:"src/",id:"src",level:2},{value:"target/",id:"target",level:2},{value:"wasm/",id:"wasm",level:2}],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"directory-structure"},"Directory structure"),(0,a.kt)("p",null,"After creating a new project using Odra and running the tests, you will be presented with the\nfollowing files and directories:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 CHANGELOG.md\n\u251c\u2500\u2500 Odra.toml\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 .builder_casper/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 flipper.rs\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 target/\n\u2514\u2500\u2500 wasm/\n")),(0,a.kt)("h2",{id:"cargotoml"},"Cargo.toml"),(0,a.kt)("p",null,"Let's first take a look at ",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "sample"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.2.0", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,a.kt)("p",null,"By default, your project will use the latest odra version available at crates.io. We are using two features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/mock-vm")," - it is responsible for running tests on Odra's MockVM"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/casper")," - backend implementation of Casper blockchain\nMore backends will be released as features that will be possible to enable here.")),(0,a.kt)("h2",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"This is the file that holds information about contracts that will be generated when running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"As we can see, we have a single contract, its ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) corresponds to\nthe contract is located in ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),".\nMore contracts can be added here by hand, or by using ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command."),(0,a.kt)("h2",{id:"builder_-folders"},".builder_* folders"),(0,a.kt)("p",null,"Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary\nfor building wasm files and running them against blockchain VMs. As it is not necessary to modify\nfiles in those folders in any way, by default they are hidden (hence the ",(0,a.kt)("inlineCode",{parentName:"p"},".")," at the beginning of the\nfolder name)."),(0,a.kt)("h2",{id:"src"},"src/"),(0,a.kt)("p",null,"This is the folder where your smart contract files live."),(0,a.kt)("h2",{id:"target"},"target/"),(0,a.kt)("p",null,"Files generated by cargo during the build process are put here."),(0,a.kt)("h2",{id:"wasm"},"wasm/"),(0,a.kt)("p",null,"WASM files generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," are put here. You can grab those WASM files\nand deploy them on the blockchain of your choosing."),(0,a.kt)("h1",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now, let's take a look at one of the files mentioned above in more detail,\nnamely the ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/02a3f783.a17d85ba.js b/docs/assets/js/02a3f783.a17d85ba.js new file mode 100644 index 000000000..8ad8e12ab --- /dev/null +++ b/docs/assets/js/02a3f783.a17d85ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9410],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return t?r.createElement(f,l(l({ref:n},d),{},{components:t})):r.createElement(f,l({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:3},l="OwnedToken",i={unversionedId:"tutorials/owned-token",id:"version-0.5.0/tutorials/owned-token",title:"OwnedToken",description:"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.",source:"@site/versioned_docs/version-0.5.0/tutorials/owned-token.md",sourceDirName:"tutorials",slug:"/tutorials/owned-token",permalink:"/docs/0.5.0/tutorials/owned-token",draft:!1,tags:[],version:"0.5.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"ERC-20",permalink:"/docs/0.5.0/tutorials/erc20"}},s={},u=[{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:3},{value:"Delegation",id:"delegation",level:3},{value:"Summary",id:"summary",level:2}],d={toc:u};function c(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ownedtoken"},"OwnedToken"),(0,o.kt)("p",null,"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"What should our module be capable of?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Conform the Erc20 interface."),(0,o.kt)("li",{parentName:"ol"},"Allow minting tokens but only the module owner."),(0,o.kt)("li",{parentName:"ol"},"The current owner should be able to designate a new owner.")),(0,o.kt)("h3",{id:"module-definition"},"Module definition"),(0,o.kt)("p",null,"Let's define a module called ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedToken")," that is a composition of ",(0,o.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Erc20")," modules."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n")),(0,o.kt)("p",null,"As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!"),(0,o.kt)("h3",{id:"delegation"},"Delegation"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use odra::types::{Address, Balance}\n\n...\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n self.erc20.approve(spender, amount);\n }\n\n pub fn get_owner(&self) -> Address {\n self.ownable.get_owner()\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ownable.change_ownership(new_owner);\n }\n\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.ownable.ensure_ownership(&contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,o.kt)("p",null,"Easy. However, there are a few worth mentioning subtleness:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L11")," - A constructor is a great place to init both modules at once. "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L14-L16")," - Most of the entrypoints do not need any modification, so we simply delegates them to the ",(0,o.kt)("inlineCode",{parentName:"li"},"erc20")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L52")," - The same we do with the ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L58-L61")," - Minting should not be unconditional, we need some control over it. First, using ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," we make sure the ",(0,o.kt)("inlineCode",{parentName:"li"},"caller")," really is the owner.")),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/037547ca.36ecaa56.js b/docs/assets/js/037547ca.36ecaa56.js new file mode 100644 index 000000000..7172b79f3 --- /dev/null +++ b/docs/assets/js/037547ca.36ecaa56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9184],{33709:t=>{t.exports=JSON.parse('{"title":"Getting started","description":"5 minutes to learn the most important Odra concepts.","slug":"/category/getting-started","permalink":"/docs/0.3.1/category/getting-started","navigation":{"previous":{"title":"Odra framework","permalink":"/docs/0.3.1/"},"next":{"title":"Installation","permalink":"/docs/0.3.1/getting-started/installation"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/03d24697.c811feae.js b/docs/assets/js/03d24697.c811feae.js new file mode 100644 index 000000000..cad198d2e --- /dev/null +++ b/docs/assets/js/03d24697.c811feae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5333],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u=a.createContext({}),l=function(e){var t=a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=l(e.components);return a.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=l(n),m=r,f=p["".concat(u,".").concat(m)]||p[m]||d[m]||s;return n?a.createElement(f,o(o({ref:t},c),{},{components:n})):a.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=p;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var l=2;l{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:5},o="Pauseable",i={unversionedId:"tutorials/pauseable",id:"version-0.7.0/tutorials/pauseable",title:"Pauseable",description:"The Pauseable module is like your smart contract's safety switch. It lets authorized users temporarily pause certain features if needed. It's a great way to boost security, but it's not meant to be used on its own. Think of it as an extra tool in your access control toolbox, giving you more control to manage your smart contract safely and efficiently.",source:"@site/versioned_docs/version-0.7.0/tutorials/pauseable.md",sourceDirName:"tutorials",slug:"/tutorials/pauseable",permalink:"/docs/tutorials/pauseable",draft:!1,tags:[],version:"0.7.0",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Access Control",permalink:"/docs/tutorials/access-control"}},u={},l=[{value:"Code",id:"code",level:2},{value:"Events and Error",id:"events-and-error",level:3},{value:"Module definition",id:"module-definition",level:3},{value:"Checks and guards",id:"checks-and-guards",level:3},{value:"Actions",id:"actions",level:3},{value:"Pauseable counter",id:"pauseable-counter",level:2}],c={toc:l};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Pauseable")," module is like your smart contract's safety switch. It lets authorized users temporarily pause certain features if needed. It's a great way to boost security, but it's not meant to be used on its own. Think of it as an extra tool in your access control toolbox, giving you more control to manage your smart contract safely and efficiently."),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"As always, we will start with defining functionalities of our module."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Check the state - is it paused or not."),(0,r.kt)("li",{parentName:"ol"},"State guards - a contract should stop execution if is in a state we don't expect."),(0,r.kt)("li",{parentName:"ol"},"Switch the state.")),(0,r.kt)("h3",{id:"events-and-error"},"Events and Error"),(0,r.kt)("p",null,"There just two errors that may occur: ",(0,r.kt)("inlineCode",{parentName:"p"},"PausedRequired"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"UnpausedRequired"),". We define them in a standard Odra way."),(0,r.kt)("p",null,"Events definition is highly uncomplicated: ",(0,r.kt)("inlineCode",{parentName:"p"},"Paused")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Unpaused")," events holds only the address of the pauser."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{Event, types::Address};\n\nodra::execution_error! {\n pub enum Error {\n PausedRequired => 1_000,\n UnpausedRequired => 1_001,\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Paused {\n pub account: Address\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Unpaused {\n pub account: Address\n}\n")),(0,r.kt)("h3",{id:"module-definition"},"Module definition"),(0,r.kt)("p",null,"The module storage is extremely simple - has a single ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," of type bool, that indicates if a contract is paused."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\npub struct Pauseable {\n is_paused: Variable\n}\n")),(0,r.kt)("h3",{id:"checks-and-guards"},"Checks and guards"),(0,r.kt)("p",null,"Now, let's move to state checks and guards."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=pauseable.rs showLineNumbers",title:"pauseable.rs",showLineNumbers:!0},"impl Pauseable {\n pub fn is_paused(&self) -> bool {\n self.is_paused.get_or_default()\n }\n\n pub fn require_not_paused(&self) {\n if self.is_paused() {\n contract_env::revert(Error::UnpausedRequired);\n }\n }\n\n pub fn require_paused(&self) {\n if !self.is_paused() {\n contract_env::revert(Error::PausedRequired);\n }\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L1")," - as mentioned in the intro, the module is not intended to be a standalone contract, so the only ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," block is not annotated with ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::module")," and hence does not expose any entrypoint."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L2")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"is_paused()")," checks the contract state, if the Variable ",(0,r.kt)("inlineCode",{parentName:"li"},"is_paused")," has not been initialized, the default value (false) is returned."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - to guarantee the code is executed when the contract is not paused, ",(0,r.kt)("inlineCode",{parentName:"li"},"require_not_paused()")," function reads the state and reverts if the contract is paused. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"require_paused()")," is a mirror function - stops the contract execution if the contract is not paused.")),(0,r.kt)("h3",{id:"actions"},"Actions"),(0,r.kt)("p",null,"Finally, we will add the ability to switch the module state."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"impl Pauseable {\n pub fn pause(&mut self) {\n self.require_not_paused();\n self.is_paused.set(true);\n\n Paused {\n account: contract_env::caller()\n }\n .emit();\n }\n\n pub fn unpause(&mut self) {\n self.require_paused();\n self.is_paused.set(false);\n\n Unpaused {\n account: contract_env::caller()\n }\n .emit();\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"pause()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"unpause()")," functions do three things: ensure the contract is the right state (unpaused for ",(0,r.kt)("inlineCode",{parentName:"p"},"pause()"),", not paused for ",(0,r.kt)("inlineCode",{parentName:"p"},"unpause()"),"), updates the state, and finally emits events (",(0,r.kt)("inlineCode",{parentName:"p"},"Paused"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"Unpaused"),")."),(0,r.kt)("h2",{id:"pauseable-counter"},"Pauseable counter"),(0,r.kt)("p",null,"In the end, let's use the module in a contract. For this purpose, we will implement a mock contract called ",(0,r.kt)("inlineCode",{parentName:"p"},"PauseableCounter"),". The contract consists of a Variable ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," and a ",(0,r.kt)("inlineCode",{parentName:"p"},"Pauseable")," module. The counter can only be incremented if the contract is in a normal state (is not paused)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::Variable;\nuse odra_modules::security::Pauseable;\n\n#[odra::module]\npub struct PauseableCounter {\n value: Variable,\n pauseable: Pauseable\n}\n\n#[odra::module]\nimpl PauseableCounter {\n pub fn increment(&mut self) {\n self.pauseable.require_not_paused();\n\n let new_value = self.value.get_or_default() + 1;\n self.value.set(new_value);\n }\n\n pub fn pause(&mut self) {\n self.pauseable.pause();\n }\n\n pub fn unpause(&mut self) {\n self.pauseable.unpause();\n }\n\n pub fn get_value(&self) -> u32 {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod test {\n use super::PauseableCounterDeployer;\n use odra_modules::security::errors::Error;\n\n #[test]\n fn increment_only_if_unpaused() {\n let mut contract = PauseableCounterDeployer::default();\n assert_eq!(contract.get_value(), 0);\n\n contract.increment();\n assert_eq!(contract.get_value(), 1);\n \n contract.pause();\n odra::test_env::assert_exception(\n Error::UnpausedRequired, \n || contract.increment()\n );\n assert_eq!(contract.get_value(), 1);\n\n contract.unpause();\n contract.increment();\n assert_eq!(contract.get_value(), 2);\n\n }\n}\n")),(0,r.kt)("p",null,"As we see in the test, in a simple way, using a single function call we can turn off the counter for a while and freeze the counter. Any time we want we can turn it back on. Easy!"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/04477b87.d0956e0b.js b/docs/assets/js/04477b87.d0956e0b.js new file mode 100644 index 000000000..8ab788155 --- /dev/null +++ b/docs/assets/js/04477b87.d0956e0b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6056],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(a),g=r,m=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return a?n.createElement(m,l(l({ref:t},p),{},{components:a})):n.createElement(m,l({ref:t},p))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1},l="Installation",i={unversionedId:"getting-started/installation",id:"version-0.3.0/getting-started/installation",title:"Installation",description:"Hello fellow Odra user! This page will guide you through the installation process.",source:"@site/versioned_docs/version-0.3.0/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/0.3.0/getting-started/installation",draft:!1,tags:[],version:"0.3.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Getting started",permalink:"/docs/0.3.0/category/getting-started"},next:{title:"Flipper example",permalink:"/docs/0.3.0/getting-started/flipper"}},s={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Cargo Odra",id:"installing-cargo-odra",level:2},{value:"Creating a new Odra project",id:"creating-a-new-odra-project",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"installation"},"Installation"),(0,r.kt)("p",null,"Hello fellow Odra user! This page will guide you through the installation process."),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"To start working with Odra, you need to have the following installed on your machine:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Rust toolchain installed (see ",(0,r.kt)("a",{parentName:"li",href:"https://rustup.rs/"},"rustup.rs"),")"),(0,r.kt)("li",{parentName:"ul"},"wasmstrip tool installed (see ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/WebAssembly/wabt"},"wabt"),")")),(0,r.kt)("p",null,"We do not provide exact commands for installing these tools, as they are different for different operating systems.\nPlease refer to the documentation of the tools themselves."),(0,r.kt)("p",null,"With Rust toolchain ready, you can add a new target:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"rustup target add wasm32-unknown-unknown\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"wasm32-unknown-uknown")," is a target that will be used by Odra to compile your smart contracts to WASM files.")),(0,r.kt)("h2",{id:"installing-cargo-odra"},"Installing Cargo Odra"),(0,r.kt)("p",null,"Cargo Odra is a helpful tool that will help you to build and test your smart contracts.\nIt is not required to use Odra, but the documentation will assume that you have it installed."),(0,r.kt)("p",null,"To install it, simply execute the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo install cargo-odra\n")),(0,r.kt)("p",null,"To check if it was installed correctly and see available commands, type:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra --help\n")),(0,r.kt)("p",null,"If everything went fine, we can proceed to the next step."),(0,r.kt)("h2",{id:"creating-a-new-odra-project"},"Creating a new Odra project"),(0,r.kt)("p",null,"To create a new project, simply execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project && cd my-project\n")),(0,r.kt)("p",null,'This will create a new folder called "my-project" and initialize Odra there. Cargo Odra\nwill create a sample contract for you in src directory. You can run the tests of this contract\nby executing:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"This will run tests using Odra's internal MockVM. You can run those tests against a real backend, to do so\nwe need to add a new backend. Let's use CasperVM:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra backend add -p casper\n")),(0,r.kt)("p",null,"Now we can run the tests against it:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Congratulations!")," Now you are ready to create contracts using Odra framework! If you had any problems during\nthe installation process, feel free to ask for help on our ",(0,r.kt)("a",{parentName:"p",href:"https://discord.com/invite/Mm5ABc9P8k"},"Discord"),"."),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"If you want to see the code that you just tested, continue to the description of ",(0,r.kt)("a",{parentName:"p",href:"flipper"},"Flipper example"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/06a0fa51.de90d71b.js b/docs/assets/js/06a0fa51.de90d71b.js new file mode 100644 index 000000000..5797cfe4e --- /dev/null +++ b/docs/assets/js/06a0fa51.de90d71b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[348],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(a),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,s=new Array(o);s[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:3},s="Casper",i={unversionedId:"backends/casper",id:"backends/casper",title:"Casper",description:"The Casper backend allows you to compile your contracts into WASM files which can be deployed",source:"@site/docs/backends/03-casper.md",sourceDirName:"backends",slug:"/backends/casper",permalink:"/docs/next/backends/casper",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"OdraVM",permalink:"/docs/next/backends/odra-vm"},next:{title:"Livenet",permalink:"/docs/next/backends/livenet"}},l={},p=[{value:"Contract Env",id:"contract-env",level:2},{value:"Events",id:"events",level:3},{value:"Payable",id:"payable",level:3},{value:"Revert",id:"revert",level:3},{value:"Context",id:"context",level:3},{value:"Test Env",id:"test-env",level:2},{value:"Usage",id:"usage",level:2},{value:"Deploying a contract to Casper network",id:"deploying-a-contract-to-casper-network",level:2},{value:"WASM arguments",id:"wasm-arguments",level:3},{value:"Example: Deploy Counter",id:"example-deploy-counter",level:3},{value:"Example: Deploy ERC721",id:"example-deploy-erc721",level:3},{value:"Example: Deploy ERC1155",id:"example-deploy-erc1155",level:3},{value:"Sending CSPR to a contract",id:"sending-cspr-to-a-contract",level:2},{value:"Using proxy_caller.wasm",id:"using-proxy_callerwasm",level:3},{value:"Execution",id:"execution",level:2}],c={toc:p};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"casper"},"Casper"),(0,r.kt)("p",null,"The Casper backend allows you to compile your contracts into WASM files which can be deployed\nonto ",(0,r.kt)("a",{parentName:"p",href:"https://casper.network/"},"Casper Blockchain"),"\nand lets you to easily run them against ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-execution-engine"},"Casper's Execution Engine")," locally."),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances."),(0,r.kt)("h3",{id:"events"},"Events"),(0,r.kt)("p",null,"An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've\nalready learned from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/basics/events"},"events article"),", in Odra you emit an event, similarly, you would do it in ",(0,r.kt)("a",{parentName:"p",href:"https://docs.soliditylang.org/en/v0.8.15/contracts.html#example"},"Solidity"),"."),(0,r.kt)("p",null,"Under the hood, Odra integrates with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/make-software/casper-event-standard"},"Casper Event Standard")," and creates a few ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/struct.URef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"URef"),"s")," in the global state when a contract is being installed:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events")," - a dictionary that stores events' data."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_length")," - the evens count."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_ces_version")," - the version of ",(0,r.kt)("inlineCode",{parentName:"li"},"Casper Event Standard"),". "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_schema")," - a dictionary that stores event schemas.")),(0,r.kt)("p",null,"Besides that, all the events the contract emits are registered - events schemas are written to the storage under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__events_schema")," key."),(0,r.kt)("p",null,"So, ",(0,r.kt)("inlineCode",{parentName:"p"},"Events")," are nothing different from any other data stored by a contract."),(0,r.kt)("p",null,"A struct to be an event must implement traits defined by ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/make-software/casper-event-standard"},"Casper Event Standard"),", thankfully you can derive them using ",(0,r.kt)("inlineCode",{parentName:"p"},"#[derive(Event)]"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Don't forget to expose events in the module using ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module(events = [...])]"),". ")),(0,r.kt)("h3",{id:"payable"},"Payable"),(0,r.kt)("p",null,"The first Odra idiom is a ",(0,r.kt)("inlineCode",{parentName:"p"},"Contract Main Purse"),". It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper ",(0,r.kt)("inlineCode",{parentName:"p"},"URef")," and a purse are created and stored under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse")," key."),(0,r.kt)("p",null,"Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo Purse"),". It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse."),(0,r.kt)("p",null,"Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable.\nIf under the way something goes wrong with the transfer, the contract reverts."),(0,r.kt)("p",null,"The transferred amount can be read inside the contract by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"self.env().attached_value()"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Odra expects the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," runtime argument to be attached to a contract call.\nIn case of its absence, the ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()")," returns zero.")),(0,r.kt)("h3",{id:"revert"},"Revert"),(0,r.kt)("p",null,"In Casper, we can stop the execution pretty straightforwardly - call the ",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::revert()"),".\nOdra adds an extra abstraction layer - in a contract ",(0,r.kt)("inlineCode",{parentName:"p"},"ExecutionError"),"s are defined, which ultimately are transformed into Casper's ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/enum.ApiError.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ApiError::User")),"."),(0,r.kt)("h3",{id:"context"},"Context"),(0,r.kt)("p",null,"Casper equips developers with very low-level tooling, which can be cumbersome for newcomers.\nIf you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"self.env().self_address()")," function takes the first element of the callstack (",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-contract/latest/casper_contract/contract_api/runtime/fn.get_call_stack.html"},(0,r.kt)("inlineCode",{parentName:"a"},"runtime::get_call_stack()")),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"self.env().caller()")," function takes the second element of the call stack (",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::get_call_stack()"),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"As mentioned in the ","[Payable]"," section, to store CSPR, each contract creates its purse. To read the contract balance,\nyou call ",(0,r.kt)("inlineCode",{parentName:"p"},"self.env().self_balance()"),", which checks the balance of the purse stored under ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse"),"."),(0,r.kt)("h2",{id:"test-env"},"Test Env"),(0,r.kt)("p",null,"Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Casper Execution Engine"),"."),(0,r.kt)("p",null,"In your test, you can freely switch execution context by setting as a caller (",(0,r.kt)("inlineCode",{parentName:"p"},"test_env::set_caller()"),") one of the 20 predefined accounts. Each account possesses the default amount of ",(0,r.kt)("inlineCode",{parentName:"p"},"Motes")," (100_000_000_000_000_000)."),(0,r.kt)("p",null,"The Test Env internally keeps track of the current ",(0,r.kt)("inlineCode",{parentName:"p"},"block time"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"error")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"attached value"),"."),(0,r.kt)("p",null,"Each test is executed on a fresh instance of the Test Env."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Name of the Casper backend in Odra is ",(0,r.kt)("inlineCode",{parentName:"p"},"casper"),", so to run the tests against it, simply pass it as a ",(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\nparameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"If you want to just generate a wasm file, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("h2",{id:"deploying-a-contract-to-casper-network"},"Deploying a contract to Casper network"),(0,r.kt)("p",null,"There would be no point in writing a contract if you couldn't deploy it to the blockchain.\nYou can do it in two ways: provided by the Casper itself: using the ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client")," tool\nor using the Odra's Livenet integration."),(0,r.kt)("p",null,"Let's explore the first option to better understand the process."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you wish, you can skip the following section and jump to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/backends/livenet"},"Livenet integration"),".")),(0,r.kt)("h3",{id:"wasm-arguments"},"WASM arguments"),(0,r.kt)("p",null,"When deploying a new contract you can pass some arguments to it.\nEvery contract written in Odra expects those arguments to be set:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The key under which the package hash of the contract will be stored."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_allow_key_override")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true")," and the key specified in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," already exists, it will be overwritten."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_is_upgradable")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),", the contract will be deployed as upgradable.")),(0,r.kt)("p",null,"Additionally, if required by the contract, you can pass constructor arguments."),(0,r.kt)("p",null,"When working with the test env via ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," or when using\n",(0,r.kt)("a",{parentName:"p",href:"/docs/next/backends/livenet"},"Livenet integration")," this is handled automatically. However, if you rather use\n",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client")," directly, you have to pass them manually:"),(0,r.kt)("h3",{id:"example-deploy-counter"},"Example: Deploy Counter"),(0,r.kt)("p",null,"To deploy your contract with a constructor using ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client"),", you need to pass the above arguments.\nAdditionally, you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," argument, which sets the arbitrary initial value for the counter."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 5000000000000 \\\n --session-path ./wasm/counter.wasm \\\n --session-arg "odra_cfg_package_hash_key_name:string:\'counter_package_hash\'" \\\n --session-arg "odra_cfg_allow_key_override:bool:\'true\'" \\\n --session-arg "odra_cfg_is_upgradable:bool:\'true\'" \\\n --session-arg "value:u32:42" \n')),(0,r.kt)("p",null,"For a more in-depth tutorial, please refer to the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.casper.network/writing-contracts/"},"Casper's 'Writing On-Chain Code'"),"."),(0,r.kt)("h3",{id:"example-deploy-erc721"},"Example: Deploy ERC721"),(0,r.kt)("p",null,"Odra comes with a standard ERC721 token implementation.\nClone the main Odra repo and navigate to the ",(0,r.kt)("inlineCode",{parentName:"p"},"modules")," directory."),(0,r.kt)("p",null,"Firstly contract needs to be compiled."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper -c erc721_token\n")),(0,r.kt)("p",null,"It produces the ",(0,r.kt)("inlineCode",{parentName:"p"},"erc721_token.wasm")," file in the ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," directory."),(0,r.kt)("p",null,"Now it's time to deploy the contract."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 300000000000 \\\n --session-path ./wasm/erc721_token.wasm \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'my_nft'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'false'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"name:string:'MyNFT'\" \\\n --session-arg \"symbol:string:'NFT'\" \\\n --session-arg \"base_uri:string:'https://example.com/'\"\n")),(0,r.kt)("p",null,"It's done.\nThe contract is deployed and ready to use.\nYour account is the owner of the contract and you can mint and burn tokens.\nFor more details see the code of the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.8.0/modules/src/erc721_token.rs"},"ERC721")," module."),(0,r.kt)("p",null,"To obtain the package hash of the contract search for ",(0,r.kt)("inlineCode",{parentName:"p"},"my_nft")," key\nin your account's named keys."),(0,r.kt)("h3",{id:"example-deploy-erc1155"},"Example: Deploy ERC1155"),(0,r.kt)("p",null,"The process is similar to the one described in the previous section."),(0,r.kt)("p",null,"Contract compilation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper -c erc1155_token\n")),(0,r.kt)("p",null,"Contract deployment:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 300000000000 \\\n --session-path ./wasm/erc1155_token.wasm \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'my_tokens'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'false'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"odra_cfg_constructor:string:'init'\" \\\n")),(0,r.kt)("p",null,"As previously, your account is the owner and can mint and burn tokens.\nFor more details see the code of the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.8.0/modules/src/erc1155_token.rs"},"ERC1155")," module."),(0,r.kt)("h2",{id:"sending-cspr-to-a-contract"},"Sending CSPR to a contract"),(0,r.kt)("p",null,"Defining payable entry points is described in ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/basics/native-token"},"Native Token")," section."),(0,r.kt)("p",null,"What is happening under the hood is that Odra creates a new ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," argument for each payable\nentry point. The ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," needs to be top-upped with CSPR before calling the contract.\nWhen a contract adds CSPR to another contract call, Odra handles it for you.\nThe problem arises when you want to call an entry point and attach CSPR as an account.\nThe only way of doing that is by executing code in the sessions context, that\ntop-ups the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," and then calls the contract."),(0,r.kt)("p",null,"Odra provides a generic ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," that does exactly that.\nYou can build it by yourself from the main Odra repository, or use the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.8.0/odra-casper/test-vm/resources/proxy_caller.wasm"},"proxy_caller.wasm"),"\nwe maintain."),(0,r.kt)("h3",{id:"using-proxy_callerwasm"},"Using proxy_caller.wasm"),(0,r.kt)("p",null,"To use the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," you need to attach the following arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"contract_package_hash")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"BytesArray(32)")," type. The package hash of the contract you want to call.\nResult of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," on ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/contracts/struct.ContractPackageHash.html"},"CasperPackageHash"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"entry_point")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The name of the entry point you want to call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"args")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bytes")," type. It is a serialized ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},"RuntimeArgs")," with the arguments you want to pass\nto the entry point. To be specific it is the result of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," method wrapped with ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/bytesrepr/struct.Bytes.html"},"Bytes")," type."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"attached_value"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"U512")," type. The amount of CSPR you want to attach to the call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"amount"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"U512")," type. Should be the same value as ",(0,r.kt)("inlineCode",{parentName:"li"},"attached_value")," if not ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".\nIt is a special Casper argument that enables the access to account's main purse.")),(0,r.kt)("p",null,"Currently ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client")," doesn't allow building such arguments.\nYou have to build it using your SDK."),(0,r.kt)("h2",{id:"execution"},"Execution"),(0,r.kt)("p",null,"First thing Odra does with your code, is similar to the one used in ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/backends/odra-vm"},"OdraVM")," -\na list of entrypoints is generated, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[IR];\n id2[IR]--\x3eid3((WASM))\n id3((WASM))--\x3eid4[(Local Casper\\nExecution Engine)]\n id3((WASM))--\x3eid5[(Casper Network)]"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/09109da1.8638a6af.js b/docs/assets/js/09109da1.8638a6af.js new file mode 100644 index 000000000..207cf9e4a --- /dev/null +++ b/docs/assets/js/09109da1.8638a6af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8492],{3905:(e,r,n)=>{n.d(r,{Zo:()=>u,kt:()=>m});var t=n(67294);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=t.createContext({}),c=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},u=function(e){var r=c(e.components);return t.createElement(l.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,f=d["".concat(l,".").concat(m)]||d[m]||p[m]||o;return n?t.createElement(f,s(s({ref:r},u),{},{components:n})):t.createElement(f,s({ref:r},u))}));function m(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var t=n(87462),a=(n(67294),n(3905));const o={sidebar_position:8,description:"Causing and handling errors"},s="Errors",i={unversionedId:"basics/errors",id:"version-0.7.0/basics/errors",title:"Errors",description:"Causing and handling errors",source:"@site/versioned_docs/version-0.7.0/basics/08-errors.md",sourceDirName:"basics",slug:"/basics/errors",permalink:"/docs/basics/errors",draft:!1,tags:[],version:"0.7.0",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"Causing and handling errors"},sidebar:"tutorialSidebar",previous:{title:"Testing",permalink:"/docs/basics/testing"},next:{title:"Events",permalink:"/docs/basics/events"}},l={},c=[{value:"Testing errors",id:"testing-errors",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function p(e){let{components:r,...n}=e;return(0,a.kt)("wrapper",(0,t.Z)({},u,n,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"errors"},"Errors"),(0,a.kt)("p",null,"Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the\nfollowing example of a simple owned contract:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"use odra::{execution_error, Variable, UnwrapOrRevert};\nuse odra::types::Address;\n\n#[odra::module]\npub struct OwnedContract {\n name: Variable,\n owner: Variable

    ,\n}\n\nexecution_error! {\n pub enum Error {\n OwnerNotSet => 1,\n NotAnOwner => 2,\n }\n}\n\n\n#[odra::module]\nimpl OwnedContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.owner.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn owner(&self) -> Address {\n self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n }\n\n pub fn change_name(&mut self, name: String) {\n let caller = odra::contract_env::caller();\n if caller != self.owner() {\n odra::contract_env::revert(Error::NotAnOwner)\n }\n\n self.name.set(name);\n }\n}\n")),(0,a.kt)("p",null,"Firstly, we are using ",(0,a.kt)("inlineCode",{parentName:"p"},"execution_error!")," macro to define our own set of Errors that our contract will\nthrow. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use\n",(0,a.kt)("inlineCode",{parentName:"p"},"unwrap_or_revert_with")," and pass an error as an argument:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n")),(0,a.kt)("p",null,"You and the users of your contract will be thankful for a meaningful error message!"),(0,a.kt)("p",null,"You can also throw the error directly, by using ",(0,a.kt)("inlineCode",{parentName:"p"},"revert"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"odra::contract_env::revert(Error::NotAnOwner)\n")),(0,a.kt)("h2",{id:"testing-errors"},"Testing errors"),(0,a.kt)("p",null,"Okay, but how about testing it? We've already mentioned a function - ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_exception"),". This is how you will\nuse it:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},'use super::{OwnedContractDeployer, OwnedContractRef};\nuse super::Error;\n\n#[test]\nfn test_owner_error() {\n let owner = odra::test_env::get_account(0);\n let not_an_owner = odra::test_env::get_account(1);\n\n odra::test_env::set_caller(owner);\n let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());\n\n odra::test_env::set_caller(not_an_owner);\n odra::test_env::assert_exception(Error::NotAnOwner, || {\n owned_contract.change_name("NewName".to_string());\n })\n}\n')),(0,a.kt)("p",null,"In the example above, because we are calling the ",(0,a.kt)("inlineCode",{parentName:"p"},"change_name"),' method as an address which is not an "owner",\nwe are expecting that "NotAnOwner" error will be thrown.'),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Here we are creating another reference to the already deployed contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"OwnedContractRef::at()")," and passing to it\nits Address. Note that ",(0,a.kt)("inlineCode",{parentName:"p"},"OwnedContractDeployer::init()")," returns the same type.")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will learn how to emit and test events using Odra."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/0993954b.4128cfa0.js b/docs/assets/js/0993954b.4128cfa0.js new file mode 100644 index 000000000..2ea4656f3 --- /dev/null +++ b/docs/assets/js/0993954b.4128cfa0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7646],{83769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/docs/assets/js/0a44181e.1a62c359.js b/docs/assets/js/0a44181e.1a62c359.js new file mode 100644 index 000000000..d60460c35 --- /dev/null +++ b/docs/assets/js/0a44181e.1a62c359.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7731],{55448:e=>{e.exports=JSON.parse('{"title":"Basics","description":"Basic concepts of Odra Framework","slug":"/category/basics","permalink":"/docs/next/category/basics","navigation":{"previous":{"title":"Flipper example","permalink":"/docs/next/getting-started/flipper"},"next":{"title":"Cargo Odra","permalink":"/docs/next/basics/cargo-odra"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/0a8f7599.a9fe9083.js b/docs/assets/js/0a8f7599.a9fe9083.js new file mode 100644 index 000000000..db756ed22 --- /dev/null +++ b/docs/assets/js/0a8f7599.a9fe9083.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4589],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,f=u["".concat(c,".").concat(m)]||u[m]||p[m]||o;return n?a.createElement(f,i(i({ref:t},d),{},{components:n})):a.createElement(f,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var l=2;l{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:12,description:"How to deposit, withdraw and transfer"},i="Native token",s={unversionedId:"basics/native-token",id:"version-0.4.0/basics/native-token",title:"Native token",description:"How to deposit, withdraw and transfer",source:"@site/versioned_docs/version-0.4.0/basics/12-native-token.md",sourceDirName:"basics",slug:"/basics/native-token",permalink:"/docs/0.4.0/basics/native-token",draft:!1,tags:[],version:"0.4.0",sidebarPosition:12,frontMatter:{sidebar_position:12,description:"How to deposit, withdraw and transfer"},sidebar:"tutorialSidebar",previous:{title:"Modules",permalink:"/docs/0.4.0/basics/modules"},next:{title:"Advanced",permalink:"/docs/0.4.0/category/advanced"}},c={},l=[{value:"Testing",id:"testing",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"native-token"},"Native token"),(0,r.kt)("p",null,"Different blockchains come with different implementations of their native tokens. Odra wraps it all for you\nin easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit\ntheir funds and anyone can withdraw them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/native_token.rs"',title:'"examples/src/docs/native_token.rs"'},"use odra::types::Balance;\nuse odra::contract_env;\n\n#[odra::module]\npub struct PublicWallet {\n}\n\n#[odra::module]\nimpl PublicWallet {\n #[odra(payable)]\n pub fn deposit(&mut self) {\n }\n\n pub fn withdraw(&mut self, amount: Balance) {\n contract_env::transfer_tokens(contract_env::caller(), amount);\n }\n}\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make\nany checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is\neven possible."),(0,r.kt)("p",{parentName:"admonition"},"To see a more reasonable example, check out ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/tlw.rs")," in the odra main repository.")),(0,r.kt)("p",null,"You can see a new macro used here: ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," - it will add all the code needed for a function to\nbe able to receive the funds. Additionally, we are using a new function from contract_env - ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_tokens"),".\nIt does exactly what you are expecting it to do - it will transfer native tokens from the contract to the\nspecified address."),(0,r.kt)("p",null,"We are also using the ",(0,r.kt)("inlineCode",{parentName:"p"},"Balance")," - an Odra type that wraps around the type that the underlying blockchain uses\nfor counting tokens."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"To be able to test how many tokens a contract (or any address) has, ",(0,r.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a function -\n",(0,r.kt)("inlineCode",{parentName:"p"},"token_balance"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/native_token.rs"',title:'"examples/src/docs/native_token.rs"'},"use odra::types::Balance;\nuse odra::test_env;\nuse super::PublicWalletDeployer;\n\n#[test]\nfn test_modules() {\n let mut my_contract = PublicWalletDeployer::default();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());\n\n my_contract.with_tokens(Balance::from(100)).deposit();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));\n\n my_contract.withdraw(Balance::from(25));\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/0abf45c2.9c21d8d5.js b/docs/assets/js/0abf45c2.9c21d8d5.js new file mode 100644 index 000000000..f2a6d0f92 --- /dev/null +++ b/docs/assets/js/0abf45c2.9c21d8d5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7625],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},p),{},{components:a})):n.createElement(g,i({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1,description:"A tool for managing Odra projects"},i="Cargo Odra",l={unversionedId:"basics/cargo-odra",id:"basics/cargo-odra",title:"Cargo Odra",description:"A tool for managing Odra projects",source:"@site/docs/basics/01-cargo-odra.md",sourceDirName:"basics",slug:"/basics/cargo-odra",permalink:"/docs/next/basics/cargo-odra",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"A tool for managing Odra projects"},sidebar:"tutorialSidebar",previous:{title:"Basics",permalink:"/docs/next/category/basics"},next:{title:"Directory structure",permalink:"/docs/next/basics/directory-structure"}},s={},c=[{value:"Managing projects",id:"managing-projects",level:2},{value:"Generating code",id:"generating-code",level:2},{value:"Testing",id:"testing",level:2},{value:"Building code",id:"building-code",level:2},{value:"Generating contract schema",id:"generating-contract-schema",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cargo-odra"},"Cargo Odra"),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/getting-started/installation"},"Installation")," tutorial properly,\nyou should already be set up with the Cargo Odra tool. It is an executable that will help you with\nmanaging your smart contracts project, testing and running them with various configurations."),(0,r.kt)("p",null,"Let's take a look at all the possibilities that Cargo Odra gives you."),(0,r.kt)("h2",{id:"managing-projects"},"Managing projects"),(0,r.kt)("p",null,"Two commands help you create a new project. The first one is ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra new"),".\nYou need to pass one parameter, namely ",(0,r.kt)("inlineCode",{parentName:"p"},"--name {PROJECT_NAME}"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project\n")),(0,r.kt)("p",null,"This creates a new project in the ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project")," folder and name it ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project"),". You can see it\nfor yourself, for example by taking a look into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file created in your project's folder:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n')),(0,r.kt)("p",null,"The project is created using the template located in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra's main repository"),".\nBy default it uses ",(0,r.kt)("inlineCode",{parentName:"p"},"full")," template, if you want, you can use minimalistic ",(0,r.kt)("inlineCode",{parentName:"p"},"blank")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -t blank --name my-project\n")),(0,r.kt)("p",null,"The third available template is ",(0,r.kt)("inlineCode",{parentName:"p"},"workspace"),", which creates a workspace with two projects, similar to the one created\nwith the ",(0,r.kt)("inlineCode",{parentName:"p"},"full")," template."),(0,r.kt)("p",null,"By default, the latest release of Odra will be used for the template and as a dependency.\nYou can pass a source of Odra you want to use, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"-s")," parameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -n my-project -s ../odra # will use local folder of odra\ncargo odra new -n my-project -s release/0.9.0 # will use github branch, e.g. if you want to test new release\ncargo odra new -n my-project -s 0.8.0 # will use a version released on crates.io\n")),(0,r.kt)("p",null,"The second way of creating a project is by using ",(0,r.kt)("inlineCode",{parentName:"p"},"init")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra init --name my-project\n")),(0,r.kt)("p",null,"It works in the same way as ",(0,r.kt)("inlineCode",{parentName:"p"},"new"),", but instead of creating a new folder, it creates a project\nin the current, empty directory."),(0,r.kt)("h2",{id:"generating-code"},"Generating code"),(0,r.kt)("p",null,"If you want to quickly create a new contract code, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"generate")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra generate -c counter \n")),(0,r.kt)("p",null,"This creates a new file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/counter.rs")," with sample code, add appropriate ",(0,r.kt)("inlineCode",{parentName:"p"},"use")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mod")," sections\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"src/lib.rs")," and update the ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file accordingly. To learn more about ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file,\nvisit ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/basics/odra-toml"},"Odra.toml"),"."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"The most used command during the development of your project should be this one:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"It runs your tests against Odra's ",(0,r.kt)("inlineCode",{parentName:"p"},"MockVM"),". It is substantially faster than ",(0,r.kt)("inlineCode",{parentName:"p"},"CasperVM"),"\nand implements all the features Odra uses."),(0,r.kt)("p",null,'When you want to run tests against a "real" VM, just provide the name of the backend using ',(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\noption:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"In the example above, Cargo Odra builds the project, generates the wasm files,\nspin up ",(0,r.kt)("inlineCode",{parentName:"p"},"CasperVM")," instance, deploys the contracts onto it and runs the tests against it. Pretty neat."),(0,r.kt)("p",null,"Keep in mind that this is a lot slower than ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraVM")," and you cannot use the debugger.\nThis is why ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraVM")," was created and should be your first choice when developing contracts.\nOf course, testing all of your code against a blockchain VM is a must in the end."),(0,r.kt)("p",null,"If you want to run only some of the tests, you can pass arguments to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo test")," command\n(which is run in the background obviously):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- this-will-be-passed-to-cargo-test\n")),(0,r.kt)("p",null,"If you want to run tests which names contain the word ",(0,r.kt)("inlineCode",{parentName:"p"},"two"),", you can execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- two\n")),(0,r.kt)("p",null,"Of course, you can do the same when using the backend:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper -- two\n")),(0,r.kt)("h2",{id:"building-code"},"Building code"),(0,r.kt)("p",null,"You can also build the code itself and generate the output contracts without running the tests.\nTo do so, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build\n")),(0,r.kt)("p",null,"If the build process finishes successfully, wasm files will be located in ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," folder.\nNotice, that this command does not require the ",(0,r.kt)("inlineCode",{parentName:"p"},"-b")," option."),(0,r.kt)("p",null,"If you want to build specific contract, you can use ",(0,r.kt)("inlineCode",{parentName:"p"},"-c")," option:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -c counter # you pass many comma separated contracts\n")),(0,r.kt)("h2",{id:"generating-contract-schema"},"Generating contract schema"),(0,r.kt)("p",null,"If you want to generate a schema (including the name, entrypoints, events, etc.) for your contract, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"schema")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra schema \n")),(0,r.kt)("p",null,"This generates a schema file in JSON format for all your contracts and places them in the ",(0,r.kt)("inlineCode",{parentName:"p"},"resources")," folder.\nIf the ",(0,r.kt)("inlineCode",{parentName:"p"},"resources")," folder does not exist, it creates the folder for you."),(0,r.kt)("p",null,"Like with the ",(0,r.kt)("inlineCode",{parentName:"p"},"build")," command, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"-c")," option to generate a schema for a specific contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next section, we will take a look at all the files and directories that ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," created\nfor us and explain their purpose."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/0be49901.da3bc7a7.js b/docs/assets/js/0be49901.da3bc7a7.js new file mode 100644 index 000000000..fbc109d02 --- /dev/null +++ b/docs/assets/js/0be49901.da3bc7a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1109],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),f=a,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:1},i="What is a backend?",c={unversionedId:"backends/what-is-a-backend",id:"version-0.4.0/backends/what-is-a-backend",title:"What is a backend?",description:"You can think of a backend as a target platform for your smart contract.",source:"@site/versioned_docs/version-0.4.0/backends/01-what-is-a-backend.md",sourceDirName:"backends",slug:"/backends/what-is-a-backend",permalink:"/docs/0.4.0/backends/what-is-a-backend",draft:!1,tags:[],version:"0.4.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Backends",permalink:"/docs/0.4.0/category/backends"},next:{title:"MockVM",permalink:"/docs/0.4.0/backends/mock-vm"}},s={},l=[{value:"Contract Env",id:"contract-env",level:2},{value:"Test Env",id:"test-env",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-a-backend"},"What is a backend?"),(0,a.kt)("p",null,"You can think of a backend as a target platform for your smart contract.\nThis can be a piece of code allowing you to quickly check your code - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.4.0/backends/mock-vm"},"MockVM"),",\nor a complete virtual machine, spinning up a blockchain for you - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.4.0/backends/casper"},"CasperVM"),"."),(0,a.kt)("p",null,"Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env."),(0,a.kt)("h2",{id:"contract-env"},"Contract Env"),(0,a.kt)("p",null,"The Contract Env is a simple interface that each backend needs to implement,\nexposing features of the blockchain from the perspective of the contract."),(0,a.kt)("p",null,"It gives Odra a set of functions, which allows implementing more complex concepts -\nfor example, to implement ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/storage-interaction"},"Mapping"),",\nOdra requires some kind of storage integration.\nThe exact implementation of those functions is a responsibility of a backend,\nmaking Odra and its user free to implement the contract logic,\ninstead of messing with the blockchain internals."),(0,a.kt)("p",null,"Other functions from Contract Env include handling transfers, addresses, block time, errors and events."),(0,a.kt)("h2",{id:"test-env"},"Test Env"),(0,a.kt)("p",null,"Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with\nthe backend from the outside world - really useful for implementing tests."),(0,a.kt)("p",null,"This ranges from interacting with the blockchain - like deploying and calling the contracts,\nto the more test-oriented - handling errors, forwarding the block time, etc."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will take a look at backends Odra implements in more detail."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/0bf9d8ab.1415d9b1.js b/docs/assets/js/0bf9d8ab.1415d9b1.js new file mode 100644 index 000000000..db54e35d1 --- /dev/null +++ b/docs/assets/js/0bf9d8ab.1415d9b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2325],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=r,v=p["".concat(s,".").concat(m)]||p[m]||c[m]||o;return n?a.createElement(v,l(l({ref:t},d),{},{components:n})):a.createElement(v,l({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(87462),r=(n(67294),n(3905));const o={},l="Module reusing",i={unversionedId:"advanced/using",id:"version-0.7.0/advanced/using",title:"Module reusing",description:"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.",source:"@site/versioned_docs/version-0.7.0/advanced/01-using.md",sourceDirName:"advanced",slug:"/advanced/using",permalink:"/docs/advanced/using",draft:!1,tags:[],version:"0.7.0",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced",permalink:"/docs/category/advanced"},next:{title:"Delegate",permalink:"/docs/advanced/delegate"}},s={},u=[{value:"Conceptual Overview",id:"conceptual-overview",level:2},{value:"Usage",id:"usage",level:2}],d={toc:u};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"module-reusing"},"Module reusing"),(0,r.kt)("p",null,"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples."),(0,r.kt)("h2",{id:"conceptual-overview"},"Conceptual Overview"),(0,r.kt)("p",null,"By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n value: Variable, // the default namespace would be "value"\n module: Module\n}\n\n#[odra::module]\nstruct Module {\n secret: Variable // the default namespace would be "module_secret"\n}\n')),(0,r.kt)("p",null,"While this isolation often proves useful, there are scenarios where shared storage is beneficial."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null," Odra generates an array of keys, prefixing the storage key of child modules with the parent namespace, like in the example above. But what if you want to reuse the same instance of a module? Add a ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(using)]"),' attribute to a module to override the default behavior. This is information for the module "Do not prefix storage keys for the given module." so effectively, the child and the parent use the same module instance.'),(0,r.kt)("p",null,"Let's illustrate it with a simple example. The example provided below introduces some additional complexity by featuring deeper module nesting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::Variable;\n\n#[odra::module]\npub struct SharedStorage {\n pub value: Variable\n}\n\n#[odra::module]\npub struct MyStorage {\n pub shared: SharedStorage,\n pub version: Variable\n}\n\n#[odra::module]\npub struct ComposableContract {\n pub shared: SharedStorage,\n #[odra(using = "shared")]\n pub storage: MyStorage\n}\n\n#[odra::module]\nimpl ComposableContract {\n #[odra(init)]\n pub fn init(&mut self, version: u8, value: String) {\n self.storage.version.set(version);\n self.shared.value.set(value);\n }\n\n pub fn get_value(&self) -> String {\n self.shared.value.get_or_default()\n }\n\n pub fn get_value_via_storage(&self) -> String {\n self.storage.shared.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod test {\n use crate::composer::ComplexContractDeployer;\n\n #[test]\n fn t() {\n let shared_value = "shared_value".to_string();\n let extra_value: u32 = 314;\n let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);\n\n assert_eq!(token.get_value(), shared_value);\n assert_eq!(token.get_value_via_storage(), shared_value);\n assert_eq!(token.get_extra_value(), extra_value);\n }\n}\n')),(0,r.kt)("p",null,"In this example, we've introduced a new module, ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", which nests ",(0,r.kt)("inlineCode",{parentName:"p"},"MyStorage")," and includes an extra value. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ComplexContract")," contains ",(0,r.kt)("inlineCode",{parentName:"p"},"SharedStorage")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels."),(0,r.kt)("p",null,"If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"On the contract level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_shared_value"),"."),(0,r.kt)("li",{parentName:"ol"},"On the ",(0,r.kt)("inlineCode",{parentName:"li"},"MyStorage")," module level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_more_storage_shared_value"),".")),(0,r.kt)("p",null,"This example showcases how you can effectively use the module reusing feature to build intricate and efficient smart contracts."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/0e384e19.7af7ee02.js b/docs/assets/js/0e384e19.7af7ee02.js new file mode 100644 index 000000000..af0fe7a6d --- /dev/null +++ b/docs/assets/js/0e384e19.7af7ee02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9671],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),u=p(r),f=o,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},l),{},{components:r})):n.createElement(m,i({ref:t},l))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},i="Odra framework",c={unversionedId:"intro",id:"intro",title:"Odra framework",description:"Odra Docs",source:"@site/docs/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/next/",draft:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},sidebar:"tutorialSidebar",next:{title:"Getting started",permalink:"/docs/next/category/getting-started"}},s={image:r(35798).Z},p=[{value:"What's next",id:"whats-next",level:2}],l={toc:p};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"odra-framework"},"Odra framework"),(0,o.kt)("p",null,"Odra is a Rust-based smart contract framework for ",(0,o.kt)("a",{parentName:"p",href:"https://casper.network"},"Casper Network"),". Odra encourages rapid development and clean,\npragmatic design. Built by experienced developers, takes care of much of the hassle of smart contract\ndevelopment, enabling you to focus on writing your dapp without reinventing the wheel. "),(0,o.kt)("p",null,"It's free and open source!"),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/next/getting-started/installation"},"Installation")," and our ",(0,o.kt)("a",{parentName:"p",href:"/docs/next/getting-started/flipper"},"Flipper example")," to find out how to start your new project with Odra."))}d.isMDXComponent=!0},35798:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/0ea00542.4ccf87b7.js b/docs/assets/js/0ea00542.4ccf87b7.js new file mode 100644 index 000000000..46ee54696 --- /dev/null +++ b/docs/assets/js/0ea00542.4ccf87b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6388],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||s;return n?a.createElement(h,o(o({ref:t},p),{},{components:n})):a.createElement(h,o({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:3},o="Casper",i={unversionedId:"backends/casper",id:"version-0.3.0/backends/casper",title:"Casper",description:"The Casper backend allows you to compile your contracts into WASM files which can be deployed",source:"@site/versioned_docs/version-0.3.0/backends/03-casper.md",sourceDirName:"backends",slug:"/backends/casper",permalink:"/docs/0.3.0/backends/casper",draft:!1,tags:[],version:"0.3.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"MockVM",permalink:"/docs/0.3.0/backends/mock-vm"},next:{title:"Examples",permalink:"/docs/0.3.0/category/examples"}},l={},c=[{value:"Types",id:"types",level:2},{value:"Contract Env",id:"contract-env",level:2},{value:"Events",id:"events",level:3},{value:"Payable",id:"payable",level:3},{value:"Revert",id:"revert",level:3},{value:"Context",id:"context",level:3},{value:"Test Env",id:"test-env",level:2},{value:"Usage",id:"usage",level:2},{value:"Constructors",id:"constructors",level:2},{value:"Execution",id:"execution",level:2}],p={toc:c};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"casper"},"Casper"),(0,r.kt)("p",null,"The Casper backend allows you to compile your contracts into WASM files which can be deployed\nonto ",(0,r.kt)("a",{parentName:"p",href:"https://casper.network/"},"Casper Blockchain"),"\nand lets you to easily run them against ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-execution-engine"},"Casper's Execution Engine")," locally."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"A struct to be written into the storage must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait OdraType: \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("p",null,"The other exposed types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CallArgs")," - wraps around casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},(0,r.kt)("inlineCode",{parentName:"a"},"RuntimeArgs")),";"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," - U512 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"BlockTime")," - u64 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Address")," - an enum that encapsulates casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/account/struct.AccountHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"AccountHash"))," and ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/struct.ContractPackageHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ContractPackageHash")))),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances."),(0,r.kt)("h3",{id:"events"},"Events"),(0,r.kt)("p",null,"An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've\nalready learned from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.0/basics/events"},"events article"),", in Odra you emit an event, similarly, you would do it in ",(0,r.kt)("a",{parentName:"p",href:"https://docs.soliditylang.org/en/v0.8.15/contracts.html#example"},"Solidity"),"."),(0,r.kt)("p",null,"Under the hood, Odra integrates with ","[Casper Event Standard]"," and creates a few ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/struct.URef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"URef"),"s")," in the global state when a contract is being installed:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events")," - a dictionary that stores events' data."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_length")," - the evens count."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_ces_version")," - the version of ",(0,r.kt)("inlineCode",{parentName:"li"},"Casper Event Standard"),". "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_schema")," - a dictionary that stores event schemas.")),(0,r.kt)("p",null,"Besides that, all the events the contract emits are registered - events schemas are written to the storage under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__events_schema")," key."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Don't forget to expose events in the module using ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module(events = [...])]"),". ")),(0,r.kt)("p",null,"So, ",(0,r.kt)("inlineCode",{parentName:"p"},"Events")," are nothing different from any other data stored by a contract."),(0,r.kt)("p",null,"A struct to be an event must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"SerializableEvent")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait SerializableEvent: \n odra_types::event::OdraEvent + \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("h3",{id:"payable"},"Payable"),(0,r.kt)("p",null,"The first Odra idiom is a ",(0,r.kt)("inlineCode",{parentName:"p"},"Contract Main Purse"),". It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper ",(0,r.kt)("inlineCode",{parentName:"p"},"URef")," and a purse are created and stored under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse")," key."),(0,r.kt)("p",null,"Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo Purse"),". It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse."),(0,r.kt)("p",null,"Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable.\nIf under the way something goes wrong with the transfer, the contract reverts."),(0,r.kt)("p",null,"The transferred amount can be read inside the contract by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Odra expects the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," runtime argument to be attached to a contract call.")),(0,r.kt)("h3",{id:"revert"},"Revert"),(0,r.kt)("p",null,"In Casper, we can stop the execution pretty straightforwardly - call the ",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::revert()"),".\nOdra adds an extra abstraction layer - in a contract ",(0,r.kt)("inlineCode",{parentName:"p"},"ExecutionError"),"s are defined, which ultimately are transformed into Casper's ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/enum.ApiError.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ApiError::User")),"."),(0,r.kt)("h3",{id:"context"},"Context"),(0,r.kt)("p",null,"Casper equips developers with very low-level tooling, which can be cumbersome for newcomers.\nIf you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_address()")," function takes the first element of the callstack (",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-contract/latest/casper_contract/contract_api/runtime/fn.get_call_stack.html"},(0,r.kt)("inlineCode",{parentName:"a"},"runtime::get_call_stack()")),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::caller()")," function takes the second element of the call stack (",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::get_call_stack()"),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"As mentioned in the ","[Payable]"," section, to store CSPR, each contract creates its purse. To read the contract balance, you call ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_balance"),", which checks the balance of the purse stored under ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse"),"."),(0,r.kt)("h2",{id:"test-env"},"Test Env"),(0,r.kt)("p",null,"Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Casper Execution Engine"),"."),(0,r.kt)("p",null,"In your test, you can freely switch execution context by setting as a caller (",(0,r.kt)("inlineCode",{parentName:"p"},"test_env::set_caller()"),") one of the 20 predefined accounts. Each account possesses the default amount of ",(0,r.kt)("inlineCode",{parentName:"p"},"Motes")," (100_000_000_000_000_000)."),(0,r.kt)("p",null,"The Test Env internally keeps track of the current ",(0,r.kt)("inlineCode",{parentName:"p"},"block time"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"error")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"attached value"),"."),(0,r.kt)("p",null,"Each test is executed on a fresh instance of the Test Env."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Name of the Casper backend in Odra is ",(0,r.kt)("inlineCode",{parentName:"p"},"casper"),", so to run the tests against it, simply pass it as a ",(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\nparameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"If you want to just generate a wasm file, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("h2",{id:"constructors"},"Constructors"),(0,r.kt)("p",null,"Let's define a basic Odra module that includes a constructor:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\nstruct Counter {\n value: Variable\n}\n\n#[odra::module]\nimpl Counter {\n #[odra(init)]\n pub initialize(&mut self, value: u32) {\n self.value.set(value);\n }\n}\n")),(0,r.kt)("p",null,"Read more about constructors ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.0/advanced/attributes#init"},"here"),"."),(0,r.kt)("p",null,"To deploy your contract with a constructor using ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client"),", you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"constructor")," argument with a value of ",(0,r.kt)("inlineCode",{parentName:"p"},"initialize")," - this represents the name of the constructor function. Additionally, you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," argument, which sets the arbitrary initial value for the counter."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 5000000000000 \\\n --session-path ./wasm/counter.wasm \\\n --session-arg "constructor:string:\'initialize\'" \\\n --session-arg "value:u32:42" \n')),(0,r.kt)("p",null,"For a more in-depth tutorial, please refer to the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.casper.network/writing-contracts/"},"Casper's 'Writing On-Chain Code'"),"."),(0,r.kt)("h2",{id:"execution"},"Execution"),(0,r.kt)("p",null,"First thing Odra does with your code, is similar to the one used in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.0/backends/mock-vm"},"MockVM")," -\na list of entrypoints is generated, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[IR];\n id2[IR]--\x3eid3((WASM))\n id3((WASM))--\x3eid4[(Local Casper\\nExecution Engine)]\n id3((WASM))--\x3eid5[(Casper Network)]"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/1030000d.b3656c78.js b/docs/assets/js/1030000d.b3656c78.js new file mode 100644 index 000000000..f38bc9f0f --- /dev/null +++ b/docs/assets/js/1030000d.b3656c78.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2042],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||s;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,i=new Array(s);i[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:5,description:"How to write data into blockchain's storage"},i="Storage interaction",o={unversionedId:"basics/storage-interaction",id:"version-0.3.0/basics/storage-interaction",title:"Storage interaction",description:"How to write data into blockchain's storage",source:"@site/versioned_docs/version-0.3.0/basics/05-storage-interaction.md",sourceDirName:"basics",slug:"/basics/storage-interaction",permalink:"/docs/0.3.0/basics/storage-interaction",draft:!1,tags:[],version:"0.3.0",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"How to write data into blockchain's storage"},sidebar:"defaultSidebar",previous:{title:"Flipper Internals",permalink:"/docs/0.3.0/basics/flipper-internals"},next:{title:"Host Communication",permalink:"/docs/0.3.0/basics/communicating-with-host"}},l={},p=[{value:"Variable",id:"variable",level:2},{value:"Mapping",id:"mapping",level:2},{value:"List",id:"list",level:2},{value:"Custom Types",id:"custom-types",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-interaction"},"Storage interaction"),(0,r.kt)("p",null,"The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go\nthrough all of them and explain their pros and cons."),(0,r.kt)("h2",{id:"variable"},"Variable"),(0,r.kt)("p",null,"The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your\nvariable in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),' type. Let\'s look at a "real world" example of a contract that represents a dog:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"#[odra::module]\npub struct DogContract {\n barks: Variable,\n weight: Variable,\n name: Variable,\n pets: Variable>,\n}\n")),(0,r.kt)("p",null,"You can see the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," wrapping the data. Even complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," can be wrapped (with some caveats)!"),(0,r.kt)("p",null,"Let's make this contract usable, by providing a constructor and some getter functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"use odra::Variable;\n\n#[odra::module]\nimpl DogContract {\n #[odra(init)]\n pub fn init(&mut self, barks: bool, weight: u32, name: String) {\n self.barks.set(barks);\n self.weight.set(weight);\n self.name.set(name);\n self.walks.set(Vec::::default());\n }\n\n pub fn barks(&self) -> bool {\n self.barks.get_or_default()\n }\n\n pub fn weight(&self) -> u32 {\n self.weight.get_or_default()\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.len() as u32\n }\n\n pub fn walks_total_length(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.iter().sum()\n }\n}\n")),(0,r.kt)("p",null,"As you can see, you can access the data, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"get_or_default")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"...\nself.barks.get_or_default()\n...\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Keep in mind that using ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," will result in an Option that you'll need to unwrap - the variable\ndoesn't have to be initialized!")),(0,r.kt)("p",null,"To modify the data, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"set()")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"self.barks.set(barks);\n")),(0,r.kt)("p",null,"A Variable is easy to use and efficient for simple data types. One of its downsides is that it\nserializes the data as a whole, so when you're using complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap"),",\neach time you ",(0,r.kt)("inlineCode",{parentName:"p"},"get")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," the whole data is read and written to the blockchain storage."),(0,r.kt)("p",null,"In the example above, if we want to see how many walks our dog had, we would use the function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"pub fn walks_amount(&self) -> usize {\n let walks = self.walks.get_or_default();\n walks.len()\n}\n")),(0,r.kt)("p",null,"But to do so, we need to extract the whole serialized vector from the storage, which would inefficient,\nespecially for larger sets of data."),(0,r.kt)("p",null,"To tackle this issue following two types were created."),(0,r.kt)("h2",{id:"mapping"},"Mapping"),(0,r.kt)("p",null,"The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to\npass two values - the key type and the value type. Let's look at the variation of the Dog contract, that\nuses Mapping to store information about our dog's friends and how many times they visited:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/mapping.rs"',title:'"examples/src/docs/mapping.rs"'},"use odra::{Mapping, Variable};\n\n#[odra::module]\npub struct DogContract2 {\n name: Variable,\n friends: Mapping,\n}\n")),(0,r.kt)("p",null,"In the example above, our key is a String (it is a name of the friend) and we are storing u32 values\n(amount of visits). To read and write values from and into a Mapping we use a similar approach\nto the one shown in the Variables section with one difference - we need to pass a key:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/mapping.rs"',title:'"examples/src/docs/mapping.rs"'},"pub fn visit(&mut self, friend_name: String) {\n let visits = self.visits(friend_name.clone());\n self.friends.set(&friend_name, visits + 1);\n}\n\npub fn visits(&self, friend_name: String) -> u32 {\n self.friends.get_or_default(&friend_name)\n}\n")),(0,r.kt)("p",null,"The biggest improvement over a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," is that we can model functionality of a ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap")," using ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nThe amount of data written to and read from the storage is minimal. However, we cannot iterate over ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nWe could implement such behavior by using a numeric type key and saving the length of the set in a\nseparate variable. Thankfully Odra comes with a prepared solution - the ",(0,r.kt)("inlineCode",{parentName:"p"},"List")," type."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with\na Variable working together:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="core/src/list.rs"',title:'"core/src/list.rs"'},"use odra::{Variable, List};\n\npub struct List {\n values: Mapping,\n index: Variable\n}\n"))),(0,r.kt)("h2",{id:"list"},"List"),(0,r.kt)("p",null,"Going back to our DogContract example - let's revisit the walk case. This time, instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),",\nwe'll use the list:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"#[odra::module]\npub struct DogContract3 {\n name: Variable,\n walks: List,\n}\n")),(0,r.kt)("p",null,"As you can see, the notation is very similar to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),". To understand the usage, take a look\nat the reimplementation of the functions with an additional function that takes our dog for a walk\n(it writes the data to the storage):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"#[odra::module]\nimpl DogContract3 {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n self.walks.len()\n }\n\n pub fn walks_total_length(&self) -> u32 {\n self.walks.iter().sum()\n }\n\n pub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n }\n}\n")),(0,r.kt)("p",null,"Now, we can know how many walks our dog had without loading the whole vector from the storage.\nWe need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all\nthe cases for you."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All of the above examples, alongside the tests, are available in the odra repository in the ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/docs/")," folder.")),(0,r.kt)("h2",{id:"custom-types"},"Custom Types"),(0,r.kt)("p",null,"By default you can store only built-in types like numbers, Options, Results, Strings, Vectors."),(0,r.kt)("p",null,"Implementing custom types is straightforward, your type must derive from ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType"),": "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Address, OdraType};\n\n#[derive(OdraType)]\npub struct Dog {\n pub name: String,\n pub age: u8,\n pub owner: Option
    \n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Each field of your struct must be an OdraType.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next article, we'll see how to query the host for information about the world and our contract."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/1071.e2867e75.js b/docs/assets/js/1071.e2867e75.js new file mode 100644 index 000000000..ae85524a3 --- /dev/null +++ b/docs/assets/js/1071.e2867e75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1071],{11071:(t,e,n)=>{n.r(e),n.d(e,{diagram:()=>A});var i=n(74737),s=n(59373),r=n(91619),a=n(12281),o=n(7201),c=(n(30381),n(17967),n(27856),n(70277),n(45625),n(39354),n(91518),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,2],n=[1,5],i=[6,9,11,17,18,20,22,23,26,27,28],s=[1,15],r=[1,16],a=[1,17],o=[1,18],c=[1,19],l=[1,23],h=[1,24],d=[1,27],u=[4,6,9,11,17,18,20,22,23,26,27,28],p={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,period_statement:24,event_statement:25,period:26,event:27,open_directive:28,type_directive:29,arg_directive:30,close_directive:31,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",26:"period",27:"event",28:"open_directive",29:"type_directive",30:"arg_directive",31:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[24,1],[25,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 11:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 12:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 15:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 19:i.addTask(r[o],0,""),this.$=r[o];break;case 20:i.addEvent(r[o].substr(2)),this.$=r[o];break;case 21:i.parseDirective("%%{","open_directive");break;case 22:i.parseDirective(r[o],"type_directive");break;case 23:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 24:i.parseDirective("}%%","close_directive","timeline")}},table:[{3:1,4:e,7:3,12:4,28:n},{1:[3]},t(i,[2,3],{5:6}),{3:7,4:e,7:3,12:4,28:n},{13:8,29:[1,9]},{29:[2,21]},{6:[1,10],7:22,8:11,9:[1,12],10:13,11:[1,14],12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},{1:[2,2]},{14:25,15:[1,26],31:d},t([15,31],[2,22]),t(i,[2,8],{1:[2,1]}),t(i,[2,4]),{7:22,10:28,12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,11]),{19:[1,29]},{21:[1,30]},t(i,[2,14]),t(i,[2,15]),t(i,[2,16]),t(i,[2,17]),t(i,[2,18]),t(i,[2,19]),t(i,[2,20]),{11:[1,31]},{16:32,30:[1,33]},{11:[2,24]},t(i,[2,5]),t(i,[2,12]),t(i,[2,13]),t(u,[2,9]),{14:34,31:d},{31:[2,23]},{11:[1,35]},t(u,[2,10])],defaultActions:{5:[2,21],7:[2,2],27:[2,24],33:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,h=2,d=1,u=r.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var f=p.yylloc;r.push(f);var m=p.options&&p.options.ranges;function _(){var t;return"number"!=typeof(t=i.pop()||p.lex()||d)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,x,v,w,S,$,E,I={};;){if(k=n[n.length-1],this.defaultActions[k]?x=this.defaultActions[k]:(null==b&&(b=_()),x=a[k]&&a[k][b]),void 0===x||!x.length||!x[0]){var T="";for(w in E=[],a[k])this.terminals_[w]&&w>h&&E.push("'"+this.terminals_[w]+"'");T=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(c+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(T,{text:p.match,token:this.terminals_[b]||b,line:p.yylineno,loc:f,expected:E})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(x[0]){case 1:n.push(b),s.push(p.yytext),r.push(p.yylloc),n.push(x[1]),b=null,l=p.yyleng,o=p.yytext,c=p.yylineno,f=p.yylloc;break;case 2:if(S=this.productions_[x[1]][1],I.$=s[s.length-S],I._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},m&&(I._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(I,[o,l,c,y.yy,x[1],s,r].concat(u))))return v;S&&(n=n.slice(0,-1*S*2),s=s.slice(0,-1*S),r=r.slice(0,-1*S)),n.push(this.productions_[x[1]][0]),s.push(I.$),r.push(I._$),$=a[n[n.length-2]][n[n.length-1]],n.push($);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),28;case 1:return this.begin("type_directive"),29;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),31;case 4:return 30;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 27;case 21:return 26;case 22:return 6;case 23:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23],inclusive:!0}}};function g(){this.yy={}}return p.lexer=y,g.prototype=p,p.Parser=g,new g}());c.parser=c;const l=c;let h="",d=0;const u=[],p=[],y=[],g=()=>i.j,f=(t,e,n)=>{(0,i.k)(globalThis,t,e,n)},m=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.m)()},_=function(t){h=t,u.push(t)},b=function(){return u},k=function(){let t=S();let e=0;for(;!t&&e<100;)t=S(),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)},v=function(t){y.find((t=>t.id===d-1)).events.push(t)},w=function(t){const e={section:h,type:h,description:t,task:t,classes:[]};p.push(e)},S=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},$={clear:m,getCommonDb:g,addSection:_,getSections:b,getTasks:k,addTask:x,addTaskOrg:w,addEvent:v,parseDirective:f},E=Object.freeze(Object.defineProperty({__proto__:null,getCommonDb:g,parseDirective:f,clear:m,addSection:_,getSections:b,getTasks:k,addTask:x,addEvent:v,addTaskOrg:w,default:$},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:d}=c,u=t.split(//gi);for(let p=0;p)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),c=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;se||"
    "===t)&&(r.pop(),c.text(r.join(" ").trim()),r="
    "===t?[""]:[t],c=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const T=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)},D=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")},L=function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),c=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(I,e.width).node().getBBox(),l=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=c.height+1.1*l*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),T(a,e,s),e},C=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(I,e.width).node().getBBox(),r=n.fontSize&&n.fontSize.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},M=function(t,e,n,s,r,a,o,c,l,h,d){for(const u of e){const e={descr:u.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.l.debug("taskNode",e);const c=t.append("g").attr("class","taskWrapper"),p=L(c,e,n,o).height;if(i.l.debug("taskHeight after draw",p),c.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,p),u.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=O(t,u.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)+l+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!(0,i.g)().timeline.disableMulticolor&&n++}r-=10},O=function(t,e,n,s,r,a){let o=0;const c=r;r+=100;for(const l of e){const e={descr:l,section:n,number:n,width:150,padding:20,maxHeight:50};i.l.debug("eventNode",e);const c=t.append("g").attr("class","eventWrapper"),h=L(c,e,n,a).height;o+=h,c.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=c,o},A={db:E,renderer:{setConf:function(t){Object.keys(t).forEach((function(e){conf[e]=t[e]}))},draw:function(t,e,n,r){const a=(0,i.g)(),o=a.leftMargin?a.leftMargin:50;r.db.clear(),r.parser.parse(t+"\n"),i.l.debug("timeline",r.db);const c=a.securityLevel;let l;"sandbox"===c&&(l=(0,s.Ys)("#i"+e));const h=("sandbox"===c?(0,s.Ys)(l.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select("#"+e);h.append("g");const d=r.db.getTasks(),u=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",d),D(h);const p=r.db.getSections();i.l.debug("sections",p);let y=0,g=0,f=0,m=0,_=50+o,b=50;m=50;let k=0,x=!0;p.forEach((function(t){const e=C(h,{number:k,descr:t,section:k,width:150,padding:20,maxHeight:y},a);i.l.debug("sectionHeight before draw",e),y=Math.max(y,e+20)}));let v=0,w=0;i.l.debug("tasks.length",d.length);for(const[s,$]of d.entries()){const t={number:s,descr:$,section:$.section,width:150,padding:20,maxHeight:g},e=C(h,t,a);i.l.debug("taskHeight before draw",e),g=Math.max(g,e+20),v=Math.max(v,$.events.length);let n=0;for(let i=0;i<$.events.length;i++){const t={descr:$.events[i],section:$.section,number:$.section,width:150,padding:20,maxHeight:50};n+=C(h,t,a)}w=Math.max(w,n)}i.l.debug("maxSectionHeight before draw",y),i.l.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach((t=>{const e={number:k,descr:t,section:k,width:150,padding:20,maxHeight:y};i.l.debug("sectionNode",e);const n=h.append("g"),s=L(n,e,k,a);i.l.debug("sectionNode output",s),n.attr("transform",`translate(${_}, 50)`),b+=y+50;const r=d.filter((e=>e.section===t));r.length>0&&M(h,r,k,_,b,g,a,v,w,y,!1),_+=200*Math.max(r.length,1),b=50,k++})):(x=!1,M(h,d,k,_,b,g,a,v,w,y,!0));const S=h.node().getBBox();i.l.debug("bounds",S),u&&h.append("text").text(u).attr("x",S.width/2-o).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),f=x?y+g+150:g+100;h.append("g").attr("class","lineWrapper").append("line").attr("x1",o).attr("y1",f).attr("x2",S.width+3*o).attr("y2",f).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.s)(void 0,h,a.timeline.padding?a.timeline.padding:50,!!a.timeline.useMaxWidth&&a.timeline.useMaxWidth)}},parser:l,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n{n.d(e,{Z:()=>o});var i=n(61691),s=n(71610);const r=t=>{const{r:e,g:n,b:r}=s.Z.parse(t),a=.2126*i.Z.channel.toLinear(e)+.7152*i.Z.channel.toLinear(n)+.0722*i.Z.channel.toLinear(r);return i.Z.lang.round(a)},a=t=>r(t)>=.5,o=t=>!a(t)}}]); \ No newline at end of file diff --git a/docs/assets/js/119fbfb6.540c932e.js b/docs/assets/js/119fbfb6.540c932e.js new file mode 100644 index 000000000..05c4b1c74 --- /dev/null +++ b/docs/assets/js/119fbfb6.540c932e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1969],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},i="Odra framework",s={unversionedId:"intro",id:"version-0.7.0/intro",title:"Odra framework",description:"Odra Docs",source:"@site/versioned_docs/version-0.7.0/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,tags:[],version:"0.7.0",sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},sidebar:"tutorialSidebar",next:{title:"Getting started",permalink:"/docs/category/getting-started"}},c={image:r(67583).Z},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"odra-framework"},"Odra framework"),(0,o.kt)("p",null,"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean,\npragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract\ndevelopment, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open\nsource."),(0,o.kt)("p",null,"Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains."),(0,o.kt)("p",null,"A smart contract written using Odra can be executed on all integrated systems. We can do it\nby abstracting over core concepts that all the above systems are built around. These are type system,\nstorage, entry points, execution context, and testing environment. We believe it will bring standardization\nto the development of Rust-based smart contracts and enable code reusability we have not yet seen in this\necosystem."),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/getting-started/installation"},"Installation")," and our ",(0,o.kt)("a",{parentName:"p",href:"/docs/getting-started/flipper"},"Flipper example"),"\nto find out how to start your new project with Odra."))}d.isMDXComponent=!0},67583:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/11e5b730.2adaa868.js b/docs/assets/js/11e5b730.2adaa868.js new file mode 100644 index 000000000..4bfae2df2 --- /dev/null +++ b/docs/assets/js/11e5b730.2adaa868.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9906],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=a,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:3,description:"Odra's configuration file"},i="Odra.toml",l={unversionedId:"basics/odra-toml",id:"version-0.2.0/basics/odra-toml",title:"Odra.toml",description:"Odra's configuration file",source:"@site/versioned_docs/version-0.2.0/basics/03-odra-toml.md",sourceDirName:"basics",slug:"/basics/odra-toml",permalink:"/docs/0.2.0/basics/odra-toml",draft:!1,tags:[],version:"0.2.0",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"Odra's configuration file"},sidebar:"defaultSidebar",previous:{title:"Directory structure",permalink:"/docs/0.2.0/basics/directory-structure"},next:{title:"Flipper Internals",permalink:"/docs/0.2.0/basics/flipper-internals"}},c={},s=[{value:"Adding a new contract manually",id:"adding-a-new-contract-manually",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"As mentioned in the previous article, ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," is a file that contains information about all the contracts\nthat Odra will build. Let's take a look at the file structure again:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," will be used as a name for the contract - the generated wasm file will be in the above case named\n",(0,a.kt)("inlineCode",{parentName:"p"},"flipper.wasm"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) is used by the builder to locate the exact struct where\nthe contract is defined."),(0,a.kt)("h2",{id:"adding-a-new-contract-manually"},"Adding a new contract manually"),(0,a.kt)("p",null,"Besides using the ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command, you can add a new contract to be compiled by hand.\nTo do this, add another ",(0,a.kt)("inlineCode",{parentName:"p"},"[[contracts]]")," element, name it and make sure that the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," is set correctly."),(0,a.kt)("p",null,"For example, if you want to create a new contract called ",(0,a.kt)("inlineCode",{parentName:"p"},"counter"),", your ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file should finally\nlook like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n\n[[contracts]]\nname = "counter"\nfqn = "sample::Counter"\n')),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous\n",(0,a.kt)("inlineCode",{parentName:"p"},"Flipper")," contract."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/13066500.41606d43.js b/docs/assets/js/13066500.41606d43.js new file mode 100644 index 000000000..ba33faa9a --- /dev/null +++ b/docs/assets/js/13066500.41606d43.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3772],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=r,v=p["".concat(s,".").concat(m)]||p[m]||c[m]||o;return n?a.createElement(v,l(l({ref:t},d),{},{components:n})):a.createElement(v,l({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(87462),r=(n(67294),n(3905));const o={},l="Module reusing",i={unversionedId:"advanced/using",id:"version-0.5.0/advanced/using",title:"Module reusing",description:"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.",source:"@site/versioned_docs/version-0.5.0/advanced/01-using.md",sourceDirName:"advanced",slug:"/advanced/using",permalink:"/docs/0.5.0/advanced/using",draft:!1,tags:[],version:"0.5.0",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced",permalink:"/docs/0.5.0/category/advanced"},next:{title:"Delegate",permalink:"/docs/0.5.0/advanced/delegate"}},s={},u=[{value:"Conceptual Overview",id:"conceptual-overview",level:2},{value:"Usage",id:"usage",level:2}],d={toc:u};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"module-reusing"},"Module reusing"),(0,r.kt)("p",null,"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples."),(0,r.kt)("h2",{id:"conceptual-overview"},"Conceptual Overview"),(0,r.kt)("p",null,"By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n value: Variable, // the default namespace would be "value"\n module: Module\n}\n\n#[odra::module]\nstruct Module {\n secret: Variable // the default namespace would be "module_secret"\n}\n')),(0,r.kt)("p",null,"While this isolation often proves useful, there are scenarios where shared storage is beneficial."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null," Odra generates an array of keys, prefixing the storage key of child modules with the parent namespace, like in the example above. But what if you want to reuse the same instance of a module? Add a ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(using)]"),' attribute to a module to override the default behavior. This is information for the module "Do not prefix storage keys for the given module." so effectively, the child and the parent use the same module instance.'),(0,r.kt)("p",null,"Let's illustrate it with a simple example. The example provided below introduces some additional complexity by featuring deeper module nesting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::Variable;\n\n#[odra::module]\npub struct SharedStorage {\n pub value: Variable\n}\n\n#[odra::module]\npub struct MyStorage {\n pub shared: SharedStorage,\n pub version: Variable\n}\n\n#[odra::module]\npub struct ComposableContract {\n pub shared: SharedStorage,\n #[odra(using = "shared")]\n pub storage: MyStorage\n}\n\n#[odra::module]\nimpl ComposableContract {\n #[odra(init)]\n pub fn init(&mut self, version: u8, value: String) {\n self.storage.version.set(version);\n self.shared.value.set(value);\n }\n\n pub fn get_value(&self) -> String {\n self.shared.value.get_or_default()\n }\n\n pub fn get_value_via_storage(&self) -> String {\n self.storage.shared.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod test {\n use crate::composer::ComplexContractDeployer;\n\n #[test]\n fn t() {\n let shared_value = "shared_value".to_string();\n let extra_value: u32 = 314;\n let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);\n\n assert_eq!(token.get_value(), shared_value);\n assert_eq!(token.get_value_via_storage(), shared_value);\n assert_eq!(token.get_extra_value(), extra_value);\n }\n}\n')),(0,r.kt)("p",null,"In this example, we've introduced a new module, ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", which nests ",(0,r.kt)("inlineCode",{parentName:"p"},"MyStorage")," and includes an extra value. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ComplexContract")," contains ",(0,r.kt)("inlineCode",{parentName:"p"},"SharedStorage")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels."),(0,r.kt)("p",null,"If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"On the contract level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_shared_value"),"."),(0,r.kt)("li",{parentName:"ol"},"On the ",(0,r.kt)("inlineCode",{parentName:"li"},"MyStorage")," module level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_more_storage_shared_value"),".")),(0,r.kt)("p",null,"This example showcases how you can effectively use the module reusing feature to build intricate and efficient smart contracts."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/13ab0148.1c044ea9.js b/docs/assets/js/13ab0148.1c044ea9.js new file mode 100644 index 000000000..9a7d6f97e --- /dev/null +++ b/docs/assets/js/13ab0148.1c044ea9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[523],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},i="Odra framework",s={unversionedId:"intro",id:"version-0.3.1/intro",title:"Odra framework",description:"Odra Docs",source:"@site/versioned_docs/version-0.3.1/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/0.3.1/",draft:!1,tags:[],version:"0.3.1",sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},sidebar:"tutorialSidebar",next:{title:"Getting started",permalink:"/docs/0.3.1/category/getting-started"}},c={image:r(59236).Z},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"odra-framework"},"Odra framework"),(0,o.kt)("p",null,"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean,\npragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract\ndevelopment, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open\nsource."),(0,o.kt)("p",null,"Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains."),(0,o.kt)("p",null,"A smart contract written using Odra can be executed on all integrated systems. We can do it\nby abstracting over core concepts that all the above systems are built around. These are type system,\nstorage, entry points, execution context, and testing environment. We believe it will bring standardization\nto the development of Rust-based smart contracts and enable code reusability we have not yet seen in this\necosystem."),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.3.1/getting-started/installation"},"Installation")," and our ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.3.1/getting-started/flipper"},"Flipper example"),"\nto find out how to start your new project with Odra."))}d.isMDXComponent=!0},59236:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/1416c8f4.f122c28e.js b/docs/assets/js/1416c8f4.f122c28e.js new file mode 100644 index 000000000..c96ba6c13 --- /dev/null +++ b/docs/assets/js/1416c8f4.f122c28e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8700],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return t?r.createElement(f,l(l({ref:n},d),{},{components:t})):r.createElement(f,l({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:3},l="OwnedToken",i={unversionedId:"tutorials/owned-token",id:"version-0.7.0/tutorials/owned-token",title:"OwnedToken",description:"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.",source:"@site/versioned_docs/version-0.7.0/tutorials/owned-token.md",sourceDirName:"tutorials",slug:"/tutorials/owned-token",permalink:"/docs/tutorials/owned-token",draft:!1,tags:[],version:"0.7.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"ERC-20",permalink:"/docs/tutorials/erc20"},next:{title:"Access Control",permalink:"/docs/tutorials/access-control"}},s={},u=[{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:3},{value:"Delegation",id:"delegation",level:3},{value:"Summary",id:"summary",level:2}],d={toc:u};function c(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ownedtoken"},"OwnedToken"),(0,o.kt)("p",null,"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"What should our module be capable of?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Conform the Erc20 interface."),(0,o.kt)("li",{parentName:"ol"},"Allow minting tokens but only the module owner."),(0,o.kt)("li",{parentName:"ol"},"The current owner should be able to designate a new owner.")),(0,o.kt)("h3",{id:"module-definition"},"Module definition"),(0,o.kt)("p",null,"Let's define a module called ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedToken")," that is a composition of ",(0,o.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Erc20")," modules."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n")),(0,o.kt)("p",null,"As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!"),(0,o.kt)("h3",{id:"delegation"},"Delegation"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use odra::types::{Address, Balance}\n\n...\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n self.erc20.approve(spender, amount);\n }\n\n pub fn get_owner(&self) -> Address {\n self.ownable.get_owner()\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ownable.change_ownership(new_owner);\n }\n\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.ownable.ensure_ownership(&contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,o.kt)("p",null,"Easy. However, there are a few worth mentioning subtleness:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L11")," - A constructor is a great place to init both modules at once. "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L14-L16")," - Most of the entrypoints do not need any modification, so we simply delegates them to the ",(0,o.kt)("inlineCode",{parentName:"li"},"erc20")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L52")," - The same we do with the ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L58-L61")," - Minting should not be unconditional, we need some control over it. First, using ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," we make sure the ",(0,o.kt)("inlineCode",{parentName:"li"},"caller")," really is the owner.")),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/14355e8c.e1d1be18.js b/docs/assets/js/14355e8c.e1d1be18.js new file mode 100644 index 000000000..f888a533a --- /dev/null +++ b/docs/assets/js/14355e8c.e1d1be18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6693],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=a,h=p["".concat(l,".").concat(m)]||p[m]||u[m]||o;return n?r.createElement(h,s(s({ref:t},d),{},{components:n})):r.createElement(h,s({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:7,description:"How to write tests in Odra"},s="Testing",i={unversionedId:"basics/testing",id:"version-0.4.0/basics/testing",title:"Testing",description:"How to write tests in Odra",source:"@site/versioned_docs/version-0.4.0/basics/07-testing.md",sourceDirName:"basics",slug:"/basics/testing",permalink:"/docs/0.4.0/basics/testing",draft:!1,tags:[],version:"0.4.0",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"How to write tests in Odra"},sidebar:"tutorialSidebar",previous:{title:"Host Communication",permalink:"/docs/0.4.0/basics/communicating-with-host"},next:{title:"Errors",permalink:"/docs/0.4.0/basics/errors"}},l={},c=[{value:"Test env",id:"test-env",level:2},{value:"Deployer",id:"deployer",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write\nregular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the\nprevious article:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},'use odra::{Variable, List};\n\n#[cfg(test)]\nmod tests {\n use super::DogContract3Deployer;\n\n #[test]\n fn init_test() {\n let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n assert_eq!(dog_contract.walks_amount(), 0);\n assert_eq!(dog_contract.walks_total_length(), 0);\n dog_contract.walk_the_dog(5);\n dog_contract.walk_the_dog(10);\n assert_eq!(dog_contract.walks_amount(), 2);\n assert_eq!(dog_contract.walks_total_length(), 15);\n }\n}\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(module)]")," macro created a Deployer code for us, which will deploy the contract on the\nVM:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},'let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n')),(0,a.kt)("p",null,"From now on, we can use ",(0,a.kt)("inlineCode",{parentName:"p"},"dog_contract")," to interact with our deployed contract - in particular, all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from the impl section that was annotated with a macro are available to us:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"// Impl\npub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n}\n\n...\n\n// Test\ndog_contract.walk_the_dog(5);\n")),(0,a.kt)("h2",{id:"test-env"},"Test env"),(0,a.kt)("p",null,"Odra gives us some additional functions that we can use to communicate with the host (outside the contract context)\nand to configure how the contracts are deployed and called. Let's revisit the example from the previous\narticle about host communication and implement the tests that prove it works:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/testing.rs"',title:'"examples/src/docs/testing.rs"'},'#[cfg(test)]\nmod tests {\n use super::TestingContractDeployer;\n\n #[test]\n fn test_env() {\n let testing_contract = TestingContractDeployer::init("MyContract".to_string());\n let creator = testing_contract.created_by();\n odra::test_env::set_caller(odra::test_env::get_account(1));\n let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());\n let creator2 = testing_contract2.created_by();\n assert!(creator != creator2);\n }\n}\n')),(0,a.kt)("p",null,"In the code above, we are deploying two instances of the same contract, but we're using ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::test_env::set_caller"),"\nto change the caller - so the Address which is deploying the contract. This changes the result of the ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::contract_env::caller()"),"\nthe function we are calling inside the contract."),(0,a.kt)("p",null,"Each test env comes with a set of functions that will let you write better tests:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn set_caller(address: Address)")," - you've seen it in action just now"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn token_balance(address: Address) -> Balance")," - it returns the balance of the account associated with the given address"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn advance_block_time_by(seconds: BlockTime)")," - it increases the current value of block_time"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_account(n: usize) -> Address")," - it returns an nth address that was prepared for you by Odra in advance;\nby default, you start with the 0th account"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn assert_exception(err: E, block: F)")," - it executes the ",(0,a.kt)("inlineCode",{parentName:"li"},"block")," code and expects ",(0,a.kt)("inlineCode",{parentName:"li"},"err")," to happen"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_event(address: Address, index: i32) -> Result")," - returns\nthe event emitted by the contract")),(0,a.kt)("p",null,"Again, we'll see those used in the next articles."),(0,a.kt)("h2",{id:"deployer"},"Deployer"),(0,a.kt)("p",null,"You may be wondering what is the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractDeployer")," and where did it come from.\nIt is a piece of code generated automatically for you, thanks to the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nIf you used the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," on one of the methods, it will be the constructor of your contract.\nOdra will make sure that it is called only once, so you can use it to initialize your data structures etc."),(0,a.kt)("p",null,"If you do not provide the init method, you can deploy the contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"::default()")," method.\nIn the end, you will get a ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," instance (in our case the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractRef"),") which reimplements all\nthe methods you defined in the contract, but executes them on a blockchain!"),(0,a.kt)("p",null,"To learn more about the ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," contract, visit the ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/cross-calls"},"Cross calls")," article."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We take a look at how Odra handles errors!"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/14eb3368.fbe30db7.js b/docs/assets/js/14eb3368.fbe30db7.js new file mode 100644 index 000000000..1eff4736b --- /dev/null +++ b/docs/assets/js/14eb3368.fbe30db7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9817],{1310:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(87462),r=n(67294),i=n(86010),l=n(35281),s=n(52802),c=n(48596),o=n(39960),m=n(95999),d=n(44996);function u(e){return r.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const h="breadcrumbHomeIcon_YNFT";function b(){const e=(0,d.Z)("/");return r.createElement("li",{className:"breadcrumbs__item"},r.createElement(o.Z,{"aria-label":(0,m.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},r.createElement(u,{className:h})))}const v="breadcrumbsContainer_Z_bl";function g(e){let{children:t,href:n,isLast:a}=e;const i="breadcrumbs__link";return a?r.createElement("span",{className:i,itemProp:"name"},t):n?r.createElement(o.Z,{className:i,href:n,itemProp:"item"},r.createElement("span",{itemProp:"name"},t)):r.createElement("span",{className:i},t)}function E(e){let{children:t,active:n,index:l,addMicrodata:s}=e;return r.createElement("li",(0,a.Z)({},s&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,i.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,r.createElement("meta",{itemProp:"position",content:String(l+1)}))}function p(){const e=(0,s.s1)(),t=(0,c.Ns)();return e?r.createElement("nav",{className:(0,i.Z)(l.k.docs.docBreadcrumbs,v),"aria-label":(0,m.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},r.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&r.createElement(b,null),e.map(((t,n)=>{const a=n===e.length-1;return r.createElement(E,{key:n,active:a,index:n,addMicrodata:!!t.href},r.createElement(g,{href:t.href,isLast:a},t.label))})))):null}},34228:(e,t,n)=>{n.r(t),n.d(t,{default:()=>A});var a=n(67294),r=n(1944),i=n(52802),l=n(44996),s=n(86010),c=n(39960),o=n(13919),m=n(95999);const d="cardContainer_fWXF",u="cardTitle_rnsV",h="cardDescription_PWke";function b(e){let{href:t,children:n}=e;return a.createElement(c.Z,{href:t,className:(0,s.Z)("card padding--lg",d)},n)}function v(e){let{href:t,icon:n,title:r,description:i}=e;return a.createElement(b,{href:t},a.createElement("h2",{className:(0,s.Z)("text--truncate",u),title:r},n," ",r),i&&a.createElement("p",{className:(0,s.Z)("text--truncate",h),title:i},i))}function g(e){let{item:t}=e;const n=(0,i.Wl)(t);return n?a.createElement(v,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:(0,m.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function E(e){let{item:t}=e;const n=(0,o.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,i.xz)(t.docId??void 0);return a.createElement(v,{href:t.href,icon:n,title:t.label,description:r?.description})}function p(e){let{item:t}=e;switch(t.type){case"link":return a.createElement(E,{item:t});case"category":return a.createElement(g,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function f(e){let{className:t}=e;const n=(0,i.jA)();return a.createElement(N,{items:n.items,className:t})}function N(e){const{items:t,className:n}=e;if(!t)return a.createElement(f,e);const r=(0,i.MN)(t);return a.createElement("section",{className:(0,s.Z)("row",n)},r.map(((e,t)=>a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(p,{item:e})))))}var Z=n(80049),k=n(23120),_=n(44364),L=n(1310),T=n(92503);const x="generatedIndexPage_vN6x",y="list_eTzJ",w="title_kItE";function I(e){let{categoryGeneratedIndex:t}=e;return a.createElement(r.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,l.Z)(t.image)})}function V(e){let{categoryGeneratedIndex:t}=e;const n=(0,i.jA)();return a.createElement("div",{className:x},a.createElement(k.Z,null),a.createElement(L.Z,null),a.createElement(_.Z,null),a.createElement("header",null,a.createElement(T.Z,{as:"h1",className:w},t.title),t.description&&a.createElement("p",null,t.description)),a.createElement("article",{className:"margin-top--lg"},a.createElement(N,{items:n.items,className:y})),a.createElement("footer",{className:"margin-top--lg"},a.createElement(Z.Z,{previous:t.navigation.previous,next:t.navigation.next})))}function A(e){return a.createElement(a.Fragment,null,a.createElement(I,e),a.createElement(V,e))}},80049:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(87462),r=n(67294),i=n(95999),l=n(32244);function s(e){const{previous:t,next:n}=e;return r.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,i.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&r.createElement(l.Z,(0,a.Z)({},t,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&r.createElement(l.Z,(0,a.Z)({},n,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},44364:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(67294),r=n(86010),i=n(95999),l=n(35281),s=n(74477);function c(e){let{className:t}=e;const n=(0,s.E)();return n.badge?a.createElement("span",{className:(0,r.Z)(t,l.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},23120:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(67294),r=n(86010),i=n(52263),l=n(39960),s=n(95999),c=n(80143),o=n(35281),m=n(60373),d=n(74477);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function h(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function b(e){let{versionLabel:t,to:n,onClick:r}=e;return a.createElement(s.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(l.Z,{to:n,onClick:r},a.createElement(s.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function v(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,i.Z)(),{pluginId:s}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,m.J)(s),{latestDocSuggestion:u,latestVersionSuggestion:v}=(0,c.Jo)(s),g=u??(E=v).docs.find((e=>e.id===E.mainDocId));var E;return a.createElement("div",{className:(0,r.Z)(t,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(h,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(b,{versionLabel:v.label,to:g.path,onClick:()=>d(v.name)})))}function g(e){let{className:t}=e;const n=(0,d.E)();return n.banner?a.createElement(v,{className:t,versionMetadata:n}):null}},92503:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(87462),r=n(67294),i=n(86010),l=n(95999),s=n(86668),c=n(39960);const o="anchorWithStickyNavbar_LWe7",m="anchorWithHideOnScrollNavbar_WYt5";function d(e){let{as:t,id:n,...d}=e;const{navbar:{hideOnScroll:u}}=(0,s.L)();if("h1"===t||!n)return r.createElement(t,(0,a.Z)({},d,{id:void 0}));const h=(0,l.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:n});return r.createElement(t,(0,a.Z)({},d,{className:(0,i.Z)("anchor",u?m:o,d.className),id:n}),d.children,r.createElement(c.Z,{className:"hash-link",to:`#${n}`,"aria-label":h,title:h},"\u200b"))}},32244:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(67294),r=n(86010),i=n(39960);function l(e){const{permalink:t,title:n,subLabel:l,isNext:s}=e;return a.createElement(i.Z,{className:(0,r.Z)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},l&&a.createElement("div",{className:"pagination-nav__sublabel"},l),a.createElement("div",{className:"pagination-nav__label"},n))}}}]); \ No newline at end of file diff --git a/docs/assets/js/1524a02c.f6f26170.js b/docs/assets/js/1524a02c.f6f26170.js new file mode 100644 index 000000000..a68fed4c4 --- /dev/null +++ b/docs/assets/js/1524a02c.f6f26170.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5399],{28289:t=>{t.exports=JSON.parse('{"title":"Getting started","description":"5 minutes to learn the most important Odra concepts.","slug":"/category/getting-started","permalink":"/docs/0.5.0/category/getting-started","navigation":{"previous":{"title":"Odra framework","permalink":"/docs/0.5.0/"},"next":{"title":"Installation","permalink":"/docs/0.5.0/getting-started/installation"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/1684519a.49e3efaf.js b/docs/assets/js/1684519a.49e3efaf.js new file mode 100644 index 000000000..82c5ae01b --- /dev/null +++ b/docs/assets/js/1684519a.49e3efaf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8381],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>g});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),c=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},l=function(e){var n=c(e.components);return a.createElement(p.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(t),g=r,m=u["".concat(p,".").concat(g)]||u[g]||d[g]||i;return t?a.createElement(m,o(o({ref:n},l),{},{components:t})):a.createElement(m,o({ref:n},l))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var c=2;c{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=t(87462),r=(t(67294),t(3905));const i={},o="Advanced Storage Concepts",s={unversionedId:"advanced/advanced-storage",id:"version-0.4.0/advanced/advanced-storage",title:"Advanced Storage Concepts",description:"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.",source:"@site/versioned_docs/version-0.4.0/advanced/03-advanced-storage.md",sourceDirName:"advanced",slug:"/advanced/advanced-storage",permalink:"/docs/0.4.0/advanced/advanced-storage",draft:!1,tags:[],version:"0.4.0",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Delegate",permalink:"/docs/0.4.0/advanced/delegate"},next:{title:"Attributes",permalink:"/docs/0.4.0/advanced/attributes"}},p={},c=[{value:"Recap and Basic Concepts",id:"recap-and-basic-concepts",level:2},{value:"Advanced Storage Concepts",id:"advanced-storage-concepts-1",level:2},{value:"Sequence",id:"sequence",level:3},{value:"Advanced Mapping",id:"advanced-mapping",level:3},{value:"AdvancedStorage Contract",id:"advancedstorage-contract",level:2},{value:"Conclusion",id:"conclusion",level:2}],l={toc:c};function d(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"advanced-storage-concepts"},"Advanced Storage Concepts"),(0,r.kt)("p",null,"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Sequence")," modules, which are key components of the advanced storage interaction in Odra."),(0,r.kt)("h2",{id:"recap-and-basic-concepts"},"Recap and Basic Concepts"),(0,r.kt)("p",null,"Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),". These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Variable"),": A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Mapping"),": Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"List"),": Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over."),(0,r.kt)("p",null,"If you need a refresher on these topics, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/storage-interaction"},"guide")," on basic storage in Odra."),(0,r.kt)("h2",{id:"advanced-storage-concepts-1"},"Advanced Storage Concepts"),(0,r.kt)("h3",{id:"sequence"},"Sequence"),(0,r.kt)("p",null,"The Sequence in Odra is a basic module that holds a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," which keeps track of the current value. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub struct Sequence\nwhere\n T: Num + One + OdraType\n{\n value: Variable\n}\n")),(0,r.kt)("p",null,"The Sequence module provides functions ",(0,r.kt)("inlineCode",{parentName:"p"},"get_current_value")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"next_value")," to get the current value and increment the value respectively."),(0,r.kt)("h3",{id:"advanced-mapping"},"Advanced Mapping"),(0,r.kt)("p",null,"In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility."),(0,r.kt)("p",null,"Let's consider the following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/mapping.rs"',title:'"examples/mapping.rs"'},"use odra::{map, types::U256, Mapping, UnwrapOrRevert};\n\nuse crate::owned_token::OwnedToken;\n\n#[odra::module]\npub struct NestedMapping {\n strings: Mapping>>,\n tokens: Mapping>>\n}\n\n#[odra::module]\nimpl NestedMapping {\n\n ...\n\n pub fn set_token(\n &mut self,\n key1: String,\n key2: u32,\n key3: String,\n token_name: String,\n decimals: u8,\n symbol: String,\n initial_supply: &U256\n ) {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .init(token_name, symbol, decimals, initial_supply);\n }\n\n pub fn get_string_api(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> String {\n let mapping = self.strings.get_instance(&key1).get_instance(&key2);\n mapping.get(&key3).unwrap_or_revert()\n }\n\n pub fn total_supply(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> U256 {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .total_supply()\n }\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers. "),(0,r.kt)("p",{parentName:"admonition"},"Instead of using the ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," function, call ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()"),", which sets the correct namespace for nested modules.")),(0,r.kt)("p",null,"If the terminal value is deeply nested, a long chain of ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()")," calls is required."),(0,r.kt)("p",null,"To keep the codebase consistent, a ",(0,r.kt)("inlineCode",{parentName:"p"},"map!")," macro can be used:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/mapping.rs"',title:'"examples/mapping.rs"'},"...\n\npub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {\n map!(self.strings[key1][key2][key3] = value);\n}\n\npub fn get_string_macro(\n &self, \n key1: String, \n key2: u32, \n key3: String\n) -> String {\n map!(self.strings[key1][key2][key3])\n}\n\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The terminal value must not be an Odra Module.")),(0,r.kt)("h2",{id:"advancedstorage-contract"},"AdvancedStorage Contract"),(0,r.kt)("p",null,"The given code snippet showcases the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdvancedStorage")," contract that incorporates these storage concepts."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Sequence, Mapping};\nuse crate::modules::Token;\n\n#[odra::module]\npub struct AdvancedStorage {\n my_sequence: Sequence,\n my_mapping: Mapping>,\n}\n\nimpl AdvancedStorage {\n pub fn get_sequence_current_value(&self) -> u32 {\n self.my_sequence.get_current_value()\n }\n\n pub fn next_sequence_value(&mut self) -> u32 {\n self.my_sequence.next_value()\n }\n\n pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.set(&inner_key, value);\n }\n\n pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.get(&inner_key)\n }\n}\n")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/17498f44.ff116f3b.js b/docs/assets/js/17498f44.ff116f3b.js new file mode 100644 index 000000000..4bd59377e --- /dev/null +++ b/docs/assets/js/17498f44.ff116f3b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9828],{8173:e=>{e.exports=JSON.parse('{"title":"Migrations","description":"How to keep your code in sync with the latest version of the Odra Framework.","slug":"/category/migrations","permalink":"/docs/next/category/migrations","navigation":{"previous":{"title":"Pauseable","permalink":"/docs/next/tutorials/pauseable"},"next":{"title":"Migration guide to v0.8.0","permalink":"/docs/next/migrations/to-0.8.0"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/177939f6.5459c34e.js b/docs/assets/js/177939f6.5459c34e.js new file mode 100644 index 000000000..53d27489a --- /dev/null +++ b/docs/assets/js/177939f6.5459c34e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[995],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),c=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),h=n,m=u["".concat(l,".").concat(h)]||u[h]||d[h]||o;return r?a.createElement(m,i(i({ref:t},p),{},{components:r})):a.createElement(m,i({ref:t},p))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:n,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(87462),n=(r(67294),r(3905));const o={slug:"release-020",title:"Odra 0.2.0 Released",authors:["kubaplas","kpob","zie1ony"],image:"https://github.com/odradev.png"},i=void 0,s={permalink:"/blog/release-020",source:"@site/blog/2022-11-30-release-020/index.md",title:"Odra 0.2.0 Released",description:"We want to introduce you to the very first public release of the Odra Framework proudly!",date:"2022-11-30T00:00:00.000Z",formattedDate:"November 30, 2022",tags:[],readingTime:3.07,hasTruncateMarker:!0,authors:[{name:"Kuba P\u0142askonka",title:"Lead Developer",url:"https://github.com/kubaplas",key:"kubaplas"},{name:"Krzysztof Pobiar\u017cyn",title:"Lead Developer",url:"https://github.com/kpob",key:"kpob"},{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"release-020",title:"Odra 0.2.0 Released",authors:["kubaplas","kpob","zie1ony"],image:"https://github.com/odradev.png"},prevItem:{title:"Zero Knowledge on Casper",permalink:"/blog/casper-zk-risc0"}},l={authorsImageUrls:[void 0,void 0,void 0]},c=[{value:"A bit of history",id:"a-bit-of-history",level:2},{value:"Odra for Casper",id:"odra-for-casper",level:2},{value:"Odra Framework",id:"odra-framework",level:2},{value:"What next",id:"what-next",level:2},{value:"Join us",id:"join-us",level:2}],p={toc:c};function d(e){let{components:t,...o}=e;return(0,n.kt)("wrapper",(0,a.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"We want to introduce you to the very first public release of the Odra Framework proudly!"),(0,n.kt)("h2",{id:"a-bit-of-history"},"A bit of history"),(0,n.kt)("p",null,"More than a year ago Maciej Zieli\u0144ski resigned from the position of Ecosystem Leader at ",(0,n.kt)("a",{parentName:"p",href:"https://casperlabs.io"},"CasperLabs"),".\nAlong with Krzysztof Pobiar\u017cyn and Kuba P\u0142askonka, we formed an engineering team dedicated to smart contracts."),(0,n.kt)("p",null,"Looking at the blockchain ecosystems from the smart contract developer perspective there are two universes.\nThe first one is Solidity, which thrives and is at its best now.\nIt has a ton of well-tested code and security tooling.\nWhenever an EVM-based blockchain pops out it gets populated by forks of DeFi and DAO protocols.\nFascinating network effect emerges - code written for one EVM-based blockchain can be run on every other EVM-based blockchain.\nThe second universe is Rust which compiles to WebAssembly.\nHere developer communities live in the guarded cities of Polkadot, Cosmos, Solana, Casper, and Near.\nThe code written for one platform is not portable.\nThe network effect never had a chance to arise."),(0,n.kt)("p",null,'The main reason why Odra exists is achieving this cross-chain code reusability.\nWe could paraphrase a bit and say:\n"One to bring them all and in the code bind them."'),(0,n.kt)("h2",{id:"odra-for-casper"},"Odra for Casper"),(0,n.kt)("p",null,"The very first blockchain we have integrated with Odra is Casper.\nIn comparison to ",(0,n.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-contract"},"casper-contract")," API, it greatly cuts development time and offers a much lower entry level.\nThe Odra interface is developer friendly and people familiar with Solidity, ",(0,n.kt)("a",{parentName:"p",href:"https://crates.io/crates/ink_lang"},"Ink"),", or ",(0,n.kt)("a",{parentName:"p",href:"https://crates.io/crates/near-sdk"},"Near")," will feel like at home.\nWe hope it will unleash the creativity and bring a whole bunch of products onto Casper."),(0,n.kt)("h2",{id:"odra-framework"},"Odra Framework"),(0,n.kt)("p",null,"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design.\nBuilt by experienced developers, it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel.\nIt's free and open source."),(0,n.kt)("p",null,"Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains. "),(0,n.kt)("p",null,"A smart contract written using Odra can be executed on all integrated systems.\nWe can do it by abstracting over core concepts that all the above systems are built around.\nThese are type system, storage, entry points, execution context, and testing environment.\nWe believe it will bring standardization to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this ecosystem."),(0,n.kt)("p",null,"Let\u2019s look at a Flipper contract, that holds a boolean value.\nThe contract has a constructor that sets the initial value, and two entry points: ",(0,n.kt)("inlineCode",{parentName:"p"},"flip()")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"get()"),", to change and query the current value, respectively."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::Variable;\n\n#[odra::module]\npub struct Flipper {\n value: Variable,\n}\n\n#[odra::module]\nimpl Flipper {\n\n #[odra(init)]\n pub fn init(&mut self, value: bool) {\n self.value.set(value);\n }\n\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n")),(0,n.kt)("p",null,"It comes with the CLI tool ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/odradev/cargo-odra"},"cargo-odra")," that makes it easy to use Odra."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"cargo-odra",src:r(38860).Z,width:"910",height:"482"})),(0,n.kt)("p",null,"Neat and simple, isn't it? Do you like it? Start flowing with us!"),(0,n.kt)("h2",{id:"what-next"},"What next"),(0,n.kt)("p",null,"Let's be honest, we are just starting.\nThe codebase is still hot.\nOn the other hand, we are happy with the interfaces we designed.\nNow is the time to write documentation and tutorials.\nWe are also building the modules library inspired by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/"},"OpenZeppelin"),".\nThe security code audit is still ahead of us."),(0,n.kt)("h2",{id:"join-us"},"Join us"),(0,n.kt)("p",null,"Check out the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra GitHub repository")," for more info on how to get the most out of Odra.\nShould you have questions, join ",(0,n.kt)("a",{parentName:"p",href:"https://discord.gg/Mm5ABc9P8k"},"our Discord"),", ",(0,n.kt)("a",{parentName:"p",href:"https://twitter.com/odradev"},"our Twitter")," or write us at ",(0,n.kt)("a",{parentName:"p",href:"mailto:contact@odra.dev"},"contact@odra.dev"),"."))}d.isMDXComponent=!0},38860:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/cargo_odra-57b32f7c1e40dbb498e7b1619f4860e0.gif"}}]); \ No newline at end of file diff --git a/docs/assets/js/17896441.10d59a08.js b/docs/assets/js/17896441.10d59a08.js new file mode 100644 index 000000000..121a674d6 --- /dev/null +++ b/docs/assets/js/17896441.10d59a08.js @@ -0,0 +1 @@ +(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7918],{1310:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var a=n(87462),s=n(67294),l=n(86010),r=n(35281),o=n(52802),c=n(48596),i=n(39960),d=n(95999),m=n(44996);function u(e){return s.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},e),s.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const v="breadcrumbHomeIcon_YNFT";function h(){const e=(0,m.Z)("/");return s.createElement("li",{className:"breadcrumbs__item"},s.createElement(i.Z,{"aria-label":(0,d.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},s.createElement(u,{className:v})))}const b="breadcrumbsContainer_Z_bl";function f(e){let{children:t,href:n,isLast:a}=e;const l="breadcrumbs__link";return a?s.createElement("span",{className:l,itemProp:"name"},t):n?s.createElement(i.Z,{className:l,href:n,itemProp:"item"},s.createElement("span",{itemProp:"name"},t)):s.createElement("span",{className:l},t)}function j(e){let{children:t,active:n,index:r,addMicrodata:o}=e;return s.createElement("li",(0,a.Z)({},o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,l.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,s.createElement("meta",{itemProp:"position",content:String(r+1)}))}function p(){const e=(0,o.s1)(),t=(0,c.Ns)();return e?s.createElement("nav",{className:(0,l.Z)(r.k.docs.docBreadcrumbs,b),"aria-label":(0,d.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},s.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&s.createElement(h,null),e.map(((t,n)=>{const a=n===e.length-1;return s.createElement(j,{key:n,active:a,index:n,addMicrodata:!!t.href},s.createElement(f,{href:t.href,isLast:a},t.label))})))):null}},15154:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>J});var a=n(67294),s=n(1944),l=n(902);const r=a.createContext(null);function o(e){let{children:t,content:n}=e;const s=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(r.Provider,{value:s},t)}function c(){const e=(0,a.useContext)(r);if(null===e)throw new l.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(s.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(86010),m=n(87524),u=n(80049);function v(){const{metadata:e}=c();return a.createElement(u.Z,{previous:e.previous,next:e.next})}var h=n(23120),b=n(44364),f=n(35281),j=n(95999);function p(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(j.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function g(e){let{lastUpdatedBy:t}=e;return a.createElement(j.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function E(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:s}=e;return a.createElement("span",{className:f.k.common.lastUpdated},a.createElement(j.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(p,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:s?a.createElement(g,{lastUpdatedBy:s}):""}},"Last updated{atDate}{byUser}"),!1)}var k=n(84881),L=n(86233);const N="lastUpdated_vwxv";function Z(e){return a.createElement("div",{className:(0,d.Z)(f.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(L.Z,e)))}function y(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,formattedLastUpdatedAt:l}=e;return a.createElement("div",{className:(0,d.Z)(f.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(k.Z,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",N)},(n||s)&&a.createElement(E,{lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:s})))}function _(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:s,lastUpdatedBy:l,tags:r}=e,o=r.length>0,i=!!(t||n||l);return o||i?a.createElement("footer",{className:(0,d.Z)(f.k.docs.docFooter,"docusaurus-mt-lg")},o&&a.createElement(Z,{tags:r}),i&&a.createElement(y,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:s})):null}var C=n(86043),x=n(93743),T=n(87462);const w="tocCollapsibleButton_TO0P",U="tocCollapsibleButtonExpanded_MG3E";function H(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,T.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",w,!t&&U,n.className)}),a.createElement(j.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const A="tocCollapsible_ETCw",z="tocCollapsibleContent_vkbj",M="tocCollapsibleExpanded_sAul";function B(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:l}=e;const{collapsed:r,toggleCollapsed:o}=(0,C.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)(A,!r&&M,n)},a.createElement(H,{collapsed:r,onClick:o}),a.createElement(C.z,{lazy:!0,className:z,collapsed:r},a.createElement(x.Z,{toc:t,minHeadingLevel:s,maxHeadingLevel:l})))}const I="tocMobile_ITEo";function O(){const{toc:e,frontMatter:t}=c();return a.createElement(B,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(f.k.docs.docTocMobile,I)})}var S=n(39407);function V(){const{toc:e,frontMatter:t}=c();return a.createElement(S.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:f.k.docs.docTocDesktop})}var D=n(92503),P=n(88905);function R(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(f.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(D.Z,{as:"h1"},n)),a.createElement(P.Z,null,t))}var F=n(1310);const q="docItemContainer_Djhp",$="docItemCol_VOVn";function G(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),s=e.hide_table_of_contents,l=!s&&t.length>0;return{hidden:s,mobile:l?a.createElement(O,null):void 0,desktop:!l||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(V,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&$)},a.createElement(h.Z,null),a.createElement("div",{className:q},a.createElement("article",null,a.createElement(F.Z,null),a.createElement(b.Z,null),n.mobile,a.createElement(R,null,t),a.createElement(_,null)),a.createElement(v,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function J(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(o,{content:e.content},a.createElement(s.FG,{className:t},a.createElement(i,null),a.createElement(G,null,a.createElement(n,null))))}},80049:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a=n(87462),s=n(67294),l=n(95999),r=n(32244);function o(e){const{previous:t,next:n}=e;return s.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,l.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&s.createElement(r.Z,(0,a.Z)({},t,{subLabel:s.createElement(l.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&s.createElement(r.Z,(0,a.Z)({},n,{subLabel:s.createElement(l.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},44364:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(67294),s=n(86010),l=n(95999),r=n(35281),o=n(74477);function c(e){let{className:t}=e;const n=(0,o.E)();return n.badge?a.createElement("span",{className:(0,s.Z)(t,r.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(l.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},23120:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(67294),s=n(86010),l=n(52263),r=n(39960),o=n(95999),c=n(80143),i=n(35281),d=n(60373),m=n(74477);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(o.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(o.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function v(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function h(e){let{versionLabel:t,to:n,onClick:s}=e;return a.createElement(o.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(r.Z,{to:n,onClick:s},a.createElement(o.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function b(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:r}}=(0,l.Z)(),{pluginId:o}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:m}=(0,d.J)(o),{latestDocSuggestion:u,latestVersionSuggestion:b}=(0,c.Jo)(o),f=u??(j=b).docs.find((e=>e.id===j.mainDocId));var j;return a.createElement("div",{className:(0,s.Z)(t,i.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(v,{siteTitle:r,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(h,{versionLabel:b.label,to:f.path,onClick:()=>m(b.name)})))}function f(e){let{className:t}=e;const n=(0,m.E)();return n.banner?a.createElement(b,{className:t,versionMetadata:n}):null}},39407:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(87462),s=n(67294),l=n(86010),r=n(93743);const o="tableOfContents_bqdL";function c(e){let{className:t,...n}=e;return s.createElement("div",{className:(0,l.Z)(o,"thin-scrollbar",t)},s.createElement(r.Z,(0,a.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},93743:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var a=n(87462),s=n(67294),l=n(86668);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...s}=e;n>=0?t[n].children.push(s):a.push(s)})),a}function o(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=o({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function m(e){const t=(0,s.useRef)(void 0),n=d();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:s,minHeadingLevel:l,maxHeadingLevel:r}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),o=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let s=t;s<=n;s+=1)a.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:l,maxHeadingLevel:r}),c=i(o,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(s),e.classList.add(s),t.current=e):e.classList.remove(s)}(e,e===d)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:l}=e;return t.length?s.createElement("ul",{className:l?void 0:n},t.map((e=>s.createElement("li",{key:e.id},s.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),s.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const v=s.memo(u);function h(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:i,minHeadingLevel:d,maxHeadingLevel:u,...h}=e;const b=(0,l.L)(),f=d??b.tableOfContents.minHeadingLevel,j=u??b.tableOfContents.maxHeadingLevel,p=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>o({toc:r(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:f,maxHeadingLevel:j});return m((0,s.useMemo)((()=>{if(c&&i)return{linkClassName:c,linkActiveClassName:i,minHeadingLevel:f,maxHeadingLevel:j}}),[c,i,f,j])),s.createElement(v,(0,a.Z)({toc:p,className:n,linkClassName:c},h))}},46700:(e,t,n)=>{var a={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function s(e){var t=l(e);return n(t)}function l(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}s.keys=function(){return Object.keys(a)},s.resolve=l,e.exports=s,s.id=46700}}]); \ No newline at end of file diff --git a/docs/assets/js/181ab02d.a47d9657.js b/docs/assets/js/181ab02d.a47d9657.js new file mode 100644 index 000000000..2667ca873 --- /dev/null +++ b/docs/assets/js/181ab02d.a47d9657.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8099],{89891:e=>{e.exports=JSON.parse('{"title":"Backends","description":"Backends","slug":"/category/backends","permalink":"/docs/0.2.0/category/backends","navigation":{"previous":{"title":"Native token","permalink":"/docs/0.2.0/basics/native-token"},"next":{"title":"What is a backend?","permalink":"/docs/0.2.0/backends/what-is-a-backend"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/1999a842.820a7b72.js b/docs/assets/js/1999a842.820a7b72.js new file mode 100644 index 000000000..1ffc9691c --- /dev/null +++ b/docs/assets/js/1999a842.820a7b72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[427],{89813:e=>{e.exports=JSON.parse('{"title":"Backends","description":"Backends","slug":"/category/backends","permalink":"/docs/0.3.1/category/backends","navigation":{"previous":{"title":"Attributes","permalink":"/docs/0.3.1/advanced/attributes"},"next":{"title":"What is a backend?","permalink":"/docs/0.3.1/backends/what-is-a-backend"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/1b34e22f.6c966b3e.js b/docs/assets/js/1b34e22f.6c966b3e.js new file mode 100644 index 000000000..5ffe17e99 --- /dev/null +++ b/docs/assets/js/1b34e22f.6c966b3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3785],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(a),g=r,m=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return a?n.createElement(m,l(l({ref:t},p),{},{components:a})):n.createElement(m,l({ref:t},p))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1},l="Installation",i={unversionedId:"getting-started/installation",id:"version-0.2.0/getting-started/installation",title:"Installation",description:"Hello fellow Odra user! This page will guide you through the installation process.",source:"@site/versioned_docs/version-0.2.0/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/0.2.0/getting-started/installation",draft:!1,tags:[],version:"0.2.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Getting started",permalink:"/docs/0.2.0/category/getting-started"},next:{title:"Flipper example",permalink:"/docs/0.2.0/getting-started/flipper"}},s={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Cargo Odra",id:"installing-cargo-odra",level:2},{value:"Creating a new Odra project",id:"creating-a-new-odra-project",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"installation"},"Installation"),(0,r.kt)("p",null,"Hello fellow Odra user! This page will guide you through the installation process."),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"To start working with Odra, you need to have the following installed on your machine:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Rust toolchain installed (see ",(0,r.kt)("a",{parentName:"li",href:"https://rustup.rs/"},"rustup.rs"),")"),(0,r.kt)("li",{parentName:"ul"},"wasmstrip tool installed (see ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/WebAssembly/wabt"},"wabt"),")")),(0,r.kt)("p",null,"We do not provide exact commands for installing these tools, as they are different for different operating systems.\nPlease refer to the documentation of the tools themselves."),(0,r.kt)("p",null,"With Rust toolchain ready, you can add a new target:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"rustup target add wasm32-unknown-unknown\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"wasm32-unknown-uknown")," is a target that will be used by Odra to compile your smart contracts to WASM files.")),(0,r.kt)("h2",{id:"installing-cargo-odra"},"Installing Cargo Odra"),(0,r.kt)("p",null,"Cargo Odra is a helpful tool that will help you to build and test your smart contracts.\nIt is not required to use Odra, but the documentation will assume that you have it installed."),(0,r.kt)("p",null,"To install it, simply execute the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo install cargo-odra\n")),(0,r.kt)("p",null,"To check if it was installed correctly and see available commands, type:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra --help\n")),(0,r.kt)("p",null,"If everything went fine, we can proceed to the next step."),(0,r.kt)("h2",{id:"creating-a-new-odra-project"},"Creating a new Odra project"),(0,r.kt)("p",null,"To create a new project, simply execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project && cd my-project\n")),(0,r.kt)("p",null,'This will create a new folder called "my-project" and initialize Odra there. Cargo Odra\nwill create a sample contract for you in src directory. You can run the tests of this contract\nby executing:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"This will run tests using Odra's internal MockVM. You can run those tests against a real backend, to do so\nwe need to add a new backend. Let's use CasperVM:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra backend add -p casper\n")),(0,r.kt)("p",null,"Now we can run the tests against it:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Congratulations!")," Now you are ready to create contracts using Odra framework! If you had any problems during\nthe installation process, feel free to ask for help on our ",(0,r.kt)("a",{parentName:"p",href:"https://discord.com/invite/Mm5ABc9P8k"},"Discord"),"."),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"If you want to see the code that you just tested, continue to the description of ",(0,r.kt)("a",{parentName:"p",href:"flipper"},"Flipper example"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/1be78505.98e8e130.js b/docs/assets/js/1be78505.98e8e130.js new file mode 100644 index 000000000..81a154205 --- /dev/null +++ b/docs/assets/js/1be78505.98e8e130.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9514,4972],{19963:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Ce});var a=n(67294),l=n(86010),o=n(1944),r=n(35281),i=n(43320),c=n(52802),s=n(74477),d=n(1116),m=n(16963),u=n(95999),b=n(12466),p=n(85936);const h="backToTopButton_sjWU",E="backToTopButtonShow_xfvO";function f(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,l]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:r,cancelScroll:i}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(o.current?o.current=!1:a>=r?(i(),l(!1)):a{e.location.hash&&(o.current=!0,l(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",r.k.common.backToTopButton,h,e&&E),type:"button",onClick:t})}var g=n(16550),_=n(87524),v=n(86668),k=n(11231),C=n(87462);function S(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const I="collapseSidebarButton_PEFL",N="collapseSidebarButtonIcon_kv0_";function Z(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",I),onClick:t},a.createElement(S,{className:N}))}var T=n(59689),y=n(902);const x=Symbol("EmptyContext"),w=a.createContext(x);function L(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(w.Provider,{value:o},t)}var A=n(86043),M=n(48596),B=n(39960),F=n(72389);function H(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function P(e){let{item:t,onItemClick:n,activePath:o,level:i,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,v.L)(),f=function(e){const t=(0,F.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,c.Wl)(e):void 0),[e,t])}(t),g=(0,c._F)(t,o),_=(0,M.Mg)(h,o),{collapsed:k,setCollapsed:S}=(0,A.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:I,setExpandedItem:N}=function(){const e=(0,a.useContext)(w);if(e===x)throw new y.i6("DocSidebarItemsExpandedStateProvider");return e}(),Z=function(e){void 0===e&&(e=!k),N(e?null:s),S(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,y.D9)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:g,collapsed:k,updateCollapsed:Z}),(0,a.useEffect)((()=>{b&&null!=I&&I!==s&&E&&S(!0)}),[b,I,s,S,E]),a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(i),"menu__list-item",{"menu__list-item--collapsed":k},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":_})},a.createElement(B.Z,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?Z(!1):(e.preventDefault(),Z())}:()=>{n?.(t)},"aria-current":_?"page":void 0,"aria-expanded":b?!k:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(H,{categoryLabel:u,onClick:e=>{e.preventDefault(),Z()}})),a.createElement(A.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:k},a.createElement(G,{items:m,tabIndex:k?-1:0,onItemClick:n,activePath:o,level:i+1})))}var W=n(13919),D=n(39471);const R="menuExternalLink_NmtK";function V(e){let{item:t,onItemClick:n,activePath:o,level:i,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,c._F)(t,o),E=(0,W.Z)(m);return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",b),key:u},a.createElement(B.Z,(0,C.Z)({className:(0,l.Z)("menu__link",!E&&R,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(D.Z,null)))}const z="menuHtmlItem_M9Kj";function U(e){let{item:t,level:n,index:o}=e;const{value:i,defaultStyle:c,className:s}=t;return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),c&&[z,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:i}})}function K(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(P,(0,C.Z)({item:t},n));case"html":return a.createElement(U,(0,C.Z)({item:t},n));default:return a.createElement(V,(0,C.Z)({item:t},n))}}function j(e){let{items:t,...n}=e;return a.createElement(L,null,t.map(((e,t)=>a.createElement(K,(0,C.Z)({key:t,item:e,index:t},n)))))}const G=(0,a.memo)(j),Y="menu_SIkG",q="menuWithAnnouncementBar_GW3s";function O(e){let{path:t,sidebar:n,className:o}=e;const i=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,l.Z)("menu thin-scrollbar",Y,i&&q,o)},a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(G,{items:n,activePath:t,level:1})))}const X="sidebar_njMd",J="sidebarWithHideableNavbar_wUlq",Q="sidebarHidden_VK0M",$="sidebarLogo_isFc";function ee(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:i},docs:{sidebar:{hideable:c}}}=(0,v.L)();return a.createElement("div",{className:(0,l.Z)(X,i&&J,r&&Q)},i&&a.createElement(k.Z,{tabIndex:-1,className:$}),a.createElement(O,{path:t,sidebar:n}),c&&a.createElement(Z,{onClick:o}))}const te=a.memo(ee);var ne=n(13102),ae=n(72961);const le=e=>{let{sidebar:t,path:n}=e;const o=(0,ae.e)();return a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(G,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function oe(e){return a.createElement(ne.Zo,{component:le,props:e})}const re=a.memo(oe);function ie(e){const t=(0,_.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(te,e),l&&a.createElement(re,e))}const ce="expandButton_m80_",se="expandButtonIcon_BlDH";function de(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:ce,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(S,{className:se}))}const me={docSidebarContainer:"docSidebarContainer_b6E3",docSidebarContainerHidden:"docSidebarContainerHidden_b3ry",sidebarViewport:"sidebarViewport_Xe31"};function ue(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function be(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:i}=(0,g.TH)(),[c,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{c&&s(!1),o((e=>!e))}),[o,c]);return a.createElement("aside",{className:(0,l.Z)(r.k.docs.docSidebarContainer,me.docSidebarContainer,n&&me.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(me.docSidebarContainer)&&n&&s(!0)}},a.createElement(ue,null,a.createElement("div",{className:(0,l.Z)(me.sidebarViewport,c&&me.sidebarViewportHidden)},a.createElement(ie,{sidebar:t,path:i,onCollapse:d,isHidden:c}),c&&a.createElement(de,{toggleSidebar:d}))))}const pe={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function he(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(pe.docMainContainer,(t||!o)&&pe.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",pe.docItemWrapper,t&&pe.docItemWrapperEnhanced)},n))}const Ee="docPage__5DB",fe="docsWrapper_BCFX";function ge(e){let{children:t}=e;const n=(0,d.V)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:fe},a.createElement(f,null),a.createElement("div",{className:Ee},n&&a.createElement(be,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(he,{hiddenSidebarContainer:l},t)))}var _e=n(4972),ve=n(90197);function ke(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(ve.Z,{version:t.version,tag:(0,i.os)(t.pluginId,t.version)}),a.createElement(o.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function Ce(e){const{versionMetadata:t}=e,n=(0,c.hI)(e);if(!n)return a.createElement(_e.default,null);const{docElement:i,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(ke,e),a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(ge,null,i)))))}},4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(67294),l=n(95999),o=n(1944),r=n(16963);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/docs/assets/js/1f63a7a5.e6152d60.js b/docs/assets/js/1f63a7a5.e6152d60.js new file mode 100644 index 000000000..226f7dffd --- /dev/null +++ b/docs/assets/js/1f63a7a5.e6152d60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5914],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var r=t(67294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i=r.createContext({}),c=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=c(e.components);return r.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(t),m=a,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return t?r.createElement(f,s(s({ref:n},p),{},{components:t})):r.createElement(f,s({ref:n},p))}));function m(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,s=new Array(o);s[0]=d;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:a,s[1]=l;for(var c=2;c{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=t(87462),a=(t(67294),t(3905));const o={sidebar_position:3},s="ERC-20",l={unversionedId:"tutorials/erc20",id:"version-0.2.0/tutorials/erc20",title:"ERC-20",description:"It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.",source:"@site/versioned_docs/version-0.2.0/tutorials/erc20.md",sourceDirName:"tutorials",slug:"/tutorials/erc20",permalink:"/docs/0.2.0/tutorials/erc20",draft:!1,tags:[],version:"0.2.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"Ownable",permalink:"/docs/0.2.0/tutorials/ownable"},next:{title:"OwnedToken",permalink:"/docs/0.2.0/tutorials/owned-token"}},i={},c=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:2},{value:"Metadata",id:"metadata",level:3},{value:"Core",id:"core",level:3},{value:"Test",id:"test",level:3},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"erc-20"},"ERC-20"),(0,a.kt)("p",null,"It's time for something that every smart contract developer has done at least once. Let's try to implement ",(0,a.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"Erc20")," standard. Of course, we are going to use the Odra Framework. "),(0,a.kt)("p",null,"The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value. "),(0,a.kt)("h2",{id:"framework-features"},"Framework features"),(0,a.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"advanced storage - key-value pairs, "),(0,a.kt)("li",{parentName:"ul"},"Odra types like ",(0,a.kt)("inlineCode",{parentName:"li"},"Address")," or ",(0,a.kt)("inlineCode",{parentName:"li"},"Balance"),", "),(0,a.kt)("li",{parentName:"ul"},"advanced events assertion.")),(0,a.kt)("h2",{id:"code"},"Code"),(0,a.kt)("p",null,"Our module has a pretty complex storage layout in comparison to the previous example."),(0,a.kt)("p",null,"We need to store the following data:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Immutable metadata - name, symbol and decimals."),(0,a.kt)("li",{parentName:"ol"},"Total supply."),(0,a.kt)("li",{parentName:"ol"},"Users' balances."),(0,a.kt)("li",{parentName:"ol"},"Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.")),(0,a.kt)("h2",{id:"module-definition"},"Module definition"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\npub struct Erc20 {\n decimals: Variable,\n symbol: Variable,\n name: Variable,\n total_supply: Variable,\n balances: Mapping,\n allowances: Mapping<(Address, Address), Balance>\n}\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L6")," - For the first time, we need to store key-value pairs. In order to do that, we use ",(0,a.kt)("inlineCode",{parentName:"li"},"Mapping"),". The name is taken after Solidity's native type ",(0,a.kt)("inlineCode",{parentName:"li"},"mapping"),". You may notice the ",(0,a.kt)("inlineCode",{parentName:"li"},"balances")," property maps ",(0,a.kt)("inlineCode",{parentName:"li"},"Address")," to ",(0,a.kt)("inlineCode",{parentName:"li"},"Balance"),". If you deal with addresses or you operate on tokens, you should always choose ",(0,a.kt)("inlineCode",{parentName:"li"},"Address")," over ",(0,a.kt)("inlineCode",{parentName:"li"},"String")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"Balance")," over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L7")," - Odra does not allow nested ",(0,a.kt)("inlineCode",{parentName:"li"},"Mapping"),"s, but you can overcome it using a tuple as a key.")),(0,a.kt)("h3",{id:"metadata"},"Metadata"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Erc20 {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: Balance) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(caller, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn symbol(&self) -> String {\n self.symbol.get_or_default()\n }\n\n pub fn decimals(&self) -> u8 {\n self.decimals.get_or_default()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.total_supply.get_or_default()\n }\n}\n\nimpl Erc20 {\n pub fn mint(&mut self, address: Address, amount: Balance) {\n self.balances.add(&address, amount);\n self.total_supply.add(amount);\n Transfer {\n from: None,\n to: Some(address),\n amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Transfer {\n pub from: Option
    ,\n pub to: Option
    ,\n pub amount: Balance\n}\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L1")," - The first ",(0,a.kt)("inlineCode",{parentName:"li"},"impl")," block, marked as a module, contains functions defined in the ERC-20 standard."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L3-L10")," - A constructor sets the token metadata and mints the initial supply."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L12-L14")," - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the ",(0,a.kt)("inlineCode",{parentName:"li"},"Ownable")," example, we used the ",(0,a.kt)("inlineCode",{parentName:"li"},"get()")," function returning an ",(0,a.kt)("inlineCode",{parentName:"li"},"Option"),". If the type implements ",(0,a.kt)("inlineCode",{parentName:"li"},"Default")," trait, you can call ",(0,a.kt)("inlineCode",{parentName:"li"},"get_or_default()")," function and the contract does not fail even if the value is not initialized."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L29")," - The second ",(0,a.kt)("inlineCode",{parentName:"li"},"impl")," is not an odra module, in other words these function will not be a part of contract's ABI."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L30-L39")," - Mint function is public, so like in a regular rust code will be accessible from the outside. ",(0,a.kt)("inlineCode",{parentName:"li"},"mint()")," use notation ",(0,a.kt)("inlineCode",{parentName:"li"},"self.balances.add(&address, amount);"),", which it is syntactic sugar for:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"let current_balance = self.balances.get(&address).unwrap_or_default();\nlet new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();\nself.balances.set(&address, new_balance);\n")),(0,a.kt)("h3",{id:"core"},"Core"),(0,a.kt)("p",null,"For the sake of completeness, let's implement the remaining functionalities like ",(0,a.kt)("inlineCode",{parentName:"p"},"transfer"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"transfer_from"),", or ",(0,a.kt)("inlineCode",{parentName:"p"},"approve"),". They are not introducing any new concepts, so we leave them without additional remarks."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs",title:"erc20.rs"},"#[odra::module]\nimpl Erc20 {\n ...\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n let caller = contract_env::caller();\n self.raw_transfer(caller, recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n let spender = contract_env::caller();\n self.spend_allowance(owner, spender, amount);\n self.raw_transfer(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n let owner = contract_env::caller();\n self.allowances.set(&(owner, spender), amount);\n Approval {\n owner,\n spender,\n value: amount\n }\n .emit();\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.balances.get_or_default(&address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.allowances.get_or_default(&(owner, spender))\n }\n}\n\nimpl Erc20 {\n ...\n\n fn raw_transfer(&mut self, owner: Address, recipient: Address, amount: U256) {\n let owner_balance = self.balances.get_or_default(&owner);\n if amount > owner_balance {\n contract_env::revert(Error::InsufficientBalance)\n }\n self.balances.set(&owner, owner_balance - amount);\n self.balances.add(&recipient, amount);\n Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount\n }\n .emit();\n }\n\n fn spend_allowance(&mut self, owner: Address, spender: Address, amount: U256) {\n let key = (owner, spender);\n let allowance = self.allowances.get_or_default(&key);\n if allowance < amount {\n contract_env::revert(Error::InsufficientAllowance)\n }\n self.allowances.set(&key, allowance - amount);\n Approval {\n owner,\n spender,\n value: allowance - amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Approval {\n pub owner: Address,\n pub spender: Address,\n pub value: U256\n}\n\nexecution_error! {\n pub enum Error {\n InsufficientBalance => 1,\n InsufficientAllowance => 2,\n }\n}\n")),(0,a.kt)("p",null,"Now, compare the code we have written, with ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"},"Open Zeppelin code"),". Out of 10, how Solidity-ish is our implementation?"),(0,a.kt)("h3",{id:"test"},"Test"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20rs showLineNumbers",title:"erc20rs",showLineNumbers:!0},'#[cfg(test)]\npub mod tests {\n use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};\n use odra::{assert_events, test_env, types::U256};\n\n pub const NAME: &str = "Plascoin";\n pub const SYMBOL: &str = "PLS";\n pub const DECIMALS: u8 = 10;\n pub const INITIAL_SUPPLY: u32 = 10_000;\n\n pub fn setup() -> Erc20Ref {\n Erc20Deployer::init(\n String::from(NAME),\n String::from(SYMBOL),\n DECIMALS,\n INITIAL_SUPPLY.into()\n )\n }\n\n #[test]\n fn initialization() {\n let erc20 = setup();\n\n assert_eq!(&erc20.symbol(), SYMBOL);\n assert_eq!(&erc20.name(), NAME);\n assert_eq!(erc20.decimals(), DECIMALS);\n assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());\n assert_events!(\n erc20,\n Transfer {\n from: None,\n to: Some(test_env::get_account(0)),\n amount: INITIAL_SUPPLY.into()\n }\n );\n }\n\n #[test]\n fn transfer_works() {\n let mut erc20 = setup();\n let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n erc20.transfer(recipient, amount);\n\n assert_eq!(\n erc20.balance_of(sender),\n U256::from(INITIAL_SUPPLY) - amount\n );\n assert_eq!(erc20.balance_of(recipient), amount);\n assert_events!(\n erc20,\n Transfer {\n from: Some(sender),\n to: Some(recipient),\n amount\n }\n );\n }\n\n #[test]\n fn transfer_error() {\n let erc20 = setup();\n let recipient = test_env::get_account(1);\n let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);\n\n test_env::assert_exception(Error::InsufficientBalance, || {\n // If we don\'t create a new ref, an error occurs:\n // cannot borrow `erc20` as mutable, as it is a captured variable \n // in a `Fn` closure cannot borrow as mutable\n let mut erc20 = Erc20Ref::at(erc20.address());\n erc20.transfer(recipient, amount)\n });\n }\n\n #[test]\n fn transfer_from_and_approval_work() {\n let mut erc20 = setup();\n let (owner, recipient, spender) = (\n test_env::get_account(0),\n test_env::get_account(1),\n test_env::get_account(2)\n );\n let approved_amount = 3_000.into();\n let transfer_amount = 1_000.into();\n\n // Owner approves Spender.\n erc20.approve(spender, approved_amount);\n\n // Allowance was recorded.\n assert_eq!(erc20.allowance(owner, spender), approved_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount\n }\n );\n\n // Spender transfers tokens from Owner to Recipient.\n test_env::set_caller(spender);\n erc20.transfer_from(owner, recipient, transfer_amount);\n\n // Tokens are transferred and allowance decremented.\n assert_eq!(\n erc20.balance_of(owner),\n U256::from(INITIAL_SUPPLY) - transfer_amount\n );\n assert_eq!(erc20.balance_of(recipient), transfer_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount - transfer_amount\n },\n Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount: transfer_amount\n }\n );\n \n assert_events!(erc20, Approval, Transfer);\n }\n\n #[test]\n fn transfer_from_error() {\n let erc20 = setup();\n let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n test_env::set_caller(spender);\n test_env::assert_exception(Error::InsufficientAllowance, || {\n // If we don\'t create a new ref, an error occurs:\n // cannot borrow `erc20` as mutable, as it is a captured variable \n // in a `Fn` closure cannot borrow as mutable\n let mut erc20 = Erc20Ref::at(erc20.address());\n erc20.transfer_from(owner, spender, amount)\n });\n }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L111-123")," - ",(0,a.kt)("inlineCode",{parentName:"li"},"assert_events!()")," macro accepts multiple events. You must pass them in the order they were emitted. "),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L125")," - Alternatively, if you don't want to check the entire event, you may assert only its type.")),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"You can not mix both approaches, you pass full events or types only.")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Having two modules: ",(0,a.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"Erc20"),", let's combine them, and create an ERC-20 on steroids."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/208794bf.f248129c.js b/docs/assets/js/208794bf.f248129c.js new file mode 100644 index 000000000..1023360cb --- /dev/null +++ b/docs/assets/js/208794bf.f248129c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1172],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>g});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),c=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},l=function(e){var n=c(e.components);return a.createElement(p.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(t),g=r,m=u["".concat(p,".").concat(g)]||u[g]||d[g]||i;return t?a.createElement(m,o(o({ref:n},l),{},{components:t})):a.createElement(m,o({ref:n},l))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var c=2;c{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=t(87462),r=(t(67294),t(3905));const i={},o="Advanced Storage Concepts",s={unversionedId:"advanced/advanced-storage",id:"version-0.3.1/advanced/advanced-storage",title:"Advanced Storage Concepts",description:"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.",source:"@site/versioned_docs/version-0.3.1/advanced/03-advanced-storage.md",sourceDirName:"advanced",slug:"/advanced/advanced-storage",permalink:"/docs/0.3.1/advanced/advanced-storage",draft:!1,tags:[],version:"0.3.1",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Delegate",permalink:"/docs/0.3.1/advanced/delegate"},next:{title:"Attributes",permalink:"/docs/0.3.1/advanced/attributes"}},p={},c=[{value:"Recap and Basic Concepts",id:"recap-and-basic-concepts",level:2},{value:"Advanced Storage Concepts",id:"advanced-storage-concepts-1",level:2},{value:"Sequence",id:"sequence",level:3},{value:"Advanced Mapping",id:"advanced-mapping",level:3},{value:"AdvancedStorage Contract",id:"advancedstorage-contract",level:2},{value:"Conclusion",id:"conclusion",level:2}],l={toc:c};function d(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"advanced-storage-concepts"},"Advanced Storage Concepts"),(0,r.kt)("p",null,"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Sequence")," modules, which are key components of the advanced storage interaction in Odra."),(0,r.kt)("h2",{id:"recap-and-basic-concepts"},"Recap and Basic Concepts"),(0,r.kt)("p",null,"Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),". These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Variable"),": A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Mapping"),": Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"List"),": Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over."),(0,r.kt)("p",null,"If you need a refresher on these topics, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.1/basics/storage-interaction"},"guide")," on basic storage in Odra."),(0,r.kt)("h2",{id:"advanced-storage-concepts-1"},"Advanced Storage Concepts"),(0,r.kt)("h3",{id:"sequence"},"Sequence"),(0,r.kt)("p",null,"The Sequence in Odra is a basic module that holds a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," which keeps track of the current value. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub struct Sequence\nwhere\n T: Num + One + OdraType\n{\n value: Variable\n}\n")),(0,r.kt)("p",null,"The Sequence module provides functions ",(0,r.kt)("inlineCode",{parentName:"p"},"get_current_value")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"next_value")," to get the current value and increment the value respectively."),(0,r.kt)("h3",{id:"advanced-mapping"},"Advanced Mapping"),(0,r.kt)("p",null,"In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility."),(0,r.kt)("p",null,"Let's consider the following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/mapping.rs"',title:'"examples/mapping.rs"'},"use odra::{map, types::U256, Mapping, UnwrapOrRevert};\n\nuse crate::owned_token::OwnedToken;\n\n#[odra::module]\npub struct NestedMapping {\n strings: Mapping>>,\n tokens: Mapping>>\n}\n\n#[odra::module]\nimpl NestedMapping {\n\n ...\n\n pub fn set_token(\n &mut self,\n key1: String,\n key2: u32,\n key3: String,\n token_name: String,\n decimals: u8,\n symbol: String,\n initial_supply: &U256\n ) {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .init(token_name, symbol, decimals, initial_supply);\n }\n\n pub fn get_string_api(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> String {\n let mapping = self.strings.get_instance(&key1).get_instance(&key2);\n mapping.get(&key3).unwrap_or_revert()\n }\n\n pub fn total_supply(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> U256 {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .total_supply()\n }\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers. "),(0,r.kt)("p",{parentName:"admonition"},"Instead of using the ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," function, call ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()"),", which sets the correct namespace for nested modules.")),(0,r.kt)("p",null,"If the terminal value is deeply nested, a long chain of ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()")," calls is required."),(0,r.kt)("p",null,"To keep the codebase consistent, a ",(0,r.kt)("inlineCode",{parentName:"p"},"map!")," macro can be used:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/mapping.rs"',title:'"examples/mapping.rs"'},"...\n\npub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {\n map!(self.strings[key1][key2][key3] = value);\n}\n\npub fn get_string_macro(\n &self, \n key1: String, \n key2: u32, \n key3: String\n) -> String {\n map!(self.strings[key1][key2][key3])\n}\n\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The terminal value must not be an Odra Module.")),(0,r.kt)("h2",{id:"advancedstorage-contract"},"AdvancedStorage Contract"),(0,r.kt)("p",null,"The given code snippet showcases the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdvancedStorage")," contract that incorporates these storage concepts."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Sequence, Mapping};\nuse crate::modules::Token;\n\n#[odra::module]\npub struct AdvancedStorage {\n my_sequence: Sequence,\n my_mapping: Mapping>,\n}\n\nimpl AdvancedStorage {\n pub fn get_sequence_current_value(&self) -> u32 {\n self.my_sequence.get_current_value()\n }\n\n pub fn next_sequence_value(&mut self) -> u32 {\n self.my_sequence.next_value()\n }\n\n pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.set(&inner_key, value);\n }\n\n pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.get(&inner_key)\n }\n}\n")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/209.7bb508af.js b/docs/assets/js/209.7bb508af.js new file mode 100644 index 000000000..bc36d56c2 --- /dev/null +++ b/docs/assets/js/209.7bb508af.js @@ -0,0 +1,7344 @@ +exports.id = 209; +exports.ids = [209]; +exports.modules = { + +/***/ 17295: +/***/ ((module) => { + +(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, + defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, + _ref$algorithms = _ref.algorithms, + algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms, + workerFactory = _ref.workerFactory, + workerUrl = _ref.workerUrl; + + _classCallCheck(this, ELK); + + this.defaultLayoutOptions = defaultLayoutOptions; + this.initialized = false; + + // check valid worker construction possible + if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { + throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); + } + var factory = workerFactory; + if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { + // use default Web Worker + factory = function factory(url) { + return new Worker(url); + }; + } + + // create the worker + var worker = factory(workerUrl); + if (typeof worker.postMessage !== 'function') { + throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); + } + + // wrap the worker to return promises + this.worker = new PromisedWorker(worker); + + // initially register algorithms + this.worker.postMessage({ + cmd: 'register', + algorithms: algorithms + }).then(function (r) { + return _this.initialized = true; + }).catch(console.err); + } + + _createClass(ELK, [{ + key: 'layout', + value: function layout(graph) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref2$layoutOptions = _ref2.layoutOptions, + layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions, + _ref2$logging = _ref2.logging, + logging = _ref2$logging === undefined ? false : _ref2$logging, + _ref2$measureExecutio = _ref2.measureExecutionTime, + measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio; + + if (!graph) { + return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); + } + return this.worker.postMessage({ + cmd: 'layout', + graph: graph, + layoutOptions: layoutOptions, + options: { + logging: logging, + measureExecutionTime: measureExecutionTime + } + }); + } + }, { + key: 'knownLayoutAlgorithms', + value: function knownLayoutAlgorithms() { + return this.worker.postMessage({ cmd: 'algorithms' }); + } + }, { + key: 'knownLayoutOptions', + value: function knownLayoutOptions() { + return this.worker.postMessage({ cmd: 'options' }); + } + }, { + key: 'knownLayoutCategories', + value: function knownLayoutCategories() { + return this.worker.postMessage({ cmd: 'categories' }); + } + }, { + key: 'terminateWorker', + value: function terminateWorker() { + this.worker.terminate(); + } + }]); + + return ELK; +}(); + +exports.default = ELK; + +var PromisedWorker = function () { + function PromisedWorker(worker) { + var _this2 = this; + + _classCallCheck(this, PromisedWorker); + + if (worker === undefined) { + throw new Error("Missing mandatory parameter 'worker'."); + } + this.resolvers = {}; + this.worker = worker; + this.worker.onmessage = function (answer) { + // why is this necessary? + setTimeout(function () { + _this2.receive(_this2, answer); + }, 0); + }; + } + + _createClass(PromisedWorker, [{ + key: 'postMessage', + value: function postMessage(msg) { + var id = this.id || 0; + this.id = id + 1; + msg.id = id; + var self = this; + return new Promise(function (resolve, reject) { + // prepare the resolver + self.resolvers[id] = function (err, res) { + if (err) { + self.convertGwtStyleError(err); + reject(err); + } else { + resolve(res); + } + }; + // post the message + self.worker.postMessage(msg); + }); + } + }, { + key: 'receive', + value: function receive(self, answer) { + var json = answer.data; + var resolver = self.resolvers[json.id]; + if (resolver) { + delete self.resolvers[json.id]; + if (json.error) { + resolver(json.error); + } else { + resolver(null, json.data); + } + } + } + }, { + key: 'terminate', + value: function terminate() { + if (this.worker.terminate) { + this.worker.terminate(); + } + } + }, { + key: 'convertGwtStyleError', + value: function convertGwtStyleError(err) { + if (!err) { + return; + } + // Somewhat flatten the way GWT stores nested exception(s) + var javaException = err['__java$exception']; + if (javaException) { + // Note that the property name of the nested exception is different + // in the non-minified ('cause') and the minified (not deterministic) version. + // Hence, the version below only works for the non-minified version. + // However, as the minified stack trace is not of much use anyway, one + // should switch the used version for debugging in such a case. + if (javaException.cause && javaException.cause.backingJsObject) { + err.cause = javaException.cause.backingJsObject; + this.convertGwtStyleError(err.cause); + } + delete err['__java$exception']; + } + } + }]); + + return PromisedWorker; +}(); +},{}],2:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; + +// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- +var $wnd; +if (typeof window !== 'undefined') + $wnd = window +else if (typeof global !== 'undefined') + $wnd = global // nodejs +else if (typeof self !== 'undefined') + $wnd = self // web worker + +var $moduleName, + $moduleBase; + +// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- +var g, i, o; + +// -------------- GENERATED CODE -------------- +function nb(){} +function xb(){} +function Fd(){} +function $g(){} +function _p(){} +function yq(){} +function Sq(){} +function Es(){} +function Jw(){} +function Vw(){} +function VA(){} +function dA(){} +function MA(){} +function PA(){} +function PB(){} +function bx(){} +function cx(){} +function vy(){} +function Nz(){} +function Yz(){} +function Ylb(){} +function Ymb(){} +function xmb(){} +function Fmb(){} +function Qmb(){} +function gcb(){} +function ccb(){} +function jcb(){} +function jtb(){} +function otb(){} +function qtb(){} +function _fb(){} +function bpb(){} +function kpb(){} +function ppb(){} +function Gpb(){} +function drb(){} +function dzb(){} +function fzb(){} +function fxb(){} +function Vxb(){} +function Ovb(){} +function byb(){} +function zyb(){} +function Zyb(){} +function _yb(){} +function hzb(){} +function jzb(){} +function lzb(){} +function nzb(){} +function rzb(){} +function zzb(){} +function Czb(){} +function Ezb(){} +function Gzb(){} +function Izb(){} +function Mzb(){} +function bBb(){} +function NBb(){} +function PBb(){} +function RBb(){} +function iCb(){} +function OCb(){} +function SCb(){} +function GDb(){} +function JDb(){} +function fEb(){} +function xEb(){} +function CEb(){} +function GEb(){} +function yFb(){} +function KGb(){} +function tIb(){} +function vIb(){} +function xIb(){} +function zIb(){} +function OIb(){} +function SIb(){} +function TJb(){} +function VJb(){} +function XJb(){} +function XKb(){} +function fKb(){} +function VKb(){} +function VLb(){} +function jLb(){} +function nLb(){} +function GLb(){} +function KLb(){} +function MLb(){} +function OLb(){} +function RLb(){} +function YLb(){} +function bMb(){} +function gMb(){} +function lMb(){} +function pMb(){} +function wMb(){} +function zMb(){} +function CMb(){} +function FMb(){} +function LMb(){} +function zNb(){} +function PNb(){} +function kOb(){} +function pOb(){} +function tOb(){} +function yOb(){} +function FOb(){} +function GPb(){} +function aQb(){} +function cQb(){} +function eQb(){} +function gQb(){} +function iQb(){} +function CQb(){} +function MQb(){} +function OQb(){} +function ASb(){} +function fTb(){} +function kTb(){} +function STb(){} +function fUb(){} +function DUb(){} +function VUb(){} +function YUb(){} +function _Ub(){} +function _Wb(){} +function QWb(){} +function XWb(){} +function jVb(){} +function DVb(){} +function VVb(){} +function $Vb(){} +function dXb(){} +function hXb(){} +function lXb(){} +function gYb(){} +function HYb(){} +function SYb(){} +function VYb(){} +function dZb(){} +function P$b(){} +function T$b(){} +function h1b(){} +function m1b(){} +function q1b(){} +function u1b(){} +function y1b(){} +function C1b(){} +function e2b(){} +function g2b(){} +function m2b(){} +function q2b(){} +function u2b(){} +function S2b(){} +function U2b(){} +function W2b(){} +function _2b(){} +function e3b(){} +function h3b(){} +function p3b(){} +function t3b(){} +function w3b(){} +function y3b(){} +function A3b(){} +function M3b(){} +function Q3b(){} +function U3b(){} +function Y3b(){} +function l4b(){} +function q4b(){} +function s4b(){} +function u4b(){} +function w4b(){} +function y4b(){} +function L4b(){} +function N4b(){} +function P4b(){} +function R4b(){} +function T4b(){} +function X4b(){} +function I5b(){} +function Q5b(){} +function T5b(){} +function Z5b(){} +function l6b(){} +function o6b(){} +function t6b(){} +function z6b(){} +function L6b(){} +function M6b(){} +function P6b(){} +function X6b(){} +function $6b(){} +function a7b(){} +function c7b(){} +function g7b(){} +function j7b(){} +function m7b(){} +function r7b(){} +function x7b(){} +function D7b(){} +function D9b(){} +function b9b(){} +function h9b(){} +function j9b(){} +function l9b(){} +function w9b(){} +function F9b(){} +function hac(){} +function jac(){} +function pac(){} +function uac(){} +function Iac(){} +function Kac(){} +function Sac(){} +function obc(){} +function rbc(){} +function vbc(){} +function Fbc(){} +function Jbc(){} +function Xbc(){} +function ccc(){} +function fcc(){} +function lcc(){} +function occ(){} +function tcc(){} +function ycc(){} +function Acc(){} +function Ccc(){} +function Ecc(){} +function Gcc(){} +function Zcc(){} +function _cc(){} +function bdc(){} +function fdc(){} +function jdc(){} +function pdc(){} +function sdc(){} +function ydc(){} +function Adc(){} +function Cdc(){} +function Edc(){} +function Idc(){} +function Ndc(){} +function Qdc(){} +function Sdc(){} +function Udc(){} +function Wdc(){} +function Ydc(){} +function aec(){} +function hec(){} +function jec(){} +function lec(){} +function nec(){} +function uec(){} +function wec(){} +function yec(){} +function Aec(){} +function Fec(){} +function Jec(){} +function Lec(){} +function Nec(){} +function Rec(){} +function Uec(){} +function Zec(){} +function Zfc(){} +function lfc(){} +function tfc(){} +function xfc(){} +function zfc(){} +function Ffc(){} +function Jfc(){} +function Nfc(){} +function Pfc(){} +function Vfc(){} +function _fc(){} +function fgc(){} +function jgc(){} +function lgc(){} +function Bgc(){} +function ehc(){} +function ghc(){} +function ihc(){} +function khc(){} +function mhc(){} +function ohc(){} +function qhc(){} +function yhc(){} +function Ahc(){} +function Ghc(){} +function Ihc(){} +function Khc(){} +function Mhc(){} +function Shc(){} +function Uhc(){} +function Whc(){} +function dic(){} +function dlc(){} +function blc(){} +function flc(){} +function hlc(){} +function jlc(){} +function Glc(){} +function Ilc(){} +function Klc(){} +function Mlc(){} +function Mjc(){} +function Qjc(){} +function Qlc(){} +function Ulc(){} +function Ylc(){} +function Lkc(){} +function Nkc(){} +function Pkc(){} +function Rkc(){} +function Xkc(){} +function _kc(){} +function gmc(){} +function kmc(){} +function zmc(){} +function Fmc(){} +function Wmc(){} +function $mc(){} +function anc(){} +function mnc(){} +function wnc(){} +function Hnc(){} +function Jnc(){} +function Lnc(){} +function Nnc(){} +function Pnc(){} +function Ync(){} +function eoc(){} +function Aoc(){} +function Coc(){} +function Eoc(){} +function Joc(){} +function Loc(){} +function Zoc(){} +function _oc(){} +function bpc(){} +function hpc(){} +function kpc(){} +function ppc(){} +function pFc(){} +function Ryc(){} +function QCc(){} +function PDc(){} +function xGc(){} +function HGc(){} +function JGc(){} +function NGc(){} +function GIc(){} +function iKc(){} +function mKc(){} +function wKc(){} +function yKc(){} +function AKc(){} +function EKc(){} +function KKc(){} +function OKc(){} +function QKc(){} +function SKc(){} +function UKc(){} +function YKc(){} +function aLc(){} +function fLc(){} +function hLc(){} +function nLc(){} +function pLc(){} +function tLc(){} +function vLc(){} +function zLc(){} +function BLc(){} +function DLc(){} +function FLc(){} +function sMc(){} +function JMc(){} +function hNc(){} +function RNc(){} +function ZNc(){} +function _Nc(){} +function bOc(){} +function dOc(){} +function fOc(){} +function hOc(){} +function hRc(){} +function jRc(){} +function KRc(){} +function NRc(){} +function NQc(){} +function LQc(){} +function _Qc(){} +function cPc(){} +function iPc(){} +function kPc(){} +function mPc(){} +function xPc(){} +function zPc(){} +function zSc(){} +function BSc(){} +function GSc(){} +function ISc(){} +function NSc(){} +function TSc(){} +function NTc(){} +function NVc(){} +function oVc(){} +function SVc(){} +function VVc(){} +function XVc(){} +function ZVc(){} +function bWc(){} +function bXc(){} +function CXc(){} +function FXc(){} +function IXc(){} +function MXc(){} +function UXc(){} +function bYc(){} +function fYc(){} +function oYc(){} +function qYc(){} +function uYc(){} +function pZc(){} +function G$c(){} +function h0c(){} +function N0c(){} +function k1c(){} +function I1c(){} +function Q1c(){} +function f2c(){} +function i2c(){} +function k2c(){} +function w2c(){} +function O2c(){} +function S2c(){} +function Z2c(){} +function v3c(){} +function x3c(){} +function R3c(){} +function U3c(){} +function e4c(){} +function w4c(){} +function x4c(){} +function z4c(){} +function B4c(){} +function D4c(){} +function F4c(){} +function H4c(){} +function J4c(){} +function L4c(){} +function N4c(){} +function P4c(){} +function R4c(){} +function T4c(){} +function V4c(){} +function X4c(){} +function Z4c(){} +function _4c(){} +function _7c(){} +function b5c(){} +function d5c(){} +function f5c(){} +function h5c(){} +function H5c(){} +function Hfd(){} +function Zfd(){} +function Zed(){} +function ged(){} +function Jed(){} +function Ned(){} +function Red(){} +function Ved(){} +function bbd(){} +function mdd(){} +function _fd(){} +function fgd(){} +function kgd(){} +function Mgd(){} +function Ahd(){} +function Ald(){} +function Tld(){} +function xkd(){} +function rmd(){} +function knd(){} +function Jod(){} +function JCd(){} +function Bpd(){} +function BFd(){} +function oFd(){} +function bqd(){} +function bvd(){} +function jvd(){} +function yud(){} +function Hxd(){} +function EBd(){} +function aDd(){} +function MGd(){} +function vHd(){} +function RHd(){} +function wNd(){} +function zNd(){} +function CNd(){} +function KNd(){} +function XNd(){} +function $Nd(){} +function HPd(){} +function lUd(){} +function XUd(){} +function DWd(){} +function GWd(){} +function JWd(){} +function MWd(){} +function PWd(){} +function SWd(){} +function VWd(){} +function YWd(){} +function _Wd(){} +function xYd(){} +function BYd(){} +function mZd(){} +function EZd(){} +function GZd(){} +function JZd(){} +function MZd(){} +function PZd(){} +function SZd(){} +function VZd(){} +function YZd(){} +function _Zd(){} +function c$d(){} +function f$d(){} +function i$d(){} +function l$d(){} +function o$d(){} +function r$d(){} +function u$d(){} +function x$d(){} +function A$d(){} +function D$d(){} +function G$d(){} +function J$d(){} +function M$d(){} +function P$d(){} +function S$d(){} +function V$d(){} +function Y$d(){} +function _$d(){} +function c_d(){} +function f_d(){} +function i_d(){} +function l_d(){} +function o_d(){} +function r_d(){} +function u_d(){} +function x_d(){} +function A_d(){} +function D_d(){} +function G_d(){} +function J_d(){} +function M_d(){} +function P_d(){} +function S_d(){} +function V_d(){} +function Y_d(){} +function h5d(){} +function U6d(){} +function U9d(){} +function _8d(){} +function fae(){} +function hae(){} +function kae(){} +function nae(){} +function qae(){} +function tae(){} +function wae(){} +function zae(){} +function Cae(){} +function Fae(){} +function Iae(){} +function Lae(){} +function Oae(){} +function Rae(){} +function Uae(){} +function Xae(){} +function $ae(){} +function bbe(){} +function ebe(){} +function hbe(){} +function kbe(){} +function nbe(){} +function qbe(){} +function tbe(){} +function wbe(){} +function zbe(){} +function Cbe(){} +function Fbe(){} +function Ibe(){} +function Lbe(){} +function Obe(){} +function Rbe(){} +function Ube(){} +function Xbe(){} +function $be(){} +function bce(){} +function ece(){} +function hce(){} +function kce(){} +function nce(){} +function qce(){} +function tce(){} +function wce(){} +function zce(){} +function Cce(){} +function Fce(){} +function Ice(){} +function Lce(){} +function Oce(){} +function Rce(){} +function Uce(){} +function Xce(){} +function ude(){} +function Vge(){} +function dhe(){} +function s_b(a){} +function jSd(a){} +function ol(){wb()} +function oPb(){nPb()} +function EPb(){CPb()} +function gFb(){fFb()} +function TRb(){SRb()} +function ySb(){wSb()} +function PSb(){OSb()} +function dTb(){bTb()} +function i4b(){b4b()} +function D2b(){x2b()} +function J6b(){D6b()} +function u9b(){q9b()} +function $9b(){I9b()} +function Umc(){Imc()} +function abc(){Vac()} +function ZCc(){VCc()} +function kCc(){hCc()} +function rCc(){oCc()} +function Tcc(){Occ()} +function xkc(){gkc()} +function xDc(){rDc()} +function iDc(){cDc()} +function kwc(){jwc()} +function tJc(){jJc()} +function dJc(){aJc()} +function Pyc(){Nyc()} +function VBc(){SBc()} +function CFc(){yFc()} +function CUc(){wUc()} +function lUc(){fUc()} +function sUc(){pUc()} +function IUc(){GUc()} +function IWc(){HWc()} +function _Wc(){ZWc()} +function fHc(){dHc()} +function f0c(){d0c()} +function B0c(){A0c()} +function L0c(){J0c()} +function LTc(){JTc()} +function sTc(){rTc()} +function KLc(){ILc()} +function wNc(){tNc()} +function PYc(){OYc()} +function nZc(){lZc()} +function q3c(){p3c()} +function Z7c(){X7c()} +function Z9c(){Y9c()} +function _ad(){Zad()} +function kdd(){idd()} +function $md(){Smd()} +function HGd(){tGd()} +function hLd(){NKd()} +function J6d(){Uge()} +function Mvb(a){uCb(a)} +function Yb(a){this.a=a} +function cc(a){this.a=a} +function cj(a){this.a=a} +function ij(a){this.a=a} +function Dj(a){this.a=a} +function df(a){this.a=a} +function kf(a){this.a=a} +function ah(a){this.a=a} +function lh(a){this.a=a} +function th(a){this.a=a} +function Ph(a){this.a=a} +function vi(a){this.a=a} +function Ci(a){this.a=a} +function Fk(a){this.a=a} +function Ln(a){this.a=a} +function ap(a){this.a=a} +function zp(a){this.a=a} +function Yp(a){this.a=a} +function qq(a){this.a=a} +function Dq(a){this.a=a} +function wr(a){this.a=a} +function Ir(a){this.b=a} +function sj(a){this.c=a} +function sw(a){this.a=a} +function fw(a){this.a=a} +function xw(a){this.a=a} +function Cw(a){this.a=a} +function Qw(a){this.a=a} +function Rw(a){this.a=a} +function Xw(a){this.a=a} +function Xv(a){this.a=a} +function Sv(a){this.a=a} +function eu(a){this.a=a} +function Zx(a){this.a=a} +function _x(a){this.a=a} +function xy(a){this.a=a} +function xB(a){this.a=a} +function HB(a){this.a=a} +function TB(a){this.a=a} +function fC(a){this.a=a} +function wB(){this.a=[]} +function MBb(a,b){a.a=b} +function w_b(a,b){a.a=b} +function x_b(a,b){a.b=b} +function YOb(a,b){a.b=b} +function $Ob(a,b){a.b=b} +function ZGb(a,b){a.j=b} +function qNb(a,b){a.g=b} +function rNb(a,b){a.i=b} +function dRb(a,b){a.c=b} +function eRb(a,b){a.d=b} +function z_b(a,b){a.d=b} +function y_b(a,b){a.c=b} +function __b(a,b){a.k=b} +function E0b(a,b){a.c=b} +function njc(a,b){a.c=b} +function mjc(a,b){a.a=b} +function dFc(a,b){a.a=b} +function eFc(a,b){a.f=b} +function nOc(a,b){a.a=b} +function oOc(a,b){a.b=b} +function pOc(a,b){a.d=b} +function qOc(a,b){a.i=b} +function rOc(a,b){a.o=b} +function sOc(a,b){a.r=b} +function $Pc(a,b){a.a=b} +function _Pc(a,b){a.b=b} +function DVc(a,b){a.e=b} +function EVc(a,b){a.f=b} +function FVc(a,b){a.g=b} +function SZc(a,b){a.e=b} +function TZc(a,b){a.f=b} +function c$c(a,b){a.f=b} +function bJd(a,b){a.n=b} +function A1d(a,b){a.a=b} +function J1d(a,b){a.a=b} +function B1d(a,b){a.c=b} +function K1d(a,b){a.c=b} +function L1d(a,b){a.d=b} +function M1d(a,b){a.e=b} +function N1d(a,b){a.g=b} +function d2d(a,b){a.a=b} +function e2d(a,b){a.c=b} +function f2d(a,b){a.d=b} +function g2d(a,b){a.e=b} +function h2d(a,b){a.f=b} +function i2d(a,b){a.j=b} +function Z8d(a,b){a.a=b} +function $8d(a,b){a.b=b} +function g9d(a,b){a.a=b} +function Cic(a){a.b=a.a} +function Dg(a){a.c=a.d.d} +function vib(a){this.d=a} +function eib(a){this.a=a} +function Pib(a){this.a=a} +function Vib(a){this.a=a} +function $ib(a){this.a=a} +function mcb(a){this.a=a} +function Mcb(a){this.a=a} +function Xcb(a){this.a=a} +function Ndb(a){this.a=a} +function _db(a){this.a=a} +function teb(a){this.a=a} +function Qeb(a){this.a=a} +function djb(a){this.a=a} +function Gjb(a){this.a=a} +function Njb(a){this.a=a} +function Bjb(a){this.b=a} +function lnb(a){this.b=a} +function Dnb(a){this.b=a} +function anb(a){this.a=a} +function Mob(a){this.a=a} +function Rob(a){this.a=a} +function iob(a){this.c=a} +function olb(a){this.c=a} +function qub(a){this.c=a} +function Tub(a){this.a=a} +function Vub(a){this.a=a} +function Xub(a){this.a=a} +function Zub(a){this.a=a} +function tpb(a){this.a=a} +function _pb(a){this.a=a} +function Wqb(a){this.a=a} +function nsb(a){this.a=a} +function Rxb(a){this.a=a} +function Txb(a){this.a=a} +function Xxb(a){this.a=a} +function bzb(a){this.a=a} +function tzb(a){this.a=a} +function vzb(a){this.a=a} +function xzb(a){this.a=a} +function Kzb(a){this.a=a} +function Ozb(a){this.a=a} +function iAb(a){this.a=a} +function kAb(a){this.a=a} +function mAb(a){this.a=a} +function BAb(a){this.a=a} +function hBb(a){this.a=a} +function jBb(a){this.a=a} +function nBb(a){this.a=a} +function TBb(a){this.a=a} +function XBb(a){this.a=a} +function QCb(a){this.a=a} +function WCb(a){this.a=a} +function _Cb(a){this.a=a} +function dEb(a){this.a=a} +function QGb(a){this.a=a} +function YGb(a){this.a=a} +function tKb(a){this.a=a} +function CLb(a){this.a=a} +function JMb(a){this.a=a} +function RNb(a){this.a=a} +function kQb(a){this.a=a} +function mQb(a){this.a=a} +function FQb(a){this.a=a} +function ETb(a){this.a=a} +function UTb(a){this.a=a} +function dUb(a){this.a=a} +function hUb(a){this.a=a} +function EZb(a){this.a=a} +function j$b(a){this.a=a} +function v$b(a){this.e=a} +function J0b(a){this.a=a} +function M0b(a){this.a=a} +function R0b(a){this.a=a} +function U0b(a){this.a=a} +function i2b(a){this.a=a} +function k2b(a){this.a=a} +function o2b(a){this.a=a} +function s2b(a){this.a=a} +function G2b(a){this.a=a} +function I2b(a){this.a=a} +function K2b(a){this.a=a} +function M2b(a){this.a=a} +function W3b(a){this.a=a} +function $3b(a){this.a=a} +function V4b(a){this.a=a} +function u5b(a){this.a=a} +function A7b(a){this.a=a} +function G7b(a){this.a=a} +function J7b(a){this.a=a} +function M7b(a){this.a=a} +function Mbc(a){this.a=a} +function Pbc(a){this.a=a} +function lac(a){this.a=a} +function nac(a){this.a=a} +function qcc(a){this.a=a} +function Gdc(a){this.a=a} +function $dc(a){this.a=a} +function cec(a){this.a=a} +function _ec(a){this.a=a} +function pfc(a){this.a=a} +function Bfc(a){this.a=a} +function Lfc(a){this.a=a} +function ygc(a){this.a=a} +function Dgc(a){this.a=a} +function shc(a){this.a=a} +function uhc(a){this.a=a} +function whc(a){this.a=a} +function Chc(a){this.a=a} +function Ehc(a){this.a=a} +function Ohc(a){this.a=a} +function Yhc(a){this.a=a} +function Tkc(a){this.a=a} +function Vkc(a){this.a=a} +function Olc(a){this.a=a} +function pnc(a){this.a=a} +function rnc(a){this.a=a} +function dpc(a){this.a=a} +function fpc(a){this.a=a} +function GCc(a){this.a=a} +function KCc(a){this.a=a} +function mDc(a){this.a=a} +function jEc(a){this.a=a} +function HEc(a){this.a=a} +function FEc(a){this.c=a} +function qoc(a){this.b=a} +function bFc(a){this.a=a} +function GFc(a){this.a=a} +function iGc(a){this.a=a} +function kGc(a){this.a=a} +function mGc(a){this.a=a} +function $Gc(a){this.a=a} +function hIc(a){this.a=a} +function lIc(a){this.a=a} +function pIc(a){this.a=a} +function tIc(a){this.a=a} +function xIc(a){this.a=a} +function zIc(a){this.a=a} +function CIc(a){this.a=a} +function LIc(a){this.a=a} +function CKc(a){this.a=a} +function IKc(a){this.a=a} +function MKc(a){this.a=a} +function $Kc(a){this.a=a} +function cLc(a){this.a=a} +function jLc(a){this.a=a} +function rLc(a){this.a=a} +function xLc(a){this.a=a} +function OMc(a){this.a=a} +function ZOc(a){this.a=a} +function ZRc(a){this.a=a} +function aSc(a){this.a=a} +function I$c(a){this.a=a} +function K$c(a){this.a=a} +function M$c(a){this.a=a} +function O$c(a){this.a=a} +function U$c(a){this.a=a} +function n1c(a){this.a=a} +function z1c(a){this.a=a} +function B1c(a){this.a=a} +function Q2c(a){this.a=a} +function U2c(a){this.a=a} +function z3c(a){this.a=a} +function med(a){this.a=a} +function Xed(a){this.a=a} +function _ed(a){this.a=a} +function Qfd(a){this.a=a} +function Bgd(a){this.a=a} +function $gd(a){this.a=a} +function lrd(a){this.a=a} +function urd(a){this.a=a} +function vrd(a){this.a=a} +function wrd(a){this.a=a} +function xrd(a){this.a=a} +function yrd(a){this.a=a} +function zrd(a){this.a=a} +function Ard(a){this.a=a} +function Brd(a){this.a=a} +function Crd(a){this.a=a} +function Ird(a){this.a=a} +function Krd(a){this.a=a} +function Lrd(a){this.a=a} +function Mrd(a){this.a=a} +function Nrd(a){this.a=a} +function Prd(a){this.a=a} +function Srd(a){this.a=a} +function Yrd(a){this.a=a} +function Zrd(a){this.a=a} +function _rd(a){this.a=a} +function asd(a){this.a=a} +function bsd(a){this.a=a} +function csd(a){this.a=a} +function dsd(a){this.a=a} +function msd(a){this.a=a} +function osd(a){this.a=a} +function qsd(a){this.a=a} +function ssd(a){this.a=a} +function Wsd(a){this.a=a} +function Lsd(a){this.b=a} +function thd(a){this.f=a} +function qtd(a){this.a=a} +function yBd(a){this.a=a} +function GBd(a){this.a=a} +function MBd(a){this.a=a} +function SBd(a){this.a=a} +function iCd(a){this.a=a} +function YMd(a){this.a=a} +function GNd(a){this.a=a} +function EPd(a){this.a=a} +function EQd(a){this.a=a} +function NTd(a){this.a=a} +function qOd(a){this.b=a} +function lVd(a){this.c=a} +function VVd(a){this.e=a} +function iYd(a){this.a=a} +function RYd(a){this.a=a} +function ZYd(a){this.a=a} +function z0d(a){this.a=a} +function O0d(a){this.a=a} +function s0d(a){this.d=a} +function W5d(a){this.a=a} +function cge(a){this.a=a} +function xfe(a){this.e=a} +function Tfd(){this.a=0} +function jkb(){Vjb(this)} +function Rkb(){Ckb(this)} +function Lqb(){Uhb(this)} +function lEb(){kEb(this)} +function A_b(){s_b(this)} +function UQd(){this.c=FQd} +function v6d(a,b){b.Wb(a)} +function moc(a,b){a.b+=b} +function yXb(a){a.b=new Ji} +function vbb(a){return a.e} +function DB(a){return a.a} +function LB(a){return a.a} +function ZB(a){return a.a} +function lC(a){return a.a} +function EC(a){return a.a} +function wC(){return null} +function SB(){return null} +function hcb(){mvd();ovd()} +function zJb(a){a.b.tf(a.e)} +function j5b(a,b){a.b=b-a.b} +function g5b(a,b){a.a=b-a.a} +function PXc(a,b){b.ad(a.a)} +function plc(a,b){G0b(b,a)} +function hp(a,b,c){a.Od(c,b)} +function As(a,b){a.e=b;b.b=a} +function Zl(a){Ql();this.a=a} +function jq(a){Ql();this.a=a} +function sq(a){Ql();this.a=a} +function Fq(a){im();this.a=a} +function Sz(a){Rz();Qz.be(a)} +function gz(){Xy.call(this)} +function xcb(){Xy.call(this)} +function pcb(){gz.call(this)} +function tcb(){gz.call(this)} +function Bdb(){gz.call(this)} +function Vdb(){gz.call(this)} +function Ydb(){gz.call(this)} +function Geb(){gz.call(this)} +function bgb(){gz.call(this)} +function Apb(){gz.call(this)} +function Jpb(){gz.call(this)} +function utb(){gz.call(this)} +function x2c(){gz.call(this)} +function rQd(){this.a=this} +function MPd(){this.Bb|=256} +function tTb(){this.b=new mt} +function fA(){fA=ccb;new Lqb} +function rcb(){pcb.call(this)} +function dCb(a,b){a.length=b} +function Tvb(a,b){Ekb(a.a,b)} +function sKb(a,b){UHb(a.c,b)} +function SMc(a,b){Qqb(a.b,b)} +function vBd(a,b){uAd(a.a,b)} +function wBd(a,b){vAd(a.a,b)} +function GLd(a,b){Uhd(a.e,b)} +function d7d(a){D2d(a.c,a.b)} +function mj(a,b){a.kc().Nb(b)} +function Odb(a){this.a=Tdb(a)} +function Tqb(){this.a=new Lqb} +function gyb(){this.a=new Lqb} +function Wvb(){this.a=new Rkb} +function KFb(){this.a=new Rkb} +function PFb(){this.a=new Rkb} +function FFb(){this.a=new yFb} +function pGb(){this.a=new MFb} +function ZQb(){this.a=new MQb} +function Gxb(){this.a=new Pwb} +function jUb(){this.a=new PTb} +function sDb(){this.a=new oDb} +function zDb(){this.a=new tDb} +function CWb(){this.a=new Rkb} +function HXb(){this.a=new Rkb} +function nYb(){this.a=new Rkb} +function BYb(){this.a=new Rkb} +function fLb(){this.d=new Rkb} +function vYb(){this.a=new Tqb} +function a2b(){this.a=new Lqb} +function wZb(){this.b=new Lqb} +function TCc(){this.b=new Rkb} +function zJc(){this.e=new Rkb} +function uMc(){this.d=new Rkb} +function wdc(){this.a=new xkc} +function vKc(){Rkb.call(this)} +function twb(){Wvb.call(this)} +function oHb(){$Gb.call(this)} +function LXb(){HXb.call(this)} +function L_b(){H_b.call(this)} +function H_b(){A_b.call(this)} +function p0b(){A_b.call(this)} +function s0b(){p0b.call(this)} +function WMc(){VMc.call(this)} +function bNc(){VMc.call(this)} +function EPc(){CPc.call(this)} +function JPc(){CPc.call(this)} +function OPc(){CPc.call(this)} +function w1c(){s1c.call(this)} +function s7c(){Psb.call(this)} +function apd(){Ald.call(this)} +function ppd(){Ald.call(this)} +function lDd(){YCd.call(this)} +function NDd(){YCd.call(this)} +function mFd(){Lqb.call(this)} +function vFd(){Lqb.call(this)} +function GFd(){Lqb.call(this)} +function KPd(){Tqb.call(this)} +function OJd(){hJd.call(this)} +function aQd(){MPd.call(this)} +function SSd(){FId.call(this)} +function rUd(){FId.call(this)} +function oUd(){Lqb.call(this)} +function NYd(){Lqb.call(this)} +function cZd(){Lqb.call(this)} +function R8d(){MGd.call(this)} +function o9d(){MGd.call(this)} +function i9d(){R8d.call(this)} +function hee(){ude.call(this)} +function Dd(a){yd.call(this,a)} +function Hd(a){yd.call(this,a)} +function ph(a){lh.call(this,a)} +function Sh(a){Wc.call(this,a)} +function oi(a){Sh.call(this,a)} +function Ii(a){Wc.call(this,a)} +function Zdd(){this.a=new Psb} +function CPc(){this.a=new Tqb} +function s1c(){this.a=new Lqb} +function QSc(){this.a=new Rkb} +function D2c(){this.j=new Rkb} +function QXc(){this.a=new UXc} +function e_c(){this.a=new d_c} +function YCd(){this.a=new aDd} +function _k(){_k=ccb;$k=new al} +function Lk(){Lk=ccb;Kk=new Mk} +function wb(){wb=ccb;vb=new xb} +function hs(){hs=ccb;gs=new is} +function rs(a){Sh.call(this,a)} +function Gp(a){Sh.call(this,a)} +function xp(a){Lo.call(this,a)} +function Ep(a){Lo.call(this,a)} +function Tp(a){Wn.call(this,a)} +function wx(a){un.call(this,a)} +function ov(a){dv.call(this,a)} +function Mv(a){Br.call(this,a)} +function Ov(a){Br.call(this,a)} +function Lw(a){Br.call(this,a)} +function hz(a){Yy.call(this,a)} +function MB(a){hz.call(this,a)} +function eC(){fC.call(this,{})} +function Ftb(a){Atb();this.a=a} +function zwb(a){a.b=null;a.c=0} +function Vy(a,b){a.e=b;Sy(a,b)} +function LVb(a,b){a.a=b;NVb(a)} +function lIb(a,b,c){a.a[b.g]=c} +function vfd(a,b,c){Dfd(c,a,b)} +function Odc(a,b){rjc(b.i,a.n)} +function Wyc(a,b){Xyc(a).td(b)} +function ERb(a,b){return a*a/b} +function Xr(a,b){return a.g-b.g} +function tC(a){return new TB(a)} +function vC(a){return new yC(a)} +function ocb(a){hz.call(this,a)} +function qcb(a){hz.call(this,a)} +function ucb(a){hz.call(this,a)} +function vcb(a){Yy.call(this,a)} +function fGc(a){LFc();this.a=a} +function c0d(a){kzd();this.a=a} +function bhd(a){Rgd();this.f=a} +function dhd(a){Rgd();this.f=a} +function Cdb(a){hz.call(this,a)} +function Wdb(a){hz.call(this,a)} +function Zdb(a){hz.call(this,a)} +function Feb(a){hz.call(this,a)} +function Heb(a){hz.call(this,a)} +function Ccb(a){return uCb(a),a} +function Edb(a){return uCb(a),a} +function Gdb(a){return uCb(a),a} +function jfb(a){return uCb(a),a} +function tfb(a){return uCb(a),a} +function akb(a){return a.b==a.c} +function Hwb(a){return !!a&&a.b} +function pIb(a){return !!a&&a.k} +function qIb(a){return !!a&&a.j} +function amb(a){uCb(a);this.a=a} +function wVb(a){qVb(a);return a} +function Blb(a){Glb(a,a.length)} +function cgb(a){hz.call(this,a)} +function cqd(a){hz.call(this,a)} +function n8d(a){hz.call(this,a)} +function y2c(a){hz.call(this,a)} +function z2c(a){hz.call(this,a)} +function mde(a){hz.call(this,a)} +function pc(a){qc.call(this,a,0)} +function Ji(){Ki.call(this,12,3)} +function Kz(){Kz=ccb;Jz=new Nz} +function jz(){jz=ccb;iz=new nb} +function KA(){KA=ccb;JA=new MA} +function OB(){OB=ccb;NB=new PB} +function jc(){throw vbb(new bgb)} +function zh(){throw vbb(new bgb)} +function Pi(){throw vbb(new bgb)} +function Pj(){throw vbb(new bgb)} +function Qj(){throw vbb(new bgb)} +function Ym(){throw vbb(new bgb)} +function Gb(){this.a=GD(Qb(She))} +function oy(a){Ql();this.a=Qb(a)} +function Bs(a,b){a.Td(b);b.Sd(a)} +function iw(a,b){a.a.ec().Mc(b)} +function CYb(a,b,c){a.c.lf(b,c)} +function scb(a){qcb.call(this,a)} +function Oeb(a){Wdb.call(this,a)} +function Hfb(){mcb.call(this,'')} +function Ifb(){mcb.call(this,'')} +function Ufb(){mcb.call(this,'')} +function Vfb(){mcb.call(this,'')} +function Xfb(a){qcb.call(this,a)} +function zob(a){lnb.call(this,a)} +function Yob(a){Inb.call(this,a)} +function Gob(a){zob.call(this,a)} +function Mk(){Fk.call(this,null)} +function al(){Fk.call(this,null)} +function Az(){Az=ccb;!!(Rz(),Qz)} +function wrb(){wrb=ccb;vrb=yrb()} +function Mtb(a){return a.a?a.b:0} +function Vtb(a){return a.a?a.b:0} +function Lcb(a,b){return a.a-b.a} +function Wcb(a,b){return a.a-b.a} +function Peb(a,b){return a.a-b.a} +function eCb(a,b){return PC(a,b)} +function GC(a,b){return rdb(a,b)} +function _B(b,a){return a in b.a} +function _Db(a,b){a.f=b;return a} +function ZDb(a,b){a.b=b;return a} +function $Db(a,b){a.c=b;return a} +function aEb(a,b){a.g=b;return a} +function HGb(a,b){a.a=b;return a} +function IGb(a,b){a.f=b;return a} +function JGb(a,b){a.k=b;return a} +function dLb(a,b){a.a=b;return a} +function eLb(a,b){a.e=b;return a} +function zVb(a,b){a.e=b;return a} +function AVb(a,b){a.f=b;return a} +function KOb(a,b){a.b=true;a.d=b} +function DHb(a,b){a.b=new g7c(b)} +function uvb(a,b,c){b.td(a.a[c])} +function zvb(a,b,c){b.we(a.a[c])} +function wJc(a,b){return a.b-b.b} +function kOc(a,b){return a.g-b.g} +function WQc(a,b){return a.s-b.s} +function Lic(a,b){return a?0:b-1} +function SFc(a,b){return a?0:b-1} +function RFc(a,b){return a?b-1:0} +function M2c(a,b){return b.Yf(a)} +function M3c(a,b){a.b=b;return a} +function L3c(a,b){a.a=b;return a} +function N3c(a,b){a.c=b;return a} +function O3c(a,b){a.d=b;return a} +function P3c(a,b){a.e=b;return a} +function Q3c(a,b){a.f=b;return a} +function b4c(a,b){a.a=b;return a} +function c4c(a,b){a.b=b;return a} +function d4c(a,b){a.c=b;return a} +function z5c(a,b){a.c=b;return a} +function y5c(a,b){a.b=b;return a} +function A5c(a,b){a.d=b;return a} +function B5c(a,b){a.e=b;return a} +function C5c(a,b){a.f=b;return a} +function D5c(a,b){a.g=b;return a} +function E5c(a,b){a.a=b;return a} +function F5c(a,b){a.i=b;return a} +function G5c(a,b){a.j=b;return a} +function Vdd(a,b){a.k=b;return a} +function Wdd(a,b){a.j=b;return a} +function ykc(a,b){gkc();F0b(b,a)} +function T$c(a,b,c){R$c(a.a,b,c)} +function RGc(a){cEc.call(this,a)} +function iHc(a){cEc.call(this,a)} +function t7c(a){Qsb.call(this,a)} +function aPb(a){_Ob.call(this,a)} +function Ixd(a){zud.call(this,a)} +function dCd(a){ZBd.call(this,a)} +function fCd(a){ZBd.call(this,a)} +function p_b(){q_b.call(this,'')} +function d7c(){this.a=0;this.b=0} +function aPc(){this.b=0;this.a=0} +function NJd(a,b){a.b=0;DId(a,b)} +function X1d(a,b){a.c=b;a.b=true} +function Oc(a,b){return a.c._b(b)} +function gdb(a){return a.e&&a.e()} +function Vd(a){return !a?null:a.d} +function sn(a,b){return Gv(a.b,b)} +function Fv(a){return !a?null:a.g} +function Kv(a){return !a?null:a.i} +function hdb(a){fdb(a);return a.o} +function Fhd(){Fhd=ccb;Ehd=ond()} +function Hhd(){Hhd=ccb;Ghd=Cod()} +function LFd(){LFd=ccb;KFd=qZd()} +function p8d(){p8d=ccb;o8d=Y9d()} +function r8d(){r8d=ccb;q8d=dae()} +function mvd(){mvd=ccb;lvd=n4c()} +function Srb(){throw vbb(new bgb)} +function enb(){throw vbb(new bgb)} +function fnb(){throw vbb(new bgb)} +function gnb(){throw vbb(new bgb)} +function jnb(){throw vbb(new bgb)} +function Cnb(){throw vbb(new bgb)} +function Uqb(a){this.a=new Mqb(a)} +function tgb(a){lgb();ngb(this,a)} +function Hxb(a){this.a=new Qwb(a)} +function _ub(a,b){while(a.ye(b));} +function Sub(a,b){while(a.sd(b));} +function Bfb(a,b){a.a+=b;return a} +function Cfb(a,b){a.a+=b;return a} +function Ffb(a,b){a.a+=b;return a} +function Lfb(a,b){a.a+=b;return a} +function WAb(a){Tzb(a);return a.a} +function Wsb(a){return a.b!=a.d.c} +function pD(a){return a.l|a.m<<22} +function aIc(a,b){return a.d[b.p]} +function h2c(a,b){return c2c(a,b)} +function cCb(a,b,c){a.splice(b,c)} +function WHb(a){a.c?VHb(a):XHb(a)} +function jVc(a){this.a=0;this.b=a} +function ZUc(){this.a=new L2c(K$)} +function tRc(){this.b=new L2c(h$)} +function Q$c(){this.b=new L2c(J_)} +function d_c(){this.b=new L2c(J_)} +function OCd(){throw vbb(new bgb)} +function PCd(){throw vbb(new bgb)} +function QCd(){throw vbb(new bgb)} +function RCd(){throw vbb(new bgb)} +function SCd(){throw vbb(new bgb)} +function TCd(){throw vbb(new bgb)} +function UCd(){throw vbb(new bgb)} +function VCd(){throw vbb(new bgb)} +function WCd(){throw vbb(new bgb)} +function XCd(){throw vbb(new bgb)} +function ahe(){throw vbb(new utb)} +function bhe(){throw vbb(new utb)} +function Rge(a){this.a=new ege(a)} +function ege(a){dge(this,a,Vee())} +function Fhe(a){return !a||Ehe(a)} +function dde(a){return $ce[a]!=-1} +function Iz(){xz!=0&&(xz=0);zz=-1} +function Ybb(){Wbb==null&&(Wbb=[])} +function ONd(a,b){Rxd(ZKd(a.a),b)} +function TNd(a,b){Rxd(ZKd(a.a),b)} +function Yf(a,b){zf.call(this,a,b)} +function $f(a,b){Yf.call(this,a,b)} +function Hf(a,b){this.b=a;this.c=b} +function rk(a,b){this.b=a;this.a=b} +function ek(a,b){this.a=a;this.b=b} +function gk(a,b){this.a=a;this.b=b} +function pk(a,b){this.a=a;this.b=b} +function yk(a,b){this.a=a;this.b=b} +function Ak(a,b){this.a=a;this.b=b} +function Fj(a,b){this.a=a;this.b=b} +function _j(a,b){this.a=a;this.b=b} +function dr(a,b){this.a=a;this.b=b} +function zr(a,b){this.b=a;this.a=b} +function So(a,b){this.b=a;this.a=b} +function qp(a,b){this.b=a;this.a=b} +function $q(a,b){this.b=a;this.a=b} +function $r(a,b){this.f=a;this.g=b} +function ne(a,b){this.e=a;this.d=b} +function Wo(a,b){this.g=a;this.i=b} +function bu(a,b){this.a=a;this.b=b} +function qu(a,b){this.a=a;this.f=b} +function qv(a,b){this.b=a;this.c=b} +function ox(a,b){this.a=a;this.b=b} +function Px(a,b){this.a=a;this.b=b} +function mC(a,b){this.a=a;this.b=b} +function Wc(a){Lb(a.dc());this.c=a} +function rf(a){this.b=BD(Qb(a),83)} +function Zv(a){this.a=BD(Qb(a),83)} +function dv(a){this.a=BD(Qb(a),15)} +function $u(a){this.a=BD(Qb(a),15)} +function Br(a){this.b=BD(Qb(a),47)} +function eB(){this.q=new $wnd.Date} +function Zfb(){Zfb=ccb;Yfb=new jcb} +function Emb(){Emb=ccb;Dmb=new Fmb} +function Vhb(a){return a.f.c+a.g.c} +function hnb(a,b){return a.b.Hc(b)} +function inb(a,b){return a.b.Ic(b)} +function knb(a,b){return a.b.Qc(b)} +function Dob(a,b){return a.b.Hc(b)} +function dob(a,b){return a.c.uc(b)} +function Rqb(a,b){return a.a._b(b)} +function fob(a,b){return pb(a.c,b)} +function jt(a,b){return Mhb(a.b,b)} +function Lp(a,b){return a>b&&b0} +function Gbb(a,b){return ybb(a,b)<0} +function Crb(a,b){return a.a.get(b)} +function icb(b,a){return a.split(b)} +function Vrb(a,b){return Mhb(a.e,b)} +function Nvb(a){return uCb(a),false} +function Rub(a){Kub.call(this,a,21)} +function wcb(a,b){Zy.call(this,a,b)} +function mxb(a,b){$r.call(this,a,b)} +function Gyb(a,b){$r.call(this,a,b)} +function zx(a){yx();Wn.call(this,a)} +function zlb(a,b){Dlb(a,a.length,b)} +function Alb(a,b){Flb(a,a.length,b)} +function ABb(a,b,c){b.ud(a.a.Ge(c))} +function uBb(a,b,c){b.we(a.a.Fe(c))} +function GBb(a,b,c){b.td(a.a.Kb(c))} +function Zq(a,b,c){a.Mb(c)&&b.td(c)} +function aCb(a,b,c){a.splice(b,0,c)} +function lDb(a,b){return uqb(a.e,b)} +function pjb(a,b){this.d=a;this.e=b} +function kqb(a,b){this.b=a;this.a=b} +function VBb(a,b){this.b=a;this.a=b} +function BEb(a,b){this.b=a;this.a=b} +function sBb(a,b){this.a=a;this.b=b} +function yBb(a,b){this.a=a;this.b=b} +function EBb(a,b){this.a=a;this.b=b} +function KBb(a,b){this.a=a;this.b=b} +function aDb(a,b){this.a=a;this.b=b} +function tMb(a,b){this.b=a;this.a=b} +function oOb(a,b){this.b=a;this.a=b} +function SOb(a,b){$r.call(this,a,b)} +function SMb(a,b){$r.call(this,a,b)} +function NEb(a,b){$r.call(this,a,b)} +function VEb(a,b){$r.call(this,a,b)} +function sFb(a,b){$r.call(this,a,b)} +function hHb(a,b){$r.call(this,a,b)} +function OHb(a,b){$r.call(this,a,b)} +function FIb(a,b){$r.call(this,a,b)} +function wLb(a,b){$r.call(this,a,b)} +function YRb(a,b){$r.call(this,a,b)} +function zTb(a,b){$r.call(this,a,b)} +function rUb(a,b){$r.call(this,a,b)} +function oWb(a,b){$r.call(this,a,b)} +function SXb(a,b){$r.call(this,a,b)} +function k0b(a,b){$r.call(this,a,b)} +function z5b(a,b){$r.call(this,a,b)} +function T8b(a,b){$r.call(this,a,b)} +function ibc(a,b){$r.call(this,a,b)} +function Cec(a,b){this.a=a;this.b=b} +function rfc(a,b){this.a=a;this.b=b} +function Rfc(a,b){this.a=a;this.b=b} +function Tfc(a,b){this.a=a;this.b=b} +function bgc(a,b){this.a=a;this.b=b} +function ngc(a,b){this.a=a;this.b=b} +function Qhc(a,b){this.a=a;this.b=b} +function $hc(a,b){this.a=a;this.b=b} +function Z0b(a,b){this.a=a;this.b=b} +function ZVb(a,b){this.b=a;this.a=b} +function Dfc(a,b){this.b=a;this.a=b} +function dgc(a,b){this.b=a;this.a=b} +function Bmc(a,b){this.b=a;this.a=b} +function cWb(a,b){this.c=a;this.d=b} +function I$b(a,b){this.e=a;this.d=b} +function Unc(a,b){this.a=a;this.b=b} +function Oic(a,b){this.b=b;this.c=a} +function Bjc(a,b){$r.call(this,a,b)} +function Yjc(a,b){$r.call(this,a,b)} +function Gkc(a,b){$r.call(this,a,b)} +function Bpc(a,b){$r.call(this,a,b)} +function Jpc(a,b){$r.call(this,a,b)} +function Tpc(a,b){$r.call(this,a,b)} +function cqc(a,b){$r.call(this,a,b)} +function oqc(a,b){$r.call(this,a,b)} +function yqc(a,b){$r.call(this,a,b)} +function Hqc(a,b){$r.call(this,a,b)} +function Uqc(a,b){$r.call(this,a,b)} +function arc(a,b){$r.call(this,a,b)} +function mrc(a,b){$r.call(this,a,b)} +function zrc(a,b){$r.call(this,a,b)} +function Prc(a,b){$r.call(this,a,b)} +function Yrc(a,b){$r.call(this,a,b)} +function fsc(a,b){$r.call(this,a,b)} +function nsc(a,b){$r.call(this,a,b)} +function nzc(a,b){$r.call(this,a,b)} +function zzc(a,b){$r.call(this,a,b)} +function Kzc(a,b){$r.call(this,a,b)} +function Xzc(a,b){$r.call(this,a,b)} +function Dtc(a,b){$r.call(this,a,b)} +function lAc(a,b){$r.call(this,a,b)} +function uAc(a,b){$r.call(this,a,b)} +function CAc(a,b){$r.call(this,a,b)} +function LAc(a,b){$r.call(this,a,b)} +function UAc(a,b){$r.call(this,a,b)} +function aBc(a,b){$r.call(this,a,b)} +function uBc(a,b){$r.call(this,a,b)} +function DBc(a,b){$r.call(this,a,b)} +function MBc(a,b){$r.call(this,a,b)} +function sGc(a,b){$r.call(this,a,b)} +function VIc(a,b){$r.call(this,a,b)} +function EIc(a,b){this.b=a;this.a=b} +function qKc(a,b){this.a=a;this.b=b} +function GKc(a,b){this.a=a;this.b=b} +function lLc(a,b){this.a=a;this.b=b} +function mMc(a,b){this.a=a;this.b=b} +function fMc(a,b){$r.call(this,a,b)} +function ZLc(a,b){$r.call(this,a,b)} +function ZMc(a,b){this.b=a;this.d=b} +function IOc(a,b){$r.call(this,a,b)} +function GQc(a,b){$r.call(this,a,b)} +function PQc(a,b){this.a=a;this.b=b} +function RQc(a,b){this.a=a;this.b=b} +function ARc(a,b){$r.call(this,a,b)} +function rSc(a,b){$r.call(this,a,b)} +function TTc(a,b){$r.call(this,a,b)} +function _Tc(a,b){$r.call(this,a,b)} +function RUc(a,b){$r.call(this,a,b)} +function uVc(a,b){$r.call(this,a,b)} +function hWc(a,b){$r.call(this,a,b)} +function rWc(a,b){$r.call(this,a,b)} +function kXc(a,b){$r.call(this,a,b)} +function uXc(a,b){$r.call(this,a,b)} +function AYc(a,b){$r.call(this,a,b)} +function l$c(a,b){$r.call(this,a,b)} +function Z$c(a,b){$r.call(this,a,b)} +function D_c(a,b){$r.call(this,a,b)} +function O_c(a,b){$r.call(this,a,b)} +function c1c(a,b){$r.call(this,a,b)} +function cVb(a,b){return uqb(a.c,b)} +function nnc(a,b){return uqb(b.b,a)} +function x1c(a,b){return -a.b.Je(b)} +function D3c(a,b){return uqb(a.g,b)} +function O5c(a,b){$r.call(this,a,b)} +function a6c(a,b){$r.call(this,a,b)} +function m2c(a,b){this.a=a;this.b=b} +function W2c(a,b){this.a=a;this.b=b} +function f7c(a,b){this.a=a;this.b=b} +function G7c(a,b){$r.call(this,a,b)} +function j8c(a,b){$r.call(this,a,b)} +function iad(a,b){$r.call(this,a,b)} +function rad(a,b){$r.call(this,a,b)} +function Bad(a,b){$r.call(this,a,b)} +function Nad(a,b){$r.call(this,a,b)} +function ibd(a,b){$r.call(this,a,b)} +function tbd(a,b){$r.call(this,a,b)} +function Ibd(a,b){$r.call(this,a,b)} +function Ubd(a,b){$r.call(this,a,b)} +function gcd(a,b){$r.call(this,a,b)} +function scd(a,b){$r.call(this,a,b)} +function Ycd(a,b){$r.call(this,a,b)} +function udd(a,b){$r.call(this,a,b)} +function Jdd(a,b){$r.call(this,a,b)} +function Eed(a,b){$r.call(this,a,b)} +function bfd(a,b){this.a=a;this.b=b} +function dfd(a,b){this.a=a;this.b=b} +function ffd(a,b){this.a=a;this.b=b} +function Kfd(a,b){this.a=a;this.b=b} +function Mfd(a,b){this.a=a;this.b=b} +function Ofd(a,b){this.a=a;this.b=b} +function vgd(a,b){this.a=a;this.b=b} +function qgd(a,b){$r.call(this,a,b)} +function jrd(a,b){this.a=a;this.b=b} +function krd(a,b){this.a=a;this.b=b} +function mrd(a,b){this.a=a;this.b=b} +function nrd(a,b){this.a=a;this.b=b} +function qrd(a,b){this.a=a;this.b=b} +function rrd(a,b){this.a=a;this.b=b} +function srd(a,b){this.b=a;this.a=b} +function trd(a,b){this.b=a;this.a=b} +function Drd(a,b){this.b=a;this.a=b} +function Frd(a,b){this.b=a;this.a=b} +function Hrd(a,b){this.a=a;this.b=b} +function Jrd(a,b){this.a=a;this.b=b} +function Ord(a,b){Xqd(a.a,BD(b,56))} +function BIc(a,b){gIc(a.a,BD(b,11))} +function fIc(a,b){FHc();return b!=a} +function Arb(){wrb();return new vrb} +function CMc(){wMc();this.b=new Tqb} +function NNc(){FNc();this.a=new Tqb} +function eCc(){ZBc();aCc.call(this)} +function Dsd(a,b){$r.call(this,a,b)} +function Urd(a,b){this.a=a;this.b=b} +function Wrd(a,b){this.a=a;this.b=b} +function kGd(a,b){this.a=a;this.b=b} +function nGd(a,b){this.a=a;this.b=b} +function bUd(a,b){this.a=a;this.b=b} +function zVd(a,b){this.a=a;this.b=b} +function C1d(a,b){this.d=a;this.b=b} +function MLd(a,b){this.d=a;this.e=b} +function Wud(a,b){this.f=a;this.c=b} +function f7d(a,b){this.b=a;this.c=b} +function _zd(a,b){this.i=a;this.g=b} +function Y1d(a,b){this.e=a;this.a=b} +function c8d(a,b){this.a=a;this.b=b} +function $Id(a,b){a.i=null;_Id(a,b)} +function ivd(a,b){!!a&&Rhb(cvd,a,b)} +function hCd(a,b){return qAd(a.a,b)} +function e7d(a){return R2d(a.c,a.b)} +function Wd(a){return !a?null:a.dd()} +function PD(a){return a==null?null:a} +function KD(a){return typeof a===Khe} +function LD(a){return typeof a===Lhe} +function ND(a){return typeof a===Mhe} +function Em(a,b){return a.Hd().Xb(b)} +function Kq(a,b){return hr(a.Kc(),b)} +function Bbb(a,b){return ybb(a,b)==0} +function Ebb(a,b){return ybb(a,b)>=0} +function Kbb(a,b){return ybb(a,b)!=0} +function Jdb(a){return ''+(uCb(a),a)} +function pfb(a,b){return a.substr(b)} +function cg(a){ag(a);return a.d.gc()} +function oVb(a){pVb(a,a.c);return a} +function RD(a){CCb(a==null);return a} +function Dfb(a,b){a.a+=''+b;return a} +function Efb(a,b){a.a+=''+b;return a} +function Nfb(a,b){a.a+=''+b;return a} +function Pfb(a,b){a.a+=''+b;return a} +function Qfb(a,b){a.a+=''+b;return a} +function Mfb(a,b){return a.a+=''+b,a} +function Esb(a,b){Gsb(a,b,a.a,a.a.a)} +function Fsb(a,b){Gsb(a,b,a.c.b,a.c)} +function Mqd(a,b,c){Rpd(b,kqd(a,c))} +function Nqd(a,b,c){Rpd(b,kqd(a,c))} +function Dhe(a,b){Hhe(new Fyd(a),b)} +function cB(a,b){a.q.setTime(Sbb(b))} +function fvb(a,b){bvb.call(this,a,b)} +function jvb(a,b){bvb.call(this,a,b)} +function nvb(a,b){bvb.call(this,a,b)} +function Nqb(a){Uhb(this);Ld(this,a)} +function wmb(a){tCb(a,0);return null} +function X6c(a){a.a=0;a.b=0;return a} +function f3c(a,b){a.a=b.g+1;return a} +function PJc(a,b){return a.j[b.p]==2} +function _Pb(a){return VPb(BD(a,79))} +function yJb(){yJb=ccb;xJb=as(wJb())} +function Y8b(){Y8b=ccb;X8b=as(W8b())} +function mt(){this.b=new Mqb(Cv(12))} +function Otb(){this.b=0;this.a=false} +function Wtb(){this.b=0;this.a=false} +function sl(a){this.a=a;ol.call(this)} +function vl(a){this.a=a;ol.call(this)} +function Nsd(a,b){Msd.call(this,a,b)} +function $zd(a,b){Cyd.call(this,a,b)} +function nNd(a,b){_zd.call(this,a,b)} +function s4d(a,b){p4d.call(this,a,b)} +function w4d(a,b){qRd.call(this,a,b)} +function rEd(a,b){pEd();Rhb(oEd,a,b)} +function lcb(a,b){return qfb(a.a,0,b)} +function ww(a,b){return a.a.a.a.cc(b)} +function mb(a,b){return PD(a)===PD(b)} +function Mdb(a,b){return Kdb(a.a,b.a)} +function $db(a,b){return beb(a.a,b.a)} +function seb(a,b){return ueb(a.a,b.a)} +function hfb(a,b){return a.indexOf(b)} +function Ny(a,b){return a==b?0:a?1:-1} +function kB(a){return a<10?'0'+a:''+a} +function Mq(a){return Qb(a),new sl(a)} +function SC(a){return TC(a.l,a.m,a.h)} +function Hdb(a){return QD((uCb(a),a))} +function Idb(a){return QD((uCb(a),a))} +function NIb(a,b){return beb(a.g,b.g)} +function Fbb(a){return typeof a===Lhe} +function mWb(a){return a==hWb||a==kWb} +function nWb(a){return a==hWb||a==iWb} +function G1b(a){return Jkb(a.b.b,a,0)} +function lrb(a){this.a=Arb();this.b=a} +function Frb(a){this.a=Arb();this.b=a} +function swb(a,b){Ekb(a.a,b);return b} +function Z1c(a,b){Ekb(a.c,b);return a} +function E2c(a,b){d3c(a.a,b);return a} +function _gc(a,b){Hgc();return b.a+=a} +function bhc(a,b){Hgc();return b.a+=a} +function ahc(a,b){Hgc();return b.c+=a} +function Nlb(a,b){Klb(a,0,a.length,b)} +function zsb(){Wqb.call(this,new $rb)} +function I_b(){B_b.call(this,0,0,0,0)} +function I6c(){J6c.call(this,0,0,0,0)} +function g7c(a){this.a=a.a;this.b=a.b} +function fad(a){return a==aad||a==bad} +function gad(a){return a==dad||a==_9c} +function Jzc(a){return a==Fzc||a==Ezc} +function fcd(a){return a!=bcd&&a!=ccd} +function oid(a){return a.Lg()&&a.Mg()} +function Gfd(a){return Kkd(BD(a,118))} +function k3c(a){return d3c(new j3c,a)} +function y2d(a,b){return new p4d(b,a)} +function z2d(a,b){return new p4d(b,a)} +function ukd(a,b,c){vkd(a,b);wkd(a,c)} +function _kd(a,b,c){cld(a,b);ald(a,c)} +function bld(a,b,c){dld(a,b);eld(a,c)} +function gmd(a,b,c){hmd(a,b);imd(a,c)} +function nmd(a,b,c){omd(a,b);pmd(a,c)} +function iKd(a,b){$Jd(a,b);_Jd(a,a.D)} +function _ud(a){Wud.call(this,a,true)} +function Xg(a,b,c){Vg.call(this,a,b,c)} +function Ygb(a){Hgb();Zgb.call(this,a)} +function rxb(){mxb.call(this,'Head',1)} +function wxb(){mxb.call(this,'Tail',3)} +function Ckb(a){a.c=KC(SI,Uhe,1,0,5,1)} +function Vjb(a){a.a=KC(SI,Uhe,1,8,5,1)} +function MGb(a){Hkb(a.xf(),new QGb(a))} +function xtb(a){return a!=null?tb(a):0} +function b2b(a,b){return ntd(b,mpd(a))} +function c2b(a,b){return ntd(b,mpd(a))} +function dAb(a,b){return a[a.length]=b} +function gAb(a,b){return a[a.length]=b} +function Vq(a){return lr(a.b.Kc(),a.a)} +function dqd(a,b){return _o(qo(a.d),b)} +function eqd(a,b){return _o(qo(a.g),b)} +function fqd(a,b){return _o(qo(a.j),b)} +function Osd(a,b){Msd.call(this,a.b,b)} +function q0b(a){B_b.call(this,a,a,a,a)} +function HOb(a){a.b&&LOb(a);return a.a} +function IOb(a){a.b&&LOb(a);return a.c} +function uyb(a,b){if(lyb){return}a.b=b} +function lzd(a,b,c){NC(a,b,c);return c} +function mBc(a,b,c){NC(a.c[b.g],b.g,c)} +function _Hd(a,b,c){BD(a.c,69).Xh(b,c)} +function wfd(a,b,c){bld(c,c.i+a,c.j+b)} +function UOd(a,b){wtd(VKd(a.a),XOd(b))} +function bTd(a,b){wtd(QSd(a.a),eTd(b))} +function Lge(a){wfe();xfe.call(this,a)} +function CAd(a){return a==null?0:tb(a)} +function fNc(){fNc=ccb;eNc=new Rpb(v1)} +function h0d(){h0d=ccb;new i0d;new Rkb} +function i0d(){new Lqb;new Lqb;new Lqb} +function GA(){GA=ccb;fA();FA=new Lqb} +function Iy(){Iy=ccb;$wnd.Math.log(2)} +function UVd(){UVd=ccb;TVd=(AFd(),zFd)} +function _ge(){throw vbb(new cgb(Cxe))} +function ohe(){throw vbb(new cgb(Cxe))} +function che(){throw vbb(new cgb(Dxe))} +function rhe(){throw vbb(new cgb(Dxe))} +function Mg(a){this.a=a;Gg.call(this,a)} +function up(a){this.a=a;rf.call(this,a)} +function Bp(a){this.a=a;rf.call(this,a)} +function Okb(a,b){Mlb(a.c,a.c.length,b)} +function llb(a){return a.ab?1:0} +function Deb(a,b){return ybb(a,b)>0?a:b} +function TC(a,b,c){return {l:a,m:b,h:c}} +function Ctb(a,b){a.a!=null&&BIc(b,a.a)} +function Csb(a){a.a=new jtb;a.c=new jtb} +function hDb(a){this.b=a;this.a=new Rkb} +function dOb(a){this.b=new pOb;this.a=a} +function q_b(a){n_b.call(this);this.a=a} +function txb(){mxb.call(this,'Range',2)} +function bUb(){ZTb();this.a=new L2c(zP)} +function Bh(a,b){Qb(b);Ah(a).Jc(new Vw)} +function fKc(a,b){FJc();return b.n.b+=a} +function Tgc(a,b,c){return Rhb(a.g,c,b)} +function LJc(a,b,c){return Rhb(a.k,c,b)} +function r1c(a,b){return Rhb(a.a,b.a,b)} +function jBc(a,b,c){return hBc(b,c,a.c)} +function E6c(a){return new f7c(a.c,a.d)} +function F6c(a){return new f7c(a.c,a.d)} +function R6c(a){return new f7c(a.a,a.b)} +function CQd(a,b){return hA(a.a,b,null)} +function fec(a){QZb(a,null);RZb(a,null)} +function AOc(a){BOc(a,null);COc(a,null)} +function u4d(){qRd.call(this,null,null)} +function y4d(){RRd.call(this,null,null)} +function a7d(a){this.a=a;Lqb.call(this)} +function Pp(a){this.b=(mmb(),new iob(a))} +function Py(a){a.j=KC(VI,nie,310,0,0,1)} +function oAd(a,b,c){a.c.Vc(b,BD(c,133))} +function GAd(a,b,c){a.c.ji(b,BD(c,133))} +function JLd(a,b){Uxd(a);a.Gc(BD(b,15))} +function b7d(a,b){return t2d(a.c,a.b,b)} +function Bv(a,b){return new Qv(a.Kc(),b)} +function Lq(a,b){return rr(a.Kc(),b)!=-1} +function Sqb(a,b){return a.a.Bc(b)!=null} +function pr(a){return a.Ob()?a.Pb():null} +function yfb(a){return zfb(a,0,a.length)} +function JD(a,b){return a!=null&&AD(a,b)} +function $A(a,b){a.q.setHours(b);YA(a,b)} +function Yrb(a,b){if(a.c){jsb(b);isb(b)}} +function nk(a,b,c){BD(a.Kb(c),164).Nb(b)} +function RJc(a,b,c){SJc(a,b,c);return c} +function Eub(a,b,c){a.a=b^1502;a.b=c^kke} +function xHb(a,b,c){return a.a[b.g][c.g]} +function REc(a,b){return a.a[b.c.p][b.p]} +function aEc(a,b){return a.e[b.c.p][b.p]} +function tEc(a,b){return a.c[b.c.p][b.p]} +function OJc(a,b){return a.j[b.p]=aKc(b)} +function k5c(a,b){return cfb(a.f,b.tg())} +function Isd(a,b){return cfb(a.b,b.tg())} +function Sfd(a,b){return a.a0?b*b/a:b*b*100} +function CRb(a,b){return a>0?b/(a*a):b*100} +function G2c(a,b,c){return Ekb(b,I2c(a,c))} +function t3c(a,b,c){p3c();a.Xe(b)&&c.td(a)} +function St(a,b,c){var d;d=a.Zc(b);d.Rb(c)} +function O6c(a,b,c){a.a+=b;a.b+=c;return a} +function Z6c(a,b,c){a.a*=b;a.b*=c;return a} +function b7c(a,b,c){a.a-=b;a.b-=c;return a} +function a7c(a,b){a.a=b.a;a.b=b.b;return a} +function V6c(a){a.a=-a.a;a.b=-a.b;return a} +function Dic(a){this.c=a;this.a=1;this.b=1} +function xed(a){this.c=a;dld(a,0);eld(a,0)} +function u7c(a){Psb.call(this);n7c(this,a)} +function AXb(a){xXb();yXb(this);this.mf(a)} +function GRd(a,b){nRd();qRd.call(this,a,b)} +function dSd(a,b){LRd();RRd.call(this,a,b)} +function hSd(a,b){LRd();RRd.call(this,a,b)} +function fSd(a,b){LRd();dSd.call(this,a,b)} +function sId(a,b,c){dId.call(this,a,b,c,2)} +function zXd(a,b){UVd();nXd.call(this,a,b)} +function BXd(a,b){UVd();zXd.call(this,a,b)} +function DXd(a,b){UVd();zXd.call(this,a,b)} +function FXd(a,b){UVd();DXd.call(this,a,b)} +function PXd(a,b){UVd();nXd.call(this,a,b)} +function RXd(a,b){UVd();PXd.call(this,a,b)} +function XXd(a,b){UVd();nXd.call(this,a,b)} +function pAd(a,b){return a.c.Fc(BD(b,133))} +function w1d(a,b,c){return V1d(p1d(a,b),c)} +function N2d(a,b,c){return b.Qk(a.e,a.c,c)} +function P2d(a,b,c){return b.Rk(a.e,a.c,c)} +function a3d(a,b){return xid(a.e,BD(b,49))} +function aTd(a,b,c){vtd(QSd(a.a),b,eTd(c))} +function TOd(a,b,c){vtd(VKd(a.a),b,XOd(c))} +function ypb(a,b){b.$modCount=a.$modCount} +function MUc(){MUc=ccb;LUc=new Lsd('root')} +function LCd(){LCd=ccb;KCd=new lDd;new NDd} +function KVc(){this.a=new Hp;this.b=new Hp} +function FUd(){hJd.call(this);this.Bb|=Tje} +function t_c(){$r.call(this,'GROW_TREE',0)} +function C9d(a){return a==null?null:cde(a)} +function G9d(a){return a==null?null:jde(a)} +function J9d(a){return a==null?null:fcb(a)} +function K9d(a){return a==null?null:fcb(a)} +function fdb(a){if(a.o!=null){return}vdb(a)} +function DD(a){CCb(a==null||KD(a));return a} +function ED(a){CCb(a==null||LD(a));return a} +function GD(a){CCb(a==null||ND(a));return a} +function gB(a){this.q=new $wnd.Date(Sbb(a))} +function Mf(a,b){this.c=a;ne.call(this,a,b)} +function Sf(a,b){this.a=a;Mf.call(this,a,b)} +function Hg(a,b){this.d=a;Dg(this);this.b=b} +function bAb(a,b){Vzb.call(this,a);this.a=b} +function vAb(a,b){Vzb.call(this,a);this.a=b} +function sNb(a){pNb.call(this,0,0);this.f=a} +function Vg(a,b,c){dg.call(this,a,b,c,null)} +function Yg(a,b,c){dg.call(this,a,b,c,null)} +function Pxb(a,b,c){return a.ue(b,c)<=0?c:b} +function Qxb(a,b,c){return a.ue(b,c)<=0?b:c} +function g4c(a,b){return BD(Wrb(a.b,b),149)} +function i4c(a,b){return BD(Wrb(a.c,b),229)} +function wic(a){return BD(Ikb(a.a,a.b),287)} +function B6c(a){return new f7c(a.c,a.d+a.a)} +function eLc(a){return FJc(),Jzc(BD(a,197))} +function $Jb(){$Jb=ccb;ZJb=pqb((tdd(),sdd))} +function fOb(a,b){b.a?gOb(a,b):Fxb(a.a,b.b)} +function qyb(a,b){if(lyb){return}Ekb(a.a,b)} +function F2b(a,b){x2b();return f_b(b.d.i,a)} +function _9b(a,b){I9b();return new gac(b,a)} +function _Hb(a,b){ytb(b,lle);a.f=b;return a} +function Kld(a,b,c){c=_hd(a,b,3,c);return c} +function bmd(a,b,c){c=_hd(a,b,6,c);return c} +function kpd(a,b,c){c=_hd(a,b,9,c);return c} +function Cvd(a,b,c){++a.j;a.Ki();Atd(a,b,c)} +function Avd(a,b,c){++a.j;a.Hi(b,a.oi(b,c))} +function bRd(a,b,c){var d;d=a.Zc(b);d.Rb(c)} +function c7d(a,b,c){return C2d(a.c,a.b,b,c)} +function DAd(a,b){return (b&Ohe)%a.d.length} +function Msd(a,b){Lsd.call(this,a);this.a=b} +function uVd(a,b){lVd.call(this,a);this.a=b} +function sYd(a,b){lVd.call(this,a);this.a=b} +function zyd(a,b){this.c=a;zud.call(this,b)} +function YOd(a,b){this.a=a;qOd.call(this,b)} +function fTd(a,b){this.a=a;qOd.call(this,b)} +function Xp(a){this.a=(Xj(a,Jie),new Skb(a))} +function cq(a){this.a=(Xj(a,Jie),new Skb(a))} +function LA(a){!a.a&&(a.a=new VA);return a.a} +function XMb(a){if(a>8){return 0}return a+1} +function Ecb(a,b){Bcb();return a==b?0:a?1:-1} +function Opb(a,b,c){return Npb(a,BD(b,22),c)} +function Bz(a,b,c){return a.apply(b,c);var d} +function Sfb(a,b,c){a.a+=zfb(b,0,c);return a} +function ijb(a,b){var c;c=a.e;a.e=b;return c} +function trb(a,b){var c;c=a[hke];c.call(a,b)} +function urb(a,b){var c;c=a[hke];c.call(a,b)} +function Aib(a,b){a.a.Vc(a.b,b);++a.b;a.c=-1} +function Urb(a){Uhb(a.e);a.d.b=a.d;a.d.a=a.d} +function _f(a){a.b?_f(a.b):a.f.c.zc(a.e,a.d)} +function _Ab(a,b,c){EAb();MBb(a,b.Ce(a.a,c))} +function Bxb(a,b){return Vd(Cwb(a.a,b,true))} +function Cxb(a,b){return Vd(Dwb(a.a,b,true))} +function _Bb(a,b){return eCb(new Array(b),a)} +function HD(a){return String.fromCharCode(a)} +function mz(a){return a==null?null:a.message} +function gRb(){this.a=new Rkb;this.b=new Rkb} +function iTb(){this.a=new MQb;this.b=new tTb} +function tDb(){this.b=new d7c;this.c=new Rkb} +function _Qb(){this.d=new d7c;this.e=new d7c} +function n_b(){this.n=new d7c;this.o=new d7c} +function $Gb(){this.n=new p0b;this.i=new I6c} +function sec(){this.a=new Umc;this.b=new mnc} +function NIc(){this.a=new Rkb;this.d=new Rkb} +function LDc(){this.b=new Tqb;this.a=new Tqb} +function hSc(){this.b=new Lqb;this.a=new Lqb} +function HRc(){this.b=new tRc;this.a=new hRc} +function aHb(){$Gb.call(this);this.a=new d7c} +function Ywb(a){Zwb.call(this,a,(lxb(),hxb))} +function J_b(a,b,c,d){B_b.call(this,a,b,c,d)} +function sqd(a,b,c){c!=null&&kmd(b,Wqd(a,c))} +function tqd(a,b,c){c!=null&&lmd(b,Wqd(a,c))} +function Tod(a,b,c){c=_hd(a,b,11,c);return c} +function P6c(a,b){a.a+=b.a;a.b+=b.b;return a} +function c7c(a,b){a.a-=b.a;a.b-=b.b;return a} +function u7b(a,b){return a.n.a=(uCb(b),b)+10} +function v7b(a,b){return a.n.a=(uCb(b),b)+10} +function dLd(a,b){return b==a||pud(UKd(b),a)} +function PYd(a,b){return Rhb(a.a,b,'')==null} +function E2b(a,b){x2b();return !f_b(b.d.i,a)} +function rjc(a,b){fad(a.f)?sjc(a,b):tjc(a,b)} +function h1d(a,b){var c;c=b.Hh(a.a);return c} +function Cyd(a,b){qcb.call(this,gve+a+mue+b)} +function gUd(a,b,c,d){cUd.call(this,a,b,c,d)} +function Q4d(a,b,c,d){cUd.call(this,a,b,c,d)} +function U4d(a,b,c,d){Q4d.call(this,a,b,c,d)} +function n5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function p5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function v5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function t5d(a,b,c,d){p5d.call(this,a,b,c,d)} +function A5d(a,b,c,d){p5d.call(this,a,b,c,d)} +function y5d(a,b,c,d){v5d.call(this,a,b,c,d)} +function D5d(a,b,c,d){A5d.call(this,a,b,c,d)} +function d6d(a,b,c,d){Y5d.call(this,a,b,c,d)} +function Vp(a,b,c){this.a=a;qc.call(this,b,c)} +function tk(a,b,c){this.c=b;this.b=c;this.a=a} +function ik(a,b,c){return a.d=BD(b.Kb(c),164)} +function j6d(a,b){return a.Aj().Nh().Kh(a,b)} +function h6d(a,b){return a.Aj().Nh().Ih(a,b)} +function Fdb(a,b){return uCb(a),PD(a)===PD(b)} +function dfb(a,b){return uCb(a),PD(a)===PD(b)} +function Dxb(a,b){return Vd(Cwb(a.a,b,false))} +function Exb(a,b){return Vd(Dwb(a.a,b,false))} +function vBb(a,b){return a.b.sd(new yBb(a,b))} +function BBb(a,b){return a.b.sd(new EBb(a,b))} +function HBb(a,b){return a.b.sd(new KBb(a,b))} +function lfb(a,b,c){return a.lastIndexOf(b,c)} +function uTb(a,b,c){return Kdb(a[b.b],a[c.b])} +function RTb(a,b){return yNb(b,(Nyc(),Cwc),a)} +function fmc(a,b){return beb(b.a.d.p,a.a.d.p)} +function emc(a,b){return beb(a.a.d.p,b.a.d.p)} +function _Oc(a,b){return Kdb(a.c-a.s,b.c-b.s)} +function S_b(a){return !a.c?-1:Jkb(a.c.a,a,0)} +function Vxd(a){return a<100?null:new Ixd(a)} +function ecd(a){return a==Zbd||a==_bd||a==$bd} +function zAd(a,b){return JD(b,15)&&Btd(a.c,b)} +function vyb(a,b){if(lyb){return}!!b&&(a.d=b)} +function ujb(a,b){var c;c=b;return !!Awb(a,c)} +function czd(a,b){this.c=a;Pyd.call(this,a,b)} +function fBb(a){this.c=a;nvb.call(this,rie,0)} +function Avb(a,b){Bvb.call(this,a,a.length,b)} +function aId(a,b,c){return BD(a.c,69).lk(b,c)} +function bId(a,b,c){return BD(a.c,69).mk(b,c)} +function O2d(a,b,c){return N2d(a,BD(b,332),c)} +function Q2d(a,b,c){return P2d(a,BD(b,332),c)} +function i3d(a,b,c){return h3d(a,BD(b,332),c)} +function k3d(a,b,c){return j3d(a,BD(b,332),c)} +function tn(a,b){return b==null?null:Hv(a.b,b)} +function Kcb(a){return LD(a)?(uCb(a),a):a.ke()} +function Ldb(a){return !isNaN(a)&&!isFinite(a)} +function Wn(a){Ql();this.a=(mmb(),new zob(a))} +function dIc(a){FHc();this.d=a;this.a=new jkb} +function xqb(a,b,c){this.a=a;this.b=b;this.c=c} +function Nrb(a,b,c){this.a=a;this.b=b;this.c=c} +function $sb(a,b,c){this.d=a;this.b=c;this.a=b} +function Qsb(a){Csb(this);Osb(this);ye(this,a)} +function Tkb(a){Ckb(this);bCb(this.c,0,a.Pc())} +function Xwb(a){uib(a.a);Kwb(a.c,a.b);a.b=null} +function iyb(a){this.a=a;Zfb();Cbb(Date.now())} +function JCb(){JCb=ccb;GCb=new nb;ICb=new nb} +function ntb(){ntb=ccb;ltb=new otb;mtb=new qtb} +function kzd(){kzd=ccb;jzd=KC(SI,Uhe,1,0,5,1)} +function tGd(){tGd=ccb;sGd=KC(SI,Uhe,1,0,5,1)} +function $Gd(){$Gd=ccb;ZGd=KC(SI,Uhe,1,0,5,1)} +function Ql(){Ql=ccb;new Zl((mmb(),mmb(),jmb))} +function pxb(a){lxb();return es((zxb(),yxb),a)} +function Hyb(a){Fyb();return es((Kyb(),Jyb),a)} +function OEb(a){MEb();return es((REb(),QEb),a)} +function WEb(a){UEb();return es((ZEb(),YEb),a)} +function tFb(a){rFb();return es((wFb(),vFb),a)} +function iHb(a){gHb();return es((lHb(),kHb),a)} +function PHb(a){NHb();return es((SHb(),RHb),a)} +function GIb(a){EIb();return es((JIb(),IIb),a)} +function vJb(a){qJb();return es((yJb(),xJb),a)} +function xLb(a){vLb();return es((ALb(),zLb),a)} +function TMb(a){RMb();return es((WMb(),VMb),a)} +function TOb(a){ROb();return es((WOb(),VOb),a)} +function ePb(a){cPb();return es((hPb(),gPb),a)} +function ZRb(a){XRb();return es((aSb(),_Rb),a)} +function ATb(a){yTb();return es((DTb(),CTb),a)} +function sUb(a){qUb();return es((vUb(),uUb),a)} +function rWb(a){lWb();return es((uWb(),tWb),a)} +function TXb(a){RXb();return es((WXb(),VXb),a)} +function Mb(a,b){if(!a){throw vbb(new Wdb(b))}} +function l0b(a){j0b();return es((o0b(),n0b),a)} +function r0b(a){B_b.call(this,a.d,a.c,a.a,a.b)} +function K_b(a){B_b.call(this,a.d,a.c,a.a,a.b)} +function mKb(a,b,c){this.b=a;this.c=b;this.a=c} +function BZb(a,b,c){this.b=a;this.a=b;this.c=c} +function TNb(a,b,c){this.a=a;this.b=b;this.c=c} +function uOb(a,b,c){this.a=a;this.b=b;this.c=c} +function S3b(a,b,c){this.a=a;this.b=b;this.c=c} +function Z6b(a,b,c){this.a=a;this.b=b;this.c=c} +function n9b(a,b,c){this.b=a;this.a=b;this.c=c} +function x$b(a,b,c){this.e=b;this.b=a;this.d=c} +function $Ab(a,b,c){EAb();a.a.Od(b,c);return b} +function LGb(a){var b;b=new KGb;b.e=a;return b} +function iLb(a){var b;b=new fLb;b.b=a;return b} +function D6b(){D6b=ccb;B6b=new M6b;C6b=new P6b} +function Hgc(){Hgc=ccb;Fgc=new ghc;Ggc=new ihc} +function jbc(a){gbc();return es((mbc(),lbc),a)} +function Cjc(a){Ajc();return es((Fjc(),Ejc),a)} +function Clc(a){Alc();return es((Flc(),Elc),a)} +function Cpc(a){Apc();return es((Fpc(),Epc),a)} +function Kpc(a){Ipc();return es((Npc(),Mpc),a)} +function Wpc(a){Rpc();return es((Zpc(),Ypc),a)} +function $jc(a){Xjc();return es((bkc(),akc),a)} +function Hkc(a){Fkc();return es((Kkc(),Jkc),a)} +function dqc(a){bqc();return es((gqc(),fqc),a)} +function rqc(a){mqc();return es((uqc(),tqc),a)} +function zqc(a){xqc();return es((Cqc(),Bqc),a)} +function Iqc(a){Gqc();return es((Lqc(),Kqc),a)} +function Vqc(a){Sqc();return es((Yqc(),Xqc),a)} +function brc(a){_qc();return es((erc(),drc),a)} +function nrc(a){lrc();return es((qrc(),prc),a)} +function Arc(a){yrc();return es((Drc(),Crc),a)} +function Qrc(a){Orc();return es((Trc(),Src),a)} +function Zrc(a){Xrc();return es((asc(),_rc),a)} +function gsc(a){esc();return es((jsc(),isc),a)} +function osc(a){msc();return es((rsc(),qsc),a)} +function Etc(a){Ctc();return es((Htc(),Gtc),a)} +function qzc(a){lzc();return es((tzc(),szc),a)} +function Azc(a){xzc();return es((Dzc(),Czc),a)} +function Mzc(a){Izc();return es((Pzc(),Ozc),a)} +function MAc(a){KAc();return es((PAc(),OAc),a)} +function mAc(a){kAc();return es((pAc(),oAc),a)} +function vAc(a){tAc();return es((yAc(),xAc),a)} +function DAc(a){BAc();return es((GAc(),FAc),a)} +function VAc(a){TAc();return es((YAc(),XAc),a)} +function $zc(a){Vzc();return es((bAc(),aAc),a)} +function bBc(a){_Ac();return es((eBc(),dBc),a)} +function vBc(a){tBc();return es((yBc(),xBc),a)} +function EBc(a){CBc();return es((HBc(),GBc),a)} +function NBc(a){LBc();return es((QBc(),PBc),a)} +function tGc(a){rGc();return es((wGc(),vGc),a)} +function WIc(a){UIc();return es((ZIc(),YIc),a)} +function $Lc(a){YLc();return es((bMc(),aMc),a)} +function gMc(a){eMc();return es((jMc(),iMc),a)} +function JOc(a){HOc();return es((MOc(),LOc),a)} +function HQc(a){FQc();return es((KQc(),JQc),a)} +function DRc(a){yRc();return es((GRc(),FRc),a)} +function tSc(a){qSc();return es((wSc(),vSc),a)} +function UTc(a){STc();return es((XTc(),WTc),a)} +function UUc(a){PUc();return es((XUc(),WUc),a)} +function aUc(a){$Tc();return es((dUc(),cUc),a)} +function wVc(a){tVc();return es((zVc(),yVc),a)} +function iWc(a){fWc();return es((lWc(),kWc),a)} +function sWc(a){pWc();return es((vWc(),uWc),a)} +function lXc(a){iXc();return es((oXc(),nXc),a)} +function vXc(a){sXc();return es((yXc(),xXc),a)} +function BYc(a){zYc();return es((EYc(),DYc),a)} +function m$c(a){k$c();return es((p$c(),o$c),a)} +function $$c(a){Y$c();return es((b_c(),a_c),a)} +function n_c(a){i_c();return es((q_c(),p_c),a)} +function w_c(a){s_c();return es((z_c(),y_c),a)} +function E_c(a){C_c();return es((H_c(),G_c),a)} +function P_c(a){N_c();return es((S_c(),R_c),a)} +function W0c(a){R0c();return es((Z0c(),Y0c),a)} +function f1c(a){a1c();return es((i1c(),h1c),a)} +function P5c(a){N5c();return es((S5c(),R5c),a)} +function b6c(a){_5c();return es((e6c(),d6c),a)} +function H7c(a){F7c();return es((K7c(),J7c),a)} +function k8c(a){i8c();return es((n8c(),m8c),a)} +function V8b(a){S8b();return es((Y8b(),X8b),a)} +function A5b(a){y5b();return es((D5b(),C5b),a)} +function jad(a){ead();return es((mad(),lad),a)} +function sad(a){qad();return es((vad(),uad),a)} +function Cad(a){Aad();return es((Fad(),Ead),a)} +function Oad(a){Mad();return es((Rad(),Qad),a)} +function jbd(a){hbd();return es((mbd(),lbd),a)} +function ubd(a){rbd();return es((xbd(),wbd),a)} +function Kbd(a){Hbd();return es((Nbd(),Mbd),a)} +function Vbd(a){Tbd();return es((Ybd(),Xbd),a)} +function hcd(a){dcd();return es((kcd(),jcd),a)} +function vcd(a){rcd();return es((ycd(),xcd),a)} +function vdd(a){tdd();return es((ydd(),xdd),a)} +function Kdd(a){Idd();return es((Ndd(),Mdd),a)} +function $cd(a){Ucd();return es((cdd(),bdd),a)} +function Fed(a){Ded();return es((Ied(),Hed),a)} +function rgd(a){pgd();return es((ugd(),tgd),a)} +function Esd(a){Csd();return es((Hsd(),Gsd),a)} +function Yoc(a,b){return (uCb(a),a)+(uCb(b),b)} +function NNd(a,b){Zfb();return wtd(ZKd(a.a),b)} +function SNd(a,b){Zfb();return wtd(ZKd(a.a),b)} +function bPc(a,b){this.c=a;this.a=b;this.b=b-a} +function nYc(a,b,c){this.a=a;this.b=b;this.c=c} +function L1c(a,b,c){this.a=a;this.b=b;this.c=c} +function T1c(a,b,c){this.a=a;this.b=b;this.c=c} +function Rrd(a,b,c){this.a=a;this.b=b;this.c=c} +function zCd(a,b,c){this.a=a;this.b=b;this.c=c} +function IVd(a,b,c){this.e=a;this.a=b;this.c=c} +function kWd(a,b,c){UVd();cWd.call(this,a,b,c)} +function HXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function TXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function ZXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function JXd(a,b,c){UVd();HXd.call(this,a,b,c)} +function LXd(a,b,c){UVd();HXd.call(this,a,b,c)} +function NXd(a,b,c){UVd();LXd.call(this,a,b,c)} +function VXd(a,b,c){UVd();TXd.call(this,a,b,c)} +function _Xd(a,b,c){UVd();ZXd.call(this,a,b,c)} +function $j(a,b){Qb(a);Qb(b);return new _j(a,b)} +function Nq(a,b){Qb(a);Qb(b);return new Wq(a,b)} +function Rq(a,b){Qb(a);Qb(b);return new ar(a,b)} +function lr(a,b){Qb(a);Qb(b);return new zr(a,b)} +function BD(a,b){CCb(a==null||AD(a,b));return a} +function Nu(a){var b;b=new Rkb;fr(b,a);return b} +function Ex(a){var b;b=new Tqb;fr(b,a);return b} +function Hx(a){var b;b=new Gxb;Jq(b,a);return b} +function Ru(a){var b;b=new Psb;Jq(b,a);return b} +function YEc(a){!a.e&&(a.e=new Rkb);return a.e} +function SMd(a){!a.c&&(a.c=new xYd);return a.c} +function Ekb(a,b){a.c[a.c.length]=b;return true} +function WA(a,b){this.c=a;this.b=b;this.a=false} +function Gg(a){this.d=a;Dg(this);this.b=ed(a.d)} +function pzb(){this.a=';,;';this.b='';this.c=''} +function Bvb(a,b,c){qvb.call(this,b,c);this.a=a} +function fAb(a,b,c){this.b=a;fvb.call(this,b,c)} +function lsb(a,b,c){this.c=a;pjb.call(this,b,c)} +function bCb(a,b,c){$Bb(c,0,a,b,c.length,false)} +function HVb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e} +function eBb(a,b){if(b){a.b=b;a.a=(Tzb(b),b.a)}} +function v_b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e} +function h5b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b} +function k5b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c} +function Lbb(a){return zbb(iD(Fbb(a)?Rbb(a):a))} +function rlc(a,b){return beb(D0b(a.d),D0b(b.d))} +function uic(a,b){return b==(Ucd(),Tcd)?a.c:a.d} +function FHc(){FHc=ccb;DHc=(Ucd(),Tcd);EHc=zcd} +function DRb(){this.b=Edb(ED(Ksd((wSb(),vSb))))} +function aBb(a){return EAb(),KC(SI,Uhe,1,a,5,1)} +function C6c(a){return new f7c(a.c+a.b,a.d+a.a)} +function Vmc(a,b){Imc();return beb(a.d.p,b.d.p)} +function Lsb(a){sCb(a.b!=0);return Nsb(a,a.a.a)} +function Msb(a){sCb(a.b!=0);return Nsb(a,a.c.b)} +function rCb(a,b){if(!a){throw vbb(new ucb(b))}} +function mCb(a,b){if(!a){throw vbb(new Wdb(b))}} +function dWb(a,b,c){cWb.call(this,a,b);this.b=c} +function pMd(a,b,c){MLd.call(this,a,b);this.c=c} +function Dnc(a,b,c){Cnc.call(this,b,c);this.d=a} +function _Gd(a){$Gd();MGd.call(this);this.th(a)} +function PNd(a,b,c){this.a=a;nNd.call(this,b,c)} +function UNd(a,b,c){this.a=a;nNd.call(this,b,c)} +function k2d(a,b,c){MLd.call(this,a,b);this.c=c} +function y1d(){T0d();z1d.call(this,(yFd(),xFd))} +function gFd(a){return a!=null&&!OEd(a,CEd,DEd)} +function dFd(a,b){return (jFd(a)<<4|jFd(b))&aje} +function ln(a,b){return Vm(),Wj(a,b),new iy(a,b)} +function Sdd(a,b){var c;if(a.n){c=b;Ekb(a.f,c)}} +function Upd(a,b,c){var d;d=new yC(c);cC(a,b,d)} +function WUd(a,b){var c;c=a.c;VUd(a,b);return c} +function Ydd(a,b){b<0?(a.g=-1):(a.g=b);return a} +function $6c(a,b){W6c(a);a.a*=b;a.b*=b;return a} +function G6c(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e} +function Dsb(a,b){Gsb(a,b,a.c.b,a.c);return true} +function jsb(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null} +function Aq(a){this.b=a;this.a=Wm(this.b.a).Ed()} +function Wq(a,b){this.b=a;this.a=b;ol.call(this)} +function ar(a,b){this.a=a;this.b=b;ol.call(this)} +function vvb(a,b){qvb.call(this,b,1040);this.a=a} +function Eeb(a){return a==0||isNaN(a)?a:a<0?-1:1} +function WPb(a){QPb();return jtd(a)==Xod(ltd(a))} +function XPb(a){QPb();return ltd(a)==Xod(jtd(a))} +function iYb(a,b){return hYb(a,new cWb(b.a,b.b))} +function NZb(a){return !OZb(a)&&a.c.i.c==a.d.i.c} +function _Gb(a){var b;b=a.n;return a.a.b+b.d+b.a} +function YHb(a){var b;b=a.n;return a.e.b+b.d+b.a} +function ZHb(a){var b;b=a.n;return a.e.a+b.b+b.c} +function zfe(a){wfe();++vfe;return new ige(0,a)} +function o_b(a){if(a.a){return a.a}return JZb(a)} +function CCb(a){if(!a){throw vbb(new Cdb(null))}} +function X6d(){X6d=ccb;W6d=(mmb(),new anb(Fwe))} +function ex(){ex=ccb;new gx((_k(),$k),(Lk(),Kk))} +function oeb(){oeb=ccb;neb=KC(JI,nie,19,256,0,1)} +function d$c(a,b,c,d){e$c.call(this,a,b,c,d,0,0)} +function sQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} +function tQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} +function xfd(a,b){return Ekb(a,new f7c(b.a,b.b))} +function Bic(a,b){return a.c=b){throw vbb(new rcb)}} +function Pyb(a,b,c){NC(b,0,Bzb(b[0],c[0]));return b} +function _yc(a,b,c){b.Ye(c,Edb(ED(Ohb(a.b,c)))*a.a)} +function n6c(a,b,c){i6c();return m6c(a,b)&&m6c(a,c)} +function tcd(a){rcd();return !a.Hc(ncd)&&!a.Hc(pcd)} +function D6c(a){return new f7c(a.c+a.b/2,a.d+a.a/2)} +function oOd(a,b){return b.kh()?xid(a.b,BD(b,49)):b} +function bvb(a,b){this.e=a;this.d=(b&64)!=0?b|oie:b} +function qvb(a,b){this.c=0;this.d=a;this.b=b|64|oie} +function gub(a){this.b=new Skb(11);this.a=(ipb(),a)} +function Qwb(a){this.b=null;this.a=(ipb(),!a?fpb:a)} +function nHc(a){this.a=lHc(a.a);this.b=new Tkb(a.b)} +function Pzd(a){this.b=a;Oyd.call(this,a);Ozd(this)} +function Xzd(a){this.b=a;bzd.call(this,a);Wzd(this)} +function jUd(a,b,c){this.a=a;gUd.call(this,b,c,5,6)} +function Y5d(a,b,c,d){this.b=a;xMd.call(this,b,c,d)} +function nSd(a,b,c,d,e){oSd.call(this,a,b,c,d,e,-1)} +function DSd(a,b,c,d,e){ESd.call(this,a,b,c,d,e,-1)} +function cUd(a,b,c,d){xMd.call(this,a,b,c);this.b=d} +function i5d(a,b,c,d){pMd.call(this,a,b,c);this.b=d} +function x0d(a){Wud.call(this,a,false);this.a=false} +function Lj(a,b){this.b=a;sj.call(this,a.b);this.a=b} +function px(a,b){im();ox.call(this,a,Dm(new amb(b)))} +function Cfe(a,b){wfe();++vfe;return new Dge(a,b,0)} +function Efe(a,b){wfe();++vfe;return new Dge(6,a,b)} +function nfb(a,b){return dfb(a.substr(0,b.length),b)} +function Mhb(a,b){return ND(b)?Qhb(a,b):!!irb(a.f,b)} +function Rrb(a,b){uCb(b);while(a.Ob()){b.td(a.Pb())}} +function Vgb(a,b,c){Hgb();this.e=a;this.d=b;this.a=c} +function amc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d} +function xJc(a){var b;b=a;while(b.f){b=b.f}return b} +function fkb(a){var b;b=bkb(a);sCb(b!=null);return b} +function gkb(a){var b;b=ckb(a);sCb(b!=null);return b} +function cv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b} +function Glb(a,b){var c;for(c=0;c0?$wnd.Math.log(a/b):-100} +function ueb(a,b){return ybb(a,b)<0?-1:ybb(a,b)>0?1:0} +function HMb(a,b,c){return IMb(a,BD(b,46),BD(c,167))} +function iq(a,b){return BD(Rl(Wm(a.a)).Xb(b),42).cd()} +function Olb(a,b){return avb(b,a.length),new vvb(a,b)} +function Pyd(a,b){this.d=a;Fyd.call(this,a);this.e=b} +function Lub(a){this.d=(uCb(a),a);this.a=0;this.c=rie} +function rge(a,b){xfe.call(this,1);this.a=a;this.b=b} +function Rzb(a,b){!a.c?Ekb(a.b,b):Rzb(a.c,b);return a} +function uB(a,b,c){var d;d=tB(a,b);vB(a,b,c);return d} +function ZBb(a,b){var c;c=a.slice(0,b);return PC(c,a)} +function Flb(a,b,c){var d;for(d=0;d=a.g} +function NHc(a,b,c){var d;d=THc(a,b,c);return MHc(a,d)} +function Qpd(a,b){var c;c=a.a.length;tB(a,c);vB(a,c,b)} +function gCb(a,b){var c;c=console[a];c.call(console,b)} +function Bvd(a,b){var c;++a.j;c=a.Vi();a.Ii(a.oi(c,b))} +function E1c(a,b,c){BD(b.b,65);Hkb(b.a,new L1c(a,c,b))} +function oXd(a,b,c){VVd.call(this,b);this.a=a;this.b=c} +function Dge(a,b,c){xfe.call(this,a);this.a=b;this.b=c} +function dYd(a,b,c){this.a=a;lVd.call(this,b);this.b=c} +function f0d(a,b,c){this.a=a;mxd.call(this,8,b,null,c)} +function z1d(a){this.a=(uCb(Rve),Rve);this.b=a;new oUd} +function ct(a){this.c=a;this.b=this.c.a;this.a=this.c.e} +function usb(a){this.c=a;this.b=a.a.d.a;ypb(a.a.e,this)} +function uib(a){yCb(a.c!=-1);a.d.$c(a.c);a.b=a.c;a.c=-1} +function U6c(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} +function Uvb(a,b){return _vb(b,a.a.c.length),Ikb(a.a,b)} +function Hb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} +function oAb(a){if(0>=a){return new yAb}return pAb(a-1)} +function Nfe(a){if(!bfe)return false;return Qhb(bfe,a)} +function Ehe(a){if(a)return a.dc();return !a.Kc().Ob()} +function Q_b(a){if(!a.a&&!!a.c){return a.c.b}return a.a} +function LHd(a){!a.a&&(a.a=new xMd(m5,a,4));return a.a} +function LQd(a){!a.d&&(a.d=new xMd(j5,a,1));return a.d} +function uCb(a){if(a==null){throw vbb(new Geb)}return a} +function Qzb(a){if(!a.c){a.d=true;Szb(a)}else{a.c.He()}} +function Tzb(a){if(!a.c){Uzb(a);a.d=true}else{Tzb(a.c)}} +function Kpb(a){Ae(a.a);a.b=KC(SI,Uhe,1,a.b.length,5,1)} +function qlc(a,b){return beb(b.j.c.length,a.j.c.length)} +function igd(a,b){a.c<0||a.b.b=0?a.Bh(c):vid(a,b)} +function WHc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c} +function Wwd(a){if(a.p!=4)throw vbb(new Ydb);return a.e} +function Vwd(a){if(a.p!=3)throw vbb(new Ydb);return a.e} +function Ywd(a){if(a.p!=6)throw vbb(new Ydb);return a.f} +function fxd(a){if(a.p!=6)throw vbb(new Ydb);return a.k} +function cxd(a){if(a.p!=3)throw vbb(new Ydb);return a.j} +function dxd(a){if(a.p!=4)throw vbb(new Ydb);return a.j} +function AYd(a){!a.b&&(a.b=new RYd(new NYd));return a.b} +function $1d(a){a.c==-2&&e2d(a,X0d(a.g,a.b));return a.c} +function pdb(a,b){var c;c=ldb('',a);c.n=b;c.i=1;return c} +function MNb(a,b){$Nb(BD(b.b,65),a);Hkb(b.a,new RNb(a))} +function Cnd(a,b){wtd((!a.a&&(a.a=new fTd(a,a)),a.a),b)} +function Qzd(a,b){this.b=a;Pyd.call(this,a,b);Ozd(this)} +function Yzd(a,b){this.b=a;czd.call(this,a,b);Wzd(this)} +function Ms(a,b,c,d){Wo.call(this,a,b);this.d=c;this.a=d} +function $o(a,b,c,d){Wo.call(this,a,c);this.a=b;this.f=d} +function iy(a,b){Pp.call(this,umb(Qb(a),Qb(b)));this.a=b} +function cae(){fod.call(this,Ewe,(p8d(),o8d));$9d(this)} +function AZd(){fod.call(this,_ve,(LFd(),KFd));uZd(this)} +function T0c(){$r.call(this,'DELAUNAY_TRIANGULATION',0)} +function vfb(a){return String.fromCharCode.apply(null,a)} +function Rhb(a,b,c){return ND(b)?Shb(a,b,c):jrb(a.f,b,c)} +function tmb(a){mmb();return !a?(ipb(),ipb(),hpb):a.ve()} +function d2c(a,b,c){Y1c();return c.pg(a,BD(b.cd(),146))} +function ix(a,b){ex();return new gx(new il(a),new Uk(b))} +function Iu(a){Xj(a,Mie);return Oy(wbb(wbb(5,a),a/10|0))} +function Vm(){Vm=ccb;Um=new wx(OC(GC(CK,1),zie,42,0,[]))} +function hob(a){!a.d&&(a.d=new lnb(a.c.Cc()));return a.d} +function eob(a){!a.a&&(a.a=new Gob(a.c.vc()));return a.a} +function gob(a){!a.b&&(a.b=new zob(a.c.ec()));return a.b} +function keb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} +function wtb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} +function Gbc(a,b){return Bcb(),BD(b.b,19).ad&&++d;return d} +function Nnd(a){var b,c;c=(b=new UQd,b);NQd(c,a);return c} +function Ond(a){var b,c;c=(b=new UQd,b);RQd(c,a);return c} +function hqd(a,b){var c;c=Ohb(a.f,b);Yqd(b,c);return null} +function JZb(a){var b;b=P2b(a);if(b){return b}return null} +function Wod(a){!a.b&&(a.b=new cUd(B2,a,12,3));return a.b} +function YEd(a){return a!=null&&hnb(GEd,a.toLowerCase())} +function ied(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} +function jed(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} +function wEb(a,b){return Kdb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)} +function UVb(a,b){return Kdb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)} +function pQb(a,b,c){c.a?eld(a,b.b-a.f/2):dld(a,b.a-a.g/2)} +function prd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function ord(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function JVd(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} +function ZVd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function cXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} +function jXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} +function Ng(a,b){this.a=a;Hg.call(this,a,BD(a.d,15).Zc(b))} +function ZBd(a){this.f=a;this.c=this.f.e;a.f>0&&YBd(this)} +function lBb(a,b,c,d){this.b=a;this.c=d;nvb.call(this,b,c)} +function tib(a){sCb(a.b=0&&dfb(a.substr(c,b.length),b)} +function H2d(a,b,c,d,e,f,g){return new O7d(a.e,b,c,d,e,f,g)} +function Cxd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} +function vyd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} +function $Ec(a,b){this.g=a;this.d=OC(GC(OQ,1),kne,10,0,[b])} +function KVd(a,b){this.e=a;this.a=SI;this.b=R5d(b);this.c=b} +function cIb(a,b){$Gb.call(this);THb(this);this.a=a;this.c=b} +function kBc(a,b,c,d){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d)} +function nBc(a,b,c,d){NC(a.c[b.g],b.g,c);NC(a.b[b.g],b.g,d)} +function cBc(){_Ac();return OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])} +function crc(){_qc();return OC(GC(MW,1),Kie,479,0,[$qc,Zqc])} +function Aqc(){xqc();return OC(GC(JW,1),Kie,419,0,[vqc,wqc])} +function Lpc(){Ipc();return OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])} +function psc(){msc();return OC(GC(SW,1),Kie,420,0,[ksc,lsc])} +function EAc(){BAc();return OC(GC(cX,1),Kie,421,0,[zAc,AAc])} +function XIc(){UIc();return OC(GC(mY,1),Kie,523,0,[TIc,SIc])} +function KOc(){HOc();return OC(GC(DZ,1),Kie,520,0,[GOc,FOc])} +function _Lc(){YLc();return OC(GC(fZ,1),Kie,516,0,[XLc,WLc])} +function hMc(){eMc();return OC(GC(gZ,1),Kie,515,0,[cMc,dMc])} +function IQc(){FQc();return OC(GC(YZ,1),Kie,455,0,[DQc,EQc])} +function bUc(){$Tc();return OC(GC(F$,1),Kie,425,0,[ZTc,YTc])} +function VTc(){STc();return OC(GC(E$,1),Kie,480,0,[QTc,RTc])} +function VUc(){PUc();return OC(GC(K$,1),Kie,495,0,[NUc,OUc])} +function jWc(){fWc();return OC(GC(X$,1),Kie,426,0,[dWc,eWc])} +function g1c(){a1c();return OC(GC(X_,1),Kie,429,0,[_0c,$0c])} +function F_c(){C_c();return OC(GC(P_,1),Kie,430,0,[B_c,A_c])} +function PEb(){MEb();return OC(GC(aN,1),Kie,428,0,[LEb,KEb])} +function XEb(){UEb();return OC(GC(bN,1),Kie,427,0,[SEb,TEb])} +function $Rb(){XRb();return OC(GC(gP,1),Kie,424,0,[VRb,WRb])} +function B5b(){y5b();return OC(GC(ZR,1),Kie,511,0,[x5b,w5b])} +function lid(a,b,c,d){return c>=0?a.jh(b,c,d):a.Sg(null,c,d)} +function hgd(a){if(a.b.b==0){return a.a.$e()}return Lsb(a.b)} +function Xwd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.f)} +function exd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.k)} +function pNd(a){PD(a.a)===PD((NKd(),MKd))&&qNd(a);return a.a} +function by(a){this.a=BD(Qb(a),271);this.b=(mmb(),new Zob(a))} +function bQc(a,b){$Pc(this,new f7c(a.a,a.b));_Pc(this,Ru(b))} +function FQc(){FQc=ccb;DQc=new GQc(jle,0);EQc=new GQc(kle,1)} +function YLc(){YLc=ccb;XLc=new ZLc(kle,0);WLc=new ZLc(jle,1)} +function Hp(){Gp.call(this,new Mqb(Cv(12)));Lb(true);this.a=2} +function Hge(a,b,c){wfe();xfe.call(this,a);this.b=b;this.a=c} +function cWd(a,b,c){UVd();VVd.call(this,b);this.a=a;this.b=c} +function aIb(a){$Gb.call(this);THb(this);this.a=a;this.c=true} +function isb(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a} +function $Cb(a){var b;NGb(a.a);MGb(a.a);b=new YGb(a.a);UGb(b)} +function iKb(a,b){hKb(a,true);Hkb(a.e.wf(),new mKb(a,true,b))} +function tlb(a,b){pCb(b);return vlb(a,KC(WD,oje,25,b,15,1),b)} +function YPb(a,b){QPb();return a==Xod(jtd(b))||a==Xod(ltd(b))} +function Phb(a,b){return b==null?Wd(irb(a.f,null)):Crb(a.g,b)} +function Ksb(a){return a.b==0?null:(sCb(a.b!=0),Nsb(a,a.a.a))} +function QD(a){return Math.max(Math.min(a,Ohe),-2147483648)|0} +function uz(a,b){var c=tz[a.charCodeAt(0)];return c==null?a:c} +function Cx(a,b){Rb(a,'set1');Rb(b,'set2');return new Px(a,b)} +function QUb(a,b){var c;c=zUb(a.f,b);return P6c(V6c(c),a.f.d)} +function Jwb(a,b){var c,d;c=b;d=new fxb;Lwb(a,c,d);return d.d} +function NJb(a,b,c,d){var e;e=new aHb;b.a[c.g]=e;Npb(a.b,d,e)} +function zid(a,b,c){var d;d=a.Yg(b);d>=0?a.sh(d,c):uid(a,b,c)} +function hvd(a,b,c){evd();!!a&&Rhb(dvd,a,b);!!a&&Rhb(cvd,a,c)} +function g_c(a,b,c){this.i=new Rkb;this.b=a;this.g=b;this.a=c} +function VZc(a,b,c){this.c=new Rkb;this.e=a;this.f=b;this.b=c} +function b$c(a,b,c){this.a=new Rkb;this.e=a;this.f=b;this.c=c} +function Zy(a,b){Py(this);this.f=b;this.g=a;Ry(this);this._d()} +function ZA(a,b){var c;c=a.q.getHours();a.q.setDate(b);YA(a,c)} +function no(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Od(c.g,c.i)}} +function Fx(a){var b;b=new Uqb(Cv(a.length));nmb(b,a);return b} +function ecb(a){function b(){} +;b.prototype=a||{};return new b} +function dkb(a,b){if(Zjb(a,b)){wkb(a);return true}return false} +function aC(a,b){if(b==null){throw vbb(new Geb)}return bC(a,b)} +function tdb(a){if(a.qe()){return null}var b=a.n;return _bb[b]} +function Mld(a){if(a.Db>>16!=3)return null;return BD(a.Cb,33)} +function mpd(a){if(a.Db>>16!=9)return null;return BD(a.Cb,33)} +function fmd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,79)} +function Ind(a){if(a.Db>>16!=7)return null;return BD(a.Cb,235)} +function Fod(a){if(a.Db>>16!=7)return null;return BD(a.Cb,160)} +function Xod(a){if(a.Db>>16!=11)return null;return BD(a.Cb,33)} +function nid(a,b){var c;c=a.Yg(b);return c>=0?a.lh(c):tid(a,b)} +function Dtd(a,b){var c;c=new Bsb(b);Ve(c,a);return new Tkb(c)} +function Uud(a){var b;b=a.d;b=a.si(a.f);wtd(a,b);return b.Ob()} +function t_b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} +function A4b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b} +function Zod(a){return !a.a&&(a.a=new cUd(E2,a,10,11)),a.a.i>0} +function oDb(){this.a=new zsb;this.e=new Tqb;this.g=0;this.i=0} +function BGc(a){this.a=a;this.b=KC(SX,nie,1944,a.e.length,0,2)} +function RHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length)} +function eMc(){eMc=ccb;cMc=new fMc(vle,0);dMc=new fMc('UP',1)} +function STc(){STc=ccb;QTc=new TTc(Yqe,0);RTc=new TTc('FAN',1)} +function evd(){evd=ccb;dvd=new Lqb;cvd=new Lqb;ivd(hK,new jvd)} +function Swd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.f,0)} +function _wd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.k,0)} +function MHd(a){if(a.Db>>16!=3)return null;return BD(a.Cb,147)} +function ZJd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,235)} +function WId(a){if(a.Db>>16!=17)return null;return BD(a.Cb,26)} +function rdb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.le(b))} +function hrb(a,b){var c;c=a.a.get(b);return c==null?new Array:c} +function aB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);YA(a,c)} +function Shb(a,b,c){return b==null?jrb(a.f,null,c):Drb(a.g,b,c)} +function FLd(a,b,c,d,e,f){return new pSd(a.e,b,a.aj(),c,d,e,f)} +function Tfb(a,b,c){a.a=qfb(a.a,0,b)+(''+c)+pfb(a.a,b);return a} +function bq(a,b,c){Ekb(a.a,(Vm(),Wj(b,c),new Wo(b,c)));return a} +function uu(a){ot(a.c);a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} +function vu(a){ot(a.e);a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} +function RZb(a,b){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Ekb(a.d.e,a)} +function QZb(a,b){!!a.c&&Lkb(a.c.g,a);a.c=b;!!a.c&&Ekb(a.c.g,a)} +function $_b(a,b){!!a.c&&Lkb(a.c.a,a);a.c=b;!!a.c&&Ekb(a.c.a,a)} +function F0b(a,b){!!a.i&&Lkb(a.i.j,a);a.i=b;!!a.i&&Ekb(a.i.j,a)} +function jDb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} +function qXb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} +function aOb(a,b){this.a=a;this.c=R6c(this.a);this.b=new K6c(b)} +function IAb(a){var b;Uzb(a);b=new Tqb;return JAb(a,new jBb(b))} +function wCb(a,b){if(a<0||a>b){throw vbb(new qcb(Ake+a+Bke+b))}} +function Ppb(a,b){return vqb(a.a,b)?Qpb(a,BD(b,22).g,null):null} +function WUb(a){LUb();return Bcb(),BD(a.a,81).d.e!=0?true:false} +function qs(){qs=ccb;ps=as((hs(),OC(GC(yG,1),Kie,538,0,[gs])))} +function SBc(){SBc=ccb;RBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function ZBc(){ZBc=ccb;YBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function oCc(){oCc=ccb;nCc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function aJc(){aJc=ccb;_Ic=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function FJc(){FJc=ccb;EJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function ILc(){ILc=ccb;HLc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function wMc(){wMc=ccb;vMc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function fUc(){fUc=ccb;eUc=c3c(new j3c,(yRc(),xRc),(qSc(),kSc))} +function DOc(a,b,c,d){this.c=a;this.d=d;BOc(this,b);COc(this,c)} +function W3c(a){this.c=new Psb;this.b=a.b;this.d=a.c;this.a=a.a} +function e7c(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} +function BOc(a,b){!!a.a&&Lkb(a.a.k,a);a.a=b;!!a.a&&Ekb(a.a.k,a)} +function COc(a,b){!!a.b&&Lkb(a.b.f,a);a.b=b;!!a.b&&Ekb(a.b.f,a)} +function D1c(a,b){E1c(a,a.b,a.c);BD(a.b.b,65);!!b&&BD(b.b,65).b} +function BUd(a,b){CUd(a,b);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2)} +function cJd(a,b){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,b)} +function lKd(a,b){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,b)} +function T2d(a,b){return Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)} +function jsd(a,b){var c,d;c=b.c;d=c!=null;d&&Qpd(a,new yC(b.c))} +function XOd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} +function eTd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} +function yCc(a,b){var c;c=new H1b(a);b.c[b.c.length]=c;return c} +function Aw(a,b){var c;c=BD(Hv(nd(a.a),b),14);return !c?0:c.gc()} +function UAb(a){var b;Uzb(a);b=(ipb(),ipb(),gpb);return VAb(a,b)} +function nr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}} +function Ki(a,b){Ii.call(this,new Mqb(Cv(a)));Xj(b,mie);this.a=b} +function Jib(a,b,c){xCb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b} +function Mkb(a,b,c){var d;xCb(b,c,a.c.length);d=c-b;cCb(a.c,b,d)} +function Fub(a,b){Eub(a,Tbb(xbb(Obb(b,24),nke)),Tbb(xbb(b,nke)))} +function tCb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ake+a+Bke+b))}} +function BCb(a,b){if(a<0||a>=b){throw vbb(new Xfb(Ake+a+Bke+b))}} +function Kub(a,b){this.b=(uCb(a),a);this.a=(b&Rje)==0?b|64|oie:b} +function kkb(a){Vjb(this);dCb(this.a,geb($wnd.Math.max(8,a))<<1)} +function A0b(a){return l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a]))} +function Iyb(){Fyb();return OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])} +function jHb(){gHb();return OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])} +function QHb(){NHb();return OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])} +function HIb(){EIb();return OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])} +function UXb(){RXb();return OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])} +function BTb(){yTb();return OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])} +function Bzc(){xzc();return OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])} +function Xpc(){Rpc();return OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])} +function eqc(){bqc();return OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])} +function Jqc(){Gqc();return OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])} +function Ikc(){Fkc();return OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])} +function hsc(){esc();return OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])} +function $rc(){Xrc();return OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])} +function NAc(){KAc();return OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])} +function wAc(){tAc();return OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])} +function WAc(){TAc();return OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])} +function OBc(){LBc();return OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])} +function wBc(){tBc();return OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])} +function FBc(){CBc();return OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])} +function uGc(){rGc();return OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])} +function xVc(){tVc();return OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])} +function tWc(){pWc();return OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])} +function CYc(){zYc();return OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])} +function wXc(){sXc();return OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])} +function _$c(){Y$c();return OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])} +function kbd(){hbd();return OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])} +function tad(){qad();return OC(GC(u1,1),Kie,272,0,[nad,oad,pad])} +function o3d(a,b){return p3d(a,b,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function LZc(a,b,c){var d;d=MZc(a,b,false);return d.b<=b&&d.a<=c} +function tMc(a,b,c){var d;d=new sMc;d.b=b;d.a=c;++b.b;Ekb(a.d,d)} +function fs(a,b){var c;c=(uCb(a),a).g;lCb(!!c);uCb(b);return c(b)} +function av(a,b){var c,d;d=cv(a,b);c=a.a.Zc(d);return new qv(a,c)} +function cKd(a){if(a.Db>>16!=6)return null;return BD(aid(a),235)} +function Uwd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.f)&aje} +function bxd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.k)&aje} +function Z1d(a){a.a==(T0d(),S0d)&&d2d(a,U0d(a.g,a.b));return a.a} +function _1d(a){a.d==(T0d(),S0d)&&f2d(a,Y0d(a.g,a.b));return a.d} +function mlb(a){sCb(a.ad?1:0} +function bjc(a,b){var c,d;c=ajc(b);d=c;return BD(Ohb(a.c,d),19).a} +function iSc(a,b){var c;c=a+'';while(c.length0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} +function wwb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)} +function RSd(a){return !!a.a&&QSd(a.a.a).i!=0&&!(!!a.b&&QTd(a.b))} +function cLd(a){return !!a.u&&VKd(a.u.a).i!=0&&!(!!a.n&&FMd(a.n))} +function $i(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),16,new ij(a))} +function XA(a,b){return ueb(Cbb(a.q.getTime()),Cbb(b.q.getTime()))} +function k_b(a){return BD(Qkb(a,KC(AQ,jne,17,a.c.length,0,1)),474)} +function l_b(a){return BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193)} +function cKc(a){FJc();return !OZb(a)&&!(!OZb(a)&&a.c.i.c==a.d.i.c)} +function kDb(a,b,c){var d;d=(Qb(a),new Tkb(a));iDb(new jDb(d,b,c))} +function rXb(a,b,c){var d;d=(Qb(a),new Tkb(a));pXb(new qXb(d,b,c))} +function Nwb(a,b){var c;c=1-b;a.a[c]=Owb(a.a[c],c);return Owb(a,b)} +function YXc(a,b){var c;a.e=new QXc;c=gVc(b);Okb(c,a.c);ZXc(a,c,0)} +function o4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.a,e)} +function p4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.b,e)} +function i6d(a){var b,c,d;b=new A6d;c=s6d(b,a);z6d(b);d=c;return d} +function vZd(){var a,b,c;b=(c=(a=new UQd,a),c);Ekb(rZd,b);return b} +function H2c(a){a.j.c=KC(SI,Uhe,1,0,5,1);Ae(a.c);h3c(a.a);return a} +function tgc(a){qgc();if(JD(a.g,10)){return BD(a.g,10)}return null} +function Zw(a){if(Ah(a).dc()){return false}Bh(a,new bx);return true} +function _y(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} +function Pb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ib(a,b)))}return a} +function Tb(a,b,c){if(a<0||bc){throw vbb(new qcb(Kb(a,b,c)))}} +function eVb(a,b){Qqb(a.a,b);if(b.d){throw vbb(new hz(Hke))}b.d=a} +function xpb(a,b){if(b.$modCount!=a.$modCount){throw vbb(new Apb)}} +function $pb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function dib(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function msb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function qAb(a,b){if(a.a<=a.b){b.ud(a.a++);return true}return false} +function Sbb(a){var b;if(Fbb(a)){b=a;return b==-0.?0:b}return oD(a)} +function tAb(a){var b;Tzb(a);b=new drb;_ub(a.a,new BAb(b));return b} +function Yzb(a){var b;Tzb(a);b=new Gpb;_ub(a.a,new mAb(b));return b} +function Bib(a,b){this.a=a;vib.call(this,a);wCb(b,a.gc());this.b=b} +function orb(a){this.e=a;this.b=this.e.a.entries();this.a=new Array} +function Oi(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),273,new cj(a))} +function Qu(a){return new Skb((Xj(a,Mie),Oy(wbb(wbb(5,a),a/10|0))))} +function m_b(a){return BD(Qkb(a,KC(aR,lne,11,a.c.length,0,1)),1943)} +function sMb(a,b,c){return c.f.c.length>0?HMb(a.a,b,c):HMb(a.b,b,c)} +function SZb(a,b,c){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Dkb(a.d.e,c,a)} +function a5b(a,b){i5b(b,a);k5b(a.d);k5b(BD(vNb(a,(Nyc(),wxc)),207))} +function _4b(a,b){f5b(b,a);h5b(a.d);h5b(BD(vNb(a,(Nyc(),wxc)),207))} +function Ypd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.fe());return d} +function Zpd(a,b){var c,d;c=tB(a,b);d=null;!!c&&(d=c.ie());return d} +function $pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.ie());return d} +function _pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=aqd(c));return d} +function Tqd(a,b,c){var d;d=Wpd(c);ro(a.g,d,b);ro(a.i,b,c);return b} +function Ez(a,b,c){var d;d=Cz();try{return Bz(a,b,c)}finally{Fz(d)}} +function C6d(a){var b;b=a.Wg();this.a=JD(b,69)?BD(b,69).Zh():b.Kc()} +function j3c(){D2c.call(this);this.j.c=KC(SI,Uhe,1,0,5,1);this.a=-1} +function mxd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} +function jk(a,b,c,d){this.e=d;this.d=null;this.c=a;this.a=b;this.b=c} +function uEc(a,b,c){this.d=new HEc(this);this.e=a;this.i=b;this.f=c} +function msc(){msc=ccb;ksc=new nsc(gle,0);lsc=new nsc('TOP_LEFT',1)} +function cDc(){cDc=ccb;bDc=ix(meb(1),meb(4));aDc=ix(meb(1),meb(2))} +function z_c(){z_c=ccb;y_c=as((s_c(),OC(GC(O_,1),Kie,551,0,[r_c])))} +function q_c(){q_c=ccb;p_c=as((i_c(),OC(GC(N_,1),Kie,482,0,[h_c])))} +function Z0c(){Z0c=ccb;Y0c=as((R0c(),OC(GC(W_,1),Kie,530,0,[Q0c])))} +function hPb(){hPb=ccb;gPb=as((cPb(),OC(GC(GO,1),Kie,481,0,[bPb])))} +function yLb(){vLb();return OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])} +function qxb(){lxb();return OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])} +function UOb(){ROb();return OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])} +function UMb(){RMb();return OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])} +function sWb(){lWb();return OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])} +function kbc(){gbc();return OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])} +function Vc(a,b,c,d){return JD(c,54)?new Cg(a,b,c,d):new qg(a,b,c,d)} +function Djc(){Ajc();return OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])} +function okc(a){var b;return a.j==(Ucd(),Rcd)&&(b=pkc(a),uqb(b,zcd))} +function Mdc(a,b){var c;c=b.a;QZb(c,b.c.d);RZb(c,b.d.d);q7c(c.a,a.n)} +function Smc(a,b){return BD(Btb(QAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} +function Tmc(a,b){return BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} +function _w(a){return new Kub(rmb(BD(a.a.dd(),14).gc(),a.a.cd()),16)} +function Qq(a){if(JD(a,14)){return BD(a,14).dc()}return !a.Kc().Ob()} +function ugc(a){qgc();if(JD(a.g,145)){return BD(a.g,145)}return null} +function Ko(a){if(a.e.g!=a.b){throw vbb(new Apb)}return !!a.c&&a.d>0} +function Xsb(a){sCb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} +function Xjb(a,b){uCb(b);NC(a.a,a.c,b);a.c=a.c+1&a.a.length-1;_jb(a)} +function Wjb(a,b){uCb(b);a.b=a.b-1&a.a.length-1;NC(a.a,a.b,b);_jb(a)} +function A2c(a,b){var c;for(c=a.j.c.length;c0&&$fb(a.g,0,b,0,a.i);return b} +function qEd(a,b){pEd();var c;c=BD(Ohb(oEd,a),55);return !c||c.wj(b)} +function Twd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.f)<<24>>24} +function axd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.k)<<24>>24} +function gxd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.k)<<16>>16} +function Zwd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.f)<<16>>16} +function sr(a){var b;b=0;while(a.Ob()){a.Pb();b=wbb(b,1)}return Oy(b)} +function nx(a,b){var c;c=new Vfb;a.xd(c);c.a+='..';b.yd(c);return c.a} +function Sgc(a,b,c){var d;d=BD(Ohb(a.g,c),57);Ekb(a.a.c,new vgd(b,d))} +function VCb(a,b,c){return Ddb(ED(Wd(irb(a.f,b))),ED(Wd(irb(a.f,c))))} +function E2d(a,b,c){return F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function L2d(a,b,c){return M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function q3d(a,b,c){return r3d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function JJc(a,b){return a==(j0b(),h0b)&&b==h0b?4:a==h0b||b==h0b?8:32} +function Nd(a,b){return PD(b)===PD(a)?'(this Map)':b==null?Xhe:fcb(b)} +function kFd(a,b){return BD(b==null?Wd(irb(a.f,null)):Crb(a.g,b),281)} +function Rqd(a,b,c){var d;d=Wpd(c);Rhb(a.b,d,b);Rhb(a.c,b,c);return b} +function Bfd(a,b){var c;c=b;while(c){O6c(a,c.i,c.j);c=Xod(c)}return a} +function kt(a,b){var c;c=vmb(Nu(new wu(a,b)));ir(new wu(a,b));return c} +function R6d(a,b){Q6d();var c;c=BD(a,66).Mj();kVd(c,b);return c.Ok(b)} +function TOc(a,b,c,d,e){var f;f=OOc(e,c,d);Ekb(b,tOc(e,f));XOc(a,e,b)} +function mic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c);kic(a,b,c)} +function dB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+nje);YA(a,c)} +function dC(d,a,b){if(b){var c=b.ee();d.a[a]=c(b)}else{delete d.a[a]}} +function vB(d,a,b){if(b){var c=b.ee();b=c(b)}else{b=undefined}d.a[a]=b} +function pCb(a){if(a<0){throw vbb(new Feb('Negative array size: '+a))}} +function VKd(a){if(!a.n){$Kd(a);a.n=new JMd(a,j5,a);_Kd(a)}return a.n} +function Fqb(a){sCb(a.a=0&&a.a[c]===b[c];c--);return c<0} +function Ucc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0} +function Dtb(a,b){uCb(b);if(a.a!=null){return Itb(b.Kb(a.a))}return ztb} +function Gx(a){var b;if(a){return new Bsb(a)}b=new zsb;Jq(b,a);return b} +function GAb(a,b){var c;return b.b.Kb(SAb(a,b.c.Ee(),(c=new TBb(b),c)))} +function Hub(a){zub();Eub(this,Tbb(xbb(Obb(a,24),nke)),Tbb(xbb(a,nke)))} +function REb(){REb=ccb;QEb=as((MEb(),OC(GC(aN,1),Kie,428,0,[LEb,KEb])))} +function ZEb(){ZEb=ccb;YEb=as((UEb(),OC(GC(bN,1),Kie,427,0,[SEb,TEb])))} +function aSb(){aSb=ccb;_Rb=as((XRb(),OC(GC(gP,1),Kie,424,0,[VRb,WRb])))} +function D5b(){D5b=ccb;C5b=as((y5b(),OC(GC(ZR,1),Kie,511,0,[x5b,w5b])))} +function Cqc(){Cqc=ccb;Bqc=as((xqc(),OC(GC(JW,1),Kie,419,0,[vqc,wqc])))} +function erc(){erc=ccb;drc=as((_qc(),OC(GC(MW,1),Kie,479,0,[$qc,Zqc])))} +function eBc(){eBc=ccb;dBc=as((_Ac(),OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])))} +function GAc(){GAc=ccb;FAc=as((BAc(),OC(GC(cX,1),Kie,421,0,[zAc,AAc])))} +function Npc(){Npc=ccb;Mpc=as((Ipc(),OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])))} +function rsc(){rsc=ccb;qsc=as((msc(),OC(GC(SW,1),Kie,420,0,[ksc,lsc])))} +function MOc(){MOc=ccb;LOc=as((HOc(),OC(GC(DZ,1),Kie,520,0,[GOc,FOc])))} +function ZIc(){ZIc=ccb;YIc=as((UIc(),OC(GC(mY,1),Kie,523,0,[TIc,SIc])))} +function bMc(){bMc=ccb;aMc=as((YLc(),OC(GC(fZ,1),Kie,516,0,[XLc,WLc])))} +function jMc(){jMc=ccb;iMc=as((eMc(),OC(GC(gZ,1),Kie,515,0,[cMc,dMc])))} +function KQc(){KQc=ccb;JQc=as((FQc(),OC(GC(YZ,1),Kie,455,0,[DQc,EQc])))} +function dUc(){dUc=ccb;cUc=as(($Tc(),OC(GC(F$,1),Kie,425,0,[ZTc,YTc])))} +function XUc(){XUc=ccb;WUc=as((PUc(),OC(GC(K$,1),Kie,495,0,[NUc,OUc])))} +function XTc(){XTc=ccb;WTc=as((STc(),OC(GC(E$,1),Kie,480,0,[QTc,RTc])))} +function lWc(){lWc=ccb;kWc=as((fWc(),OC(GC(X$,1),Kie,426,0,[dWc,eWc])))} +function i1c(){i1c=ccb;h1c=as((a1c(),OC(GC(X_,1),Kie,429,0,[_0c,$0c])))} +function H_c(){H_c=ccb;G_c=as((C_c(),OC(GC(P_,1),Kie,430,0,[B_c,A_c])))} +function UIc(){UIc=ccb;TIc=new VIc('UPPER',0);SIc=new VIc('LOWER',1)} +function Lqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} +function Oqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} +function Jic(a,b){var c,d;d=false;do{c=Mic(a,b);d=d|c}while(c);return d} +function zHc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d} +function Cfd(a,b){var c;c=b;while(c){O6c(a,-c.i,-c.j);c=Xod(c)}return a} +function reb(a,b){var c,d;uCb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.td(c)}} +function me(a,b){var c;c=b.cd();return new Wo(c,a.e.pc(c,BD(b.dd(),14)))} +function Gsb(a,b,c,d){var e;e=new jtb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b} +function Nkb(a,b,c){var d;d=(tCb(b,a.c.length),a.c[b]);a.c[b]=c;return d} +function lFd(a,b,c){return BD(b==null?jrb(a.f,null,c):Drb(a.g,b,c),281)} +function fRb(a){return !!a.c&&!!a.d?oRb(a.c)+'->'+oRb(a.d):'e_'+FCb(a)} +function FAb(a,b){return (Uzb(a),WAb(new YAb(a,new qBb(b,a.a)))).sd(DAb)} +function tUb(){qUb();return OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])} +function _cd(){Ucd();return OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])} +function Dz(b){Az();return function(){return Ez(b,this,arguments);var a}} +function sz(){if(Date.now){return Date.now()}return (new Date).getTime()} +function OZb(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i} +function pv(a){if(!a.c.Sb()){throw vbb(new utb)}a.a=true;return a.c.Ub()} +function ko(a){a.i=0;Alb(a.b,null);Alb(a.c,null);a.a=null;a.e=null;++a.g} +function ycb(a){wcb.call(this,a==null?Xhe:fcb(a),JD(a,78)?BD(a,78):null)} +function PYb(a){MYb();yXb(this);this.a=new Psb;NYb(this,a);Dsb(this.a,a)} +function jYb(){Ckb(this);this.b=new f7c(Pje,Pje);this.a=new f7c(Qje,Qje)} +function rAb(a,b){this.c=0;this.b=b;jvb.call(this,a,17493);this.a=this.c} +function wyb(a){oyb();if(lyb){return}this.c=a;this.e=true;this.a=new Rkb} +function oyb(){oyb=ccb;lyb=true;jyb=false;kyb=false;nyb=false;myb=false} +function C3c(a,b){if(JD(b,149)){return dfb(a.c,BD(b,149).c)}return false} +function zUc(a,b){var c;c=0;!!a&&(c+=a.f.a/2);!!b&&(c+=b.f.a/2);return c} +function j4c(a,b){var c;c=BD(Wrb(a.d,b),23);return c?c:BD(Wrb(a.e,b),23)} +function Lzd(a){this.b=a;Fyd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} +function Uzd(a){this.b=a;$yd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} +function $Kd(a){if(!a.t){a.t=new YMd(a);vtd(new c0d(a),0,a.t)}return a.t} +function kad(){ead();return OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])} +function Wbd(){Tbd();return OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])} +function Q5c(){N5c();return OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])} +function Q_c(){N_c();return OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])} +function _zc(){Vzc();return OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])} +function sqc(){mqc();return OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])} +function n$c(){k$c();return OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])} +function _jc(){Xjc();return OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])} +function Ftc(){Ctc();return OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])} +function T0d(){T0d=ccb;var a,b;R0d=(LFd(),b=new MPd,b);S0d=(a=new OJd,a)} +function yUd(a){var b;if(!a.c){b=a.r;JD(b,88)&&(a.c=BD(b,26))}return a.c} +function zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false} +function RC(a){var b,c,d;b=a&Eje;c=a>>22&Eje;d=a<0?Fje:0;return TC(b,c,d)} +function uy(a){var b,c,d,e;for(c=a,d=0,e=c.length;d0?ihb(a,b):lhb(a,-b)} +function Rgb(a,b){if(b==0||a.e==0){return a}return b>0?lhb(a,b):ihb(a,-b)} +function Rr(a){if(Qr(a)){a.c=a.a;return a.a.Pb()}else{throw vbb(new utb)}} +function Yac(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(j0b(),e0b)&&c.k==e0b} +function kZb(a){var b;b=new UZb;tNb(b,a);yNb(b,(Nyc(),jxc),null);return b} +function hid(a,b,c){var d;return d=a.Yg(b),d>=0?a._g(d,c,true):sid(a,b,c)} +function uHb(a,b,c,d){var e;for(e=0;eb){throw vbb(new qcb(Jb(a,b,'index')))}return a} +function zhb(a,b,c,d){var e;e=KC(WD,oje,25,b,15,1);Ahb(e,a,b,c,d);return e} +function _A(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);YA(a,c)} +function A$c(a,b){return $wnd.Math.min(S6c(b.a,a.d.d.c),S6c(b.b,a.d.d.c))} +function Thb(a,b){return ND(b)?b==null?krb(a.f,null):Erb(a.g,b):krb(a.f,b)} +function b1b(a){this.c=a;this.a=new olb(this.c.a);this.b=new olb(this.c.b)} +function kRb(){this.e=new Rkb;this.c=new Rkb;this.d=new Rkb;this.b=new Rkb} +function MFb(){this.g=new PFb;this.b=new PFb;this.a=new Rkb;this.k=new Rkb} +function Gjc(a,b,c){this.a=a;this.c=b;this.d=c;Ekb(b.e,this);Ekb(c.b,this)} +function wBb(a,b){fvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function CBb(a,b){jvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function IBb(a,b){nvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function BQc(a,b,c){this.a=a;this.b=b;this.c=c;Ekb(a.t,this);Ekb(b.i,this)} +function SRc(){this.b=new Psb;this.a=new Psb;this.b=new Psb;this.a=new Psb} +function g6c(){g6c=ccb;f6c=new Lsd('org.eclipse.elk.labels.labelManager')} +function Vac(){Vac=ccb;Uac=new Msd('separateLayerConnections',(gbc(),fbc))} +function HOc(){HOc=ccb;GOc=new IOc('REGULAR',0);FOc=new IOc('CRITICAL',1)} +function _Ac(){_Ac=ccb;$Ac=new aBc('STACKED',0);ZAc=new aBc('SEQUENCED',1)} +function C_c(){C_c=ccb;B_c=new D_c('FIXED',0);A_c=new D_c('CENTER_NODE',1)} +function PHc(a,b){var c;c=VHc(a,b);a.b=new BHc(c.c.length);return OHc(a,c)} +function KAd(a,b,c){var d;++a.e;--a.f;d=BD(a.d[b].$c(c),133);return d.dd()} +function JJd(a){var b;if(!a.a){b=a.r;JD(b,148)&&(a.a=BD(b,148))}return a.a} +function poc(a){if(a.a){if(a.e){return poc(a.e)}}else{return a}return null} +function ODc(a,b){if(a.pb.p){return -1}return 0} +function pvb(a,b){uCb(b);if(a.c=0,'Initial capacity must not be negative')} +function lHb(){lHb=ccb;kHb=as((gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])))} +function SHb(){SHb=ccb;RHb=as((NHb(),OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])))} +function JIb(){JIb=ccb;IIb=as((EIb(),OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])))} +function Kyb(){Kyb=ccb;Jyb=as((Fyb(),OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])))} +function DTb(){DTb=ccb;CTb=as((yTb(),OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])))} +function WXb(){WXb=ccb;VXb=as((RXb(),OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])))} +function Zpc(){Zpc=ccb;Ypc=as((Rpc(),OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])))} +function gqc(){gqc=ccb;fqc=as((bqc(),OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])))} +function Lqc(){Lqc=ccb;Kqc=as((Gqc(),OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])))} +function Kkc(){Kkc=ccb;Jkc=as((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])))} +function jsc(){jsc=ccb;isc=as((esc(),OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])))} +function asc(){asc=ccb;_rc=as((Xrc(),OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])))} +function Dzc(){Dzc=ccb;Czc=as((xzc(),OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])))} +function YAc(){YAc=ccb;XAc=as((TAc(),OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])))} +function yAc(){yAc=ccb;xAc=as((tAc(),OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])))} +function PAc(){PAc=ccb;OAc=as((KAc(),OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])))} +function QBc(){QBc=ccb;PBc=as((LBc(),OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])))} +function yBc(){yBc=ccb;xBc=as((tBc(),OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])))} +function HBc(){HBc=ccb;GBc=as((CBc(),OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])))} +function wGc(){wGc=ccb;vGc=as((rGc(),OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])))} +function zVc(){zVc=ccb;yVc=as((tVc(),OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])))} +function vWc(){vWc=ccb;uWc=as((pWc(),OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])))} +function EYc(){EYc=ccb;DYc=as((zYc(),OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])))} +function yXc(){yXc=ccb;xXc=as((sXc(),OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])))} +function b_c(){b_c=ccb;a_c=as((Y$c(),OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])))} +function mbd(){mbd=ccb;lbd=as((hbd(),OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])))} +function vad(){vad=ccb;uad=as((qad(),OC(GC(u1,1),Kie,272,0,[nad,oad,pad])))} +function icd(){dcd();return OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])} +function ikd(a,b){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),qAd(a.o,b)} +function NAd(a){!a.g&&(a.g=new JCd);!a.g.d&&(a.g.d=new MBd(a));return a.g.d} +function yAd(a){!a.g&&(a.g=new JCd);!a.g.a&&(a.g.a=new SBd(a));return a.g.a} +function EAd(a){!a.g&&(a.g=new JCd);!a.g.b&&(a.g.b=new GBd(a));return a.g.b} +function FAd(a){!a.g&&(a.g=new JCd);!a.g.c&&(a.g.c=new iCd(a));return a.g.c} +function A2d(a,b,c){var d,e;e=new p4d(b,a);for(d=0;dc||b=0?a._g(c,true,true):sid(a,b,true)} +function s6b(a,b){return Kdb(Edb(ED(vNb(a,(wtc(),htc)))),Edb(ED(vNb(b,htc))))} +function pUc(){pUc=ccb;oUc=b3c(b3c(g3c(new j3c,(yRc(),vRc)),(qSc(),pSc)),lSc)} +function IHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length);return KHc(a,d)} +function qhe(a){if(a.b<=0)throw vbb(new utb);--a.b;a.a-=a.c.c;return meb(a.a)} +function ptd(a){var b;if(!a.a){throw vbb(new vtb)}b=a.a;a.a=Xod(a.a);return b} +function dBb(a){while(!a.a){if(!HBb(a.c,new hBb(a))){return false}}return true} +function vr(a){var b;Qb(a);if(JD(a,198)){b=BD(a,198);return b}return new wr(a)} +function r3c(a){p3c();BD(a.We((Y9c(),x9c)),174).Fc((rcd(),ocd));a.Ye(w9c,null)} +function p3c(){p3c=ccb;m3c=new v3c;o3c=new x3c;n3c=mn((Y9c(),w9c),m3c,b9c,o3c)} +function fWc(){fWc=ccb;dWc=new hWc('LEAF_NUMBER',0);eWc=new hWc('NODE_SIZE',1)} +function UMc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Osb(a.d);a.e.a.c=KC(SI,Uhe,1,0,5,1)} +function yHc(a){a.a=KC(WD,oje,25,a.b+1,15,1);a.c=KC(WD,oje,25,a.b,15,1);a.d=0} +function MWb(a,b){if(a.a.ue(b.d,a.b)>0){Ekb(a.c,new dWb(b.c,b.d,a.d));a.b=b.d}} +function nud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.g[b]} +function pOd(a,b,c){Itd(a,c);if(c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} +function KLd(a){var b;if(a.Ek()){for(b=a.i-1;b>=0;--b){qud(a,b)}}return wud(a)} +function Bwb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} +function ulb(a,b){var c,d;pCb(b);return c=(d=a.slice(0,b),PC(d,a)),c.length=b,c} +function Klb(a,b,c,d){var e;d=(ipb(),!d?fpb:d);e=a.slice(b,c);Llb(e,a,b,c,-b,d)} +function bid(a,b,c,d,e){return b<0?sid(a,c,d):BD(c,66).Nj().Pj(a,a.yh(),b,d,e)} +function hZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} +function iZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} +function nDb(a,b){if(b.a){throw vbb(new hz(Hke))}Qqb(a.a,b);b.a=a;!a.j&&(a.j=b)} +function qBb(a,b){nvb.call(this,b.rd(),b.qd()&-16449);uCb(a);this.a=a;this.c=b} +function Ti(a,b){var c,d;d=b/a.c.Hd().gc()|0;c=b%a.c.Hd().gc();return Mi(a,d,c)} +function NHb(){NHb=ccb;LHb=new OHb(jle,0);KHb=new OHb(gle,1);MHb=new OHb(kle,2)} +function lxb(){lxb=ccb;hxb=new mxb('All',0);ixb=new rxb;jxb=new txb;kxb=new wxb} +function zxb(){zxb=ccb;yxb=as((lxb(),OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])))} +function uWb(){uWb=ccb;tWb=as((lWb(),OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])))} +function ALb(){ALb=ccb;zLb=as((vLb(),OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])))} +function WMb(){WMb=ccb;VMb=as((RMb(),OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])))} +function WOb(){WOb=ccb;VOb=as((ROb(),OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])))} +function GRc(){GRc=ccb;FRc=as((yRc(),OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])))} +function mbc(){mbc=ccb;lbc=as((gbc(),OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])))} +function oXc(){oXc=ccb;nXc=as((iXc(),OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])))} +function Fjc(){Fjc=ccb;Ejc=as((Ajc(),OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])))} +function Pzc(){Pzc=ccb;Ozc=as((Izc(),OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])))} +function ugd(){ugd=ccb;tgd=as((pgd(),OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])))} +function xbd(){xbd=ccb;wbd=as((rbd(),OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])))} +function Fad(){Fad=ccb;Ead=as((Aad(),OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])))} +function Ied(){Ied=ccb;Hed=as((Ded(),OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])))} +function ydd(){ydd=ccb;xdd=as((tdd(),OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])))} +function A9d(){A9d=ccb;Smd();x9d=Pje;w9d=Qje;z9d=new Ndb(Pje);y9d=new Ndb(Qje)} +function _qc(){_qc=ccb;$qc=new arc(ane,0);Zqc=new arc('IMPROVE_STRAIGHTNESS',1)} +function eIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} +function gIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} +function PC(a,b){HC(b)!=10&&OC(rb(b),b.hm,b.__elementTypeId$,HC(b),a);return a} +function Lkb(a,b){var c;c=Jkb(a,b,0);if(c==-1){return false}Kkb(a,c);return true} +function Zrb(a,b){var c;c=BD(Thb(a.e,b),387);if(c){jsb(c);return c.e}return null} +function Jbb(a){var b;if(Fbb(a)){b=0-a;if(!isNaN(b)){return b}}return zbb(hD(a))} +function Jkb(a,b,c){for(;c=0?fid(a,c,true,true):sid(a,b,true)} +function vgc(a,b){qgc();var c,d;c=ugc(a);d=ugc(b);return !!c&&!!d&&!omb(c.k,d.k)} +function Gqd(a,b){dld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Hqd(a,b){eld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Iqd(a,b){cld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Jqd(a,b){ald(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function agd(a){(!this.q?(mmb(),mmb(),kmb):this.q).Ac(!a.q?(mmb(),mmb(),kmb):a.q)} +function S2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} +function U2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} +function INb(a,b){HNb=new tOb;FNb=b;GNb=a;BD(GNb.b,65);KNb(GNb,HNb,null);JNb(GNb)} +function uud(a,b,c){var d;d=a.g[b];mud(a,b,a.oi(b,c));a.gi(b,c,d);a.ci();return d} +function Ftd(a,b){var c;c=a.Xc(b);if(c>=0){a.$c(c);return true}else{return false}} +function YId(a){var b;if(a.d!=a.r){b=wId(a);a.e=!!b&&b.Cj()==Bve;a.d=b}return a.e} +function fr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c} +function Wrb(a,b){var c;c=BD(Ohb(a.e,b),387);if(c){Yrb(a,c);return c.e}return null} +function UA(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} +function LAb(a,b){var c,d;Uzb(a);d=new IBb(b,a.a);c=new fBb(d);return new YAb(a,c)} +function tB(d,a){var b=d.a[a];var c=(rC(),qC)[typeof b];return c?c(b):xC(typeof b)} +function yzc(a){switch(a.g){case 0:return Ohe;case 1:return -1;default:return 0;}} +function oD(a){if(eD(a,(wD(),vD))<0){return -aD(hD(a))}return a.l+a.m*Hje+a.h*Ije} +function HC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} +function dub(a){var b;b=a.b.c.length==0?null:Ikb(a.b,0);b!=null&&fub(a,0);return b} +function uA(a,b){while(b[0]=0){++b[0]}} +function sgb(a,b){this.e=b;this.a=vgb(a);this.a<54?(this.f=Sbb(a)):(this.c=ghb(a))} +function vge(a,b,c,d){wfe();xfe.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d} +function EA(a,b,c){var d,e;d=10;for(e=0;ea.a[d]&&(d=c)}return d} +function fic(a,b){var c;c=Jy(a.e.c,b.e.c);if(c==0){return Kdb(a.e.d,b.e.d)}return c} +function Ogb(a,b){if(b.e==0){return Ggb}if(a.e==0){return Ggb}return Dhb(),Ehb(a,b)} +function nCb(a,b){if(!a){throw vbb(new Wdb(DCb('Enum constant undefined: %s',b)))}} +function AWb(){AWb=ccb;xWb=new XWb;yWb=new _Wb;vWb=new dXb;wWb=new hXb;zWb=new lXb} +function UEb(){UEb=ccb;SEb=new VEb('BY_SIZE',0);TEb=new VEb('BY_SIZE_AND_SHAPE',1)} +function XRb(){XRb=ccb;VRb=new YRb('EADES',0);WRb=new YRb('FRUCHTERMAN_REINGOLD',1)} +function xqc(){xqc=ccb;vqc=new yqc('READING_DIRECTION',0);wqc=new yqc('ROTATION',1)} +function uqc(){uqc=ccb;tqc=as((mqc(),OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])))} +function bAc(){bAc=ccb;aAc=as((Vzc(),OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])))} +function bkc(){bkc=ccb;akc=as((Xjc(),OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])))} +function Htc(){Htc=ccb;Gtc=as((Ctc(),OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])))} +function S_c(){S_c=ccb;R_c=as((N_c(),OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])))} +function S5c(){S5c=ccb;R5c=as((N5c(),OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])))} +function p$c(){p$c=ccb;o$c=as((k$c(),OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])))} +function vUb(){vUb=ccb;uUb=as((qUb(),OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])))} +function mad(){mad=ccb;lad=as((ead(),OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])))} +function Ybd(){Ybd=ccb;Xbd=as((Tbd(),OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])))} +function cdd(){cdd=ccb;bdd=as((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])))} +function _1c(a,b){var c;c=BD(Ohb(a.a,b),134);if(!c){c=new zNb;Rhb(a.a,b,c)}return c} +function hoc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.a==a}return false} +function ioc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.i==a}return false} +function Jub(a,b){uCb(b);Iub(a);if(a.d.Ob()){b.td(a.d.Pb());return true}return false} +function Oy(a){if(ybb(a,Ohe)>0){return Ohe}if(ybb(a,Rie)<0){return Rie}return Tbb(a)} +function Cv(a){if(a<3){Xj(a,Hie);return a+1}if(a=0&&b=-0.01&&a.a<=ple&&(a.a=0);a.b>=-0.01&&a.b<=ple&&(a.b=0);return a} +function sfb(a,b){return b==(ntb(),ntb(),mtb)?a.toLocaleLowerCase():a.toLowerCase()} +function idb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(fdb(a),a.o)} +function Pnd(a){var b,c;c=(b=new SSd,b);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),c)} +function Pdd(a,b){var c;c=b>0?b-1:b;return Vdd(Wdd(Xdd(Ydd(new Zdd,c),a.n),a.j),a.k)} +function u2d(a,b,c,d){var e;a.j=-1;Qxd(a,I2d(a,b,c),(Q6d(),e=BD(b,66).Mj(),e.Ok(d)))} +function VWb(a){this.g=a;this.f=new Rkb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)} +function mDb(a){this.b=new Rkb;this.a=new Rkb;this.c=new Rkb;this.d=new Rkb;this.e=a} +function Cnc(a,b){this.a=new Lqb;this.e=new Lqb;this.b=(xzc(),wzc);this.c=a;this.b=b} +function bIb(a,b,c){$Gb.call(this);THb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e} +function yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(hs(),gs)} +function zud(a){if(a<0){throw vbb(new Wdb('Illegal Capacity: '+a))}this.g=this.ri(a)} +function avb(a,b){if(0>a||a>b){throw vbb(new scb('fromIndex: 0, toIndex: '+a+oke+b))}} +function Gs(a){var b;if(a.a==a.b.a){throw vbb(new utb)}b=a.a;a.c=b;a.a=a.a.e;return b} +function Zsb(a){var b;yCb(!!a.c);b=a.c.a;Nsb(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null} +function VAb(a,b){var c;Uzb(a);c=new lBb(a,a.a.rd(),a.a.qd()|4,b);return new YAb(a,c)} +function ke(a,b){var c,d;c=BD(Hv(a.d,b),14);if(!c){return null}d=b;return a.e.pc(d,c)} +function xac(a,b){var c,d;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),70);yNb(c,(wtc(),Ssc),b)}} +function t9b(a){var b;b=Edb(ED(vNb(a,(Nyc(),Zwc))));if(b<0){b=0;yNb(a,Zwc,b)}return b} +function ifc(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);cfc(c,d,1);Ekb(b,new rfc(c,d))} +function NMc(a,b,c){var d;d=a.a.e[BD(b.a,10).p]-a.a.e[BD(c.a,10).p];return QD(Eeb(d))} +function iZb(a,b,c,d,e,f){var g;g=kZb(d);QZb(g,e);RZb(g,f);Rc(a.a,d,new BZb(g,b,c.f))} +function Bid(a,b){var c;c=YKd(a.Tg(),b);if(!c){throw vbb(new Wdb(ite+b+lte))}return c} +function ntd(a,b){var c;c=a;while(Xod(c)){c=Xod(c);if(c==b){return true}}return false} +function Uw(a,b){var c,d,e;d=b.a.cd();c=BD(b.a.dd(),14).gc();for(e=0;e0){a.a/=b;a.b/=b}return a} +function bKd(a){var b;if(a.w){return a.w}else{b=cKd(a);!!b&&!b.kh()&&(a.w=b);return b}} +function gZd(a){var b;if(a==null){return null}else{b=BD(a,190);return Umd(b,b.length)}} +function qud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.li(b,a.g[b])} +function Mmc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){rqb(a.b,b);b=Xcd(b)}rqb(a.b,b)} +function Jmc(a){var b;for(b=0;b=14&&b<=16)));return a} +function dcb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d} +function TLc(a,b,c){var d,e;d=b;do{e=Edb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)} +function NQd(a,b){var c,d;d=a.a;c=OQd(a,b,null);d!=b&&!a.e&&(c=QQd(a,b,c));!!c&&c.Fi()} +function ADb(a,b){return Iy(),My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} +function Ky(a,b){Iy();My(Qie);return $wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} +function Akc(a,b){gkc();return beb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)} +function oo(a,b){return Kv(uo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} +function o0b(){o0b=ccb;n0b=as((j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])))} +function n8c(){n8c=ccb;m8c=as((i8c(),OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])))} +function K7c(){K7c=ccb;J7c=as((F7c(),OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])))} +function Fpc(){Fpc=ccb;Epc=as((Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])))} +function Drc(){Drc=ccb;Crc=as((yrc(),OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])))} +function qrc(){qrc=ccb;prc=as((lrc(),OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])))} +function tzc(){tzc=ccb;szc=as((lzc(),OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])))} +function Yqc(){Yqc=ccb;Xqc=as((Sqc(),OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])))} +function wSc(){wSc=ccb;vSc=as((qSc(),OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])))} +function ycd(){ycd=ccb;xcd=as((rcd(),OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])))} +function Rad(){Rad=ccb;Qad=as((Mad(),OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])))} +function Lbd(){Hbd();return OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])} +function vkd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,0,c,a.a))} +function wkd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.b))} +function hmd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.b))} +function ald(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.f))} +function cld(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.g))} +function dld(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,5,c,a.i))} +function eld(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,6,c,a.j))} +function omd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.j))} +function imd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.c))} +function pmd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,2,c,a.k))} +function qQd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,2,c,a.d))} +function AId(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,4,c,a.s))} +function DId(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,5,c,a.t))} +function _Jd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,c,b))} +function izd(a,b){var c;c=BD(Ohb((pEd(),oEd),a),55);return c?c.xj(b):KC(SI,Uhe,1,b,5,1)} +function Xpd(a,b){var c,d;c=b in a.a;if(c){d=aC(a,b).he();if(d){return d.a}}return null} +function ftd(a,b){var c,d,e;c=(d=(Fhd(),e=new Jod,e),!!b&&God(d,b),d);Hod(c,a);return c} +function LLd(a,b,c){Itd(a,c);if(!a.Bk()&&c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} +function Xdd(a,b){a.n=b;if(a.n){a.f=new Rkb;a.e=new Rkb}else{a.f=null;a.e=null}return a} +function ndb(a,b,c,d,e,f){var g;g=ldb(a,b);zdb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g} +function rSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} +function tSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} +function BSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} +function GSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} +function xSd(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} +function rDb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e=0);if(ekb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} +function pgb(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=fhb(a.f)),a.c).e} +function My(a){if(!(a>=0)){throw vbb(new Wdb('tolerance ('+a+') must be >= 0'))}return a} +function n4c(){if(!f4c){f4c=new m4c;l4c(f4c,OC(GC(C0,1),Uhe,130,0,[new Z9c]))}return f4c} +function KAc(){KAc=ccb;JAc=new LAc(ole,0);HAc=new LAc('INPUT',1);IAc=new LAc('OUTPUT',2)} +function bqc(){bqc=ccb;$pc=new cqc('ARD',0);aqc=new cqc('MSD',1);_pc=new cqc('MANUAL',2)} +function rGc(){rGc=ccb;oGc=new sGc('BARYCENTER',0);pGc=new sGc(Bne,1);qGc=new sGc(Cne,2)} +function ztd(a,b){var c;c=a.gc();if(b<0||b>c)throw vbb(new Cyd(b,c));return new czd(a,b)} +function JAd(a,b){var c;if(JD(b,42)){return a.c.Mc(b)}else{c=qAd(a,b);LAd(a,b);return c}} +function $nd(a,b,c){yId(a,b);pnd(a,c);AId(a,0);DId(a,1);CId(a,true);BId(a,true);return a} +function Xj(a,b){if(a<0){throw vbb(new Wdb(b+' cannot be negative but was: '+a))}return a} +function Bt(a,b){var c,d;for(c=0,d=a.gc();c0){return BD(Ikb(c.a,d-1),10)}return null} +function Lkd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.k))} +function kmd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.f))} +function lmd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,c,a.i))} +function Hod(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.a))} +function zpd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} +function UUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} +function VUd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} +function Apd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} +function pQd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,c,a.c))} +function PHd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.d))} +function jKd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.D))} +function Rdd(a,b){if(a.r>0&&a.c0&&a.g!=0&&Rdd(a.i,b/a.r*a.i.d)}} +function dge(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new hee:new ude;a.c=ode(d,a.b,a.a)} +function g3d(a,b){return T6d(a.e,b)?(Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)):new c8d(b,a)} +function _o(a,b){return Fv(vo(a.a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} +function Nyb(a,b,c){return Ayb(a,new Kzb(b),new Mzb,new Ozb(c),OC(GC(xL,1),Kie,132,0,[]))} +function pAb(a){var b,c;if(0>a){return new yAb}b=a+1;c=new rAb(b,a);return new vAb(null,c)} +function umb(a,b){mmb();var c;c=new Mqb(1);ND(a)?Shb(c,a,b):jrb(c.f,a,b);return new iob(c)} +function aMb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(cb){b<<=1;return b>0?b:Iie}return b} +function xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)} +function T6c(a,b){var c;if(JD(b,8)){c=BD(b,8);return a.a==c.a&&a.b==c.b}else{return false}} +function _Mb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=xbb(Pbb(a.n[c][f],Tbb(Nbb(e,1))),3);return d} +function IAd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);HAd(a,c.cd(),c.dd())}} +function N1c(a,b){var c;c=new tOb;BD(b.b,65);BD(b.b,65);BD(b.b,65);Hkb(b.a,new T1c(a,c,b))} +function DUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,21,c,a.b))} +function jmd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,c,a.d))} +function _Id(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,13,c,a.j))} +function $jb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d>>31}d!=0&&(a[c]=d)} +function rmb(a,b){mmb();var c,d;d=new Rkb;for(c=0;c0){this.g=this.ri(this.i+(this.i/8|0)+1);a.Qc(this.g)}} +function u3d(a,b){k2d.call(this,D9,a,b);this.b=this;this.a=S6d(a.Tg(),XKd(this.e.Tg(),this.c))} +function Ld(a,b){var c,d;uCb(b);for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);a.zc(c.cd(),c.dd())}} +function G2d(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!E2d(a,b,d.Pb())){return false}}return true} +function sVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.gh(b,-1-(f==-1?d:f),null,e)}return e} +function tVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.ih(b,-1-(f==-1?d:f),null,e)}return e} +function Mgb(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} +function Z4b(a){switch(a.g){case 2:return Ucd(),Tcd;case 4:return Ucd(),zcd;default:return a;}} +function $4b(a){switch(a.g){case 1:return Ucd(),Rcd;case 3:return Ucd(),Acd;default:return a;}} +function nkc(a){var b,c,d;return a.j==(Ucd(),Acd)&&(b=pkc(a),c=uqb(b,zcd),d=uqb(b,Tcd),d||d&&c)} +function oqb(a){var b,c;b=BD(a.e&&a.e(),9);c=BD(ZBb(b,b.length),9);return new xqb(b,c,b.length)} +function l7b(a,b){Odd(b,zne,1);UGb(TGb(new YGb((a$b(),new l$b(a,false,false,new T$b)))));Qdd(b)} +function Fcb(a,b){Bcb();return ND(a)?cfb(a,GD(b)):LD(a)?Ddb(a,ED(b)):KD(a)?Dcb(a,DD(b)):a.wd(b)} +function WZc(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Ekb(a.a,b)} +function m6c(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.af&&b.b1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw vbb(new utb)}} +function kNc(a){fNc();var b;if(!Lpb(eNc,a)){b=new hNc;b.a=a;Opb(eNc,a,b)}return BD(Mpb(eNc,a),635)} +function Rbb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=Ije;d=Fje}c=QD(e/Hje);b=QD(e-c*Hje);return TC(b,c,d)} +function Ox(a){var b,c,d;d=0;for(c=new Gqb(a.a);c.a>22);e=a.h+b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} +function nD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} +function bdb(a){var b;if(a<128){b=(ddb(),cdb)[a];!b&&(b=cdb[a]=new Xcb(a));return b}return new Xcb(a)} +function ubb(a){var b;if(JD(a,78)){return a}b=a&&a.__java$exception;if(!b){b=new lz(a);Sz(b)}return b} +function btd(a){if(JD(a,186)){return BD(a,118)}else if(!a){throw vbb(new Heb(gue))}else{return null}} +function Zjb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,vkb(a))){return true}}return false} +function kib(a){if(a.a.Ob()){return true}if(a.a!=a.d){return false}a.a=new orb(a.e.f);return a.a.Ob()} +function Gkb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}bCb(a.c,a.c.length,c);return true} +function Vyb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=BD(e.Pb(),42);a.yc(d.cd(),d.dd(),c)}return a} +function yac(a,b){var c,d;for(d=new olb(a.b);d.a=0,'Negative initial capacity');mCb(b>=0,'Non-positive load factor');Uhb(this)} +function _Ed(a,b,c){if(a>=128)return false;return a<64?Kbb(xbb(Nbb(1,a),c),0):Kbb(xbb(Nbb(1,a-64),b),0)} +function bOb(a,b){if(!a||!b||a==b){return false}return Jy(a.b.c,b.b.c+b.b.b)<0&&Jy(b.b.c,a.b.c+a.b.b)<0} +function I4b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new J6c(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))} +function $ic(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;dd)throw vbb(new Cyd(b,d));a.hi()&&(c=Dtd(a,c));return a.Vh(b,c)} +function xNb(a,b,c){return c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a} +function yNb(a,b,c){c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c));return a} +function TQb(a){var b,c;c=new kRb;tNb(c,a);yNb(c,(HSb(),FSb),a);b=new Lqb;VQb(a,c,b);UQb(a,c,b);return c} +function j6c(a){i6c();var b,c,d;c=KC(m1,nie,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=r6c(d,a)}return c} +function Mic(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f>=1);return b}} +function $C(a){var b,c;c=heb(a.h);if(c==32){b=heb(a.m);return b==32?heb(a.l)+32:b+20-10}else{return c-12}} +function bkb(a){var b;b=a.a[a.b];if(b==null){return null}NC(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b} +function EDc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c} +function Iwb(a,b,c){var d,e;d=new exb(b,c);e=new fxb;a.b=Gwb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} +function djc(a,b,c){var d,e,f,g;g=CHc(b,c);f=0;for(e=g.Kc();e.Ob();){d=BD(e.Pb(),11);Rhb(a.c,d,meb(f++))}} +function xVb(a){var b,c;for(c=new olb(a.a.b);c.ac&&(c=a[b])}return c} +function SHc(a,b,c){var d;d=new Rkb;UHc(a,b,d,(Ucd(),zcd),true,false);UHc(a,c,d,Tcd,false,false);return d} +function crd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,'labels');d=new Hrd(a,c);f=(Dqd(d.a,d.b,e),e);return f} +function j1d(a,b,c,d){var e;e=r1d(a,b,c,d);if(!e){e=i1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} +function m1d(a,b,c,d){var e;e=s1d(a,b,c,d);if(!e){e=l1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} +function Xb(a,b){var c;for(c=0;c1||b>=0&&a.b<3} +function w7c(a){var b,c,d;b=new s7c;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);St(b,0,new g7c(c))}return b} +function qVb(a){var b,c;for(c=new olb(a.a.b);c.ad?1:0} +function NYb(a,b){if(OYb(a,b)){Rc(a.b,BD(vNb(b,(wtc(),Esc)),21),b);Dsb(a.a,b);return true}else{return false}} +function d3b(a){var b,c;b=BD(vNb(a,(wtc(),gtc)),10);if(b){c=b.c;Lkb(c.a,b);c.a.c.length==0&&Lkb(Q_b(b).b,c)}} +function syb(a){if(lyb){return KC(qL,tke,572,0,0,1)}return BD(Qkb(a.a,KC(qL,tke,572,a.a.c.length,0,1)),842)} +function mn(a,b,c,d){Vm();return new wx(OC(GC(CK,1),zie,42,0,[(Wj(a,b),new Wo(a,b)),(Wj(c,d),new Wo(c,d))]))} +function Dnd(a,b,c){var d,e;e=(d=new SSd,d);$nd(e,b,c);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),e);return e} +function Zmd(a){var b,c,d,e;e=icb(Rmd,a);c=e.length;d=KC(ZI,nie,2,c,6,1);for(b=0;b=a.b.c.length){return}aub(a,2*b+1);c=2*b+2;c=0&&a[d]===b[d];d--);return d<0?0:Gbb(xbb(a[d],Yje),xbb(b[d],Yje))?-1:1} +function UFc(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),214);if(c.e.length>0){b.td(c);c.i&&_Fc(c)}}} +function nzd(a,b){var c,d;d=BD(Ajd(a.a,4),126);c=KC($3,hve,415,b,0,1);d!=null&&$fb(d,0,c,0,d.length);return c} +function JEd(a,b){var c;c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} +function Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=BD(d.Pb(),14);if(c.Hc(b)){return true}}return false} +function oNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(YMb(a,f,g)){return true}}}return false} +function Tt(a,b,c){var d,e,f,g;uCb(c);g=false;f=a.Zc(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g} +function Dv(a,b){var c;if(a===b){return true}else if(JD(b,83)){c=BD(b,83);return Ax(Wm(a),c.vc())}return false} +function Nhb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=BD(e.Pb(),42);if(a.re(b,d.dd())){return true}}return false} +function Hic(a,b,c){if(!a.d[b.p][c.p]){Gic(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]} +function Itd(a,b){if(!a.ai()&&b==null){throw vbb(new Wdb("The 'no null' constraint is violated"))}return b} +function $Jd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}jKd(a,b==null?null:(uCb(b),b));!!a.C&&a.yk(null)} +function XHc(a,b){var c;if(!a||a==b||!wNb(b,(wtc(),Psc))){return false}c=BD(vNb(b,(wtc(),Psc)),10);return c!=a} +function b4d(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.pl()}}} +function c4d(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a.ql()}}} +function Xdb(a){Zy.call(this,'The given string does not match the expected format for individual spacings.',a)} +function pgd(){pgd=ccb;mgd=new qgd('ELK',0);ngd=new qgd('JSON',1);lgd=new qgd('DOT',2);ogd=new qgd('SVG',3)} +function pWc(){pWc=ccb;mWc=new rWc(ane,0);nWc=new rWc('RADIAL_COMPACTION',1);oWc=new rWc('WEDGE_COMPACTION',2)} +function Fyb(){Fyb=ccb;Cyb=new Gyb('CONCURRENT',0);Dyb=new Gyb('IDENTITY_FINISH',1);Eyb=new Gyb('UNORDERED',2)} +function nPb(){nPb=ccb;kPb=(cPb(),bPb);jPb=new Nsd(Tle,kPb);iPb=new Lsd(Ule);lPb=new Lsd(Vle);mPb=new Lsd(Wle)} +function Occ(){Occ=ccb;Mcc=new Zcc;Ncc=new _cc;Lcc=new bdc;Kcc=new fdc;Jcc=new jdc;Icc=(uCb(Jcc),new bpb)} +function tBc(){tBc=ccb;qBc=new uBc('CONSERVATIVE',0);rBc=new uBc('CONSERVATIVE_SOFT',1);sBc=new uBc('SLOPPY',2)} +function Zad(){Zad=ccb;Xad=new q0b(15);Wad=new Osd((Y9c(),f9c),Xad);Yad=C9c;Sad=s8c;Tad=Y8c;Vad=_8c;Uad=$8c} +function o7c(a,b,c){var d,e,f;d=new Psb;for(f=Jsb(c,0);f.b!=f.d.c;){e=BD(Xsb(f),8);Dsb(d,new g7c(e))}Tt(a,b,d)} +function r7c(a){var b,c,d;b=0;d=KC(m1,nie,8,a.b,0,1);c=Jsb(a,0);while(c.b!=c.d.c){d[b++]=BD(Xsb(c),8)}return d} +function $Pd(a){var b;b=(!a.a&&(a.a=new cUd(g5,a,9,5)),a.a);if(b.i!=0){return nQd(BD(qud(b,0),678))}return null} +function Ly(a,b){var c;c=wbb(a,b);if(Gbb(Vbb(a,b),0)|Ebb(Vbb(a,c),0)){return c}return wbb(rie,Vbb(Pbb(c,63),1))} +function Yyc(a,b){var c;c=Ksd((dzc(),bzc))!=null&&b.wg()!=null?Edb(ED(b.wg()))/Edb(ED(Ksd(bzc))):1;Rhb(a.b,b,c)} +function le(a,b){var c,d;c=BD(a.d.Bc(b),14);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d} +function AHc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c0){return _vb(b-1,a.a.c.length),Kkb(a.a,b-1)}else{throw vbb(new Jpb)}} +function C2c(a,b,c){if(b<0){throw vbb(new qcb(ese+b))}if(bb){throw vbb(new Wdb(xke+a+yke+b))}if(a<0||b>c){throw vbb(new scb(xke+a+zke+b+oke+c))}} +function j5c(a){if(!a.a||(a.a.i&8)==0){throw vbb(new Zdb('Enumeration class expected for layout option '+a.f))}} +function vud(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.iRqe?a-c>Rqe:c-a>Rqe} +function pHb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(JD(a,124)){if(BD(a,124).a.b==0){return 0}}return a.Re()} +function qHb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(JD(a,124)){if(BD(a,124).a.a==0){return 0}}return a.Se()} +function fhb(a){Hgb();if(a<0){if(a!=-1){return new Tgb(-1,-a)}return Bgb}else return a<=10?Dgb[QD(a)]:new Tgb(1,a)} +function xC(a){rC();throw vbb(new MB("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} +function lz(a){jz();Py(this);Ry(this);this.e=a;Sy(this,a);this.g=a==null?Xhe:fcb(a);this.a='';this.b=a;this.a=''} +function F$c(){this.a=new G$c;this.f=new I$c(this);this.b=new K$c(this);this.i=new M$c(this);this.e=new O$c(this)} +function ss(){rs.call(this,new _rb(Cv(16)));Xj(2,mie);this.b=2;this.a=new Ms(null,null,0,null);As(this.a,this.a)} +function xzc(){xzc=ccb;uzc=new zzc('DUMMY_NODE_OVER',0);vzc=new zzc('DUMMY_NODE_UNDER',1);wzc=new zzc('EQUAL',2)} +function LUb(){LUb=ccb;JUb=Fx(OC(GC(t1,1),Kie,103,0,[(ead(),aad),bad]));KUb=Fx(OC(GC(t1,1),Kie,103,0,[dad,_9c]))} +function VQc(a){return (Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b} +function DOb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=BD(c.Pb(),561);e=new MPb(b,a.e,a.f);Ekb(a.g,e)}} +function yId(a,b){var c,d,e;d=a.nk(b,null);e=null;if(b){e=(LFd(),c=new UQd,c);NQd(e,a.r)}d=xId(a,e,d);!!d&&d.Fi()} +function VFc(a,b){var c,d;d=Cub(a.d,1)!=0;c=true;while(c){c=false;c=b.c.Tf(b.e,d);c=c|dGc(a,b,d,false);d=!d}$Fc(a)} +function wZc(a,b){var c,d,e;d=false;c=b.q.d;if(b.de){$Zc(b.q,e);d=c!=b.q.d}}return d} +function PVc(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c} +function Rnd(a,b){var c,d;d=jid(a);if(!d){!And&&(And=new lUd);c=(IEd(),PEd(b));d=new s0d(c);wtd(d.Vk(),a)}return d} +function Sc(a,b){var c,d;c=BD(a.c.Bc(b),14);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)} +function j7c(a,b){var c;for(c=0;c=a.c.b:a.a<=a.c.b)){throw vbb(new utb)}b=a.a;a.a+=a.c.c;++a.b;return meb(b)} +function BWb(a){var b;b=new VWb(a);rXb(a.a,zWb,new amb(OC(GC(bQ,1),Uhe,369,0,[b])));!!b.d&&Ekb(b.f,b.d);return b.f} +function Z1b(a){var b;b=new q_b(a.a);tNb(b,a);yNb(b,(wtc(),$sc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b} +function A9b(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=BD(f.Pb(),70);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}} +function UDb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);if(VDb(a,d,c)){return true}}return false} +function JDc(a){var b,c;for(c=new olb(a.r);c.a=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function y6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function sAd(a){var b,c,d,e;if(a!=null){for(c=0;c0){c=BD(Ikb(a.a,a.a.c.length-1),570);if(NYb(c,b)){return}}Ekb(a.a,new PYb(b))} +function $gc(a){Hgc();var b,c;b=a.d.c-a.e.c;c=BD(a.g,145);Hkb(c.b,new shc(b));Hkb(c.c,new uhc(b));reb(c.i,new whc(b))} +function gic(a){var b;b=new Ufb;b.a+='VerticalSegment ';Pfb(b,a.e);b.a+=' ';Qfb(b,Eb(new Gb,new olb(a.k)));return b.a} +function u4c(a){var b;b=BD(Wrb(a.c.c,''),229);if(!b){b=new W3c(d4c(c4c(new e4c,''),'Other'));Xrb(a.c.c,'',b)}return b} +function qnd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (name: ';Efb(b,a.zb);b.a+=')';return b.a} +function Jnd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}return c} +function _ic(a,b){var c,d,e;c=0;for(e=V_b(a,b).Kc();e.Ob();){d=BD(e.Pb(),11);c+=vNb(d,(wtc(),gtc))!=null?1:0}return c} +function vPc(a,b,c){var d,e,f;d=0;for(f=Jsb(a,0);f.b!=f.d.c;){e=Edb(ED(Xsb(f)));if(e>c){break}else e>=b&&++d}return d} +function RTd(a,b,c){var d,e;d=new pSd(a.e,3,13,null,(e=b.c,e?e:(jGd(),YFd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function STd(a,b,c){var d,e;d=new pSd(a.e,4,13,(e=b.c,e?e:(jGd(),YFd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function zId(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,8,e,a.r);!c?(c=d):c.Ei(d)}return c} +function o1d(a,b){var c,d;c=BD(b,676);d=c.vk();!d&&c.wk(d=JD(b,88)?new C1d(a,BD(b,26)):new O1d(a,BD(b,148)));return d} +function kud(a,b,c){var d;a.qi(a.i+1);d=a.oi(b,c);b!=a.i&&$fb(a.g,b,a.g,b+1,a.i-b);NC(a.g,b,d);++a.i;a.bi(b,c);a.ci()} +function vwb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Ofb(a.a,b.a,b.d.length,c)}return a} +function __d(a,b){var c,d,e,f;b.vi(a.a);f=BD(Ajd(a.a,8),1936);if(f!=null){for(c=f,d=0,e=c.length;dc){throw vbb(new qcb(xke+a+zke+b+', size: '+c))}if(a>b){throw vbb(new Wdb(xke+a+yke+b))}} +function eid(a,b,c){if(b<0){vid(a,c)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Vj(a,a.yh(),b)}} +function Jlb(a,b,c,d,e,f,g,h){var i;i=c;while(f=d||b=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} +function QHd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (source: ';Efb(b,a.d);b.a+=')';return b.a} +function OQd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,5,e,a.a);!c?(c=d):Qwd(c,d)}return c} +function BId(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,2,c,b))} +function eLd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} +function LPd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} +function CId(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,3,c,b))} +function fLd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,9,c,b))} +function N7d(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.Gj();a.b=!c?bLd(a.c.Tg(),a.a):a.c.Xg(a.a.aj(),c)}return a.c.Og(a.b,b)} +function meb(a){var b,c;if(a>-129&&a<128){b=a+128;c=(oeb(),neb)[b];!c&&(c=neb[b]=new _db(a));return c}return new _db(a)} +function Web(a){var b,c;if(a>-129&&a<128){b=a+128;c=(Yeb(),Xeb)[b];!c&&(c=Xeb[b]=new Qeb(a));return c}return new Qeb(a)} +function L5b(a){var b,c;b=a.k;if(b==(j0b(),e0b)){c=BD(vNb(a,(wtc(),Hsc)),61);return c==(Ucd(),Acd)||c==Rcd}return false} +function i1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return r1d(a,d,b,c)}}return null} +function l1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return s1d(a,d,b,c)}}return null} +function cTd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),138);if(PD(b)===PD(c)){return true}}return false} +function vtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));if(a.hi()&&a.Hc(c)){throw vbb(new Wdb(kue))}a.Xh(b,c)} +function iqd(a,b){var c;c=oo(a.i,b);if(c==null){throw vbb(new cqd('Node did not exist in input.'))}Yqd(b,c);return null} +function $hd(a,b){var c;c=YKd(a,b);if(JD(c,322)){return BD(c,34)}throw vbb(new Wdb(ite+b+"' is not a valid attribute"))} +function V2d(a,b,c){var d,e;e=JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a);for(d=0;db){return 1}if(a==b){return a==0?Kdb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1} +function f4b(a,b){Odd(b,'Sort end labels',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new q4b),new s4b),new u4b);Qdd(b)} +function Wxd(a,b,c){var d,e;if(a.ej()){e=a.fj();d=sud(a,b,c);a.$i(a.Zi(7,meb(c),d,b,e));return d}else{return sud(a,b,c)}} +function vAd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.cd();c=b.Sh();d=(c&Ohe)%a.d.length;KAd(a,d,xAd(a,d,c,e))}} +function ZId(a,b){var c;c=(a.Bb&zte)!=0;b?(a.Bb|=zte):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,10,c,b))} +function dJd(a,b){var c;c=(a.Bb&Rje)!=0;b?(a.Bb|=Rje):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,12,c,b))} +function eJd(a,b){var c;c=(a.Bb&Cve)!=0;b?(a.Bb|=Cve):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,15,c,b))} +function fJd(a,b){var c;c=(a.Bb&Dve)!=0;b?(a.Bb|=Dve):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,11,c,b))} +function jOb(a,b){var c;c=Kdb(a.b.c,b.b.c);if(c!=0){return c}c=Kdb(a.a.a,b.a.a);if(c!=0){return c}return Kdb(a.a.b,b.a.b)} +function jqd(a,b){var c;c=Ohb(a.k,b);if(c==null){throw vbb(new cqd('Port did not exist in input.'))}Yqd(b,c);return null} +function k6d(a){var b,c;for(c=l6d(bKd(a)).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b)){return uFd((tFd(),sFd),b)}}return null} +function n3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=0;c=BD(a.g,119);for(e=0;e>10)+Uje&aje;b[1]=(a&1023)+56320&aje;return zfb(b,0,b.length)} +function a_b(a){var b,c;c=BD(vNb(a,(Nyc(),Lwc)),103);if(c==(ead(),cad)){b=Edb(ED(vNb(a,owc)));return b>=1?bad:_9c}return c} +function rec(a){switch(BD(vNb(a,(Nyc(),Swc)),218).g){case 1:return new Fmc;case 3:return new wnc;default:return new zmc;}} +function Uzb(a){if(a.c){Uzb(a.c)}else if(a.d){throw vbb(new Zdb("Stream already terminated, can't be modified or used"))}} +function Mkd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (identifier: ';Efb(b,a.k);b.a+=')';return b.a} +function ctd(a,b,c){var d,e;d=(Fhd(),e=new xkd,e);vkd(d,b);wkd(d,c);!!a&&wtd((!a.a&&(a.a=new xMd(y2,a,5)),a.a),d);return d} +function ttb(a,b,c,d){var e,f;uCb(d);uCb(c);e=a.xc(b);f=e==null?c:Myb(BD(e,15),BD(c,14));f==null?a.Bc(b):a.zc(b,f);return f} +function pqb(a){var b,c,d,e;c=(b=BD(gdb((d=a.gm,e=d.f,e==CI?d:e)),9),new xqb(b,BD(_Bb(b,b.length),9),0));rqb(c,a);return c} +function hDc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),10);if(Be(c,BD(Ikb(b,d.p),14))){return d}}return null} +function Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=ubb(a);if(JD(a,597)){e=a;throw vbb(new ycb(e))}else throw vbb(a)}return c} +function Qbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(Kje>1;a.k=c-1>>1} +function Gub(){zub();var a,b,c;c=yub+++Date.now();a=QD($wnd.Math.floor(c*lke))&nke;b=QD(c-a*mke);this.a=a^1502;this.b=b^kke} +function O_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a3.4028234663852886E38){return Pje}else if(b<-3.4028234663852886E38){return Qje}return b} +function aeb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} +function Ev(a){var b,c,d,e;b=new cq(a.Hd().gc());e=0;for(d=vr(a.Hd().Kc());d.Ob();){c=d.Pb();bq(b,c,meb(e++))}return fn(b.a)} +function Uyb(a,b){var c,d,e;e=new Lqb;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);Rhb(e,c.cd(),Yyb(a,BD(c.dd(),15)))}return e} +function EZc(a,b){a.n.c.length==0&&Ekb(a.n,new VZc(a.s,a.t,a.i));Ekb(a.b,b);QZc(BD(Ikb(a.n,a.n.c.length-1),211),b);GZc(a,b)} +function LFb(a){if(a.c!=a.b.b||a.i!=a.g.b){a.a.c=KC(SI,Uhe,1,0,5,1);Gkb(a.a,a.b);Gkb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a} +function Ycc(a,b){var c,d,e;e=0;for(d=BD(b.Kb(a),20).Kc();d.Ob();){c=BD(d.Pb(),17);Ccb(DD(vNb(c,(wtc(),ltc))))||++e}return e} +function efc(a,b){var c,d,e;d=tgc(b);e=Edb(ED(pBc(d,(Nyc(),lyc))));c=$wnd.Math.max(0,e/2-0.5);cfc(b,c,1);Ekb(a,new Dfc(b,c))} +function Ctc(){Ctc=ccb;Btc=new Dtc(ane,0);xtc=new Dtc('FIRST',1);ytc=new Dtc(Gne,2);ztc=new Dtc('LAST',3);Atc=new Dtc(Hne,4)} +function Aad(){Aad=ccb;zad=new Bad(ole,0);xad=new Bad('POLYLINE',1);wad=new Bad('ORTHOGONAL',2);yad=new Bad('SPLINES',3)} +function zYc(){zYc=ccb;xYc=new AYc('ASPECT_RATIO_DRIVEN',0);yYc=new AYc('MAX_SCALE_DRIVEN',1);wYc=new AYc('AREA_DRIVEN',2)} +function Y$c(){Y$c=ccb;V$c=new Z$c('P1_STRUCTURE',0);W$c=new Z$c('P2_PROCESSING_ORDER',1);X$c=new Z$c('P3_EXECUTION',2)} +function tVc(){tVc=ccb;sVc=new uVc('OVERLAP_REMOVAL',0);qVc=new uVc('COMPACTION',1);rVc=new uVc('GRAPH_SIZE_CALCULATION',2)} +function Jy(a,b){Iy();return My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b))} +function yOc(a,b){var c,d;c=Jsb(a,0);while(c.b!=c.d.c){d=Gdb(ED(Xsb(c)));if(d==b){return}else if(d>b){Ysb(c);break}}Vsb(c,b)} +function t4c(a,b){var c,d,e,f,g;c=b.f;Xrb(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;fb&&d.ue(a[f-1],a[f])>0;--f){g=a[f];NC(a,f,a[f-1]);NC(a,f-1,g)}}} +function did(a,b,c,d){if(b<0){uid(a,c,d)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Tj(a,a.yh(),b,d)}} +function xFb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw vbb(new Wdb('Node '+b+' not part of edge '+a))}} +function iEb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function GVb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function Xkd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return Ekd(a,b,c,d)} +function Ljc(a){if(a.k!=(j0b(),h0b)){return false}return FAb(new YAb(null,new Lub(new Sr(ur(U_b(a).a.Kc(),new Sq)))),new Mjc)} +function MEd(a){if(a.e==null){return a}else !a.c&&(a.c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c} +function VC(a,b){if(a.h==Gje&&a.m==0&&a.l==0){b&&(QC=TC(0,0,0));return SC((wD(),uD))}b&&(QC=TC(a.l,a.m,a.h));return TC(0,0,0)} +function fcb(a){var b;if(Array.isArray(a)&&a.im===gcb){return hdb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()} +function Rpb(a){var b;this.a=(b=BD(a.e&&a.e(),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.b=KC(SI,Uhe,1,this.a.a.length,5,1)} +function _Ob(a){var b,c,d;this.a=new zsb;for(d=new olb(a);d.a0&&(BCb(b-1,a.length),a.charCodeAt(b-1)==58)&&!OEd(a,CEd,DEd)} +function OEd(a,b,c){var d,e;for(d=0,e=a.length;d=e){return b.c+c}}return b.c+b.b.gc()} +function NCd(a,b){LCd();var c,d,e,f;d=KLd(a);e=b;Klb(d,0,d.length,e);for(c=0;c0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} +function Htd(a){var b,c,d;d=new Hfb;d.a+='[';for(b=0,c=a.gc();b0&&this.b>0&&q$c(this.c,this.b,this.a)} +function ezc(a){dzc();this.c=Ou(OC(GC(h0,1),Uhe,831,0,[Uyc]));this.b=new Lqb;this.a=a;Rhb(this.b,bzc,1);Hkb(czc,new Xed(this))} +function I2c(a,b){var c;if(a.d){if(Mhb(a.b,b)){return BD(Ohb(a.b,b),51)}else{c=b.Kf();Rhb(a.b,b,c);return c}}else{return b.Kf()}} +function Kgb(a,b){var c;if(PD(a)===PD(b)){return true}if(JD(b,91)){c=BD(b,91);return a.e==c.e&&a.d==c.d&&Lgb(a,c.a)}return false} +function Zcd(a){Ucd();switch(a.g){case 4:return Acd;case 1:return zcd;case 3:return Rcd;case 2:return Tcd;default:return Scd;}} +function Ykd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return Hkd(a,b)} +function gWc(a){switch(a.g){case 0:return new FXc;case 1:return new IXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function QUc(a){switch(a.g){case 0:return new CXc;case 1:return new MXc;default:throw vbb(new Wdb(Dne+(a.f!=null?a.f:''+a.g)));}} +function b1c(a){switch(a.g){case 0:return new s1c;case 1:return new w1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} +function qWc(a){switch(a.g){case 1:return new SVc;case 2:return new KVc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function ryb(a){var b,c;if(a.b){return a.b}c=lyb?null:a.d;while(c){b=lyb?null:c.b;if(b){return b}c=lyb?null:c.d}return $xb(),Zxb} +function hhb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Mgb(a);if(d==a.d-1){--c;c=c|0}}b-=heb(c);return b} +function bhb(a){var b,c,d;if(a>5;b=a&31;d=KC(WD,oje,25,c+1,15,1);d[c]=1<3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} +function XUb(a){LUb();return Bcb(),GVb(BD(a.a,81).j,BD(a.b,103))||BD(a.a,81).d.e!=0&&GVb(BD(a.a,81).j,BD(a.b,103))?true:false} +function s3c(a){p3c();if(BD(a.We((Y9c(),b9c)),174).Hc((Idd(),Gdd))){BD(a.We(x9c),174).Fc((rcd(),qcd));BD(a.We(b9c),174).Mc(Gdd)}} +function Gxd(a,b){var c,d;if(!b){return false}else{for(c=0;c=0;--d){b=c[d];for(e=0;e>1;this.k=b-1>>1} +function r3b(a,b){Odd(b,'End label post-processing',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new w3b),new y3b),new A3b);Qdd(b)} +function NLc(a,b,c){var d,e;d=Edb(a.p[b.i.p])+Edb(a.d[b.i.p])+b.n.b+b.a.b;e=Edb(a.p[c.i.p])+Edb(a.d[c.i.p])+c.n.b+c.a.b;return e-d} +function xhb(a,b,c){var d,e;d=xbb(c,Yje);for(e=0;ybb(d,0)!=0&&e0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} +function T9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} +function xud(a,b){var c;if(a.i>0){if(b.lengtha.i&&NC(b,a.i,null);return b} +function Sxd(a,b,c){var d,e,f;if(a.ej()){d=a.i;f=a.fj();kud(a,d,b);e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{kud(a,a.i,b)}return c} +function HMd(a,b,c){var d,e;d=new pSd(a.e,4,10,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function GMd(a,b,c){var d,e;d=new pSd(a.e,3,10,null,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function _Jb(a){$Jb();var b;b=new g7c(BD(a.e.We((Y9c(),_8c)),8));if(a.B.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b} +function Lzc(a){Izc();var b;(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Cxc))?(b=BD(vNb(a,Cxc),197)):(b=BD(vNb(Q_b(a),Dxc),197));return b} +function pBc(a,b){var c,d;d=null;if(wNb(a,(Nyc(),qyc))){c=BD(vNb(a,qyc),94);c.Xe(b)&&(d=c.We(b))}d==null&&(d=vNb(Q_b(a),b));return d} +function Ze(a,b){var c,d,e;if(JD(b,42)){c=BD(b,42);d=c.cd();e=Hv(a.Rc(),d);return Hb(e,c.dd())&&(e!=null||a.Rc()._b(d))}return false} +function qAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=xAd(a,e,d,b);return c!=-1}else{return false}} +function AAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){return c.dd()}}return null} +function R2d(a,b){var c,d,e,f;f=S6d(a.e.Tg(),b);c=BD(a.g,119);for(e=0;e1?Mbb(Nbb(b.a[1],32),xbb(b.a[0],Yje)):xbb(b.a[0],Yje),Sbb(Ibb(b.e,c))))} +function Hbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a%b;if(Kje>5;b&=31;e=a.d+c+(b==0?0:1);d=KC(WD,oje,25,e,15,1);jhb(d,a.a,c,b);f=new Vgb(a.e,e,d);Jgb(f);return f} +function Ofe(a,b,c){var d,e;d=BD(Phb(Zee,b),117);e=BD(Phb($ee,b),117);if(c){Shb(Zee,a,d);Shb($ee,a,e)}else{Shb($ee,a,d);Shb(Zee,a,e)}} +function Cwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} +function Dwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} +function Nic(a,b,c,d){var e,f,g;e=false;if(fjc(a.f,c,d)){ijc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} +function QHc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=BD(fkb(b),10);h=BD(V_b(f,d).Xb(0),11);a.d[h.p]=g++;c.c[c.c.length]=h}return g} +function hBc(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=ED(pBc(a,d));f=ED(pBc(b,d));return $wnd.Math.max((uCb(e),e),(uCb(f),f))} +function zZc(a,b,c){var d,e,f,g;d=c/a.c.length;e=0;for(g=new olb(a);g.a2000){yz=a;zz=$wnd.setTimeout(Iz,10)}}if(xz++==0){Lz((Kz(),Jz));return true}return false} +function wCc(a,b){var c,d,e;for(d=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=c.d.i;if(e.c==b){return false}}return true} +function Ek(b,c){var d,e;if(JD(c,245)){e=BD(c,245);try{d=b.vd(e);return d==0}catch(a){a=ubb(a);if(!JD(a,205))throw vbb(a)}}return false} +function Xz(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function BDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))>0} +function DDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))<0} +function CDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))<=0} +function ydb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;cWje){return c.fh()}d=c.Zg();if(!!d||c==a){break}}}return d} +function fvd(a){evd();if(JD(a,156)){return BD(Ohb(cvd,hK),288).vg(a)}if(Mhb(cvd,rb(a))){return BD(Ohb(cvd,rb(a)),288).vg(a)}return null} +function fZd(a){if(efb(kse,a)){return Bcb(),Acb}else if(efb(lse,a)){return Bcb(),zcb}else{throw vbb(new Wdb('Expecting true or false'))}} +function uDc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw vbb(new Wdb('Input edge is not connected to the input port.'))} +function Igb(a,b){if(a.e>b.e){return 1}if(a.eb.d){return a.e}if(a.d=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function Ue(a,b){var c;if(PD(b)===PD(a)){return true}if(!JD(b,21)){return false}c=BD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)} +function ekb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;mkb(c=f){hkb(a,b);return -1}else{ikb(a,b);return 1}} +function lA(a,b){var c,d;c=(BCb(b,a.length),a.charCodeAt(b));d=b+1;while(db.e){return 1}else if(a.fb.f){return 1}return tb(a)-tb(b)} +function efb(a,b){uCb(a);if(b==null){return false}if(dfb(a,b)){return true}return a.length==b.length&&dfb(a.toLowerCase(),b.toLowerCase())} +function x6d(a,b){var c,d,e,f;for(d=0,e=b.gc();d0&&ybb(a,128)<0){b=Tbb(a)+128;c=(Ceb(),Beb)[b];!c&&(c=Beb[b]=new teb(a));return c}return new teb(a)} +function _0d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} +function a1d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} +function FMc(a,b){wMc();var c,d;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.d.i==b||c.c.i==b){return c}}return null} +function HUb(a,b,c){this.c=a;this.f=new Rkb;this.e=new d7c;this.j=new IVb;this.n=new IVb;this.b=b;this.g=new J6c(b.c,b.d,b.b,b.a);this.a=c} +function gVb(a){var b,c,d,e;this.a=new zsb;this.d=new Tqb;this.e=0;for(c=a,d=0,e=c.length;d0}else{return false}} +function q2c(a){var b;if(PD(hkd(a,(Y9c(),J8c)))===PD((hbd(),fbd))){if(!Xod(a)){jkd(a,J8c,gbd)}else{b=BD(hkd(Xod(a),J8c),334);jkd(a,J8c,b)}}} +function ijc(a,b,c){var d,e;bIc(a.e,b,c,(Ucd(),Tcd));bIc(a.i,b,c,zcd);if(a.a){e=BD(vNb(b,(wtc(),$sc)),11);d=BD(vNb(c,$sc),11);cIc(a.g,e,d)}} +function OEc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new $Ec(a,b);if(c){a.a[d][f]=new FEc(b);e=BD(vNb(b,(wtc(),Psc)),10);!!e&&Rc(a.d,e,b)}} +function TPb(a,b){var c,d,e;Ekb(PPb,a);b.Fc(a);c=BD(Ohb(OPb,a),21);if(c){for(e=c.Kc();e.Ob();){d=BD(e.Pb(),33);Jkb(PPb,d,0)!=-1||TPb(d,b)}}} +function tyb(a,b,c){var d;(jyb?(ryb(a),true):kyb?($xb(),true):nyb?($xb(),true):myb&&($xb(),false))&&(d=new iyb(b),d.b=c,pyb(a,d),undefined)} +function xKb(a,b){var c;c=!a.A.Hc((tdd(),sdd))||a.q==(dcd(),$bd);a.u.Hc((rcd(),ncd))?c?vKb(a,b):zKb(a,b):a.u.Hc(pcd)&&(c?wKb(a,b):AKb(a,b))} +function b0d(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,JD(d,97)?BD(d,97).Jg():null);if(xlb(b,c)){Cjd(a.a,4,c);return}}Cjd(a.a,4,BD(b,126))} +function dYb(a,b,c){return new J6c($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} +function k4b(a,b){var c,d;c=beb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=beb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return beb(b.a.d.p,a.a.d.p)} +function _Dc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Kdb(d,e)}} +function HFb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new olb(LFb(b));e.a=e)return e;for(b=b>0?b:0;bd&&NC(b,d,null);return b} +function _lb(a,b){var c,d;d=a.a.length;b.lengthd&&NC(b,d,null);return b} +function Xrb(a,b,c){var d,e,f;e=BD(Ohb(a.e,b),387);if(!e){d=new lsb(a,b,c);Rhb(a.e,b,d);isb(d);return null}else{f=ijb(e,c);Yrb(a,e);return f}} +function P9d(a){var b;if(a==null)return null;b=ide(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid hexBinary value: '"+a+"'"))}return b} +function ghb(a){Hgb();if(ybb(a,0)<0){if(ybb(a,-1)!=0){return new Wgb(-1,Jbb(a))}return Bgb}else return ybb(a,10)<=0?Dgb[Tbb(a)]:new Wgb(1,a)} +function wJb(){qJb();return OC(GC(DN,1),Kie,159,0,[nJb,mJb,oJb,eJb,dJb,fJb,iJb,hJb,gJb,lJb,kJb,jJb,bJb,aJb,cJb,$Ib,ZIb,_Ib,XIb,WIb,YIb,pJb])} +function vjc(a){var b;this.d=new Rkb;this.j=new d7c;this.g=new d7c;b=a.g.b;this.f=BD(vNb(Q_b(b),(Nyc(),Lwc)),103);this.e=Edb(ED(c_b(b,ryc)))} +function Pjc(a){this.b=new Rkb;this.e=new Rkb;this.d=a;this.a=!WAb(JAb(new YAb(null,new Lub(new b1b(a.b))),new Xxb(new Qjc))).sd((EAb(),DAb))} +function N5c(){N5c=ccb;L5c=new O5c('PARENTS',0);K5c=new O5c('NODES',1);I5c=new O5c('EDGES',2);M5c=new O5c('PORTS',3);J5c=new O5c('LABELS',4)} +function Tbd(){Tbd=ccb;Qbd=new Ubd('DISTRIBUTED',0);Sbd=new Ubd('JUSTIFIED',1);Obd=new Ubd('BEGIN',2);Pbd=new Ubd(gle,3);Rbd=new Ubd('END',4)} +function UMd(a){var b;b=a.yi(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} +function cYb(a){switch(a.g){case 1:return ead(),dad;case 4:return ead(),aad;case 2:return ead(),bad;case 3:return ead(),_9c;}return ead(),cad} +function kA(a,b,c){var d;d=c.q.getFullYear()-nje+nje;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:EA(a,d%100,2);break;default:EA(a,d,b);}} +function Jsb(a,b){var c,d;wCb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c=64&&b<128&&(e=Mbb(e,Nbb(1,b-64)))}return e} +function c_b(a,b){var c,d;d=null;if(wNb(a,(Y9c(),O9c))){c=BD(vNb(a,O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!Q_b(a)&&(d=vNb(Q_b(a),b));return d} +function oQc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(j0b(),h0b)||d==d0b){return}c=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(c)&&Rhb(a.k,b,BD(Rr(c),17))} +function mid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();return c<0?(e=a.Yg(d),e>=0?a.lh(e):tid(a,d)):c<0?tid(a,d):BD(d,66).Nj().Sj(a,a.yh(),c)} +function Ksd(a){var b;if(JD(a.a,4)){b=fvd(a.a);if(b==null){throw vbb(new Zdb(mse+a.b+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return b}else{return a.a}} +function L9d(a){var b;if(a==null)return null;b=bde(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid base64Binary value: '"+a+"'"))}return b} +function Dyd(b){var c;try{c=b.i.Xb(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} +function Zyd(b){var c;try{c=b.c.ki(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} +function CPb(){CPb=ccb;BPb=(Y9c(),K9c);vPb=G8c;qPb=r8c;wPb=f9c;zPb=(fFb(),bFb);yPb=_Eb;APb=dFb;xPb=$Eb;sPb=(nPb(),jPb);rPb=iPb;tPb=lPb;uPb=mPb} +function NWb(a){LWb();this.c=new Rkb;this.d=a;switch(a.g){case 0:case 2:this.a=tmb(KWb);this.b=Pje;break;case 3:case 1:this.a=KWb;this.b=Qje;}} +function ued(a,b,c){var d,e;if(a.c){dld(a.c,a.c.i+b);eld(a.c,a.c.j+c)}else{for(e=new olb(a.b);e.a0){Ekb(a.b,new WA(b.a,c));d=b.a.length;0d&&(b.a+=yfb(KC(TD,$ie,25,-d,15,1)))}} +function JKb(a,b){var c,d,e;c=a.o;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.a=DKb(d,c.a);d.e.b=c.b*Edb(ED(d.b.We(BKb)))}} +function S5b(a,b){var c,d,e,f;e=a.k;c=Edb(ED(vNb(a,(wtc(),htc))));f=b.k;d=Edb(ED(vNb(b,htc)));return f!=(j0b(),e0b)?-1:e!=e0b?1:c==d?0:c=0){return a.hh(b,c,d)}else{!!a.eh()&&(d=(e=a.Vg(),e>=0?a.Qg(d):a.eh().ih(a,-1-e,null,d)));return a.Sg(b,c,d)}} +function zld(a,b){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);return;}$kd(a,b)} +function Ut(b,c){var d;d=b.Zc(c);try{return d.Pb()}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't get element "+c))}else throw vbb(a)}} +function Tgb(a,b){this.e=a;if(b=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}} +function RMb(){RMb=ccb;OMb=new SMb(xle,0);NMb=new SMb(yle,1);PMb=new SMb(zle,2);QMb=new SMb(Ale,3);OMb.a=false;NMb.a=true;PMb.a=false;QMb.a=true} +function ROb(){ROb=ccb;OOb=new SOb(xle,0);NOb=new SOb(yle,1);POb=new SOb(zle,2);QOb=new SOb(Ale,3);OOb.a=false;NOb.a=true;POb.a=false;QOb.a=true} +function dac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i;b.k==(j0b(),g0b)&&a.b.Fc(b)}while(b.k==(j0b(),g0b));a.b=Su(a.b)} +function CDc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new Tkb(d));for(c=new olb(d);c.ac.b){return true}}}return false} +function AD(a,b){if(ND(a)){return !!zD[b]}else if(a.hm){return !!a.hm[b]}else if(LD(a)){return !!yD[b]}else if(KD(a)){return !!xD[b]}return false} +function jkd(a,b,c){c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c));return a} +function jKb(a,b,c,d){var e,f;f=b.Xe((Y9c(),W8c))?BD(b.We(W8c),21):a.j;e=uJb(f);if(e==(qJb(),pJb)){return}if(c&&!sJb(e)){return}UHb(lKb(a,e,d),b)} +function fid(a,b,c,d){var e,f,g;f=XKd(a.Tg(),b);e=b-a.Ah();return e<0?(g=a.Yg(f),g>=0?a._g(g,c,true):sid(a,f,c)):BD(f,66).Nj().Pj(a,a.yh(),e,c,d)} +function u6d(a,b,c,d){var e,f,g;if(c.mh(b)){Q6d();if(YId(b)){e=BD(c.ah(b),153);x6d(a,e)}else{f=(g=b,!g?null:BD(d,49).xh(g));!!f&&v6d(c.ah(b),f)}}} +function H3b(a){switch(a.g){case 1:return vLb(),uLb;case 3:return vLb(),rLb;case 2:return vLb(),tLb;case 4:return vLb(),sLb;default:return null;}} +function kCb(a){switch(typeof(a)){case Mhe:return LCb(a);case Lhe:return QD(a);case Khe:return Bcb(),a?1231:1237;default:return a==null?0:FCb(a);}} +function Gic(a,b,c){if(a.e){switch(a.b){case 1:oic(a.c,b,c);break;case 0:pic(a.c,b,c);}}else{mic(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e} +function lHc(a){var b,c;if(a==null){return null}c=KC(OQ,nie,193,a.length,0,2);for(b=0;b=0)return e;if(a.Fk()){for(d=0;d=e)throw vbb(new Cyd(b,e));if(a.hi()){d=a.Xc(c);if(d>=0&&d!=b){throw vbb(new Wdb(kue))}}return a.mi(b,c)} +function gx(a,b){this.a=BD(Qb(a),245);this.b=BD(Qb(b),245);if(a.vd(b)>0||a==(Lk(),Kk)||b==(_k(),$k)){throw vbb(new Wdb('Invalid range: '+nx(a,b)))}} +function mYb(a){var b,c;this.b=new Rkb;this.c=a;this.a=false;for(c=new olb(a.a);c.a0);if((b&-b)==b){return QD(b*Cub(a,31)*4.6566128730773926E-10)}do{c=Cub(a,31);d=c%b}while(c-d+(b-1)<0);return QD(d)} +function LCb(a){JCb();var b,c,d;c=':'+a;d=ICb[c];if(d!=null){return QD((uCb(d),d))}d=GCb[c];b=d==null?KCb(a):QD((uCb(d),d));MCb();ICb[c]=b;return b} +function qZb(a,b,c){Odd(c,'Compound graph preprocessor',1);a.a=new Hp;vZb(a,b,null);pZb(a,b);uZb(a);yNb(b,(wtc(),zsc),a.a);a.a=null;Uhb(a.b);Qdd(c)} +function X$b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} +function tkc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Vjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} +function ukc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Wjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} +function tXc(a){switch(a.g){case 0:return null;case 1:return new $Xc;case 2:return new QXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function OZc(a,b,c){var d,e;FZc(a,b-a.s,c-a.t);for(e=new olb(a.n);e.a1&&(f=GFb(a,b));return f} +function dmd(a){var b;if(!!a.f&&a.f.kh()){b=BD(a.f,49);a.f=BD(xid(a,b),82);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.f))}return a.f} +function emd(a){var b;if(!!a.i&&a.i.kh()){b=BD(a.i,49);a.i=BD(xid(a,b),82);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,7,b,a.i))}return a.i} +function zUd(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=BD(xid(a,b),18);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,21,b,a.b))}return a.b} +function uAd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Sh();BAd(a,a.f+1);e=(d&Ohe)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.uj());c.Fc(b);++a.f}} +function m3d(a,b,c){var d;if(b.Kj()){return false}else if(b.Zj()!=-2){d=b.zj();return d==null?c==null:pb(d,c)}else return b.Hj()==a.e.Tg()&&c==null} +function wo(){var a;Xj(16,Hie);a=Kp(16);this.b=KC(GF,Gie,317,a,0,1);this.c=KC(GF,Gie,317,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0} +function b0b(a){n_b.call(this);this.k=(j0b(),h0b);this.j=(Xj(6,Jie),new Skb(6));this.b=(Xj(2,Jie),new Skb(2));this.d=new L_b;this.f=new s0b;this.a=a} +function Scc(a){var b,c;if(a.c.length<=1){return}b=Pcc(a,(Ucd(),Rcd));Rcc(a,BD(b.a,19).a,BD(b.b,19).a);c=Pcc(a,Tcd);Rcc(a,BD(c.a,19).a,BD(c.b,19).a)} +function Vzc(){Vzc=ccb;Uzc=new Xzc('SIMPLE',0);Rzc=new Xzc(Tne,1);Szc=new Xzc('LINEAR_SEGMENTS',2);Qzc=new Xzc('BRANDES_KOEPF',3);Tzc=new Xzc(Aqe,4)} +function XDc(a,b,c){if(!ecd(BD(vNb(b,(Nyc(),Vxc)),98))){WDc(a,b,Y_b(b,c));WDc(a,b,Y_b(b,(Ucd(),Rcd)));WDc(a,b,Y_b(b,Acd));mmb();Okb(b.j,new jEc(a))}} +function HVc(a,b,c,d){var e,f,g;e=d?BD(Qc(a.a,b),21):BD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=BD(g.Pb(),33);if(BVc(a,c,f)){return true}}return false} +function FMd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} +function QTd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} +function FDc(a){var b,c,d;b=0;for(d=new olb(a.c.a);d.a102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} +function Wj(a,b){if(a==null){throw vbb(new Heb('null key in entry: null='+b))}else if(b==null){throw vbb(new Heb('null value in entry: '+a+'=null'))}} +function kr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(PD(c)===PD(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()} +function jIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[pHb(a.a[0],b),pHb(a.a[1],b),pHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function kIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[qHb(a.a[0],b),qHb(a.a[1],b),qHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function mqc(){mqc=ccb;iqc=new oqc('GREEDY',0);hqc=new oqc(Une,1);kqc=new oqc(Tne,2);lqc=new oqc('MODEL_ORDER',3);jqc=new oqc('GREEDY_MODEL_ORDER',4)} +function iUc(a,b){var c,d,e;a.b[b.g]=1;for(d=Jsb(b.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);e=c.c;a.b[e.g]==1?Dsb(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):iUc(a,e)}} +function V9b(a,b){var c,d,e;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);c.c==c.f?K9b(a,c,c.c):L9b(a,c)||(e.c[e.c.length]=c,true)}return e} +function IZc(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new olb(a.n);g.af&&NC(b,f,null);return b} +function Lu(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c0&&(i+=e);j[k]=g;g+=h*(i+d)}} +function Uoc(a){var b,c,d;d=a.f;a.n=KC(UD,Vje,25,d,15,1);a.d=KC(UD,Vje,25,d,15,1);for(b=0;b0?a.c:0);++e}a.b=d;a.d=f} +function BZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b);g.a0?a.g:0);++c}a.c=e;a.d=d} +function AHb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[zHb(a,(gHb(),dHb),b),zHb(a,eHb,b),zHb(a,fHb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function lNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,false,true)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function mNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,true,false)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function d5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),zbd))){b.Mc(zbd);b.Fc(Bbd)}else if(b.Hc(Bbd)){b.Mc(Bbd);b.Fc(zbd)}} +function e5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),Gbd))){b.Mc(Gbd);b.Fc(Ebd)}else if(b.Hc(Ebd)){b.Mc(Ebd);b.Fc(Gbd)}} +function udc(a,b,c){Odd(c,'Self-Loop ordering',1);MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new ydc),new Adc),new Cdc),new Edc),new Gdc(a));Qdd(c)} +function ikc(a,b,c,d){var e,f;for(e=b;e0&&(e.b+=b);return e} +function GXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e} +function d_b(a){var b,c,d;d=Ohe;for(c=new olb(a.a);c.a>16==6){return a.Cb.ih(a,5,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Wz(a){Rz();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\n')}return []} +function jeb(a){var b;b=(qeb(),peb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} +function _jb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=geb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=_Bb(a.a,c);$jb(a,b,d);a.a=b;a.b=0}else{dCb(a.a,c)}a.c=d} +function DKb(a,b){var c;c=a.b;return c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Tcd)?-c.rf().a-Edb(ED(c.We(s9c))):b+Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Tcd)?-c.rf().a:b} +function P_b(a){var b;if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.c?-1:Jkb(a.c.a,a,0))} +function C0b(a){var b;if(a.f.c.length!=0&&!!BD(Ikb(a.f,0),70).a){return BD(Ikb(a.f,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.i?-1:Jkb(a.i.j,a,0))} +function Ogc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e} +function shd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,118).Ag().i);for(c=new Fyd(BD(a.f,118).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b} +function Ctd(a,b){var c,d,e;if(b.dc()){return LCd(),LCd(),KCd}else{c=new zyd(a,b.gc());for(e=new Fyd(a);e.e!=e.i.gc();){d=Dyd(e);b.Hc(d)&&wtd(c,d)}return c}} +function bkd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),FAd(a.o))}return fid(a,b,c,d)} +function Tnd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b>22);e+=d>>22;if(e<0){return false}a.l=c&Eje;a.m=d&Eje;a.h=e&Fje;return true} +function Fwb(a,b,c,d,e,f,g){var h,i;if(b.Ae()&&(i=a.a.ue(c,d),i<0||!e&&i==0)){return false}if(b.Be()&&(h=a.a.ue(c,f),h>0||!g&&h==0)){return false}return true} +function Vcc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Ycc(b,Ncc)-Ycc(a,Ncc);case 4:return Ycc(a,Mcc)-Ycc(b,Mcc);}return 0} +function Tqc(a){switch(a.g){case 0:return Mqc;case 1:return Nqc;case 2:return Oqc;case 3:return Pqc;case 4:return Qqc;case 5:return Rqc;default:return null;}} +function End(a,b,c){var d,e;d=(e=new rUd,yId(e,b),pnd(e,c),wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),e),e);AId(d,0);DId(d,1);CId(d,true);BId(d,true);return d} +function tud(a,b){var c,d;if(b>=a.i)throw vbb(new $zd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&$fb(a.g,b+1,a.g,b,d);NC(a.g,--a.i,null);a.fi(b,c);a.ci();return c} +function UId(a,b){var c,d;if(a.Db>>16==17){return a.Cb.ih(a,21,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function iDb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.ac.a.c.length)){throw vbb(new Wdb('index must be >= 0 and <= layer node count'))}!!a.c&&Lkb(a.c.a,a);a.c=c;!!c&&Dkb(c.a,b,a)} +function p7b(a,b){var c,d,e;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=BD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb} +function rMc(a,b){this.c=new Lqb;this.a=a;this.b=b;this.d=BD(vNb(a,(wtc(),otc)),304);PD(vNb(a,(Nyc(),yxc)))===PD((_qc(),Zqc))?(this.e=new bNc):(this.e=new WMc)} +function $dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a>16==6){return a.Cb.ih(a,6,B2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Lhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Eod(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,1,C2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Nhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function lpd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.ih(a,9,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Phd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function mQd(a,b){var c,d;if(a.Db>>16==5){return a.Cb.ih(a,9,h5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),VFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function KHd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,0,k5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),OFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Snd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,6,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),cGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function ird(){this.a=new bqd;this.g=new wo;this.j=new wo;this.b=new Lqb;this.d=new wo;this.i=new wo;this.k=new Lqb;this.c=new Lqb;this.e=new Lqb;this.f=new Lqb} +function MCd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;eWje){return p6d(a,d)}if(d==a){return true}}}return false} +function HKb(a){CKb();switch(a.q.g){case 5:EKb(a,(Ucd(),Acd));EKb(a,Rcd);break;case 4:FKb(a,(Ucd(),Acd));FKb(a,Rcd);break;default:GKb(a,(Ucd(),Acd));GKb(a,Rcd);}} +function LKb(a){CKb();switch(a.q.g){case 5:IKb(a,(Ucd(),zcd));IKb(a,Tcd);break;case 4:JKb(a,(Ucd(),zcd));JKb(a,Tcd);break;default:KKb(a,(Ucd(),zcd));KKb(a,Tcd);}} +function XQb(a){var b,c;b=BD(vNb(a,(wSb(),pSb)),19);if(b){c=b.a;c==0?yNb(a,(HSb(),GSb),new Gub):yNb(a,(HSb(),GSb),new Hub(c))}else{yNb(a,(HSb(),GSb),new Hub(1))}} +function V$b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0} +function hbc(a,b){switch(a.g){case 0:return b==(Ctc(),ytc)?dbc:ebc;case 1:return b==(Ctc(),ytc)?dbc:cbc;case 2:return b==(Ctc(),ytc)?cbc:ebc;default:return cbc;}} +function v$c(a,b){var c,d,e;Lkb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=ere;for(d=new olb(a.a);d.a>16==3){return a.Cb.ih(a,12,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Khd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Uod(a,b){var c,d;if(a.Db>>16==11){return a.Cb.ih(a,10,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Ohd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function PSd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,11,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),aGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function qUd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,12,n5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),dGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function wId(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.kh()){b=BD(a.r,49);a.r=BD(xid(a,b),138);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.r))}return a.r} +function yHb(a,b,c){var d;d=OC(GC(UD,1),Vje,25,15,[BHb(a,(gHb(),dHb),b,c),BHb(a,eHb,b,c),BHb(a,fHb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} +function O9b(a,b){var c,d,e;e=V9b(a,b);if(e.c.length==0){return}Okb(e,new pac);c=e.c.length;for(d=0;d>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} +function fFb(){fFb=ccb;eFb=(rFb(),oFb);dFb=new Nsd(Yke,eFb);cFb=(UEb(),TEb);bFb=new Nsd(Zke,cFb);aFb=(MEb(),LEb);_Eb=new Nsd($ke,aFb);$Eb=new Nsd(_ke,(Bcb(),true))} +function cfc(a,b,c){var d,e;d=b*c;if(JD(a.g,145)){e=ugc(a);if(e.f.d){e.f.a||(a.d.a+=d+ple)}else{a.d.d-=d+ple;a.d.a+=d+ple}}else if(JD(a.g,10)){a.d.d-=d;a.d.a+=2*d}} +function vmc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new olb(b.d);h.a0?a.g:0);++c}b.b=d;b.e=e} +function to(a){var b,c,d;d=a.b;if(Lp(a.i,d.length)){c=d.length*2;a.b=KC(GF,Gie,317,c,0,1);a.c=KC(GF,Gie,317,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){po(a,b,b)}++a.g}} +function cNb(a,b,c,d){var e,f,g,h;for(e=0;eg&&(h=g/d);e>f&&(i=f/e);Y6c(a,$wnd.Math.min(h,i));return a} +function ond(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),yte),2014);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new knd} +function Y9d(){A9d();var b,c;try{c=BD(mUd((yFd(),xFd),Ewe),2024);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new U9d} +function qZd(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),_ve),1941);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new mZd} +function HQd(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}e!=b&&(b?(c=QQd(a,MQd(a,b),c)):(c=QQd(a,a.a,c)));return c} +function nB(){eB.call(this);this.e=-1;this.a=false;this.p=Rie;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=Rie} +function qEb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function eOb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function PVb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function ZTb(){ZTb=ccb;WTb=c3c(e3c(e3c(e3c(new j3c,(qUb(),oUb),(S8b(),m8b)),oUb,q8b),pUb,x8b),pUb,a8b);YTb=e3c(e3c(new j3c,oUb,S7b),oUb,b8b);XTb=c3c(new j3c,pUb,d8b)} +function s3b(a){var b,c,d,e,f;b=BD(vNb(a,(wtc(),Csc)),83);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=BD(d.Pb(),306);e=c.i;e.c+=f.a;e.d+=f.b;c.c?VHb(c):XHb(c)}yNb(a,Csc,null)} +function qmc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}} +function BXc(a){var b,c,d,e,f;d=0;e=dme;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;zXc(a,a.d,0,0,dre,c);f=a.b.ig(a.d);if(f0){g=(f&Ohe)%a.d.length;e=wAd(a,g,f,b);if(e){h=e.ed(c);return h}}d=a.tj(f,b,c);a.c.Fc(d);return null} +function t1d(a,b){var c,d,e,f;switch(o1d(a,b)._k()){case 3:case 2:{c=OKd(b);for(e=0,f=c.i;e=0;d--){if(dfb(a[d].d,b)||dfb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} +function Abb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a/b;if(Kje0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}} +function Rpd(a,b){var c,d;d=false;if(ND(b)){d=true;Qpd(a,new yC(GD(b)))}if(!d){if(JD(b,236)){d=true;Qpd(a,(c=Kcb(BD(b,236)),new TB(c)))}}if(!d){throw vbb(new vcb(Ute))}} +function IMd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,10,(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd)),(f=c.c,JD(f,88)?BD(f,26):(jGd(),_Fd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d} +function T_b(a){var b,c;switch(BD(vNb(Q_b(a),(Nyc(),ixc)),420).g){case 0:b=a.n;c=a.o;return new f7c(b.a+c.a/2,b.b+c.b/2);case 1:return new g7c(a.n);default:return null;}} +function lrc(){lrc=ccb;irc=new mrc(ane,0);hrc=new mrc('LEFTUP',1);krc=new mrc('RIGHTUP',2);grc=new mrc('LEFTDOWN',3);jrc=new mrc('RIGHTDOWN',4);frc=new mrc('BALANCED',5)} +function FFc(a,b,c){var d,e,f;d=Kdb(a.a[b.p],a.a[c.p]);if(d==0){e=BD(vNb(b,(wtc(),Qsc)),15);f=BD(vNb(c,Qsc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d} +function jXc(a){switch(a.g){case 1:return new XVc;case 2:return new ZVc;case 3:return new VVc;case 0:return null;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function Ikd(a,b,c){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);!a.n&&(a.n=new cUd(D2,a,1,7));ytd(a.n,BD(c,14));return;case 2:Lkd(a,GD(c));return;}ekd(a,b,c)} +function Zkd(a,b,c){switch(b){case 3:ald(a,Edb(ED(c)));return;case 4:cld(a,Edb(ED(c)));return;case 5:dld(a,Edb(ED(c)));return;case 6:eld(a,Edb(ED(c)));return;}Ikd(a,b,c)} +function Fnd(a,b,c){var d,e,f;f=(d=new rUd,d);e=xId(f,b,null);!!e&&e.Fi();pnd(f,c);wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),f);AId(f,0);DId(f,1);CId(f,true);BId(f,true)} +function mUd(a,b){var c,d,e;c=Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e.Nh()}else if(JD(c,498)){d=BD(c,1938);e=d.b;return e}else{return null}} +function Ui(a,b,c,d){var e,f;Qb(b);Qb(c);f=BD(tn(a.d,b),19);Ob(!!f,'Row %s not in %s',b,a.e);e=BD(tn(a.b,c),19);Ob(!!e,'Column %s not in %s',c,a.c);return Wi(a,f.a,e.a,d)} +function JC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=LC(h,k);d!=10&&OC(GC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i1||h==-1){f=BD(i,15);e.Wb(t6d(a,f))}else{e.Wb(s6d(a,BD(i,56)))}}}} +function Zbb(b,c,d,e){Ybb();var f=Wbb;$moduleName=c;$moduleBase=d;tbb=e;function g(){for(var a=0;aOqe){return c}else e>-1.0E-6&&++c}return c} +function PQd(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=lid(a.b,a,-4,c));!!b&&(c=kid(b,a,-4,c));c=GQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function SQd(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=lid(a.f,a,-1,c));!!b&&(c=kid(b,a,-1,c));c=IQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,b,b))} +function E9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} +function I9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} +function qEc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Ddb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0} +function zqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new Crd(a);Aqd(d.a,e)}}} +function Qqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new lrd(a);nqd(d.a,e)}}} +function eFd(b){var c;if(b!=null&&b.length>0&&bfb(b,b.length-1)==33){try{c=PEd(qfb(b,0,b.length-1));return c.e==null}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}return false} +function h3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,3,d,null,f,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,1,d,d.zj(),f,-1,true);c?c.Ei(e):(c=e);return c} +function Vee(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=Uee((BCb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw vbb(new mde('Unknown Option: '+'X'.substr(a)));b|=c}return b} +function mZb(a,b,c){var d,e,f;d=Q_b(b);e=a_b(d);f=new H0b;F0b(f,b);switch(c.g){case 1:G0b(f,Wcd(Zcd(e)));break;case 2:G0b(f,Zcd(e));}yNb(f,(Nyc(),Uxc),ED(vNb(a,Uxc)));return f} +function U9b(a){var b,c;b=BD(Rr(new Sr(ur(R_b(a.a).a.Kc(),new Sq))),17);c=BD(Rr(new Sr(ur(U_b(a.a).a.Kc(),new Sq))),17);return Ccb(DD(vNb(b,(wtc(),ltc))))||Ccb(DD(vNb(c,ltc)))} +function Xjc(){Xjc=ccb;Tjc=new Yjc('ONE_SIDE',0);Vjc=new Yjc('TWO_SIDES_CORNER',1);Wjc=new Yjc('TWO_SIDES_OPPOSING',2);Ujc=new Yjc('THREE_SIDES',3);Sjc=new Yjc('FOUR_SIDES',4)} +function jkc(a,b,c,d,e){var f,g;f=BD(GAb(JAb(b.Oc(),new _kc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);g=BD(Si(a.b,c,d),15);e==0?g.Wc(0,f):g.Gc(f)} +function KDc(a,b){var c,d,e,f,g;for(f=new olb(b.a);f.a0&&ric(this,this.c-1,(Ucd(),zcd));this.c0&&a[0].length>0&&(this.c=Ccb(DD(vNb(Q_b(a[0][0]),(wtc(),Rsc)))));this.a=KC(CX,nie,2018,a.length,0,2);this.b=KC(FX,nie,2019,a.length,0,2);this.d=new ss} +function tKc(a){if(a.c.length==0){return false}if((tCb(0,a.c.length),BD(a.c[0],17)).c.i.k==(j0b(),g0b)){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new wKc),new yKc)} +function rRc(a,b,c){Odd(c,'Tree layout',1);H2c(a.b);K2c(a.b,(yRc(),uRc),uRc);K2c(a.b,vRc,vRc);K2c(a.b,wRc,wRc);K2c(a.b,xRc,xRc);a.a=F2c(a.b,b);sRc(a,b,Udd(c,1));Qdd(c);return b} +function HXc(a,b){var c,d,e,f,g,h,i;h=gVc(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new olb(h);d.a=0){c=Abb(a,Jje);d=Hbb(a,Jje)}else{b=Pbb(a,1);c=Abb(b,500000000);d=Hbb(b,500000000);d=wbb(Nbb(d,1),xbb(a,1))}return Mbb(Nbb(d,32),xbb(c,Yje))} +function oQb(a,b,c){var d,e;d=(sCb(b.b!=0),BD(Nsb(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Jsb(b,0);Vsb(e,d);return b} +function pmc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=umc(g,i.d[g.g],c);e=P6c(R6c(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Gsb(d,h,d.c.b,d.c)} +function yJc(a,b,c){var d,e,f,g;g=Jkb(a.e,b,0);f=new zJc;f.b=c;d=new Bib(a.e,g);while(d.b1;b>>=1){(b&1)!=0&&(d=Ogb(d,c));c.d==1?(c=Ogb(c,c)):(c=new Xgb(Lhb(c.a,c.d,KC(WD,oje,25,c.d<<1,15,1))))}d=Ogb(d,c);return d} +function zub(){zub=ccb;var a,b,c,d;wub=KC(UD,Vje,25,25,15,1);xub=KC(UD,Vje,25,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){xub[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){wub[a]=c;c*=0.5}} +function S1b(a){var b,c;if(Ccb(DD(hkd(a,(Nyc(),fxc))))){for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);if(Qld(b)){if(Ccb(DD(hkd(b,gxc)))){return true}}}}return false} +function kjc(a,b){var c,d,e;if(Qqb(a.f,b)){b.b=a;d=b.c;Jkb(a.j,d,0)!=-1||Ekb(a.j,d);e=b.d;Jkb(a.j,e,0)!=-1||Ekb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new vjc(a));qjc(a.i,c)}}} +function rmc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p=0&&dfb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return tA(a,c,d)}if(b>=0&&dfb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return tA(a,c,d)}return tA(a,c,d)} +function tjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.ac;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<=a.f){break}f.c[f.c.length]=c}return f} +function sfd(a){var b,c,d,e;b=null;for(e=new olb(a.wf());e.a0&&$fb(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;ef&&nfb(j,sfb(c[h],ltb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} +function MIb(a,b){var c;c=NIb(a.b.Hf(),b.b.Hf());if(c!=0){return c}switch(a.b.Hf().g){case 1:case 2:return beb(a.b.sf(),b.b.sf());case 3:case 4:return beb(b.b.sf(),a.b.sf());}return 0} +function iRb(a){var b,c,d;d=a.e.c.length;a.a=IC(WD,[nie,oje],[48,25],15,[d,d],2);for(c=new olb(a.c);c.a>4&15;f=a[d]&15;g[e++]=Qmd[c];g[e++]=Qmd[f]}return zfb(g,0,g.length)}} +function j3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,4,d,f,null,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,d.Kj()?2:1,d,f,d.zj(),-1,true);c?c.Ei(e):(c=e);return c} +function wfb(a){var b,c;if(a>=Tje){b=Uje+(a-Tje>>10&1023)&aje;c=56320+(a-Tje&1023)&aje;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&aje)}} +function bKb(a,b){$Jb();var c,d,e,f;e=BD(BD(Qc(a.r,b),21),84);if(e.gc()>=2){d=BD(e.Kc().Pb(),111);c=a.u.Hc((rcd(),mcd));f=a.u.Hc(qcd);return !d.a&&!c&&(e.gc()==2||f)}else{return false}} +function IVc(a,b,c,d,e){var f,g,h;f=JVc(a,b,c,d,e);h=false;while(!f){AVc(a,e,true);h=true;f=JVc(a,b,c,d,e)}h&&AVc(a,e,false);g=dVc(e);if(g.c.length!=0){!!a.d&&a.d.lg(g);IVc(a,e,c,d,g)}} +function Mad(){Mad=ccb;Kad=new Nad(ane,0);Iad=new Nad('DIRECTED',1);Lad=new Nad('UNDIRECTED',2);Gad=new Nad('ASSOCIATION',3);Jad=new Nad('GENERALIZATION',4);Had=new Nad('DEPENDENCY',5)} +function kfd(a,b){var c;if(!mpd(a)){throw vbb(new Zdb(Sse))}c=mpd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0} +function cub(a,b){var c,d;uCb(b);d=a.b.c.length;Ekb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.ue(Ikb(a.b,d),b)<=0){Nkb(a.b,c,b);return true}Nkb(a.b,c,Ikb(a.b,d))}Nkb(a.b,d,b);return true} +function BHb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f=h} +function Tpd(a,b,c,d){var e;e=false;if(ND(d)){e=true;Upd(b,c,GD(d))}if(!e){if(KD(d)){e=true;Tpd(a,b,c,d)}}if(!e){if(JD(d,236)){e=true;Spd(b,c,BD(d,236))}}if(!e){throw vbb(new vcb(Ute))}} +function W0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),K6d).length;++d){if(dfb(K6d[d],e)){return d}}}}return 0} +function X0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),L6d).length;++d){if(dfb(L6d[d],e)){return d}}}}return 0} +function Ve(a,b){var c,d,e,f;uCb(b);f=a.a.gc();if(f0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.ue(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} +function ucd(a){rcd();var b,c;b=qqb(ncd,OC(GC(E1,1),Kie,273,0,[pcd]));if(Ox(Cx(b,a))>1){return false}c=qqb(mcd,OC(GC(E1,1),Kie,273,0,[lcd,qcd]));if(Ox(Cx(c,a))>1){return false}return true} +function fod(a,b){var c;c=Phb((yFd(),xFd),a);JD(c,498)?Shb(xFd,a,new bUd(this,b)):Shb(xFd,a,this);bod(this,b);if(b==(LFd(),KFd)){this.wb=BD(this,1939);BD(b,1941)}else{this.wb=(NFd(),MFd)}} +function lZd(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d=_ie?'error':d>=900?'warn':d>=800?'info':'log');gCb(c,a.a);!!a.b&&hCb(b,c,a.b,'Exception: ',true)} +function vNb(a,b){var c,d;d=(!a.q&&(a.q=new Lqb),Ohb(a.q,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a);return c} +function qUb(){qUb=ccb;lUb=new rUb('P1_CYCLE_BREAKING',0);mUb=new rUb('P2_LAYERING',1);nUb=new rUb('P3_NODE_ORDERING',2);oUb=new rUb('P4_NODE_PLACEMENT',3);pUb=new rUb('P5_EDGE_ROUTING',4)} +function SUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Lkb(a.b.b,f.b);Lkb(a.b.a,BD(f.b,81).d)}}} +function IWb(a,b){AWb();var c;if(a.c==b.c){if(a.b==b.b||pWb(a.b,b.b)){c=mWb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return beb(a.b.g,b.b.g)}else{return Kdb(a.c,b.c)}} +function y6b(a,b){var c;Odd(b,'Hierarchical port position processing',1);c=a.b;c.c.length>0&&x6b((tCb(0,c.c.length),BD(c.c[0],29)),a);c.c.length>1&&x6b(BD(Ikb(c,c.c.length-1),29),a);Qdd(b)} +function RVc(a,b){var c,d,e;if(CVc(a,b)){return true}for(d=new olb(b);d.a=e||b<0)throw vbb(new qcb(lue+b+mue+e));if(c>=e||c<0)throw vbb(new qcb(nue+c+mue+e));b!=c?(d=(f=a.Ti(c),a.Hi(b,f),f)):(d=a.Oi(c));return d} +function m6d(a){var b,c,d;d=a;if(a){b=0;for(c=a.Ug();c;c=c.Ug()){if(++b>Wje){return m6d(c)}d=c;if(c==a){throw vbb(new Zdb('There is a cycle in the containment hierarchy of '+a))}}}return d} +function Fe(a){var b,c,d;d=new xwb(She,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();uwb(d,PD(b)===PD(a)?'(this Collection)':b==null?Xhe:fcb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function CVc(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;cd&&(BCb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}} +function gkc(){gkc=ccb;dkc=OC(GC(F1,1),bne,61,0,[(Ucd(),Acd),zcd,Rcd]);ckc=OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd]);ekc=OC(GC(F1,1),bne,61,0,[Rcd,Tcd,Acd]);fkc=OC(GC(F1,1),bne,61,0,[Tcd,Acd,zcd])} +function omc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?Xcd(e):Vcd(e);f=umc(e,k.d[e.g],c);j=umc(i,k.d[i.g],c);Dsb(d,P6c(f,j));e=i}} +function oFc(a,b,c,d){var e,f,g,h,i;g=JHc(a.a,b,c);h=BD(g.a,19).a;f=BD(g.b,19).a;if(d){i=BD(vNb(b,(wtc(),gtc)),10);e=BD(vNb(c,gtc),10);if(!!i&&!!e){mic(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} +function oHc(a){var b,c,d,e,f,g,h,i,j;this.a=lHc(a);this.b=new Rkb;for(c=a,d=0,e=c.length;dwic(a.d).c){a.i+=a.g.c;yic(a.d)}else if(wic(a.d).c>wic(a.g).c){a.e+=a.d.c;yic(a.g)}else{a.i+=vic(a.g);a.e+=vic(a.d);yic(a.g);yic(a.d)}}} +function XOc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new DOc((HOc(),FOc),b,f,1);new DOc(FOc,f,g,1);for(e=new olb(c);e.ah&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} +function sZc(a,b,c,d,e){var f,g;g=false;f=BD(Ikb(c.b,0),33);while(yZc(a,b,f,d,e)){g=true;NZc(c,f);if(c.b.c.length==0){break}f=BD(Ikb(c.b,0),33)}c.b.c.length==0&&v$c(c.j,c);g&&a$c(b.q);return g} +function t6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(s6c(a,d,e)){return true}d=e}if(s6c(a,d,c)){return true}return false} +function ckd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),bId(a.o,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Rj(a,yjd(a),c-aLd(a.zh()),b,d)} +function bod(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=BD(a.sb,49).ih(a,1,i5,c));!!b&&(c=BD(b,49).gh(a,1,i5,c));c=Jnd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))} +function yqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new zrd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new Ard(a);imd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need an end point.'))}} +function wqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new wrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new xrd(a);pmd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need a start point.'))}} +function pyb(a,b){var c,d,e,f,g,h,i;for(d=syb(a),f=0,h=d.length;f>22-b;e=a.h<>22-b}else if(b<44){c=0;d=a.l<>44-b}else{c=0;d=0;e=a.l<a){throw vbb(new Wdb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:q6c(a)/(q6c(b)*q6c(a-b))} +function jfd(a,b){var c,d,e,f;c=new _ud(a);while(c.g==null&&!c.c?Uud(c):c.g==null||c.i!=0&&BD(c.g[c.i-1],47).Ob()){f=BD(Vud(c),56);if(JD(f,160)){d=BD(f,160);for(e=0;e>4];b[c*2+1]=gde[f&15]}return zfb(b,0,b.length)} +function fn(a){Vm();var b,c,d;d=a.c.length;switch(d){case 0:return Um;case 1:b=BD(qr(new olb(a)),42);return ln(b.cd(),b.dd());default:c=BD(Qkb(a,KC(CK,zie,42,a.c.length,0,1)),165);return new wx(c);}} +function ITb(a){var b,c,d,e,f,g;b=new jkb;c=new jkb;Wjb(b,a);Wjb(c,a);while(c.b!=c.c){e=BD(fkb(c),37);for(g=new olb(e.a);g.a0&&WGc(a,c,b);return e}return TGc(a,b,c)} +function MSc(a,b,c){var d,e,f,g;if(b.b!=0){d=new Psb;for(g=Jsb(b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);ye(d,URc(f));e=f.e;e.a=BD(vNb(f,(mTc(),kTc)),19).a;e.b=BD(vNb(f,lTc),19).a}MSc(a,d,Udd(c,d.b/a.a|0))}} +function JZc(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(LZc(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+11&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} +function cmc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}} +function Q6c(a,b,c,d,e){if(dd&&(a.a=d);a.be&&(a.b=e);return a} +function lsd(a){if(JD(a,149)){return esd(BD(a,149))}else if(JD(a,229)){return fsd(BD(a,229))}else if(JD(a,23)){return gsd(BD(a,23))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[a])))))}} +function mhb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g>>e|c[g+d+1]<>>e;++g}return f} +function zMc(a,b,c,d){var e,f,g;if(b.k==(j0b(),g0b)){for(f=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);g=e.c.i.k;if(g==g0b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false} +function mD(a,b){var c,d,e,f;b&=63;c=a.h&Fje;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return TC(d&Eje,e&Eje,f&Fje)} +function Iic(a,b,c,d){var e;this.b=d;this.e=a==(rGc(),pGc);e=b[c];this.d=IC(sbb,[nie,dle],[177,25],16,[e.length,e.length],2);this.a=IC(WD,[nie,oje],[48,25],15,[e.length,e.length],2);this.c=new sic(b,c)} +function ljc(a){var b,c,d;a.k=new Ki((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,a.j.c.length);for(d=new olb(a.j);d.a=c){K9b(a,b,d.p);return true}}return false} +function Iod(a){var b;if((a.Db&64)!=0)return fld(a);b=new Wfb(dte);!a.a||Qfb(Qfb((b.a+=' "',b),a.a),'"');Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function Z2d(a,b,c){var d,e,f,g,h;h=S6d(a.e.Tg(),b);e=BD(a.g,119);d=0;for(g=0;gc){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',OC(GC(SI,1),Uhe,1,5,[meb(b),meb(a)]))} +function Pz(b,c){var d,e,f,g;for(e=0,f=b.length;e0&&iCc(a,f,c))}}b.p=0} +function p5c(a){var b;this.c=new Psb;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=BD(gdb(e1),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.j=a.i);this.g=a.f} +function Wb(a){var b,c,d,e;b=Kfb(Qfb(new Wfb('Predicates.'),'and'),40);c=true;for(e=new vib(a);e.b0?h[g-1]:KC(OQ,kne,10,0,0,1);e=h[g];j=g=0?a.Bh(e):vid(a,d)}else{throw vbb(new Wdb(ite+d.ne()+jte))}}else{eid(a,c,d)}} +function aqd(a){var b,c;c=null;b=false;if(JD(a,204)){b=true;c=BD(a,204).a}if(!b){if(JD(a,258)){b=true;c=''+BD(a,258).a}}if(!b){if(JD(a,483)){b=true;c=''+BD(a,483).a}}if(!b){throw vbb(new vcb(Ute))}return c} +function ORd(a,b){var c,d;if(a.f){while(b.Ob()){c=BD(b.Pb(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Ub();return true}}return false}else{return b.Ob()}} +function QRd(a,b){var c,d;if(a.f){while(b.Sb()){c=BD(b.Ub(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Pb();return true}}return false}else{return b.Sb()}} +function I2d(a,b,c){var d,e,f,g,h,i;i=S6d(a.e.Tg(),b);d=0;h=a.i;e=BD(a.g,119);for(g=0;g1&&(b.c[b.c.length]=f,true)}} +function TJc(a){var b,c,d,e;c=new Psb;ye(c,a.o);d=new twb;while(c.b!=0){b=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),508);e=KJc(a,b,true);e&&Ekb(d.a,b)}while(d.a.c.length!=0){b=BD(rwb(d),508);KJc(a,b,false)}} +function _5c(){_5c=ccb;$5c=new a6c(ole,0);T5c=new a6c('BOOLEAN',1);X5c=new a6c('INT',2);Z5c=new a6c('STRING',3);U5c=new a6c('DOUBLE',4);V5c=new a6c('ENUM',5);W5c=new a6c('ENUMSET',6);Y5c=new a6c('OBJECT',7)} +function H6c(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++0){uu(this)}}this.b=b;this.a=null} +function rEb(a,b){var c,d;b.a?sEb(a,b):(c=BD(Exb(a.b,b.b),57),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=BD(Dxb(a.b,b.b),57),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),Fxb(a.b,b.b),undefined)} +function FJb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((tdd(),sdd))&&KJb(a,b);d=JJb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.a=d} +function OKb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((tdd(),sdd))&&SKb(a,b);d=RKb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.b=d} +function cOb(a,b){var c,d,e,f;f=new Rkb;for(d=new olb(b);d.ac.a&&(d.Hc((i8c(),c8c))?(e=(b.a-c.a)/2):d.Hc(e8c)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((i8c(),g8c))?(f=(b.b-c.b)/2):d.Hc(f8c)&&(f=b.b-c.b));Efd(a,e,f)} +function aod(a,b,c,d,e,f,g,h,i,j,k,l,m){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=g;dJd(a,h);fJd(a,i);ZId(a,j);eJd(a,k);CId(a,l);aJd(a,m);BId(a,true);AId(a,e);a.ok(f);yId(a,b);d!=null&&(a.i=null,_Id(a,d))} +function PRd(a){var b,c;if(a.f){while(a.n>0){b=BD(a.k.Xb(a.n-1),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{--a.n}}return false}else{return a.n>0}} +function Jb(a,b,c){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,[c,meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must not be greater than size (%s)',OC(GC(SI,1),Uhe,1,5,[c,meb(a),meb(b)]))}} +function Llb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Ilb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Llb(b,a,i,j,-e,f);Llb(b,a,j,h,-e,f);if(f.ue(a[j-1],a[j])<=0){while(c=0?a.sh(f,c):uid(a,e,c)}else{throw vbb(new Wdb(ite+e.ne()+jte))}}else{did(a,d,e,c)}} +function q6d(b){var c,d,e,f;d=BD(b,49).qh();if(d){try{e=null;c=nUd((yFd(),xFd),LEd(MEd(d)));if(c){f=c.rh();!!f&&(e=f.Wk(tfb(d.e)))}if(!!e&&e!=b){return q6d(e)}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}return b} +function jrb(a,b,c){var d,e,f,g;g=b==null?0:a.b.se(b);e=(d=a.a.get(g),d==null?new Array:d);if(e.length==0){a.a.set(g,e)}else{f=grb(a,b,e);if(f){return f.ed(c)}}NC(e,e.length,new pjb(b,c));++a.c;zpb(a.b);return null} +function YUc(a,b){var c,d;H2c(a.a);K2c(a.a,(PUc(),NUc),NUc);K2c(a.a,OUc,OUc);d=new j3c;e3c(d,OUc,(tVc(),sVc));PD(hkd(b,(ZWc(),LWc)))!==PD((pWc(),mWc))&&e3c(d,OUc,qVc);e3c(d,OUc,rVc);E2c(a.a,d);c=F2c(a.a,b);return c} +function uC(a){if(!a){return OB(),NB}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=qC[typeof b];return c?c(b):xC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new xB(a)}else{return new fC(a)}} +function RJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}hIb(d);iIb(d)} +function SJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}hIb(d);iIb(d)} +function Jgc(a,b){var c,d,e,f,g;if(b.dc()){return}e=BD(b.Xb(0),128);if(b.gc()==1){Igc(a,e,e,1,0,b);return}c=1;while(c0){try{f=Icb(c,Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){e=a;throw vbb(new rFd(e))}else throw vbb(a)}}d=(!b.a&&(b.a=new z0d(b)),b.a);return f=0?BD(qud(d,f),56):null} +function Ib(a,b){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,['index',meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must be less than size (%s)',OC(GC(SI,1),Uhe,1,5,['index',meb(a),meb(b)]))}} +function Slb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d0){g=a.c.d;h=a.d.d;e=Y6c(c7c(new f7c(h.a,h.b),g),1/(d+1));f=new f7c(g.a,g.b);for(c=new olb(a.a);c.a=0?a._g(c,true,true):sid(a,e,true),153));BD(d,215).ol(b)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} +function ugb(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=QD($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return vgb(Cbb(a))} +function QOc(a){var b,c,d,e,f,g,h;f=new zsb;for(c=new olb(a);c.a2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f} +function K5b(a,b){var c,d,e;d=new b0b(a);tNb(d,b);yNb(d,(wtc(),Gsc),b);yNb(d,(Nyc(),Vxc),(dcd(),$bd));yNb(d,mwc,(F7c(),B7c));__b(d,(j0b(),e0b));c=new H0b;F0b(c,d);G0b(c,(Ucd(),Tcd));e=new H0b;F0b(e,d);G0b(e,zcd);return d} +function Spc(a){switch(a.g){case 0:return new fGc((rGc(),oGc));case 1:return new CFc;case 2:return new fHc;default:throw vbb(new Wdb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} +function tDc(a,b){var c,d,e,f,g;a.c[b.p]=true;Ekb(a.a,b);for(g=new olb(b.j);g.a=f){g.$b()}else{e=g.Kc();for(d=0;d0?zh():g<0&&Bw(a,b,-g);return true}else{return false}} +function fIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=jIb(a,true);b=0;for(d=g,e=0,f=d.length;e0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Mtb(Zzb(OAb(JAb(Plb(a.a),new xIb),new zIb)))}return h>0?h+a.n.d+a.n.a:0} +function gIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Mtb(Zzb(OAb(JAb(Plb(a.a),new tIb),new vIb)))}else{g=kIb(a,true);b=0;for(d=g,e=0,f=d.length;e0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0} +function MJb(a,b){var c,d,e,f;f=BD(Mpb(a.b,b),124);c=f.a;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);!!d.c&&(c.a=$wnd.Math.max(c.a,ZHb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} +function NQb(a,b){var c,d,e;c=BD(vNb(b,(wSb(),oSb)),19).a-BD(vNb(a,oSb),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(HSb(),DSb)),8)),BD(vNb(a,ESb),8));e=c7c(R6c(BD(vNb(b,DSb),8)),BD(vNb(b,ESb),8));return Kdb(d.a*d.b,e.a*e.b)}return c} +function iRc(a,b){var c,d,e;c=BD(vNb(b,(JTc(),ETc)),19).a-BD(vNb(a,ETc),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(mTc(),VSc)),8)),BD(vNb(a,WSc),8));e=c7c(R6c(BD(vNb(b,VSc),8)),BD(vNb(b,WSc),8));return Kdb(d.a*d.b,e.a*e.b)}return c} +function TZb(a){var b,c;c=new Ufb;c.a+='e_';b=KZb(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Qfb((c.a+=' ',c),C0b(a.c));Qfb(Pfb((c.a+='[',c),a.c.i),']');Qfb((c.a+=gne,c),C0b(a.d));Qfb(Pfb((c.a+='[',c),a.d.i),']')}return c.a} +function zRc(a){switch(a.g){case 0:return new lUc;case 1:return new sUc;case 2:return new CUc;case 3:return new IUc;default:throw vbb(new Wdb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}} +function mfd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f} +function mqd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);f=Zpd(c,g.a);Lte in f.a||Mte in f.a?$qd(a,f,b):erd(a,f,b);otd(BD(Ohb(a.b,Wpd(f)),79))}}} +function LJd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=wId(a);if(!!b&&(Q6d(),b.Cj()==Bve)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} +function k1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e=0&&f=0?a._g(c,true,true):sid(a,e,true),153));return BD(d,215).ll(b)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} +function BZd(){tZd();var a;if(sZd)return BD(nUd((yFd(),xFd),_ve),1939);rEd(CK,new J_d);CZd();a=BD(JD(Phb((yFd(),xFd),_ve),547)?Phb(xFd,_ve):new AZd,547);sZd=true;yZd(a);zZd(a);Rhb((JFd(),IFd),a,new EZd);Shb(xFd,_ve,a);return a} +function v2d(a,b){var c,d,e,f;a.j=-1;if(oid(a.e)){c=a.i;f=a.i!=0;lud(a,b);d=new pSd(a.e,3,a.c,null,b,c,f);e=b.Qk(a.e,a.c,null);e=h3d(a,b,e);if(!e){Uhd(a.e,d)}else{e.Ei(d);e.Fi()}}else{lud(a,b);e=b.Qk(a.e,a.c,null);!!e&&e.Fi()}} +function rA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BCb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BCb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e} +function vMb(a){var b,c,d,e,f;e=BD(a.a,19).a;f=BD(a.b,19).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new vgd(meb(c),meb(d))} +function fNb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e=0&&j>=0&&i=a.i)throw vbb(new qcb(lue+b+mue+a.i));if(c>=a.i)throw vbb(new qcb(nue+c+mue+a.i));d=a.g[c];if(b!=c){b>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-Rje;b=d>>16&4;c+=b;a<<=b;d=a-oie;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} +function $Pb(a){QPb();var b,c,d,e;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb;b=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);SPb(b);for(e=new Fyd(b);e.e!=e.i.gc();){d=BD(Dyd(e),33);if(Jkb(PPb,d,0)==-1){c=new Rkb;Ekb(NPb,c);TPb(d,c)}}return NPb} +function BQb(a,b,c){var d,e,f,g;a.a=c.b.d;if(JD(b,352)){e=itd(BD(b,79),false,false);f=ofd(e);d=new FQb(a);reb(f,d);ifd(f,e);b.We((Y9c(),Q8c))!=null&&reb(BD(b.We(Q8c),74),d)}else{g=BD(b,470);g.Hg(g.Dg()+a.a.a);g.Ig(g.Eg()+a.a.b)}} +function _5b(a,b){var c,d,e,f,g,h,i,j;j=Edb(ED(vNb(b,(Nyc(),zyc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h=0){return c}h=U6c(c7c(new f7c(g.c+g.b/2,g.d+g.a/2),new f7c(f.c+f.b/2,f.d+f.a/2)));return -(xOb(f,g)-1)*h} +function ufd(a,b,c){var d;MAb(new YAb(null,(!c.a&&(c.a=new cUd(A2,c,6,6)),new Kub(c.a,16))),new Mfd(a,b));MAb(new YAb(null,(!c.n&&(c.n=new cUd(D2,c,1,7)),new Kub(c.n,16))),new Ofd(a,b));d=BD(hkd(c,(Y9c(),Q8c)),74);!!d&&p7c(d,a,b)} +function sid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();BD(f,66).Oj()||(f=_1d(q1d(M6d,f)));e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));return BD(e,215).hl(b,c)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} +function wAd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new bPc(i.c,g);Dkb(a,d++,e)}h=j+c;if(h<=i.a){f=new bPc(h,i.a);wCb(d,a.c.length);aCb(a.c,d,f)}}} +function u0d(a){var b;if(!a.c&&a.g==null){a.d=a.si(a.f);wtd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=BD(a.g[a.i-1],47)}}if(b==a.b&&null.km>=null.jm()){Vud(a);return u0d(a)}else{return b.Ob()}} +function KTb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Ydd(new Zdd,0));Odd(h,Vme,1);aUb(a.c,b);g=EYb(a.a,b);if(g.gc()==1){MTb(BD(g.Xb(0),37),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=BD(e.Pb(),37);MTb(d,Udd(h,f))}}CYb(a.a,g,b);NTb(b);Qdd(h)} +function qYb(a){this.a=a;if(a.c.i.k==(j0b(),e0b)){this.c=a.c;this.d=BD(vNb(a.c.i,(wtc(),Hsc)),61)}else if(a.d.i.k==e0b){this.c=a.d;this.d=BD(vNb(a.d.i,(wtc(),Hsc)),61)}else{throw vbb(new Wdb('Edge '+a+' is not an external edge.'))}} +function oQd(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,e,a.b));if(!b){pnd(a,null);qQd(a,0);pQd(a,null)}else if(b!=a){pnd(a,b.zb);qQd(a,b.d);c=(d=b.c,d==null?b.zb:d);pQd(a,c==null||dfb(c,b.zb)?null:c)}} +function NRd(a){var b,c;if(a.f){while(a.n=g)throw vbb(new Cyd(b,g));e=c[b];if(g==1){d=null}else{d=KC($3,hve,415,g-1,0,1);$fb(c,0,d,0,b);f=g-b-1;f>0&&$fb(c,b+1,d,b,f)}b0d(a,d);a0d(a,b,e);return e} +function m8d(){m8d=ccb;k8d=BD(qud(ZKd((r8d(),q8d).qb),6),34);h8d=BD(qud(ZKd(q8d.qb),3),34);i8d=BD(qud(ZKd(q8d.qb),4),34);j8d=BD(qud(ZKd(q8d.qb),5),18);XId(k8d);XId(h8d);XId(i8d);XId(j8d);l8d=new amb(OC(GC(t5,1),Mve,170,0,[k8d,h8d]))} +function AJb(a,b){var c;this.d=new H_b;this.b=b;this.e=new g7c(b.qf());c=a.u.Hc((rcd(),ocd));a.u.Hc(ncd)?a.D?(this.a=c&&!b.If()):(this.a=true):a.u.Hc(pcd)?c?(this.a=!(b.zf().Kc().Ob()||b.Bf().Kc().Ob())):(this.a=false):(this.a=false)} +function IKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Tcd)?-d.rf().a-Edb(ED(d.We(s9c))):c+Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Tcd)?-d.rf().a:c)}} +function Q1b(a,b){var c,d,e,f;c=BD(vNb(a,(Nyc(),Lwc)),103);f=BD(hkd(b,$xc),61);e=BD(vNb(a,Vxc),98);if(e!=(dcd(),bcd)&&e!=ccd){if(f==(Ucd(),Scd)){f=lfd(b,c);f==Scd&&(f=Zcd(c))}}else{d=M1b(b);d>0?(f=Zcd(c)):(f=Wcd(Zcd(c)))}jkd(b,$xc,f)} +function olc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&Okb(g,new Ulc);e=g.c.length/2|0;for(d=0;d0&&WGc(a,c,b);return f}else if(d.a!=null){WGc(a,b,c);return -1}else if(e.a!=null){WGc(a,c,b);return 1}return 0} +function swd(a,b){var c,d,e,f;if(a.ej()){c=a.Vi();f=a.fj();++a.j;a.Hi(c,a.oi(c,b));d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{Bvd(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}} +function D2d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);e=new yud;c=BD(a.g,119);for(f=a.i;--f>=0;){d=c[f];g.rl(d.ak())&&wtd(e,d)}!Yxd(a,e)&&oid(a.e)&&GLd(a,b.$j()?H2d(a,6,b,(mmb(),jmb),null,-1,false):H2d(a,b.Kj()?2:1,b,null,null,-1,false))} +function Dhb(){Dhb=ccb;var a,b;Bhb=KC(cJ,nie,91,32,0,1);Chb=KC(cJ,nie,91,32,0,1);a=1;for(b=0;b<=18;b++){Bhb[b]=ghb(a);Chb[b]=ghb(Nbb(a,b));a=Ibb(a,5)}for(;bg){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true} +function wcc(a,b){var c;Odd(b,'Partition preprocessing',1);c=BD(GAb(JAb(LAb(JAb(new YAb(null,new Kub(a.a,16)),new Acc),new Ccc),new Ecc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);MAb(c.Oc(),new Gcc);Qdd(b)} +function DMc(a){wMc();var b,c,d,e,f,g,h;c=new $rb;for(e=new olb(a.e.b);e.a1?(a.e*=Edb(a.a)):(a.f/=Edb(a.a));DOb(a);EOb(a);AOb(a);yNb(a.b,(CPb(),uPb),a.g)} +function Y5b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new olb(a);f.a=0){if(!b){b=new Ifb;d>0&&Efb(b,a.substr(0,d))}b.a+='\\';Afb(b,c&aje)}else !!b&&Afb(b,c&aje)}return b?b.a:a} +function l5c(a){var b;if(!a.a){throw vbb(new Zdb('IDataType class expected for layout option '+a.f))}b=gvd(a.a);if(b==null){throw vbb(new Zdb("Couldn't create new instance of property '"+a.f+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return BD(b,414)} +function aid(a){var b,c,d,e,f;f=a.eh();if(f){if(f.kh()){e=xid(a,f);if(e!=f){c=a.Vg();d=(b=a.Vg(),b>=0?a.Qg(null):a.eh().ih(a,-1-b,null,null));a.Rg(BD(e,49),c);!!d&&d.Fi();a.Lg()&&a.Mg()&&c>-1&&Uhd(a,new nSd(a,9,c,f,e));return e}}}return f} +function nTb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Mgb(a);if(e>16)),15).Xc(f);if(h0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} +function N3b(a){var b,c,d,e,f;e=new Rkb;f=O3b(a,e);b=BD(vNb(a,(wtc(),gtc)),10);if(b){for(d=new olb(b.j);d.a>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?Fje:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?Fje:0;f=d?Eje:0;e=c>>b-44}return TC(e&Eje,f&Eje,g&Fje)} +function XOb(a){var b,c,d,e,f,g;this.c=new Rkb;this.d=a;d=Pje;e=Pje;b=Qje;c=Qje;for(g=Jsb(a,0);g.b!=g.d.c;){f=BD(Xsb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new J6c(d,e,b-d,c-e)} +function Dac(a,b){var c,d,e,f,g,h;for(f=new olb(a.b);f.a0&&JD(b,42)){a.a.qj();j=BD(b,42);i=j.cd();f=i==null?0:tb(i);g=DAd(a.a,f);c=a.a.d[g];if(c){d=BD(c.g,367);k=c.i;for(h=0;h=2){c=e.Kc();b=ED(c.Pb());while(c.Ob()){f=b;b=ED(c.Pb());d=$wnd.Math.min(d,(uCb(b),b)-(uCb(f),f))}}return d} +function gUc(a,b){var c,d,e,f,g;d=new Psb;Gsb(d,b,d.c.b,d.c);do{c=(sCb(d.b!=0),BD(Nsb(d,d.a.a),86));a.b[c.g]=1;for(f=Jsb(c.d,0);f.b!=f.d.c;){e=BD(Xsb(f),188);g=e.c;a.b[g.g]==1?Dsb(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Gsb(d,g,d.c.b,d.c)}}while(d.b!=0)} +function Ju(a,b){var c,d,e;if(PD(b)===PD(Qb(a))){return true}if(!JD(b,15)){return false}d=BD(b,15);e=a.gc();if(e!=d.gc()){return false}if(JD(d,54)){for(c=0;c0&&(e=c);for(g=new olb(a.f.e);g.a0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new vgd(meb(b),meb(c))} +function PIc(a,b){if(a.cb.c){return 1}else if(a.bb.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(UIc(),TIc)&&b.d==SIc){return -1}else if(a.d==SIc&&b.d==TIc){return 1}return 0} +function aNc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=NLc(a.a,g,d);if(e>0&&e0}else if(e<0&&-e0}return false} +function RZc(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new olb(a.c);l.a>24}return g} +function vdb(a){if(a.pe()){var b=a.c;b.qe()?(a.o='['+b.n):!b.pe()?(a.o='[L'+b.ne()+';'):(a.o='['+b.ne());a.b=b.me()+'[]';a.k=b.oe()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=ydb('.',[c,ydb('$',d)]);a.b=ydb('.',[c,ydb('.',d)]);a.k=d[d.length-1]} +function qGb(a,b){var c,d,e,f,g;g=null;for(f=new olb(a.e.a);f.a=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} +function UUb(a,b){var c,d,e,f,g,h,i,j;g=b==1?KUb:JUb;for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),103);for(i=BD(Qc(a.f.c,e),21).Kc();i.Ob();){h=BD(i.Pb(),46);d=BD(h.b,81);j=BD(h.a,189);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} +function PFc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h0&&++k}}++j}return k} +function Eid(a){var b,c;c=new Wfb(hdb(a.gm));c.a+='@';Qfb(c,(b=tb(a)>>>0,b.toString(16)));if(a.kh()){c.a+=' (eProxyURI: ';Pfb(c,a.qh());if(a.$g()){c.a+=' eClass: ';Pfb(c,a.$g())}c.a+=')'}else if(a.$g()){c.a+=' (eClass: ';Pfb(c,a.$g());c.a+=')'}return c.a} +function TDb(a){var b,c,d,e;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}a.d==(ead(),cad)&&SDb(a,aad);for(c=new olb(a.a.a);c.a>24}return c} +function lKb(a,b,c){var d,e,f;e=BD(Mpb(a.i,b),306);if(!e){e=new bIb(a.d,b,c);Npb(a.i,b,e);if(sJb(b)){CHb(a.a,b.c,b.b,e)}else{f=rJb(b);d=BD(Mpb(a.p,f),244);switch(f.g){case 1:case 3:e.j=true;lIb(d,b.b,e);break;case 4:case 2:e.k=true;lIb(d,b.c,e);}}}return e} +function r3d(a,b,c,d){var e,f,g,h,i,j;h=new yud;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g=0){return e}else{f=1;for(h=new olb(b.j);h.a0&&b.ue((tCb(e-1,a.c.length),BD(a.c[e-1],10)),f)>0){Nkb(a,e,(tCb(e-1,a.c.length),BD(a.c[e-1],10)));--e}tCb(e,a.c.length);a.c[e]=f}c.a=new Lqb;c.b=new Lqb} +function n5c(a,b,c){var d,e,f,g,h,i,j,k;k=(d=BD(b.e&&b.e(),9),new xqb(d,BD(_Bb(d,d.length),9),0));i=mfb(c,'[\\[\\]\\s,]+');for(f=i,g=0,h=f.length;g0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} +function Hac(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(Ucd(),Acd)||b==zcd){xac(BD(bkb(a),15),(rbd(),nbd));xac(BD(bkb(a),15),obd)}else{xac(BD(bkb(a),15),(rbd(),obd));xac(BD(bkb(a),15),nbd)}}else{for(e=new xkb(a);e.a!=e.b;){d=BD(vkb(e),15);xac(d,c)}}} +function htd(a,b){var c,d,e,f,g,h,i;e=Nu(new qtd(a));h=new Bib(e,e.c.length);f=Nu(new qtd(b));i=new Bib(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sCb(h.b>0),BD(h.a.Xb(h.c=--h.b),33));d=(sCb(i.b>0),BD(i.a.Xb(i.c=--i.b),33));if(c==d){g=c}else{break}}return g} +function Cub(a,b){var c,d,e,f,g,h;f=a.a*kke+a.b*1502;h=a.b*kke+11;c=$wnd.Math.floor(h*lke);f+=c;h-=c*mke;f%=mke;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*wub[b])}else{e=a.a*(1<=2147483648&&(d-=Zje);return d}} +function Zic(a,b,c){var d,e,f,g;if(bjc(a,b)>bjc(a,c)){d=V_b(c,(Ucd(),zcd));a.d=d.dc()?0:B0b(BD(d.Xb(0),11));g=V_b(b,Tcd);a.b=g.dc()?0:B0b(BD(g.Xb(0),11))}else{e=V_b(c,(Ucd(),Tcd));a.d=e.dc()?0:B0b(BD(e.Xb(0),11));f=V_b(b,zcd);a.b=f.dc()?0:B0b(BD(f.Xb(0),11))}} +function l6d(a){var b,c,d,e,f,g,h;if(a){b=a.Hh(_ve);if(b){g=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'conversionDelegates'));if(g!=null){h=new Rkb;for(d=mfb(g,'\\w+'),e=0,f=d.length;ea.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=NOc(a,b,f,h);i=$Oc((tCb(d,b.c.length),BD(b.c[d],329)));YOc(b,d,c)}return i} +function lZc(){lZc=ccb;RYc=new Osd((Y9c(),r8c),1.3);VYc=I8c;gZc=new q0b(15);fZc=new Osd(f9c,gZc);jZc=new Osd(T9c,15);SYc=w8c;_Yc=Y8c;aZc=_8c;bZc=b9c;$Yc=W8c;cZc=e9c;hZc=x9c;eZc=(OYc(),KYc);ZYc=IYc;dZc=JYc;iZc=MYc;WYc=HYc;XYc=O8c;YYc=P8c;UYc=GYc;TYc=FYc;kZc=NYc} +function Bnd(a,b,c){var d,e,f,g,h,i,j;g=(f=new RHd,f);PHd(g,(uCb(b),b));j=(!g.b&&(g.b=new sId((jGd(),fGd),x6,g)),g.b);for(i=1;i0&&JPb(this,e)}} +function IQb(a,b,c,d,e,f){var g,h,i;if(!e[b.b]){e[b.b]=true;g=d;!g&&(g=new kRb);Ekb(g.e,b);for(i=f[b.b].Kc();i.Ob();){h=BD(i.Pb(),282);if(h.d==c||h.c==c){continue}h.c!=b&&IQb(a,h.c,b,g,e,f);h.d!=b&&IQb(a,h.d,b,g,e,f);Ekb(g.c,h);Gkb(g.d,h.b)}return g}return null} +function e4b(a){var b,c,d,e,f,g,h;b=0;for(e=new olb(a.e);e.a=2} +function gec(a,b){var c,d,e,f;Odd(b,'Self-Loop pre-processing',1);for(d=new olb(a.a);d.a1){return false}b=qqb(zbd,OC(GC(B1,1),Kie,93,0,[ybd,Bbd]));if(Ox(Cx(b,a))>1){return false}d=qqb(Gbd,OC(GC(B1,1),Kie,93,0,[Fbd,Ebd]));if(Ox(Cx(d,a))>1){return false}return true} +function U0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'affiliation'));if(e!=null){d=kfb(e,wfb(35));return d==-1?l1d(a,u1d(a,bKd(b.Hj())),e):d==0?l1d(a,null,e.substr(1)):l1d(a,e.substr(0,d),e.substr(d+1))}}return null} +function ic(b){var c,d,e;try{return b==null?Xhe:fcb(b)}catch(a){a=ubb(a);if(JD(a,102)){c=a;e=hdb(rb(b))+'@'+(d=(Zfb(),kCb(b))>>>0,d.toString(16));tyb(xyb(),($xb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+hdb(c.gm)+'>'}else throw vbb(a)}} +function mzc(a){switch(a.g){case 0:return new xDc;case 1:return new ZCc;case 2:return new DCc;case 3:return new QCc;case 4:return new LDc;case 5:return new iDc;default:throw vbb(new Wdb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} +function AQc(a,b,c){var d,e,f;for(f=new olb(a.t);f.a0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Dsb(b,d.b)}}for(e=new olb(a.i);e.a0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Dsb(c,d.a)}}} +function Vud(a){var b,c,d,e,f;if(a.g==null){a.d=a.si(a.f);wtd(a,a.d);if(a.c){f=a.f;return f}}b=BD(a.g[a.i-1],47);e=b.Pb();a.e=b;c=a.si(e);if(c.Ob()){a.d=c;wtd(a,c)}else{a.d=null;while(!b.Ob()){NC(a.g,--a.i,null);if(a.i==0){break}d=BD(a.g[a.i-1],47);b=d}}return e} +function r2d(a,b){var c,d,e,f,g,h;d=b;e=d.ak();if(T6d(a.e,e)){if(e.hi()&&E2d(a,e,d.dd())){return false}}else{h=S6d(a.e.Tg(),e);c=BD(a.g,119);for(f=0;f1||c>1){return 2}}if(b+c==1){return 2}return 0} +function WQb(a,b,c){var d,e,f,g,h;Odd(c,'ELK Force',1);Ccb(DD(hkd(b,(wSb(),jSb))))||$Cb((d=new _Cb((Pgd(),new bhd(b))),d));h=TQb(b);XQb(h);YQb(a,BD(vNb(h,fSb),424));g=LQb(a.a,h);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),231);tRb(a.b,e,Udd(c,1/g.gc()))}h=KQb(g);SQb(h);Qdd(c)} +function yoc(a,b){var c,d,e,f,g;Odd(b,'Breaking Point Processor',1);xoc(a);if(Ccb(DD(vNb(a,(Nyc(),Jyc))))){for(e=new olb(a.b);e.a=0?a._g(d,true,true):sid(a,f,true),153));BD(e,215).ml(b,c)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} +function ROc(a,b){var c,d,e,f,g;c=new Rkb;e=LAb(new YAb(null,new Kub(a,16)),new iPc);f=LAb(new YAb(null,new Kub(a,16)),new kPc);g=aAb(_zb(OAb(ty(OC(GC(xM,1),Uhe,833,0,[e,f])),new mPc)));for(d=1;d=2*b&&Ekb(c,new bPc(g[d-1]+b,g[d]-b))}return c} +function AXc(a,b,c){Odd(c,'Eades radial',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));a.d=BD(hkd(b,(MUc(),LUc)),33);a.c=Edb(ED(hkd(b,(ZWc(),VWc))));a.e=tXc(BD(hkd(b,WWc),293));a.a=gWc(BD(hkd(b,YWc),426));a.b=jXc(BD(hkd(b,RWc),340));BXc(a);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} +function Fqd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&(i=null,j=Uqd(a,(k=(Fhd(),l=new ppd,l),!!b&&npd(k,b),k),e),Lkd(j,_pd(e,Vte)),grd(e,j),hrd(e,j),crd(a,e,j))}}} +function UKd(a){var b,c,d,e,f,g;if(!a.j){g=new HPd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);e=UKd(c);ytd(g,e);wtd(g,c)}b.a.Bc(a)!=null}vud(g);a.j=new nNd((BD(qud(ZKd((NFd(),MFd).o),11),18),g.i),g.g);$Kd(a).b&=-33}return a.j} +function O9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return z9d}else if(b==45){return y9d}}else if(c==3){return z9d}}return new Odb(d)}} +function _C(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ieb(c)}if(b==0&&d!=0&&c==0){return ieb(d)+22}if(b!=0&&d==0&&c==0){return ieb(b)+44}return -1} +function qbc(a,b){var c,d,e,f,g;Odd(b,'Edge joining',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));for(e=new olb(a.b);e.a1){for(e=new olb(a.a);e.a0);f.a.Xb(f.c=--f.b);Aib(f,e);sCb(f.b3&&EA(a,0,b-3)}} +function cUb(a){var b,c,d,e;if(PD(vNb(a,(Nyc(),axc)))===PD((hbd(),ebd))){return !a.e&&PD(vNb(a,Cwc))!==PD((Xrc(),Urc))}d=BD(vNb(a,Dwc),292);e=Ccb(DD(vNb(a,Hwc)))||PD(vNb(a,Iwc))===PD((Rpc(),Opc));b=BD(vNb(a,Bwc),19).a;c=a.a.c.length;return !e&&d!=(Xrc(),Urc)&&(b==0||b>c)} +function lkc(a){var b,c;c=0;for(;c0){break}}if(c>0&&c0){break}}if(b>0&&c>16!=6&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+qmd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cmd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,6,d));d=bmd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,6,b,b))} +function npd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+opd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?lpd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,9,d));d=kpd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,9,b,b))} +function Rld(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Sld(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Lld(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,12,d));d=Kld(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function VId(b){var c,d,e,f,g;e=wId(b);g=b.j;if(g==null&&!!e){return b.$j()?null:e.zj()}else if(JD(e,148)){d=e.Aj();if(d){f=d.Nh();if(f!=b.i){c=BD(e,148);if(c.Ej()){try{b.g=f.Kh(c,g)}catch(a){a=ubb(a);if(JD(a,78)){b.g=null}else throw vbb(a)}}b.i=f}}return b.g}return null} +function wOb(a){var b;b=new Rkb;Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c,a.d+a.a)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a)));return b} +function IJc(a,b,c,d){var e,f,g;g=LZb(b,c);d.c[d.c.length]=b;if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new Sr(ur(O_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!(!OZb(e)&&!(!OZb(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return IJc(a,e,g,d)}return d} +function vQb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),79);d=BD(Ohb(a.b,e),266);!d&&(Xod(jtd(e))==Xod(ltd(e))?uQb(a,e,c):jtd(e)==Xod(ltd(e))?Ohb(a.c,e)==null&&Ohb(a.b,ltd(e))!=null&&xQb(a,e,c,false):Ohb(a.d,e)==null&&Ohb(a.b,jtd(e))!=null&&xQb(a,e,c,true))}} +function jcc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),10);h=new H0b;F0b(h,d);G0b(h,(Ucd(),zcd));yNb(h,(wtc(),ftc),(Bcb(),true));for(g=b.Kc();g.Ob();){f=BD(g.Pb(),10);i=new H0b;F0b(i,f);G0b(i,Tcd);yNb(i,ftc,true);c=new UZb;yNb(c,ftc,true);QZb(c,h);RZb(c,i)}}} +function jnc(a,b,c,d){var e,f,g,h;e=hnc(a,b,c);f=hnc(a,c,b);g=BD(Ohb(a.c,b),112);h=BD(Ohb(a.c,c),112);if(ed.b.g&&(f.c[f.c.length]=d,true)}}return f} +function k$c(){k$c=ccb;g$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);f$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);i$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);h$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);j$c=new l$c('WHOLE_DRAWING',4)} +function Xqd(a,b){if(JD(b,239)){return iqd(a,BD(b,33))}else if(JD(b,186)){return jqd(a,BD(b,118))}else if(JD(b,354)){return hqd(a,BD(b,137))}else if(JD(b,352)){return gqd(a,BD(b,79))}else if(b){return null}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}} +function aic(a){var b,c,d,e,f,g,h;f=new Psb;for(e=new olb(a.d.a);e.a1){b=nGb((c=new pGb,++a.b,c),a.d);for(h=Jsb(f,0);h.b!=h.d.c;){g=BD(Xsb(h),121);AFb(DFb(CFb(EFb(BFb(new FFb,1),0),b),g))}}} +function $od(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+_od(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Uod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,10,d));d=Tod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,b,b))} +function uZb(a){var b,c,d,e;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);e=BD(c.cd(),11);b=BD(c.dd(),10);yNb(b,(wtc(),$sc),e);yNb(e,gtc,b);yNb(e,Nsc,(Bcb(),true));G0b(e,BD(vNb(b,Hsc),61));vNb(b,Hsc);yNb(e.i,(Nyc(),Vxc),(dcd(),acd));BD(vNb(Q_b(e.i),Ksc),21).Fc((Orc(),Krc))}} +function G4b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new olb(a.d.i.j);i.af.a){return -1}else if(e.ai){k=a.d;a.d=KC(y4,jve,63,2*i+4,0,1);for(f=0;f=9223372036854775807){return wD(),sD}e=false;if(a<0){e=true;a=-a}d=0;if(a>=Ije){d=QD(a/Ije);a-=d*Ije}c=0;if(a>=Hje){c=QD(a/Hje);a-=c*Hje}b=QD(a);f=TC(b,c,d);e&&ZC(f);return f} +function rKb(a,b){var c,d,e,f;c=!b||!a.u.Hc((rcd(),ncd));f=0;for(e=new olb(a.e.Cf());e.a=-b&&d==b){return new vgd(meb(c-1),meb(d))}return new vgd(meb(c),meb(d-1))} +function W8b(){S8b();return OC(GC(AS,1),Kie,77,0,[Y7b,V7b,Z7b,n8b,G8b,r8b,M8b,w8b,E8b,i8b,A8b,v8b,F8b,e8b,O8b,P7b,z8b,I8b,o8b,H8b,Q8b,C8b,Q7b,D8b,R8b,K8b,P8b,p8b,b8b,q8b,m8b,N8b,T7b,_7b,t8b,S7b,u8b,k8b,f8b,x8b,h8b,W7b,U7b,l8b,g8b,y8b,L8b,R7b,B8b,j8b,s8b,c8b,a8b,J8b,$7b,d8b,X7b])} +function Yic(a,b,c){a.d=0;a.b=0;b.k==(j0b(),i0b)&&c.k==i0b&&BD(vNb(b,(wtc(),$sc)),10)==BD(vNb(c,$sc),10)&&(ajc(b).j==(Ucd(),Acd)?Zic(a,b,c):Zic(a,c,b));b.k==i0b&&c.k==g0b?ajc(b).j==(Ucd(),Acd)?(a.d=1):(a.b=1):c.k==i0b&&b.k==g0b&&(ajc(c).j==(Ucd(),Acd)?(a.b=1):(a.d=1));cjc(a,b,c)} +function esd(a){var b,c,d,e,f,g,h,i,j,k,l;l=hsd(a);b=a.a;i=b!=null;i&&Upd(l,'category',a.a);e=Fhe(new Pib(a.d));g=!e;if(g){j=new wB;cC(l,'knownOptions',j);c=new msd(j);reb(new Pib(a.d),c)}f=Fhe(a.g);h=!f;if(h){k=new wB;cC(l,'supportedFeatures',k);d=new osd(k);reb(a.g,d)}return l} +function ty(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new Xp(a.length);for(h=a,i=0,j=h.length;i>16!=7&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Iod(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Eod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,1,C2,d));d=Dod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,b,b))} +function NHd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+QHd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?KHd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,0,k5,d));d=JHd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function Ehb(a,b){Dhb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Ihb(a,b)}g=(a.d&-2)<<4;j=Rgb(a,g);k=Rgb(b,g);d=yhb(a,Qgb(j,g));e=yhb(b,Qgb(k,g));i=Ehb(j,k);c=Ehb(d,e);f=Ehb(yhb(j,d),yhb(e,k));f=thb(thb(f,i),c);f=Qgb(f,g);i=Qgb(i,g<<1);return thb(thb(i,f),c)} +function aGc(a,b,c){var d,e,f,g,h;g=CHc(a,c);h=KC(OQ,kne,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);Ccb(DD(vNb(e,(wtc(),Nsc))))&&(h[d++]=BD(vNb(e,gtc),10))}if(d=0;f+=c?1:-1){g=g|b.c.Sf(i,f,c,d&&!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,(wtc(),mtc)))));g=g|b.q._f(i,f,c);g=g|cGc(a,i[f],c,d)}Qqb(a.c,b);return g} +function o3b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=m_b(a.j),l=0,m=k.length;l1&&(a.a=true);ZNb(BD(c.b,65),P6c(R6c(BD(b.b,65).c),Y6c(c7c(R6c(BD(c.b,65).a),BD(b.b,65).a),e)));D1c(a,b);F1c(a,c)}} +function rVb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}mmb();Okb(a.j,new fcc)} +function Vec(a){var b,c;c=null;b=BD(Ikb(a.g,0),17);do{c=b.d.i;if(wNb(c,(wtc(),Wsc))){return BD(vNb(c,Wsc),11).i}if(c.k!=(j0b(),h0b)&&Qr(new Sr(ur(U_b(c).a.Kc(),new Sq)))){b=BD(Rr(new Sr(ur(U_b(c).a.Kc(),new Sq))),17)}else if(c.k!=h0b){return null}}while(!!c&&c.k!=(j0b(),h0b));return c} +function Omc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=BD(Ikb(h,h.c.length-1),113);k=(tCb(0,h.c.length),BD(h.c[0],113));j=Kmc(a,g,i,k);for(f=1;fj){i=c;k=e;j=d}}b.a=k;b.c=i} +function sEb(a,b){var c,d;d=Axb(a.b,b.b);if(!d){throw vbb(new Zdb('Invalid hitboxes for scanline constraint calculation.'))}(mEb(b.b,BD(Cxb(a.b,b.b),57))||mEb(b.b,BD(Bxb(a.b,b.b),57)))&&(Zfb(),b.b+' has overlap.');a.a[b.b.f]=BD(Exb(a.b,b.b),57);c=BD(Dxb(a.b,b.b),57);!!c&&(a.a[c.f]=b.b)} +function AFb(a){if(!a.a.d||!a.a.e){throw vbb(new Zdb((fdb(fN),fN.k+' must have a source and target '+(fdb(jN),jN.k)+' specified.')))}if(a.a.d==a.a.e){throw vbb(new Zdb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}NFb(a.a.d.g,a.a);NFb(a.a.e.b,a.a);return a.a} +function HHc(a,b,c){var d,e,f,g,h,i,j;j=new Hxb(new tIc(a));for(g=OC(GC(aR,1),lne,11,0,[b,c]),h=0,i=g.length;hi-a.b&&hi-a.a&&h0&&++n}}}++m}return n} +function hUc(a,b){var c,d,e,f,g;g=BD(vNb(b,(JTc(),FTc)),425);for(f=Jsb(b.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);if(a.b[e.g]==0){switch(g.g){case 0:iUc(a,e);break;case 1:gUc(a,e);}a.b[e.g]=2}}for(d=Jsb(a.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);ze(c.b.d,c,true);ze(c.c.b,c,true)}yNb(b,(mTc(),gTc),a.a)} +function S6d(a,b){Q6d();var c,d,e,f;if(!b){return P6d}else if(b==(Q8d(),N8d)||(b==v8d||b==t8d||b==u8d)&&a!=s8d){return new Z6d(a,b)}else{d=BD(b,677);c=d.pk();if(!c){a2d(q1d((O6d(),M6d),b));c=d.pk()}f=(!c.i&&(c.i=new Lqb),c.i);e=BD(Wd(irb(f.f,a)),1942);!e&&Rhb(f,a,e=new Z6d(a,b));return e}} +function Tbc(a,b){var c,d,e,f,g,h,i,j,k;i=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=k_b(a.e);for(e=c,f=0,g=e.length;f0){if(f.a){h=f.b.rf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(tcd(a.u)){d=sfd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.rf().a&&(f.d.c=d.c+d.b-f.b.rf().a)}}} +function Eec(a,b){var c,d,e,f;Odd(b,'Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new olb(a.b);e.a=0){if(b==c){return new vgd(meb(-b-1),meb(-b-1))}if(b==-c){return new vgd(meb(-b),meb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new vgd(meb(-b),meb(c))}return new vgd(meb(-b),meb(c+1))}return new vgd(meb(b+1),meb(c))} +function q5b(a){var b,c;c=BD(vNb(a,(Nyc(),mxc)),163);b=BD(vNb(a,(wtc(),Osc)),303);if(c==(Ctc(),ytc)){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),dsc))}else if(c==Atc){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),bsc))}else if(b==(esc(),dsc)){yNb(a,mxc,ytc);yNb(a,Osc,csc)}else if(b==bsc){yNb(a,mxc,Atc);yNb(a,Osc,csc)}} +function FNc(){FNc=ccb;DNc=new RNc;zNc=e3c(new j3c,(qUb(),nUb),(S8b(),o8b));CNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);ENc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);ANc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);BNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function hQc(){hQc=ccb;cQc=e3c(c3c(new j3c,(qUb(),pUb),(S8b(),c8b)),nUb,o8b);gQc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);dQc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);fQc=e3c(e3c(new j3c,nUb,C8b),pUb,B8b);eQc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function GNc(a,b,c,d,e){var f,g;if((!OZb(b)&&b.c.i.c==b.d.i.c||!T6c(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])),c))&&!OZb(b)){b.c==e?St(b.a,0,new g7c(c)):Dsb(b.a,new g7c(c));if(d&&!Rqb(a.a,c)){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(c);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}}} +function Qac(a){var b,c;for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.c.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to FIRST, but has at least one incoming edge that "+' does not come from a FIRST_SEPARATE node. That must not happen.'))}}} +function vjd(a,b,c){var d,e,f,g,h,i,j;e=aeb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=KC(SI,Uhe,1,2,5,1);f=zjd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=KC(SI,Uhe,1,e+1,5,1);g=CD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b} +function ENb(a,b,c){var d,e,f,g;this.b=new Rkb;e=0;d=0;for(g=new olb(a);g.a0){f=BD(Ikb(this.b,0),167);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=QD($wnd.Math.ceil(e*b))):(d=QD($wnd.Math.ceil(d/b)));this.a=new pNb(e,d)} +function Igc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=BD(Ohb(a.f,b.A),57);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=BD(Ohb(a.f,c.C),57);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m=0;g+=e?1:-1){h=b[g];i=d==(Ucd(),zcd)?e?V_b(h,d):Su(V_b(h,d)):e?Su(V_b(h,d)):V_b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=BD(l.Pb(),11);a.d[k.p]=j++}Gkb(c,i)}} +function aQc(a,b,c){var d,e,f,g,h,i,j,k;f=Edb(ED(a.b.Kc().Pb()));j=Edb(ED(Pq(b.b)));d=Y6c(R6c(a.a),j-c);e=Y6c(R6c(b.a),c-f);k=P6c(d,e);Y6c(k,1/(j-f));this.a=k;this.b=new Rkb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Edb(ED(g.Pb()));if(h&&i-c>Oqe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)} +function vGb(a){var b,c,d,e;yGb(a,a.n);if(a.d.c.length>0){Blb(a.c);while(GGb(a,BD(mlb(new olb(a.e.a)),121))>5;b&=31;if(d>=a.d){return a.e<0?(Hgb(),Bgb):(Hgb(),Ggb)}f=a.d-d;e=KC(WD,oje,25,f+1,15,1);mhb(e,f,a.a,d,b);if(a.e<0){for(c=0;c0&&a.a[c]<<32-b!=0){for(c=0;c=0){return false}else{c=e1d((O6d(),M6d),e,b);if(!c){return true}else{d=c.Zj();return (d>1||d==-1)&&$1d(q1d(M6d,c))!=3}}}}else{return false}} +function R1b(a,b,c,d){var e,f,g,h,i;h=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));i=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));if(Xod(h)==Xod(i)){return null}if(ntd(i,h)){return null}g=Mld(b);if(g==c){return d}else{f=BD(Ohb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null} +function Cac(a,b){var c;c=BD(vNb(a,(Nyc(),Rwc)),276);Odd(b,'Label side selection ('+c+')',1);switch(c.g){case 0:Dac(a,(rbd(),nbd));break;case 1:Dac(a,(rbd(),obd));break;case 2:Bac(a,(rbd(),nbd));break;case 3:Bac(a,(rbd(),obd));break;case 4:Eac(a,(rbd(),nbd));break;case 5:Eac(a,(rbd(),obd));}Qdd(b)} +function bGc(a,b,c){var d,e,f,g,h,i;d=RFc(c,a.length);g=a[d];if(g[0].k!=(j0b(),e0b)){return}f=SFc(c,g.length);i=b.j;for(e=0;e0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);vHb(a,eHb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==eHb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} +function AYb(){this.c=KC(UD,Vje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);this.a=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);zlb(this.c,Pje);zlb(this.b,Qje);zlb(this.a,Qje)} +function Ufe(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=KC(WD,oje,25,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=KC(WD,oje,25,d+2,15,1);$fb(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||Yfe(a)}} +function inc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new Skb(j.c.length);a.c=new Lqb;for(h=new olb(j);h.a=0?a._g(j,false,true):sid(a,c,false),58));n:for(f=l.Kc();f.Ob();){e=BD(f.Pb(),56);for(k=0;k1){Xxd(e,e.i-1)}}return d}} +function Z2b(a,b){var c,d,e,f,g,h,i;Odd(b,'Comment post-processing',1);for(f=new olb(a.b);f.aa.d[g.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function o2c(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i==0||(f+=o2c(a,d,false))}if(c){g=Xod(b);while(g){f+=(!g.a&&(g.a=new cUd(E2,g,10,11)),g.a).i;g=Xod(g)}}return f} +function Xxd(a,b){var c,d,e,f;if(a.ej()){d=null;e=a.fj();a.ij()&&(d=a.kj(a.pi(b),null));c=a.Zi(4,f=tud(a,b),null,b,e);if(a.bj()&&f!=null){d=a.dj(f,d);if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}else{if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}return f}else{f=tud(a,b);if(a.bj()&&f!=null){d=a.dj(f,null);!!d&&d.Fi()}return f}} +function UKb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new Tqb;i=0;for(d=new olb(a.d);d.ah.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i} +function Orc(){Orc=ccb;Frc=new Prc('COMMENTS',0);Hrc=new Prc('EXTERNAL_PORTS',1);Irc=new Prc('HYPEREDGES',2);Jrc=new Prc('HYPERNODES',3);Krc=new Prc('NON_FREE_PORTS',4);Lrc=new Prc('NORTH_SOUTH_PORTS',5);Nrc=new Prc(Wne,6);Erc=new Prc('CENTER_LABELS',7);Grc=new Prc('END_LABELS',8);Mrc=new Prc('PARTITIONS',9)} +function gVc(a){var b,c,d,e,f;e=new Rkb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(d=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){f=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));b.a._b(f)||(e.c[e.c.length]=f,true)}}return e} +function fVc(a){var b,c,d,e,f,g;f=new Tqb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(e=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!JD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),186)){g=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f} +function zA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function BA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function DA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=bfb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=rA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new eB;j=i.q.getFullYear()-nje+nje-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l} +function ode(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=Xee(a.i));a.j=a.i.length;nde(a);f=rde(a);if(a.d!=a.j)throw vbb(new mde(tvd((h0d(),sue))));if(a.g){for(d=0;dvre?Okb(i,a.b):d<=vre&&d>wre?Okb(i,a.d):d<=wre&&d>xre?Okb(i,a.c):d<=xre&&Okb(i,a.a);f=ZXc(a,i,f)}return e} +function Hgb(){Hgb=ccb;var a;Cgb=new Ugb(1,1);Egb=new Ugb(1,10);Ggb=new Ugb(0,0);Bgb=new Ugb(-1,1);Dgb=OC(GC(cJ,1),nie,91,0,[Ggb,Cgb,new Ugb(1,2),new Ugb(1,3),new Ugb(1,4),new Ugb(1,5),new Ugb(1,6),new Ugb(1,7),new Ugb(1,8),new Ugb(1,9),Egb]);Fgb=KC(cJ,nie,91,32,0,1);for(a=0;a1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} +function jdd(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Rse),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new mdd)));p4c(a,Rse,ame,fdd);p4c(a,Rse,wme,15);p4c(a,Rse,yme,meb(0));p4c(a,Rse,_le,tme)} +function hde(){hde=ccb;var a,b,c,d,e,f;fde=KC(SD,wte,25,255,15,1);gde=KC(TD,$ie,25,16,15,1);for(b=0;b<255;b++){fde[b]=-1}for(c=57;c>=48;c--){fde[c]=c-48<<24>>24}for(d=70;d>=65;d--){fde[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){fde[e]=e-97+10<<24>>24}for(f=0;f<10;f++)gde[f]=48+f&aje;for(a=10;a<=15;a++)gde[a]=65+a-10&aje} +function BVc(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g/2;g=c.g+a.g/2;d=b.f+a.g/2;e=c.f+a.g/2;if(h>19!=0){return '-'+qD(hD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=RC(Jje);c=UC(c,e,true);b=''+pD(QC);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} +function xrb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function Pgc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new olb(a.d.b);e.a=a.a){return -1}if(!F6b(b,c)){return -1}if(Qq(BD(d.Kb(b),20))){return 1}e=0;for(g=BD(d.Kb(b),20).Kc();g.Ob();){f=BD(g.Pb(),17);i=f.c.i==b?f.d.i:f.c.i;h=G6b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1} +function Btd(a,b){var c,d,e,f,g,h;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}d=BD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.ni()){for(c=0;c0){a.qj();if(b!=null){for(f=0;f>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw vbb(new Oeb('Invalid hexadecimal'))}}} +function AUc(a,b,c){var d,e,f,g;Odd(c,'Processor order nodes',2);a.a=Edb(ED(vNb(b,(JTc(),HTc))));e=new Psb;for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(Gsb(e,f,e.c.b,e.c),true)}d=(sCb(e.b!=0),BD(e.a.a.c,86));yUc(a,d);!c.b&&Rdd(c,1);BUc(a,d,0-Edb(ED(vNb(d,(mTc(),bTc))))/2,0);!c.b&&Rdd(c,1);Qdd(c)} +function rFb(){rFb=ccb;qFb=new sFb('SPIRAL',0);lFb=new sFb('LINE_BY_LINE',1);mFb=new sFb('MANHATTAN',2);kFb=new sFb('JITTER',3);oFb=new sFb('QUADRANTS_LINE_BY_LINE',4);pFb=new sFb('QUADRANTS_MANHATTAN',5);nFb=new sFb('QUADRANTS_JITTER',6);jFb=new sFb('COMBINE_LINE_BY_LINE_MANHATTAN',7);iFb=new sFb('COMBINE_JITTER_MANHATTAN',8)} +function roc(a,b,c,d){var e,f,g,h,i,j;i=woc(a,c);j=woc(b,c);e=false;while(!!i&&!!j){if(d||uoc(i,j,c)){g=woc(i,c);h=woc(j,c);zoc(b);zoc(a);f=i.c;sbc(i,false);sbc(j,false);if(c){Z_b(b,j.p,f);b.p=j.p;Z_b(a,i.p+1,f);a.p=i.p}else{Z_b(a,i.p,f);a.p=i.p;Z_b(b,j.p+1,f);b.p=j.p}$_b(i,null);$_b(j,null);i=g;j=h;e=true}else{break}}return e} +function VDc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new olb(d.j);h.a=b.length){throw vbb(new qcb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new dIc(d);THc(this.e,this.c,(Ucd(),Tcd));this.i=new dIc(d);THc(this.i,this.c,zcd);this.f=new ejc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(j0b(),e0b);this.a&&hjc(this,a,b.length)} +function hKb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((Idd(),zdd));g=a.B.Hc(Cdd);a.a=new FHb(g,f,a.c);!!a.n&&u_b(a.a.n,a.n);lIb(a.g,(gHb(),eHb),a.a);if(!b){d=new mIb(1,f,a.c);d.n.a=a.k;Npb(a.p,(Ucd(),Acd),d);e=new mIb(1,f,a.c);e.n.d=a.k;Npb(a.p,Rcd,e);h=new mIb(0,f,a.c);h.n.c=a.k;Npb(a.p,Tcd,h);c=new mIb(0,f,a.c);c.n.b=a.k;Npb(a.p,zcd,c)}} +function Vgc(a){var b,c,d;b=BD(vNb(a.d,(Nyc(),Swc)),218);switch(b.g){case 2:c=Ngc(a);break;case 3:c=(d=new Rkb,MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Shc),new Uhc),new Whc),new ehc),new Yhc(d)),d);break;default:throw vbb(new Zdb('Compaction not supported for '+b+' edges.'));}Ugc(a,c);reb(new Pib(a.g),new Ehc(a))} +function a2c(a,b){var c;c=new zNb;!!b&&tNb(c,BD(Ohb(a.a,C2),94));JD(b,470)&&tNb(c,BD(Ohb(a.a,G2),94));if(JD(b,354)){tNb(c,BD(Ohb(a.a,D2),94));return c}JD(b,82)&&tNb(c,BD(Ohb(a.a,z2),94));if(JD(b,239)){tNb(c,BD(Ohb(a.a,E2),94));return c}if(JD(b,186)){tNb(c,BD(Ohb(a.a,F2),94));return c}JD(b,352)&&tNb(c,BD(Ohb(a.a,B2),94));return c} +function wSb(){wSb=ccb;oSb=new Osd((Y9c(),D9c),meb(1));uSb=new Osd(T9c,80);tSb=new Osd(M9c,5);bSb=new Osd(r8c,tme);pSb=new Osd(E9c,meb(1));sSb=new Osd(H9c,(Bcb(),true));lSb=new q0b(50);kSb=new Osd(f9c,lSb);dSb=O8c;mSb=t9c;cSb=new Osd(B8c,false);jSb=e9c;iSb=b9c;hSb=Y8c;gSb=W8c;nSb=x9c;fSb=(SRb(),LRb);vSb=QRb;eSb=KRb;qSb=NRb;rSb=PRb} +function ZXb(a){var b,c,d,e,f,g,h,i;i=new jYb;for(h=new olb(a.a);h.a0&&b=0){return false}else{b.p=c.b;Ekb(c.e,b)}if(e==(j0b(),g0b)||e==i0b){for(g=new olb(b.j);g.a1||g==-1)&&(f|=16);(e.Bb&ote)!=0&&(f|=64)}(c.Bb&Tje)!=0&&(f|=Dve);f|=zte}else{if(JD(b,457)){f|=512}else{d=b.Bj();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} +function hc(a,b){var c,d,e,f,g;a=a==null?Xhe:(uCb(a),a);for(e=0;ea.d[h.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}else{++g}}c+=a.b.d*g;while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function Y6d(a,b){var c;if(a.f==W6d){c=$1d(q1d((O6d(),M6d),b));return a.e?c==4&&b!=(m8d(),k8d)&&b!=(m8d(),h8d)&&b!=(m8d(),i8d)&&b!=(m8d(),j8d):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(_1d(q1d((O6d(),M6d),b)))||a.d.Hc(e1d((O6d(),M6d),a.b,b)))){return true}if(a.f){if(x1d((O6d(),a.f),b2d(q1d(M6d,b)))){c=$1d(q1d(M6d,b));return a.e?c==4:c==2}}return false} +function iVc(a,b,c,d){var e,f,g,h,i,j,k,l;g=BD(hkd(c,(Y9c(),C9c)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dre);e+=b;e>dre&&(e-=dre);h=BD(hkd(d,C9c),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dre);f+=b;f>dre&&(f-=dre);return Iy(),My(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:ef?1:Ny(isNaN(e),isNaN(f))} +function YDb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a=b.o){throw vbb(new rcb)}i=c>>5;h=c&31;g=Nbb(1,Tbb(Nbb(h,1)));f?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)));g=Nbb(g,1);e?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)))}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function BUc(a,b,c,d){var e,f,g;if(b){f=Edb(ED(vNb(b,(mTc(),fTc))))+d;g=c+Edb(ED(vNb(b,bTc)))/2;yNb(b,kTc,meb(Tbb(Cbb($wnd.Math.round(f)))));yNb(b,lTc,meb(Tbb(Cbb($wnd.Math.round(g)))));b.d.b==0||BUc(a,BD(pr((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86),c+Edb(ED(vNb(b,bTc)))+a.a,d+Edb(ED(vNb(b,cTc))));vNb(b,iTc)!=null&&BUc(a,BD(vNb(b,iTc),86),c,d)}} +function N9b(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Q_b(b.a);e=Edb(ED(vNb(i,(Nyc(),pyc))))*2;k=Edb(ED(vNb(i,wyc)));j=$wnd.Math.max(e,k);f=KC(UD,Vje,25,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=BD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new olb(b.e);m.a0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function opd(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(fte);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function h4c(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=BD(Phb(a.a,b),149);if(!e){for(d=(h=(new $ib(a.b)).a.vc().Kc(),new djb(h));d.a.Ob();){c=(f=BD(d.a.Pb(),42),BD(f.dd(),149));g=c.c;i=b.length;if(dfb(g.substr(g.length-i,i),b)&&(b.length==g.length||bfb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&Shb(a.a,b,e)}return e} +function QLb(a,b){var c,d,e,f;c=new VLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();if(ee.p){G0b(f,Rcd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==Rcd&&e.p>a.p){G0b(f,Acd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e} +function NOc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} +function Nid(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=XKd(b.Tg(),-1-c);if(JD(d,99)){return BD(d,18)}else{g=BD(b.ah(d),153);for(h=0,i=g.gc();h0){e=i.length;while(e>0&&i[e-1]==''){--e}e=40;g&&FGb(a);wGb(a);vGb(a);c=zGb(a);d=0;while(!!c&&d0&&Dsb(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Dsb(a.e,f)}}}}} +function _Kb(a){var b,c,d,e,f,g,h,i,j;h=new Hxb(BD(Qb(new nLb),62));j=Qje;for(c=new olb(a.d);c.a=0&&ic?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.rl(f.ak());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=BD(Wxd(a,b,c),72);h!=i&&GLd(a,new ESd(a.e,7,g,meb(h),n.dd(),i));return m}}}else{return BD(sud(a,b,c),72)}return BD(Wxd(a,b,c),72)} +function Qcc(a,b){var c,d,e,f,g,h,i;Odd(b,'Port order processing',1);i=BD(vNb(a,(Nyc(),_xc)),421);for(d=new olb(a.b);d.a=0){h=bD(a,g);if(h){j<22?(i.l|=1<>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&ZC(i);if(f){if(d){QC=hD(a);e&&(QC=nD(QC,(wD(),uD)))}else{QC=TC(a.l,a.m,a.h)}}return i} +function TDc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new olb(a.a);h.a0&&(BCb(0,a.length),a.charCodeAt(0)==45||(BCb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;dc){throw vbb(new Oeb(Oje+a+'"'))}return h} +function dnc(a){var b,c,d,e,f,g,h;g=new Psb;for(f=new olb(a.a);f.a1)&&b==1&&BD(a.a[a.b],10).k==(j0b(),f0b)){zac(BD(a.a[a.b],10),(rbd(),nbd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.c-1&a.a.length-1],10).k==(j0b(),f0b)){zac(BD(a.a[a.c-1&a.a.length-1],10),(rbd(),obd))}else if((a.c-a.b&a.a.length-1)==2){zac(BD(bkb(a),10),(rbd(),nbd));zac(BD(bkb(a),10),obd)}else{wac(a,e)}Yjb(a)} +function pRc(a,b,c){var d,e,f,g,h;f=0;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);g='';(!d.n&&(d.n=new cUd(D2,d,1,7)),d.n).i==0||(g=BD(qud((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n),0),137).a);h=new XRc(f++,b,g);tNb(h,d);yNb(h,(mTc(),dTc),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Dsb(b.b,h);jrb(c.f,d,h)}} +function B2b(a){var b,c,d,e,f;d=BD(vNb(a,(wtc(),$sc)),33);f=BD(hkd(d,(Nyc(),Fxc)),174).Hc((tdd(),sdd));if(!a.e){e=BD(vNb(a,Ksc),21);b=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((Orc(),Hrc))){jkd(d,Vxc,(dcd(),$bd));Afd(d,b.a,b.b,false,true)}else{Ccb(DD(hkd(d,Gxc)))||Afd(d,b.a,b.b,true,true)}}f?jkd(d,Fxc,pqb(sdd)):jkd(d,Fxc,(c=BD(gdb(I1),9),new xqb(c,BD(_Bb(c,c.length),9),0)))} +function tA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(bfb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}if(b[0]=0&&h!=c){f=new nSd(a,1,h,g,null);!d?(d=f):d.Ei(f)}if(c>=0){f=new nSd(a,1,c,h==c?g:null,b);!d?(d=f):d.Ei(f)}}return d} +function LEd(a){var b,c,d;if(a.b==null){d=new Hfb;if(a.i!=null){Efb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){YEd(a.i)||(d.a+='//',d);Efb(d,a.a)}if(a.d!=null){d.a+='/';Efb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;bm){return false}l=(i=MZc(d,m,false),i.a);if(k+h+l<=b.b){KZc(c,f-c.s);c.c=true;KZc(d,f-c.s);OZc(d,c.s,c.t+c.d+h);d.k=true;WZc(c.q,d);n=true;if(e){s$c(b,d);d.j=b;if(a.c.length>g){v$c((tCb(g,a.c.length),BD(a.c[g],200)),d);(tCb(g,a.c.length),BD(a.c[g],200)).a.c.length==0&&Kkb(a,g)}}}return n} +function kcc(a,b){var c,d,e,f,g,h;Odd(b,'Partition midprocessing',1);e=new Hp;MAb(JAb(new YAb(null,new Kub(a.a,16)),new occ),new qcc(e));if(e.d==0){return}h=BD(GAb(UAb((f=e.i,new YAb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=h.Kc();c=BD(d.Pb(),19);while(d.Ob()){g=BD(d.Pb(),19);jcc(BD(Qc(e,c),21),BD(Qc(e,g),21));c=g}Qdd(b)} +function DYb(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new Rkb;f=(d=BD(gdb(F1),9),new xqb(d,BD(_Bb(d,d.length),9),0));g=new vgd(e,f)}BD(g.a,15).Fc(b);b.k==(j0b(),e0b)&&BD(g.b,21).Fc(BD(vNb(b,(wtc(),Hsc)),61));for(i=new olb(b.j);i.a0){e=BD(a.Ab.g,1934);if(b==null){for(f=0;f1){for(d=new olb(e);d.ac.s&&hh){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.c.i,c))}mmb();Okb(k,a.c);Dkb(a.b,i.p,k)}}} +function MMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.ah){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.d.i,c))}mmb();Okb(k,a.c);Dkb(a.f,i.p,k)}}} +function Y7c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,qse),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new _7c)));p4c(a,qse,ame,U7c);p4c(a,qse,wme,15);p4c(a,qse,vme,meb(0));p4c(a,qse,Jre,Ksd(O7c));p4c(a,qse,Fme,Ksd(Q7c));p4c(a,qse,Eme,Ksd(S7c));p4c(a,qse,_le,pse);p4c(a,qse,Ame,Ksd(P7c));p4c(a,qse,Tme,Ksd(R7c));p4c(a,qse,rse,Ksd(M7c));p4c(a,qse,lqe,Ksd(N7c))} +function W$b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return Ucd(),Scd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return Ucd(),Tcd}else if(j+h>g){return Ucd(),zcd}break;case 4:case 3:if(k<0){return Ucd(),Acd}else if(k+c>f){return Ucd(),Rcd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(Ucd(),Tcd):i+d>=1&&i-d>=0?(Ucd(),zcd):d<0.5?(Ucd(),Acd):(Ucd(),Rcd)} +function pJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Edb(ED(vNb(b,(Nyc(),vyc))));o=Qie*k;for(e=new olb(b.b);e.ai+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c} +function VGb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new I6c;for(j=b.Kc();j.Ob();){h=BD(j.Pb(),839);for(l=new olb(h.wf());l.a0){if(h.a){j=h.b.rf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=BD(Ikb(h.c.d,0),181).rf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(tcd(a.u)){f=sfd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.rf().b&&(h.d.a=f.d+f.a-h.b.rf().b)}}} +function FC(a,b){var c;switch(HC(a)){case 6:return ND(b);case 7:return LD(b);case 8:return KD(b);case 3:return Array.isArray(b)&&(c=HC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===Nhe;case 12:return b!=null&&(typeof b===Jhe||typeof b==Nhe);case 0:return AD(b,a.__elementTypeId$);case 2:return OD(b)&&!(b.im===gcb);case 1:return OD(b)&&!(b.im===gcb)||AD(b,a.__elementTypeId$);default:return true;}} +function xOb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1} +function mgb(a,b){var c,d,e,f,g,h;e=pgb(a);h=pgb(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.fb.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*Xje)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*Xje)+1);if(c>d+1){return e}else if(c0&&(g=Ogb(g,Khb(d)));return Igb(f,g)}}else return e0&&a.d!=(yTb(),xTb)&&(h+=g*(d.d.a+a.a[b.b][d.b]*(b.d.a-d.d.a)/c));c>0&&a.d!=(yTb(),vTb)&&(i+=g*(d.d.b+a.a[b.b][d.b]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new f7c(h/f,b.d.b);case 2:return new f7c(b.d.a,i/f);default:return new f7c(h/f,i/f);}} +function Wcc(a,b){Occ();var c,d,e,f,g;g=BD(vNb(a.i,(Nyc(),Vxc)),98);f=a.j.g-b.j.g;if(f!=0||!(g==(dcd(),Zbd)||g==_bd||g==$bd)){return 0}if(g==(dcd(),Zbd)){c=BD(vNb(a,Wxc),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}} +function tfd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new xMd(y2,a,5)),a.a).i+2;g=new Skb(c);Ekb(g,new f7c(a.j,a.k));MAb(new YAb(null,(!a.a&&(a.a=new xMd(y2,a,5)),new Kub(a.a,16))),new Qfd(g));Ekb(g,new f7c(a.b,a.c));b=1;while(b0){jEb(i,false,(ead(),aad));jEb(i,true,bad)}Hkb(b.g,new $hc(a,c));Rhb(a.g,b,c)} +function Neb(){Neb=ccb;var a;Jeb=OC(GC(WD,1),oje,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]);Keb=KC(WD,oje,25,37,15,1);Leb=OC(GC(WD,1),oje,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]);Meb=KC(XD,Sje,25,37,14,1);for(a=2;a<=36;a++){Keb[a]=QD($wnd.Math.pow(a,Jeb[a]));Meb[a]=Abb(rie,Keb[a])}} +function pfd(a){var b;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}b=new s7c;!!btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)),false));!!btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)),true));return b} +function _Mc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(YLc(),XLc)?R_b(b.b):U_b(b.b)):(e=a.a.c==(YLc(),WLc)?R_b(b.b):U_b(b.b));f=false;for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=Ccb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!OZb(c)&&c.c.i.c==c.d.i.c){continue}if(Ccb(a.a.n[a.a.g[b.b.p].p])||Ccb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Rqb(a.b,a.a.g[TMc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} +function bed(a,b,c,d,e){var f,g,h,i,j,k,l;mmb();Okb(a,new Red);h=new Bib(a,0);l=new Rkb;f=0;while(h.bf*2){k=new wed(l);j=red(g)/qed(g);i=fed(k,b,new p0b,c,d,e,j);P6c(X6c(k.e),i);l.c=KC(SI,Uhe,1,0,5,1);f=0;l.c[l.c.length]=k;l.c[l.c.length]=g;f=red(k)*qed(k)+red(g)*qed(g)}else{l.c[l.c.length]=g;f+=red(g)*qed(g)}}return l} +function qwd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.ej()){i=a.fj();zvd(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,i):a.Zi(5,null,c,b,i);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e0){for(g=0;g>16==-15&&a.Cb.nh()&&Rwd(new oSd(a.Cb,9,13,c,a.c,HLd(QSd(BD(a.Cb,59)),a)))}else if(JD(a.Cb,88)){if(a.Db>>16==-23&&a.Cb.nh()){b=a.c;JD(b,88)||(b=(jGd(),_Fd));JD(c,88)||(c=(jGd(),_Fd));Rwd(new oSd(a.Cb,9,10,c,b,HLd(VKd(BD(a.Cb,26)),a)))}}}}return a.c} +function f7b(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Hypernodes processing',1);for(e=new olb(a.b);e.ac);return e} +function XFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=NFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=NFc(a,b)}while(e>c);return e} +function uNd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=vNd(a,b);c=vNd(a,c);d=JQd(b);if(d){k=JQd(c);if(k!=d){if(!k){return false}else{i=d.Dj();o=k.Dj();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new xMd(j5,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new xMd(j5,c,1)),c.d);if(f==m.i){for(j=0;j0;h=xFb(b,f);c?OFb(h.b,b):OFb(h.g,b);LFb(h).c.length==1&&(Gsb(d,h,d.c.b,d.c),true);e=new vgd(f,b);Wjb(a.o,e);Lkb(a.e.a,f)}} +function _Nb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(D6c(a.b).a-D6c(b.b).a);h=$wnd.Math.abs(D6c(a.b).b-D6c(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)} +function lQc(a){var b,c,d,e;nQc(a,a.e,a.f,(FQc(),DQc),true,a.c,a.i);nQc(a,a.e,a.f,DQc,false,a.c,a.i);nQc(a,a.e,a.f,EQc,true,a.c,a.i);nQc(a,a.e,a.f,EQc,false,a.c,a.i);mQc(a,a.c,a.e,a.f,a.i);d=new Bib(a.i,0);while(d.b=65;c--){$ce[c]=c-65<<24>>24}for(d=122;d>=97;d--){$ce[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){$ce[e]=e-48+52<<24>>24}$ce[43]=62;$ce[47]=63;for(f=0;f<=25;f++)_ce[f]=65+f&aje;for(g=26,i=0;g<=51;++g,i++)_ce[g]=97+i&aje;for(a=52,h=0;a<=61;++a,h++)_ce[a]=48+h&aje;_ce[62]=43;_ce[63]=47} +function FXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new d7c}j=0;l=0;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Edb(ED(vNb(BD(a.Kc().Pb(),37),(Nyc(),owc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}uXb(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new f7c(c+b,n+i+b)} +function mQc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new olb(b);g.af){return Ucd(),zcd}break;case 4:case 3:if(i<0){return Ucd(),Acd}else if(i+a.f>e){return Ucd(),Rcd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(Ucd(),Tcd):g+c>=1&&g-c>=0?(Ucd(),zcd):c<0.5?(Ucd(),Acd):(Ucd(),Rcd)} +function vhb(a,b,c,d,e){var f,g;f=wbb(xbb(b[0],Yje),xbb(d[0],Yje));a[0]=Tbb(f);f=Obb(f,32);if(c>=e){for(g=1;g0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b0){pOc(i,i.d-e.d);e.c==(HOc(),FOc)&&nOc(i,i.a-e.d);i.d<=0&&i.i>0&&(Gsb(b,i,b.c.b,b.c),true)}}}for(f=new olb(a.f);f.a0){qOc(h,h.i-e.d);e.c==(HOc(),FOc)&&oOc(h,h.b-e.d);h.i<=0&&h.d>0&&(Gsb(c,h,c.c.b,c.c),true)}}}} +function gSc(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,'Processor compute fanout',1);Uhb(a.b);Uhb(a.a);h=null;f=Jsb(b.b,0);while(!h&&f.b!=f.d.c){j=BD(Xsb(f),86);Ccb(DD(vNb(j,(mTc(),jTc))))&&(h=j)}i=new Psb;Gsb(i,h,i.c.b,i.c);fSc(a,i);for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);g=GD(vNb(j,(mTc(),$Sc)));e=Phb(a.b,g)!=null?BD(Phb(a.b,g),19).a:0;yNb(j,ZSc,meb(e));d=1+(Phb(a.a,g)!=null?BD(Phb(a.a,g),19).a:0);yNb(j,XSc,meb(d))}Qdd(c)} +function WPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=VPc(a,c);for(i=0;i0);d.a.Xb(d.c=--d.b);l>m+i&&uib(d)}for(g=new olb(n);g.a0);d.a.Xb(d.c=--d.b)}}}} +function Jfe(){wfe();var a,b,c,d,e,f;if(gfe)return gfe;a=(++vfe,new $fe(4));Xfe(a,Kfe(vxe,true));Zfe(a,Kfe('M',true));Zfe(a,Kfe('C',true));f=(++vfe,new $fe(4));for(d=0;d<11;d++){Ufe(f,d,d)}b=(++vfe,new $fe(4));Xfe(b,Kfe('M',true));Ufe(b,4448,4607);Ufe(b,65438,65439);e=(++vfe,new Lge(2));Kge(e,a);Kge(e,ffe);c=(++vfe,new Lge(2));c.$l(Bfe(f,Kfe('L',true)));c.$l(b);c=(++vfe,new lge(3,c));c=(++vfe,new rge(e,c));gfe=c;return gfe} +function S3c(a){var b,c;b=GD(hkd(a,(Y9c(),o8c)));if(T3c(b,a)){return}if(!ikd(a,F9c)&&((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i!=0||Ccb(DD(hkd(a,M8c))))){if(b==null||ufb(b).length==0){if(!T3c(sne,a)){c=Qfb(Qfb(new Wfb('Unable to load default layout algorithm '),sne),' for unconfigured node ');yfd(a,c);throw vbb(new y2c(c.a))}}else{c=Qfb(Qfb(new Wfb("Layout algorithm '"),b),"' not found for ");yfd(a,c);throw vbb(new y2c(c.a))}}} +function hIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);mHb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h0?(a.n.c.length-1)*a.i:0;for(d=new olb(a.n);d.a1){for(d=Jsb(e,0);d.b!=d.d.c;){c=BD(Xsb(d),231);f=0;for(i=new olb(c.e);i.a0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);nHb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i=0&&f!=c){throw vbb(new Wdb(kue))}}e=0;for(i=0;i0||Jy(e.b.d,a.b.d+a.b.a)==0&&d.b<0||Jy(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,YNb(a,e,d))}h=$wnd.Math.min(h,ONb(a,f,h,d))}return h} +function ifd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw vbb(new Wdb('The vector chain must contain at least a source and a target point.'))}e=(sCb(a.b!=0),BD(a.a.a.c,8));nmd(b,e.a,e.b);i=new Oyd((!b.a&&(b.a=new xMd(y2,b,5)),b.a));g=Jsb(a,1);while(g.aEdb(REc(g.g,g.d[0]).a)){sCb(i.b>0);i.a.Xb(i.c=--i.b);Aib(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new Rkb),h.e).Mc(b);j=(!h.e&&(h.e=new Rkb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new Rkb),h.e).Fc(g);++g.c}}}e||(d.c[d.c.length]=g,true)} +function odc(a){var b,c,d;if(fcd(BD(vNb(a,(Nyc(),Vxc)),98))){for(c=new olb(a.j);c.a>>0,'0'+b.toString(16));d='\\x'+qfb(c,c.length-2,c.length)}else if(a>=Tje){c=(b=a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&aje);}return d} +function yhb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new Vgb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);g<0&&(c=Jbb(c));i<0&&(d=Jbb(d));return ghb(Qbb(c,d))}e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?zhb(b.a,h,a.a,f):uhb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Hgb(),Ggb}k=zhb(a.a,f,b.a,h)}else{k=uhb(a.a,f,b.a,h)}}j=new Vgb(l,k.length,k);Jgb(j);return j} +function YPc(a){var b,c,d,e,f,g;this.e=new Rkb;this.a=new Rkb;for(c=a.b-1;c<3;c++){St(a,0,BD(Ut(a,0),8))}if(a.b<4){throw vbb(new Wdb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;TPc(this,a.b+this.b-1);g=new Rkb;f=new olb(this.e);for(b=0;b=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=BD(Ikb(b.n,b.n.c.length-1),211);if(g.e+g.d+c.g+e<=d&&(f=BD(Ikb(b.n,b.n.c.length-1),211),f.f-a.f+c.f<=a.b||a.a.c.length==1)){EZc(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Ekb(b.b,c);h=BD(Ikb(b.n,b.n.c.length-1),211);Ekb(b.n,new VZc(b.s,h.f+h.a+b.i,b.i));QZc(BD(Ikb(b.n,b.n.c.length-1),211),c);GZc(b,c);return true}}return false} +function Zxd(a,b,c){var d,e,f,g;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,g=uud(a,b,c),c,b,f);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){g!=null&&(e=a.dj(g,e));e=a.cj(c,e);a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return g}else{g=uud(a,b,c);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){e=null;g!=null&&(e=a.dj(g,null));e=a.cj(c,e);!!e&&e.Fi()}return g}} +function YA(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} +function opc(a,b){var c,d,e,f,g;Odd(b,'Path-Like Graph Wrapping',1);if(a.b.c.length==0){Qdd(b);return}e=new Xoc(a);g=(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i)*e.f);c=g/(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i));if(e.b>c){Qdd(b);return}switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:f=new hpc;break;case 0:f=new Ync;break;default:f=new kpc;}d=f.Vf(a,e);if(!f.Wf()){switch(BD(vNb(a,Myc),338).g){case 2:d=tpc(e,d);break;case 1:d=rpc(e,d);}}npc(a,e,d);Qdd(b)} +function MFc(a,b){var c,d,e,f;Fub(a.d,a.e);a.c.a.$b();if(Edb(ED(vNb(b.j,(Nyc(),uwc))))!=0||Edb(ED(vNb(b.j,uwc)))!=0){c=dme;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;ee&&++j;Ekb(g,(tCb(h+j,b.c.length),BD(b.c[h+j],19)));i+=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a-d;++c;while(c1&&(i>red(h)*qed(h)/2||g.b==0)){l=new wed(m);k=red(h)/qed(h);j=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),j);h=l;n.c[n.c.length]=l;i=0;m.c=KC(SI,Uhe,1,0,5,1)}}}Gkb(n,m);return n} +function y6d(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.mh(b)){k=(n=b,!n?null:BD(d,49).xh(n));if(k){p=c.bh(b,a.a);o=b.t;if(o>1||o==-1){l=BD(p,69);m=BD(k,69);if(l.dc()){m.$b()}else{g=!!zUd(b);f=0;for(h=a.a?l.Kc():l.Zh();h.Ob();){j=BD(h.Pb(),56);e=BD(Wrb(a,j),56);if(!e){if(a.b&&!g){m.Xh(f,j);++f}}else{if(g){i=m.Xc(e);i==-1?m.Xh(f,e):f!=i&&m.ji(f,e)}else{m.Xh(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=Wrb(a,p);e==null?a.b&&!zUd(b)&&k.Wb(p):k.Wb(e)}}}}} +function E6b(a,b){var c,d,e,f,g,h,i,j;c=new L6b;for(e=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(OZb(d)){continue}h=d.c.i;if(F6b(h,C6b)){j=G6b(a,h,C6b,B6b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new Rkb);Ekb(c.a,h)}}for(g=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);if(OZb(f)){continue}i=f.d.i;if(F6b(i,B6b)){j=G6b(a,i,B6b,C6b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new Rkb);Ekb(c.c,i)}}return c} +function Khb(a){Dhb();var b,c,d,e;b=QD(a);if(a1000000){throw vbb(new ocb('power of ten too big'))}if(a<=Ohe){return Qgb(Pgb(Bhb[1],b),b)}d=Pgb(Bhb[1],Ohe);e=d;c=Cbb(a-Ohe);b=QD(a%Ohe);while(ybb(c,Ohe)>0){e=Ogb(e,d);c=Qbb(c,Ohe)}e=Ogb(e,Pgb(Bhb[1],b));e=Qgb(e,Ohe);c=Cbb(a-Ohe);while(ybb(c,Ohe)>0){e=Qgb(e,Ohe);c=Qbb(c,Ohe)}e=Qgb(e,b);return e} +function X5b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Hierarchical port dummy size processing',1);i=new Rkb;k=new Rkb;d=Edb(ED(vNb(a,(Nyc(),myc))));c=d*2;for(f=new olb(a.b);f.aj&&d>j){k=h;j=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c.n&&Sdd(c,'bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c.n&&Sdd(c,b+' is feasible: '+e);return e} +function XNc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new olb(a);k.a=q&&a.e[i.p]>o*a.b||t>=c*q){m.c[m.c.length]=h;h=new Rkb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new vgd(n,m)} +function q4c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new $ib(a.c.b)).a.vc().Kc(),new djb(j));c.a.Ob();){b=(h=BD(c.a.Pb(),42),BD(h.dd(),149));e=b.a;e==null&&(e='');d=i4c(a.c,e);!d&&e.length==0&&(d=u4c(a));!!d&&!ze(d.c,b,false)&&Dsb(d.c,b)}for(g=Jsb(a.a,0);g.b!=g.d.c;){f=BD(Xsb(g),478);k=j4c(a.c,f.a);n=j4c(a.c,f.b);!!k&&!!n&&Dsb(k.c,new vgd(n,f.c))}Osb(a.a);for(m=Jsb(a.b,0);m.b!=m.d.c;){l=BD(Xsb(m),478);b=g4c(a.c,l.a);i=j4c(a.c,l.b);!!b&&!!i&&B3c(b,i,l.c)}Osb(a.b)} +function qvd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new fC(a);g=new ird;e=(ko(g.g),ko(g.j),Uhb(g.b),ko(g.d),ko(g.i),Uhb(g.k),Uhb(g.c),Uhb(g.e),n=drd(g,f,null),ard(g,f),n);if(b){j=new fC(b);h=rvd(j);jfd(e,OC(GC(g2,1),Uhe,527,0,[h]))}m=false;l=false;if(c){j=new fC(c);que in j.a&&(m=aC(j,que).ge().a);rue in j.a&&(l=aC(j,rue).ge().a)}k=Vdd(Xdd(new Zdd,m),l);t2c(new w2c,e,k);que in f.a&&cC(f,que,null);if(m||l){i=new eC;nvd(k,i,m,l);cC(f,que,i)}d=new Prd(g);Ghe(new _ud(e),d)} +function pA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new nB;j=OC(GC(WD,1),oje,25,15,[0]);e=-1;f=0;d=0;for(i=0;i0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!wA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!wA(b,j,k,0,g)){return 0}}}else{e=-1;if(bfb(k.c,0)==32){l=j[0];uA(b,j);if(j[0]>l){continue}}else if(ofb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!mB(g,c)){return 0}return j[0]} +function SKd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new CNd;h=new CNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(f=new Fyd(_Kd(a));f.e!=f.i.gc();){e=BD(Dyd(f),26);ytd(i,SKd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));d.e!=d.i.gc();){c=BD(Dyd(d),170);JD(c,99)&&wtd(h,BD(c,18))}vud(h);a.r=new UNd(a,(BD(qud(ZKd((NFd(),MFd).o),6),18),h.i),h.g);ytd(i,a.r);vud(i);a.f=new nNd((BD(qud(ZKd(MFd.o),5),18),i.i),i.g);$Kd(a).b&=-3}return a.f} +function rMb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=KC(WD,oje,25,g,15,1);e=KC(WD,oje,25,g,15,1);c=a.p;b=KC(WD,oje,25,c,15,1);f=KC(WD,oje,25,c,15,1);for(j=0;j=0&&!YMb(a,k,l)){--l}e[k]=l}for(n=0;n=0&&!YMb(a,h,o)){--h}f[o]=h}for(i=0;ib[m]&&md[i]&&aNb(a,i,m,false,true)}}} +function lRb(a){var b,c,d,e,f,g,h,i;c=Ccb(DD(vNb(a,(wSb(),cSb))));f=a.a.c.d;h=a.a.d.d;if(c){g=Y6c(c7c(new f7c(h.a,h.b),f),0.5);i=Y6c(R6c(a.e),0.5);b=c7c(P6c(new f7c(f.a,f.b),g),i);a7c(a.d,b)}else{e=Edb(ED(vNb(a.a,tSb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}} +function Qge(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=KC(TD,$ie,25,f,15,1);ACb(0,f,a.length);ACb(0,f,i.length);ffb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e0?qfb(c.a,0,f-1):''}}else{return !c?a:c.a}} +function DPb(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Yle),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new GPb)));p4c(a,Yle,Zle,Ksd(BPb));p4c(a,Yle,$le,Ksd(vPb));p4c(a,Yle,_le,Ksd(qPb));p4c(a,Yle,ame,Ksd(wPb));p4c(a,Yle,Zke,Ksd(zPb));p4c(a,Yle,$ke,Ksd(yPb));p4c(a,Yle,Yke,Ksd(APb));p4c(a,Yle,_ke,Ksd(xPb));p4c(a,Yle,Tle,Ksd(sPb));p4c(a,Yle,Ule,Ksd(rPb));p4c(a,Yle,Vle,Ksd(tPb));p4c(a,Yle,Wle,Ksd(uPb))} +function Zbc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));e=0;if(b){g=new H0b;yNb(g,(wtc(),$sc),b);yNb(f,$sc,b.i);G0b(g,(Ucd(),Tcd));F0b(g,f);m=k_b(b.e);for(j=m,k=0,l=j.length;k0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>egb.length;c-=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(c));Qfb(e,d.substr(b))}else{c=b-c;Qfb(e,qfb(d,b,QD(c)));e.a+='.';Qfb(e,pfb(d,QD(c)))}}else{Qfb(e,d.substr(b));for(;c<-egb.length;c+=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(-c))}return e.a} +function v6c(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=c7c(new f7c(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=P6c(new f7c(c.a,c.b),Y6c(new f7c(d.a,d.b),0.5));f=S6c(a,e);g=S6c(P6c(new f7c(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f=0&&l<=1&&m>=0&&m<=1?P6c(new f7c(a.a,a.b),Y6c(new f7c(b.a,b.b),l)):null}} +function OTb(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(h=new olb(a.a);h.ab.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(g=new olb(a.a);g.ab){e=0;f+=k.b+c;l.c[l.c.length]=k;k=new x$c(f,c);d=new PZc(0,k.f,k,c);s$c(k,d);e=0}if(d.b.c.length==0||i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f){EZc(d,i)}else{g=new PZc(d.s+d.r+c,k.f,k,c);s$c(k,g);EZc(g,i)}e=i.i+i.g}l.c[l.c.length]=k;return l} +function OKd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new GNd(a);b=new KNd;c=KKd;h=c.a.zc(a,c);if(h==null){for(g=new Fyd(_Kd(a));g.e!=g.i.gc();){f=BD(Dyd(g),26);ytd(i,OKd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));e.e!=e.i.gc();){d=BD(Dyd(e),170);JD(d,322)&&wtd(b,BD(d,34))}vud(b);a.k=new PNd(a,(BD(qud(ZKd((NFd(),MFd).o),7),18),b.i),b.g);ytd(i,a.k);vud(i);a.a=new nNd((BD(qud(ZKd(MFd.o),4),18),i.i),i.g);$Kd(a).b&=-2}return a.a} +function vZc(a,b,c,d,e,f,g){var h,i,j,k,l,m;l=false;i=ZZc(c.q,b.f+b.b-c.q.f);m=e-(c.q.e+i-g);if(m=(tCb(f,a.c.length),BD(a.c[f],200)).e;k=(h=MZc(d,m,false),h.a);if(k>b.b&&!j){return false}if(j||k<=b.b){if(j&&k>b.b){c.d=k;KZc(c,JZc(c,k))}else{$Zc(c.q,i);c.c=true}KZc(d,e-(c.s+c.r));OZc(d,c.q.e+c.q.d,b.f);s$c(b,d);if(a.c.length>f){v$c((tCb(f,a.c.length),BD(a.c[f],200)),d);(tCb(f,a.c.length),BD(a.c[f],200)).a.c.length==0&&Kkb(a,f)}l=true}return l} +function C2d(a,b,c,d){var e,f,g,h,i,j,k;k=S6d(a.e.Tg(),b);e=0;f=BD(a.g,119);i=null;Q6d();if(BD(b,66).Oj()){for(h=0;ha.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}} +function rvd(a){var b,c,d,e,f,g,h,i;f=new b2c;Z1c(f,(Y1c(),V1c));for(d=(e=$B(a,KC(ZI,nie,2,0,6,1)),new vib(new amb((new mC(a,e)).b)));d.b0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Ekb(a.n,new VZc(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&QZc(BD(Ikb(a.n,l),211),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;u$c(a.j)}return new J6c(a.s,a.t,e,d)} +function $fb(a,b,c,d,e){Zfb();var f,g,h,i,j,k,l,m,n;vCb(a,'src');vCb(c,'dest');m=rb(a);i=rb(c);rCb((m.i&4)!=0,'srcType is not an array');rCb((i.i&4)!=0,'destType is not an array');l=m.c;g=i.c;rCb((l.i&1)!=0?l==g:(g.i&1)==0,"Array types don't match");n=a.length;j=c.length;if(b<0||d<0||e<0||b+e>n||d+e>j){throw vbb(new pcb)}if((l.i&1)==0&&m!=i){k=CD(a);f=CD(c);if(PD(a)===PD(c)&&bd;){NC(f,h,k[--b])}}else{for(h=d+e;d0&&$Bb(a,b,c,d,e,true)} +function phb(){phb=ccb;nhb=OC(GC(WD,1),oje,25,15,[Rie,1162261467,Iie,1220703125,362797056,1977326743,Iie,387420489,Jje,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,Iie,1291467969,1544804416,1838265625,60466176]);ohb=OC(GC(WD,1),oje,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])} +function soc(a){var b,c,d,e,f,g,h,i;for(e=new olb(a.b);e.a=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=Pje;a.p=Pje;for(f=new olb(a.b);f.a0){e=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!e||Qfb(Qfb((b.a+=' "',b),e),'"')}}else{Qfb(Qfb((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new y5d(z2,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Qfb(b,Eb(new Gb,new Fyd(a.b)));c&&(b.a+=']',b);b.a+=gne;c&&(b.a+='[',b);Qfb(b,Eb(new Gb,new Fyd(a.c)));c&&(b.a+=']',b);return b.a} +function TQd(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.ne();i=null;if(h!=null){b.a+=''+h}else{g=a.a.Dj();if(g!=null){f=hfb(g,wfb(91));if(f!=-1){i=g.substr(f);b.a+=''+qfb(g==null?Xhe:(uCb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new Fyd(a.d);d.e!=d.i.gc();){c=BD(Dyd(d),87);e?(e=false):(b.a+=She,b);TQd(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';TQd(a.b,b)}else{if(a.f){b.a+=' extends ';TQd(a.f,b)}}}} +function Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Jkb(v.a,a,0);d=Jkb(w.a,b,0);t=BD(W_b(a,(KAc(),HAc)).Kc().Pb(),11);C=BD(W_b(a,IAc).Kc().Pb(),11);u=BD(W_b(b,HAc).Kc().Pb(),11);D=BD(W_b(b,IAc).Kc().Pb(),11);r=k_b(t.e);A=k_b(C.g);s=k_b(u.e);B=k_b(D.g);Z_b(a,d,w);for(g=s,k=0,o=g.length;kk){new DOc((HOc(),GOc),c,b,j-k)}else if(j>0&&k>0){new DOc((HOc(),GOc),b,c,0);new DOc(GOc,c,b,0)}}return g} +function TUb(a,b){var c,d,e,f,g,h;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);e=BD(f.cd(),594);if(b==1){if(e.gf()!=(ead(),dad)&&e.gf()!=_9c){continue}}else{if(e.gf()!=(ead(),aad)&&e.gf()!=bad){continue}}d=BD(BD(f.dd(),46).b,81);h=BD(BD(f.dd(),46).a,189);c=h.c;switch(e.gf().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} +function nJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=KC(WD,oje,25,b.b.c.length,15,1);j=KC(NQ,Kie,267,b.b.c.length,0,1);i=KC(OQ,kne,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m0&&!!i[d]&&(o=jBc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new olb(k.e);f.a1){throw vbb(new Wdb(Hwe))}if(!i){f=R6d(b,d.Kc().Pb());g.Fc(f)}}return xtd(a,I2d(a,b,c),g)} +function Pmc(a,b){var c,d,e,f;Jmc(b.b.j);MAb(NAb(new YAb(null,new Kub(b.d,16)),new $mc),new anc);for(f=new olb(b.d);f.aa.o.b){return false}c=V_b(a,zcd);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true} +function thb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);if(g==i){k=wbb(c,d);o=Tbb(k);n=Tbb(Pbb(k,32));return n==0?new Ugb(g,o):new Vgb(g,2,OC(GC(WD,1),oje,25,15,[o,n]))}return ghb(g<0?Qbb(d,c):Qbb(c,d))}else if(g==i){m=g;l=f>=h?uhb(a.a,f,b.a,h):uhb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==0){return Hgb(),Ggb}if(e==1){m=g;l=zhb(a.a,f,b.a,h)}else{m=i;l=zhb(b.a,h,a.a,f)}}j=new Vgb(m,l.length,l);Jgb(j);return j} +function oZb(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Ccb(DD(vNb(b,(Nyc(),vxc))));m=null;f==(KAc(),HAc)&&d.c.i==c?(m=d.c):f==IAc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(Ucd(),Scd);m?(k=m.j):fcd(BD(vNb(c,Vxc),98))&&(k=f==HAc?Tcd:zcd);i=lZb(a,b,c,f,k,d);h=kZb((Q_b(c),d));if(f==HAc){QZb(h,BD(Ikb(i.j,0),11));RZb(h,e)}else{QZb(h,e);RZb(h,BD(Ikb(i.j,0),11))}j=new yZb(d,h,i,BD(vNb(i,(wtc(),$sc)),11),f,!m)}else{Ekb(j.e,d);n=$wnd.Math.max(Edb(ED(vNb(j.d,Zwc))),Edb(ED(vNb(d,Zwc))));yNb(j.d,Zwc,n)}Rc(a.a,d,new BZb(j.d,b,f));return j} +function V1d(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=BD(Phb(a.d,b),138));if(!k){f=a.a.Mh();l=f.i;if(!a.d||Vhb(a.d)!=l){i=new Lqb;!!a.d&&Ld(i,a.d);j=i.f.c+i.g.c;for(h=j;h0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n=a.b[e+1]){e+=2}else if(c0){d=new Tkb(BD(Qc(a.a,f),21));mmb();Okb(d,new EZb(b));e=new Bib(f.b,0);while(e.bv)){i=2;g=Ohe}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A0?1:Ny(isNaN(d),isNaN(0)))>=0^(null,My(Jqe),($wnd.Math.abs(h)<=Jqe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:Ny(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)} +function Kge(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new Wvb);if(a.e==2){Tvb(a.a,b);return}if(b.e==1){for(e=0;e=Tje?Efb(c,Tee(d)):Afb(c,d&aje);g=(++vfe,new Hge(10,null,0));Vvb(a.a,g,h-1)}else{c=(g.bm().length+f,new Ifb);Efb(c,g.bm())}if(b.e==0){d=b._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje)}else{Efb(c,b.bm())}BD(g,521).b=c.a} +function rgb(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=rhb(Cbb(a.f),QD(a.e));return a.g}e=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=fhb(a.f)),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new Ufb;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){Tfb(f,c-QD(a.e),String.fromCharCode(46))}else{f.a=qfb(f.a,0,b-1)+'0.'+pfb(f.a,b-1);Tfb(f,b+1,zfb(egb,0,-QD(d)-1))}}else{if(c-b>=1){Tfb(f,b,String.fromCharCode(46));++c}Tfb(f,c,String.fromCharCode(69));d>0&&Tfb(f,++c,String.fromCharCode(43));Tfb(f,++c,''+Ubb(Cbb(d)))}a.g=f.a;return a.g} +function npc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=BD(d.Pb(),19).a;while(h1&&(i=j.mg(i,a.a,h))}if(i.c.length==1){return BD(Ikb(i,i.c.length-1),220)}if(i.c.length==2){return lYc((tCb(0,i.c.length),BD(i.c[0],220)),(tCb(1,i.c.length),BD(i.c[1],220)),g,f)}return null} +function JNb(a){var b,c,d,e,f,g;Hkb(a.a,new PNb);for(c=new olb(a.a);c.a=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.dg.c&&f.c0){b=new _zd(a.i,a.g);c=a.i;f=c<100?null:new Ixd(c);if(a.ij()){for(d=0;d0){h=a.g;j=a.i;oud(a);f=j<100?null:new Ixd(j);for(d=0;d>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&Eje;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=Eje;u+=p>>22;p&=Eje;u&=Fje;return TC(m,p,u)} +function o7b(a){var b,c,d,e,f,g,h;h=BD(Ikb(a.j,0),11);if(h.g.c.length!=0&&h.e.c.length!=0){throw vbb(new Zdb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=Pje;for(c=new olb(h.g);c.a4){if(a.wj(b)){if(a.rk()){e=BD(b,49);d=e.Ug();i=d==a.e&&(a.Dk()?e.Og(e.Vg(),a.zk())==a.Ak():-1-e.Vg()==a.aj());if(a.Ek()&&!i&&!d&&!!e.Zg()){for(f=0;f0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}yNb(a,(wtc(),htc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=bcd&&b!=ccd&&h!=Scd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} +function vwd(a){var b,c,d,e,f,g,h,i,j,k;if(a.ej()){k=a.Vi();i=a.fj();if(k>0){b=new Aud(a.Gi());c=k;f=c<100?null:new Ixd(c);Cvd(a,c,b.g);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new Fyd(b);d.e!=d.i.gc();){f=a.dj(Dyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{Cvd(a,a.Vi(),a.Wi());a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){k=a.Vi();if(k>0){h=a.Wi();j=k;Cvd(a,k,h);f=j<100?null:new Ixd(j);for(d=0;da.d[g.p]){c+=zHc(a.b,f)*BD(i.b,19).a;Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function eed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new g7c(BD(hkd(a,(X7c(),R7c)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=ED(hkd(a,L7c));(e==null||(uCb(e),e)<=0)&&(e=1.3);h=new Rkb;for(o=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));o.e!=o.i.gc();){n=BD(Dyd(o),33);g=new xed(n);h.c[h.c.length]=g}m=BD(hkd(a,M7c),311);switch(m.g){case 3:q=bed(h,b,l.a,l.b,(j=d,uCb(e),e,j));break;case 1:q=aed(h,b,l.a,l.b,(k=d,uCb(e),e,k));break;default:q=ced(h,b,l.a,l.b,(i=d,uCb(e),e,i));}f=new wed(q);p=fed(f,b,c,l.a,l.b,d,(uCb(e),e));Afd(a,p.a,p.b,false,true)} +function vkc(a,b){var c,d,e,f;c=b.b;f=new Tkb(c.j);e=0;d=c.j;d.c=KC(SI,Uhe,1,0,5,1);hkc(BD(Si(a.b,(Ucd(),Acd),(Fkc(),Ekc)),15),c);e=ikc(f,e,new blc,d);hkc(BD(Si(a.b,Acd,Dkc),15),c);e=ikc(f,e,new dlc,d);hkc(BD(Si(a.b,Acd,Ckc),15),c);hkc(BD(Si(a.b,zcd,Ekc),15),c);hkc(BD(Si(a.b,zcd,Dkc),15),c);e=ikc(f,e,new flc,d);hkc(BD(Si(a.b,zcd,Ckc),15),c);hkc(BD(Si(a.b,Rcd,Ekc),15),c);e=ikc(f,e,new hlc,d);hkc(BD(Si(a.b,Rcd,Dkc),15),c);e=ikc(f,e,new jlc,d);hkc(BD(Si(a.b,Rcd,Ckc),15),c);hkc(BD(Si(a.b,Tcd,Ekc),15),c);e=ikc(f,e,new Pkc,d);hkc(BD(Si(a.b,Tcd,Dkc),15),c);hkc(BD(Si(a.b,Tcd,Ckc),15),c)} +function nbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Layer size calculation',1);k=Pje;j=Qje;e=false;for(h=new olb(a.b);h.a0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;rq.a-p-k&&(r=q.a-p-k);h.n.a=b+r}} +function ced(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=KC(UD,Vje,25,a.c.length,15,1);m=new gub(new Ned);_tb(m,a);j=0;p=new Rkb;while(m.b.c.length!=0){g=BD(m.b.c.length==0?null:Ikb(m.b,0),157);if(j>1&&red(g)*qed(g)/2>h[0]){f=0;while(fh[f]){++f}o=new Jib(p,0,f+1);l=new wed(o);k=red(g)/qed(g);i=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),i);zCb(cub(m,l));n=new Jib(p,f+1,p.c.length);_tb(m,n);p.c=KC(SI,Uhe,1,0,5,1);j=0;Dlb(h,h.length,0)}else{q=m.b.c.length==0?null:Ikb(m.b,0);q!=null&&fub(m,0);j>0&&(h[j]=h[j-1]);h[j]+=red(g)*qed(g);++j;p.c[p.c.length]=g}}return p} +function Wac(a){var b,c,d,e,f;d=BD(vNb(a,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!Yac(b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. "+'FIRST_SEPARATE nodes must not have incoming edges.'))}}}else if(d==Atc){for(f=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!Yac(e)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. "+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}} +function C9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;Odd(b,'Label dummy removal',1);d=Edb(ED(vNb(a,(Nyc(),nyc))));e=Edb(ED(vNb(a,ryc)));j=BD(vNb(a,Lwc),103);for(i=new olb(a.b);i.a0&&iCc(a,h,l)}for(e=new olb(l);e.a>19!=0){b=hD(b);i=!i}g=_C(b);f=false;e=false;d=false;if(a.h==Gje&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=SC((wD(),sD));d=true;i=!i}else{h=lD(a,g);i&&ZC(h);c&&(QC=TC(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=hD(a);d=true;i=!i}if(g!=-1){return WC(a,g,i,f,c)}if(eD(a,b)<0){c&&(f?(QC=hD(a)):(QC=TC(a.l,a.m,a.h)));return TC(0,0,0)}return XC(d?a:TC(a.l,a.m,a.h),b,i,f,e,c)} +function F2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.cb.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=BD(g.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=BD(h.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=BD(i.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=BD(f.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c=0){f=wid(b,c.substr(1,h-1));l=c.substr(h+1,j-(h+1));return pid(b,l,f)}}else{d=-1;Vcb==null&&(Vcb=new RegExp('\\d'));if(Vcb.test(String.fromCharCode(i))){d=lfb(c,wfb(46),j-1);if(d>=0){e=BD(hid(b,Bid(b,c.substr(1,d-1)),false),58);k=0;try{k=Icb(c.substr(d+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){g=a;throw vbb(new rFd(g))}else throw vbb(a)}if(k=0){return c}switch($1d(q1d(a,c))){case 2:{if(dfb('',o1d(a,c.Hj()).ne())){i=b2d(q1d(a,c));h=a2d(q1d(a,c));k=r1d(a,b,i,h);if(k){return k}e=f1d(a,b);for(g=0,l=e.gc();g1){throw vbb(new Wdb(Hwe))}k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g1;for(j=new b1b(m.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);l=i.c==m?i.d:i.c;$wnd.Math.abs(l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&GNc(a,i,g,f,m)}}} +function XPc(a){var b,c,d,e,f,g;e=new Bib(a.e,0);d=new Bib(a.a,0);if(a.d){for(c=0;cOqe){f=b;g=0;while($wnd.Math.abs(b-f)0);e.a.Xb(e.c=--e.b);WPc(a,a.b-g,f,d,e);sCb(e.b0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}} +function $9d(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} +function l5b(a,b,c){var d,e,f,g;Odd(c,'Graph transformation ('+a.a+')',1);g=Mu(b.a);for(f=new olb(b.b);f.a0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new tPc(1,f);n=sPc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}} +function kKd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;$Jd(a,null)}else{a.F=(uCb(b),b);d=hfb(b,wfb(60));if(d!=-1){e=b.substr(0,d);hfb(b,wfb(46))==-1&&!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)&&(e=Lve);c=kfb(b,wfb(62));c!=-1&&(e+=''+b.substr(c+1));$Jd(a,e)}else{e=b;if(hfb(b,wfb(46))==-1){d=hfb(b,wfb(91));d!=-1&&(e=b.substr(0,d));if(!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)){e=Lve;d!=-1&&(e+=''+b.substr(d))}else{e=b}}$Jd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,f,b))} +function AMc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=KC(WD,oje,25,p,15,1);l=0;for(k=new olb(b.b);k.ag)&&Qqb(a.b,BD(q.b,17))}}++h}f=g}}}} +function o5c(b,c){var d;if(c==null||dfb(c,Xhe)){return null}if(c.length==0&&b.k!=(_5c(),W5c)){return null}switch(b.k.g){case 1:return efb(c,kse)?(Bcb(),Acb):efb(c,lse)?(Bcb(),zcb):null;case 2:try{return meb(Icb(c,Rie,Ohe))}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 4:try{return Hcb(c)}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 3:return c;case 5:j5c(b);return m5c(b,c);case 6:j5c(b);return n5c(b,b.a,c);case 7:try{d=l5c(b);d.Jf(c);return d}catch(a){a=ubb(a);if(JD(a,32)){return null}else throw vbb(a)}default:throw vbb(new Zdb('Invalid type set for this layout option.'));}} +function JWb(a){AWb();var b,c,d,e,f,g,h;h=new CWb;for(c=new olb(a);c.a=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new NWb((lWb(),hWb));rXb(a,yWb,new amb(OC(GC(bQ,1),Uhe,369,0,[d])));g=new NWb(kWb);rXb(a,xWb,new amb(OC(GC(bQ,1),Uhe,369,0,[g])));e=new NWb(iWb);rXb(a,wWb,new amb(OC(GC(bQ,1),Uhe,369,0,[e])));f=new NWb(jWb);rXb(a,vWb,new amb(OC(GC(bQ,1),Uhe,369,0,[f])));DWb(d.c,hWb);DWb(e.c,iWb);DWb(f.c,jWb);DWb(g.c,kWb);h.a.c=KC(SI,Uhe,1,0,5,1);Gkb(h.a,d.c);Gkb(h.a,Su(e.c));Gkb(h.a,f.c);Gkb(h.a,Su(g.c));return h} +function jxd(a){var b;switch(a.d){case 1:{if(a.hj()){return a.o!=-2}break}case 2:{if(a.hj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.gj();switch(a.p){case 0:return b!=null&&Ccb(DD(b))!=Kbb(a.k,0);case 1:return b!=null&&BD(b,217).a!=Tbb(a.k)<<24>>24;case 2:return b!=null&&BD(b,172).a!=(Tbb(a.k)&aje);case 6:return b!=null&&Kbb(BD(b,162).a,a.k);case 5:return b!=null&&BD(b,19).a!=Tbb(a.k);case 7:return b!=null&&BD(b,184).a!=Tbb(a.k)<<16>>16;case 3:return b!=null&&Edb(ED(b))!=a.j;case 4:return b!=null&&BD(b,155).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}} +function nOd(a,b,c){var d,e,f,g;if(a.Fk()&&a.Ek()){g=oOd(a,BD(c,56));if(PD(g)!==PD(c)){a.Oi(b);a.Ui(b,pOd(a,b,g));if(a.rk()){f=(e=BD(c,49),a.Dk()?a.Bk()?e.ih(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),null):e.ih(a.b,bLd(e.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,null):e.ih(a.b,-1-a.aj(),null,null));!BD(g,49).eh()&&(f=(d=BD(g,49),a.Dk()?a.Bk()?d.gh(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),f):d.gh(a.b,bLd(d.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,f):d.gh(a.b,-1-a.aj(),null,f)));!!f&&f.Fi()}oid(a.b)&&a.$i(a.Zi(9,c,g,b,false));return g}}return c} +function Noc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Edb(ED(vNb(a,(Nyc(),oyc))));d=Edb(ED(vNb(a,Cyc)));m=new _fd;yNb(m,oyc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=G1b(p.c);t=G1b(s.c);e=new Rkb;for(l=q;l<=t;l++){h=new b0b(a);__b(h,(j0b(),g0b));yNb(h,(wtc(),$sc),j);yNb(h,Vxc,(dcd(),$bd));yNb(h,qyc,m);n=BD(Ikb(a.b,l),29);l==q?Z_b(h,n.a.c.length-c,n):$_b(h,n);u=Edb(ED(vNb(j,Zwc)));if(u<0){u=0;yNb(j,Zwc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new H0b;G0b(g,(Ucd(),Tcd));F0b(g,h);g.n.b=o;i=new H0b;G0b(i,zcd);F0b(i,h);i.n.b=o;RZb(j,g);f=new UZb;tNb(f,j);yNb(f,jxc,null);QZb(f,i);RZb(f,r);Ooc(h,j,f);e.c[e.c.length]=f;j=f}return e} +function sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=BD(Y_b(a,(Ucd(),Tcd)).Kc().Pb(),11).e;n=BD(Y_b(a,zcd).Kc().Pb(),11).g;h=i.c.length;t=A0b(BD(Ikb(a.j,0),11));while(h-->0){p=(tCb(0,i.c.length),BD(i.c[0],17));e=(tCb(0,n.c.length),BD(n.c[0],17));s=e.d.e;f=Jkb(s,e,0);SZb(p,e.d,f);QZb(e,null);RZb(e,null);o=p.a;b&&Dsb(o,new g7c(t));for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);Dsb(o,new g7c(c))}r=p.b;for(m=new olb(e.b);m.a0&&(g=$wnd.Math.max(g,IJb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-e)<=ple||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-1)<=ple||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g} +function NKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((rcd(),ncd));g=0;a.A.Hc((tdd(),sdd))&&SKb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=BD(h.Pb(),111);f=Edb(ED(d.b.We((CKb(),BKb))));e=d.b.rf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,IJb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-f)<=ple||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-1)<=ple||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g} +function _Ec(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=KC(OQ,kne,10,h+i,0,1);for(g=0;g0?ZEc(this,this.f/this.a):REc(b.g,b.d[0]).a!=null&&REc(c.g,c.d[0]).a!=null?ZEc(this,(Edb(REc(b.g,b.d[0]).a)+Edb(REc(c.g,c.d[0]).a))/2):REc(b.g,b.d[0]).a!=null?ZEc(this,REc(b.g,b.d[0]).a):REc(c.g,c.d[0]).a!=null&&ZEc(this,REc(c.g,c.d[0]).a)} +function BUb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new dVb(oqb(t1));for(d=new olb(b.a);d.a=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;yNb(a,(Nyc(),Fxc),(tdd(),d=BD(gdb(I1),9),new xqb(d,BD(_Bb(d,d.length),9),0)))} +function iFd(a,b,c,d,e,f){var g;if(!(b==null||!OEd(b,zEd,AEd))){throw vbb(new Wdb('invalid scheme: '+b))}if(!a&&!(c!=null&&hfb(c,wfb(35))==-1&&c.length>0&&(BCb(0,c.length),c.charCodeAt(0)!=47))){throw vbb(new Wdb('invalid opaquePart: '+c))}if(a&&!(b!=null&&hnb(GEd,b.toLowerCase()))&&!(c==null||!OEd(c,CEd,DEd))){throw vbb(new Wdb(mve+c))}if(a&&b!=null&&hnb(GEd,b.toLowerCase())&&!eFd(c)){throw vbb(new Wdb(mve+c))}if(!fFd(d)){throw vbb(new Wdb('invalid device: '+d))}if(!hFd(e)){g=e==null?'invalid segments: null':'invalid segment: '+VEd(e);throw vbb(new Wdb(g))}if(!(f==null||hfb(f,wfb(35))==-1)){throw vbb(new Wdb('invalid query: '+f))}} +function nVc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Calculate Graph Size',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));h=dme;i=dme;f=ere;g=ere;for(l=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));l.e!=l.i.gc();){j=BD(Dyd(l),33);o=j.i;p=j.j;r=j.g;d=j.f;e=BD(hkd(j,(Y9c(),S8c)),142);h=$wnd.Math.min(h,o-e.b);i=$wnd.Math.min(i,p-e.d);f=$wnd.Math.max(f,o+r+e.c);g=$wnd.Math.max(g,p+d+e.a)}n=BD(hkd(a,(Y9c(),f9c)),116);m=new f7c(h-n.b,i-n.d);for(k=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));k.e!=k.i.gc();){j=BD(Dyd(k),33);dld(j,j.i-m.a);eld(j,j.j-m.b)}q=f-h+(n.b+n.c);c=g-i+(n.d+n.a);cld(a,q);ald(a,c);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))} +function rGb(a){var b,c,d,e,f,g,h,i,j,k;d=new Rkb;for(g=new olb(a.e.a);g.a0){gA(a,c,0);c.a+=String.fromCharCode(d);e=lA(b,f);gA(a,c,e);f+=e-1;continue}if(d==39){if(f+11){p=KC(WD,oje,25,a.b.b.c.length,15,1);l=0;for(j=new olb(a.b.b);j.a=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(iQie)&&h<10);zVb(a.c,new _Ub);OUb(a);vVb(a.c);yUb(a.f)} +function sZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Ccb(DD(vNb(c,(Nyc(),fxc))))){return}for(h=new olb(c.j);h.a=2){i=Jsb(c,0);g=BD(Xsb(i),8);h=BD(Xsb(i),8);while(h.a0&&jEb(j,true,(ead(),bad));h.k==(j0b(),e0b)&&kEb(j);Rhb(a.f,h,b)}}} +function Bbc(a,b,c){var d,e,f,g,h,i,j,k,l,m;Odd(c,'Node promotion heuristic',1);a.g=b;Abc(a);a.q=BD(vNb(b,(Nyc(),rxc)),260);k=BD(vNb(a.g,qxc),19).a;f=new Jbc;switch(a.q.g){case 2:case 1:Dbc(a,f);break;case 3:a.q=(kAc(),jAc);Dbc(a,f);i=0;for(h=new olb(a.a);h.aa.j){a.q=dAc;Dbc(a,f)}break;case 4:a.q=(kAc(),jAc);Dbc(a,f);j=0;for(e=new olb(a.b);e.aa.k){a.q=gAc;Dbc(a,f)}break;case 6:m=QD($wnd.Math.ceil(a.f.length*k/100));Dbc(a,new Mbc(m));break;case 5:l=QD($wnd.Math.ceil(a.d*k/100));Dbc(a,new Pbc(l));break;default:Dbc(a,f);}Ebc(a,b);Qdd(c)} +function fFc(a,b,c){var d,e,f,g;this.j=a;this.e=WZb(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?BD(Ikb(c,Q_b(this.o).p),214):null;e=BD(vNb(a,(wtc(),Ksc)),21);this.g=e.Hc((Orc(),Hrc));this.b=new Rkb;this.d=new rHc(this.e);g=BD(vNb(this.j,jtc),230);this.q=wFc(b,g,this.e);this.k=new BGc(this);f=Ou(OC(GC(qY,1),Uhe,225,0,[this,this.d,this.k,this.q]));if(b==(rGc(),oGc)&&!Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new uEc(d,g,BD(this.q,402))}else if(b==oGc&&Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new XGc(d,g,BD(this.q,402))}else{this.c=new Oic(b,this)}Ekb(f,this.c);$Ic(f,this.e);this.s=AGc(this.k)} +function xUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);o=l?BD(vNb(l,(mTc(),_Sc)),86):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h=a.i){++a.i;Ekb(a.a,meb(1));Ekb(a.b,k)}else{d=a.c[b.p][1];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a+1-d));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))+k-d*a.e)}(a.q==(kAc(),dAc)&&(BD(Ikb(a.a,j),19).a>a.j||BD(Ikb(a.a,j-1),19).a>a.j)||a.q==gAc&&(Edb(ED(Ikb(a.b,j)))>a.k||Edb(ED(Ikb(a.b,j-1)))>a.k))&&(i=false);for(g=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);h=f.c.i;if(a.f[h.p]==j){l=Cbc(a,h);e=e+BD(l.a,19).a;i=i&&Ccb(DD(l.b))}}a.f[b.p]=j;e=e+a.c[b.p][0];return new vgd(meb(e),(Bcb(),i?true:false))} +function sPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Lqb;g=new Rkb;qPc(a,c,a.d.fg(),g,l);qPc(a,d,a.d.gg(),g,l);a.b=0.2*(p=rPc(LAb(new YAb(null,new Kub(g,16)),new xPc)),q=rPc(LAb(new YAb(null,new Kub(g,16)),new zPc)),$wnd.Math.min(p,q));f=0;for(h=0;h=2&&(r=WNc(g,true,m),!a.e&&(a.e=new ZOc(a)),VOc(a.e,r,g,a.b),undefined);uPc(g,m);wPc(g);n=-1;for(k=new olb(g);k.ah} +function k6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=BD(vNb(a,(Nyc(),Vxc)),98);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new Rkb;l=new Rkb;for(e=new olb(b);e.a0),BD(k.a.Xb(k.c=--k.b),17));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17))}k.b>0&&uib(k)}}}} +function Vmd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}e=o1d((O6d(),M6d),c).$k();if(e){return e.Aj().Nh().Ih(e,d)}h=o1d(M6d,c).al();if(h){if(d==null){return null}i=BD(d,15);if(i.dc()){return ''}m=new Hfb;for(g=i.Kc();g.Ob();){f=g.Pb();Efb(m,h.Aj().Nh().Ih(h,f));m.a+=' '}return lcb(m,m.a.length-1)}l=o1d(M6d,c).bl();if(!l.dc()){for(k=l.Kc();k.Ob();){j=BD(k.Pb(),148);if(j.wj(d)){try{m=j.Aj().Nh().Ih(j,d);if(m!=null){return m}}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}}}throw vbb(new Wdb("Invalid value: '"+d+"' for datatype :"+c.ne()))}BD(c,834).Fj();return d==null?null:JD(d,172)?''+BD(d,172).a:rb(d)==$J?CQd(Pmd[0],BD(d,199)):fcb(d)} +function zQc(a){var b,c,d,e,f,g,h,i,j,k;j=new Psb;h=new Psb;for(f=new olb(a);f.a-1){for(e=Jsb(h,0);e.b!=e.d.c;){d=BD(Xsb(e),128);d.v=g}while(h.b!=0){d=BD(Vt(h,0),128);for(c=new olb(d.i);c.a0){c+=i.n.a+i.o.a/2;++l}for(o=new olb(i.j);o.a0&&(c/=l);r=KC(UD,Vje,25,d.a.c.length,15,1);h=0;for(j=new olb(d.a);j.a=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i0?(e-=86400000):(e+=86400000);i=new gB(wbb(Cbb(b.q.getTime()),e))}k=new Vfb;j=a.a.length;for(f=0;f=97&&d<=122||d>=65&&d<=90){for(g=f+1;g=j){throw vbb(new Wdb("Missing trailing '"))}g+10&&c.c==0){!b&&(b=new Rkb);b.c[b.c.length]=c}}if(b){while(b.c.length!=0){c=BD(Kkb(b,0),233);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new Rkb),new olb(c.b));f.aJkb(a,c,0)){return new vgd(e,c)}}else if(Edb(REc(e.g,e.d[0]).a)>Edb(REc(c.g,c.d[0]).a)){return new vgd(e,c)}}}for(h=(!c.e&&(c.e=new Rkb),c.e).Kc();h.Ob();){g=BD(h.Pb(),233);i=(!g.b&&(g.b=new Rkb),g.b);wCb(0,i.c.length);aCb(i.c,0,c);g.c==i.c.length&&(b.c[b.c.length]=g,true)}}}return null} +function wlb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return Xhe}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new xwb(She,'[',']');for(e=a,f=0,g=e.length;f=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new Wfb(c.d)):Qfb(c.a,c.b);Nfb(c.a,'[...]')}else{h=CD(d);j=new Vqb(b);uwb(c,wlb(h,j))}}else JD(d,177)?uwb(c,Xlb(BD(d,177))):JD(d,190)?uwb(c,Qlb(BD(d,190))):JD(d,195)?uwb(c,Rlb(BD(d,195))):JD(d,2012)?uwb(c,Wlb(BD(d,2012))):JD(d,48)?uwb(c,Ulb(BD(d,48))):JD(d,364)?uwb(c,Vlb(BD(d,364))):JD(d,832)?uwb(c,Tlb(BD(d,832))):JD(d,104)&&uwb(c,Slb(BD(d,104)))}else{uwb(c,d==null?Xhe:fcb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} +function xQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=itd(b,false,false);r=ofd(h);d&&(r=w7c(r));t=Edb(ED(hkd(b,(CPb(),vPb))));q=(sCb(r.b!=0),BD(r.a.a.c,8));l=BD(Ut(r,1),8);if(r.b>2){k=new Rkb;Gkb(k,new Jib(r,1,r.b));f=sQb(k,t+a.a);s=new XOb(f);tNb(s,b);c.c[c.c.length]=s}else{d?(s=BD(Ohb(a.b,jtd(b)),266)):(s=BD(Ohb(a.b,ltd(b)),266))}i=jtd(b);d&&(i=ltd(b));g=zQb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new f7c(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new f7c((l.a+q.a)/2,l.b)}d?Rhb(a.d,b,new ZOb(s,g,p,j)):Rhb(a.c,b,new ZOb(s,g,p,j));Rhb(a.b,b,s);o=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(n=new Fyd(o);n.e!=n.i.gc();){m=BD(Dyd(n),137);e=wQb(a,m,true,0,0);c.c[c.c.length]=e}} +function wPc(a){var b,c,d,e,f,g,h,i,j,k;j=new Rkb;h=new Rkb;for(g=new olb(a);g.a-1){for(f=new olb(h);f.a0){continue}rOc(i,$wnd.Math.min(i.o,e.o-1));qOc(i,i.i-1);i.i==0&&(h.c[h.c.length]=i,true)}}}} +function QQd(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=FQd);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new nSd(a,1,2,j,a.c);!c?(c=i):c.Ei(i)}if(j!=b){if(JD(a.Cb,284)){if(a.Db>>16==-10){c=BD(a.Cb,284).nk(b,c)}else if(a.Db>>16==-15){!b&&(b=(jGd(),YFd));!j&&(j=(jGd(),YFd));if(a.Cb.nh()){i=new pSd(a.Cb,1,13,j,b,HLd(QSd(BD(a.Cb,59)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,88)){if(a.Db>>16==-23){JD(b,88)||(b=(jGd(),_Fd));JD(j,88)||(j=(jGd(),_Fd));if(a.Cb.nh()){i=new pSd(a.Cb,1,10,j,b,HLd(VKd(BD(a.Cb,26)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,444)){h=BD(a.Cb,836);g=(!h.b&&(h.b=new RYd(new NYd)),h.b);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,h),c)}}}return c} +function O1b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Ccb(DD(hkd(a,(Nyc(),fxc))));m=BD(hkd(a,Yxc),21);i=false;j=false;l=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=BD(Dyd(l),118);h=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!f.d&&(f.d=new y5d(B2,f,8,5)),f.d),(!f.e&&(f.e=new y5d(B2,f,7,4)),f.e)])));Qr(e);){d=BD(Rr(e),79);k=g&&Qld(d)&&Ccb(DD(hkd(d,gxc)));c=ELd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),f)?a==Xod(atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))):a==Xod(atd(BD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),82)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((rcd(),ncd))&&(!f.n&&(f.n=new cUd(D2,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((Orc(),Hrc));j&&b.Fc((Orc(),Irc))} +function zfd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=BD(hkd(a,(Y9c(),Y8c)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((tdd(),rdd))){k=BD(hkd(a,t9c),98);d=2;c=2;e=2;f=2;b=!Xod(a)?BD(hkd(a,z8c),103):BD(hkd(Xod(a),z8c),103);for(j=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));j.e!=j.i.gc();){i=BD(Dyd(j),118);l=BD(hkd(i,A9c),61);if(l==(Ucd(),Scd)){l=lfd(i,b);jkd(i,A9c,l)}if(k==(dcd(),$bd)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Afd(a,h,g,true,true)} +function lnc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=BD(GAb(VAb(JAb(new YAb(null,new Kub(b.d,16)),new pnc(c)),new rnc(c)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);l=Ohe;k=Rie;for(i=new olb(b.b.j);i.a0;if(j){if(j){m=r.p;g?++m:--m;l=BD(Ikb(r.c.a,m),10);d=I4b(l);n=!(s6c(d,w,c[0])||n6c(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p0&&(b.a+=She,b);yfd(BD(Dyd(h),160),b)}b.a+=gne;i=new Oyd((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=She,b);yfd(BD(Dyd(i),160),b)}b.a+=')'}}} +function y2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=BD(vNb(a,(wtc(),$sc)),79);if(!f){return}d=a.a;e=new g7c(c);P6c(e,C2b(a));if(f_b(a.d.i,a.c.i)){m=a.c;l=l7c(OC(GC(m1,1),nie,8,0,[m.n,m.a]));c7c(l,c)}else{l=A0b(a.c)}Gsb(d,l,d.a,d.a.a);n=A0b(a.d);vNb(a,utc)!=null&&P6c(n,BD(vNb(a,utc),8));Gsb(d,n,d.c.b,d.c);q7c(d,e);g=itd(f,true,true);kmd(g,BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));lmd(g,BD(qud((!f.c&&(f.c=new y5d(z2,f,5,8)),f.c),0),82));ifd(d,g);for(k=new olb(a.b);k.a=0){i=null;h=new Bib(k.a,j+1);while(h.bg?1:Ny(isNaN(0),isNaN(g)))<0&&(null,My(Jqe),($wnd.Math.abs(g-1)<=Jqe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:Ny(isNaN(g),isNaN(1)))<0)&&(null,My(Jqe),($wnd.Math.abs(0-h)<=Jqe||0==h||isNaN(0)&&isNaN(h)?0:0h?1:Ny(isNaN(0),isNaN(h)))<0)&&(null,My(Jqe),($wnd.Math.abs(h-1)<=Jqe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Ny(isNaN(h),isNaN(1)))<0));return f} +function z6d(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new usb(new nsb(a));l.b!=l.c.a.d;){k=tsb(l);h=BD(k.d,56);b=BD(k.e,56);g=h.Tg();for(p=0,u=(g.i==null&&TKd(g),g.i).length;p=0&&p=j.c.c.length?(k=JJc((j0b(),h0b),g0b)):(k=JJc((j0b(),g0b),g0b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} +function VNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;v=Hx(a);k=new Rkb;h=a.c.length;l=h-1;m=h+1;while(v.a.c!=0){while(c.b!=0){t=(sCb(c.b!=0),BD(Nsb(c,c.a.a),112));Jwb(v.a,t)!=null;t.g=l--;YNc(t,b,c,d)}while(b.b!=0){u=(sCb(b.b!=0),BD(Nsb(b,b.a.a),112));Jwb(v.a,u)!=null;u.g=m++;YNc(u,b,c,d)}j=Rie;for(r=(g=new Ywb((new cxb((new Gjb(v.a)).a)).b),new Njb(g));sib(r.a.a);){q=(f=Wwb(r.a),BD(f.cd(),112));if(!d&&q.b>0&&q.a<=0){k.c=KC(SI,Uhe,1,0,5,1);k.c[k.c.length]=q;break}p=q.i-q.d;if(p>=j){if(p>j){k.c=KC(SI,Uhe,1,0,5,1);j=p}k.c[k.c.length]=q}}if(k.c.length!=0){i=BD(Ikb(k,Bub(e,k.c.length)),112);Jwb(v.a,i)!=null;i.g=m++;YNc(i,b,c,d);k.c=KC(SI,Uhe,1,0,5,1)}}s=a.c.length+1;for(o=new olb(a);o.a0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m} +function d6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new f7c(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new olb(a.a);j.a0){a.c[b.c.p][b.p].d+=Cub(a.i,24)*lke*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}} +function m5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new olb(a);o.ad.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}} +function l3b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new olb(a);j.a0||k.j==Tcd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new olb(k.g);e.a=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new olb(s.e);g.a=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}} +function oMc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.b);e.aQje||b.o==cMc&&k0&&dld(r,u*w);v>0&&eld(r,v*A)}stb(a.b,new CQb);b=new Rkb;for(h=new nib((new eib(a.c)).a);h.b;){g=lib(h);d=BD(g.cd(),79);c=BD(g.dd(),395).a;e=itd(d,false,false);l=oQb(jtd(d),ofd(e),c);ifd(l,e);t=ktd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.a.a.c,8)),c)}}for(q=new nib((new eib(a.d)).a);q.b;){p=lib(q);d=BD(p.cd(),79);c=BD(p.dd(),395).a;e=itd(d,false,false);l=oQb(ltd(d),w7c(ofd(e)),c);l=w7c(l);ifd(l,e);t=mtd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.c.b.c,8)),c)}}} +function _Vc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new Rkb;for(n=new olb(c);n.a1){n=new ZQc(o,t,d);reb(t,new PQc(a,n));g.c[g.c.length]=n;for(l=t.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}if(h.a.gc()>1){n=new ZQc(o,h,d);reb(h,new RQc(a,n));g.c[g.c.length]=n;for(l=h.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}}} +function $Wc(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,sre),'ELK Radial'),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new bXc),sre)));p4c(a,sre,uqe,Ksd(UWc));p4c(a,sre,wme,Ksd(XWc));p4c(a,sre,Fme,Ksd(NWc));p4c(a,sre,Tme,Ksd(OWc));p4c(a,sre,Eme,Ksd(PWc));p4c(a,sre,Gme,Ksd(MWc));p4c(a,sre,Dme,Ksd(QWc));p4c(a,sre,Hme,Ksd(TWc));p4c(a,sre,ore,Ksd(KWc));p4c(a,sre,nre,Ksd(LWc));p4c(a,sre,rre,Ksd(RWc));p4c(a,sre,lre,Ksd(SWc));p4c(a,sre,mre,Ksd(VWc));p4c(a,sre,pre,Ksd(WWc));p4c(a,sre,qre,Ksd(YWc))} +function LIb(a){var b;this.r=Cy(new OIb,new SIb);this.b=new Rpb(BD(Qb(F1),290));this.p=new Rpb(BD(Qb(F1),290));this.i=new Rpb(BD(Qb(DN),290));this.e=a;this.o=new g7c(a.rf());this.D=a.Df()||Ccb(DD(a.We((Y9c(),M8c))));this.A=BD(a.We((Y9c(),Y8c)),21);this.B=BD(a.We(b9c),21);this.q=BD(a.We(t9c),98);this.u=BD(a.We(x9c),21);if(!ucd(this.u)){throw vbb(new y2c('Invalid port label placement: '+this.u))}this.v=Ccb(DD(a.We(z9c)));this.j=BD(a.We(W8c),21);if(!Jbd(this.j)){throw vbb(new y2c('Invalid node label placement: '+this.j))}this.n=BD(bgd(a,U8c),116);this.k=Edb(ED(bgd(a,Q9c)));this.d=Edb(ED(bgd(a,P9c)));this.w=Edb(ED(bgd(a,X9c)));this.s=Edb(ED(bgd(a,R9c)));this.t=Edb(ED(bgd(a,S9c)));this.C=BD(bgd(a,V9c),142);this.c=2*this.d;b=!this.B.Hc((Idd(),zdd));this.f=new mIb(0,b,0);this.g=new mIb(1,b,0);lIb(this.f,(gHb(),eHb),this.g)} +function Lgd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);m+=sr(new Sr(ur(_sd(q).a.Kc(),new Sq)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);C=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(i-q.g);D=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(h-q.f);dld(q,C);eld(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));v.e!=v.i.gc();){u=BD(Dyd(v),33);for(k=new Sr(ur(_sd(u).a.Kc(),new Sq));Qr(k);){j=BD(Rr(k),79);Pld(j)||Kgd(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Afd(a,A,w,false,true)} +function Jcb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw vbb(new Oeb(Xhe))}j=a;f=a.length;i=false;if(f>0){b=(BCb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=a.substr(1);--f;i=b==45}}if(f==0){throw vbb(new Oeb(Oje+j+'"'))}while(a.length>0&&(BCb(0,a.length),a.charCodeAt(0)==48)){a=a.substr(1);--f}if(f>(Neb(),Leb)[10]){throw vbb(new Oeb(Oje+j+'"'))}for(e=0;e0){l=-parseInt(a.substr(0,d),10);a=a.substr(d);f-=d;c=false}while(f>=g){d=parseInt(a.substr(0,g),10);a=a.substr(g);f-=g;if(c){c=false}else{if(ybb(l,h)<0){throw vbb(new Oeb(Oje+j+'"'))}l=Ibb(l,k)}l=Qbb(l,d)}if(ybb(l,0)>0){throw vbb(new Oeb(Oje+j+'"'))}if(!i){l=Jbb(l);if(ybb(l,0)<0){throw vbb(new Oeb(Oje+j+'"'))}}return l} +function Z6d(a,b){X6d();var c,d,e,f,g,h,i;this.a=new a7d(this);this.b=a;this.c=b;this.f=c2d(q1d((O6d(),M6d),b));if(this.f.dc()){if((h=t1d(M6d,a))==b){this.e=true;this.d=new Rkb;this.f=new oFd;this.f.Fc(Ewe);BD(V1d(p1d(M6d,bKd(a)),''),26)==a&&this.f.Fc(u1d(M6d,bKd(a)));for(e=g1d(M6d,a).Kc();e.Ob();){d=BD(e.Pb(),170);switch($1d(q1d(M6d,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(c2d(q1d(M6d,d)));break}}}}else{Q6d();if(BD(b,66).Oj()){this.e=true;this.f=null;this.d=new Rkb;for(g=0,i=(a.i==null&&TKd(a),a.i).length;g=0&&g0&&(BD(Mpb(a.b,b),124).a.b=c)} +function b3b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Comment pre-processing',1);c=0;i=new olb(a.a);while(i.a0){j=(BCb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BCb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=c.substr(1,m-1);u=dfb('%',h)?null:QEd(h);e=0;if(k){try{e=Icb(c.substr(m+2),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){i=a;throw vbb(new rFd(i))}else throw vbb(a)}}for(r=pRd(b.Wg());r.Ob();){p=MRd(r);if(JD(p,510)){f=BD(p,590);t=f.d;if((u==null?t==null:dfb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:c.substr(0,l);d=0;if(l!=-1){try{d=Icb(c.substr(l+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){o=c}else throw vbb(a)}}o=dfb('%',o)?null:QEd(o);for(q=pRd(b.Wg());q.Ob();){p=MRd(q);if(JD(p,191)){g=BD(p,191);s=g.ne();if((o==null?s==null:dfb(o,s))&&d--==0){return g}}}return null}}return rid(b,c)} +function f6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new Rkb;for(o=new olb(a.b);o.a=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!xrb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[hke]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function cde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=KC(TD,$ie,25,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2|q];f[g++]=_ce[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2];f[g++]=61}return zfb(f,0,f.length)} +function mB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>Rie&&dB(b,a.p-nje);g=b.q.getDate();ZA(b,1);a.k>=0&&aB(b,a.k);if(a.c>=0){ZA(b,a.c)}else if(a.k>=0){i=new fB(b.q.getFullYear()-nje,b.q.getMonth(),35);d=35-i.q.getDate();ZA(b,$wnd.Math.min(d,g))}else{ZA(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);$A(b,a.f==24&&a.g?0:a.f);a.j>=0&&_A(b,a.j);a.n>=0&&bB(b,a.n);a.i>=0&&cB(b,wbb(Ibb(Abb(Cbb(b.q.getTime()),_ie),_ie),a.i));if(a.a){e=new eB;dB(e,e.q.getFullYear()-nje-80);Gbb(Cbb(b.q.getTime()),Cbb(e.q.getTime()))&&dB(b,e.q.getFullYear()-nje+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();ZA(b,b.q.getDate()+c);b.q.getMonth()!=h&&ZA(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>Rie){f=b.q.getTimezoneOffset();cB(b,wbb(Cbb(b.q.getTime()),(a.o-f)*60*_ie))}return true} +function z2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=vNb(b,(wtc(),$sc));if(!JD(e,239)){return}o=BD(e,33);p=b.e;m=new g7c(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=BD(hkd(o,(Nyc(),Ixc)),174);if(uqb(u,(Idd(),Add))){n=BD(hkd(o,Kxc),116);w_b(n,f.a);z_b(n,f.d);x_b(n,f.b);y_b(n,f.c)}c=new Rkb;for(k=new olb(b.a);k.a0&&Ekb(a.p,k);Ekb(a.o,k)}b-=d;n=i+b;j+=b*a.e;Nkb(a.a,h,meb(n));Nkb(a.b,h,j);a.j=$wnd.Math.max(a.j,n);a.k=$wnd.Math.max(a.k,j);a.d+=b;b+=p}} +function Ucd(){Ucd=ccb;var a;Scd=new Ycd(ole,0);Acd=new Ycd(xle,1);zcd=new Ycd(yle,2);Rcd=new Ycd(zle,3);Tcd=new Ycd(Ale,4);Fcd=(mmb(),new zob((a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0))));Gcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[])));Bcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[])));Ocd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[])));Qcd=Up(qqb(Tcd,OC(GC(F1,1),bne,61,0,[])));Lcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd])));Ecd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ncd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Tcd])));Hcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd])));Pcd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ccd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd])));Kcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Tcd])));Dcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Mcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Icd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd])));Jcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd])))} +function fSc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Psb;h=null;o=null;d=QD($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Jsb(b,0);t.b!=t.d.c;){r=BD(Xsb(t),86);if(PD(o)!==PD(vNb(r,(mTc(),$Sc)))){o=GD(vNb(r,$Sc));i=0}o!=null?(h=o+iSc(i++,d)):(h=iSc(i++,d));yNb(r,$Sc,h);for(q=(e=Jsb((new ZRc(r)).a.d,0),new aSc(e));Wsb(q.a);){p=BD(Xsb(q.a),188).c;Gsb(n,p,n.c.b,n.c);yNb(p,$Sc,h)}}m=new Lqb;for(g=0;g=i){sCb(r.b>0);r.a.Xb(r.c=--r.b);break}else if(p.a>j){if(!e){Ekb(p.b,l);p.c=$wnd.Math.min(p.c,j);p.a=$wnd.Math.max(p.a,i);e=p}else{Gkb(e.b,p.b);e.a=$wnd.Math.max(e.a,p.a);uib(r)}}}if(!e){e=new TCc;e.c=j;e.a=i;Aib(r,e);Ekb(e.b,l)}}h=b.b;k=0;for(q=new olb(d);q.ah?1:0}if(a.b){a.b._b(f)&&(e=BD(a.b.xc(f),19).a);a.b._b(i)&&(h=BD(a.b.xc(i),19).a)}return eh?1:0}return b.e.c.length!=0&&c.g.c.length!=0?1:-1} +function acc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;Odd(b,Ine,1);p=new Rkb;w=new Rkb;for(j=new olb(a.b);j.a0&&(t-=n);h_b(g,t);k=0;for(m=new olb(g.a);m.a0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.bb.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}}}}} +function QEd(a){IEd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=hfb(a,wfb(37));if(e<0){return a}else{i=new Wfb(a.substr(0,e));b=KC(SD,wte,25,4,15,1);h=0;d=0;for(g=a.length;ee+2&&_Ed((BCb(e+1,a.length),a.charCodeAt(e+1)),xEd,yEd)&&_Ed((BCb(e+2,a.length),a.charCodeAt(e+2)),xEd,yEd)){c=dFd((BCb(e+1,a.length),a.charCodeAt(e+1)),(BCb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Kfb(i,((b[0]&31)<<6|b[1]&63)&aje);break}case 3:{Kfb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&aje);break}}h=0;d=0}}else{for(f=0;f0){if(g+d>a.length){return false}h=rA(a.substr(0,g+d),b)}else{h=rA(a,b)}}switch(f){case 71:h=oA(a,g,OC(GC(ZI,1),nie,2,6,[pje,qje]),b);e.e=h;return true;case 77:return zA(a,b,e,h,g);case 76:return BA(a,b,e,h,g);case 69:return xA(a,b,g,e);case 99:return AA(a,b,g,e);case 97:h=oA(a,g,OC(GC(ZI,1),nie,2,6,['AM','PM']),b);e.b=h;return true;case 121:return DA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return yA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(gw&&(o.c=w-o.b);Ekb(g.d,new BLb(o,bLb(g,o)));s=b==Acd?$wnd.Math.max(s,p.b+j.b.rf().b):$wnd.Math.min(s,p.b)}s+=b==Acd?a.t:-a.t;t=cLb((g.e=s,g));t>0&&(BD(Mpb(a.b,b),124).a.b=t);for(k=m.Kc();k.Ob();){j=BD(k.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} +function SPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Lqb;for(i=new Fyd(a);i.e!=i.i.gc();){h=BD(Dyd(i),33);c=new Tqb;Rhb(OPb,h,c);n=new aQb;e=BD(GAb(new YAb(null,new Lub(new Sr(ur($sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)])))),83);RPb(c,BD(e.xc((Bcb(),true)),14),new cQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new eQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),79);m=ktd(f);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}e=BD(GAb(new YAb(null,new Lub(new Sr(ur(_sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb])))),83);RPb(c,BD(e.xc(true),14),new gQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new iQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(l=d.Kc();l.Ob();){k=BD(l.Pb(),79);m=mtd(k);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}}} +function rhb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=ybb(a,0)<0;i&&(a=Jbb(a));if(ybb(a,0)==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:n=new Ufb;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==Rie?'2147483648':''+-b;return n.a;}}k=18;l=KC(TD,$ie,25,k+1,15,1);c=k;p=a;do{j=p;p=Abb(p,10);l[--c]=Tbb(wbb(48,Qbb(j,Ibb(p,10))))&aje}while(ybb(p,0)!=0);e=Qbb(Qbb(Qbb(k,c),b),1);if(b==0){i&&(l[--c]=45);return zfb(l,c,k-c)}if(b>0&&ybb(e,-6)>=0){if(ybb(e,0)>=0){f=c+Tbb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return zfb(l,c,k-c+1)}for(g=2;Gbb(g,wbb(Jbb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return zfb(l,c,k-c)}o=c+1;d=k;m=new Vfb;i&&(m.a+='-',m);if(d-o>=1){Kfb(m,l[c]);m.a+='.';m.a+=zfb(l,c+1,k-c-1)}else{m.a+=zfb(l,c,k-c)}m.a+='E';ybb(e,0)>0&&(m.a+='+',m);m.a+=''+Ubb(e);return m.a} +function iQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c=KC(SI,Uhe,1,0,5,1);a.i.c=KC(SI,Uhe,1,0,5,1);a.g.a.$b();if(b){for(g=new olb(b.a);g.a=1){if(v-j>0&&o>=0){dld(l,l.i+u);eld(l,l.j+i*j)}else if(v-j<0&&n>=0){dld(l,l.i+u*v);eld(l,l.j+i)}}}}jkd(a,(Y9c(),Y8c),(tdd(),f=BD(gdb(I1),9),new xqb(f,BD(_Bb(f,f.length),9),0)));return new f7c(w,k)} +function Yfd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));o=Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)));l=n==o;h=new d7c;b=BD(hkd(a,(Zad(),Sad)),74);if(!!b&&b.b>=2){if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){c=(Fhd(),e=new rmd,e);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){m=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(m.e!=m.i.gc()){Eyd(m)}}ifd(b,BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202))}if(l){for(d=new Fyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));d.e!=d.i.gc();){c=BD(Dyd(d),202);for(j=new Fyd((!c.a&&(c.a=new xMd(y2,c,5)),c.a));j.e!=j.i.gc();){i=BD(Dyd(j),469);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=BD(hkd(f,Yad),8);!!k&&bld(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} +function yMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new ULc(a.a,c,null,null);B=KC(UD,Vje,25,t,15,1);p=KC(UD,Vje,25,t,15,1);o=KC(UD,Vje,25,t,15,1);q=0;for(h=0;hB[i]&&(q=i);for(l=new olb(a.a.b);l.an){if(f){Fsb(w,m);Fsb(B,meb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}dld(h,H);eld(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(Fqme;C=$wnd.Math.abs(m.b-o.b)>qme;(!c&&B&&C||c&&(B||C))&&Dsb(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sCb(d.b!=0),BD(d.c.b.c,8)));bZb(n,l,p);if(AZb(e)==A){if(Q_b(A.i)!=e.a){p=new d7c;Y$b(p,Q_b(A.i),s)}yNb(q,utc,p)}cZb(n,q,s);k.a.zc(n,k)}QZb(q,v);RZb(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=BD(j.Pb(),17);QZb(i,null);RZb(i,null)}Qdd(b)} +function KQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return BD(a.Xb(0),231)}else if(a.gc()<=0){return new kRb}for(e=a.Kc();e.Ob();){c=BD(e.Pb(),231);o=0;k=Ohe;l=Ohe;i=Rie;j=Rie;for(n=new olb(c.e);n.ah){t=0;u+=g+r;g=0}JQb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} +function Ioc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new s7c;switch(a.a.g){case 3:m=BD(vNb(b.e,(wtc(),rtc)),15);n=BD(vNb(b.j,rtc),15);o=BD(vNb(b.f,rtc),15);c=BD(vNb(b.e,ptc),15);d=BD(vNb(b.j,ptc),15);e=BD(vNb(b.f,ptc),15);g=new Rkb;Gkb(g,m);n.Jc(new Loc);Gkb(g,JD(n,152)?km(BD(n,152)):JD(n,131)?BD(n,131).a:JD(n,54)?new ov(n):new dv(n));Gkb(g,o);f=new Rkb;Gkb(f,c);Gkb(f,JD(d,152)?km(BD(d,152)):JD(d,131)?BD(d,131).a:JD(d,54)?new ov(d):new dv(d));Gkb(f,e);yNb(b.f,rtc,g);yNb(b.f,ptc,f);yNb(b.f,stc,b.f);yNb(b.e,rtc,null);yNb(b.e,ptc,null);yNb(b.j,rtc,null);yNb(b.j,ptc,null);break;case 1:ye(k,b.e.a);Dsb(k,b.i.n);ye(k,Su(b.j.a));Dsb(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,Su(b.j.a));ye(k,b.f.a);}Osb(b.f.a);ye(b.f.a,k);QZb(b.f,b.e.c);h=BD(vNb(b.e,(Nyc(),jxc)),74);j=BD(vNb(b.j,jxc),74);i=BD(vNb(b.f,jxc),74);if(!!h||!!j||!!i){l=new s7c;Goc(l,i);Goc(l,j);Goc(l,h);yNb(b.f,jxc,l)}QZb(b.j,null);RZb(b.j,null);QZb(b.e,null);RZb(b.e,null);$_b(b.a,null);$_b(b.i,null);!!b.g&&Ioc(a,b.g)} +function bde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=rfb(a);o=ede(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return KC(SD,wte,25,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=KC(SD,wte,25,p*3,15,1);for(;n>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!dde(g=f[k++])||!dde(h=f[k++])){return null}b=$ce[g];c=$ce[h];i=f[k++];j=f[k++];if($ce[i]==-1||$ce[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=KC(SD,wte,25,n*3+1,15,1);$fb(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=$ce[i];if((d&3)!=0)return null;q=KC(SD,wte,25,n*3+2,15,1);$fb(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} +function Sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(b,Ine,1);o=BD(vNb(a,(Nyc(),Swc)),218);for(e=new olb(a.b);e.a=2){p=true;m=new olb(f.j);c=BD(mlb(m),11);n=null;while(m.a0){e=BD(Ikb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(jBc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=Pje;if(w0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.aA.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} +function XGb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new J6c(b.qf().a,b.qf().b,b.rf().a,b.rf().b);e=new I6c;if(a.c){for(g=new olb(b.wf());g.aj&&(d.a+=yfb(KC(TD,$ie,25,-j,15,1)));d.a+='Is';if(hfb(i,wfb(32))>=0){for(e=0;e=d.o.b/2}else{s=!l}if(s){r=BD(vNb(d,(wtc(),vtc)),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else if(m){f=r}else{e=BD(vNb(d,tsc),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=BD(vNb(d,(wtc(),tsc)),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else if(l){f=e}else{r=BD(vNb(d,vtc),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);yNb(a,(wtc(),vsc),c);if(b.d==c){RZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null);d3b(c)}else{QZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null)}Osb(b.a)} +function aoc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Bib(a.b,0);k=b.Kc();o=0;j=BD(k.Pb(),19).a;v=0;c=new Tqb;A=new zsb;while(s.b=a.a){d=E6b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Ekb(h,new vgd(s,d))}}B=new Rkb;for(j=0;j0),q.a.Xb(q.c=--q.b),C=new H1b(a.b),Aib(q,C),sCb(q.b0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,jQc(t,g,s,A)));if(j0){m=k<100?null:new Ixd(k);j=new Aud(b);o=j.g;r=KC(WD,oje,25,k,15,1);d=0;u=new zud(k);for(e=0;e=0;){if(n!=null?pb(n,o[i]):PD(n)===PD(o[i])){if(r.length<=d){q=r;r=KC(WD,oje,25,2*r.length,15,1);$fb(q,0,r,0,d)}r[d++]=e;wtd(u,o[i]);break v}}n=n;if(PD(n)===PD(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}if(d>0){t=true;for(f=0;f=0;){tud(a,r[g])}if(d!=k){for(e=k;--e>=d;){tud(j,e)}q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}b=j}}}else{b=Ctd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){tud(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?FLd(a,4,b.Kc().Pb(),null,r[0],p):FLd(a,6,b,r,r[0],p);m=c<100?null:new Ixd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}if(!m){Uhd(a.e,l)}else{m.Ei(l);m.Fi()}}else{m=Vxd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}!!m&&m.Fi()}return true}else{return false}} +function fYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new mYb(b);c.a||$Xb(b);j=ZXb(b);i=new Hp;q=new AYb;for(p=new olb(b.a);p.a0||c.o==dMc&&e0){l=BD(Ikb(m.c.a,g-1),10);B=jBc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(gg?Anc(a,b,c):Anc(a,c,b);return eg?1:0}}d=BD(vNb(b,(wtc(),Zsc)),19).a;f=BD(vNb(c,Zsc),19).a;d>f?Anc(a,b,c):Anc(a,c,b);return df?1:0} +function u2c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;if(Ccb(DD(hkd(b,(Y9c(),d9c))))){return mmb(),mmb(),jmb}j=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0;l=s2c(b);k=!l.dc();if(j||k){e=BD(hkd(b,F9c),149);if(!e){throw vbb(new y2c('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}s=D3c(e,(Csd(),ysd));q2c(b);if(!j&&k&&!s){return mmb(),mmb(),jmb}i=new Rkb;if(PD(hkd(b,J8c))===PD((hbd(),ebd))&&(D3c(e,vsd)||D3c(e,usd))){n=p2c(a,b);o=new Psb;ye(o,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(o.b!=0){m=BD(o.b==0?null:(sCb(o.b!=0),Nsb(o,o.a.a)),33);q2c(m);r=PD(hkd(m,J8c))===PD(gbd);if(r||ikd(m,o8c)&&!C3c(e,hkd(m,F9c))){h=u2c(a,m,c,d);Gkb(i,h);jkd(m,J8c,gbd);hfd(m)}else{ye(o,(!m.a&&(m.a=new cUd(E2,m,10,11)),m.a))}}}else{n=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(g=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);h=u2c(a,f,c,d);Gkb(i,h);hfd(f)}}for(q=new olb(i);q.a=0?(n=Zcd(h)):(n=Wcd(Zcd(h)));a.Ye($xc,n)}j=new d7c;m=false;if(a.Xe(Txc)){a7c(j,BD(a.We(Txc),8));m=true}else{_6c(j,g.a/2,g.b/2)}switch(n.g){case 4:yNb(k,mxc,(Ctc(),ytc));yNb(k,Bsc,(Gqc(),Fqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),zcd));m||(j.a=g.a);j.a-=g.a;break;case 2:yNb(k,mxc,(Ctc(),Atc));yNb(k,Bsc,(Gqc(),Dqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),Tcd));m||(j.a=0);break;case 1:yNb(k,Osc,(esc(),dsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Rcd));m||(j.b=g.b);j.b-=g.b;break;case 3:yNb(k,Osc,(esc(),bsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Acd));m||(j.b=0);}a7c(l.n,j);yNb(k,Txc,j);if(b==Zbd||b==_bd||b==$bd){o=0;if(b==Zbd&&a.Xe(Wxc)){switch(n.g){case 1:case 2:o=BD(a.We(Wxc),19).a;break;case 3:case 4:o=-BD(a.We(Wxc),19).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==_bd&&(o/=e.b);break;case 1:case 3:o=f.a;b==_bd&&(o/=e.a);}}yNb(k,htc,o)}yNb(k,Hsc,n);return k} +function AGc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Edb(ED(vNb(a.a.j,(Nyc(),Ewc))));if(c<-1||!a.a.i||ecd(BD(vNb(a.a.o,Vxc),98))||V_b(a.a.o,(Ucd(),zcd)).gc()<2&&V_b(a.a.o,Tcd).gc()<2){return true}if(a.a.c.Rf()){return false}v=0;u=0;t=new Rkb;for(i=a.a.e,j=0,k=i.length;j=c} +function ovd(){mvd();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=pvd((mmb(),new lnb(new $ib(lvd.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=pvd((mmb(),new lnb(new $ib(lvd.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=pvd((mmb(),new lnb(new $ib(lvd.d))));f.postMessage({id:b.id,data:e});break;case 'register':svd(b.algorithms);f.postMessage({id:b.id});break;case 'layout':qvd(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}} +function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} +if(typeof document===uke&&typeof self!==uke){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==uke&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} +function aae(a){if(a.N)return;a.N=true;a.b=Lnd(a,0);Knd(a.b,0);Knd(a.b,1);Knd(a.b,2);a.bb=Lnd(a,1);Knd(a.bb,0);Knd(a.bb,1);a.fb=Lnd(a,2);Knd(a.fb,3);Knd(a.fb,4);Qnd(a.fb,5);a.qb=Lnd(a,3);Knd(a.qb,0);Qnd(a.qb,1);Qnd(a.qb,2);Knd(a.qb,3);Knd(a.qb,4);Qnd(a.qb,5);Knd(a.qb,6);a.a=Mnd(a,4);a.c=Mnd(a,5);a.d=Mnd(a,6);a.e=Mnd(a,7);a.f=Mnd(a,8);a.g=Mnd(a,9);a.i=Mnd(a,10);a.j=Mnd(a,11);a.k=Mnd(a,12);a.n=Mnd(a,13);a.o=Mnd(a,14);a.p=Mnd(a,15);a.q=Mnd(a,16);a.s=Mnd(a,17);a.r=Mnd(a,18);a.t=Mnd(a,19);a.u=Mnd(a,20);a.v=Mnd(a,21);a.w=Mnd(a,22);a.B=Mnd(a,23);a.A=Mnd(a,24);a.C=Mnd(a,25);a.D=Mnd(a,26);a.F=Mnd(a,27);a.G=Mnd(a,28);a.H=Mnd(a,29);a.J=Mnd(a,30);a.I=Mnd(a,31);a.K=Mnd(a,32);a.M=Mnd(a,33);a.L=Mnd(a,34);a.P=Mnd(a,35);a.Q=Mnd(a,36);a.R=Mnd(a,37);a.S=Mnd(a,38);a.T=Mnd(a,39);a.U=Mnd(a,40);a.V=Mnd(a,41);a.X=Mnd(a,42);a.W=Mnd(a,43);a.Y=Mnd(a,44);a.Z=Mnd(a,45);a.$=Mnd(a,46);a._=Mnd(a,47);a.ab=Mnd(a,48);a.cb=Mnd(a,49);a.db=Mnd(a,50);a.eb=Mnd(a,51);a.gb=Mnd(a,52);a.hb=Mnd(a,53);a.ib=Mnd(a,54);a.jb=Mnd(a,55);a.kb=Mnd(a,56);a.lb=Mnd(a,57);a.mb=Mnd(a,58);a.nb=Mnd(a,59);a.ob=Mnd(a,60);a.pb=Mnd(a,61)} +function f5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new olb(a);q.aj&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length==0){Lkb(b,(tCb(j,b.c.length),b.c[j]))}}if(!i){--f;continue}if(uZc(b,k,e,i,m,c,j,d)){l=true;continue}if(m){if(vZc(b,k,e,i,c,j,d)){l=true;continue}else if(wZc(k,e)){e.c=true;l=true;continue}}else if(wZc(k,e)){e.c=true;l=true;continue}if(l){continue}}if(wZc(k,e)){e.c=true;l=true;!!i&&(i.k=false);continue}else{a$c(e.q)}}return l} +function fed(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new olb(a.b);j.ap){if(f){Fsb(w,n);Fsb(B,meb(k.b-1));Ekb(a.d,o);h.c=KC(SI,Uhe,1,0,5,1)}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}h.c[h.c.length]=i;ued(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Gkb(a.a,h);Ekb(a.d,BD(Ikb(h,h.c.length-1),157));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,1),8).b-k.b)))}}}}}else{for(p=new olb(b.j);p.ae){f=m.a-e;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=m.a}if(m.a>=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new H0b;F0b(n,b);G0b(n,(Ucd(),Acd));n.n.a=b.o.a/2;r=new H0b;F0b(r,b);G0b(r,Rcd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new olb(d);i.a=j.b?QZb(h,r):QZb(h,n)}else{j=BD(Msb(h.a),8);q=h.a.b==0?A0b(h.c):BD(Isb(h.a),8);q.b>=j.b?RZb(h,r):RZb(h,n)}l=BD(vNb(h,(Nyc(),jxc)),74);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}} +function erd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=Rqd(a,dtd(c),G);Lkd(F,_pd(G,Vte));H=BD(oo(a.g,Vpd(aC(G,Cte))),33);m=aC(G,'sourcePort');d=null;!!m&&(d=Vpd(m));I=BD(oo(a.j,d),118);if(!H){h=Wpd(G);o="An edge must have a source node (edge id: '"+h;p=o+$te;throw vbb(new cqd(p))}if(!!I&&!Hb(mpd(I),H)){i=_pd(G,Vte);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+$te;throw vbb(new cqd(r))}B=(!F.b&&(F.b=new y5d(z2,F,4,7)),F.b);f=null;I?(f=I):(f=H);wtd(B,f);J=BD(oo(a.g,Vpd(aC(G,bue))),33);n=aC(G,'targetPort');e=null;!!n&&(e=Vpd(n));K=BD(oo(a.j,e),118);if(!J){l=Wpd(G);s="An edge must have a target node (edge id: '"+l;t=s+$te;throw vbb(new cqd(t))}if(!!K&&!Hb(mpd(K),J)){j=_pd(G,Vte);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+$te;throw vbb(new cqd(v))}C=(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c);g=null;K?(g=K):(g=J);wtd(C,g);if((!F.b&&(F.b=new y5d(z2,F,4,7)),F.b).i==0||(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c).i==0){k=_pd(G,Vte);w=Zte+k;A=w+$te;throw vbb(new cqd(A))}grd(G,F);frd(G,F);D=crd(a,G,F);return D} +function DXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=FXb(zXb(a,(Ucd(),Fcd)),b);o=EXb(zXb(a,Gcd),b);u=EXb(zXb(a,Ocd),b);B=GXb(zXb(a,Qcd),b);m=GXb(zXb(a,Bcd),b);s=EXb(zXb(a,Ncd),b);p=EXb(zXb(a,Hcd),b);w=EXb(zXb(a,Pcd),b);v=EXb(zXb(a,Ccd),b);C=GXb(zXb(a,Ecd),b);r=EXb(zXb(a,Lcd),b);t=EXb(zXb(a,Kcd),b);A=EXb(zXb(a,Dcd),b);D=GXb(zXb(a,Mcd),b);n=GXb(zXb(a,Icd),b);q=EXb(zXb(a,Jcd),b);c=w6c(OC(GC(UD,1),Vje,25,15,[s.a,B.a,w.a,D.a]));d=w6c(OC(GC(UD,1),Vje,25,15,[o.a,l.a,u.a,q.a]));e=r.a;f=w6c(OC(GC(UD,1),Vje,25,15,[p.a,m.a,v.a,n.a]));j=w6c(OC(GC(UD,1),Vje,25,15,[s.b,o.b,p.b,t.b]));i=w6c(OC(GC(UD,1),Vje,25,15,[B.b,l.b,m.b,q.b]));k=C.b;h=w6c(OC(GC(UD,1),Vje,25,15,[w.b,u.b,v.b,A.b]));vXb(zXb(a,Fcd),c+e,j+k);vXb(zXb(a,Jcd),c+e,j+k);vXb(zXb(a,Gcd),c+e,0);vXb(zXb(a,Ocd),c+e,j+k+i);vXb(zXb(a,Qcd),0,j+k);vXb(zXb(a,Bcd),c+e+d,j+k);vXb(zXb(a,Hcd),c+e+d,0);vXb(zXb(a,Pcd),0,j+k+i);vXb(zXb(a,Ccd),c+e+d,j+k+i);vXb(zXb(a,Ecd),0,j);vXb(zXb(a,Lcd),c,0);vXb(zXb(a,Dcd),0,j+k+i);vXb(zXb(a,Icd),c+e+d,0);g=new d7c;g.a=w6c(OC(GC(UD,1),Vje,25,15,[c+d+e+f,C.a,t.a,A.a]));g.b=w6c(OC(GC(UD,1),Vje,25,15,[j+i+k+h,r.b,D.b,n.b]));return g} +function Ngc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new Rkb;for(m=new olb(a.d.b);m.ae.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=BD(Ohb(a.f,g.d.i),57);if(b.bf.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new Sr(ur(R_b(n).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(g.a.b!=0){b=BD(Isb(g.a),8);if(g.d.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;p.c[p.c.length]=q}if(g.d.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;p.c[p.c.length]=q}}}}}return p} +function WJc(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Network simplex node placement',1);a.e=b;a.n=BD(vNb(b,(wtc(),otc)),304);VJc(a);HJc(a);MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new KKc),new MKc(a));MAb(JAb(LAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new zLc),new BLc),new DLc),new FLc),new IKc(a));if(Ccb(DD(vNb(a.e,(Nyc(),Axc))))){g=Udd(c,1);Odd(g,'Straight Edges Pre-Processing',1);UJc(a);Qdd(g)}JFb(a.f);f=BD(vNb(b,Ayc),19).a*a.f.a.c.length;uGb(HGb(IGb(LGb(a.f),f),false),Udd(c,1));if(a.d.a.gc()!=0){g=Udd(c,1);Odd(g,'Flexible Where Space Processing',1);h=BD(Btb(RAb(NAb(new YAb(null,new Kub(a.f.a,16)),new OKc),new iKc)),19).a;i=BD(Btb(QAb(NAb(new YAb(null,new Kub(a.f.a,16)),new QKc),new mKc)),19).a;j=i-h;k=nGb(new pGb,a.f);l=nGb(new pGb,a.f);AFb(DFb(CFb(BFb(EFb(new FFb,20000),j),k),l));MAb(JAb(JAb(Plb(a.i),new SKc),new UKc),new WKc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=BD(e.Pb(),213);d.g=1}uGb(HGb(IGb(LGb(a.f),f),false),Udd(g,1));Qdd(g)}if(Ccb(DD(vNb(b,Axc)))){g=Udd(c,1);Odd(g,'Straight Edges Post-Processing',1);TJc(a);Qdd(g)}GJc(a);a.e=null;a.f=null;a.i=null;a.c=null;Uhb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();Qdd(c)} +function lMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new olb(a.a.b);h.a0){d=l.gc();j=QD($wnd.Math.floor((d+1)/2))-1;e=QD($wnd.Math.ceil((d+1)/2))-1;if(b.o==dMc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=BD(l.Xb(k),46);o=BD(p.a,10);if(!Rqb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=BD(l.Xb(k),46);q=BD(r.a,10);if(!Rqb(c,r.b)&&n=o){if(s>o){n.c=KC(SI,Uhe,1,0,5,1);o=s}n.c[n.c.length]=g}}if(n.c.length!=0){m=BD(Ikb(n,Bub(b,n.c.length)),128);F.a.Bc(m)!=null;m.s=p++;AQc(m,C,w);n.c=KC(SI,Uhe,1,0,5,1)}}u=a.c.length+1;for(h=new olb(a);h.aD.s){uib(c);Lkb(D.i,d);if(d.c>0){d.a=D;Ekb(D.t,d);d.b=A;Ekb(A.i,d)}}}}} +function qde(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.Ml();case 12:return a.Ol();case 14:return a.Ql();case 15:return a.Tl();case 16:return a.Rl();case 17:return a.Ul();case 21:nde(a);return wfe(),wfe(),ffe;case 10:switch(a.a){case 65:return a.yl();case 90:return a.Dl();case 122:return a.Kl();case 98:return a.El();case 66:return a.zl();case 60:return a.Jl();case 62:return a.Hl();}}f=pde(a);b=a.c;switch(b){case 3:return a.Zl(f);case 4:return a.Xl(f);case 5:return a.Yl(f);case 0:if(a.a==123&&a.d=48&&b<=57){d=b-48;while(e=48&&b<=57){d=d*10+b-48;if(d<0)throw vbb(new mde(tvd((h0d(),bve))))}}else{throw vbb(new mde(tvd((h0d(),Zue))))}c=d;if(b==44){if(e>=a.j){throw vbb(new mde(tvd((h0d(),_ue))))}else if((b=bfb(a.i,e++))>=48&&b<=57){c=b-48;while(e=48&&b<=57){c=c*10+b-48;if(c<0)throw vbb(new mde(tvd((h0d(),bve))))}if(d>c)throw vbb(new mde(tvd((h0d(),ave))))}else{c=-1}}if(b!=125)throw vbb(new mde(tvd((h0d(),$ue))));if(a.sl(e)){f=(wfe(),wfe(),++vfe,new lge(9,f));a.d=e+1}else{f=(wfe(),wfe(),++vfe,new lge(3,f));a.d=e}f.dm(d);f.cm(c);nde(a)}}return f} +function $bc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new Skb(b.b);u=new Skb(b.b);m=new Skb(b.b);B=new Skb(b.b);q=new Skb(b.b);for(A=Jsb(b,0);A.b!=A.d.c;){v=BD(Xsb(A),11);for(h=new olb(v.g);h.a0;r=v.g.c.length>0;j&&r?(m.c[m.c.length]=v,true):j?(p.c[p.c.length]=v,true):r&&(u.c[u.c.length]=v,true)}for(o=new olb(p);o.a1){o=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(o.e!=o.i.gc()){Eyd(o)}}g=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);q=H;H>v+u?(q=v+u):Hw+p?(r=w+p):Iv-u&&qw-p&&rH+G?(B=H+G):vI+A?(C=I+A):wH-G&&BI-A&&Cc&&(m=c-1);n=N+Cub(b,24)*lke*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(Fhd(),i=new xkd,i);vkd(e,m);wkd(e,n);wtd((!g.a&&(g.a=new xMd(y2,g,5)),g.a),e)}} +function Nyc(){Nyc=ccb;iyc=(Y9c(),I9c);jyc=J9c;kyc=K9c;lyc=L9c;nyc=M9c;oyc=N9c;ryc=P9c;tyc=R9c;uyc=S9c;syc=Q9c;vyc=T9c;xyc=U9c;zyc=X9c;qyc=O9c;hyc=(jwc(),Bvc);myc=Cvc;pyc=Dvc;wyc=Evc;byc=new Osd(D9c,meb(0));cyc=yvc;dyc=zvc;eyc=Avc;Kyc=awc;Cyc=Hvc;Dyc=Kvc;Gyc=Svc;Eyc=Nvc;Fyc=Pvc;Myc=fwc;Lyc=cwc;Iyc=Yvc;Hyc=Wvc;Jyc=$vc;Cxc=pvc;Dxc=qvc;Xwc=Auc;Ywc=Duc;Lxc=new q0b(12);Kxc=new Osd(f9c,Lxc);Twc=(Aad(),wad);Swc=new Osd(E8c,Twc);Uxc=new Osd(s9c,0);fyc=new Osd(E9c,meb(1));owc=new Osd(r8c,tme);Jxc=d9c;Vxc=t9c;$xc=A9c;Kwc=y8c;mwc=p8c;axc=J8c;gyc=new Osd(H9c,(Bcb(),true));fxc=M8c;gxc=N8c;Fxc=Y8c;Ixc=b9c;Gxc=$8c;Nwc=(ead(),cad);Lwc=new Osd(z8c,Nwc);xxc=W8c;wxc=U8c;Yxc=x9c;Xxc=w9c;Zxc=z9c;Oxc=(Tbd(),Sbd);new Osd(l9c,Oxc);Qxc=o9c;Rxc=p9c;Sxc=q9c;Pxc=n9c;Byc=Gvc;sxc=avc;rxc=$uc;Ayc=Fvc;mxc=Suc;Jwc=muc;Iwc=kuc;Awc=Xtc;Bwc=Ytc;Dwc=buc;Cwc=Ztc;Hwc=iuc;uxc=cvc;vxc=dvc;ixc=Luc;Exc=uvc;zxc=hvc;$wc=Guc;Bxc=nvc;Vwc=wuc;Wwc=yuc;zwc=w8c;yxc=evc;swc=Mtc;rwc=Ktc;qwc=Jtc;cxc=Juc;bxc=Iuc;dxc=Kuc;Hxc=_8c;jxc=Q8c;Zwc=G8c;Qwc=C8c;Pwc=B8c;Ewc=euc;Wxc=v9c;pwc=v8c;exc=L8c;Txc=r9c;Mxc=h9c;Nxc=j9c;oxc=Vuc;pxc=Xuc;ayc=C9c;nwc=Itc;qxc=Zuc;Rwc=suc;Owc=quc;txc=S8c;kxc=Puc;Axc=kvc;yyc=V9c;Mwc=ouc;_xc=wvc;Uwc=uuc;lxc=Ruc;Fwc=guc;hxc=P8c;nxc=Uuc;Gwc=huc;ywc=Vtc;wwc=Stc;uwc=Qtc;vwc=Rtc;xwc=Utc;twc=Otc;_wc=Huc} +function shb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:w=new Ufb;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=KC(TD,$ie,25,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=xbb(h,Yje);do{p=H;H=Abb(H,10);u[--c]=48+Tbb(Qbb(p,Ibb(H,10)))&aje}while(ybb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&aje}while(H!=0)}}else{D=KC(WD,oje,25,o,15,1);G=o;$fb(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=wbb(Nbb(A,32),xbb(D[j],Yje));r=qhb(F);D[j]=Tbb(r);A=Tbb(Obb(r,32))}s=Tbb(A);q=c;do{u[--c]=48+s%10&aje}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return zfb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return zfb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return zfb(u,c,t-c)}C=c+1;f=t;v=new Vfb;n&&(v.a+='-',v);if(f-C>=1){Kfb(v,u[c]);v.a+='.';v.a+=zfb(u,c+1,t-c-1)}else{v.a+=zfb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a} +function z$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Lqb;c=(Pgd(),new bhd(a.c));d=new YGb(c);UGb(d);t=GD(hkd(a.c,(d0c(),Y_c)));i=BD(hkd(a.c,$_c),316);v=BD(hkd(a.c,__c),429);g=BD(hkd(a.c,T_c),482);u=BD(hkd(a.c,Z_c),430);a.j=Edb(ED(hkd(a.c,a0c)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw vbb(new Wdb(Mre+(i.f!=null?i.f:''+i.g)));}a.d=new g_c(h,v,g);yNb(a.d,(XNb(),VNb),DD(hkd(a.c,V_c)));a.d.c=Ccb(DD(hkd(a.c,U_c)));if(Vod(a.c).i==0){return a.d}for(l=new Fyd(Vod(a.c));l.e!=l.i.gc();){k=BD(Dyd(l),33);n=k.g/2;m=k.f/2;w=new f7c(k.i+n,k.j+m);while(Mhb(a.g,w)){O6c(w,($wnd.Math.random()-0.5)*qme,($wnd.Math.random()-0.5)*qme)}p=BD(hkd(k,(Y9c(),S8c)),142);q=new aOb(w,new J6c(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Ekb(a.d.i,q);Rhb(a.g,w,new vgd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=BD(Ikb(a.d.i,0),65)}else{for(s=new olb(a.d.i);s.a1&&(Gsb(k,r,k.c.b,k.c),true);Zsb(e)}}}r=s}}return k} +function $Bc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;Odd(c,'Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=KC(WD,oje,25,L,15,1);a.c=KC(WD,oje,25,L,15,1);a.b=KC(WD,oje,25,L,15,1);j=0;for(r=new olb(t);r.a0?G+1:1}for(g=new olb(w.g);g.a0?G+1:1}}a.c[j]==0?Dsb(a.e,p):a.a[j]==0&&Dsb(a.f,p);++j}o=-1;n=1;l=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);while(L>0){while(a.e.b!=0){I=BD(Lsb(a.e),10);a.b[I.p]=o--;_Bc(a,I);--L}while(a.f.b!=0){J=BD(Lsb(a.f),10);a.b[J.p]=n++;_Bc(a,J);--L}if(L>0){m=Rie;for(s=new olb(t);s.a=m){if(u>m){l.c=KC(SI,Uhe,1,0,5,1);m=u}l.c[l.c.length]=p}}}k=a.Zf(l);a.b[k.p]=n++;_Bc(a,k);--L}}H=t.c.length+1;for(j=0;ja.b[K]){PZb(d,true);yNb(b,Asc,(Bcb(),true))}}}}a.a=null;a.c=null;a.b=null;Osb(a.f);Osb(a.e);Qdd(c)} +function sQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;h=new Rkb;q=b/2;n=a.gc();e=BD(a.Xb(0),8);r=BD(a.Xb(1),8);o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)));for(j=2;j=0;i--){Dsb(c,(tCb(i,g.c.length),BD(g.c[i],8)))}return c} +function aFd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=BEd;j=null;f=null;h=0;i=UEd(a,h,zEd,AEd);if(i=0&&dfb(a.substr(h,'//'.length),'//')){h+=2;i=UEd(a,h,CEd,DEd);d=a.substr(h,i-h);h=i}else if(l!=null&&(h==a.length||(BCb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=ifb(a,wfb(35),h);i==-1&&(i=a.length);d=a.substr(h,i-h);h=i}if(!c&&h0&&bfb(k,k.length-1)==58){e=k;h=i}}if(h=a.j){a.a=-1;a.c=1;return}b=bfb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d=a.j)break;if(bfb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw vbb(new mde(tvd((h0d(),wue))));break;case 35:while(a.d=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;default:d=0;}a.c=d} +function P5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=BD(vNb(a,(Nyc(),Vxc)),98);if(!(A!=(dcd(),bcd)&&A!=ccd)){return}o=a.b;n=o.c.length;k=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));p=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));Ekb(k,new Lqb);Ekb(k,new Lqb);Ekb(p,new Rkb);Ekb(p,new Rkb);w=new Rkb;for(b=0;b=v||!wCc(r,d))&&(d=yCc(b,k));$_b(r,d);for(f=new Sr(ur(R_b(r).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zCb(cub(n,p)),true)}}for(j=k.c.length-1;j>=0;--j){Ekb(b.b,(tCb(j,k.c.length),BD(k.c[j],29)))}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function gee(a){var b,c,d,e,f,g,h,i,j;a.b=1;nde(a);b=null;if(a.c==0&&a.a==94){nde(a);b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);h=(null,++vfe,new $fe(4))}else{h=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){Zfe(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(h,fee(c));d=true;break;case 105:case 73:case 99:case 67:c=(Xfe(h,fee(c)),-1);c<0&&(d=true);break;case 112:case 80:i=tde(a,c);if(!i)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(h,i);d=true;break;default:c=eee(a);}}else if(j==24&&!e){if(b){Zfe(b,h);h=b}f=gee(a);Zfe(h,f);if(a.c!=0||a.a!=93)throw vbb(new mde(tvd((h0d(),Mue))));break}nde(a);if(!d){if(j==0){if(c==91)throw vbb(new mde(tvd((h0d(),Nue))));if(c==93)throw vbb(new mde(tvd((h0d(),Oue))));if(c==45&&!e&&a.a!=93)throw vbb(new mde(tvd((h0d(),Pue))))}if(a.c!=0||a.a!=45||c==45&&e){Ufe(h,c,c)}else{nde(a);if((j=a.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(j==0&&a.a==93){Ufe(h,c,c);Ufe(h,45,45)}else if(j==0&&a.a==93||j==24){throw vbb(new mde(tvd((h0d(),Pue))))}else{g=a.a;if(j==0){if(g==91)throw vbb(new mde(tvd((h0d(),Nue))));if(g==93)throw vbb(new mde(tvd((h0d(),Oue))));if(g==45)throw vbb(new mde(tvd((h0d(),Pue))))}else j==10&&(g=eee(a));nde(a);if(c>g)throw vbb(new mde(tvd((h0d(),Sue))));Ufe(h,c,g)}}}e=false}if(a.c==1)throw vbb(new mde(tvd((h0d(),Kue))));Yfe(h);Vfe(h);a.b=0;nde(a);return h} +function xZd(a){Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#decimal']));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#integer']));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#boolean']));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EBoolean',fue,'EBoolean:Object']));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#byte']));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#hexBinary']));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EByte',fue,'EByte:Object']));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EChar',fue,'EChar:Object']));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#double']));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EDouble',fue,'EDouble:Object']));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#float']));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EFloat',fue,'EFloat:Object']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#int']));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EInt',fue,'EInt:Object']));Bnd(a.N,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#long']));Bnd(a.O,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'ELong',fue,'ELong:Object']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#short']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EShort',fue,'EShort:Object']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#string']))} +function fRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){return tCb(0,a.c.length),BD(a.c[0],135)}else if(a.c.length<=0){return new SRc}for(i=new olb(a);i.al){F=0;G+=k+A;k=0}eRc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Lqb;c=new Lqb;for(C=new olb(a);C.aSLc(f))&&(l=f)}}!l&&(l=(tCb(0,q.c.length),BD(q.c[0],180)));for(p=new olb(b.b);p.a=-1900?1:0;c>=4?Qfb(a,OC(GC(ZI,1),nie,2,6,[pje,qje])[h]):Qfb(a,OC(GC(ZI,1),nie,2,6,['BC','AD'])[h]);break;case 121:kA(a,c,d);break;case 77:jA(a,c,d);break;case 107:i=e.q.getHours();i==0?EA(a,24,c):EA(a,i,c);break;case 83:iA(a,c,e);break;case 69:k=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[k]):Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[1]):Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?EA(a,12,c):EA(a,l,c);break;case 75:m=e.q.getHours()%12;EA(a,m,c);break;case 72:n=e.q.getHours();EA(a,n,c);break;case 99:o=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[o]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):EA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[p]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):EA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Qfb(a,OC(GC(ZI,1),nie,2,6,['Q1','Q2','Q3','Q4'])[q]):Qfb(a,OC(GC(ZI,1),nie,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();EA(a,r,c);break;case 109:j=e.q.getMinutes();EA(a,j,c);break;case 115:g=e.q.getSeconds();EA(a,g,c);break;case 122:c<4?Qfb(a,f.c[0]):Qfb(a,f.c[1]);break;case 118:Qfb(a,f.b);break;case 90:c<3?Qfb(a,OA(f)):c==3?Qfb(a,NA(f)):Qfb(a,QA(f.a));break;default:return false;}return true} +function X1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;N1b(b);i=BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82);k=BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82);h=atd(i);j=atd(k);g=(!b.a&&(b.a=new cUd(A2,b,6,6)),b.a).i==0?null:BD(qud((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),0),202);A=BD(Ohb(a.a,h),10);F=BD(Ohb(a.a,j),10);B=null;G=null;if(JD(i,186)){w=BD(Ohb(a.a,i),299);if(JD(w,11)){B=BD(w,11)}else if(JD(w,10)){A=BD(w,10);B=BD(Ikb(A.j,0),11)}}if(JD(k,186)){D=BD(Ohb(a.a,k),299);if(JD(D,11)){G=BD(D,11)}else if(JD(D,10)){F=BD(D,10);G=BD(Ikb(F.j,0),11)}}if(!A||!F){throw vbb(new z2c('The source or the target of edge '+b+' could not be found. '+'This usually happens when an edge connects a node laid out by ELK Layered to a node in '+'another level of hierarchy laid out by either another instance of ELK Layered or another '+'layout algorithm alltogether. The former can be solved by setting the hierarchyHandling '+'option to INCLUDE_CHILDREN.'))}p=new UZb;tNb(p,b);yNb(p,(wtc(),$sc),b);yNb(p,(Nyc(),jxc),null);n=BD(vNb(d,Ksc),21);A==F&&n.Fc((Orc(),Nrc));if(!B){v=(KAc(),IAc);C=null;if(!!g&&fcd(BD(vNb(A,Vxc),98))){C=new f7c(g.j,g.k);Bfd(C,Mld(b));Cfd(C,c);if(ntd(j,h)){v=HAc;P6c(C,A.n)}}B=$$b(A,C,v,d)}if(!G){v=(KAc(),HAc);H=null;if(!!g&&fcd(BD(vNb(F,Vxc),98))){H=new f7c(g.b,g.c);Bfd(H,Mld(b));Cfd(H,c)}G=$$b(F,H,v,Q_b(F))}QZb(p,B);RZb(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((Orc(),Irc));for(m=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);if(!Ccb(DD(hkd(l,Jxc)))&&!!l.a){q=Z1b(l);Ekb(p.b,q);switch(BD(vNb(q,Qwc),272).g){case 1:case 2:n.Fc((Orc(),Grc));break;case 0:n.Fc((Orc(),Erc));yNb(q,Qwc,(qad(),nad));}}}f=BD(vNb(d,Iwc),314);r=BD(vNb(d,Exc),315);e=f==(Rpc(),Opc)||r==(Vzc(),Rzc);if(!!g&&(!g.a&&(g.a=new xMd(y2,g,5)),g.a).i!=0&&e){s=ofd(g);o=new s7c;for(u=Jsb(s,0);u.b!=u.d.c;){t=BD(Xsb(u),8);Dsb(o,new g7c(t))}yNb(p,_sc,o)}return p} +function yZd(a){if(a.gb)return;a.gb=true;a.b=Lnd(a,0);Knd(a.b,18);Qnd(a.b,19);a.a=Lnd(a,1);Knd(a.a,1);Qnd(a.a,2);Qnd(a.a,3);Qnd(a.a,4);Qnd(a.a,5);a.o=Lnd(a,2);Knd(a.o,8);Knd(a.o,9);Qnd(a.o,10);Qnd(a.o,11);Qnd(a.o,12);Qnd(a.o,13);Qnd(a.o,14);Qnd(a.o,15);Qnd(a.o,16);Qnd(a.o,17);Qnd(a.o,18);Qnd(a.o,19);Qnd(a.o,20);Qnd(a.o,21);Qnd(a.o,22);Qnd(a.o,23);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);a.p=Lnd(a,3);Knd(a.p,2);Knd(a.p,3);Knd(a.p,4);Knd(a.p,5);Qnd(a.p,6);Qnd(a.p,7);Pnd(a.p);Pnd(a.p);a.q=Lnd(a,4);Knd(a.q,8);a.v=Lnd(a,5);Qnd(a.v,9);Pnd(a.v);Pnd(a.v);Pnd(a.v);a.w=Lnd(a,6);Knd(a.w,2);Knd(a.w,3);Knd(a.w,4);Qnd(a.w,5);a.B=Lnd(a,7);Qnd(a.B,1);Pnd(a.B);Pnd(a.B);Pnd(a.B);a.Q=Lnd(a,8);Qnd(a.Q,0);Pnd(a.Q);a.R=Lnd(a,9);Knd(a.R,1);a.S=Lnd(a,10);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);a.T=Lnd(a,11);Qnd(a.T,10);Qnd(a.T,11);Qnd(a.T,12);Qnd(a.T,13);Qnd(a.T,14);Pnd(a.T);Pnd(a.T);a.U=Lnd(a,12);Knd(a.U,2);Knd(a.U,3);Qnd(a.U,4);Qnd(a.U,5);Qnd(a.U,6);Qnd(a.U,7);Pnd(a.U);a.V=Lnd(a,13);Qnd(a.V,10);a.W=Lnd(a,14);Knd(a.W,18);Knd(a.W,19);Knd(a.W,20);Qnd(a.W,21);Qnd(a.W,22);Qnd(a.W,23);a.bb=Lnd(a,15);Knd(a.bb,10);Knd(a.bb,11);Knd(a.bb,12);Knd(a.bb,13);Knd(a.bb,14);Knd(a.bb,15);Knd(a.bb,16);Qnd(a.bb,17);Pnd(a.bb);Pnd(a.bb);a.eb=Lnd(a,16);Knd(a.eb,2);Knd(a.eb,3);Knd(a.eb,4);Knd(a.eb,5);Knd(a.eb,6);Knd(a.eb,7);Qnd(a.eb,8);Qnd(a.eb,9);a.ab=Lnd(a,17);Knd(a.ab,0);Knd(a.ab,1);a.H=Lnd(a,18);Qnd(a.H,0);Qnd(a.H,1);Qnd(a.H,2);Qnd(a.H,3);Qnd(a.H,4);Qnd(a.H,5);Pnd(a.H);a.db=Lnd(a,19);Qnd(a.db,2);a.c=Mnd(a,20);a.d=Mnd(a,21);a.e=Mnd(a,22);a.f=Mnd(a,23);a.i=Mnd(a,24);a.g=Mnd(a,25);a.j=Mnd(a,26);a.k=Mnd(a,27);a.n=Mnd(a,28);a.r=Mnd(a,29);a.s=Mnd(a,30);a.t=Mnd(a,31);a.u=Mnd(a,32);a.fb=Mnd(a,33);a.A=Mnd(a,34);a.C=Mnd(a,35);a.D=Mnd(a,36);a.F=Mnd(a,37);a.G=Mnd(a,38);a.I=Mnd(a,39);a.J=Mnd(a,40);a.L=Mnd(a,41);a.M=Mnd(a,42);a.N=Mnd(a,43);a.O=Mnd(a,44);a.P=Mnd(a,45);a.X=Mnd(a,46);a.Y=Mnd(a,47);a.Z=Mnd(a,48);a.$=Mnd(a,49);a._=Mnd(a,50);a.cb=Mnd(a,51);a.K=Mnd(a,52)} +function Y9c(){Y9c=ccb;var a,b;o8c=new Lsd(sse);F9c=new Lsd(tse);q8c=(F7c(),z7c);p8c=new Nsd($pe,q8c);new Tfd;r8c=new Nsd(_le,null);s8c=new Lsd(use);x8c=(i8c(),qqb(h8c,OC(GC(r1,1),Kie,291,0,[d8c])));w8c=new Nsd(lqe,x8c);y8c=new Nsd(Zpe,(Bcb(),false));A8c=(ead(),cad);z8c=new Nsd(cqe,A8c);F8c=(Aad(),zad);E8c=new Nsd(ype,F8c);I8c=new Nsd(Jre,false);K8c=(hbd(),fbd);J8c=new Nsd(tpe,K8c);g9c=new q0b(12);f9c=new Nsd(ame,g9c);O8c=new Nsd(Ame,false);P8c=new Nsd(xqe,false);e9c=new Nsd(Dme,false);u9c=(dcd(),ccd);t9c=new Nsd(Bme,u9c);C9c=new Lsd(uqe);D9c=new Lsd(vme);E9c=new Lsd(yme);H9c=new Lsd(zme);R8c=new s7c;Q8c=new Nsd(mqe,R8c);v8c=new Nsd(pqe,false);L8c=new Nsd(qqe,false);new Lsd(vse);T8c=new H_b;S8c=new Nsd(vqe,T8c);d9c=new Nsd(Xpe,false);new Tfd;G9c=new Nsd(wse,1);new Nsd(xse,true);meb(0);new Nsd(yse,meb(100));new Nsd(zse,false);meb(0);new Nsd(Ase,meb(4000));meb(0);new Nsd(Bse,meb(400));new Nsd(Cse,false);new Nsd(Dse,false);new Nsd(Ese,true);new Nsd(Fse,false);u8c=(Ded(),Ced);t8c=new Nsd(rse,u8c);I9c=new Nsd(Lpe,10);J9c=new Nsd(Mpe,10);K9c=new Nsd(Zle,20);L9c=new Nsd(Npe,10);M9c=new Nsd(xme,2);N9c=new Nsd(Ope,10);P9c=new Nsd(Ppe,0);Q9c=new Nsd(Spe,5);R9c=new Nsd(Qpe,1);S9c=new Nsd(Rpe,1);T9c=new Nsd(wme,20);U9c=new Nsd(Tpe,10);X9c=new Nsd(Upe,10);O9c=new Lsd(Vpe);W9c=new I_b;V9c=new Nsd(wqe,W9c);j9c=new Lsd(tqe);i9c=false;h9c=new Nsd(sqe,i9c);V8c=new q0b(5);U8c=new Nsd(dqe,V8c);X8c=(Hbd(),b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));W8c=new Nsd(Gme,X8c);m9c=(Tbd(),Qbd);l9c=new Nsd(gqe,m9c);o9c=new Lsd(hqe);p9c=new Lsd(iqe);q9c=new Lsd(jqe);n9c=new Lsd(kqe);Z8c=(a=BD(gdb(I1),9),new xqb(a,BD(_Bb(a,a.length),9),0));Y8c=new Nsd(Fme,Z8c);c9c=pqb((Idd(),Bdd));b9c=new Nsd(Eme,c9c);a9c=new f7c(0,0);_8c=new Nsd(Tme,a9c);$8c=new Nsd(bqe,false);D8c=(qad(),nad);C8c=new Nsd(nqe,D8c);B8c=new Nsd(Cme,false);new Lsd(Gse);meb(1);new Nsd(Hse,null);r9c=new Lsd(rqe);v9c=new Lsd(oqe);B9c=(Ucd(),Scd);A9c=new Nsd(Ype,B9c);s9c=new Lsd(Wpe);y9c=(rcd(),pqb(pcd));x9c=new Nsd(Hme,y9c);w9c=new Nsd(eqe,false);z9c=new Nsd(fqe,true);M8c=new Nsd(_pe,false);N8c=new Nsd(aqe,false);G8c=new Nsd($le,1);H8c=(Mad(),Kad);new Nsd(Ise,H8c);k9c=true} +function wtc(){wtc=ccb;var a,b;$sc=new Lsd(Ime);xsc=new Lsd('coordinateOrigin');itc=new Lsd('processors');wsc=new Msd('compoundNode',(Bcb(),false));Nsc=new Msd('insideConnections',false);_sc=new Lsd('originalBendpoints');atc=new Lsd('originalDummyNodePosition');btc=new Lsd('originalLabelEdge');ktc=new Lsd('representedLabels');Csc=new Lsd('endLabels');Dsc=new Lsd('endLabel.origin');Ssc=new Msd('labelSide',(rbd(),qbd));Ysc=new Msd('maxEdgeThickness',0);ltc=new Msd('reversed',false);jtc=new Lsd(Jme);Vsc=new Msd('longEdgeSource',null);Wsc=new Msd('longEdgeTarget',null);Usc=new Msd('longEdgeHasLabelDummies',false);Tsc=new Msd('longEdgeBeforeLabelDummy',false);Bsc=new Msd('edgeConstraint',(Gqc(),Eqc));Psc=new Lsd('inLayerLayoutUnit');Osc=new Msd('inLayerConstraint',(esc(),csc));Qsc=new Msd('inLayerSuccessorConstraint',new Rkb);Rsc=new Msd('inLayerSuccessorConstraintBetweenNonDummies',false);gtc=new Lsd('portDummy');ysc=new Msd('crossingHint',meb(0));Ksc=new Msd('graphProperties',(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));Hsc=new Msd('externalPortSide',(Ucd(),Scd));Isc=new Msd('externalPortSize',new d7c);Fsc=new Lsd('externalPortReplacedDummies');Gsc=new Lsd('externalPortReplacedDummy');Esc=new Msd('externalPortConnections',(a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0)));htc=new Msd(tle,0);ssc=new Lsd('barycenterAssociates');vtc=new Lsd('TopSideComments');tsc=new Lsd('BottomSideComments');vsc=new Lsd('CommentConnectionPort');Msc=new Msd('inputCollect',false);etc=new Msd('outputCollect',false);Asc=new Msd('cyclic',false);zsc=new Lsd('crossHierarchyMap');utc=new Lsd('targetOffset');new Msd('splineLabelSize',new d7c);otc=new Lsd('spacings');ftc=new Msd('partitionConstraint',false);usc=new Lsd('breakingPoint.info');stc=new Lsd('splines.survivingEdge');rtc=new Lsd('splines.route.start');ptc=new Lsd('splines.edgeChain');dtc=new Lsd('originalPortConstraints');ntc=new Lsd('selfLoopHolder');qtc=new Lsd('splines.nsPortY');Zsc=new Lsd('modelOrder');Xsc=new Lsd('longEdgeTargetNode');Jsc=new Msd(Xne,false);mtc=new Msd(Xne,false);Lsc=new Lsd('layerConstraints.hiddenNodes');ctc=new Lsd('layerConstraints.opposidePort');ttc=new Lsd('targetNode.modelOrder')} +function jwc(){jwc=ccb;puc=(xqc(),vqc);ouc=new Nsd(Yne,puc);Guc=new Nsd(Zne,(Bcb(),false));Muc=(msc(),ksc);Luc=new Nsd($ne,Muc);cvc=new Nsd(_ne,false);dvc=new Nsd(aoe,true);Itc=new Nsd(boe,false);xvc=(BAc(),zAc);wvc=new Nsd(coe,xvc);meb(1);Fvc=new Nsd(doe,meb(7));Gvc=new Nsd(eoe,false);Huc=new Nsd(foe,false);nuc=(mqc(),iqc);muc=new Nsd(goe,nuc);bvc=(lzc(),jzc);avc=new Nsd(hoe,bvc);Tuc=(Ctc(),Btc);Suc=new Nsd(ioe,Tuc);meb(-1);Ruc=new Nsd(joe,meb(-1));meb(-1);Uuc=new Nsd(koe,meb(-1));meb(-1);Vuc=new Nsd(loe,meb(4));meb(-1);Xuc=new Nsd(moe,meb(2));_uc=(kAc(),iAc);$uc=new Nsd(noe,_uc);meb(0);Zuc=new Nsd(ooe,meb(0));Puc=new Nsd(poe,meb(Ohe));luc=(Rpc(),Ppc);kuc=new Nsd(qoe,luc);Xtc=new Nsd(roe,false);euc=new Nsd(soe,0.1);iuc=new Nsd(toe,false);meb(-1);guc=new Nsd(uoe,meb(-1));meb(-1);huc=new Nsd(voe,meb(-1));meb(0);Ytc=new Nsd(woe,meb(40));cuc=(Xrc(),Wrc);buc=new Nsd(xoe,cuc);$tc=Urc;Ztc=new Nsd(yoe,$tc);vvc=(Vzc(),Qzc);uvc=new Nsd(zoe,vvc);kvc=new Lsd(Aoe);fvc=(_qc(),Zqc);evc=new Nsd(Boe,fvc);ivc=(lrc(),irc);hvc=new Nsd(Coe,ivc);new Tfd;nvc=new Nsd(Doe,0.3);pvc=new Lsd(Eoe);rvc=(Izc(),Gzc);qvc=new Nsd(Foe,rvc);xuc=(TAc(),RAc);wuc=new Nsd(Goe,xuc);zuc=(_Ac(),$Ac);yuc=new Nsd(Hoe,zuc);Buc=(tBc(),sBc);Auc=new Nsd(Ioe,Buc);Duc=new Nsd(Joe,0.2);uuc=new Nsd(Koe,2);Bvc=new Nsd(Loe,null);Dvc=new Nsd(Moe,10);Cvc=new Nsd(Noe,10);Evc=new Nsd(Ooe,20);meb(0);yvc=new Nsd(Poe,meb(0));meb(0);zvc=new Nsd(Qoe,meb(0));meb(0);Avc=new Nsd(Roe,meb(0));Jtc=new Nsd(Soe,false);Ntc=(yrc(),wrc);Mtc=new Nsd(Toe,Ntc);Ltc=(Ipc(),Hpc);Ktc=new Nsd(Uoe,Ltc);Juc=new Nsd(Voe,false);meb(0);Iuc=new Nsd(Woe,meb(16));meb(0);Kuc=new Nsd(Xoe,meb(5));bwc=(LBc(),JBc);awc=new Nsd(Yoe,bwc);Hvc=new Nsd(Zoe,10);Kvc=new Nsd($oe,1);Tvc=(bqc(),aqc);Svc=new Nsd(_oe,Tvc);Nvc=new Lsd(ape);Qvc=meb(1);meb(0);Pvc=new Nsd(bpe,Qvc);gwc=(CBc(),zBc);fwc=new Nsd(cpe,gwc);cwc=new Lsd(dpe);Yvc=new Nsd(epe,true);Wvc=new Nsd(fpe,2);$vc=new Nsd(gpe,true);tuc=(Sqc(),Qqc);suc=new Nsd(hpe,tuc);ruc=(Apc(),wpc);quc=new Nsd(ipe,ruc);Wtc=(tAc(),rAc);Vtc=new Nsd(jpe,Wtc);Utc=new Nsd(kpe,false);Ptc=(RXb(),QXb);Otc=new Nsd(lpe,Ptc);Ttc=(xzc(),uzc);Stc=new Nsd(mpe,Ttc);Qtc=new Nsd(npe,0);Rtc=new Nsd(ope,0);Ouc=kqc;Nuc=Opc;Wuc=izc;Yuc=izc;Quc=fzc;fuc=(hbd(),ebd);juc=Ppc;duc=Ppc;_tc=Ppc;auc=ebd;lvc=Tzc;mvc=Qzc;gvc=Qzc;jvc=Qzc;ovc=Szc;tvc=Tzc;svc=Tzc;Cuc=(Aad(),yad);Euc=yad;Fuc=sBc;vuc=xad;Ivc=KBc;Jvc=IBc;Lvc=KBc;Mvc=IBc;Uvc=KBc;Vvc=IBc;Ovc=_pc;Rvc=aqc;hwc=KBc;iwc=IBc;dwc=KBc;ewc=IBc;Zvc=IBc;Xvc=IBc;_vc=IBc} +function S8b(){S8b=ccb;Y7b=new T8b('DIRECTION_PREPROCESSOR',0);V7b=new T8b('COMMENT_PREPROCESSOR',1);Z7b=new T8b('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);n8b=new T8b('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);G8b=new T8b('PARTITION_PREPROCESSOR',4);r8b=new T8b('LABEL_DUMMY_INSERTER',5);M8b=new T8b('SELF_LOOP_PREPROCESSOR',6);w8b=new T8b('LAYER_CONSTRAINT_PREPROCESSOR',7);E8b=new T8b('PARTITION_MIDPROCESSOR',8);i8b=new T8b('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);A8b=new T8b('NODE_PROMOTION',10);v8b=new T8b('LAYER_CONSTRAINT_POSTPROCESSOR',11);F8b=new T8b('PARTITION_POSTPROCESSOR',12);e8b=new T8b('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);O8b=new T8b('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);P7b=new T8b('BREAKING_POINT_INSERTER',15);z8b=new T8b('LONG_EDGE_SPLITTER',16);I8b=new T8b('PORT_SIDE_PROCESSOR',17);o8b=new T8b('INVERTED_PORT_PROCESSOR',18);H8b=new T8b('PORT_LIST_SORTER',19);Q8b=new T8b('SORT_BY_INPUT_ORDER_OF_MODEL',20);C8b=new T8b('NORTH_SOUTH_PORT_PREPROCESSOR',21);Q7b=new T8b('BREAKING_POINT_PROCESSOR',22);D8b=new T8b(Bne,23);R8b=new T8b(Cne,24);K8b=new T8b('SELF_LOOP_PORT_RESTORER',25);P8b=new T8b('SINGLE_EDGE_GRAPH_WRAPPER',26);p8b=new T8b('IN_LAYER_CONSTRAINT_PROCESSOR',27);b8b=new T8b('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);q8b=new T8b('LABEL_AND_NODE_SIZE_PROCESSOR',29);m8b=new T8b('INNERMOST_NODE_MARGIN_CALCULATOR',30);N8b=new T8b('SELF_LOOP_ROUTER',31);T7b=new T8b('COMMENT_NODE_MARGIN_CALCULATOR',32);_7b=new T8b('END_LABEL_PREPROCESSOR',33);t8b=new T8b('LABEL_DUMMY_SWITCHER',34);S7b=new T8b('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);u8b=new T8b('LABEL_SIDE_SELECTOR',36);k8b=new T8b('HYPEREDGE_DUMMY_MERGER',37);f8b=new T8b('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);x8b=new T8b('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);h8b=new T8b('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);W7b=new T8b('CONSTRAINTS_POSTPROCESSOR',41);U7b=new T8b('COMMENT_POSTPROCESSOR',42);l8b=new T8b('HYPERNODE_PROCESSOR',43);g8b=new T8b('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);y8b=new T8b('LONG_EDGE_JOINER',45);L8b=new T8b('SELF_LOOP_POSTPROCESSOR',46);R7b=new T8b('BREAKING_POINT_REMOVER',47);B8b=new T8b('NORTH_SOUTH_PORT_POSTPROCESSOR',48);j8b=new T8b('HORIZONTAL_COMPACTOR',49);s8b=new T8b('LABEL_DUMMY_REMOVER',50);c8b=new T8b('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);a8b=new T8b('END_LABEL_SORTER',52);J8b=new T8b('REVERSED_EDGE_RESTORER',53);$7b=new T8b('END_LABEL_POSTPROCESSOR',54);d8b=new T8b('HIERARCHICAL_NODE_RESIZER',55);X7b=new T8b('DIRECTION_POSTPROCESSOR',56)} +function KIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L0){U=(sCb(Y.b>0),BD(Y.a.Xb(Y.c=--Y.b),11));X=0;for(h=new olb(U.e);h.a0){if(U.j==(Ucd(),Acd)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Lqb;o=new zsb;for(G=b,J=0,M=G.length;Jj.b&&(j.b=Z)}else if(U.i.c==bb){Zj.c&&(j.c=Z)}}}Klb(p,0,p.length,null);gb=KC(WD,oje,25,p.length,15,1);d=KC(WD,oje,25,hb+1,15,1);for(r=0;r0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=KC(nY,Uhe,362,p.length*2,0,1);for(u=0;u'?":dfb(wue,a)?"'(?<' or '(? toIndex: ',zke=', toIndex: ',Ake='Index: ',Bke=', Size: ',Cke='org.eclipse.elk.alg.common',Dke={62:1},Eke='org.eclipse.elk.alg.common.compaction',Fke='Scanline/EventHandler',Gke='org.eclipse.elk.alg.common.compaction.oned',Hke='CNode belongs to another CGroup.',Ike='ISpacingsHandler/1',Jke='The ',Kke=' instance has been finished already.',Lke='The direction ',Mke=' is not supported by the CGraph instance.',Nke='OneDimensionalCompactor',Oke='OneDimensionalCompactor/lambda$0$Type',Pke='Quadruplet',Qke='ScanlineConstraintCalculator',Rke='ScanlineConstraintCalculator/ConstraintsScanlineHandler',Ske='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',Tke='ScanlineConstraintCalculator/Timestamp',Uke='ScanlineConstraintCalculator/lambda$0$Type',Vke={169:1,45:1},Wke='org.eclipse.elk.alg.common.compaction.options',Xke='org.eclipse.elk.core.data',Yke='org.eclipse.elk.polyomino.traversalStrategy',Zke='org.eclipse.elk.polyomino.lowLevelSort',$ke='org.eclipse.elk.polyomino.highLevelSort',_ke='org.eclipse.elk.polyomino.fill',ale={130:1},ble='polyomino',cle='org.eclipse.elk.alg.common.networksimplex',dle={177:1,3:1,4:1},ele='org.eclipse.elk.alg.common.nodespacing',fle='org.eclipse.elk.alg.common.nodespacing.cellsystem',gle='CENTER',hle={212:1,326:1},ile={3:1,4:1,5:1,595:1},jle='LEFT',kle='RIGHT',lle='Vertical alignment cannot be null',mle='BOTTOM',nle='org.eclipse.elk.alg.common.nodespacing.internal',ole='UNDEFINED',ple=0.01,qle='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',rle='LabelPlacer/lambda$0$Type',sle='LabelPlacer/lambda$1$Type',tle='portRatioOrPosition',ule='org.eclipse.elk.alg.common.overlaps',vle='DOWN',wle='org.eclipse.elk.alg.common.polyomino',xle='NORTH',yle='EAST',zle='SOUTH',Ale='WEST',Ble='org.eclipse.elk.alg.common.polyomino.structures',Cle='Direction',Dle='Grid is only of size ',Ele='. Requested point (',Fle=') is out of bounds.',Gle=' Given center based coordinates were (',Hle='org.eclipse.elk.graph.properties',Ile='IPropertyHolder',Jle={3:1,94:1,134:1},Kle='org.eclipse.elk.alg.common.spore',Lle='org.eclipse.elk.alg.common.utils',Mle={209:1},Nle='org.eclipse.elk.core',Ole='Connected Components Compaction',Ple='org.eclipse.elk.alg.disco',Qle='org.eclipse.elk.alg.disco.graph',Rle='org.eclipse.elk.alg.disco.options',Sle='CompactionStrategy',Tle='org.eclipse.elk.disco.componentCompaction.strategy',Ule='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',Vle='org.eclipse.elk.disco.debug.discoGraph',Wle='org.eclipse.elk.disco.debug.discoPolys',Xle='componentCompaction',Yle='org.eclipse.elk.disco',Zle='org.eclipse.elk.spacing.componentComponent',$le='org.eclipse.elk.edge.thickness',_le='org.eclipse.elk.aspectRatio',ame='org.eclipse.elk.padding',bme='org.eclipse.elk.alg.disco.transform',cme=1.5707963267948966,dme=1.7976931348623157E308,eme={3:1,4:1,5:1,192:1},fme={3:1,6:1,4:1,5:1,106:1,120:1},gme='org.eclipse.elk.alg.force',hme='ComponentsProcessor',ime='ComponentsProcessor/1',jme='org.eclipse.elk.alg.force.graph',kme='Component Layout',lme='org.eclipse.elk.alg.force.model',mme='org.eclipse.elk.force.model',nme='org.eclipse.elk.force.iterations',ome='org.eclipse.elk.force.repulsivePower',pme='org.eclipse.elk.force.temperature',qme=0.001,rme='org.eclipse.elk.force.repulsion',sme='org.eclipse.elk.alg.force.options',tme=1.600000023841858,ume='org.eclipse.elk.force',vme='org.eclipse.elk.priority',wme='org.eclipse.elk.spacing.nodeNode',xme='org.eclipse.elk.spacing.edgeLabel',yme='org.eclipse.elk.randomSeed',zme='org.eclipse.elk.separateConnectedComponents',Ame='org.eclipse.elk.interactive',Bme='org.eclipse.elk.portConstraints',Cme='org.eclipse.elk.edgeLabels.inline',Dme='org.eclipse.elk.omitNodeMicroLayout',Eme='org.eclipse.elk.nodeSize.options',Fme='org.eclipse.elk.nodeSize.constraints',Gme='org.eclipse.elk.nodeLabels.placement',Hme='org.eclipse.elk.portLabels.placement',Ime='origin',Jme='random',Kme='boundingBox.upLeft',Lme='boundingBox.lowRight',Mme='org.eclipse.elk.stress.fixed',Nme='org.eclipse.elk.stress.desiredEdgeLength',Ome='org.eclipse.elk.stress.dimension',Pme='org.eclipse.elk.stress.epsilon',Qme='org.eclipse.elk.stress.iterationLimit',Rme='org.eclipse.elk.stress',Sme='ELK Stress',Tme='org.eclipse.elk.nodeSize.minimum',Ume='org.eclipse.elk.alg.force.stress',Vme='Layered layout',Wme='org.eclipse.elk.alg.layered',Xme='org.eclipse.elk.alg.layered.compaction.components',Yme='org.eclipse.elk.alg.layered.compaction.oned',Zme='org.eclipse.elk.alg.layered.compaction.oned.algs',$me='org.eclipse.elk.alg.layered.compaction.recthull',_me='org.eclipse.elk.alg.layered.components',ane='NONE',bne={3:1,6:1,4:1,9:1,5:1,122:1},cne={3:1,6:1,4:1,5:1,141:1,106:1,120:1},dne='org.eclipse.elk.alg.layered.compound',ene={51:1},fne='org.eclipse.elk.alg.layered.graph',gne=' -> ',hne='Not supported by LGraph',ine='Port side is undefined',jne={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},kne={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},lne={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},mne='([{"\' \t\r\n',nne=')]}"\' \t\r\n',one='The given string contains parts that cannot be parsed as numbers.',pne='org.eclipse.elk.core.math',qne={3:1,4:1,142:1,207:1,414:1},rne={3:1,4:1,116:1,207:1,414:1},sne='org.eclipse.elk.layered',tne='org.eclipse.elk.alg.layered.graph.transform',une='ElkGraphImporter',vne='ElkGraphImporter/lambda$0$Type',wne='ElkGraphImporter/lambda$1$Type',xne='ElkGraphImporter/lambda$2$Type',yne='ElkGraphImporter/lambda$4$Type',zne='Node margin calculation',Ane='org.eclipse.elk.alg.layered.intermediate',Bne='ONE_SIDED_GREEDY_SWITCH',Cne='TWO_SIDED_GREEDY_SWITCH',Dne='No implementation is available for the layout processor ',Ene='IntermediateProcessorStrategy',Fne="Node '",Gne='FIRST_SEPARATE',Hne='LAST_SEPARATE',Ine='Odd port side processing',Jne='org.eclipse.elk.alg.layered.intermediate.compaction',Kne='org.eclipse.elk.alg.layered.intermediate.greedyswitch',Lne='org.eclipse.elk.alg.layered.p3order.counting',Mne={225:1},Nne='org.eclipse.elk.alg.layered.intermediate.loops',One='org.eclipse.elk.alg.layered.intermediate.loops.ordering',Pne='org.eclipse.elk.alg.layered.intermediate.loops.routing',Qne='org.eclipse.elk.alg.layered.intermediate.preserveorder',Rne='org.eclipse.elk.alg.layered.intermediate.wrapping',Sne='org.eclipse.elk.alg.layered.options',Tne='INTERACTIVE',Une='DEPTH_FIRST',Vne='EDGE_LENGTH',Wne='SELF_LOOPS',Xne='firstTryWithInitialOrder',Yne='org.eclipse.elk.layered.directionCongruency',Zne='org.eclipse.elk.layered.feedbackEdges',$ne='org.eclipse.elk.layered.interactiveReferencePoint',_ne='org.eclipse.elk.layered.mergeEdges',aoe='org.eclipse.elk.layered.mergeHierarchyEdges',boe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',coe='org.eclipse.elk.layered.portSortingStrategy',doe='org.eclipse.elk.layered.thoroughness',eoe='org.eclipse.elk.layered.unnecessaryBendpoints',foe='org.eclipse.elk.layered.generatePositionAndLayerIds',goe='org.eclipse.elk.layered.cycleBreaking.strategy',hoe='org.eclipse.elk.layered.layering.strategy',ioe='org.eclipse.elk.layered.layering.layerConstraint',joe='org.eclipse.elk.layered.layering.layerChoiceConstraint',koe='org.eclipse.elk.layered.layering.layerId',loe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',moe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',noe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ooe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',poe='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',qoe='org.eclipse.elk.layered.crossingMinimization.strategy',roe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',soe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',toe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',uoe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',voe='org.eclipse.elk.layered.crossingMinimization.positionId',woe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',xoe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',yoe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',zoe='org.eclipse.elk.layered.nodePlacement.strategy',Aoe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',Boe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',Coe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',Doe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',Eoe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',Foe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',Goe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',Hoe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',Ioe='org.eclipse.elk.layered.edgeRouting.splines.mode',Joe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',Koe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',Loe='org.eclipse.elk.layered.spacing.baseValue',Moe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',Noe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',Ooe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',Poe='org.eclipse.elk.layered.priority.direction',Qoe='org.eclipse.elk.layered.priority.shortness',Roe='org.eclipse.elk.layered.priority.straightness',Soe='org.eclipse.elk.layered.compaction.connectedComponents',Toe='org.eclipse.elk.layered.compaction.postCompaction.strategy',Uoe='org.eclipse.elk.layered.compaction.postCompaction.constraints',Voe='org.eclipse.elk.layered.highDegreeNodes.treatment',Woe='org.eclipse.elk.layered.highDegreeNodes.threshold',Xoe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',Yoe='org.eclipse.elk.layered.wrapping.strategy',Zoe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',$oe='org.eclipse.elk.layered.wrapping.correctionFactor',_oe='org.eclipse.elk.layered.wrapping.cutting.strategy',ape='org.eclipse.elk.layered.wrapping.cutting.cuts',bpe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',cpe='org.eclipse.elk.layered.wrapping.validify.strategy',dpe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',epe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',fpe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',gpe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',hpe='org.eclipse.elk.layered.edgeLabels.sideSelection',ipe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',jpe='org.eclipse.elk.layered.considerModelOrder.strategy',kpe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',lpe='org.eclipse.elk.layered.considerModelOrder.components',mpe='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',npe='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',ope='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',ppe='layering',qpe='layering.minWidth',rpe='layering.nodePromotion',spe='crossingMinimization',tpe='org.eclipse.elk.hierarchyHandling',upe='crossingMinimization.greedySwitch',vpe='nodePlacement',wpe='nodePlacement.bk',xpe='edgeRouting',ype='org.eclipse.elk.edgeRouting',zpe='spacing',Ape='priority',Bpe='compaction',Cpe='compaction.postCompaction',Dpe='Specifies whether and how post-process compaction is applied.',Epe='highDegreeNodes',Fpe='wrapping',Gpe='wrapping.cutting',Hpe='wrapping.validify',Ipe='wrapping.multiEdge',Jpe='edgeLabels',Kpe='considerModelOrder',Lpe='org.eclipse.elk.spacing.commentComment',Mpe='org.eclipse.elk.spacing.commentNode',Npe='org.eclipse.elk.spacing.edgeEdge',Ope='org.eclipse.elk.spacing.edgeNode',Ppe='org.eclipse.elk.spacing.labelLabel',Qpe='org.eclipse.elk.spacing.labelPortHorizontal',Rpe='org.eclipse.elk.spacing.labelPortVertical',Spe='org.eclipse.elk.spacing.labelNode',Tpe='org.eclipse.elk.spacing.nodeSelfLoop',Upe='org.eclipse.elk.spacing.portPort',Vpe='org.eclipse.elk.spacing.individual',Wpe='org.eclipse.elk.port.borderOffset',Xpe='org.eclipse.elk.noLayout',Ype='org.eclipse.elk.port.side',Zpe='org.eclipse.elk.debugMode',$pe='org.eclipse.elk.alignment',_pe='org.eclipse.elk.insideSelfLoops.activate',aqe='org.eclipse.elk.insideSelfLoops.yo',bqe='org.eclipse.elk.nodeSize.fixedGraphSize',cqe='org.eclipse.elk.direction',dqe='org.eclipse.elk.nodeLabels.padding',eqe='org.eclipse.elk.portLabels.nextToPortIfPossible',fqe='org.eclipse.elk.portLabels.treatAsGroup',gqe='org.eclipse.elk.portAlignment.default',hqe='org.eclipse.elk.portAlignment.north',iqe='org.eclipse.elk.portAlignment.south',jqe='org.eclipse.elk.portAlignment.west',kqe='org.eclipse.elk.portAlignment.east',lqe='org.eclipse.elk.contentAlignment',mqe='org.eclipse.elk.junctionPoints',nqe='org.eclipse.elk.edgeLabels.placement',oqe='org.eclipse.elk.port.index',pqe='org.eclipse.elk.commentBox',qqe='org.eclipse.elk.hypernode',rqe='org.eclipse.elk.port.anchor',sqe='org.eclipse.elk.partitioning.activate',tqe='org.eclipse.elk.partitioning.partition',uqe='org.eclipse.elk.position',vqe='org.eclipse.elk.margins',wqe='org.eclipse.elk.spacing.portsSurrounding',xqe='org.eclipse.elk.interactiveLayout',yqe='org.eclipse.elk.core.util',zqe={3:1,4:1,5:1,593:1},Aqe='NETWORK_SIMPLEX',Bqe={123:1,51:1},Cqe='org.eclipse.elk.alg.layered.p1cycles',Dqe='org.eclipse.elk.alg.layered.p2layers',Eqe={402:1,225:1},Fqe={832:1,3:1,4:1},Gqe='org.eclipse.elk.alg.layered.p3order',Hqe='org.eclipse.elk.alg.layered.p4nodes',Iqe={3:1,4:1,5:1,840:1},Jqe=1.0E-5,Kqe='org.eclipse.elk.alg.layered.p4nodes.bk',Lqe='org.eclipse.elk.alg.layered.p5edges',Mqe='org.eclipse.elk.alg.layered.p5edges.orthogonal',Nqe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',Oqe=1.0E-6,Pqe='org.eclipse.elk.alg.layered.p5edges.splines',Qqe=0.09999999999999998,Rqe=1.0E-8,Sqe=4.71238898038469,Tqe=3.141592653589793,Uqe='org.eclipse.elk.alg.mrtree',Vqe='org.eclipse.elk.alg.mrtree.graph',Wqe='org.eclipse.elk.alg.mrtree.intermediate',Xqe='Set neighbors in level',Yqe='DESCENDANTS',Zqe='org.eclipse.elk.mrtree.weighting',$qe='org.eclipse.elk.mrtree.searchOrder',_qe='org.eclipse.elk.alg.mrtree.options',are='org.eclipse.elk.mrtree',bre='org.eclipse.elk.tree',cre='org.eclipse.elk.alg.radial',dre=6.283185307179586,ere=4.9E-324,fre='org.eclipse.elk.alg.radial.intermediate',gre='org.eclipse.elk.alg.radial.intermediate.compaction',hre={3:1,4:1,5:1,106:1},ire='org.eclipse.elk.alg.radial.intermediate.optimization',jre='No implementation is available for the layout option ',kre='org.eclipse.elk.alg.radial.options',lre='org.eclipse.elk.radial.orderId',mre='org.eclipse.elk.radial.radius',nre='org.eclipse.elk.radial.compactor',ore='org.eclipse.elk.radial.compactionStepSize',pre='org.eclipse.elk.radial.sorter',qre='org.eclipse.elk.radial.wedgeCriteria',rre='org.eclipse.elk.radial.optimizationCriteria',sre='org.eclipse.elk.radial',tre='org.eclipse.elk.alg.radial.p1position.wedge',ure='org.eclipse.elk.alg.radial.sorting',vre=5.497787143782138,wre=3.9269908169872414,xre=2.356194490192345,yre='org.eclipse.elk.alg.rectpacking',zre='org.eclipse.elk.alg.rectpacking.firstiteration',Are='org.eclipse.elk.alg.rectpacking.options',Bre='org.eclipse.elk.rectpacking.optimizationGoal',Cre='org.eclipse.elk.rectpacking.lastPlaceShift',Dre='org.eclipse.elk.rectpacking.currentPosition',Ere='org.eclipse.elk.rectpacking.desiredPosition',Fre='org.eclipse.elk.rectpacking.onlyFirstIteration',Gre='org.eclipse.elk.rectpacking.rowCompaction',Hre='org.eclipse.elk.rectpacking.expandToAspectRatio',Ire='org.eclipse.elk.rectpacking.targetWidth',Jre='org.eclipse.elk.expandNodes',Kre='org.eclipse.elk.rectpacking',Lre='org.eclipse.elk.alg.rectpacking.util',Mre='No implementation available for ',Nre='org.eclipse.elk.alg.spore',Ore='org.eclipse.elk.alg.spore.options',Pre='org.eclipse.elk.sporeCompaction',Qre='org.eclipse.elk.underlyingLayoutAlgorithm',Rre='org.eclipse.elk.processingOrder.treeConstruction',Sre='org.eclipse.elk.processingOrder.spanningTreeCostFunction',Tre='org.eclipse.elk.processingOrder.preferredRoot',Ure='org.eclipse.elk.processingOrder.rootSelection',Vre='org.eclipse.elk.structure.structureExtractionStrategy',Wre='org.eclipse.elk.compaction.compactionStrategy',Xre='org.eclipse.elk.compaction.orthogonal',Yre='org.eclipse.elk.overlapRemoval.maxIterations',Zre='org.eclipse.elk.overlapRemoval.runScanline',$re='processingOrder',_re='overlapRemoval',ase='org.eclipse.elk.sporeOverlap',bse='org.eclipse.elk.alg.spore.p1structure',cse='org.eclipse.elk.alg.spore.p2processingorder',dse='org.eclipse.elk.alg.spore.p3execution',ese='Invalid index: ',fse='org.eclipse.elk.core.alg',gse={331:1},hse={288:1},ise='Make sure its type is registered with the ',jse=' utility class.',kse='true',lse='false',mse="Couldn't clone property '",nse=0.05,ose='org.eclipse.elk.core.options',pse=1.2999999523162842,qse='org.eclipse.elk.box',rse='org.eclipse.elk.box.packingMode',sse='org.eclipse.elk.algorithm',tse='org.eclipse.elk.resolvedAlgorithm',use='org.eclipse.elk.bendPoints',vse='org.eclipse.elk.labelManager',wse='org.eclipse.elk.scaleFactor',xse='org.eclipse.elk.animate',yse='org.eclipse.elk.animTimeFactor',zse='org.eclipse.elk.layoutAncestors',Ase='org.eclipse.elk.maxAnimTime',Bse='org.eclipse.elk.minAnimTime',Cse='org.eclipse.elk.progressBar',Dse='org.eclipse.elk.validateGraph',Ese='org.eclipse.elk.validateOptions',Fse='org.eclipse.elk.zoomToFit',Gse='org.eclipse.elk.font.name',Hse='org.eclipse.elk.font.size',Ise='org.eclipse.elk.edge.type',Jse='partitioning',Kse='nodeLabels',Lse='portAlignment',Mse='nodeSize',Nse='port',Ose='portLabels',Pse='insideSelfLoops',Qse='org.eclipse.elk.fixed',Rse='org.eclipse.elk.random',Sse='port must have a parent node to calculate the port side',Tse='The edge needs to have exactly one edge section. Found: ',Use='org.eclipse.elk.core.util.adapters',Vse='org.eclipse.emf.ecore',Wse='org.eclipse.elk.graph',Xse='EMapPropertyHolder',Yse='ElkBendPoint',Zse='ElkGraphElement',$se='ElkConnectableShape',_se='ElkEdge',ate='ElkEdgeSection',bte='EModelElement',cte='ENamedElement',dte='ElkLabel',ete='ElkNode',fte='ElkPort',gte={92:1,90:1},hte='org.eclipse.emf.common.notify.impl',ite="The feature '",jte="' is not a valid changeable feature",kte='Expecting null',lte="' is not a valid feature",mte='The feature ID',nte=' is not a valid feature ID',ote=32768,pte={105:1,92:1,90:1,56:1,49:1,97:1},qte='org.eclipse.emf.ecore.impl',rte='org.eclipse.elk.graph.impl',ste='Recursive containment not allowed for ',tte="The datatype '",ute="' is not a valid classifier",vte="The value '",wte={190:1,3:1,4:1},xte="The class '",yte='http://www.eclipse.org/elk/ElkGraph',zte=1024,Ate='property',Bte='value',Cte='source',Dte='properties',Ete='identifier',Fte='height',Gte='width',Hte='parent',Ite='text',Jte='children',Kte='hierarchical',Lte='sources',Mte='targets',Nte='sections',Ote='bendPoints',Pte='outgoingShape',Qte='incomingShape',Rte='outgoingSections',Ste='incomingSections',Tte='org.eclipse.emf.common.util',Ute='Severe implementation error in the Json to ElkGraph importer.',Vte='id',Wte='org.eclipse.elk.graph.json',Xte='Unhandled parameter types: ',Yte='startPoint',Zte="An edge must have at least one source and one target (edge id: '",$te="').",_te='Referenced edge section does not exist: ',aue=" (edge id: '",bue='target',cue='sourcePoint',due='targetPoint',eue='group',fue='name',gue='connectableShape cannot be null',hue='edge cannot be null',iue="Passed edge is not 'simple'.",jue='org.eclipse.elk.graph.util',kue="The 'no duplicates' constraint is violated",lue='targetIndex=',mue=', size=',nue='sourceIndex=',oue={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},pue={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},que='logging',rue='measureExecutionTime',sue='parser.parse.1',tue='parser.parse.2',uue='parser.next.1',vue='parser.next.2',wue='parser.next.3',xue='parser.next.4',yue='parser.factor.1',zue='parser.factor.2',Aue='parser.factor.3',Bue='parser.factor.4',Cue='parser.factor.5',Due='parser.factor.6',Eue='parser.atom.1',Fue='parser.atom.2',Gue='parser.atom.3',Hue='parser.atom.4',Iue='parser.atom.5',Jue='parser.cc.1',Kue='parser.cc.2',Lue='parser.cc.3',Mue='parser.cc.5',Nue='parser.cc.6',Oue='parser.cc.7',Pue='parser.cc.8',Que='parser.ope.1',Rue='parser.ope.2',Sue='parser.ope.3',Tue='parser.descape.1',Uue='parser.descape.2',Vue='parser.descape.3',Wue='parser.descape.4',Xue='parser.descape.5',Yue='parser.process.1',Zue='parser.quantifier.1',$ue='parser.quantifier.2',_ue='parser.quantifier.3',ave='parser.quantifier.4',bve='parser.quantifier.5',cve='org.eclipse.emf.common.notify',dve={415:1,672:1},eve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},fve={366:1,143:1},gve='index=',hve={3:1,4:1,5:1,126:1},ive={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},jve={3:1,6:1,4:1,5:1,192:1},kve={3:1,4:1,5:1,165:1,367:1},lve=';/?:@&=+$,',mve='invalid authority: ',nve='EAnnotation',ove='ETypedElement',pve='EStructuralFeature',qve='EAttribute',rve='EClassifier',sve='EEnumLiteral',tve='EGenericType',uve='EOperation',vve='EParameter',wve='EReference',xve='ETypeParameter',yve='org.eclipse.emf.ecore.util',zve={76:1},Ave={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},Bve='org.eclipse.emf.ecore.util.FeatureMap$Entry',Cve=8192,Dve=2048,Eve='byte',Fve='char',Gve='double',Hve='float',Ive='int',Jve='long',Kve='short',Lve='java.lang.Object',Mve={3:1,4:1,5:1,247:1},Nve={3:1,4:1,5:1,673:1},Ove={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},Pve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},Qve='mixed',Rve='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',Sve='kind',Tve={3:1,4:1,5:1,674:1},Uve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},Vve={20:1,28:1,52:1,14:1,15:1,58:1,69:1},Wve={47:1,125:1,279:1},Xve={72:1,332:1},Yve="The value of type '",Zve="' must be of type '",$ve=1316,_ve='http://www.eclipse.org/emf/2002/Ecore',awe=-32768,bwe='constraints',cwe='baseType',dwe='getEStructuralFeature',ewe='getFeatureID',fwe='feature',gwe='getOperationID',hwe='operation',iwe='defaultValue',jwe='eTypeParameters',kwe='isInstance',lwe='getEEnumLiteral',mwe='eContainingClass',nwe={55:1},owe={3:1,4:1,5:1,119:1},pwe='org.eclipse.emf.ecore.resource',qwe={92:1,90:1,591:1,1935:1},rwe='org.eclipse.emf.ecore.resource.impl',swe='unspecified',twe='simple',uwe='attribute',vwe='attributeWildcard',wwe='element',xwe='elementWildcard',ywe='collapse',zwe='itemType',Awe='namespace',Bwe='##targetNamespace',Cwe='whiteSpace',Dwe='wildcards',Ewe='http://www.eclipse.org/emf/2003/XMLType',Fwe='##any',Gwe='uninitialized',Hwe='The multiplicity constraint is violated',Iwe='org.eclipse.emf.ecore.xml.type',Jwe='ProcessingInstruction',Kwe='SimpleAnyType',Lwe='XMLTypeDocumentRoot',Mwe='org.eclipse.emf.ecore.xml.type.impl',Nwe='INF',Owe='processing',Pwe='ENTITIES_._base',Qwe='minLength',Rwe='ENTITY',Swe='NCName',Twe='IDREFS_._base',Uwe='integer',Vwe='token',Wwe='pattern',Xwe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',Ywe='\\i\\c*',Zwe='[\\i-[:]][\\c-[:]]*',$we='nonPositiveInteger',_we='maxInclusive',axe='NMTOKEN',bxe='NMTOKENS_._base',cxe='nonNegativeInteger',dxe='minInclusive',exe='normalizedString',fxe='unsignedByte',gxe='unsignedInt',hxe='18446744073709551615',ixe='unsignedShort',jxe='processingInstruction',kxe='org.eclipse.emf.ecore.xml.type.internal',lxe=1114111,mxe='Internal Error: shorthands: \\u',nxe='xml:isDigit',oxe='xml:isWord',pxe='xml:isSpace',qxe='xml:isNameChar',rxe='xml:isInitialNameChar',sxe='09\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59\u0ED0\u0ED9\u0F20\u0F29',txe='AZaz\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0641\u064A\u0671\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06D5\u06E5\u06E6\u0905\u0939\u093D\u093D\u0958\u0961\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09DC\u09DD\u09DF\u09E1\u09F0\u09F1\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5C\u0A5E\u0A5E\u0A72\u0A74\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABD\u0ABD\u0AE0\u0AE0\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3D\u0B3D\u0B5C\u0B5D\u0B5F\u0B61\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D60\u0D61\u0E01\u0E2E\u0E30\u0E30\u0E32\u0E33\u0E40\u0E45\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB0\u0EB2\u0EB3\u0EBD\u0EBD\u0EC0\u0EC4\u0F40\u0F47\u0F49\u0F69\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30A1\u30FA\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3',uxe='Private Use',vxe='ASSIGNED',wxe='\x00\x7F\x80\xFF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF\u0900\u097F\u0980\u09FF\u0A00\u0A7F\u0A80\u0AFF\u0B00\u0B7F\u0B80\u0BFF\u0C00\u0C7F\u0C80\u0CFF\u0D00\u0D7F\u0D80\u0DFF\u0E00\u0E7F\u0E80\u0EFF\u0F00\u0FFF\u1000\u109F\u10A0\u10FF\u1100\u11FF\u1200\u137F\u13A0\u13FF\u1400\u167F\u1680\u169F\u16A0\u16FF\u1780\u17FF\u1800\u18AF\u1E00\u1EFF\u1F00\u1FFF\u2000\u206F\u2070\u209F\u20A0\u20CF\u20D0\u20FF\u2100\u214F\u2150\u218F\u2190\u21FF\u2200\u22FF\u2300\u23FF\u2400\u243F\u2440\u245F\u2460\u24FF\u2500\u257F\u2580\u259F\u25A0\u25FF\u2600\u26FF\u2700\u27BF\u2800\u28FF\u2E80\u2EFF\u2F00\u2FDF\u2FF0\u2FFF\u3000\u303F\u3040\u309F\u30A0\u30FF\u3100\u312F\u3130\u318F\u3190\u319F\u31A0\u31BF\u3200\u32FF\u3300\u33FF\u3400\u4DB5\u4E00\u9FFF\uA000\uA48F\uA490\uA4CF\uAC00\uD7A3\uE000\uF8FF\uF900\uFAFF\uFB00\uFB4F\uFB50\uFDFF\uFE20\uFE2F\uFE30\uFE4F\uFE50\uFE6F\uFE70\uFEFE\uFEFF\uFEFF\uFF00\uFFEF',xxe='UNASSIGNED',yxe={3:1,117:1},zxe='org.eclipse.emf.ecore.xml.type.util',Axe={3:1,4:1,5:1,368:1},Bxe='org.eclipse.xtext.xbase.lib',Cxe='Cannot add elements to a Range',Dxe='Cannot set elements in a Range',Exe='Cannot remove elements from a Range',Fxe='locale',Gxe='default',Hxe='user.agent';var _,_bb,Wbb,tbb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;acb();bcb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.gm};_.Hb=function sb(){return FCb(this)};_.Ib=function ub(){var a;return hdb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var xD,yD,zD;bcb(290,1,{290:1,2026:1},jdb);_.le=function kdb(a){var b;b=new jdb;b.i=4;a>1?(b.c=rdb(this,a-1)):(b.c=this);return b};_.me=function qdb(){fdb(this);return this.b};_.ne=function sdb(){return hdb(this)};_.oe=function udb(){return fdb(this),this.k};_.pe=function wdb(){return (this.i&4)!=0};_.qe=function xdb(){return (this.i&1)!=0};_.Ib=function Adb(){return idb(this)};_.i=0;var edb=1;var SI=mdb(Phe,'Object',1);var AI=mdb(Phe,'Class',290);bcb(1998,1,Qhe);var $D=mdb(Rhe,'Optional',1998);bcb(1170,1998,Qhe,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var YD=mdb(Rhe,'Absent',1170);bcb(628,1,{},Gb);var ZD=mdb(Rhe,'Joiner',628);var _D=odb(Rhe,'Predicate');bcb(582,1,{169:1,582:1,3:1,45:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(JD(a,582)){b=BD(a,582);return At(this.a,b.a)}return false};_.Hb=function _b(){return qmb(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var aE=mdb(Rhe,'Predicates/AndPredicate',582);bcb(408,1998,{408:1,3:1},cc);_.Fb=function dc(a){var b;if(JD(a,408)){b=BD(a,408);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return Whe+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var bE=mdb(Rhe,'Present',408);bcb(198,1,Yhe);_.Nb=function kc(a){Rrb(this,a)};_.Qb=function lc(){jc()};var MH=mdb(Zhe,'UnmodifiableIterator',198);bcb(1978,198,$he);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw vbb(new bgb)};_.Wb=function oc(a){throw vbb(new bgb)};var NH=mdb(Zhe,'UnmodifiableListIterator',1978);bcb(386,1978,$he);_.Ob=function rc(){return this.c0};_.Pb=function tc(){if(this.c>=this.d){throw vbb(new utb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw vbb(new utb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var cE=mdb(Zhe,'AbstractIndexedListIterator',386);bcb(699,198,Yhe);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var dE=mdb(Zhe,'AbstractIterator',699);bcb(1986,1,{224:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return hw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return fcb(this.Zb())};var IE=mdb(Zhe,'AbstractMultimap',1986);bcb(726,1986,_he);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return Yj(this.c.vc().Nc(),new $g,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return mmb(),new lnb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return Yj(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new dg(this,a,b,null)};_.d=0;var DE=mdb(Zhe,'AbstractMapBasedMultimap',726);bcb(1631,726,_he);_.hc=function pd(){return new Skb(this.a)};_.jc=function qd(){return mmb(),mmb(),jmb};_.cc=function sd(a){return BD(Qc(this,a),15)};_.fc=function ud(a){return BD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return hw(this,a)};_.qc=function td(a){return BD(Qc(this,a),15)};_.rc=function vd(a){return BD(Sc(this,a),15)};_.mc=function wd(a){return vmb(BD(a,15))};_.pc=function xd(a,b){return Vc(this,a,BD(b,15),null)};var eE=mdb(Zhe,'AbstractListMultimap',1631);bcb(732,1,aie);_.Nb=function zd(a){Rrb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=BD(this.c.Pb(),42);this.b=a.cd();this.a=BD(a.dd(),14);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();this.a.dc()&&this.c.Qb();--this.d.d};var mE=mdb(Zhe,'AbstractMapBasedMultimap/Itr',732);bcb(1099,732,aie,Dd);_.sc=function Ed(a,b){return b};var fE=mdb(Zhe,'AbstractMapBasedMultimap/1',1099);bcb(1100,1,{},Fd);_.Kb=function Gd(a){return BD(a,14).Nc()};var gE=mdb(Zhe,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1100);bcb(1101,732,aie,Hd);_.sc=function Id(a,b){return new Wo(a,b)};var hE=mdb(Zhe,'AbstractMapBasedMultimap/2',1101);var DK=odb(bie,'Map');bcb(1967,1,cie);_.wc=function Td(a){stb(this,a)};_.yc=function $d(a,b,c){return ttb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=BD(c.Pb(),42);d=b.dd();if(PD(a)===PD(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!JD(a,83)){return false}d=BD(a,83);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=BD(c.Pb(),42);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return pmb(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Pib(this)};_.zc=function _d(a,b){throw vbb(new cgb('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new $ib(this)};var sJ=mdb(bie,'AbstractMap',1967);bcb(1987,1967,cie);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new Zv(this)):a};var bH=mdb(Zhe,'Maps/ViewCachingAbstractMap',1987);bcb(389,1987,cie,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():ir(new mf(this))};_._b=function pe(a){return Gv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return fcb(this.d)};var lE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap',389);var KI=odb(Phe,'Iterable');bcb(28,1,die);_.Jc=function Le(a){reb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Kub(this,0)};_.Oc=function Qe(){return new YAb(null,this.Nc())};_.Fc=function Ge(a){throw vbb(new cgb('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var dJ=mdb(bie,'AbstractCollection',28);var LK=odb(bie,'Set');bcb(eie,28,fie);_.Nc=function Ye(){return new Kub(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return pmb(this)};var zJ=mdb(bie,'AbstractSet',eie);bcb(1970,eie,fie);var BH=mdb(Zhe,'Sets/ImprovedAbstractSet',1970);bcb(1971,1970,fie);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)){b=BD(a,42);return this.Rc().ec().Mc(b.cd())}return false};_.gc=function cf(){return this.Rc().gc()};var WG=mdb(Zhe,'Maps/EntrySet',1971);bcb(1097,1971,fie,df);_.Hc=function ef(a){return Ck(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Ck(this.a.d.vc(),a)){return false}b=BD(a,42);Tc(this.a.e,b.cd());return true};_.Nc=function jf(){return $j(this.a.d.vc().Nc(),new kf(this.a))};var jE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1097);bcb(1098,1,{},kf);_.Kb=function lf(a){return me(this.a,BD(a,42))};var iE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1098);bcb(730,1,aie,mf);_.Nb=function nf(a){Rrb(this,a)};_.Pb=function pf(){var a;return a=BD(this.b.Pb(),42),this.a=BD(a.dd(),14),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var kE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapIterator',730);bcb(532,1970,fie,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new Xv(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new Mv(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var $G=mdb(Zhe,'Maps/KeySet',532);bcb(318,532,fie,zf);_.$b=function Af(){var a;ir((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=BD(this.b.Bc(a),14);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var oE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet',318);bcb(731,1,aie,Hf);_.Nb=function If(a){Rrb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=BD(this.c.Pb(),42);return this.a.cd()};_.Qb=function Lf(){var a;Vb(!!this.a);a=BD(this.a.dd(),14);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var nE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet/1',731);bcb(491,389,{83:1,161:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Pf(){return this.Tc()};_.Sc=function Of(){return new Yf(this.c,this.Uc())};_.Tc=function Qf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Uc=function Rf(){return BD(this.d,161)};var sE=mdb(Zhe,'AbstractMapBasedMultimap/SortedAsMap',491);bcb(542,491,gie,Sf);_.bc=function Tf(){return new $f(this.a,BD(BD(this.d,161),171))};_.Sc=function Uf(){return new $f(this.a,BD(BD(this.d,161),171))};_.ec=function Vf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Tc=function Wf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Uc=function Xf(){return BD(BD(this.d,161),171)};var pE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableAsMap',542);bcb(490,318,hie,Yf);_.Nc=function Zf(){return this.b.ec().Nc()};var tE=mdb(Zhe,'AbstractMapBasedMultimap/SortedKeySet',490);bcb(388,490,iie,$f);var qE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableKeySet',388);bcb(541,28,die,dg);_.Fc=function eg(a){var b,c;ag(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&_f(this)}return b};_.Gc=function fg(a){var b,c,d;if(a.dc()){return false}d=(ag(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&_f(this)}return b};_.$b=function gg(){var a;a=(ag(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;bg(this)};_.Hc=function hg(a){ag(this);return this.d.Hc(a)};_.Ic=function ig(a){ag(this);return this.d.Ic(a)};_.Fb=function jg(a){if(a===this){return true}ag(this);return pb(this.d,a)};_.Hb=function kg(){ag(this);return tb(this.d)};_.Kc=function lg(){ag(this);return new Gg(this)};_.Mc=function mg(a){var b;ag(this);b=this.d.Mc(a);if(b){--this.f.d;bg(this)}return b};_.gc=function ng(){return cg(this)};_.Nc=function og(){return ag(this),this.d.Nc()};_.Ib=function pg(){ag(this);return fcb(this.d)};var vE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection',541);var yK=odb(bie,'List');bcb(728,541,{20:1,28:1,14:1,15:1},qg);_.ad=function zg(a){ktb(this,a)};_.Nc=function Ag(){return ag(this),this.d.Nc()};_.Vc=function rg(a,b){var c;ag(this);c=this.d.dc();BD(this.d,15).Vc(a,b);++this.a.d;c&&_f(this)};_.Wc=function sg(a,b){var c,d,e;if(b.dc()){return false}e=(ag(this),this.d.gc());c=BD(this.d,15).Wc(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&_f(this)}return c};_.Xb=function tg(a){ag(this);return BD(this.d,15).Xb(a)};_.Xc=function ug(a){ag(this);return BD(this.d,15).Xc(a)};_.Yc=function vg(){ag(this);return new Mg(this)};_.Zc=function wg(a){ag(this);return new Ng(this,a)};_.$c=function xg(a){var b;ag(this);b=BD(this.d,15).$c(a);--this.a.d;bg(this);return b};_._c=function yg(a,b){ag(this);return BD(this.d,15)._c(a,b)};_.bd=function Bg(a,b){ag(this);return Vc(this.a,this.e,BD(this.d,15).bd(a,b),!this.b?this:this.b)};var xE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList',728);bcb(1096,728,{20:1,28:1,14:1,15:1,54:1},Cg);var rE=mdb(Zhe,'AbstractMapBasedMultimap/RandomAccessWrappedList',1096);bcb(620,1,aie,Gg);_.Nb=function Ig(a){Rrb(this,a)};_.Ob=function Jg(){Fg(this);return this.b.Ob()};_.Pb=function Kg(){Fg(this);return this.b.Pb()};_.Qb=function Lg(){Eg(this)};var uE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',620);bcb(729,620,jie,Mg,Ng);_.Qb=function Tg(){Eg(this)};_.Rb=function Og(a){var b;b=cg(this.a)==0;(Fg(this),BD(this.b,125)).Rb(a);++this.a.a.d;b&&_f(this.a)};_.Sb=function Pg(){return (Fg(this),BD(this.b,125)).Sb()};_.Tb=function Qg(){return (Fg(this),BD(this.b,125)).Tb()};_.Ub=function Rg(){return (Fg(this),BD(this.b,125)).Ub()};_.Vb=function Sg(){return (Fg(this),BD(this.b,125)).Vb()};_.Wb=function Ug(a){(Fg(this),BD(this.b,125)).Wb(a)};var wE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',729);bcb(727,541,hie,Vg);_.Nc=function Wg(){return ag(this),this.d.Nc()};var AE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSortedSet',727);bcb(1095,727,iie,Xg);var yE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedNavigableSet',1095);bcb(1094,541,fie,Yg);_.Nc=function Zg(){return ag(this),this.d.Nc()};var zE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSet',1094);bcb(1103,1,{},$g);_.Kb=function _g(a){return fd(BD(a,42))};var BE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$1$Type',1103);bcb(1102,1,{},ah);_.Kb=function bh(a){return new Wo(this.a,a)};var CE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$2$Type',1102);var CK=odb(bie,'Map/Entry');bcb(345,1,kie);_.Fb=function dh(a){var b;if(JD(a,42)){b=BD(a,42);return Hb(this.cd(),b.cd())&&Hb(this.dd(),b.dd())}return false};_.Hb=function eh(){var a,b;a=this.cd();b=this.dd();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.ed=function fh(a){throw vbb(new bgb)};_.Ib=function gh(){return this.cd()+'='+this.dd()};var EE=mdb(Zhe,lie,345);bcb(1988,28,die);_.$b=function hh(){this.fd().$b()};_.Hc=function ih(a){var b;if(JD(a,42)){b=BD(a,42);return Cc(this.fd(),b.cd(),b.dd())}return false};_.Mc=function jh(a){var b;if(JD(a,42)){b=BD(a,42);return Gc(this.fd(),b.cd(),b.dd())}return false};_.gc=function kh(){return this.fd().d};var fH=mdb(Zhe,'Multimaps/Entries',1988);bcb(733,1988,die,lh);_.Kc=function mh(){return this.a.kc()};_.fd=function nh(){return this.a};_.Nc=function oh(){return this.a.lc()};var FE=mdb(Zhe,'AbstractMultimap/Entries',733);bcb(734,733,fie,ph);_.Nc=function sh(){return this.a.lc()};_.Fb=function qh(a){return Ax(this,a)};_.Hb=function rh(){return Bx(this)};var GE=mdb(Zhe,'AbstractMultimap/EntrySet',734);bcb(735,28,die,th);_.$b=function uh(){this.a.$b()};_.Hc=function vh(a){return Dc(this.a,a)};_.Kc=function wh(){return this.a.nc()};_.gc=function xh(){return this.a.d};_.Nc=function yh(){return this.a.oc()};var HE=mdb(Zhe,'AbstractMultimap/Values',735);bcb(1989,28,{835:1,20:1,28:1,14:1});_.Jc=function Gh(a){Qb(a);Ah(this).Jc(new Xw(a))};_.Nc=function Kh(){var a;return a=Ah(this).Nc(),Yj(a,new cx,64|a.qd()&1296,this.a.d)};_.Fc=function Ch(a){zh();return true};_.Gc=function Dh(a){return Qb(this),Qb(a),JD(a,543)?Zw(BD(a,835)):!a.dc()&&fr(this,a.Kc())};_.Hc=function Eh(a){var b;return b=BD(Hv(nd(this.a),a),14),(!b?0:b.gc())>0};_.Fb=function Fh(a){return $w(this,a)};_.Hb=function Hh(){return tb(Ah(this))};_.dc=function Ih(){return Ah(this).dc()};_.Mc=function Jh(a){return Bw(this,a,1)>0};_.Ib=function Lh(){return fcb(Ah(this))};var KE=mdb(Zhe,'AbstractMultiset',1989);bcb(1991,1970,fie);_.$b=function Mh(){Nc(this.a.a)};_.Hc=function Nh(a){var b,c;if(JD(a,492)){c=BD(a,416);if(BD(c.a.dd(),14).gc()<=0){return false}b=Aw(this.a,c.a.cd());return b==BD(c.a.dd(),14).gc()}return false};_.Mc=function Oh(a){var b,c,d,e;if(JD(a,492)){c=BD(a,416);b=c.a.cd();d=BD(c.a.dd(),14).gc();if(d!=0){e=this.a;return ax(e,b,d)}}return false};var pH=mdb(Zhe,'Multisets/EntrySet',1991);bcb(1109,1991,fie,Ph);_.Kc=function Qh(){return new Lw(fe(nd(this.a.a)).Kc())};_.gc=function Rh(){return nd(this.a.a).gc()};var JE=mdb(Zhe,'AbstractMultiset/EntrySet',1109);bcb(619,726,_he);_.hc=function Uh(){return this.gd()};_.jc=function Vh(){return this.hd()};_.cc=function Yh(a){return this.jd(a)};_.fc=function $h(a){return this.kd(a)};_.Zb=function Th(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.hd=function Wh(){return mmb(),mmb(),lmb};_.Fb=function Xh(a){return hw(this,a)};_.jd=function Zh(a){return BD(Qc(this,a),21)};_.kd=function _h(a){return BD(Sc(this,a),21)};_.mc=function ai(a){return mmb(),new zob(BD(a,21))};_.pc=function bi(a,b){return new Yg(this,a,BD(b,21))};var LE=mdb(Zhe,'AbstractSetMultimap',619);bcb(1657,619,_he);_.hc=function ei(){return new Hxb(this.b)};_.gd=function fi(){return new Hxb(this.b)};_.jc=function gi(){return Ix(new Hxb(this.b))};_.hd=function hi(){return Ix(new Hxb(this.b))};_.cc=function ii(a){return BD(BD(Qc(this,a),21),84)};_.jd=function ji(a){return BD(BD(Qc(this,a),21),84)};_.fc=function ki(a){return BD(BD(Sc(this,a),21),84)};_.kd=function li(a){return BD(BD(Sc(this,a),21),84)};_.mc=function mi(a){return JD(a,271)?Ix(BD(a,271)):(mmb(),new Zob(BD(a,84)))};_.Zb=function di(){var a;return a=this.f,!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a};_.pc=function ni(a,b){return JD(b,271)?new Xg(this,a,BD(b,271)):new Vg(this,a,BD(b,84))};var NE=mdb(Zhe,'AbstractSortedSetMultimap',1657);bcb(1658,1657,_he);_.Zb=function pi(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.ec=function ri(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.bc=function qi(){return JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)};var ME=mdb(Zhe,'AbstractSortedKeySortedSetMultimap',1658);bcb(2010,1,{1947:1});_.Fb=function si(a){return zy(this,a)};_.Hb=function ti(){var a;return pmb((a=this.g,!a?(this.g=new vi(this)):a))};_.Ib=function ui(){var a;return Md((a=this.f,!a?(this.f=new Rj(this)):a))};var QE=mdb(Zhe,'AbstractTable',2010);bcb(665,eie,fie,vi);_.$b=function wi(){Pi()};_.Hc=function xi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Ck(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.Kc=function yi(){return Ni(this.a)};_.Mc=function zi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Dk(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.gc=function Ai(){return Xi(this.a)};_.Nc=function Bi(){return Oi(this.a)};var OE=mdb(Zhe,'AbstractTable/CellSet',665);bcb(1928,28,die,Ci);_.$b=function Di(){Pi()};_.Hc=function Ei(a){return Qi(this.a,a)};_.Kc=function Fi(){return Zi(this.a)};_.gc=function Gi(){return Xi(this.a)};_.Nc=function Hi(){return $i(this.a)};var PE=mdb(Zhe,'AbstractTable/Values',1928);bcb(1632,1631,_he);var RE=mdb(Zhe,'ArrayListMultimapGwtSerializationDependencies',1632);bcb(513,1632,_he,Ji,Ki);_.hc=function Li(){return new Skb(this.a)};_.a=0;var SE=mdb(Zhe,'ArrayListMultimap',513);bcb(664,2010,{664:1,1947:1,3:1},_i);var cF=mdb(Zhe,'ArrayTable',664);bcb(1924,386,$he,aj);_.Xb=function bj(a){return new hj(this.a,a)};var TE=mdb(Zhe,'ArrayTable/1',1924);bcb(1925,1,{},cj);_.ld=function dj(a){return new hj(this.a,a)};var UE=mdb(Zhe,'ArrayTable/1methodref$getCell$Type',1925);bcb(2011,1,{682:1});_.Fb=function ej(a){var b;if(a===this){return true}if(JD(a,468)){b=BD(a,682);return Hb(Em(this.c.e,this.b),Em(b.c.e,b.b))&&Hb(Em(this.c.c,this.a),Em(b.c.c,b.a))&&Hb(Mi(this.c,this.b,this.a),Mi(b.c,b.b,b.a))}return false};_.Hb=function fj(){return Hlb(OC(GC(SI,1),Uhe,1,5,[Em(this.c.e,this.b),Em(this.c.c,this.a),Mi(this.c,this.b,this.a)]))};_.Ib=function gj(){return '('+Em(this.c.e,this.b)+','+Em(this.c.c,this.a)+')='+Mi(this.c,this.b,this.a)};var JH=mdb(Zhe,'Tables/AbstractCell',2011);bcb(468,2011,{468:1,682:1},hj);_.a=0;_.b=0;_.d=0;var VE=mdb(Zhe,'ArrayTable/2',468);bcb(1927,1,{},ij);_.ld=function jj(a){return Ti(this.a,a)};var WE=mdb(Zhe,'ArrayTable/2methodref$getValue$Type',1927);bcb(1926,386,$he,kj);_.Xb=function lj(a){return Ti(this.a,a)};var XE=mdb(Zhe,'ArrayTable/3',1926);bcb(1979,1967,cie);_.$b=function nj(){ir(this.kc())};_.vc=function oj(){return new Sv(this)};_.lc=function pj(){return new Mub(this.kc(),this.gc())};var YG=mdb(Zhe,'Maps/IteratorBasedAbstractMap',1979);bcb(828,1979,cie);_.$b=function tj(){throw vbb(new bgb)};_._b=function uj(a){return sn(this.c,a)};_.kc=function vj(){return new Jj(this,this.c.b.c.gc())};_.lc=function wj(){return Zj(this.c.b.c.gc(),16,new Dj(this))};_.xc=function xj(a){var b;b=BD(tn(this.c,a),19);return !b?null:this.nd(b.a)};_.dc=function yj(){return this.c.b.c.dc()};_.ec=function zj(){return Xm(this.c)};_.zc=function Aj(a,b){var c;c=BD(tn(this.c,a),19);if(!c){throw vbb(new Wdb(this.md()+' '+a+' not in '+Xm(this.c)))}return this.od(c.a,b)};_.Bc=function Bj(a){throw vbb(new bgb)};_.gc=function Cj(){return this.c.b.c.gc()};var _E=mdb(Zhe,'ArrayTable/ArrayMap',828);bcb(1923,1,{},Dj);_.ld=function Ej(a){return qj(this.a,a)};var YE=mdb(Zhe,'ArrayTable/ArrayMap/0methodref$getEntry$Type',1923);bcb(1921,345,kie,Fj);_.cd=function Gj(){return rj(this.a,this.b)};_.dd=function Hj(){return this.a.nd(this.b)};_.ed=function Ij(a){return this.a.od(this.b,a)};_.b=0;var ZE=mdb(Zhe,'ArrayTable/ArrayMap/1',1921);bcb(1922,386,$he,Jj);_.Xb=function Kj(a){return qj(this.a,a)};var $E=mdb(Zhe,'ArrayTable/ArrayMap/2',1922);bcb(1920,828,cie,Lj);_.md=function Mj(){return 'Column'};_.nd=function Nj(a){return Mi(this.b,this.a,a)};_.od=function Oj(a,b){return Wi(this.b,this.a,a,b)};_.a=0;var bF=mdb(Zhe,'ArrayTable/Row',1920);bcb(829,828,cie,Rj);_.nd=function Tj(a){return new Lj(this.a,a)};_.zc=function Uj(a,b){return BD(b,83),Pj()};_.od=function Vj(a,b){return BD(b,83),Qj()};_.md=function Sj(){return 'Row'};var aF=mdb(Zhe,'ArrayTable/RowMap',829);bcb(1120,1,pie,_j);_.qd=function ak(){return this.a.qd()&-262};_.rd=function bk(){return this.a.rd()};_.Nb=function ck(a){this.a.Nb(new gk(a,this.b))};_.sd=function dk(a){return this.a.sd(new ek(a,this.b))};var lF=mdb(Zhe,'CollectSpliterators/1',1120);bcb(1121,1,qie,ek);_.td=function fk(a){this.a.td(this.b.Kb(a))};var dF=mdb(Zhe,'CollectSpliterators/1/lambda$0$Type',1121);bcb(1122,1,qie,gk);_.td=function hk(a){this.a.td(this.b.Kb(a))};var eF=mdb(Zhe,'CollectSpliterators/1/lambda$1$Type',1122);bcb(1123,1,pie,jk);_.qd=function kk(){return this.a};_.rd=function lk(){!!this.d&&(this.b=Deb(this.b,this.d.rd()));return Deb(this.b,0)};_.Nb=function mk(a){if(this.d){this.d.Nb(a);this.d=null}this.c.Nb(new rk(this.e,a));this.b=0};_.sd=function ok(a){while(true){if(!!this.d&&this.d.sd(a)){Kbb(this.b,rie)&&(this.b=Qbb(this.b,1));return true}else{this.d=null}if(!this.c.sd(new pk(this,this.e))){return false}}};_.a=0;_.b=0;var hF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator',1123);bcb(1124,1,qie,pk);_.td=function qk(a){ik(this.a,this.b,a)};var fF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$0$Type',1124);bcb(1125,1,qie,rk);_.td=function sk(a){nk(this.b,this.a,a)};var gF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$1$Type',1125);bcb(1117,1,pie,tk);_.qd=function uk(){return 16464|this.b};_.rd=function vk(){return this.a.rd()};_.Nb=function wk(a){this.a.xe(new Ak(a,this.c))};_.sd=function xk(a){return this.a.ye(new yk(a,this.c))};_.b=0;var kF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics',1117);bcb(1118,1,sie,yk);_.ud=function zk(a){this.a.td(this.b.ld(a))};var iF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1118);bcb(1119,1,sie,Ak);_.ud=function Bk(a){this.a.td(this.b.ld(a))};var jF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1119);bcb(245,1,tie);_.wd=function Hk(a){return this.vd(BD(a,245))};_.vd=function Gk(a){var b;if(a==(_k(),$k)){return 1}if(a==(Lk(),Kk)){return -1}b=(ex(),Fcb(this.a,a.a));if(b!=0){return b}return JD(this,519)==JD(a,519)?0:JD(this,519)?1:-1};_.zd=function Ik(){return this.a};_.Fb=function Jk(a){return Ek(this,a)};var qF=mdb(Zhe,'Cut',245);bcb(1761,245,tie,Mk);_.vd=function Nk(a){return a==this?0:1};_.xd=function Ok(a){throw vbb(new xcb)};_.yd=function Pk(a){a.a+='+\u221E)'};_.zd=function Qk(){throw vbb(new Zdb(uie))};_.Hb=function Rk(){return Zfb(),kCb(this)};_.Ad=function Sk(a){return false};_.Ib=function Tk(){return '+\u221E'};var Kk;var mF=mdb(Zhe,'Cut/AboveAll',1761);bcb(519,245,{245:1,519:1,3:1,35:1},Uk);_.xd=function Vk(a){Pfb((a.a+='(',a),this.a)};_.yd=function Wk(a){Kfb(Pfb(a,this.a),93)};_.Hb=function Xk(){return ~tb(this.a)};_.Ad=function Yk(a){return ex(),Fcb(this.a,a)<0};_.Ib=function Zk(){return '/'+this.a+'\\'};var nF=mdb(Zhe,'Cut/AboveValue',519);bcb(1760,245,tie,al);_.vd=function bl(a){return a==this?0:-1};_.xd=function cl(a){a.a+='(-\u221E'};_.yd=function dl(a){throw vbb(new xcb)};_.zd=function el(){throw vbb(new Zdb(uie))};_.Hb=function fl(){return Zfb(),kCb(this)};_.Ad=function gl(a){return true};_.Ib=function hl(){return '-\u221E'};var $k;var oF=mdb(Zhe,'Cut/BelowAll',1760);bcb(1762,245,tie,il);_.xd=function jl(a){Pfb((a.a+='[',a),this.a)};_.yd=function kl(a){Kfb(Pfb(a,this.a),41)};_.Hb=function ll(){return tb(this.a)};_.Ad=function ml(a){return ex(),Fcb(this.a,a)<=0};_.Ib=function nl(){return '\\'+this.a+'/'};var pF=mdb(Zhe,'Cut/BelowValue',1762);bcb(537,1,vie);_.Jc=function ql(a){reb(this,a)};_.Ib=function rl(){return tr(BD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var uF=mdb(Zhe,'FluentIterable',537);bcb(433,537,vie,sl);_.Kc=function tl(){return new Sr(ur(this.a.Kc(),new Sq))};var rF=mdb(Zhe,'FluentIterable/2',433);bcb(1046,537,vie,vl);_.Kc=function wl(){return ul(this)};var tF=mdb(Zhe,'FluentIterable/3',1046);bcb(708,386,$he,xl);_.Xb=function yl(a){return this.a[a].Kc()};var sF=mdb(Zhe,'FluentIterable/3/1',708);bcb(1972,1,{});_.Ib=function zl(){return fcb(this.Bd().b)};var BF=mdb(Zhe,'ForwardingObject',1972);bcb(1973,1972,wie);_.Bd=function Fl(){return this.Cd()};_.Jc=function Gl(a){reb(this,a)};_.Lc=function Jl(){return this.Oc()};_.Nc=function Ml(){return new Kub(this,0)};_.Oc=function Nl(){return new YAb(null,this.Nc())};_.Fc=function Al(a){return this.Cd(),enb()};_.Gc=function Bl(a){return this.Cd(),fnb()};_.$b=function Cl(){this.Cd(),gnb()};_.Hc=function Dl(a){return this.Cd().Hc(a)};_.Ic=function El(a){return this.Cd().Ic(a)};_.dc=function Hl(){return this.Cd().b.dc()};_.Kc=function Il(){return this.Cd().Kc()};_.Mc=function Kl(a){return this.Cd(),jnb()};_.gc=function Ll(){return this.Cd().b.gc()};_.Pc=function Ol(){return this.Cd().Pc()};_.Qc=function Pl(a){return this.Cd().Qc(a)};var vF=mdb(Zhe,'ForwardingCollection',1973);bcb(1980,28,xie);_.Kc=function Xl(){return this.Ed()};_.Fc=function Sl(a){throw vbb(new bgb)};_.Gc=function Tl(a){throw vbb(new bgb)};_.$b=function Ul(){throw vbb(new bgb)};_.Hc=function Vl(a){return a!=null&&ze(this,a,false)};_.Dd=function Wl(){switch(this.gc()){case 0:return im(),im(),hm;case 1:return im(),new my(Qb(this.Ed().Pb()));default:return new px(this,this.Pc());}};_.Mc=function Yl(a){throw vbb(new bgb)};var WF=mdb(Zhe,'ImmutableCollection',1980);bcb(712,1980,xie,Zl);_.Kc=function cm(){return vr(this.a.Kc())};_.Hc=function $l(a){return a!=null&&this.a.Hc(a)};_.Ic=function _l(a){return this.a.Ic(a)};_.dc=function am(){return this.a.dc()};_.Ed=function bm(){return vr(this.a.Kc())};_.gc=function dm(){return this.a.gc()};_.Pc=function em(){return this.a.Pc()};_.Qc=function fm(a){return this.a.Qc(a)};_.Ib=function gm(){return fcb(this.a)};var wF=mdb(Zhe,'ForwardingImmutableCollection',712);bcb(152,1980,yie);_.Kc=function sm(){return this.Ed()};_.Yc=function tm(){return this.Fd(0)};_.Zc=function vm(a){return this.Fd(a)};_.ad=function zm(a){ktb(this,a)};_.Nc=function Am(){return new Kub(this,16)};_.bd=function Cm(a,b){return this.Gd(a,b)};_.Vc=function lm(a,b){throw vbb(new bgb)};_.Wc=function mm(a,b){throw vbb(new bgb)};_.Fb=function om(a){return Ju(this,a)};_.Hb=function pm(){return Ku(this)};_.Xc=function qm(a){return a==null?-1:Lu(this,a)};_.Ed=function rm(){return this.Fd(0)};_.Fd=function um(a){return jm(this,a)};_.$c=function xm(a){throw vbb(new bgb)};_._c=function ym(a,b){throw vbb(new bgb)};_.Gd=function Bm(a,b){var c;return Dm((c=new $u(this),new Jib(c,a,b)))};var hm;var _F=mdb(Zhe,'ImmutableList',152);bcb(2006,152,yie);_.Kc=function Nm(){return vr(this.Hd().Kc())};_.bd=function Qm(a,b){return Dm(this.Hd().bd(a,b))};_.Hc=function Fm(a){return a!=null&&this.Hd().Hc(a)};_.Ic=function Gm(a){return this.Hd().Ic(a)};_.Fb=function Hm(a){return pb(this.Hd(),a)};_.Xb=function Im(a){return Em(this,a)};_.Hb=function Jm(){return tb(this.Hd())};_.Xc=function Km(a){return this.Hd().Xc(a)};_.dc=function Lm(){return this.Hd().dc()};_.Ed=function Mm(){return vr(this.Hd().Kc())};_.gc=function Om(){return this.Hd().gc()};_.Gd=function Pm(a,b){return Dm(this.Hd().bd(a,b))};_.Pc=function Rm(){return this.Hd().Qc(KC(SI,Uhe,1,this.Hd().gc(),5,1))};_.Qc=function Sm(a){return this.Hd().Qc(a)};_.Ib=function Tm(){return fcb(this.Hd())};var xF=mdb(Zhe,'ForwardingImmutableList',2006);bcb(714,1,Aie);_.vc=function cn(){return Wm(this)};_.wc=function en(a){stb(this,a)};_.ec=function jn(){return Xm(this)};_.yc=function kn(a,b,c){return ttb(this,a,b,c)};_.Cc=function rn(){return this.Ld()};_.$b=function Zm(){throw vbb(new bgb)};_._b=function $m(a){return this.xc(a)!=null};_.uc=function _m(a){return this.Ld().Hc(a)};_.Jd=function an(){return new jq(this)};_.Kd=function bn(){return new sq(this)};_.Fb=function dn(a){return Dv(this,a)};_.Hb=function gn(){return Wm(this).Hb()};_.dc=function hn(){return this.gc()==0};_.zc=function nn(a,b){return Ym()};_.Bc=function on(a){throw vbb(new bgb)};_.Ib=function pn(){return Jv(this)};_.Ld=function qn(){if(this.e){return this.e}return this.e=this.Kd()};_.c=null;_.d=null;_.e=null;var Um;var iG=mdb(Zhe,'ImmutableMap',714);bcb(715,714,Aie);_._b=function vn(a){return sn(this,a)};_.uc=function wn(a){return dob(this.b,a)};_.Id=function xn(){return Vn(new Ln(this))};_.Jd=function yn(){return Vn(gob(this.b))};_.Kd=function zn(){return Ql(),new Zl(hob(this.b))};_.Fb=function An(a){return fob(this.b,a)};_.xc=function Bn(a){return tn(this,a)};_.Hb=function Cn(){return tb(this.b.c)};_.dc=function Dn(){return this.b.c.dc()};_.gc=function En(){return this.b.c.gc()};_.Ib=function Fn(){return fcb(this.b.c)};var zF=mdb(Zhe,'ForwardingImmutableMap',715);bcb(1974,1973,Bie);_.Bd=function Gn(){return this.Md()};_.Cd=function Hn(){return this.Md()};_.Nc=function Kn(){return new Kub(this,1)};_.Fb=function In(a){return a===this||this.Md().Fb(a)};_.Hb=function Jn(){return this.Md().Hb()};var CF=mdb(Zhe,'ForwardingSet',1974);bcb(1069,1974,Bie,Ln);_.Bd=function Nn(){return eob(this.a.b)};_.Cd=function On(){return eob(this.a.b)};_.Hc=function Mn(b){if(JD(b,42)&&BD(b,42).cd()==null){return false}try{return Dob(eob(this.a.b),b)}catch(a){a=ubb(a);if(JD(a,205)){return false}else throw vbb(a)}};_.Md=function Pn(){return eob(this.a.b)};_.Qc=function Qn(a){var b;b=Eob(eob(this.a.b),a);eob(this.a.b).b.gc()=0?'+':'')+(c/60|0);b=kB($wnd.Math.abs(c)%60);return (Dpb(),Bpb)[this.q.getDay()]+' '+Cpb[this.q.getMonth()]+' '+kB(this.q.getDate())+' '+kB(this.q.getHours())+':'+kB(this.q.getMinutes())+':'+kB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var $J=mdb(bie,'Date',199);bcb(1915,199,Cje,nB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var eI=mdb('com.google.gwt.i18n.shared.impl','DateRecord',1915);bcb(1966,1,{});_.fe=function oB(){return null};_.ge=function pB(){return null};_.he=function qB(){return null};_.ie=function rB(){return null};_.je=function sB(){return null};var nI=mdb(Dje,'JSONValue',1966);bcb(216,1966,{216:1},wB,xB);_.Fb=function yB(a){if(!JD(a,216)){return false}return qz(this.a,BD(a,216).a)};_.ee=function zB(){return DB};_.Hb=function AB(){return rz(this.a)};_.fe=function BB(){return this};_.Ib=function CB(){var a,b,c;c=new Wfb('[');for(b=0,a=this.a.length;b0&&(c.a+=',',c);Pfb(c,tB(this,b))}c.a+=']';return c.a};var fI=mdb(Dje,'JSONArray',216);bcb(483,1966,{483:1},HB);_.ee=function IB(){return LB};_.ge=function JB(){return this};_.Ib=function KB(){return Bcb(),''+this.a};_.a=false;var EB,FB;var gI=mdb(Dje,'JSONBoolean',483);bcb(985,60,Tie,MB);var hI=mdb(Dje,'JSONException',985);bcb(1023,1966,{},PB);_.ee=function QB(){return SB};_.Ib=function RB(){return Xhe};var NB;var iI=mdb(Dje,'JSONNull',1023);bcb(258,1966,{258:1},TB);_.Fb=function UB(a){if(!JD(a,258)){return false}return this.a==BD(a,258).a};_.ee=function VB(){return ZB};_.Hb=function WB(){return Hdb(this.a)};_.he=function XB(){return this};_.Ib=function YB(){return this.a+''};_.a=0;var jI=mdb(Dje,'JSONNumber',258);bcb(183,1966,{183:1},eC,fC);_.Fb=function gC(a){if(!JD(a,183)){return false}return qz(this.a,BD(a,183).a)};_.ee=function hC(){return lC};_.Hb=function iC(){return rz(this.a)};_.ie=function jC(){return this};_.Ib=function kC(){var a,b,c,d,e,f,g;g=new Wfb('{');a=true;f=$B(this,KC(ZI,nie,2,0,6,1));for(c=f,d=0,e=c.length;d=0?':'+this.c:'')+')'};_.c=0;var VI=mdb(Phe,'StackTraceElement',310);zD={3:1,475:1,35:1,2:1};var ZI=mdb(Phe,Vie,2);bcb(107,418,{475:1},Hfb,Ifb,Jfb);var WI=mdb(Phe,'StringBuffer',107);bcb(100,418,{475:1},Ufb,Vfb,Wfb);var XI=mdb(Phe,'StringBuilder',100);bcb(687,73,Mje,Xfb);var YI=mdb(Phe,'StringIndexOutOfBoundsException',687);bcb(2043,1,{});var Yfb;bcb(844,1,{},_fb);_.Kb=function agb(a){return BD(a,78).e};var $I=mdb(Phe,'Throwable/lambda$0$Type',844);bcb(41,60,{3:1,102:1,60:1,78:1,41:1},bgb,cgb);var aJ=mdb(Phe,'UnsupportedOperationException',41);bcb(240,236,{3:1,35:1,236:1,240:1},sgb,tgb);_.wd=function wgb(a){return mgb(this,BD(a,240))};_.ke=function xgb(){return Hcb(rgb(this))};_.Fb=function ygb(a){var b;if(this===a){return true}if(JD(a,240)){b=BD(a,240);return this.e==b.e&&mgb(this,b)==0}return false};_.Hb=function zgb(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Cbb(this.f);this.b=Tbb(xbb(a,-1));this.b=33*this.b+Tbb(xbb(Obb(a,32),-1));this.b=17*this.b+QD(this.e);return this.b}this.b=17*Ngb(this.c)+QD(this.e);return this.b};_.Ib=function Agb(){return rgb(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var dgb,egb,fgb,ggb,hgb,igb,jgb,kgb;var bJ=mdb('java.math','BigDecimal',240);bcb(91,236,{3:1,35:1,236:1,91:1},Tgb,Ugb,Vgb,Wgb,Xgb,Ygb);_.wd=function $gb(a){return Igb(this,BD(a,91))};_.ke=function _gb(){return Hcb(shb(this,0))};_.Fb=function ahb(a){return Kgb(this,a)};_.Hb=function chb(){return Ngb(this)};_.Ib=function ehb(){return shb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Bgb,Cgb,Dgb,Egb,Fgb,Ggb;var cJ=mdb('java.math','BigInteger',91);var nhb,ohb;var Bhb,Chb;bcb(488,1967,cie);_.$b=function Xhb(){Uhb(this)};_._b=function Yhb(a){return Mhb(this,a)};_.uc=function Zhb(a){return Nhb(this,a,this.g)||Nhb(this,a,this.f)};_.vc=function $hb(){return new eib(this)};_.xc=function _hb(a){return Ohb(this,a)};_.zc=function aib(a,b){return Rhb(this,a,b)};_.Bc=function bib(a){return Thb(this,a)};_.gc=function cib(){return Vhb(this)};var gJ=mdb(bie,'AbstractHashMap',488);bcb(261,eie,fie,eib);_.$b=function fib(){this.a.$b()};_.Hc=function gib(a){return dib(this,a)};_.Kc=function hib(){return new nib(this.a)};_.Mc=function iib(a){var b;if(dib(this,a)){b=BD(a,42).cd();this.a.Bc(b);return true}return false};_.gc=function jib(){return this.a.gc()};var fJ=mdb(bie,'AbstractHashMap/EntrySet',261);bcb(262,1,aie,nib);_.Nb=function oib(a){Rrb(this,a)};_.Pb=function qib(){return lib(this)};_.Ob=function pib(){return this.b};_.Qb=function rib(){mib(this)};_.b=false;var eJ=mdb(bie,'AbstractHashMap/EntrySetIterator',262);bcb(417,1,aie,vib);_.Nb=function wib(a){Rrb(this,a)};_.Ob=function xib(){return sib(this)};_.Pb=function yib(){return tib(this)};_.Qb=function zib(){uib(this)};_.b=0;_.c=-1;var hJ=mdb(bie,'AbstractList/IteratorImpl',417);bcb(96,417,jie,Bib);_.Qb=function Hib(){uib(this)};_.Rb=function Cib(a){Aib(this,a)};_.Sb=function Dib(){return this.b>0};_.Tb=function Eib(){return this.b};_.Ub=function Fib(){return sCb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Gib(){return this.b-1};_.Wb=function Iib(a){yCb(this.c!=-1);this.a._c(this.c,a)};var iJ=mdb(bie,'AbstractList/ListIteratorImpl',96);bcb(219,52,Lie,Jib);_.Vc=function Kib(a,b){wCb(a,this.b);this.c.Vc(this.a+a,b);++this.b};_.Xb=function Lib(a){tCb(a,this.b);return this.c.Xb(this.a+a)};_.$c=function Mib(a){var b;tCb(a,this.b);b=this.c.$c(this.a+a);--this.b;return b};_._c=function Nib(a,b){tCb(a,this.b);return this.c._c(this.a+a,b)};_.gc=function Oib(){return this.b};_.a=0;_.b=0;var jJ=mdb(bie,'AbstractList/SubList',219);bcb(384,eie,fie,Pib);_.$b=function Qib(){this.a.$b()};_.Hc=function Rib(a){return this.a._b(a)};_.Kc=function Sib(){var a;return a=this.a.vc().Kc(),new Vib(a)};_.Mc=function Tib(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function Uib(){return this.a.gc()};var mJ=mdb(bie,'AbstractMap/1',384);bcb(691,1,aie,Vib);_.Nb=function Wib(a){Rrb(this,a)};_.Ob=function Xib(){return this.a.Ob()};_.Pb=function Yib(){var a;return a=BD(this.a.Pb(),42),a.cd()};_.Qb=function Zib(){this.a.Qb()};var lJ=mdb(bie,'AbstractMap/1/1',691);bcb(226,28,die,$ib);_.$b=function _ib(){this.a.$b()};_.Hc=function ajb(a){return this.a.uc(a)};_.Kc=function bjb(){var a;return a=this.a.vc().Kc(),new djb(a)};_.gc=function cjb(){return this.a.gc()};var oJ=mdb(bie,'AbstractMap/2',226);bcb(294,1,aie,djb);_.Nb=function ejb(a){Rrb(this,a)};_.Ob=function fjb(){return this.a.Ob()};_.Pb=function gjb(){var a;return a=BD(this.a.Pb(),42),a.dd()};_.Qb=function hjb(){this.a.Qb()};var nJ=mdb(bie,'AbstractMap/2/1',294);bcb(484,1,{484:1,42:1});_.Fb=function jjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.d,b.cd())&&wtb(this.e,b.dd())};_.cd=function kjb(){return this.d};_.dd=function ljb(){return this.e};_.Hb=function mjb(){return xtb(this.d)^xtb(this.e)};_.ed=function njb(a){return ijb(this,a)};_.Ib=function ojb(){return this.d+'='+this.e};var pJ=mdb(bie,'AbstractMap/AbstractEntry',484);bcb(383,484,{484:1,383:1,42:1},pjb);var qJ=mdb(bie,'AbstractMap/SimpleEntry',383);bcb(1984,1,_je);_.Fb=function qjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.cd(),b.cd())&&wtb(this.dd(),b.dd())};_.Hb=function rjb(){return xtb(this.cd())^xtb(this.dd())};_.Ib=function sjb(){return this.cd()+'='+this.dd()};var rJ=mdb(bie,lie,1984);bcb(1992,1967,gie);_.tc=function vjb(a){return tjb(this,a)};_._b=function wjb(a){return ujb(this,a)};_.vc=function xjb(){return new Bjb(this)};_.xc=function yjb(a){var b;b=a;return Wd(Awb(this,b))};_.ec=function Ajb(){return new Gjb(this)};var wJ=mdb(bie,'AbstractNavigableMap',1992);bcb(739,eie,fie,Bjb);_.Hc=function Cjb(a){return JD(a,42)&&tjb(this.b,BD(a,42))};_.Kc=function Djb(){return new Ywb(this.b)};_.Mc=function Ejb(a){var b;if(JD(a,42)){b=BD(a,42);return Kwb(this.b,b)}return false};_.gc=function Fjb(){return this.b.c};var tJ=mdb(bie,'AbstractNavigableMap/EntrySet',739);bcb(493,eie,iie,Gjb);_.Nc=function Mjb(){return new Rub(this)};_.$b=function Hjb(){zwb(this.a)};_.Hc=function Ijb(a){return ujb(this.a,a)};_.Kc=function Jjb(){var a;return a=new Ywb((new cxb(this.a)).b),new Njb(a)};_.Mc=function Kjb(a){if(ujb(this.a,a)){Jwb(this.a,a);return true}return false};_.gc=function Ljb(){return this.a.c};var vJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet',493);bcb(494,1,aie,Njb);_.Nb=function Ojb(a){Rrb(this,a)};_.Ob=function Pjb(){return sib(this.a.a)};_.Pb=function Qjb(){var a;return a=Wwb(this.a),a.cd()};_.Qb=function Rjb(){Xwb(this.a)};var uJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet/1',494);bcb(2004,28,die);_.Fc=function Sjb(a){return zCb(cub(this,a)),true};_.Gc=function Tjb(a){uCb(a);mCb(a!=this,"Can't add a queue to itself");return ye(this,a)};_.$b=function Ujb(){while(dub(this)!=null);};var xJ=mdb(bie,'AbstractQueue',2004);bcb(302,28,{4:1,20:1,28:1,14:1},jkb,kkb);_.Fc=function lkb(a){return Xjb(this,a),true};_.$b=function nkb(){Yjb(this)};_.Hc=function okb(a){return Zjb(new xkb(this),a)};_.dc=function pkb(){return akb(this)};_.Kc=function qkb(){return new xkb(this)};_.Mc=function rkb(a){return dkb(new xkb(this),a)};_.gc=function skb(){return this.c-this.b&this.a.length-1};_.Nc=function tkb(){return new Kub(this,272)};_.Qc=function ukb(a){var b;b=this.c-this.b&this.a.length-1;a.lengthb&&NC(a,b,null);return a};_.b=0;_.c=0;var BJ=mdb(bie,'ArrayDeque',302);bcb(446,1,aie,xkb);_.Nb=function ykb(a){Rrb(this,a)};_.Ob=function zkb(){return this.a!=this.b};_.Pb=function Akb(){return vkb(this)};_.Qb=function Bkb(){wkb(this)};_.a=0;_.b=0;_.c=-1;var AJ=mdb(bie,'ArrayDeque/IteratorImpl',446);bcb(12,52,ake,Rkb,Skb,Tkb);_.Vc=function Ukb(a,b){Dkb(this,a,b)};_.Fc=function Vkb(a){return Ekb(this,a)};_.Wc=function Wkb(a,b){return Fkb(this,a,b)};_.Gc=function Xkb(a){return Gkb(this,a)};_.$b=function Ykb(){this.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function Zkb(a){return Jkb(this,a,0)!=-1};_.Jc=function $kb(a){Hkb(this,a)};_.Xb=function _kb(a){return Ikb(this,a)};_.Xc=function alb(a){return Jkb(this,a,0)};_.dc=function blb(){return this.c.length==0};_.Kc=function clb(){return new olb(this)};_.$c=function dlb(a){return Kkb(this,a)};_.Mc=function elb(a){return Lkb(this,a)};_.Ud=function flb(a,b){Mkb(this,a,b)};_._c=function glb(a,b){return Nkb(this,a,b)};_.gc=function hlb(){return this.c.length};_.ad=function ilb(a){Okb(this,a)};_.Pc=function jlb(){return Pkb(this)};_.Qc=function klb(a){return Qkb(this,a)};var DJ=mdb(bie,'ArrayList',12);bcb(7,1,aie,olb);_.Nb=function plb(a){Rrb(this,a)};_.Ob=function qlb(){return llb(this)};_.Pb=function rlb(){return mlb(this)};_.Qb=function slb(){nlb(this)};_.a=0;_.b=-1;var CJ=mdb(bie,'ArrayList/1',7);bcb(2013,$wnd.Function,{},Ylb);_.te=function Zlb(a,b){return Kdb(a,b)};bcb(154,52,bke,amb);_.Hc=function bmb(a){return Bt(this,a)!=-1};_.Jc=function cmb(a){var b,c,d,e;uCb(a);for(c=this.a,d=0,e=c.length;d>>0,a.toString(16))};_.f=0;_.i=Qje;var PM=mdb(Gke,'CNode',57);bcb(814,1,{},zDb);var OM=mdb(Gke,'CNode/CNodeBuilder',814);var EDb;bcb(1525,1,{},GDb);_.Oe=function HDb(a,b){return 0};_.Pe=function IDb(a,b){return 0};var QM=mdb(Gke,Ike,1525);bcb(1790,1,{},JDb);_.Le=function KDb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.ad.d.c||d.d.c==f.d.c&&d.d.b0?a+this.n.d+this.n.a:0};_.Se=function HHb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].Se())}else if(this.g){e=EHb(this,yHb(this,null,true))}else{for(b=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),c=0,d=b.length;c0?e+this.n.b+this.n.c:0};_.Te=function IHb(){var a,b,c,d,e;if(this.g){a=yHb(this,null,false);for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);uHb(this,eHb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var rHb=0,sHb=0;var rN=mdb(fle,'GridContainerCell',1473);bcb(461,22,{3:1,35:1,22:1,461:1},OHb);var KHb,LHb,MHb;var sN=ndb(fle,'HorizontalLabelAlignment',461,CI,QHb,PHb);var RHb;bcb(306,212,{212:1,306:1},aIb,bIb,cIb);_.Re=function dIb(){return YHb(this)};_.Se=function eIb(){return ZHb(this)};_.a=0;_.c=false;var tN=mdb(fle,'LabelCell',306);bcb(244,326,{212:1,326:1,244:1},mIb);_.Re=function nIb(){return fIb(this)};_.Se=function oIb(){return gIb(this)};_.Te=function rIb(){hIb(this)};_.Ue=function sIb(){iIb(this)};_.b=0;_.c=0;_.d=false;var yN=mdb(fle,'StripContainerCell',244);bcb(1626,1,Oie,tIb);_.Mb=function uIb(a){return pIb(BD(a,212))};var uN=mdb(fle,'StripContainerCell/lambda$0$Type',1626);bcb(1627,1,{},vIb);_.Fe=function wIb(a){return BD(a,212).Se()};var vN=mdb(fle,'StripContainerCell/lambda$1$Type',1627);bcb(1628,1,Oie,xIb);_.Mb=function yIb(a){return qIb(BD(a,212))};var wN=mdb(fle,'StripContainerCell/lambda$2$Type',1628);bcb(1629,1,{},zIb);_.Fe=function AIb(a){return BD(a,212).Re()};var xN=mdb(fle,'StripContainerCell/lambda$3$Type',1629);bcb(462,22,{3:1,35:1,22:1,462:1},FIb);var BIb,CIb,DIb;var zN=ndb(fle,'VerticalLabelAlignment',462,CI,HIb,GIb);var IIb;bcb(789,1,{},LIb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var CN=mdb(nle,'NodeContext',789);bcb(1471,1,Dke,OIb);_.ue=function PIb(a,b){return NIb(BD(a,61),BD(b,61))};_.Fb=function QIb(a){return this===a};_.ve=function RIb(){return new tpb(this)};var AN=mdb(nle,'NodeContext/0methodref$comparePortSides$Type',1471);bcb(1472,1,Dke,SIb);_.ue=function TIb(a,b){return MIb(BD(a,111),BD(b,111))};_.Fb=function UIb(a){return this===a};_.ve=function VIb(){return new tpb(this)};var BN=mdb(nle,'NodeContext/1methodref$comparePortContexts$Type',1472);bcb(159,22,{3:1,35:1,22:1,159:1},tJb);var WIb,XIb,YIb,ZIb,$Ib,_Ib,aJb,bJb,cJb,dJb,eJb,fJb,gJb,hJb,iJb,jJb,kJb,lJb,mJb,nJb,oJb,pJb;var DN=ndb(nle,'NodeLabelLocation',159,CI,wJb,vJb);var xJb;bcb(111,1,{111:1},AJb);_.a=false;var EN=mdb(nle,'PortContext',111);bcb(1476,1,qie,TJb);_.td=function UJb(a){WHb(BD(a,306))};var FN=mdb(qle,rle,1476);bcb(1477,1,Oie,VJb);_.Mb=function WJb(a){return !!BD(a,111).c};var GN=mdb(qle,sle,1477);bcb(1478,1,qie,XJb);_.td=function YJb(a){WHb(BD(a,111).c)};var HN=mdb(qle,'LabelPlacer/lambda$2$Type',1478);var ZJb;bcb(1475,1,qie,fKb);_.td=function gKb(a){$Jb();zJb(BD(a,111))};var IN=mdb(qle,'NodeLabelAndSizeUtilities/lambda$0$Type',1475);bcb(790,1,qie,mKb);_.td=function nKb(a){kKb(this.b,this.c,this.a,BD(a,181))};_.a=false;_.c=false;var JN=mdb(qle,'NodeLabelCellCreator/lambda$0$Type',790);bcb(1474,1,qie,tKb);_.td=function uKb(a){sKb(this.a,BD(a,181))};var KN=mdb(qle,'PortContextCreator/lambda$0$Type',1474);var BKb;bcb(1829,1,{},VKb);var MN=mdb(ule,'GreedyRectangleStripOverlapRemover',1829);bcb(1830,1,Dke,XKb);_.ue=function YKb(a,b){return WKb(BD(a,222),BD(b,222))};_.Fb=function ZKb(a){return this===a};_.ve=function $Kb(){return new tpb(this)};var LN=mdb(ule,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1830);bcb(1786,1,{},fLb);_.a=5;_.e=0;var SN=mdb(ule,'RectangleStripOverlapRemover',1786);bcb(1787,1,Dke,jLb);_.ue=function kLb(a,b){return gLb(BD(a,222),BD(b,222))};_.Fb=function lLb(a){return this===a};_.ve=function mLb(){return new tpb(this)};var NN=mdb(ule,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1787);bcb(1789,1,Dke,nLb);_.ue=function oLb(a,b){return hLb(BD(a,222),BD(b,222))};_.Fb=function pLb(a){return this===a};_.ve=function qLb(){return new tpb(this)};var ON=mdb(ule,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1789);bcb(406,22,{3:1,35:1,22:1,406:1},wLb);var rLb,sLb,tLb,uLb;var PN=ndb(ule,'RectangleStripOverlapRemover/OverlapRemovalDirection',406,CI,yLb,xLb);var zLb;bcb(222,1,{222:1},BLb);var QN=mdb(ule,'RectangleStripOverlapRemover/RectangleNode',222);bcb(1788,1,qie,CLb);_.td=function DLb(a){aLb(this.a,BD(a,222))};var RN=mdb(ule,'RectangleStripOverlapRemover/lambda$1$Type',1788);bcb(1304,1,Dke,GLb);_.ue=function HLb(a,b){return FLb(BD(a,167),BD(b,167))};_.Fb=function ILb(a){return this===a};_.ve=function JLb(){return new tpb(this)};var WN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1304);bcb(1307,1,{},KLb);_.Kb=function LLb(a){return BD(a,324).a};var TN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1307);bcb(1308,1,Oie,MLb);_.Mb=function NLb(a){return BD(a,323).a};var UN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1308);bcb(1309,1,Oie,OLb);_.Mb=function PLb(a){return BD(a,323).a};var VN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1309);bcb(1302,1,Dke,RLb);_.ue=function SLb(a,b){return QLb(BD(a,167),BD(b,167))};_.Fb=function TLb(a){return this===a};_.ve=function ULb(){return new tpb(this)};var YN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1302);bcb(1305,1,{},VLb);_.Kb=function WLb(a){return BD(a,324).a};var XN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1305);bcb(767,1,Dke,YLb);_.ue=function ZLb(a,b){return XLb(BD(a,167),BD(b,167))};_.Fb=function $Lb(a){return this===a};_.ve=function _Lb(){return new tpb(this)};var ZN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionsComparator',767);bcb(1300,1,Dke,bMb);_.ue=function cMb(a,b){return aMb(BD(a,321),BD(b,321))};_.Fb=function dMb(a){return this===a};_.ve=function eMb(){return new tpb(this)};var _N=mdb(wle,'PolyominoCompactor/MinPerimeterComparator',1300);bcb(1301,1,Dke,gMb);_.ue=function hMb(a,b){return fMb(BD(a,321),BD(b,321))};_.Fb=function iMb(a){return this===a};_.ve=function jMb(){return new tpb(this)};var $N=mdb(wle,'PolyominoCompactor/MinPerimeterComparatorWithShape',1301);bcb(1303,1,Dke,lMb);_.ue=function mMb(a,b){return kMb(BD(a,167),BD(b,167))};_.Fb=function nMb(a){return this===a};_.ve=function oMb(){return new tpb(this)};var bO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1303);bcb(1306,1,{},pMb);_.Kb=function qMb(a){return BD(a,324).a};var aO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1306);bcb(777,1,{},tMb);_.Ce=function uMb(a,b){return sMb(this,BD(a,46),BD(b,167))};var cO=mdb(wle,'SuccessorCombination',777);bcb(644,1,{},wMb);_.Ce=function xMb(a,b){var c;return vMb((c=BD(a,46),BD(b,167),c))};var dO=mdb(wle,'SuccessorJitter',644);bcb(643,1,{},zMb);_.Ce=function AMb(a,b){var c;return yMb((c=BD(a,46),BD(b,167),c))};var eO=mdb(wle,'SuccessorLineByLine',643);bcb(568,1,{},CMb);_.Ce=function DMb(a,b){var c;return BMb((c=BD(a,46),BD(b,167),c))};var fO=mdb(wle,'SuccessorManhattan',568);bcb(1356,1,{},FMb);_.Ce=function GMb(a,b){var c;return EMb((c=BD(a,46),BD(b,167),c))};var gO=mdb(wle,'SuccessorMaxNormWindingInMathPosSense',1356);bcb(400,1,{},JMb);_.Ce=function KMb(a,b){return HMb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var iO=mdb(wle,'SuccessorQuadrantsGeneric',400);bcb(1357,1,{},LMb);_.Kb=function MMb(a){return BD(a,324).a};var hO=mdb(wle,'SuccessorQuadrantsGeneric/lambda$0$Type',1357);bcb(323,22,{3:1,35:1,22:1,323:1},SMb);_.a=false;var NMb,OMb,PMb,QMb;var jO=ndb(Ble,Cle,323,CI,UMb,TMb);var VMb;bcb(1298,1,{});_.Ib=function bNb(){var a,b,c,d,e,f;c=' ';a=meb(0);for(e=0;e=0?'b'+a+'['+fRb(this.a)+']':'b['+fRb(this.a)+']'}return 'b_'+FCb(this)};var YO=mdb(jme,'FBendpoint',559);bcb(282,134,{3:1,282:1,94:1,134:1},gRb);_.Ib=function hRb(){return fRb(this)};var ZO=mdb(jme,'FEdge',282);bcb(231,134,{3:1,231:1,94:1,134:1},kRb);var $O=mdb(jme,'FGraph',231);bcb(447,357,{3:1,447:1,357:1,94:1,134:1},mRb);_.Ib=function nRb(){return this.b==null||this.b.length==0?'l['+fRb(this.a)+']':'l_'+this.b};var _O=mdb(jme,'FLabel',447);bcb(144,357,{3:1,144:1,357:1,94:1,134:1},pRb);_.Ib=function qRb(){return oRb(this)};_.b=0;var aP=mdb(jme,'FNode',144);bcb(2003,1,{});_.bf=function vRb(a){rRb(this,a)};_.cf=function wRb(){sRb(this)};_.d=0;var cP=mdb(lme,'AbstractForceModel',2003);bcb(631,2003,{631:1},xRb);_.af=function zRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);c=jRb(this.e,a,b);c>0?(f=-yRb(d,this.c)*c):(f=CRb(d,this.b)*BD(vNb(a,(wSb(),oSb)),19).a);Y6c(e,f/g);return e};_.bf=function ARb(a){rRb(this,a);this.a=BD(vNb(a,(wSb(),eSb)),19).a;this.c=Edb(ED(vNb(a,uSb)));this.b=Edb(ED(vNb(a,qSb)))};_.df=function BRb(a){return a0&&(f-=ERb(d,this.a)*c);Y6c(e,f*this.b/g);return e};_.bf=function GRb(a){var b,c,d,e,f,g,h;rRb(this,a);this.b=Edb(ED(vNb(a,(wSb(),vSb))));this.c=this.b/BD(vNb(a,eSb),19).a;d=a.e.c.length;f=0;e=0;for(h=new olb(a.e);h.a0};_.a=0;_.b=0;_.c=0;var eP=mdb(lme,'FruchtermanReingoldModel',632);bcb(849,1,ale,TRb);_.Qe=function URb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mme),''),'Force Model'),'Determines the model for force calculation.'),MRb),(_5c(),V5c)),gP),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nme),''),'Iterations'),'The number of iterations on the force model.'),meb(300)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ome),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pme),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),qme),U5c),BI),pqb(L5c))));o4c(a,pme,mme,RRb);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rme),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),U5c),BI),pqb(L5c))));o4c(a,rme,mme,ORb);xSb((new ySb,a))};var KRb,LRb,MRb,NRb,ORb,PRb,QRb,RRb;var fP=mdb(sme,'ForceMetaDataProvider',849);bcb(424,22,{3:1,35:1,22:1,424:1},YRb);var VRb,WRb;var gP=ndb(sme,'ForceModelStrategy',424,CI,$Rb,ZRb);var _Rb;bcb(988,1,ale,ySb);_.Qe=function zSb(a){xSb(a)};var bSb,cSb,dSb,eSb,fSb,gSb,hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb,tSb,uSb,vSb;var iP=mdb(sme,'ForceOptions',988);bcb(989,1,{},ASb);_.$e=function BSb(){var a;return a=new ZQb,a};_._e=function CSb(a){};var hP=mdb(sme,'ForceOptions/ForceFactory',989);var DSb,ESb,FSb,GSb;bcb(850,1,ale,PSb);_.Qe=function QSb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mme),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Bcb(),false)),(_5c(),T5c)),wI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Nme),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ome),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),KSb),V5c),oP),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Pme),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),qme),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qme),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),meb(Ohe)),X5c),JI),pqb(L5c))));cTb((new dTb,a))};var ISb,JSb,KSb,LSb,MSb,NSb;var jP=mdb(sme,'StressMetaDataProvider',850);bcb(992,1,ale,dTb);_.Qe=function eTb(a){cTb(a)};var RSb,SSb,TSb,USb,VSb,WSb,XSb,YSb,ZSb,$Sb,_Sb,aTb;var lP=mdb(sme,'StressOptions',992);bcb(993,1,{},fTb);_.$e=function gTb(){var a;return a=new iTb,a};_._e=function hTb(a){};var kP=mdb(sme,'StressOptions/StressFactory',993);bcb(1128,209,Mle,iTb);_.Ze=function jTb(a,b){var c,d,e,f,g;Odd(b,Sme,1);Ccb(DD(hkd(a,(bTb(),VSb))))?Ccb(DD(hkd(a,_Sb)))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c)):WQb(new ZQb,a,Udd(b,1));e=TQb(a);d=LQb(this.a,e);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),231);if(f.e.c.length<=1){continue}sTb(this.b,f);qTb(this.b);Hkb(f.d,new kTb)}e=KQb(d);SQb(e);Qdd(b)};var nP=mdb(Ume,'StressLayoutProvider',1128);bcb(1129,1,qie,kTb);_.td=function lTb(a){lRb(BD(a,447))};var mP=mdb(Ume,'StressLayoutProvider/lambda$0$Type',1129);bcb(990,1,{},tTb);_.c=0;_.e=0;_.g=0;var qP=mdb(Ume,'StressMajorization',990);bcb(379,22,{3:1,35:1,22:1,379:1},zTb);var vTb,wTb,xTb;var oP=ndb(Ume,'StressMajorization/Dimension',379,CI,BTb,ATb);var CTb;bcb(991,1,Dke,ETb);_.ue=function FTb(a,b){return uTb(this.a,BD(a,144),BD(b,144))};_.Fb=function GTb(a){return this===a};_.ve=function HTb(){return new tpb(this)};var pP=mdb(Ume,'StressMajorization/lambda$0$Type',991);bcb(1229,1,{},PTb);var tP=mdb(Wme,'ElkLayered',1229);bcb(1230,1,qie,STb);_.td=function TTb(a){QTb(BD(a,37))};var rP=mdb(Wme,'ElkLayered/lambda$0$Type',1230);bcb(1231,1,qie,UTb);_.td=function VTb(a){RTb(this.a,BD(a,37))};var sP=mdb(Wme,'ElkLayered/lambda$1$Type',1231);bcb(1263,1,{},bUb);var WTb,XTb,YTb;var xP=mdb(Wme,'GraphConfigurator',1263);bcb(759,1,qie,dUb);_.td=function eUb(a){$Tb(this.a,BD(a,10))};var uP=mdb(Wme,'GraphConfigurator/lambda$0$Type',759);bcb(760,1,{},fUb);_.Kb=function gUb(a){return ZTb(),new YAb(null,new Kub(BD(a,29).a,16))};var vP=mdb(Wme,'GraphConfigurator/lambda$1$Type',760);bcb(761,1,qie,hUb);_.td=function iUb(a){$Tb(this.a,BD(a,10))};var wP=mdb(Wme,'GraphConfigurator/lambda$2$Type',761);bcb(1127,209,Mle,jUb);_.Ze=function kUb(a,b){var c;c=U1b(new a2b,a);PD(hkd(a,(Nyc(),axc)))===PD((hbd(),ebd))?JTb(this.a,c,b):KTb(this.a,c,b);z2b(new D2b,c)};var yP=mdb(Wme,'LayeredLayoutProvider',1127);bcb(356,22,{3:1,35:1,22:1,356:1},rUb);var lUb,mUb,nUb,oUb,pUb;var zP=ndb(Wme,'LayeredPhases',356,CI,tUb,sUb);var uUb;bcb(1651,1,{},CUb);_.i=0;var wUb;var CP=mdb(Xme,'ComponentsToCGraphTransformer',1651);var hVb;bcb(1652,1,{},DUb);_.ef=function EUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function FUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var AP=mdb(Xme,'ComponentsToCGraphTransformer/1',1652);bcb(81,1,{81:1});_.i=0;_.k=true;_.o=Qje;var IP=mdb(Yme,'CNode',81);bcb(460,81,{460:1,81:1},GUb,HUb);_.Ib=function IUb(){return ''};var BP=mdb(Xme,'ComponentsToCGraphTransformer/CRectNode',460);bcb(1623,1,{},VUb);var JUb,KUb;var FP=mdb(Xme,'OneDimensionalComponentsCompaction',1623);bcb(1624,1,{},YUb);_.Kb=function ZUb(a){return WUb(BD(a,46))};_.Fb=function $Ub(a){return this===a};var DP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$0$Type',1624);bcb(1625,1,{},_Ub);_.Kb=function aVb(a){return XUb(BD(a,46))};_.Fb=function bVb(a){return this===a};var EP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$1$Type',1625);bcb(1654,1,{},dVb);var GP=mdb(Yme,'CGraph',1654);bcb(189,1,{189:1},gVb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=Qje;var HP=mdb(Yme,'CGroup',189);bcb(1653,1,{},jVb);_.ef=function kVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function lVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var JP=mdb(Yme,Ike,1653);bcb(1655,1,{},CVb);_.d=false;var mVb;var LP=mdb(Yme,Nke,1655);bcb(1656,1,{},DVb);_.Kb=function EVb(a){return nVb(),Bcb(),BD(BD(a,46).a,81).d.e!=0?true:false};_.Fb=function FVb(a){return this===a};var KP=mdb(Yme,Oke,1656);bcb(823,1,{},IVb);_.a=false;_.b=false;_.c=false;_.d=false;var MP=mdb(Yme,Pke,823);bcb(1825,1,{},OVb);var RP=mdb(Zme,Qke,1825);var bQ=odb($me,Fke);bcb(1826,1,{369:1},SVb);_.Ke=function TVb(a){QVb(this,BD(a,466))};var OP=mdb(Zme,Rke,1826);bcb(1827,1,Dke,VVb);_.ue=function WVb(a,b){return UVb(BD(a,81),BD(b,81))};_.Fb=function XVb(a){return this===a};_.ve=function YVb(){return new tpb(this)};var NP=mdb(Zme,Ske,1827);bcb(466,1,{466:1},ZVb);_.a=false;var PP=mdb(Zme,Tke,466);bcb(1828,1,Dke,$Vb);_.ue=function _Vb(a,b){return PVb(BD(a,466),BD(b,466))};_.Fb=function aWb(a){return this===a};_.ve=function bWb(){return new tpb(this)};var QP=mdb(Zme,Uke,1828);bcb(140,1,{140:1},cWb,dWb);_.Fb=function eWb(a){var b;if(a==null){return false}if(TP!=rb(a)){return false}b=BD(a,140);return wtb(this.c,b.c)&&wtb(this.d,b.d)};_.Hb=function fWb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d]))};_.Ib=function gWb(){return '('+this.c+She+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var TP=mdb($me,'Point',140);bcb(405,22,{3:1,35:1,22:1,405:1},oWb);var hWb,iWb,jWb,kWb;var SP=ndb($me,'Point/Quadrant',405,CI,sWb,rWb);var tWb;bcb(1642,1,{},CWb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var vWb,wWb,xWb,yWb,zWb;var aQ=mdb($me,'RectilinearConvexHull',1642);bcb(574,1,{369:1},NWb);_.Ke=function OWb(a){MWb(this,BD(a,140))};_.b=0;var KWb;var VP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler',574);bcb(1644,1,Dke,QWb);_.ue=function RWb(a,b){return PWb(ED(a),ED(b))};_.Fb=function SWb(a){return this===a};_.ve=function TWb(){return new tpb(this)};var UP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1644);bcb(1643,1,{369:1},VWb);_.Ke=function WWb(a){UWb(this,BD(a,140))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var WP=mdb($me,'RectilinearConvexHull/RectangleEventHandler',1643);bcb(1645,1,Dke,XWb);_.ue=function YWb(a,b){return EWb(BD(a,140),BD(b,140))};_.Fb=function ZWb(a){return this===a};_.ve=function $Wb(){return new tpb(this)};var XP=mdb($me,'RectilinearConvexHull/lambda$0$Type',1645);bcb(1646,1,Dke,_Wb);_.ue=function aXb(a,b){return FWb(BD(a,140),BD(b,140))};_.Fb=function bXb(a){return this===a};_.ve=function cXb(){return new tpb(this)};var YP=mdb($me,'RectilinearConvexHull/lambda$1$Type',1646);bcb(1647,1,Dke,dXb);_.ue=function eXb(a,b){return GWb(BD(a,140),BD(b,140))};_.Fb=function fXb(a){return this===a};_.ve=function gXb(){return new tpb(this)};var ZP=mdb($me,'RectilinearConvexHull/lambda$2$Type',1647);bcb(1648,1,Dke,hXb);_.ue=function iXb(a,b){return HWb(BD(a,140),BD(b,140))};_.Fb=function jXb(a){return this===a};_.ve=function kXb(){return new tpb(this)};var $P=mdb($me,'RectilinearConvexHull/lambda$3$Type',1648);bcb(1649,1,Dke,lXb);_.ue=function mXb(a,b){return IWb(BD(a,140),BD(b,140))};_.Fb=function nXb(a){return this===a};_.ve=function oXb(){return new tpb(this)};var _P=mdb($me,'RectilinearConvexHull/lambda$4$Type',1649);bcb(1650,1,{},qXb);var cQ=mdb($me,'Scanline',1650);bcb(2005,1,{});var dQ=mdb(_me,'AbstractGraphPlacer',2005);bcb(325,1,{325:1},AXb);_.mf=function BXb(a){if(this.nf(a)){Rc(this.b,BD(vNb(a,(wtc(),Esc)),21),a);return true}else{return false}};_.nf=function CXb(a){var b,c,d,e;b=BD(vNb(a,(wtc(),Esc)),21);e=BD(Qc(wXb,b),21);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),21);if(!BD(Qc(this.b,c),15).dc()){return false}}return true};var wXb;var gQ=mdb(_me,'ComponentGroup',325);bcb(765,2005,{},HXb);_.of=function IXb(a){var b,c;for(c=new olb(this.a);c.an){v=0;w+=m+e;m=0}q=g.c;uXb(g,v+q.a,w+q.b);X6c(q);c=$wnd.Math.max(c,v+s.a);m=$wnd.Math.max(m,s.b);v+=s.a+e}b.f.a=c;b.f.b=w+m;if(Ccb(DD(vNb(f,qwc)))){d=new gYb;YXb(d,a,e);for(l=a.Kc();l.Ob();){k=BD(l.Pb(),37);P6c(X6c(k.c),d.e)}P6c(X6c(b.f),d.a)}tXb(b,a)};var uQ=mdb(_me,'SimpleRowGraphPlacer',1291);bcb(1292,1,Dke,VYb);_.ue=function WYb(a,b){return UYb(BD(a,37),BD(b,37))};_.Fb=function XYb(a){return this===a};_.ve=function YYb(){return new tpb(this)};var tQ=mdb(_me,'SimpleRowGraphPlacer/1',1292);var ZYb;bcb(1262,1,Vke,dZb);_.Lb=function eZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};_.Fb=function fZb(a){return this===a};_.Mb=function gZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};var vQ=mdb(dne,'CompoundGraphPostprocessor/1',1262);bcb(1261,1,ene,wZb);_.pf=function xZb(a,b){qZb(this,BD(a,37),b)};var xQ=mdb(dne,'CompoundGraphPreprocessor',1261);bcb(441,1,{441:1},yZb);_.c=false;var wQ=mdb(dne,'CompoundGraphPreprocessor/ExternalPort',441);bcb(243,1,{243:1},BZb);_.Ib=function CZb(){return Zr(this.c)+':'+TZb(this.b)};var zQ=mdb(dne,'CrossHierarchyEdge',243);bcb(763,1,Dke,EZb);_.ue=function FZb(a,b){return DZb(this,BD(a,243),BD(b,243))};_.Fb=function GZb(a){return this===a};_.ve=function IZb(){return new tpb(this)};var yQ=mdb(dne,'CrossHierarchyEdgeComparator',763);bcb(299,134,{3:1,299:1,94:1,134:1});_.p=0;var JQ=mdb(fne,'LGraphElement',299);bcb(17,299,{3:1,17:1,299:1,94:1,134:1},UZb);_.Ib=function VZb(){return TZb(this)};var AQ=mdb(fne,'LEdge',17);bcb(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},XZb);_.Jc=function YZb(a){reb(this,a)};_.Kc=function ZZb(){return new olb(this.b)};_.Ib=function $Zb(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var KQ=mdb(fne,'LGraph',37);var _Zb;bcb(657,1,{});_.qf=function b$b(){return this.e.n};_.We=function c$b(a){return vNb(this.e,a)};_.rf=function d$b(){return this.e.o};_.sf=function e$b(){return this.e.p};_.Xe=function f$b(a){return wNb(this.e,a)};_.tf=function g$b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.uf=function h$b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.vf=function i$b(a){this.e.p=a};var BQ=mdb(fne,'LGraphAdapters/AbstractLShapeAdapter',657);bcb(577,1,{839:1},j$b);_.wf=function k$b(){var a,b;if(!this.b){this.b=Pu(this.a.b.c.length);for(b=new olb(this.a.b);b.a0&&E_b((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(g> ',a),C0b(c));Qfb(Pfb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var t0b,u0b,v0b,w0b,x0b,y0b;var aR=mdb(fne,'LPort',11);bcb(397,1,vie,J0b);_.Jc=function K0b(a){reb(this,a)};_.Kc=function L0b(){var a;a=new olb(this.a.e);return new M0b(a)};var RQ=mdb(fne,'LPort/1',397);bcb(1290,1,aie,M0b);_.Nb=function N0b(a){Rrb(this,a)};_.Pb=function P0b(){return BD(mlb(this.a),17).c};_.Ob=function O0b(){return llb(this.a)};_.Qb=function Q0b(){nlb(this.a)};var QQ=mdb(fne,'LPort/1/1',1290);bcb(359,1,vie,R0b);_.Jc=function S0b(a){reb(this,a)};_.Kc=function T0b(){var a;return a=new olb(this.a.g),new U0b(a)};var TQ=mdb(fne,'LPort/2',359);bcb(762,1,aie,U0b);_.Nb=function V0b(a){Rrb(this,a)};_.Pb=function X0b(){return BD(mlb(this.a),17).d};_.Ob=function W0b(){return llb(this.a)};_.Qb=function Y0b(){nlb(this.a)};var SQ=mdb(fne,'LPort/2/1',762);bcb(1283,1,vie,Z0b);_.Jc=function $0b(a){reb(this,a)};_.Kc=function _0b(){return new b1b(this)};var VQ=mdb(fne,'LPort/CombineIter',1283);bcb(201,1,aie,b1b);_.Nb=function c1b(a){Rrb(this,a)};_.Qb=function f1b(){Srb()};_.Ob=function d1b(){return a1b(this)};_.Pb=function e1b(){return llb(this.a)?mlb(this.a):mlb(this.b)};var UQ=mdb(fne,'LPort/CombineIter/1',201);bcb(1285,1,Vke,h1b);_.Lb=function i1b(a){return g1b(a)};_.Fb=function j1b(a){return this===a};_.Mb=function k1b(a){return z0b(),BD(a,11).e.c.length!=0};var WQ=mdb(fne,'LPort/lambda$0$Type',1285);bcb(1284,1,Vke,m1b);_.Lb=function n1b(a){return l1b(a)};_.Fb=function o1b(a){return this===a};_.Mb=function p1b(a){return z0b(),BD(a,11).g.c.length!=0};var XQ=mdb(fne,'LPort/lambda$1$Type',1284);bcb(1286,1,Vke,q1b);_.Lb=function r1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};_.Fb=function s1b(a){return this===a};_.Mb=function t1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};var YQ=mdb(fne,'LPort/lambda$2$Type',1286);bcb(1287,1,Vke,u1b);_.Lb=function v1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};_.Fb=function w1b(a){return this===a};_.Mb=function x1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};var ZQ=mdb(fne,'LPort/lambda$3$Type',1287);bcb(1288,1,Vke,y1b);_.Lb=function z1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};_.Fb=function A1b(a){return this===a};_.Mb=function B1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};var $Q=mdb(fne,'LPort/lambda$4$Type',1288);bcb(1289,1,Vke,C1b);_.Lb=function D1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};_.Fb=function E1b(a){return this===a};_.Mb=function F1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};var _Q=mdb(fne,'LPort/lambda$5$Type',1289);bcb(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},H1b);_.Jc=function I1b(a){reb(this,a)};_.Kc=function J1b(){return new olb(this.a)};_.Ib=function K1b(){return 'L_'+Jkb(this.b.b,this,0)+Fe(this.a)};var cR=mdb(fne,'Layer',29);bcb(1342,1,{},a2b);var mR=mdb(tne,une,1342);bcb(1346,1,{},e2b);_.Kb=function f2b(a){return atd(BD(a,82))};var dR=mdb(tne,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1346);bcb(1349,1,{},g2b);_.Kb=function h2b(a){return atd(BD(a,82))};var eR=mdb(tne,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1349);bcb(1343,1,qie,i2b);_.td=function j2b(a){Q1b(this.a,BD(a,118))};var fR=mdb(tne,vne,1343);bcb(1344,1,qie,k2b);_.td=function l2b(a){Q1b(this.a,BD(a,118))};var gR=mdb(tne,wne,1344);bcb(1345,1,{},m2b);_.Kb=function n2b(a){return new YAb(null,new Kub(Old(BD(a,79)),16))};var hR=mdb(tne,xne,1345);bcb(1347,1,Oie,o2b);_.Mb=function p2b(a){return b2b(this.a,BD(a,33))};var iR=mdb(tne,yne,1347);bcb(1348,1,{},q2b);_.Kb=function r2b(a){return new YAb(null,new Kub(Nld(BD(a,79)),16))};var jR=mdb(tne,'ElkGraphImporter/lambda$5$Type',1348);bcb(1350,1,Oie,s2b);_.Mb=function t2b(a){return c2b(this.a,BD(a,33))};var kR=mdb(tne,'ElkGraphImporter/lambda$7$Type',1350);bcb(1351,1,Oie,u2b);_.Mb=function v2b(a){return d2b(BD(a,79))};var lR=mdb(tne,'ElkGraphImporter/lambda$8$Type',1351);bcb(1278,1,{},D2b);var w2b;var rR=mdb(tne,'ElkGraphLayoutTransferrer',1278);bcb(1279,1,Oie,G2b);_.Mb=function H2b(a){return E2b(this.a,BD(a,17))};var nR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$0$Type',1279);bcb(1280,1,qie,I2b);_.td=function J2b(a){x2b();Ekb(this.a,BD(a,17))};var oR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$1$Type',1280);bcb(1281,1,Oie,K2b);_.Mb=function L2b(a){return F2b(this.a,BD(a,17))};var pR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$2$Type',1281);bcb(1282,1,qie,M2b);_.td=function N2b(a){x2b();Ekb(this.a,BD(a,17))};var qR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$3$Type',1282);bcb(1485,1,ene,S2b);_.pf=function T2b(a,b){Q2b(BD(a,37),b)};var uR=mdb(Ane,'CommentNodeMarginCalculator',1485);bcb(1486,1,{},U2b);_.Kb=function V2b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var sR=mdb(Ane,'CommentNodeMarginCalculator/lambda$0$Type',1486);bcb(1487,1,qie,W2b);_.td=function X2b(a){R2b(BD(a,10))};var tR=mdb(Ane,'CommentNodeMarginCalculator/lambda$1$Type',1487);bcb(1488,1,ene,_2b);_.pf=function a3b(a,b){Z2b(BD(a,37),b)};var vR=mdb(Ane,'CommentPostprocessor',1488);bcb(1489,1,ene,e3b);_.pf=function f3b(a,b){b3b(BD(a,37),b)};var wR=mdb(Ane,'CommentPreprocessor',1489);bcb(1490,1,ene,h3b);_.pf=function i3b(a,b){g3b(BD(a,37),b)};var xR=mdb(Ane,'ConstraintsPostprocessor',1490);bcb(1491,1,ene,p3b);_.pf=function q3b(a,b){n3b(BD(a,37),b)};var yR=mdb(Ane,'EdgeAndLayerConstraintEdgeReverser',1491);bcb(1492,1,ene,t3b);_.pf=function v3b(a,b){r3b(BD(a,37),b)};var CR=mdb(Ane,'EndLabelPostprocessor',1492);bcb(1493,1,{},w3b);_.Kb=function x3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var zR=mdb(Ane,'EndLabelPostprocessor/lambda$0$Type',1493);bcb(1494,1,Oie,y3b);_.Mb=function z3b(a){return u3b(BD(a,10))};var AR=mdb(Ane,'EndLabelPostprocessor/lambda$1$Type',1494);bcb(1495,1,qie,A3b);_.td=function B3b(a){s3b(BD(a,10))};var BR=mdb(Ane,'EndLabelPostprocessor/lambda$2$Type',1495);bcb(1496,1,ene,M3b);_.pf=function P3b(a,b){I3b(BD(a,37),b)};var JR=mdb(Ane,'EndLabelPreprocessor',1496);bcb(1497,1,{},Q3b);_.Kb=function R3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DR=mdb(Ane,'EndLabelPreprocessor/lambda$0$Type',1497);bcb(1498,1,qie,S3b);_.td=function T3b(a){E3b(this.a,this.b,this.c,BD(a,10))};_.a=0;_.b=0;_.c=false;var ER=mdb(Ane,'EndLabelPreprocessor/lambda$1$Type',1498);bcb(1499,1,Oie,U3b);_.Mb=function V3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var FR=mdb(Ane,'EndLabelPreprocessor/lambda$2$Type',1499);bcb(1500,1,qie,W3b);_.td=function X3b(a){Dsb(this.a,BD(a,70))};var GR=mdb(Ane,'EndLabelPreprocessor/lambda$3$Type',1500);bcb(1501,1,Oie,Y3b);_.Mb=function Z3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var HR=mdb(Ane,'EndLabelPreprocessor/lambda$4$Type',1501);bcb(1502,1,qie,$3b);_.td=function _3b(a){Dsb(this.a,BD(a,70))};var IR=mdb(Ane,'EndLabelPreprocessor/lambda$5$Type',1502);bcb(1551,1,ene,i4b);_.pf=function j4b(a,b){f4b(BD(a,37),b)};var a4b;var RR=mdb(Ane,'EndLabelSorter',1551);bcb(1552,1,Dke,l4b);_.ue=function m4b(a,b){return k4b(BD(a,456),BD(b,456))};_.Fb=function n4b(a){return this===a};_.ve=function o4b(){return new tpb(this)};var KR=mdb(Ane,'EndLabelSorter/1',1552);bcb(456,1,{456:1},p4b);var LR=mdb(Ane,'EndLabelSorter/LabelGroup',456);bcb(1553,1,{},q4b);_.Kb=function r4b(a){return b4b(),new YAb(null,new Kub(BD(a,29).a,16))};var MR=mdb(Ane,'EndLabelSorter/lambda$0$Type',1553);bcb(1554,1,Oie,s4b);_.Mb=function t4b(a){return b4b(),BD(a,10).k==(j0b(),h0b)};var NR=mdb(Ane,'EndLabelSorter/lambda$1$Type',1554);bcb(1555,1,qie,u4b);_.td=function v4b(a){g4b(BD(a,10))};var OR=mdb(Ane,'EndLabelSorter/lambda$2$Type',1555);bcb(1556,1,Oie,w4b);_.Mb=function x4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var PR=mdb(Ane,'EndLabelSorter/lambda$3$Type',1556);bcb(1557,1,Oie,y4b);_.Mb=function z4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var QR=mdb(Ane,'EndLabelSorter/lambda$4$Type',1557);bcb(1503,1,ene,L4b);_.pf=function M4b(a,b){J4b(this,BD(a,37))};_.b=0;_.c=0;var YR=mdb(Ane,'FinalSplineBendpointsCalculator',1503);bcb(1504,1,{},N4b);_.Kb=function O4b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var SR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$0$Type',1504);bcb(1505,1,{},P4b);_.Kb=function Q4b(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var TR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$1$Type',1505);bcb(1506,1,Oie,R4b);_.Mb=function S4b(a){return !OZb(BD(a,17))};var UR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$2$Type',1506);bcb(1507,1,Oie,T4b);_.Mb=function U4b(a){return wNb(BD(a,17),(wtc(),rtc))};var VR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$3$Type',1507);bcb(1508,1,qie,V4b);_.td=function W4b(a){C4b(this.a,BD(a,128))};var WR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$4$Type',1508);bcb(1509,1,qie,X4b);_.td=function Y4b(a){smb(BD(a,17).a)};var XR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$5$Type',1509);bcb(792,1,ene,u5b);_.pf=function v5b(a,b){l5b(this,BD(a,37),b)};var $R=mdb(Ane,'GraphTransformer',792);bcb(511,22,{3:1,35:1,22:1,511:1},z5b);var w5b,x5b;var ZR=ndb(Ane,'GraphTransformer/Mode',511,CI,B5b,A5b);var C5b;bcb(1510,1,ene,I5b);_.pf=function J5b(a,b){F5b(BD(a,37),b)};var _R=mdb(Ane,'HierarchicalNodeResizingProcessor',1510);bcb(1511,1,ene,Q5b);_.pf=function R5b(a,b){M5b(BD(a,37),b)};var bS=mdb(Ane,'HierarchicalPortConstraintProcessor',1511);bcb(1512,1,Dke,T5b);_.ue=function U5b(a,b){return S5b(BD(a,10),BD(b,10))};_.Fb=function V5b(a){return this===a};_.ve=function W5b(){return new tpb(this)};var aS=mdb(Ane,'HierarchicalPortConstraintProcessor/NodeComparator',1512);bcb(1513,1,ene,Z5b);_.pf=function $5b(a,b){X5b(BD(a,37),b)};var cS=mdb(Ane,'HierarchicalPortDummySizeProcessor',1513);bcb(1514,1,ene,l6b);_.pf=function m6b(a,b){e6b(this,BD(a,37),b)};_.a=0;var fS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter',1514);bcb(1515,1,Dke,o6b);_.ue=function p6b(a,b){return n6b(BD(a,10),BD(b,10))};_.Fb=function q6b(a){return this===a};_.ve=function r6b(){return new tpb(this)};var dS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/1',1515);bcb(1516,1,Dke,t6b);_.ue=function u6b(a,b){return s6b(BD(a,10),BD(b,10))};_.Fb=function v6b(a){return this===a};_.ve=function w6b(){return new tpb(this)};var eS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/2',1516);bcb(1517,1,ene,z6b);_.pf=function A6b(a,b){y6b(BD(a,37),b)};var gS=mdb(Ane,'HierarchicalPortPositionProcessor',1517);bcb(1518,1,ene,J6b);_.pf=function K6b(a,b){I6b(this,BD(a,37))};_.a=0;_.c=0;var B6b,C6b;var kS=mdb(Ane,'HighDegreeNodeLayeringProcessor',1518);bcb(571,1,{571:1},L6b);_.b=-1;_.d=-1;var hS=mdb(Ane,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',571);bcb(1519,1,{},M6b);_.Kb=function N6b(a){return D6b(),R_b(BD(a,10))};_.Fb=function O6b(a){return this===a};var iS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1519);bcb(1520,1,{},P6b);_.Kb=function Q6b(a){return D6b(),U_b(BD(a,10))};_.Fb=function R6b(a){return this===a};var jS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1520);bcb(1526,1,ene,X6b);_.pf=function Y6b(a,b){W6b(this,BD(a,37),b)};var pS=mdb(Ane,'HyperedgeDummyMerger',1526);bcb(793,1,{},Z6b);_.a=false;_.b=false;_.c=false;var lS=mdb(Ane,'HyperedgeDummyMerger/MergeState',793);bcb(1527,1,{},$6b);_.Kb=function _6b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var mS=mdb(Ane,'HyperedgeDummyMerger/lambda$0$Type',1527);bcb(1528,1,{},a7b);_.Kb=function b7b(a){return new YAb(null,new Kub(BD(a,10).j,16))};var nS=mdb(Ane,'HyperedgeDummyMerger/lambda$1$Type',1528);bcb(1529,1,qie,c7b);_.td=function d7b(a){BD(a,11).p=-1};var oS=mdb(Ane,'HyperedgeDummyMerger/lambda$2$Type',1529);bcb(1530,1,ene,g7b);_.pf=function h7b(a,b){f7b(BD(a,37),b)};var qS=mdb(Ane,'HypernodesProcessor',1530);bcb(1531,1,ene,j7b);_.pf=function k7b(a,b){i7b(BD(a,37),b)};var rS=mdb(Ane,'InLayerConstraintProcessor',1531);bcb(1532,1,ene,m7b);_.pf=function n7b(a,b){l7b(BD(a,37),b)};var sS=mdb(Ane,'InnermostNodeMarginCalculator',1532);bcb(1533,1,ene,r7b);_.pf=function w7b(a,b){q7b(this,BD(a,37))};_.a=Qje;_.b=Qje;_.c=Pje;_.d=Pje;var zS=mdb(Ane,'InteractiveExternalPortPositioner',1533);bcb(1534,1,{},x7b);_.Kb=function y7b(a){return BD(a,17).d.i};_.Fb=function z7b(a){return this===a};var tS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$0$Type',1534);bcb(1535,1,{},A7b);_.Kb=function B7b(a){return s7b(this.a,ED(a))};_.Fb=function C7b(a){return this===a};var uS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$1$Type',1535);bcb(1536,1,{},D7b);_.Kb=function E7b(a){return BD(a,17).c.i};_.Fb=function F7b(a){return this===a};var vS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$2$Type',1536);bcb(1537,1,{},G7b);_.Kb=function H7b(a){return t7b(this.a,ED(a))};_.Fb=function I7b(a){return this===a};var wS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$3$Type',1537);bcb(1538,1,{},J7b);_.Kb=function K7b(a){return u7b(this.a,ED(a))};_.Fb=function L7b(a){return this===a};var xS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$4$Type',1538);bcb(1539,1,{},M7b);_.Kb=function N7b(a){return v7b(this.a,ED(a))};_.Fb=function O7b(a){return this===a};var yS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$5$Type',1539);bcb(77,22,{3:1,35:1,22:1,77:1,234:1},T8b);_.Kf=function U8b(){switch(this.g){case 15:return new eoc;case 22:return new Aoc;case 47:return new Joc;case 28:case 35:return new uac;case 32:return new S2b;case 42:return new _2b;case 1:return new e3b;case 41:return new h3b;case 56:return new u5b((y5b(),x5b));case 0:return new u5b((y5b(),w5b));case 2:return new p3b;case 54:return new t3b;case 33:return new M3b;case 51:return new L4b;case 55:return new I5b;case 13:return new Q5b;case 38:return new Z5b;case 44:return new l6b;case 40:return new z6b;case 9:return new J6b;case 49:return new sgc;case 37:return new X6b;case 43:return new g7b;case 27:return new j7b;case 30:return new m7b;case 3:return new r7b;case 18:return new b9b;case 29:return new h9b;case 5:return new u9b;case 50:return new D9b;case 34:return new $9b;case 36:return new Iac;case 52:return new i4b;case 11:return new Sac;case 7:return new abc;case 39:return new obc;case 45:return new rbc;case 16:return new vbc;case 10:return new Fbc;case 48:return new Xbc;case 21:return new ccc;case 23:return new fGc((rGc(),pGc));case 8:return new lcc;case 12:return new tcc;case 4:return new ycc;case 19:return new Tcc;case 17:return new pdc;case 53:return new sdc;case 6:return new hec;case 25:return new wdc;case 46:return new Ndc;case 31:return new sec;case 14:return new Fec;case 26:return new ppc;case 20:return new Uec;case 24:return new fGc((rGc(),qGc));default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var P7b,Q7b,R7b,S7b,T7b,U7b,V7b,W7b,X7b,Y7b,Z7b,$7b,_7b,a8b,b8b,c8b,d8b,e8b,f8b,g8b,h8b,i8b,j8b,k8b,l8b,m8b,n8b,o8b,p8b,q8b,r8b,s8b,t8b,u8b,v8b,w8b,x8b,y8b,z8b,A8b,B8b,C8b,D8b,E8b,F8b,G8b,H8b,I8b,J8b,K8b,L8b,M8b,N8b,O8b,P8b,Q8b,R8b;var AS=ndb(Ane,Ene,77,CI,W8b,V8b);var X8b;bcb(1540,1,ene,b9b);_.pf=function c9b(a,b){_8b(BD(a,37),b)};var BS=mdb(Ane,'InvertedPortProcessor',1540);bcb(1541,1,ene,h9b);_.pf=function i9b(a,b){g9b(BD(a,37),b)};var FS=mdb(Ane,'LabelAndNodeSizeProcessor',1541);bcb(1542,1,Oie,j9b);_.Mb=function k9b(a){return BD(a,10).k==(j0b(),h0b)};var CS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$0$Type',1542);bcb(1543,1,Oie,l9b);_.Mb=function m9b(a){return BD(a,10).k==(j0b(),e0b)};var DS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$1$Type',1543);bcb(1544,1,qie,n9b);_.td=function o9b(a){e9b(this.b,this.a,this.c,BD(a,10))};_.a=false;_.c=false;var ES=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$2$Type',1544);bcb(1545,1,ene,u9b);_.pf=function v9b(a,b){s9b(BD(a,37),b)};var p9b;var HS=mdb(Ane,'LabelDummyInserter',1545);bcb(1546,1,Vke,w9b);_.Lb=function x9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};_.Fb=function y9b(a){return this===a};_.Mb=function z9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};var GS=mdb(Ane,'LabelDummyInserter/1',1546);bcb(1547,1,ene,D9b);_.pf=function E9b(a,b){C9b(BD(a,37),b)};var JS=mdb(Ane,'LabelDummyRemover',1547);bcb(1548,1,Oie,F9b);_.Mb=function G9b(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var IS=mdb(Ane,'LabelDummyRemover/lambda$0$Type',1548);bcb(1359,1,ene,$9b);_.pf=function cac(a,b){W9b(this,BD(a,37),b)};_.a=null;var H9b;var QS=mdb(Ane,'LabelDummySwitcher',1359);bcb(286,1,{286:1},gac);_.c=0;_.d=null;_.f=0;var KS=mdb(Ane,'LabelDummySwitcher/LabelDummyInfo',286);bcb(1360,1,{},hac);_.Kb=function iac(a){return I9b(),new YAb(null,new Kub(BD(a,29).a,16))};var LS=mdb(Ane,'LabelDummySwitcher/lambda$0$Type',1360);bcb(1361,1,Oie,jac);_.Mb=function kac(a){return I9b(),BD(a,10).k==(j0b(),f0b)};var MS=mdb(Ane,'LabelDummySwitcher/lambda$1$Type',1361);bcb(1362,1,{},lac);_.Kb=function mac(a){return _9b(this.a,BD(a,10))};var NS=mdb(Ane,'LabelDummySwitcher/lambda$2$Type',1362);bcb(1363,1,qie,nac);_.td=function oac(a){aac(this.a,BD(a,286))};var OS=mdb(Ane,'LabelDummySwitcher/lambda$3$Type',1363);bcb(1364,1,Dke,pac);_.ue=function qac(a,b){return bac(BD(a,286),BD(b,286))};_.Fb=function rac(a){return this===a};_.ve=function sac(){return new tpb(this)};var PS=mdb(Ane,'LabelDummySwitcher/lambda$4$Type',1364);bcb(791,1,ene,uac);_.pf=function vac(a,b){tac(BD(a,37),b)};var RS=mdb(Ane,'LabelManagementProcessor',791);bcb(1549,1,ene,Iac);_.pf=function Jac(a,b){Cac(BD(a,37),b)};var TS=mdb(Ane,'LabelSideSelector',1549);bcb(1550,1,Oie,Kac);_.Mb=function Lac(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var SS=mdb(Ane,'LabelSideSelector/lambda$0$Type',1550);bcb(1558,1,ene,Sac);_.pf=function Tac(a,b){Oac(BD(a,37),b)};var US=mdb(Ane,'LayerConstraintPostprocessor',1558);bcb(1559,1,ene,abc);_.pf=function bbc(a,b){$ac(BD(a,37),b)};var Uac;var WS=mdb(Ane,'LayerConstraintPreprocessor',1559);bcb(360,22,{3:1,35:1,22:1,360:1},ibc);var cbc,dbc,ebc,fbc;var VS=ndb(Ane,'LayerConstraintPreprocessor/HiddenNodeConnections',360,CI,kbc,jbc);var lbc;bcb(1560,1,ene,obc);_.pf=function pbc(a,b){nbc(BD(a,37),b)};var XS=mdb(Ane,'LayerSizeAndGraphHeightCalculator',1560);bcb(1561,1,ene,rbc);_.pf=function tbc(a,b){qbc(BD(a,37),b)};var YS=mdb(Ane,'LongEdgeJoiner',1561);bcb(1562,1,ene,vbc);_.pf=function xbc(a,b){ubc(BD(a,37),b)};var ZS=mdb(Ane,'LongEdgeSplitter',1562);bcb(1563,1,ene,Fbc);_.pf=function Ibc(a,b){Bbc(this,BD(a,37),b)};_.d=0;_.e=0;_.i=0;_.j=0;_.k=0;_.n=0;var bT=mdb(Ane,'NodePromotion',1563);bcb(1564,1,{},Jbc);_.Kb=function Kbc(a){return BD(a,46),Bcb(),true};_.Fb=function Lbc(a){return this===a};var $S=mdb(Ane,'NodePromotion/lambda$0$Type',1564);bcb(1565,1,{},Mbc);_.Kb=function Nbc(a){return Gbc(this.a,BD(a,46))};_.Fb=function Obc(a){return this===a};_.a=0;var _S=mdb(Ane,'NodePromotion/lambda$1$Type',1565);bcb(1566,1,{},Pbc);_.Kb=function Qbc(a){return Hbc(this.a,BD(a,46))};_.Fb=function Rbc(a){return this===a};_.a=0;var aT=mdb(Ane,'NodePromotion/lambda$2$Type',1566);bcb(1567,1,ene,Xbc);_.pf=function Ybc(a,b){Sbc(BD(a,37),b)};var cT=mdb(Ane,'NorthSouthPortPostprocessor',1567);bcb(1568,1,ene,ccc);_.pf=function ecc(a,b){acc(BD(a,37),b)};var eT=mdb(Ane,'NorthSouthPortPreprocessor',1568);bcb(1569,1,Dke,fcc);_.ue=function gcc(a,b){return dcc(BD(a,11),BD(b,11))};_.Fb=function hcc(a){return this===a};_.ve=function icc(){return new tpb(this)};var dT=mdb(Ane,'NorthSouthPortPreprocessor/lambda$0$Type',1569);bcb(1570,1,ene,lcc);_.pf=function ncc(a,b){kcc(BD(a,37),b)};var hT=mdb(Ane,'PartitionMidprocessor',1570);bcb(1571,1,Oie,occ);_.Mb=function pcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var fT=mdb(Ane,'PartitionMidprocessor/lambda$0$Type',1571);bcb(1572,1,qie,qcc);_.td=function rcc(a){mcc(this.a,BD(a,10))};var gT=mdb(Ane,'PartitionMidprocessor/lambda$1$Type',1572);bcb(1573,1,ene,tcc);_.pf=function ucc(a,b){scc(BD(a,37),b)};var iT=mdb(Ane,'PartitionPostprocessor',1573);bcb(1574,1,ene,ycc);_.pf=function zcc(a,b){wcc(BD(a,37),b)};var nT=mdb(Ane,'PartitionPreprocessor',1574);bcb(1575,1,Oie,Acc);_.Mb=function Bcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var jT=mdb(Ane,'PartitionPreprocessor/lambda$0$Type',1575);bcb(1576,1,{},Ccc);_.Kb=function Dcc(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var kT=mdb(Ane,'PartitionPreprocessor/lambda$1$Type',1576);bcb(1577,1,Oie,Ecc);_.Mb=function Fcc(a){return vcc(BD(a,17))};var lT=mdb(Ane,'PartitionPreprocessor/lambda$2$Type',1577);bcb(1578,1,qie,Gcc);_.td=function Hcc(a){xcc(BD(a,17))};var mT=mdb(Ane,'PartitionPreprocessor/lambda$3$Type',1578);bcb(1579,1,ene,Tcc);_.pf=function Xcc(a,b){Qcc(BD(a,37),b)};var Icc,Jcc,Kcc,Lcc,Mcc,Ncc;var tT=mdb(Ane,'PortListSorter',1579);bcb(1580,1,{},Zcc);_.Kb=function $cc(a){return Occ(),BD(a,11).e};var oT=mdb(Ane,'PortListSorter/lambda$0$Type',1580);bcb(1581,1,{},_cc);_.Kb=function adc(a){return Occ(),BD(a,11).g};var pT=mdb(Ane,'PortListSorter/lambda$1$Type',1581);bcb(1582,1,Dke,bdc);_.ue=function cdc(a,b){return Ucc(BD(a,11),BD(b,11))};_.Fb=function ddc(a){return this===a};_.ve=function edc(){return new tpb(this)};var qT=mdb(Ane,'PortListSorter/lambda$2$Type',1582);bcb(1583,1,Dke,fdc);_.ue=function gdc(a,b){return Vcc(BD(a,11),BD(b,11))};_.Fb=function hdc(a){return this===a};_.ve=function idc(){return new tpb(this)};var rT=mdb(Ane,'PortListSorter/lambda$3$Type',1583);bcb(1584,1,Dke,jdc);_.ue=function kdc(a,b){return Wcc(BD(a,11),BD(b,11))};_.Fb=function ldc(a){return this===a};_.ve=function mdc(){return new tpb(this)};var sT=mdb(Ane,'PortListSorter/lambda$4$Type',1584);bcb(1585,1,ene,pdc);_.pf=function qdc(a,b){ndc(BD(a,37),b)};var uT=mdb(Ane,'PortSideProcessor',1585);bcb(1586,1,ene,sdc);_.pf=function tdc(a,b){rdc(BD(a,37),b)};var vT=mdb(Ane,'ReversedEdgeRestorer',1586);bcb(1591,1,ene,wdc);_.pf=function xdc(a,b){udc(this,BD(a,37),b)};var CT=mdb(Ane,'SelfLoopPortRestorer',1591);bcb(1592,1,{},ydc);_.Kb=function zdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var wT=mdb(Ane,'SelfLoopPortRestorer/lambda$0$Type',1592);bcb(1593,1,Oie,Adc);_.Mb=function Bdc(a){return BD(a,10).k==(j0b(),h0b)};var xT=mdb(Ane,'SelfLoopPortRestorer/lambda$1$Type',1593);bcb(1594,1,Oie,Cdc);_.Mb=function Ddc(a){return wNb(BD(a,10),(wtc(),ntc))};var yT=mdb(Ane,'SelfLoopPortRestorer/lambda$2$Type',1594);bcb(1595,1,{},Edc);_.Kb=function Fdc(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var zT=mdb(Ane,'SelfLoopPortRestorer/lambda$3$Type',1595);bcb(1596,1,qie,Gdc);_.td=function Hdc(a){vdc(this.a,BD(a,403))};var AT=mdb(Ane,'SelfLoopPortRestorer/lambda$4$Type',1596);bcb(794,1,qie,Idc);_.td=function Jdc(a){ljc(BD(a,101))};var BT=mdb(Ane,'SelfLoopPortRestorer/lambda$5$Type',794);bcb(1597,1,ene,Ndc);_.pf=function Pdc(a,b){Kdc(BD(a,37),b)};var LT=mdb(Ane,'SelfLoopPostProcessor',1597);bcb(1598,1,{},Qdc);_.Kb=function Rdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DT=mdb(Ane,'SelfLoopPostProcessor/lambda$0$Type',1598);bcb(1599,1,Oie,Sdc);_.Mb=function Tdc(a){return BD(a,10).k==(j0b(),h0b)};var ET=mdb(Ane,'SelfLoopPostProcessor/lambda$1$Type',1599);bcb(1600,1,Oie,Udc);_.Mb=function Vdc(a){return wNb(BD(a,10),(wtc(),ntc))};var FT=mdb(Ane,'SelfLoopPostProcessor/lambda$2$Type',1600);bcb(1601,1,qie,Wdc);_.td=function Xdc(a){Ldc(BD(a,10))};var GT=mdb(Ane,'SelfLoopPostProcessor/lambda$3$Type',1601);bcb(1602,1,{},Ydc);_.Kb=function Zdc(a){return new YAb(null,new Kub(BD(a,101).f,1))};var HT=mdb(Ane,'SelfLoopPostProcessor/lambda$4$Type',1602);bcb(1603,1,qie,$dc);_.td=function _dc(a){Mdc(this.a,BD(a,409))};var IT=mdb(Ane,'SelfLoopPostProcessor/lambda$5$Type',1603);bcb(1604,1,Oie,aec);_.Mb=function bec(a){return !!BD(a,101).i};var JT=mdb(Ane,'SelfLoopPostProcessor/lambda$6$Type',1604);bcb(1605,1,qie,cec);_.td=function dec(a){Odc(this.a,BD(a,101))};var KT=mdb(Ane,'SelfLoopPostProcessor/lambda$7$Type',1605);bcb(1587,1,ene,hec);_.pf=function iec(a,b){gec(BD(a,37),b)};var PT=mdb(Ane,'SelfLoopPreProcessor',1587);bcb(1588,1,{},jec);_.Kb=function kec(a){return new YAb(null,new Kub(BD(a,101).f,1))};var MT=mdb(Ane,'SelfLoopPreProcessor/lambda$0$Type',1588);bcb(1589,1,{},lec);_.Kb=function mec(a){return BD(a,409).a};var NT=mdb(Ane,'SelfLoopPreProcessor/lambda$1$Type',1589);bcb(1590,1,qie,nec);_.td=function oec(a){fec(BD(a,17))};var OT=mdb(Ane,'SelfLoopPreProcessor/lambda$2$Type',1590);bcb(1606,1,ene,sec);_.pf=function tec(a,b){qec(this,BD(a,37),b)};var VT=mdb(Ane,'SelfLoopRouter',1606);bcb(1607,1,{},uec);_.Kb=function vec(a){return new YAb(null,new Kub(BD(a,29).a,16))};var QT=mdb(Ane,'SelfLoopRouter/lambda$0$Type',1607);bcb(1608,1,Oie,wec);_.Mb=function xec(a){return BD(a,10).k==(j0b(),h0b)};var RT=mdb(Ane,'SelfLoopRouter/lambda$1$Type',1608);bcb(1609,1,Oie,yec);_.Mb=function zec(a){return wNb(BD(a,10),(wtc(),ntc))};var ST=mdb(Ane,'SelfLoopRouter/lambda$2$Type',1609);bcb(1610,1,{},Aec);_.Kb=function Bec(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var TT=mdb(Ane,'SelfLoopRouter/lambda$3$Type',1610);bcb(1611,1,qie,Cec);_.td=function Dec(a){pec(this.a,this.b,BD(a,403))};var UT=mdb(Ane,'SelfLoopRouter/lambda$4$Type',1611);bcb(1612,1,ene,Fec);_.pf=function Iec(a,b){Eec(BD(a,37),b)};var $T=mdb(Ane,'SemiInteractiveCrossMinProcessor',1612);bcb(1613,1,Oie,Jec);_.Mb=function Kec(a){return BD(a,10).k==(j0b(),h0b)};var WT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1613);bcb(1614,1,Oie,Lec);_.Mb=function Mec(a){return uNb(BD(a,10))._b((Nyc(),ayc))};var XT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1614);bcb(1615,1,Dke,Nec);_.ue=function Oec(a,b){return Gec(BD(a,10),BD(b,10))};_.Fb=function Pec(a){return this===a};_.ve=function Qec(){return new tpb(this)};var YT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1615);bcb(1616,1,{},Rec);_.Ce=function Sec(a,b){return Hec(BD(a,10),BD(b,10))};var ZT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1616);bcb(1618,1,ene,Uec);_.pf=function Yec(a,b){Tec(BD(a,37),b)};var bU=mdb(Ane,'SortByInputModelProcessor',1618);bcb(1619,1,Oie,Zec);_.Mb=function $ec(a){return BD(a,11).g.c.length!=0};var _T=mdb(Ane,'SortByInputModelProcessor/lambda$0$Type',1619);bcb(1620,1,qie,_ec);_.td=function afc(a){Wec(this.a,BD(a,11))};var aU=mdb(Ane,'SortByInputModelProcessor/lambda$1$Type',1620);bcb(1693,803,{},jfc);_.Me=function kfc(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new Rkb;MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new lgc),new ngc(this,b));nEb(this,new tfc);Hkb(b,new xfc);b.c=KC(SI,Uhe,1,0,5,1);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new zfc),new Bfc(b));nEb(this,new Ffc);Hkb(b,new Jfc);b.c=KC(SI,Uhe,1,0,5,1);c=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new Lfc(this))),new Nfc);MAb(new YAb(null,new Kub(this.c.a.a,16)),new Rfc(c,b));nEb(this,new Vfc);Hkb(b,new Zfc);b.c=KC(SI,Uhe,1,0,5,1);break;case 3:d=new Rkb;nEb(this,new lfc);e=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new pfc(this))),new Pfc);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new _fc),new bgc(e,d));nEb(this,new fgc);Hkb(d,new jgc);d.c=KC(SI,Uhe,1,0,5,1);break;default:throw vbb(new x2c);}};_.b=0;var AU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation',1693);bcb(1694,1,Vke,lfc);_.Lb=function mfc(a){return JD(BD(a,57).g,145)};_.Fb=function nfc(a){return this===a};_.Mb=function ofc(a){return JD(BD(a,57).g,145)};var cU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1694);bcb(1695,1,{},pfc);_.Fe=function qfc(a){return dfc(this.a,BD(a,57))};var dU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1695);bcb(1703,1,Pie,rfc);_.Vd=function sfc(){cfc(this.a,this.b,-1)};_.b=0;var eU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1703);bcb(1705,1,Vke,tfc);_.Lb=function ufc(a){return JD(BD(a,57).g,145)};_.Fb=function vfc(a){return this===a};_.Mb=function wfc(a){return JD(BD(a,57).g,145)};var fU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1705);bcb(1706,1,qie,xfc);_.td=function yfc(a){BD(a,365).Vd()};var gU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1706);bcb(1707,1,Oie,zfc);_.Mb=function Afc(a){return JD(BD(a,57).g,10)};var hU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1707);bcb(1709,1,qie,Bfc);_.td=function Cfc(a){efc(this.a,BD(a,57))};var iU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1709);bcb(1708,1,Pie,Dfc);_.Vd=function Efc(){cfc(this.b,this.a,-1)};_.a=0;var jU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1708);bcb(1710,1,Vke,Ffc);_.Lb=function Gfc(a){return JD(BD(a,57).g,10)};_.Fb=function Hfc(a){return this===a};_.Mb=function Ifc(a){return JD(BD(a,57).g,10)};var kU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1710);bcb(1711,1,qie,Jfc);_.td=function Kfc(a){BD(a,365).Vd()};var lU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1711);bcb(1712,1,{},Lfc);_.Fe=function Mfc(a){return ffc(this.a,BD(a,57))};var mU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1712);bcb(1713,1,{},Nfc);_.De=function Ofc(){return 0};var nU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1713);bcb(1696,1,{},Pfc);_.De=function Qfc(){return 0};var oU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1696);bcb(1715,1,qie,Rfc);_.td=function Sfc(a){gfc(this.a,this.b,BD(a,307))};_.a=0;var pU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1715);bcb(1714,1,Pie,Tfc);_.Vd=function Ufc(){bfc(this.a,this.b,-1)};_.b=0;var qU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1714);bcb(1716,1,Vke,Vfc);_.Lb=function Wfc(a){return BD(a,57),true};_.Fb=function Xfc(a){return this===a};_.Mb=function Yfc(a){return BD(a,57),true};var rU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1716);bcb(1717,1,qie,Zfc);_.td=function $fc(a){BD(a,365).Vd()};var sU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1717);bcb(1697,1,Oie,_fc);_.Mb=function agc(a){return JD(BD(a,57).g,10)};var tU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1697);bcb(1699,1,qie,bgc);_.td=function cgc(a){hfc(this.a,this.b,BD(a,57))};_.a=0;var uU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1699);bcb(1698,1,Pie,dgc);_.Vd=function egc(){cfc(this.b,this.a,-1)};_.a=0;var vU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1698);bcb(1700,1,Vke,fgc);_.Lb=function ggc(a){return BD(a,57),true};_.Fb=function hgc(a){return this===a};_.Mb=function igc(a){return BD(a,57),true};var wU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1700);bcb(1701,1,qie,jgc);_.td=function kgc(a){BD(a,365).Vd()};var xU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1701);bcb(1702,1,Oie,lgc);_.Mb=function mgc(a){return JD(BD(a,57).g,145)};var yU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1702);bcb(1704,1,qie,ngc);_.td=function ogc(a){ifc(this.a,this.b,BD(a,57))};var zU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1704);bcb(1521,1,ene,sgc);_.pf=function xgc(a,b){rgc(this,BD(a,37),b)};var pgc;var EU=mdb(Jne,'HorizontalGraphCompactor',1521);bcb(1522,1,{},ygc);_.Oe=function zgc(a,b){var c,d,e;if(vgc(a,b)){return 0}c=tgc(a);d=tgc(b);if(!!c&&c.k==(j0b(),e0b)||!!d&&d.k==(j0b(),e0b)){return 0}e=BD(vNb(this.a.a,(wtc(),otc)),304);return fBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};_.Pe=function Agc(a,b){var c,d,e;if(vgc(a,b)){return 1}c=tgc(a);d=tgc(b);e=BD(vNb(this.a.a,(wtc(),otc)),304);return iBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};var BU=mdb(Jne,'HorizontalGraphCompactor/1',1522);bcb(1523,1,{},Bgc);_.Ne=function Cgc(a,b){return qgc(),a.a.i==0};var CU=mdb(Jne,'HorizontalGraphCompactor/lambda$0$Type',1523);bcb(1524,1,{},Dgc);_.Ne=function Egc(a,b){return wgc(this.a,a,b)};var DU=mdb(Jne,'HorizontalGraphCompactor/lambda$1$Type',1524);bcb(1664,1,{},Ygc);var Fgc,Ggc;var cV=mdb(Jne,'LGraphToCGraphTransformer',1664);bcb(1672,1,Oie,ehc);_.Mb=function fhc(a){return a!=null};var FU=mdb(Jne,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1672);bcb(1665,1,{},ghc);_.Kb=function hhc(a){return Hgc(),fcb(vNb(BD(BD(a,57).g,10),(wtc(),$sc)))};var GU=mdb(Jne,'LGraphToCGraphTransformer/lambda$0$Type',1665);bcb(1666,1,{},ihc);_.Kb=function jhc(a){return Hgc(),gic(BD(BD(a,57).g,145))};var HU=mdb(Jne,'LGraphToCGraphTransformer/lambda$1$Type',1666);bcb(1675,1,Oie,khc);_.Mb=function lhc(a){return Hgc(),JD(BD(a,57).g,10)};var IU=mdb(Jne,'LGraphToCGraphTransformer/lambda$10$Type',1675);bcb(1676,1,qie,mhc);_.td=function nhc(a){Zgc(BD(a,57))};var JU=mdb(Jne,'LGraphToCGraphTransformer/lambda$11$Type',1676);bcb(1677,1,Oie,ohc);_.Mb=function phc(a){return Hgc(),JD(BD(a,57).g,145)};var KU=mdb(Jne,'LGraphToCGraphTransformer/lambda$12$Type',1677);bcb(1681,1,qie,qhc);_.td=function rhc(a){$gc(BD(a,57))};var LU=mdb(Jne,'LGraphToCGraphTransformer/lambda$13$Type',1681);bcb(1678,1,qie,shc);_.td=function thc(a){_gc(this.a,BD(a,8))};_.a=0;var MU=mdb(Jne,'LGraphToCGraphTransformer/lambda$14$Type',1678);bcb(1679,1,qie,uhc);_.td=function vhc(a){ahc(this.a,BD(a,110))};_.a=0;var NU=mdb(Jne,'LGraphToCGraphTransformer/lambda$15$Type',1679);bcb(1680,1,qie,whc);_.td=function xhc(a){bhc(this.a,BD(a,8))};_.a=0;var OU=mdb(Jne,'LGraphToCGraphTransformer/lambda$16$Type',1680);bcb(1682,1,{},yhc);_.Kb=function zhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var PU=mdb(Jne,'LGraphToCGraphTransformer/lambda$17$Type',1682);bcb(1683,1,Oie,Ahc);_.Mb=function Bhc(a){return Hgc(),OZb(BD(a,17))};var QU=mdb(Jne,'LGraphToCGraphTransformer/lambda$18$Type',1683);bcb(1684,1,qie,Chc);_.td=function Dhc(a){Qgc(this.a,BD(a,17))};var RU=mdb(Jne,'LGraphToCGraphTransformer/lambda$19$Type',1684);bcb(1668,1,qie,Ehc);_.td=function Fhc(a){Rgc(this.a,BD(a,145))};var SU=mdb(Jne,'LGraphToCGraphTransformer/lambda$2$Type',1668);bcb(1685,1,{},Ghc);_.Kb=function Hhc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var TU=mdb(Jne,'LGraphToCGraphTransformer/lambda$20$Type',1685);bcb(1686,1,{},Ihc);_.Kb=function Jhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var UU=mdb(Jne,'LGraphToCGraphTransformer/lambda$21$Type',1686);bcb(1687,1,{},Khc);_.Kb=function Lhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var VU=mdb(Jne,'LGraphToCGraphTransformer/lambda$22$Type',1687);bcb(1688,1,Oie,Mhc);_.Mb=function Nhc(a){return chc(BD(a,15))};var WU=mdb(Jne,'LGraphToCGraphTransformer/lambda$23$Type',1688);bcb(1689,1,qie,Ohc);_.td=function Phc(a){Jgc(this.a,BD(a,15))};var XU=mdb(Jne,'LGraphToCGraphTransformer/lambda$24$Type',1689);bcb(1667,1,qie,Qhc);_.td=function Rhc(a){Sgc(this.a,this.b,BD(a,145))};var YU=mdb(Jne,'LGraphToCGraphTransformer/lambda$3$Type',1667);bcb(1669,1,{},Shc);_.Kb=function Thc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var ZU=mdb(Jne,'LGraphToCGraphTransformer/lambda$4$Type',1669);bcb(1670,1,{},Uhc);_.Kb=function Vhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var $U=mdb(Jne,'LGraphToCGraphTransformer/lambda$5$Type',1670);bcb(1671,1,{},Whc);_.Kb=function Xhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var _U=mdb(Jne,'LGraphToCGraphTransformer/lambda$6$Type',1671);bcb(1673,1,qie,Yhc);_.td=function Zhc(a){dhc(this.a,BD(a,15))};var aV=mdb(Jne,'LGraphToCGraphTransformer/lambda$8$Type',1673);bcb(1674,1,qie,$hc);_.td=function _hc(a){Tgc(this.a,this.b,BD(a,145))};var bV=mdb(Jne,'LGraphToCGraphTransformer/lambda$9$Type',1674);bcb(1663,1,{},dic);_.Le=function eic(a){var b,c,d,e,f;this.a=a;this.d=new KFb;this.c=KC(jN,Uhe,121,this.a.a.a.c.length,0,1);this.b=0;for(c=new olb(this.a.a.a);c.a=p){Ekb(f,meb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.Wf=function mpc(){return false};var CW=mdb(Rne,'MSDCutIndexHeuristic',802);bcb(1617,1,ene,ppc);_.pf=function qpc(a,b){opc(BD(a,37),b)};var DW=mdb(Rne,'SingleEdgeGraphWrapper',1617);bcb(227,22,{3:1,35:1,22:1,227:1},Bpc);var upc,vpc,wpc,xpc,ypc,zpc;var EW=ndb(Sne,'CenterEdgeLabelPlacementStrategy',227,CI,Dpc,Cpc);var Epc;bcb(422,22,{3:1,35:1,22:1,422:1},Jpc);var Gpc,Hpc;var FW=ndb(Sne,'ConstraintCalculationStrategy',422,CI,Lpc,Kpc);var Mpc;bcb(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},Tpc);_.Kf=function Vpc(){return Spc(this)};_.Xf=function Upc(){return Spc(this)};var Opc,Ppc,Qpc;var GW=ndb(Sne,'CrossingMinimizationStrategy',314,CI,Xpc,Wpc);var Ypc;bcb(337,22,{3:1,35:1,22:1,337:1},cqc);var $pc,_pc,aqc;var HW=ndb(Sne,'CuttingStrategy',337,CI,eqc,dqc);var fqc;bcb(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},oqc);_.Kf=function qqc(){return nqc(this)};_.Xf=function pqc(){return nqc(this)};var hqc,iqc,jqc,kqc,lqc;var IW=ndb(Sne,'CycleBreakingStrategy',335,CI,sqc,rqc);var tqc;bcb(419,22,{3:1,35:1,22:1,419:1},yqc);var vqc,wqc;var JW=ndb(Sne,'DirectionCongruency',419,CI,Aqc,zqc);var Bqc;bcb(450,22,{3:1,35:1,22:1,450:1},Hqc);var Dqc,Eqc,Fqc;var KW=ndb(Sne,'EdgeConstraint',450,CI,Jqc,Iqc);var Kqc;bcb(276,22,{3:1,35:1,22:1,276:1},Uqc);var Mqc,Nqc,Oqc,Pqc,Qqc,Rqc;var LW=ndb(Sne,'EdgeLabelSideSelection',276,CI,Wqc,Vqc);var Xqc;bcb(479,22,{3:1,35:1,22:1,479:1},arc);var Zqc,$qc;var MW=ndb(Sne,'EdgeStraighteningStrategy',479,CI,crc,brc);var drc;bcb(274,22,{3:1,35:1,22:1,274:1},mrc);var frc,grc,hrc,irc,jrc,krc;var NW=ndb(Sne,'FixedAlignment',274,CI,orc,nrc);var prc;bcb(275,22,{3:1,35:1,22:1,275:1},zrc);var rrc,trc,urc,vrc,wrc,xrc;var OW=ndb(Sne,'GraphCompactionStrategy',275,CI,Brc,Arc);var Crc;bcb(256,22,{3:1,35:1,22:1,256:1},Prc);var Erc,Frc,Grc,Hrc,Irc,Jrc,Krc,Lrc,Mrc,Nrc;var PW=ndb(Sne,'GraphProperties',256,CI,Rrc,Qrc);var Src;bcb(292,22,{3:1,35:1,22:1,292:1},Yrc);var Urc,Vrc,Wrc;var QW=ndb(Sne,'GreedySwitchType',292,CI,$rc,Zrc);var _rc;bcb(303,22,{3:1,35:1,22:1,303:1},fsc);var bsc,csc,dsc;var RW=ndb(Sne,'InLayerConstraint',303,CI,hsc,gsc);var isc;bcb(420,22,{3:1,35:1,22:1,420:1},nsc);var ksc,lsc;var SW=ndb(Sne,'InteractiveReferencePoint',420,CI,psc,osc);var qsc;var ssc,tsc,usc,vsc,wsc,xsc,ysc,zsc,Asc,Bsc,Csc,Dsc,Esc,Fsc,Gsc,Hsc,Isc,Jsc,Ksc,Lsc,Msc,Nsc,Osc,Psc,Qsc,Rsc,Ssc,Tsc,Usc,Vsc,Wsc,Xsc,Ysc,Zsc,$sc,_sc,atc,btc,ctc,dtc,etc,ftc,gtc,htc,itc,jtc,ktc,ltc,mtc,ntc,otc,ptc,qtc,rtc,stc,ttc,utc,vtc;bcb(163,22,{3:1,35:1,22:1,163:1},Dtc);var xtc,ytc,ztc,Atc,Btc;var TW=ndb(Sne,'LayerConstraint',163,CI,Ftc,Etc);var Gtc;bcb(848,1,ale,kwc);_.Qe=function lwc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yne),''),'Direction Congruency'),'Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other.'),puc),(_5c(),V5c)),JW),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zne),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ne),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),Muc),V5c),SW),pqb(L5c))));o4c(a,$ne,goe,Ouc);o4c(a,$ne,qoe,Nuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ne),''),'Merge Edges'),'Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aoe),''),'Merge Hierarchy-Crossing Edges'),'If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(C5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,boe),''),'Allow Non-Flow Ports To Switch Sides'),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),false),T5c),wI),pqb(M5c)),OC(GC(ZI,1),nie,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,coe),''),'Port Sorting Strategy'),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),xvc),V5c),cX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,doe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),meb(7)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eoe),''),'Add Unnecessary Bendpoints'),'Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,foe),''),'Generate Position and Layer IDs'),'If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,goe),'cycleBreaking'),'Cycle Breaking Strategy'),'Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).'),nuc),V5c),IW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hoe),ppe),'Node Layering Strategy'),'Strategy for node layering.'),bvc),V5c),YW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ioe),ppe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),Tuc),V5c),TW),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,joe),ppe),'Layer Choice Constraint'),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,koe),ppe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,loe),qpe),'Upper Bound On Width [MinWidth Layerer]'),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),meb(4)),X5c),JI),pqb(L5c))));o4c(a,loe,hoe,Wuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,moe),qpe),'Upper Layer Estimation Scaling Factor [MinWidth Layerer]'),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),meb(2)),X5c),JI),pqb(L5c))));o4c(a,moe,hoe,Yuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,noe),rpe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),_uc),V5c),aX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ooe),rpe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),meb(0)),X5c),JI),pqb(L5c))));o4c(a,ooe,noe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,poe),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),meb(Ohe)),X5c),JI),pqb(L5c))));o4c(a,poe,hoe,Quc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qoe),spe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),luc),V5c),GW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,roe),spe),'Force Node Model Order'),'The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,soe),spe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),U5c),BI),pqb(L5c))));o4c(a,soe,tpe,fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,toe),spe),'Semi-Interactive Crossing Minimization'),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),false),T5c),wI),pqb(L5c))));o4c(a,toe,qoe,juc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,uoe),spe),'Position Choice Constraint'),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,voe),spe),'Position ID'),'Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,woe),upe),'Greedy Switch Activation Threshold'),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),meb(40)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xoe),upe),'Greedy Switch Crossing Minimization'),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),cuc),V5c),QW),pqb(L5c))));o4c(a,xoe,qoe,duc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yoe),'crossingMinimization.greedySwitchHierarchical'),'Greedy Switch Crossing Minimization (hierarchical)'),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),$tc),V5c),QW),pqb(L5c))));o4c(a,yoe,qoe,_tc);o4c(a,yoe,tpe,auc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zoe),vpe),'Node Placement Strategy'),'Strategy for node placement.'),vvc),V5c),_W),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Aoe),vpe),'Favor Straight Edges Over Balancing'),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),T5c),wI),pqb(L5c))));o4c(a,Aoe,zoe,lvc);o4c(a,Aoe,zoe,mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Boe),wpe),'BK Edge Straightening'),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),fvc),V5c),MW),pqb(L5c))));o4c(a,Boe,zoe,gvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Coe),wpe),'BK Fixed Alignment'),'Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four.'),ivc),V5c),NW),pqb(L5c))));o4c(a,Coe,zoe,jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Doe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),U5c),BI),pqb(L5c))));o4c(a,Doe,zoe,ovc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Eoe),'nodePlacement.networkSimplex'),'Node Flexibility'),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),V5c),$W),pqb(K5c))));o4c(a,Eoe,zoe,tvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Foe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),rvc),V5c),$W),pqb(L5c))));o4c(a,Foe,zoe,svc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Goe),xpe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),xuc),V5c),eX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hoe),xpe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),zuc),V5c),fX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ioe),'edgeRouting.splines'),'Spline Routing Mode'),'Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes.'),Buc),V5c),hX),pqb(L5c))));o4c(a,Ioe,ype,Cuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Joe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),U5c),BI),pqb(L5c))));o4c(a,Joe,ype,Euc);o4c(a,Joe,Ioe,Fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Koe),'edgeRouting.polyline'),'Sloped Edge Zone Width'),'Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer.'),2),U5c),BI),pqb(L5c))));o4c(a,Koe,ype,vuc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Loe),zpe),'Spacing Base Value'),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Moe),zpe),'Edge Node Between Layers Spacing'),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Noe),zpe),'Edge Edge Between Layer Spacing'),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ooe),zpe),'Node Node Between Layers Spacing'),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Poe),Ape),'Direction Priority'),'Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qoe),Ape),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Roe),Ape),'Straightness Priority'),'Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Soe),Bpe),Ole),'Tries to further compact components (disconnected sub-graphs).'),false),T5c),wI),pqb(L5c))));o4c(a,Soe,zme,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Toe),Cpe),'Post Compaction Strategy'),Dpe),Ntc),V5c),OW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Uoe),Cpe),'Post Compaction Constraint Calculation'),Dpe),Ltc),V5c),FW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Voe),Epe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Woe),Epe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),meb(16)),X5c),JI),pqb(L5c))));o4c(a,Woe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xoe),Epe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),meb(5)),X5c),JI),pqb(L5c))));o4c(a,Xoe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yoe),Fpe),'Graph Wrapping Strategy'),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),bwc),V5c),jX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zoe),Fpe),'Additional Wrapped Edges Spacing'),'To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing.'),10),U5c),BI),pqb(L5c))));o4c(a,Zoe,Yoe,Ivc);o4c(a,Zoe,Yoe,Jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$oe),Fpe),'Correction Factor for Wrapping'),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),U5c),BI),pqb(L5c))));o4c(a,$oe,Yoe,Lvc);o4c(a,$oe,Yoe,Mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_oe),Gpe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),Tvc),V5c),HW),pqb(L5c))));o4c(a,_oe,Yoe,Uvc);o4c(a,_oe,Yoe,Vvc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,ape),Gpe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),Y5c),yK),pqb(L5c))));o4c(a,ape,_oe,Ovc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bpe),'wrapping.cutting.msd'),'MSD Freedom'),'The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts.'),Qvc),X5c),JI),pqb(L5c))));o4c(a,bpe,_oe,Rvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cpe),Hpe),'Validification Strategy'),'When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed.'),gwc),V5c),iX),pqb(L5c))));o4c(a,cpe,Yoe,hwc);o4c(a,cpe,Yoe,iwc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,dpe),Hpe),'Valid Indices for Wrapping'),null),Y5c),yK),pqb(L5c))));o4c(a,dpe,Yoe,dwc);o4c(a,dpe,Yoe,ewc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,epe),Ipe),'Improve Cuts'),'For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought.'),true),T5c),wI),pqb(L5c))));o4c(a,epe,Yoe,Zvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fpe),Ipe),'Distance Penalty When Improving Cuts'),null),2),U5c),BI),pqb(L5c))));o4c(a,fpe,Yoe,Xvc);o4c(a,fpe,epe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gpe),Ipe),'Improve Wrapped Edges'),'The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges.'),true),T5c),wI),pqb(L5c))));o4c(a,gpe,Yoe,_vc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hpe),Jpe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),tuc),V5c),LW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ipe),Jpe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),ruc),V5c),EW),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,jpe),Kpe),'Consider Model Order'),'Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.'),Wtc),V5c),bX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,kpe),Kpe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lpe),Kpe),'Consider Model Order for Components'),'If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected.'),Ptc),V5c),hQ),pqb(L5c))));o4c(a,lpe,zme,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mpe),Kpe),'Long Edge Ordering Strategy'),'Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout.'),Ttc),V5c),ZW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,npe),Kpe),'Crossing Counter Node Order Influence'),'Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,npe,jpe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ope),Kpe),'Crossing Counter Port Order Influence'),'Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,ope,jpe,null);Oyc((new Pyc,a))};var Itc,Jtc,Ktc,Ltc,Mtc,Ntc,Otc,Ptc,Qtc,Rtc,Stc,Ttc,Utc,Vtc,Wtc,Xtc,Ytc,Ztc,$tc,_tc,auc,buc,cuc,duc,euc,fuc,guc,huc,iuc,juc,kuc,luc,muc,nuc,ouc,puc,quc,ruc,suc,tuc,uuc,vuc,wuc,xuc,yuc,zuc,Auc,Buc,Cuc,Duc,Euc,Fuc,Guc,Huc,Iuc,Juc,Kuc,Luc,Muc,Nuc,Ouc,Puc,Quc,Ruc,Suc,Tuc,Uuc,Vuc,Wuc,Xuc,Yuc,Zuc,$uc,_uc,avc,bvc,cvc,dvc,evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc,ovc,pvc,qvc,rvc,svc,tvc,uvc,vvc,wvc,xvc,yvc,zvc,Avc,Bvc,Cvc,Dvc,Evc,Fvc,Gvc,Hvc,Ivc,Jvc,Kvc,Lvc,Mvc,Nvc,Ovc,Pvc,Qvc,Rvc,Svc,Tvc,Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc;var UW=mdb(Sne,'LayeredMetaDataProvider',848);bcb(986,1,ale,Pyc);_.Qe=function Qyc(a){Oyc(a)};var mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc,Ywc,Zwc,$wc,_wc,axc,bxc,cxc,dxc,exc,fxc,gxc,hxc,ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc;var WW=mdb(Sne,'LayeredOptions',986);bcb(987,1,{},Ryc);_.$e=function Syc(){var a;return a=new jUb,a};_._e=function Tyc(a){};var VW=mdb(Sne,'LayeredOptions/LayeredFactory',987);bcb(1372,1,{});_.a=0;var Uyc;var $1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder',1372);bcb(779,1372,{},ezc);var bzc,czc;var XW=mdb(Sne,'LayeredSpacings/LayeredSpacingsBuilder',779);bcb(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},nzc);_.Kf=function pzc(){return mzc(this)};_.Xf=function ozc(){return mzc(this)};var fzc,gzc,hzc,izc,jzc,kzc;var YW=ndb(Sne,'LayeringStrategy',313,CI,rzc,qzc);var szc;bcb(378,22,{3:1,35:1,22:1,378:1},zzc);var uzc,vzc,wzc;var ZW=ndb(Sne,'LongEdgeOrderingStrategy',378,CI,Bzc,Azc);var Czc;bcb(197,22,{3:1,35:1,22:1,197:1},Kzc);var Ezc,Fzc,Gzc,Hzc;var $W=ndb(Sne,'NodeFlexibility',197,CI,Nzc,Mzc);var Ozc;bcb(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},Xzc);_.Kf=function Zzc(){return Wzc(this)};_.Xf=function Yzc(){return Wzc(this)};var Qzc,Rzc,Szc,Tzc,Uzc;var _W=ndb(Sne,'NodePlacementStrategy',315,CI,_zc,$zc);var aAc;bcb(260,22,{3:1,35:1,22:1,260:1},lAc);var cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc;var aX=ndb(Sne,'NodePromotionStrategy',260,CI,nAc,mAc);var oAc;bcb(339,22,{3:1,35:1,22:1,339:1},uAc);var qAc,rAc,sAc;var bX=ndb(Sne,'OrderingStrategy',339,CI,wAc,vAc);var xAc;bcb(421,22,{3:1,35:1,22:1,421:1},CAc);var zAc,AAc;var cX=ndb(Sne,'PortSortingStrategy',421,CI,EAc,DAc);var FAc;bcb(452,22,{3:1,35:1,22:1,452:1},LAc);var HAc,IAc,JAc;var dX=ndb(Sne,'PortType',452,CI,NAc,MAc);var OAc;bcb(375,22,{3:1,35:1,22:1,375:1},UAc);var QAc,RAc,SAc;var eX=ndb(Sne,'SelfLoopDistributionStrategy',375,CI,WAc,VAc);var XAc;bcb(376,22,{3:1,35:1,22:1,376:1},aBc);var ZAc,$Ac;var fX=ndb(Sne,'SelfLoopOrderingStrategy',376,CI,cBc,bBc);var dBc;bcb(304,1,{304:1},oBc);var gX=mdb(Sne,'Spacings',304);bcb(336,22,{3:1,35:1,22:1,336:1},uBc);var qBc,rBc,sBc;var hX=ndb(Sne,'SplineRoutingMode',336,CI,wBc,vBc);var xBc;bcb(338,22,{3:1,35:1,22:1,338:1},DBc);var zBc,ABc,BBc;var iX=ndb(Sne,'ValidifyStrategy',338,CI,FBc,EBc);var GBc;bcb(377,22,{3:1,35:1,22:1,377:1},MBc);var IBc,JBc,KBc;var jX=ndb(Sne,'WrappingStrategy',377,CI,OBc,NBc);var PBc;bcb(1383,1,Bqe,VBc);_.Yf=function WBc(a){return BD(a,37),RBc};_.pf=function XBc(a,b){UBc(this,BD(a,37),b)};var RBc;var kX=mdb(Cqe,'DepthFirstCycleBreaker',1383);bcb(782,1,Bqe,aCc);_.Yf=function cCc(a){return BD(a,37),YBc};_.pf=function dCc(a,b){$Bc(this,BD(a,37),b)};_.Zf=function bCc(a){return BD(Ikb(a,Bub(this.d,a.c.length)),10)};var YBc;var lX=mdb(Cqe,'GreedyCycleBreaker',782);bcb(1386,782,Bqe,eCc);_.Zf=function fCc(a){var b,c,d,e;e=null;b=Ohe;for(d=new olb(a);d.a1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,BD(this,660)):(mmb(),Okb(a,this.d));PEc(this.e,a)}};_.Sf=function DEc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=sEc(c,a.length)){f=a[b-(c?1:-1)];UDc(this.f,f,c?(KAc(),IAc):(KAc(),HAc))}e=a[b][0];k=!d||e.k==(j0b(),e0b);j=Ou(a[b]);this.ag(j,k,false,c);g=0;for(i=new olb(j);i.a');a0?(RHc(this.a,a[b-1],a[b]),undefined):!c&&b1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,this):(mmb(),Okb(a,this.d));Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),Awc)))||PEc(this.e,a)}};var YX=mdb(Gqe,'ModelOrderBarycenterHeuristic',660);bcb(1803,1,Dke,$Gc);_.ue=function _Gc(a,b){return VGc(this.a,BD(a,10),BD(b,10))};_.Fb=function aHc(a){return this===a};_.ve=function bHc(){return new tpb(this)};var XX=mdb(Gqe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1803);bcb(1403,1,Bqe,fHc);_.Yf=function gHc(a){var b;return BD(a,37),b=k3c(cHc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hHc(a,b){eHc((BD(a,37),b))};var cHc;var ZX=mdb(Gqe,'NoCrossingMinimizer',1403);bcb(796,402,Eqe,iHc);_.$f=function jHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new olb(a.j);k.a1&&(e.j==(Ucd(),zcd)?(this.b[a]=true):e.j==Tcd&&a>0&&(this.b[a-1]=true))};_.f=0;var aY=mdb(Lne,'AllCrossingsCounter',1798);bcb(587,1,{},BHc);_.b=0;_.d=0;var bY=mdb(Lne,'BinaryIndexedTree',587);bcb(524,1,{},dIc);var DHc,EHc;var lY=mdb(Lne,'CrossingsCounter',524);bcb(1906,1,Dke,hIc);_.ue=function iIc(a,b){return YHc(this.a,BD(a,11),BD(b,11))};_.Fb=function jIc(a){return this===a};_.ve=function kIc(){return new tpb(this)};var cY=mdb(Lne,'CrossingsCounter/lambda$0$Type',1906);bcb(1907,1,Dke,lIc);_.ue=function mIc(a,b){return ZHc(this.a,BD(a,11),BD(b,11))};_.Fb=function nIc(a){return this===a};_.ve=function oIc(){return new tpb(this)};var dY=mdb(Lne,'CrossingsCounter/lambda$1$Type',1907);bcb(1908,1,Dke,pIc);_.ue=function qIc(a,b){return $Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function rIc(a){return this===a};_.ve=function sIc(){return new tpb(this)};var eY=mdb(Lne,'CrossingsCounter/lambda$2$Type',1908);bcb(1909,1,Dke,tIc);_.ue=function uIc(a,b){return _Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function vIc(a){return this===a};_.ve=function wIc(){return new tpb(this)};var fY=mdb(Lne,'CrossingsCounter/lambda$3$Type',1909);bcb(1910,1,qie,xIc);_.td=function yIc(a){eIc(this.a,BD(a,11))};var gY=mdb(Lne,'CrossingsCounter/lambda$4$Type',1910);bcb(1911,1,Oie,zIc);_.Mb=function AIc(a){return fIc(this.a,BD(a,11))};var hY=mdb(Lne,'CrossingsCounter/lambda$5$Type',1911);bcb(1912,1,qie,CIc);_.td=function DIc(a){BIc(this,a)};var iY=mdb(Lne,'CrossingsCounter/lambda$6$Type',1912);bcb(1913,1,qie,EIc);_.td=function FIc(a){var b;FHc();Wjb(this.b,(b=this.a,BD(a,11),b))};var jY=mdb(Lne,'CrossingsCounter/lambda$7$Type',1913);bcb(826,1,Vke,GIc);_.Lb=function HIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};_.Fb=function IIc(a){return this===a};_.Mb=function JIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};var kY=mdb(Lne,'CrossingsCounter/lambda$8$Type',826);bcb(1905,1,{},LIc);var pY=mdb(Lne,'HyperedgeCrossingsCounter',1905);bcb(467,1,{35:1,467:1},NIc);_.wd=function OIc(a){return MIc(this,BD(a,467))};_.b=0;_.c=0;_.e=0;_.f=0;var oY=mdb(Lne,'HyperedgeCrossingsCounter/Hyperedge',467);bcb(362,1,{35:1,362:1},QIc);_.wd=function RIc(a){return PIc(this,BD(a,362))};_.b=0;_.c=0;var nY=mdb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner',362);bcb(523,22,{3:1,35:1,22:1,523:1},VIc);var SIc,TIc;var mY=ndb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',523,CI,XIc,WIc);var YIc;bcb(1405,1,Bqe,dJc);_.Yf=function eJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?_Ic:null};_.pf=function fJc(a,b){cJc(this,BD(a,37),b)};var _Ic;var rY=mdb(Hqe,'InteractiveNodePlacer',1405);bcb(1406,1,Bqe,tJc);_.Yf=function uJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?gJc:null};_.pf=function vJc(a,b){rJc(this,BD(a,37),b)};var gJc,hJc,iJc;var tY=mdb(Hqe,'LinearSegmentsNodePlacer',1406);bcb(257,1,{35:1,257:1},zJc);_.wd=function AJc(a){return wJc(this,BD(a,257))};_.Fb=function BJc(a){var b;if(JD(a,257)){b=BD(a,257);return this.b==b.b}return false};_.Hb=function CJc(){return this.b};_.Ib=function DJc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var sY=mdb(Hqe,'LinearSegmentsNodePlacer/LinearSegment',257);bcb(1408,1,Bqe,$Jc);_.Yf=function _Jc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?EJc:null};_.pf=function hKc(a,b){WJc(this,BD(a,37),b)};_.b=0;_.g=0;var EJc;var dZ=mdb(Hqe,'NetworkSimplexPlacer',1408);bcb(1427,1,Dke,iKc);_.ue=function jKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function kKc(a){return this===a};_.ve=function lKc(){return new tpb(this)};var uY=mdb(Hqe,'NetworkSimplexPlacer/0methodref$compare$Type',1427);bcb(1429,1,Dke,mKc);_.ue=function nKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function oKc(a){return this===a};_.ve=function pKc(){return new tpb(this)};var vY=mdb(Hqe,'NetworkSimplexPlacer/1methodref$compare$Type',1429);bcb(649,1,{649:1},qKc);var wY=mdb(Hqe,'NetworkSimplexPlacer/EdgeRep',649);bcb(401,1,{401:1},rKc);_.b=false;var xY=mdb(Hqe,'NetworkSimplexPlacer/NodeRep',401);bcb(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},vKc);var CY=mdb(Hqe,'NetworkSimplexPlacer/Path',508);bcb(1409,1,{},wKc);_.Kb=function xKc(a){return BD(a,17).d.i.k};var yY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$0$Type',1409);bcb(1410,1,Oie,yKc);_.Mb=function zKc(a){return BD(a,267)==(j0b(),g0b)};var zY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$1$Type',1410);bcb(1411,1,{},AKc);_.Kb=function BKc(a){return BD(a,17).d.i};var AY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$2$Type',1411);bcb(1412,1,Oie,CKc);_.Mb=function DKc(a){return eLc(Lzc(BD(a,10)))};var BY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$3$Type',1412);bcb(1413,1,Oie,EKc);_.Mb=function FKc(a){return dKc(BD(a,11))};var DY=mdb(Hqe,'NetworkSimplexPlacer/lambda$0$Type',1413);bcb(1414,1,qie,GKc);_.td=function HKc(a){LJc(this.a,this.b,BD(a,11))};var EY=mdb(Hqe,'NetworkSimplexPlacer/lambda$1$Type',1414);bcb(1423,1,qie,IKc);_.td=function JKc(a){MJc(this.a,BD(a,17))};var FY=mdb(Hqe,'NetworkSimplexPlacer/lambda$10$Type',1423);bcb(1424,1,{},KKc);_.Kb=function LKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var GY=mdb(Hqe,'NetworkSimplexPlacer/lambda$11$Type',1424);bcb(1425,1,qie,MKc);_.td=function NKc(a){NJc(this.a,BD(a,10))};var HY=mdb(Hqe,'NetworkSimplexPlacer/lambda$12$Type',1425);bcb(1426,1,{},OKc);_.Kb=function PKc(a){return FJc(),meb(BD(a,121).e)};var IY=mdb(Hqe,'NetworkSimplexPlacer/lambda$13$Type',1426);bcb(1428,1,{},QKc);_.Kb=function RKc(a){return FJc(),meb(BD(a,121).e)};var JY=mdb(Hqe,'NetworkSimplexPlacer/lambda$15$Type',1428);bcb(1430,1,Oie,SKc);_.Mb=function TKc(a){return FJc(),BD(a,401).c.k==(j0b(),h0b)};var KY=mdb(Hqe,'NetworkSimplexPlacer/lambda$17$Type',1430);bcb(1431,1,Oie,UKc);_.Mb=function VKc(a){return FJc(),BD(a,401).c.j.c.length>1};var LY=mdb(Hqe,'NetworkSimplexPlacer/lambda$18$Type',1431);bcb(1432,1,qie,WKc);_.td=function XKc(a){eKc(this.c,this.b,this.d,this.a,BD(a,401))};_.c=0;_.d=0;var MY=mdb(Hqe,'NetworkSimplexPlacer/lambda$19$Type',1432);bcb(1415,1,{},YKc);_.Kb=function ZKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var NY=mdb(Hqe,'NetworkSimplexPlacer/lambda$2$Type',1415);bcb(1433,1,qie,$Kc);_.td=function _Kc(a){fKc(this.a,BD(a,11))};_.a=0;var OY=mdb(Hqe,'NetworkSimplexPlacer/lambda$20$Type',1433);bcb(1434,1,{},aLc);_.Kb=function bLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var PY=mdb(Hqe,'NetworkSimplexPlacer/lambda$21$Type',1434);bcb(1435,1,qie,cLc);_.td=function dLc(a){OJc(this.a,BD(a,10))};var QY=mdb(Hqe,'NetworkSimplexPlacer/lambda$22$Type',1435);bcb(1436,1,Oie,fLc);_.Mb=function gLc(a){return eLc(a)};var RY=mdb(Hqe,'NetworkSimplexPlacer/lambda$23$Type',1436);bcb(1437,1,{},hLc);_.Kb=function iLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var SY=mdb(Hqe,'NetworkSimplexPlacer/lambda$24$Type',1437);bcb(1438,1,Oie,jLc);_.Mb=function kLc(a){return PJc(this.a,BD(a,10))};var TY=mdb(Hqe,'NetworkSimplexPlacer/lambda$25$Type',1438);bcb(1439,1,qie,lLc);_.td=function mLc(a){QJc(this.a,this.b,BD(a,10))};var UY=mdb(Hqe,'NetworkSimplexPlacer/lambda$26$Type',1439);bcb(1440,1,Oie,nLc);_.Mb=function oLc(a){return FJc(),!OZb(BD(a,17))};var VY=mdb(Hqe,'NetworkSimplexPlacer/lambda$27$Type',1440);bcb(1441,1,Oie,pLc);_.Mb=function qLc(a){return FJc(),!OZb(BD(a,17))};var WY=mdb(Hqe,'NetworkSimplexPlacer/lambda$28$Type',1441);bcb(1442,1,{},rLc);_.Ce=function sLc(a,b){return RJc(this.a,BD(a,29),BD(b,29))};var XY=mdb(Hqe,'NetworkSimplexPlacer/lambda$29$Type',1442);bcb(1416,1,{},tLc);_.Kb=function uLc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var YY=mdb(Hqe,'NetworkSimplexPlacer/lambda$3$Type',1416);bcb(1417,1,Oie,vLc);_.Mb=function wLc(a){return FJc(),cKc(BD(a,17))};var ZY=mdb(Hqe,'NetworkSimplexPlacer/lambda$4$Type',1417);bcb(1418,1,qie,xLc);_.td=function yLc(a){XJc(this.a,BD(a,17))};var $Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$5$Type',1418);bcb(1419,1,{},zLc);_.Kb=function ALc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var _Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$6$Type',1419);bcb(1420,1,Oie,BLc);_.Mb=function CLc(a){return FJc(),BD(a,10).k==(j0b(),h0b)};var aZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$7$Type',1420);bcb(1421,1,{},DLc);_.Kb=function ELc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(O_b(BD(a,10)).a.Kc(),new Sq))))};var bZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$8$Type',1421);bcb(1422,1,Oie,FLc);_.Mb=function GLc(a){return FJc(),NZb(BD(a,17))};var cZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$9$Type',1422);bcb(1404,1,Bqe,KLc);_.Yf=function LLc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?HLc:null};_.pf=function MLc(a,b){JLc(BD(a,37),b)};var HLc;var eZ=mdb(Hqe,'SimpleNodePlacer',1404);bcb(180,1,{180:1},ULc);_.Ib=function VLc(){var a;a='';this.c==(YLc(),XLc)?(a+=kle):this.c==WLc&&(a+=jle);this.o==(eMc(),cMc)?(a+=vle):this.o==dMc?(a+='UP'):(a+='BALANCED');return a};var hZ=mdb(Kqe,'BKAlignedLayout',180);bcb(516,22,{3:1,35:1,22:1,516:1},ZLc);var WLc,XLc;var fZ=ndb(Kqe,'BKAlignedLayout/HDirection',516,CI,_Lc,$Lc);var aMc;bcb(515,22,{3:1,35:1,22:1,515:1},fMc);var cMc,dMc;var gZ=ndb(Kqe,'BKAlignedLayout/VDirection',515,CI,hMc,gMc);var iMc;bcb(1634,1,{},mMc);var iZ=mdb(Kqe,'BKAligner',1634);bcb(1637,1,{},rMc);var lZ=mdb(Kqe,'BKCompactor',1637);bcb(654,1,{654:1},sMc);_.a=0;var jZ=mdb(Kqe,'BKCompactor/ClassEdge',654);bcb(458,1,{458:1},uMc);_.a=null;_.b=0;var kZ=mdb(Kqe,'BKCompactor/ClassNode',458);bcb(1407,1,Bqe,CMc);_.Yf=function GMc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?vMc:null};_.pf=function HMc(a,b){BMc(this,BD(a,37),b)};_.d=false;var vMc;var mZ=mdb(Kqe,'BKNodePlacer',1407);bcb(1635,1,{},JMc);_.d=0;var oZ=mdb(Kqe,'NeighborhoodInformation',1635);bcb(1636,1,Dke,OMc);_.ue=function PMc(a,b){return NMc(this,BD(a,46),BD(b,46))};_.Fb=function QMc(a){return this===a};_.ve=function RMc(){return new tpb(this)};var nZ=mdb(Kqe,'NeighborhoodInformation/NeighborComparator',1636);bcb(808,1,{});var sZ=mdb(Kqe,'ThresholdStrategy',808);bcb(1763,808,{},WMc);_.bg=function XMc(a,b,c){return this.a.o==(eMc(),dMc)?Pje:Qje};_.cg=function YMc(){};var pZ=mdb(Kqe,'ThresholdStrategy/NullThresholdStrategy',1763);bcb(579,1,{579:1},ZMc);_.c=false;_.d=false;var qZ=mdb(Kqe,'ThresholdStrategy/Postprocessable',579);bcb(1764,808,{},bNc);_.bg=function cNc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(YLc(),XLc)){e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}else{e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}return f};_.cg=function dNc(){var a,b,c,d,e;while(this.d.b!=0){e=BD(Ksb(this.d),579);d=_Mc(this,e);if(!d.a){continue}a=d.a;c=Ccb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!OZb(a)&&a.c.i.c==a.d.i.c){continue}b=aNc(this,e);b||swb(this.e,e)}while(this.e.a.c.length!=0){aNc(this,BD(rwb(this.e),579))}};var rZ=mdb(Kqe,'ThresholdStrategy/SimpleThresholdStrategy',1764);bcb(635,1,{635:1,246:1,234:1},hNc);_.Kf=function jNc(){return gNc(this)};_.Xf=function iNc(){return gNc(this)};var eNc;var tZ=mdb(Lqe,'EdgeRouterFactory',635);bcb(1458,1,Bqe,wNc);_.Yf=function xNc(a){return uNc(BD(a,37))};_.pf=function yNc(a,b){vNc(BD(a,37),b)};var lNc,mNc,nNc,oNc,pNc,qNc,rNc,sNc;var uZ=mdb(Lqe,'OrthogonalEdgeRouter',1458);bcb(1451,1,Bqe,NNc);_.Yf=function ONc(a){return INc(BD(a,37))};_.pf=function PNc(a,b){KNc(this,BD(a,37),b)};var zNc,ANc,BNc,CNc,DNc,ENc;var wZ=mdb(Lqe,'PolylineEdgeRouter',1451);bcb(1452,1,Vke,RNc);_.Lb=function SNc(a){return QNc(BD(a,10))};_.Fb=function TNc(a){return this===a};_.Mb=function UNc(a){return QNc(BD(a,10))};var vZ=mdb(Lqe,'PolylineEdgeRouter/1',1452);bcb(1809,1,Oie,ZNc);_.Mb=function $Nc(a){return BD(a,129).c==(HOc(),FOc)};var xZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$0$Type',1809);bcb(1810,1,{},_Nc);_.Ge=function aOc(a){return BD(a,129).d};var yZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$1$Type',1810);bcb(1811,1,Oie,bOc);_.Mb=function cOc(a){return BD(a,129).c==(HOc(),FOc)};var zZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$2$Type',1811);bcb(1812,1,{},dOc);_.Ge=function eOc(a){return BD(a,129).d};var AZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$3$Type',1812);bcb(1813,1,{},fOc);_.Ge=function gOc(a){return BD(a,129).d};var BZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$4$Type',1813);bcb(1814,1,{},hOc);_.Ge=function iOc(a){return BD(a,129).d};var CZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$5$Type',1814);bcb(112,1,{35:1,112:1},uOc);_.wd=function vOc(a){return kOc(this,BD(a,112))};_.Fb=function wOc(a){var b;if(JD(a,112)){b=BD(a,112);return this.g==b.g}return false};_.Hb=function xOc(){return this.g};_.Ib=function zOc(){var a,b,c,d;a=new Wfb('{');d=new olb(this.n);while(d.a'+this.b+' ('+Yr(this.c)+')'};_.d=0;var EZ=mdb(Mqe,'HyperEdgeSegmentDependency',129);bcb(520,22,{3:1,35:1,22:1,520:1},IOc);var FOc,GOc;var DZ=ndb(Mqe,'HyperEdgeSegmentDependency/DependencyType',520,CI,KOc,JOc);var LOc;bcb(1815,1,{},ZOc);var MZ=mdb(Mqe,'HyperEdgeSegmentSplitter',1815);bcb(1816,1,{},aPc);_.a=0;_.b=0;var FZ=mdb(Mqe,'HyperEdgeSegmentSplitter/AreaRating',1816);bcb(329,1,{329:1},bPc);_.a=0;_.b=0;_.c=0;var GZ=mdb(Mqe,'HyperEdgeSegmentSplitter/FreeArea',329);bcb(1817,1,Dke,cPc);_.ue=function dPc(a,b){return _Oc(BD(a,112),BD(b,112))};_.Fb=function ePc(a){return this===a};_.ve=function fPc(){return new tpb(this)};var HZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$0$Type',1817);bcb(1818,1,qie,gPc);_.td=function hPc(a){TOc(this.a,this.d,this.c,this.b,BD(a,112))};_.b=0;var IZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$1$Type',1818);bcb(1819,1,{},iPc);_.Kb=function jPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var JZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$2$Type',1819);bcb(1820,1,{},kPc);_.Kb=function lPc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var KZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$3$Type',1820);bcb(1821,1,{},mPc);_.Fe=function nPc(a){return Edb(ED(a))};var LZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$4$Type',1821);bcb(655,1,{},tPc);_.a=0;_.b=0;_.c=0;var QZ=mdb(Mqe,'OrthogonalRoutingGenerator',655);bcb(1638,1,{},xPc);_.Kb=function yPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var OZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$0$Type',1638);bcb(1639,1,{},zPc);_.Kb=function APc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var PZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$1$Type',1639);bcb(661,1,{});var RZ=mdb(Nqe,'BaseRoutingDirectionStrategy',661);bcb(1807,661,{},EPc);_.dg=function FPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b+m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function GPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function HPc(){return Ucd(),Rcd};_.gg=function IPc(){return Ucd(),Acd};var SZ=mdb(Nqe,'NorthToSouthRoutingStrategy',1807);bcb(1808,661,{},JPc);_.dg=function KPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b-m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function LPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function MPc(){return Ucd(),Acd};_.gg=function NPc(){return Ucd(),Rcd};var TZ=mdb(Nqe,'SouthToNorthRoutingStrategy',1808);bcb(1806,661,{},OPc);_.dg=function PPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(f,l);Dsb(g.a,d);BPc(this,g,e,d,true);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true);f=b+m.o*c;e=m;d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true)}d=new f7c(f,p);Dsb(g.a,d);BPc(this,g,e,d,true)}}}}};_.eg=function QPc(a){return a.i.n.b+a.n.b+a.a.b};_.fg=function RPc(){return Ucd(),zcd};_.gg=function SPc(){return Ucd(),Tcd};var UZ=mdb(Nqe,'WestToEastRoutingStrategy',1806);bcb(813,1,{},YPc);_.Ib=function ZPc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var WZ=mdb(Pqe,'NubSpline',813);bcb(407,1,{407:1},aQc,bQc);var VZ=mdb(Pqe,'NubSpline/PolarCP',407);bcb(1453,1,Bqe,vQc);_.Yf=function xQc(a){return qQc(BD(a,37))};_.pf=function yQc(a,b){uQc(this,BD(a,37),b)};var cQc,dQc,eQc,fQc,gQc;var b$=mdb(Pqe,'SplineEdgeRouter',1453);bcb(268,1,{268:1},BQc);_.Ib=function CQc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var XZ=mdb(Pqe,'SplineEdgeRouter/Dependency',268);bcb(455,22,{3:1,35:1,22:1,455:1},GQc);var DQc,EQc;var YZ=ndb(Pqe,'SplineEdgeRouter/SideToProcess',455,CI,IQc,HQc);var JQc;bcb(1454,1,Oie,LQc);_.Mb=function MQc(a){return hQc(),!BD(a,128).o};var ZZ=mdb(Pqe,'SplineEdgeRouter/lambda$0$Type',1454);bcb(1455,1,{},NQc);_.Ge=function OQc(a){return hQc(),BD(a,128).v+1};var $Z=mdb(Pqe,'SplineEdgeRouter/lambda$1$Type',1455);bcb(1456,1,qie,PQc);_.td=function QQc(a){sQc(this.a,this.b,BD(a,46))};var _Z=mdb(Pqe,'SplineEdgeRouter/lambda$2$Type',1456);bcb(1457,1,qie,RQc);_.td=function SQc(a){tQc(this.a,this.b,BD(a,46))};var a$=mdb(Pqe,'SplineEdgeRouter/lambda$3$Type',1457);bcb(128,1,{35:1,128:1},YQc,ZQc);_.wd=function $Qc(a){return WQc(this,BD(a,128))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var d$=mdb(Pqe,'SplineSegment',128);bcb(459,1,{459:1},_Qc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var c$=mdb(Pqe,'SplineSegment/EdgeInformation',459);bcb(1234,1,{},hRc);var f$=mdb(Uqe,hme,1234);bcb(1235,1,Dke,jRc);_.ue=function kRc(a,b){return iRc(BD(a,135),BD(b,135))};_.Fb=function lRc(a){return this===a};_.ve=function mRc(){return new tpb(this)};var e$=mdb(Uqe,ime,1235);bcb(1233,1,{},tRc);var g$=mdb(Uqe,'MrTree',1233);bcb(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},ARc);_.Kf=function CRc(){return zRc(this)};_.Xf=function BRc(){return zRc(this)};var uRc,vRc,wRc,xRc;var h$=ndb(Uqe,'TreeLayoutPhases',393,CI,ERc,DRc);var FRc;bcb(1130,209,Mle,HRc);_.Ze=function IRc(a,b){var c,d,e,f,g,h,i;Ccb(DD(hkd(a,(JTc(),ATc))))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c));g=(h=new SRc,tNb(h,a),yNb(h,(mTc(),dTc),a),i=new Lqb,pRc(a,h,i),oRc(a,h,i),h);f=gRc(this.a,g);for(e=new olb(f);e.a'+WRc(this.c):'e_'+tb(this)};var l$=mdb(Vqe,'TEdge',188);bcb(135,134,{3:1,135:1,94:1,134:1},SRc);_.Ib=function TRc(){var a,b,c,d,e;e=null;for(d=Jsb(this.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=Jsb(this.a,0);b.b!=b.d.c;){a=BD(Xsb(b),188);e+=(!!a.b&&!!a.c?WRc(a.b)+'->'+WRc(a.c):'e_'+tb(a))+'\n'}return e};var n$=mdb(Vqe,'TGraph',135);bcb(633,502,{3:1,502:1,633:1,94:1,134:1});var r$=mdb(Vqe,'TShape',633);bcb(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},XRc);_.Ib=function YRc(){return WRc(this)};var q$=mdb(Vqe,'TNode',86);bcb(255,1,vie,ZRc);_.Jc=function $Rc(a){reb(this,a)};_.Kc=function _Rc(){var a;return a=Jsb(this.a.d,0),new aSc(a)};var p$=mdb(Vqe,'TNode/2',255);bcb(358,1,aie,aSc);_.Nb=function bSc(a){Rrb(this,a)};_.Pb=function dSc(){return BD(Xsb(this.a),188).c};_.Ob=function cSc(){return Wsb(this.a)};_.Qb=function eSc(){Zsb(this.a)};var o$=mdb(Vqe,'TNode/2/1',358);bcb(1840,1,ene,hSc);_.pf=function jSc(a,b){gSc(this,BD(a,135),b)};var s$=mdb(Wqe,'FanProcessor',1840);bcb(327,22,{3:1,35:1,22:1,327:1,234:1},rSc);_.Kf=function sSc(){switch(this.g){case 0:return new QSc;case 1:return new hSc;case 2:return new GSc;case 3:return new zSc;case 4:return new NSc;case 5:return new TSc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var kSc,lSc,mSc,nSc,oSc,pSc;var t$=ndb(Wqe,Ene,327,CI,uSc,tSc);var vSc;bcb(1843,1,ene,zSc);_.pf=function ASc(a,b){xSc(this,BD(a,135),b)};_.a=0;var v$=mdb(Wqe,'LevelHeightProcessor',1843);bcb(1844,1,vie,BSc);_.Jc=function CSc(a){reb(this,a)};_.Kc=function DSc(){return mmb(),Emb(),Dmb};var u$=mdb(Wqe,'LevelHeightProcessor/1',1844);bcb(1841,1,ene,GSc);_.pf=function HSc(a,b){ESc(this,BD(a,135),b)};_.a=0;var x$=mdb(Wqe,'NeighborsProcessor',1841);bcb(1842,1,vie,ISc);_.Jc=function JSc(a){reb(this,a)};_.Kc=function KSc(){return mmb(),Emb(),Dmb};var w$=mdb(Wqe,'NeighborsProcessor/1',1842);bcb(1845,1,ene,NSc);_.pf=function OSc(a,b){LSc(this,BD(a,135),b)};_.a=0;var y$=mdb(Wqe,'NodePositionProcessor',1845);bcb(1839,1,ene,QSc);_.pf=function RSc(a,b){PSc(this,BD(a,135))};var z$=mdb(Wqe,'RootProcessor',1839);bcb(1846,1,ene,TSc);_.pf=function USc(a,b){SSc(BD(a,135))};var A$=mdb(Wqe,'Untreeifyer',1846);var VSc,WSc,XSc,YSc,ZSc,$Sc,_Sc,aTc,bTc,cTc,dTc,eTc,fTc,gTc,hTc,iTc,jTc,kTc,lTc;bcb(851,1,ale,sTc);_.Qe=function tTc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zqe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),qTc),(_5c(),V5c)),E$),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$qe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),oTc),V5c),F$),pqb(L5c))));KTc((new LTc,a))};var nTc,oTc,pTc,qTc;var B$=mdb(_qe,'MrTreeMetaDataProvider',851);bcb(994,1,ale,LTc);_.Qe=function MTc(a){KTc(a)};var uTc,vTc,wTc,xTc,yTc,zTc,ATc,BTc,CTc,DTc,ETc,FTc,GTc,HTc,ITc;var D$=mdb(_qe,'MrTreeOptions',994);bcb(995,1,{},NTc);_.$e=function OTc(){var a;return a=new HRc,a};_._e=function PTc(a){};var C$=mdb(_qe,'MrTreeOptions/MrtreeFactory',995);bcb(480,22,{3:1,35:1,22:1,480:1},TTc);var QTc,RTc;var E$=ndb(_qe,'OrderWeighting',480,CI,VTc,UTc);var WTc;bcb(425,22,{3:1,35:1,22:1,425:1},_Tc);var YTc,ZTc;var F$=ndb(_qe,'TreeifyingOrder',425,CI,bUc,aUc);var cUc;bcb(1459,1,Bqe,lUc);_.Yf=function mUc(a){return BD(a,135),eUc};_.pf=function nUc(a,b){kUc(this,BD(a,135),b)};var eUc;var G$=mdb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1459);bcb(1460,1,Bqe,sUc);_.Yf=function tUc(a){return BD(a,135),oUc};_.pf=function uUc(a,b){rUc(this,BD(a,135),b)};var oUc;var H$=mdb('org.eclipse.elk.alg.mrtree.p2order','NodeOrderer',1460);bcb(1461,1,Bqe,CUc);_.Yf=function DUc(a){return BD(a,135),vUc};_.pf=function EUc(a,b){AUc(this,BD(a,135),b)};_.a=0;var vUc;var I$=mdb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1461);bcb(1462,1,Bqe,IUc);_.Yf=function JUc(a){return BD(a,135),FUc};_.pf=function KUc(a,b){HUc(BD(a,135),b)};var FUc;var J$=mdb('org.eclipse.elk.alg.mrtree.p4route','EdgeRouter',1462);var LUc;bcb(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},RUc);_.Kf=function TUc(){return QUc(this)};_.Xf=function SUc(){return QUc(this)};var NUc,OUc;var K$=ndb(cre,'RadialLayoutPhases',495,CI,VUc,UUc);var WUc;bcb(1131,209,Mle,ZUc);_.Ze=function $Uc(a,b){var c,d,e,f,g,h;c=YUc(this,a);Odd(b,'Radial layout',c.c.length);Ccb(DD(hkd(a,(ZWc(),QWc))))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));h=aVc(a);jkd(a,(MUc(),LUc),h);if(!h){throw vbb(new Wdb('The given graph is not a tree!'))}e=Edb(ED(hkd(a,VWc)));e==0&&(e=_Uc(a));jkd(a,VWc,e);for(g=new olb(YUc(this,a));g.a0&&j7c((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(e>=c){throw vbb(new Wdb('The given string does not contain any numbers.'))}f=mfb(b.substr(e,c-e),',|;|\r|\n');if(f.length!=2){throw vbb(new Wdb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Hcb(ufb(f[0]));this.b=Hcb(ufb(f[1]))}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}};_.Ib=function m7c(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var m1=mdb(pne,'KVector',8);bcb(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},s7c,t7c,u7c);_.Pc=function x7c(){return r7c(this)};_.Jf=function v7c(b){var c,d,e,f,g,h;e=mfb(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');Osb(this);try{d=0;g=0;f=0;h=0;while(d0){g%2==0?(f=Hcb(e[d])):(h=Hcb(e[d]));g>0&&g%2!=0&&Dsb(this,new f7c(f,h));++g}++d}}catch(a){a=ubb(a);if(JD(a,127)){c=a;throw vbb(new Wdb('The given string does not match the expected format for vectors.'+c))}else throw vbb(a)}};_.Ib=function y7c(){var a,b,c;a=new Wfb('(');b=Jsb(this,0);while(b.b!=b.d.c){c=BD(Xsb(b),8);Qfb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var l1=mdb(pne,'KVectorChain',74);bcb(248,22,{3:1,35:1,22:1,248:1},G7c);var z7c,A7c,B7c,C7c,D7c,E7c;var o1=ndb(ose,'Alignment',248,CI,I7c,H7c);var J7c;bcb(979,1,ale,Z7c);_.Qe=function $7c(a){Y7c(a)};var L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var q1=mdb(ose,'BoxLayouterOptions',979);bcb(980,1,{},_7c);_.$e=function a8c(){var a;return a=new ged,a};_._e=function b8c(a){};var p1=mdb(ose,'BoxLayouterOptions/BoxFactory',980);bcb(291,22,{3:1,35:1,22:1,291:1},j8c);var c8c,d8c,e8c,f8c,g8c,h8c;var r1=ndb(ose,'ContentAlignment',291,CI,l8c,k8c);var m8c;bcb(684,1,ale,Z9c);_.Qe=function $9c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,sse),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tse),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),Y5c),E0),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$pe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),q8c),V5c),o1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,_le),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,use),''),'Bend Points'),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lqe),''),'Content Alignment'),'Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option.'),x8c),W5c),r1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zpe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cqe),''),Cle),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),A8c),V5c),t1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ype),''),'Edge Routing'),'What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline.'),F8c),V5c),v1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Jre),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,tpe),''),'Hierarchy Handling'),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),K8c),V5c),z1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ame),''),'Padding'),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),g9c),Y5c),j1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ame),''),'Interactive'),'Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xqe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dme),''),'Omit Node Micro Layout'),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bme),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),u9c),V5c),D1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,uqe),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),Y5c),m1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vme),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),X5c),JI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,yme),''),'Randomization Seed'),'Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time).'),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,zme),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mqe),''),'Junction Points'),'This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order.'),R8c),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pqe),''),'Comment Box'),'Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qqe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vse),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),Y5c),h1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,vqe),''),'Margins'),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),T8c),Y5c),i1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xpe),''),'No Layout'),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),false),T5c),wI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wse),''),'Scale Factor'),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),U5c),BI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xse),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yse),''),'Animation Time Factor'),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),meb(100)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zse),''),'Layout Ancestors'),'Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ase),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),meb(4000)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bse),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),meb(400)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cse),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dse),''),'Validate Graph'),'Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ese),''),'Validate Options'),'Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fse),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rse),'box'),'Box Layout Mode'),'Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better.'),u8c),V5c),O1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Lpe),zpe),'Comment Comment Spacing'),'Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mpe),zpe),'Comment Node Spacing'),'Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zle),zpe),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Npe),zpe),'Edge Spacing'),'Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xme),zpe),'Edge Label Spacing'),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ope),zpe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ppe),zpe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Spe),zpe),'Label Node Spacing'),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qpe),zpe),'Horizontal spacing between Label and Port'),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rpe),zpe),'Vertical spacing between Label and Port'),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wme),zpe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tpe),zpe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Upe),zpe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vpe),zpe),'Individual Spacing'),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),Y5c),i2),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wqe),zpe),'Additional Port Space'),'Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border.'),W9c),Y5c),i1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tqe),Jse),'Layout Partition'),'Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction).'),X5c),JI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));o4c(a,tqe,sqe,k9c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,sqe),Jse),'Layout Partitioning'),'Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle.'),i9c),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,dqe),Kse),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),V8c),Y5c),j1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gme),Kse),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),X8c),W5c),B1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gqe),Lse),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),m9c),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,hqe),Lse),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,iqe),Lse),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,jqe),Lse),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,kqe),Lse),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fme),Mse),'Node Size Constraints'),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),Z8c),W5c),I1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Eme),Mse),'Node Size Options'),'Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications.'),c9c),W5c),J1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tme),Mse),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),a9c),Y5c),m1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bqe),Mse),'Fixed Graph Size'),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nqe),Jpe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),D8c),V5c),u1),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cme),Jpe),'Inline Edge Labels'),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),false),T5c),wI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Gse),'font'),'Font Name'),'Font name used for a label.'),Z5c),ZI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Hse),'font'),'Font Size'),'Font size used for a label.'),X5c),JI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,rqe),Nse),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),Y5c),m1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,oqe),Nse),'Port Index'),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),X5c),JI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ype),Nse),'Port Side'),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),B9c),V5c),F1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wpe),Nse),'Port Border Offset'),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),U5c),BI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hme),Ose),'Port Label Placement'),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),y9c),W5c),E1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eqe),Ose),'Port Labels Next to Port'),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fqe),Ose),'Treat Port Labels as Group'),'If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_pe),Pse),'Activate Inside Self Loops'),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aqe),Pse),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),T5c),wI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$le),'edge'),'Edge Thickness'),'The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it.'),1),U5c),BI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ise),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),H8c),V5c),w1),pqb(I5c))));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sne),'Layered'),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.orthogonal'),'Orthogonal'),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,ume),'Force'),'Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.circle'),'Circle'),'Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,bre),'Tree'),'Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.planar'),'Planar'),'Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sre),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));$ad((new _ad,a));Y7c((new Z7c,a));jdd((new kdd,a))};var o8c,p8c,q8c,r8c,s8c,t8c,u8c,v8c,w8c,x8c,y8c,z8c,A8c,B8c,C8c,D8c,E8c,F8c,G8c,H8c,I8c,J8c,K8c,L8c,M8c,N8c,O8c,P8c,Q8c,R8c,S8c,T8c,U8c,V8c,W8c,X8c,Y8c,Z8c,$8c,_8c,a9c,b9c,c9c,d9c,e9c,f9c,g9c,h9c,i9c,j9c,k9c,l9c,m9c,n9c,o9c,p9c,q9c,r9c,s9c,t9c,u9c,v9c,w9c,x9c,y9c,z9c,A9c,B9c,C9c,D9c,E9c,F9c,G9c,H9c,I9c,J9c,K9c,L9c,M9c,N9c,O9c,P9c,Q9c,R9c,S9c,T9c,U9c,V9c,W9c,X9c;var s1=mdb(ose,'CoreOptions',684);bcb(103,22,{3:1,35:1,22:1,103:1},iad);var _9c,aad,bad,cad,dad;var t1=ndb(ose,Cle,103,CI,kad,jad);var lad;bcb(272,22,{3:1,35:1,22:1,272:1},rad);var nad,oad,pad;var u1=ndb(ose,'EdgeLabelPlacement',272,CI,tad,sad);var uad;bcb(218,22,{3:1,35:1,22:1,218:1},Bad);var wad,xad,yad,zad;var v1=ndb(ose,'EdgeRouting',218,CI,Dad,Cad);var Ead;bcb(312,22,{3:1,35:1,22:1,312:1},Nad);var Gad,Had,Iad,Jad,Kad,Lad;var w1=ndb(ose,'EdgeType',312,CI,Pad,Oad);var Qad;bcb(977,1,ale,_ad);_.Qe=function abd(a){$ad(a)};var Sad,Tad,Uad,Vad,Wad,Xad,Yad;var y1=mdb(ose,'FixedLayouterOptions',977);bcb(978,1,{},bbd);_.$e=function cbd(){var a;return a=new Zfd,a};_._e=function dbd(a){};var x1=mdb(ose,'FixedLayouterOptions/FixedFactory',978);bcb(334,22,{3:1,35:1,22:1,334:1},ibd);var ebd,fbd,gbd;var z1=ndb(ose,'HierarchyHandling',334,CI,kbd,jbd);var lbd;bcb(285,22,{3:1,35:1,22:1,285:1},tbd);var nbd,obd,pbd,qbd;var A1=ndb(ose,'LabelSide',285,CI,vbd,ubd);var wbd;bcb(93,22,{3:1,35:1,22:1,93:1},Ibd);var ybd,zbd,Abd,Bbd,Cbd,Dbd,Ebd,Fbd,Gbd;var B1=ndb(ose,'NodeLabelPlacement',93,CI,Lbd,Kbd);var Mbd;bcb(249,22,{3:1,35:1,22:1,249:1},Ubd);var Obd,Pbd,Qbd,Rbd,Sbd;var C1=ndb(ose,'PortAlignment',249,CI,Wbd,Vbd);var Xbd;bcb(98,22,{3:1,35:1,22:1,98:1},gcd);var Zbd,$bd,_bd,acd,bcd,ccd;var D1=ndb(ose,'PortConstraints',98,CI,icd,hcd);var jcd;bcb(273,22,{3:1,35:1,22:1,273:1},scd);var lcd,mcd,ncd,ocd,pcd,qcd;var E1=ndb(ose,'PortLabelPlacement',273,CI,wcd,vcd);var xcd;bcb(61,22,{3:1,35:1,22:1,61:1},Ycd);var zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd,Kcd,Lcd,Mcd,Ncd,Ocd,Pcd,Qcd,Rcd,Scd,Tcd;var F1=ndb(ose,'PortSide',61,CI,_cd,$cd);var bdd;bcb(981,1,ale,kdd);_.Qe=function ldd(a){jdd(a)};var ddd,edd,fdd,gdd,hdd;var H1=mdb(ose,'RandomLayouterOptions',981);bcb(982,1,{},mdd);_.$e=function ndd(){var a;return a=new Mgd,a};_._e=function odd(a){};var G1=mdb(ose,'RandomLayouterOptions/RandomFactory',982);bcb(374,22,{3:1,35:1,22:1,374:1},udd);var pdd,qdd,rdd,sdd;var I1=ndb(ose,'SizeConstraint',374,CI,wdd,vdd);var xdd;bcb(259,22,{3:1,35:1,22:1,259:1},Jdd);var zdd,Add,Bdd,Cdd,Ddd,Edd,Fdd,Gdd,Hdd;var J1=ndb(ose,'SizeOptions',259,CI,Ldd,Kdd);var Mdd;bcb(370,1,{1949:1},Zdd);_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var L1=mdb(yqe,'BasicProgressMonitor',370);bcb(972,209,Mle,ged);_.Ze=function ked(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Box layout',2);e=Gdb(ED(hkd(a,(X7c(),W7c))));f=BD(hkd(a,T7c),116);c=Ccb(DD(hkd(a,O7c)));d=Ccb(DD(hkd(a,P7c)));switch(BD(hkd(a,M7c),311).g){case 0:g=(h=new Tkb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a)),mmb(),Okb(h,new med(d)),h);i=rfd(a);j=ED(hkd(a,L7c));(j==null||(uCb(j),j)<=0)&&(j=1.3);k=ded(g,e,f,i.a,i.b,c,(uCb(j),j));Afd(a,k.a,k.b,false,true);break;default:eed(a,e,f,c);}Qdd(b)};var S1=mdb(yqe,'BoxLayoutProvider',972);bcb(973,1,Dke,med);_.ue=function ned(a,b){return led(this,BD(a,33),BD(b,33))};_.Fb=function oed(a){return this===a};_.ve=function ped(){return new tpb(this)};_.a=false;var M1=mdb(yqe,'BoxLayoutProvider/1',973);bcb(157,1,{157:1},wed,xed);_.Ib=function yed(){return this.c?_od(this.c):Fe(this.b)};var N1=mdb(yqe,'BoxLayoutProvider/Group',157);bcb(311,22,{3:1,35:1,22:1,311:1},Eed);var zed,Aed,Bed,Ced;var O1=ndb(yqe,'BoxLayoutProvider/PackingMode',311,CI,Ged,Fed);var Hed;bcb(974,1,Dke,Jed);_.ue=function Ked(a,b){return hed(BD(a,157),BD(b,157))};_.Fb=function Led(a){return this===a};_.ve=function Med(){return new tpb(this)};var P1=mdb(yqe,'BoxLayoutProvider/lambda$0$Type',974);bcb(975,1,Dke,Ned);_.ue=function Oed(a,b){return ied(BD(a,157),BD(b,157))};_.Fb=function Ped(a){return this===a};_.ve=function Qed(){return new tpb(this)};var Q1=mdb(yqe,'BoxLayoutProvider/lambda$1$Type',975);bcb(976,1,Dke,Red);_.ue=function Sed(a,b){return jed(BD(a,157),BD(b,157))};_.Fb=function Ted(a){return this===a};_.ve=function Ued(){return new tpb(this)};var R1=mdb(yqe,'BoxLayoutProvider/lambda$2$Type',976);bcb(1365,1,{831:1},Ved);_.qg=function Wed(a,b){return Vyc(),!JD(b,160)||h2c((Y1c(),X1c,BD(a,160)),b)};var T1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1365);bcb(1366,1,qie,Xed);_.td=function Yed(a){Yyc(this.a,BD(a,146))};var U1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1366);bcb(1367,1,qie,Zed);_.td=function $ed(a){BD(a,94);Vyc()};var V1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1367);bcb(1371,1,qie,_ed);_.td=function afd(a){Zyc(this.a,BD(a,94))};var W1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1371);bcb(1369,1,Oie,bfd);_.Mb=function cfd(a){return $yc(this.a,this.b,BD(a,146))};var X1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1369);bcb(1368,1,Oie,dfd);_.Mb=function efd(a){return azc(this.a,this.b,BD(a,831))};var Y1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1368);bcb(1370,1,qie,ffd);_.td=function gfd(a){_yc(this.a,this.b,BD(a,146))};var Z1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1370);bcb(935,1,{},Hfd);_.Kb=function Ifd(a){return Gfd(a)};_.Fb=function Jfd(a){return this===a};var _1=mdb(yqe,'ElkUtil/lambda$0$Type',935);bcb(936,1,qie,Kfd);_.td=function Lfd(a){ufd(this.a,this.b,BD(a,79))};_.a=0;_.b=0;var a2=mdb(yqe,'ElkUtil/lambda$1$Type',936);bcb(937,1,qie,Mfd);_.td=function Nfd(a){vfd(this.a,this.b,BD(a,202))};_.a=0;_.b=0;var b2=mdb(yqe,'ElkUtil/lambda$2$Type',937);bcb(938,1,qie,Ofd);_.td=function Pfd(a){wfd(this.a,this.b,BD(a,137))};_.a=0;_.b=0;var c2=mdb(yqe,'ElkUtil/lambda$3$Type',938);bcb(939,1,qie,Qfd);_.td=function Rfd(a){xfd(this.a,BD(a,469))};var d2=mdb(yqe,'ElkUtil/lambda$4$Type',939);bcb(342,1,{35:1,342:1},Tfd);_.wd=function Ufd(a){return Sfd(this,BD(a,236))};_.Fb=function Vfd(a){var b;if(JD(a,342)){b=BD(a,342);return this.a==b.a}return false};_.Hb=function Wfd(){return QD(this.a)};_.Ib=function Xfd(){return this.a+' (exclusive)'};_.a=0;var e2=mdb(yqe,'ExclusiveBounds/ExclusiveLowerBound',342);bcb(1138,209,Mle,Zfd);_.Ze=function $fd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;Odd(b,'Fixed Layout',1);f=BD(hkd(a,(Y9c(),E8c)),218);l=0;m=0;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);B=BD(hkd(q,(Zad(),Yad)),8);if(B){bld(q,B.a,B.b);if(BD(hkd(q,Tad),174).Hc((tdd(),pdd))){n=BD(hkd(q,Vad),8);n.a>0&&n.b>0&&Afd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new Fyd((!q.n&&(q.n=new cUd(D2,q,1,7)),q.n));j.e!=j.i.gc();){h=BD(Dyd(j),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new Fyd((!q.c&&(q.c=new cUd(F2,q,9,9)),q.c));v.e!=v.i.gc();){u=BD(Dyd(v),118);B=BD(hkd(u,Yad),8);!!B&&bld(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new Fyd((!u.n&&(u.n=new cUd(D2,u,1,7)),u.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(e);){c=BD(Rr(e),79);k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new Sr(ur($sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(Xod(jtd(c))!=a){k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Aad(),wad)){for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);for(d=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);g=pfd(c);g.b==0?jkd(c,Q8c,null):jkd(c,Q8c,g)}}}if(!Ccb(DD(hkd(a,(Zad(),Uad))))){t=BD(hkd(a,Wad),116);p=l+t.b+t.c;o=m+t.d+t.a;Afd(a,p,o,true,true)}Qdd(b)};var f2=mdb(yqe,'FixedLayoutProvider',1138);bcb(373,134,{3:1,414:1,373:1,94:1,134:1},_fd,agd);_.Jf=function dgd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=mfb(b,';,;');for(g=j,h=0,i=g.length;h>16&aje|b^d<<16};_.Kc=function zgd(){return new Bgd(this)};_.Ib=function Agd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+fcb(this.b)+')':this.b==null?'pair('+fcb(this.a)+',null)':'pair('+fcb(this.a)+','+fcb(this.b)+')'};var n2=mdb(yqe,'Pair',46);bcb(983,1,aie,Bgd);_.Nb=function Cgd(a){Rrb(this,a)};_.Ob=function Dgd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Egd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw vbb(new utb)};_.Qb=function Fgd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw vbb(new Ydb)};_.b=false;_.c=false;var m2=mdb(yqe,'Pair/1',983);bcb(448,1,{448:1},Ggd);_.Fb=function Hgd(a){return wtb(this.a,BD(a,448).a)&&wtb(this.c,BD(a,448).c)&&wtb(this.d,BD(a,448).d)&&wtb(this.b,BD(a,448).b)};_.Hb=function Igd(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function Jgd(){return '('+this.a+She+this.c+She+this.d+She+this.b+')'};var o2=mdb(yqe,'Quadruple',448);bcb(1126,209,Mle,Mgd);_.Ze=function Ngd(a,b){var c,d,e,f,g;Odd(b,'Random Layout',1);if((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i==0){Qdd(b);return}f=BD(hkd(a,(idd(),gdd)),19);!!f&&f.a!=0?(e=new Hub(f.a)):(e=new Gub);c=Gdb(ED(hkd(a,ddd)));g=Gdb(ED(hkd(a,hdd)));d=BD(hkd(a,edd),116);Lgd(a,e,c,g,d);Qdd(b)};var p2=mdb(yqe,'RandomLayoutProvider',1126);var Ogd;bcb(553,1,{});_.qf=function Sgd(){return new f7c(this.f.i,this.f.j)};_.We=function Tgd(a){if(Jsd(a,(Y9c(),s9c))){return hkd(this.f,Qgd)}return hkd(this.f,a)};_.rf=function Ugd(){return new f7c(this.f.g,this.f.f)};_.sf=function Vgd(){return this.g};_.Xe=function Wgd(a){return ikd(this.f,a)};_.tf=function Xgd(a){dld(this.f,a.a);eld(this.f,a.b)};_.uf=function Ygd(a){cld(this.f,a.a);ald(this.f,a.b)};_.vf=function Zgd(a){this.g=a};_.g=0;var Qgd;var q2=mdb(Use,'ElkGraphAdapters/AbstractElkGraphElementAdapter',553);bcb(554,1,{839:1},$gd);_.wf=function _gd(){var a,b;if(!this.b){this.b=Qu(Kkd(this.a).i);for(b=new Fyd(Kkd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),137);Ekb(this.b,new dhd(a))}}return this.b};_.b=null;var r2=mdb(Use,'ElkGraphAdapters/ElkEdgeAdapter',554);bcb(301,553,{},bhd);_.xf=function chd(){return ahd(this)};_.a=null;var s2=mdb(Use,'ElkGraphAdapters/ElkGraphAdapter',301);bcb(630,553,{181:1},dhd);var t2=mdb(Use,'ElkGraphAdapters/ElkLabelAdapter',630);bcb(629,553,{680:1},hhd);_.wf=function khd(){return ehd(this)};_.Af=function lhd(){var a;return a=BD(hkd(this.f,(Y9c(),S8c)),142),!a&&(a=new H_b),a};_.Cf=function nhd(){return fhd(this)};_.Ef=function phd(a){var b;b=new K_b(a);jkd(this.f,(Y9c(),S8c),b)};_.Ff=function qhd(a){jkd(this.f,(Y9c(),f9c),new r0b(a))};_.yf=function ihd(){return this.d};_.zf=function jhd(){var a,b;if(!this.a){this.a=new Rkb;for(b=new Sr(ur($sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function mhd(){var a,b;if(!this.c){this.c=new Rkb;for(b=new Sr(ur(_sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Df=function ohd(){return Vod(BD(this.f,33)).i!=0||Ccb(DD(BD(this.f,33).We((Y9c(),M8c))))};_.Gf=function rhd(){ghd(this,(Pgd(),Ogd))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var u2=mdb(Use,'ElkGraphAdapters/ElkNodeAdapter',629);bcb(1266,553,{838:1},thd);_.wf=function vhd(){return shd(this)};_.zf=function uhd(){var a,b;if(!this.a){this.a=Pu(BD(this.f,118).xg().i);for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function whd(){var a,b;if(!this.c){this.c=Pu(BD(this.f,118).yg().i);for(b=new Fyd(BD(this.f,118).yg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Hf=function xhd(){return BD(BD(this.f,118).We((Y9c(),A9c)),61)};_.If=function yhd(){var a,b,c,d,e,f,g,h;d=mpd(BD(this.f,118));for(c=new Fyd(BD(this.f,118).yg());c.e!=c.i.gc();){a=BD(Dyd(c),79);for(h=new Fyd((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c));h.e!=h.i.gc();){g=BD(Dyd(h),82);if(ntd(atd(g),d)){return true}else if(atd(g)==d&&Ccb(DD(hkd(a,(Y9c(),N8c))))){return true}}}for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);for(f=new Fyd((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b));f.e!=f.i.gc();){e=BD(Dyd(f),82);if(ntd(atd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var v2=mdb(Use,'ElkGraphAdapters/ElkPortAdapter',1266);bcb(1267,1,Dke,Ahd);_.ue=function Bhd(a,b){return zhd(BD(a,118),BD(b,118))};_.Fb=function Chd(a){return this===a};_.ve=function Dhd(){return new tpb(this)};var w2=mdb(Use,'ElkGraphAdapters/PortComparator',1267);var m5=odb(Vse,'EObject');var x2=odb(Wse,Xse);var y2=odb(Wse,Yse);var C2=odb(Wse,Zse);var G2=odb(Wse,'ElkShape');var z2=odb(Wse,$se);var B2=odb(Wse,_se);var A2=odb(Wse,ate);var k5=odb(Vse,bte);var i5=odb(Vse,'EFactory');var Ehd;var l5=odb(Vse,cte);var o5=odb(Vse,'EPackage');var Ghd;var Ihd,Jhd,Khd,Lhd,Mhd,Nhd,Ohd,Phd,Qhd,Rhd,Shd;var D2=odb(Wse,dte);var E2=odb(Wse,ete);var F2=odb(Wse,fte);bcb(90,1,gte);_.Jg=function Vhd(){this.Kg();return null};_.Kg=function Whd(){return null};_.Lg=function Xhd(){return this.Kg(),false};_.Mg=function Yhd(){return false};_.Ng=function Zhd(a){Uhd(this,a)};var b4=mdb(hte,'BasicNotifierImpl',90);bcb(97,90,pte);_.nh=function fjd(){return oid(this)};_.Og=function Fid(a,b){return a};_.Pg=function Gid(){throw vbb(new bgb)};_.Qg=function Hid(a){var b;return b=zUd(BD(XKd(this.Tg(),this.Vg()),18)),this.eh().ih(this,b.n,b.f,a)};_.Rg=function Iid(a,b){throw vbb(new bgb)};_.Sg=function Jid(a,b,c){return _hd(this,a,b,c)};_.Tg=function Kid(){var a;if(this.Pg()){a=this.Pg().ck();if(a){return a}}return this.zh()};_.Ug=function Lid(){return aid(this)};_.Vg=function Mid(){throw vbb(new bgb)};_.Wg=function Oid(){var a,b;b=this.ph().dk();!b&&this.Pg().ik(b=(nRd(),a=pNd(TKd(this.Tg())),a==null?mRd:new qRd(this,a)));return b};_.Xg=function Qid(a,b){return a};_.Yg=function Rid(a){var b;b=a.Gj();return !b?bLd(this.Tg(),a):a.aj()};_.Zg=function Sid(){var a;a=this.Pg();return !a?null:a.fk()};_.$g=function Tid(){return !this.Pg()?null:this.Pg().ck()};_._g=function Uid(a,b,c){return fid(this,a,b,c)};_.ah=function Vid(a){return gid(this,a)};_.bh=function Wid(a,b){return hid(this,a,b)};_.dh=function Xid(){var a;a=this.Pg();return !!a&&a.gk()};_.eh=function Yid(){throw vbb(new bgb)};_.fh=function Zid(){return jid(this)};_.gh=function $id(a,b,c,d){return kid(this,a,b,d)};_.hh=function _id(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Qj(this,this.yh(),b-this.Ah(),a,c)};_.ih=function ajd(a,b,c,d){return lid(this,a,b,d)};_.jh=function bjd(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Rj(this,this.yh(),b-this.Ah(),a,c)};_.kh=function cjd(){return !!this.Pg()&&!!this.Pg().ek()};_.lh=function djd(a){return mid(this,a)};_.mh=function ejd(a){return nid(this,a)};_.oh=function gjd(a){return rid(this,a)};_.ph=function hjd(){throw vbb(new bgb)};_.qh=function ijd(){return !this.Pg()?null:this.Pg().ek()};_.rh=function jjd(){return jid(this)};_.sh=function kjd(a,b){yid(this,a,b)};_.th=function ljd(a){this.ph().hk(a)};_.uh=function mjd(a){this.ph().kk(a)};_.vh=function njd(a){this.ph().jk(a)};_.wh=function ojd(a,b){var c,d,e,f;f=this.Zg();if(!!f&&!!a){b=Txd(f.Vk(),this,b);f.Zk(this)}d=this.eh();if(d){if((Nid(this,this.eh(),this.Vg()).Bb&Tje)!=0){e=d.fh();!!e&&(!a?e.Yk(this):!f&&e.Zk(this))}else{b=(c=this.Vg(),c>=0?this.Qg(b):this.eh().ih(this,-1-c,null,b));b=this.Sg(null,-1,b)}}this.uh(a);return b};_.xh=function pjd(a){var b,c,d,e,f,g,h,i;c=this.Tg();f=bLd(c,a);b=this.Ah();if(f>=b){return BD(a,66).Nj().Uj(this,this.yh(),f-b)}else if(f<=-1){g=e1d((O6d(),M6d),c,a);if(g){Q6d();BD(g,66).Oj()||(g=_1d(q1d(M6d,g)));e=(d=this.Yg(g),BD(d>=0?this._g(d,true,true):sid(this,g,true),153));i=g.Zj();if(i>1||i==-1){return BD(BD(e,215).hl(a,false),76)}}else{throw vbb(new Wdb(ite+a.ne()+lte))}}else if(a.$j()){return d=this.Yg(a),BD(d>=0?this._g(d,false,true):sid(this,a,false),76)}h=new nGd(this,a);return h};_.yh=function qjd(){return Aid(this)};_.zh=function rjd(){return (NFd(),MFd).S};_.Ah=function sjd(){return aLd(this.zh())};_.Bh=function tjd(a){Cid(this,a)};_.Ib=function ujd(){return Eid(this)};var B5=mdb(qte,'BasicEObjectImpl',97);var zFd;bcb(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1});_.Ch=function Djd(a){var b;b=xjd(this);return b[a]};_.Dh=function Ejd(a,b){var c;c=xjd(this);NC(c,a,b)};_.Eh=function Fjd(a){var b;b=xjd(this);NC(b,a,null)};_.Jg=function Gjd(){return BD(Ajd(this,4),126)};_.Kg=function Hjd(){throw vbb(new bgb)};_.Lg=function Ijd(){return (this.Db&4)!=0};_.Pg=function Jjd(){throw vbb(new bgb)};_.Fh=function Kjd(a){Cjd(this,2,a)};_.Rg=function Ljd(a,b){this.Db=b<<16|this.Db&255;this.Fh(a)};_.Tg=function Mjd(){return wjd(this)};_.Vg=function Njd(){return this.Db>>16};_.Wg=function Ojd(){var a,b;return nRd(),b=pNd(TKd((a=BD(Ajd(this,16),26),!a?this.zh():a))),b==null?(null,mRd):new qRd(this,b)};_.Mg=function Pjd(){return (this.Db&1)==0};_.Zg=function Qjd(){return BD(Ajd(this,128),1935)};_.$g=function Rjd(){return BD(Ajd(this,16),26)};_.dh=function Sjd(){return (this.Db&32)!=0};_.eh=function Tjd(){return BD(Ajd(this,2),49)};_.kh=function Ujd(){return (this.Db&64)!=0};_.ph=function Vjd(){throw vbb(new bgb)};_.qh=function Wjd(){return BD(Ajd(this,64),281)};_.th=function Xjd(a){Cjd(this,16,a)};_.uh=function Yjd(a){Cjd(this,128,a)};_.vh=function Zjd(a){Cjd(this,64,a)};_.yh=function $jd(){return yjd(this)};_.Db=0;var s8=mdb(qte,'MinimalEObjectImpl',114);bcb(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_.Fh=function _jd(a){this.Cb=a};_.eh=function akd(){return this.Cb};var r8=mdb(qte,'MinimalEObjectImpl/Container',115);bcb(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function kkd(a,b,c){return bkd(this,a,b,c)};_.jh=function lkd(a,b,c){return ckd(this,a,b,c)};_.lh=function mkd(a){return dkd(this,a)};_.sh=function nkd(a,b){ekd(this,a,b)};_.zh=function okd(){return Thd(),Shd};_.Bh=function pkd(a){fkd(this,a)};_.Ve=function qkd(){return gkd(this)};_.We=function rkd(a){return hkd(this,a)};_.Xe=function skd(a){return ikd(this,a)};_.Ye=function tkd(a,b){return jkd(this,a,b)};var H2=mdb(rte,'EMapPropertyHolderImpl',1985);bcb(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},xkd);_._g=function ykd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return fid(this,a,b,c)};_.lh=function zkd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return mid(this,a)};_.sh=function Akd(a,b){switch(a){case 0:vkd(this,Edb(ED(b)));return;case 1:wkd(this,Edb(ED(b)));return;}yid(this,a,b)};_.zh=function Bkd(){return Thd(),Ihd};_.Bh=function Ckd(a){switch(a){case 0:vkd(this,0);return;case 1:wkd(this,0);return;}Cid(this,a)};_.Ib=function Dkd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (x: ';Bfb(a,this.a);a.a+=', y: ';Bfb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var I2=mdb(rte,'ElkBendPointImpl',567);bcb(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Nkd(a,b,c){return Ekd(this,a,b,c)};_.hh=function Okd(a,b,c){return Fkd(this,a,b,c)};_.jh=function Pkd(a,b,c){return Gkd(this,a,b,c)};_.lh=function Qkd(a){return Hkd(this,a)};_.sh=function Rkd(a,b){Ikd(this,a,b)};_.zh=function Skd(){return Thd(),Mhd};_.Bh=function Tkd(a){Jkd(this,a)};_.zg=function Ukd(){return this.k};_.Ag=function Vkd(){return Kkd(this)};_.Ib=function Wkd(){return Mkd(this)};_.k=null;var M2=mdb(rte,'ElkGraphElementImpl',723);bcb(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function gld(a,b,c){return Xkd(this,a,b,c)};_.lh=function hld(a){return Ykd(this,a)};_.sh=function ild(a,b){Zkd(this,a,b)};_.zh=function jld(){return Thd(),Rhd};_.Bh=function kld(a){$kd(this,a)};_.Bg=function lld(){return this.f};_.Cg=function mld(){return this.g};_.Dg=function nld(){return this.i};_.Eg=function old(){return this.j};_.Fg=function pld(a,b){_kd(this,a,b)};_.Gg=function qld(a,b){bld(this,a,b)};_.Hg=function rld(a){dld(this,a)};_.Ig=function sld(a){eld(this,a)};_.Ib=function tld(){return fld(this)};_.f=0;_.g=0;_.i=0;_.j=0;var T2=mdb(rte,'ElkShapeImpl',724);bcb(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Bld(a,b,c){return uld(this,a,b,c)};_.hh=function Cld(a,b,c){return vld(this,a,b,c)};_.jh=function Dld(a,b,c){return wld(this,a,b,c)};_.lh=function Eld(a){return xld(this,a)};_.sh=function Fld(a,b){yld(this,a,b)};_.zh=function Gld(){return Thd(),Jhd};_.Bh=function Hld(a){zld(this,a)};_.xg=function Ild(){return !this.d&&(this.d=new y5d(B2,this,8,5)),this.d};_.yg=function Jld(){return !this.e&&(this.e=new y5d(B2,this,7,4)),this.e};var J2=mdb(rte,'ElkConnectableShapeImpl',725);bcb(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Tld);_.Qg=function Uld(a){return Lld(this,a)};_._g=function Vld(a,b,c){switch(a){case 3:return Mld(this);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b;case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),this.c;case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),this.a;case 7:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1)?false:true;case 8:return Bcb(),Pld(this)?true:false;case 9:return Bcb(),Qld(this)?true:false;case 10:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0)?true:false;}return Ekd(this,a,b,c)};_.hh=function Wld(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Lld(this,c):this.Cb.ih(this,-1-d,null,c)));return Kld(this,BD(a,33),c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Sxd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Sxd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Sxd(this.a,a,c);}return Fkd(this,a,b,c)};_.jh=function Xld(a,b,c){switch(b){case 3:return Kld(this,null,c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Txd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Txd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Txd(this.a,a,c);}return Gkd(this,a,b,c)};_.lh=function Yld(a){switch(a){case 3:return !!Mld(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new y5d(z2,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1));case 8:return Pld(this);case 9:return Qld(this);case 10:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0);}return Hkd(this,a)};_.sh=function Zld(a,b){switch(a){case 3:Rld(this,BD(b,33));return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);!this.b&&(this.b=new y5d(z2,this,4,7));ytd(this.b,BD(b,14));return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);!this.c&&(this.c=new y5d(z2,this,5,8));ytd(this.c,BD(b,14));return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);!this.a&&(this.a=new cUd(A2,this,6,6));ytd(this.a,BD(b,14));return;}Ikd(this,a,b)};_.zh=function $ld(){return Thd(),Khd};_.Bh=function _ld(a){switch(a){case 3:Rld(this,null);return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);return;}Jkd(this,a)};_.Ib=function amd(){return Sld(this)};var K2=mdb(rte,'ElkEdgeImpl',352);bcb(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},rmd);_.Qg=function smd(a){return cmd(this,a)};_._g=function tmd(a,b,c){switch(a){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return !this.a&&(this.a=new xMd(y2,this,5)),this.a;case 6:return fmd(this);case 7:if(b)return emd(this);return this.i;case 8:if(b)return dmd(this);return this.f;case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),this.g;case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),this.e;case 11:return this.d;}return bkd(this,a,b,c)};_.hh=function umd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?cmd(this,c):this.Cb.ih(this,-1-e,null,c)));return bmd(this,BD(a,79),c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Sxd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Sxd(this.e,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(Thd(),Lhd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((Thd(),Lhd)),a,c)};_.jh=function vmd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new xMd(y2,this,5)),Txd(this.a,a,c);case 6:return bmd(this,null,c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Txd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Txd(this.e,a,c);}return ckd(this,a,b,c)};_.lh=function wmd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!fmd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return dkd(this,a)};_.sh=function xmd(a,b){switch(a){case 1:omd(this,Edb(ED(b)));return;case 2:pmd(this,Edb(ED(b)));return;case 3:hmd(this,Edb(ED(b)));return;case 4:imd(this,Edb(ED(b)));return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);!this.a&&(this.a=new xMd(y2,this,5));ytd(this.a,BD(b,14));return;case 6:mmd(this,BD(b,79));return;case 7:lmd(this,BD(b,82));return;case 8:kmd(this,BD(b,82));return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);!this.g&&(this.g=new y5d(A2,this,9,10));ytd(this.g,BD(b,14));return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);!this.e&&(this.e=new y5d(A2,this,10,9));ytd(this.e,BD(b,14));return;case 11:jmd(this,GD(b));return;}ekd(this,a,b)};_.zh=function ymd(){return Thd(),Lhd};_.Bh=function zmd(a){switch(a){case 1:omd(this,0);return;case 2:pmd(this,0);return;case 3:hmd(this,0);return;case 4:imd(this,0);return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);return;case 6:mmd(this,null);return;case 7:lmd(this,null);return;case 8:kmd(this,null);return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);return;case 11:jmd(this,null);return;}fkd(this,a)};_.Ib=function Amd(){return qmd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var L2=mdb(rte,'ElkEdgeSectionImpl',439);bcb(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_._g=function Emd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function Fmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function Gmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function Hmd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.oh=function Imd(a){return Bmd(this,a)};_.sh=function Jmd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.uh=function Kmd(a){Cjd(this,128,a)};_.zh=function Lmd(){return jGd(),ZFd};_.Bh=function Mmd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function Nmd(){this.Bb|=1};_.Hh=function Omd(a){return Dmd(this,a)};_.Bb=0;var f6=mdb(qte,'EModelElementImpl',150);bcb(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},$md);_.Ih=function _md(a,b){return Vmd(this,a,b)};_.Jh=function and(a){var b,c,d,e,f;if(this.a!=bKd(a)||(a.Bb&256)!=0){throw vbb(new Wdb(xte+a.zb+ute))}for(d=_Kd(a);VKd(d.a).i!=0;){c=BD(nOd(d,0,(b=BD(qud(VKd(d.a),0),87),f=b.c,JD(f,88)?BD(f,26):(jGd(),_Fd))),26);if(dKd(c)){e=bKd(c).Nh().Jh(c);BD(e,49).th(a);return e}d=_Kd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new lHd(a):new _Gd(a)};_.Kh=function bnd(a,b){return Wmd(this,a,b)};_._g=function cnd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.a;}return bid(this,a-aLd((jGd(),WFd)),XKd((d=BD(Ajd(this,16),26),!d?WFd:d),a),b,c)};_.hh=function dnd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 1:!!this.a&&(c=BD(this.a,49).ih(this,4,o5,c));return Tmd(this,BD(a,235),c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Qj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.jh=function end(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 1:return Tmd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.lh=function fnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return cid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};_.sh=function gnd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:Ymd(this,BD(b,235));return;}did(this,a-aLd((jGd(),WFd)),XKd((c=BD(Ajd(this,16),26),!c?WFd:c),a),b)};_.zh=function hnd(){return jGd(),WFd};_.Bh=function ind(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:Ymd(this,null);return;}eid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};var Pmd,Qmd,Rmd;var d6=mdb(qte,'EFactoryImpl',704);bcb(zte,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},knd);_.Ih=function lnd(a,b){switch(a.yj()){case 12:return BD(b,146).tg();case 13:return fcb(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function mnd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=bKd(a),b?HLd(b.Mh(),a):-1)),a.G){case 4:return f=new Jod,f;case 6:return g=new apd,g;case 7:return h=new ppd,h;case 8:return d=new Tld,d;case 9:return c=new xkd,c;case 10:return e=new rmd,e;case 11:return i=new Bpd,i;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function nnd(a,b){switch(a.yj()){case 13:case 12:return null;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var N2=mdb(rte,'ElkGraphFactoryImpl',zte);bcb(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_.Wg=function rnd(){var a,b;b=(a=BD(Ajd(this,16),26),pNd(TKd(!a?this.zh():a)));return b==null?(nRd(),nRd(),mRd):new GRd(this,b)};_._g=function snd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.ne();}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function tnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function und(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vnd(){return jGd(),$Fd};_.Bh=function wnd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.ne=function xnd(){return this.zb};_.Lh=function ynd(a){pnd(this,a)};_.Ib=function znd(){return qnd(this)};_.zb=null;var j6=mdb(qte,'ENamedElementImpl',438);bcb(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},eod);_.Qg=function god(a){return Snd(this,a)};_._g=function hod(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb;case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?BD(this.Cb,235):null;return Ind(this);}return bid(this,a-aLd((jGd(),cGd)),XKd((d=BD(Ajd(this,16),26),!d?cGd:d),a),b,c)};_.hh=function iod(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 4:!!this.sb&&(c=BD(this.sb,49).ih(this,1,i5,c));return Jnd(this,BD(a,471),c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Sxd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Sxd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Snd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,7,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.jh=function jod(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 4:return Jnd(this,null,c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Txd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Txd(this.vb,a,c);case 7:return _hd(this,null,7,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.lh=function kod(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!Ind(this);}return cid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.oh=function lod(a){var b;b=Und(this,a);return b?b:Bmd(this,a)};_.sh=function mod(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:dod(this,GD(b));return;case 3:cod(this,GD(b));return;case 4:bod(this,BD(b,471));return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);!this.rb&&(this.rb=new jUd(this,d5,this));ytd(this.rb,BD(b,14));return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);!this.vb&&(this.vb=new gUd(o5,this,6,7));ytd(this.vb,BD(b,14));return;}did(this,a-aLd((jGd(),cGd)),XKd((c=BD(Ajd(this,16),26),!c?cGd:c),a),b)};_.vh=function nod(a){var b,c;if(!!a&&!!this.rb){for(c=new Fyd(this.rb);c.e!=c.i.gc();){b=Dyd(c);JD(b,351)&&(BD(b,351).w=null)}}Cjd(this,64,a)};_.zh=function ood(){return jGd(),cGd};_.Bh=function pod(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:dod(this,null);return;case 3:cod(this,null);return;case 4:bod(this,null);return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);return;}eid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.Gh=function qod(){Tnd(this)};_.Mh=function rod(){return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb};_.Nh=function sod(){return this.sb};_.Oh=function tod(){return this.ub};_.Ph=function uod(){return this.xb};_.Qh=function vod(){return this.yb};_.Rh=function wod(a){this.ub=a};_.Ib=function xod(){var a;if((this.Db&64)!=0)return qnd(this);a=new Jfb(qnd(this));a.a+=' (nsURI: ';Efb(a,this.yb);a.a+=', nsPrefix: ';Efb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var And;var t6=mdb(qte,'EPackageImpl',179);bcb(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Bod);_.q=false;_.r=false;var yod=false;var O2=mdb(rte,'ElkGraphPackageImpl',555);bcb(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Jod);_.Qg=function Kod(a){return Eod(this,a)};_._g=function Lod(a,b,c){switch(a){case 7:return Fod(this);case 8:return this.a;}return Xkd(this,a,b,c)};_.hh=function Mod(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Eod(this,c):this.Cb.ih(this,-1-d,null,c)));return Dod(this,BD(a,160),c);}return Fkd(this,a,b,c)};_.jh=function Nod(a,b,c){if(b==7){return Dod(this,null,c)}return Gkd(this,a,b,c)};_.lh=function Ood(a){switch(a){case 7:return !!Fod(this);case 8:return !dfb('',this.a);}return Ykd(this,a)};_.sh=function Pod(a,b){switch(a){case 7:God(this,BD(b,160));return;case 8:Hod(this,GD(b));return;}Zkd(this,a,b)};_.zh=function Qod(){return Thd(),Nhd};_.Bh=function Rod(a){switch(a){case 7:God(this,null);return;case 8:Hod(this,'');return;}$kd(this,a)};_.Ib=function Sod(){return Iod(this)};_.a='';var P2=mdb(rte,'ElkLabelImpl',354);bcb(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},apd);_.Qg=function bpd(a){return Uod(this,a)};_._g=function cpd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),this.c;case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a;case 11:return Xod(this);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),this.b;case 13:return Bcb(),!this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0?true:false;}return uld(this,a,b,c)};_.hh=function dpd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Sxd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Sxd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Uod(this,c):this.Cb.ih(this,-1-d,null,c)));return Tod(this,BD(a,33),c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Sxd(this.b,a,c);}return vld(this,a,b,c)};_.jh=function epd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Txd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Txd(this.a,a,c);case 11:return Tod(this,null,c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Txd(this.b,a,c);}return wld(this,a,b,c)};_.lh=function fpd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!Xod(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0;}return xld(this,a)};_.sh=function gpd(a,b){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);!this.c&&(this.c=new cUd(F2,this,9,9));ytd(this.c,BD(b,14));return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);!this.a&&(this.a=new cUd(E2,this,10,11));ytd(this.a,BD(b,14));return;case 11:$od(this,BD(b,33));return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);!this.b&&(this.b=new cUd(B2,this,12,3));ytd(this.b,BD(b,14));return;}yld(this,a,b)};_.zh=function hpd(){return Thd(),Ohd};_.Bh=function ipd(a){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);return;case 11:$od(this,null);return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);return;}zld(this,a)};_.Ib=function jpd(){return _od(this)};var Q2=mdb(rte,'ElkNodeImpl',239);bcb(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ppd);_.Qg=function qpd(a){return lpd(this,a)};_._g=function rpd(a,b,c){if(a==9){return mpd(this)}return uld(this,a,b,c)};_.hh=function spd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?lpd(this,c):this.Cb.ih(this,-1-d,null,c)));return kpd(this,BD(a,33),c);}return vld(this,a,b,c)};_.jh=function tpd(a,b,c){if(b==9){return kpd(this,null,c)}return wld(this,a,b,c)};_.lh=function upd(a){if(a==9){return !!mpd(this)}return xld(this,a)};_.sh=function vpd(a,b){switch(a){case 9:npd(this,BD(b,33));return;}yld(this,a,b)};_.zh=function wpd(){return Thd(),Phd};_.Bh=function xpd(a){switch(a){case 9:npd(this,null);return;}zld(this,a)};_.Ib=function ypd(){return opd(this)};var R2=mdb(rte,'ElkPortImpl',186);var J4=odb(Tte,'BasicEMap/Entry');bcb(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},Bpd);_.Fb=function Hpd(a){return this===a};_.cd=function Jpd(){return this.b};_.Hb=function Lpd(){return FCb(this)};_.Uh=function Npd(a){zpd(this,BD(a,146))};_._g=function Cpd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return fid(this,a,b,c)};_.lh=function Dpd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return mid(this,a)};_.sh=function Epd(a,b){switch(a){case 0:zpd(this,BD(b,146));return;case 1:Apd(this,b);return;}yid(this,a,b)};_.zh=function Fpd(){return Thd(),Qhd};_.Bh=function Gpd(a){switch(a){case 0:zpd(this,null);return;case 1:Apd(this,null);return;}Cid(this,a)};_.Sh=function Ipd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.dd=function Kpd(){return this.c};_.Th=function Mpd(a){this.a=a};_.ed=function Opd(a){var b;b=this.c;Apd(this,a);return b};_.Ib=function Ppd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Ufb;Qfb(Qfb(Qfb(a,this.b?this.b.tg():Xhe),gne),xfb(this.c));return a.a};_.a=-1;_.c=null;var S2=mdb(rte,'ElkPropertyToValueMapEntryImpl',1092);bcb(984,1,{},bqd);var U2=mdb(Wte,'JsonAdapter',984);bcb(210,60,Tie,cqd);var V2=mdb(Wte,'JsonImportException',210);bcb(857,1,{},ird);var J3=mdb(Wte,'JsonImporter',857);bcb(891,1,{},jrd);var W2=mdb(Wte,'JsonImporter/lambda$0$Type',891);bcb(892,1,{},krd);var X2=mdb(Wte,'JsonImporter/lambda$1$Type',892);bcb(900,1,{},lrd);var Y2=mdb(Wte,'JsonImporter/lambda$10$Type',900);bcb(902,1,{},mrd);var Z2=mdb(Wte,'JsonImporter/lambda$11$Type',902);bcb(903,1,{},nrd);var $2=mdb(Wte,'JsonImporter/lambda$12$Type',903);bcb(909,1,{},ord);var _2=mdb(Wte,'JsonImporter/lambda$13$Type',909);bcb(908,1,{},prd);var a3=mdb(Wte,'JsonImporter/lambda$14$Type',908);bcb(904,1,{},qrd);var b3=mdb(Wte,'JsonImporter/lambda$15$Type',904);bcb(905,1,{},rrd);var c3=mdb(Wte,'JsonImporter/lambda$16$Type',905);bcb(906,1,{},srd);var d3=mdb(Wte,'JsonImporter/lambda$17$Type',906);bcb(907,1,{},trd);var e3=mdb(Wte,'JsonImporter/lambda$18$Type',907);bcb(912,1,{},urd);var f3=mdb(Wte,'JsonImporter/lambda$19$Type',912);bcb(893,1,{},vrd);var g3=mdb(Wte,'JsonImporter/lambda$2$Type',893);bcb(910,1,{},wrd);var h3=mdb(Wte,'JsonImporter/lambda$20$Type',910);bcb(911,1,{},xrd);var i3=mdb(Wte,'JsonImporter/lambda$21$Type',911);bcb(915,1,{},yrd);var j3=mdb(Wte,'JsonImporter/lambda$22$Type',915);bcb(913,1,{},zrd);var k3=mdb(Wte,'JsonImporter/lambda$23$Type',913);bcb(914,1,{},Ard);var l3=mdb(Wte,'JsonImporter/lambda$24$Type',914);bcb(917,1,{},Brd);var m3=mdb(Wte,'JsonImporter/lambda$25$Type',917);bcb(916,1,{},Crd);var n3=mdb(Wte,'JsonImporter/lambda$26$Type',916);bcb(918,1,qie,Drd);_.td=function Erd(a){Bqd(this.b,this.a,GD(a))};var o3=mdb(Wte,'JsonImporter/lambda$27$Type',918);bcb(919,1,qie,Frd);_.td=function Grd(a){Cqd(this.b,this.a,GD(a))};var p3=mdb(Wte,'JsonImporter/lambda$28$Type',919);bcb(920,1,{},Hrd);var q3=mdb(Wte,'JsonImporter/lambda$29$Type',920);bcb(896,1,{},Ird);var r3=mdb(Wte,'JsonImporter/lambda$3$Type',896);bcb(921,1,{},Jrd);var s3=mdb(Wte,'JsonImporter/lambda$30$Type',921);bcb(922,1,{},Krd);var t3=mdb(Wte,'JsonImporter/lambda$31$Type',922);bcb(923,1,{},Lrd);var u3=mdb(Wte,'JsonImporter/lambda$32$Type',923);bcb(924,1,{},Mrd);var v3=mdb(Wte,'JsonImporter/lambda$33$Type',924);bcb(925,1,{},Nrd);var w3=mdb(Wte,'JsonImporter/lambda$34$Type',925);bcb(859,1,{},Prd);var x3=mdb(Wte,'JsonImporter/lambda$35$Type',859);bcb(929,1,{},Rrd);var y3=mdb(Wte,'JsonImporter/lambda$36$Type',929);bcb(926,1,qie,Srd);_.td=function Trd(a){Lqd(this.a,BD(a,469))};var z3=mdb(Wte,'JsonImporter/lambda$37$Type',926);bcb(927,1,qie,Urd);_.td=function Vrd(a){Mqd(this.a,this.b,BD(a,202))};var A3=mdb(Wte,'JsonImporter/lambda$38$Type',927);bcb(928,1,qie,Wrd);_.td=function Xrd(a){Nqd(this.a,this.b,BD(a,202))};var B3=mdb(Wte,'JsonImporter/lambda$39$Type',928);bcb(894,1,{},Yrd);var C3=mdb(Wte,'JsonImporter/lambda$4$Type',894);bcb(930,1,qie,Zrd);_.td=function $rd(a){Oqd(this.a,BD(a,8))};var D3=mdb(Wte,'JsonImporter/lambda$40$Type',930);bcb(895,1,{},_rd);var E3=mdb(Wte,'JsonImporter/lambda$5$Type',895);bcb(899,1,{},asd);var F3=mdb(Wte,'JsonImporter/lambda$6$Type',899);bcb(897,1,{},bsd);var G3=mdb(Wte,'JsonImporter/lambda$7$Type',897);bcb(898,1,{},csd);var H3=mdb(Wte,'JsonImporter/lambda$8$Type',898);bcb(901,1,{},dsd);var I3=mdb(Wte,'JsonImporter/lambda$9$Type',901);bcb(948,1,qie,msd);_.td=function nsd(a){Qpd(this.a,new yC(GD(a)))};var K3=mdb(Wte,'JsonMetaDataConverter/lambda$0$Type',948);bcb(949,1,qie,osd);_.td=function psd(a){isd(this.a,BD(a,237))};var L3=mdb(Wte,'JsonMetaDataConverter/lambda$1$Type',949);bcb(950,1,qie,qsd);_.td=function rsd(a){jsd(this.a,BD(a,149))};var M3=mdb(Wte,'JsonMetaDataConverter/lambda$2$Type',950);bcb(951,1,qie,ssd);_.td=function tsd(a){ksd(this.a,BD(a,175))};var N3=mdb(Wte,'JsonMetaDataConverter/lambda$3$Type',951);bcb(237,22,{3:1,35:1,22:1,237:1},Dsd);var usd,vsd,wsd,xsd,ysd,zsd,Asd,Bsd;var O3=ndb(Hle,'GraphFeature',237,CI,Fsd,Esd);var Gsd;bcb(13,1,{35:1,146:1},Lsd,Msd,Nsd,Osd);_.wd=function Psd(a){return Isd(this,BD(a,146))};_.Fb=function Qsd(a){return Jsd(this,a)};_.wg=function Rsd(){return Ksd(this)};_.tg=function Ssd(){return this.b};_.Hb=function Tsd(){return LCb(this.b)};_.Ib=function Usd(){return this.b};var T3=mdb(Hle,'Property',13);bcb(818,1,Dke,Wsd);_.ue=function Xsd(a,b){return Vsd(this,BD(a,94),BD(b,94))};_.Fb=function Ysd(a){return this===a};_.ve=function Zsd(){return new tpb(this)};var S3=mdb(Hle,'PropertyHolderComparator',818);bcb(695,1,aie,qtd);_.Nb=function rtd(a){Rrb(this,a)};_.Pb=function ttd(){return ptd(this)};_.Qb=function utd(){Srb()};_.Ob=function std(){return !!this.a};var U3=mdb(jue,'ElkGraphUtil/AncestorIterator',695);var T4=odb(Tte,'EList');bcb(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1});_.Vc=function Jtd(a,b){vtd(this,a,b)};_.Fc=function Ktd(a){return wtd(this,a)};_.Wc=function Ltd(a,b){return xtd(this,a,b)};_.Gc=function Mtd(a){return ytd(this,a)};_.Zh=function Ntd(){return new $yd(this)};_.$h=function Otd(){return new bzd(this)};_._h=function Ptd(a){return ztd(this,a)};_.ai=function Qtd(){return true};_.bi=function Rtd(a,b){};_.ci=function Std(){};_.di=function Ttd(a,b){Atd(this,a,b)};_.ei=function Utd(a,b,c){};_.fi=function Vtd(a,b){};_.gi=function Wtd(a,b,c){};_.Fb=function Xtd(a){return Btd(this,a)};_.Hb=function Ytd(){return Etd(this)};_.hi=function Ztd(){return false};_.Kc=function $td(){return new Fyd(this)};_.Yc=function _td(){return new Oyd(this)};_.Zc=function aud(a){var b;b=this.gc();if(a<0||a>b)throw vbb(new Cyd(a,b));return new Pyd(this,a)};_.ji=function bud(a,b){this.ii(a,this.Xc(b))};_.Mc=function cud(a){return Ftd(this,a)};_.li=function dud(a,b){return b};_._c=function eud(a,b){return Gtd(this,a,b)};_.Ib=function fud(){return Htd(this)};_.ni=function gud(){return true};_.oi=function hud(a,b){return Itd(this,b)};var p4=mdb(Tte,'AbstractEList',67);bcb(63,67,oue,yud,zud,Aud);_.Vh=function Bud(a,b){return iud(this,a,b)};_.Wh=function Cud(a){return jud(this,a)};_.Xh=function Dud(a,b){kud(this,a,b)};_.Yh=function Eud(a){lud(this,a)};_.pi=function Fud(a){return nud(this,a)};_.$b=function Gud(){oud(this)};_.Hc=function Hud(a){return pud(this,a)};_.Xb=function Iud(a){return qud(this,a)};_.qi=function Jud(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b=0){this.$c(b);return true}else{return false}};_.mi=function lwd(a,b){return this.Ui(a,this.oi(a,b))};_.gc=function mwd(){return this.Vi()};_.Pc=function nwd(){return this.Wi()};_.Qc=function owd(a){return this.Xi(a)};_.Ib=function pwd(){return this.Yi()};var M4=mdb(Tte,'DelegatingEList',1995);bcb(1996,1995,eve);_.Vh=function xwd(a,b){return qwd(this,a,b)};_.Wh=function ywd(a){return this.Vh(this.Vi(),a)};_.Xh=function zwd(a,b){rwd(this,a,b)};_.Yh=function Awd(a){swd(this,a)};_.ai=function Bwd(){return !this.bj()};_.$b=function Cwd(){vwd(this)};_.Zi=function Dwd(a,b,c,d,e){return new Cxd(this,a,b,c,d,e)};_.$i=function Ewd(a){Uhd(this.Ai(),a)};_._i=function Fwd(){return null};_.aj=function Gwd(){return -1};_.Ai=function Hwd(){return null};_.bj=function Iwd(){return false};_.cj=function Jwd(a,b){return b};_.dj=function Kwd(a,b){return b};_.ej=function Lwd(){return false};_.fj=function Mwd(){return !this.Ri()};_.ii=function Nwd(a,b){var c,d;if(this.ej()){d=this.fj();c=Dvd(this,a,b);this.$i(this.Zi(7,meb(b),c,a,d));return c}else{return Dvd(this,a,b)}};_.$c=function Owd(a){var b,c,d,e;if(this.ej()){c=null;d=this.fj();b=this.Zi(4,e=Evd(this,a),null,a,d);if(this.bj()&&!!e){c=this.dj(e,c);if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}else{if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}return e}else{e=Evd(this,a);if(this.bj()&&!!e){c=this.dj(e,null);!!c&&c.Fi()}return e}};_.mi=function Pwd(a,b){return wwd(this,a,b)};var d4=mdb(hte,'DelegatingNotifyingListImpl',1996);bcb(143,1,fve);_.Ei=function pxd(a){return Qwd(this,a)};_.Fi=function qxd(){Rwd(this)};_.xi=function rxd(){return this.d};_._i=function sxd(){return null};_.gj=function txd(){return null};_.yi=function uxd(a){return -1};_.zi=function vxd(){return $wd(this)};_.Ai=function wxd(){return null};_.Bi=function xxd(){return hxd(this)};_.Ci=function yxd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.hj=function zxd(){return false};_.Di=function Axd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.xi();switch(e){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}}}}case 4:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.Ci();this.d=6;l=new zud(2);if(i<=g){wtd(l,this.n);wtd(l,a.Bi());this.g=OC(GC(WD,1),oje,25,15,[this.o=i,g+1])}else{wtd(l,a.Bi());wtd(l,this.n);this.g=OC(GC(WD,1),oje,25,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);g=a.Ci();k=BD(this.g,48);d=KC(WD,oje,25,k.length+1,15,1);b=0;while(b>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Cfb(d,this.d);break}}ixd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Cfb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Dfb(d,this.Ai());d.a+=', feature: ';Dfb(d,this._i());d.a+=', oldValue: ';Dfb(d,hxd(this));d.a+=', newValue: ';if(this.d==6&&JD(this.g,48)){c=BD(this.g,48);d.a+='[';for(a=0;a10){if(!this.b||this.c.j!=this.a){this.b=new Vqb(this);this.a=this.j}return Rqb(this.b,a)}else{return pud(this,a)}};_.ni=function Byd(){return true};_.a=0;var j4=mdb(Tte,'AbstractEList/1',953);bcb(295,73,Mje,Cyd);var k4=mdb(Tte,'AbstractEList/BasicIndexOutOfBoundsException',295);bcb(40,1,aie,Fyd);_.Nb=function Iyd(a){Rrb(this,a)};_.mj=function Gyd(){if(this.i.j!=this.f){throw vbb(new Apb)}};_.nj=function Hyd(){return Dyd(this)};_.Ob=function Jyd(){return this.e!=this.i.gc()};_.Pb=function Kyd(){return this.nj()};_.Qb=function Lyd(){Eyd(this)};_.e=0;_.f=0;_.g=-1;var l4=mdb(Tte,'AbstractEList/EIterator',40);bcb(278,40,jie,Oyd,Pyd);_.Qb=function Xyd(){Eyd(this)};_.Rb=function Qyd(a){Myd(this,a)};_.oj=function Ryd(){var b;try{b=this.d.Xb(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.pj=function Syd(a){Nyd(this,a)};_.Sb=function Tyd(){return this.e!=0};_.Tb=function Uyd(){return this.e};_.Ub=function Vyd(){return this.oj()};_.Vb=function Wyd(){return this.e-1};_.Wb=function Yyd(a){this.pj(a)};var m4=mdb(Tte,'AbstractEList/EListIterator',278);bcb(341,40,aie,$yd);_.nj=function _yd(){return Zyd(this)};_.Qb=function azd(){throw vbb(new bgb)};var n4=mdb(Tte,'AbstractEList/NonResolvingEIterator',341);bcb(385,278,jie,bzd,czd);_.Rb=function dzd(a){throw vbb(new bgb)};_.nj=function ezd(){var b;try{b=this.c.ki(this.e);this.mj();this.g=this.e++;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.oj=function fzd(){var b;try{b=this.c.ki(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.Qb=function gzd(){throw vbb(new bgb)};_.Wb=function hzd(a){throw vbb(new bgb)};var o4=mdb(Tte,'AbstractEList/NonResolvingEListIterator',385);bcb(1982,67,ive);_.Vh=function pzd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=BD(Ajd(this.a,4),126);k=j==null?0:j.length;m=k+e;d=nzd(this,m);l=k-a;l>0&&$fb(j,a,d,a+e,l);i=b.Kc();for(g=0;gc)throw vbb(new Cyd(a,c));return new Yzd(this,a)};_.$b=function wzd(){var a,b;++this.j;a=BD(Ajd(this.a,4),126);b=a==null?0:a.length;b0d(this,null);Atd(this,b,a)};_.Hc=function xzd(a){var b,c,d,e,f;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e=c)throw vbb(new Cyd(a,c));return b[a]};_.Xc=function zzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(c=0,d=b.length;cc)throw vbb(new Cyd(a,c));return new Qzd(this,a)};_.ii=function Ezd(a,b){var c,d,e;c=mzd(this);e=c==null?0:c.length;if(a>=e)throw vbb(new qcb(lue+a+mue+e));if(b>=e)throw vbb(new qcb(nue+b+mue+e));d=c[b];if(a!=b){a0&&$fb(a,0,b,0,c);return b};_.Qc=function Kzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);d=b==null?0:b.length;if(d>0){if(a.lengthd&&NC(a,d,null);return a};var jzd;var v4=mdb(Tte,'ArrayDelegatingEList',1982);bcb(1038,40,aie,Lzd);_.mj=function Mzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.Qb=function Nzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var r4=mdb(Tte,'ArrayDelegatingEList/EIterator',1038);bcb(706,278,jie,Pzd,Qzd);_.mj=function Rzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.pj=function Szd(a){Nyd(this,a);this.a=BD(Ajd(this.b.a,4),126)};_.Qb=function Tzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var s4=mdb(Tte,'ArrayDelegatingEList/EListIterator',706);bcb(1039,341,aie,Uzd);_.mj=function Vzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var t4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEIterator',1039);bcb(707,385,jie,Xzd,Yzd);_.mj=function Zzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var u4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEListIterator',707);bcb(606,295,Mje,$zd);var w4=mdb(Tte,'BasicEList/BasicIndexOutOfBoundsException',606);bcb(696,63,oue,_zd);_.Vc=function aAd(a,b){throw vbb(new bgb)};_.Fc=function bAd(a){throw vbb(new bgb)};_.Wc=function cAd(a,b){throw vbb(new bgb)};_.Gc=function dAd(a){throw vbb(new bgb)};_.$b=function eAd(){throw vbb(new bgb)};_.qi=function fAd(a){throw vbb(new bgb)};_.Kc=function gAd(){return this.Zh()};_.Yc=function hAd(){return this.$h()};_.Zc=function iAd(a){return this._h(a)};_.ii=function jAd(a,b){throw vbb(new bgb)};_.ji=function kAd(a,b){throw vbb(new bgb)};_.$c=function lAd(a){throw vbb(new bgb)};_.Mc=function mAd(a){throw vbb(new bgb)};_._c=function nAd(a,b){throw vbb(new bgb)};var x4=mdb(Tte,'BasicEList/UnmodifiableEList',696);bcb(705,1,{3:1,20:1,14:1,15:1,58:1,589:1});_.Vc=function OAd(a,b){oAd(this,a,BD(b,42))};_.Fc=function PAd(a){return pAd(this,BD(a,42))};_.Jc=function XAd(a){reb(this,a)};_.Xb=function YAd(a){return BD(qud(this.c,a),133)};_.ii=function fBd(a,b){return BD(this.c.ii(a,b),42)};_.ji=function gBd(a,b){GAd(this,a,BD(b,42))};_.Lc=function jBd(){return new YAb(null,new Kub(this,16))};_.$c=function kBd(a){return BD(this.c.$c(a),42)};_._c=function mBd(a,b){return MAd(this,a,BD(b,42))};_.ad=function oBd(a){ktb(this,a)};_.Nc=function pBd(){return new Kub(this,16)};_.Oc=function qBd(){return new YAb(null,new Kub(this,16))};_.Wc=function QAd(a,b){return this.c.Wc(a,b)};_.Gc=function RAd(a){return this.c.Gc(a)};_.$b=function SAd(){this.c.$b()};_.Hc=function TAd(a){return this.c.Hc(a)};_.Ic=function UAd(a){return Be(this.c,a)};_.qj=function VAd(){var a,b,c;if(this.d==null){this.d=KC(y4,jve,63,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=BD(b.nj(),133);uAd(this,a)}this.e=c}};_.Fb=function WAd(a){return zAd(this,a)};_.Hb=function ZAd(){return Etd(this.c)};_.Xc=function $Ad(a){return this.c.Xc(a)};_.rj=function _Ad(){this.c=new yBd(this)};_.dc=function aBd(){return this.f==0};_.Kc=function bBd(){return this.c.Kc()};_.Yc=function cBd(){return this.c.Yc()};_.Zc=function dBd(a){return this.c.Zc(a)};_.sj=function eBd(){return FAd(this)};_.tj=function hBd(a,b,c){return new zCd(a,b,c)};_.uj=function iBd(){return new EBd};_.Mc=function lBd(a){return JAd(this,a)};_.gc=function nBd(){return this.f};_.bd=function rBd(a,b){return new Jib(this.c,a,b)};_.Pc=function sBd(){return this.c.Pc()};_.Qc=function tBd(a){return this.c.Qc(a)};_.Ib=function uBd(){return Htd(this.c)};_.e=0;_.f=0;var L4=mdb(Tte,'BasicEMap',705);bcb(1033,63,oue,yBd);_.bi=function zBd(a,b){vBd(this,BD(b,133))};_.ei=function BBd(a,b,c){var d;++(d=this,BD(b,133),d).a.e};_.fi=function CBd(a,b){wBd(this,BD(b,133))};_.gi=function DBd(a,b,c){xBd(this,BD(b,133),BD(c,133))};_.di=function ABd(a,b){tAd(this.a)};var z4=mdb(Tte,'BasicEMap/1',1033);bcb(1034,63,oue,EBd);_.ri=function FBd(a){return KC(I4,kve,612,a,0,1)};var A4=mdb(Tte,'BasicEMap/2',1034);bcb(1035,eie,fie,GBd);_.$b=function HBd(){this.a.c.$b()};_.Hc=function IBd(a){return qAd(this.a,a)};_.Kc=function JBd(){return this.a.f==0?(LCd(),KCd.a):new dCd(this.a)};_.Mc=function KBd(a){var b;b=this.a.f;LAd(this.a,a);return this.a.f!=b};_.gc=function LBd(){return this.a.f};var B4=mdb(Tte,'BasicEMap/3',1035);bcb(1036,28,die,MBd);_.$b=function NBd(){this.a.c.$b()};_.Hc=function OBd(a){return rAd(this.a,a)};_.Kc=function PBd(){return this.a.f==0?(LCd(),KCd.a):new fCd(this.a)};_.gc=function QBd(){return this.a.f};var C4=mdb(Tte,'BasicEMap/4',1036);bcb(1037,eie,fie,SBd);_.$b=function TBd(){this.a.c.$b()};_.Hc=function UBd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&JD(a,42)){this.a.qj();i=BD(a,42);h=i.cd();e=h==null?0:tb(h);f=DAd(this.a,e);b=this.a.d[f];if(b){c=BD(b.g,367);j=b.i;for(g=0;g'+this.c};_.a=0;var I4=mdb(Tte,'BasicEMap/EntryImpl',612);bcb(536,1,{},JCd);var K4=mdb(Tte,'BasicEMap/View',536);var KCd;bcb(768,1,{});_.Fb=function ZCd(a){return At((mmb(),jmb),a)};_.Hb=function $Cd(){return qmb((mmb(),jmb))};_.Ib=function _Cd(){return Fe((mmb(),jmb))};var Q4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList',768);bcb(1312,1,jie,aDd);_.Nb=function cDd(a){Rrb(this,a)};_.Rb=function bDd(a){throw vbb(new bgb)};_.Ob=function dDd(){return false};_.Sb=function eDd(){return false};_.Pb=function fDd(){throw vbb(new utb)};_.Tb=function gDd(){return 0};_.Ub=function hDd(){throw vbb(new utb)};_.Vb=function iDd(){return -1};_.Qb=function jDd(){throw vbb(new bgb)};_.Wb=function kDd(a){throw vbb(new bgb)};var P4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList/1',1312);bcb(1310,768,{20:1,14:1,15:1,58:1},lDd);_.Vc=function mDd(a,b){OCd()};_.Fc=function nDd(a){return PCd()};_.Wc=function oDd(a,b){return QCd()};_.Gc=function pDd(a){return RCd()};_.$b=function qDd(){SCd()};_.Hc=function rDd(a){return false};_.Ic=function sDd(a){return false};_.Jc=function tDd(a){reb(this,a)};_.Xb=function uDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function vDd(a){return -1};_.dc=function wDd(){return true};_.Kc=function xDd(){return this.a};_.Yc=function yDd(){return this.a};_.Zc=function zDd(a){return this.a};_.ii=function ADd(a,b){return TCd()};_.ji=function BDd(a,b){UCd()};_.Lc=function CDd(){return new YAb(null,new Kub(this,16))};_.$c=function DDd(a){return VCd()};_.Mc=function EDd(a){return WCd()};_._c=function FDd(a,b){return XCd()};_.gc=function GDd(){return 0};_.ad=function HDd(a){ktb(this,a)};_.Nc=function IDd(){return new Kub(this,16)};_.Oc=function JDd(){return new YAb(null,new Kub(this,16))};_.bd=function KDd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function LDd(){return De((mmb(),jmb))};_.Qc=function MDd(a){return mmb(),Ee(jmb,a)};var R4=mdb(Tte,'ECollections/EmptyUnmodifiableEList',1310);bcb(1311,768,{20:1,14:1,15:1,58:1,589:1},NDd);_.Vc=function ODd(a,b){OCd()};_.Fc=function PDd(a){return PCd()};_.Wc=function QDd(a,b){return QCd()};_.Gc=function RDd(a){return RCd()};_.$b=function SDd(){SCd()};_.Hc=function TDd(a){return false};_.Ic=function UDd(a){return false};_.Jc=function VDd(a){reb(this,a)};_.Xb=function WDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function XDd(a){return -1};_.dc=function YDd(){return true};_.Kc=function ZDd(){return this.a};_.Yc=function $Dd(){return this.a};_.Zc=function _Dd(a){return this.a};_.ii=function bEd(a,b){return TCd()};_.ji=function cEd(a,b){UCd()};_.Lc=function dEd(){return new YAb(null,new Kub(this,16))};_.$c=function eEd(a){return VCd()};_.Mc=function fEd(a){return WCd()};_._c=function gEd(a,b){return XCd()};_.gc=function hEd(){return 0};_.ad=function iEd(a){ktb(this,a)};_.Nc=function jEd(){return new Kub(this,16)};_.Oc=function kEd(){return new YAb(null,new Kub(this,16))};_.bd=function lEd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function mEd(){return De((mmb(),jmb))};_.Qc=function nEd(a){return mmb(),Ee(jmb,a)};_.sj=function aEd(){return mmb(),mmb(),kmb};var S4=mdb(Tte,'ECollections/EmptyUnmodifiableEMap',1311);var U4=odb(Tte,'Enumerator');var oEd;bcb(281,1,{281:1},NEd);_.Fb=function REd(a){var b;if(this===a)return true;if(!JD(a,281))return false;b=BD(a,281);return this.f==b.f&&TEd(this.i,b.i)&&SEd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&SEd(this.d,b.d)&&SEd(this.g,b.g)&&SEd(this.e,b.e)&&KEd(this,b)};_.Hb=function WEd(){return this.f};_.Ib=function cFd(){return LEd(this)};_.f=0;var sEd=0,tEd=0,uEd=0,vEd=0,wEd=0,xEd=0,yEd=0,zEd=0,AEd=0,BEd,CEd=0,DEd=0,EEd=0,FEd=0,GEd,HEd;var Z4=mdb(Tte,'URI',281);bcb(1091,43,fke,mFd);_.zc=function nFd(a,b){return BD(Shb(this,GD(a),BD(b,281)),281)};var Y4=mdb(Tte,'URI/URICache',1091);bcb(497,63,oue,oFd,pFd);_.hi=function qFd(){return true};var $4=mdb(Tte,'UniqueEList',497);bcb(581,60,Tie,rFd);var _4=mdb(Tte,'WrappedException',581);var a5=odb(Vse,nve);var v5=odb(Vse,ove);var t5=odb(Vse,pve);var b5=odb(Vse,qve);var d5=odb(Vse,rve);var c5=odb(Vse,'EClass');var f5=odb(Vse,'EDataType');var sFd;bcb(1183,43,fke,vFd);_.xc=function wFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var e5=mdb(Vse,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1183);var h5=odb(Vse,'EEnum');var g5=odb(Vse,sve);var j5=odb(Vse,tve);var n5=odb(Vse,uve);var xFd;var p5=odb(Vse,vve);var q5=odb(Vse,wve);bcb(1029,1,{},BFd);_.Ib=function CFd(){return 'NIL'};var r5=mdb(Vse,'EStructuralFeature/Internal/DynamicValueHolder/1',1029);var DFd;bcb(1028,43,fke,GFd);_.xc=function HFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var s5=mdb(Vse,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1028);var u5=odb(Vse,xve);var w5=odb(Vse,'EValidator/PatternMatcher');var IFd;var KFd;var MFd;var OFd,PFd,QFd,RFd,SFd,TFd,UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd,aGd,bGd,cGd,dGd,eGd,fGd,gGd,hGd,iGd;var E9=odb(yve,'FeatureMap/Entry');bcb(535,1,{72:1},kGd);_.ak=function lGd(){return this.a};_.dd=function mGd(){return this.b};var x5=mdb(qte,'BasicEObjectImpl/1',535);bcb(1027,1,zve,nGd);_.Wj=function oGd(a){return hid(this.a,this.b,a)};_.fj=function pGd(){return nid(this.a,this.b)};_.Wb=function qGd(a){zid(this.a,this.b,a)};_.Xj=function rGd(){Did(this.a,this.b)};var y5=mdb(qte,'BasicEObjectImpl/4',1027);bcb(1983,1,{108:1});_.bk=function uGd(a){this.e=a==0?sGd:KC(SI,Uhe,1,a,5,1)};_.Ch=function vGd(a){return this.e[a]};_.Dh=function wGd(a,b){this.e[a]=b};_.Eh=function xGd(a){this.e[a]=null};_.ck=function yGd(){return this.c};_.dk=function zGd(){throw vbb(new bgb)};_.ek=function AGd(){throw vbb(new bgb)};_.fk=function BGd(){return this.d};_.gk=function CGd(){return this.e!=null};_.hk=function DGd(a){this.c=a};_.ik=function EGd(a){throw vbb(new bgb)};_.jk=function FGd(a){throw vbb(new bgb)};_.kk=function GGd(a){this.d=a};var sGd;var z5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderBaseImpl',1983);bcb(185,1983,{108:1},HGd);_.dk=function IGd(){return this.a};_.ek=function JGd(){return this.b};_.ik=function KGd(a){this.a=a};_.jk=function LGd(a){this.b=a};var A5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderImpl',185);bcb(506,97,pte,MGd);_.Kg=function NGd(){return this.f};_.Pg=function OGd(){return this.k};_.Rg=function PGd(a,b){this.g=a;this.i=b};_.Tg=function QGd(){return (this.j&2)==0?this.zh():this.ph().ck()};_.Vg=function RGd(){return this.i};_.Mg=function SGd(){return (this.j&1)!=0};_.eh=function TGd(){return this.g};_.kh=function UGd(){return (this.j&4)!=0};_.ph=function VGd(){return !this.k&&(this.k=new HGd),this.k};_.th=function WGd(a){this.ph().hk(a);a?(this.j|=2):(this.j&=-3)};_.vh=function XGd(a){this.ph().jk(a);a?(this.j|=4):(this.j&=-5)};_.zh=function YGd(){return (NFd(),MFd).S};_.i=0;_.j=1;var l6=mdb(qte,'EObjectImpl',506);bcb(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},_Gd);_.Ch=function aHd(a){return this.e[a]};_.Dh=function bHd(a,b){this.e[a]=b};_.Eh=function cHd(a){this.e[a]=null};_.Tg=function dHd(){return this.d};_.Yg=function eHd(a){return bLd(this.d,a)};_.$g=function fHd(){return this.d};_.dh=function gHd(){return this.e!=null};_.ph=function hHd(){!this.k&&(this.k=new vHd);return this.k};_.th=function iHd(a){this.d=a};_.yh=function jHd(){var a;if(this.e==null){a=aLd(this.d);this.e=a==0?ZGd:KC(SI,Uhe,1,a,5,1)}return this};_.Ah=function kHd(){return 0};var ZGd;var E5=mdb(qte,'DynamicEObjectImpl',780);bcb(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},lHd);_.Fb=function nHd(a){return this===a};_.Hb=function rHd(){return FCb(this)};_.th=function mHd(a){this.d=a;this.b=YKd(a,'key');this.c=YKd(a,Bte)};_.Sh=function oHd(){var a;if(this.a==-1){a=iid(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.cd=function pHd(){return iid(this,this.b)};_.dd=function qHd(){return iid(this,this.c)};_.Th=function sHd(a){this.a=a};_.Uh=function tHd(a){zid(this,this.b,a)};_.ed=function uHd(a){var b;b=iid(this,this.c);zid(this,this.c,a);return b};_.a=0;var C5=mdb(qte,'DynamicEObjectImpl/BasicEMapEntry',1376);bcb(1377,1,{108:1},vHd);_.bk=function wHd(a){throw vbb(new bgb)};_.Ch=function xHd(a){throw vbb(new bgb)};_.Dh=function yHd(a,b){throw vbb(new bgb)};_.Eh=function zHd(a){throw vbb(new bgb)};_.ck=function AHd(){throw vbb(new bgb)};_.dk=function BHd(){return this.a};_.ek=function CHd(){return this.b};_.fk=function DHd(){return this.c};_.gk=function EHd(){throw vbb(new bgb)};_.hk=function FHd(a){throw vbb(new bgb)};_.ik=function GHd(a){this.a=a};_.jk=function HHd(a){this.b=a};_.kk=function IHd(a){this.c=a};var D5=mdb(qte,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1377);bcb(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},RHd);_.Qg=function SHd(a){return KHd(this,a)};_._g=function THd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),this.b):(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),FAd(this.b));case 3:return MHd(this);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),this.a;case 5:return !this.c&&(this.c=new _4d(m5,this,5)),this.c;}return bid(this,a-aLd((jGd(),OFd)),XKd((d=BD(Ajd(this,16),26),!d?OFd:d),a),b,c)};_.hh=function UHd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?KHd(this,c):this.Cb.ih(this,-1-e,null,c)));return JHd(this,BD(a,147),c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.jh=function VHd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.b&&(this.b=new sId((jGd(),fGd),x6,this)),bId(this.b,a,c);case 3:return JHd(this,null,c);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.lh=function WHd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!MHd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return cid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.sh=function XHd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:OHd(this,GD(b));return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));cId(this.b,b);return;case 3:NHd(this,BD(b,147));return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);!this.a&&(this.a=new xMd(m5,this,4));ytd(this.a,BD(b,14));return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);!this.c&&(this.c=new _4d(m5,this,5));ytd(this.c,BD(b,14));return;}did(this,a-aLd((jGd(),OFd)),XKd((c=BD(Ajd(this,16),26),!c?OFd:c),a),b)};_.zh=function YHd(){return jGd(),OFd};_.Bh=function ZHd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:PHd(this,null);return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));this.b.c.$b();return;case 3:NHd(this,null);return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);return;}eid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.Ib=function $Hd(){return QHd(this)};_.d=null;var G5=mdb(qte,'EAnnotationImpl',510);bcb(151,705,Ave,dId);_.Xh=function eId(a,b){_Hd(this,a,BD(b,42))};_.lk=function fId(a,b){return aId(this,BD(a,42),b)};_.pi=function gId(a){return BD(BD(this.c,69).pi(a),133)};_.Zh=function hId(){return BD(this.c,69).Zh()};_.$h=function iId(){return BD(this.c,69).$h()};_._h=function jId(a){return BD(this.c,69)._h(a)};_.mk=function kId(a,b){return bId(this,a,b)};_.Wj=function lId(a){return BD(this.c,76).Wj(a)};_.rj=function mId(){};_.fj=function nId(){return BD(this.c,76).fj()};_.tj=function oId(a,b,c){var d;d=BD(bKd(this.b).Nh().Jh(this.b),133);d.Th(a);d.Uh(b);d.ed(c);return d};_.uj=function pId(){return new W5d(this)};_.Wb=function qId(a){cId(this,a)};_.Xj=function rId(){BD(this.c,76).Xj()};var y9=mdb(yve,'EcoreEMap',151);bcb(158,151,Ave,sId);_.qj=function tId(){var a,b,c,d,e,f;if(this.d==null){f=KC(y4,jve,63,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),133);d=b.Sh();e=(d&Ohe)%f.length;a=f[e];!a&&(a=f[e]=new W5d(this));a.Fc(b)}this.d=f}};var F5=mdb(qte,'EAnnotationImpl/1',158);bcb(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1});_._g=function GId(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.jh=function HId(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function IId(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function JId(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function KId(){return jGd(),hGd};_.Bh=function LId(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function MId(){wId(this);this.Bb|=1};_.Yj=function NId(){return wId(this)};_.Zj=function OId(){return this.t};_.$j=function PId(){var a;return a=this.t,a>1||a==-1};_.hi=function QId(){return (this.Bb&512)!=0};_.nk=function RId(a,b){return zId(this,a,b)};_.ok=function SId(a){DId(this,a)};_.Ib=function TId(){return EId(this)};_.s=0;_.t=1;var v7=mdb(qte,'ETypedElementImpl',284);bcb(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1});_.Qg=function iJd(a){return UId(this,a)};_._g=function jJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function kJd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?UId(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,17,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function lJd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 17:return _hd(this,null,17,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function mJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function nJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function oJd(){return jGd(),gGd};_.Bh=function pJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function qJd(){a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Gj=function rJd(){return this.f};_.zj=function sJd(){return VId(this)};_.Hj=function tJd(){return WId(this)};_.Lj=function uJd(){return null};_.pk=function vJd(){return this.k};_.aj=function wJd(){return this.n};_.Mj=function xJd(){return XId(this)};_.Nj=function yJd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=WId(this);(c.i==null&&TKd(c),c.i).length;d=this.Lj();!!d&&aLd(WId(d));e=wId(this);g=e.Bj();a=!g?null:(g.i&1)!=0?g==sbb?wI:g==WD?JI:g==VD?FI:g==UD?BI:g==XD?MI:g==rbb?UI:g==SD?xI:yI:g;b=VId(this);h=e.zj();n6d(this);(this.Bb&oie)!=0&&(!!(f=t1d((O6d(),M6d),c))&&f!=this||!!(f=_1d(q1d(M6d,this))))?(this.p=new zVd(this,f)):this.$j()?this.rk()?!d?(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new KVd(42,this)):(this.p=new KVd(0,this)):a==CK?(this.p=new IVd(50,J4,this)):this.sk()?(this.p=new IVd(43,a,this)):(this.p=new IVd(1,a,this)):!a?this.sk()?(this.p=new KVd(44,this)):(this.p=new KVd(2,this)):a==CK?(this.p=new IVd(41,J4,this)):this.sk()?(this.p=new IVd(45,a,this)):(this.p=new IVd(3,a,this)):(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new LVd(46,this,d)):(this.p=new LVd(4,this,d)):this.sk()?(this.p=new JVd(47,a,this,d)):(this.p=new JVd(5,a,this,d)):!a?this.sk()?(this.p=new LVd(48,this,d)):(this.p=new LVd(6,this,d)):this.sk()?(this.p=new JVd(49,a,this,d)):(this.p=new JVd(7,a,this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&512)!=0?(this.Bb&Cve)!=0?!a?(this.p=new KVd(8,this)):(this.p=new IVd(9,a,this)):!a?(this.p=new KVd(10,this)):(this.p=new IVd(11,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(12,this)):(this.p=new IVd(13,a,this)):!a?(this.p=new KVd(14,this)):(this.p=new IVd(15,a,this)):!d?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new KVd(16,this)):(this.p=new IVd(17,a,this)):!a?(this.p=new KVd(18,this)):(this.p=new IVd(19,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(20,this)):(this.p=new IVd(21,a,this)):!a?(this.p=new KVd(22,this)):(this.p=new IVd(23,a,this)):(i=d.t,i>1||i==-1?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(24,this,d)):(this.p=new JVd(25,a,this,d)):!a?(this.p=new LVd(26,this,d)):(this.p=new JVd(27,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(28,this,d)):(this.p=new JVd(29,a,this,d)):!a?(this.p=new LVd(30,this,d)):(this.p=new JVd(31,a,this,d)):this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(32,this,d)):(this.p=new JVd(33,a,this,d)):!a?(this.p=new LVd(34,this,d)):(this.p=new JVd(35,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(36,this,d)):(this.p=new JVd(37,a,this,d)):!a?(this.p=new LVd(38,this,d)):(this.p=new JVd(39,a,this,d))):this.qk()?this.sk()?(this.p=new kWd(BD(e,26),this,d)):(this.p=new cWd(BD(e,26),this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&Cve)!=0?!a?(this.p=new jXd(BD(e,148),b,h,this)):(this.p=new lXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):!a?(this.p=new cXd(BD(e,148),b,h,this)):(this.p=new eXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):this.rk()?!d?(this.Bb&Cve)!=0?this.sk()?(this.p=new FXd(BD(e,26),this)):(this.p=new DXd(BD(e,26),this)):this.sk()?(this.p=new BXd(BD(e,26),this)):(this.p=new zXd(BD(e,26),this)):(this.Bb&Cve)!=0?this.sk()?(this.p=new NXd(BD(e,26),this,d)):(this.p=new LXd(BD(e,26),this,d)):this.sk()?(this.p=new JXd(BD(e,26),this,d)):(this.p=new HXd(BD(e,26),this,d)):this.sk()?!d?(this.Bb&Cve)!=0?(this.p=new RXd(BD(e,26),this)):(this.p=new PXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new VXd(BD(e,26),this,d)):(this.p=new TXd(BD(e,26),this,d)):!d?(this.Bb&Cve)!=0?(this.p=new XXd(BD(e,26),this)):(this.p=new nXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new _Xd(BD(e,26),this,d)):(this.p=new ZXd(BD(e,26),this,d))}return this.p};_.Ij=function zJd(){return (this.Bb&zte)!=0};_.qk=function AJd(){return false};_.rk=function BJd(){return false};_.Jj=function CJd(){return (this.Bb&oie)!=0};_.Oj=function DJd(){return YId(this)};_.sk=function EJd(){return false};_.Kj=function FJd(){return (this.Bb&Cve)!=0};_.tk=function GJd(a){this.k=a};_.Lh=function HJd(a){cJd(this,a)};_.Ib=function IJd(){return gJd(this)};_.e=false;_.n=0;var n7=mdb(qte,'EStructuralFeatureImpl',449);bcb(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},OJd);_._g=function PJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),LJd(this)?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:if(b)return KJd(this);return JJd(this);}return bid(this,a-aLd((jGd(),PFd)),XKd((d=BD(Ajd(this,16),26),!d?PFd:d),a),b,c)};_.lh=function QJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return LJd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return !!JJd(this);}return cid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.sh=function RJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:NJd(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:MJd(this,Ccb(DD(b)));return;}did(this,a-aLd((jGd(),PFd)),XKd((c=BD(Ajd(this,16),26),!c?PFd:c),a),b)};_.zh=function SJd(){return jGd(),PFd};_.Bh=function TJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.b=0;DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:MJd(this,false);return;}eid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.Gh=function UJd(){KJd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.$j=function VJd(){return LJd(this)};_.nk=function WJd(a,b){this.b=0;this.a=null;return zId(this,a,b)};_.ok=function XJd(a){NJd(this,a)};_.Ib=function YJd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (iD: ';Ffb(a,(this.Bb&ote)!=0);a.a+=')';return a.a};_.b=0;var H5=mdb(qte,'EAttributeImpl',322);bcb(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1});_.uk=function nKd(a){return a.Tg()==this};_.Qg=function oKd(a){return aKd(this,a)};_.Rg=function pKd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_._g=function qKd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function rKd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function sKd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function tKd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function uKd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vKd(){return jGd(),RFd};_.Bh=function wKd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.yj=function xKd(){var a;return this.G==-1&&(this.G=(a=bKd(this),a?HLd(a.Mh(),this):-1)),this.G};_.zj=function yKd(){return null};_.Aj=function zKd(){return bKd(this)};_.vk=function AKd(){return this.v};_.Bj=function BKd(){return dKd(this)};_.Cj=function CKd(){return this.D!=null?this.D:this.B};_.Dj=function DKd(){return this.F};_.wj=function EKd(a){return fKd(this,a)};_.wk=function FKd(a){this.v=a};_.xk=function GKd(a){gKd(this,a)};_.yk=function HKd(a){this.C=a};_.Lh=function IKd(a){lKd(this,a)};_.Ib=function JKd(){return mKd(this)};_.C=null;_.D=null;_.G=-1;var Z5=mdb(qte,'EClassifierImpl',351);bcb(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},hLd);_.uk=function iLd(a){return dLd(this,a.Tg())};_._g=function jLd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return null;case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return Bcb(),(this.Bb&512)!=0?true:false;case 10:return _Kd(this);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),this.q;case 12:return OKd(this);case 13:return SKd(this);case 14:return SKd(this),this.r;case 15:return OKd(this),this.k;case 16:return PKd(this);case 17:return RKd(this);case 18:return TKd(this);case 19:return UKd(this);case 20:return OKd(this),this.o;case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),this.s;case 22:return VKd(this);case 23:return QKd(this);}return bid(this,a-aLd((jGd(),QFd)),XKd((d=BD(Ajd(this,16),26),!d?QFd:d),a),b,c)};_.hh=function kLd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Sxd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Sxd(this.s,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.jh=function lLd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Txd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Txd(this.s,a,c);case 22:return Txd(VKd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.lh=function mLd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&VKd(this.u.a).i!=0&&!(!!this.n&&FMd(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return OKd(this).i!=0;case 13:return SKd(this).i!=0;case 14:return SKd(this),this.r.i!=0;case 15:return OKd(this),this.k.i!=0;case 16:return PKd(this).i!=0;case 17:return RKd(this).i!=0;case 18:return TKd(this).i!=0;case 19:return UKd(this).i!=0;case 20:return OKd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&FMd(this.n);case 23:return QKd(this).i!=0;}return cid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.oh=function nLd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:YKd(this,a);return b?b:Bmd(this,a)};_.sh=function oLd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:eLd(this,Ccb(DD(b)));return;case 9:fLd(this,Ccb(DD(b)));return;case 10:vwd(_Kd(this));ytd(_Kd(this),BD(b,14));return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);!this.q&&(this.q=new cUd(n5,this,11,10));ytd(this.q,BD(b,14));return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);!this.s&&(this.s=new cUd(t5,this,21,17));ytd(this.s,BD(b,14));return;case 22:Uxd(VKd(this));ytd(VKd(this),BD(b,14));return;}did(this,a-aLd((jGd(),QFd)),XKd((c=BD(Ajd(this,16),26),!c?QFd:c),a),b)};_.zh=function pLd(){return jGd(),QFd};_.Bh=function qLd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:eLd(this,false);return;case 9:fLd(this,false);return;case 10:!!this.u&&vwd(this.u);return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);return;case 22:!!this.n&&Uxd(this.n);return;}eid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.Gh=function rLd(){var a,b;OKd(this);SKd(this);PKd(this);RKd(this);TKd(this);UKd(this);QKd(this);oud(SMd($Kd(this)));if(this.s){for(a=0,b=this.s.i;a=0;--b){qud(this,b)}}return xud(this,a)};_.Xj=function nMd(){Uxd(this)};_.oi=function oMd(a,b){return LLd(this,a,b)};var t9=mdb(yve,'EcoreEList',622);bcb(496,622,Pve,pMd);_.ai=function qMd(){return false};_.aj=function rMd(){return this.c};_.bj=function sMd(){return false};_.Fk=function tMd(){return true};_.hi=function uMd(){return true};_.li=function vMd(a,b){return b};_.ni=function wMd(){return false};_.c=0;var d9=mdb(yve,'EObjectEList',496);bcb(85,496,Pve,xMd);_.bj=function yMd(){return true};_.Dk=function zMd(){return false};_.rk=function AMd(){return true};var Z8=mdb(yve,'EObjectContainmentEList',85);bcb(545,85,Pve,BMd);_.ci=function CMd(){this.b=true};_.fj=function DMd(){return this.b};_.Xj=function EMd(){var a;Uxd(this);if(oid(this.e)){a=this.b;this.b=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var Y8=mdb(yve,'EObjectContainmentEList/Unsettable',545);bcb(1140,545,Pve,JMd);_.ii=function NMd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),SFd),meb(b),(d=c.c,JD(d,88)?BD(d,26):_Fd),a)),c};_.jj=function OMd(a,b){return GMd(this,BD(a,87),b)};_.kj=function PMd(a,b){return HMd(this,BD(a,87),b)};_.lj=function QMd(a,b,c){return IMd(this,BD(a,87),BD(b,87),c)};_.Zi=function KMd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function LMd(){return true};_.fj=function MMd(){return FMd(this)};_.Xj=function RMd(){Uxd(this)};var N5=mdb(qte,'EClassImpl/1',1140);bcb(1154,1153,dve);_.ui=function VMd(a){var b,c,d,e,f,g,h;c=a.xi();if(c!=8){d=UMd(a);if(d==0){switch(c){case 1:case 9:{h=a.Bi();if(h!=null){b=$Kd(BD(h,473));!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 3:{g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 5:{g=a.zi();if(g!=null){for(f=BD(g,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}}break}case 4:{h=a.Bi();if(h!=null){e=BD(h,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}break}case 6:{h=a.Bi();if(h!=null){for(f=BD(h,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}}break}}}this.Hk(d)}};_.Hk=function WMd(a){TMd(this,a)};_.b=63;var p7=mdb(qte,'ESuperAdapter',1154);bcb(1155,1154,dve,YMd);_.Hk=function ZMd(a){XMd(this,a)};var I5=mdb(qte,'EClassImpl/10',1155);bcb(1144,696,Pve);_.Vh=function $Md(a,b){return iud(this,a,b)};_.Wh=function _Md(a){return jud(this,a)};_.Xh=function aNd(a,b){kud(this,a,b)};_.Yh=function bNd(a){lud(this,a)};_.pi=function dNd(a){return nud(this,a)};_.mi=function lNd(a,b){return uud(this,a,b)};_.lk=function cNd(a,b){throw vbb(new bgb)};_.Zh=function eNd(){return new $yd(this)};_.$h=function fNd(){return new bzd(this)};_._h=function gNd(a){return ztd(this,a)};_.mk=function hNd(a,b){throw vbb(new bgb)};_.Wj=function iNd(a){return this};_.fj=function jNd(){return this.i!=0};_.Wb=function kNd(a){throw vbb(new bgb)};_.Xj=function mNd(){throw vbb(new bgb)};var s9=mdb(yve,'EcoreEList/UnmodifiableEList',1144);bcb(319,1144,Pve,nNd);_.ni=function oNd(){return false};var r9=mdb(yve,'EcoreEList/UnmodifiableEList/FastCompare',319);bcb(1147,319,Pve,rNd);_.Xc=function sNd(a){var b,c,d;if(JD(a,170)){b=BD(a,170);c=b.aj();if(c!=-1){for(d=this.i;c4){if(this.wj(a)){if(this.rk()){d=BD(a,49);c=d.Ug();h=c==this.b&&(this.Dk()?d.Og(d.Vg(),BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj())==zUd(BD(XKd(wjd(this.b),this.aj()),18)).n:-1-d.Vg()==this.aj());if(this.Ek()&&!h&&!c&&!!d.Zg()){for(e=0;e1||d==-1)}else{return false}};_.Dk=function COd(){var a,b,c;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c}else{return false}};_.Ek=function DOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&Tje)!=0}else{return false}};_.Xc=function EOd(a){var b,c,d,e;d=this.Qi(a);if(d>=0)return d;if(this.Fk()){for(c=0,e=this.Vi();c=0;--a){nOd(this,a,this.Oi(a))}}return this.Wi()};_.Qc=function QOd(a){var b;if(this.Ek()){for(b=this.Vi()-1;b>=0;--b){nOd(this,b,this.Oi(b))}}return this.Xi(a)};_.Xj=function ROd(){vwd(this)};_.oi=function SOd(a,b){return pOd(this,a,b)};var K8=mdb(yve,'DelegatingEcoreEList',742);bcb(1150,742,Uve,YOd);_.Hi=function _Od(a,b){TOd(this,a,BD(b,26))};_.Ii=function aPd(a){UOd(this,BD(a,26))};_.Oi=function gPd(a){var b,c;return b=BD(qud(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ti=function lPd(a){var b,c;return b=BD(Xxd(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ui=function mPd(a,b){return WOd(this,a,BD(b,26))};_.ai=function ZOd(){return false};_.Zi=function $Od(a,b,c,d,e){return null};_.Ji=function bPd(){return new EPd(this)};_.Ki=function cPd(){Uxd(VKd(this.a))};_.Li=function dPd(a){return VOd(this,a)};_.Mi=function ePd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!VOd(this,b)){return false}}return true};_.Ni=function fPd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==VKd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function hPd(){var a,b,c,d,e;c=1;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,JD(e,88)?BD(e,26):(jGd(),_Fd));c=31*c+(!d?0:FCb(d))}return c};_.Qi=function iPd(a){var b,c,d,e;d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)))){return d}++d}return -1};_.Ri=function jPd(){return VKd(this.a).i==0};_.Si=function kPd(){return null};_.Vi=function nPd(){return VKd(this.a).i};_.Wi=function oPd(){var a,b,c,d,e,f;f=VKd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,JD(d,88)?BD(d,26):(jGd(),_Fd))}return e};_.Xi=function pPd(a){var b,c,d,e,f,g,h;h=VKd(this.a).i;if(a.lengthh&&NC(a,h,null);d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd));NC(a,d++,f)}return a};_.Yi=function qPd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=VKd(this.a);for(b=0,d=VKd(this.a).i;b>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Sxd(this.a,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.jh=function dQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.lh=function eQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return !!$Pd(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.sh=function fQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);!this.a&&(this.a=new cUd(g5,this,9,5));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),UFd)),XKd((c=BD(Ajd(this,16),26),!c?UFd:c),a),b)};_.zh=function gQd(){return jGd(),UFd};_.Bh=function hQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);return;}eid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.Gh=function iQd(){var a,b;if(this.a){for(a=0,b=this.a.i;a>16==5?BD(this.Cb,671):null;}return bid(this,a-aLd((jGd(),VFd)),XKd((d=BD(Ajd(this,16),26),!d?VFd:d),a),b,c)};_.hh=function uQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?mQd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,5,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.jh=function vQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 5:return _hd(this,null,5,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.lh=function wQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?BD(this.Cb,671):null);}return cid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.sh=function xQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:qQd(this,BD(b,19).a);return;case 3:oQd(this,BD(b,1940));return;case 4:pQd(this,GD(b));return;}did(this,a-aLd((jGd(),VFd)),XKd((c=BD(Ajd(this,16),26),!c?VFd:c),a),b)};_.zh=function yQd(){return jGd(),VFd};_.Bh=function zQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:qQd(this,0);return;case 3:oQd(this,null);return;case 4:pQd(this,null);return;}eid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.Ib=function BQd(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var a6=mdb(qte,'EEnumLiteralImpl',573);var c6=odb(qte,'EFactoryImpl/InternalEDateTimeFormat');bcb(489,1,{2015:1},EQd);var b6=mdb(qte,'EFactoryImpl/1ClientInternalEDateTimeFormat',489);bcb(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},UQd);_.Sg=function VQd(a,b,c){var d;c=_hd(this,a,b,c);if(!!this.e&&JD(a,170)){d=MQd(this,this.e);d!=this.c&&(c=QQd(this,d,c))}return c};_._g=function WQd(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new xMd(j5,this,1)),this.d;case 2:if(b)return KQd(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return JQd(this);return this.a;}return bid(this,a-aLd((jGd(),XFd)),XKd((d=BD(Ajd(this,16),26),!d?XFd:d),a),b,c)};_.jh=function XQd(a,b,c){var d,e;switch(b){case 0:return IQd(this,null,c);case 1:return !this.d&&(this.d=new xMd(j5,this,1)),Txd(this.d,a,c);case 3:return GQd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),XFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),XFd)),a,c)};_.lh=function YQd(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return cid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.sh=function ZQd(a,b){var c;switch(a){case 0:SQd(this,BD(b,87));return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);!this.d&&(this.d=new xMd(j5,this,1));ytd(this.d,BD(b,14));return;case 3:PQd(this,BD(b,87));return;case 4:RQd(this,BD(b,836));return;case 5:NQd(this,BD(b,138));return;}did(this,a-aLd((jGd(),XFd)),XKd((c=BD(Ajd(this,16),26),!c?XFd:c),a),b)};_.zh=function $Qd(){return jGd(),XFd};_.Bh=function _Qd(a){var b;switch(a){case 0:SQd(this,null);return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);return;case 3:PQd(this,null);return;case 4:RQd(this,null);return;case 5:NQd(this,null);return;}eid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.Ib=function aRd(){var a;a=new Wfb(Eid(this));a.a+=' (expression: ';TQd(this,a);a.a+=')';return a.a};var FQd;var e6=mdb(qte,'EGenericTypeImpl',241);bcb(1969,1964,Vve);_.Xh=function cRd(a,b){bRd(this,a,b)};_.lk=function dRd(a,b){bRd(this,this.gc(),a);return b};_.pi=function eRd(a){return Ut(this.Gi(),a)};_.Zh=function fRd(){return this.$h()};_.Gi=function gRd(){return new O0d(this)};_.$h=function hRd(){return this._h(0)};_._h=function iRd(a){return this.Gi().Zc(a)};_.mk=function jRd(a,b){ze(this,a,true);return b};_.ii=function kRd(a,b){var c,d;d=Vt(this,b);c=this.Zc(a);c.Rb(d);return d};_.ji=function lRd(a,b){var c;ze(this,b,true);c=this.Zc(a);c.Rb(b)};var B8=mdb(yve,'AbstractSequentialInternalEList',1969);bcb(486,1969,Vve,qRd);_.pi=function rRd(a){return Ut(this.Gi(),a)};_.Zh=function sRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_.Gi=function tRd(){return new w4d(this.a,this.b)};_.$h=function uRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_._h=function vRd(a){var b,c;if(this.b==null){if(a<0||a>1){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Jk();for(b=0;b0){b=this.c[--this.d];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.Zc(this.k.gc()):this.j._h(this.k.gc())}if(!this.p?PRd(this):QRd(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function XRd(){return MRd(this)};_.Tb=function YRd(){return this.a};_.Ub=function ZRd(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw vbb(new utb)}};_.Vb=function $Rd(){return this.a-1};_.Qb=function _Rd(){throw vbb(new bgb)};_.Lk=function aSd(){return false};_.Wb=function bSd(a){throw vbb(new bgb)};_.Mk=function cSd(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var KRd;var P8=mdb(yve,'EContentsEList/FeatureIteratorImpl',279);bcb(697,279,Wve,dSd);_.Lk=function eSd(){return true};var Q8=mdb(yve,'EContentsEList/ResolvingFeatureIteratorImpl',697);bcb(1157,697,Wve,fSd);_.Mk=function gSd(){return false};var g6=mdb(qte,'ENamedElementImpl/1/1',1157);bcb(1158,279,Wve,hSd);_.Mk=function iSd(){return false};var h6=mdb(qte,'ENamedElementImpl/1/2',1158);bcb(36,143,fve,lSd,mSd,nSd,oSd,pSd,qSd,rSd,sSd,tSd,uSd,vSd,wSd,xSd,ySd,zSd,ASd,BSd,CSd,DSd,ESd,FSd,GSd,HSd,ISd,JSd);_._i=function KSd(){return kSd(this)};_.gj=function LSd(){var a;a=kSd(this);if(a){return a.zj()}return null};_.yi=function MSd(a){this.b==-1&&!!this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj()));return this.c.Og(this.b,a)};_.Ai=function NSd(){return this.c};_.hj=function OSd(){var a;a=kSd(this);if(a){return a.Kj()}return false};_.b=-1;var k6=mdb(qte,'ENotificationImpl',36);bcb(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},SSd);_.Qg=function TSd(a){return PSd(this,a)};_._g=function USd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,26):null;case 11:return !this.d&&(this.d=new K4d(u5,this,11)),this.d;case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),this.c;case 13:return !this.a&&(this.a=new fTd(this,this)),this.a;case 14:return QSd(this);}return bid(this,a-aLd((jGd(),aGd)),XKd((d=BD(Ajd(this,16),26),!d?aGd:d),a),b,c)};_.hh=function VSd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?PSd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Sxd(this.c,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.jh=function WSd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);case 11:return !this.d&&(this.d=new K4d(u5,this,11)),Txd(this.d,a,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Txd(this.c,a,c);case 14:return Txd(QSd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.lh=function XSd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,26):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&QSd(this.a.a).i!=0&&!(!!this.b&&QTd(this.b));case 14:return !!this.b&&QTd(this.b);}return cid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.sh=function YSd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);!this.d&&(this.d=new K4d(u5,this,11));ytd(this.d,BD(b,14));return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);!this.c&&(this.c=new cUd(p5,this,12,10));ytd(this.c,BD(b,14));return;case 13:!this.a&&(this.a=new fTd(this,this));vwd(this.a);!this.a&&(this.a=new fTd(this,this));ytd(this.a,BD(b,14));return;case 14:Uxd(QSd(this));ytd(QSd(this),BD(b,14));return;}did(this,a-aLd((jGd(),aGd)),XKd((c=BD(Ajd(this,16),26),!c?aGd:c),a),b)};_.zh=function ZSd(){return jGd(),aGd};_.Bh=function $Sd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);return;case 13:!!this.a&&vwd(this.a);return;case 14:!!this.b&&Uxd(this.b);return;}eid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.Gh=function _Sd(){var a,b;if(this.c){for(a=0,b=this.c.i;ah&&NC(a,h,null);d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,g?g:(jGd(),YFd));NC(a,d++,f)}return a};_.Yi=function zTd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=QSd(this.a);for(b=0,d=QSd(this.a).i;b1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function WTd(){return true};_.fj=function XTd(){return QTd(this)};_.Xj=function aUd(){Uxd(this)};var o6=mdb(qte,'EOperationImpl/2',1341);bcb(498,1,{1938:1,498:1},bUd);var q6=mdb(qte,'EPackageImpl/1',498);bcb(16,85,Pve,cUd);_.zk=function dUd(){return this.d};_.Ak=function eUd(){return this.b};_.Dk=function fUd(){return true};_.b=0;var b9=mdb(yve,'EObjectContainmentWithInverseEList',16);bcb(353,16,Pve,gUd);_.Ek=function hUd(){return true};_.li=function iUd(a,b){return ILd(this,a,BD(b,56))};var $8=mdb(yve,'EObjectContainmentWithInverseEList/Resolving',353);bcb(298,353,Pve,jUd);_.ci=function kUd(){this.a.tb=null};var r6=mdb(qte,'EPackageImpl/2',298);bcb(1228,1,{},lUd);var s6=mdb(qte,'EPackageImpl/3',1228);bcb(718,43,fke,oUd);_._b=function pUd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};var u6=mdb(qte,'EPackageRegistryImpl',718);bcb(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},rUd);_.Qg=function sUd(a){return qUd(this,a)};_._g=function tUd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,59):null;}return bid(this,a-aLd((jGd(),dGd)),XKd((d=BD(Ajd(this,16),26),!d?dGd:d),a),b,c)};_.hh=function uUd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qUd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.jh=function vUd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.lh=function wUd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,59):null);}return cid(this,a-aLd((jGd(),dGd)),XKd((b=BD(Ajd(this,16),26),!b?dGd:b),a))};_.zh=function xUd(){return jGd(),dGd};var v6=mdb(qte,'EParameterImpl',509);bcb(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},FUd);_._g=function GUd(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),g=this.t,g>1||g==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:return Bcb(),f=zUd(this),!!f&&(f.Bb&ote)!=0?true:false;case 20:return Bcb(),(this.Bb&Tje)!=0?true:false;case 21:if(b)return zUd(this);return this.b;case 22:if(b)return AUd(this);return yUd(this);case 23:return !this.a&&(this.a=new _4d(b5,this,23)),this.a;}return bid(this,a-aLd((jGd(),eGd)),XKd((d=BD(Ajd(this,16),26),!d?eGd:d),a),b,c)};_.lh=function HUd(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return d=zUd(this),!!d&&(d.Bb&ote)!=0;case 20:return (this.Bb&Tje)==0;case 21:return !!this.b;case 22:return !!yUd(this);case 23:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.sh=function IUd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:BUd(this,Ccb(DD(b)));return;case 20:EUd(this,Ccb(DD(b)));return;case 21:DUd(this,BD(b,18));return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);!this.a&&(this.a=new _4d(b5,this,23));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),eGd)),XKd((c=BD(Ajd(this,16),26),!c?eGd:c),a),b)};_.zh=function JUd(){return jGd(),eGd};_.Bh=function KUd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:CUd(this,false);JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),2);return;case 20:EUd(this,true);return;case 21:DUd(this,null);return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);return;}eid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.Gh=function LUd(){AUd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Lj=function MUd(){return zUd(this)};_.qk=function NUd(){var a;return a=zUd(this),!!a&&(a.Bb&ote)!=0};_.rk=function OUd(){return (this.Bb&ote)!=0};_.sk=function PUd(){return (this.Bb&Tje)!=0};_.nk=function QUd(a,b){this.c=null;return zId(this,a,b)};_.Ib=function RUd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (containment: ';Ffb(a,(this.Bb&ote)!=0);a.a+=', resolveProxies: ';Ffb(a,(this.Bb&Tje)!=0);a.a+=')';return a.a};var w6=mdb(qte,'EReferenceImpl',99);bcb(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},XUd);_.Fb=function bVd(a){return this===a};_.cd=function dVd(){return this.b};_.dd=function eVd(){return this.c};_.Hb=function fVd(){return FCb(this)};_.Uh=function hVd(a){SUd(this,GD(a))};_.ed=function iVd(a){return WUd(this,GD(a))};_._g=function YUd(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return bid(this,a-aLd((jGd(),fGd)),XKd((d=BD(Ajd(this,16),26),!d?fGd:d),a),b,c)};_.lh=function ZUd(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return cid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.sh=function $Ud(a,b){var c;switch(a){case 0:TUd(this,GD(b));return;case 1:VUd(this,GD(b));return;}did(this,a-aLd((jGd(),fGd)),XKd((c=BD(Ajd(this,16),26),!c?fGd:c),a),b)};_.zh=function _Ud(){return jGd(),fGd};_.Bh=function aVd(a){var b;switch(a){case 0:UUd(this,null);return;case 1:VUd(this,null);return;}eid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.Sh=function cVd(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:LCb(a)}return this.a};_.Th=function gVd(a){this.a=a};_.Ib=function jVd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (key: ';Efb(a,this.b);a.a+=', value: ';Efb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var x6=mdb(qte,'EStringToStringMapEntryImpl',548);var D9=odb(yve,'FeatureMap/Entry/Internal');bcb(565,1,Xve);_.Ok=function mVd(a){return this.Pk(BD(a,49))};_.Pk=function nVd(a){return this.Ok(a)};_.Fb=function oVd(a){var b,c;if(this===a){return true}else if(JD(a,72)){b=BD(a,72);if(b.ak()==this.c){c=this.dd();return c==null?b.dd()==null:pb(c,b.dd())}else{return false}}else{return false}};_.ak=function pVd(){return this.c};_.Hb=function qVd(){var a;a=this.dd();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function rVd(){var a,b;a=this.c;b=bKd(a.Hj()).Ph();a.ne();return (b!=null&&b.length!=0?b+':'+a.ne():a.ne())+'='+this.dd()};var y6=mdb(qte,'EStructuralFeatureImpl/BasicFeatureMapEntry',565);bcb(776,565,Xve,uVd);_.Pk=function vVd(a){return new uVd(this.c,a)};_.dd=function wVd(){return this.a};_.Qk=function xVd(a,b,c){return sVd(this,a,this.a,b,c)};_.Rk=function yVd(a,b,c){return tVd(this,a,this.a,b,c)};var z6=mdb(qte,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',776);bcb(1314,1,{},zVd);_.Pj=function AVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.nl(this.a).Wj(d)};_.Qj=function BVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.el(this.a,d,e)};_.Rj=function CVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.fl(this.a,d,e)};_.Sj=function DVd(a,b,c){var d;d=BD(gid(a,this.b),215);return d.nl(this.a).fj()};_.Tj=function EVd(a,b,c,d){var e;e=BD(gid(a,this.b),215);e.nl(this.a).Wb(d)};_.Uj=function FVd(a,b,c){return BD(gid(a,this.b),215).nl(this.a)};_.Vj=function GVd(a,b,c){var d;d=BD(gid(a,this.b),215);d.nl(this.a).Xj()};var A6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1314);bcb(89,1,{},IVd,JVd,KVd,LVd);_.Pj=function MVd(a,b,c,d,e){var f;f=b.Ch(c);f==null&&b.Dh(c,f=HVd(this,a));if(!e){switch(this.e){case 50:case 41:return BD(f,589).sj();case 40:return BD(f,215).kl();}}return f};_.Qj=function NVd(a,b,c,d,e){var f,g;g=b.Ch(c);g==null&&b.Dh(c,g=HVd(this,a));f=BD(g,69).lk(d,e);return f};_.Rj=function OVd(a,b,c,d,e){var f;f=b.Ch(c);f!=null&&(e=BD(f,69).mk(d,e));return e};_.Sj=function PVd(a,b,c){var d;d=b.Ch(c);return d!=null&&BD(d,76).fj()};_.Tj=function QVd(a,b,c,d){var e;e=BD(b.Ch(c),76);!e&&b.Dh(c,e=HVd(this,a));e.Wb(d)};_.Uj=function RVd(a,b,c){var d,e;e=b.Ch(c);e==null&&b.Dh(c,e=HVd(this,a));if(JD(e,76)){return BD(e,76)}else{d=BD(b.Ch(c),15);return new iYd(d)}};_.Vj=function SVd(a,b,c){var d;d=BD(b.Ch(c),76);!d&&b.Dh(c,d=HVd(this,a));d.Xj()};_.b=0;_.e=0;var B6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateMany',89);bcb(504,1,{});_.Qj=function WVd(a,b,c,d,e){throw vbb(new bgb)};_.Rj=function XVd(a,b,c,d,e){throw vbb(new bgb)};_.Uj=function YVd(a,b,c){return new ZVd(this,a,b,c)};var TVd;var i7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle',504);bcb(1331,1,zve,ZVd);_.Wj=function $Vd(a){return this.a.Pj(this.c,this.d,this.b,a,true)};_.fj=function _Vd(){return this.a.Sj(this.c,this.d,this.b)};_.Wb=function aWd(a){this.a.Tj(this.c,this.d,this.b,a)};_.Xj=function bWd(){this.a.Vj(this.c,this.d,this.b)};_.b=0;var C6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1331);bcb(769,504,{},cWd);_.Pj=function dWd(a,b,c,d,e){return Nid(a,a.eh(),a.Vg())==this.b?this.sk()&&d?aid(a):a.eh():null};_.Qj=function eWd(a,b,c,d,e){var f,g;!!a.eh()&&(e=(f=a.Vg(),f>=0?a.Qg(e):a.eh().ih(a,-1-f,null,e)));g=bLd(a.Tg(),this.e);return a.Sg(d,g,e)};_.Rj=function fWd(a,b,c,d,e){var f;f=bLd(a.Tg(),this.e);return a.Sg(null,f,e)};_.Sj=function gWd(a,b,c){var d;d=bLd(a.Tg(),this.e);return !!a.eh()&&a.Vg()==d};_.Tj=function hWd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}e=a.eh();g=bLd(a.Tg(),this.e);if(PD(d)!==PD(e)||a.Vg()!=g&&d!=null){if(p6d(a,BD(d,56)))throw vbb(new Wdb(ste+a.Ib()));i=null;!!e&&(i=(f=a.Vg(),f>=0?a.Qg(i):a.eh().ih(a,-1-f,null,i)));h=BD(d,49);!!h&&(i=h.gh(a,bLd(h.Tg(),this.b),null,i));i=a.Sg(h,g,i);!!i&&i.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new nSd(a,1,g,d,d))}};_.Vj=function iWd(a,b,c){var d,e,f,g;d=a.eh();if(d){g=(e=a.Vg(),e>=0?a.Qg(null):a.eh().ih(a,-1-e,null,null));f=bLd(a.Tg(),this.e);g=a.Sg(null,f,g);!!g&&g.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,1,this.e,null,null))}};_.sk=function jWd(){return false};var E6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',769);bcb(1315,769,{},kWd);_.sk=function lWd(){return true};var D6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1315);bcb(563,504,{});_.Pj=function oWd(a,b,c,d,e){var f;return f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f};_.Sj=function pWd(a,b,c){var d;d=b.Ch(c);return d!=null&&(PD(d)===PD(TVd)||!pb(d,this.b))};_.Tj=function qWd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=(f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Tk(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.Dh(c,null):this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function rWd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=(e=b.Ch(c),e==null?this.b:PD(e)===PD(TVd)?null:e);b.Eh(c);Uhd(a,this.d.Tk(a,1,this.e,d,this.b))}else{b.Eh(c)}};_.Sk=function sWd(a){throw vbb(new Bdb)};var T6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',563);bcb($ve,1,{},DWd);_.Tk=function EWd(a,b,c,d,e){return new DSd(a,b,c,d,e)};_.Uk=function FWd(a,b,c,d,e,f){return new FSd(a,b,c,d,e,f)};var tWd,uWd,vWd,wWd,xWd,yWd,zWd,AWd,BWd;var N6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',$ve);bcb(1332,$ve,{},GWd);_.Tk=function HWd(a,b,c,d,e){return new ISd(a,b,c,Ccb(DD(d)),Ccb(DD(e)))};_.Uk=function IWd(a,b,c,d,e,f){return new JSd(a,b,c,Ccb(DD(d)),Ccb(DD(e)),f)};var F6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1332);bcb(1333,$ve,{},JWd);_.Tk=function KWd(a,b,c,d,e){return new rSd(a,b,c,BD(d,217).a,BD(e,217).a)};_.Uk=function LWd(a,b,c,d,e,f){return new sSd(a,b,c,BD(d,217).a,BD(e,217).a,f)};var G6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1333);bcb(1334,$ve,{},MWd);_.Tk=function NWd(a,b,c,d,e){return new tSd(a,b,c,BD(d,172).a,BD(e,172).a)};_.Uk=function OWd(a,b,c,d,e,f){return new uSd(a,b,c,BD(d,172).a,BD(e,172).a,f)};var H6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1334);bcb(1335,$ve,{},PWd);_.Tk=function QWd(a,b,c,d,e){return new vSd(a,b,c,Edb(ED(d)),Edb(ED(e)))};_.Uk=function RWd(a,b,c,d,e,f){return new wSd(a,b,c,Edb(ED(d)),Edb(ED(e)),f)};var I6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1335);bcb(1336,$ve,{},SWd);_.Tk=function TWd(a,b,c,d,e){return new xSd(a,b,c,BD(d,155).a,BD(e,155).a)};_.Uk=function UWd(a,b,c,d,e,f){return new ySd(a,b,c,BD(d,155).a,BD(e,155).a,f)};var J6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1336);bcb(1337,$ve,{},VWd);_.Tk=function WWd(a,b,c,d,e){return new zSd(a,b,c,BD(d,19).a,BD(e,19).a)};_.Uk=function XWd(a,b,c,d,e,f){return new ASd(a,b,c,BD(d,19).a,BD(e,19).a,f)};var K6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1337);bcb(1338,$ve,{},YWd);_.Tk=function ZWd(a,b,c,d,e){return new BSd(a,b,c,BD(d,162).a,BD(e,162).a)};_.Uk=function $Wd(a,b,c,d,e,f){return new CSd(a,b,c,BD(d,162).a,BD(e,162).a,f)};var L6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1338);bcb(1339,$ve,{},_Wd);_.Tk=function aXd(a,b,c,d,e){return new GSd(a,b,c,BD(d,184).a,BD(e,184).a)};_.Uk=function bXd(a,b,c,d,e,f){return new HSd(a,b,c,BD(d,184).a,BD(e,184).a,f)};var M6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1339);bcb(1317,563,{},cXd);_.Sk=function dXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var O6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1317);bcb(1318,563,{},eXd);_.Sk=function fXd(a){};var P6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1318);bcb(770,563,{});_.Sj=function gXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function hXd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=true;f=b.Ch(c);if(f==null){e=false;f=this.b}else PD(f)===PD(TVd)&&(f=null);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else{b.Dh(c,TVd)}}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Uk(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.Dh(c,null):b.Dh(c,TVd)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function iXd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=true;e=b.Ch(c);if(e==null){d=false;e=this.b}else PD(e)===PD(TVd)&&(e=null);b.Eh(c);Uhd(a,this.d.Uk(a,2,this.e,e,this.b,d))}else{b.Eh(c)}};var S6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',770);bcb(1319,770,{},jXd);_.Sk=function kXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var Q6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1319);bcb(1320,770,{},lXd);_.Sk=function mXd(a){};var R6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1320);bcb(398,504,{},nXd);_.Pj=function pXd(a,b,c,d,e){var f,g,h,i,j;j=b.Ch(c);if(this.Kj()&&PD(j)===PD(TVd)){return null}else if(this.sk()&&d&&j!=null){h=BD(j,49);if(h.kh()){i=xid(a,h);if(h!=i){if(!fKd(this.a,i)){throw vbb(new Cdb(Yve+rb(i)+Zve+this.a+"'"))}b.Dh(c,j=i);if(this.rk()){f=BD(i,49);g=h.ih(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(h.Tg(),this.b),null,null);!f.eh()&&(g=f.gh(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(f.Tg(),this.b),null,g));!!g&&g.Fi()}a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,9,this.e,h,i))}}return j}else{return j}};_.Qj=function qXd(a,b,c,d,e){var f,g;g=b.Ch(c);PD(g)===PD(TVd)&&(g=null);b.Dh(c,d);if(this.bj()){if(PD(g)!==PD(d)&&g!=null){f=BD(g,49);e=f.ih(a,bLd(f.Tg(),this.b),null,e)}}else this.rk()&&g!=null&&(e=BD(g,49).ih(a,-1-bLd(a.Tg(),this.e),null,e));if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));e.Ei(new DSd(a,1,this.e,g,d))}return e};_.Rj=function rXd(a,b,c,d,e){var f;f=b.Ch(c);PD(f)===PD(TVd)&&(f=null);b.Eh(c);if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));this.Kj()?e.Ei(new DSd(a,2,this.e,f,null)):e.Ei(new DSd(a,1,this.e,f,null))}return e};_.Sj=function sXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function tXd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}i=b.Ch(c);h=i!=null;this.Kj()&&PD(i)===PD(TVd)&&(i=null);g=null;if(this.bj()){if(PD(i)!==PD(d)){if(i!=null){e=BD(i,49);g=e.ih(a,bLd(e.Tg(),this.b),null,g)}if(d!=null){e=BD(d,49);g=e.gh(a,bLd(e.Tg(),this.b),null,g)}}}else if(this.rk()){if(PD(i)!==PD(d)){i!=null&&(g=BD(i,49).ih(a,-1-bLd(a.Tg(),this.e),null,g));d!=null&&(g=BD(d,49).gh(a,-1-bLd(a.Tg(),this.e),null,g))}}d==null&&this.Kj()?b.Dh(c,TVd):b.Dh(c,d);if(a.Lg()&&a.Mg()){f=new FSd(a,1,this.e,i,d,this.Kj()&&!h);if(!g){Uhd(a,f)}else{g.Ei(f);g.Fi()}}else !!g&&g.Fi()};_.Vj=function uXd(a,b,c){var d,e,f,g,h;h=b.Ch(c);g=h!=null;this.Kj()&&PD(h)===PD(TVd)&&(h=null);f=null;if(h!=null){if(this.bj()){d=BD(h,49);f=d.ih(a,bLd(d.Tg(),this.b),null,f)}else this.rk()&&(f=BD(h,49).ih(a,-1-bLd(a.Tg(),this.e),null,f))}b.Eh(c);if(a.Lg()&&a.Mg()){e=new FSd(a,this.Kj()?2:1,this.e,h,null,g);if(!f){Uhd(a,e)}else{f.Ei(e);f.Fi()}}else !!f&&f.Fi()};_.bj=function vXd(){return false};_.rk=function wXd(){return false};_.sk=function xXd(){return false};_.Kj=function yXd(){return false};var h7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',398);bcb(564,398,{},zXd);_.rk=function AXd(){return true};var _6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',564);bcb(1323,564,{},BXd);_.sk=function CXd(){return true};var U6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1323);bcb(772,564,{},DXd);_.Kj=function EXd(){return true};var W6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',772);bcb(1325,772,{},FXd);_.sk=function GXd(){return true};var V6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1325);bcb(640,564,{},HXd);_.bj=function IXd(){return true};var $6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',640);bcb(1324,640,{},JXd);_.sk=function KXd(){return true};var X6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1324);bcb(773,640,{},LXd);_.Kj=function MXd(){return true};var Z6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',773);bcb(1326,773,{},NXd);_.sk=function OXd(){return true};var Y6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1326);bcb(641,398,{},PXd);_.sk=function QXd(){return true};var d7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',641);bcb(1327,641,{},RXd);_.Kj=function SXd(){return true};var a7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1327);bcb(774,641,{},TXd);_.bj=function UXd(){return true};var c7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',774);bcb(1328,774,{},VXd);_.Kj=function WXd(){return true};var b7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1328);bcb(1321,398,{},XXd);_.Kj=function YXd(){return true};var e7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1321);bcb(771,398,{},ZXd);_.bj=function $Xd(){return true};var g7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',771);bcb(1322,771,{},_Xd);_.Kj=function aYd(){return true};var f7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1322);bcb(775,565,Xve,dYd);_.Pk=function eYd(a){return new dYd(this.a,this.c,a)};_.dd=function fYd(){return this.b};_.Qk=function gYd(a,b,c){return bYd(this,a,this.b,c)};_.Rk=function hYd(a,b,c){return cYd(this,a,this.b,c)};var j7=mdb(qte,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',775);bcb(1329,1,zve,iYd);_.Wj=function jYd(a){return this.a};_.fj=function kYd(){return JD(this.a,95)?BD(this.a,95).fj():!this.a.dc()};_.Wb=function lYd(a){this.a.$b();this.a.Gc(BD(a,15))};_.Xj=function mYd(){JD(this.a,95)?BD(this.a,95).Xj():this.a.$b()};var k7=mdb(qte,'EStructuralFeatureImpl/SettingMany',1329);bcb(1330,565,Xve,nYd);_.Ok=function oYd(a){return new sYd((Q8d(),P8d),this.b.Ih(this.a,a))};_.dd=function pYd(){return null};_.Qk=function qYd(a,b,c){return c};_.Rk=function rYd(a,b,c){return c};var l7=mdb(qte,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1330);bcb(642,565,Xve,sYd);_.Ok=function tYd(a){return new sYd(this.c,a)};_.dd=function uYd(){return this.a};_.Qk=function vYd(a,b,c){return c};_.Rk=function wYd(a,b,c){return c};var m7=mdb(qte,'EStructuralFeatureImpl/SimpleFeatureMapEntry',642);bcb(391,497,oue,xYd);_.ri=function yYd(a){return KC(c5,Uhe,26,a,0,1)};_.ni=function zYd(){return false};var o7=mdb(qte,'ESuperAdapter/1',391);bcb(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},BYd);_._g=function CYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new KYd(this,j5,this)),this.a;}return bid(this,a-aLd((jGd(),iGd)),XKd((d=BD(Ajd(this,16),26),!d?iGd:d),a),b,c)};_.jh=function DYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.a&&(this.a=new KYd(this,j5,this)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),iGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),iGd)),a,c)};_.lh=function EYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};_.sh=function FYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);!this.a&&(this.a=new KYd(this,j5,this));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),iGd)),XKd((c=BD(Ajd(this,16),26),!c?iGd:c),a),b)};_.zh=function GYd(){return jGd(),iGd};_.Bh=function HYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);return;}eid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};var u7=mdb(qte,'ETypeParameterImpl',444);bcb(445,85,Pve,KYd);_.cj=function LYd(a,b){return IYd(this,BD(a,87),b)};_.dj=function MYd(a,b){return JYd(this,BD(a,87),b)};var q7=mdb(qte,'ETypeParameterImpl/1',445);bcb(634,43,fke,NYd);_.ec=function OYd(){return new RYd(this)};var t7=mdb(qte,'ETypeParameterImpl/2',634);bcb(556,eie,fie,RYd);_.Fc=function SYd(a){return PYd(this,BD(a,87))};_.Gc=function TYd(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=BD(c.Pb(),87);Rhb(this.a,b,'')==null&&(d=true)}return d};_.$b=function UYd(){Uhb(this.a)};_.Hc=function VYd(a){return Mhb(this.a,a)};_.Kc=function WYd(){var a;return a=new nib((new eib(this.a)).a),new ZYd(a)};_.Mc=function XYd(a){return QYd(this,a)};_.gc=function YYd(){return Vhb(this.a)};var s7=mdb(qte,'ETypeParameterImpl/2/1',556);bcb(557,1,aie,ZYd);_.Nb=function $Yd(a){Rrb(this,a)};_.Pb=function aZd(){return BD(lib(this.a).cd(),87)};_.Ob=function _Yd(){return this.a.b};_.Qb=function bZd(){mib(this.a)};var r7=mdb(qte,'ETypeParameterImpl/2/1/1',557);bcb(1276,43,fke,cZd);_._b=function dZd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};_.xc=function eZd(a){var b,c;b=ND(a)?Phb(this,a):Wd(irb(this.f,a));if(JD(b,837)){c=BD(b,837);b=c._j();Rhb(this,BD(a,235),b);return b}else return b!=null?b:a==null?(g5d(),f5d):null};var w7=mdb(qte,'EValidatorRegistryImpl',1276);bcb(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},mZd);_.Ih=function nZd(a,b){switch(a.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return b==null?null:fcb(b);case 25:return gZd(b);case 27:return hZd(b);case 28:return iZd(b);case 29:return b==null?null:CQd(Pmd[0],BD(b,199));case 41:return b==null?'':hdb(BD(b,290));case 42:return fcb(b);case 50:return GD(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function oZd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=bKd(a),m?HLd(m.Mh(),a):-1)),a.G){case 0:return c=new OJd,c;case 1:return b=new RHd,b;case 2:return d=new hLd,d;case 4:return e=new MPd,e;case 5:return f=new aQd,f;case 6:return g=new rQd,g;case 7:return h=new $md,h;case 10:return j=new MGd,j;case 11:return k=new SSd,k;case 12:return l=new eod,l;case 13:return n=new rUd,n;case 14:return o=new FUd,o;case 17:return p=new XUd,p;case 18:return i=new UQd,i;case 19:return q=new BYd,q;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function pZd(a,b){switch(a.yj()){case 20:return b==null?null:new tgb(b);case 21:return b==null?null:new Ygb(b);case 23:case 22:return b==null?null:fZd(b);case 26:case 24:return b==null?null:Scb(Icb(b,-128,127)<<24>>24);case 25:return Xmd(b);case 27:return jZd(b);case 28:return kZd(b);case 29:return lZd(b);case 32:case 31:return b==null?null:Hcb(b);case 38:case 37:return b==null?null:new Odb(b);case 40:case 39:return b==null?null:meb(Icb(b,Rie,Ohe));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Aeb(Jcb(b));case 49:case 48:return b==null?null:Web(Icb(b,awe,32767)<<16>>16);case 50:return b;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var x7=mdb(qte,'EcoreFactoryImpl',1313);bcb(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},AZd);_.gb=false;_.hb=false;var rZd,sZd=false;var o8=mdb(qte,'EcorePackageImpl',547);bcb(1184,1,{837:1},EZd);_._j=function FZd(){return I6d(),H6d};var I7=mdb(qte,'EcorePackageImpl/1',1184);bcb(1193,1,nwe,GZd);_.wj=function HZd(a){return JD(a,147)};_.xj=function IZd(a){return KC(k5,Uhe,147,a,0,1)};var y7=mdb(qte,'EcorePackageImpl/10',1193);bcb(1194,1,nwe,JZd);_.wj=function KZd(a){return JD(a,191)};_.xj=function LZd(a){return KC(l5,Uhe,191,a,0,1)};var z7=mdb(qte,'EcorePackageImpl/11',1194);bcb(1195,1,nwe,MZd);_.wj=function NZd(a){return JD(a,56)};_.xj=function OZd(a){return KC(m5,Uhe,56,a,0,1)};var A7=mdb(qte,'EcorePackageImpl/12',1195);bcb(1196,1,nwe,PZd);_.wj=function QZd(a){return JD(a,399)};_.xj=function RZd(a){return KC(n5,Nve,59,a,0,1)};var B7=mdb(qte,'EcorePackageImpl/13',1196);bcb(1197,1,nwe,SZd);_.wj=function TZd(a){return JD(a,235)};_.xj=function UZd(a){return KC(o5,Uhe,235,a,0,1)};var C7=mdb(qte,'EcorePackageImpl/14',1197);bcb(1198,1,nwe,VZd);_.wj=function WZd(a){return JD(a,509)};_.xj=function XZd(a){return KC(p5,Uhe,2017,a,0,1)};var D7=mdb(qte,'EcorePackageImpl/15',1198);bcb(1199,1,nwe,YZd);_.wj=function ZZd(a){return JD(a,99)};_.xj=function $Zd(a){return KC(q5,Mve,18,a,0,1)};var E7=mdb(qte,'EcorePackageImpl/16',1199);bcb(1200,1,nwe,_Zd);_.wj=function a$d(a){return JD(a,170)};_.xj=function b$d(a){return KC(t5,Mve,170,a,0,1)};var F7=mdb(qte,'EcorePackageImpl/17',1200);bcb(1201,1,nwe,c$d);_.wj=function d$d(a){return JD(a,472)};_.xj=function e$d(a){return KC(v5,Uhe,472,a,0,1)};var G7=mdb(qte,'EcorePackageImpl/18',1201);bcb(1202,1,nwe,f$d);_.wj=function g$d(a){return JD(a,548)};_.xj=function h$d(a){return KC(x6,kve,548,a,0,1)};var H7=mdb(qte,'EcorePackageImpl/19',1202);bcb(1185,1,nwe,i$d);_.wj=function j$d(a){return JD(a,322)};_.xj=function k$d(a){return KC(b5,Mve,34,a,0,1)};var T7=mdb(qte,'EcorePackageImpl/2',1185);bcb(1203,1,nwe,l$d);_.wj=function m$d(a){return JD(a,241)};_.xj=function n$d(a){return KC(j5,Tve,87,a,0,1)};var J7=mdb(qte,'EcorePackageImpl/20',1203);bcb(1204,1,nwe,o$d);_.wj=function p$d(a){return JD(a,444)};_.xj=function q$d(a){return KC(u5,Uhe,836,a,0,1)};var K7=mdb(qte,'EcorePackageImpl/21',1204);bcb(1205,1,nwe,r$d);_.wj=function s$d(a){return KD(a)};_.xj=function t$d(a){return KC(wI,nie,476,a,8,1)};var L7=mdb(qte,'EcorePackageImpl/22',1205);bcb(1206,1,nwe,u$d);_.wj=function v$d(a){return JD(a,190)};_.xj=function w$d(a){return KC(SD,nie,190,a,0,2)};var M7=mdb(qte,'EcorePackageImpl/23',1206);bcb(1207,1,nwe,x$d);_.wj=function y$d(a){return JD(a,217)};_.xj=function z$d(a){return KC(xI,nie,217,a,0,1)};var N7=mdb(qte,'EcorePackageImpl/24',1207);bcb(1208,1,nwe,A$d);_.wj=function B$d(a){return JD(a,172)};_.xj=function C$d(a){return KC(yI,nie,172,a,0,1)};var O7=mdb(qte,'EcorePackageImpl/25',1208);bcb(1209,1,nwe,D$d);_.wj=function E$d(a){return JD(a,199)};_.xj=function F$d(a){return KC($J,nie,199,a,0,1)};var P7=mdb(qte,'EcorePackageImpl/26',1209);bcb(1210,1,nwe,G$d);_.wj=function H$d(a){return false};_.xj=function I$d(a){return KC(O4,Uhe,2110,a,0,1)};var Q7=mdb(qte,'EcorePackageImpl/27',1210);bcb(1211,1,nwe,J$d);_.wj=function K$d(a){return LD(a)};_.xj=function L$d(a){return KC(BI,nie,333,a,7,1)};var R7=mdb(qte,'EcorePackageImpl/28',1211);bcb(1212,1,nwe,M$d);_.wj=function N$d(a){return JD(a,58)};_.xj=function O$d(a){return KC(T4,eme,58,a,0,1)};var S7=mdb(qte,'EcorePackageImpl/29',1212);bcb(1186,1,nwe,P$d);_.wj=function Q$d(a){return JD(a,510)};_.xj=function R$d(a){return KC(a5,{3:1,4:1,5:1,1934:1},590,a,0,1)};var c8=mdb(qte,'EcorePackageImpl/3',1186);bcb(1213,1,nwe,S$d);_.wj=function T$d(a){return JD(a,573)};_.xj=function U$d(a){return KC(U4,Uhe,1940,a,0,1)};var U7=mdb(qte,'EcorePackageImpl/30',1213);bcb(1214,1,nwe,V$d);_.wj=function W$d(a){return JD(a,153)};_.xj=function X$d(a){return KC(O9,eme,153,a,0,1)};var V7=mdb(qte,'EcorePackageImpl/31',1214);bcb(1215,1,nwe,Y$d);_.wj=function Z$d(a){return JD(a,72)};_.xj=function $$d(a){return KC(E9,owe,72,a,0,1)};var W7=mdb(qte,'EcorePackageImpl/32',1215);bcb(1216,1,nwe,_$d);_.wj=function a_d(a){return JD(a,155)};_.xj=function b_d(a){return KC(FI,nie,155,a,0,1)};var X7=mdb(qte,'EcorePackageImpl/33',1216);bcb(1217,1,nwe,c_d);_.wj=function d_d(a){return JD(a,19)};_.xj=function e_d(a){return KC(JI,nie,19,a,0,1)};var Y7=mdb(qte,'EcorePackageImpl/34',1217);bcb(1218,1,nwe,f_d);_.wj=function g_d(a){return JD(a,290)};_.xj=function h_d(a){return KC(AI,Uhe,290,a,0,1)};var Z7=mdb(qte,'EcorePackageImpl/35',1218);bcb(1219,1,nwe,i_d);_.wj=function j_d(a){return JD(a,162)};_.xj=function k_d(a){return KC(MI,nie,162,a,0,1)};var $7=mdb(qte,'EcorePackageImpl/36',1219);bcb(1220,1,nwe,l_d);_.wj=function m_d(a){return JD(a,83)};_.xj=function n_d(a){return KC(DK,Uhe,83,a,0,1)};var _7=mdb(qte,'EcorePackageImpl/37',1220);bcb(1221,1,nwe,o_d);_.wj=function p_d(a){return JD(a,591)};_.xj=function q_d(a){return KC(v8,Uhe,591,a,0,1)};var a8=mdb(qte,'EcorePackageImpl/38',1221);bcb(1222,1,nwe,r_d);_.wj=function s_d(a){return false};_.xj=function t_d(a){return KC(u8,Uhe,2111,a,0,1)};var b8=mdb(qte,'EcorePackageImpl/39',1222);bcb(1187,1,nwe,u_d);_.wj=function v_d(a){return JD(a,88)};_.xj=function w_d(a){return KC(c5,Uhe,26,a,0,1)};var i8=mdb(qte,'EcorePackageImpl/4',1187);bcb(1223,1,nwe,x_d);_.wj=function y_d(a){return JD(a,184)};_.xj=function z_d(a){return KC(UI,nie,184,a,0,1)};var d8=mdb(qte,'EcorePackageImpl/40',1223);bcb(1224,1,nwe,A_d);_.wj=function B_d(a){return ND(a)};_.xj=function C_d(a){return KC(ZI,nie,2,a,6,1)};var e8=mdb(qte,'EcorePackageImpl/41',1224);bcb(1225,1,nwe,D_d);_.wj=function E_d(a){return JD(a,588)};_.xj=function F_d(a){return KC(X4,Uhe,588,a,0,1)};var f8=mdb(qte,'EcorePackageImpl/42',1225);bcb(1226,1,nwe,G_d);_.wj=function H_d(a){return false};_.xj=function I_d(a){return KC(V4,nie,2112,a,0,1)};var g8=mdb(qte,'EcorePackageImpl/43',1226);bcb(1227,1,nwe,J_d);_.wj=function K_d(a){return JD(a,42)};_.xj=function L_d(a){return KC(CK,zie,42,a,0,1)};var h8=mdb(qte,'EcorePackageImpl/44',1227);bcb(1188,1,nwe,M_d);_.wj=function N_d(a){return JD(a,138)};_.xj=function O_d(a){return KC(d5,Uhe,138,a,0,1)};var j8=mdb(qte,'EcorePackageImpl/5',1188);bcb(1189,1,nwe,P_d);_.wj=function Q_d(a){return JD(a,148)};_.xj=function R_d(a){return KC(f5,Uhe,148,a,0,1)};var k8=mdb(qte,'EcorePackageImpl/6',1189);bcb(1190,1,nwe,S_d);_.wj=function T_d(a){return JD(a,457)};_.xj=function U_d(a){return KC(h5,Uhe,671,a,0,1)};var l8=mdb(qte,'EcorePackageImpl/7',1190);bcb(1191,1,nwe,V_d);_.wj=function W_d(a){return JD(a,573)};_.xj=function X_d(a){return KC(g5,Uhe,678,a,0,1)};var m8=mdb(qte,'EcorePackageImpl/8',1191);bcb(1192,1,nwe,Y_d);_.wj=function Z_d(a){return JD(a,471)};_.xj=function $_d(a){return KC(i5,Uhe,471,a,0,1)};var n8=mdb(qte,'EcorePackageImpl/9',1192);bcb(1025,1982,ive,c0d);_.bi=function d0d(a,b){__d(this,BD(b,415))};_.fi=function e0d(a,b){a0d(this,a,BD(b,415))};var q8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1025);bcb(1026,143,fve,f0d);_.Ai=function g0d(){return this.a.a};var p8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1026);bcb(1053,1052,{},i0d);var t8=mdb('org.eclipse.emf.ecore.plugin','EcorePlugin',1053);var v8=odb(pwe,'Resource');bcb(781,1378,qwe);_.Yk=function m0d(a){};_.Zk=function n0d(a){};_.Vk=function o0d(){return !this.a&&(this.a=new z0d(this)),this.a};_.Wk=function p0d(a){var b,c,d,e,f;d=a.length;if(d>0){BCb(0,a.length);if(a.charCodeAt(0)==47){f=new Skb(4);e=1;for(b=1;b0&&(a=a.substr(0,c))}}}return k0d(this,a)};_.Xk=function q0d(){return this.c};_.Ib=function r0d(){var a;return hdb(this.gm)+'@'+(a=tb(this)>>>0,a.toString(16))+" uri='"+this.d+"'"};_.b=false;var z8=mdb(rwe,'ResourceImpl',781);bcb(1379,781,qwe,s0d);var w8=mdb(rwe,'BinaryResourceImpl',1379);bcb(1169,694,pue);_.si=function v0d(a){return JD(a,56)?t0d(this,BD(a,56)):JD(a,591)?new Fyd(BD(a,591).Vk()):PD(a)===PD(this.f)?BD(a,14).Kc():(LCd(),KCd.a)};_.Ob=function w0d(){return u0d(this)};_.a=false;var z9=mdb(yve,'EcoreUtil/ContentTreeIterator',1169);bcb(1380,1169,pue,x0d);_.si=function y0d(a){return PD(a)===PD(this.f)?BD(a,15).Kc():new C6d(BD(a,56))};var x8=mdb(rwe,'ResourceImpl/5',1380);bcb(648,1994,Ove,z0d);_.Hc=function A0d(a){return this.i<=4?pud(this,a):JD(a,49)&&BD(a,49).Zg()==this.a};_.bi=function B0d(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.di=function C0d(a,b){a==0?this.a.b||(this.a.b=true,null):Atd(this,a,b)};_.fi=function D0d(a,b){};_.gi=function E0d(a,b,c){};_.aj=function F0d(){return 2};_.Ai=function G0d(){return this.a};_.bj=function H0d(){return true};_.cj=function I0d(a,b){var c;c=BD(a,49);b=c.wh(this.a,b);return b};_.dj=function J0d(a,b){var c;c=BD(a,49);return c.wh(null,b)};_.ej=function K0d(){return false};_.hi=function L0d(){return true};_.ri=function M0d(a){return KC(m5,Uhe,56,a,0,1)};_.ni=function N0d(){return false};var y8=mdb(rwe,'ResourceImpl/ContentsEList',648);bcb(957,1964,Lie,O0d);_.Zc=function P0d(a){return this.a._h(a)};_.gc=function Q0d(){return this.a.gc()};var A8=mdb(yve,'AbstractSequentialInternalEList/1',957);var K6d,L6d,M6d,N6d;bcb(624,1,{},y1d);var R0d,S0d;var G8=mdb(yve,'BasicExtendedMetaData',624);bcb(1160,1,{},C1d);_.$k=function D1d(){return null};_._k=function E1d(){this.a==-2&&A1d(this,W0d(this.d,this.b));return this.a};_.al=function F1d(){return null};_.bl=function G1d(){return mmb(),mmb(),jmb};_.ne=function H1d(){this.c==Gwe&&B1d(this,_0d(this.d,this.b));return this.c};_.cl=function I1d(){return 0};_.a=-2;_.c=Gwe;var C8=mdb(yve,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1160);bcb(1161,1,{},O1d);_.$k=function P1d(){this.a==(T0d(),R0d)&&J1d(this,V0d(this.f,this.b));return this.a};_._k=function Q1d(){return 0};_.al=function R1d(){this.c==(T0d(),R0d)&&K1d(this,Z0d(this.f,this.b));return this.c};_.bl=function S1d(){!this.d&&L1d(this,$0d(this.f,this.b));return this.d};_.ne=function T1d(){this.e==Gwe&&M1d(this,_0d(this.f,this.b));return this.e};_.cl=function U1d(){this.g==-2&&N1d(this,c1d(this.f,this.b));return this.g};_.e=Gwe;_.g=-2;var D8=mdb(yve,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1161);bcb(1159,1,{},Y1d);_.b=false;_.c=false;var E8=mdb(yve,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1159);bcb(1162,1,{},j2d);_.c=-2;_.e=Gwe;_.f=Gwe;var F8=mdb(yve,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1162);bcb(585,622,Pve,k2d);_.aj=function l2d(){return this.c};_.Fk=function m2d(){return false};_.li=function n2d(a,b){return b};_.c=0;var T8=mdb(yve,'EDataTypeEList',585);var O9=odb(yve,'FeatureMap');bcb(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},u3d);_.Vc=function v3d(a,b){o2d(this,a,BD(b,72))};_.Fc=function w3d(a){return r2d(this,BD(a,72))};_.Yh=function B3d(a){w2d(this,BD(a,72))};_.cj=function M3d(a,b){return O2d(this,BD(a,72),b)};_.dj=function N3d(a,b){return Q2d(this,BD(a,72),b)};_.ii=function P3d(a,b){return W2d(this,a,b)};_.li=function R3d(a,b){return _2d(this,a,BD(b,72))};_._c=function T3d(a,b){return c3d(this,a,BD(b,72))};_.jj=function X3d(a,b){return i3d(this,BD(a,72),b)};_.kj=function Y3d(a,b){return k3d(this,BD(a,72),b)};_.lj=function Z3d(a,b,c){return l3d(this,BD(a,72),BD(b,72),c)};_.oi=function _3d(a,b){return t3d(this,a,BD(b,72))};_.dl=function x3d(a,b){return q2d(this,a,b)};_.Wc=function y3d(a,b){var c,d,e,f,g,h,i,j,k;j=new zud(b.gc());for(e=b.Kc();e.Ob();){d=BD(e.Pb(),72);f=d.ak();if(T6d(this.e,f)){(!f.hi()||!E2d(this,f,d.dd())&&!pud(j,d))&&wtd(j,d)}else{k=S6d(this.e.Tg(),f);c=BD(this.g,119);g=true;for(h=0;h=0){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var H8=mdb(yve,'BasicFeatureMap/FeatureEIterator',410);bcb(662,410,jie,s4d);_.Lk=function t4d(){return true};var I8=mdb(yve,'BasicFeatureMap/ResolvingFeatureEIterator',662);bcb(955,486,Vve,u4d);_.Gi=function v4d(){return this};var M8=mdb(yve,'EContentsEList/1',955);bcb(956,486,Vve,w4d);_.Lk=function x4d(){return false};var N8=mdb(yve,'EContentsEList/2',956);bcb(954,279,Wve,y4d);_.Nk=function z4d(a){};_.Ob=function A4d(){return false};_.Sb=function B4d(){return false};var O8=mdb(yve,'EContentsEList/FeatureIteratorImpl/1',954);bcb(825,585,Pve,C4d);_.ci=function D4d(){this.a=true};_.fj=function E4d(){return this.a};_.Xj=function F4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var S8=mdb(yve,'EDataTypeEList/Unsettable',825);bcb(1849,585,Pve,G4d);_.hi=function H4d(){return true};var V8=mdb(yve,'EDataTypeUniqueEList',1849);bcb(1850,825,Pve,I4d);_.hi=function J4d(){return true};var U8=mdb(yve,'EDataTypeUniqueEList/Unsettable',1850);bcb(139,85,Pve,K4d);_.Ek=function L4d(){return true};_.li=function M4d(a,b){return ILd(this,a,BD(b,56))};var W8=mdb(yve,'EObjectContainmentEList/Resolving',139);bcb(1163,545,Pve,N4d);_.Ek=function O4d(){return true};_.li=function P4d(a,b){return ILd(this,a,BD(b,56))};var X8=mdb(yve,'EObjectContainmentEList/Unsettable/Resolving',1163);bcb(748,16,Pve,Q4d);_.ci=function R4d(){this.a=true};_.fj=function S4d(){return this.a};_.Xj=function T4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var a9=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable',748);bcb(1173,748,Pve,U4d);_.Ek=function V4d(){return true};_.li=function W4d(a,b){return ILd(this,a,BD(b,56))};var _8=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1173);bcb(743,496,Pve,X4d);_.ci=function Y4d(){this.a=true};_.fj=function Z4d(){return this.a};_.Xj=function $4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var c9=mdb(yve,'EObjectEList/Unsettable',743);bcb(328,496,Pve,_4d);_.Ek=function a5d(){return true};_.li=function b5d(a,b){return ILd(this,a,BD(b,56))};var f9=mdb(yve,'EObjectResolvingEList',328);bcb(1641,743,Pve,c5d);_.Ek=function d5d(){return true};_.li=function e5d(a,b){return ILd(this,a,BD(b,56))};var e9=mdb(yve,'EObjectResolvingEList/Unsettable',1641);bcb(1381,1,{},h5d);var f5d;var g9=mdb(yve,'EObjectValidator',1381);bcb(546,496,Pve,i5d);_.zk=function j5d(){return this.d};_.Ak=function k5d(){return this.b};_.bj=function l5d(){return true};_.Dk=function m5d(){return true};_.b=0;var k9=mdb(yve,'EObjectWithInverseEList',546);bcb(1176,546,Pve,n5d);_.Ck=function o5d(){return true};var h9=mdb(yve,'EObjectWithInverseEList/ManyInverse',1176);bcb(625,546,Pve,p5d);_.ci=function q5d(){this.a=true};_.fj=function r5d(){return this.a};_.Xj=function s5d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var j9=mdb(yve,'EObjectWithInverseEList/Unsettable',625);bcb(1175,625,Pve,t5d);_.Ck=function u5d(){return true};var i9=mdb(yve,'EObjectWithInverseEList/Unsettable/ManyInverse',1175);bcb(749,546,Pve,v5d);_.Ek=function w5d(){return true};_.li=function x5d(a,b){return ILd(this,a,BD(b,56))};var o9=mdb(yve,'EObjectWithInverseResolvingEList',749);bcb(31,749,Pve,y5d);_.Ck=function z5d(){return true};var l9=mdb(yve,'EObjectWithInverseResolvingEList/ManyInverse',31);bcb(750,625,Pve,A5d);_.Ek=function B5d(){return true};_.li=function C5d(a,b){return ILd(this,a,BD(b,56))};var n9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable',750);bcb(1174,750,Pve,D5d);_.Ck=function E5d(){return true};var m9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1174);bcb(1164,622,Pve);_.ai=function F5d(){return (this.b&1792)==0};_.ci=function G5d(){this.b|=1};_.Bk=function H5d(){return (this.b&4)!=0};_.bj=function I5d(){return (this.b&40)!=0};_.Ck=function J5d(){return (this.b&16)!=0};_.Dk=function K5d(){return (this.b&8)!=0};_.Ek=function L5d(){return (this.b&Dve)!=0};_.rk=function M5d(){return (this.b&32)!=0};_.Fk=function N5d(){return (this.b&zte)!=0};_.wj=function O5d(a){return !this.d?this.ak().Yj().wj(a):qEd(this.d,a)};_.fj=function P5d(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.hi=function Q5d(){return (this.b&128)!=0};_.Xj=function S5d(){var a;Uxd(this);if((this.b&2)!=0){if(oid(this.e)){a=(this.b&1)!=0;this.b&=-2;GLd(this,new qSd(this.e,2,bLd(this.e.Tg(),this.ak()),a,false))}else{this.b&=-2}}};_.ni=function T5d(){return (this.b&1536)==0};_.b=0;var q9=mdb(yve,'EcoreEList/Generic',1164);bcb(1165,1164,Pve,U5d);_.ak=function V5d(){return this.a};var p9=mdb(yve,'EcoreEList/Dynamic',1165);bcb(747,63,oue,W5d);_.ri=function X5d(a){return izd(this.a.a,a)};var u9=mdb(yve,'EcoreEMap/1',747);bcb(746,85,Pve,Y5d);_.bi=function Z5d(a,b){uAd(this.b,BD(b,133))};_.di=function $5d(a,b){tAd(this.b)};_.ei=function _5d(a,b,c){var d;++(d=this.b,BD(b,133),d).e};_.fi=function a6d(a,b){vAd(this.b,BD(b,133))};_.gi=function b6d(a,b,c){vAd(this.b,BD(c,133));PD(c)===PD(b)&&BD(c,133).Th(CAd(BD(b,133).cd()));uAd(this.b,BD(b,133))};var v9=mdb(yve,'EcoreEMap/DelegateEObjectContainmentEList',746);bcb(1171,151,Ave,c6d);var x9=mdb(yve,'EcoreEMap/Unsettable',1171);bcb(1172,746,Pve,d6d);_.ci=function e6d(){this.a=true};_.fj=function f6d(){return this.a};_.Xj=function g6d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var w9=mdb(yve,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1172);bcb(1168,228,fke,A6d);_.a=false;_.b=false;var A9=mdb(yve,'EcoreUtil/Copier',1168);bcb(745,1,aie,C6d);_.Nb=function D6d(a){Rrb(this,a)};_.Ob=function E6d(){return B6d(this)};_.Pb=function F6d(){var a;B6d(this);a=this.b;this.b=null;return a};_.Qb=function G6d(){this.a.Qb()};var B9=mdb(yve,'EcoreUtil/ProperContentIterator',745);bcb(1382,1381,{},J6d);var H6d;var C9=mdb(yve,'EcoreValidator',1382);var P6d;var N9=odb(yve,'FeatureMapUtil/Validator');bcb(1260,1,{1942:1},U6d);_.rl=function V6d(a){return true};var F9=mdb(yve,'FeatureMapUtil/1',1260);bcb(757,1,{1942:1},Z6d);_.rl=function $6d(a){var b;if(this.c==a)return true;b=DD(Ohb(this.a,a));if(b==null){if(Y6d(this,a)){_6d(this.a,a,(Bcb(),Acb));return true}else{_6d(this.a,a,(Bcb(),zcb));return false}}else{return b==(Bcb(),Acb)}};_.e=false;var W6d;var I9=mdb(yve,'FeatureMapUtil/BasicValidator',757);bcb(758,43,fke,a7d);var H9=mdb(yve,'FeatureMapUtil/BasicValidator/Cache',758);bcb(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},f7d);_.Vc=function g7d(a,b){p2d(this.c,this.b,a,b)};_.Fc=function h7d(a){return q2d(this.c,this.b,a)};_.Wc=function i7d(a,b){return s2d(this.c,this.b,a,b)};_.Gc=function j7d(a){return b7d(this,a)};_.Xh=function k7d(a,b){u2d(this.c,this.b,a,b)};_.lk=function l7d(a,b){return x2d(this.c,this.b,a,b)};_.pi=function m7d(a){return J2d(this.c,this.b,a,false)};_.Zh=function n7d(){return y2d(this.c,this.b)};_.$h=function o7d(){return z2d(this.c,this.b)};_._h=function p7d(a){return A2d(this.c,this.b,a)};_.mk=function q7d(a,b){return c7d(this,a,b)};_.$b=function r7d(){d7d(this)};_.Hc=function s7d(a){return E2d(this.c,this.b,a)};_.Ic=function t7d(a){return G2d(this.c,this.b,a)};_.Xb=function u7d(a){return J2d(this.c,this.b,a,true)};_.Wj=function v7d(a){return this};_.Xc=function w7d(a){return L2d(this.c,this.b,a)};_.dc=function x7d(){return e7d(this)};_.fj=function y7d(){return !R2d(this.c,this.b)};_.Kc=function z7d(){return S2d(this.c,this.b)};_.Yc=function A7d(){return U2d(this.c,this.b)};_.Zc=function B7d(a){return V2d(this.c,this.b,a)};_.ii=function C7d(a,b){return X2d(this.c,this.b,a,b)};_.ji=function D7d(a,b){Y2d(this.c,this.b,a,b)};_.$c=function E7d(a){return Z2d(this.c,this.b,a)};_.Mc=function F7d(a){return $2d(this.c,this.b,a)};_._c=function G7d(a,b){return e3d(this.c,this.b,a,b)};_.Wb=function H7d(a){D2d(this.c,this.b);b7d(this,BD(a,15))};_.gc=function I7d(){return n3d(this.c,this.b)};_.Pc=function J7d(){return o3d(this.c,this.b)};_.Qc=function K7d(a){return q3d(this.c,this.b,a)};_.Ib=function L7d(){var a,b;b=new Hfb;b.a+='[';for(a=y2d(this.c,this.b);b4d(a);){Efb(b,xfb(d4d(a)));b4d(a)&&(b.a+=She,b)}b.a+=']';return b.a};_.Xj=function M7d(){D2d(this.c,this.b)};var J9=mdb(yve,'FeatureMapUtil/FeatureEList',501);bcb(627,36,fve,O7d);_.yi=function P7d(a){return N7d(this,a)};_.Di=function Q7d(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}break}case 3:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=5;b=new zud(2);wtd(b,this.g);wtd(b,a.zi());this.g=b;return true}break}}break}case 5:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.g,14);c.Fc(a.zi());return true}break}}break}case 4:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=1;this.g=a.zi();return true}break}case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=6;h=new zud(2);wtd(h,this.n);wtd(h,a.Bi());this.n=h;g=OC(GC(WD,1),oje,25,15,[this.o,a.Ci()]);this.g=g;return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.n,14);c.Fc(a.Bi());g=BD(this.g,48);d=KC(WD,oje,25,g.length+1,15,1);$fb(g,0,d,0,g.length);d[g.length]=a.Ci();this.g=d;return true}break}}break}}return false};var K9=mdb(yve,'FeatureMapUtil/FeatureENotificationImpl',627);bcb(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},R7d);_.dl=function S7d(a,b){return q2d(this.c,a,b)};_.el=function T7d(a,b,c){return x2d(this.c,a,b,c)};_.fl=function U7d(a,b,c){return C2d(this.c,a,b,c)};_.gl=function V7d(){return this};_.hl=function W7d(a,b){return K2d(this.c,a,b)};_.il=function X7d(a){return BD(J2d(this.c,this.b,a,false),72).ak()};_.jl=function Y7d(a){return BD(J2d(this.c,this.b,a,false),72).dd()};_.kl=function Z7d(){return this.a};_.ll=function $7d(a){return !R2d(this.c,a)};_.ml=function _7d(a,b){f3d(this.c,a,b)};_.nl=function a8d(a){return g3d(this.c,a)};_.ol=function b8d(a){s3d(this.c,a)};var L9=mdb(yve,'FeatureMapUtil/FeatureFeatureMap',552);bcb(1259,1,zve,c8d);_.Wj=function d8d(a){return J2d(this.b,this.a,-1,a)};_.fj=function e8d(){return !R2d(this.b,this.a)};_.Wb=function f8d(a){f3d(this.b,this.a,a)};_.Xj=function g8d(){D2d(this.b,this.a)};var M9=mdb(yve,'FeatureMapUtil/FeatureValue',1259);var h8d,i8d,j8d,k8d,l8d;var Q9=odb(Iwe,'AnyType');bcb(666,60,Tie,n8d);var R9=mdb(Iwe,'InvalidDatatypeValueException',666);var S9=odb(Iwe,Jwe);var T9=odb(Iwe,Kwe);var U9=odb(Iwe,Lwe);var o8d;var q8d;var s8d,t8d,u8d,v8d,w8d,x8d,y8d,z8d,A8d,B8d,C8d,D8d,E8d,F8d,G8d,H8d,I8d,J8d,K8d,L8d,M8d,N8d,O8d,P8d;bcb(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},R8d);_._g=function S8d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;}return bid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function T8d(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new u3d(this,0)),B2d(this.c,a,c);case 1:return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),69)).mk(a,c);case 2:return !this.b&&(this.b=new u3d(this,2)),B2d(this.b,a,c);}return d=BD(XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd(this.zh()),a,c)};_.lh=function U8d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;}return cid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function V8d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;}did(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function W8d(){return Q8d(),s8d};_.Bh=function X8d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;}eid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function Y8d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.c);a.a+=', anyAttribute: ';Dfb(a,this.b);a.a+=')';return a.a};var V9=mdb(Mwe,'AnyTypeImpl',830);bcb(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},_8d);_._g=function a9d(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return bid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function b9d(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return cid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function c9d(a,b){switch(a){case 0:Z8d(this,GD(b));return;case 1:$8d(this,GD(b));return;}did(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function d9d(){return Q8d(),F8d};_.Bh=function e9d(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}eid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function f9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (data: ';Efb(a,this.a);a.a+=', target: ';Efb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var W9=mdb(Mwe,'ProcessingInstructionImpl',667);bcb(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},i9d);_._g=function j9d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true));case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))));case 5:return this.a;}return bid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function k9d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))!=null;case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))))!=null;case 5:return !!this.a;}return cid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function l9d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;case 3:h9d(this,GD(b));return;case 4:h9d(this,h6d(this.a,b));return;case 5:g9d(this,BD(b,148));return;}did(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function m9d(){return Q8d(),H8d};_.Bh=function n9d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;case 3:!this.c&&(this.c=new u3d(this,0));f3d(this.c,(Q8d(),I8d),null);return;case 4:h9d(this,h6d(this.a,null));return;case 5:this.a=null;return;}eid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};var X9=mdb(Mwe,'SimpleAnyTypeImpl',668);bcb(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},o9d);_._g=function p9d(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new u3d(this,0)),this.a;return !this.a&&(this.a=new u3d(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),this.b):(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),FAd(this.b));case 2:return c?(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),this.c):(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),FAd(this.c));case 3:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),L8d));case 4:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),M8d));case 5:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),O8d));case 6:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),P8d));}return bid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function q9d(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new u3d(this,0)),B2d(this.a,a,c);case 1:return !this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),bId(this.b,a,c);case 2:return !this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),bId(this.c,a,c);case 5:return !this.a&&(this.a=new u3d(this,0)),c7d(T2d(this.a,(Q8d(),O8d)),a,c);}return d=BD(XKd((this.j&2)==0?(Q8d(),K8d):(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd((Q8d(),K8d)),a,c)};_.lh=function r9d(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),L8d)));case 4:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),M8d)));case 5:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),O8d)));case 6:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),P8d)));}return cid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function s9d(a,b){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));d3d(this.a,b);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));cId(this.b,b);return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));cId(this.c,b);return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,L8d),BD(b,14));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,M8d),BD(b,14));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,O8d),BD(b,14));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,P8d),BD(b,14));return;}did(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function t9d(){return Q8d(),K8d};_.Bh=function u9d(a){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));Uxd(this.a);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));return;}eid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function v9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.a);a.a+=')';return a.a};var Y9=mdb(Mwe,'XMLTypeDocumentRootImpl',669);bcb(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},U9d);_.Ih=function V9d(a,b){switch(a.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return b==null?null:fcb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return GD(b);case 6:return C9d(BD(b,190));case 12:case 47:case 49:case 11:return Vmd(this,a,b);case 13:return b==null?null:qgb(BD(b,240));case 15:case 14:return b==null?null:D9d(Edb(ED(b)));case 17:return E9d((Q8d(),b));case 18:return E9d(b);case 21:case 20:return b==null?null:F9d(BD(b,155).a);case 27:return G9d(BD(b,190));case 30:return H9d((Q8d(),BD(b,15)));case 31:return H9d(BD(b,15));case 40:return K9d((Q8d(),b));case 42:return I9d((Q8d(),b));case 43:return I9d(b);case 59:case 48:return J9d((Q8d(),b));default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function W9d(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=bKd(a),c?HLd(c.Mh(),a):-1)),a.G){case 0:return b=new R8d,b;case 1:return d=new _8d,d;case 2:return e=new i9d,e;case 3:return f=new o9d,f;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function X9d(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.yj()){case 5:case 52:case 4:return b;case 6:return L9d(b);case 8:case 7:return b==null?null:B9d(b);case 9:return b==null?null:Scb(Icb((d=Qge(b,true),d.length>0&&(BCb(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),-128,127)<<24>>24);case 10:return b==null?null:Scb(Icb((e=Qge(b,true),e.length>0&&(BCb(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e),-128,127)<<24>>24);case 11:return GD(Wmd(this,(Q8d(),w8d),b));case 12:return GD(Wmd(this,(Q8d(),x8d),b));case 13:return b==null?null:new tgb(Qge(b,true));case 15:case 14:return M9d(b);case 16:return GD(Wmd(this,(Q8d(),y8d),b));case 17:return N9d((Q8d(),b));case 18:return N9d(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Qge(b,true);case 21:case 20:return O9d(b);case 22:return GD(Wmd(this,(Q8d(),z8d),b));case 23:return GD(Wmd(this,(Q8d(),A8d),b));case 24:return GD(Wmd(this,(Q8d(),B8d),b));case 25:return GD(Wmd(this,(Q8d(),C8d),b));case 26:return GD(Wmd(this,(Q8d(),D8d),b));case 27:return P9d(b);case 30:return Q9d((Q8d(),b));case 31:return Q9d(b);case 32:return b==null?null:meb(Icb((k=Qge(b,true),k.length>0&&(BCb(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k),Rie,Ohe));case 33:return b==null?null:new Ygb((l=Qge(b,true),l.length>0&&(BCb(0,l.length),l.charCodeAt(0)==43)?l.substr(1):l));case 34:return b==null?null:meb(Icb((m=Qge(b,true),m.length>0&&(BCb(0,m.length),m.charCodeAt(0)==43)?m.substr(1):m),Rie,Ohe));case 36:return b==null?null:Aeb(Jcb((n=Qge(b,true),n.length>0&&(BCb(0,n.length),n.charCodeAt(0)==43)?n.substr(1):n)));case 37:return b==null?null:Aeb(Jcb((o=Qge(b,true),o.length>0&&(BCb(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o)));case 40:return T9d((Q8d(),b));case 42:return R9d((Q8d(),b));case 43:return R9d(b);case 44:return b==null?null:new Ygb((p=Qge(b,true),p.length>0&&(BCb(0,p.length),p.charCodeAt(0)==43)?p.substr(1):p));case 45:return b==null?null:new Ygb((q=Qge(b,true),q.length>0&&(BCb(0,q.length),q.charCodeAt(0)==43)?q.substr(1):q));case 46:return Qge(b,false);case 47:return GD(Wmd(this,(Q8d(),E8d),b));case 59:case 48:return S9d((Q8d(),b));case 49:return GD(Wmd(this,(Q8d(),G8d),b));case 50:return b==null?null:Web(Icb((r=Qge(b,true),r.length>0&&(BCb(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),awe,32767)<<16>>16);case 51:return b==null?null:Web(Icb((f=Qge(b,true),f.length>0&&(BCb(0,f.length),f.charCodeAt(0)==43)?f.substr(1):f),awe,32767)<<16>>16);case 53:return GD(Wmd(this,(Q8d(),J8d),b));case 55:return b==null?null:Web(Icb((g=Qge(b,true),g.length>0&&(BCb(0,g.length),g.charCodeAt(0)==43)?g.substr(1):g),awe,32767)<<16>>16);case 56:return b==null?null:Web(Icb((h=Qge(b,true),h.length>0&&(BCb(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),awe,32767)<<16>>16);case 57:return b==null?null:Aeb(Jcb((i=Qge(b,true),i.length>0&&(BCb(0,i.length),i.charCodeAt(0)==43)?i.substr(1):i)));case 58:return b==null?null:Aeb(Jcb((j=Qge(b,true),j.length>0&&(BCb(0,j.length),j.charCodeAt(0)==43)?j.substr(1):j)));case 60:return b==null?null:meb(Icb((c=Qge(b,true),c.length>0&&(BCb(0,c.length),c.charCodeAt(0)==43)?c.substr(1):c),Rie,Ohe));case 61:return b==null?null:meb(Icb(Qge(b,true),Rie,Ohe));default:throw vbb(new Wdb(tte+a.ne()+ute));}};var w9d,x9d,y9d,z9d;var Z9=mdb(Mwe,'XMLTypeFactoryImpl',1919);bcb(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},cae);_.N=false;_.O=false;var Z9d=false;var Yab=mdb(Mwe,'XMLTypePackageImpl',586);bcb(1852,1,{837:1},fae);_._j=function gae(){return Uge(),Tge};var iab=mdb(Mwe,'XMLTypePackageImpl/1',1852);bcb(1861,1,nwe,hae);_.wj=function iae(a){return ND(a)};_.xj=function jae(a){return KC(ZI,nie,2,a,6,1)};var $9=mdb(Mwe,'XMLTypePackageImpl/10',1861);bcb(1862,1,nwe,kae);_.wj=function lae(a){return ND(a)};_.xj=function mae(a){return KC(ZI,nie,2,a,6,1)};var _9=mdb(Mwe,'XMLTypePackageImpl/11',1862);bcb(1863,1,nwe,nae);_.wj=function oae(a){return ND(a)};_.xj=function pae(a){return KC(ZI,nie,2,a,6,1)};var aab=mdb(Mwe,'XMLTypePackageImpl/12',1863);bcb(1864,1,nwe,qae);_.wj=function rae(a){return LD(a)};_.xj=function sae(a){return KC(BI,nie,333,a,7,1)};var bab=mdb(Mwe,'XMLTypePackageImpl/13',1864);bcb(1865,1,nwe,tae);_.wj=function uae(a){return ND(a)};_.xj=function vae(a){return KC(ZI,nie,2,a,6,1)};var cab=mdb(Mwe,'XMLTypePackageImpl/14',1865);bcb(1866,1,nwe,wae);_.wj=function xae(a){return JD(a,15)};_.xj=function yae(a){return KC(yK,eme,15,a,0,1)};var dab=mdb(Mwe,'XMLTypePackageImpl/15',1866);bcb(1867,1,nwe,zae);_.wj=function Aae(a){return JD(a,15)};_.xj=function Bae(a){return KC(yK,eme,15,a,0,1)};var eab=mdb(Mwe,'XMLTypePackageImpl/16',1867);bcb(1868,1,nwe,Cae);_.wj=function Dae(a){return ND(a)};_.xj=function Eae(a){return KC(ZI,nie,2,a,6,1)};var fab=mdb(Mwe,'XMLTypePackageImpl/17',1868);bcb(1869,1,nwe,Fae);_.wj=function Gae(a){return JD(a,155)};_.xj=function Hae(a){return KC(FI,nie,155,a,0,1)};var gab=mdb(Mwe,'XMLTypePackageImpl/18',1869);bcb(1870,1,nwe,Iae);_.wj=function Jae(a){return ND(a)};_.xj=function Kae(a){return KC(ZI,nie,2,a,6,1)};var hab=mdb(Mwe,'XMLTypePackageImpl/19',1870);bcb(1853,1,nwe,Lae);_.wj=function Mae(a){return JD(a,843)};_.xj=function Nae(a){return KC(Q9,Uhe,843,a,0,1)};var tab=mdb(Mwe,'XMLTypePackageImpl/2',1853);bcb(1871,1,nwe,Oae);_.wj=function Pae(a){return ND(a)};_.xj=function Qae(a){return KC(ZI,nie,2,a,6,1)};var jab=mdb(Mwe,'XMLTypePackageImpl/20',1871);bcb(1872,1,nwe,Rae);_.wj=function Sae(a){return ND(a)};_.xj=function Tae(a){return KC(ZI,nie,2,a,6,1)};var kab=mdb(Mwe,'XMLTypePackageImpl/21',1872);bcb(1873,1,nwe,Uae);_.wj=function Vae(a){return ND(a)};_.xj=function Wae(a){return KC(ZI,nie,2,a,6,1)};var lab=mdb(Mwe,'XMLTypePackageImpl/22',1873);bcb(1874,1,nwe,Xae);_.wj=function Yae(a){return ND(a)};_.xj=function Zae(a){return KC(ZI,nie,2,a,6,1)};var mab=mdb(Mwe,'XMLTypePackageImpl/23',1874);bcb(1875,1,nwe,$ae);_.wj=function _ae(a){return JD(a,190)};_.xj=function abe(a){return KC(SD,nie,190,a,0,2)};var nab=mdb(Mwe,'XMLTypePackageImpl/24',1875);bcb(1876,1,nwe,bbe);_.wj=function cbe(a){return ND(a)};_.xj=function dbe(a){return KC(ZI,nie,2,a,6,1)};var oab=mdb(Mwe,'XMLTypePackageImpl/25',1876);bcb(1877,1,nwe,ebe);_.wj=function fbe(a){return ND(a)};_.xj=function gbe(a){return KC(ZI,nie,2,a,6,1)};var pab=mdb(Mwe,'XMLTypePackageImpl/26',1877);bcb(1878,1,nwe,hbe);_.wj=function ibe(a){return JD(a,15)};_.xj=function jbe(a){return KC(yK,eme,15,a,0,1)};var qab=mdb(Mwe,'XMLTypePackageImpl/27',1878);bcb(1879,1,nwe,kbe);_.wj=function lbe(a){return JD(a,15)};_.xj=function mbe(a){return KC(yK,eme,15,a,0,1)};var rab=mdb(Mwe,'XMLTypePackageImpl/28',1879);bcb(1880,1,nwe,nbe);_.wj=function obe(a){return ND(a)};_.xj=function pbe(a){return KC(ZI,nie,2,a,6,1)};var sab=mdb(Mwe,'XMLTypePackageImpl/29',1880);bcb(1854,1,nwe,qbe);_.wj=function rbe(a){return JD(a,667)};_.xj=function sbe(a){return KC(S9,Uhe,2021,a,0,1)};var Eab=mdb(Mwe,'XMLTypePackageImpl/3',1854);bcb(1881,1,nwe,tbe);_.wj=function ube(a){return JD(a,19)};_.xj=function vbe(a){return KC(JI,nie,19,a,0,1)};var uab=mdb(Mwe,'XMLTypePackageImpl/30',1881);bcb(1882,1,nwe,wbe);_.wj=function xbe(a){return ND(a)};_.xj=function ybe(a){return KC(ZI,nie,2,a,6,1)};var vab=mdb(Mwe,'XMLTypePackageImpl/31',1882);bcb(1883,1,nwe,zbe);_.wj=function Abe(a){return JD(a,162)};_.xj=function Bbe(a){return KC(MI,nie,162,a,0,1)};var wab=mdb(Mwe,'XMLTypePackageImpl/32',1883);bcb(1884,1,nwe,Cbe);_.wj=function Dbe(a){return ND(a)};_.xj=function Ebe(a){return KC(ZI,nie,2,a,6,1)};var xab=mdb(Mwe,'XMLTypePackageImpl/33',1884);bcb(1885,1,nwe,Fbe);_.wj=function Gbe(a){return ND(a)};_.xj=function Hbe(a){return KC(ZI,nie,2,a,6,1)};var yab=mdb(Mwe,'XMLTypePackageImpl/34',1885);bcb(1886,1,nwe,Ibe);_.wj=function Jbe(a){return ND(a)};_.xj=function Kbe(a){return KC(ZI,nie,2,a,6,1)};var zab=mdb(Mwe,'XMLTypePackageImpl/35',1886);bcb(1887,1,nwe,Lbe);_.wj=function Mbe(a){return ND(a)};_.xj=function Nbe(a){return KC(ZI,nie,2,a,6,1)};var Aab=mdb(Mwe,'XMLTypePackageImpl/36',1887);bcb(1888,1,nwe,Obe);_.wj=function Pbe(a){return JD(a,15)};_.xj=function Qbe(a){return KC(yK,eme,15,a,0,1)};var Bab=mdb(Mwe,'XMLTypePackageImpl/37',1888);bcb(1889,1,nwe,Rbe);_.wj=function Sbe(a){return JD(a,15)};_.xj=function Tbe(a){return KC(yK,eme,15,a,0,1)};var Cab=mdb(Mwe,'XMLTypePackageImpl/38',1889);bcb(1890,1,nwe,Ube);_.wj=function Vbe(a){return ND(a)};_.xj=function Wbe(a){return KC(ZI,nie,2,a,6,1)};var Dab=mdb(Mwe,'XMLTypePackageImpl/39',1890);bcb(1855,1,nwe,Xbe);_.wj=function Ybe(a){return JD(a,668)};_.xj=function Zbe(a){return KC(T9,Uhe,2022,a,0,1)};var Pab=mdb(Mwe,'XMLTypePackageImpl/4',1855);bcb(1891,1,nwe,$be);_.wj=function _be(a){return ND(a)};_.xj=function ace(a){return KC(ZI,nie,2,a,6,1)};var Fab=mdb(Mwe,'XMLTypePackageImpl/40',1891);bcb(1892,1,nwe,bce);_.wj=function cce(a){return ND(a)};_.xj=function dce(a){return KC(ZI,nie,2,a,6,1)};var Gab=mdb(Mwe,'XMLTypePackageImpl/41',1892);bcb(1893,1,nwe,ece);_.wj=function fce(a){return ND(a)};_.xj=function gce(a){return KC(ZI,nie,2,a,6,1)};var Hab=mdb(Mwe,'XMLTypePackageImpl/42',1893);bcb(1894,1,nwe,hce);_.wj=function ice(a){return ND(a)};_.xj=function jce(a){return KC(ZI,nie,2,a,6,1)};var Iab=mdb(Mwe,'XMLTypePackageImpl/43',1894);bcb(1895,1,nwe,kce);_.wj=function lce(a){return ND(a)};_.xj=function mce(a){return KC(ZI,nie,2,a,6,1)};var Jab=mdb(Mwe,'XMLTypePackageImpl/44',1895);bcb(1896,1,nwe,nce);_.wj=function oce(a){return JD(a,184)};_.xj=function pce(a){return KC(UI,nie,184,a,0,1)};var Kab=mdb(Mwe,'XMLTypePackageImpl/45',1896);bcb(1897,1,nwe,qce);_.wj=function rce(a){return ND(a)};_.xj=function sce(a){return KC(ZI,nie,2,a,6,1)};var Lab=mdb(Mwe,'XMLTypePackageImpl/46',1897);bcb(1898,1,nwe,tce);_.wj=function uce(a){return ND(a)};_.xj=function vce(a){return KC(ZI,nie,2,a,6,1)};var Mab=mdb(Mwe,'XMLTypePackageImpl/47',1898);bcb(1899,1,nwe,wce);_.wj=function xce(a){return ND(a)};_.xj=function yce(a){return KC(ZI,nie,2,a,6,1)};var Nab=mdb(Mwe,'XMLTypePackageImpl/48',1899);bcb(nje,1,nwe,zce);_.wj=function Ace(a){return JD(a,184)};_.xj=function Bce(a){return KC(UI,nie,184,a,0,1)};var Oab=mdb(Mwe,'XMLTypePackageImpl/49',nje);bcb(1856,1,nwe,Cce);_.wj=function Dce(a){return JD(a,669)};_.xj=function Ece(a){return KC(U9,Uhe,2023,a,0,1)};var Tab=mdb(Mwe,'XMLTypePackageImpl/5',1856);bcb(1901,1,nwe,Fce);_.wj=function Gce(a){return JD(a,162)};_.xj=function Hce(a){return KC(MI,nie,162,a,0,1)};var Qab=mdb(Mwe,'XMLTypePackageImpl/50',1901);bcb(1902,1,nwe,Ice);_.wj=function Jce(a){return ND(a)};_.xj=function Kce(a){return KC(ZI,nie,2,a,6,1)};var Rab=mdb(Mwe,'XMLTypePackageImpl/51',1902);bcb(1903,1,nwe,Lce);_.wj=function Mce(a){return JD(a,19)};_.xj=function Nce(a){return KC(JI,nie,19,a,0,1)};var Sab=mdb(Mwe,'XMLTypePackageImpl/52',1903);bcb(1857,1,nwe,Oce);_.wj=function Pce(a){return ND(a)};_.xj=function Qce(a){return KC(ZI,nie,2,a,6,1)};var Uab=mdb(Mwe,'XMLTypePackageImpl/6',1857);bcb(1858,1,nwe,Rce);_.wj=function Sce(a){return JD(a,190)};_.xj=function Tce(a){return KC(SD,nie,190,a,0,2)};var Vab=mdb(Mwe,'XMLTypePackageImpl/7',1858);bcb(1859,1,nwe,Uce);_.wj=function Vce(a){return KD(a)};_.xj=function Wce(a){return KC(wI,nie,476,a,8,1)};var Wab=mdb(Mwe,'XMLTypePackageImpl/8',1859);bcb(1860,1,nwe,Xce);_.wj=function Yce(a){return JD(a,217)};_.xj=function Zce(a){return KC(xI,nie,217,a,0,1)};var Xab=mdb(Mwe,'XMLTypePackageImpl/9',1860);var $ce,_ce;var fde,gde;var kde;bcb(50,60,Tie,mde);var Zab=mdb(kxe,'RegEx/ParseException',50);bcb(820,1,{},ude);_.sl=function vde(a){return ac*16)throw vbb(new mde(tvd((h0d(),Uue))));c=c*16+e}while(true);if(this.a!=125)throw vbb(new mde(tvd((h0d(),Vue))));if(c>lxe)throw vbb(new mde(tvd((h0d(),Wue))));a=c}else{e=0;if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=e;nde(this);if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=c*16+e;a=c}break;case 117:d=0;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;a=b;break;case 118:nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;if(b>lxe)throw vbb(new mde(tvd((h0d(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw vbb(new mde(tvd((h0d(),Xue))));}return a};_.ul=function xde(a){var b,c;switch(a){case 100:c=(this.e&32)==32?Kfe('Nd',true):(wfe(),cfe);break;case 68:c=(this.e&32)==32?Kfe('Nd',false):(wfe(),jfe);break;case 119:c=(this.e&32)==32?Kfe('IsWord',true):(wfe(),sfe);break;case 87:c=(this.e&32)==32?Kfe('IsWord',false):(wfe(),lfe);break;case 115:c=(this.e&32)==32?Kfe('IsSpace',true):(wfe(),nfe);break;case 83:c=(this.e&32)==32?Kfe('IsSpace',false):(wfe(),kfe);break;default:throw vbb(new hz((b=a,mxe+b.toString(16))));}return c};_.vl=function zde(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;nde(this);b=null;if(this.c==0&&this.a==94){nde(this);if(a){k=(wfe(),wfe(),++vfe,new $fe(5))}else{b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);k=(null,++vfe,new $fe(4))}}else{k=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(k,this.ul(c));d=true;break;case 105:case 73:case 99:case 67:c=this.Ll(k,c);c<0&&(d=true);break;case 112:case 80:l=tde(this,c);if(!l)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(k,l);d=true;break;default:c=this.tl();}}else if(m==20){g=gfb(this.i,58,this.d);if(g<0)throw vbb(new mde(tvd((h0d(),Jue))));h=true;if(bfb(this.i,this.d)==94){++this.d;h=false}f=qfb(this.i,this.d,g);i=Lfe(f,h,(this.e&512)==512);if(!i)throw vbb(new mde(tvd((h0d(),Lue))));Xfe(k,i);d=true;if(g+1>=this.j||bfb(this.i,g+1)!=93)throw vbb(new mde(tvd((h0d(),Jue))));this.d=g+2}nde(this);if(!d){if(this.c!=0||this.a!=45){Ufe(k,c,c)}else{nde(this);if((m=this.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(m==0&&this.a==93){Ufe(k,c,c);Ufe(k,45,45)}else{j=this.a;m==10&&(j=this.tl());nde(this);Ufe(k,c,j)}}}(this.e&zte)==zte&&this.c==0&&this.a==44&&nde(this)}if(this.c==1)throw vbb(new mde(tvd((h0d(),Kue))));if(b){Zfe(b,k);k=b}Yfe(k);Vfe(k);this.b=0;nde(this);return k};_.wl=function Ade(){var a,b,c,d;c=this.vl(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){nde(this);if(this.c!=9)throw vbb(new mde(tvd((h0d(),Que))));b=this.vl(false);if(d==4)Xfe(c,b);else if(a==45)Zfe(c,b);else if(a==38)Wfe(c,b);else throw vbb(new hz('ASSERT'))}else{throw vbb(new mde(tvd((h0d(),Rue))))}}nde(this);return c};_.xl=function Bde(){var a,b;a=this.a-48;b=(wfe(),wfe(),++vfe,new Hge(12,null,a));!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(a));nde(this);return b};_.yl=function Cde(){nde(this);return wfe(),ofe};_.zl=function Dde(){nde(this);return wfe(),mfe};_.Al=function Ede(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Bl=function Fde(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Cl=function Gde(){nde(this);return Ife()};_.Dl=function Hde(){nde(this);return wfe(),qfe};_.El=function Ide(){nde(this);return wfe(),tfe};_.Fl=function Jde(){var a;if(this.d>=this.j||((a=bfb(this.i,this.d++))&65504)!=64)throw vbb(new mde(tvd((h0d(),Eue))));nde(this);return wfe(),wfe(),++vfe,new ige(0,a-64)};_.Gl=function Kde(){nde(this);return Jfe()};_.Hl=function Lde(){nde(this);return wfe(),ufe};_.Il=function Mde(){var a;a=(wfe(),wfe(),++vfe,new ige(0,105));nde(this);return a};_.Jl=function Nde(){nde(this);return wfe(),rfe};_.Kl=function Ode(){nde(this);return wfe(),pfe};_.Ll=function Pde(a,b){return this.tl()};_.Ml=function Qde(){nde(this);return wfe(),hfe};_.Nl=function Rde(){var a,b,c,d,e;if(this.d+1>=this.j)throw vbb(new mde(tvd((h0d(),Bue))));d=-1;b=null;a=bfb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(d));++this.d;if(bfb(this.i,this.d)!=41)throw vbb(new mde(tvd((h0d(),yue))));++this.d}else{a==63&&--this.d;nde(this);b=qde(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));break;default:throw vbb(new mde(tvd((h0d(),Cue))));}}nde(this);e=rde(this);c=null;if(e.e==2){if(e.em()!=2)throw vbb(new mde(tvd((h0d(),Due))));c=e.am(1);e=e.am(0)}if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return wfe(),wfe(),++vfe,new vge(d,b,e,c)};_.Ol=function Sde(){nde(this);return wfe(),ife};_.Pl=function Tde(){var a;nde(this);a=Cfe(24,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ql=function Ude(){var a;nde(this);a=Cfe(20,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Rl=function Vde(){var a;nde(this);a=Cfe(22,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Sl=function Wde(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d=this.j)throw vbb(new mde(tvd((h0d(),zue))));if(b==45){++this.d;while(this.d=this.j)throw vbb(new mde(tvd((h0d(),zue))))}if(b==58){++this.d;nde(this);d=Dfe(rde(this),a,c);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this)}else if(b==41){++this.d;nde(this);d=Dfe(rde(this),a,c)}else throw vbb(new mde(tvd((h0d(),Aue))));return d};_.Tl=function Xde(){var a;nde(this);a=Cfe(21,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ul=function Yde(){var a;nde(this);a=Cfe(23,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Vl=function Zde(){var a,b;nde(this);a=this.f++;b=Efe(rde(this),a);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return b};_.Wl=function $de(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Xl=function _de(a){nde(this);if(this.c==5){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(9,a)))}else return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function aee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));if(this.c==5){nde(this);Kge(b,(null,ffe));Kge(b,a)}else{Kge(b,a);Kge(b,(null,ffe))}return b};_.Zl=function bee(a){nde(this);if(this.c==5){nde(this);return wfe(),wfe(),++vfe,new lge(9,a)}else return wfe(),wfe(),++vfe,new lge(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var bbb=mdb(kxe,'RegEx/RegexParser',820);bcb(1824,820,{},hee);_.sl=function iee(a){return false};_.tl=function jee(){return eee(this)};_.ul=function lee(a){return fee(a)};_.vl=function mee(a){return gee(this)};_.wl=function nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.xl=function oee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.yl=function pee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.zl=function qee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Al=function ree(){nde(this);return fee(67)};_.Bl=function see(){nde(this);return fee(73)};_.Cl=function tee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Dl=function uee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.El=function vee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Fl=function wee(){nde(this);return fee(99)};_.Gl=function xee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Hl=function yee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Il=function zee(){nde(this);return fee(105)};_.Jl=function Aee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Kl=function Bee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ll=function Cee(a,b){return Xfe(a,fee(b)),-1};_.Ml=function Dee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,94)};_.Nl=function Eee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ol=function Fee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,36)};_.Pl=function Gee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ql=function Hee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Rl=function Iee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Sl=function Jee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Tl=function Kee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ul=function Lee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Vl=function Mee(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Wl=function Nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Xl=function Oee(a){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function Pee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,a);Kge(b,(null,ffe));return b};_.Zl=function Qee(a){nde(this);return wfe(),wfe(),++vfe,new lge(3,a)};var cee=null,dee=null;var $ab=mdb(kxe,'RegEx/ParserForXMLSchema',1824);bcb(117,1,yxe,xfe);_.$l=function yfe(a){throw vbb(new hz('Not supported.'))};_._l=function Gfe(){return -1};_.am=function Hfe(a){return null};_.bm=function Mfe(){return null};_.cm=function Pfe(a){};_.dm=function Qfe(a){};_.em=function Rfe(){return 0};_.Ib=function Sfe(){return this.fm(0)};_.fm=function Tfe(a){return this.e==11?'.':''};_.e=0;var Yee,Zee,$ee,_ee,afe,bfe=null,cfe,dfe=null,efe,ffe,gfe=null,hfe,ife,jfe,kfe,lfe,mfe,nfe,ofe,pfe,qfe,rfe,sfe,tfe,ufe,vfe=0;var lbb=mdb(kxe,'RegEx/Token',117);bcb(136,117,{3:1,136:1,117:1},$fe);_.fm=function bge(a){var b,c,d;if(this.e==4){if(this==efe)c='.';else if(this==cfe)c='\\d';else if(this==sfe)c='\\w';else if(this==nfe)c='\\s';else{d=new Hfb;d.a+='[';for(b=0;b0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==jfe)c='\\D';else if(this==lfe)c='\\W';else if(this==kfe)c='\\S';else{d=new Hfb;d.a+='[^';for(b=0;b0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var _ab=mdb(kxe,'RegEx/RangeToken',136);bcb(584,1,{584:1},cge);_.a=0;var abb=mdb(kxe,'RegEx/RegexParser/ReferencePosition',584);bcb(583,1,{3:1,583:1},ege);_.Fb=function fge(a){var b;if(a==null)return false;if(!JD(a,583))return false;b=BD(a,583);return dfb(this.b,b.b)&&this.a==b.a};_.Hb=function gge(){return LCb(this.b+'/'+See(this.a))};_.Ib=function hge(){return this.c.fm(this.a)};_.a=0;var cbb=mdb(kxe,'RegEx/RegularExpression',583);bcb(223,117,yxe,ige);_._l=function jge(){return this.a};_.fm=function kge(a){var b,c,d;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:d='\\'+HD(this.a&aje);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(this.a>=Tje){c=(b=this.a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+HD(this.a&aje);}break;case 8:this==hfe||this==ife?(d=''+HD(this.a&aje)):(d='\\'+HD(this.a&aje));break;default:d=null;}return d};_.a=0;var dbb=mdb(kxe,'RegEx/Token/CharToken',223);bcb(309,117,yxe,lge);_.am=function mge(a){return this.a};_.cm=function nge(a){this.b=a};_.dm=function oge(a){this.c=a};_.em=function pge(){return 1};_.fm=function qge(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.fm(a)+'*'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}'}else throw vbb(new hz('Token#toString(): CLOSURE '+this.c+She+this.b))}else{if(this.c<0&&this.b<0){b=this.a.fm(a)+'*?'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}?'}else throw vbb(new hz('Token#toString(): NONGREEDYCLOSURE '+this.c+She+this.b))}return b};_.b=0;_.c=0;var ebb=mdb(kxe,'RegEx/Token/ClosureToken',309);bcb(821,117,yxe,rge);_.am=function sge(a){return a==0?this.a:this.b};_.em=function tge(){return 2};_.fm=function uge(a){var b;this.b.e==3&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+'):this.b.e==9&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+?'):(b=this.a.fm(a)+(''+this.b.fm(a)));return b};var fbb=mdb(kxe,'RegEx/Token/ConcatToken',821);bcb(1822,117,yxe,vge);_.am=function wge(a){if(a==0)return this.d;if(a==1)return this.b;throw vbb(new hz('Internal Error: '+a))};_.em=function xge(){return !this.b?1:2};_.fm=function yge(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var gbb=mdb(kxe,'RegEx/Token/ConditionToken',1822);bcb(1823,117,yxe,zge);_.am=function Age(a){return this.b};_.em=function Bge(){return 1};_.fm=function Cge(a){return '(?'+(this.a==0?'':See(this.a))+(this.c==0?'':See(this.c))+':'+this.b.fm(a)+')'};_.a=0;_.c=0;var hbb=mdb(kxe,'RegEx/Token/ModifierToken',1823);bcb(822,117,yxe,Dge);_.am=function Ege(a){return this.a};_.em=function Fge(){return 1};_.fm=function Gge(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.fm(a)+')'):(b='('+this.a.fm(a)+')');break;case 20:b='(?='+this.a.fm(a)+')';break;case 21:b='(?!'+this.a.fm(a)+')';break;case 22:b='(?<='+this.a.fm(a)+')';break;case 23:b='(?'+this.a.fm(a)+')';}return b};_.b=0;var ibb=mdb(kxe,'RegEx/Token/ParenToken',822);bcb(521,117,{3:1,117:1,521:1},Hge);_.bm=function Ige(){return this.b};_.fm=function Jge(a){return this.e==12?'\\'+this.a:Wee(this.b)};_.a=0;var jbb=mdb(kxe,'RegEx/Token/StringToken',521);bcb(465,117,yxe,Lge);_.$l=function Mge(a){Kge(this,a)};_.am=function Nge(a){return BD(Uvb(this.a,a),117)};_.em=function Oge(){return !this.a?0:this.a.a.c.length};_.fm=function Pge(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=BD(Uvb(this.a,0),117);c=BD(Uvb(this.a,1),117);c.e==3&&c.am(0)==b?(e=b.fm(a)+'+'):c.e==9&&c.am(0)==b?(e=b.fm(a)+'+?'):(e=b.fm(a)+(''+c.fm(a)))}else{f=new Hfb;for(d=0;d=this.c.b:this.a<=this.c.b};_.Sb=function whe(){return this.b>0};_.Tb=function yhe(){return this.b};_.Vb=function Ahe(){return this.b-1};_.Qb=function Bhe(){throw vbb(new cgb(Exe))};_.a=0;_.b=0;var pbb=mdb(Bxe,'ExclusiveRange/RangeIterator',254);var TD=pdb(Fve,'C');var WD=pdb(Ive,'I');var sbb=pdb(Khe,'Z');var XD=pdb(Jve,'J');var SD=pdb(Eve,'B');var UD=pdb(Gve,'D');var VD=pdb(Hve,'F');var rbb=pdb(Kve,'S');var h1=odb('org.eclipse.elk.core.labels','ILabelManager');var O4=odb(Tte,'DiagnosticChain');var u8=odb(pwe,'ResourceSet');var V4=mdb(Tte,'InvocationTargetException',null);var Ihe=(Az(),Dz);var gwtOnLoad=gwtOnLoad=Zbb;Xbb(hcb);$bb('permProps',[[[Fxe,Gxe],[Hxe,'gecko1_8']],[[Fxe,Gxe],[Hxe,'ie10']],[[Fxe,Gxe],[Hxe,'ie8']],[[Fxe,Gxe],[Hxe,'ie9']],[[Fxe,Gxe],[Hxe,'safari']]]); +// -------------- RUN GWT INITIALIZATION CODE -------------- +gwtOnLoad(null, 'elk', null); + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],3:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/******************************************************************************* + * Copyright (c) 2021 Kiel University and others. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = require('./elk-api.js').default; + +var ELKNode = function (_ELK) { + _inherits(ELKNode, _ELK); + + function ELKNode() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, ELKNode); + + var optionsClone = Object.assign({}, options); + + var workerThreadsExist = false; + try { + require.resolve('web-worker'); + workerThreadsExist = true; + } catch (e) {} + + // user requested a worker + if (options.workerUrl) { + if (workerThreadsExist) { + var Worker = require('web-worker'); + optionsClone.workerFactory = function (url) { + return new Worker(url); + }; + } else { + console.warn('Web worker requested but \'web-worker\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version.'); + } + } + + // unless no other workerFactory is registered, use the fake worker + if (!optionsClone.workerFactory) { + var _require = require('./elk-worker.min.js'), + _Worker = _require.Worker; + + optionsClone.workerFactory = function (url) { + return new _Worker(url); + }; + } + + return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); + } + + return ELKNode; +}(ELK); + +Object.defineProperty(module.exports, "__esModule", { + value: true +}); +module.exports = ELKNode; +ELKNode.default = ELKNode; +},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(require,module,exports){ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +module.exports = Worker; +},{}]},{},[3])(3) +}); + + +/***/ }), + +/***/ 83209: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(99794); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(43349); +/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17295); +/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(30381); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20683); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(70277); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(39354); +/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(91518); + + + + + + + + + + + + + + + + + + + + +const findCommonAncestor = (id1, id2, treeData) => { + const { parentById } = treeData; + const visited = /* @__PURE__ */ new Set(); + let currentId = id1; + while (currentId) { + visited.add(currentId); + if (currentId === id2) { + return currentId; + } + currentId = parentById[currentId]; + } + currentId = id2; + while (currentId) { + if (visited.has(currentId)) { + return currentId; + } + currentId = parentById[currentId]; + } + return "root"; +}; +const elk = new (elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1___default())(); +const portPos = {}; +const conf = {}; +let nodeDb = {}; +const addVertices = function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) { + const svg = root.select(`[id="${svgId}"]`); + const nodes = svg.insert("g").attr("class", "nodes"); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + const styles2 = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.a)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + const labelData = { width: 0, height: 0 }; + if ((0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.e)((0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.g)().flowchart.htmlLabels)) { + const node2 = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `` + ) + }; + vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_10__/* .addHtmlLabel */ .a)(svg, node2).node(); + const bbox = vertexNode.getBBox(); + labelData.width = bbox.width; + labelData.height = bbox.height; + labelData.labelNode = vertexNode; + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles2.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.c.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + const bbox = vertexNode.getBBox(); + labelData.width = bbox.width; + labelData.height = bbox.height; + labelData.labelNode = vertexNode; + } + const ports = [ + { + id: vertex.id + "-west", + layoutOptions: { + "port.side": "WEST" + } + }, + { + id: vertex.id + "-east", + layoutOptions: { + "port.side": "EAST" + } + }, + { + id: vertex.id + "-south", + layoutOptions: { + "port.side": "SOUTH" + } + }, + { + id: vertex.id + "-north", + layoutOptions: { + "port.side": "NORTH" + } + } + ]; + let radious = 0; + let _shape = ""; + let layoutOptions = {}; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + layoutOptions = { + portConstraints: "FIXED_SIDE" + }; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + const node = { + labelStyle: styles2.labelStyle, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + class: classStr, + style: styles2.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.g)().flowchart.padding + }; + let boundingBox; + let nodeEl; + if (node.type !== "group") { + nodeEl = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.b)(nodes, node, vertex.dir); + boundingBox = nodeEl.node().getBBox(); + } + const data = { + id: vertex.id, + ports: vertex.type === "diamond" ? ports : [], + layoutOptions, + labelText: vertexText, + labelData, + domId: diagObj.db.lookUpDomId(vertex.id), + width: boundingBox == null ? void 0 : boundingBox.width, + height: boundingBox == null ? void 0 : boundingBox.height, + type: vertex.type, + el: nodeEl, + parent: parentLookupDb.parentById[vertex.id] + }; + nodeDb[node.id] = data; + }); + return graph; +}; +const getNextPosition = (position, edgeDirection, graphDirection) => { + const portPos2 = { + TB: { + in: { + north: "north" + }, + out: { + south: "west", + west: "east", + east: "south" + } + }, + LR: { + in: { + west: "west" + }, + out: { + east: "south", + south: "north", + north: "east" + } + }, + RL: { + in: { + east: "east" + }, + out: { + west: "north", + north: "south", + south: "west" + } + }, + BT: { + in: { + south: "south" + }, + out: { + north: "east", + east: "west", + west: "north" + } + } + }; + portPos2.TD = portPos2.TB; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("abc88", graphDirection, edgeDirection, position); + return portPos2[graphDirection][edgeDirection][position]; +}; +const getNextPort = (node, edgeDirection, graphDirection) => { + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("getNextPort abc88", { node, edgeDirection, graphDirection }); + if (!portPos[node]) { + switch (graphDirection) { + case "TB": + case "TD": + portPos[node] = { + inPosition: "north", + outPosition: "south" + }; + break; + case "BT": + portPos[node] = { + inPosition: "south", + outPosition: "north" + }; + break; + case "RL": + portPos[node] = { + inPosition: "east", + outPosition: "west" + }; + break; + case "LR": + portPos[node] = { + inPosition: "west", + outPosition: "east" + }; + break; + } + } + const result = edgeDirection === "in" ? portPos[node].inPosition : portPos[node].outPosition; + if (edgeDirection === "in") { + portPos[node].inPosition = getNextPosition( + portPos[node].inPosition, + edgeDirection, + graphDirection + ); + } else { + portPos[node].outPosition = getNextPosition( + portPos[node].outPosition, + edgeDirection, + graphDirection + ); + } + return result; +}; +const getEdgeStartEndPoint = (edge, dir) => { + let source = edge.start; + let target = edge.end; + const startNode = nodeDb[source]; + const endNode = nodeDb[target]; + if (!startNode || !endNode) { + return { source, target }; + } + if (startNode.type === "diamond") { + source = `${source}-${getNextPort(source, "out", dir)}`; + } + if (endNode.type === "diamond") { + target = `${target}-${getNextPort(target, "in", dir)}`; + } + return { source, target }; +}; +const addEdges = function(edges, diagObj, graph, svg) { + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("abc78 edges = ", edges); + const labelsEl = svg.insert("g").attr("class", "edgeLabels"); + let linkIdCnt = {}; + let dir = diagObj.db.getDirection(); + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.a)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + var linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + var linkNameStart = "LS-" + edge.start; + var linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles2 = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.a)(edge.style); + style = styles2.style; + labelStyle = styles2.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.d)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.d)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.d)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.c.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + const labelEl = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.f)(labelsEl, edgeData); + const { source, target } = getEdgeStartEndPoint(edge, dir); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.debug("abc78 source and target", source, target); + graph.edges.push({ + id: "e" + edge.start + edge.end, + sources: [source], + targets: [target], + labelEl, + labels: [ + { + width: edgeData.width, + height: edgeData.height, + orgWidth: edgeData.width, + orgHeight: edgeData.height, + text: edgeData.label, + layoutOptions: { + "edgeLabels.inline": "true", + "edgeLabels.placement": "CENTER" + } + } + ], + edgeData + }); + }); + return graph; +}; +const addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute) { + let url = ""; + if (arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + switch (edgeData.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edgeData.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } +}; +const getClasses = function(text, diagObj) { + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("Extracting classes"); + diagObj.db.clear("ver-2"); + try { + diagObj.parse(text); + return diagObj.db.getClasses(); + } catch (e) { + return {}; + } +}; +const addSubGraphs = function(db2) { + const parentLookupDb = { parentById: {}, childrenById: {} }; + const subgraphs = db2.getSubGraphs(); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("Subgraphs - ", subgraphs); + subgraphs.forEach(function(subgraph) { + subgraph.nodes.forEach(function(node) { + parentLookupDb.parentById[node] = subgraph.id; + if (parentLookupDb.childrenById[subgraph.id] === void 0) { + parentLookupDb.childrenById[subgraph.id] = []; + } + parentLookupDb.childrenById[subgraph.id].push(node); + }); + }); + subgraphs.forEach(function(subgraph) { + ({ id: subgraph.id }); + if (parentLookupDb.parentById[subgraph.id] !== void 0) { + parentLookupDb.parentById[subgraph.id]; + } + }); + return parentLookupDb; +}; +const calcOffset = function(src, dest, parentLookupDb) { + const ancestor = findCommonAncestor(src, dest, parentLookupDb); + if (ancestor === void 0 || ancestor === "root") { + return { x: 0, y: 0 }; + } + const ancestorOffset = nodeDb[ancestor].offset; + return { x: ancestorOffset.posX, y: ancestorOffset.posY }; +}; +const insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb) { + const offset = calcOffset(edge.sources[0], edge.targets[0], parentLookupDb); + const src = edge.sections[0].startPoint; + const dest = edge.sections[0].endPoint; + const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : []; + const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]); + const points = [ + [src.x + offset.x, src.y + offset.y], + ...segPoints, + [dest.x + offset.x, dest.y + offset.y] + ]; + const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + const edgePath = edgesEl.insert("path").attr("d", curve(points)).attr("class", "path").attr("fill", "none"); + const edgeG = edgesEl.insert("g").attr("class", "edgeLabel"); + const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(edgeG.node().appendChild(edge.labelEl)); + const box = edgeWithLabel.node().firstChild.getBoundingClientRect(); + edgeWithLabel.attr("width", box.width); + edgeWithLabel.attr("height", box.height); + edgeG.attr( + "transform", + `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})` + ); + addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute); +}; +const insertChildren = (nodeArray, parentLookupDb) => { + nodeArray.forEach((node) => { + if (!node.children) { + node.children = []; + } + const childIds = parentLookupDb.childrenById[node.id]; + if (childIds) { + childIds.forEach((childId) => { + node.children.push(nodeDb[childId]); + }); + } + insertChildren(node.children, parentLookupDb); + }); +}; +const draw = async function(text, id, _version, diagObj) { + var _a; + diagObj.db.clear(); + nodeDb = {}; + diagObj.db.setGen("gen-2"); + diagObj.parser.parse(text); + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("style", "height:400px").attr("id", "cy"); + let graph = { + id: "root", + layoutOptions: { + "elk.hierarchyHandling": "INCLUDE_CHILDREN", + "org.eclipse.elk.padding": "[top=100, left=100, bottom=110, right=110]", + "elk.layered.spacing.edgeNodeBetweenLayers": "30", + "elk.direction": "DOWN" + }, + children: [], + edges: [] + }; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("Drawing flowchart using v3 renderer", elk); + let dir = diagObj.db.getDirection(); + switch (dir) { + case "BT": + graph.layoutOptions["elk.direction"] = "UP"; + break; + case "TB": + graph.layoutOptions["elk.direction"] = "DOWN"; + break; + case "LR": + graph.layoutOptions["elk.direction"] = "RIGHT"; + break; + case "RL": + graph.layoutOptions["elk.direction"] = "LEFT"; + break; + } + const { securityLevel, flowchart: conf2 } = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.g)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const svg = root.select(`[id="${id}"]`); + const markers = ["point", "circle", "cross"]; + (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.i)(svg, markers, diagObj.type, diagObj.arrowMarkerAbsolute); + const vert = diagObj.db.getVertices(); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("Subgraphs - ", subGraphs); + for (let i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes, subG.dir); + } + const subGraphsEl = svg.insert("g").attr("class", "subgraphs"); + const parentLookupDb = addSubGraphs(diagObj.db); + graph = addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph); + const edgesEl = svg.insert("g").attr("class", "edges edgePath"); + const edges = diagObj.db.getEdges(); + graph = addEdges(edges, diagObj, graph, svg); + const nodes = Object.keys(nodeDb); + nodes.forEach((nodeId) => { + const node = nodeDb[nodeId]; + if (!node.parent) { + graph.children.push(node); + } + if (parentLookupDb.childrenById[nodeId] !== void 0) { + node.labels = [ + { + text: node.labelText, + layoutOptions: { + "nodeLabels.placement": "[H_CENTER, V_TOP, INSIDE]" + }, + width: node.labelData.width, + height: node.labelData.height + } + ]; + delete node.x; + delete node.y; + delete node.width; + delete node.height; + } + }); + insertChildren(graph.children, parentLookupDb); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("after layout", JSON.stringify(graph, null, 2)); + const g = await elk.layout(graph); + drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("after layout", g); + (_a = g.edges) == null ? void 0 : _a.map((edge) => { + insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb); + }); + (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.s)({}, svg, conf2.diagramPadding, conf2.useMaxWidth); + renderEl.remove(); +}; +const drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => { + nodeArray.forEach(function(node) { + if (node) { + nodeDb[node.id].offset = { + posX: node.x + relX, + posY: node.y + relY, + x: relX, + y: relY, + depth, + width: node.width, + height: node.height + }; + if (node.type === "group") { + const subgraphEl = subgraphsEl.insert("g").attr("class", "subgraph"); + subgraphEl.insert("rect").attr("class", "subgraph subgraph-lvl-" + depth % 5 + " node").attr("x", node.x + relX).attr("y", node.y + relY).attr("width", node.width).attr("height", node.height); + const label = subgraphEl.insert("g").attr("class", "label"); + label.attr( + "transform", + `translate(${node.labels[0].x + relX + node.x}, ${node.labels[0].y + relY + node.y})` + ); + label.node().appendChild(node.labelData.labelNode); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("Id (UGH)= ", node.type, node.labels); + } else { + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.l.info("Id (UGH)= ", node.id); + node.el.attr( + "transform", + `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})` + ); + } + } + }); + nodeArray.forEach(function(node) { + if (node && node.type === "group") { + drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1); + } + }); +}; +const renderer = { + getClasses, + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < 5; i++) { + sections += ` + .subgraph-lvl-${i} { + fill: ${options[`surface${i}`]}; + stroke: ${options[`surfacePeer${i}`]}; + } + `; + } + return sections; +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span { + color: ${options.titleColor}; + } + + .label text,span { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } + .subgraph { + stroke-width:2; + rx:3; + } + // .subgraph-lvl-1 { + // fill:#ccc; + // // stroke:black; + // } + ${genSections(options)} +`; +const styles = getStyles; +const diagram = { + db: _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.h, + renderer, + parser: _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_9__.p, + styles +}; + +//# sourceMappingURL=diagram-definition.e55ec334.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/docs/assets/js/20f44f94.a3b5c386.js b/docs/assets/js/20f44f94.a3b5c386.js new file mode 100644 index 000000000..802734dc2 --- /dev/null +++ b/docs/assets/js/20f44f94.a3b5c386.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1079],{3905:(e,r,n)=>{n.d(r,{Zo:()=>p,kt:()=>m});var t=n(67294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=t.createContext({}),c=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},p=function(e){var r=c(e.components);return t.createElement(l.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=o,w=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return n?t.createElement(w,s(s({ref:r},p),{},{components:n})):t.createElement(w,s({ref:r},p))}));function m(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,s[1]=i;for(var c=2;c{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=n(87462),o=(n(67294),n(3905));const a={sidebar_position:8,description:"Causing and handling errors"},s="Errors",i={unversionedId:"basics/errors",id:"version-0.4.0/basics/errors",title:"Errors",description:"Causing and handling errors",source:"@site/versioned_docs/version-0.4.0/basics/08-errors.md",sourceDirName:"basics",slug:"/basics/errors",permalink:"/docs/0.4.0/basics/errors",draft:!1,tags:[],version:"0.4.0",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"Causing and handling errors"},sidebar:"tutorialSidebar",previous:{title:"Testing",permalink:"/docs/0.4.0/basics/testing"},next:{title:"Events",permalink:"/docs/0.4.0/basics/events"}},l={},c=[{value:"Testing errors",id:"testing-errors",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:r,...n}=e;return(0,o.kt)("wrapper",(0,t.Z)({},p,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"errors"},"Errors"),(0,o.kt)("p",null,"Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the\nfollowing example of a simple owned contract:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"use odra::{execution_error, Variable, UnwrapOrRevert};\nuse odra::types::Address;\n\n#[odra::module]\npub struct OwnedContract {\n name: Variable,\n owner: Variable
    ,\n}\n\nexecution_error! {\n pub enum Error {\n OwnerNotSet => 1,\n NotAnOwner => 2,\n }\n}\n\n\n#[odra::module]\nimpl OwnedContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.owner.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn owner(&self) -> Address {\n self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n }\n\n pub fn change_name(&mut self, name: String) {\n let caller = odra::contract_env::caller();\n if caller != self.owner() {\n odra::contract_env::revert(Error::NotAnOwner)\n }\n\n self.name.set(name);\n }\n}\n")),(0,o.kt)("p",null,"Firstly, we are using ",(0,o.kt)("inlineCode",{parentName:"p"},"execution_error!")," macro to define our own set of Errors that our contract will\nthrow. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use\n",(0,o.kt)("inlineCode",{parentName:"p"},"unwrap_or_revert_with")," and pass an error as an argument:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n")),(0,o.kt)("p",null,"You and the users of your contract will be thankful for a meaningful error message!"),(0,o.kt)("p",null,"You can also throw the error directly, by using ",(0,o.kt)("inlineCode",{parentName:"p"},"revert"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"odra::contract_env::revert(Error::NotAnOwner)\n")),(0,o.kt)("h2",{id:"testing-errors"},"Testing errors"),(0,o.kt)("p",null,"Okay, but how about testing it? We've already mentioned a function - ",(0,o.kt)("inlineCode",{parentName:"p"},"assert_exception"),". This is how you will\nuse it:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},'use super::{OwnedContractDeployer, OwnedContractRef};\nuse super::Error;\n\n#[test]\nfn test_owner_error() {\n let owner = odra::test_env::get_account(0);\n let not_an_owner = odra::test_env::get_account(1);\n\n odra::test_env::set_caller(owner);\n let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());\n\n odra::test_env::set_caller(not_an_owner);\n odra::test_env::assert_exception(Error::NotAnOwner, || {\n owned_contract.change_name("NewName".to_string());\n })\n}\n')),(0,o.kt)("p",null,"In the example above, because we are calling the ",(0,o.kt)("inlineCode",{parentName:"p"},"change_name"),' method as an address which is not an "owner",\nwe are expecting that "NotAnOwner" error will be thrown.'),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Here we are creating another reference to the already deployed contract using ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedContractRef::at()")," and passing to it\nits Address. Note that ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedContractDeployer::init()")," returns the same type.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will learn how to emit and test events using Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/2131dc9d.3e6226ca.js b/docs/assets/js/2131dc9d.3e6226ca.js new file mode 100644 index 000000000..8539b57f9 --- /dev/null +++ b/docs/assets/js/2131dc9d.3e6226ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5310],{31582:e=>{e.exports=JSON.parse('{"title":"Basics","description":"Basic concepts of Odra Framework","slug":"/category/basics","permalink":"/docs/0.5.0/category/basics","navigation":{"previous":{"title":"Flipper example","permalink":"/docs/0.5.0/getting-started/flipper"},"next":{"title":"Cargo Odra","permalink":"/docs/0.5.0/basics/cargo-odra"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/21fc20bd.52002aff.js b/docs/assets/js/21fc20bd.52002aff.js new file mode 100644 index 000000000..030d86ca5 --- /dev/null +++ b/docs/assets/js/21fc20bd.52002aff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5724],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var r=1;r=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},c=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return t?o.createElement(f,l(l({ref:r},c),{},{components:t})):o.createElement(f,l({ref:r},c))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,l=new Array(n);l[0]=u;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var o=t(87462),a=(t(67294),t(3905));const n={sidebar_position:1},l="odra-examples",i={unversionedId:"examples/odra-examples",id:"version-0.3.0/examples/odra-examples",title:"odra-examples",description:"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.",source:"@site/versioned_docs/version-0.3.0/examples/odra-examples.md",sourceDirName:"examples",slug:"/examples/odra-examples",permalink:"/docs/0.3.0/examples/odra-examples",draft:!1,tags:[],version:"0.3.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Examples",permalink:"/docs/0.3.0/category/examples"},next:{title:"Using odra-modules",permalink:"/docs/0.3.0/examples/using-odra-modules"}},s={},p=[{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odra-examples"},"odra-examples"),(0,a.kt)("p",null,"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the ",(0,a.kt)("inlineCode",{parentName:"p"},"examples")," in the Odra main repository."),(0,a.kt)("p",null,'The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.'),(0,a.kt)("p",null,"Don't worry if you find learning solely by reading the code challenging. Go to the ",(0,a.kt)("a",{parentName:"p",href:"../category/tutorials/"},"Tutorial")," section, where we will review it together. We will break the code into pieces, leaving no space for further questions."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn about reusable Odra components encapsulated in ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/2366.7f723f8c.js b/docs/assets/js/2366.7f723f8c.js new file mode 100644 index 000000000..4eaa39d71 --- /dev/null +++ b/docs/assets/js/2366.7f723f8c.js @@ -0,0 +1,2 @@ +/*! For license information please see 2366.7f723f8c.js.LICENSE.txt */ +(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2366],{84182: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(84182))},59058:(e,t,n)=>{"use strict";var r=n(23279),i=n(54485),a=n(27361),o=n(36968),s=n(30084);function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=l(r),c=l(i),h=l(a),d=l(o),p=l(s);function g(e){return g="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},g(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nt?1:0},W=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("^hsl[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)$").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)},K={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]},Z=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:ie,r=n;!(t=e.next()).done;)r=r*ae+t.value|0;return r},le=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ie;return t*ae+e|0},ue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:oe;return(t<<5)+t+e|0},ce=function(e){return 2097152*e[0]+e[1]},he=function(e,t){return[le(e[0],t[0]),ue(e[1],t[1])]},de=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return se({next:function(){return r=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Ie=function(e){e.splice(0,e.length)},Me=function(e,t,n){return n&&(t=U(n,t)),e[t]},Oe=function(e,t,n,r){n&&(t=U(n,t)),e[t]=r},Pe="undefined"!=typeof Map?Map:function(){function e(){f(this,e),this._obj={}}return y(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}(),Re=function(){function e(t){if(f(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&&B(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 Be,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=[];k(t.classes)?l=t.classes:A(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;u0;){var E=m.pop(),_=v(E),T=E.id();if(d[T]=_,_!==1/0)for(var D=E.neighborhood().intersect(g),C=0;C0)for(n.unshift(t);h[i];){var a=h[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},Ve={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=v.pop(),u=l.id(),y.delete(u),E++,u===d){for(var _=[],T=i,D=d,C=b[D];_.unshift(T),null!=C&&_.unshift(C),null!=(T=m[D]);)C=b[D=T.id()];return{found:!0,distance:p[u],path:this.spawn(_),steps:E}}f[u]=!0;for(var N=l._private.edges,A=0;AC&&(p[D]=C,y[D]=T,m[D]=x),!i){var N=T*u+_;!i&&p[N]>C&&(p[N]=C,y[N]=_,m[N]=x)}}}for(var L=0;L1&&void 0!==arguments[1]?arguments[1]:a,r=m(e),i=[],o=r;;){if(null==o)return t.spawn();var l=y(o),u=l.edge,c=l.pred;if(i.unshift(o[0]),o.same(n)&&i.length>0)break;null!=u&&i.unshift(u),o=c}return s.spawn(i)},hasNegativeWeightCycle:g,negativeWeightCycles:f}}},Ke=Math.sqrt(2),Ze=function(e,t,n){0===n.length&&_e("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=Ze(i,e,t),n--}return t},Je={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/Ke);if(!(i<2)){for(var l=[],u=0;u0?1:e<0?-1:0},ot=function(e,t){return Math.sqrt(st(e,t))},st=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},lt=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}}},pt=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},gt=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},ft=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=b(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},vt=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},yt=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},mt=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},bt=function(e,t){return mt(e,t.x1,t.y1)&&mt(e,t.x2,t.y2)},xt=function(e,t,n,r,i,a,o){var s,l=Ft(i,a),u=i/2,c=a/2,h=r-c-o;if((s=It(e,t,n,r,n-u+l-o,h,n+u-l+o,h,!1)).length>0)return s;var d=n+u+o;if((s=It(e,t,n,r,d,r-c+l-o,d,r+c-l+o,!1)).length>0)return s;var p=r+c+o;if((s=It(e,t,n,r,n-u+l-o,p,n+u-l+o,p,!1)).length>0)return s;var g,f=n-u-o;if((s=It(e,t,n,r,f,r-c+l-o,f,r+c-l+o,!1)).length>0)return s;var v=n-u+l,y=r-c+l;if((g=kt(e,t,n,r,v,y,l+o)).length>0&&g[0]<=v&&g[1]<=y)return[g[0],g[1]];var m=n+u-l,b=r-c+l;if((g=kt(e,t,n,r,m,b,l+o)).length>0&&g[0]>=m&&g[1]<=b)return[g[0],g[1]];var x=n+u-l,w=r+c-l;if((g=kt(e,t,n,r,x,w,l+o)).length>0&&g[0]>=x&&g[1]>=w)return[g[0],g[1]];var E=n-u+l,_=r+c-l;return(g=kt(e,t,n,r,E,_,l+o)).length>0&&g[0]<=E&&g[1]>=_?[g[0],g[1]]:[]},wt=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},Et=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)},_t=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},Dt=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},Ct=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=At(c,-l);h=Nt(f)}else h=c;return Dt(e,t,h)},Nt=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]},St=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},It=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?St(e,n,o)===o?[o,s]:St(e,n,i)===i?[i,a]:St(i,o,n)===n?[n,r]:[]:[]},Mt=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=At(f,-s);u=Nt(m)}else u=f}else u=n;for(var b=0;bu&&(u=t)},d=function(e){return l[e]},p=0;p0?x.edgesTo(b)[0]:b.edgesTo(x)[0];var E=r(w);b=b.id(),p[b]>p[y]+E&&(p[b]=p[y]+E,g.nodes.indexOf(b)<0?g.push(b):g.updateItem(b),u[b]=0,l[b]=[]),p[b]==p[y]+E&&(u[b]=u[b]+u[y],l[b].push(y))}else for(var _=0;_0;){for(var N=n.pop(),A=0;A0&&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?dn(e,t,n,0,un,cn):dn(e,t,n,0,ln)},squaredEuclidean:function(e,t,n){return dn(e,t,n,0,un)},manhattan:function(e,t,n){return dn(e,t,n,0,ln)},max:function(e,t,n){return dn(e,t,n,-1/0,hn)}};function gn(e,t,n,r,i,a){var o;return o=L(e)?e:pn[e]||pn.euclidean,0===t&&L(e)?o(i,a):o(t,n,r,i,a)}pn["squared-euclidean"]=pn.squaredEuclidean,pn.squaredeuclidean=pn.squaredEuclidean;var fn=ke({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),vn=function(e){return fn(e)},yn=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 gn(e,r.length,a,(function(e){return r[e](t)}),o,s)},mn=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},En=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=C?(N=C,C=L,A=k):L>N&&(N=L);for(var S=0;S0?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=Gn(e,t,n),i=0;il&&(s=u,l=c)}n[i]=a[s]}return Gn(e,t,n)}(t,r,V),j={},q=0;q1)}}));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}},jn=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}},qn={};[Ge,Xe,Ve,je,He,$e,Je,Xt,Ut,qt,Wt,an,An,Rn,Xn,{hierholzer:function(e){if(!S(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Vn(e),o=a.root,s=a.directed,l=this,u=!1;o&&(i=A(o)?this.filter(o)[0].id():o[0].id());var c={},h={};s?l.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else h[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):h[t]=[e.source().id(),e.target().id()]}));var d={found:!1,trail:void 0};if(u)return d;if(r&&n)if(s){if(i&&r!=i)return d;i=r}else{if(i&&r!=i&&n!=i)return d;i||(i=r)}else i||(i=l[0].id());var p=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=h[t][0],i!=(r=h[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},g=[],f=[];for(f=p(i);1!=f.length;)0==c[f[0]].length?(g.unshift(l.getElementById(f.shift())),g.unshift(l.getElementById(f.shift()))):f=p(f.shift()).concat(f);for(var v in g.unshift(l.getElementById(f.shift())),c)if(c[v].length)return d;return d.found=!0,d.trail=this.spawn(g,!0),d}},{hopcroftTarjanBiconnected:Un,htbc:Un,htb:Un,hopcroftTarjanBiconnectedComponents:Un},{tarjanStronglyConnected:jn,tsc:jn,tscc:jn,tarjanStronglyConnectedComponents:jn}].forEach((function(e){W(qn,e)}));var Hn=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))};Hn.prototype={fulfill:function(e){return Wn(this,1,"fulfillValue",e)},reject:function(e){return Wn(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Hn;return n.onFulfilled.push(Zn(e,r,"fulfill")),n.onRejected.push(Zn(t,r,"reject")),$n(n),r.proxy}};var Wn=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,$n(e)),e},$n=function(e){1===e.state?Kn(e,"onFulfilled",e.fulfillValue):2===e.state&&Kn(e,"onRejected",e.rejectReason)},Kn=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;n0&&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){k(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}};sr.className=sr.classNames=sr.classes;var lr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:q,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};lr.variable="(?:[\\w-.]|(?:\\\\"+lr.metaChar+"))+",lr.className="(?:[\\w-]|(?:\\\\"+lr.metaChar+"))+",lr.value=lr.string+"|"+lr.number,lr.id=lr.variable,function(){var e,t,n;for(e=lr.comparatorOp.split("|"),n=0;n=0||"="!==t&&(lr.comparatorOp+="|\\!"+t)}();var ur=0,cr=1,hr=2,dr=3,pr=4,gr=5,fr=6,vr=7,yr=8,mr=9,br=10,xr=11,wr=12,Er=13,_r=14,Tr=15,Dr=16,Cr=17,Nr=18,Ar=19,Lr=20,kr=[{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*H(e,t)}(e.selector,t.selector)})),Sr=function(){for(var e,t={},n=0;n0&&u.edgeCount>0)return De("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return De("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&De("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 A(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case ur:var l=e(s);return l.substring(0,l.length-1);case dr:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case gr:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case pr:return"["+r.field+"]";case fr:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case vr:return s;case yr:return"#"+s;case mr:return"."+s;case Cr:case Tr:return i(r.parent,a)+n(">")+i(r.child,a);case Nr:case Dr:return i(r.ancestor,a)+" "+i(r.descendant,a);case Ar:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case Lr: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 Zr(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i1&&void 0!==arguments[1])||arguments[1];return Kr(this,e,t,Zr)},$r.forEachUp=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Kr(this,e,t,Qr)},$r.forEachUpAndDown=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Kr(this,e,t,Jr)},$r.ancestors=$r.parents,(qr=Hr={data:ar.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:ar.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:ar.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ar.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:ar.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:ar.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=qr.data,qr.removeAttr=qr.removeData;var ei,ti,ni=Hr,ri={};function ii(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:ai("indegree",(function(e,t){return et})),minOutdegree:ai("outdegree",(function(e,t){return et}))}),W(ri,{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}},ei.modelPosition=ei.point=ei.position,ei.modelPositions=ei.points=ei.positions,ei.renderedPoint=ei.renderedPosition,ei.relativePoint=ei.relativePosition;var li,ui,ci=ti;li=ui={},ui.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}},ui.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},ui.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)},pi=function(e,t){return null==t?e:di(e,t.x1,t.y1,t.x2,t.y2)},gi=function(e,t,n){return Me(e,t,n)},fi=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,gt(u,1),di(e,u.x1,u.y1,u.x2,u.y2)}}},vi=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=gi(a,"labelWidth",n),p=gi(a,"labelHeight",n),g=gi(a,"labelX",n),f=gi(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 I=k?gi(i.rstyle,"labelAngle",n):b.pfValue,M=Math.cos(I),O=Math.sin(I),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)*M-(t-=R)*O+P,y:e*O+t*M+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 X=N+"Rot",V=A[X]=A[X]||{};V.x1=o,V.y1=l,V.x2=s,V.y2=u,V.w=s-o,V.h=u-l,di(e,o,l,s,u),di(i.labelBounds.all,o,l,s,u)}return e}},yi=function(e){var t=0,n=function(e){return(e?1:0)<(r=A[1].x)){var L=n;n=r,r=L}if(i>(a=A[1].y)){var k=i;i=a,a=k}di(d,n-_,i-_,r+_,a+_)}}else if("bezier"===N||"unbundled-bezier"===N||"segments"===N||"taxi"===N){var S;switch(N){case"bezier":case"unbundled-bezier":S=v.bezierPts;break;case"segments":case"taxi":S=v.linePts}if(null!=S)for(var I=0;I(r=P.x)){var R=n;n=r,r=R}if((i=O.y)>(a=P.y)){var B=i;i=a,a=B}di(d,n-=_,i-=_,r+=_,a+=_)}if(c&&t.includeEdges&&f&&(fi(d,e,"mid-source"),fi(d,e,"mid-target"),fi(d,e,"source"),fi(d,e,"target")),c&&"yes"===e.pstyle("ghost").value){var F=e.pstyle("ghost-offset-x").pfValue,z=e.pstyle("ghost-offset-y").pfValue;di(d,d.x1+F,d.y1+z,d.x2+F,d.y2+z)}var G=p.bodyBounds=p.bodyBounds||{};vt(G,d),ft(G,y),gt(G,1),c&&(n=d.x1,r=d.x2,i=d.y1,a=d.y2,di(d,n-E,i-E,r+E,a+E));var Y=p.overlayBounds=p.overlayBounds||{};vt(Y,d),ft(Y,y),gt(Y,1);var X=p.labelBounds=p.labelBounds||{};null!=X.all?((l=X.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):X.all=dt(),c&&t.includeLabels&&(t.includeMainLabels&&vi(d,e,null),f&&(t.includeSourceLabels&&vi(d,e,"source"),t.includeTargetLabels&&vi(d,e,"target")))}return d.x1=hi(d.x1),d.y1=hi(d.y1),d.x2=hi(d.x2),d.y2=hi(d.y2),d.w=hi(d.x2-d.x1),d.h=hi(d.y2-d.y1),d.w>0&&d.h>0&&b&&(ft(d,y),gt(d,1)),d}(e,xi),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=dt(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?pi(n,r.overlayBounds):pi(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?pi(n,r.labelBounds.all):(t.includeMainLabels&&pi(n,r.labelBounds.mainRot),t.includeSourceLabels&&pi(n,r.labelBounds.sourceRot),t.includeTargetLabels&&pi(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},xi={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,useCache:!0},wi=yi(xi),Ei=ke(xi);ui.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=dt();var n=Ei(e=e||xi),r=this;if(r.cy().styleEnabled())for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:Bi,t=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)o(s);return this},zi.removeAllListeners=function(){return this.removeListener("*")},zi.emit=zi.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,k(t)||(t=[t]),Xi(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&&A(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=n.style();if(S(e)){var i=e;r.applyBypass(this,i,false),this.emitAndNotify("style")}else if(A(e)){if(void 0===t){var a=this[0];return a?r.getStylePropertyValue(a,e):void 0}r.applyBypass(this,e,t,false),this.emitAndNotify("style")}else if(void 0===e){var o=this[0];return o?r.getRawStyle(o):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=t.style(),r=this;if(void 0===e)for(var i=0;i0&&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)}}),pa.neighbourhood=pa.neighborhood,pa.closedNeighbourhood=pa.closedNeighborhood,pa.openNeighbourhood=pa.openNeighborhood,W(pa,{source:Wr((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Wr((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:ya({attr:"source"}),targets:ya({attr:"target"})}),W(pa,{edgesWith:Wr(ma(),"edgesWith"),edgesTo:Wr(ma({thisIsSrc:!0}),"edgesTo")}),W(pa,{connectedEdges:Wr((function(e){for(var t=[],n=0;n0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),pa.componentsOf=pa.components;var xa=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 Pe,a=!1;if(t){if(t.length>0&&S(t[0])&&!P(t[0])){a=!0;for(var o=[],s=new Be,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 xa(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){for(var t=e._private.edges,n=0;n0&&(e?N.emitAndNotify("remove"):t&&N.emit("remove"));for(var A=0;Ah&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),Ta=function(e,t,n,r){var i=function(e,t,n,r){var i=4,a=.001,o=1e-7,s=10,l=11,u=1/(l-1),c="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var h=0;h<4;++h)if("number"!=typeof arguments[h]||isNaN(arguments[h])||!isFinite(arguments[h]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var d=c?new Float32Array(l):new Array(l);function p(e,t){return 1-3*t+3*e}function g(e,t){return 3*t-6*e}function f(e){return 3*e}function v(e,t,n){return((p(t,n)*e+g(t,n))*e+f(t))*e}function y(e,t,n){return 3*p(t,n)*e*e+2*g(t,n)*e+f(t)}function m(t,r){for(var a=0;a0?i=l:r=l}while(Math.abs(a)>o&&++u=a?m(t,s):0===c?s:x(t,r,r+u)}var E=!1;function _(){E=!0,e===t&&n===r||b()}var T=function(i){return E||_(),e===t&&n===r?i:0===i?0:1===i?1:v(w(i),t,r)};T.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var D="generateBezier("+[e,t,n,r]+")";return T.toString=function(){return D},T}(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Da={linear:function(e,t,n){return e+(t-e)*n},ease:Ta(.25,.1,.25,1),"ease-in":Ta(.42,0,1,1),"ease-out":Ta(0,0,.58,1),"ease-in-out":Ta(.42,0,.58,1),"ease-in-sine":Ta(.47,0,.745,.715),"ease-out-sine":Ta(.39,.575,.565,1),"ease-in-out-sine":Ta(.445,.05,.55,.95),"ease-in-quad":Ta(.55,.085,.68,.53),"ease-out-quad":Ta(.25,.46,.45,.94),"ease-in-out-quad":Ta(.455,.03,.515,.955),"ease-in-cubic":Ta(.55,.055,.675,.19),"ease-out-cubic":Ta(.215,.61,.355,1),"ease-in-out-cubic":Ta(.645,.045,.355,1),"ease-in-quart":Ta(.895,.03,.685,.22),"ease-out-quart":Ta(.165,.84,.44,1),"ease-in-out-quart":Ta(.77,0,.175,1),"ease-in-quint":Ta(.755,.05,.855,.06),"ease-out-quint":Ta(.23,1,.32,1),"ease-in-out-quint":Ta(.86,0,.07,1),"ease-in-expo":Ta(.95,.05,.795,.035),"ease-out-expo":Ta(.19,1,.22,1),"ease-in-out-expo":Ta(1,0,0,1),"ease-in-circ":Ta(.6,.04,.98,.335),"ease-out-circ":Ta(.075,.82,.165,1),"ease-in-out-circ":Ta(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Da.linear;var r=_a(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":Ta};function Ca(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 Na(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Aa(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Na(e,i),s=Na(t,i);if(I(o)&&I(s))return Ca(a,o,s,n,r);if(k(o)&&k(s)){for(var l=[],u=0;u0?("spring"===h&&d.push(o.duration),o.easingImpl=Da[h].apply(null,d)):o.easingImpl=Da[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={};ka(f.x,v.x)&&(y.x=Aa(f.x,v.x,p,g)),ka(f.y,v.y)&&(y.y=Aa(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,b=o.pan,x=a.pan,w=null!=b&&r;w&&(ka(m.x,b.x)&&(x.x=Aa(m.x,b.x,p,g)),ka(m.y,b.y)&&(x.y=Aa(m.y,b.y,p,g)),e.emit("pan"));var E=o.startZoom,_=o.zoom,T=null!=_&&r;T&&(ka(E,_)&&(a.zoom=ht(a.minZoom,Aa(E,_,p,g),a.maxZoom)),e.emit("zoom")),(w||T)&&e.emit("viewport");var D=o.style;if(D&&D.length>0&&i){for(var C=0;C=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||Sa(0,h,e),La(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 Ma={animate:ar.animate(),animation:ar.animation(),animated:ar.animated(),clearQueue:ar.clearQueue(),delay:ar.delay(),delayAnimation:ar.delayAnimation(),stop:ar.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){Ia(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&ne((function(n){Ia(n,e),t()}))}()}}},Oa={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&&P(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}},Pa=function(e){return A(e)?new Vr(e):e},Ra={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Fi(Oa,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Pa(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Pa(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Pa(t),n),this},once:function(e,t,n){return this.emitter().one(e,Pa(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}};ar.eventAliasesOn(Ra);var Ba={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)}};Ba.jpeg=Ba.jpg;var Fa={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=A(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(W({},e,{cy:t,eles:i}));return a}_e("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else _e("A `name` must be specified to make a layout");else _e("Layout options must be specified to make a layout")}};Fa.createLayout=Fa.makeLayout=Fa.layout;var za={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)}};Ya.invalidateDimensions=Ya.resize;var Xa={collection:function(e,t){return A(e)?this.$(e):O(e)?e.collection():k(e)?(t||(t={}),new xa(this,e,t.unique,t.removed)):new xa(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}};Xa.elements=Xa.filter=Xa.$;var Va={},Ua="t";Va.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],T=i.valueMax[1],D=i.valueMin[2],C=i.valueMax[2],N=null==i.valueMin[3]?1:i.valueMin[3],A=null==i.valueMax[3]?1:i.valueMax[3],L=[Math.round(w+(E-w)*v),Math.round(_+(T-_)*v),Math.round(D+(C-D)*v),Math.round(N+(A-N)*v)];n={bypass:i.bypass,name:i.name,value:L,strValue:"rgb("+L[0]+", "+L[1]+", "+L[2]+")"}}else{if(!s.number)return!1;var k=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,k,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var S=i.field.split("."),M=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)},Va.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Va.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)}))},Va.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||("curve-style"!==t||"bezier"!==n&&"bezier"!==r)&&("display"!==t||"none"!==n&&"none"!==r)||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()}))}))},Va.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var ja={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){De("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 Vr(u).invalid){De("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){De("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()):(De("Skipping property: Invalid property definition in: "+r),s());else De("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 De("`"+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+/):k(t)?t:[t],h.evenMultiple&&m.length%2!=0)return null;for(var b=[],x=[],w=[],E="",_=!1,T=0;T0?" ":"")+D.strValue}return h.validate&&!h.validate(b,x)?null:h.singleEnum&&_?1===b.length&&A(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:w,strValue:E,bypass:n,units:x}}var C,N,S=function(){for(var r=0;rh.max||h.strictMax&&t===h.max))return null;var B={name:e,value:t,strValue:""+t+(M||""),units:M,bypass:n};return h.unitless||"px"!==M&&"em"!==M?B.pfValue=t:B.pfValue="px"!==M&&M?this.getEmSizeInPixels()*t:t,"ms"!==M&&"s"!==M||(B.pfValue="ms"===M?t:1e3*t),"deg"!==M&&"rad"!==M||(B.pfValue="rad"===M?t:(C=t,Math.PI*C/180)),"%"===M&&(B.pfValue=t/100),B}if(h.propList){var F=[],z=""+t;if("none"===z);else{for(var G=z.split(/\s*,\s*|\s+/),Y=0;Y0&&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),I(e)?n=e:S(e)&&(n=e.level,null!=e.position?t=et(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;I(l.x)&&(t.pan.x=l.x,o=!1),I(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(A(e)){var n=e;e=this.mutableElements().filter(n)}else O(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container;return n.sizeCache=n.sizeCache||(r?(e=w.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}};to.centre=to.center,to.autolockNodes=to.autolock,to.autoungrabifyNodes=to.autoungrabify;var no={data:ar.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:ar.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:ar.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ar.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};no.attr=no.data,no.removeAttr=no.removeData;var ro=function(e){var t=this,n=(e=W({},e)).container;n&&!M(n)&&M(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!==w&&void 0!==n&&!e.headless,o=e;o.layout=W({name:a?"grid":"null"},o.layout),o.renderer=W({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 xa(this),listeners:[],aniEles:new xa(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:I(o.zoom)?o.zoom:1,pan:{x:S(o.pan)&&I(o.pan.x)?o.pan.x:0,y:S(o.pan)&&I(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=W({},o,o.renderer);t.initRenderer(u);!function(e,t){if(e.some(G))return Jn.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&&(S(e)||k(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=W({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()}(a,(function(){t.startAnimationLoop(),l.ready=!0,L(o.ready)&&t.on("ready",o.ready);for(var e=0;e0,u=dt(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(O(n.roots))e=n.roots;else if(k(n.roots)){for(var c=[],h=0;h0;){var S=C.shift(),I=D(S,N);if(I)S.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(L);else if(null===I){De("Detected double maximal shift for node `"+S.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}T();var M=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 uo={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 co(e){this.options=W({},uo,e)}co.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=dt(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 ho,po={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 go(e){this.options=W({},po,e)}go.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=dt(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 I=0,M=0,O=0;O=e.numIter)&&(_o(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature=e.animationThreshold&&a(),ne(t)):(Po(r,e),s())}()}else{for(;u;)u=o(l),l++;Po(r,e),s()}return this},vo.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},vo.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var yo=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:e.width(),clientHeight:e.width(),boundingBox:dt(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()})},o=n.eles.components(),s={},l=0;l0){a.graphSet.push(x);for(l=0;lr.count?0:r.graph},bo=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=Ao(e,i,a),h=Ao(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)}},No=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},Ao=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},Lo=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}}}}},So=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},Oo=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)}}},Ro={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 Bo(e){this.options=W({},Ro,e)}Bo.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=dt(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++)},M={},O=0;O(r=Tt(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=_t(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 Me(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(Dt(e,t,A))return v(n),!0}else if(mt(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=dt({x1:e=l,y1:t=c,x2:n=u,y2:r=h}),p=0;p0?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,I=S?A:N,M=S?D:T,O=at(M),P=!1;(L&&(m||x)||!(v===s&&M<0||v===l&&M>0||v===a&&M>0||v===o&&M<0)||(I=(O*=-1)*Math.abs(I),P=!0),m)?k=(b<0?1+b:b)*I:k=(b<0?I:0)+b*O;var R=function(e){return Math.abs(e)=Math.abs(I)},B=R(k),F=R(Math.abs(I)-Math.abs(k));if((B||F)&&!P)if(S){var z=Math.abs(M)<=h/2,G=Math.abs(T)<=d/2;if(z){var Y=(u.x1+u.x2)/2,X=u.y1,V=u.y2;n.segpts=[Y,X,Y,V]}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(M)<=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]}},Zo.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=!I(n.startX)||!I(n.startY),d=!I(n.arrowStartX)||!I(n.arrowStartY),p=!I(n.endX)||!I(n.endY),g=!I(n.arrowEndX)||!I(n.arrowEndY),f=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),v=ot({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=vd.poolIndex()){var p=h;h=d,d=p}var g=s.srcPos=h.position(),f=s.tgtPos=d.position(),v=s.srcW=h.outerWidth(),y=s.srcH=h.outerHeight(),m=s.tgtW=d.outerWidth(),b=s.tgtH=d.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(h)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(d)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E0){var X=u,V=st(X,nt(t)),U=st(X,nt(Y)),j=V;if(U2)st(X,{x:Y[2],y:Y[3]})0){var ie=c,ae=st(ie,nt(t)),oe=st(ie,nt(re)),se=ae;if(oe2)st(ie,{x:re[2],y:re[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;_=ht(0,_,1),t=ct(b.p0,b.p1,b.p2,_),i=function(e,t,n,r){var i=ht(0,r-.001,1),a=ht(0,r+.001,1),o=ct(e,t,n,i),s=ct(e,t,n,a);return is(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=ht(0,S,1),t=function(e,t,n,r){var i=t.x-e.x,a=t.y-e.y,o=ot(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=is(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},ns.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},ns.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=Me(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;Oe(n.rstyle,"labelWidth",t,h),Oe(n.rscratch,"labelWidth",t,h),Oe(n.rstyle,"labelHeight",t,d),Oe(n.rscratch,"labelHeight",t,d),Oe(n.rscratch,"labelLineHeight",t,c)},ns.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?(Oe(n.rscratch,e,t,r),r):Me(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,d=[],p=/[\s\u200b]+/,g=h?"":" ",f=0;fc){for(var b=v.split(p),x="",w=0;wT)break;D+=i[N],N===i.length-1&&(C=!0)}return C||(D+="\u2026"),D}return i},ns.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"}},ns.calculateLabelDimensions=function(e,t){var n=de(t,e._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var a=e.pstyle("font-style").strValue,o=e.pstyle("font-size").pfValue,s=e.pstyle("font-family").strValue,l=e.pstyle("font-weight").strValue,u=this.labelCalcCanvas,c=this.labelCalcCanvasContext;if(!u){u=this.labelCalcCanvas=document.createElement("canvas"),c=this.labelCalcCanvasContext=u.getContext("2d");var h=u.style;h.position="absolute",h.left="-9999px",h.top="-9999px",h.zIndex="-1",h.visibility="hidden",h.pointerEvents="none"}c.font="".concat(a," ").concat(l," ").concat(o,"px ").concat(s);for(var d=0,p=0,g=t.split("\n"),f=0;f1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r=e.desktopTapThreshold2}var C=r(t);v&&(e.hoverData.tapholdCancelled=!0);a=!0,n(f,["mousemove","vmousemove","tapdrag"],t,{x:c[0],y:c[1]});var N=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 A={originalEvent:t,type:"cxtdrag",position:{x:c[0],y:c[1]}};m?m.emit(A):o.emit(A),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(a=!0,o.panningEnabled()&&o.userPanningEnabled()){var L;if(e.hoverData.justStartedPan){var k=e.hoverData.mdownPos;L={x:(c[0]-k[0])*s,y:(c[1]-k[1])*s},e.hoverData.justStartedPan=!1}else L={x:b[0]*s,y:b[1]*s};o.panBy(L),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&&n(y,["mouseout","tapdragout"],t,{x:c[0],y:c[1]}),f&&n(f,["mouseover","tapdragover"],t,{x:c[0],y:c[1]}),e.hoverData.last=f),m)if(v){if(o.boxSelectionEnabled()&&C)m&&m.grabbed()&&(h(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),N();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var S=!e.dragData.didDrag;S&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||l(x,{inDragLayer:!0});var M={x:0,y:0};if(I(b[0])&&I(b[1])&&(M.x+=b[0],M.y+=b[1],S)){var O=e.hoverData.dragDelta;O&&I(O[0])&&I(O[1])&&(M.x+=O[0],M.y+=O[1])}e.hoverData.draggingEles=!0,x.silentShift(M).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])}();a=!0}else if(v){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!C&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){i(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,g[4]=0,e.data.bgActivePosistion=nt(d),e.redrawHint("select",!0),e.redraw())}}else N();m&&m.pannable()&&m.active()&&m.unactivate()}return g[2]=c[0],g[3]=c[1],a?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(window,"mouseup",(function(i){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(i.clientX,i.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,d=r(i);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var p={originalEvent:i,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(p):a.emit(p),!e.hoverData.cxtDragged){var g={originalEvent:i,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(n(l,["mouseup","tapend","vmouseup"],i,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(n(c,["click","tap","vclick"],i,{x:o[0],y:o[1]}),b=!1,i.timeStamp-x<=a.multiClickDebounceTime()?(m&&clearTimeout(m),b=!0,x=null,n(c,["dblclick","dbltap","vdblclick"],i,{x:o[0],y:o[1]})):(m=setTimeout((function(){b||n(c,["oneclick","onetap","voneclick"],i,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),x=i.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||r(i)||(a.$(t).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=a.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||d?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):d||(a.$(t).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:i,position:{x:o[0],y:o[1]}});var v=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||d||a.$(t).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}}),!1);var E,_,T,D,C,N,A,L,k,S,M,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(window,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||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,X,V,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 r=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var s=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=s[0],i[1]=s[1]}if(t.touches[1]){s=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);i[2]=s[0],i[3]=s[1]}if(t.touches[2]){s=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);i[4]=s[0],i[5]=s[1]}if(t.touches[1]){e.touchData.singleTouchMoved=!0,h(e.dragData.touchDragEles);var u=e.findContainerClientCoords();k=u[0],S=u[1],M=u[2],O=u[3],E=t.touches[0].clientX-k,_=t.touches[0].clientY-S,T=t.touches[1].clientX-k,D=t.touches[1].clientY-S,P=0<=E&&E<=M&&0<=T&&T<=M&&0<=_&&_<=O&&0<=D&&D<=O;var d=r.pan(),g=r.zoom();C=U(E,_,T,D),N=j(E,_,T,D),L=[((A=[(E+T)/2,(_+D)/2])[0]-d.x)/g,(A[1]-d.y)/g];if(N<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):r.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])r.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var 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=r.collection(),x=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),m.selected()?(x=r.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),l(x,{addToList:b})):c(m,{addToList:b}),o(m);var I=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};m.emit(I("grabon")),x?x.forEach((function(e){e.emit(I("grab"))})):m.emit(I("grab"))}n(m,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==m&&(e.data.bgActivePosistion={x:s[0],y:s[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||n(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var R=e.touchData.startPosition=[],B=0;B=e.touchTapThreshold2}if(r&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-k,A=t.touches[0].clientY-S,M=t.touches[1].clientX-k,O=t.touches[1].clientY-S,R=j(x,A,M,O);if(R/N>=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(r&&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(r&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,a[4]=1,a&&0!==a.length&&void 0!==a[0]?(a[2]=(s[0]+s[2]+s[4])/3,a[3]=(s[1]+s[3]+s[5])/3):(a[0]=(s[0]+s[2]+s[4])/3,a[1]=(s[1]+s[3]+s[5])/3,a[2]=(s[0]+s[2]+s[4])/3+1,a[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(r&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),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(window,"touchcancel",z=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(window,"touchend",G=function(r){var i=e.touchData.start;if(e.touchData.capture){0===r.touches.length&&(e.touchData.capture=!1),r.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,l=s.zoom(),u=e.touchData.now,c=e.touchData.earlier;if(r.touches[0]){var d=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);u[0]=d[0],u[1]=d[1]}if(r.touches[1]){d=e.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY);u[2]=d[0],u[3]=d[1]}if(r.touches[2]){d=e.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY);u[4]=d[0],u[5]=d[1]}if(i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:r,type:"cxttapend",position:{x:u[0],y:u[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var p={originalEvent:r,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(!r.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:r,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(),r.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(r.touches[1]);else if(r.touches[0]);else if(!r.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var 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"))),n(i,["touchend","tapend","vmouseup","tapdragout"],r,{x:u[0],y:u[1]}),i.unactivate(),e.touchData.start=null}else{var y=e.findNearestElement(u[0],u[1],!0,!0);n(y,["touchend","tapend","vmouseup","tapdragout"],r,{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"]),n(i,["tap","vclick"],r,{x:u[0],y:u[1]}),Y=!1,r.timeStamp-V<=s.multiClickDebounceTime()?(X&&clearTimeout(X),Y=!0,V=null,n(i,["dbltap","vdblclick"],r,{x:u[0],y:u[1]})):(X=setTimeout((function(){Y||n(i,["onetap","voneclick"],r,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),V=r.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&w2){for(var A=[u[0],u[1]],L=Math.pow(A[0]-e,2)+Math.pow(A[1]-t,2),k=1;k0)return f[0]}return null},d=Object.keys(c),p=0;p0?l:xt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=Ft(r,i),l=2*s;if(Ct(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if(Ct(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!!Dt(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||(!!Lt(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!Lt(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},ds.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",Pt(3,0)),this.generateRoundPolygon("round-triangle",Pt(3,0)),this.generatePolygon("rectangle",Pt(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",Pt(5,0)),this.generateRoundPolygon("round-pentagon",Pt(5,0)),this.generatePolygon("hexagon",Pt(6,0)),this.generateRoundPolygon("round-hexagon",Pt(6,0)),this.generatePolygon("heptagon",Pt(7,0)),this.generateRoundPolygon("round-heptagon",Pt(7,0)),this.generatePolygon("octagon",Pt(8,0)),this.generateRoundPolygon("round-octagon",Pt(8,0));var r=new Array(20),i=Bt(5,0),a=Bt(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*ys)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))}}},bs=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:xe;f(this,e),this.idsByKey=new Pe,this.keyForId=new Pe,this.cachesByLvl=new Pe,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n}return y(e,[{key:"getIdsFor",value:function(e){null==e&&_e("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Be,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 Pe,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}(),xs={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},ws=ke({getKey:null,doesEleInvalidateKey:xe,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:be,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Es=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=ws(t);W(n,r),n.lookup=new bs(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},_s=Es.prototype;_s.reasons=xs,_s.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},_s.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},_s.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new c.default((function(e,t){return t.reqs-e.reqs}))},_s.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},_s.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(it(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,xs.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},_s.invalidateElements=function(e){for(var t=0;t=.2*e.width&&this.retireTexture(e)},_s.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?Se(t,e):e.fullnessChecks++},_s.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;Se(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,Ie(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),Se(r,a),n.push(a),a}},_s.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}},_s.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,xs.dequeue)}}return i},_s.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=me,t.updateItem(i),t.pop(),n[r]=null):i.eles.unmerge(e))},_s.onDequeue=function(e){this.onDequeues.push(e)},_s.offDequeue=function(e){Se(this.onDequeues,e)},_s.setupDequeueing=ms({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&&Se(c,o)}}();var h=function(t){var i=(t=t||{}).after;if(function(){if(!o){o=dt();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||!bt(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)},Ds.getEleLevelForLayerLevel=function(e,t){return e},Ds.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))},Ds.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},Ds.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r0){e=!0;break}}return e},Ds.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=re(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},Ds.invalidateLayer=function(e){if(this.lastInvalidationTime=re(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Se(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=u*c,v=u*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;"straight-triangle"===h?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=p,e.lineCap=g,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,d),e.lineCap="butt")},m=function(){i&&o.drawEdgeOverlay(e,t)},b=function(){i&&o.drawEdgeUnderlay(e,t)},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)},w=function(){o.drawElementText(e,t,null,r)};e.lineJoin="round";var E="yes"===t.pstyle("ghost").value;if(E){var _=t.pstyle("ghost-offset-x").pfValue,T=t.pstyle("ghost-offset-y").pfValue,D=t.pstyle("ghost-opacity").value,C=f*D;e.translate(_,T),y(C),x(C),e.translate(-_,-T)}b(),y(),x(),m(),w(),n&&e.translate(l.x1,l.y1)}}},Vs=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")}}}};Xs.drawEdgeOverlay=Vs("overlay"),Xs.drawEdgeUnderlay=Vs("underlay"),Xs.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,l=this.usePaths(),u=e.pstyle("line-dash-pattern").pfValue,c=e.pstyle("line-dash-offset").pfValue;if(l){var h=n.join("$");a.pathCacheKey&&a.pathCacheKey===h?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=h,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=c;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var d=2;d+35&&void 0!==arguments[5]?arguments[5]:5;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),e.fill()}js.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(it(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)},js.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)},js.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Me(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},js.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,o=a.rscratch,s=i?t.effectiveOpacity():1;if(!i||0!==s&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var l,u,c=Me(o,"labelX",n),h=Me(o,"labelY",n),d=this.getLabelText(t,n);if(null!=d&&""!==d&&!isNaN(c)&&!isNaN(h)){this.setupTextStyle(e,t,i);var p,g=n?n+"-":"",f=Me(o,"labelWidth",n),v=Me(o,"labelHeight",n),y=t.pstyle(g+"text-margin-x").pfValue,m=t.pstyle(g+"text-margin-y").pfValue,b=t.isEdge(),x=t.pstyle("text-halign").value,w=t.pstyle("text-valign").value;switch(b&&(x="center",w="center"),c+=y,h+=m,0!==(p=r?this.getTextAngle(t,n):0)&&(l=c,u=h,e.translate(l,u),e.rotate(p),c=0,h=0),w){case"top":break;case"center":h+=v/2;break;case"bottom":h+=v}var E=t.pstyle("text-background-opacity").value,_=t.pstyle("text-border-opacity").value,T=t.pstyle("text-border-width").pfValue,D=t.pstyle("text-background-padding").pfValue;if(E>0||T>0&&_>0){var C=c-D;switch(x){case"left":C-=f;break;case"center":C-=f/2}var N=h-v-D,A=f+2*D,L=v+2*D;if(E>0){var k=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+E*s+")";var I=t.pstyle("text-background-shape").strValue;0===I.indexOf("round")?qs(e,C,N,A,L,2):e.fillRect(C,N,A,L),e.fillStyle=k}if(T>0&&_>0){var M=e.strokeStyle,O=e.lineWidth,P=t.pstyle("text-border-color").value,R=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+P[0]+","+P[1]+","+P[2]+","+_*s+")",e.lineWidth=T,e.setLineDash)switch(R){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=T/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(C,N,A,L),"double"===R){var B=T/2;e.strokeRect(C+B,N+B,A-2*B,L-2*B)}e.setLineDash&&e.setLineDash([]),e.lineWidth=O,e.strokeStyle=M}}var F=2*t.pstyle("text-outline-width").pfValue;if(F>0&&(e.lineWidth=F),"wrap"===t.pstyle("text-wrap").value){var z=Me(o,"labelWrapCachedLines",n),G=Me(o,"labelLineHeight",n),Y=f/2,X=this.getLabelJustification(t);switch("auto"===X||("left"===x?"left"===X?c+=-f:"center"===X&&(c+=-Y):"center"===x?"left"===X?c+=-Y:"right"===X&&(c+=Y):"right"===x&&("center"===X?c+=Y:"right"===X&&(c+=f))),w){case"top":case"center":case"bottom":h-=(z.length-1)*G}for(var V=0;V0&&e.strokeText(z[V],c,h),e.fillText(z[V],c,h),h+=G}else F>0&&e.strokeText(d,c,h),e.fillText(d,c,h);0!==p&&(e.rotate(-p),e.translate(-l,-u))}}};var Hs={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(I(h.x)&&I(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"),b=m.value,x=new Array(b.length),w=new Array(b.length),E=0,_=0;_0&&void 0!==arguments[0]?arguments[0]:L;l.eleFillStyle(e,t,n)},P=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:M;l.colorStrokeStyle(e,k[0],k[1],k[2],t)},R=t.pstyle("shape").strValue,B=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var F=l.nodePathCache=l.nodePathCache||[],z=pe("polygon"===R?R+","+B.join(","):R,""+i,""+r),G=F[z];null!=G?(d=G,v=!0,c.pathCache=d):(d=new Path2D,F[z]=c.pathCache=d)}var Y=function(){if(!v){var n=h;f&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(d||e,n.x,n.y,r,i)}f?e.fill(d):e.fill()},X=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)))},U=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g,n=(N>0?N:-N)*t,r=N>0?0:255;0!==N&&(l.colorFillStyle(e,r,r,r,n),f?e.fill(d):e.fill())},j=function(){if(A>0){if(e.lineWidth=A,e.lineCap="butt",e.setLineDash)switch(S){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(d):e.stroke(),"double"===S){e.lineWidth=A/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},q=function(){o&&l.drawNodeOverlay(e,t,h,r,i)},H=function(){o&&l.drawNodeUnderlay(e,t,h,r,i)},W=function(){l.drawElementText(e,t,null,a)},$="yes"===t.pstyle("ghost").value;if($){var K=t.pstyle("ghost-offset-x").pfValue,Z=t.pstyle("ghost-offset-y").pfValue,Q=t.pstyle("ghost-opacity").value,J=Q*g;e.translate(K,Z),O(Q*L),Y(),X(J,!0),P(Q*M),j(),V(0!==N||0!==A),X(J,!1),U(J),e.translate(-K,-Z)}f&&e.translate(-h.x,-h.y),H(),f&&e.translate(h.x,h.y),O(),Y(),X(g,!0),P(),j(),V(0!==N||0!==A),X(g,!1),U(),f&&e.translate(-h.x,-h.y),W(),q(),n&&e.translate(p.x1,p.y1)}}},Ws=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){if(n.visible()){var o=n.pstyle("".concat(e,"-padding")).pfValue,s=n.pstyle("".concat(e,"-opacity")).value,l=n.pstyle("".concat(e,"-color")).value,u=n.pstyle("".concat(e,"-shape")).value;if(s>0){if(r=r||n.position(),null==i||null==a){var c=n.padding();i=n.width()+2*c,a=n.height()+2*c}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),t.fill()}}}};Hs.drawNodeOverlay=Ws("overlay"),Hs.drawNodeUnderlay=Ws("underlay"),Hs.hasPie=function(e){return(e=e[0])._private.hasPie},Hs.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 $s={};$s.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},$s.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,I=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,S[0],S[1],S[2],I),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 M=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,M):o.drawLayeredElements(L,D.nondrag,s,M),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,M):o.drawCachedElements(L,D.drag,s,M),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 X=u.contexts[o.NODE],V=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(X,V,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 Ks={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},rl.png=function(e){return al(e,this.bufferCanvasImage(e),"image/png")},rl.jpg=function(e){return al(e,this.bufferCanvasImage(e),"image/jpeg")};var ol={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},sl=ul,ll=ul.prototype;function ul(e){var t=this;t.data={canvases:new Array(ll.CANVAS_LAYERS),contexts:new Array(ll.CANVAS_LAYERS),canvasNeedsRedraw:new Array(ll.CANVAS_LAYERS),bufferCanvases:new Array(ll.BUFFER_COUNT),bufferContexts:new Array(ll.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};E&&E.userAgent.match(/msie|trident|edge/i)&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s{e.exports=n(22894)},22894:function(e,t){var n,r,i;(function(){var a,o,s,l,u,c,h,d,p,g,f,v,y,m,b;s=Math.floor,g=Math.min,o=function(e,t){return et?1:0},p=function(e,t,n,r,i){var a;if(null==n&&(n=0),null==i&&(i=o),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);nn;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse(),l=[],r=0,i=a.length;rf;0<=f?++c:--c)v.push(u(e,n));return v},m=function(e,t,n,r){var i,a,s;for(null==r&&(r=o),i=e[n];n>t&&r(i,a=e[s=n-1>>1])<0;)e[n]=a,n=s;return e[n]=i},b=function(e,t,n){var r,i,a,s,l;for(null==n&&(n=o),i=e.length,l=t,a=e[t],r=2*t+1;rt&&(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:M=v,I=a+-E/N,n[2]=I,n[3]=M;break;case 2:I=x,M=o+w*N,n[2]=I,n[3]=M;break;case 3:M=b,I=a+E/N,n[2]=I,n[3]=M;break;case 4:I=m,M=o+-w*N,n[2]=I,n[3]=M}}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,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;i(this,e),this.sequence1=t,this.sequence2=n,this.match_score=r,this.mismatch_penalty=a,this.gap_penalty=o,this.iMax=t.length+1,this.jMax=n.length+1,this.grid=new Array(this.iMax);for(var s=0;s=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{var r=n(51789),i=n(80401),a=n(57667),o=n(21327),s=n(81866);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(27040),i=n(14125),a=n(82117),o=n(67518),s=n(54705);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(10852)(n(55639),"Map");e.exports=r},83369:(e,t,n)=>{var r=n(24785),i=n(11285),a=n(96e3),o=n(49916),s=n(95265);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(55639).Symbol;e.exports=r},29932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n{var r=n(89465),i=n(77813),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var o=e[t];a.call(e,t)&&i(o,n)&&(void 0!==n||t in e)||r(e,t,n)}},18470:(e,t,n)=>{var r=n(77813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},89465:(e,t,n)=>{var r=n(38777);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},97786:(e,t,n)=>{var r=n(71811),i=n(40327);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n{var r=n(62705),i=n(89607),a=n(2333),o=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):a(e)}},28458:(e,t,n)=>{var r=n(23560),i=n(15346),a=n(13218),o=n(80346),s=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,c=l.toString,h=u.hasOwnProperty,d=RegExp("^"+c.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||i(e))&&(r(e)?d:s).test(o(e))}},10611:(e,t,n)=>{var r=n(34865),i=n(71811),a=n(65776),o=n(13218),s=n(40327);e.exports=function(e,t,n,l){if(!o(e))return e;for(var u=-1,c=(t=i(t,e)).length,h=c-1,d=e;null!=d&&++u{var r=n(62705),i=n(29932),a=n(1469),o=n(33448),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return i(t,e)+"";if(o(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},27561:(e,t,n)=>{var r=n(67990),i=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(i,""):e}},71811:(e,t,n)=>{var r=n(1469),i=n(15403),a=n(55514),o=n(79833);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:a(o(e))}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var r=n(55639)["__core-js_shared__"];e.exports=r},38777:(e,t,n)=>{var r=n(10852),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},31957:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},45050:(e,t,n)=>{var r=n(37019);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},10852:(e,t,n)=>{var r=n(28458),i=n(47801);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},89607:(e,t,n)=>{var r=n(62705),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(l){}var i=o.call(e);return r&&(t?e[s]=n:delete e[s]),i}},47801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},51789:(e,t,n)=>{var r=n(94536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},80401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},57667:(e,t,n)=>{var r=n(94536),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},21327:(e,t,n)=>{var r=n(94536),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},81866:(e,t,n)=>{var r=n(94536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},65776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e{var r=n(1469),i=n(33448),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(o.test(e)||!a.test(e)||null!=t&&e in Object(t))}},37019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},15346:(e,t,n)=>{var r,i=n(14429),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},27040:e=>{e.exports=function(){this.__data__=[],this.size=0}},14125:(e,t,n)=>{var r=n(18470),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},82117:(e,t,n)=>{var r=n(18470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},67518:(e,t,n)=>{var r=n(18470);e.exports=function(e){return r(this.__data__,e)>-1}},54705:(e,t,n)=>{var r=n(18470);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},24785:(e,t,n)=>{var r=n(1989),i=n(38407),a=n(57071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},11285:(e,t,n)=>{var r=n(45050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},96e3:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).get(e)}},49916:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).has(e)}},95265:(e,t,n)=>{var r=n(45050);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},24523:(e,t,n)=>{var r=n(88306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},94536:(e,t,n)=>{var r=n(10852)(Object,"create");e.exports=r},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},55639:(e,t,n)=>{var r=n(31957),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();e.exports=a},55514:(e,t,n)=>{var r=n(24523),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(a,"$1"):n||e)})),t}));e.exports=o},40327:(e,t,n)=>{var r=n(33448);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},80346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},67990:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},23279:(e,t,n)=>{var r=n(13218),i=n(7771),a=n(14841),o=Math.max,s=Math.min;e.exports=function(e,t,n){var l,u,c,h,d,p,g=0,f=!1,v=!1,y=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var n=l,r=u;return l=u=void 0,g=t,h=e.apply(r,n)}function b(e){return g=e,d=setTimeout(w,t),f?m(e):h}function x(e){var n=e-p;return void 0===p||n>=t||n<0||v&&e-g>=c}function w(){var e=i();if(x(e))return E(e);d=setTimeout(w,function(e){var n=t-(e-p);return v?s(n,c-(e-g)):n}(e))}function E(e){return d=void 0,y&&l?m(e):(l=u=void 0,h)}function _(){var e=i(),n=x(e);if(l=arguments,u=this,p=e,n){if(void 0===d)return b(p);if(v)return clearTimeout(d),d=setTimeout(w,t),m(p)}return void 0===d&&(d=setTimeout(w,t)),h}return t=a(t)||0,r(n)&&(f=!!n.leading,c=(v="maxWait"in n)?o(a(n.maxWait)||0,t):c,y="trailing"in n?!!n.trailing:y),_.cancel=function(){void 0!==d&&clearTimeout(d),g=0,l=p=u=d=void 0},_.flush=function(){return void 0===d?h:E(i())},_}},77813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},27361:(e,t,n)=>{var r=n(97786);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},1469:e=>{var t=Array.isArray;e.exports=t},23560:(e,t,n)=>{var r=n(44239),i=n(13218);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},37005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},33448:(e,t,n)=>{var r=n(44239),i=n(37005);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},88306:(e,t,n)=>{var r=n(83369);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},7771:(e,t,n)=>{var r=n(55639);e.exports=function(){return r.Date.now()}},36968:(e,t,n)=>{var r=n(10611);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},14841:(e,t,n)=>{var r=n(27561),i=n(13218),a=n(33448),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||l.test(e)?u(e.slice(2),n?2:8):o.test(e)?NaN:+e}},30084:(e,t,n)=>{var r=n(29932),i=n(278),a=n(1469),o=n(33448),s=n(55514),l=n(40327),u=n(79833);e.exports=function(e){return a(e)?r(e,l):o(e)?[e]:i(s(u(e)))}},79833:(e,t,n)=>{var r=n(80531);e.exports=function(e){return null==e?"":r(e)}},12366:(e,t,n)=>{"use strict";n.r(t),n.d(t,{diagram:()=>k});var r=n(74737),i=n(59373),a=n(59058),o=n.n(a),s=n(14607),l=n.n(s),u=n(91619),c=n(12281),h=n(7201),d=(n(30381),n(17967),n(27856),n(70277),n(45625),n(39354),n(91518),function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,13],r=[1,12],i=[1,15],a=[1,16],o=[1,20],s=[1,19],l=[6,7,8],u=[1,26],c=[1,24],h=[1,25],d=[6,7,11],p=[1,6,13,15,16,19,22],g=[1,33],f=[1,34],v=[1,6,7,11,13,15,16,19,22],y={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",a[s].id),r.addNode(a[s-1].length,a[s].id,a[s].descr,a[s].type);break;case 16:r.getLogger().trace("Icon: ",a[s]),r.decorateNode({icon:a[s]});break;case 17:case 21:r.decorateNode({class:a[s]});break;case 18:r.getLogger().trace("SPACELIST");break;case 19:r.getLogger().trace("Node: ",a[s].id),r.addNode(0,a[s].id,a[s].descr,a[s].type);break;case 20:r.decorateNode({icon:a[s]});break;case 25:r.getLogger().trace("node found ..",a[s-2]),this.$={id:a[s-1],descr:a[s-1],type:r.getType(a[s-2],a[s])};break;case 26:this.$={id:a[s],descr:a[s],type:r.nodeType.DEFAULT};break;case 27:r.getLogger().trace("node found ..",a[s-3]),this.$={id:a[s-3],descr:a[s-1],type:r.getType(a[s-2],a[s])}}},table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:n,7:[1,10],9:9,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(l,[2,3]),{1:[2,2]},e(l,[2,4]),e(l,[2,5]),{1:[2,6],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:n,9:22,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:u,7:c,10:23,11:h},e(d,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:o,22:s}),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,23]),e(d,[2,24]),e(d,[2,26],{19:[1,30]}),{20:[1,31]},{6:u,7:c,10:32,11:h},{1:[2,7],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(p,[2,14],{7:g,11:f}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(d,[2,15]),e(d,[2,16]),e(d,[2,17]),{20:[1,35]},{21:[1,36]},e(p,[2,13],{7:g,11:f}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(d,[2,25]),e(d,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",l=0,u=0,c=2,h=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(g.yy[f]=this.yy[f]);p.setInput(e,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var y=p.options&&p.options.ranges;function m(){var e;return"number"!=typeof(e=r.pop()||p.lex()||h)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,x,w,E,_,T,D,C,N={};;){if(x=n[n.length-1],this.defaultActions[x]?w=this.defaultActions[x]:(null==b&&(b=m()),w=o[x]&&o[x][b]),void 0===w||!w.length||!w[0]){var A="";for(_ in C=[],o[x])this.terminals_[_]&&_>c&&C.push("'"+this.terminals_[_]+"'");A=p.showPosition?"Parse error on line "+(l+1)+":\n"+p.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==h?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[b]||b,line:p.yylineno,loc:v,expected:C})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+b);switch(w[0]){case 1:n.push(b),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),b=null,u=p.yyleng,s=p.yytext,l=p.yylineno,v=p.yylloc;break;case 2:if(T=this.productions_[w[1]][1],N.$=i[i.length-T],N._$={first_line:a[a.length-(T||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(T||1)].first_column,last_column:a[a.length-1].last_column},y&&(N._$.range=[a[a.length-(T||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(N,[s,u,l,g.yy,w[1],i,a].concat(d))))return E;T&&(n=n.slice(0,-1*T*2),i=i.slice(0,-1*T),a=a.slice(0,-1*T)),n.push(this.productions_[w[1]][0]),i.push(N.$),a.push(N._$),D=o[n[n.length-2]][n[n.length-1]],n.push(D);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;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:e.getLogger().trace("Found comment",t.yytext);break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:case 23: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:e.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 22:return e.getLogger().trace("description:",t.yytext),"NODE_DESCR";case 24:return this.popState(),e.getLogger().trace("node end ))"),"NODE_DEND";case 25:return this.popState(),e.getLogger().trace("node end )"),"NODE_DEND";case 26:return this.popState(),e.getLogger().trace("node end ...",t.yytext),"NODE_DEND";case 27:case 30:case 31:return this.popState(),e.getLogger().trace("node end (("),"NODE_DEND";case 28:case 29:return this.popState(),e.getLogger().trace("node end (-"),"NODE_DEND";case 32:case 33: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],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR:{rules:[22,23],inclusive:!1},NODE:{rules:[21,24,25,26,27,28,29,30,31,32,33],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function b(){this.yy={}}return y.lexer=m,b.prototype=y,y.Parser=b,new b}());d.parser=d;const p=d,g=e=>(0,r.n)(e,(0,r.g)());let f=[],v=0,y={};const m={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},b=(e,t)=>{y[e]=t},x=e=>{switch(e){case m.DEFAULT:return"no-border";case m.RECT:return"rect";case m.ROUNDED_RECT:return"rounded-rect";case m.CIRCLE:return"circle";case m.CLOUD:return"cloud";case m.BANG:return"bang";case m.HEXAGON:return"hexgon";default:return"no-border"}};let w;const E=e=>y[e],_=Object.freeze(Object.defineProperty({__proto__:null,sanitizeText:g,clear:()=>{f=[],v=0,y={}},getMindmap:()=>f.length>0?f[0]:null,addNode:(e,t,n,i)=>{r.l.info("addNode",e,t,n,i);const a=(0,r.g)(),o={id:v++,nodeId:g(t),level:e,descr:g(n),type:i,children:[],width:(0,r.g)().mindmap.maxNodeWidth};switch(o.type){case m.ROUNDED_RECT:case m.RECT:case m.HEXAGON:o.padding=2*a.mindmap.padding;break;default:o.padding=a.mindmap.padding}const s=function(e){for(let t=f.length-1;t>=0;t--)if(f[t].level{switch(r.l.debug("In get type",e,t),e){case"[":return m.RECT;case"(":return")"===t?m.ROUNDED_RECT:m.CLOUD;case"((":return m.CIRCLE;case")":return m.CLOUD;case"))":return m.BANG;case"{{":return m.HEXAGON;default:return m.DEFAULT}},setElementForId:b,decorateNode:e=>{const t=f[f.length-1];e&&e.icon&&(t.icon=g(e.icon)),e&&e.class&&(t.class=g(e.class))},type2Str:x,get parseError(){return w},setErrorHandler:e=>{w=e},getLogger:()=>r.l,getNodeById:e=>f[e],getElementById:E},Symbol.toStringTag,{value:"Module"}));function T(e,t){e.each((function(){var e,n=(0,i.Ys)(this),r=n.text().split(/(\s+|
    )/).reverse(),a=[],o=n.attr("y"),s=parseFloat(n.attr("dy")),l=n.text(null).append("tspan").attr("x",0).attr("y",o).attr("dy",s+"em");for(let i=0;it||"
    "===e)&&(a.pop(),l.text(a.join(" ").trim()),a="
    "===e?[""]:[e],l=n.append("tspan").attr("x",0).attr("y",o).attr("dy","1.1em").text(e))}))}const D=function(e,t,n,r){const i=n%11,a=e.append("g");t.section=i;let o="section-"+i;i<0&&(o+=" section-root"),a.attr("class",(t.class?t.class+" ":"")+"mindmap-node "+o);const s=a.append("g"),l=a.append("g"),u=l.append("text").text(t.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(T,t.width).node().getBBox(),c=r.fontSize.replace?r.fontSize.replace("px",""):r.fontSize;if(t.height=u.height+1.1*c*.5+t.padding,t.width=u.width+2*t.padding,t.icon)if(t.type===m.CIRCLE){t.height+=50,t.width+=50;a.append("foreignObject").attr("height","50px").attr("width",t.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+i+" "+t.icon),l.attr("transform","translate("+t.width/2+", "+(t.height/2-1.5*t.padding)+")")}else{t.width+=50;const e=t.height;t.height=Math.max(e,60);const n=Math.abs(t.height-e);a.append("foreignObject").attr("width","60px").attr("height",t.height).attr("style","text-align: center;margin-top:"+n/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+i+" "+t.icon),l.attr("transform","translate("+(25+t.width/2)+", "+(n/2+t.padding/2)+")")}else l.attr("transform","translate("+t.width/2+", "+t.padding/2+")");switch(t.type){case m.DEFAULT:!function(e,t,n){e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 ${t.height-5} v${10-t.height} q0,-5 5,-5 h${t.width-10} q5,0 5,5 v${t.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",t.height).attr("x2",t.width).attr("y2",t.height)}(s,t,i);break;case m.ROUNDED_RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("height",t.height).attr("rx",t.padding).attr("ry",t.padding).attr("width",t.width)}(s,t);break;case m.RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("height",t.height).attr("width",t.width)}(s,t);break;case m.CIRCLE:s.attr("transform","translate("+t.width/2+", "+ +t.height/2+")"),function(e,t){e.append("circle").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("r",t.width/2)}(s,t);break;case m.CLOUD:!function(e,t){const n=t.width,r=t.height,i=.15*n,a=.25*n,o=.35*n,s=.2*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 0 a${i},${i} 0 0,1 ${.25*n},${-1*n*.1}\n a${o},${o} 1 0,1 ${.4*n},${-1*n*.1}\n a${a},${a} 1 0,1 ${.35*n},${1*n*.2}\n\n a${i},${i} 1 0,1 ${.15*n},${1*r*.35}\n a${s},${s} 1 0,1 ${-1*n*.15},${1*r*.65}\n\n a${a},${i} 1 0,1 ${-1*n*.25},${.15*n}\n a${o},${o} 1 0,1 ${-1*n*.5},0\n a${i},${i} 1 0,1 ${-1*n*.25},${-1*n*.15}\n\n a${i},${i} 1 0,1 ${-1*n*.1},${-1*r*.35}\n a${s},${s} 1 0,1 ${.1*n},${-1*r*.65}\n\n H0 V0 Z`)}(s,t);break;case m.BANG:!function(e,t){const n=t.width,r=t.height,i=.15*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 0 a${i},${i} 1 0,0 ${.25*n},${-1*r*.1}\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},${1*r*.1}\n\n a${i},${i} 1 0,0 ${.15*n},${1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${1*r*.34}\n a${i},${i} 1 0,0 ${-1*n*.15},${1*r*.33}\n\n a${i},${i} 1 0,0 ${-1*n*.25},${.15*r}\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},${-1*r*.15}\n\n a${i},${i} 1 0,0 ${-1*n*.1},${-1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${-1*r*.34}\n a${i},${i} 1 0,0 ${.1*n},${-1*r*.33}\n\n H0 V0 Z`)}(s,t);break;case m.HEXAGON:!function(e,t){const n=t.height,r=n/4,i=t.width-t.padding+2*r;!function(e,t,n,r,i){e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+(i.width-t)/2+", "+n+")")}(e,i,n,[{x:r,y:0},{x:i-r,y:0},{x:i,y:-n/2},{x:i-r,y:-n},{x:r,y:-n},{x:0,y:-n/2}],t)}(s,t)}return b(t.id,a),t.height},C=function(e){const t=E(e.id),n=e.x||0,r=e.y||0;t.attr("transform","translate("+n+","+r+")")};function N(e,t,n,r){D(e,t,n,r),t.children&&t.children.forEach(((t,i)=>{N(e,t,n<0?i:n,r)}))}function A(e,t,n,r){t.add({group:"nodes",data:{id:e.id,labelText:e.descr,height:e.height,width:e.width,level:r,nodeId:e.id,padding:e.padding,type:e.type},position:{x:e.x,y:e.y}}),e.children&&e.children.forEach((i=>{A(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 L(e,t){return new Promise((n=>{const a=(0,i.Ys)("body").append("div").attr("id","cy").attr("style","display:none"),s=o()({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});a.remove(),A(e,s,t,0),s.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),s.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),s.ready((e=>{r.l.info("Ready",e),n(s)}))}))}o().use(l());const k={db:_,renderer:{draw:async(e,t,n,a)=>{const o=(0,r.g)();a.db.clear(),a.parser.parse(e),r.l.debug("Renering info diagram\n"+e);const s=(0,r.g)().securityLevel;let l;"sandbox"===s&&(l=(0,i.Ys)("#i"+t));const u=("sandbox"===s?(0,i.Ys)(l.nodes()[0].contentDocument.body):(0,i.Ys)("body")).select("#"+t);u.append("g");const c=a.db.getMindmap(),h=u.append("g");h.attr("class","mindmap-edges");const d=u.append("g");d.attr("class","mindmap-nodes"),N(d,c,-1,o);const p=await L(c,o);!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){e.nodes().map(((e,t)=>{const n=e.data();n.x=e.position().x,n.y=e.position().y,C(n);const i=E(n.nodeId);r.l.info("Id:",t,"Position: (",e.position().x,", ",e.position().y,")",n),i.attr("transform",`translate(${e.position().x-n.width/2}, ${e.position().y-n.height/2})`),i.attr("attr",`apa-${t})`)}))}(p),(0,r.s)(void 0,u,o.mindmap.padding,o.mindmap.useMaxWidth)}},parser:p,styles:e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n{"use strict";n.d(t,{Z:()=>s});var r=n(61691),i=n(71610);const a=e=>{const{r:t,g:n,b:a}=i.Z.parse(e),o=.2126*r.Z.channel.toLinear(t)+.7152*r.Z.channel.toLinear(n)+.0722*r.Z.channel.toLinear(a);return r.Z.lang.round(o)},o=e=>a(e)>=.5,s=e=>!o(e)}}]); \ No newline at end of file diff --git a/docs/assets/js/2366.7f723f8c.js.LICENSE.txt b/docs/assets/js/2366.7f723f8c.js.LICENSE.txt new file mode 100644 index 000000000..a9f6f1244 --- /dev/null +++ b/docs/assets/js/2366.7f723f8c.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! +Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable +Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) +Licensed under The MIT License (http://opensource.org/licenses/MIT) +*/ + +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ diff --git a/docs/assets/js/237cf9c7.60ed9371.js b/docs/assets/js/237cf9c7.60ed9371.js new file mode 100644 index 000000000..22cbfe4ff --- /dev/null +++ b/docs/assets/js/237cf9c7.60ed9371.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2806],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=l(n),m=a,v=u["".concat(c,".").concat(m)]||u[m]||d[m]||s;return n?r.createElement(v,o(o({ref:t},p),{},{components:n})):r.createElement(v,o({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,o=new Array(s);o[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var l=2;l{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const s={sidebar_position:9,description:"Creating and emitting Events"},o="Events",i={unversionedId:"basics/events",id:"version-0.2.0/basics/events",title:"Events",description:"Creating and emitting Events",source:"@site/versioned_docs/version-0.2.0/basics/09-events.md",sourceDirName:"basics",slug:"/basics/events",permalink:"/docs/0.2.0/basics/events",draft:!1,tags:[],version:"0.2.0",sidebarPosition:9,frontMatter:{sidebar_position:9,description:"Creating and emitting Events"},sidebar:"defaultSidebar",previous:{title:"Errors",permalink:"/docs/0.2.0/basics/errors"},next:{title:"Cross calls",permalink:"/docs/0.2.0/basics/cross-calls"}},c={},l=[{value:"Testing events",id:"testing-events",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Different blockchains implement events in different ways. Odra lets you forget about it by introducing\nOdra Events. Take a look:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"use odra::{Event, contract_env};\nuse odra::types::{Address, BlockTime, event::OdraEvent};\n\n#[odra::module]\npub struct PartyContract {\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n\n#[odra::module]\nimpl PartyContract {\n #[odra(init)]\n pub fn init(&self) {\n PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n }.emit();\n }\n}\n")),(0,a.kt)("p",null,"We defined a new contract, which emits an event called ",(0,a.kt)("inlineCode",{parentName:"p"},"PartyStarted")," when the contract is deployed.\nTo define an event, we derive an ",(0,a.kt)("inlineCode",{parentName:"p"},"Event")," macro like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n")),(0,a.kt)("p",null,"Among other things, it adds an ",(0,a.kt)("inlineCode",{parentName:"p"},"emit()")," function to the struct, which allows you to emit the event simply\nas that:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n}.emit();\n")),(0,a.kt)("h2",{id:"testing-events"},"Testing events"),(0,a.kt)("p",null,"Odra's ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a handy macro ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_events!")," which lets you easily test the events that a given contract has emitted:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"use odra::{assert_events, test_env};\nuse crate::docs::events::PartyStarted;\nuse super::PartyContractDeployer;\n\n#[test]\nfn test_party() {\n let party_contract = PartyContractDeployer::init();\n assert_events!(\n party_contract,\n PartyStarted {\n caller: test_env::get_account(0),\n block_time: 0,\n }\n );\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn how to call other contracts from the contract context."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/239.1c1be196.js b/docs/assets/js/239.1c1be196.js new file mode 100644 index 000000000..d6d1bf3d0 --- /dev/null +++ b/docs/assets/js/239.1c1be196.js @@ -0,0 +1,2 @@ +/*! For license information please see 239.1c1be196.js.LICENSE.txt */ +(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[239],{17967:(t,e)=>{"use strict";e.N=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,i=/&(newline|tab);/gi,a=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,s=/^.+(:|:)/gim,o=[".","/"];e.N=function(t){var e,l=(e=t||"",e.replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(i,"").replace(a,"").trim();if(!l)return"about:blank";if(function(t){return o.indexOf(t[0])>-1}(l))return l;var c=l.match(s);if(!c)return l;var u=c[0];return n.test(u)?"about:blank":l}},3905:(t,e,n)=>{"use strict";n.d(e,{Zo:()=>u,kt:()=>m});var r=n(67294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function s(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var l=r.createContext({}),c=function(t){var e=r.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):s(s({},e),t)),n},u=function(t){var e=c(t.components);return r.createElement(l.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},h=r.forwardRef((function(t,e){var n=t.components,i=t.mdxType,a=t.originalType,l=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),h=c(n),m=i,_=h["".concat(l,".").concat(m)]||h[m]||d[m]||a;return n?r.createElement(_,s(s({ref:e},u),{},{components:n})):r.createElement(_,s({ref:e},u))}));function m(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var a=n.length,s=new Array(a);s[0]=h;var o={};for(var l in e)hasOwnProperty.call(e,l)&&(o[l]=e[l]);o.originalType=t,o.mdxType="string"==typeof t?t:i,s[1]=o;for(var c=2;c{"use strict";n.d(e,{Z:()=>u});var r=n(67294),i=n(95999),a=n(35281),s=n(87462),o=n(86010);const l="iconEdit_Z9Sw";function c(t){let{className:e,...n}=t;return r.createElement("svg",(0,s.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,o.Z)(l,e),"aria-hidden":"true"},n),r.createElement("g",null,r.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function u(t){let{editUrl:e}=t;return r.createElement("a",{href:e,target:"_blank",rel:"noreferrer noopener",className:a.k.common.editThisPage},r.createElement(c,null),r.createElement(i.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},92503:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var r=n(87462),i=n(67294),a=n(86010),s=n(95999),o=n(86668),l=n(39960);const c="anchorWithStickyNavbar_LWe7",u="anchorWithHideOnScrollNavbar_WYt5";function d(t){let{as:e,id:n,...d}=t;const{navbar:{hideOnScroll:h}}=(0,o.L)();if("h1"===e||!n)return i.createElement(e,(0,r.Z)({},d,{id:void 0}));const m=(0,s.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:n});return i.createElement(e,(0,r.Z)({},d,{className:(0,a.Z)("anchor",h?u:c,d.className),id:n}),d.children,i.createElement(l.Z,{className:"hash-link",to:`#${n}`,"aria-label":m,title:m},"\u200b"))}},88905:(t,e,n)=>{"use strict";n.d(e,{Z:()=>xt});var r=n(67294),i=n(3905),a=n(87462),s=n(35742);var o=n(72389),l=n(86010),c=n(92949),u=n(86668);function d(){const{prism:t}=(0,u.L)(),{colorMode:e}=(0,c.I)(),n=t.theme,r=t.darkTheme||n;return"dark"===e?r:n}var h=n(35281),m=n(87594),_=n.n(m);const p=/title=(?["'])(?.*?)\1/,f=/\{(?<range>[\d,-]+)\}/,y={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function g(t,e){const n=t.map((t=>{const{start:n,end:r}=y[t];return`(?:${n}\\s*(${e.flatMap((t=>[t.line,t.block?.start,t.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function b(t,e){let n=t.replace(/\n$/,"");const{language:r,magicComments:i,metastring:a}=e;if(a&&f.test(a)){const t=a.match(f).groups.range;if(0===i.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const e=i[0].className,r=_()(t).filter((t=>t>0)).map((t=>[t-1,[e]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(t,e){switch(t){case"js":case"javascript":case"ts":case"typescript":return g(["js","jsBlock"],e);case"jsx":case"tsx":return g(["js","jsBlock","jsx"],e);case"html":return g(["js","jsBlock","html"],e);case"python":case"py":case"bash":return g(["bash"],e);case"markdown":case"md":return g(["html","jsx","bash"],e);default:return g(Object.keys(y),e)}}(r,i),o=n.split("\n"),l=Object.fromEntries(i.map((t=>[t.className,{start:0,range:""}]))),c=Object.fromEntries(i.filter((t=>t.line)).map((t=>{let{className:e,line:n}=t;return[n,e]}))),u=Object.fromEntries(i.filter((t=>t.block)).map((t=>{let{className:e,block:n}=t;return[n.start,e]}))),d=Object.fromEntries(i.filter((t=>t.block)).map((t=>{let{className:e,block:n}=t;return[n.end,e]})));for(let m=0;m<o.length;){const t=o[m].match(s);if(!t){m+=1;continue}const e=t.slice(1).find((t=>void 0!==t));c[e]?l[c[e]].range+=`${m},`:u[e]?l[u[e]].start=m:d[e]&&(l[d[e]].range+=`${l[d[e]].start}-${m-1},`),o.splice(m,1)}n=o.join("\n");const h={};return Object.entries(l).forEach((t=>{let[e,{range:n}]=t;_()(n).forEach((t=>{h[t]??=[],h[t].push(e)}))})),{lineClassNames:h,code:n}}const k="codeBlockContainer_Ckt0";function v(t){let{as:e,...n}=t;const i=function(t){const e={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(t.plain).forEach((t=>{let[r,i]=t;const a=e[r];a&&"string"==typeof i&&(n[a]=i)})),n}(d());return r.createElement(e,(0,a.Z)({},n,{style:i,className:(0,l.Z)(n.className,k,h.k.common.codeBlock)}))}const x={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function M(t){let{children:e,className:n}=t;return r.createElement(v,{as:"pre",tabIndex:0,className:(0,l.Z)(x.codeBlockStandalone,"thin-scrollbar",n)},r.createElement("code",{className:x.codeBlockLines},e))}var L=n(902);const w={attributes:!0,characterData:!0,childList:!0,subtree:!0};function T(t,e){const[n,i]=(0,r.useState)(),a=(0,r.useCallback)((()=>{i(t.current?.closest("[role=tabpanel][hidden]"))}),[t,i]);(0,r.useEffect)((()=>{a()}),[a]),function(t,e,n){void 0===n&&(n=w);const i=(0,L.zX)(e),a=(0,L.Ql)(n);(0,r.useEffect)((()=>{const e=new MutationObserver(i);return t&&e.observe(t,a),()=>e.disconnect()}),[t,i,a])}(n,(t=>{t.forEach((t=>{"attributes"===t.type&&"hidden"===t.attributeName&&(e(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const S={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var D={Prism:n(87410).Z,theme:S};function Y(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function E(){return E=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},E.apply(this,arguments)}var C=/\r\n|\r|\n/,A=function(t){0===t.length?t.push({types:["plain"],content:"\n",empty:!0}):1===t.length&&""===t[0].content&&(t[0].content="\n",t[0].empty=!0)},O=function(t,e){var n=t.length;return n>0&&t[n-1]===e?t:t.concat(e)},N=function(t,e){var n=t.plain,r=Object.create(null),i=t.styles.reduce((function(t,n){var r=n.languages,i=n.style;return r&&!r.includes(e)||n.types.forEach((function(e){var n=E({},t[e],i);t[e]=n})),t}),r);return i.root=n,i.plain=E({},n,{backgroundColor:null}),i};function B(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&-1===e.indexOf(r)&&(n[r]=t[r]);return n}const F=function(t){function e(){for(var e=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];t.apply(this,n),Y(this,"getThemeDict",(function(t){if(void 0!==e.themeDict&&t.theme===e.prevTheme&&t.language===e.prevLanguage)return e.themeDict;e.prevTheme=t.theme,e.prevLanguage=t.language;var n=t.theme?N(t.theme,t.language):void 0;return e.themeDict=n})),Y(this,"getLineProps",(function(t){var n=t.key,r=t.className,i=t.style,a=E({},B(t,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),s=e.getThemeDict(e.props);return void 0!==s&&(a.style=s.plain),void 0!==i&&(a.style=void 0!==a.style?E({},a.style,i):i),void 0!==n&&(a.key=n),r&&(a.className+=" "+r),a})),Y(this,"getStyleForToken",(function(t){var n=t.types,r=t.empty,i=n.length,a=e.getThemeDict(e.props);if(void 0!==a){if(1===i&&"plain"===n[0])return r?{display:"inline-block"}:void 0;if(1===i&&!r)return a[n[0]];var s=r?{display:"inline-block"}:{},o=n.map((function(t){return a[t]}));return Object.assign.apply(Object,[s].concat(o))}})),Y(this,"getTokenProps",(function(t){var n=t.key,r=t.className,i=t.style,a=t.token,s=E({},B(t,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:e.getStyleForToken(a),key:void 0});return void 0!==i&&(s.style=void 0!==s.style?E({},s.style,i):i),void 0!==n&&(s.key=n),r&&(s.className+=" "+r),s})),Y(this,"tokenize",(function(t,e,n,r){var i={code:e,grammar:n,language:r,tokens:[]};t.hooks.run("before-tokenize",i);var a=i.tokens=t.tokenize(i.code,i.grammar,i.language);return t.hooks.run("after-tokenize",i),a}))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.render=function(){var t=this.props,e=t.Prism,n=t.language,r=t.code,i=t.children,a=this.getThemeDict(this.props),s=e.languages[n];return i({tokens:function(t){for(var e=[[]],n=[t],r=[0],i=[t.length],a=0,s=0,o=[],l=[o];s>-1;){for(;(a=r[s]++)<i[s];){var c=void 0,u=e[s],d=n[s][a];if("string"==typeof d?(u=s>0?u:["plain"],c=d):(u=O(u,d.type),d.alias&&(u=O(u,d.alias)),c=d.content),"string"==typeof c){var h=c.split(C),m=h.length;o.push({types:u,content:h[0]});for(var _=1;_<m;_++)A(o),l.push(o=[]),o.push({types:u,content:h[_]})}else s++,e.push(u),n.push(c),r.push(0),i.push(c.length)}s--,e.pop(),n.pop(),r.pop(),i.pop()}return A(o),l}(void 0!==s?this.tokenize(e,r,s,n):[r]),className:"prism-code language-"+n,style:void 0!==a?a.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},e}(r.Component),I="codeLine_lJS_",P="codeLineNumber_Tfdd",j="codeLineContent_feaV";function R(t){let{line:e,classNames:n,showLineNumbers:i,getLineProps:s,getTokenProps:o}=t;1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=s({line:e,className:(0,l.Z)(n,i&&I)}),u=e.map(((t,e)=>r.createElement("span",(0,a.Z)({key:e},o({token:t,key:e})))));return r.createElement("span",c,i?r.createElement(r.Fragment,null,r.createElement("span",{className:P}),r.createElement("span",{className:j},u)):u,r.createElement("br",null))}var H=n(95999);const $={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function Z(t){let{code:e,className:n}=t;const[i,a]=(0,r.useState)(!1),s=(0,r.useRef)(void 0),o=(0,r.useCallback)((()=>{!function(t,e){let{target:n=document.body}=void 0===e?{}:e;const r=document.createElement("textarea"),i=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 a=document.getSelection();let s=!1;a.rangeCount>0&&(s=a.getRangeAt(0)),n.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let o=!1;try{o=document.execCommand("copy")}catch{}r.remove(),s&&(a.removeAllRanges(),a.addRange(s)),i&&i.focus()}(e),a(!0),s.current=window.setTimeout((()=>{a(!1)}),1e3)}),[e]);return(0,r.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),r.createElement("button",{type:"button","aria-label":i?(0,H.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,H.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,H.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,l.Z)("clean-btn",n,$.copyButton,i&&$.copyButtonCopied),onClick:o},r.createElement("span",{className:$.copyButtonIcons,"aria-hidden":"true"},r.createElement("svg",{className:$.copyButtonIcon,viewBox:"0 0 24 24"},r.createElement("path",{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"})),r.createElement("svg",{className:$.copyButtonSuccessIcon,viewBox:"0 0 24 24"},r.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))))}const W="wordWrapButtonIcon_Bwma",z="wordWrapButtonEnabled_EoeP";function U(t){let{className:e,onClick:n,isEnabled:i}=t;const a=(0,H.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return r.createElement("button",{type:"button",onClick:n,className:(0,l.Z)("clean-btn",e,i&&z),"aria-label":a,title:a},r.createElement("svg",{className:W,viewBox:"0 0 24 24","aria-hidden":"true"},r.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})))}function q(t){let{children:e,className:n="",metastring:i,title:s,showLineNumbers:o,language:c}=t;const{prism:{defaultLanguage:h,magicComments:m}}=(0,u.L)(),_=c??n.split(" ").find((t=>t.startsWith("language-")))?.replace(/language-/,"")??h;const f=d(),y=function(){const[t,e]=(0,r.useState)(!1),[n,i]=(0,r.useState)(!1),a=(0,r.useRef)(null),s=(0,r.useCallback)((()=>{const n=a.current.querySelector("code");t?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),e((t=>!t))}),[a,t]),o=(0,r.useCallback)((()=>{const{scrollWidth:t,clientWidth:e}=a.current,n=t>e||a.current.querySelector("code").hasAttribute("style");i(n)}),[a]);return T(a,o),(0,r.useEffect)((()=>{o()}),[t,o]),(0,r.useEffect)((()=>(window.addEventListener("resize",o,{passive:!0}),()=>{window.removeEventListener("resize",o)})),[o]),{codeBlockRef:a,isEnabled:t,isCodeScrollable:n,toggle:s}}(),g=function(t){return t?.match(p)?.groups.title??""}(i)||s,{lineClassNames:k,code:M}=b(e,{metastring:i,language:_,magicComments:m}),L=o??function(t){return Boolean(t?.includes("showLineNumbers"))}(i);return r.createElement(v,{as:"div",className:(0,l.Z)(n,_&&!n.includes(`language-${_}`)&&`language-${_}`)},g&&r.createElement("div",{className:x.codeBlockTitle},g),r.createElement("div",{className:x.codeBlockContent},r.createElement(F,(0,a.Z)({},D,{theme:f,code:M,language:_??"text"}),(t=>{let{className:e,tokens:n,getLineProps:i,getTokenProps:a}=t;return r.createElement("pre",{tabIndex:0,ref:y.codeBlockRef,className:(0,l.Z)(e,x.codeBlock,"thin-scrollbar")},r.createElement("code",{className:(0,l.Z)(x.codeBlockLines,L&&x.codeBlockLinesWithNumbering)},n.map(((t,e)=>r.createElement(R,{key:e,line:t,getLineProps:i,getTokenProps:a,classNames:k[e],showLineNumbers:L})))))})),r.createElement("div",{className:x.buttonGroup},(y.isEnabled||y.isCodeScrollable)&&r.createElement(U,{className:x.codeButton,onClick:()=>y.toggle(),isEnabled:y.isEnabled}),r.createElement(Z,{className:x.codeButton,code:M}))))}function V(t){let{children:e,...n}=t;const i=(0,o.Z)(),s=function(t){return r.Children.toArray(t).some((t=>(0,r.isValidElement)(t)))?t:Array.isArray(t)?t.join(""):t}(e),l="string"==typeof s?q:M;return r.createElement(l,(0,a.Z)({key:String(i)},n),s)}var G=n(39960);var J=n(86043);const X="details_lb9f",K="isBrowser_bmU9",Q="collapsibleContent_i85q";function tt(t){return!!t&&("SUMMARY"===t.tagName||tt(t.parentElement))}function et(t,e){return!!t&&(t===e||et(t.parentElement,e))}function nt(t){let{summary:e,children:n,...i}=t;const s=(0,o.Z)(),c=(0,r.useRef)(null),{collapsed:u,setCollapsed:d}=(0,J.u)({initialState:!i.open}),[h,m]=(0,r.useState)(i.open);return r.createElement("details",(0,a.Z)({},i,{ref:c,open:h,"data-collapsed":u,className:(0,l.Z)(X,s&&K,i.className),onMouseDown:t=>{tt(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;tt(e)&&et(e,c.current)&&(t.preventDefault(),u?(d(!1),m(!0)):d(!0))}}),e??r.createElement("summary",null,"Details"),r.createElement(J.z,{lazy:!1,collapsed:u,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{d(t),m(!t)}},r.createElement("div",{className:Q},n)))}const rt="details_b_Ee";function it(t){let{...e}=t;return r.createElement(nt,(0,a.Z)({},e,{className:(0,l.Z)("alert alert--info",rt,e.className)}))}var at=n(92503);function st(t){return r.createElement(at.Z,t)}const ot="containsTaskList_mC6p";const lt="img_ev3q";const ct="admonition_LlT9",ut="admonitionHeading_tbUL",dt="admonitionIcon_kALy",ht="admonitionContent_S0QG";const mt={note:{infimaClassName:"secondary",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:r.createElement(H.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:r.createElement(H.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:r.createElement(H.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:r.createElement(H.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 16 16"},r.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:r.createElement(H.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},_t={secondary:"note",important:"info",success:"tip",warning:"danger"};function pt(t){const{mdxAdmonitionTitle:e,rest:n}=function(t){const e=r.Children.toArray(t),n=e.find((t=>r.isValidElement(t)&&"mdxAdmonitionTitle"===t.props?.mdxType)),i=r.createElement(r.Fragment,null,e.filter((t=>t!==n)));return{mdxAdmonitionTitle:n,rest:i}}(t.children);return{...t,title:t.title??e,children:n}}function ft(t){let{children:e,fallback:n}=t;return(0,o.Z)()?r.createElement(r.Fragment,null,e?.()):n??null}var yt=n(74737);function gt(){const{colorMode:t}=(0,c.I)(),e=(0,u.L)().mermaid,n=e.theme[t],{options:i}=e;return(0,r.useMemo)((()=>({startOnLoad:!1,...i,theme:n})),[n,i])}const bt="container_lyt7";function kt(t){let{value:e}=t;const n=function(t,e){const n=gt(),i=e??n;return(0,r.useMemo)((()=>{yt.o.mermaidAPI.initialize(i);const e=`mermaid-svg-${Math.round(1e7*Math.random())}`;return yt.o.render(e,t)}),[t,i])}(e);return r.createElement("div",{className:`docusaurus-mermaid-container ${bt}`,dangerouslySetInnerHTML:{__html:n}})}const vt={head:function(t){const e=r.Children.map(t.children,(t=>r.isValidElement(t)?function(t){if(t.props?.mdxType&&t.props.originalType){const{mdxType:e,originalType:n,...i}=t.props;return r.createElement(t.props.originalType,i)}return t}(t):t));return r.createElement(s.Z,t,e)},code:function(t){const e=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return r.Children.toArray(t.children).every((t=>"string"==typeof t&&!t.includes("\n")||(0,r.isValidElement)(t)&&e.includes(t.props?.mdxType)))?r.createElement("code",t):r.createElement(V,t)},a:function(t){return r.createElement(G.Z,t)},pre:function(t){return r.createElement(V,(0,r.isValidElement)(t.children)&&"code"===t.children.props?.originalType?t.children.props:{...t})},details:function(t){const e=r.Children.toArray(t.children),n=e.find((t=>r.isValidElement(t)&&"summary"===t.props?.mdxType)),i=r.createElement(r.Fragment,null,e.filter((t=>t!==n)));return r.createElement(it,(0,a.Z)({},t,{summary:n}),i)},ul:function(t){return r.createElement("ul",(0,a.Z)({},t,{className:(e=t.className,(0,l.Z)(e,e?.includes("contains-task-list")&&ot))}));var e},img:function(t){return r.createElement("img",(0,a.Z)({loading:"lazy"},t,{className:(e=t.className,(0,l.Z)(e,lt))}));var e},h1:t=>r.createElement(st,(0,a.Z)({as:"h1"},t)),h2:t=>r.createElement(st,(0,a.Z)({as:"h2"},t)),h3:t=>r.createElement(st,(0,a.Z)({as:"h3"},t)),h4:t=>r.createElement(st,(0,a.Z)({as:"h4"},t)),h5:t=>r.createElement(st,(0,a.Z)({as:"h5"},t)),h6:t=>r.createElement(st,(0,a.Z)({as:"h6"},t)),admonition:function(t){const{children:e,type:n,title:i,icon:a}=pt(t),s=function(t){const e=_t[t]??t;return mt[e]||(console.warn(`No admonition config found for admonition type "${e}". Using Info as fallback.`),mt.info)}(n),o=i??s.label,{iconComponent:c}=s,u=a??r.createElement(c,null);return r.createElement("div",{className:(0,l.Z)(h.k.common.admonition,h.k.common.admonitionType(t.type),"alert",`alert--${s.infimaClassName}`,ct)},r.createElement("div",{className:ut},r.createElement("span",{className:dt},u),o),r.createElement("div",{className:ht},e))},mermaid:function(t){return r.createElement(ft,null,(()=>r.createElement(kt,t)))}};function xt(t){let{children:e}=t;return r.createElement(i.Zo,{components:vt},e)}},32244:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(67294),i=n(86010),a=n(39960);function s(t){const{permalink:e,title:n,subLabel:s,isNext:o}=t;return r.createElement(a.Z,{className:(0,i.Z)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e},s&&r.createElement("div",{className:"pagination-nav__sublabel"},s),r.createElement("div",{className:"pagination-nav__label"},n))}},86233:(t,e,n)=>{"use strict";n.d(e,{Z:()=>m});var r=n(67294),i=n(86010),a=n(95999),s=n(39960);const o="tag_zVej",l="tagRegular_sFm0",c="tagWithCount_h2kH";function u(t){let{permalink:e,label:n,count:a}=t;return r.createElement(s.Z,{href:e,className:(0,i.Z)(o,a?c:l)},n,a&&r.createElement("span",null,a))}const d="tags_jXut",h="tag_QGVx";function m(t){let{tags:e}=t;return r.createElement(r.Fragment,null,r.createElement("b",null,r.createElement(a.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),r.createElement("ul",{className:(0,i.Z)(d,"padding--none","margin-left--sm")},e.map((t=>{let{label:e,permalink:n}=t;return r.createElement("li",{key:n,className:h},r.createElement(u,{label:e,permalink:n}))}))))}},27856:function(t){t.exports=function(){"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,n){return e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(t,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function r(t,i,a){return r=n()?Reflect.construct:function(t,n,r){var i=[null];i.push.apply(i,n);var a=new(Function.bind.apply(t,i));return r&&e(a,r.prototype),a},r.apply(null,arguments)}function i(t){return a(t)||s(t)||o(t)||c()}function a(t){if(Array.isArray(t))return l(t)}function s(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function o(t,e){if(t){if("string"==typeof t)return l(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function c(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u=Object.hasOwnProperty,d=Object.setPrototypeOf,h=Object.isFrozen,m=Object.getPrototypeOf,_=Object.getOwnPropertyDescriptor,p=Object.freeze,f=Object.seal,y=Object.create,g="undefined"!=typeof Reflect&&Reflect,b=g.apply,k=g.construct;b||(b=function(t,e,n){return t.apply(e,n)}),p||(p=function(t){return t}),f||(f=function(t){return t}),k||(k=function(t,e){return r(t,i(e))});var v=A(Array.prototype.forEach),x=A(Array.prototype.pop),M=A(Array.prototype.push),L=A(String.prototype.toLowerCase),w=A(String.prototype.toString),T=A(String.prototype.match),S=A(String.prototype.replace),D=A(String.prototype.indexOf),Y=A(String.prototype.trim),E=A(RegExp.prototype.test),C=O(TypeError);function A(t){return function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return b(t,e,r)}}function O(t){return function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return k(t,n)}}function N(t,e,n){n=n||L,d&&d(t,null);for(var r=e.length;r--;){var i=e[r];if("string"==typeof i){var a=n(i);a!==i&&(h(e)||(e[r]=a),i=a)}t[i]=!0}return t}function B(t){var e,n=y(null);for(e in t)!0===b(u,t,[e])&&(n[e]=t[e]);return n}function F(t,e){for(;null!==t;){var n=_(t,e);if(n){if(n.get)return A(n.get);if("function"==typeof n.value)return A(n.value)}t=m(t)}function r(t){return console.warn("fallback value for",t),null}return r}var I=p(["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"]),P=p(["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"]),j=p(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),R=p(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),H=p(["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"]),$=p(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Z=p(["#text"]),W=p(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),z=p(["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"]),U=p(["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=p(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),V=f(/\{\{[\w\W]*|[\w\W]*\}\}/gm),G=f(/<%[\w\W]*|[\w\W]*%>/gm),J=f(/\${[\w\W]*}/gm),X=f(/^data-[\-\w.\u00B7-\uFFFF]/),K=f(/^aria-[\-\w]+$/),Q=f(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),tt=f(/^(?:\w+script|data):/i),et=f(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),nt=f(/^html$/i),rt=function(){return"undefined"==typeof window?null:window},it=function(e,n){if("object"!==t(e)||"function"!=typeof e.createPolicy)return null;var r=null,i="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(i)&&(r=n.currentScript.getAttribute(i));var a="dompurify"+(r?"#"+r:"");try{return e.createPolicy(a,{createHTML:function(t){return t},createScriptURL:function(t){return t}})}catch(s){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};function at(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:rt(),n=function(t){return at(t)};if(n.version="2.4.3",n.removed=[],!e||!e.document||9!==e.document.nodeType)return n.isSupported=!1,n;var r=e.document,a=e.document,s=e.DocumentFragment,o=e.HTMLTemplateElement,l=e.Node,c=e.Element,u=e.NodeFilter,d=e.NamedNodeMap,h=void 0===d?e.NamedNodeMap||e.MozNamedAttrMap:d,m=e.HTMLFormElement,_=e.DOMParser,f=e.trustedTypes,y=c.prototype,g=F(y,"cloneNode"),b=F(y,"nextSibling"),k=F(y,"childNodes"),A=F(y,"parentNode");if("function"==typeof o){var O=a.createElement("template");O.content&&O.content.ownerDocument&&(a=O.content.ownerDocument)}var st=it(f,r),ot=st?st.createHTML(""):"",lt=a,ct=lt.implementation,ut=lt.createNodeIterator,dt=lt.createDocumentFragment,ht=lt.getElementsByTagName,mt=r.importNode,_t={};try{_t=B(a).documentMode?a.documentMode:{}}catch(Ae){}var pt={};n.isSupported="function"==typeof A&&ct&&void 0!==ct.createHTMLDocument&&9!==_t;var ft,yt,gt=V,bt=G,kt=J,vt=X,xt=K,Mt=tt,Lt=et,wt=Q,Tt=null,St=N({},[].concat(i(I),i(P),i(j),i(H),i(Z))),Dt=null,Yt=N({},[].concat(i(W),i(z),i(U),i(q))),Et=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ct=null,At=null,Ot=!0,Nt=!0,Bt=!1,Ft=!1,It=!1,Pt=!1,jt=!1,Rt=!1,Ht=!1,$t=!1,Zt=!0,Wt=!1,zt="user-content-",Ut=!0,qt=!1,Vt={},Gt=null,Jt=N({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Xt=null,Kt=N({},["audio","video","img","source","image","track"]),Qt=null,te=N({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ee="http://www.w3.org/1998/Math/MathML",ne="http://www.w3.org/2000/svg",re="http://www.w3.org/1999/xhtml",ie=re,ae=!1,se=null,oe=N({},[ee,ne,re],w),le=["application/xhtml+xml","text/html"],ce="text/html",ue=null,de=a.createElement("form"),he=function(t){return t instanceof RegExp||t instanceof Function},me=function(e){ue&&ue===e||(e&&"object"===t(e)||(e={}),e=B(e),ft=ft=-1===le.indexOf(e.PARSER_MEDIA_TYPE)?ce:e.PARSER_MEDIA_TYPE,yt="application/xhtml+xml"===ft?w:L,Tt="ALLOWED_TAGS"in e?N({},e.ALLOWED_TAGS,yt):St,Dt="ALLOWED_ATTR"in e?N({},e.ALLOWED_ATTR,yt):Yt,se="ALLOWED_NAMESPACES"in e?N({},e.ALLOWED_NAMESPACES,w):oe,Qt="ADD_URI_SAFE_ATTR"in e?N(B(te),e.ADD_URI_SAFE_ATTR,yt):te,Xt="ADD_DATA_URI_TAGS"in e?N(B(Kt),e.ADD_DATA_URI_TAGS,yt):Kt,Gt="FORBID_CONTENTS"in e?N({},e.FORBID_CONTENTS,yt):Jt,Ct="FORBID_TAGS"in e?N({},e.FORBID_TAGS,yt):{},At="FORBID_ATTR"in e?N({},e.FORBID_ATTR,yt):{},Vt="USE_PROFILES"in e&&e.USE_PROFILES,Ot=!1!==e.ALLOW_ARIA_ATTR,Nt=!1!==e.ALLOW_DATA_ATTR,Bt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ft=e.SAFE_FOR_TEMPLATES||!1,It=e.WHOLE_DOCUMENT||!1,Rt=e.RETURN_DOM||!1,Ht=e.RETURN_DOM_FRAGMENT||!1,$t=e.RETURN_TRUSTED_TYPE||!1,jt=e.FORCE_BODY||!1,Zt=!1!==e.SANITIZE_DOM,Wt=e.SANITIZE_NAMED_PROPS||!1,Ut=!1!==e.KEEP_CONTENT,qt=e.IN_PLACE||!1,wt=e.ALLOWED_URI_REGEXP||wt,ie=e.NAMESPACE||re,e.CUSTOM_ELEMENT_HANDLING&&he(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Et.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&he(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Et.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Et.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ft&&(Nt=!1),Ht&&(Rt=!0),Vt&&(Tt=N({},i(Z)),Dt=[],!0===Vt.html&&(N(Tt,I),N(Dt,W)),!0===Vt.svg&&(N(Tt,P),N(Dt,z),N(Dt,q)),!0===Vt.svgFilters&&(N(Tt,j),N(Dt,z),N(Dt,q)),!0===Vt.mathMl&&(N(Tt,H),N(Dt,U),N(Dt,q))),e.ADD_TAGS&&(Tt===St&&(Tt=B(Tt)),N(Tt,e.ADD_TAGS,yt)),e.ADD_ATTR&&(Dt===Yt&&(Dt=B(Dt)),N(Dt,e.ADD_ATTR,yt)),e.ADD_URI_SAFE_ATTR&&N(Qt,e.ADD_URI_SAFE_ATTR,yt),e.FORBID_CONTENTS&&(Gt===Jt&&(Gt=B(Gt)),N(Gt,e.FORBID_CONTENTS,yt)),Ut&&(Tt["#text"]=!0),It&&N(Tt,["html","head","body"]),Tt.table&&(N(Tt,["tbody"]),delete Ct.tbody),p&&p(e),ue=e)},_e=N({},["mi","mo","mn","ms","mtext"]),pe=N({},["foreignobject","desc","title","annotation-xml"]),fe=N({},["title","style","font","a","script"]),ye=N({},P);N(ye,j),N(ye,R);var ge=N({},H);N(ge,$);var be=function(t){var e=A(t);e&&e.tagName||(e={namespaceURI:ie,tagName:"template"});var n=L(t.tagName),r=L(e.tagName);return!!se[t.namespaceURI]&&(t.namespaceURI===ne?e.namespaceURI===re?"svg"===n:e.namespaceURI===ee?"svg"===n&&("annotation-xml"===r||_e[r]):Boolean(ye[n]):t.namespaceURI===ee?e.namespaceURI===re?"math"===n:e.namespaceURI===ne?"math"===n&&pe[r]:Boolean(ge[n]):t.namespaceURI===re?!(e.namespaceURI===ne&&!pe[r])&&!(e.namespaceURI===ee&&!_e[r])&&!ge[n]&&(fe[n]||!ye[n]):!("application/xhtml+xml"!==ft||!se[t.namespaceURI]))},ke=function(t){M(n.removed,{element:t});try{t.parentNode.removeChild(t)}catch(Ae){try{t.outerHTML=ot}catch(Ae){t.remove()}}},ve=function(t,e){try{M(n.removed,{attribute:e.getAttributeNode(t),from:e})}catch(Ae){M(n.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!Dt[t])if(Rt||Ht)try{ke(e)}catch(Ae){}else try{e.setAttribute(t,"")}catch(Ae){}},xe=function(t){var e,n;if(jt)t="<remove></remove>"+t;else{var r=T(t,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===ft&&ie===re&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");var i=st?st.createHTML(t):t;if(ie===re)try{e=(new _).parseFromString(i,ft)}catch(Ae){}if(!e||!e.documentElement){e=ct.createDocument(ie,"template",null);try{e.documentElement.innerHTML=ae?ot:i}catch(Ae){}}var s=e.body||e.documentElement;return t&&n&&s.insertBefore(a.createTextNode(n),s.childNodes[0]||null),ie===re?ht.call(e,It?"html":"body")[0]:It?e.documentElement:s},Me=function(t){return ut.call(t.ownerDocument||t,t,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,null,!1)},Le=function(t){return t instanceof m&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof h)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},we=function(e){return"object"===t(l)?e instanceof l:e&&"object"===t(e)&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},Te=function(t,e,r){pt[t]&&v(pt[t],(function(t){t.call(n,e,r,ue)}))},Se=function(t){var e;if(Te("beforeSanitizeElements",t,null),Le(t))return ke(t),!0;if(E(/[\u0080-\uFFFF]/,t.nodeName))return ke(t),!0;var r=yt(t.nodeName);if(Te("uponSanitizeElement",t,{tagName:r,allowedTags:Tt}),t.hasChildNodes()&&!we(t.firstElementChild)&&(!we(t.content)||!we(t.content.firstElementChild))&&E(/<[/\w]/g,t.innerHTML)&&E(/<[/\w]/g,t.textContent))return ke(t),!0;if("select"===r&&E(/<template/i,t.innerHTML))return ke(t),!0;if(!Tt[r]||Ct[r]){if(!Ct[r]&&Ye(r)){if(Et.tagNameCheck instanceof RegExp&&E(Et.tagNameCheck,r))return!1;if(Et.tagNameCheck instanceof Function&&Et.tagNameCheck(r))return!1}if(Ut&&!Gt[r]){var i=A(t)||t.parentNode,a=k(t)||t.childNodes;if(a&&i)for(var s=a.length-1;s>=0;--s)i.insertBefore(g(a[s],!0),b(t))}return ke(t),!0}return t instanceof c&&!be(t)?(ke(t),!0):"noscript"!==r&&"noembed"!==r||!E(/<\/no(script|embed)/i,t.innerHTML)?(Ft&&3===t.nodeType&&(e=t.textContent,e=S(e,gt," "),e=S(e,bt," "),e=S(e,kt," "),t.textContent!==e&&(M(n.removed,{element:t.cloneNode()}),t.textContent=e)),Te("afterSanitizeElements",t,null),!1):(ke(t),!0)},De=function(t,e,n){if(Zt&&("id"===e||"name"===e)&&(n in a||n in de))return!1;if(Nt&&!At[e]&&E(vt,e));else if(Ot&&E(xt,e));else if(!Dt[e]||At[e]){if(!(Ye(t)&&(Et.tagNameCheck instanceof RegExp&&E(Et.tagNameCheck,t)||Et.tagNameCheck instanceof Function&&Et.tagNameCheck(t))&&(Et.attributeNameCheck instanceof RegExp&&E(Et.attributeNameCheck,e)||Et.attributeNameCheck instanceof Function&&Et.attributeNameCheck(e))||"is"===e&&Et.allowCustomizedBuiltInElements&&(Et.tagNameCheck instanceof RegExp&&E(Et.tagNameCheck,n)||Et.tagNameCheck instanceof Function&&Et.tagNameCheck(n))))return!1}else if(Qt[e]);else if(E(wt,S(n,Lt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==D(n,"data:")||!Xt[t])if(Bt&&!E(Mt,S(n,Lt,"")));else if(n)return!1;return!0},Ye=function(t){return t.indexOf("-")>0},Ee=function(e){var r,i,a,s;Te("beforeSanitizeAttributes",e,null);var o=e.attributes;if(o){var l={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Dt};for(s=o.length;s--;){var c=r=o[s],u=c.name,d=c.namespaceURI;if(i="value"===u?r.value:Y(r.value),a=yt(u),l.attrName=a,l.attrValue=i,l.keepAttr=!0,l.forceKeepAttr=void 0,Te("uponSanitizeAttribute",e,l),i=l.attrValue,!l.forceKeepAttr&&(ve(u,e),l.keepAttr))if(E(/\/>/i,i))ve(u,e);else{Ft&&(i=S(i,gt," "),i=S(i,bt," "),i=S(i,kt," "));var h=yt(e.nodeName);if(De(h,a,i)){if(!Wt||"id"!==a&&"name"!==a||(ve(u,e),i=zt+i),st&&"object"===t(f)&&"function"==typeof f.getAttributeType)if(d);else switch(f.getAttributeType(h,a)){case"TrustedHTML":i=st.createHTML(i);break;case"TrustedScriptURL":i=st.createScriptURL(i)}try{d?e.setAttributeNS(d,u,i):e.setAttribute(u,i),x(n.removed)}catch(Ae){}}}}Te("afterSanitizeAttributes",e,null)}},Ce=function t(e){var n,r=Me(e);for(Te("beforeSanitizeShadowDOM",e,null);n=r.nextNode();)Te("uponSanitizeShadowNode",n,null),Se(n)||(n.content instanceof s&&t(n.content),Ee(n));Te("afterSanitizeShadowDOM",e,null)};return n.sanitize=function(i){var a,o,c,u,d,h=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((ae=!i)&&(i="\x3c!--\x3e"),"string"!=typeof i&&!we(i)){if("function"!=typeof i.toString)throw C("toString is not a function");if("string"!=typeof(i=i.toString()))throw C("dirty is not a string, aborting")}if(!n.isSupported){if("object"===t(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof i)return e.toStaticHTML(i);if(we(i))return e.toStaticHTML(i.outerHTML)}return i}if(Pt||me(h),n.removed=[],"string"==typeof i&&(qt=!1),qt){if(i.nodeName){var m=yt(i.nodeName);if(!Tt[m]||Ct[m])throw C("root node is forbidden and cannot be sanitized in-place")}}else if(i instanceof l)1===(o=(a=xe("\x3c!----\x3e")).ownerDocument.importNode(i,!0)).nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?a=o:a.appendChild(o);else{if(!Rt&&!Ft&&!It&&-1===i.indexOf("<"))return st&&$t?st.createHTML(i):i;if(!(a=xe(i)))return Rt?null:$t?ot:""}a&&jt&&ke(a.firstChild);for(var _=Me(qt?i:a);c=_.nextNode();)3===c.nodeType&&c===u||Se(c)||(c.content instanceof s&&Ce(c.content),Ee(c),u=c);if(u=null,qt)return i;if(Rt){if(Ht)for(d=dt.call(a.ownerDocument);a.firstChild;)d.appendChild(a.firstChild);else d=a;return Dt.shadowroot&&(d=mt.call(r,d,!0)),d}var p=It?a.outerHTML:a.innerHTML;return It&&Tt["!doctype"]&&a.ownerDocument&&a.ownerDocument.doctype&&a.ownerDocument.doctype.name&&E(nt,a.ownerDocument.doctype.name)&&(p="<!DOCTYPE "+a.ownerDocument.doctype.name+">\n"+p),Ft&&(p=S(p,gt," "),p=S(p,bt," "),p=S(p,kt," ")),st&&$t?st.createHTML(p):p},n.setConfig=function(t){me(t),Pt=!0},n.clearConfig=function(){ue=null,Pt=!1},n.isValidAttribute=function(t,e,n){ue||me({});var r=yt(t),i=yt(e);return De(r,i,n)},n.addHook=function(t,e){"function"==typeof e&&(pt[t]=pt[t]||[],M(pt[t],e))},n.removeHook=function(t){if(pt[t])return x(pt[t])},n.removeHooks=function(t){pt[t]&&(pt[t]=[])},n.removeAllHooks=function(){pt={}},n}return at()}()},74737:(t,e,n)=>{"use strict";n.d(e,{a:()=>Nn,b:()=>Fs,c:()=>Pt,d:()=>An,e:()=>Ft,f:()=>$s,g:()=>ar,h:()=>yl,i:()=>us,j:()=>Rr,k:()=>$r,l:()=>St,m:()=>Ar,n:()=>At,o:()=>hm,p:()=>go,s:()=>mr});const r=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var r=Array.from("string"==typeof t?[t]:t);r[r.length-1]=r[r.length-1].replace(/\r?\n([\t ]*)$/,"");var i=r.reduce((function(t,e){var n=e.match(/\n([\t ]+|(?!\s).)/g);return n?t.concat(n.map((function(t){var e,n;return null!==(n=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==n?n:0}))):t}),[]);if(i.length){var a=new RegExp("\n[\t ]{"+Math.min.apply(Math,i)+"}","g");r=r.map((function(t){return t.replace(a,"\n")}))}r[0]=r[0].replace(/^\r?\n/,"");var s=r[0];return e.forEach((function(t,e){var n=s.match(/(?:^|\n)( *)$/),i=n?n[1]:"",a=t;"string"==typeof t&&t.includes("\n")&&(a=String(t).split("\n").map((function(t,e){return 0===e?t:""+i+t})).join("\n")),s+=a+r[e+1]})),s};var i=n(30381),a=n.n(i),s=n(17967),o=n(59373),l=n(27856),u=n.n(l),d=n(71610),h=n(61691);const m=(t,e)=>{const n=d.Z.parse(t);for(const r in e)n[r]=h.Z.channel.clamp[r](e[r]);return d.Z.stringify(n)},_=(t,e)=>{const n=d.Z.parse(t),r={};for(const i in e)e[i]&&(r[i]=n[i]+e[i]);return m(t,r)};var p=n(21883);const f=(t,e,n=0,r=1)=>{if("number"!=typeof t)return m(t,{a:e});const i=p.Z.set({r:h.Z.channel.clamp.r(t),g:h.Z.channel.clamp.g(e),b:h.Z.channel.clamp.b(n),a:h.Z.channel.clamp.a(r)});return d.Z.stringify(i)},y=(t,e,n=50)=>{const{r:r,g:i,b:a,a:s}=d.Z.parse(t),{r:o,g:l,b:c,a:u}=d.Z.parse(e),h=n/100,m=2*h-1,_=s-u,p=((m*_==-1?m:(m+_)/(1+m*_))+1)/2,y=1-p;return f(r*p+o*y,i*p+l*y,a*p+c*y,s*h+u*(1-h))},g=(t,e=100)=>{const n=d.Z.parse(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,y(n,t,e)};var b=n(7201),k=n(12281),v=n(42454),x="comm",M="rule",L="decl",w=Math.abs,T=String.fromCharCode;Object.assign;function S(t){return t.trim()}function D(t,e,n){return t.replace(e,n)}function Y(t,e){return t.indexOf(e)}function E(t,e){return 0|t.charCodeAt(e)}function C(t,e,n){return t.slice(e,n)}function A(t){return t.length}function O(t){return t.length}function N(t,e){return e.push(t),t}function B(t,e){for(var n="",r=O(t),i=0;i<r;i++)n+=e(t[i],i,t,e)||"";return n}function F(t,e,n,r){switch(t.type){case"@import":case L:return t.return=t.return||t.value;case x:return"";case"@keyframes":return t.return=t.value+"{"+B(t.children,r)+"}";case M:t.value=t.props.join(",")}return A(n=B(t.children,r))?t.return=t.value+"{"+n+"}":""}var I=1,P=1,j=0,R=0,H=0,$="";function Z(t,e,n,r,i,a,s){return{value:t,root:e,parent:n,type:r,props:i,children:a,line:I,column:P,length:s,return:""}}function W(){return H=R>0?E($,--R):0,P--,10===H&&(P=1,I--),H}function z(){return H=R<j?E($,R++):0,P++,10===H&&(P=1,I++),H}function U(){return E($,R)}function q(){return R}function V(t,e){return C($,t,e)}function G(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 J(t){return I=P=1,j=A($=t),R=0,[]}function X(t){return $="",t}function K(t){return S(V(R-1,et(91===t?t+2:40===t?t+1:t)))}function Q(t){for(;(H=U())&&H<33;)z();return G(t)>2||G(H)>3?"":" "}function tt(t,e){for(;--e&&z()&&!(H<48||H>102||H>57&&H<65||H>70&&H<97););return V(t,q()+(e<6&&32==U()&&32==z()))}function et(t){for(;z();)switch(H){case t:return R;case 34:case 39:34!==t&&39!==t&&et(H);break;case 40:41===t&&et(t);break;case 92:z()}return R}function nt(t,e){for(;z()&&t+H!==57&&(t+H!==84||47!==U()););return"/*"+V(e,R-1)+"*"+T(47===t?t:z())}function rt(t){for(;!G(U());)z();return V(t,R)}function it(t){return X(at("",null,null,null,[""],t=J(t),0,[0],t))}function at(t,e,n,r,i,a,s,o,l){for(var c=0,u=0,d=s,h=0,m=0,_=0,p=1,f=1,y=1,g=0,b="",k=i,v=a,x=r,M=b;f;)switch(_=g,g=z()){case 40:if(108!=_&&58==E(M,d-1)){-1!=Y(M+=D(K(g),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:M+=K(g);break;case 9:case 10:case 13:case 32:M+=Q(_);break;case 92:M+=tt(q()-1,7);continue;case 47:switch(U()){case 42:case 47:N(ot(nt(z(),q()),e,n),l);break;default:M+="/"}break;case 123*p:o[c++]=A(M)*y;case 125*p:case 59:case 0:switch(g){case 0:case 125:f=0;case 59+u:m>0&&A(M)-d&&N(m>32?lt(M+";",r,n,d-1):lt(D(M," ","")+";",r,n,d-2),l);break;case 59:M+=";";default:if(N(x=st(M,e,n,c,u,i,o,b,k=[],v=[],d),a),123===g)if(0===u)at(M,e,x,x,k,a,d,o,v);else switch(99===h&&110===E(M,3)?100:h){case 100:case 109:case 115:at(t,x,x,r&&N(st(t,x,x,0,0,i,o,b,i,k=[],d),v),i,v,d,o,r?k:v);break;default:at(M,x,x,x,[""],v,0,o,v)}}c=u=m=0,p=y=1,b=M="",d=s;break;case 58:d=1+A(M),m=_;default:if(p<1)if(123==g)--p;else if(125==g&&0==p++&&125==W())continue;switch(M+=T(g),g*p){case 38:y=u>0?1:(M+="\f",-1);break;case 44:o[c++]=(A(M)-1)*y,y=1;break;case 64:45===U()&&(M+=K(z())),h=U(),u=d=A(b=M+=rt(q())),g++;break;case 45:45===_&&2==A(M)&&(p=0)}}return a}function st(t,e,n,r,i,a,s,o,l,c,u){for(var d=i-1,h=0===i?a:[""],m=O(h),_=0,p=0,f=0;_<r;++_)for(var y=0,g=C(t,d+1,d=w(p=s[_])),b=t;y<m;++y)(b=S(p>0?h[y]+" "+g:D(g,/&\f/g,h[y])))&&(l[f++]=b);return Z(t,e,n,0===i?M:o,l,c,u)}function ot(t,e,n){return Z(t,e,n,x,T(H),C(t,2,-2),0)}function lt(t,e,n,r){return Z(t,e,n,L,C(t,0,r),C(t,r+1,-1),r)}var ct=n(70277),ut=n(45625),dt=n(39354);const ht=[];for(let c=0;c<256;++c)ht.push((c+256).toString(16).slice(1));function mt(t,e=0){return(ht[t[e+0]]+ht[t[e+1]]+ht[t[e+2]]+ht[t[e+3]]+"-"+ht[t[e+4]]+ht[t[e+5]]+"-"+ht[t[e+6]]+ht[t[e+7]]+"-"+ht[t[e+8]]+ht[t[e+9]]+"-"+ht[t[e+10]]+ht[t[e+11]]+ht[t[e+12]]+ht[t[e+13]]+ht[t[e+14]]+ht[t[e+15]]).toLowerCase()}const _t=/^(?:[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 pt=function(t){return"string"==typeof t&&_t.test(t)};const ft=function(t){if(!pt(t))throw TypeError("Invalid UUID");let e;const n=new Uint8Array(16);return n[0]=(e=parseInt(t.slice(0,8),16))>>>24,n[1]=e>>>16&255,n[2]=e>>>8&255,n[3]=255&e,n[4]=(e=parseInt(t.slice(9,13),16))>>>8,n[5]=255&e,n[6]=(e=parseInt(t.slice(14,18),16))>>>8,n[7]=255&e,n[8]=(e=parseInt(t.slice(19,23),16))>>>8,n[9]=255&e,n[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,n[11]=e/4294967296&255,n[12]=e>>>24&255,n[13]=e>>>16&255,n[14]=e>>>8&255,n[15]=255&e,n};function yt(t,e,n,r){switch(t){case 0:return e&n^~e&r;case 1:case 3:return e^n^r;case 2:return e&n^e&r^n&r}}function gt(t,e){return t<<e|t>>>32-e}const bt=function(t){const e=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n))}else Array.isArray(t)||(t=Array.prototype.slice.call(t));t.push(128);const r=t.length/4+2,i=Math.ceil(r/16),a=new Array(i);for(let s=0;s<i;++s){const e=new Uint32Array(16);for(let n=0;n<16;++n)e[n]=t[64*s+4*n]<<24|t[64*s+4*n+1]<<16|t[64*s+4*n+2]<<8|t[64*s+4*n+3];a[s]=e}a[i-1][14]=8*(t.length-1)/Math.pow(2,32),a[i-1][14]=Math.floor(a[i-1][14]),a[i-1][15]=8*(t.length-1)&4294967295;for(let s=0;s<i;++s){const t=new Uint32Array(80);for(let e=0;e<16;++e)t[e]=a[s][e];for(let e=16;e<80;++e)t[e]=gt(t[e-3]^t[e-8]^t[e-14]^t[e-16],1);let r=n[0],i=n[1],o=n[2],l=n[3],c=n[4];for(let n=0;n<80;++n){const a=Math.floor(n/20),s=gt(r,5)+yt(a,i,o,l)+c+e[a]+t[n]>>>0;c=l,l=o,o=gt(i,30)>>>0,i=r,r=s}n[0]=n[0]+r>>>0,n[1]=n[1]+i>>>0,n[2]=n[2]+o>>>0,n[3]=n[3]+l>>>0,n[4]=n[4]+c>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]},kt=function(t,e,n){function r(t,r,i,a){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n));return e}(t)),"string"==typeof r&&(r=ft(r)),16!==(null===(s=r)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+t.length);if(o.set(r),o.set(t,r.length),o=n(o),o[6]=15&o[6]|e,o[8]=63&o[8]|128,i){a=a||0;for(let t=0;t<16;++t)i[a+t]=o[t];return i}return mt(o)}try{r.name=t}catch(i){}return r.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",r.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",r}("v5",80,bt),vt=kt;n(91518),n(96225);var xt=n(43349),Mt=(n(23352),n(22930),n(79697)),Lt=Object.defineProperty,wt=(t,e,n)=>(((t,e,n)=>{e in t?Lt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n})(t,"symbol"!=typeof e?e+"":e,n),n);const Tt={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)=>{}},Dt=function(t="fatal"){let e=Tt.fatal;"string"==typeof t?(t=t.toLowerCase())in Tt&&(e=Tt[t]):"number"==typeof t&&(e=t),St.trace=()=>{},St.debug=()=>{},St.info=()=>{},St.warn=()=>{},St.error=()=>{},St.fatal=()=>{},e<=Tt.fatal&&(St.fatal=console.error?console.error.bind(console,Yt("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",Yt("FATAL"))),e<=Tt.error&&(St.error=console.error?console.error.bind(console,Yt("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",Yt("ERROR"))),e<=Tt.warn&&(St.warn=console.warn?console.warn.bind(console,Yt("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",Yt("WARN"))),e<=Tt.info&&(St.info=console.info?console.info.bind(console,Yt("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",Yt("INFO"))),e<=Tt.debug&&(St.debug=console.debug?console.debug.bind(console,Yt("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",Yt("DEBUG"))),e<=Tt.trace&&(St.trace=console.debug?console.debug.bind(console,Yt("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",Yt("TRACE")))},Yt=t=>`%c${a()().format("ss.SSS")} : ${t} : `,Et=t=>u().sanitize(t),Ct=(t,e)=>{var n;if(!1!==(null==(n=e.flowchart)?void 0:n.htmlLabels)){const n=e.securityLevel;"antiscript"===n||"strict"===n?t=Et(t):"loose"!==n&&(t=(t=(t=Bt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=Nt(t))}return t},At=(t,e)=>t?t=e.dompurifyConfig?u().sanitize(Ct(t,e),e.dompurifyConfig).toString():u().sanitize(Ct(t,e),{FORBID_TAGS:["style"]}).toString():t,Ot=/<br\s*\/?>/gi,Nt=t=>t.replace(/#br#/g,"<br/>"),Bt=t=>t.replace(Ot,"#br#"),Ft=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),It=function(t){let e=t;if(t.split("~").length-1>=2){let t=e;do{e=t,t=e.replace(/~([^\s,:;]+)~/,"<$1>")}while(t!=e);return It(t)}return e},Pt={getRows:t=>{if(!t)return[""];return Bt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:At,sanitizeTextOrArray:(t,e)=>"string"==typeof t?At(t,e):t.flat().map((t=>At(t,e))),hasBreaks:t=>Ot.test(t),splitBreaks:t=>t.split(Ot),lineBreakRegex:Ot,removeScript:Et,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:Ft},jt=(t,e)=>_(t,e?{s:-40,l:10}:{s:-40,l:-10}),Rt="#ffffff",Ht="#f2f2f2";class $t{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||_(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||_(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||g(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||g(this.tertiaryColor),this.lineColor=this.lineColor||g(this.background),this.textColor=this.textColor||this.primaryTextColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,b.Z)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,b.Z)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||g(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,k.Z)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||_(this.primaryColor,{h:30}),this.cScale4=this.cScale4||_(this.primaryColor,{h:60}),this.cScale5=this.cScale5||_(this.primaryColor,{h:90}),this.cScale6=this.cScale6||_(this.primaryColor,{h:120}),this.cScale7=this.cScale7||_(this.primaryColor,{h:150}),this.cScale8=this.cScale8||_(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||_(this.primaryColor,{h:270}),this.cScale10=this.cScale10||_(this.primaryColor,{h:300}),this.cScale11=this.cScale11||_(this.primaryColor,{h:330}),this.darkMode)for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=(0,b.Z)(this["cScale"+e],75);else for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=(0,b.Z)(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||g(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||(0,k.Z)(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||(0,b.Z)(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;const t=this.darkMode?-4:-1;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||_(this.mainBkg,{h:180,s:-15,l:t*(5+3*e)}),this["surfacePeer"+e]=this["surfacePeer"+e]||_(this.mainBkg,{h:180,s:-15,l:t*(8+3*e)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||_(this.primaryColor,{h:64}),this.fillType3=this.fillType3||_(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||_(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||_(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||_(this.primaryColor,{h:128}),this.fillType7=this.fillType7||_(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||_(this.primaryColor,{l:-10}),this.pie5=this.pie5||_(this.secondaryColor,{l:-10}),this.pie6=this.pie6||_(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||_(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||_(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||_(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||_(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||_(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||_(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.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,b.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||_(this.primaryColor,{h:-30}),this.git4=this.git4||_(this.primaryColor,{h:-60}),this.git5=this.git5||_(this.primaryColor,{h:-90}),this.git6=this.git6||_(this.primaryColor,{h:60}),this.git7=this.git7||_(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,k.Z)(this.git0,25),this.git1=(0,k.Z)(this.git1,25),this.git2=(0,k.Z)(this.git2,25),this.git3=(0,k.Z)(this.git3,25),this.git4=(0,k.Z)(this.git4,25),this.git5=(0,k.Z)(this.git5,25),this.git6=(0,k.Z)(this.git6,25),this.git7=(0,k.Z)(this.git7,25)):(this.git0=(0,b.Z)(this.git0,25),this.git1=(0,b.Z)(this.git1,25),this.git2=(0,b.Z)(this.git2,25),this.git3=(0,b.Z)(this.git3,25),this.git4=(0,b.Z)(this.git4,25),this.git5=(0,b.Z)(this.git5,25),this.git6=(0,b.Z)(this.git6,25),this.git7=(0,b.Z)(this.git7,25)),this.gitInv0=this.gitInv0||g(this.git0),this.gitInv1=this.gitInv1||g(this.git1),this.gitInv2=this.gitInv2||g(this.git2),this.gitInv3=this.gitInv3||g(this.git3),this.gitInv4=this.gitInv4||g(this.git4),this.gitInv5=this.gitInv5||g(this.git5),this.gitInv6=this.gitInv6||g(this.git6),this.gitInv7=this.gitInv7||g(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||Rt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ht}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 Zt{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,k.Z)(this.primaryColor,16),this.tertiaryColor=_(this.primaryColor,{h:-160}),this.primaryBorderColor=g(this.background),this.secondaryBorderColor=jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=g(this.primaryColor),this.secondaryTextColor=g(this.secondaryColor),this.tertiaryTextColor=g(this.tertiaryColor),this.lineColor=g(this.background),this.textColor=g(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,k.Z)(g("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=f(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,b.Z)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.taskBorderColor=f(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=f(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=(0,k.Z)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,k.Z)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,k.Z)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=_(this.primaryColor,{h:64}),this.fillType3=_(this.secondaryColor,{h:64}),this.fillType4=_(this.primaryColor,{h:-64}),this.fillType5=_(this.secondaryColor,{h:-64}),this.fillType6=_(this.primaryColor,{h:128}),this.fillType7=_(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||_(this.primaryColor,{h:30}),this.cScale4=this.cScale4||_(this.primaryColor,{h:60}),this.cScale5=this.cScale5||_(this.primaryColor,{h:90}),this.cScale6=this.cScale6||_(this.primaryColor,{h:120}),this.cScale7=this.cScale7||_(this.primaryColor,{h:150}),this.cScale8=this.cScale8||_(this.primaryColor,{h:210}),this.cScale9=this.cScale9||_(this.primaryColor,{h:270}),this.cScale10=this.cScale10||_(this.primaryColor,{h:300}),this.cScale11=this.cScale11||_(this.primaryColor,{h:330});for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||g(this["cScale"+t]);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScalePeer"+t]=this["cScalePeer"+t]||(0,k.Z)(this["cScale"+t],10);for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||_(this.mainBkg,{h:30,s:-30,l:-(4*t-10)}),this["surfacePeer"+t]=this["surfacePeer"+t]||_(this.mainBkg,{h:30,s:-30,l:-(4*t-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["pie"+t]=this["cScale"+t];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,b.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,k.Z)(this.secondaryColor,20),this.git1=(0,k.Z)(this.pie2||this.secondaryColor,20),this.git2=(0,k.Z)(this.pie3||this.tertiaryColor,20),this.git3=(0,k.Z)(this.pie4||_(this.primaryColor,{h:-30}),20),this.git4=(0,k.Z)(this.pie5||_(this.primaryColor,{h:-60}),20),this.git5=(0,k.Z)(this.pie6||_(this.primaryColor,{h:-90}),10),this.git6=(0,k.Z)(this.pie7||_(this.primaryColor,{h:60}),10),this.git7=(0,k.Z)(this.pie8||_(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||g(this.git0),this.gitInv1=this.gitInv1||g(this.git1),this.gitInv2=this.gitInv2||g(this.git2),this.gitInv3=this.gitInv3||g(this.git3),this.gitInv4=this.gitInv4||g(this.git4),this.gitInv5=this.gitInv5||g(this.git5),this.gitInv6=this.gitInv6||g(this.git6),this.gitInv7=this.gitInv7||g(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,k.Z)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,k.Z)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}class Wt{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=_(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=_(this.primaryColor,{h:-160}),this.primaryBorderColor=jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=g(this.primaryColor),this.secondaryTextColor=g(this.secondaryColor),this.tertiaryTextColor=g(this.tertiaryColor),this.lineColor=g(this.background),this.textColor=g(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=f(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||_(this.primaryColor,{h:30}),this.cScale4=this.cScale4||_(this.primaryColor,{h:60}),this.cScale5=this.cScale5||_(this.primaryColor,{h:90}),this.cScale6=this.cScale6||_(this.primaryColor,{h:120}),this.cScale7=this.cScale7||_(this.primaryColor,{h:150}),this.cScale8=this.cScale8||_(this.primaryColor,{h:210}),this.cScale9=this.cScale9||_(this.primaryColor,{h:270}),this.cScale10=this.cScale10||_(this.primaryColor,{h:300}),this.cScale11=this.cScale11||_(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,b.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,b.Z)(this.tertiaryColor,40);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScale"+t]=(0,b.Z)(this["cScale"+t],10),this["cScalePeer"+t]=this["cScalePeer"+t]||(0,b.Z)(this["cScale"+t],25);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||_(this["cScale"+t],{h:180});for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||_(this.mainBkg,{h:30,l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||_(this.mainBkg,{h:30,l:-(7+5*t)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||g(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||g(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,k.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=_(this.primaryColor,{h:64}),this.fillType3=_(this.secondaryColor,{h:64}),this.fillType4=_(this.primaryColor,{h:-64}),this.fillType5=_(this.secondaryColor,{h:-64}),this.fillType6=_(this.primaryColor,{h:128}),this.fillType7=_(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||_(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||_(this.primaryColor,{l:-10}),this.pie5=this.pie5||_(this.secondaryColor,{l:-30}),this.pie6=this.pie6||_(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||_(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||_(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||_(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||_(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||_(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||_(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.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||_(this.primaryColor,{h:-30}),this.git4=this.git4||_(this.primaryColor,{h:-60}),this.git5=this.git5||_(this.primaryColor,{h:-90}),this.git6=this.git6||_(this.primaryColor,{h:60}),this.git7=this.git7||_(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,k.Z)(this.git0,25),this.git1=(0,k.Z)(this.git1,25),this.git2=(0,k.Z)(this.git2,25),this.git3=(0,k.Z)(this.git3,25),this.git4=(0,k.Z)(this.git4,25),this.git5=(0,k.Z)(this.git5,25),this.git6=(0,k.Z)(this.git6,25),this.git7=(0,k.Z)(this.git7,25)):(this.git0=(0,b.Z)(this.git0,25),this.git1=(0,b.Z)(this.git1,25),this.git2=(0,b.Z)(this.git2,25),this.git3=(0,b.Z)(this.git3,25),this.git4=(0,b.Z)(this.git4,25),this.git5=(0,b.Z)(this.git5,25),this.git6=(0,b.Z)(this.git6,25),this.git7=(0,b.Z)(this.git7,25)),this.gitInv0=this.gitInv0||(0,b.Z)(g(this.git0),25),this.gitInv1=this.gitInv1||g(this.git1),this.gitInv2=this.gitInv2||g(this.git2),this.gitInv3=this.gitInv3||g(this.git3),this.gitInv4=this.gitInv4||g(this.git4),this.gitInv5=this.gitInv5||g(this.git5),this.gitInv6=this.gitInv6||g(this.git6),this.gitInv7=this.gitInv7||g(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||g(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||g(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||Rt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ht}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 zt{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,k.Z)("#cde498",10),this.primaryBorderColor=jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=g(this.primaryColor),this.secondaryTextColor=g(this.secondaryColor),this.tertiaryTextColor=g(this.primaryColor),this.lineColor=g(this.background),this.textColor=g(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||_(this.primaryColor,{h:30}),this.cScale4=this.cScale4||_(this.primaryColor,{h:60}),this.cScale5=this.cScale5||_(this.primaryColor,{h:90}),this.cScale6=this.cScale6||_(this.primaryColor,{h:120}),this.cScale7=this.cScale7||_(this.primaryColor,{h:150}),this.cScale8=this.cScale8||_(this.primaryColor,{h:210}),this.cScale9=this.cScale9||_(this.primaryColor,{h:270}),this.cScale10=this.cScale10||_(this.primaryColor,{h:300}),this.cScale11=this.cScale11||_(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,b.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,b.Z)(this.tertiaryColor,40);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScale"+t]=(0,b.Z)(this["cScale"+t],10),this["cScalePeer"+t]=this["cScalePeer"+t]||(0,b.Z)(this["cScale"+t],25);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||_(this["cScale"+t],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||_(this.mainBkg,{h:30,s:-30,l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||_(this.mainBkg,{h:30,s:-30,l:-(8+5*t)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.actorBorder=(0,b.Z)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=_(this.primaryColor,{h:64}),this.fillType3=_(this.secondaryColor,{h:64}),this.fillType4=_(this.primaryColor,{h:-64}),this.fillType5=_(this.secondaryColor,{h:-64}),this.fillType6=_(this.primaryColor,{h:128}),this.fillType7=_(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||_(this.primaryColor,{l:-30}),this.pie5=this.pie5||_(this.secondaryColor,{l:-30}),this.pie6=this.pie6||_(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||_(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||_(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||_(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||_(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||_(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||_(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.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||_(this.primaryColor,{h:-30}),this.git4=this.git4||_(this.primaryColor,{h:-60}),this.git5=this.git5||_(this.primaryColor,{h:-90}),this.git6=this.git6||_(this.primaryColor,{h:60}),this.git7=this.git7||_(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,k.Z)(this.git0,25),this.git1=(0,k.Z)(this.git1,25),this.git2=(0,k.Z)(this.git2,25),this.git3=(0,k.Z)(this.git3,25),this.git4=(0,k.Z)(this.git4,25),this.git5=(0,k.Z)(this.git5,25),this.git6=(0,k.Z)(this.git6,25),this.git7=(0,k.Z)(this.git7,25)):(this.git0=(0,b.Z)(this.git0,25),this.git1=(0,b.Z)(this.git1,25),this.git2=(0,b.Z)(this.git2,25),this.git3=(0,b.Z)(this.git3,25),this.git4=(0,b.Z)(this.git4,25),this.git5=(0,b.Z)(this.git5,25),this.git6=(0,b.Z)(this.git6,25),this.git7=(0,b.Z)(this.git7,25)),this.gitInv0=this.gitInv0||g(this.git0),this.gitInv1=this.gitInv1||g(this.git1),this.gitInv2=this.gitInv2||g(this.git2),this.gitInv3=this.gitInv3||g(this.git3),this.gitInv4=this.gitInv4||g(this.git4),this.gitInv5=this.gitInv5||g(this.git5),this.gitInv6=this.gitInv6||g(this.git6),this.gitInv7=this.gitInv7||g(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Rt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ht}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 Ut{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,k.Z)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=_(this.primaryColor,{h:-160}),this.primaryBorderColor=jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=g(this.primaryColor),this.secondaryTextColor=g(this.secondaryColor),this.tertiaryTextColor=g(this.tertiaryColor),this.lineColor=g(this.background),this.textColor=g(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=(0,k.Z)(this.contrast,55),this.border2=this.contrast,this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||g(this["cScale"+t]);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this.darkMode?this["cScalePeer"+t]=this["cScalePeer"+t]||(0,k.Z)(this["cScale"+t],10):this["cScalePeer"+t]=this["cScalePeer"+t]||(0,b.Z)(this["cScale"+t],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||_(this.mainBkg,{l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||_(this.mainBkg,{l:-(8+5*t)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.actorBorder=(0,k.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.sectionBkgColor=(0,k.Z)(this.contrast,30),this.sectionBkgColor2=(0,k.Z)(this.contrast,30),this.taskBorderColor=(0,b.Z)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,k.Z)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,b.Z)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=_(this.primaryColor,{h:64}),this.fillType3=_(this.secondaryColor,{h:64}),this.fillType4=_(this.primaryColor,{h:-64}),this.fillType5=_(this.secondaryColor,{h:-64}),this.fillType6=_(this.primaryColor,{h:128}),this.fillType7=_(this.secondaryColor,{h:128});for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["pie"+t]=this["cScale"+t];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,b.Z)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||_(this.primaryColor,{h:-30}),this.git4=this.pie5||_(this.primaryColor,{h:-60}),this.git5=this.pie6||_(this.primaryColor,{h:-90}),this.git6=this.pie7||_(this.primaryColor,{h:60}),this.git7=this.pie8||_(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||g(this.git0),this.gitInv1=this.gitInv1||g(this.git1),this.gitInv2=this.gitInv2||g(this.git2),this.gitInv3=this.gitInv3||g(this.git3),this.gitInv4=this.gitInv4||g(this.git4),this.gitInv5=this.gitInv5||g(this.git5),this.gitInv6=this.gitInv6||g(this.git6),this.gitInv7=this.gitInv7||g(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||Rt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ht}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 qt={base:{getThemeVariables:t=>{const e=new $t;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new Zt;return e.calculate(t),e}},default:{getThemeVariables:t=>{const e=new Wt;return e.calculate(t),e}},forest:{getThemeVariables:t=>{const e=new zt;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new Ut;return e.calculate(t),e}}},Vt={theme:"default",themeVariables:qt.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,deterministicIDSeed:void 0,flowchart:{titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},sequence:{hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",tickInterval:void 0,useMaxWidth:!0,topAxis:!1,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},timeline:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},class:{titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},state:{titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},er:{titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0},requirement:{useWidth:void 0,useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},gitGraph:{titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0},c4:{useWidth:void 0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,useMaxWidth:!0,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},fontSize:16};Vt.class&&(Vt.class.arrowMarkerAbsolute=Vt.arrowMarkerAbsolute),Vt.gitGraph&&(Vt.gitGraph.arrowMarkerAbsolute=Vt.arrowMarkerAbsolute);const Gt=(t,e="")=>Object.keys(t).reduce(((n,r)=>Array.isArray(t[r])?n:"object"==typeof t[r]&&null!==t[r]?[...n,e+r,...Gt(t[r],"")]:[...n,e+r]),[]),Jt=Gt(Vt,""),Xt=Vt;function Kt(t){return null==t}var Qt={isNothing:Kt,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:Kt(t)?[]:[t]},repeat:function(t,e){var n,r="";for(n=0;n<e;n+=1)r+=t;return r},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var n,r,i,a;if(e)for(n=0,r=(a=Object.keys(e)).length;n<r;n+=1)t[i=a[n]]=e[i];return t}};function te(t,e){var n="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(n+="\n\n"+t.mark.snippet),r+" "+n):r}function ee(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=te(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}ee.prototype=Object.create(Error.prototype),ee.prototype.constructor=ee,ee.prototype.toString=function(t){return this.name+": "+te(this,t)};var ne=ee;function re(t,e,n,r,i){var a="",s="",o=Math.floor(i/2)-1;return r-e>o&&(e=r-o+(a=" ... ").length),n-r>o&&(n=r+o-(s=" ...").length),{str:a+t.slice(e,n).replace(/\t/g,"\u2192")+s,pos:r-e+a.length}}function ie(t,e){return Qt.repeat(" ",e-t.length)+t}var ae=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 n,r=/\r?\n|\r|\0/g,i=[0],a=[],s=-1;n=r.exec(t.buffer);)a.push(n.index),i.push(n.index+n[0].length),t.position<=n.index&&s<0&&(s=i.length-2);s<0&&(s=i.length-1);var o,l,c="",u=Math.min(t.line+e.linesAfter,a.length).toString().length,d=e.maxLength-(e.indent+u+3);for(o=1;o<=e.linesBefore&&!(s-o<0);o++)l=re(t.buffer,i[s-o],a[s-o],t.position-(i[s]-i[s-o]),d),c=Qt.repeat(" ",e.indent)+ie((t.line-o+1).toString(),u)+" | "+l.str+"\n"+c;for(l=re(t.buffer,i[s],a[s],t.position,d),c+=Qt.repeat(" ",e.indent)+ie((t.line+1).toString(),u)+" | "+l.str+"\n",c+=Qt.repeat("-",e.indent+u+3+l.pos)+"^\n",o=1;o<=e.linesAfter&&!(s+o>=a.length);o++)l=re(t.buffer,i[s+o],a[s+o],t.position-(i[s]-i[s+o]),d),c+=Qt.repeat(" ",e.indent)+ie((t.line+o+1).toString(),u)+" | "+l.str+"\n";return c.replace(/\n$/,"")},se=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],oe=["scalar","sequence","mapping"];var le=function(t,e){var n,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===se.indexOf(e))throw new ne('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=(n=e.styleAliases||null,r={},null!==n&&Object.keys(n).forEach((function(t){n[t].forEach((function(e){r[String(e)]=t}))})),r),-1===oe.indexOf(this.kind))throw new ne('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function ce(t,e){var n=[];return t[e].forEach((function(t){var e=n.length;n.forEach((function(n,r){n.tag===t.tag&&n.kind===t.kind&&n.multi===t.multi&&(e=r)})),n[e]=t})),n}function ue(t){return this.extend(t)}ue.prototype.extend=function(t){var e=[],n=[];if(t instanceof le)n.push(t);else if(Array.isArray(t))n=n.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new ne("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(n=n.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof le))throw new ne("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new ne("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 ne("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(t){if(!(t instanceof le))throw new ne("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(ue.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(n),r.compiledImplicit=ce(r,"implicit"),r.compiledExplicit=ce(r,"explicit"),r.compiledTypeMap=function(){var t,e,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(t){t.multi?(n.multi[t.kind].push(t),n.multi.fallback.push(t)):n[t.kind][t.tag]=n.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(r);return n}(r.compiledImplicit,r.compiledExplicit),r};var de=new ue({explicit:[new le("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new le("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new le("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var he=new le("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 me=new le("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 _e(t){return 48<=t&&t<=55}function pe(t){return 48<=t&&t<=57}var fe=new le("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,n,r=t.length,i=0,a=!1;if(!r)return!1;if("-"!==(e=t[i])&&"+"!==e||(e=t[++i]),"0"===e){if(i+1===r)return!0;if("b"===(e=t[++i])){for(i++;i<r;i++)if("_"!==(e=t[i])){if("0"!==e&&"1"!==e)return!1;a=!0}return a&&"_"!==e}if("x"===e){for(i++;i<r;i++)if("_"!==(e=t[i])){if(!(48<=(n=t.charCodeAt(i))&&n<=57||65<=n&&n<=70||97<=n&&n<=102))return!1;a=!0}return a&&"_"!==e}if("o"===e){for(i++;i<r;i++)if("_"!==(e=t[i])){if(!_e(t.charCodeAt(i)))return!1;a=!0}return a&&"_"!==e}}if("_"===e)return!1;for(;i<r;i++)if("_"!==(e=t[i])){if(!pe(t.charCodeAt(i)))return!1;a=!0}return!(!a||"_"===e)},construct:function(t){var e,n=t,r=1;if(-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),"-"!==(e=n[0])&&"+"!==e||("-"===e&&(r=-1),e=(n=n.slice(1))[0]),"0"===n)return 0;if("0"===e){if("b"===n[1])return r*parseInt(n.slice(2),2);if("x"===n[1])return r*parseInt(n.slice(2),16);if("o"===n[1])return r*parseInt(n.slice(2),8)}return r*parseInt(n,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!Qt.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"]}}),ye=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var ge=/^[-+]?[0-9]+e/;var be=new le("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!ye.test(t)||"_"===t[t.length-1])},construct:function(t){var e,n;return n="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:n*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||Qt.isNegativeZero(t))},represent:function(t,e){var n;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(Qt.isNegativeZero(t))return"-0.0";return n=t.toString(10),ge.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),ke=de.extend({implicit:[he,me,fe,be]}),ve=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),xe=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 Me=new le("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==ve.exec(t)||null!==xe.exec(t))},construct:function(t){var e,n,r,i,a,s,o,l,c=0,u=null;if(null===(e=ve.exec(t))&&(e=xe.exec(t)),null===e)throw new Error("Date resolve error");if(n=+e[1],r=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(n,r,i));if(a=+e[4],s=+e[5],o=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+="0";c=+c}return e[9]&&(u=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(u=-u)),l=new Date(Date.UTC(n,r,i,a,s,o,c)),u&&l.setTime(l.getTime()-u),l},instanceOf:Date,represent:function(t){return t.toISOString()}});var Le=new le("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),we="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Te=new le("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,n,r=0,i=t.length,a=we;for(n=0;n<i;n++)if(!((e=a.indexOf(t.charAt(n)))>64)){if(e<0)return!1;r+=6}return r%8==0},construct:function(t){var e,n,r=t.replace(/[\r\n=]/g,""),i=r.length,a=we,s=0,o=[];for(e=0;e<i;e++)e%4==0&&e&&(o.push(s>>16&255),o.push(s>>8&255),o.push(255&s)),s=s<<6|a.indexOf(r.charAt(e));return 0===(n=i%4*6)?(o.push(s>>16&255),o.push(s>>8&255),o.push(255&s)):18===n?(o.push(s>>10&255),o.push(s>>2&255)):12===n&&o.push(s>>4&255),new Uint8Array(o)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,n,r="",i=0,a=t.length,s=we;for(e=0;e<a;e++)e%3==0&&e&&(r+=s[i>>18&63],r+=s[i>>12&63],r+=s[i>>6&63],r+=s[63&i]),i=(i<<8)+t[e];return 0===(n=a%3)?(r+=s[i>>18&63],r+=s[i>>12&63],r+=s[i>>6&63],r+=s[63&i]):2===n?(r+=s[i>>10&63],r+=s[i>>4&63],r+=s[i<<2&63],r+=s[64]):1===n&&(r+=s[i>>2&63],r+=s[i<<4&63],r+=s[64],r+=s[64]),r}}),Se=Object.prototype.hasOwnProperty,De=Object.prototype.toString;var Ye=new le("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,n,r,i,a,s=[],o=t;for(e=0,n=o.length;e<n;e+=1){if(r=o[e],a=!1,"[object Object]"!==De.call(r))return!1;for(i in r)if(Se.call(r,i)){if(a)return!1;a=!0}if(!a)return!1;if(-1!==s.indexOf(i))return!1;s.push(i)}return!0},construct:function(t){return null!==t?t:[]}}),Ee=Object.prototype.toString;var Ce=new le("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,n,r,i,a,s=t;for(a=new Array(s.length),e=0,n=s.length;e<n;e+=1){if(r=s[e],"[object Object]"!==Ee.call(r))return!1;if(1!==(i=Object.keys(r)).length)return!1;a[e]=[i[0],r[i[0]]]}return!0},construct:function(t){if(null===t)return[];var e,n,r,i,a,s=t;for(a=new Array(s.length),e=0,n=s.length;e<n;e+=1)r=s[e],i=Object.keys(r),a[e]=[i[0],r[i[0]]];return a}}),Ae=Object.prototype.hasOwnProperty;var Oe=new le("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,n=t;for(e in n)if(Ae.call(n,e)&&null!==n[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),Ne=ke.extend({implicit:[Me,Le],explicit:[Te,Ye,Ce,Oe]}),Be=Object.prototype.hasOwnProperty,Fe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Ie=/[\x85\u2028\u2029]/,Pe=/[,\[\]\{\}]/,je=/^(?:!|!!|![a-z\-]+!)$/i,Re=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function He(t){return Object.prototype.toString.call(t)}function $e(t){return 10===t||13===t}function Ze(t){return 9===t||32===t}function We(t){return 9===t||32===t||10===t||13===t}function ze(t){return 44===t||91===t||93===t||123===t||125===t}function Ue(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function qe(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 Ve(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var Ge=new Array(256),Je=new Array(256),Xe=0;Xe<256;Xe++)Ge[Xe]=qe(Xe)?1:0,Je[Xe]=qe(Xe);function Ke(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Ne,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 Qe(t,e){var n={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return n.snippet=ae(n),new ne(e,n)}function tn(t,e){throw Qe(t,e)}function en(t,e){t.onWarning&&t.onWarning.call(null,Qe(t,e))}var nn={YAML:function(t,e,n){var r,i,a;null!==t.version&&tn(t,"duplication of %YAML directive"),1!==n.length&&tn(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&tn(t,"ill-formed argument of the YAML directive"),i=parseInt(r[1],10),a=parseInt(r[2],10),1!==i&&tn(t,"unacceptable YAML version of the document"),t.version=n[0],t.checkLineBreaks=a<2,1!==a&&2!==a&&en(t,"unsupported YAML version of the document")},TAG:function(t,e,n){var r,i;2!==n.length&&tn(t,"TAG directive accepts exactly two arguments"),r=n[0],i=n[1],je.test(r)||tn(t,"ill-formed tag handle (first argument) of the TAG directive"),Be.call(t.tagMap,r)&&tn(t,'there is a previously declared suffix for "'+r+'" tag handle'),Re.test(i)||tn(t,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch(a){tn(t,"tag prefix is malformed: "+i)}t.tagMap[r]=i}};function rn(t,e,n,r){var i,a,s,o;if(e<n){if(o=t.input.slice(e,n),r)for(i=0,a=o.length;i<a;i+=1)9===(s=o.charCodeAt(i))||32<=s&&s<=1114111||tn(t,"expected valid JSON character");else Fe.test(o)&&tn(t,"the stream contains non-printable characters");t.result+=o}}function an(t,e,n,r){var i,a,s,o;for(Qt.isObject(n)||tn(t,"cannot merge mappings; the provided source object is unacceptable"),s=0,o=(i=Object.keys(n)).length;s<o;s+=1)a=i[s],Be.call(e,a)||(e[a]=n[a],r[a]=!0)}function sn(t,e,n,r,i,a,s,o,l){var c,u;if(Array.isArray(i))for(c=0,u=(i=Array.prototype.slice.call(i)).length;c<u;c+=1)Array.isArray(i[c])&&tn(t,"nested arrays are not supported inside keys"),"object"==typeof i&&"[object Object]"===He(i[c])&&(i[c]="[object Object]");if("object"==typeof i&&"[object Object]"===He(i)&&(i="[object Object]"),i=String(i),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(a))for(c=0,u=a.length;c<u;c+=1)an(t,e,a[c],n);else an(t,e,a,n);else t.json||Be.call(n,i)||!Be.call(e,i)||(t.line=s||t.line,t.lineStart=o||t.lineStart,t.position=l||t.position,tn(t,"duplicated mapping key")),"__proto__"===i?Object.defineProperty(e,i,{configurable:!0,enumerable:!0,writable:!0,value:a}):e[i]=a,delete n[i];return e}function on(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):tn(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function ln(t,e,n){for(var r=0,i=t.input.charCodeAt(t.position);0!==i;){for(;Ze(i);)9===i&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),i=t.input.charCodeAt(++t.position);if(e&&35===i)do{i=t.input.charCodeAt(++t.position)}while(10!==i&&13!==i&&0!==i);if(!$e(i))break;for(on(t),i=t.input.charCodeAt(t.position),r++,t.lineIndent=0;32===i;)t.lineIndent++,i=t.input.charCodeAt(++t.position)}return-1!==n&&0!==r&&t.lineIndent<n&&en(t,"deficient indentation"),r}function cn(t){var e,n=t.position;return!(45!==(e=t.input.charCodeAt(n))&&46!==e||e!==t.input.charCodeAt(n+1)||e!==t.input.charCodeAt(n+2)||(n+=3,0!==(e=t.input.charCodeAt(n))&&!We(e)))}function un(t,e){1===e?t.result+=" ":e>1&&(t.result+=Qt.repeat("\n",e-1))}function dn(t,e){var n,r,i=t.tag,a=t.anchor,s=[],o=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=s),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,tn(t,"tab characters must not be used in indentation")),45===r)&&We(t.input.charCodeAt(t.position+1));)if(o=!0,t.position++,ln(t,!0,-1)&&t.lineIndent<=e)s.push(null),r=t.input.charCodeAt(t.position);else if(n=t.line,_n(t,e,3,!1,!0),s.push(t.result),ln(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===n||t.lineIndent>e)&&0!==r)tn(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!o&&(t.tag=i,t.anchor=a,t.kind="sequence",t.result=s,!0)}function hn(t){var e,n,r,i,a=!1,s=!1;if(33!==(i=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&tn(t,"duplication of a tag property"),60===(i=t.input.charCodeAt(++t.position))?(a=!0,i=t.input.charCodeAt(++t.position)):33===i?(s=!0,n="!!",i=t.input.charCodeAt(++t.position)):n="!",e=t.position,a){do{i=t.input.charCodeAt(++t.position)}while(0!==i&&62!==i);t.position<t.length?(r=t.input.slice(e,t.position),i=t.input.charCodeAt(++t.position)):tn(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==i&&!We(i);)33===i&&(s?tn(t,"tag suffix cannot contain exclamation marks"):(n=t.input.slice(e-1,t.position+1),je.test(n)||tn(t,"named tag handle cannot contain such characters"),s=!0,e=t.position+1)),i=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),Pe.test(r)&&tn(t,"tag suffix cannot contain flow indicator characters")}r&&!Re.test(r)&&tn(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(o){tn(t,"tag name is malformed: "+r)}return a?t.tag=r:Be.call(t.tagMap,n)?t.tag=t.tagMap[n]+r:"!"===n?t.tag="!"+r:"!!"===n?t.tag="tag:yaml.org,2002:"+r:tn(t,'undeclared tag handle "'+n+'"'),!0}function mn(t){var e,n;if(38!==(n=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&tn(t,"duplication of an anchor property"),n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!We(n)&&!ze(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&tn(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function _n(t,e,n,r,i){var a,s,o,l,c,u,d,h,m,_=1,p=!1,f=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,a=s=o=4===n||3===n,r&&ln(t,!0,-1)&&(p=!0,t.lineIndent>e?_=1:t.lineIndent===e?_=0:t.lineIndent<e&&(_=-1)),1===_)for(;hn(t)||mn(t);)ln(t,!0,-1)?(p=!0,o=a,t.lineIndent>e?_=1:t.lineIndent===e?_=0:t.lineIndent<e&&(_=-1)):o=!1;if(o&&(o=p||i),1!==_&&4!==n||(h=1===n||2===n?e:e+1,m=t.position-t.lineStart,1===_?o&&(dn(t,m)||function(t,e,n){var r,i,a,s,o,l,c,u=t.tag,d=t.anchor,h={},m=Object.create(null),_=null,p=null,f=null,y=!1,g=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=h),c=t.input.charCodeAt(t.position);0!==c;){if(y||-1===t.firstTabInLine||(t.position=t.firstTabInLine,tn(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),a=t.line,63!==c&&58!==c||!We(r)){if(s=t.line,o=t.lineStart,l=t.position,!_n(t,n,2,!1,!0))break;if(t.line===a){for(c=t.input.charCodeAt(t.position);Ze(c);)c=t.input.charCodeAt(++t.position);if(58===c)We(c=t.input.charCodeAt(++t.position))||tn(t,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(sn(t,h,m,_,p,null,s,o,l),_=p=f=null),g=!0,y=!1,i=!1,_=t.tag,p=t.result;else{if(!g)return t.tag=u,t.anchor=d,!0;tn(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!g)return t.tag=u,t.anchor=d,!0;tn(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(sn(t,h,m,_,p,null,s,o,l),_=p=f=null),g=!0,y=!0,i=!0):y?(y=!1,i=!0):tn(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===a||t.lineIndent>e)&&(y&&(s=t.line,o=t.lineStart,l=t.position),_n(t,e,4,!0,i)&&(y?p=t.result:f=t.result),y||(sn(t,h,m,_,p,f,s,o,l),_=p=f=null),ln(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&0!==c)tn(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return y&&sn(t,h,m,_,p,null,s,o,l),g&&(t.tag=u,t.anchor=d,t.kind="mapping",t.result=h),g}(t,m,h))||function(t,e){var n,r,i,a,s,o,l,c,u,d,h,m,_=!0,p=t.tag,f=t.anchor,y=Object.create(null);if(91===(m=t.input.charCodeAt(t.position)))s=93,c=!1,a=[];else{if(123!==m)return!1;s=125,c=!0,a={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),m=t.input.charCodeAt(++t.position);0!==m;){if(ln(t,!0,e),(m=t.input.charCodeAt(t.position))===s)return t.position++,t.tag=p,t.anchor=f,t.kind=c?"mapping":"sequence",t.result=a,!0;_?44===m&&tn(t,"expected the node content, but found ','"):tn(t,"missed comma between flow collection entries"),h=null,o=l=!1,63===m&&We(t.input.charCodeAt(t.position+1))&&(o=l=!0,t.position++,ln(t,!0,e)),n=t.line,r=t.lineStart,i=t.position,_n(t,e,1,!1,!0),d=t.tag,u=t.result,ln(t,!0,e),m=t.input.charCodeAt(t.position),!l&&t.line!==n||58!==m||(o=!0,m=t.input.charCodeAt(++t.position),ln(t,!0,e),_n(t,e,1,!1,!0),h=t.result),c?sn(t,a,y,d,u,h,n,r,i):o?a.push(sn(t,null,y,d,u,h,n,r,i)):a.push(u),ln(t,!0,e),44===(m=t.input.charCodeAt(t.position))?(_=!0,m=t.input.charCodeAt(++t.position)):_=!1}tn(t,"unexpected end of the stream within a flow collection")}(t,h)?f=!0:(s&&function(t,e){var n,r,i,a,s,o=1,l=!1,c=!1,u=e,d=0,h=!1;if(124===(a=t.input.charCodeAt(t.position)))r=!1;else{if(62!==a)return!1;r=!0}for(t.kind="scalar",t.result="";0!==a;)if(43===(a=t.input.charCodeAt(++t.position))||45===a)1===o?o=43===a?3:2:tn(t,"repeat of a chomping mode identifier");else{if(!((i=48<=(s=a)&&s<=57?s-48:-1)>=0))break;0===i?tn(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?tn(t,"repeat of an indentation width identifier"):(u=e+i-1,c=!0)}if(Ze(a)){do{a=t.input.charCodeAt(++t.position)}while(Ze(a));if(35===a)do{a=t.input.charCodeAt(++t.position)}while(!$e(a)&&0!==a)}for(;0!==a;){for(on(t),t.lineIndent=0,a=t.input.charCodeAt(t.position);(!c||t.lineIndent<u)&&32===a;)t.lineIndent++,a=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>u&&(u=t.lineIndent),$e(a))d++;else{if(t.lineIndent<u){3===o?t.result+=Qt.repeat("\n",l?1+d:d):1===o&&l&&(t.result+="\n");break}for(r?Ze(a)?(h=!0,t.result+=Qt.repeat("\n",l?1+d:d)):h?(h=!1,t.result+=Qt.repeat("\n",d+1)):0===d?l&&(t.result+=" "):t.result+=Qt.repeat("\n",d):t.result+=Qt.repeat("\n",l?1+d:d),l=!0,c=!0,d=0,n=t.position;!$e(a)&&0!==a;)a=t.input.charCodeAt(++t.position);rn(t,n,t.position,!1)}}return!0}(t,h)||function(t,e){var n,r,i;if(39!==(n=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=i=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(rn(t,r,t.position,!0),39!==(n=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,i=t.position}else $e(n)?(rn(t,r,i,!0),un(t,ln(t,!1,e)),r=i=t.position):t.position===t.lineStart&&cn(t)?tn(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);tn(t,"unexpected end of the stream within a single quoted scalar")}(t,h)||function(t,e){var n,r,i,a,s,o,l;if(34!==(o=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=r=t.position;0!==(o=t.input.charCodeAt(t.position));){if(34===o)return rn(t,n,t.position,!0),t.position++,!0;if(92===o){if(rn(t,n,t.position,!0),$e(o=t.input.charCodeAt(++t.position)))ln(t,!1,e);else if(o<256&&Ge[o])t.result+=Je[o],t.position++;else if((s=120===(l=o)?2:117===l?4:85===l?8:0)>0){for(i=s,a=0;i>0;i--)(s=Ue(o=t.input.charCodeAt(++t.position)))>=0?a=(a<<4)+s:tn(t,"expected hexadecimal character");t.result+=Ve(a),t.position++}else tn(t,"unknown escape sequence");n=r=t.position}else $e(o)?(rn(t,n,r,!0),un(t,ln(t,!1,e)),n=r=t.position):t.position===t.lineStart&&cn(t)?tn(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}tn(t,"unexpected end of the stream within a double quoted scalar")}(t,h)?f=!0:!function(t){var e,n,r;if(42!==(r=t.input.charCodeAt(t.position)))return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!We(r)&&!ze(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&tn(t,"name of an alias node must contain at least one character"),n=t.input.slice(e,t.position),Be.call(t.anchorMap,n)||tn(t,'unidentified alias "'+n+'"'),t.result=t.anchorMap[n],ln(t,!0,-1),!0}(t)?function(t,e,n){var r,i,a,s,o,l,c,u,d=t.kind,h=t.result;if(We(u=t.input.charCodeAt(t.position))||ze(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(We(r=t.input.charCodeAt(t.position+1))||n&&ze(r)))return!1;for(t.kind="scalar",t.result="",i=a=t.position,s=!1;0!==u;){if(58===u){if(We(r=t.input.charCodeAt(t.position+1))||n&&ze(r))break}else if(35===u){if(We(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&cn(t)||n&&ze(u))break;if($e(u)){if(o=t.line,l=t.lineStart,c=t.lineIndent,ln(t,!1,-1),t.lineIndent>=e){s=!0,u=t.input.charCodeAt(t.position);continue}t.position=a,t.line=o,t.lineStart=l,t.lineIndent=c;break}}s&&(rn(t,i,a,!1),un(t,t.line-o),i=a=t.position,s=!1),Ze(u)||(a=t.position+1),u=t.input.charCodeAt(++t.position)}return rn(t,i,a,!1),!!t.result||(t.kind=d,t.result=h,!1)}(t,h,1===n)&&(f=!0,null===t.tag&&(t.tag="?")):(f=!0,null===t.tag&&null===t.anchor||tn(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===_&&(f=o&&dn(t,m))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&tn(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l<c;l+=1)if((d=t.implicitTypes[l]).resolve(t.result)){t.result=d.construct(t.result),t.tag=d.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Be.call(t.typeMap[t.kind||"fallback"],t.tag))d=t.typeMap[t.kind||"fallback"][t.tag];else for(d=null,l=0,c=(u=t.typeMap.multi[t.kind||"fallback"]).length;l<c;l+=1)if(t.tag.slice(0,u[l].tag.length)===u[l].tag){d=u[l];break}d||tn(t,"unknown tag !<"+t.tag+">"),null!==t.result&&d.kind!==t.kind&&tn(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+d.kind+'", not "'+t.kind+'"'),d.resolve(t.result,t.tag)?(t.result=d.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):tn(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||f}function pn(t){var e,n,r,i,a=t.position,s=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(i=t.input.charCodeAt(t.position))&&(ln(t,!0,-1),i=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==i));){for(s=!0,i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!We(i);)i=t.input.charCodeAt(++t.position);for(r=[],(n=t.input.slice(e,t.position)).length<1&&tn(t,"directive name must not be less than one character in length");0!==i;){for(;Ze(i);)i=t.input.charCodeAt(++t.position);if(35===i){do{i=t.input.charCodeAt(++t.position)}while(0!==i&&!$e(i));break}if($e(i))break;for(e=t.position;0!==i&&!We(i);)i=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==i&&on(t),Be.call(nn,n)?nn[n](t,n,r):en(t,'unknown document directive "'+n+'"')}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)):s&&tn(t,"directives end mark is expected"),_n(t,t.lineIndent-1,4,!1,!0),ln(t,!0,-1),t.checkLineBreaks&&Ie.test(t.input.slice(a,t.position))&&en(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&cn(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,ln(t,!0,-1)):t.position<t.length-1&&tn(t,"end of the stream or a document separator is expected")}function fn(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 n=new Ke(t,e),r=t.indexOf("\0");for(-1!==r&&(n.position=r,tn(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)pn(n);return n.documents}var yn=de,gn={loadAll:function(t,e,n){null!==e&&"object"==typeof e&&void 0===n&&(n=e,e=null);var r=fn(t,n);if("function"!=typeof e)return r;for(var i=0,a=r.length;i<a;i+=1)e(r[i])},load:function(t,e){var n=fn(t,e);if(0!==n.length){if(1===n.length)return n[0];throw new ne("expected a single document in the stream, but found more")}}}.load;const bn=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s;const kn=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,vn=/\s*%%.*\n/gm,xn={},Mn=function(t,e){t=t.replace(bn,"").replace(kn,"").replace(vn,"\n");for(const[n,{detector:r}]of Object.entries(xn)){if(r(t,e))return n}throw new Error(`No diagram type detected for text: ${t}`)},Ln=(...t)=>{for(const{id:e,detector:n,loader:r}of t)wn(e,n,r)},wn=(t,e,n)=>{xn[t]?St.error(`Detector with key ${t} already exists`):xn[t]={detector:e,loader:n},St.debug(`Detector with key ${t} added${n?" with loader":""}`)},Tn=function(t,e,n){const{depth:r,clobber:i}=Object.assign({depth:2,clobber:!1},n);return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Tn(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||r<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((n=>{"object"!=typeof e[n]||void 0!==t[n]&&"object"!=typeof t[n]?(i||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Tn(t[n],e[n],{depth:r-1,clobber:i}))})),t)},Sn=Tn,Dn={curveBasis:o.$0Z,curveBasisClosed:o.Dts,curveBasisOpen:o.WQY,curveBumpX:o.qpX,curveBumpY:o.u93,curveBundle:o.tFB,curveCardinalClosed:o.OvA,curveCardinalOpen:o.dCK,curveCardinal:o.YY7,curveCatmullRomClosed:o.fGX,curveCatmullRomOpen:o.$m7,curveCatmullRom:o.zgE,curveLinear:o.c_6,curveLinearClosed:o.fxm,curveMonotoneX:o.FdL,curveMonotoneY:o.ak_,curveNatural:o.SxZ,curveStep:o.eA_,curveStepAfter:o.jsv,curveStepBefore:o.iJ},Yn=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,En=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Cn=function(t,e=null){try{const n=new RegExp(`[%]{2}(?![{]${En.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(n,"").replace(/'/gm,'"'),St.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const i=[];for(;null!==(r=Yn.exec(t));)if(r.index===Yn.lastIndex&&Yn.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;i.push({type:t,args:e})}return 0===i.length&&i.push({type:t,args:null}),1===i.length?i[0]:i}catch(n){return St.error(`ERROR: ${n.message} - Unable to parse directive\n ${null!==e?" type:"+e:""} based on the text:${t}`),{type:null,args:null}}};function An(t,e){if(!t)return e;const n=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return Dn[n]||e}function On(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}function Nn(t){let e="",n="";for(const r of t)void 0!==r&&(r.startsWith("color:")||r.startsWith("text-align:")?n=n+r+";":e=e+r+";");return{style:e,labelStyle:n}}let Bn=0;const Fn=()=>(Bn++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Bn);const In=t=>function(t){let e="";const n="0123456789abcdef",r=n.length;for(let i=0;i<t;i++)e+=n.charAt(Math.floor(Math.random()*r));return e}(t.length),Pn=function(t,e){const n=e.text.replace(Pt.lineBreakRegex," "),[,r]=Vn(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",r),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class);const a=i.append("tspan");return a.attr("x",e.x+2*e.textMargin),a.attr("fill",e.fill),a.text(n),i},jn=(0,v.Z)(((t,e,n)=>{if(!t)return t;if(n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},n),Pt.lineBreakRegex.test(t))return t;const r=t.split(" "),i=[];let a="";return r.forEach(((t,s)=>{const o=$n(`${t} `,n),l=$n(a,n);if(o>e){const{hyphenatedStrings:r,remainingWord:s}=Rn(t,e,"-",n);i.push(a,...r),a=s}else l+o>=e?(i.push(a),a=t):a=[a,t].filter(Boolean).join(" ");s+1===r.length&&i.push(a)})),i.filter((t=>""!==t)).join(n.joinWith)}),((t,e,n)=>`${t}${e}${n.fontSize}${n.fontWeight}${n.fontFamily}${n.joinWith}`)),Rn=(0,v.Z)(((t,e,n="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const i=[...t],a=[];let s="";return i.forEach(((t,o)=>{const l=`${s}${t}`;if($n(l,r)>=e){const t=o+1,e=i.length===t,r=`${l}${n}`;a.push(e?l:r),s=""}else s=l})),{hyphenatedStrings:a,remainingWord:s}}),((t,e,n="-",r)=>`${t}${e}${n}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function Hn(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),Zn(t,e).height}function $n(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),Zn(t,e).width}const Zn=(0,v.Z)(((t,e)=>{e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e);const{fontSize:n,fontFamily:r,fontWeight:i}=e;if(!t)return{width:0,height:0};const[,a]=Vn(n),s=["sans-serif",r],l=t.split(Pt.lineBreakRegex),c=[],u=(0,o.Ys)("body");if(!u.remove)return{width:0,height:0,lineHeight:0};const d=u.append("svg");for(const o of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const n 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};r.text=n;const s=Pn(d,r).style("font-size",a).style("font-weight",i).style("font-family",o),l=(s._groups||s)[0][0].getBBox();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)}d.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 Wn;const zn=t=>{if(St.debug("directiveSanitizer called with",t),"object"==typeof t&&(t.length?t.forEach((t=>zn(t))):Object.keys(t).forEach((e=>{St.debug("Checking key",e),e.startsWith("__")&&(St.debug("sanitize deleting __ option",e),delete t[e]),e.includes("proto")&&(St.debug("sanitize deleting proto option",e),delete t[e]),e.includes("constr")&&(St.debug("sanitize deleting constr option",e),delete t[e]),e.includes("themeCSS")&&(St.debug("sanitizing themeCss option"),t[e]=Un(t[e])),e.includes("fontFamily")&&(St.debug("sanitizing fontFamily option"),t[e]=Un(t[e])),e.includes("altFontFamily")&&(St.debug("sanitizing altFontFamily option"),t[e]=Un(t[e])),Jt.includes(e)?"object"==typeof t[e]&&(St.debug("sanitize deleting object",e),zn(t[e])):(St.debug("sanitize deleting option",e),delete t[e])}))),t.themeVariables){const e=Object.keys(t.themeVariables);for(const n of e){const e=t.themeVariables[n];e&&e.match&&!e.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[n]="")}}St.debug("After sanitization",t)},Un=t=>{let e=0,n=0;for(const r of t){if(e<n)return"{ /* ERROR: Unbalanced CSS */ }";"{"===r?e++:"}"===r&&n++}return e!==n?"{ /* ERROR: Unbalanced CSS */ }":t};function qn(t){return"str"in t}const Vn=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]},Gn={assignWithDepth:Sn,wrapLabel:jn,calculateTextHeight:Hn,calculateTextWidth:$n,calculateTextDimensions:Zn,detectInit:function(t,e){const n=Cn(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(n)){const t=n.map((t=>t.args));zn(t),r=Sn(r,[...t])}else r=n.args;if(r){let n=Mn(t,e);["config"].forEach((t=>{void 0!==r[t]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[t],delete r[t])}))}return r},detectDirective:Cn,isSubstringInArray:function(t,e){for(const[n,r]of e.entries())if(r.match(t))return n;return-1},interpolateToCurve:An,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,n=0;t.forEach((t=>{n+=On(t,e),e=t}));let r,i=n/2;return e=void 0,t.forEach((t=>{if(e&&!r){const n=On(t,e);if(n<i)i-=n;else{const a=i/n;a<=0&&(r=e),a>=1&&(r={x:t.x,y:t.y}),a>0&&a<1&&(r={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),r}(t)},calcCardinalityPosition:(t,e,n)=>{let r;St.info(`our points ${JSON.stringify(e)}`),e[0]!==n&&(e=e.reverse());let i,a=25;r=void 0,e.forEach((t=>{if(r&&!i){const e=On(t,r);if(e<a)a-=e;else{const n=a/e;n<=0&&(i=r),n>=1&&(i={x:t.x,y:t.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));const s=t?10:5,o=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(o)*s+(e[0].x+i.x)/2,l.y=-Math.cos(o)*s+(e[0].y+i.y)/2,l},calcTerminalLabelPosition:function(t,e,n){let r,i=JSON.parse(JSON.stringify(n));St.info("our points",i),"start_left"!==e&&"start_right"!==e&&(i=i.reverse()),i.forEach((t=>{r=t}));let a,s=25+t;r=void 0,i.forEach((t=>{if(r&&!a){const e=On(t,r);if(e<s)s-=e;else{const n=s/e;n<=0&&(a=r),n>=1&&(a={x:t.x,y:t.y}),n>0&&n<1&&(a={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));const o=10+.5*t,l=Math.atan2(i[0].y-a.y,i[0].x-a.x),c={x:0,y:0};return c.x=Math.sin(l)*o+(i[0].x+a.x)/2,c.y=-Math.cos(l)*o+(i[0].y+a.y)/2,"start_left"===e&&(c.x=Math.sin(l+Math.PI)*o+(i[0].x+a.x)/2,c.y=-Math.cos(l+Math.PI)*o+(i[0].y+a.y)/2),"end_right"===e&&(c.x=Math.sin(l-Math.PI)*o+(i[0].x+a.x)/2-5,c.y=-Math.cos(l-Math.PI)*o+(i[0].y+a.y)/2-5),"end_left"===e&&(c.x=Math.sin(l)*o+(i[0].x+a.x)/2-5,c.y=-Math.cos(l)*o+(i[0].y+a.y)/2-5),c},formatUrl:function(t,e){const n=t.trim();if(n)return"loose"!==e.securityLevel?(0,s.N)(n):n},getStylesFromArray:Nn,generateId:Fn,random:In,runFunc:(t,...e)=>{const n=t.split("."),r=n.length-1,i=n[r];let a=window;for(let s=0;s<r;s++)if(a=a[n[s]],!a)return;a[i](...e)},entityDecode:function(t){return Wn=Wn||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),Wn.innerHTML=t,unescape(Wn.textContent)},initIdGenerator:class{constructor(t,e){this.deterministic=t,this.seed=e,this.count=e?e.length:0}next(){return this.deterministic?this.count++:Date.now()}},directiveSanitizer:zn,sanitizeCss:Un,insertTitle:(t,e,n,r)=>{if(!r)return;const i=t.node().getBBox();t.append("text").text(r).attr("x",i.x+i.width/2).attr("y",-n).attr("class",e)},parseFontSize:Vn},Jn="9.4.0",Xn=Object.freeze(Xt);let Kn,Qn=Sn({},Xn),tr=[],er=Sn({},Xn);const nr=(t,e)=>{let n=Sn({},t),r={};for(const i of e)sr(i),r=Sn(r,i);if(n=Sn(n,r),r.theme&&r.theme in qt){const t=Sn({},Kn),e=Sn(t.themeVariables||{},r.themeVariables);n.theme&&n.theme in qt&&(n.themeVariables=qt[n.theme].getThemeVariables(e))}return er=n,dr(er),er},rr=()=>Sn({},Qn),ir=t=>(dr(t),Sn(er,t),ar()),ar=()=>Sn({},er),sr=t=>{var e;["secure",...null!=(e=Qn.secure)?e:[]].forEach((e=>{void 0!==t[e]&&(St.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{0===e.indexOf("__")&&delete t[e]})),Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&sr(t[e])}))},or=t=>{t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),tr.push(t),nr(Qn,tr)},lr=(t=Qn)=>{tr=[],nr(t,tr)};var cr=(t=>(t.LAZY_LOAD_DEPRECATED="The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",t))(cr||{});const ur={},dr=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(ur[e="LAZY_LOAD_DEPRECATED"]||(St.warn(cr[e]),ur[e]=!0)))},hr=function(t,e,n,r){const i=function(t,e,n){let r=new Map;return n?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r}(e,n,r);!function(t,e){for(let n of e)t.attr(n[0],n[1])}(t,i)},mr=function(t,e,n,r){const i=e.node().getBBox(),a=i.width,s=i.height;St.info(`SVG bounds: ${a}x${s}`,i);let o=0,l=0;St.info(`Graph bounds: ${o}x${l}`,t),o=a+2*n,l=s+2*n,St.info(`Calculated bounds: ${o}x${l}`),hr(e,l,o,r);const c=`${i.x-n} ${i.y-n} ${i.width+2*n} ${i.height+2*n}`;e.attr("viewBox",c)},_r=t=>`g.classGroup text {\n fill: ${t.nodeBorder};\n fill: ${t.classText};\n stroke: none;\n font-family: ${t.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${t.classText};\n}\n.edgeLabel .label rect {\n fill: ${t.mainBkg};\n}\n.label text {\n fill: ${t.classText};\n}\n.edgeLabel .label span {\n background: ${t.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${t.nodeBorder};\n stroke: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${t.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${t.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`,pr=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`,fr=()=>"",yr=t=>`.label {\n font-family: ${t.fontFamily};\n color: ${t.nodeTextColor||t.textColor};\n }\n .cluster-label text {\n fill: ${t.titleColor};\n }\n .cluster-label span {\n color: ${t.titleColor};\n }\n\n .label text,span {\n fill: ${t.nodeTextColor||t.textColor};\n color: ${t.nodeTextColor||t.textColor};\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: 2.0px;\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 background-color: ${t.edgeLabelBackground};\n fill: ${t.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${t.clusterBkg};\n stroke: ${t.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n .cluster span {\n color: ${t.titleColor};\n }\n /* .cluster div {\n color: ${t.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${t.fontFamily};\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 .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n`,gr=t=>`\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ${t.ganttFontSize};\n // }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n // font-size: ${t.ganttFontSize};\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor} ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n`,br=()=>"",kr=t=>`\n .pieCircle{\n stroke: ${t.pieStrokeColor};\n stroke-width : ${t.pieStrokeWidth};\n opacity : ${t.pieOpacity};\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`,vr=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: 100%;\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: 100%;\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`,xr=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`,Mr=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`,Lr=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`,wr=t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,Tr={flowchart:yr,"flowchart-v2":yr,sequence:xr,gantt:gr,classDiagram:_r,"classDiagram-v2":_r,class:_r,stateDiagram:Mr,state:Mr,info:br,pie:kr,er:pr,error:fr,journey:Lr,requirement:vr,c4:wr},Sr=(t,e,n)=>{let r="";return t in Tr&&Tr[t]?r=Tr[t](n):St.warn(`No theme found for ${t}`),` & {\n font-family: ${n.fontFamily};\n font-size: ${n.fontSize};\n fill: ${n.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${n.errorBkgColor};\n }\n & .error-text {\n fill: ${n.errorTextColor};\n stroke: ${n.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: ${n.lineColor};\n stroke: ${n.lineColor};\n }\n & .marker.cross {\n stroke: ${n.lineColor};\n }\n\n & svg {\n font-family: ${n.fontFamily};\n font-size: ${n.fontSize};\n }\n\n ${r}\n\n ${e}\n`};let Dr="",Yr="",Er="";const Cr=t=>At(t,ar()),Ar=function(){Dr="",Er="",Yr=""},Or=function(t){Dr=Cr(t).replace(/^\s+/g,"")},Nr=function(){return Dr||Yr},Br=function(t){Er=Cr(t).replace(/\n\s+/g,"\n")},Fr=function(){return Er},Ir=function(t){Yr=Cr(t)},Pr=function(){return Yr},jr={setAccTitle:Or,getAccTitle:Nr,setDiagramTitle:Ir,getDiagramTitle:Pr,getAccDescription:Fr,setAccDescription:Br,clear:Ar},Rr=Object.freeze(Object.defineProperty({__proto__:null,clear:Ar,setAccTitle:Or,getAccTitle:Nr,setAccDescription:Br,getAccDescription:Fr,setDiagramTitle:Ir,getDiagramTitle:Pr,default:jr},Symbol.toStringTag,{value:"Module"}));let Hr={};const $r=function(t,e,n,r){St.debug("parseDirective is being called",e,n,r);try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":Hr={};break;case"type_directive":if(!Hr)throw new Error("currentDirective is undefined");Hr.type=e.toLowerCase();break;case"arg_directive":if(!Hr)throw new Error("currentDirective is undefined");Hr.args=JSON.parse(e);break;case"close_directive":Zr(t,Hr,r),Hr=void 0}}catch(i){St.error(`Error while rendering sequenceDiagram directive: ${e} jison context: ${n}`),St.error(i.message)}},Zr=function(t,e,n){switch(St.info(`Directive type=${e.type} with args:`,e.args),e.type){case"init":case"initialize":["config"].forEach((t=>{void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),St.info("sanitize in handleDirective",e.args),zn(e.args),St.info("sanitize in handleDirective (done)",e.args),or(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;case"themeCss":St.warn("themeCss encountered");break;default:St.warn(`Unhandled directive: source: '%%{${e.type}: ${JSON.stringify(e.args?e.args:{})}}%%`,e)}},Wr=St,zr=Dt,Ur=ar,qr=t=>At(t,Ur()),Vr=mr,Gr=(t,e,n,r)=>$r(t,e,n,r),Jr={},Xr=(t,e,n)=>{if(Jr[t])throw new Error(`Diagram ${t} already registered.`);var r,i;Jr[t]=e,n&&wn(t,n),r=t,i=e.styles,Tr[r]=i,e.injectUtils&&e.injectUtils(Wr,zr,Ur,qr,Vr,Rr,Gr)},Kr=t=>{if(t in Jr)return Jr[t];throw new Error(`Diagram ${t} not found.`)};var Qr=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,4],r=[1,7],i=[1,5],a=[1,9],s=[1,6],o=[2,6],l=[1,16],c=[6,8,14,20,22,24,25,27,29,32,37,40,50,55],u=[8,14,20,22,24,25,27,29,32,37,40],d=[8,13,14,20,22,24,25,27,29,32,37,40],h=[1,26],m=[6,8,14,50,55],_=[8,14,55],p=[1,53],f=[1,52],y=[8,14,30,33,35,38,55],g=[1,67],b=[1,68],k=[1,69],v=[8,14,33,35,42,55],x={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,GG:6,document:7,EOF:8,":":9,DIR:10,options:11,body:12,OPT:13,NL:14,line:15,statement:16,commitStatement:17,mergeStatement:18,cherryPickStatement:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,branchStatement:26,CHECKOUT:27,ref:28,BRANCH:29,ORDER:30,NUM:31,CHERRY_PICK:32,COMMIT_ID:33,STR:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,openDirective:46,typeDirective:47,closeDirective:48,argDirective:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,ID:54,";":55,$accept:0,$end:1},terminals_:{2:"error",6:"GG",8:"EOF",9:":",10:"DIR",13:"OPT",14:"NL",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"CHECKOUT",29:"BRANCH",30:"ORDER",31:"NUM",32:"CHERRY_PICK",33:"COMMIT_ID",34:"STR",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive",54:"ID",55:";"},productions_:[0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[19,5],[19,5],[19,5],[19,5],[18,2],[18,4],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[41,0],[41,1],[39,1],[39,1],[39,1],[5,3],[5,5],[46,1],[47,1],[49,1],[48,1],[28,1],[28,1],[4,1],[4,1],[4,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 3:return a[o];case 4:return a[o-1];case 5:return r.setDirection(a[o-3]),a[o-1];case 7:r.setOptions(a[o-1]),this.$=a[o];break;case 8:a[o-1]+=a[o],this.$=a[o-1];break;case 10:this.$=[];break;case 11:a[o-1].push(a[o]),this.$=a[o-1];break;case 12:this.$=a[o-1];break;case 17:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 20:r.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 22:r.checkout(a[o]);break;case 23:r.branch(a[o]);break;case 24:r.branch(a[o-2],a[o]);break;case 25:r.cherryPick(a[o],"",void 0);break;case 26:r.cherryPick(a[o-2],"",a[o]);break;case 27:case 29:r.cherryPick(a[o-2],"","");break;case 28:r.cherryPick(a[o],"",a[o-2]);break;case 30:r.merge(a[o],"","","");break;case 31:r.merge(a[o-2],a[o],"","");break;case 32:r.merge(a[o-2],"",a[o],"");break;case 33:r.merge(a[o-2],"","",a[o]);break;case 34:r.merge(a[o-4],a[o],"",a[o-2]);break;case 35:r.merge(a[o-4],"",a[o],a[o-2]);break;case 36:r.merge(a[o-4],"",a[o-2],a[o]);break;case 37:r.merge(a[o-4],a[o-2],a[o],"");break;case 38:r.merge(a[o-4],a[o-2],"",a[o]);break;case 39:r.merge(a[o-4],a[o],a[o-2],"");break;case 40:r.merge(a[o-6],a[o-4],a[o-2],a[o]);break;case 41:r.merge(a[o-6],a[o],a[o-4],a[o-2]);break;case 42:r.merge(a[o-6],a[o-4],a[o],a[o-2]);break;case 43:r.merge(a[o-6],a[o-2],a[o-4],a[o]);break;case 44:r.merge(a[o-6],a[o],a[o-2],a[o-4]);break;case 45:r.merge(a[o-6],a[o-2],a[o],a[o-4]);break;case 46:r.commit(a[o]);break;case 47:r.commit("","",r.commitType.NORMAL,a[o]);break;case 48:r.commit("","",a[o],"");break;case 49:r.commit("","",a[o],a[o-2]);break;case 50:r.commit("","",a[o-2],a[o]);break;case 51:r.commit("",a[o],r.commitType.NORMAL,"");break;case 52:r.commit("",a[o-2],r.commitType.NORMAL,a[o]);break;case 53:r.commit("",a[o],r.commitType.NORMAL,a[o-2]);break;case 54:r.commit("",a[o-2],a[o],"");break;case 55:r.commit("",a[o],a[o-2],"");break;case 56:r.commit("",a[o-4],a[o-2],a[o]);break;case 57:r.commit("",a[o-4],a[o],a[o-2]);break;case 58:r.commit("",a[o-2],a[o-4],a[o]);break;case 59:r.commit("",a[o],a[o-4],a[o-2]);break;case 60:r.commit("",a[o],a[o-2],a[o-4]);break;case 61:r.commit("",a[o-2],a[o],a[o-4]);break;case 62:r.commit(a[o],"",r.commitType.NORMAL,"");break;case 63:r.commit(a[o],"",r.commitType.NORMAL,a[o-2]);break;case 64:r.commit(a[o-2],"",r.commitType.NORMAL,a[o]);break;case 65:r.commit(a[o-2],"",a[o],"");break;case 66:r.commit(a[o],"",a[o-2],"");break;case 67:r.commit(a[o],a[o-2],r.commitType.NORMAL,"");break;case 68:r.commit(a[o-2],a[o],r.commitType.NORMAL,"");break;case 69:r.commit(a[o-4],"",a[o-2],a[o]);break;case 70:r.commit(a[o-4],"",a[o],a[o-2]);break;case 71:r.commit(a[o-2],"",a[o-4],a[o]);break;case 72:r.commit(a[o],"",a[o-4],a[o-2]);break;case 73:r.commit(a[o],"",a[o-2],a[o-4]);break;case 74:r.commit(a[o-2],"",a[o],a[o-4]);break;case 75:r.commit(a[o-4],a[o],a[o-2],"");break;case 76:r.commit(a[o-4],a[o-2],a[o],"");break;case 77:r.commit(a[o-2],a[o],a[o-4],"");break;case 78:r.commit(a[o],a[o-2],a[o-4],"");break;case 79:r.commit(a[o],a[o-4],a[o-2],"");break;case 80:r.commit(a[o-2],a[o-4],a[o],"");break;case 81:r.commit(a[o-4],a[o],r.commitType.NORMAL,a[o-2]);break;case 82:r.commit(a[o-4],a[o-2],r.commitType.NORMAL,a[o]);break;case 83:r.commit(a[o-2],a[o],r.commitType.NORMAL,a[o-4]);break;case 84:r.commit(a[o],a[o-2],r.commitType.NORMAL,a[o-4]);break;case 85:r.commit(a[o],a[o-4],r.commitType.NORMAL,a[o-2]);break;case 86:r.commit(a[o-2],a[o-4],r.commitType.NORMAL,a[o]);break;case 87:r.commit(a[o-6],a[o-4],a[o-2],a[o]);break;case 88:r.commit(a[o-6],a[o-4],a[o],a[o-2]);break;case 89:r.commit(a[o-6],a[o-2],a[o-4],a[o]);break;case 90:r.commit(a[o-6],a[o],a[o-4],a[o-2]);break;case 91:r.commit(a[o-6],a[o-2],a[o],a[o-4]);break;case 92:r.commit(a[o-6],a[o],a[o-2],a[o-4]);break;case 93:r.commit(a[o-4],a[o-6],a[o-2],a[o]);break;case 94:r.commit(a[o-4],a[o-6],a[o],a[o-2]);break;case 95:r.commit(a[o-2],a[o-6],a[o-4],a[o]);break;case 96:r.commit(a[o],a[o-6],a[o-4],a[o-2]);break;case 97:r.commit(a[o-2],a[o-6],a[o],a[o-4]);break;case 98:r.commit(a[o],a[o-6],a[o-2],a[o-4]);break;case 99:r.commit(a[o],a[o-4],a[o-2],a[o-6]);break;case 100:r.commit(a[o-2],a[o-4],a[o],a[o-6]);break;case 101:r.commit(a[o],a[o-2],a[o-4],a[o-6]);break;case 102:r.commit(a[o-2],a[o],a[o-4],a[o-6]);break;case 103:r.commit(a[o-4],a[o-2],a[o],a[o-6]);break;case 104:r.commit(a[o-4],a[o],a[o-2],a[o-6]);break;case 105:r.commit(a[o-2],a[o-4],a[o-6],a[o]);break;case 106:r.commit(a[o],a[o-4],a[o-6],a[o-2]);break;case 107:r.commit(a[o-2],a[o],a[o-6],a[o-4]);break;case 108:r.commit(a[o],a[o-2],a[o-6],a[o-4]);break;case 109:r.commit(a[o-4],a[o-2],a[o-6],a[o]);break;case 110:r.commit(a[o-4],a[o],a[o-6],a[o-2]);break;case 111:this.$="";break;case 112:this.$=a[o];break;case 113:this.$=r.commitType.NORMAL;break;case 114:this.$=r.commitType.REVERSE;break;case 115:this.$=r.commitType.HIGHLIGHT;break;case 118:r.parseDirective("%%{","open_directive");break;case 119:r.parseDirective(a[o],"type_directive");break;case 120:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 121:r.parseDirective("}%%","close_directive","gitGraph")}},table:[{3:1,4:2,5:3,6:n,8:r,14:i,46:8,50:a,55:s},{1:[3]},{3:10,4:2,5:3,6:n,8:r,14:i,46:8,50:a,55:s},{3:11,4:2,5:3,6:n,8:r,14:i,46:8,50:a,55:s},{7:12,8:o,9:[1,13],10:[1,14],11:15,14:l},e(c,[2,124]),e(c,[2,125]),e(c,[2,126]),{47:17,51:[1,18]},{51:[2,118]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:o,11:15,14:l},{9:[1,21]},e(u,[2,10],{12:22,13:[1,23]}),e(d,[2,9]),{9:[1,25],48:24,53:h},e([9,53],[2,119]),{1:[2,3]},{8:[1,27]},{7:28,8:o,11:15,14:l},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],37:[1,42],40:[1,41]},e(d,[2,8]),e(m,[2,116]),{49:45,52:[1,46]},e(m,[2,121]),{1:[2,4]},{8:[1,47]},e(u,[2,11]),{4:48,8:r,14:i,55:s},e(u,[2,13]),e(_,[2,14]),e(_,[2,15]),e(_,[2,16]),{21:[1,49]},{23:[1,50]},e(_,[2,19]),e(_,[2,20]),e(_,[2,21]),{28:51,34:p,54:f},e(_,[2,111],{41:54,33:[1,57],34:[1,59],35:[1,55],38:[1,56],42:[1,58]}),{28:60,34:p,54:f},{33:[1,61],35:[1,62]},{28:63,34:p,54:f},{48:64,53:h},{53:[2,120]},{1:[2,5]},e(u,[2,12]),e(_,[2,17]),e(_,[2,18]),e(_,[2,22]),e(y,[2,122]),e(y,[2,123]),e(_,[2,46]),{34:[1,65]},{39:66,43:g,44:b,45:k},{34:[1,70]},{34:[1,71]},e(_,[2,112]),e(_,[2,30],{33:[1,72],35:[1,74],38:[1,73]}),{34:[1,75]},{34:[1,76],36:[1,77]},e(_,[2,23],{30:[1,78]}),e(m,[2,117]),e(_,[2,47],{33:[1,80],38:[1,79],42:[1,81]}),e(_,[2,48],{33:[1,83],35:[1,82],42:[1,84]}),e(v,[2,113]),e(v,[2,114]),e(v,[2,115]),e(_,[2,51],{35:[1,85],38:[1,86],42:[1,87]}),e(_,[2,62],{33:[1,90],35:[1,88],38:[1,89]}),{34:[1,91]},{39:92,43:g,44:b,45:k},{34:[1,93]},e(_,[2,25],{35:[1,94]}),{33:[1,95]},{33:[1,96]},{31:[1,97]},{39:98,43:g,44:b,45:k},{34:[1,99]},{34:[1,100]},{34:[1,101]},{34:[1,102]},{34:[1,103]},{34:[1,104]},{39:105,43:g,44:b,45:k},{34:[1,106]},{34:[1,107]},{39:108,43:g,44:b,45:k},{34:[1,109]},e(_,[2,31],{35:[1,111],38:[1,110]}),e(_,[2,32],{33:[1,113],35:[1,112]}),e(_,[2,33],{33:[1,114],38:[1,115]}),{34:[1,116],36:[1,117]},{34:[1,118]},{34:[1,119]},e(_,[2,24]),e(_,[2,49],{33:[1,120],42:[1,121]}),e(_,[2,53],{38:[1,122],42:[1,123]}),e(_,[2,63],{33:[1,125],38:[1,124]}),e(_,[2,50],{33:[1,126],42:[1,127]}),e(_,[2,55],{35:[1,128],42:[1,129]}),e(_,[2,66],{33:[1,131],35:[1,130]}),e(_,[2,52],{38:[1,132],42:[1,133]}),e(_,[2,54],{35:[1,134],42:[1,135]}),e(_,[2,67],{35:[1,137],38:[1,136]}),e(_,[2,64],{33:[1,139],38:[1,138]}),e(_,[2,65],{33:[1,141],35:[1,140]}),e(_,[2,68],{35:[1,143],38:[1,142]}),{39:144,43:g,44:b,45:k},{34:[1,145]},{34:[1,146]},{34:[1,147]},{34:[1,148]},{39:149,43:g,44:b,45:k},e(_,[2,26]),e(_,[2,27]),e(_,[2,28]),e(_,[2,29]),{34:[1,150]},{34:[1,151]},{39:152,43:g,44:b,45:k},{34:[1,153]},{39:154,43:g,44:b,45:k},{34:[1,155]},{34:[1,156]},{34:[1,157]},{34:[1,158]},{34:[1,159]},{34:[1,160]},{34:[1,161]},{39:162,43:g,44:b,45:k},{34:[1,163]},{34:[1,164]},{34:[1,165]},{39:166,43:g,44:b,45:k},{34:[1,167]},{39:168,43:g,44:b,45:k},{34:[1,169]},{34:[1,170]},{34:[1,171]},{39:172,43:g,44:b,45:k},{34:[1,173]},e(_,[2,37],{35:[1,174]}),e(_,[2,38],{38:[1,175]}),e(_,[2,36],{33:[1,176]}),e(_,[2,39],{35:[1,177]}),e(_,[2,34],{38:[1,178]}),e(_,[2,35],{33:[1,179]}),e(_,[2,60],{42:[1,180]}),e(_,[2,73],{33:[1,181]}),e(_,[2,61],{42:[1,182]}),e(_,[2,84],{38:[1,183]}),e(_,[2,74],{33:[1,184]}),e(_,[2,83],{38:[1,185]}),e(_,[2,59],{42:[1,186]}),e(_,[2,72],{33:[1,187]}),e(_,[2,58],{42:[1,188]}),e(_,[2,78],{35:[1,189]}),e(_,[2,71],{33:[1,190]}),e(_,[2,77],{35:[1,191]}),e(_,[2,57],{42:[1,192]}),e(_,[2,85],{38:[1,193]}),e(_,[2,56],{42:[1,194]}),e(_,[2,79],{35:[1,195]}),e(_,[2,80],{35:[1,196]}),e(_,[2,86],{38:[1,197]}),e(_,[2,70],{33:[1,198]}),e(_,[2,81],{38:[1,199]}),e(_,[2,69],{33:[1,200]}),e(_,[2,75],{35:[1,201]}),e(_,[2,76],{35:[1,202]}),e(_,[2,82],{38:[1,203]}),{34:[1,204]},{39:205,43:g,44:b,45:k},{34:[1,206]},{34:[1,207]},{39:208,43:g,44:b,45:k},{34:[1,209]},{34:[1,210]},{34:[1,211]},{34:[1,212]},{39:213,43:g,44:b,45:k},{34:[1,214]},{39:215,43:g,44:b,45:k},{34:[1,216]},{34:[1,217]},{34:[1,218]},{34:[1,219]},{34:[1,220]},{34:[1,221]},{34:[1,222]},{39:223,43:g,44:b,45:k},{34:[1,224]},{34:[1,225]},{34:[1,226]},{39:227,43:g,44:b,45:k},{34:[1,228]},{39:229,43:g,44:b,45:k},{34:[1,230]},{34:[1,231]},{34:[1,232]},{39:233,43:g,44:b,45:k},e(_,[2,40]),e(_,[2,42]),e(_,[2,41]),e(_,[2,43]),e(_,[2,45]),e(_,[2,44]),e(_,[2,101]),e(_,[2,102]),e(_,[2,99]),e(_,[2,100]),e(_,[2,104]),e(_,[2,103]),e(_,[2,108]),e(_,[2,107]),e(_,[2,106]),e(_,[2,105]),e(_,[2,110]),e(_,[2,109]),e(_,[2,98]),e(_,[2,97]),e(_,[2,96]),e(_,[2,95]),e(_,[2,93]),e(_,[2,94]),e(_,[2,92]),e(_,[2,91]),e(_,[2,90]),e(_,[2,89]),e(_,[2,87]),e(_,[2,88])],defaultActions:{9:[2,118],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,120],47:[2,5]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},M=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){switch(n){case 0:return this.begin("open_directive"),50;case 1:return this.begin("type_directive"),51;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),53;case 4:return 52;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 34:case 38:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:case 14:break;case 15:return 6;case 16:return 40;case 17:return 33;case 18:return 38;case 19:return 42;case 20:return 43;case 21:return 44;case 22:return 45;case 23:return 35;case 24:return 29;case 25:return 30;case 26:return 37;case 27:return 32;case 28:return 27;case 29:case 30:return 10;case 31:return 9;case 32:return"CARET";case 33:this.begin("options");break;case 35:return 13;case 36:return 36;case 37:this.begin("string");break;case 39:return 34;case 40:return 31;case 41:return 54;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[34,35],inclusive:!1},string:{rules:[38,39],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,36,37,40,41,42,43],inclusive:!0}}},t);function L(){this.yy={}}return x.lexer=M,L.prototype=x,x.Parser=L,new L}();Qr.parser=Qr;const ti=Qr,ei=t=>null!==t.match(/^\s*gitGraph/);let ni=ar().gitGraph.mainBranchName,ri=ar().gitGraph.mainBranchOrder,ii={},ai=null,si={};si[ni]={name:ni,order:ri};let oi={};oi[ni]=ai;let li=ni,ci="LR",ui=0;function di(){return In({length:7})}let hi={};const mi=function(t){if(t=Pt.sanitizeText(t,ar()),void 0===oi[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}{li=t;const e=oi[li];ai=ii[e]}};function _i(t,e,n){const r=t.indexOf(e);-1===r?t.push(n):t.splice(r,1,n)}function pi(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let n="";t.forEach((function(t){n+=t===e?"\t*":"\t|"}));const r=[n,e.id,e.seq];for(let i in oi)oi[i]===e.id&&r.push(i);if(St.debug(r.join(" ")),e.parents&&2==e.parents.length){const n=ii[e.parents[0]];_i(t,e,n),t.push(ii[e.parents[1]])}else{if(0==e.parents.length)return;{const n=ii[e.parents];_i(t,e,n)}}pi(t=function(t,e){const n=Object.create(null);return t.reduce(((t,r)=>{const i=e(r);return n[i]||(n[i]=!0,t.push(r)),t}),[])}(t,(t=>t.id)))}const fi=function(){const t=Object.keys(ii).map((function(t){return ii[t]}));return t.forEach((function(t){St.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},yi={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},gi={parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().gitGraph,setDirection:function(t){ci=t},setOptions:function(t){St.debug("options str",t),t=(t=t&&t.trim())||"{}";try{hi=JSON.parse(t)}catch(e){St.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return hi},commit:function(t,e,n,r){St.debug("Entering commit:",t,e,n,r),e=Pt.sanitizeText(e,ar()),t=Pt.sanitizeText(t,ar()),r=Pt.sanitizeText(r,ar());const i={id:e||ui+"-"+di(),message:t,seq:ui++,type:n||yi.NORMAL,tag:r||"",parents:null==ai?[]:[ai.id],branch:li};ai=i,ii[i.id]=i,oi[li]=i.id,St.debug("in pushCommit "+i.id)},branch:function(t,e){if(t=Pt.sanitizeText(t,ar()),void 0!==oi[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}oi[t]=null!=ai?ai.id:null,si[t]={name:t,order:e?parseInt(e,10):null},mi(t),St.debug("in createBranch")},merge:function(t,e,n,r){t=Pt.sanitizeText(t,ar()),e=Pt.sanitizeText(e,ar());const i=ii[oi[li]],a=ii[oi[t]];if(li===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===i||!i){let e=new Error('Incorrect usage of "merge". Current branch ('+li+")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===oi[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===a||!a){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(i===a){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!==ii[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+n+r,token:"merge "+t+e+n+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+n+" "+r]},i}const s={id:e||ui+"-"+di(),message:"merged branch "+t+" into "+li,seq:ui++,parents:[null==ai?null:ai.id,oi[t]],branch:li,type:yi.MERGE,customType:n,customId:!!e,tag:r||""};ai=s,ii[s.id]=s,oi[li]=s.id,St.debug(oi),St.debug("in mergeBranch")},cherryPick:function(t,e,n){if(St.debug("Entering cherryPick:",t,e,n),t=Pt.sanitizeText(t,ar()),e=Pt.sanitizeText(e,ar()),n=Pt.sanitizeText(n,ar()),!t||void 0===ii[t]){let n=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw n.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"]},n}let r=ii[t],i=r.branch;if(r.type===yi.MERGE){let n=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw n.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"]},n}if(!e||void 0===ii[e]){if(i===li){let n=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw n.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"]},n}const a=ii[oi[li]];if(void 0===a||!a){let n=new Error('Incorrect usage of "cherry-pick". Current branch ('+li+")has no commits");throw n.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"]},n}const s={id:ui+"-"+di(),message:"cherry-picked "+r+" into "+li,seq:ui++,parents:[null==ai?null:ai.id,r.id],branch:li,type:yi.CHERRY_PICK,tag:null!=n?n:"cherry-pick:"+r.id};ai=s,ii[s.id]=s,oi[li]=s.id,St.debug(oi),St.debug("in cherryPick")}},checkout:mi,prettyPrint:function(){St.debug(ii);pi([fi()[0]])},clear:function(){ii={},ai=null;let t=ar().gitGraph.mainBranchName,e=ar().gitGraph.mainBranchOrder;oi={},oi[t]=null,si={},si[t]={name:t,order:e},li=t,ui=0,Ar()},getBranchesAsObjArray:function(){const t=Object.values(si).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})));return t},getBranches:function(){return oi},getCommits:function(){return ii},getCommitsArray:fi,getCurrentBranch:function(){return li},getDirection:function(){return ci},getHead:function(){return ai},setAccTitle:Or,getAccTitle:Nr,getAccDescription:Fr,setAccDescription:Br,setDiagramTitle:Ir,getDiagramTitle:Pr,commitType:yi};let bi={};const ki=0,vi=1,xi=2,Mi=3,Li=4;let wi={},Ti={},Si=[],Di=0;const Yi=(t,e,n)=>{const r=Ur().gitGraph,i=t.append("g").attr("class","commit-bullets"),a=t.append("g").attr("class","commit-labels");let s=0;Object.keys(e).sort(((t,n)=>e[t].seq-e[n].seq)).forEach((t=>{const o=e[t],l=wi[o.branch].pos,c=s+10;if(n){let t,e=void 0!==o.customType&&""!==o.customType?o.customType:o.type;switch(e){case ki:t="commit-normal";break;case vi:t="commit-reverse";break;case xi:t="commit-highlight";break;case Mi:t="commit-merge";break;case Li:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===xi){const e=i.append("rect");e.attr("x",c-10),e.attr("y",l-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${o.id} commit-highlight${wi[o.branch].index%8} ${t}-outer`),i.append("rect").attr("x",c-6).attr("y",l-6).attr("height",12).attr("width",12).attr("class",`commit ${o.id} commit${wi[o.branch].index%8} ${t}-inner`)}else if(e===Li)i.append("circle").attr("cx",c).attr("cy",l).attr("r",10).attr("class",`commit ${o.id} ${t}`),i.append("circle").attr("cx",c-3).attr("cy",l+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${o.id} ${t}`),i.append("circle").attr("cx",c+3).attr("cy",l+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${o.id} ${t}`),i.append("line").attr("x1",c+3).attr("y1",l+1).attr("x2",c).attr("y2",l-5).attr("stroke","#fff").attr("class",`commit ${o.id} ${t}`),i.append("line").attr("x1",c-3).attr("y1",l+1).attr("x2",c).attr("y2",l-5).attr("stroke","#fff").attr("class",`commit ${o.id} ${t}`);else{const n=i.append("circle");if(n.attr("cx",c),n.attr("cy",l),n.attr("r",o.type===Mi?9:10),n.attr("class",`commit ${o.id} commit${wi[o.branch].index%8}`),e===Mi){const e=i.append("circle");e.attr("cx",c),e.attr("cy",l),e.attr("r",6),e.attr("class",`commit ${t} ${o.id} commit${wi[o.branch].index%8}`)}if(e===vi){i.append("path").attr("d",`M ${c-5},${l-5}L${c+5},${l+5}M${c-5},${l+5}L${c+5},${l-5}`).attr("class",`commit ${t} ${o.id} commit${wi[o.branch].index%8}`)}}}if(Ti[o.id]={x:s+10,y:l},n){const t=4,e=2;if(o.type!==Li&&(o.customId&&o.type===Mi||o.type!==Mi)&&r.showCommitLabel){const t=a.append("g"),n=t.insert("rect").attr("class","commit-label-bkg"),i=t.append("text").attr("x",s).attr("y",l+25).attr("class","commit-label").text(o.id);let c=i.node().getBBox();if(n.attr("x",s+10-c.width/2-e).attr("y",l+13.5).attr("width",c.width+2*e).attr("height",c.height+2*e),i.attr("x",s+10-c.width/2),r.rotateCommitLabel){let e=-7.5-(c.width+10)/25*9.5,n=10+c.width/25*8.5;t.attr("transform","translate("+e+", "+n+") rotate("+"-45, "+s+", "+l+")")}}if(o.tag){const n=a.insert("polygon"),r=a.append("circle"),i=a.append("text").attr("y",l-16).attr("class","tag-label").text(o.tag);let c=i.node().getBBox();i.attr("x",s+10-c.width/2);const u=c.height/2,d=l-19.2;n.attr("class","tag-label-bkg").attr("points",`\n ${s-c.width/2-t/2},${d+e}\n ${s-c.width/2-t/2},${d-e}\n ${s+10-c.width/2-t},${d-u-e}\n ${s+10+c.width/2+t},${d-u-e}\n ${s+10+c.width/2+t},${d+u+e}\n ${s+10-c.width/2-t},${d+u+e}`),r.attr("cx",s-c.width/2+t/2).attr("cy",d).attr("r",1.5).attr("class","tag-hole")}}s+=50,s>Di&&(Di=s)}))},Ei=(t,e,n=0)=>{const r=t+Math.abs(t-e)/2;if(n>5)return r;if(Si.every((t=>Math.abs(t-r)>=10)))return Si.push(r),r;const i=Math.abs(t-e);return Ei(t,e-i/5,n+1)},Ci=(t,e,n,r)=>{const i=Ti[e.id],a=Ti[n.id],s=((t,e,n)=>Object.keys(n).filter((r=>n[r].branch===e.branch&&n[r].seq>t.seq&&n[r].seq<e.seq)).length>0)(e,n,r);let o,l="",c="",u=0,d=0,h=wi[n.branch].index;if(s){l="A 10 10, 0, 0, 0,",c="A 10 10, 0, 0, 1,",u=10,d=10,h=wi[n.branch].index;const t=i.y<a.y?Ei(i.y,a.y):Ei(a.y,i.y);o=i.y<a.y?`M ${i.x} ${i.y} L ${i.x} ${t-u} ${l} ${i.x+d} ${t} L ${a.x-u} ${t} ${c} ${a.x} ${t+d} L ${a.x} ${a.y}`:`M ${i.x} ${i.y} L ${i.x} ${t+u} ${c} ${i.x+d} ${t} L ${a.x-u} ${t} ${l} ${a.x} ${t-d} L ${a.x} ${a.y}`}else i.y<a.y&&(l="A 20 20, 0, 0, 0,",u=20,d=20,h=wi[n.branch].index,o=`M ${i.x} ${i.y} L ${i.x} ${a.y-u} ${l} ${i.x+d} ${a.y} L ${a.x} ${a.y}`),i.y>a.y&&(l="A 20 20, 0, 0, 0,",u=20,d=20,h=wi[e.branch].index,o=`M ${i.x} ${i.y} L ${a.x-u} ${i.y} ${l} ${a.x} ${i.y-d} L ${a.x} ${a.y}`),i.y===a.y&&(h=wi[e.branch].index,o=`M ${i.x} ${i.y} L ${i.x} ${a.y-u} ${l} ${i.x+d} ${a.y} L ${a.x} ${a.y}`);t.append("path").attr("d",o).attr("class","arrow arrow"+h%8)},Ai=(t,e)=>{const n=Ur().gitGraph,r=t.append("g");e.forEach(((t,e)=>{const i=e%8,a=wi[t.name].pos,s=r.append("line");s.attr("x1",0),s.attr("y1",a),s.attr("x2",Di),s.attr("y2",a),s.attr("class","branch branch"+i),Si.push(a);const o=(t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let n=[];n="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(const r of n){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","0"),t.setAttribute("class","row"),t.textContent=r.trim(),e.appendChild(t)}return e})(t.name),l=r.insert("rect"),c=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);c.node().appendChild(o);let u=o.getBBox();l.attr("class","branchLabelBkg label"+i).attr("rx",4).attr("ry",4).attr("x",-u.width-4-(!0===n.rotateCommitLabel?30:0)).attr("y",-u.height/2+8).attr("width",u.width+18).attr("height",u.height+4),c.attr("transform","translate("+(-u.width-14-(!0===n.rotateCommitLabel?30:0))+", "+(a-u.height/2-1)+")"),l.attr("transform","translate(-19, "+(a-u.height/2)+")")}))},Oi={draw:function(t,e,n,r){var i;wi={},Ti={},bi={},Di=0,Si=[];const a=Ur(),s=a.gitGraph;St.debug("in gitgraph renderer",t+"\n","id:",e,n),bi=r.db.getCommits();const l=r.db.getBranchesAsObjArray();let c=0;l.forEach(((t,e)=>{wi[t.name]={pos:c,index:e},c+=50+(s.rotateCommitLabel?40:0)}));const u=(0,o.Ys)(`[id="${e}"]`);Yi(u,bi,!1),s.showBranches&&Ai(u,l),((t,e)=>{const n=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const r=e[t];r.parents&&r.parents.length>0&&r.parents.forEach((t=>{Ci(n,e[t],r,e)}))}))})(u,bi),Yi(u,bi,!0),Gn.insertTitle(u,"gitTitleText",s.titleTopMargin,r.db.getDiagramTitle()),Vr(void 0,u,s.diagramPadding,null!=(i=s.useMaxWidth)?i:a.useMaxWidth)}},Ni=t=>`\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0,1,2,3,4,5,6,7].map((e=>`\n .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }\n .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }\n .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }\n .label${e} { fill: ${t["git"+e]}; }\n .arrow${e} { stroke: ${t["git"+e]}; }\n `)).join("\n")}\n\n .branch {\n stroke-width: 1;\n stroke: ${t.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}\n .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}\n .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }\n .tag-hole { fill: ${t.textColor}; }\n\n .commit-merge {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n .commit-reverse {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n }\n`;var Bi=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,6],r=[1,7],i=[1,8],a=[1,9],s=[1,16],o=[1,11],l=[1,12],u=[1,13],d=[1,14],h=[1,15],m=[1,27],_=[1,33],p=[1,34],f=[1,35],y=[1,36],g=[1,37],b=[1,72],k=[1,73],v=[1,74],x=[1,75],M=[1,76],L=[1,77],w=[1,78],T=[1,38],S=[1,39],D=[1,40],Y=[1,41],E=[1,42],C=[1,43],A=[1,44],O=[1,45],N=[1,46],B=[1,47],F=[1,48],I=[1,49],P=[1,50],j=[1,51],R=[1,52],H=[1,53],$=[1,54],Z=[1,55],W=[1,56],z=[1,57],U=[1,59],q=[1,60],V=[1,61],G=[1,62],J=[1,63],X=[1,64],K=[1,65],Q=[1,66],tt=[1,67],et=[1,68],nt=[1,69],rt=[24,52],it=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],at=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],st=[1,94],ot=[1,95],lt=[1,96],ct=[1,97],ut=[15,24,52],dt=[7,8,9,10,18,22,25,26,27,28],ht=[15,24,43,52],mt=[15,24,43,52,86,87,89,90],_t=[15,43],pt=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],ft={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,C4_CONTEXT:22,statements:23,EOF:24,C4_CONTAINER:25,C4_COMPONENT:26,C4_DYNAMIC:27,C4_DEPLOYMENT:28,otherStatements:29,diagramStatements:30,otherStatement:31,title:32,accDescription:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,boundaryStatement:39,boundaryStartStatement:40,boundaryStopStatement:41,boundaryStart:42,LBRACE:43,ENTERPRISE_BOUNDARY:44,attributes:45,SYSTEM_BOUNDARY:46,BOUNDARY:47,CONTAINER_BOUNDARY:48,NODE:49,NODE_L:50,NODE_R:51,RBRACE:52,diagramStatement:53,PERSON:54,PERSON_EXT:55,SYSTEM:56,SYSTEM_DB:57,SYSTEM_QUEUE:58,SYSTEM_EXT:59,SYSTEM_EXT_DB:60,SYSTEM_EXT_QUEUE:61,CONTAINER:62,CONTAINER_DB:63,CONTAINER_QUEUE:64,CONTAINER_EXT:65,CONTAINER_EXT_DB:66,CONTAINER_EXT_QUEUE:67,COMPONENT:68,COMPONENT_DB:69,COMPONENT_QUEUE:70,COMPONENT_EXT:71,COMPONENT_EXT_DB:72,COMPONENT_EXT_QUEUE:73,REL:74,BIREL:75,REL_U:76,REL_D:77,REL_L:78,REL_R:79,REL_B:80,REL_INDEX:81,UPDATE_EL_STYLE:82,UPDATE_REL_STYLE:83,UPDATE_LAYOUT_CONFIG:84,attribute:85,STR:86,STR_KEY:87,STR_VALUE:88,ATTRIBUTE:89,ATTRIBUTE_EMPTY:90,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"C4_CONTEXT",24:"EOF",25:"C4_CONTAINER",26:"C4_COMPONENT",27:"C4_DYNAMIC",28:"C4_DEPLOYMENT",32:"title",33:"accDescription",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",43:"LBRACE",44:"ENTERPRISE_BOUNDARY",46:"SYSTEM_BOUNDARY",47:"BOUNDARY",48:"CONTAINER_BOUNDARY",49:"NODE",50:"NODE_L",51:"NODE_R",52:"RBRACE",54:"PERSON",55:"PERSON_EXT",56:"SYSTEM",57:"SYSTEM_DB",58:"SYSTEM_QUEUE",59:"SYSTEM_EXT",60:"SYSTEM_EXT_DB",61:"SYSTEM_EXT_QUEUE",62:"CONTAINER",63:"CONTAINER_DB",64:"CONTAINER_QUEUE",65:"CONTAINER_EXT",66:"CONTAINER_EXT_DB",67:"CONTAINER_EXT_QUEUE",68:"COMPONENT",69:"COMPONENT_DB",70:"COMPONENT_QUEUE",71:"COMPONENT_EXT",72:"COMPONENT_EXT_DB",73:"COMPONENT_EXT_QUEUE",74:"REL",75:"BIREL",76:"REL_U",77:"REL_D",78:"REL_L",79:"REL_R",80:"REL_B",81:"REL_INDEX",82:"UPDATE_EL_STYLE",83:"UPDATE_REL_STYLE",84:"UPDATE_LAYOUT_CONFIG",86:"STR",87:"STR_KEY",88:"STR_VALUE",89:"ATTRIBUTE",90:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 4:r.setDirection("TB");break;case 5:r.setDirection("BT");break;case 6:r.setDirection("RL");break;case 7:r.setDirection("LR");break;case 11:r.parseDirective("%%{","open_directive");break;case 12:break;case 13:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 14:r.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:r.setC4Type(a[o-3]);break;case 26:r.setTitle(a[o].substring(6)),this.$=a[o].substring(6);break;case 27:r.setAccDescription(a[o].substring(15)),this.$=a[o].substring(15);break;case 28:this.$=a[o].trim(),r.setTitle(this.$);break;case 29:case 30:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 35:case 36:a[o].splice(2,0,"ENTERPRISE"),r.addPersonOrSystemBoundary(...a[o]),this.$=a[o];break;case 37:r.addPersonOrSystemBoundary(...a[o]),this.$=a[o];break;case 38:a[o].splice(2,0,"CONTAINER"),r.addContainerBoundary(...a[o]),this.$=a[o];break;case 39:r.addDeploymentNode("node",...a[o]),this.$=a[o];break;case 40:r.addDeploymentNode("nodeL",...a[o]),this.$=a[o];break;case 41:r.addDeploymentNode("nodeR",...a[o]),this.$=a[o];break;case 42:r.popBoundaryParseStack();break;case 46:r.addPersonOrSystem("person",...a[o]),this.$=a[o];break;case 47:r.addPersonOrSystem("external_person",...a[o]),this.$=a[o];break;case 48:r.addPersonOrSystem("system",...a[o]),this.$=a[o];break;case 49:r.addPersonOrSystem("system_db",...a[o]),this.$=a[o];break;case 50:r.addPersonOrSystem("system_queue",...a[o]),this.$=a[o];break;case 51:r.addPersonOrSystem("external_system",...a[o]),this.$=a[o];break;case 52:r.addPersonOrSystem("external_system_db",...a[o]),this.$=a[o];break;case 53:r.addPersonOrSystem("external_system_queue",...a[o]),this.$=a[o];break;case 54:r.addContainer("container",...a[o]),this.$=a[o];break;case 55:r.addContainer("container_db",...a[o]),this.$=a[o];break;case 56:r.addContainer("container_queue",...a[o]),this.$=a[o];break;case 57:r.addContainer("external_container",...a[o]),this.$=a[o];break;case 58:r.addContainer("external_container_db",...a[o]),this.$=a[o];break;case 59:r.addContainer("external_container_queue",...a[o]),this.$=a[o];break;case 60:r.addComponent("component",...a[o]),this.$=a[o];break;case 61:r.addComponent("component_db",...a[o]),this.$=a[o];break;case 62:r.addComponent("component_queue",...a[o]),this.$=a[o];break;case 63:r.addComponent("external_component",...a[o]),this.$=a[o];break;case 64:r.addComponent("external_component_db",...a[o]),this.$=a[o];break;case 65:r.addComponent("external_component_queue",...a[o]),this.$=a[o];break;case 67:r.addRel("rel",...a[o]),this.$=a[o];break;case 68:r.addRel("birel",...a[o]),this.$=a[o];break;case 69:r.addRel("rel_u",...a[o]),this.$=a[o];break;case 70:r.addRel("rel_d",...a[o]),this.$=a[o];break;case 71:r.addRel("rel_l",...a[o]),this.$=a[o];break;case 72:r.addRel("rel_r",...a[o]),this.$=a[o];break;case 73:r.addRel("rel_b",...a[o]),this.$=a[o];break;case 74:a[o].splice(0,1),r.addRel("rel",...a[o]),this.$=a[o];break;case 75:r.updateElStyle("update_el_style",...a[o]),this.$=a[o];break;case 76:r.updateRelStyle("update_rel_style",...a[o]),this.$=a[o];break;case 77:r.updateLayoutConfig("update_layout_config",...a[o]),this.$=a[o];break;case 78:this.$=[a[o]];break;case 79:a[o].unshift(a[o-1]),this.$=a[o];break;case 80:case 82:this.$=a[o].trim();break;case 81:let t={};t[a[o-1].trim()]=a[o].trim(),this.$=t;break;case 83:this.$=""}},table:[{3:1,4:2,5:3,6:4,7:n,8:r,9:i,10:a,11:5,12:10,18:s,22:o,25:l,26:u,27:d,28:h},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:n,8:r,9:i,10:a,11:5,12:10,18:s,22:o,25:l,26:u,27:d,28:h},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:m},e([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:_,33:p,34:f,36:y,38:g,39:58,40:70,42:71,44:b,46:k,47:v,48:x,49:M,50:L,51:w,53:32,54:T,55:S,56:D,57:Y,58:E,59:C,60:A,61:O,62:N,63:B,64:F,65:I,66:P,67:j,68:R,69:H,70:$,71:Z,72:W,73:z,74:U,75:q,76:V,77:G,78:J,79:X,80:K,81:Q,82:tt,83:et,84:nt},{23:79,29:29,30:30,31:31,32:_,33:p,34:f,36:y,38:g,39:58,40:70,42:71,44:b,46:k,47:v,48:x,49:M,50:L,51:w,53:32,54:T,55:S,56:D,57:Y,58:E,59:C,60:A,61:O,62:N,63:B,64:F,65:I,66:P,67:j,68:R,69:H,70:$,71:Z,72:W,73:z,74:U,75:q,76:V,77:G,78:J,79:X,80:K,81:Q,82:tt,83:et,84:nt},{23:80,29:29,30:30,31:31,32:_,33:p,34:f,36:y,38:g,39:58,40:70,42:71,44:b,46:k,47:v,48:x,49:M,50:L,51:w,53:32,54:T,55:S,56:D,57:Y,58:E,59:C,60:A,61:O,62:N,63:B,64:F,65:I,66:P,67:j,68:R,69:H,70:$,71:Z,72:W,73:z,74:U,75:q,76:V,77:G,78:J,79:X,80:K,81:Q,82:tt,83:et,84:nt},{23:81,29:29,30:30,31:31,32:_,33:p,34:f,36:y,38:g,39:58,40:70,42:71,44:b,46:k,47:v,48:x,49:M,50:L,51:w,53:32,54:T,55:S,56:D,57:Y,58:E,59:C,60:A,61:O,62:N,63:B,64:F,65:I,66:P,67:j,68:R,69:H,70:$,71:Z,72:W,73:z,74:U,75:q,76:V,77:G,78:J,79:X,80:K,81:Q,82:tt,83:et,84:nt},{23:82,29:29,30:30,31:31,32:_,33:p,34:f,36:y,38:g,39:58,40:70,42:71,44:b,46:k,47:v,48:x,49:M,50:L,51:w,53:32,54:T,55:S,56:D,57:Y,58:E,59:C,60:A,61:O,62:N,63:B,64:F,65:I,66:P,67:j,68:R,69:H,70:$,71:Z,72:W,73:z,74:U,75:q,76:V,77:G,78:J,79:X,80:K,81:Q,82:tt,83:et,84:nt},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},e(rt,[2,20],{53:32,39:58,40:70,42:71,30:87,44:b,46:k,47:v,48:x,49:M,50:L,51:w,54:T,55:S,56:D,57:Y,58:E,59:C,60:A,61:O,62:N,63:B,64:F,65:I,66:P,67:j,68:R,69:H,70:$,71:Z,72:W,73:z,74:U,75:q,76:V,77:G,78:J,79:X,80:K,81:Q,82:tt,83:et,84:nt}),e(rt,[2,21]),e(it,[2,23],{15:[1,88]}),e(rt,[2,43],{15:[1,89]}),e(at,[2,26]),e(at,[2,27]),{35:[1,90]},{37:[1,91]},e(at,[2,30]),{45:92,85:93,86:st,87:ot,89:lt,90:ct},{45:98,85:93,86:st,87:ot,89:lt,90:ct},{45:99,85:93,86:st,87:ot,89:lt,90:ct},{45:100,85:93,86:st,87:ot,89:lt,90:ct},{45:101,85:93,86:st,87:ot,89:lt,90:ct},{45:102,85:93,86:st,87:ot,89:lt,90:ct},{45:103,85:93,86:st,87:ot,89:lt,90:ct},{45:104,85:93,86:st,87:ot,89:lt,90:ct},{45:105,85:93,86:st,87:ot,89:lt,90:ct},{45:106,85:93,86:st,87:ot,89:lt,90:ct},{45:107,85:93,86:st,87:ot,89:lt,90:ct},{45:108,85:93,86:st,87:ot,89:lt,90:ct},{45:109,85:93,86:st,87:ot,89:lt,90:ct},{45:110,85:93,86:st,87:ot,89:lt,90:ct},{45:111,85:93,86:st,87:ot,89:lt,90:ct},{45:112,85:93,86:st,87:ot,89:lt,90:ct},{45:113,85:93,86:st,87:ot,89:lt,90:ct},{45:114,85:93,86:st,87:ot,89:lt,90:ct},{45:115,85:93,86:st,87:ot,89:lt,90:ct},{45:116,85:93,86:st,87:ot,89:lt,90:ct},e(ut,[2,66]),{45:117,85:93,86:st,87:ot,89:lt,90:ct},{45:118,85:93,86:st,87:ot,89:lt,90:ct},{45:119,85:93,86:st,87:ot,89:lt,90:ct},{45:120,85:93,86:st,87:ot,89:lt,90:ct},{45:121,85:93,86:st,87:ot,89:lt,90:ct},{45:122,85:93,86:st,87:ot,89:lt,90:ct},{45:123,85:93,86:st,87:ot,89:lt,90:ct},{45:124,85:93,86:st,87:ot,89:lt,90:ct},{45:125,85:93,86:st,87:ot,89:lt,90:ct},{45:126,85:93,86:st,87:ot,89:lt,90:ct},{45:127,85:93,86:st,87:ot,89:lt,90:ct},{30:128,39:58,40:70,42:71,44:b,46:k,47:v,48:x,49:M,50:L,51:w,53:32,54:T,55:S,56:D,57:Y,58:E,59:C,60:A,61:O,62:N,63:B,64:F,65:I,66:P,67:j,68:R,69:H,70:$,71:Z,72:W,73:z,74:U,75:q,76:V,77:G,78:J,79:X,80:K,81:Q,82:tt,83:et,84:nt},{15:[1,130],43:[1,129]},{45:131,85:93,86:st,87:ot,89:lt,90:ct},{45:132,85:93,86:st,87:ot,89:lt,90:ct},{45:133,85:93,86:st,87:ot,89:lt,90:ct},{45:134,85:93,86:st,87:ot,89:lt,90:ct},{45:135,85:93,86:st,87:ot,89:lt,90:ct},{45:136,85:93,86:st,87:ot,89:lt,90:ct},{45:137,85:93,86:st,87:ot,89:lt,90:ct},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},e(dt,[2,9]),{14:142,21:m},{21:[2,13]},{1:[2,15]},e(rt,[2,22]),e(it,[2,24],{31:31,29:143,32:_,33:p,34:f,36:y,38:g}),e(rt,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:_,33:p,34:f,36:y,38:g,44:b,46:k,47:v,48:x,49:M,50:L,51:w,54:T,55:S,56:D,57:Y,58:E,59:C,60:A,61:O,62:N,63:B,64:F,65:I,66:P,67:j,68:R,69:H,70:$,71:Z,72:W,73:z,74:U,75:q,76:V,77:G,78:J,79:X,80:K,81:Q,82:tt,83:et,84:nt}),e(at,[2,28]),e(at,[2,29]),e(ut,[2,46]),e(ht,[2,78],{85:93,45:145,86:st,87:ot,89:lt,90:ct}),e(mt,[2,80]),{88:[1,146]},e(mt,[2,82]),e(mt,[2,83]),e(ut,[2,47]),e(ut,[2,48]),e(ut,[2,49]),e(ut,[2,50]),e(ut,[2,51]),e(ut,[2,52]),e(ut,[2,53]),e(ut,[2,54]),e(ut,[2,55]),e(ut,[2,56]),e(ut,[2,57]),e(ut,[2,58]),e(ut,[2,59]),e(ut,[2,60]),e(ut,[2,61]),e(ut,[2,62]),e(ut,[2,63]),e(ut,[2,64]),e(ut,[2,65]),e(ut,[2,67]),e(ut,[2,68]),e(ut,[2,69]),e(ut,[2,70]),e(ut,[2,71]),e(ut,[2,72]),e(ut,[2,73]),e(ut,[2,74]),e(ut,[2,75]),e(ut,[2,76]),e(ut,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},e(_t,[2,35]),e(_t,[2,36]),e(_t,[2,37]),e(_t,[2,38]),e(_t,[2,39]),e(_t,[2,40]),e(_t,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},e(it,[2,25]),e(rt,[2,45]),e(ht,[2,79]),e(mt,[2,81]),e(ut,[2,31]),e(ut,[2,42]),e(pt,[2,32]),e(pt,[2,33],{15:[1,152]}),e(dt,[2,10]),e(pt,[2,34])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},yt=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 78:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:case 21:case 75:break;case 19:c;break;case 20:return 15;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),55;case 28:return this.begin("person"),54;case 29:return this.begin("system_ext_queue"),61;case 30:return this.begin("system_ext_db"),60;case 31:return this.begin("system_ext"),59;case 32:return this.begin("system_queue"),58;case 33:return this.begin("system_db"),57;case 34:return this.begin("system"),56;case 35:return this.begin("boundary"),47;case 36:return this.begin("enterprise_boundary"),44;case 37:return this.begin("system_boundary"),46;case 38:return this.begin("container_ext_queue"),67;case 39:return this.begin("container_ext_db"),66;case 40:return this.begin("container_ext"),65;case 41:return this.begin("container_queue"),64;case 42:return this.begin("container_db"),63;case 43:return this.begin("container"),62;case 44:return this.begin("container_boundary"),48;case 45:return this.begin("component_ext_queue"),73;case 46:return this.begin("component_ext_db"),72;case 47:return this.begin("component_ext"),71;case 48:return this.begin("component_queue"),70;case 49:return this.begin("component_db"),69;case 50:return this.begin("component"),68;case 51:case 52:return this.begin("node"),49;case 53:return this.begin("node_l"),50;case 54:return this.begin("node_r"),51;case 55:return this.begin("rel"),74;case 56:return this.begin("birel"),75;case 57:case 58:return this.begin("rel_u"),76;case 59:case 60:return this.begin("rel_d"),77;case 61:case 62:return this.begin("rel_l"),78;case 63:case 64:return this.begin("rel_r"),79;case 65:return this.begin("rel_b"),80;case 66:return this.begin("rel_index"),81;case 67:return this.begin("update_el_style"),82;case 68:return this.begin("update_rel_style"),83;case 69:return this.begin("update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:this.begin("attribute");break;case 73:case 84:this.popState(),this.popState();break;case 74:case 76:return 90;case 77:this.begin("string");break;case 79:case 85:return"STR";case 80:this.begin("string_kv");break;case 81:return this.begin("string_kv_key"),"STR_KEY";case 82:this.popState(),this.begin("string_kv_value");break;case 83:return"STR_VALUE";case 86:return"LBRACE";case 87:return"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,86,87,88,89,90],inclusive:!0}}},t);function gt(){this.yy={}}return ft.lexer=yt,gt.prototype=ft,ft.Parser=gt,new gt}();Bi.parser=Bi;const Fi=Bi,Ii=t=>null!==t.match(/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/);let Pi=[],ji=[""],Ri="global",Hi="",$i=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Zi=[],Wi="",zi=!1,Ui=4,qi=2;var Vi;const Gi=function(t){return null==t?Pi:Pi.filter((e=>e.parentBoundary===t))},Ji=function(){return zi},Xi={addPersonOrSystem:function(t,e,n,r,i,a,s){if(null===e||null===n)return;let o={};const l=Pi.find((t=>t.alias===e));if(l&&e===l.alias?o=l:(o.alias=e,Pi.push(o)),o.label=null==n?{text:""}:{text:n},null==r)o.descr={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]={text:e}}else o.descr={text:r};if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]=e}else o.sprite=i;if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]=e}else o.tags=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.link=s;o.typeC4Shape={text:t},o.parentBoundary=Ri,o.wrap=Ji()},addPersonOrSystemBoundary:function(t,e,n,r,i){if(null===t||null===e)return;let a={};const s=$i.find((e=>e.alias===t));if(s&&t===s.alias?a=s:(a.alias=t,$i.push(a)),a.label=null==e?{text:""}:{text:e},null==n)a.type={text:"system"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];a[t]={text:e}}else a.type={text:n};if("object"==typeof r){let[t,e]=Object.entries(r)[0];a[t]=e}else a.tags=r;if("object"==typeof i){let[t,e]=Object.entries(i)[0];a[t]=e}else a.link=i;a.parentBoundary=Ri,a.wrap=Ji(),Hi=Ri,Ri=t,ji.push(Hi)},addContainer:function(t,e,n,r,i,a,s,o){if(null===e||null===n)return;let l={};const c=Pi.find((t=>t.alias===e));if(c&&e===c.alias?l=c:(l.alias=e,Pi.push(l)),l.label=null==n?{text:""}:{text:n},null==r)l.techn={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]={text:e}}else l.techn={text:r};if(null==i)l.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]={text:e}}else l.descr={text:i};if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.sprite=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];l[t]=e}else l.link=o;l.wrap=Ji(),l.typeC4Shape={text:t},l.parentBoundary=Ri},addContainerBoundary:function(t,e,n,r,i){if(null===t||null===e)return;let a={};const s=$i.find((e=>e.alias===t));if(s&&t===s.alias?a=s:(a.alias=t,$i.push(a)),a.label=null==e?{text:""}:{text:e},null==n)a.type={text:"container"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];a[t]={text:e}}else a.type={text:n};if("object"==typeof r){let[t,e]=Object.entries(r)[0];a[t]=e}else a.tags=r;if("object"==typeof i){let[t,e]=Object.entries(i)[0];a[t]=e}else a.link=i;a.parentBoundary=Ri,a.wrap=Ji(),Hi=Ri,Ri=t,ji.push(Hi)},addComponent:function(t,e,n,r,i,a,s,o){if(null===e||null===n)return;let l={};const c=Pi.find((t=>t.alias===e));if(c&&e===c.alias?l=c:(l.alias=e,Pi.push(l)),l.label=null==n?{text:""}:{text:n},null==r)l.techn={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]={text:e}}else l.techn={text:r};if(null==i)l.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]={text:e}}else l.descr={text:i};if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.sprite=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];l[t]=e}else l.link=o;l.wrap=Ji(),l.typeC4Shape={text:t},l.parentBoundary=Ri},addDeploymentNode:function(t,e,n,r,i,a,s,o){if(null===e||null===n)return;let l={};const c=$i.find((t=>t.alias===e));if(c&&e===c.alias?l=c:(l.alias=e,$i.push(l)),l.label=null==n?{text:""}:{text:n},null==r)l.type={text:"node"};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]={text:e}}else l.type={text:r};if(null==i)l.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]={text:e}}else l.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];l[t]=e}else l.link=o;l.nodeType=t,l.parentBoundary=Ri,l.wrap=Ji(),Hi=Ri,Ri=e,ji.push(Hi)},popBoundaryParseStack:function(){Ri=Hi,ji.pop(),Hi=ji.pop(),ji.push(Hi)},addRel:function(t,e,n,r,i,a,s,o,l){if(null==t||null==e||null==n||null==r)return;let c={};const u=Zi.find((t=>t.from===e&&t.to===n));if(u?c=u:Zi.push(c),c.type=t,c.from=e,c.to=n,c.label={text:r},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==a)c.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];c[t]={text:e}}else c.descr={text:a};if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]=e}else c.sprite=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.tags=o;if("object"==typeof l){let[t,e]=Object.entries(l)[0];c[t]=e}else c.link=l;c.wrap=Ji()},updateElStyle:function(t,e,n,r,i,a,s,o,l,c,u){let d=Pi.find((t=>t.alias===e));if(void 0!==d||(d=$i.find((t=>t.alias===e)),void 0!==d)){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];d[t]=e}else d.bgColor=n;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];d[t]=e}else d.fontColor=r;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];d[t]=e}else d.borderColor=i;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];d[t]=e}else d.shadowing=a;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];d[t]=e}else d.shape=s;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];d[t]=e}else d.sprite=o;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];d[t]=e}else d.techn=l;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];d[t]=e}else d.legendText=c;if(null!=u)if("object"==typeof u){let[t,e]=Object.entries(u)[0];d[t]=e}else d.legendSprite=u}},updateRelStyle:function(t,e,n,r,i,a,s){const o=Zi.find((t=>t.from===e&&t.to===n));if(void 0!==o){if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.textColor=r;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]=e}else o.lineColor=i;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]=parseInt(e)}else o.offsetX=parseInt(a);if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=parseInt(e)}else o.offsetY=parseInt(s)}},updateLayoutConfig:function(t,e,n){let r=Ui,i=qi;if("object"==typeof e){const t=Object.values(e)[0];r=parseInt(t)}else r=parseInt(e);if("object"==typeof n){const t=Object.values(n)[0];i=parseInt(t)}else i=parseInt(n);r>=1&&(Ui=r),i>=1&&(qi=i)},autoWrap:Ji,setWrap:function(t){zi=t},getC4ShapeArray:Gi,getC4Shape:function(t){return Pi.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(Gi(t))},getBoundarys:function(t){return null==t?$i:$i.filter((e=>e.parentBoundary===t))},getCurrentBoundaryParse:function(){return Ri},getParentBoundaryParse:function(){return Hi},getRels:function(){return Zi},getTitle:function(){return Wi},getC4Type:function(){return Vi},getC4ShapeInRow:function(){return Ui},getC4BoundaryInRow:function(){return qi},setAccTitle:Or,getAccTitle:Nr,getAccDescription:Fr,setAccDescription:Br,parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().c4,clear:function(){Pi=[],$i=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Hi="",Ri="global",ji=[""],Zi=[],ji=[""],Wi="",zi=!1,Ui=4,qi=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=At(t,ar());Wi=e},setC4Type:function(t){let e=At(t,ar());Vi=e}},Ki=function(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),n.attr("rx",e.rx),n.attr("ry",e.ry),"undefined"!==e.attrs&&null!==e.attrs)for(let r in e.attrs)n.attr(r,e.attrs[r]);return"undefined"!==e.class&&n.attr("class",e.class),n},Qi=function(t,e,n,r,i,a){const o=t.append("image");o.attr("width",e),o.attr("height",n),o.attr("x",r),o.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,s.N)(a);o.attr("xlink:href",l)},ta=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},ea=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),na=function(){function t(t,e,n,i,a,s,o){r(e.append("text").attr("x",n+a/2).attr("y",i+s/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,n,i,a,s,o,l){const{fontSize:c,fontFamily:u,fontWeight:d}=l,h=t.split(Pt.lineBreakRegex);for(let m=0;m<h.length;m++){const t=m*c-c*(h.length-1)/2,s=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",c).style("font-weight",d).style("font-family",u);s.append("tspan").attr("dy",t).text(h[m]).attr("alignment-baseline","mathematical"),r(s,o)}}function n(t,n,i,a,s,o,l,c){const u=n.append("switch"),d=u.append("foreignObject").attr("x",i).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,u,i,a,s,0,l,c),r(d,l)}function r(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),ra=function(t,e,n){const r=t.append("g");let i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",o={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(o={"stroke-width":1});let l={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:o};Ki(r,l);let c=n.boundaryFont();c.fontWeight="bold",c.fontSize=c.fontSize+2,c.fontColor=s,na(n)(e.label.text,r,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},c),e.type&&""!==e.type.text&&(c=n.boundaryFont(),c.fontColor=s,na(n)(e.type.text,r,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=s,na(n)(e.descr.text,r,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},c))},ia=function(t,e,n){var r;let i=e.bgColor?e.bgColor:n[e.typeC4Shape.text+"_bg_color"],a=e.borderColor?e.borderColor:n[e.typeC4Shape.text+"_border_color"],s=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 l=t.append("g");l.attr("class","person-man");const c=ta();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":c.x=e.x,c.y=e.y,c.fill=i,c.width=e.width,c.height=e.height,c.stroke=a,c.rx=2.5,c.ry=2.5,c.attrs={"stroke-width":.5},Ki(l,c);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",a).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)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",a).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":l.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",a).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)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",a).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 u=ea(n,e.typeC4Shape.text);switch(l.append("text").attr("fill",s).attr("font-family",u.fontFamily).attr("font-size",u.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":Qi(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,o)}let d=n[e.typeC4Shape.text+"Font"]();return d.fontWeight="bold",d.fontSize=d.fontSize+2,d.fontColor=s,na(n)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:s},d),d=n[e.typeC4Shape.text+"Font"](),d.fontColor=s,e.techn&&""!==(null==(r=e.techn)?void 0:r.text)?na(n)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:s,"font-style":"italic"},d):e.type&&""!==e.type.text&&na(n)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:s,"font-style":"italic"},d),e.descr&&""!==e.descr.text&&(d=n.personFont(),d.fontColor=s,na(n)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:s},d)),e.height},aa=(t,e,n)=>{const r=t.append("g");let i=0;for(let a of e){let t=a.textColor?a.textColor:"#444444",e=a.lineColor?a.lineColor:"#444444",s=a.offsetX?parseInt(a.offsetX):0,o=a.offsetY?parseInt(a.offsetY):0,l="";if(0===i){let t=r.append("line");t.attr("x1",a.startPoint.x),t.attr("y1",a.startPoint.y),t.attr("x2",a.endPoint.x),t.attr("y2",a.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==a.type&&t.attr("marker-end","url("+l+"#arrowhead)"),"birel"!==a.type&&"rel_b"!==a.type||t.attr("marker-start","url("+l+"#arrowend)"),i=-1}else{let t=r.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),"rel_b"!==a.type&&t.attr("marker-end","url("+l+"#arrowhead)"),"birel"!==a.type&&"rel_b"!==a.type||t.attr("marker-start","url("+l+"#arrowend)")}let c=n.messageFont();na(n)(a.label.text,r,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+s,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+o,a.label.width,a.label.height,{fill:t},c),a.techn&&""!==a.techn.text&&(c=n.messageFont(),na(n)("["+a.techn.text+"]",r,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+s,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+n.messageFontSize+5+o,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:t,"font-style":"italic"},c))}},sa=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")},oa=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")},la=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")},ca=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")},ua=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")},da=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")},ha=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")};s.N;let ma=0,_a=0,pa=4,fa=2;Bi.yy=Xi;let ya={};class ga{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,ba(t.db.getConfig())}setData(t,e,n,r){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=r}updateVal(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(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,r=this.nextData.starty+2*t.margin,i=r+t.height;(e>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>pa)&&(e=this.nextData.startx+t.margin+ya.nextLinePaddingX,r=this.nextData.stopy+2*t.margin,this.nextData.stopx=n=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=r+t.height,this.nextData.cnt=1),t.x=e,t.y=r,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",r,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",r,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},ba(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const ba=function(t){Sn(ya,t),t.fontFamily&&(ya.personFontFamily=ya.systemFontFamily=ya.messageFontFamily=t.fontFamily),t.fontSize&&(ya.personFontSize=ya.systemFontSize=ya.messageFontSize=t.fontSize),t.fontWeight&&(ya.personFontWeight=ya.systemFontWeight=ya.messageFontWeight=t.fontWeight)},ka=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),va=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function xa(t,e,n,r,i){if(!e[t].width)if(n)e[t].text=jn(e[t].text,i,r),e[t].textLines=e[t].text.split(Pt.lineBreakRegex).length,e[t].width=i,e[t].height=Hn(e[t].text,r);else{let n=e[t].text.split(Pt.lineBreakRegex);e[t].textLines=n.length;let i=0;e[t].height=0,e[t].width=0;for(const a of n)e[t].width=Math.max($n(a,r),e[t].width),i=Hn(a,r),e[t].height=e[t].height+i}}const Ma=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=ya.c4ShapeMargin-35;let r=e.wrap&&ya.wrap,i=va(ya);i.fontSize=i.fontSize+2,i.fontWeight="bold",xa("label",e,r,i,$n(e.label.text,i)),ra(t,e,ya)},La=function(t,e,n,r){let i=0;for(const a of r){i=0;const r=n[a];let s=ka(ya,r.typeC4Shape.text);switch(s.fontSize=s.fontSize-2,r.typeC4Shape.width=$n("<<"+r.typeC4Shape.text+">>",s),r.typeC4Shape.height=s.fontSize+2,r.typeC4Shape.Y=ya.c4ShapePadding,i=r.typeC4Shape.Y+r.typeC4Shape.height-4,r.image={width:0,height:0,Y:0},r.typeC4Shape.text){case"person":case"external_person":r.image.width=48,r.image.height=48,r.image.Y=i,i=r.image.Y+r.image.height}r.sprite&&(r.image.width=48,r.image.height=48,r.image.Y=i,i=r.image.Y+r.image.height);let o=r.wrap&&ya.wrap,l=ya.width-2*ya.c4ShapePadding,c=ka(ya,r.typeC4Shape.text);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",xa("label",r,o,c,l),r.label.Y=i+8,i=r.label.Y+r.label.height,r.type&&""!==r.type.text){r.type.text="["+r.type.text+"]",xa("type",r,o,ka(ya,r.typeC4Shape.text),l),r.type.Y=i+5,i=r.type.Y+r.type.height}else if(r.techn&&""!==r.techn.text){r.techn.text="["+r.techn.text+"]",xa("techn",r,o,ka(ya,r.techn.text),l),r.techn.Y=i+5,i=r.techn.Y+r.techn.height}let u=i,d=r.label.width;if(r.descr&&""!==r.descr.text){xa("descr",r,o,ka(ya,r.typeC4Shape.text),l),r.descr.Y=i+20,i=r.descr.Y+r.descr.height,d=Math.max(r.label.width,r.descr.width),u=i-5*r.descr.textLines}d+=ya.c4ShapePadding,r.width=Math.max(r.width||ya.width,d,ya.width),r.height=Math.max(r.height||ya.height,u,ya.height),r.margin=r.margin||ya.c4ShapeMargin,t.insert(r),ia(e,r,ya)}t.bumpLastMargin(ya.c4ShapeMargin)};class wa{constructor(t,e){this.x=t,this.y=e}}let Ta=function(t,e){let n=t.x,r=t.y,i=e.x,a=e.y,s=n+t.width/2,o=r+t.height/2,l=Math.abs(n-i),c=Math.abs(r-a),u=c/l,d=t.height/t.width,h=null;return r==a&&n<i?h=new wa(n+t.width,o):r==a&&n>i?h=new wa(n,o):n==i&&r<a?h=new wa(s,r+t.height):n==i&&r>a&&(h=new wa(s,r)),n>i&&r<a?h=d>=u?new wa(n,o+u*t.width/2):new wa(s-l/c*t.height/2,r+t.height):n<i&&r<a?h=d>=u?new wa(n+t.width,o+u*t.width/2):new wa(s+l/c*t.height/2,r+t.height):n<i&&r>a?h=d>=u?new wa(n+t.width,o-u*t.width/2):new wa(s+t.height/2*l/c,r):n>i&&r>a&&(h=d>=u?new wa(n,o-t.width/2*u):new wa(s-t.height/2*l/c,r)),h},Sa=function(t,e){let n={x:0,y:0};n.x=e.x+e.width/2,n.y=e.y+e.height/2;let r=Ta(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:r,endPoint:Ta(e,n)}};function Da(t,e,n,r,i){let a=new ga(i);a.data.widthLimit=n.data.widthLimit/Math.min(fa,r.length);for(let[s,o]of r.entries()){let r=0;o.image={width:0,height:0,Y:0},o.sprite&&(o.image.width=48,o.image.height=48,o.image.Y=r,r=o.image.Y+o.image.height);let l=o.wrap&&ya.wrap,c=va(ya);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",xa("label",o,l,c,a.data.widthLimit),o.label.Y=r+8,r=o.label.Y+o.label.height,o.type&&""!==o.type.text){o.type.text="["+o.type.text+"]",xa("type",o,l,va(ya),a.data.widthLimit),o.type.Y=r+5,r=o.type.Y+o.type.height}if(o.descr&&""!==o.descr.text){let t=va(ya);t.fontSize=t.fontSize-2,xa("descr",o,l,t,a.data.widthLimit),o.descr.Y=r+20,r=o.descr.Y+o.descr.height}if(0==s||s%fa==0){let t=n.data.startx+ya.diagramMarginX,e=n.data.stopy+ya.diagramMarginY+r;a.setData(t,t,e,e)}else{let t=a.data.stopx!==a.data.startx?a.data.stopx+ya.diagramMarginX:a.data.startx,e=a.data.starty;a.setData(t,t,e,e)}a.name=o.alias;let u=i.db.getC4ShapeArray(o.alias),d=i.db.getC4ShapeKeys(o.alias);d.length>0&&La(a,t,u,d),e=o.alias;let h=i.db.getBoundarys(e);h.length>0&&Da(t,e,a,h,i),"global"!==o.alias&&Ma(t,o,a),n.data.stopy=Math.max(a.data.stopy+ya.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(a.data.stopx+ya.c4ShapeMargin,n.data.stopx),ma=Math.max(ma,n.data.stopx),_a=Math.max(_a,n.data.stopy)}}const Ya={drawPersonOrSystemArray:La,drawBoundary:Ma,setConf:ba,draw:function(t,e,n,r){ya=ar().c4;const i=ar().securityLevel;let a;"sandbox"===i&&(a=(0,o.Ys)("#i"+e));const s="sandbox"===i?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body");let l=r.db;r.db.setWrap(ya.wrap),pa=l.getC4ShapeInRow(),fa=l.getC4BoundaryInRow(),St.debug(`C:${JSON.stringify(ya,null,2)}`);const c="sandbox"===i?s.select(`[id="${e}"]`):(0,o.Ys)(`[id="${e}"]`);da(c),ua(c),ha(c);let u=new ga(r);u.setData(ya.diagramMarginX,ya.diagramMarginX,ya.diagramMarginY,ya.diagramMarginY),u.data.widthLimit=screen.availWidth,ma=ya.diagramMarginX,_a=ya.diagramMarginY;const d=r.db.getTitle();Da(c,"",u,r.db.getBoundarys(""),r),sa(c),oa(c),ca(c),la(c),function(t,e,n,r){let i=0;for(let s of e){i+=1;let t=s.wrap&&ya.wrap,e={fontFamily:(a=ya).messageFontFamily,fontSize:a.messageFontSize,fontWeight:a.messageFontWeight};"C4Dynamic"===r.db.getC4Type()&&(s.label.text=i+": "+s.label.text);let o=$n(s.label.text,e);xa("label",s,t,e,o),s.techn&&""!==s.techn.text&&(o=$n(s.techn.text,e),xa("techn",s,t,e,o)),s.descr&&""!==s.descr.text&&(o=$n(s.descr.text,e),xa("descr",s,t,e,o));let l=n(s.from),c=n(s.to),u=Sa(l,c);s.startPoint=u.startPoint,s.endPoint=u.endPoint}var a;aa(t,e,ya)}(c,r.db.getRels(),r.db.getC4Shape,r),u.data.stopx=ma,u.data.stopy=_a;const h=u.data;let m=h.stopy-h.starty+2*ya.diagramMarginY;const _=h.stopx-h.startx+2*ya.diagramMarginX;d&&c.append("text").text(d).attr("x",(h.stopx-h.startx)/2-4*ya.diagramMarginX).attr("y",h.starty+ya.diagramMarginY),hr(c,m,_,ya.useMaxWidth);const p=d?60:0;c.attr("viewBox",h.startx-ya.diagramMarginX+" -"+(ya.diagramMarginY+p)+" "+_+" "+(m+p)),St.debug("models:",h)}};var Ea=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,3],r=[1,7],i=[1,8],a=[1,9],s=[1,10],o=[1,13],l=[1,12],c=[1,16,25],u=[1,20],d=[1,32],h=[1,33],m=[1,34],_=[1,36],p=[1,39],f=[1,37],y=[1,38],g=[1,44],b=[1,45],k=[1,40],v=[1,41],x=[1,42],M=[1,43],L=[1,48],w=[1,49],T=[1,50],S=[1,51],D=[16,25],Y=[1,65],E=[1,66],C=[1,67],A=[1,68],O=[1,69],N=[1,70],B=[1,71],F=[1,80],I=[16,25,32,45,46,54,60,61,62,63,64,65,66,71,73],P=[16,25,30,32,45,46,50,54,60,61,62,63,64,65,66,71,73,88,89,90,91],j=[5,8,9,10,11,16,19,23,25],R=[54,88,89,90,91],H=[54,65,66,88,89,90,91],$=[54,60,61,62,63,64,88,89,90,91],Z=[16,25,32],W=[1,107],z={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statments:5,direction:6,directive:7,direction_tb:8,direction_bt:9,direction_rl:10,direction_lr:11,graphConfig:12,openDirective:13,typeDirective:14,closeDirective:15,NEWLINE:16,":":17,argDirective:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,CLASS_DIAGRAM:23,statements:24,EOF:25,statement:26,className:27,alphaNumToken:28,classLiteralName:29,GENERICTYPE:30,relationStatement:31,LABEL:32,classStatement:33,methodStatement:34,annotationStatement:35,clickStatement:36,cssClassStatement:37,noteStatement:38,acc_title:39,acc_title_value:40,acc_descr:41,acc_descr_value:42,acc_descr_multiline_value:43,CLASS:44,STYLE_SEPARATOR:45,STRUCT_START:46,members:47,STRUCT_STOP:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,STR:54,NOTE_FOR:55,noteText:56,NOTE:57,relationType:58,lineType: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,CSSCLASS:74,commentToken:75,textToken:76,graphCodeTokens:77,textNoTagsToken:78,TAGSTART:79,TAGEND:80,"==":81,"--":82,PCT:83,DEFAULT:84,SPACE:85,MINUS:86,keywords:87,UNICODE_TEXT:88,NUM:89,ALPHA:90,BQUOTE_STR:91,$accept:0,$end:1},terminals_:{2:"error",5:"statments",8:"direction_tb",9:"direction_bt",10:"direction_rl",11:"direction_lr",16:"NEWLINE",17:":",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",23:"CLASS_DIAGRAM",25:"EOF",30:"GENERICTYPE",32:"LABEL",39:"acc_title",40:"acc_title_value",41:"acc_descr",42:"acc_descr_value",43:"acc_descr_multiline_value",44:"CLASS",45:"STYLE_SEPARATOR",46:"STRUCT_START",48:"STRUCT_STOP",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"STR",55:"NOTE_FOR",57:"NOTE",60:"AGGREGATION",61:"EXTENSION",62:"COMPOSITION",63:"DEPENDENCY",64:"LOLLIPOP",65:"LINE",66:"DOTTED_LINE",67:"CALLBACK",68:"LINK",69:"LINK_TARGET",70:"CLICK",71:"CALLBACK_NAME",72:"CALLBACK_ARGS",73:"HREF",74:"CSSCLASS",77:"graphCodeTokens",79:"TAGSTART",80:"TAGEND",81:"==",82:"--",83:"PCT",84:"DEFAULT",85:"SPACE",86:"MINUS",87:"keywords",88:"UNICODE_TEXT",89:"NUM",90:"ALPHA",91:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[3,1],[3,2],[6,1],[6,1],[6,1],[6,1],[4,1],[7,4],[7,6],[13,1],[14,1],[18,1],[15,1],[12,4],[24,1],[24,2],[24,3],[27,1],[27,1],[27,2],[27,2],[27,2],[26,1],[26,2],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,2],[26,2],[26,1],[33,2],[33,4],[33,5],[33,7],[35,4],[47,1],[47,2],[34,1],[34,2],[34,1],[34,1],[31,3],[31,4],[31,4],[31,5],[38,3],[38,2],[53,3],[53,2],[53,2],[53,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[36,3],[36,4],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[37,3],[75,1],[75,1],[76,1],[76,1],[76,1],[76,1],[76,1],[76,1],[76,1],[78,1],[78,1],[78,1],[78,1],[28,1],[28,1],[28,1],[29,1],[56,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 5:r.setDirection("TB");break;case 6:r.setDirection("BT");break;case 7:r.setDirection("RL");break;case 8:r.setDirection("LR");break;case 12:r.parseDirective("%%{","open_directive");break;case 13:r.parseDirective(a[o],"type_directive");break;case 14:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 15:r.parseDirective("}%%","close_directive","class");break;case 20:case 21:this.$=a[o];break;case 22:this.$=a[o-1]+a[o];break;case 23:case 24:this.$=a[o-1]+"~"+a[o];break;case 25:r.addRelation(a[o]);break;case 26:a[o-1].title=r.cleanupLabel(a[o]),r.addRelation(a[o-1]);break;case 35:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 36:case 37:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 38:r.addClass(a[o]);break;case 39:r.addClass(a[o-2]),r.setCssClass(a[o-2],a[o]);break;case 40:r.addClass(a[o-3]),r.addMembers(a[o-3],a[o-1]);break;case 41:r.addClass(a[o-5]),r.setCssClass(a[o-5],a[o-3]),r.addMembers(a[o-5],a[o-1]);break;case 42:r.addAnnotation(a[o],a[o-2]);break;case 43:this.$=[a[o]];break;case 44:a[o].push(a[o-1]),this.$=a[o];break;case 45:case 47:case 48:break;case 46:r.addMember(a[o-1],r.cleanupLabel(a[o]));break;case 49:this.$={id1:a[o-2],id2:a[o],relation:a[o-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:a[o-3],id2:a[o],relation:a[o-1],relationTitle1:a[o-2],relationTitle2:"none"};break;case 51:this.$={id1:a[o-3],id2:a[o],relation:a[o-2],relationTitle1:"none",relationTitle2:a[o-1]};break;case 52:this.$={id1:a[o-4],id2:a[o],relation:a[o-2],relationTitle1:a[o-3],relationTitle2:a[o-1]};break;case 53:r.addNote(a[o],a[o-1]);break;case 54:r.addNote(a[o]);break;case 55:this.$={type1:a[o-2],type2:a[o],lineType:a[o-1]};break;case 56:this.$={type1:"none",type2:a[o],lineType:a[o-1]};break;case 57:this.$={type1:a[o-1],type2:"none",lineType:a[o]};break;case 58:this.$={type1:"none",type2:"none",lineType:a[o]};break;case 59:this.$=r.relationType.AGGREGATION;break;case 60:this.$=r.relationType.EXTENSION;break;case 61:this.$=r.relationType.COMPOSITION;break;case 62:this.$=r.relationType.DEPENDENCY;break;case 63:this.$=r.relationType.LOLLIPOP;break;case 64:this.$=r.lineType.LINE;break;case 65:this.$=r.lineType.DOTTED_LINE;break;case 66:case 72:this.$=a[o-2],r.setClickEvent(a[o-1],a[o]);break;case 67:case 73:this.$=a[o-3],r.setClickEvent(a[o-2],a[o-1]),r.setTooltip(a[o-2],a[o]);break;case 68:case 76:this.$=a[o-2],r.setLink(a[o-1],a[o]);break;case 69:case 77:this.$=a[o-3],r.setLink(a[o-2],a[o-1],a[o]);break;case 70:case 78:this.$=a[o-3],r.setLink(a[o-2],a[o-1]),r.setTooltip(a[o-2],a[o]);break;case 71:case 79:this.$=a[o-4],r.setLink(a[o-3],a[o-2],a[o]),r.setTooltip(a[o-3],a[o-1]);break;case 74:this.$=a[o-3],r.setClickEvent(a[o-2],a[o-1],a[o]);break;case 75:this.$=a[o-4],r.setClickEvent(a[o-3],a[o-2],a[o-1]),r.setTooltip(a[o-3],a[o]);break;case 80:r.setCssClass(a[o-1],a[o])}},table:[{3:1,4:2,5:n,6:4,7:5,8:r,9:i,10:a,11:s,12:6,13:11,19:o,23:l},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{3:14,4:2,5:n,6:4,7:5,8:r,9:i,10:a,11:s,12:6,13:11,19:o,23:l},{1:[2,9]},e(c,[2,5]),e(c,[2,6]),e(c,[2,7]),e(c,[2,8]),{14:15,20:[1,16]},{16:[1,17]},{20:[2,12]},{1:[2,4]},{15:18,17:[1,19],22:u},e([17,22],[2,13]),{6:31,7:30,8:r,9:i,10:a,11:s,13:11,19:o,24:21,26:22,27:35,28:46,29:47,31:23,33:24,34:25,35:26,36:27,37:28,38:29,39:d,41:h,43:m,44:_,49:p,51:f,52:y,55:g,57:b,67:k,68:v,70:x,74:M,88:L,89:w,90:T,91:S},{16:[1,52]},{18:53,21:[1,54]},{16:[2,15]},{25:[1,55]},{16:[1,56],25:[2,17]},e(D,[2,25],{32:[1,57]}),e(D,[2,27]),e(D,[2,28]),e(D,[2,29]),e(D,[2,30]),e(D,[2,31]),e(D,[2,32]),e(D,[2,33]),e(D,[2,34]),{40:[1,58]},{42:[1,59]},e(D,[2,37]),e(D,[2,45],{53:60,58:63,59:64,32:[1,62],54:[1,61],60:Y,61:E,62:C,63:A,64:O,65:N,66:B}),{27:72,28:46,29:47,88:L,89:w,90:T,91:S},e(D,[2,47]),e(D,[2,48]),{28:73,88:L,89:w,90:T},{27:74,28:46,29:47,88:L,89:w,90:T,91:S},{27:75,28:46,29:47,88:L,89:w,90:T,91:S},{27:76,28:46,29:47,88:L,89:w,90:T,91:S},{54:[1,77]},{27:78,28:46,29:47,88:L,89:w,90:T,91:S},{54:F,56:79},e(I,[2,20],{28:46,29:47,27:81,30:[1,82],88:L,89:w,90:T,91:S}),e(I,[2,21],{30:[1,83]}),e(P,[2,94]),e(P,[2,95]),e(P,[2,96]),e([16,25,30,32,45,46,54,60,61,62,63,64,65,66,71,73],[2,97]),e(j,[2,10]),{15:84,22:u},{22:[2,14]},{1:[2,16]},{6:31,7:30,8:r,9:i,10:a,11:s,13:11,19:o,24:85,25:[2,18],26:22,27:35,28:46,29:47,31:23,33:24,34:25,35:26,36:27,37:28,38:29,39:d,41:h,43:m,44:_,49:p,51:f,52:y,55:g,57:b,67:k,68:v,70:x,74:M,88:L,89:w,90:T,91:S},e(D,[2,26]),e(D,[2,35]),e(D,[2,36]),{27:86,28:46,29:47,54:[1,87],88:L,89:w,90:T,91:S},{53:88,58:63,59:64,60:Y,61:E,62:C,63:A,64:O,65:N,66:B},e(D,[2,46]),{59:89,65:N,66:B},e(R,[2,58],{58:90,60:Y,61:E,62:C,63:A,64:O}),e(H,[2,59]),e(H,[2,60]),e(H,[2,61]),e(H,[2,62]),e(H,[2,63]),e($,[2,64]),e($,[2,65]),e(D,[2,38],{45:[1,91],46:[1,92]}),{50:[1,93]},{54:[1,94]},{54:[1,95]},{71:[1,96],73:[1,97]},{28:98,88:L,89:w,90:T},{54:F,56:99},e(D,[2,54]),e(D,[2,98]),e(I,[2,22]),e(I,[2,23]),e(I,[2,24]),{16:[1,100]},{25:[2,19]},e(Z,[2,49]),{27:101,28:46,29:47,88:L,89:w,90:T,91:S},{27:102,28:46,29:47,54:[1,103],88:L,89:w,90:T,91:S},e(R,[2,57],{58:104,60:Y,61:E,62:C,63:A,64:O}),e(R,[2,56]),{28:105,88:L,89:w,90:T},{47:106,51:W},{27:108,28:46,29:47,88:L,89:w,90:T,91:S},e(D,[2,66],{54:[1,109]}),e(D,[2,68],{54:[1,111],69:[1,110]}),e(D,[2,72],{54:[1,112],72:[1,113]}),e(D,[2,76],{54:[1,115],69:[1,114]}),e(D,[2,80]),e(D,[2,53]),e(j,[2,11]),e(Z,[2,51]),e(Z,[2,50]),{27:116,28:46,29:47,88:L,89:w,90:T,91:S},e(R,[2,55]),e(D,[2,39],{46:[1,117]}),{48:[1,118]},{47:119,48:[2,43],51:W},e(D,[2,42]),e(D,[2,67]),e(D,[2,69]),e(D,[2,70],{69:[1,120]}),e(D,[2,73]),e(D,[2,74],{54:[1,121]}),e(D,[2,77]),e(D,[2,78],{69:[1,122]}),e(Z,[2,52]),{47:123,51:W},e(D,[2,40]),{48:[2,44]},e(D,[2,71]),e(D,[2,75]),e(D,[2,79]),{48:[1,124]},e(D,[2,41])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],6:[2,9],13:[2,12],14:[2,4],20:[2,15],54:[2,14],55:[2,16],85:[2,19],119:[2,44]},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],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},U=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:case 10:case 19:case 27:break;case 11:return this.begin("acc_title"),39;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),41;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 39:case 42:case 45:case 48:case 51:case 54:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 16;case 20:case 21:return 23;case 22:return this.begin("struct"),46;case 23:return"EDGE_STATE";case 24:return"EOF_IN_STRUCT";case 25:return"OPEN_IN_STRUCT";case 26:return this.popState(),48;case 28:return"MEMBER";case 29:return 44;case 30:return 74;case 31:return 67;case 32:return 68;case 33:return 70;case 34:return 55;case 35:return 57;case 36:return 49;case 37:return 50;case 38:this.begin("generic");break;case 40:return"GENERICTYPE";case 41:this.begin("string");break;case 43:return"STR";case 44:this.begin("bqstring");break;case 46:return"BQUOTE_STR";case 47:this.begin("href");break;case 49:return 73;case 50:this.begin("callback_name");break;case 52:this.popState(),this.begin("callback_args");break;case 53:return 71;case 55:return 72;case 56:case 57:case 58:case 59:return 69;case 60:case 61:return 61;case 62:case 63:return 63;case 64:return 62;case 65:return 60;case 66:return 64;case 67:return 65;case 68:return 66;case 69:return 32;case 70:return 45;case 71:return 86;case 72:return"DOT";case 73:return"PLUS";case 74:return 83;case 75:case 76:return"EQUALS";case 77:return 90;case 78:return"PUNCTUATION";case 79:return 89;case 80:return 88;case 81:return 85;case 82:return 25}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:\[\*\])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[54,55],inclusive:!1},callback_name:{rules:[51,52,53],inclusive:!1},href:{rules:[48,49],inclusive:!1},struct:{rules:[23,24,25,26,27,28],inclusive:!1},generic:{rules:[39,40],inclusive:!1},bqstring:{rules:[45,46],inclusive:!1},string:{rules:[42,43],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,29,30,31,32,33,34,35,36,37,38,41,44,47,50,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82],inclusive:!0}}},t);function q(){this.yy={}}return z.lexer=U,q.prototype=z,z.Parser=q,new q}();Ea.parser=Ea;const Ca=Ea,Aa=(t,e)=>{var n;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.class)?void 0:n.defaultRenderer)&&null!==t.match(/^\s*classDiagram/)},Oa=(t,e)=>{var n;return null!==t.match(/^\s*classDiagram/)&&"dagre-wrapper"===(null==(n=null==e?void 0:e.class)?void 0:n.defaultRenderer)||null!==t.match(/^\s*classDiagram-v2/)},Na="classid-";let Ba=[],Fa={},Ia=[],Pa=0,ja=[];const Ra=t=>Pt.sanitizeText(t,ar()),Ha=function(t){let e="",n=t;if(t.indexOf("~")>0){let r=t.split("~");n=r[0],e=Pt.sanitizeText(r[1],ar())}return{className:n,type:e}},$a=function(t){let e=Ha(t);void 0===Fa[e.className]&&(Fa[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:Na+e.className+"-"+Pa},Pa++)},Za=function(t){const e=Object.keys(Fa);for(const n of e)if(Fa[n].id===t)return Fa[n].domId},Wa=function(t,e){const n=Ha(t).className,r=Fa[n];if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?r.annotations.push(Ra(t.substring(2,t.length-2))):t.indexOf(")")>0?r.methods.push(Ra(t)):t&&r.members.push(Ra(t))}},za=function(t,e){t.split(",").forEach((function(t){let n=t;t[0].match(/\d/)&&(n=Na+n),void 0!==Fa[n]&&Fa[n].cssClasses.push(e)}))},Ua=function(t,e,n){const r=ar();let i=t,a=Za(i);if("loose"===r.securityLevel&&void 0!==e&&void 0!==Fa[i]){let t=[];if("string"==typeof n){t=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let e=0;e<t.length;e++){let n=t[e].trim();'"'===n.charAt(0)&&'"'===n.charAt(n.length-1)&&(n=n.substr(1,n.length-2)),t[e]=n}}0===t.length&&t.push(a),ja.push((function(){const n=document.querySelector(`[id="${a}"]`);null!==n&&n.addEventListener("click",(function(){Gn.runFunc(e,...t)}),!1)}))}},qa=function(t){let e=(0,o.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,o.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,o.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,o.Ys)(this);if(null===t.attr("title"))return;const n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,o.Ys)(this).classed("hover",!1)}))};ja.push(qa);let Va="TB";const Ga={parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},setAccTitle:Or,getAccTitle:Nr,getAccDescription:Fr,setAccDescription:Br,getConfig:()=>ar().class,addClass:$a,bindFunctions:function(t){ja.forEach((function(e){e(t)}))},clear:function(){Ba=[],Fa={},Ia=[],ja=[],ja.push(qa),Ar()},getClass:function(t){return Fa[t]},getClasses:function(){return Fa},getNotes:function(){return Ia},addAnnotation:function(t,e){const n=Ha(t).className;Fa[n].annotations.push(e)},addNote:function(t,e){const n={id:`note${Ia.length}`,class:e,text:t};Ia.push(n)},getRelations:function(){return Ba},addRelation:function(t){St.debug("Adding relation: "+JSON.stringify(t)),$a(t.id1),$a(t.id2),t.id1=Ha(t.id1).className,t.id2=Ha(t.id2).className,t.relationTitle1=Pt.sanitizeText(t.relationTitle1.trim(),ar()),t.relationTitle2=Pt.sanitizeText(t.relationTitle2.trim(),ar()),Ba.push(t)},getDirection:()=>Va,setDirection:t=>{Va=t},addMember:Wa,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((e=>Wa(t,e))))},cleanupLabel:function(t){return":"===t.substring(0,1)?Pt.sanitizeText(t.substr(1).trim(),ar()):Ra(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){Ua(t,e,n),Fa[t].haveCallback=!0})),za(t,"clickable")},setCssClass:za,setLink:function(t,e,n){const r=ar();t.split(",").forEach((function(t){let i=t;t[0].match(/\d/)&&(i=Na+i),void 0!==Fa[i]&&(Fa[i].link=Gn.formatUrl(e,r),"sandbox"===r.securityLevel?Fa[i].linkTarget="_top":Fa[i].linkTarget="string"==typeof n?Ra(n):"_blank")})),za(t,"clickable")},getTooltip:function(t){return Fa[t].tooltip},setTooltip:function(t,e){const n=ar();t.split(",").forEach((function(t){void 0!==e&&(Fa[t].tooltip=Pt.sanitizeText(e,n))}))},lookUpDomId:Za,setDiagramTitle:Ir,getDiagramTitle:Pr};let Ja=0;const Xa=function(t){let e=t.match(/^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/),n=t.match(/^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/);return e&&!n?Ka(e):n?Qa(n):ts(t)},Ka=function(t){let e="",n="";try{let r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?It(t[3].trim()):"",s=t[4]?t[4].trim():"",o=t[5]?t[5].trim():"";n=r+i+a+" "+s,e=ns(o)}catch(r){n=t}return{displayText:n,cssStyle:e}},Qa=function(t){let e="",n="";try{let r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?It(t[3].trim()):"",s=t[4]?t[4].trim():"";n=r+i+"("+a+")"+(t[5]?" : "+It(t[5]).trim():""),e=ns(s)}catch(r){n=t}return{displayText:n,cssStyle:e}},ts=function(t){let e="",n="",r="",i=t.indexOf("("),a=t.indexOf(")");if(i>1&&a>i&&a<=t.length){let s="",o="",l=t.substring(0,1);l.match(/\w/)?o=t.substring(0,i).trim():(l.match(/[#+~-]/)&&(s=l),o=t.substring(1,i).trim());const c=t.substring(i+1,a);t.substring(a+1,1),n=ns(t.substring(a+1,a+2)),e=s+o+"("+It(c.trim())+")",a<t.length&&(r=t.substring(a+2).trim(),""!==r&&(r=" : "+It(r),e+=r))}else e=It(t);return{displayText:e,cssStyle:n}},es=function(t,e,n,r){let i=Xa(e);const a=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&a.attr("style",i.cssStyle),n||a.attr("dy",r.textHeight)},ns=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},rs=function(t,e,n,r){St.debug("Rendering class ",e,n);const i=e.id,a={id:i,label:e.id,width:0,height:0},s=t.append("g").attr("id",r.db.lookUpDomId(i)).attr("class","classGroup");let o;o=e.link?s.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):s.append("text").attr("y",n.textHeight+n.padding).attr("x",0);let l=!0;e.annotations.forEach((function(t){const e=o.append("tspan").text("\xab"+t+"\xbb");l||e.attr("dy",n.textHeight),l=!1}));let c=e.id;void 0!==e.type&&""!==e.type&&(c+="<"+e.type+">");const u=o.append("tspan").text(c).attr("class","title");l||u.attr("dy",n.textHeight);const d=o.node().getBBox().height,h=s.append("line").attr("x1",0).attr("y1",n.padding+d+n.dividerMargin/2).attr("y2",n.padding+d+n.dividerMargin/2),m=s.append("text").attr("x",n.padding).attr("y",d+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");l=!0,e.members.forEach((function(t){es(m,t,l,n),l=!1}));const _=m.node().getBBox(),p=s.append("line").attr("x1",0).attr("y1",n.padding+d+n.dividerMargin+_.height).attr("y2",n.padding+d+n.dividerMargin+_.height),f=s.append("text").attr("x",n.padding).attr("y",d+2*n.dividerMargin+_.height+n.textHeight).attr("fill","white").attr("class","classText");l=!0,e.methods.forEach((function(t){es(f,t,l,n),l=!1}));const y=s.node().getBBox();var g=" ";e.cssClasses.length>0&&(g+=e.cssClasses.join(" "));const b=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",y.width+2*n.padding).attr("height",y.height+n.padding+.5*n.dividerMargin).attr("class",g).node().getBBox().width;return o.node().childNodes.forEach((function(t){t.setAttribute("x",(b-t.getBBox().width)/2)})),e.tooltip&&o.insert("title").text(e.tooltip),h.attr("x2",b),p.attr("x2",b),a.width=b,a.height=y.height+n.padding+.5*n.dividerMargin,a},is=function(t,e,n,r,i){const a=function(t){switch(t){case i.db.relationType.AGGREGATION:return"aggregation";case i.db.relationType.EXTENSION:return"extension";case i.db.relationType.COMPOSITION:return"composition";case i.db.relationType.DEPENDENCY:return"dependency";case i.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const s=e.points,l=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),c=t.append("path").attr("d",l(s)).attr("id","edge"+Ja).attr("class","relation");let u,d,h="";r.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),1==n.relation.lineType&&c.attr("class","relation dashed-line"),10==n.relation.lineType&&c.attr("class","relation dotted-line"),"none"!==n.relation.type1&&c.attr("marker-start","url("+h+"#"+a(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&c.attr("marker-end","url("+h+"#"+a(n.relation.type2)+"End)");const m=e.points.length;let _,p,f,y,g=Gn.calcLabelPosition(e.points);if(u=g.x,d=g.y,m%2!=0&&m>1){let t=Gn.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),r=Gn.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[m-1]);St.debug("cardinality_1_point "+JSON.stringify(t)),St.debug("cardinality_2_point "+JSON.stringify(r)),_=t.x,p=t.y,f=r.x,y=r.y}if(void 0!==n.title){const e=t.append("g").attr("class","classLabel"),i=e.append("text").attr("class","label").attr("x",u).attr("y",d).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=i;const a=i.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",a.x-r.padding/2).attr("y",a.y-r.padding/2).attr("width",a.width+r.padding).attr("height",a.height+r.padding)}if(St.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",_).attr("y",p).attr("fill","black").attr("font-size","6").text(n.relationTitle1)}if(void 0!==n.relationTitle2&&"none"!==n.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",f).attr("y",y).attr("fill","black").attr("font-size","6").text(n.relationTitle2)}Ja++},as=function(t,e,n,r){St.debug("Rendering note ",e,n);const i=e.id,a={id:i,text:e.text,width:0,height:0},s=t.append("g").attr("id",i).attr("class","classGroup");let o=s.append("text").attr("y",n.textHeight+n.padding).attr("x",0);const l=JSON.parse(`"${e.text}"`).split("\n");l.forEach((function(t){St.debug(`Adding line: ${t}`),o.append("tspan").text(t).attr("class","title").attr("dy",n.textHeight)}));const c=s.node().getBBox(),u=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",c.width+2*n.padding).attr("height",c.height+l.length*n.textHeight+n.padding+.5*n.dividerMargin).node().getBBox().width;return o.node().childNodes.forEach((function(t){t.setAttribute("x",(u-t.getBBox().width)/2)})),a.width=u,a.height=c.height+l.length*n.textHeight+n.padding+.5*n.dividerMargin,a};let ss={};const os=function(t){const e=Object.entries(ss).find((e=>e[1].label===t));if(e)return e[0]},ls={draw:function(t,e,n,r){const i=ar().class;ss={},St.info("Rendering diagram "+t);const a=ar().securityLevel;let s;"sandbox"===a&&(s=(0,o.Ys)("#i"+e));const l="sandbox"===a?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body"),c=l.select(`[id='${e}']`);var u;(u=c).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"),u.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"),u.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"),u.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"),u.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"),u.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"),u.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"),u.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 d=new ut.k({multigraph:!0});d.setGraph({isMultiGraph:!0}),d.setDefaultEdgeLabel((function(){return{}}));const h=r.db.getClasses(),m=Object.keys(h);for(const o of m){const t=h[o],e=rs(c,t,i,r);ss[e.id]=e,d.setNode(e.id,e),St.info("Org height: "+e.height)}r.db.getRelations().forEach((function(t){St.info("tjoho"+os(t.id1)+os(t.id2)+JSON.stringify(t)),d.setEdge(os(t.id1),os(t.id2),{relation:t},t.title||"DEFAULT")}));r.db.getNotes().forEach((function(t){St.debug(`Adding note: ${JSON.stringify(t)}`);const e=as(c,t,i,r);ss[e.id]=e,d.setNode(e.id,e),t.class&&t.class in h&&d.setEdge(t.id,os(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,ct.bK)(d),d.nodes().forEach((function(t){void 0!==t&&void 0!==d.node(t)&&(St.debug("Node "+t+": "+JSON.stringify(d.node(t))),l.select("#"+(r.db.lookUpDomId(t)||t)).attr("transform","translate("+(d.node(t).x-d.node(t).width/2)+","+(d.node(t).y-d.node(t).height/2)+" )"))})),d.edges().forEach((function(t){void 0!==t&&void 0!==d.edge(t)&&(St.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(d.edge(t))),is(c,d.edge(t),d.edge(t).relation,i,r))}));const _=c.node().getBBox(),p=_.width+40,f=_.height+40;hr(c,f,p,i.useMaxWidth);const y=`${_.x-20} ${_.y-20} ${p} ${f}`;St.debug(`viewBox ${y}`),c.attr("viewBox",y)}},cs={extension:(t,e,n)=>{St.trace("Making markers for ",n),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},point:(t,e)=>{t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 12 20").attr("refX",10).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(t,e)=>{t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(t,e)=>{t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},us=(t,e,n,r)=>{e.forEach((e=>{cs[e](t,n,r)}))};const ds=(t,e,n,r)=>{let i=t||"";if("object"==typeof i&&(i=i[0]),Ft(ar().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),St.info("vertexText"+i);let t=function(t){const e=(0,o.Ys)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),n=e.append("xhtml:div"),r=t.label,i=t.isNode?"nodeLabel":"edgeLabel";var a,s;return n.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+r+"</span>"),a=n,(s=t.labelStyle)&&a.attr("style",s),n.style("display","inline-block"),n.style("white-space","nowrap"),n.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:r,label:Jh(i).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 i?i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?i:[];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"),n?r.setAttribute("class","title-row"):r.setAttribute("class","row"),r.textContent=e.trim(),t.appendChild(r)}return t}},hs=(t,e,n,r)=>{let i;i=n||"node default";const a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",e.labelStyle);let l;l=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const c=s.node().appendChild(ds(At(Jh(l),ar()),e.labelStyle,!1,r));let u=c.getBBox();if(Ft(ar().flowchart.htmlLabels)){const t=c.children[0],e=(0,o.Ys)(c);u=t.getBoundingClientRect(),e.attr("width",u.width),e.attr("height",u.height)}const d=e.padding/2;return s.attr("transform","translate("+-u.width/2+", "+-u.height/2+")"),{shapeSvg:a,bbox:u,halfPadding:d,label:s}},ms=(t,e)=>{const n=e.node().getBBox();t.width=n.width,t.height=n.height};function _s(t,e,n,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+","+n/2+")")}let ps={},fs={},ys={};const gs=(t,e)=>(St.trace("In isDecendant",e," ",t," = ",fs[e].includes(t)),!!fs[e].includes(t)),bs=(t,e,n,r)=>{St.warn("Copying children of ",t,"root",r,"data",e.node(t),r);const i=e.children(t)||[];t!==r&&i.push(t),St.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach((i=>{if(e.children(i).length>0)bs(i,e,n,r);else{const a=e.node(i);St.info("cp ",i," to ",r," with parent ",t),n.setNode(i,a),r!==e.parent(i)&&(St.warn("Setting parent",i,e.parent(i)),n.setParent(i,e.parent(i))),t!==r&&i!==t?(St.debug("Setting parent",i,t),n.setParent(i,t)):(St.info("In copy ",t,"root",r,"data",e.node(t),r),St.debug("Not Setting parent for node=",i,"cluster!==rootId",t!==r,"node!==clusterId",i!==t));const s=e.edges(i);St.debug("Copying Edges",s),s.forEach((i=>{St.info("Edge",i);const a=e.edge(i.v,i.w,i.name);St.info("Edge data",a,r);try{((t,e)=>(St.info("Decendants of ",e," is ",fs[e]),St.info("Edge is ",t),t.v!==e&&t.w!==e&&(fs[e]?fs[e].includes(t.v)||gs(t.v,e)||gs(t.w,e)||fs[e].includes(t.w):(St.debug("Tilt, ",e,",not in decendants"),!1))))(i,r)?(St.info("Copying as ",i.v,i.w,a,i.name),n.setEdge(i.v,i.w,a,i.name),St.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):St.info("Skipping copy of edge ",i.v,"--\x3e",i.w," rootId: ",r," clusterId:",t)}catch(s){St.error(s)}}))}St.debug("Removing node",i),e.removeNode(i)}))},ks=(t,e)=>{const n=e.children(t);let r=[...n];for(const i of n)ys[i]=t,r=[...r,...ks(i,e)];return r},vs=(t,e)=>{St.trace("Searching",t);const n=e.children(t);if(St.trace("Searching children of id ",t,n),n.length<1)return St.trace("This is a valid node",t),t;for(const r of n){const n=vs(r,e);if(n)return St.trace("Found replacement for",t," => ",n),n}},xs=t=>ps[t]&&ps[t].externalConnections&&ps[t]?ps[t].id:t,Ms=(t,e)=>{if(St.warn("extractor - ",e,dt.c(t),t.children("D")),e>10)return void St.error("Bailing out");let n=t.nodes(),r=!1;for(const i of n){const e=t.children(i);r=r||e.length>0}if(r){St.debug("Nodes = ",n,e);for(const r of n)if(St.debug("Extracting node",r,ps,ps[r]&&!ps[r].externalConnections,!t.parent(r),t.node(r),t.children("D")," Depth ",e),ps[r])if(!ps[r].externalConnections&&t.children(r)&&t.children(r).length>0){St.warn("Cluster without external connections, without a parent and with children",r,e);let n="TB"===t.graph().rankdir?"LR":"TB";ps[r]&&ps[r].clusterData&&ps[r].clusterData.dir&&(n=ps[r].clusterData.dir,St.warn("Fixing dir",ps[r].clusterData.dir,n));const i=new ut.k({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));St.warn("Old graph before copy",dt.c(t)),bs(r,t,i,r),t.setNode(r,{clusterNode:!0,id:r,clusterData:ps[r].clusterData,labelText:ps[r].labelText,graph:i}),St.warn("New graph after copy node: (",r,")",dt.c(i)),St.debug("Old graph after copy",dt.c(t))}else St.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!ps[r].externalConnections," no parent: ",!t.parent(r)," children ",t.children(r)&&t.children(r).length>0,t.children("D"),e),St.debug(ps);else St.debug("Not a cluster",r,e);n=t.nodes(),St.warn("New list of nodes",n);for(const r of n){const n=t.node(r);St.warn(" Now next level",r,n),n.clusterNode&&Ms(n.graph,e+1)}}else St.debug("Done, no node has children",t.nodes())},Ls=(t,e)=>{if(0===e.length)return[];let n=Object.assign(e);return e.forEach((e=>{const r=t.children(e),i=Ls(t,r);n=[...n,...i]})),n};function ws(t,e,n,r){var i=t.x,a=t.y,s=i-r.x,o=a-r.y,l=Math.sqrt(e*e*o*o+n*n*s*s),c=Math.abs(e*n*s/l);r.x<i&&(c=-c);var u=Math.abs(e*n*o/l);return r.y<a&&(u=-u),{x:i+c,y:a+u}}function Ts(t,e,n,r){var i,a,s,o,l,c,u,d,h,m,_,p,f;if(i=e.y-t.y,s=t.x-e.x,l=e.x*t.y-t.x*e.y,h=i*n.x+s*n.y+l,m=i*r.x+s*r.y+l,!(0!==h&&0!==m&&Ss(h,m)||(a=r.y-n.y,o=n.x-r.x,c=r.x*n.y-n.x*r.y,u=a*t.x+o*t.y+c,d=a*e.x+o*e.y+c,0!==u&&0!==d&&Ss(u,d)||0==(_=i*o-a*s))))return p=Math.abs(_/2),{x:(f=s*c-o*l)<0?(f-p)/_:(f+p)/_,y:(f=a*l-i*c)<0?(f-p)/_:(f+p)/_}}function Ss(t,e){return t*e>0}const Ds=(t,e)=>{var n,r,i=t.x,a=t.y,s=e.x-i,o=e.y-a,l=t.width/2,c=t.height/2;return Math.abs(o)*l>Math.abs(s)*c?(o<0&&(c=-c),n=0===o?0:c*s/o,r=c):(s<0&&(l=-l),n=l,r=0===s?0:l*o/s),{x:i+n,y:a+r}},Ys={node:function(t,e){return t.intersect(e)},circle:function(t,e,n){return ws(t,e,e,n)},ellipse:ws,polygon:function(t,e,n){var r=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){s=Math.min(s,t.x),o=Math.min(o,t.y)})):(s=Math.min(s,e.x),o=Math.min(o,e.y));for(var l=r-t.width/2-s,c=i-t.height/2-o,u=0;u<e.length;u++){var d=e[u],h=e[u<e.length-1?u+1:0],m=Ts(t,n,{x:l+d.x,y:c+d.y},{x:l+h.x,y:c+h.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),s=e.x-n.x,o=e.y-n.y,l=Math.sqrt(s*s+o*o);return a<l?-1:a===l?0:1})),a[0]):t},rect:Ds},Es=(t,e)=>{const{shapeSvg:n,bbox:r,halfPadding:i}=hs(t,e,"node "+e.classes,!0);St.info("Classes = ",e.classes);const a=n.insert("rect",":first-child");return a.attr("rx",e.rx).attr("ry",e.ry).attr("x",-r.width/2-i).attr("y",-r.height/2-i).attr("width",r.width+e.padding).attr("height",r.height+e.padding),ms(e,a),e.intersect=function(t){return Ys.rect(e,t)},n},Cs=(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding+(r.height+e.padding),a=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];St.info("Question main (Circle)");const s=_s(n,i,i,a);return s.attr("style",e.style),ms(e,s),e.intersect=function(t){return St.warn("Intersect called"),Ys.polygon(e,a,t)},n};function As(t,e,n,r){const i=[],a=t=>{i.push(t,0)},s=t=>{i.push(0,t)};e.includes("t")?(St.debug("add top border"),a(n)):s(n),e.includes("r")?(St.debug("add right border"),a(r)):s(r),e.includes("b")?(St.debug("add bottom border"),a(n)):s(n),e.includes("l")?(St.debug("add left border"),a(r)):s(r),t.attr("stroke-dasharray",i.join(" "))}const Os=(t,e,n)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let i=70,a=10;"LR"===n&&(i=10,a=70);const s=r.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return ms(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return Ys.rect(e,t)},r},Ns={rhombus:Cs,question:Cs,rect:(t,e)=>{const{shapeSvg:n,bbox:r,halfPadding:i}=hs(t,e,"node "+e.classes,!0);St.trace("Classes = ",e.classes);const a=n.insert("rect",":first-child"),s=r.width+e.padding,o=r.height+e.padding;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-r.width/2-i).attr("y",-r.height/2-i).attr("width",s).attr("height",o),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(As(a,e.props.borders,s,o),t.delete("borders")),t.forEach((t=>{St.warn(`Unknown node property ${t}`)}))}return ms(e,a),e.intersect=function(t){return Ys.rect(e,t)},n},labelRect:(t,e)=>{const{shapeSvg:n}=hs(t,e,"label",!0);St.trace("Classes = ",e.classes);const r=n.insert("rect",":first-child");if(r.attr("width",0).attr("height",0),n.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(As(r,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{St.warn(`Unknown node property ${t}`)}))}return ms(e,r),e.intersect=function(t){return Ys.rect(e,t)},n},rectWithTitle:(t,e)=>{let n;n=e.classes?"node "+e.classes:"node default";const r=t.insert("g").attr("class",n).attr("id",e.domId||e.id),i=r.insert("rect",":first-child"),a=r.insert("line"),s=r.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText;let c="";c="object"==typeof l?l[0]:l,St.info("Label text abc79",c,l,"object"==typeof l);const u=s.node().appendChild(ds(c,e.labelStyle,!0,!0));let d={width:0,height:0};if(Ft(ar().flowchart.htmlLabels)){const t=u.children[0],e=(0,o.Ys)(u);d=t.getBoundingClientRect(),e.attr("width",d.width),e.attr("height",d.height)}St.info("Text 2",l);const h=l.slice(1,l.length);let m=u.getBBox();const _=s.node().appendChild(ds(h.join?h.join("<br/>"):h,e.labelStyle,!0,!0));if(Ft(ar().flowchart.htmlLabels)){const t=_.children[0],e=(0,o.Ys)(_);d=t.getBoundingClientRect(),e.attr("width",d.width),e.attr("height",d.height)}const p=e.padding/2;return(0,o.Ys)(_).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+p+5)+")"),(0,o.Ys)(u).attr("transform","translate( "+(d.width<m.width?0:-(m.width-d.width)/2)+", 0)"),d=s.node().getBBox(),s.attr("transform","translate("+-d.width/2+", "+(-d.height/2-p+3)+")"),i.attr("class","outer title-state").attr("x",-d.width/2-p).attr("y",-d.height/2-p).attr("width",d.width+e.padding).attr("height",d.height+e.padding),a.attr("class","divider").attr("x1",-d.width/2-p).attr("x2",d.width/2+p).attr("y1",-d.height/2-p+m.height+p).attr("y2",-d.height/2-p+m.height+p),ms(e,i),e.intersect=function(t){return Ys.rect(e,t)},r},choice:(t,e)=>{const n=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 n.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 Ys.circle(e,14,t)},n},circle:(t,e)=>{const{shapeSvg:n,bbox:r,halfPadding:i}=hs(t,e,void 0,!0),a=n.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",r.width/2+i).attr("width",r.width+e.padding).attr("height",r.height+e.padding),St.info("Circle main"),ms(e,a),e.intersect=function(t){return St.info("Circle intersect",e,r.width/2+i,t),Ys.circle(e,r.width/2+i,t)},n},doublecircle:(t,e)=>{const{shapeSvg:n,bbox:r,halfPadding:i}=hs(t,e,void 0,!0),a=n.insert("g",":first-child"),s=a.insert("circle"),o=a.insert("circle");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",r.width/2+i+5).attr("width",r.width+e.padding+10).attr("height",r.height+e.padding+10),o.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",r.width/2+i).attr("width",r.width+e.padding).attr("height",r.height+e.padding),St.info("DoubleCircle main"),ms(e,s),e.intersect=function(t){return St.info("DoubleCircle intersect",e,r.width/2+i+5,t),Ys.circle(e,r.width/2+i+5,t)},n},stadium:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.height+e.padding,a=r.width+i/4+e.padding,s=n.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return ms(e,s),e.intersect=function(t){return Ys.rect(e,t)},n},hexagon:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.height+e.padding,a=i/4,s=r.width+2*a+e.padding,o=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-i/2},{x:s-a,y:-i},{x:a,y:-i},{x:0,y:-i/2}],l=_s(n,s,i,o);return l.attr("style",e.style),ms(e,l),e.intersect=function(t){return Ys.polygon(e,o,t)},n},rect_left_inv_arrow:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return _s(n,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(t){return Ys.polygon(e,s,t)},n},lean_right:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],o=_s(n,i,a,s);return o.attr("style",e.style),ms(e,o),e.intersect=function(t){return Ys.polygon(e,s,t)},n},lean_left:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],o=_s(n,i,a,s);return o.attr("style",e.style),ms(e,o),e.intersect=function(t){return Ys.polygon(e,s,t)},n},trapezoid:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],o=_s(n,i,a,s);return o.attr("style",e.style),ms(e,o),e.intersect=function(t){return Ys.polygon(e,s,t)},n},inv_trapezoid:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],o=_s(n,i,a,s);return o.attr("style",e.style),ms(e,o),e.intersect=function(t){return Ys.polygon(e,s,t)},n},rect_right_inv_arrow:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],o=_s(n,i,a,s);return o.attr("style",e.style),ms(e,o),e.intersect=function(t){return Ys.polygon(e,s,t)},n},cylinder:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding,a=i/2,s=a/(2.5+i/50),o=r.height+s+e.padding,l="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+o+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-o,c=n.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",l).attr("transform","translate("+-i/2+","+-(o/2+s)+")");return ms(e,c),e.intersect=function(t){const n=Ys.rect(e,t),r=n.x-e.x;if(0!=a&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(n.y-e.y)>e.height/2-s)){let i=s*s*(1-r*r/(a*a));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),n.y+=i}return n},n},start:(t,e)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ms(e,r),e.intersect=function(t){return Ys.circle(e,7,t)},n},end:(t,e)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.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),ms(e,i),e.intersect=function(t){return Ys.circle(e,7,t)},n},note:Es,subroutine:(t,e)=>{const{shapeSvg:n,bbox:r}=hs(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],o=_s(n,i,a,s);return o.attr("style",e.style),ms(e,o),e.intersect=function(t){return Ys.polygon(e,s,t)},n},fork:Os,join:Os,class_box:(t,e)=>{const n=e.padding/2;let r;r=e.classes?"node "+e.classes:"node default";const i=t.insert("g").attr("class",r).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),s=i.insert("line"),l=i.insert("line");let c=0,u=4;const d=i.insert("g").attr("class","label");let h=0;const m=e.classData.annotations&&e.classData.annotations[0],_=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",p=d.node().appendChild(ds(_,e.labelStyle,!0,!0));let f=p.getBBox();if(Ft(ar().flowchart.htmlLabels)){const t=p.children[0],e=(0,o.Ys)(p);f=t.getBoundingClientRect(),e.attr("width",f.width),e.attr("height",f.height)}e.classData.annotations[0]&&(u+=f.height+4,c+=f.width);let y=e.classData.id;void 0!==e.classData.type&&""!==e.classData.type&&(ar().flowchart.htmlLabels?y+="<"+e.classData.type+">":y+="<"+e.classData.type+">");const g=d.node().appendChild(ds(y,e.labelStyle,!0,!0));(0,o.Ys)(g).attr("class","classTitle");let b=g.getBBox();if(Ft(ar().flowchart.htmlLabels)){const t=g.children[0],e=(0,o.Ys)(g);b=t.getBoundingClientRect(),e.attr("width",b.width),e.attr("height",b.height)}u+=b.height+4,b.width>c&&(c=b.width);const k=[];e.classData.members.forEach((t=>{const n=Xa(t);let r=n.displayText;ar().flowchart.htmlLabels&&(r=r.replace(/</g,"<").replace(/>/g,">"));const i=d.node().appendChild(ds(r,n.cssStyle?n.cssStyle:e.labelStyle,!0,!0));let a=i.getBBox();if(Ft(ar().flowchart.htmlLabels)){const t=i.children[0],e=(0,o.Ys)(i);a=t.getBoundingClientRect(),e.attr("width",a.width),e.attr("height",a.height)}a.width>c&&(c=a.width),u+=a.height+4,k.push(i)})),u+=8;const v=[];if(e.classData.methods.forEach((t=>{const n=Xa(t);let r=n.displayText;ar().flowchart.htmlLabels&&(r=r.replace(/</g,"<").replace(/>/g,">"));const i=d.node().appendChild(ds(r,n.cssStyle?n.cssStyle:e.labelStyle,!0,!0));let a=i.getBBox();if(Ft(ar().flowchart.htmlLabels)){const t=i.children[0],e=(0,o.Ys)(i);a=t.getBoundingClientRect(),e.attr("width",a.width),e.attr("height",a.height)}a.width>c&&(c=a.width),u+=a.height+4,v.push(i)})),u+=8,m){let t=(c-f.width)/2;(0,o.Ys)(p).attr("transform","translate( "+(-1*c/2+t)+", "+-1*u/2+")"),h=f.height+4}let x=(c-b.width)/2;return(0,o.Ys)(g).attr("transform","translate( "+(-1*c/2+x)+", "+(-1*u/2+h)+")"),h+=b.height+4,s.attr("class","divider").attr("x1",-c/2-n).attr("x2",c/2+n).attr("y1",-u/2-n+8+h).attr("y2",-u/2-n+8+h),h+=8,k.forEach((t=>{(0,o.Ys)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+h+4)+")"),h+=b.height+4})),h+=8,l.attr("class","divider").attr("x1",-c/2-n).attr("x2",c/2+n).attr("y1",-u/2-n+8+h).attr("y2",-u/2-n+8+h),h+=8,v.forEach((t=>{(0,o.Ys)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+h)+")"),h+=b.height+4})),a.attr("class","outer title-state").attr("x",-c/2-n).attr("y",-u/2-n).attr("width",c+e.padding).attr("height",u+e.padding),ms(e,a),e.intersect=function(t){return Ys.rect(e,t)},i}};let Bs={};const Fs=(t,e,n)=>{let r,i;if(e.link){let a;"sandbox"===ar().securityLevel?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),r=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=Ns[e.shape](r,e,n)}else i=Ns[e.shape](t,e,n),r=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),Bs[e.id]=r,e.haveCallback&&Bs[e.id].attr("class",Bs[e.id].attr("class")+" clickable"),r},Is=t=>{const e=Bs[t.id];St.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},Ps={rect:(t,e)=>{St.trace("Creating subgraph rect for ",e.id,e);const n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=i.node().appendChild(ds(e.labelText,e.labelStyle,void 0,!0));let s=a.getBBox();if(Ft(ar().flowchart.htmlLabels)){const t=a.children[0],e=(0,o.Ys)(a);s=t.getBoundingClientRect(),e.attr("width",s.width),e.attr("height",s.height)}const l=0*e.padding,c=l/2,u=e.width<=s.width+l?s.width+l:e.width;e.width<=s.width+l?e.diff=(s.width-e.width)/2-e.padding/2:e.diff=-e.padding/2,St.trace("Data ",e,JSON.stringify(e)),r.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-u/2).attr("y",e.y-e.height/2-c).attr("width",u).attr("height",e.height+l),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2)+")");const d=r.node().getBBox();return e.width=d.width,e.height=d.height,e.intersect=function(t){return Ds(e,t)},n},roundedWithTitle:(t,e)=>{const n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),s=i.node().appendChild(ds(e.labelText,e.labelStyle,void 0,!0));let l=s.getBBox();if(Ft(ar().flowchart.htmlLabels)){const t=s.children[0],e=(0,o.Ys)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l=s.getBBox();const c=0*e.padding,u=c/2,d=e.width<=l.width+e.padding?l.width+e.padding:e.width;e.width<=l.width+e.padding?e.diff=(l.width+0*e.padding-e.width)/2:e.diff=-e.padding/2,r.attr("class","outer").attr("x",e.x-d/2-u).attr("y",e.y-e.height/2-u).attr("width",d+c).attr("height",e.height+c),a.attr("class","inner").attr("x",e.x-d/2-u).attr("y",e.y-e.height/2-u+l.height-1).attr("width",d+c).attr("height",e.height+c-l.height-3),i.attr("transform","translate("+(e.x-l.width/2)+", "+(e.y-e.height/2-e.padding/3+(Ft(ar().flowchart.htmlLabels)?5:3))+")");const h=r.node().getBBox();return e.height=h.height,e.intersect=function(t){return Ds(e,t)},n},noteGroup:(t,e)=>{const n=t.insert("g").attr("class","note-cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");const s=r.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(t){return Ds(e,t)},n},divider:(t,e)=>{const n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);const s=r.node().getBBox();return e.width=s.width,e.height=s.height,e.diff=-e.padding/2,e.intersect=function(t){return Ds(e,t)},n}};let js={};let Rs={},Hs={};const $s=(t,e)=>{const n=ds(e.label,e.labelStyle),r=t.insert("g").attr("class","edgeLabel"),i=r.insert("g").attr("class","label");i.node().appendChild(n);let a,s=n.getBBox();if(Ft(ar().flowchart.htmlLabels)){const t=n.children[0],e=(0,o.Ys)(n);s=t.getBoundingClientRect(),e.attr("width",s.width),e.attr("height",s.height)}if(i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Rs[e.id]=r,e.width=s.width,e.height=s.height,e.startLabelLeft){const n=ds(e.startLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),i=r.insert("g").attr("class","inner");a=i.node().appendChild(n);const s=n.getBBox();i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Hs[e.id]||(Hs[e.id]={}),Hs[e.id].startLeft=r,Zs(a,e.startLabelLeft)}if(e.startLabelRight){const n=ds(e.startLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),i=r.insert("g").attr("class","inner");a=r.node().appendChild(n),i.node().appendChild(n);const s=n.getBBox();i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Hs[e.id]||(Hs[e.id]={}),Hs[e.id].startRight=r,Zs(a,e.startLabelRight)}if(e.endLabelLeft){const n=ds(e.endLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),i=r.insert("g").attr("class","inner");a=i.node().appendChild(n);const s=n.getBBox();i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),r.node().appendChild(n),Hs[e.id]||(Hs[e.id]={}),Hs[e.id].endLeft=r,Zs(a,e.endLabelLeft)}if(e.endLabelRight){const n=ds(e.endLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),i=r.insert("g").attr("class","inner");a=i.node().appendChild(n);const s=n.getBBox();i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),r.node().appendChild(n),Hs[e.id]||(Hs[e.id]={}),Hs[e.id].endRight=r,Zs(a,e.endLabelRight)}return n};function Zs(t,e){ar().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const Ws=(t,e)=>{St.warn("abc88 cutPathAtIntersect",t,e);let n=[],r=t[0],i=!1;return t.forEach((t=>{if(St.info("abc88 checking point",t,e),((t,e)=>{const n=t.x,r=t.y,i=Math.abs(e.x-n),a=Math.abs(e.y-r),s=t.width/2,o=t.height/2;return i>=s||a>=o})(e,t)||i)St.warn("abc88 outside",t,r),r=t,i||n.push(t);else{const a=((t,e,n)=>{St.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(n)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const r=t.x,i=t.y,a=Math.abs(r-n.x),s=t.width/2;let o=n.x<e.x?s-a:s+a;const l=t.height/2,c=Math.abs(e.y-n.y),u=Math.abs(e.x-n.x);if(Math.abs(i-e.y)*s>Math.abs(r-e.x)*l){let t=n.y<e.y?e.y-l-i:i-l-e.y;o=u*t/c;const r={x:n.x<e.x?n.x+o:n.x-u+o,y:n.y<e.y?n.y+c-t:n.y-c+t};return 0===o&&(r.x=e.x,r.y=e.y),0===u&&(r.x=e.x),0===c&&(r.y=e.y),St.warn(`abc89 topp/bott calc, Q ${c}, q ${t}, R ${u}, r ${o}`,r),r}{o=n.x<e.x?e.x-s-r:r-s-e.x;let t=c*o/u,i=n.x<e.x?n.x+u-o:n.x-u+o,a=n.y<e.y?n.y+t:n.y-t;return St.warn(`sides calc abc89, Q ${c}, q ${t}, R ${u}, r ${o}`,{_x:i,_y:a}),0===o&&(i=e.x,a=e.y),0===u&&(i=e.x),0===c&&(a=e.y),{x:i,y:a}}})(e,r,t);St.warn("abc88 inside",t,r,a),St.warn("abc88 intersection",a);let s=!1;n.forEach((t=>{s=s||t.x===a.x&&t.y===a.y})),n.some((t=>t.x===a.x&&t.y===a.y))?St.warn("abc88 no intersect",a,n):n.push(a),i=!0}})),St.warn("abc88 returning points",n),n},zs=(t,e,n,r)=>{St.info("Graph in recursive render: XXX",dt.c(e),r);const i=e.graph().rankdir;St.trace("Dir in recursive render - dir:",i);const a=t.insert("g").attr("class","root");e.nodes()?St.info("Recursive render XXX",e.nodes()):St.info("No nodes found for",e),e.edges().length>0&&St.trace("Recursive edges",e.edge(e.edges()[0]));const s=a.insert("g").attr("class","clusters"),l=a.insert("g").attr("class","edgePaths"),c=a.insert("g").attr("class","edgeLabels"),u=a.insert("g").attr("class","nodes");e.nodes().forEach((function(t){const a=e.node(t);if(void 0!==r){const n=JSON.parse(JSON.stringify(r.clusterData));St.info("Setting data for cluster XXX (",t,") ",n,r),e.setNode(r.id,n),e.parent(t)||(St.trace("Setting parent",t,r.id),e.setParent(t,r.id,n))}if(St.info("(Insert) Node XXX"+t+": "+JSON.stringify(e.node(t))),a&&a.clusterNode){St.info("Cluster identified",t,a.width,e.node(t));const r=zs(u,a.graph,n,e.node(t)),i=r.elem;ms(a,i),a.diff=r.diff||0,St.info("Node bounds (abc123)",t,a,a.width,a.x,a.y),((t,e)=>{Bs[e.id]=t})(i,a),St.warn("Recursive render complete ",i,a)}else e.children(t).length>0?(St.info("Cluster - the non recursive path XXX",t,a.id,a,e),St.info(vs(a.id,e)),ps[a.id]={id:vs(a.id,e),node:a}):(St.info("Node - the non recursive path",t,a.id,a),Fs(u,e.node(t),i))})),e.edges().forEach((function(t){const n=e.edge(t.v,t.w,t.name);St.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),St.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(e.edge(t))),St.info("Fix",ps,"ids:",t.v,t.w,"Translateing: ",ps[t.v],ps[t.w]),$s(c,n)})),e.edges().forEach((function(t){St.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),St.info("#############################################"),St.info("### Layout ###"),St.info("#############################################"),St.info(e),(0,ct.bK)(e),St.info("Graph after layout:",dt.c(e));let d=0;return(t=>Ls(t,t.children()))(e).forEach((function(t){const n=e.node(t);St.info("Position "+t+": "+JSON.stringify(e.node(t))),St.info("Position "+t+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?Is(n):e.children(t).length>0?(((t,e)=>{St.trace("Inserting cluster");const n=e.shape||"rect";js[e.id]=Ps[n](t,e)})(s,n),ps[n.id].node=n):Is(n)})),e.edges().forEach((function(t){const r=e.edge(t);St.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(r),r);const i=function(t,e,n,r,i,a){let s=n.points,l=!1;const c=a.node(e.v);var u=a.node(e.w);St.info("abc88 InsertEdge: ",n),u.intersect&&c.intersect&&(s=s.slice(1,n.points.length-1),s.unshift(c.intersect(s[0])),St.info("Last point",s[s.length-1],u,u.intersect(s[s.length-1])),s.push(u.intersect(s[s.length-1]))),n.toCluster&&(St.info("to cluster abc88",r[n.toCluster]),s=Ws(n.points,r[n.toCluster].node),l=!0),n.fromCluster&&(St.info("from cluster abc88",r[n.fromCluster]),s=Ws(s.reverse(),r[n.fromCluster].node).reverse(),l=!0);const d=s.filter((t=>!Number.isNaN(t.y)));let h;h=("graph"===i||"flowchart"===i)&&n.curve||o.$0Z;const m=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(h);let _;switch(n.thickness){case"normal":_="edge-thickness-normal";break;case"thick":_="edge-thickness-thick";break;default:_=""}switch(n.pattern){case"solid":_+=" edge-pattern-solid";break;case"dotted":_+=" edge-pattern-dotted";break;case"dashed":_+=" edge-pattern-dashed"}const p=t.append("path").attr("d",m(d)).attr("id",n.id).attr("class"," "+_+(n.classes?" "+n.classes:"")).attr("style",n.style);let f="";switch((ar().flowchart.arrowMarkerAbsolute||ar().state.arrowMarkerAbsolute)&&(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,f=f.replace(/\(/g,"\\("),f=f.replace(/\)/g,"\\)")),St.info("arrowTypeStart",n.arrowTypeStart),St.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":p.attr("marker-start","url("+f+"#"+i+"-crossStart)");break;case"arrow_point":p.attr("marker-start","url("+f+"#"+i+"-pointStart)");break;case"arrow_barb":p.attr("marker-start","url("+f+"#"+i+"-barbStart)");break;case"arrow_circle":p.attr("marker-start","url("+f+"#"+i+"-circleStart)");break;case"aggregation":p.attr("marker-start","url("+f+"#"+i+"-aggregationStart)");break;case"extension":p.attr("marker-start","url("+f+"#"+i+"-extensionStart)");break;case"composition":p.attr("marker-start","url("+f+"#"+i+"-compositionStart)");break;case"dependency":p.attr("marker-start","url("+f+"#"+i+"-dependencyStart)");break;case"lollipop":p.attr("marker-start","url("+f+"#"+i+"-lollipopStart)")}switch(n.arrowTypeEnd){case"arrow_cross":p.attr("marker-end","url("+f+"#"+i+"-crossEnd)");break;case"arrow_point":p.attr("marker-end","url("+f+"#"+i+"-pointEnd)");break;case"arrow_barb":p.attr("marker-end","url("+f+"#"+i+"-barbEnd)");break;case"arrow_circle":p.attr("marker-end","url("+f+"#"+i+"-circleEnd)");break;case"aggregation":p.attr("marker-end","url("+f+"#"+i+"-aggregationEnd)");break;case"extension":p.attr("marker-end","url("+f+"#"+i+"-extensionEnd)");break;case"composition":p.attr("marker-end","url("+f+"#"+i+"-compositionEnd)");break;case"dependency":p.attr("marker-end","url("+f+"#"+i+"-dependencyEnd)");break;case"lollipop":p.attr("marker-end","url("+f+"#"+i+"-lollipopEnd)")}let y={};return l&&(y.updatedPath=s),y.originalPath=n.points,y}(l,t,r,ps,n,e);((t,e)=>{St.info("Moving label abc78 ",t.id,t.label,Rs[t.id]);let n=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){const r=Rs[t.id];let i=t.x,a=t.y;if(n){const r=Gn.calcLabelPosition(n);St.info("Moving label "+t.label+" from (",i,",",a,") to (",r.x,",",r.y,") abc78"),e.updatedPath&&(i=r.x,a=r.y)}r.attr("transform","translate("+i+", "+a+")")}if(t.startLabelLeft){const e=Hs[t.id].startLeft;let r=t.x,i=t.y;if(n){const e=Gn.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",n);r=e.x,i=e.y}e.attr("transform","translate("+r+", "+i+")")}if(t.startLabelRight){const e=Hs[t.id].startRight;let r=t.x,i=t.y;if(n){const e=Gn.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",n);r=e.x,i=e.y}e.attr("transform","translate("+r+", "+i+")")}if(t.endLabelLeft){const e=Hs[t.id].endLeft;let r=t.x,i=t.y;if(n){const e=Gn.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",n);r=e.x,i=e.y}e.attr("transform","translate("+r+", "+i+")")}if(t.endLabelRight){const e=Hs[t.id].endRight;let r=t.x,i=t.y;if(n){const e=Gn.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",n);r=e.x,i=e.y}e.attr("transform","translate("+r+", "+i+")")}})(r,i)})),e.nodes().forEach((function(t){const n=e.node(t);St.info(t,n.type,n.diff),"group"===n.type&&(d=n.diff)})),{elem:a,diff:d}},Us=(t,e,n,r,i)=>{us(t,n,r,i),Bs={},Rs={},Hs={},js={},fs={},ys={},ps={},St.warn("Graph at first:",dt.c(e)),((t,e)=>{!t||e>10?St.debug("Opting out, no graph "):(St.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(St.warn("Cluster identified",e," Replacement id in edges: ",vs(e,t)),fs[e]=ks(e,t),ps[e]={id:vs(e,t),clusterData:t.node(e)})})),t.nodes().forEach((function(e){const n=t.children(e),r=t.edges();n.length>0?(St.debug("Cluster identified",e,fs),r.forEach((t=>{t.v!==e&&t.w!==e&&gs(t.v,e)^gs(t.w,e)&&(St.warn("Edge: ",t," leaves cluster ",e),St.warn("Decendants of XXX ",e,": ",fs[e]),ps[e].externalConnections=!0)}))):St.debug("Not a cluster ",e,fs)})),t.edges().forEach((function(e){const n=t.edge(e);St.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),St.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));let r=e.v,i=e.w;if(St.warn("Fix XXX",ps,"ids:",e.v,e.w,"Translating: ",ps[e.v]," --- ",ps[e.w]),ps[e.v]&&ps[e.w]&&ps[e.v]===ps[e.w]){St.warn("Fixing and trixing link to self - removing XXX",e.v,e.w,e.name),St.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=xs(e.v),i=xs(e.w),t.removeEdge(e.v,e.w,e.name);const a=e.w+"---"+e.v;t.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const s=JSON.parse(JSON.stringify(n)),o=JSON.parse(JSON.stringify(n));s.label="",s.arrowTypeEnd="none",o.label="",s.fromCluster=e.v,o.toCluster=e.v,t.setEdge(r,a,s,e.name+"-cyclic-special"),t.setEdge(a,i,o,e.name+"-cyclic-special")}else(ps[e.v]||ps[e.w])&&(St.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=xs(e.v),i=xs(e.w),t.removeEdge(e.v,e.w,e.name),r!==e.v&&(n.fromCluster=e.v),i!==e.w&&(n.toCluster=e.w),St.warn("Fix Replacing with XXX",r,i,e.name),t.setEdge(r,i,n,e.name))})),St.warn("Adjusted Graph",dt.c(t)),Ms(t,0),St.trace(ps))})(e),St.warn("Graph after:",dt.c(e)),zs(t,e,r)},qs=t=>Pt.sanitizeText(t,ar());let Vs={dividerMargin:10,padding:5,textHeight:10};function Gs(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}const Js={setConf:function(t){Object.keys(t).forEach((function(e){Vs[e]=t[e]}))},draw:function(t,e,n,r){St.info("Drawing class - ",e);const i=ar().flowchart,a=ar().securityLevel;St.info("config:",i);const s=i.nodeSpacing||50,l=i.rankSpacing||50,c=new ut.k({multigraph:!0,compound:!0}).setGraph({rankdir:r.db.getDirection(),nodesep:s,ranksep:l,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),u=r.db.getClasses(),d=r.db.getRelations(),h=r.db.getNotes();let m;St.info(d),function(t,e,n,r){const i=Object.keys(t);St.info("keys:",i),St.info(t),i.forEach((function(n){const i=t[n];let a="";i.cssClasses.length>0&&(a=a+" "+i.cssClasses.join(" "));const s={labelStyle:""};let o=void 0!==i.text?i.text:i.id,l="";i.type,l="class_box",e.setNode(i.id,{labelStyle:s.labelStyle,shape:l,labelText:qs(o),classData:i,rx:0,ry:0,class:a,style:s.style,id:i.id,domId:i.domId,tooltip:r.db.getTooltip(i.id)||"",haveCallback:i.haveCallback,link:i.link,width:"group"===i.type?500:void 0,type:i.type,padding:ar().flowchart.padding}),St.info("setNode",{labelStyle:s.labelStyle,shape:l,labelText:o,rx:0,ry:0,class:a,style:s.style,id:i.id,width:"group"===i.type?500:void 0,type:i.type,padding:ar().flowchart.padding})}))}(u,c,0,r),function(t,e){const n=ar().flowchart;let r=0;t.forEach((function(i){r++;const a={classes:"relation"};a.pattern=1==i.relation.lineType?"dashed":"solid",a.id="id"+r,"arrow_open"===i.type?a.arrowhead="none":a.arrowhead="normal",St.info(a,i),a.startLabelRight="none"===i.relationTitle1?"":i.relationTitle1,a.endLabelLeft="none"===i.relationTitle2?"":i.relationTitle2,a.arrowTypeStart=Gs(i.relation.type1),a.arrowTypeEnd=Gs(i.relation.type2);let s="",l="";if(void 0!==i.style){const t=Nn(i.style);s=t.style,l=t.labelStyle}else s="fill:none";a.style=s,a.labelStyle=l,void 0!==i.interpolate?a.curve=An(i.interpolate,o.c_6):void 0!==t.defaultInterpolate?a.curve=An(t.defaultInterpolate,o.c_6):a.curve=An(n.curve,o.c_6),i.text=i.title,void 0===i.text?void 0!==i.style&&(a.arrowheadStyle="fill: #333"):(a.arrowheadStyle="fill: #333",a.labelpos="c",ar().flowchart.htmlLabels?(a.labelType="html",a.label='<span class="edgeLabel">'+i.text+"</span>"):(a.labelType="text",a.label=i.text.replace(Pt.lineBreakRegex,"\n"),void 0===i.style&&(a.style=a.style||"stroke: #333; stroke-width: 1.5px;fill:none"),a.labelStyle=a.labelStyle.replace("color:","fill:"))),e.setEdge(i.id1,i.id2,a,r)}))}(d,c),function(t,e,n,r){St.info(t),t.forEach((function(t,i){const a=t,s="",l="";let c=a.text,u="note";if(e.setNode(a.id,{labelStyle:s,shape:u,labelText:qs(c),noteData:a,rx:0,ry:0,class:"",style:l,id:a.id,domId:a.id,tooltip:"",type:"note",padding:ar().flowchart.padding}),St.info("setNode",{labelStyle:s,shape:u,labelText:c,rx:0,ry:0,style:l,id:a.id,type:"note",padding:ar().flowchart.padding}),!a.class||!(a.class in r))return;const d=n+i,h={classes:"relation",pattern:"dotted"};h.id=`edgeNote${d}`,h.arrowhead="none",St.info(`Note edge: ${JSON.stringify(h)}, ${JSON.stringify(a)}`),h.startLabelRight="",h.endLabelLeft="",h.arrowTypeStart="none",h.arrowTypeEnd="none",h.style="fill:none",h.labelStyle="",h.curve=An(Vs.curve,o.c_6),e.setEdge(a.id,a.class,h,d)}))}(h,c,d.length+1,u),"sandbox"===a&&(m=(0,o.Ys)("#i"+e));const _="sandbox"===a?(0,o.Ys)(m.nodes()[0].contentDocument.body):(0,o.Ys)("body"),p=_.select(`[id="${e}"]`),f=_.select("#"+e+" g");if(Us(f,c,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),Gn.insertTitle(p,"classTitleText",i.titleTopMargin,r.db.getDiagramTitle()),mr(c,p,i.diagramPadding,i.useMaxWidth),!i.htmlLabels){const t="sandbox"===a?m.nodes()[0].contentDocument:document,n=t.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const e of n){const n=e.getBBox(),r=t.createElementNS("http://www.w3.org/2000/svg","rect");r.setAttribute("rx",0),r.setAttribute("ry",0),r.setAttribute("width",n.width),r.setAttribute("height",n.height),e.insertBefore(r,e.firstChild)}}}};var Xs=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,5],i=[6,9,11,23,25,27,29,30,31,51],a=[1,17],s=[1,18],o=[1,19],l=[1,20],c=[1,21],u=[1,22],d=[1,25],h=[1,30],m=[1,31],_=[1,32],p=[1,33],f=[6,9,11,15,20,23,25,27,29,30,31,44,45,46,47,51],y=[1,45],g=[30,31,48,49],b=[4,6,9,11,23,25,27,29,30,31,51],k=[44,45,46,47],v=[22,37],x=[1,65],M=[1,64],L=[22,37,39,41],w={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyTypeList:35,attributeComment:36,ATTRIBUTE_WORD:37,attributeKeyType:38,COMMA:39,ATTRIBUTE_KEY:40,COMMENT:41,cardinality:42,relType:43,ZERO_OR_ONE:44,ZERO_OR_MORE:45,ONE_OR_MORE:46,ONLY_ONE:47,NON_IDENTIFYING:48,IDENTIFYING:49,WORD:50,open_directive:51,type_directive:52,arg_directive:53,close_directive:54,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",39:"COMMA",40:"ATTRIBUTE_KEY",41:"COMMENT",44:"ZERO_OR_ONE",45:"ZERO_OR_MORE",46:"ONE_OR_MORE",47:"ONLY_ONE",48:"NON_IDENTIFYING",49:"IDENTIFYING",50:"WORD",51:"open_directive",52:"type_directive",53:"arg_directive",54:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[35,3],[38,1],[36,1],[18,3],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:case 20:case 43:case 28:case 29:case 32:this.$=a[o];break;case 12:r.addEntity(a[o-4]),r.addEntity(a[o-2]),r.addRelationship(a[o-4],a[o],a[o-2],a[o-3]);break;case 13:r.addEntity(a[o-3]),r.addAttributes(a[o-3],a[o-1]);break;case 14:r.addEntity(a[o-2]);break;case 15:r.addEntity(a[o]);break;case 16:case 17:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 21:case 41:case 42:case 33:this.$=a[o].replace(/"/g,"");break;case 22:case 30:this.$=[a[o]];break;case 23:a[o].push(a[o-1]),this.$=a[o];break;case 24:this.$={attributeType:a[o-1],attributeName:a[o]};break;case 25:this.$={attributeType:a[o-2],attributeName:a[o-1],attributeKeyTypeList:a[o]};break;case 26:this.$={attributeType:a[o-2],attributeName:a[o-1],attributeComment:a[o]};break;case 27:this.$={attributeType:a[o-3],attributeName:a[o-2],attributeKeyTypeList:a[o-1],attributeComment:a[o]};break;case 31:a[o-2].push(a[o]),this.$=a[o-2];break;case 34:this.$={cardA:a[o],relType:a[o-1],cardB:a[o-2]};break;case 35:this.$=r.Cardinality.ZERO_OR_ONE;break;case 36:this.$=r.Cardinality.ZERO_OR_MORE;break;case 37:this.$=r.Cardinality.ONE_OR_MORE;break;case 38:this.$=r.Cardinality.ONLY_ONE;break;case 39:this.$=r.Identification.NON_IDENTIFYING;break;case 40:this.$=r.Identification.IDENTIFYING;break;case 44:r.parseDirective("%%{","open_directive");break;case 45:r.parseDirective(a[o],"type_directive");break;case 46:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 47:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:n,7:3,12:4,51:r},{1:[3]},e(i,[2,3],{5:6}),{3:7,4:n,7:3,12:4,51:r},{13:8,52:[1,9]},{52:[2,44]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:a,25:s,27:o,29:l,30:c,31:u,51:r},{1:[2,2]},{14:23,15:[1,24],54:d},e([15,54],[2,45]),e(i,[2,8],{1:[2,1]}),e(i,[2,4]),{7:15,10:26,12:4,17:16,23:a,25:s,27:o,29:l,30:c,31:u,51:r},e(i,[2,6]),e(i,[2,7]),e(i,[2,11]),e(i,[2,15],{18:27,42:29,20:[1,28],44:h,45:m,46:_,47:p}),{24:[1,34]},{26:[1,35]},{28:[1,36]},e(i,[2,19]),e(f,[2,20]),e(f,[2,21]),{11:[1,37]},{16:38,53:[1,39]},{11:[2,47]},e(i,[2,5]),{17:40,30:c,31:u},{21:41,22:[1,42],32:43,33:44,37:y},{43:46,48:[1,47],49:[1,48]},e(g,[2,35]),e(g,[2,36]),e(g,[2,37]),e(g,[2,38]),e(i,[2,16]),e(i,[2,17]),e(i,[2,18]),e(b,[2,9]),{14:49,54:d},{54:[2,46]},{15:[1,50]},{22:[1,51]},e(i,[2,14]),{21:52,22:[2,22],32:43,33:44,37:y},{34:53,37:[1,54]},{37:[2,28]},{42:55,44:h,45:m,46:_,47:p},e(k,[2,39]),e(k,[2,40]),{11:[1,56]},{19:57,30:[1,60],31:[1,59],50:[1,58]},e(i,[2,13]),{22:[2,23]},e(v,[2,24],{35:61,36:62,38:63,40:x,41:M}),e([22,37,40,41],[2,29]),e([30,31],[2,34]),e(b,[2,10]),e(i,[2,12]),e(i,[2,41]),e(i,[2,42]),e(i,[2,43]),e(v,[2,25],{36:66,39:[1,67],41:M}),e(v,[2,26]),e(L,[2,30]),e(v,[2,33]),e(L,[2,32]),e(v,[2,27]),{38:68,40:x},e(L,[2,31])],defaultActions:{5:[2,44],7:[2,2],25:[2,47],39:[2,46],45:[2,28],52:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},T=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){switch(n){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.begin("open_directive"),51;case 8:return this.begin("type_directive"),52;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),54;case 11:return 53;case 12:case 13:case 15:case 22:case 27:break;case 14:return 11;case 16:return 9;case 17:return 31;case 18:return 50;case 19:return 4;case 20:return this.begin("block"),20;case 21:return 39;case 23:return 40;case 24:case 25:return 37;case 26:return 41;case 28:return this.popState(),22;case 29:case 58:return e.yytext[0];case 30:case 34:case 35:case 48:return 44;case 31:case 32:case 33:case 41:case 43:case 50:return 46;case 36:case 37:case 38:case 39:case 40:case 42:case 49:return 45;case 44:case 45:case 46:case 47:return 47;case 51:case 54:case 55:case 56:return 48;case 52:case 53:return 49;case 57:return 30;case 59:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[21,22,23,24,25,26,27,28,29],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,19,20,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],inclusive:!0}}},t);function S(){this.yy={}}return w.lexer=T,S.prototype=w,w.Parser=S,new S}();Xs.parser=Xs;const Ks=Xs,Qs=t=>null!==t.match(/^\s*erDiagram/);let to={},eo=[];const no=function(t){return void 0===to[t]&&(to[t]={attributes:[]},St.info("Added new entity :",t)),to[t]},ro={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().er,addEntity:no,addAttributes:function(t,e){let n,r=no(t);for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),St.debug("Added attribute ",e[n].attributeName)},getEntities:()=>to,addRelationship:function(t,e,n,r){let i={entityA:t,roleA:e,entityB:n,relSpec:r};eo.push(i),St.debug("Added new relationship :",i)},getRelationships:()=>eo,clear:function(){to={},eo=[],Ar()},setAccTitle:Or,getAccTitle:Nr,setAccDescription:Br,getAccDescription:Fr,setDiagramTitle:Ir,getDiagramTitle:Pr},io={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"},ao=io,so=function(t,e){let n;t.append("defs").append("marker").attr("id",io.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",io.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"),n=t.append("defs").append("marker").attr("id",io.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),n=t.append("defs").append("marker").attr("id",io.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",io.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",io.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"),n=t.append("defs").append("marker").attr("id",io.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),n=t.append("defs").append("marker").attr("id",io.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},oo=/[^\dA-Za-z](\W)*/g;let lo={},co=new Map;const uo=function(t,e,n){let r;return Object.keys(e).forEach((function(i){const a=function(t="",e=""){const n=t.replace(oo,"");return`${po(e)}${po(n)}${vt(t,_o)}`}(i,"entity");co.set(i,a);const s=t.append("g").attr("id",a);r=void 0===r?a:r;const o="text-"+a,l=s.append("text").classed("er entityLabel",!0).attr("id",o).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",ar().fontFamily).style("font-size",lo.fontSize+"px").text(i),{width:c,height:u}=((t,e,n)=>{const r=lo.entityPadding/3,i=lo.entityPadding/3,a=.85*lo.fontSize,s=e.node().getBBox(),o=[];let l=!1,c=!1,u=0,d=0,h=0,m=0,_=s.height+2*r,p=1;n.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(l=!0),void 0!==t.attributeComment&&(c=!0)})),n.forEach((n=>{const i=`${e.node().id}-attr-${p}`;let s=0;const f=It(n.attributeType),y=t.append("text").classed("er entityLabel",!0).attr("id",`${i}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",ar().fontFamily).style("font-size",a+"px").text(f),g=t.append("text").classed("er entityLabel",!0).attr("id",`${i}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",ar().fontFamily).style("font-size",a+"px").text(n.attributeName),b={};b.tn=y,b.nn=g;const k=y.node().getBBox(),v=g.node().getBBox();if(u=Math.max(u,k.width),d=Math.max(d,v.width),s=Math.max(k.height,v.height),l){const e=void 0!==n.attributeKeyTypeList?n.attributeKeyTypeList.join(","):"",r=t.append("text").classed("er entityLabel",!0).attr("id",`${i}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",ar().fontFamily).style("font-size",a+"px").text(e);b.kn=r;const o=r.node().getBBox();h=Math.max(h,o.width),s=Math.max(s,o.height)}if(c){const e=t.append("text").classed("er entityLabel",!0).attr("id",`${i}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",ar().fontFamily).style("font-size",a+"px").text(n.attributeComment||"");b.cn=e;const r=e.node().getBBox();m=Math.max(m,r.width),s=Math.max(s,r.height)}b.height=s,o.push(b),_+=s+2*r,p+=1}));let f=4;l&&(f+=2),c&&(f+=2);const y=u+d+h+m,g={width:Math.max(lo.minEntityWidth,Math.max(s.width+2*lo.entityPadding,y+i*f)),height:n.length>0?_:Math.max(lo.minEntityHeight,s.height+2*lo.entityPadding)};if(n.length>0){const n=Math.max(0,(g.width-y-i*f)/(f/2));e.attr("transform","translate("+g.width/2+","+(r+s.height/2)+")");let a=s.height+2*r,_="attributeBoxOdd";o.forEach((e=>{const s=a+r+e.height/2;e.tn.attr("transform","translate("+i+","+s+")");const o=t.insert("rect","#"+e.tn.node().id).classed(`er ${_}`,!0).attr("x",0).attr("y",a).attr("width",u+2*i+n).attr("height",e.height+2*r),p=parseFloat(o.attr("x"))+parseFloat(o.attr("width"));e.nn.attr("transform","translate("+(p+i)+","+s+")");const f=t.insert("rect","#"+e.nn.node().id).classed(`er ${_}`,!0).attr("x",p).attr("y",a).attr("width",d+2*i+n).attr("height",e.height+2*r);let y=parseFloat(f.attr("x"))+parseFloat(f.attr("width"));if(l){e.kn.attr("transform","translate("+(y+i)+","+s+")");const o=t.insert("rect","#"+e.kn.node().id).classed(`er ${_}`,!0).attr("x",y).attr("y",a).attr("width",h+2*i+n).attr("height",e.height+2*r);y=parseFloat(o.attr("x"))+parseFloat(o.attr("width"))}c&&(e.cn.attr("transform","translate("+(y+i)+","+s+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${_}`,"true").attr("x",y).attr("y",a).attr("width",m+2*i+n).attr("height",e.height+2*r)),a+=e.height+2*r,_="attributeBoxOdd"===_?"attributeBoxEven":"attributeBoxOdd"}))}else g.height=Math.max(lo.minEntityHeight,_),e.attr("transform","translate("+g.width/2+","+g.height/2+")");return g})(s,l,e[i].attributes),d=s.insert("rect","#"+o).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",c).attr("height",u).node().getBBox();n.setNode(a,{width:d.width,height:d.height,shape:"rect",id:a})})),r},ho=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let mo=0;const _o="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function po(t=""){return t.length>0?`${t}-`:""}const fo={setConf:function(t){const e=Object.keys(t);for(const n of e)lo[n]=t[n]},draw:function(t,e,n,r){lo=ar().er,St.info("Drawing ER diagram");const i=ar().securityLevel;let a;"sandbox"===i&&(a=(0,o.Ys)("#i"+e));const s=("sandbox"===i?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select(`[id='${e}']`);let l;so(s,lo),l=new ut.k({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:lo.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const c=uo(s,r.db.getEntities(),l),u=function(t,e){return t.forEach((function(t){e.setEdge(co.get(t.entityA),co.get(t.entityB),{relationship:t},ho(t))})),t}(r.db.getRelationships(),l);var d,h;(0,ct.bK)(l),d=s,(h=l).nodes().forEach((function(t){void 0!==t&&void 0!==h.node(t)&&d.select("#"+t).attr("transform","translate("+(h.node(t).x-h.node(t).width/2)+","+(h.node(t).y-h.node(t).height/2)+" )")})),u.forEach((function(t){!function(t,e,n,r,i){mo++;const a=n.edge(co.get(e.entityA),co.get(e.entityB),ho(e)),s=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),l=t.insert("path","#"+r).classed("er relationshipLine",!0).attr("d",s(a.points)).style("stroke",lo.stroke).style("fill","none");e.relSpec.relType===i.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let c="";switch(lo.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),e.relSpec.cardA){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+c+"#"+ao.ZERO_OR_ONE_END+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+c+"#"+ao.ZERO_OR_MORE_END+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+c+"#"+ao.ONE_OR_MORE_END+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+c+"#"+ao.ONLY_ONE_END+")")}switch(e.relSpec.cardB){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+c+"#"+ao.ZERO_OR_ONE_START+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+c+"#"+ao.ZERO_OR_MORE_START+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+c+"#"+ao.ONE_OR_MORE_START+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+c+"#"+ao.ONLY_ONE_START+")")}const u=l.node().getTotalLength(),d=l.node().getPointAtLength(.5*u),h="rel"+mo,m=t.append("text").classed("er relationshipLabel",!0).attr("id",h).attr("x",d.x).attr("y",d.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",ar().fontFamily).style("font-size",lo.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+h).classed("er relationshipLabelBox",!0).attr("x",d.x-m.width/2).attr("y",d.y-m.height/2).attr("width",m.width).attr("height",m.height)}(s,t,l,c,r)}));const m=lo.diagramPadding;Gn.insertTitle(s,"entityTitleText",lo.titleTopMargin,r.db.getDiagramTitle());const _=s.node().getBBox(),p=_.width+2*m,f=_.height+2*m;hr(s,f,p,lo.useMaxWidth),s.attr("viewBox",`${_.x-m} ${_.y-m} ${p} ${f}`)}};var yo=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,9],r=[1,7],i=[1,6],a=[1,8],s=[1,20,21,22,23,38,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],o=[2,10],l=[1,20],c=[1,21],u=[1,22],d=[1,23],h=[1,30],m=[1,32],_=[1,33],p=[1,34],f=[1,62],y=[1,48],g=[1,52],b=[1,36],k=[1,37],v=[1,38],x=[1,39],M=[1,40],L=[1,56],w=[1,63],T=[1,51],S=[1,53],D=[1,55],Y=[1,59],E=[1,60],C=[1,41],A=[1,42],O=[1,43],N=[1,44],B=[1,61],F=[1,50],I=[1,54],P=[1,57],j=[1,58],R=[1,49],H=[1,66],$=[1,71],Z=[1,20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],W=[1,75],z=[1,74],U=[1,76],q=[20,21,23,81,82],V=[1,99],G=[1,104],J=[1,107],X=[1,108],K=[1,101],Q=[1,106],tt=[1,109],et=[1,102],nt=[1,114],rt=[1,113],it=[1,103],at=[1,105],st=[1,110],ot=[1,111],lt=[1,112],ct=[1,115],ut=[20,21,22,23,81,82],dt=[20,21,22,23,53,81,82],ht=[20,21,22,23,40,52,53,55,57,59,61,63,65,66,67,69,71,73,74,76,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],mt=[20,21,23],_t=[20,21,23,52,66,67,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],pt=[1,12,20,21,22,23,24,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],ft=[52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],yt=[1,149],gt=[1,157],bt=[1,158],kt=[1,159],vt=[1,160],xt=[1,144],Mt=[1,145],Lt=[1,141],wt=[1,152],Tt=[1,153],St=[1,154],Dt=[1,155],Yt=[1,156],Et=[1,161],Ct=[1,162],At=[1,147],Ot=[1,150],Nt=[1,146],Bt=[1,143],Ft=[20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],It=[1,165],Pt=[20,21,22,23,26,52,66,67,91,105,106,109,111,112,122,123,124,125,126,127],jt=[20,21,22,23,24,26,38,40,41,42,52,56,58,60,62,64,66,67,68,70,72,73,75,77,81,82,86,87,88,89,90,91,92,95,105,106,109,111,112,113,114,122,123,124,125,126,127],Rt=[12,21,22,24],Ht=[22,106],$t=[1,250],Zt=[1,245],Wt=[1,246],zt=[1,254],Ut=[1,251],qt=[1,248],Vt=[1,247],Gt=[1,249],Jt=[1,252],Xt=[1,253],Kt=[1,255],Qt=[1,273],te=[20,21,23,106],ee=[20,21,22,23,66,67,86,102,105,106,109,110,111,112,113],ne={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,link:49,node:50,vertex:51,AMP:52,STYLE_SEPARATOR:53,idString:54,DOUBLECIRCLESTART:55,DOUBLECIRCLEEND:56,PS:57,PE:58,"(-":59,"-)":60,STADIUMSTART:61,STADIUMEND:62,SUBROUTINESTART:63,SUBROUTINEEND:64,VERTEX_WITH_PROPS_START:65,ALPHA:66,COLON:67,PIPE:68,CYLINDERSTART:69,CYLINDEREND:70,DIAMOND_START:71,DIAMOND_STOP:72,TAGEND:73,TRAPSTART:74,TRAPEND:75,INVTRAPSTART:76,INVTRAPEND:77,linkStatement:78,arrowText:79,TESTSTR:80,START_LINK:81,LINK:82,textToken:83,STR:84,keywords:85,STYLE:86,LINKSTYLE:87,CLASSDEF:88,CLASS:89,CLICK:90,DOWN:91,UP:92,textNoTags:93,textNoTagsToken:94,DEFAULT:95,stylesOpt:96,alphaNum:97,CALLBACKNAME:98,CALLBACKARGS:99,HREF:100,LINK_TARGET:101,HEX:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,MINUS:109,UNIT:110,BRKT:111,DOT:112,PCT:113,TAGSTART:114,alphaNumToken:115,idStringToken:116,alphaNumStatement:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,PUNCTUATION:122,UNICODE_TEXT:123,PLUS:124,EQUALS:125,MULT:126,UNDERSCORE:127,graphCodeTokens:128,ARROW_CROSS:129,ARROW_POINT:130,ARROW_CIRCLE:131,ARROW_OPEN:132,QUOTE:133,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",52:"AMP",53:"STYLE_SEPARATOR",55:"DOUBLECIRCLESTART",56:"DOUBLECIRCLEEND",57:"PS",58:"PE",59:"(-",60:"-)",61:"STADIUMSTART",62:"STADIUMEND",63:"SUBROUTINESTART",64:"SUBROUTINEEND",65:"VERTEX_WITH_PROPS_START",66:"ALPHA",67:"COLON",68:"PIPE",69:"CYLINDERSTART",70:"CYLINDEREND",71:"DIAMOND_START",72:"DIAMOND_STOP",73:"TAGEND",74:"TRAPSTART",75:"TRAPEND",76:"INVTRAPSTART",77:"INVTRAPEND",80:"TESTSTR",81:"START_LINK",82:"LINK",84:"STR",86:"STYLE",87:"LINKSTYLE",88:"CLASSDEF",89:"CLASS",90:"CLICK",91:"DOWN",92:"UP",95:"DEFAULT",98:"CALLBACKNAME",99:"CALLBACKARGS",100:"HREF",101:"LINK_TARGET",102:"HEX",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"MINUS",110:"UNIT",111:"BRKT",112:"DOT",113:"PCT",114:"TAGSTART",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr",122:"PUNCTUATION",123:"UNICODE_TEXT",124:"PLUS",125:"EQUALS",126:"MULT",127:"UNDERSCORE",129:"ARROW_CROSS",130:"ARROW_POINT",131:"ARROW_CIRCLE",132:"ARROW_OPEN",133:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[50,3],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,8],[51,4],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,4],[51,4],[51,1],[49,2],[49,3],[49,3],[49,1],[49,3],[78,1],[79,3],[39,1],[39,2],[39,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[93,1],[93,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[103,1],[103,3],[96,1],[96,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[94,1],[94,1],[94,1],[94,1],[54,1],[54,2],[97,1],[97,2],[117,1],[117,1],[117,1],[117,1],[43,1],[43,1],[43,1],[43,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[o],"type_directive");break;case 7:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:(!Array.isArray(a[o])||a[o].length>0)&&a[o-1].push(a[o]),this.$=a[o-1];break;case 12:case 82:case 84:case 96:case 152:case 154:case 155:case 78:case 150:this.$=a[o];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[o-1]),this.$=a[o-1];break;case 35:this.$=a[o-1].nodes;break;case 41:this.$=r.addSubGraph(a[o-6],a[o-1],a[o-4]);break;case 42:this.$=r.addSubGraph(a[o-3],a[o-1],a[o-3]);break;case 43:this.$=r.addSubGraph(void 0,a[o-1],void 0);break;case 45:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 46:case 47:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 51:r.addLink(a[o-2].stmt,a[o],a[o-1]),this.$={stmt:a[o],nodes:a[o].concat(a[o-2].nodes)};break;case 52:r.addLink(a[o-3].stmt,a[o-1],a[o-2]),this.$={stmt:a[o-1],nodes:a[o-1].concat(a[o-3].nodes)};break;case 53:this.$={stmt:a[o-1],nodes:a[o-1]};break;case 54:this.$={stmt:a[o],nodes:a[o]};break;case 55:case 123:case 125:this.$=[a[o]];break;case 56:this.$=a[o-4].concat(a[o]);break;case 57:this.$=[a[o-2]],r.setClass(a[o-2],a[o]);break;case 58:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"square");break;case 59:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"doublecircle");break;case 60:this.$=a[o-5],r.addVertex(a[o-5],a[o-2],"circle");break;case 61:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"ellipse");break;case 62:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"stadium");break;case 63:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"subroutine");break;case 64:this.$=a[o-7],r.addVertex(a[o-7],a[o-1],"rect",void 0,void 0,void 0,Object.fromEntries([[a[o-5],a[o-3]]]));break;case 65:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"cylinder");break;case 66:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"round");break;case 67:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"diamond");break;case 68:this.$=a[o-5],r.addVertex(a[o-5],a[o-2],"hexagon");break;case 69:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"odd");break;case 70:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"trapezoid");break;case 71:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"inv_trapezoid");break;case 72:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"lean_right");break;case 73:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"lean_left");break;case 74:this.$=a[o],r.addVertex(a[o]);break;case 75:a[o-1].text=a[o],this.$=a[o-1];break;case 76:case 77:a[o-2].text=a[o-1],this.$=a[o-2];break;case 79:var l=r.destructLink(a[o],a[o-2]);this.$={type:l.type,stroke:l.stroke,length:l.length,text:a[o-1]};break;case 80:l=r.destructLink(a[o]);this.$={type:l.type,stroke:l.stroke,length:l.length};break;case 81:this.$=a[o-1];break;case 83:case 97:case 153:case 151:this.$=a[o-1]+""+a[o];break;case 98:case 99:this.$=a[o-4],r.addClass(a[o-2],a[o]);break;case 100:this.$=a[o-4],r.setClass(a[o-2],a[o]);break;case 101:case 109:this.$=a[o-1],r.setClickEvent(a[o-1],a[o]);break;case 102:case 110:this.$=a[o-3],r.setClickEvent(a[o-3],a[o-2]),r.setTooltip(a[o-3],a[o]);break;case 103:this.$=a[o-2],r.setClickEvent(a[o-2],a[o-1],a[o]);break;case 104:this.$=a[o-4],r.setClickEvent(a[o-4],a[o-3],a[o-2]),r.setTooltip(a[o-4],a[o]);break;case 105:case 111:this.$=a[o-1],r.setLink(a[o-1],a[o]);break;case 106:case 112:this.$=a[o-3],r.setLink(a[o-3],a[o-2]),r.setTooltip(a[o-3],a[o]);break;case 107:case 113:this.$=a[o-3],r.setLink(a[o-3],a[o-2],a[o]);break;case 108:case 114:this.$=a[o-5],r.setLink(a[o-5],a[o-4],a[o]),r.setTooltip(a[o-5],a[o-2]);break;case 115:this.$=a[o-4],r.addVertex(a[o-2],void 0,void 0,a[o]);break;case 116:case 118:this.$=a[o-4],r.updateLink(a[o-2],a[o]);break;case 117:this.$=a[o-4],r.updateLink([a[o-2]],a[o]);break;case 119:this.$=a[o-8],r.updateLinkInterpolate([a[o-6]],a[o-2]),r.updateLink([a[o-6]],a[o]);break;case 120:this.$=a[o-8],r.updateLinkInterpolate(a[o-6],a[o-2]),r.updateLink(a[o-6],a[o]);break;case 121:this.$=a[o-6],r.updateLinkInterpolate([a[o-4]],a[o]);break;case 122:this.$=a[o-6],r.updateLinkInterpolate(a[o-4],a[o]);break;case 124:case 126:a[o-2].push(a[o]),this.$=a[o-2];break;case 128:this.$=a[o-1]+a[o];break;case 156:this.$="v";break;case 157:this.$="-";break;case 158:this.$={stmt:"dir",value:"TB"};break;case 159:this.$={stmt:"dir",value:"BT"};break;case 160:this.$={stmt:"dir",value:"RL"};break;case 161:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:n,16:4,21:r,22:i,24:a},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:n,16:4,21:r,22:i,24:a},e(s,o,{17:11}),{7:12,13:[1,13]},{16:14,21:r,22:i,24:a},{16:15,21:r,22:i,24:a},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:l,21:c,22:u,23:d,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,44:m,46:_,48:p,50:35,51:45,52:f,54:46,66:y,67:g,86:b,87:k,88:v,89:x,90:M,91:L,95:w,105:T,106:S,109:D,111:Y,112:E,116:47,118:C,119:A,120:O,121:N,122:B,123:F,124:I,125:P,126:j,127:R},{8:64,10:[1,65],15:H},e([10,15],[2,6]),e(s,[2,17]),e(s,[2,18]),e(s,[2,19]),{20:[1,68],21:[1,69],22:$,27:67,30:70},e(Z,[2,11]),e(Z,[2,12]),e(Z,[2,13]),e(Z,[2,14]),e(Z,[2,15]),e(Z,[2,16]),{9:72,20:W,21:z,23:U,49:73,78:77,81:[1,78],82:[1,79]},{9:80,20:W,21:z,23:U},{9:81,20:W,21:z,23:U},{9:82,20:W,21:z,23:U},{9:83,20:W,21:z,23:U},{9:84,20:W,21:z,23:U},{9:86,20:W,21:z,22:[1,85],23:U},e(Z,[2,44]),{45:[1,87]},{47:[1,88]},e(Z,[2,47]),e(q,[2,54],{30:89,22:$}),{22:[1,90]},{22:[1,91]},{22:[1,92]},{22:[1,93]},{26:V,52:G,66:J,67:X,84:[1,97],91:K,97:96,98:[1,94],100:[1,95],105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(Z,[2,158]),e(Z,[2,159]),e(Z,[2,160]),e(Z,[2,161]),e(ut,[2,55],{53:[1,116]}),e(dt,[2,74],{116:129,40:[1,117],52:f,55:[1,118],57:[1,119],59:[1,120],61:[1,121],63:[1,122],65:[1,123],66:y,67:g,69:[1,124],71:[1,125],73:[1,126],74:[1,127],76:[1,128],91:L,95:w,105:T,106:S,109:D,111:Y,112:E,122:B,123:F,124:I,125:P,126:j,127:R}),e(ht,[2,150]),e(ht,[2,175]),e(ht,[2,176]),e(ht,[2,177]),e(ht,[2,178]),e(ht,[2,179]),e(ht,[2,180]),e(ht,[2,181]),e(ht,[2,182]),e(ht,[2,183]),e(ht,[2,184]),e(ht,[2,185]),e(ht,[2,186]),e(ht,[2,187]),e(ht,[2,188]),e(ht,[2,189]),e(ht,[2,190]),{9:130,20:W,21:z,23:U},{11:131,14:[1,132]},e(mt,[2,8]),e(s,[2,20]),e(s,[2,26]),e(s,[2,27]),{21:[1,133]},e(_t,[2,34],{30:134,22:$}),e(Z,[2,35]),{50:135,51:45,52:f,54:46,66:y,67:g,91:L,95:w,105:T,106:S,109:D,111:Y,112:E,116:47,122:B,123:F,124:I,125:P,126:j,127:R},e(pt,[2,48]),e(pt,[2,49]),e(pt,[2,50]),e(ft,[2,78],{79:136,68:[1,138],80:[1,137]}),{22:yt,24:gt,26:bt,38:kt,39:139,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e([52,66,67,68,80,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,80]),e(Z,[2,36]),e(Z,[2,37]),e(Z,[2,38]),e(Z,[2,39]),e(Z,[2,40]),{22:yt,24:gt,26:bt,38:kt,39:163,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(Ft,o,{17:164}),e(Z,[2,45]),e(Z,[2,46]),e(q,[2,53],{52:It}),{26:V,52:G,66:J,67:X,91:K,97:166,102:[1,167],105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:lt,127:ct},{95:[1,168],103:169,105:[1,170]},{26:V,52:G,66:J,67:X,91:K,95:[1,171],97:172,105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:lt,127:ct},{26:V,52:G,66:J,67:X,91:K,97:173,105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(mt,[2,101],{22:[1,174],99:[1,175]}),e(mt,[2,105],{22:[1,176]}),e(mt,[2,109],{115:100,117:178,22:[1,177],26:V,52:G,66:J,67:X,91:K,105:Q,106:tt,109:et,111:nt,112:rt,122:it,123:at,124:st,125:ot,126:lt,127:ct}),e(mt,[2,111],{22:[1,179]}),e(Pt,[2,152]),e(Pt,[2,154]),e(Pt,[2,155]),e(Pt,[2,156]),e(Pt,[2,157]),e(jt,[2,162]),e(jt,[2,163]),e(jt,[2,164]),e(jt,[2,165]),e(jt,[2,166]),e(jt,[2,167]),e(jt,[2,168]),e(jt,[2,169]),e(jt,[2,170]),e(jt,[2,171]),e(jt,[2,172]),e(jt,[2,173]),e(jt,[2,174]),{52:f,54:180,66:y,67:g,91:L,95:w,105:T,106:S,109:D,111:Y,112:E,116:47,122:B,123:F,124:I,125:P,126:j,127:R},{22:yt,24:gt,26:bt,38:kt,39:181,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:182,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:184,42:vt,52:G,57:[1,183],66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:185,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:186,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:187,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{66:[1,188]},{22:yt,24:gt,26:bt,38:kt,39:189,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:190,42:vt,52:G,66:J,67:X,71:[1,191],73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:192,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:193,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:194,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(ht,[2,151]),e(Rt,[2,3]),{8:195,15:H},{15:[2,7]},e(s,[2,28]),e(_t,[2,33]),e(q,[2,51],{30:196,22:$}),e(ft,[2,75],{22:[1,197]}),{22:[1,198]},{22:yt,24:gt,26:bt,38:kt,39:199,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,66:J,67:X,73:xt,81:Mt,82:[1,200],83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(jt,[2,82]),e(jt,[2,84]),e(jt,[2,140]),e(jt,[2,141]),e(jt,[2,142]),e(jt,[2,143]),e(jt,[2,144]),e(jt,[2,145]),e(jt,[2,146]),e(jt,[2,147]),e(jt,[2,148]),e(jt,[2,149]),e(jt,[2,85]),e(jt,[2,86]),e(jt,[2,87]),e(jt,[2,88]),e(jt,[2,89]),e(jt,[2,90]),e(jt,[2,91]),e(jt,[2,92]),e(jt,[2,93]),e(jt,[2,94]),e(jt,[2,95]),{9:203,20:W,21:z,22:yt,23:U,24:gt,26:bt,38:kt,40:[1,202],42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{18:18,19:19,20:l,21:c,22:u,23:d,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,204],43:31,44:m,46:_,48:p,50:35,51:45,52:f,54:46,66:y,67:g,86:b,87:k,88:v,89:x,90:M,91:L,95:w,105:T,106:S,109:D,111:Y,112:E,116:47,118:C,119:A,120:O,121:N,122:B,123:F,124:I,125:P,126:j,127:R},{22:$,30:205},{22:[1,206],26:V,52:G,66:J,67:X,91:K,105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:178,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:[1,207]},{22:[1,208]},{22:[1,209],106:[1,210]},e(Ht,[2,123]),{22:[1,211]},{22:[1,212],26:V,52:G,66:J,67:X,91:K,105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:178,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:[1,213],26:V,52:G,66:J,67:X,91:K,105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:178,122:it,123:at,124:st,125:ot,126:lt,127:ct},{84:[1,214]},e(mt,[2,103],{22:[1,215]}),{84:[1,216],101:[1,217]},{84:[1,218]},e(Pt,[2,153]),{84:[1,219],101:[1,220]},e(ut,[2,57],{116:129,52:f,66:y,67:g,91:L,95:w,105:T,106:S,109:D,111:Y,112:E,122:B,123:F,124:I,125:P,126:j,127:R}),{22:yt,24:gt,26:bt,38:kt,41:[1,221],42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,56:[1,222],66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:223,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,58:[1,224],66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,60:[1,225],66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,62:[1,226],66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,64:[1,227],66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{67:[1,228]},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,66:J,67:X,70:[1,229],73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,66:J,67:X,72:[1,230],73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,39:231,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,41:[1,232],42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,66:J,67:X,73:xt,75:[1,233],77:[1,234],81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,66:J,67:X,73:xt,75:[1,236],77:[1,235],81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{9:237,20:W,21:z,23:U},e(q,[2,52],{52:It}),e(ft,[2,77]),e(ft,[2,76]),{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,66:J,67:X,68:[1,238],73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(ft,[2,79]),e(jt,[2,83]),{22:yt,24:gt,26:bt,38:kt,39:239,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(Ft,o,{17:240}),e(Z,[2,43]),{51:241,52:f,54:46,66:y,67:g,91:L,95:w,105:T,106:S,109:D,111:Y,112:E,116:47,122:B,123:F,124:I,125:P,126:j,127:R},{22:$t,66:Zt,67:Wt,86:zt,96:242,102:Ut,105:qt,107:243,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},{22:$t,66:Zt,67:Wt,86:zt,96:256,102:Ut,105:qt,107:243,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},{22:$t,66:Zt,67:Wt,86:zt,96:257,102:Ut,104:[1,258],105:qt,107:243,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},{22:$t,66:Zt,67:Wt,86:zt,96:259,102:Ut,104:[1,260],105:qt,107:243,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},{105:[1,261]},{22:$t,66:Zt,67:Wt,86:zt,96:262,102:Ut,105:qt,107:243,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},{22:$t,66:Zt,67:Wt,86:zt,96:263,102:Ut,105:qt,107:243,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},{26:V,52:G,66:J,67:X,91:K,97:264,105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(mt,[2,102]),{84:[1,265]},e(mt,[2,106],{22:[1,266]}),e(mt,[2,107]),e(mt,[2,110]),e(mt,[2,112],{22:[1,267]}),e(mt,[2,113]),e(dt,[2,58]),e(dt,[2,59]),{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,58:[1,268],66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(dt,[2,66]),e(dt,[2,61]),e(dt,[2,62]),e(dt,[2,63]),{66:[1,269]},e(dt,[2,65]),e(dt,[2,67]),{22:yt,24:gt,26:bt,38:kt,42:vt,52:G,66:J,67:X,72:[1,270],73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(dt,[2,69]),e(dt,[2,70]),e(dt,[2,72]),e(dt,[2,71]),e(dt,[2,73]),e(Rt,[2,4]),e([22,52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,81]),{22:yt,24:gt,26:bt,38:kt,41:[1,271],42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{18:18,19:19,20:l,21:c,22:u,23:d,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,272],43:31,44:m,46:_,48:p,50:35,51:45,52:f,54:46,66:y,67:g,86:b,87:k,88:v,89:x,90:M,91:L,95:w,105:T,106:S,109:D,111:Y,112:E,116:47,118:C,119:A,120:O,121:N,122:B,123:F,124:I,125:P,126:j,127:R},e(ut,[2,56]),e(mt,[2,115],{106:Qt}),e(te,[2,125],{108:274,22:$t,66:Zt,67:Wt,86:zt,102:Ut,105:qt,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt}),e(ee,[2,127]),e(ee,[2,129]),e(ee,[2,130]),e(ee,[2,131]),e(ee,[2,132]),e(ee,[2,133]),e(ee,[2,134]),e(ee,[2,135]),e(ee,[2,136]),e(ee,[2,137]),e(ee,[2,138]),e(ee,[2,139]),e(mt,[2,116],{106:Qt}),e(mt,[2,117],{106:Qt}),{22:[1,275]},e(mt,[2,118],{106:Qt}),{22:[1,276]},e(Ht,[2,124]),e(mt,[2,98],{106:Qt}),e(mt,[2,99],{106:Qt}),e(mt,[2,100],{115:100,117:178,26:V,52:G,66:J,67:X,91:K,105:Q,106:tt,109:et,111:nt,112:rt,122:it,123:at,124:st,125:ot,126:lt,127:ct}),e(mt,[2,104]),{101:[1,277]},{101:[1,278]},{58:[1,279]},{68:[1,280]},{72:[1,281]},{9:282,20:W,21:z,23:U},e(Z,[2,42]),{22:$t,66:Zt,67:Wt,86:zt,102:Ut,105:qt,107:283,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},e(ee,[2,128]),{26:V,52:G,66:J,67:X,91:K,97:284,105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:lt,127:ct},{26:V,52:G,66:J,67:X,91:K,97:285,105:Q,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(mt,[2,108]),e(mt,[2,114]),e(dt,[2,60]),{22:yt,24:gt,26:bt,38:kt,39:286,42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:140,84:Lt,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},e(dt,[2,68]),e(Ft,o,{17:287}),e(te,[2,126],{108:274,22:$t,66:Zt,67:Wt,86:zt,102:Ut,105:qt,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt}),e(mt,[2,121],{115:100,117:178,22:[1,288],26:V,52:G,66:J,67:X,91:K,105:Q,106:tt,109:et,111:nt,112:rt,122:it,123:at,124:st,125:ot,126:lt,127:ct}),e(mt,[2,122],{115:100,117:178,22:[1,289],26:V,52:G,66:J,67:X,91:K,105:Q,106:tt,109:et,111:nt,112:rt,122:it,123:at,124:st,125:ot,126:lt,127:ct}),{22:yt,24:gt,26:bt,38:kt,41:[1,290],42:vt,52:G,66:J,67:X,73:xt,81:Mt,83:201,85:151,86:wt,87:Tt,88:St,89:Dt,90:Yt,91:Et,92:Ct,94:142,95:At,105:Q,106:tt,109:Ot,111:nt,112:rt,113:Nt,114:Bt,115:148,122:it,123:at,124:st,125:ot,126:lt,127:ct},{18:18,19:19,20:l,21:c,22:u,23:d,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,291],43:31,44:m,46:_,48:p,50:35,51:45,52:f,54:46,66:y,67:g,86:b,87:k,88:v,89:x,90:M,91:L,95:w,105:T,106:S,109:D,111:Y,112:E,116:47,118:C,119:A,120:O,121:N,122:B,123:F,124:I,125:P,126:j,127:R},{22:$t,66:Zt,67:Wt,86:zt,96:292,102:Ut,105:qt,107:243,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},{22:$t,66:Zt,67:Wt,86:zt,96:293,102:Ut,105:qt,107:243,108:244,109:Vt,110:Gt,111:Jt,112:Xt,113:Kt},e(dt,[2,64]),e(Z,[2,41]),e(mt,[2,119],{106:Qt}),e(mt,[2,120],{106:Qt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],132:[2,7]},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],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},re=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:return this.begin("acc_title"),44;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),46;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:case 24:case 27:case 30:case 33:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"STR";case 17:return 86;case 18:return 95;case 19:return 87;case 20:return 104;case 21:return 88;case 22:return 89;case 23:this.begin("href");break;case 25:return 100;case 26:this.begin("callbackname");break;case 28:this.popState(),this.begin("callbackargs");break;case 29:return 98;case 31:return 99;case 32:this.begin("click");break;case 34:return 90;case 35:case 36:case 37:return t.lex.firstGraph()&&this.begin("dir"),24;case 38:return 38;case 39:return 42;case 40:case 41:case 42:case 43:return 101;case 44:return this.popState(),25;case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:case 54:return this.popState(),26;case 55:return 118;case 56:return 119;case 57:return 120;case 58:return 121;case 59:return 105;case 60:return 111;case 61:return 53;case 62:return 67;case 63:return 52;case 64:return 20;case 65:return 106;case 66:return 126;case 67:case 68:case 69:return 82;case 70:case 71:case 72:return 81;case 73:return 59;case 74:return 60;case 75:return 61;case 76:return 62;case 77:return 63;case 78:return 64;case 79:return 65;case 80:return 69;case 81:return 70;case 82:return 55;case 83:return 56;case 84:return 109;case 85:return 112;case 86:return 127;case 87:return 124;case 88:return 113;case 89:case 90:return 125;case 91:return 114;case 92:return 73;case 93:return 92;case 94:return"SEP";case 95:return 91;case 96:return 66;case 97:return 75;case 98:return 74;case 99:return 77;case 100:return 76;case 101:return 122;case 102:return 123;case 103:return 68;case 104:return 57;case 105:return 58;case 106:return 40;case 107:return 41;case 108:return 71;case 109:return 72;case 110:return 133;case 111:return 21;case 112:return 22;case 113:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[30,31],inclusive:!1},callbackname:{rules:[27,28,29],inclusive:!1},href:{rules:[24,25],inclusive:!1},click:{rules:[33,34],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[44,45,46,47,48,49,50,51,52,53,54],inclusive:!1},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,5,6,7,9,11,14,17,18,19,20,21,22,23,26,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113],inclusive:!0}}},t);function ie(){this.yy={}}return ne.lexer=re,ie.prototype=ne,ne.Parser=ie,new ie}();yo.parser=yo;const go=yo,bo=(t,e)=>{var n,r;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer)&&("elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&null!==t.match(/^\s*graph/))},ko=(t,e)=>{var n,r;return"dagre-d3"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer)&&("elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&(null!==t.match(/^\s*graph/)||null!==t.match(/^\s*flowchart/)))};let vo,xo,Mo=0,Lo=ar(),wo={},To=[],So={},Do=[],Yo={},Eo={},Co=0,Ao=!0,Oo=[];const No=t=>Pt.sanitizeText(t,Lo),Bo=function(t,e,n){am.parseDirective(this,t,e,n)},Fo=function(t){const e=Object.keys(wo);for(const n of e)if(wo[n].id===t)return wo[n].domId;return t},Io=function(t,e,n,r,i,a,s={}){let o,l=t;void 0!==l&&0!==l.trim().length&&(void 0===wo[l]&&(wo[l]={id:l,domId:"flowchart-"+l+"-"+Mo,styles:[],classes:[]}),Mo++,void 0!==e?(Lo=ar(),o=No(e.trim()),'"'===o[0]&&'"'===o[o.length-1]&&(o=o.substring(1,o.length-1)),wo[l].text=o):void 0===wo[l].text&&(wo[l].text=t),void 0!==n&&(wo[l].type=n),null!=r&&r.forEach((function(t){wo[l].styles.push(t)})),null!=i&&i.forEach((function(t){wo[l].classes.push(t)})),void 0!==a&&(wo[l].dir=a),void 0===wo[l].props?wo[l].props=s:void 0!==s&&Object.assign(wo[l].props,s))},Po=function(t,e,n,r){const i={start:t,end:e,type:void 0,text:""};void 0!==(r=n.text)&&(i.text=No(r.trim()),'"'===i.text[0]&&'"'===i.text[i.text.length-1]&&(i.text=i.text.substring(1,i.text.length-1))),void 0!==n&&(i.type=n.type,i.stroke=n.stroke,i.length=n.length),To.push(i)},jo=function(t,e,n,r){let i,a;for(i=0;i<t.length;i++)for(a=0;a<e.length;a++)Po(t[i],e[a],n,r)},Ro=function(t,e){t.forEach((function(t){"default"===t?To.defaultInterpolate=e:To[t].interpolate=e}))},Ho=function(t,e){t.forEach((function(t){"default"===t?To.defaultStyle=e:(-1===Gn.isSubstringInArray("fill",e)&&e.push("fill:none"),To[t].style=e)}))},$o=function(t,e){void 0===So[t]&&(So[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const n=e.replace("fill","bgFill").replace("color","fill");So[t].textStyles.push(n)}So[t].styles.push(e)}))},Zo=function(t){vo=t,vo.match(/.*</)&&(vo="RL"),vo.match(/.*\^/)&&(vo="BT"),vo.match(/.*>/)&&(vo="LR"),vo.match(/.*v/)&&(vo="TB"),"TD"===vo&&(vo="TB")},Wo=function(t,e){t.split(",").forEach((function(t){let n=t;void 0!==wo[n]&&wo[n].classes.push(e),void 0!==Yo[n]&&Yo[n].classes.push(e)}))},zo=function(t,e,n){t.split(",").forEach((function(t){void 0!==wo[t]&&(wo[t].link=Gn.formatUrl(e,Lo),wo[t].linkTarget=n)})),Wo(t,"clickable")},Uo=function(t){return Eo[t]},qo=function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){let r=Fo(t);if("loose"!==ar().securityLevel)return;if(void 0===e)return;let i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<i.length;t++){let e=i[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),i[t]=e}}0===i.length&&i.push(t),void 0!==wo[t]&&(wo[t].haveCallback=!0,Oo.push((function(){const t=document.querySelector(`[id="${r}"]`);null!==t&&t.addEventListener("click",(function(){Gn.runFunc(e,...i)}),!1)})))}(t,e,n)})),Wo(t,"clickable")},Vo=function(t){Oo.forEach((function(e){e(t)}))},Go=function(){return vo.trim()},Jo=function(){return wo},Xo=function(){return To},Ko=function(){return So},Qo=function(t){let e=(0,o.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,o.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,o.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,o.Ys)(this);if(null===t.attr("title"))return;const n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,o.Ys)(this).classed("hover",!1)}))};Oo.push(Qo);const tl=function(t="gen-1"){wo={},So={},To=[],Oo=[Qo],Do=[],Yo={},Co=0,Eo=[],Ao=!0,xo=t,Ar()},el=t=>{xo=t||"gen-2"},nl=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},rl=function(t,e,n){let r=t.trim(),i=n;t===n&&n.match(/\s/)&&(r=void 0);let a=[];const{nodeList:s,dir:o}=function(t){const e={boolean:{},number:{},string:{}},n=[];let r;return{nodeList:t.filter((function(t){const i=typeof t;return t.stmt&&"dir"===t.stmt?(r=t.value,!1):""!==t.trim()&&(i in e?!e[i].hasOwnProperty(t)&&(e[i][t]=!0):!n.includes(t)&&n.push(t))})),dir:r}}(a.concat.apply(a,e));if(a=s,"gen-1"===xo)for(let c=0;c<a.length;c++)a[c]=Fo(a[c]);r=r||"subGraph"+Co,i=i||"",i=No(i),Co+=1;const l={id:r,nodes:a,title:i.trim(),classes:[],dir:o};return St.info("Adding",l.id,l.nodes,l.dir),l.nodes=_l(l,Do).nodes,Do.push(l),Yo[r]=l,r},il=function(t){for(const[e,n]of Do.entries())if(n.id===t)return e;return-1};let al=-1;const sl=[],ol=function(t,e){const n=Do[e].nodes;if(al+=1,al>2e3)return;if(sl[al]=e,Do[e].id===t)return{result:!0,count:0};let r=0,i=1;for(;r<n.length;){const e=il(n[r]);if(e>=0){const n=ol(t,e);if(n.result)return{result:!0,count:i+n.count};i+=n.count}r+=1}return{result:!1,count:i}},ll=function(t){return sl[t]},cl=function(){al=-1,Do.length>0&&ol("none",Do.length-1)},ul=function(){return Do},dl=()=>!!Ao&&(Ao=!1,!0),hl=(t,e)=>{const n=(t=>{const e=t.trim();let n=e.slice(0,-1),r="arrow_open";switch(e.slice(-1)){case"x":r="arrow_cross","x"===e[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===e[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===e[0]&&(r="double_"+r,n=n.slice(1))}let i="normal",a=n.length-1;"="===n[0]&&(i="thick");let s=((t,e)=>{const n=e.length;let r=0;for(let i=0;i<n;++i)e[i]===t&&++r;return r})(".",n);return s&&(i="dotted",a=s),{type:r,stroke:i,length:a}})(t);let r;if(e){if(r=(t=>{let e=t.trim(),n="arrow_open";switch(e[0]){case"<":n="arrow_point",e=e.slice(1);break;case"x":n="arrow_cross",e=e.slice(1);break;case"o":n="arrow_circle",e=e.slice(1)}let r="normal";return e.includes("=")&&(r="thick"),e.includes(".")&&(r="dotted"),{type:n,stroke:r}})(e),r.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===r.type)r.type=n.type;else{if(r.type!==n.type)return{type:"INVALID",stroke:"INVALID"};r.type="double_"+r.type}return"double_arrow"===r.type&&(r.type="double_arrow_point"),r.length=n.length,r}return n},ml=(t,e)=>{let n=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(n=!0)})),n},_l=(t,e)=>{const n=[];return t.nodes.forEach(((r,i)=>{ml(e,r)||n.push(t.nodes[i])})),{nodes:n}},pl={firstGraph:dl},fl={parseDirective:Bo,defaultConfig:()=>Xn.flowchart,setAccTitle:Or,getAccTitle:Nr,getAccDescription:Fr,setAccDescription:Br,addVertex:Io,lookUpDomId:Fo,addLink:jo,updateLinkInterpolate:Ro,updateLink:Ho,addClass:$o,setDirection:Zo,setClass:Wo,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(Eo["gen-1"===xo?Fo(t):t]=No(e))}))},getTooltip:Uo,setClickEvent:qo,setLink:zo,bindFunctions:Vo,getDirection:Go,getVertices:Jo,getEdges:Xo,getClasses:Ko,clear:tl,setGen:el,defaultStyle:nl,addSubGraph:rl,getDepthFirstPos:ll,indexNodes:cl,getSubGraphs:ul,destructLink:hl,lex:pl,exists:ml,makeUniq:_l,setDiagramTitle:Ir,getDiagramTitle:Pr},yl=Object.freeze(Object.defineProperty({__proto__:null,parseDirective:Bo,lookUpDomId:Fo,addVertex:Io,addSingleLink:Po,addLink:jo,updateLinkInterpolate:Ro,updateLink:Ho,addClass:$o,setDirection:Zo,setClass:Wo,setLink:zo,getTooltip:Uo,setClickEvent:qo,bindFunctions:Vo,getDirection:Go,getVertices:Jo,getEdges:Xo,getClasses:Ko,clear:tl,setGen:el,defaultStyle:nl,addSubGraph:rl,getDepthFirstPos:ll,indexNodes:cl,getSubGraphs:ul,firstGraph:dl,destructLink:hl,lex:pl,default:fl},Symbol.toStringTag,{value:"Module"}));const gl={},bl=function(t){const e=Object.keys(t);for(const n of e)gl[n]=t[n]},kl={},vl=function(t,e,n,r,i,a){const s=r.select(`[id="${n}"]`);Object.keys(t).forEach((function(n){const r=t[n];let o="default";r.classes.length>0&&(o=r.classes.join(" "));const l=Nn(r.styles);let c,u=void 0!==r.text?r.text:r.id;if(Ft(ar().flowchart.htmlLabels)){const t={label:u.replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`))};c=(0,xt.a)(s,t).node(),c.parentNode.removeChild(c)}else{const t=i.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",l.labelStyle.replace("color:","fill:"));const e=u.split(Pt.lineBreakRegex);for(const n of e){const e=i.createElementNS("http://www.w3.org/2000/svg","tspan");e.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),e.setAttribute("dy","1em"),e.setAttribute("x","1"),e.textContent=n,t.appendChild(e)}c=t}let d=0,h="";switch(r.type){case"round":d=5,h="rect";break;case"square":case"group":default:h="rect";break;case"diamond":h="question";break;case"hexagon":h="hexagon";break;case"odd":case"odd_right":h="rect_left_inv_arrow";break;case"lean_right":h="lean_right";break;case"lean_left":h="lean_left";break;case"trapezoid":h="trapezoid";break;case"inv_trapezoid":h="inv_trapezoid";break;case"circle":h="circle";break;case"ellipse":h="ellipse";break;case"stadium":h="stadium";break;case"subroutine":h="subroutine";break;case"cylinder":h="cylinder";break;case"doublecircle":h="doublecircle"}e.setNode(r.id,{labelStyle:l.labelStyle,shape:h,labelText:u,rx:d,ry:d,class:o,style:l.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:a.db.getTooltip(r.id)||"",domId:a.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:ar().flowchart.padding}),St.info("setNode",{labelStyle:l.labelStyle,shape:h,labelText:u,rx:d,ry:d,class:o,style:l.style,id:r.id,domId:a.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:ar().flowchart.padding})}))},xl=function(t,e,n){St.info("abc78 edges = ",t);let r,i,a=0,s={};if(void 0!==t.defaultStyle){const e=Nn(t.defaultStyle);r=e.style,i=e.labelStyle}t.forEach((function(n){a++;var l="L-"+n.start+"-"+n.end;void 0===s[l]?(s[l]=0,St.info("abc78 new entry",l,s[l])):(s[l]++,St.info("abc78 new entry",l,s[l]));let c=l+"-"+s[l];St.info("abc78 new link id to be used is",l,c,s[l]);var u="LS-"+n.start,d="LE-"+n.end;const h={style:"",labelStyle:""};switch(h.minlen=n.length||1,"arrow_open"===n.type?h.arrowhead="none":h.arrowhead="normal",h.arrowTypeStart="arrow_open",h.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":h.arrowTypeStart="arrow_cross";case"arrow_cross":h.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":h.arrowTypeStart="arrow_point";case"arrow_point":h.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":h.arrowTypeStart="arrow_circle";case"arrow_circle":h.arrowTypeEnd="arrow_circle"}let m="",_="";switch(n.stroke){case"normal":m="fill:none;",void 0!==r&&(m=r),void 0!==i&&(_=i),h.thickness="normal",h.pattern="solid";break;case"dotted":h.thickness="normal",h.pattern="dotted",h.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":h.thickness="thick",h.pattern="solid",h.style="stroke-width: 3.5px;fill:none;"}if(void 0!==n.style){const t=Nn(n.style);m=t.style,_=t.labelStyle}h.style=h.style+=m,h.labelStyle=h.labelStyle+=_,void 0!==n.interpolate?h.curve=An(n.interpolate,o.c_6):void 0!==t.defaultInterpolate?h.curve=An(t.defaultInterpolate,o.c_6):h.curve=An(kl.curve,o.c_6),void 0===n.text?void 0!==n.style&&(h.arrowheadStyle="fill: #333"):(h.arrowheadStyle="fill: #333",h.labelpos="c"),h.labelType="text",h.label=n.text.replace(Pt.lineBreakRegex,"\n"),void 0===n.style&&(h.style=h.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),h.labelStyle=h.labelStyle.replace("color:","fill:"),h.id=c,h.classes="flowchart-link "+u+" "+d,e.setEdge(n.start,n.end,h,a)}))},Ml={setConf:function(t){const e=Object.keys(t);for(const n of e)kl[n]=t[n]},addVertices:vl,addEdges:xl,getClasses:function(t,e){St.info("Extracting classes"),e.db.clear();try{return e.parse(t),e.db.getClasses()}catch(n){return}},draw:function(t,e,n,r){St.info("Drawing flowchart"),r.db.clear(),fl.setGen("gen-2"),r.parser.parse(t);let i=r.db.getDirection();void 0===i&&(i="TD");const{securityLevel:a,flowchart:s}=ar(),l=s.nodeSpacing||50,c=s.rankSpacing||50;let u;"sandbox"===a&&(u=(0,o.Ys)("#i"+e));const d="sandbox"===a?(0,o.Ys)(u.nodes()[0].contentDocument.body):(0,o.Ys)("body"),h="sandbox"===a?u.nodes()[0].contentDocument:document,m=new ut.k({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:l,ranksep:c,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let _;const p=r.db.getSubGraphs();St.info("Subgraphs - ",p);for(let o=p.length-1;o>=0;o--)_=p[o],St.info("Subgraph - ",_),r.db.addVertex(_.id,_.title,"group",void 0,_.classes,_.dir);const f=r.db.getVertices(),y=r.db.getEdges();St.info("Edges",y);let g=0;for(g=p.length-1;g>=0;g--){_=p[g],(0,o.td_)("cluster").append("text");for(let t=0;t<_.nodes.length;t++)St.info("Setting up subgraphs",_.nodes[t],_.id),m.setParent(_.nodes[t],_.id)}vl(f,m,e,d,h,r),xl(y,m);const b=d.select(`[id="${e}"]`),k=d.select("#"+e+" g");if(Us(k,m,["point","circle","cross"],"flowchart",e),Gn.insertTitle(b,"flowchartTitleText",s.titleTopMargin,r.db.getDiagramTitle()),mr(m,b,s.diagramPadding,s.useMaxWidth),r.db.indexNodes("subGraph"+g),!s.htmlLabels){const t=h.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const e of t){const t=e.getBBox(),n=h.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",t.width),n.setAttribute("height",t.height),e.insertBefore(n,e.firstChild)}}Object.keys(f).forEach((function(t){const n=f[t];if(n.link){const r=(0,o.Ys)("#"+e+' [id="'+t+'"]');if(r){const t=h.createElementNS("http://www.w3.org/2000/svg","a");t.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),t.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),t.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===a?t.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&t.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const e=r.insert((function(){return t}),":first-child"),i=r.select(".label-container");i&&e.append((function(){return i.node()}));const s=r.select(".label");s&&e.append((function(){return s.node()}))}}}))}};var Ll=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,3],r=[1,5],i=[7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],a=[1,15],s=[1,16],o=[1,17],l=[1,18],c=[1,19],u=[1,20],d=[1,21],h=[1,22],m=[1,23],_=[1,24],p=[1,25],f=[1,26],y=[1,27],g=[1,29],b=[1,31],k=[1,34],v=[5,7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],x={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,tickInterval:16,excludes:17,includes:18,todayMarker:19,title:20,acc_title:21,acc_title_value:22,acc_descr:23,acc_descr_value:24,acc_descr_multiline_value:25,section:26,clickStatement:27,taskTxt:28,taskData:29,openDirective:30,typeDirective:31,closeDirective:32,":":33,argDirective:34,click:35,callbackname:36,callbackargs:37,href:38,clickStatementDebug:39,open_directive:40,type_directive:41,arg_directive:42,close_directive:43,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"tickInterval",17:"excludes",18:"includes",19:"todayMarker",20:"title",21:"acc_title",22:"acc_title_value",23:"acc_descr",24:"acc_descr_value",25:"acc_descr_multiline_value",26:"section",28:"taskTxt",29:"taskData",33:":",35:"click",36:"callbackname",37:"callbackargs",38:"href",40:"open_directive",41:"type_directive",42:"arg_directive",43:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[27,2],[27,3],[27,3],[27,4],[27,3],[27,4],[27,2],[39,2],[39,3],[39,3],[39,4],[39,3],[39,4],[39,2],[30,1],[31,1],[34,1],[32,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 2:return a[o-1];case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:this.$=a[o];break;case 9:r.setDateFormat(a[o].substr(11)),this.$=a[o].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[o].substr(18);break;case 11:r.TopAxis(),this.$=a[o].substr(8);break;case 12:r.setAxisFormat(a[o].substr(11)),this.$=a[o].substr(11);break;case 13:r.setTickInterval(a[o].substr(13)),this.$=a[o].substr(13);break;case 14:r.setExcludes(a[o].substr(9)),this.$=a[o].substr(9);break;case 15:r.setIncludes(a[o].substr(9)),this.$=a[o].substr(9);break;case 16:r.setTodayMarker(a[o].substr(12)),this.$=a[o].substr(12);break;case 17:r.setDiagramTitle(a[o].substr(6)),this.$=a[o].substr(6);break;case 18:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 19:case 20:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 21:r.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 23:r.addTask(a[o-1],a[o]),this.$="task";break;case 27:this.$=a[o-1],r.setClickEvent(a[o-1],a[o],null);break;case 28:this.$=a[o-2],r.setClickEvent(a[o-2],a[o-1],a[o]);break;case 29:this.$=a[o-2],r.setClickEvent(a[o-2],a[o-1],null),r.setLink(a[o-2],a[o]);break;case 30:this.$=a[o-3],r.setClickEvent(a[o-3],a[o-2],a[o-1]),r.setLink(a[o-3],a[o]);break;case 31:this.$=a[o-2],r.setClickEvent(a[o-2],a[o],null),r.setLink(a[o-2],a[o-1]);break;case 32:this.$=a[o-3],r.setClickEvent(a[o-3],a[o-1],a[o]),r.setLink(a[o-3],a[o-2]);break;case 33:this.$=a[o-1],r.setLink(a[o-1],a[o]);break;case 34:case 40:this.$=a[o-1]+" "+a[o];break;case 35:case 36:case 38:this.$=a[o-2]+" "+a[o-1]+" "+a[o];break;case 37:case 39:this.$=a[o-3]+" "+a[o-2]+" "+a[o-1]+" "+a[o];break;case 41:r.parseDirective("%%{","open_directive");break;case 42:r.parseDirective(a[o],"type_directive");break;case 43:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 44:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:n,30:4,40:r},{1:[3]},{3:6,4:2,5:n,30:4,40:r},e(i,[2,3],{6:7}),{31:8,41:[1,9]},{41:[2,41]},{1:[2,1]},{4:30,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:a,13:s,14:o,15:l,16:c,17:u,18:d,19:h,20:m,21:_,23:p,25:f,26:y,27:28,28:g,30:4,35:b,40:r},{32:32,33:[1,33],43:k},e([33,43],[2,42]),e(i,[2,8],{1:[2,2]}),e(i,[2,4]),{4:30,10:35,12:a,13:s,14:o,15:l,16:c,17:u,18:d,19:h,20:m,21:_,23:p,25:f,26:y,27:28,28:g,30:4,35:b,40:r},e(i,[2,6]),e(i,[2,7]),e(i,[2,9]),e(i,[2,10]),e(i,[2,11]),e(i,[2,12]),e(i,[2,13]),e(i,[2,14]),e(i,[2,15]),e(i,[2,16]),e(i,[2,17]),{22:[1,36]},{24:[1,37]},e(i,[2,20]),e(i,[2,21]),e(i,[2,22]),{29:[1,38]},e(i,[2,24]),{36:[1,39],38:[1,40]},{11:[1,41]},{34:42,42:[1,43]},{11:[2,44]},e(i,[2,5]),e(i,[2,18]),e(i,[2,19]),e(i,[2,23]),e(i,[2,27],{37:[1,44],38:[1,45]}),e(i,[2,33],{36:[1,46]}),e(v,[2,25]),{32:47,43:k},{43:[2,43]},e(i,[2,28],{38:[1,48]}),e(i,[2,29]),e(i,[2,31],{37:[1,49]}),{11:[1,50]},e(i,[2,30]),e(i,[2,32]),e(v,[2,26])],defaultActions:{5:[2,41],6:[2,1],34:[2,44],43:[2,43]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},M=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){switch(n){case 0:return this.begin("open_directive"),40;case 1:return this.begin("type_directive"),41;case 2:return this.popState(),this.begin("arg_directive"),33;case 3:return this.popState(),this.popState(),43;case 4:return 42;case 5:return this.begin("acc_title"),21;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),23;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 20:case 23:case 26:case 29:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:case 13:case 14:case 16:case 17:case 18:break;case 15:return 11;case 19:this.begin("href");break;case 21:return 38;case 22:this.begin("callbackname");break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 36;case 27:return 37;case 28:this.begin("click");break;case 30:return 35;case 31:return 5;case 32:return 12;case 33:return 13;case 34:return 14;case 35:return 15;case 36:return 16;case 37:return 18;case 38:return 17;case 39:return 19;case 40:return"date";case 41:return 20;case 42:return"accDescription";case 43:return 26;case 44:return 28;case 45:return 29;case 46:return 33;case 47:return 7;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}},t);function L(){this.yy={}}return x.lexer=M,L.prototype=x,x.Parser=L,new L}();Ll.parser=Ll;const wl=Ll,Tl=t=>null!==t.match(/^\s*gantt/);let Sl,Dl="",Yl="",El="",Cl=[],Al=[],Ol={},Nl=[],Bl=[],Fl="";const Il=["active","done","crit","milestone"];let Pl=[],jl=!1,Rl=!1,Hl=0;const $l=function(t,e,n,r){return!r.includes(t.format(e.trim()))&&(!!(t.isoWeekday()>=6&&n.includes("weekends"))||(!!n.includes(t.format("dddd").toLowerCase())||n.includes(t.format(e.trim()))))},Zl=function(t,e,n,r){if(!n.length||t.manualEndTime)return;let i=a()(t.startTime,e,!0);i.add(1,"d");let s=a()(t.endTime,e,!0),o=Wl(i,s,e,n,r);t.endTime=s.toDate(),t.renderEndTime=o},Wl=function(t,e,n,r,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=$l(t,n,r,i),a&&e.add(1,"d"),t.add(1,"d");return s},zl=function(t,e,n){n=n.trim();const r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){let t=null;if(r[1].split(" ").forEach((function(e){let n=tc(e);void 0!==n&&(t?n.endTime>t.endTime&&(t=n):t=n)})),t)return t.endTime;{const t=new Date;return t.setHours(0,0,0,0),t}}let i=a()(n,e.trim(),!0);if(i.isValid())return i.toDate();{St.debug("Invalid date:"+n),St.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime()))throw new Error("Invalid date:"+n);return t}},Ul=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?a().duration(Number.parseFloat(e[1]),e[2]):a().duration.invalid()},ql=function(t,e,n,r=!1){n=n.trim();let i=a()(n,e.trim(),!0);if(i.isValid())return r&&i.add(1,"d"),i.toDate();const s=a()(t),o=Ul(n);return o.isValid()&&s.add(o),s.toDate()};let Vl=0;const Gl=function(t){return void 0===t?(Vl+=1,"task"+Vl):t};let Jl,Xl,Kl=[];const Ql={},tc=function(t){const e=Ql[t];return Kl[e]},ec=function(){const t=function(t){const e=Kl[t];let n="";switch(Kl[t].raw.startTime.type){case"prevTaskEnd":{const t=tc(e.prevTaskId);e.startTime=t.endTime;break}case"getStartDate":n=zl(0,Dl,Kl[t].raw.startTime.startData),n&&(Kl[t].startTime=n)}return Kl[t].startTime&&(Kl[t].endTime=ql(Kl[t].startTime,Dl,Kl[t].raw.endTime.data,jl),Kl[t].endTime&&(Kl[t].processed=!0,Kl[t].manualEndTime=a()(Kl[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Zl(Kl[t],Dl,Al,Cl))),Kl[t].processed};let e=!0;for(const[n,r]of Kl.entries())t(n),e=e&&r.processed;return e},nc=function(t,e){t.split(",").forEach((function(t){let n=tc(t);void 0!==n&&n.classes.push(e)}))},rc=function(t,e){Pl.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){e()}))}),(function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",(function(){e()}))}))},ic={parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().gantt,clear:function(){Nl=[],Bl=[],Fl="",Pl=[],Vl=0,Jl=void 0,Xl=void 0,Kl=[],Dl="",Yl="",Sl=void 0,El="",Cl=[],Al=[],jl=!1,Rl=!1,Hl=0,Ol={},Ar()},setDateFormat:function(t){Dl=t},getDateFormat:function(){return Dl},enableInclusiveEndDates:function(){jl=!0},endDatesAreInclusive:function(){return jl},enableTopAxis:function(){Rl=!0},topAxisEnabled:function(){return Rl},setAxisFormat:function(t){Yl=t},getAxisFormat:function(){return Yl},setTickInterval:function(t){Sl=t},getTickInterval:function(){return Sl},setTodayMarker:function(t){El=t},getTodayMarker:function(){return El},setAccTitle:Or,getAccTitle:Nr,setDiagramTitle:Ir,getDiagramTitle:Pr,setAccDescription:Br,getAccDescription:Fr,addSection:function(t){Fl=t,Nl.push(t)},getSections:function(){return Nl},getTasks:function(){let t=ec();let e=0;for(;!t&&e<10;)t=ec(),e++;return Bl=Kl,Bl},addTask:function(t,e){const n={section:Fl,type:Fl,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},r=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const r=n.split(","),i={};ac(r,i,Il);for(let a=0;a<r.length;a++)r[a]=r[a].trim();switch(r.length){case 1:i.id=Gl(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:r[0]};break;case 2:i.id=Gl(),i.startTime={type:"getStartDate",startData:r[0]},i.endTime={data:r[1]};break;case 3:i.id=Gl(r[0]),i.startTime={type:"getStartDate",startData:r[1]},i.endTime={data:r[2]}}return i}(Xl,e);n.raw.startTime=r.startTime,n.raw.endTime=r.endTime,n.id=r.id,n.prevTaskId=Xl,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,n.order=Hl,Hl++;const i=Kl.push(n);Xl=n.id,Ql[n.id]=i-1},findTaskById:tc,addTaskOrg:function(t,e){const n={section:Fl,type:Fl,description:t,task:t,classes:[]},r=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const r=n.split(","),i={};ac(r,i,Il);for(let a=0;a<r.length;a++)r[a]=r[a].trim();let s="";switch(r.length){case 1:i.id=Gl(),i.startTime=t.endTime,s=r[0];break;case 2:i.id=Gl(),i.startTime=zl(0,Dl,r[0]),s=r[1];break;case 3:i.id=Gl(r[0]),i.startTime=zl(0,Dl,r[1]),s=r[2]}return s&&(i.endTime=ql(i.startTime,Dl,s,jl),i.manualEndTime=a()(s,"YYYY-MM-DD",!0).isValid(),Zl(i,Dl,Al,Cl)),i}(Jl,e);n.startTime=r.startTime,n.endTime=r.endTime,n.id=r.id,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,Jl=n,Bl.push(n)},setIncludes:function(t){Cl=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return Cl},setExcludes:function(t){Al=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return Al},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"!==ar().securityLevel)return;if(void 0===e)return;let r=[];if("string"==typeof n){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<r.length;t++){let e=r[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),r[t]=e}}0===r.length&&r.push(t),void 0!==tc(t)&&rc(t,(()=>{Gn.runFunc(e,...r)}))}(t,e,n)})),nc(t,"clickable")},setLink:function(t,e){let n=e;"loose"!==ar().securityLevel&&(n=(0,s.N)(e)),t.split(",").forEach((function(t){void 0!==tc(t)&&(rc(t,(()=>{window.open(n,"_self")})),Ol[t]=n)})),nc(t,"clickable")},getLinks:function(){return Ol},bindFunctions:function(t){Pl.forEach((function(e){e(t)}))},parseDuration:Ul,isInvalidDate:$l};function ac(t,e,n){let r=!0;for(;r;)r=!1,n.forEach((function(n){const i=new RegExp("^\\s*"+n+"\\s*$");t[0].match(i)&&(e[n]=!0,t.shift(1),r=!0)}))}let sc;const oc={setConf:function(){St.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,r){const i=ar().gantt,s=ar().securityLevel;let l;"sandbox"===s&&(l=(0,o.Ys)("#i"+e));const c="sandbox"===s?(0,o.Ys)(l.nodes()[0].contentDocument.body):(0,o.Ys)("body"),u="sandbox"===s?l.nodes()[0].contentDocument:document,d=u.getElementById(e);sc=d.parentElement.offsetWidth,void 0===sc&&(sc=1200),void 0!==i.useWidth&&(sc=i.useWidth);const h=r.db.getTasks(),m=h.length*(i.barHeight+i.barGap)+2*i.topPadding;d.setAttribute("viewBox","0 0 "+sc+" "+m);const _=c.select(`[id="${e}"]`),p=(0,o.Xf)().domain([(0,o.VV$)(h,(function(t){return t.startTime})),(0,o.Fp7)(h,(function(t){return t.endTime}))]).rangeRound([0,sc-i.leftPadding-i.rightPadding]);let f=[];for(const a of h)f.push(a.type);const y=f;function g(t,e){return function(t){let e=t.length;const n={};for(;e;)n[t[--e]]=(n[t[e]]||0)+1;return n}(e)[t]||0}f=function(t){const e={},n=[];for(let r=0,i=t.length;r<i;++r)Object.prototype.hasOwnProperty.call(e,t[r])||(e[t[r]]=!0,n.push(t[r]));return n}(f),h.sort((function(t,e){const n=t.startTime,r=e.startTime;let i=0;return n>r?i=1:n<r&&(i=-1),i})),function(t,n,s){const l=i.barHeight,c=l+i.barGap,d=i.topPadding,h=i.leftPadding;(0,o.BYU)().domain([0,f.length]).range(["#00B9FA","#F95002"]).interpolate(o.JHv);(function(t,e,n,s,o,l,c,u){const d=l.reduce(((t,{startTime:e})=>t?Math.min(t,e):e),0),h=l.reduce(((t,{endTime:e})=>t?Math.max(t,e):e),0),m=r.db.getDateFormat();if(!d||!h)return;const f=[];let y=null,g=a()(d);for(;g.valueOf()<=h;)r.db.isInvalidDate(g,m,c,u)?y?y.end=g.clone():y={start:g.clone(),end:g.clone()}:y&&(f.push(y),y=null),g.add(1,"d");_.append("g").selectAll("rect").data(f).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return p(t.start)+n})).attr("y",i.gridLineStartPadding).attr("width",(function(t){const e=t.end.clone().add(1,"day");return p(e)-p(t.start)})).attr("height",o-e-i.gridLineStartPadding).attr("transform-origin",(function(e,r){return(p(e.start)+n+.5*(p(e.end)-p(e.start))).toString()+"px "+(r*t+.5*o).toString()+"px"})).attr("class","exclude-range")})(c,d,h,0,s,t,r.db.getExcludes(),r.db.getIncludes()),function(t,e,n,a){let s=(0,o.LLu)(p).tickSize(-a+e+i.gridLineStartPadding).tickFormat((0,o.i$Z)(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));const l=/^([1-9]\d*)(minute|hour|day|week|month)$/.exec(r.db.getTickInterval()||i.tickInterval);if(null!==l){const t=l[1];switch(l[2]){case"minute":s.ticks(o.Z_i.every(t));break;case"hour":s.ticks(o.WQD.every(t));break;case"day":s.ticks(o.rr1.every(t));break;case"week":s.ticks(o.NGh.every(t));break;case"month":s.ticks(o.F0B.every(t))}}if(_.append("g").attr("class","grid").attr("transform","translate("+t+", "+(a-50)+")").call(s).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),r.db.topAxisEnabled()||i.topAxis){let n=(0,o.F5q)(p).tickSize(-a+e+i.gridLineStartPadding).tickFormat((0,o.i$Z)(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(null!==l){const t=l[1];switch(l[2]){case"minute":n.ticks(o.Z_i.every(t));break;case"hour":n.ticks(o.WQD.every(t));break;case"day":n.ticks(o.rr1.every(t));break;case"week":n.ticks(o.NGh.every(t));break;case"month":n.ticks(o.F0B.every(t))}}_.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(h,d,0,s),function(t,n,a,s,l,c,u){_.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+a-2})).attr("width",(function(){return u-i.rightPadding/2})).attr("height",n).attr("class",(function(t){for(const[e,n]of f.entries())if(t.type===n)return"section section"+e%i.numberSectionStyles;return"section section0"}));const d=_.append("g").selectAll("rect").data(t).enter(),h=r.db.getLinks();d.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?p(t.startTime)+s+.5*(p(t.endTime)-p(t.startTime))-.5*l:p(t.startTime)+s})).attr("y",(function(t,e){return t.order*n+a})).attr("width",(function(t){return t.milestone?l:p(t.renderEndTime||t.endTime)-p(t.startTime)})).attr("height",l).attr("transform-origin",(function(t,e){return e=t.order,(p(t.startTime)+s+.5*(p(t.endTime)-p(t.startTime))).toString()+"px "+(e*n+a+.5*l).toString()+"px"})).attr("class",(function(t){const e="task";let n="";t.classes.length>0&&(n=t.classes.join(" "));let r=0;for(const[s,o]of f.entries())t.type===o&&(r=s%i.numberSectionStyles);let a="";return t.active?t.crit?a+=" activeCrit":a=" active":t.done?a=t.crit?" doneCrit":" done":t.crit&&(a+=" crit"),0===a.length&&(a=" task"),t.milestone&&(a=" milestone "+a),a+=r,a+=" "+n,e+a})),d.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",i.fontSize).attr("x",(function(t){let e=p(t.startTime),n=p(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(p(t.endTime)-p(t.startTime))-.5*l),t.milestone&&(n=e+l);const r=this.getBBox().width;return r>n-e?n+r+1.5*i.leftPadding>u?e+s-5:n+s+5:(n-e)/2+e+s})).attr("y",(function(t,e){return t.order*n+i.barHeight/2+(i.fontSize/2-2)+a})).attr("text-height",l).attr("class",(function(t){const e=p(t.startTime);let n=p(t.endTime);t.milestone&&(n=e+l);const r=this.getBBox().width;let a="";t.classes.length>0&&(a=t.classes.join(" "));let s=0;for(const[l,c]of f.entries())t.type===c&&(s=l%i.numberSectionStyles);let o="";return t.active&&(o=t.crit?"activeCritText"+s:"activeText"+s),t.done?o=t.crit?o+" doneCritText"+s:o+" doneText"+s:t.crit&&(o=o+" critText"+s),t.milestone&&(o+=" milestoneText"),r>n-e?n+r+1.5*i.leftPadding>u?a+" taskTextOutsideLeft taskTextOutside"+s+" "+o:a+" taskTextOutsideRight taskTextOutside"+s+" "+o+" width-"+r:a+" taskText taskText"+s+" "+o+" width-"+r}));if("sandbox"===ar().securityLevel){let t;t=(0,o.Ys)("#i"+e);const n=t.nodes()[0].contentDocument;d.filter((function(t){return void 0!==h[t.id]})).each((function(t){var e=n.querySelector("#"+t.id),r=n.querySelector("#"+t.id+"-text");const i=e.parentNode;var a=n.createElement("a");a.setAttribute("xlink:href",h[t.id]),a.setAttribute("target","_top"),i.appendChild(a),a.appendChild(e),a.appendChild(r)}))}}(t,c,d,h,l,0,n),function(t,e){const n=[];let r=0;for(const[i,a]of f.entries())n[i]=[a,g(a,y)];_.append("g").selectAll("text").data(n).enter().append((function(t){const e=t[0].split(Pt.lineBreakRegex),n=-(e.length-1)/2,r=u.createElementNS("http://www.w3.org/2000/svg","text");r.setAttribute("dy",n+"em");for(const[i,a]of e.entries()){const t=u.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),i>0&&t.setAttribute("dy","1em"),t.textContent=a,r.appendChild(t)}return r})).attr("x",10).attr("y",(function(i,a){if(!(a>0))return i[1]*t/2+e;for(let s=0;s<a;s++)return r+=n[a-1][1],i[1]*t/2+r*t+e})).attr("font-size",i.sectionFontSize).attr("font-size",i.sectionFontSize).attr("class",(function(t){for(const[e,n]of f.entries())if(t[0]===n)return"sectionTitle sectionTitle"+e%i.numberSectionStyles;return"sectionTitle"}))}(c,d),function(t,e,n,a){const s=r.db.getTodayMarker();if("off"===s)return;const o=_.append("g").attr("class","today"),l=new Date,c=o.append("line");c.attr("x1",p(l)+t).attr("x2",p(l)+t).attr("y1",i.titleTopMargin).attr("y2",a-i.titleTopMargin).attr("class","today"),""!==s&&c.attr("style",s.replace(/,/g,";"))}(h,0,0,s)}(h,sc,m),hr(_,m,sc,i.useMaxWidth),_.append("text").text(r.db.getDiagramTitle()).attr("x",sc/2).attr("y",i.titleTopMargin).attr("class","titleText")}};var lc=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[6,9,10],r={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,e,n,r,i,a,s){switch(a.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},e(n,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},e(n,[2,3]),e(n,[2,4]),e(n,[2,5]),e(n,[2,6])],defaultActions:{4:[2,1]},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],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},i=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){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}}},t);function a(){this.yy={}}return r.lexer=i,a.prototype=r,r.Parser=a,new a}();lc.parser=lc;const cc=lc;var uc="",dc=!1;const hc={setMessage:t=>{St.debug("Setting message to: "+t),uc=t},getMessage:()=>uc,setInfo:t=>{dc=t},getInfo:()=>dc,clear:Ar},mc={draw:(t,e,n)=>{try{St.debug("Rendering info diagram\n"+t);const r=ar().securityLevel;let i;"sandbox"===r&&(i=(0,o.Ys)("#i"+e));const a=("sandbox"===r?(0,o.Ys)(i.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select("#"+e);a.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),a.attr("height",100),a.attr("width",400)}catch(r){St.error("Error while rendering info diagram"),St.error(r.message)}}},_c=t=>null!==t.match(/^\s*info/);var pc=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,4],r=[1,5],i=[1,6],a=[1,7],s=[1,9],o=[1,11,13,15,17,19,20,26,27,28,29],l=[2,5],c=[1,6,11,13,15,17,19,20,26,27,28,29],u=[26,27,28],d=[2,8],h=[1,18],m=[1,19],_=[1,20],p=[1,21],f=[1,22],y=[1,23],g=[1,28],b=[6,26,27,28,29],k={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,openDirective:21,typeDirective:22,closeDirective:23,":":24,argDirective:25,NEWLINE:26,";":27,EOF:28,open_directive:29,type_directive:30,arg_directive:31,close_directive:32,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",24:":",26:"NEWLINE",27:";",28:"EOF",29:"open_directive",30:"type_directive",31:"arg_directive",32:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[o-1];break;case 9:r.addSection(a[o-1],r.cleanupValue(a[o]));break;case 10:this.$=a[o].trim(),r.setDiagramTitle(this.$);break;case 11:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 12:case 13:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 14:r.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 21:r.parseDirective("%%{","open_directive");break;case 22:r.parseDirective(a[o],"type_directive");break;case 23:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 24:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:n,21:8,26:r,27:i,28:a,29:s},{1:[3]},{3:10,4:2,5:3,6:n,21:8,26:r,27:i,28:a,29:s},{3:11,4:2,5:3,6:n,21:8,26:r,27:i,28:a,29:s},e(o,l,{7:12,8:[1,13]}),e(c,[2,18]),e(c,[2,19]),e(c,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},e(u,d,{21:8,9:16,10:17,5:24,1:[2,3],11:h,13:m,15:_,17:p,19:f,20:y,29:s}),e(o,l,{7:25}),{23:26,24:[1,27],32:g},e([24,32],[2,22]),e(o,[2,6]),{4:29,26:r,27:i,28:a},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},e(u,[2,13]),e(u,[2,14]),e(u,[2,15]),e(u,d,{21:8,9:16,10:17,5:24,1:[2,4],11:h,13:m,15:_,17:p,19:f,20:y,29:s}),e(b,[2,16]),{25:34,31:[1,35]},e(b,[2,24]),e(o,[2,7]),e(u,[2,9]),e(u,[2,10]),e(u,[2,11]),e(u,[2,12]),{23:36,32:g},{32:[2,23]},e(b,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},v=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){switch(n){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:case 6:case 8:case 9:break;case 7:return 26;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:case 20:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}},t);function x(){this.yy={}}return k.lexer=v,x.prototype=k,k.Parser=x,new x}();pc.parser=pc;const fc=pc,yc=t=>null!==t.match(/^\s*pie/)||null!==t.match(/^\s*bar/);let gc={},bc=!1;const kc={parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().pie,addSection:function(t,e){t=Pt.sanitizeText(t,ar()),void 0===gc[t]&&(gc[t]=e,St.debug("Added new section :",t))},getSections:()=>gc,cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){gc={},bc=!1,Ar()},setAccTitle:Or,getAccTitle:Nr,setDiagramTitle:Ir,getDiagramTitle:Pr,setShowData:function(t){bc=t},getShowData:function(){return bc},getAccDescription:Fr,setAccDescription:Br};let vc,xc=ar();const Mc=450,Lc={draw:(t,e,n,r)=>{try{xc=ar(),St.debug("Rendering info diagram\n"+t);const n=ar().securityLevel;let f;"sandbox"===n&&(f=(0,o.Ys)("#i"+e));const y="sandbox"===n?(0,o.Ys)(f.nodes()[0].contentDocument.body):(0,o.Ys)("body"),g="sandbox"===n?f.nodes()[0].contentDocument:document;r.db.clear(),r.parser.parse(t),St.debug("Parsed info diagram");const b=g.getElementById(e);vc=b.parentElement.offsetWidth,void 0===vc&&(vc=1200),void 0!==xc.useWidth&&(vc=xc.useWidth),void 0!==xc.pie.useWidth&&(vc=xc.pie.useWidth);const k=y.select("#"+e);hr(k,Mc,vc,xc.pie.useMaxWidth),b.setAttribute("viewBox","0 0 "+vc+" "+Mc);var i=18,a=Math.min(vc,Mc)/2-40,s=k.append("g").attr("transform","translate("+vc/2+",225)"),l=r.db.getSections(),c=0;Object.keys(l).forEach((function(t){c+=l[t]}));const v=xc.themeVariables;var u=[v.pie1,v.pie2,v.pie3,v.pie4,v.pie5,v.pie6,v.pie7,v.pie8,v.pie9,v.pie10,v.pie11,v.pie12],d=(0,o.PKp)().range(u),h=Object.entries(l).map((function(t,e){return{order:e,name:t[0],value:t[1]}})),m=(0,o.ve8)().value((function(t){return t.value})).sort((function(t,e){return t.order-e.order}))(h),_=(0,o.Nb1)().innerRadius(0).outerRadius(a);s.selectAll("mySlices").data(m).enter().append("path").attr("d",_).attr("fill",(function(t){return d(t.data.name)})).attr("class","pieCircle"),s.selectAll("mySlices").data(m).enter().append("text").text((function(t){return(t.data.value/c*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+_.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice"),s.append("text").text(r.db.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var p=s.selectAll(".legend").data(d.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*d.domain().length/2)+")"}));p.append("rect").attr("width",i).attr("height",i).style("fill",d).style("stroke",d),p.data(m).append("text").attr("x",22).attr("y",14).text((function(t){return r.db.getShowData()||xc.showData||xc.pie.showData?t.data.name+" ["+t.data.value+"]":t.data.name}))}catch(f){St.error("Error while rendering info diagram"),St.error(f)}}};var wc=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,3],r=[1,5],i=[1,6],a=[1,7],s=[1,8],o=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],l=[1,22],c=[2,13],u=[1,26],d=[1,27],h=[1,28],m=[1,29],_=[1,30],p=[1,31],f=[1,24],y=[1,32],g=[1,33],b=[1,36],k=[71,72],v=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],x=[1,56],M=[1,57],L=[1,58],w=[1,59],T=[1,60],S=[1,61],D=[1,62],Y=[62,63],E=[1,74],C=[1,70],A=[1,71],O=[1,72],N=[1,73],B=[1,75],F=[1,79],I=[1,80],P=[1,77],j=[1,78],R=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],H={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,requirementDef:23,elementDef:24,relationshipDef:25,requirementType:26,requirementName:27,STRUCT_START:28,requirementBody:29,ID:30,COLONSEP:31,id:32,TEXT:33,text:34,RISK:35,riskLevel:36,VERIFYMTHD:37,verifyType:38,STRUCT_STOP:39,REQUIREMENT:40,FUNCTIONAL_REQUIREMENT:41,INTERFACE_REQUIREMENT:42,PERFORMANCE_REQUIREMENT:43,PHYSICAL_REQUIREMENT:44,DESIGN_CONSTRAINT:45,LOW_RISK:46,MED_RISK:47,HIGH_RISK:48,VERIFY_ANALYSIS:49,VERIFY_DEMONSTRATION:50,VERIFY_INSPECTION:51,VERIFY_TEST:52,ELEMENT:53,elementName:54,elementBody:55,TYPE:56,type:57,DOCREF:58,ref:59,END_ARROW_L:60,relationship:61,LINE:62,END_ARROW_R:63,CONTAINS:64,COPIES:65,DERIVES:66,SATISFIES:67,VERIFIES:68,REFINES:69,TRACES:70,unqString:71,qString:72,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",28:"STRUCT_START",30:"ID",31:"COLONSEP",33:"TEXT",35:"RISK",37:"VERIFYMTHD",39:"STRUCT_STOP",40:"REQUIREMENT",41:"FUNCTIONAL_REQUIREMENT",42:"INTERFACE_REQUIREMENT",43:"PERFORMANCE_REQUIREMENT",44:"PHYSICAL_REQUIREMENT",45:"DESIGN_CONSTRAINT",46:"LOW_RISK",47:"MED_RISK",48:"HIGH_RISK",49:"VERIFY_ANALYSIS",50:"VERIFY_DEMONSTRATION",51:"VERIFY_INSPECTION",52:"VERIFY_TEST",53:"ELEMENT",56:"TYPE",58:"DOCREF",60:"END_ARROW_L",62:"LINE",63:"END_ARROW_R",64:"CONTAINS",65:"COPIES",66:"DERIVES",67:"SATISFIES",68:"VERIFIES",69:"REFINES",70:"TRACES",71:"unqString",72:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 6:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 7:case 8:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 9:r.parseDirective("%%{","open_directive");break;case 10:r.parseDirective(a[o],"type_directive");break;case 11:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 12:r.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:r.addRequirement(a[o-3],a[o-4]);break;case 20:r.setNewReqId(a[o-2]);break;case 21:r.setNewReqText(a[o-2]);break;case 22:r.setNewReqRisk(a[o-2]);break;case 23:r.setNewReqVerifyMethod(a[o-2]);break;case 26:this.$=r.RequirementType.REQUIREMENT;break;case 27:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=r.RiskLevel.LOW_RISK;break;case 33:this.$=r.RiskLevel.MED_RISK;break;case 34:this.$=r.RiskLevel.HIGH_RISK;break;case 35:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=r.VerifyType.VERIFY_TEST;break;case 39:r.addElement(a[o-3]);break;case 40:r.setNewElementType(a[o-2]);break;case 41:r.setNewElementDocRef(a[o-2]);break;case 44:r.addRelationship(a[o-2],a[o],a[o-4]);break;case 45:r.addRelationship(a[o-2],a[o-4],a[o]);break;case 46:this.$=r.Relationships.CONTAINS;break;case 47:this.$=r.Relationships.COPIES;break;case 48:this.$=r.Relationships.DERIVES;break;case 49:this.$=r.Relationships.SATISFIES;break;case 50:this.$=r.Relationships.VERIFIES;break;case 51:this.$=r.Relationships.REFINES;break;case 52:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:n,9:4,14:r,16:i,18:a,19:s},{1:[3]},{3:10,4:2,5:[1,9],6:n,9:4,14:r,16:i,18:a,19:s},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},e(o,[2,8]),{20:[2,9]},{3:16,4:2,6:n,9:4,14:r,16:i,18:a,19:s},{1:[2,2]},{4:21,5:l,7:17,8:c,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:u,41:d,42:h,43:m,44:_,45:p,53:f,71:y,72:g},{11:34,12:[1,35],22:b},e([12,22],[2,10]),e(o,[2,6]),e(o,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:l,7:38,8:c,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:u,41:d,42:h,43:m,44:_,45:p,53:f,71:y,72:g},{4:21,5:l,7:39,8:c,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:u,41:d,42:h,43:m,44:_,45:p,53:f,71:y,72:g},{4:21,5:l,7:40,8:c,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:u,41:d,42:h,43:m,44:_,45:p,53:f,71:y,72:g},{4:21,5:l,7:41,8:c,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:u,41:d,42:h,43:m,44:_,45:p,53:f,71:y,72:g},{4:21,5:l,7:42,8:c,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:u,41:d,42:h,43:m,44:_,45:p,53:f,71:y,72:g},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},e(k,[2,26]),e(k,[2,27]),e(k,[2,28]),e(k,[2,29]),e(k,[2,30]),e(k,[2,31]),e(v,[2,55]),e(v,[2,56]),e(o,[2,4]),{13:51,21:[1,52]},e(o,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:x,65:M,66:L,67:w,68:T,69:S,70:D},{61:63,64:x,65:M,66:L,67:w,68:T,69:S,70:D},{11:64,22:b},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},e(Y,[2,46]),e(Y,[2,47]),e(Y,[2,48]),e(Y,[2,49]),e(Y,[2,50]),e(Y,[2,51]),e(Y,[2,52]),{63:[1,68]},e(o,[2,5]),{5:E,29:69,30:C,33:A,35:O,37:N,39:B},{5:F,39:I,55:76,56:P,58:j},{32:81,71:y,72:g},{32:82,71:y,72:g},e(R,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:E,29:87,30:C,33:A,35:O,37:N,39:B},e(R,[2,25]),e(R,[2,39]),{31:[1,88]},{31:[1,89]},{5:F,39:I,55:90,56:P,58:j},e(R,[2,43]),e(R,[2,44]),e(R,[2,45]),{32:91,71:y,72:g},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},e(R,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},e(R,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:E,29:116,30:C,33:A,35:O,37:N,39:B},{5:E,29:117,30:C,33:A,35:O,37:N,39:B},{5:E,29:118,30:C,33:A,35:O,37:N,39:B},{5:E,29:119,30:C,33:A,35:O,37:N,39:B},{5:F,39:I,55:120,56:P,58:j},{5:F,39:I,55:121,56:P,58:j},e(R,[2,20]),e(R,[2,21]),e(R,[2,22]),e(R,[2,23]),e(R,[2,40]),e(R,[2,41])],defaultActions:{8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},parseError:function(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],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},$=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){switch(n){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 53:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:case 15:case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 54:return"qString";case 55:return e.yytext=e.yytext.trim(),71}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},INITIAL:{rules:[0,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55],inclusive:!0}}},t);function Z(){this.yy={}}return H.lexer=$,Z.prototype=H,H.Parser=Z,new Z}();wc.parser=wc;const Tc=wc,Sc=t=>null!==t.match(/^\s*requirement(Diagram)?/);let Dc=[],Yc={},Ec={},Cc={},Ac={};const Oc={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().req,addRequirement:(t,e)=>(void 0===Ec[t]&&(Ec[t]={name:t,type:e,id:Yc.id,text:Yc.text,risk:Yc.risk,verifyMethod:Yc.verifyMethod}),Yc={},Ec[t]),getRequirements:()=>Ec,setNewReqId:t=>{void 0!==Yc&&(Yc.id=t)},setNewReqText:t=>{void 0!==Yc&&(Yc.text=t)},setNewReqRisk:t=>{void 0!==Yc&&(Yc.risk=t)},setNewReqVerifyMethod:t=>{void 0!==Yc&&(Yc.verifyMethod=t)},setAccTitle:Or,getAccTitle:Nr,setAccDescription:Br,getAccDescription:Fr,addElement:t=>(void 0===Ac[t]&&(Ac[t]={name:t,type:Cc.type,docRef:Cc.docRef},St.info("Added new requirement: ",t)),Cc={},Ac[t]),getElements:()=>Ac,setNewElementType:t=>{void 0!==Cc&&(Cc.type=t)},setNewElementDocRef:t=>{void 0!==Cc&&(Cc.docRef=t)},addRelationship:(t,e,n)=>{Dc.push({type:t,src:e,dst:n})},getRelationships:()=>Dc,clear:()=>{Dc=[],Yc={},Ec={},Cc={},Ac={},Ar()}},Nc={CONTAINS:"contains",ARROW:"arrow"},Bc=Nc,Fc=(t,e)=>{let n=t.append("defs").append("marker").attr("id",Nc.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");n.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),n.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),n.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",Nc.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 Ic={},Pc=0;const jc=(t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",Ic.rect_min_width+"px").attr("height",Ic.rect_min_height+"px"),Rc=(t,e,n)=>{let r=Ic.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",r).attr("y",Ic.rect_padding).attr("dominant-baseline","hanging"),a=0;n.forEach((t=>{0==a?i.append("tspan").attr("text-anchor","middle").attr("x",Ic.rect_min_width/2).attr("dy",0).text(t):i.append("tspan").attr("text-anchor","middle").attr("x",Ic.rect_min_width/2).attr("dy",.75*Ic.line_height).text(t),a++}));let s=1.5*Ic.rect_padding+a*Ic.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",Ic.rect_min_width).attr("y1",s).attr("y2",s),{titleNode:i,y:s}},Hc=(t,e,n,r)=>{let i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",Ic.rect_padding).attr("y",r).attr("dominant-baseline","hanging"),a=0;let s=[];return n.forEach((t=>{let e=t.length;for(;e>30&&a<3;){let n=t.substring(0,30);e=(t=t.substring(30,t.length)).length,s[s.length]=n,a++}if(3==a){let t=s[s.length-1];s[s.length-1]=t.substring(0,t.length-4)+"..."}else s[s.length]=t;a=0})),s.forEach((t=>{i.append("tspan").attr("x",Ic.rect_padding).attr("dy",Ic.line_height).text(t)})),i},$c=function(t,e,n,r,i){const a=n.edge(Zc(e.src),Zc(e.dst)),s=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})),l=t.insert("path","#"+r).attr("class","er relationshipLine").attr("d",s(a.points)).attr("fill","none");e.type==i.db.Relationships.CONTAINS?l.attr("marker-start","url("+Pt.getUrl(Ic.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(l.attr("stroke-dasharray","10,7"),l.attr("marker-end","url("+Pt.getUrl(Ic.arrowMarkerAbsolute)+"#"+Bc.ARROW+"_line_ending)")),((t,e,n,r)=>{const i=e.node().getTotalLength(),a=e.node().getPointAtLength(.5*i),s="rel"+Pc;Pc++;const o=t.append("text").attr("class","req relationshipLabel").attr("id",s).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(r).node().getBBox();t.insert("rect","#"+s).attr("class","req reqLabelBox").attr("x",a.x-o.width/2).attr("y",a.y-o.height/2).attr("width",o.width).attr("height",o.height).attr("fill","white").attr("fill-opacity","85%")})(t,l,0,`<<${e.type}>>`)},Zc=t=>t.replace(/\s/g,"").replace(/\./g,"_"),Wc={draw:(t,e,n,r)=>{Ic=ar().requirement,r.db.clear(),r.parser.parse(t);const i=Ic.securityLevel;let a;"sandbox"===i&&(a=(0,o.Ys)("#i"+e));const s=("sandbox"===i?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select(`[id='${e}']`);Fc(s,Ic);const l=new ut.k({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:Ic.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let c=r.db.getRequirements(),u=r.db.getElements(),d=r.db.getRelationships();var h,m,_;h=c,m=l,_=s,Object.keys(h).forEach((t=>{let e=h[t];t=Zc(t),St.info("Added new requirement: ",t);const n=_.append("g").attr("id",t),r=jc(n,"req-"+t);let i=Rc(n,t+"_title",[`<<${e.type}>>`,`${e.name}`]);Hc(n,t+"_body",[`Id: ${e.id}`,`Text: ${e.text}`,`Risk: ${e.risk}`,`Verification: ${e.verifyMethod}`],i.y);const a=r.node().getBBox();m.setNode(t,{width:a.width,height:a.height,shape:"rect",id:t})})),((t,e,n)=>{Object.keys(t).forEach((r=>{let i=t[r];const a=Zc(r),s=n.append("g").attr("id",a),o="element-"+a,l=jc(s,o);let c=Rc(s,o+"_title",["<<Element>>",`${r}`]);Hc(s,o+"_body",[`Type: ${i.type||"Not Specified"}`,`Doc Ref: ${i.docRef||"None"}`],c.y);const u=l.node().getBBox();e.setNode(a,{width:u.width,height:u.height,shape:"rect",id:a})}))})(u,l,s),((t,e)=>{t.forEach((function(t){let n=Zc(t.src),r=Zc(t.dst);e.setEdge(n,r,{relationship:t})}))})(d,l),(0,ct.bK)(l),function(t,e){e.nodes().forEach((function(n){void 0!==n&&void 0!==e.node(n)&&(t.select("#"+n),t.select("#"+n).attr("transform","translate("+(e.node(n).x-e.node(n).width/2)+","+(e.node(n).y-e.node(n).height/2)+" )"))}))}(s,l),d.forEach((function(t){$c(s,t,l,e,r)}));const p=Ic.rect_padding,f=s.node().getBBox(),y=f.width+2*p,g=f.height+2*p;hr(s,g,y,Ic.useMaxWidth),s.attr("viewBox",`${f.x-p} ${f.y-p} ${y} ${g}`)}};var zc=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,3],i=[1,5],a=[1,7],s=[2,5],o=[1,15],l=[1,17],c=[1,19],u=[1,21],d=[1,22],h=[1,23],m=[1,29],_=[1,30],p=[1,31],f=[1,32],y=[1,33],g=[1,34],b=[1,35],k=[1,36],v=[1,37],x=[1,38],M=[1,39],L=[1,40],w=[1,42],T=[1,43],S=[1,45],D=[1,46],Y=[1,47],E=[1,48],C=[1,49],A=[1,50],O=[1,53],N=[1,4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,52,53,54,56,57,62,63,64,65,73,83],B=[4,5,21,54,56],F=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,54,56,57,62,63,64,65,73,83],I=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,53,54,56,57,62,63,64,65,73,83],P=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,52,54,56,57,62,63,64,65,73,83],j=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,54,56,57,62,63,64,65,73,83],R=[71,72,73],H=[1,125],$=[1,4,5,7,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,52,53,54,56,57,62,63,64,65,73,83],Z={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,box_section:11,box_line:12,participant_statement:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,box:19,restOfLine:20,end:21,signal:22,autonumber:23,NUM:24,off:25,activate:26,actor:27,deactivate:28,note_statement:29,links_statement:30,link_statement:31,properties_statement:32,details_statement:33,title:34,legacy_title:35,acc_title:36,acc_title_value:37,acc_descr:38,acc_descr_value:39,acc_descr_multiline_value:40,loop:41,rect:42,opt:43,alt:44,else_sections:45,par:46,par_sections:47,critical:48,option_sections:49,break:50,option:51,and:52,else:53,participant:54,AS:55,participant_actor:56,note:57,placement:58,text2:59,over:60,actor_pair:61,links:62,link:63,properties:64,details:65,spaceList:66,",":67,left_of:68,right_of:69,signaltype:70,"+":71,"-":72,ACTOR:73,SOLID_OPEN_ARROW:74,DOTTED_OPEN_ARROW:75,SOLID_ARROW:76,DOTTED_ARROW:77,SOLID_CROSS:78,DOTTED_CROSS:79,SOLID_POINT:80,DOTTED_POINT:81,TXT:82,open_directive:83,type_directive:84,arg_directive:85,close_directive:86,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",17:":",19:"box",20:"restOfLine",21:"end",23:"autonumber",24:"NUM",25:"off",26:"activate",28:"deactivate",34:"title",35:"legacy_title",36:"acc_title",37:"acc_title_value",38:"acc_descr",39:"acc_descr_value",40:"acc_descr_multiline_value",41:"loop",42:"rect",43:"opt",44:"alt",46:"par",48:"critical",50:"break",51:"option",52:"and",53:"else",54:"participant",55:"AS",56:"participant_actor",57:"note",60:"over",62:"links",63:"link",64:"properties",65:"details",67:",",68:"left_of",69:"right_of",71:"+",72:"-",73:"ACTOR",74:"SOLID_OPEN_ARROW",75:"DOTTED_OPEN_ARROW",76:"SOLID_ARROW",77:"DOTTED_ARROW",78:"SOLID_CROSS",79:"DOTTED_CROSS",80:"SOLID_POINT",81:"DOTTED_POINT",82:"TXT",83:"open_directive",84:"type_directive",85:"arg_directive",86:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[11,0],[11,2],[12,2],[12,1],[12,1],[6,4],[6,6],[10,1],[10,4],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[49,1],[49,4],[47,1],[47,4],[45,1],[45,4],[13,5],[13,3],[13,5],[13,3],[29,4],[29,4],[30,3],[31,3],[32,3],[33,3],[66,2],[66,1],[61,3],[61,1],[58,1],[58,1],[22,5],[22,5],[22,4],[27,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[59,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 4:return r.apply(a[o]),a[o];case 5:case 10:case 9:case 14:this.$=[];break;case 6:case 11:a[o-1].push(a[o]),this.$=a[o-1];break;case 7:case 8:case 12:case 13:case 63:this.$=a[o];break;case 18:a[o-1].unshift({type:"boxStart",boxData:r.parseBoxData(a[o-2])}),a[o-1].push({type:"boxEnd",boxText:a[o-2]}),this.$=a[o-1];break;case 20:this.$={type:"sequenceIndex",sequenceIndex:Number(a[o-2]),sequenceIndexStep:Number(a[o-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceIndex:Number(a[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 24:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[o-1]};break;case 25:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[o-1]};break;case 31:r.setDiagramTitle(a[o].substring(6)),this.$=a[o].substring(6);break;case 32:r.setDiagramTitle(a[o].substring(7)),this.$=a[o].substring(7);break;case 33:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 34:case 35:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 36:a[o-1].unshift({type:"loopStart",loopText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.LOOP_START}),a[o-1].push({type:"loopEnd",loopText:a[o-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[o-1];break;case 37:a[o-1].unshift({type:"rectStart",color:r.parseMessage(a[o-2]),signalType:r.LINETYPE.RECT_START}),a[o-1].push({type:"rectEnd",color:r.parseMessage(a[o-2]),signalType:r.LINETYPE.RECT_END}),this.$=a[o-1];break;case 38:a[o-1].unshift({type:"optStart",optText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.OPT_START}),a[o-1].push({type:"optEnd",optText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.OPT_END}),this.$=a[o-1];break;case 39:a[o-1].unshift({type:"altStart",altText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.ALT_START}),a[o-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[o-1];break;case 40:a[o-1].unshift({type:"parStart",parText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.PAR_START}),a[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[o-1];break;case 41:a[o-1].unshift({type:"criticalStart",criticalText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.CRITICAL_START}),a[o-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=a[o-1];break;case 42:a[o-1].unshift({type:"breakStart",breakText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.BREAK_START}),a[o-1].push({type:"breakEnd",optText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.BREAK_END}),this.$=a[o-1];break;case 45:this.$=a[o-3].concat([{type:"option",optionText:r.parseMessage(a[o-1]),signalType:r.LINETYPE.CRITICAL_OPTION},a[o]]);break;case 47:this.$=a[o-3].concat([{type:"and",parText:r.parseMessage(a[o-1]),signalType:r.LINETYPE.PAR_AND},a[o]]);break;case 49:this.$=a[o-3].concat([{type:"else",altText:r.parseMessage(a[o-1]),signalType:r.LINETYPE.ALT_ELSE},a[o]]);break;case 50:a[o-3].type="addParticipant",a[o-3].description=r.parseMessage(a[o-1]),this.$=a[o-3];break;case 51:a[o-1].type="addParticipant",this.$=a[o-1];break;case 52:a[o-3].type="addActor",a[o-3].description=r.parseMessage(a[o-1]),this.$=a[o-3];break;case 53:a[o-1].type="addActor",this.$=a[o-1];break;case 54:this.$=[a[o-1],{type:"addNote",placement:a[o-2],actor:a[o-1].actor,text:a[o]}];break;case 55:a[o-2]=[].concat(a[o-1],a[o-1]).slice(0,2),a[o-2][0]=a[o-2][0].actor,a[o-2][1]=a[o-2][1].actor,this.$=[a[o-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[o-2].slice(0,2),text:a[o]}];break;case 56:this.$=[a[o-1],{type:"addLinks",actor:a[o-1].actor,text:a[o]}];break;case 57:this.$=[a[o-1],{type:"addALink",actor:a[o-1].actor,text:a[o]}];break;case 58:this.$=[a[o-1],{type:"addProperties",actor:a[o-1].actor,text:a[o]}];break;case 59:this.$=[a[o-1],{type:"addDetails",actor:a[o-1].actor,text:a[o]}];break;case 62:this.$=[a[o-2],a[o]];break;case 64:this.$=r.PLACEMENT.LEFTOF;break;case 65:this.$=r.PLACEMENT.RIGHTOF;break;case 66:this.$=[a[o-4],a[o-1],{type:"addMessage",from:a[o-4].actor,to:a[o-1].actor,signalType:a[o-3],msg:a[o]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[o-1]}];break;case 67:this.$=[a[o-4],a[o-1],{type:"addMessage",from:a[o-4].actor,to:a[o-1].actor,signalType:a[o-3],msg:a[o]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[o-4]}];break;case 68:this.$=[a[o-3],a[o-1],{type:"addMessage",from:a[o-3].actor,to:a[o-1].actor,signalType:a[o-2],msg:a[o]}];break;case 69:this.$={type:"addParticipant",actor:a[o]};break;case 70:this.$=r.LINETYPE.SOLID_OPEN;break;case 71:this.$=r.LINETYPE.DOTTED_OPEN;break;case 72:this.$=r.LINETYPE.SOLID;break;case 73:this.$=r.LINETYPE.DOTTED;break;case 74:this.$=r.LINETYPE.SOLID_CROSS;break;case 75:this.$=r.LINETYPE.DOTTED_CROSS;break;case 76:this.$=r.LINETYPE.SOLID_POINT;break;case 77:this.$=r.LINETYPE.DOTTED_POINT;break;case 78:this.$=r.parseMessage(a[o].trim().substring(1));break;case 79:r.parseDirective("%%{","open_directive");break;case 80:r.parseDirective(a[o],"type_directive");break;case 81:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 82:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:n,5:r,6:4,7:i,14:6,83:a},{1:[3]},{3:8,4:n,5:r,6:4,7:i,14:6,83:a},{3:9,4:n,5:r,6:4,7:i,14:6,83:a},{3:10,4:n,5:r,6:4,7:i,14:6,83:a},e([1,4,5,19,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,54,56,57,62,63,64,65,73,83],s,{8:11}),{15:12,84:[1,13]},{84:[2,79]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:l,6:41,9:14,10:16,13:18,14:6,19:c,22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},{16:51,17:[1,52],86:O},e([17,86],[2,80]),e(N,[2,6]),{6:41,10:54,13:18,14:6,19:c,22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},e(N,[2,8]),e(N,[2,9]),e(N,[2,17]),{20:[1,55]},{5:[1,56]},{5:[1,59],24:[1,57],25:[1,58]},{27:60,73:A},{27:61,73:A},{5:[1,62]},{5:[1,63]},{5:[1,64]},{5:[1,65]},{5:[1,66]},e(N,[2,31]),e(N,[2,32]),{37:[1,67]},{39:[1,68]},e(N,[2,35]),{20:[1,69]},{20:[1,70]},{20:[1,71]},{20:[1,72]},{20:[1,73]},{20:[1,74]},{20:[1,75]},e(N,[2,43]),{27:76,73:A},{27:77,73:A},{70:78,74:[1,79],75:[1,80],76:[1,81],77:[1,82],78:[1,83],79:[1,84],80:[1,85],81:[1,86]},{58:87,60:[1,88],68:[1,89],69:[1,90]},{27:91,73:A},{27:92,73:A},{27:93,73:A},{27:94,73:A},e([5,55,67,74,75,76,77,78,79,80,81,82],[2,69]),{5:[1,95]},{18:96,85:[1,97]},{5:[2,82]},e(N,[2,7]),e(B,[2,10],{11:98}),e(N,[2,19]),{5:[1,100],24:[1,99]},{5:[1,101]},e(N,[2,23]),{5:[1,102]},{5:[1,103]},e(N,[2,26]),e(N,[2,27]),e(N,[2,28]),e(N,[2,29]),e(N,[2,30]),e(N,[2,33]),e(N,[2,34]),e(F,s,{8:104}),e(F,s,{8:105}),e(F,s,{8:106}),e(I,s,{45:107,8:108}),e(P,s,{47:109,8:110}),e(j,s,{49:111,8:112}),e(F,s,{8:113}),{5:[1,115],55:[1,114]},{5:[1,117],55:[1,116]},{27:120,71:[1,118],72:[1,119],73:A},e(R,[2,70]),e(R,[2,71]),e(R,[2,72]),e(R,[2,73]),e(R,[2,74]),e(R,[2,75]),e(R,[2,76]),e(R,[2,77]),{27:121,73:A},{27:123,61:122,73:A},{73:[2,64]},{73:[2,65]},{59:124,82:H},{59:126,82:H},{59:127,82:H},{59:128,82:H},e($,[2,15]),{16:129,86:O},{86:[2,81]},{4:[1,132],5:[1,134],12:131,13:133,21:[1,130],54:w,56:T},{5:[1,135]},e(N,[2,21]),e(N,[2,22]),e(N,[2,24]),e(N,[2,25]),{4:o,5:l,6:41,9:14,10:16,13:18,14:6,19:c,21:[1,136],22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},{4:o,5:l,6:41,9:14,10:16,13:18,14:6,19:c,21:[1,137],22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},{4:o,5:l,6:41,9:14,10:16,13:18,14:6,19:c,21:[1,138],22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},{21:[1,139]},{4:o,5:l,6:41,9:14,10:16,13:18,14:6,19:c,21:[2,48],22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,53:[1,140],54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},{21:[1,141]},{4:o,5:l,6:41,9:14,10:16,13:18,14:6,19:c,21:[2,46],22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,52:[1,142],54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},{21:[1,143]},{4:o,5:l,6:41,9:14,10:16,13:18,14:6,19:c,21:[2,44],22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,51:[1,144],54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},{4:o,5:l,6:41,9:14,10:16,13:18,14:6,19:c,21:[1,145],22:20,23:u,26:d,27:44,28:h,29:24,30:25,31:26,32:27,33:28,34:m,35:_,36:p,38:f,40:y,41:g,42:b,43:k,44:v,46:x,48:M,50:L,54:w,56:T,57:S,62:D,63:Y,64:E,65:C,73:A,83:a},{20:[1,146]},e(N,[2,51]),{20:[1,147]},e(N,[2,53]),{27:148,73:A},{27:149,73:A},{59:150,82:H},{59:151,82:H},{59:152,82:H},{67:[1,153],82:[2,63]},{5:[2,56]},{5:[2,78]},{5:[2,57]},{5:[2,58]},{5:[2,59]},{5:[1,154]},e(N,[2,18]),e(B,[2,11]),{13:155,54:w,56:T},e(B,[2,13]),e(B,[2,14]),e(N,[2,20]),e(N,[2,36]),e(N,[2,37]),e(N,[2,38]),e(N,[2,39]),{20:[1,156]},e(N,[2,40]),{20:[1,157]},e(N,[2,41]),{20:[1,158]},e(N,[2,42]),{5:[1,159]},{5:[1,160]},{59:161,82:H},{59:162,82:H},{5:[2,68]},{5:[2,54]},{5:[2,55]},{27:163,73:A},e($,[2,16]),e(B,[2,12]),e(I,s,{8:108,45:164}),e(P,s,{8:110,47:165}),e(j,s,{8:112,49:166}),e(N,[2,50]),e(N,[2,52]),{5:[2,66]},{5:[2,67]},{82:[2,62]},{21:[2,49]},{21:[2,47]},{21:[2,45]}],defaultActions:{7:[2,79],8:[2,1],9:[2,2],10:[2,3],53:[2,82],89:[2,64],90:[2,65],97:[2,81],124:[2,56],125:[2,78],126:[2,57],127:[2,58],128:[2,59],150:[2,68],151:[2,54],152:[2,55],161:[2,66],162:[2,67],163:[2,62],164:[2,49],165:[2,47],166:[2,45]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},W=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){switch(n){case 0:return this.begin("open_directive"),83;case 1:return this.begin("type_directive"),84;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),86;case 4:return 85;case 5:case 53:case 66:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return 24;case 12:return this.begin("LINE"),19;case 13:return this.begin("ID"),54;case 14:return this.begin("ID"),56;case 15:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),73;case 16:return this.popState(),this.popState(),this.begin("LINE"),55;case 17:return this.popState(),this.popState(),5;case 18:return this.begin("LINE"),41;case 19:return this.begin("LINE"),42;case 20:return this.begin("LINE"),43;case 21:return this.begin("LINE"),44;case 22:return this.begin("LINE"),53;case 23:return this.begin("LINE"),46;case 24:return this.begin("LINE"),52;case 25:return this.begin("LINE"),48;case 26:return this.begin("LINE"),51;case 27:return this.begin("LINE"),50;case 28:return this.popState(),20;case 29:return 21;case 30:return 68;case 31:return 69;case 32:return 62;case 33:return 63;case 34:return 64;case 35:return 65;case 36:return 60;case 37:return 57;case 38:return this.begin("ID"),26;case 39:return this.begin("ID"),28;case 40:return 34;case 41:return 35;case 42:return this.begin("acc_title"),36;case 43:return this.popState(),"acc_title_value";case 44:return this.begin("acc_descr"),38;case 45:return this.popState(),"acc_descr_value";case 46:this.begin("acc_descr_multiline");break;case 47:this.popState();break;case 48:return"acc_descr_multiline_value";case 49:return 7;case 50:return 23;case 51:return 25;case 52:return 67;case 54:return e.yytext=e.yytext.trim(),73;case 55:return 76;case 56:return 77;case 57:return 74;case 58:return 75;case 59:return 78;case 60:return 79;case 61:return 80;case 62:return 81;case 63:return 82;case 64:return 71;case 65:return 72;case 67:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[47,48],inclusive:!1},acc_descr:{rules:[45],inclusive:!1},acc_title:{rules:[43],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,15],inclusive:!1},ALIAS:{rules:[7,8,16,17],inclusive:!1},LINE:{rules:[7,8,28],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,13,14,18,19,20,21,22,23,24,25,26,27,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,46,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}},t);function z(){this.yy={}}return Z.lexer=W,z.prototype=Z,Z.Parser=z,new z}();zc.parser=zc;const Uc=zc,qc=t=>null!==t.match(/^\s*sequenceDiagram/);let Vc,Gc,Jc,Xc={},Kc=[],Qc=[],tu=!1;const eu=function(t,e,n,r){let i=Jc;const a=Xc[t];if(a){if(Jc&&a.box&&Jc!==a.box)throw new Error("A same participant should only be defined in one Box: "+a.name+" can't be in '"+a.box.name+"' and in '"+Jc.name+"' at the same time.");if(i=a.box?a.box:Jc,a.box=i,a&&e===a.name&&null==n)return}null!=n&&null!=n.text||(n={text:e,wrap:null,type:r}),null!=r&&null!=n.text||(n={text:e,wrap:null,type:r}),Xc[t]={box:i,name:e,description:n.text,wrap:void 0===n.wrap&&iu()||!!n.wrap,prevActor:Vc,links:{},properties:{},actorCnt:null,rectData:null,type:r||"participant"},Vc&&Xc[Vc]&&(Xc[Vc].nextActor=t),Jc&&Jc.actorKeys.push(t),Vc=t},nu=function(t,e,n={text:void 0,wrap:void 0},r){if(r===au.ACTIVE_END){const e=(t=>{let e,n=0;for(e=0;e<Qc.length;e++)Qc[e].type===au.ACTIVE_START&&Qc[e].from.actor===t&&n++,Qc[e].type===au.ACTIVE_END&&Qc[e].from.actor===t&&n--;return n})(t.actor);if(e<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 Qc.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&iu()||!!n.wrap,type:r}),!0},ru=function(t){return Xc[t]},iu=()=>void 0!==Gc?Gc:ar().sequence.wrap,au={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},su=function(t,e,n){n.text,void 0===n.wrap&&iu()||n.wrap;const r=[].concat(t,t);Qc.push({from:r[0],to:r[1],message:n.text,wrap:void 0===n.wrap&&iu()||!!n.wrap,type:au.NOTE,placement:e})},ou=function(t,e){const n=ru(t);try{let t=At(e.text,ar());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");lu(n,JSON.parse(t))}catch(r){St.error("error while parsing actor link text",r)}};function lu(t,e){if(null==t.links)t.links=e;else for(let n in e)t.links[n]=e[n]}const cu=function(t,e){const n=ru(t);try{let t=At(e.text,ar());uu(n,JSON.parse(t))}catch(r){St.error("error while parsing actor properties text",r)}};function uu(t,e){if(null==t.properties)t.properties=e;else for(let n in e)t.properties[n]=e[n]}const du=function(t,e){const n=ru(t),r=document.getElementById(e.text);try{const t=r.innerHTML,e=JSON.parse(t);e.properties&&uu(n,e.properties),e.links&&lu(n,e.links)}catch(i){St.error("error while parsing actor details text",i)}},hu=function(t){if(Array.isArray(t))t.forEach((function(t){hu(t)}));else switch(t.type){case"sequenceIndex":Qc.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":eu(t.actor,t.actor,t.description,"participant");break;case"addActor":eu(t.actor,t.actor,t.description,"actor");break;case"activeStart":case"activeEnd":nu(t.actor,void 0,void 0,t.signalType);break;case"addNote":su(t.actor,t.placement,t.text);break;case"addLinks":ou(t.actor,t.text);break;case"addALink":!function(t,e){const n=ru(t);try{const t={};let s=At(e.text,ar());var r=s.indexOf("@");s=s.replace(/&/g,"&"),s=s.replace(/=/g,"=");var i=s.slice(0,r-1).trim(),a=s.slice(r+1).trim();t[i]=a,lu(n,t)}catch(s){St.error("error while parsing actor link text",s)}}(t.actor,t.text);break;case"addProperties":cu(t.actor,t.text);break;case"addDetails":du(t.actor,t.text);break;case"addMessage":nu(t.from,t.to,t.msg,t.signalType);break;case"boxStart":e=t.boxData,Kc.push({name:e.text,wrap:void 0===e.wrap&&iu()||!!e.wrap,fill:e.color,actorKeys:[]}),Jc=Kc.slice(-1)[0];break;case"boxEnd":Jc=void 0;break;case"loopStart":nu(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":nu(void 0,void 0,void 0,t.signalType);break;case"rectStart":nu(void 0,void 0,t.color,t.signalType);break;case"optStart":nu(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":nu(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":Or(t.text);break;case"parStart":case"and":nu(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":nu(void 0,void 0,t.criticalText,t.signalType);break;case"option":nu(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":nu(void 0,void 0,t.breakText,t.signalType)}var e},mu={addActor:eu,addMessage:function(t,e,n,r){Qc.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&iu()||!!n.wrap,answer:r})},addSignal:nu,addLinks:ou,addDetails:du,addProperties:cu,autoWrap:iu,setWrap:function(t){Gc=t},enableSequenceNumbers:function(){tu=!0},disableSequenceNumbers:function(){tu=!1},showSequenceNumbers:()=>tu,getMessages:function(){return Qc},getActors:function(){return Xc},getActor:ru,getActorKeys:function(){return Object.keys(Xc)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:Nr,getBoxes:function(){return Kc},getDiagramTitle:Pr,setDiagramTitle:Ir,parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().sequence,clear:function(){Xc={},Kc=[],Qc=[],tu=!1,Ar()},parseMessage:function(t){const e=t.trim(),n={text:e.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^:?wrap:/)||null===e.match(/^:?nowrap:/)&&void 0};return St.debug("parseMessage:",n),n},parseBoxData:function(t){const e=t.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let n=null!=e&&e[1]?e[1].trim():"transparent",r=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",n)||(n="transparent",r=t.trim());else{const e=(new Option).style;e.color=n,e.color!==n&&(n="transparent",r=t.trim())}return{color:n,text:void 0!==r?At(r.replace(/^:?(?:no)?wrap:/,""),ar()):void 0,wrap:void 0!==r?null!==r.match(/^:?wrap:/)||null===r.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:au,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:su,setAccTitle:Or,apply:hu,setAccDescription:Br,getAccDescription:Fr,hasAtLeastOneBox:function(){return Kc.length>0},hasAtLeastOneBoxWithTitle:function(){return Kc.some((t=>t.name))}};let _u=[];const pu=()=>{_u.forEach((t=>{t()})),_u=[]},fu=function(t,e){const n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},yu=(t,e)=>{var n;n=()=>{const n=document.querySelectorAll(t);0!==n.length&&(n[0].addEventListener("mouseover",(function(){ku("actor"+e+"_popup")})),n[0].addEventListener("mouseout",(function(){vu("actor"+e+"_popup")})))},_u.push(n)},gu=function(t,e,n,r){const i=t.append("image");i.attr("x",e),i.attr("y",n);var a=(0,s.N)(r);i.attr("xlink:href",a)},bu=function(t,e,n,r){const i=t.append("use");i.attr("x",e),i.attr("y",n);var a=(0,s.N)(r);i.attr("xlink:href","#"+a)},ku=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="block")},vu=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="none")},xu=function(t,e){let n=0,r=0;const i=e.text.split(Pt.lineBreakRegex),[a,s]=Vn(e.fontSize);let o=[],l=0,c=()=>e.y;if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":c=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":c=()=>Math.round(e.y+(n+r+e.textMargin)/2);break;case"bottom":case"end":c=()=>Math.round(e.y+(n+r+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[u,d]of i.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==a&&(l=u*a);const i=t.append("text");if(i.attr("x",e.x),i.attr("y",c()),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!==s&&i.style("font-size",s),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),e.tspan){const t=i.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(d)}else i.text(d);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(r+=(i._groups||i)[0][0].getBBox().height,n=r),o.push(i)}return o},Mu=function(t,e){const n=t.append("polygon");var r,i,a,s,o;return n.attr("points",(r=e.x,i=e.y,a=e.width,s=e.height,r+","+i+" "+(r+a)+","+i+" "+(r+a)+","+(i+s-(o=7))+" "+(r+a-1.2*o)+","+(i+s)+" "+r+","+(i+s))),n.attr("class","labelBox"),e.y=e.y+e.height/2,xu(t,e),n};let Lu=-1;const wu=(t,e)=>{t.selectAll&&t.selectAll(".actor-line").attr("class","200").attr("y2",e-55)},Tu=function(t,e){fu(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"}).lower()},Su=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}},Du=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Yu=function(){function t(t,e,n,i,a,s,o){r(e.append("text").attr("x",n+a/2).attr("y",i+s/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,n,i,a,s,o,l){const{actorFontSize:c,actorFontFamily:u,actorFontWeight:d}=l,[h,m]=Vn(c),_=t.split(Pt.lineBreakRegex);for(let p=0;p<_.length;p++){const t=p*h-h*(_.length-1)/2,l=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle").style("font-size",m).style("font-weight",d).style("font-family",u);l.append("tspan").attr("x",n+a/2).attr("dy",t).text(_[p]),l.attr("y",i+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(l,o)}}function n(t,n,i,a,s,o,l,c){const u=n.append("switch"),d=u.append("foreignObject").attr("x",i).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,u,i,a,s,o,l,c),r(d,l)}function r(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),Eu=function(){function t(t,e,n,i,a,s,o){r(e.append("text").attr("x",n).attr("y",i).style("text-anchor","start").text(t),o)}function e(t,e,n,i,a,s,o,l){const{actorFontSize:c,actorFontFamily:u,actorFontWeight:d}=l,h=t.split(Pt.lineBreakRegex);for(let m=0;m<h.length;m++){const t=m*c-c*(h.length-1)/2,a=e.append("text").attr("x",n).attr("y",i).style("text-anchor","start").style("font-size",c).style("font-weight",d).style("font-family",u);a.append("tspan").attr("x",n).attr("dy",t).text(h[m]),a.attr("y",i+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(a,o)}}function n(t,n,i,a,s,o,l,c){const u=n.append("switch"),d=u.append("foreignObject").attr("x",i).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,u,i,a,0,o,l,c),r(d,l)}function r(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),Cu={drawRect:fu,drawText:xu,drawLabel:Mu,drawActor:function(t,e,n,r){switch(e.type){case"actor":return function(t,e,n,r){const i=e.x+e.width/2,a=e.y+80;r||(Lu++,t.append("line").attr("id","actor"+Lu).attr("x1",i).attr("y1",a).attr("x2",i).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));const s=t.append("g");s.attr("class","actor-man");const o=Du();o.x=e.x,o.y=e.y,o.fill="#eaeaea",o.width=e.width,o.height=e.height,o.class="actor",o.rx=3,o.ry=3,s.append("line").attr("id","actor-man-torso"+Lu).attr("x1",i).attr("y1",e.y+25).attr("x2",i).attr("y2",e.y+45),s.append("line").attr("id","actor-man-arms"+Lu).attr("x1",i-18).attr("y1",e.y+33).attr("x2",i+18).attr("y2",e.y+33),s.append("line").attr("x1",i-18).attr("y1",e.y+60).attr("x2",i).attr("y2",e.y+45),s.append("line").attr("x1",i).attr("y1",e.y+45).attr("x2",i+16).attr("y2",e.y+60);const l=s.append("circle");l.attr("cx",e.x+e.width/2),l.attr("cy",e.y+10),l.attr("r",15),l.attr("width",e.width),l.attr("height",e.height);const c=s.node().getBBox();return e.height=c.height,Yu(n)(e.description,s,o.x,o.y+35,o.width,o.height,{class:"actor"},n),e.height}(t,e,n,r);case"participant":return function(t,e,n,r){const i=e.x+e.width/2,a=e.y+5,s=t.append("g");var o=s;r||(Lu++,o.append("line").attr("id","actor"+Lu).attr("x1",i).attr("y1",a).attr("x2",i).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"),o=s.append("g"),e.actorCnt=Lu,null!=e.links&&(o.attr("id","root-"+Lu),yu("#root-"+Lu,Lu)));const l=Du();var c="actor";null!=e.properties&&e.properties.class?c=e.properties.class:l.fill="#eaeaea",l.x=e.x,l.y=e.y,l.width=e.width,l.height=e.height,l.class=c,l.rx=3,l.ry=3;const u=fu(o,l);if(e.rectData=l,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?bu(o,l.x+l.width-20,l.y+10,t.substr(1)):gu(o,l.x+l.width-20,l.y+10,t)}Yu(n)(e.description,o,l.x,l.y,l.width,l.height,{class:"actor"},n);let d=e.height;if(u.node){const t=u.node().getBBox();e.height=t.height,d=t.height}return d}(t,e,n,r)}},drawBox:function(t,e,n){const r=t.append("g");Tu(r,e),e.name&&Yu(n)(e.name,r,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},n),r.lower()},drawPopup:function(t,e,n,r,i){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const a=e.links,o=e.actorCnt,l=e.rectData;var c="none";i&&(c="block !important");const u=t.append("g");u.attr("id","actor"+o+"_popup"),u.attr("class","actorPopupMenu"),u.attr("display",c),yu("#actor"+o+"_popup",o);var d="";void 0!==l.class&&(d=" "+l.class);let h=l.width>n?l.width:n;const m=u.append("rect");if(m.attr("class","actorPopupMenuPanel"+d),m.attr("x",l.x),m.attr("y",l.height),m.attr("fill",l.fill),m.attr("stroke",l.stroke),m.attr("width",h),m.attr("height",l.height),m.attr("rx",l.rx),m.attr("ry",l.ry),null!=a){var _=20;for(let t in a){var p=u.append("a"),f=(0,s.N)(a[t]);p.attr("xlink:href",f),p.attr("target","_blank"),Eu(r)(t,p,l.x+10,l.height+_,h,20,{class:"actor"},r),_+=30}}return m.attr("height",_),{height:l.height+_,width:h}},drawImage:gu,drawEmbeddedImage:bu,anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,n,r,i){const a=Du(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=n-e.starty,fu(s,a)},drawLoop:function(t,e,n,r){const{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:o,messageFontFamily:l,messageFontSize:c,messageFontWeight:u}=r,d=t.append("g"),h=function(t,e,n,r){return d.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",r).attr("class","loopLine")};h(e.startx,e.starty,e.stopx,e.starty),h(e.stopx,e.starty,e.stopx,e.stopy),h(e.startx,e.stopy,e.stopx,e.stopy),h(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){h(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let m=Su();m.text=n,m.x=e.startx,m.y=e.starty,m.fontFamily=l,m.fontSize=c,m.fontWeight=u,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=o||50,m.height=s||20,m.textMargin=a,m.class="labelText",Mu(d,m),m=Su(),m.text=e.title,m.x=e.startx+o/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=l,m.fontSize=c,m.fontWeight=u,m.wrap=!0;let _=xu(d,m);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,n){if(t.message){m.text=t.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[n].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=l,m.fontSize=c,m.fontWeight=u,m.wrap=e.wrap,_=xu(d,m);let r=Math.round(_.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[n].height+=r-(i+a)}})),e.height=Math.round(e.stopy-e.starty),d},drawBackgroundRect:Tu,insertArrowHead:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},insertArrowFilledHead:function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},insertSequenceNumber:function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},insertArrowCrossHead:function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},insertDatabaseIcon:function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},insertComputerIcon:function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},insertClockIcon:function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},getTextObj:Su,getNoteRect:Du,popupMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'block'; }"},popdownMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'none'; }"},fixLifeLineHeights:wu,sanitizeUrl:s.N};let Au={};const Ou={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,ju(ar())},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){const i=this;let a=0;function s(s){return function(o){a++;const l=i.sequenceItems.length-a+1;i.updateVal(o,"starty",e-l*Au.boxMargin,Math.min),i.updateVal(o,"stopy",r+l*Au.boxMargin,Math.max),i.updateVal(Ou.data,"startx",t-l*Au.boxMargin,Math.min),i.updateVal(Ou.data,"stopx",n+l*Au.boxMargin,Math.max),"activation"!==s&&(i.updateVal(o,"startx",t-l*Au.boxMargin,Math.min),i.updateVal(o,"stopx",n+l*Au.boxMargin,Math.max),i.updateVal(Ou.data,"starty",e-l*Au.boxMargin,Math.min),i.updateVal(Ou.data,"stopy",r+l*Au.boxMargin,Math.max))}}this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},insert:function(t,e,n,r){const i=Math.min(t,n),a=Math.max(t,n),s=Math.min(e,r),o=Math.max(e,r);this.updateVal(Ou.data,"startx",i,Math.min),this.updateVal(Ou.data,"starty",s,Math.min),this.updateVal(Ou.data,"stopx",a,Math.max),this.updateVal(Ou.data,"stopy",o,Math.max),this.updateBounds(i,s,a,o)},newActivation:function(t,e,n){const r=n[t.from.actor],i=Ru(t.from.actor).length||0,a=r.x+r.width/2+(i-1)*Au.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Au.activationWidth,stopy:void 0,actor:t.from.actor,anchored:Cu.anchorElement(e)})},endActivation:function(t){const e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:Ou.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},Nu=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),Bu=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),Fu=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});const Iu=function(t,e,n,r,i,a,s){if(!0===i.hideUnusedParticipants){const t=new Set;a.forEach((e=>{t.add(e.from),t.add(e.to)})),n=n.filter((e=>t.has(e)))}let o,l=0,c=0,u=0;for(const d of n){const n=e[d],i=n.box;o&&o!=i&&(s||Ou.models.addBox(o),c+=Au.boxMargin+o.margin),i&&i!=o&&(s||(i.x=l+c,i.y=r),c+=i.margin),n.width=n.width||Au.width,n.height=Math.max(n.height||Au.height,Au.height),n.margin=n.margin||Au.actorMargin,n.x=l+c,n.y=Ou.getVerticalPos();const a=Cu.drawActor(t,n,Au,s);u=Math.max(u,a),Ou.insert(n.x,r,n.x+n.width,n.height),l+=n.width+c,n.box&&(n.box.width=l+i.margin-n.box.x),c=n.margin,o=n.box,Ou.models.addActor(n)}o&&!s&&Ou.models.addBox(o),Ou.bumpVerticalPos(u)},Pu=function(t,e,n,r){let i=0,a=0;for(const s of n){const n=e[s],o=Zu(n),l=Cu.drawPopup(t,n,o,Au,Au.forceMenus,r);l.height>i&&(i=l.height),l.width+n.x>a&&(a=l.width+n.x)}return{maxHeight:i,maxWidth:a}},ju=function(t){Sn(Au,t),t.fontFamily&&(Au.actorFontFamily=Au.noteFontFamily=Au.messageFontFamily=t.fontFamily),t.fontSize&&(Au.actorFontSize=Au.noteFontSize=Au.messageFontSize=t.fontSize),t.fontWeight&&(Au.actorFontWeight=Au.noteFontWeight=Au.messageFontWeight=t.fontWeight)},Ru=function(t){return Ou.activations.filter((function(e){return e.actor===t}))},Hu=function(t,e){const n=e[t],r=Ru(t);return[r.reduce((function(t,e){return Math.min(t,e.startx)}),n.x+n.width/2),r.reduce((function(t,e){return Math.max(t,e.stopx)}),n.x+n.width/2)]};function $u(t,e,n,r,i){Ou.bumpVerticalPos(n);let a=r;if(e.id&&e.message&&t[e.id]){const n=t[e.id].width,i=Nu(Au);e.message=Gn.wrapLabel(`[${e.message}]`,n-2*Au.wrapPadding,i),e.width=n,e.wrap=!0;const s=Gn.calculateTextDimensions(e.message,i),o=Math.max(s.height,Au.labelBoxHeight);a=r+o,St.debug(`${o} - ${e.message}`)}i(e),Ou.bumpVerticalPos(a)}const Zu=function(t){let e=0;const n=Fu(Au);for(const r in t.links){const t=Gn.calculateTextDimensions(r,n).width+2*Au.wrapPadding+2*Au.boxMargin;e<t&&(e=t)}return e};const Wu=function(t,e,n,r){const i={},a=[];let s,o,l;return t.forEach((function(t){switch(t.id=Gn.random({length:10}),t.type){case r.db.LINETYPE.LOOP_START:case r.db.LINETYPE.ALT_START:case r.db.LINETYPE.OPT_START:case r.db.LINETYPE.PAR_START:case r.db.LINETYPE.CRITICAL_START:case r.db.LINETYPE.BREAK_START:a.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case r.db.LINETYPE.ALT_ELSE:case r.db.LINETYPE.PAR_AND:case r.db.LINETYPE.CRITICAL_OPTION:t.message&&(s=a.pop(),i[s.id]=s,i[t.id]=s,a.push(s));break;case r.db.LINETYPE.LOOP_END:case r.db.LINETYPE.ALT_END:case r.db.LINETYPE.OPT_END:case r.db.LINETYPE.PAR_END:case r.db.LINETYPE.CRITICAL_END:case r.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case r.db.LINETYPE.ACTIVE_START:{const n=e[t.from?t.from.actor:t.to.actor],r=Ru(t.from?t.from.actor:t.to.actor).length,i=n.x+n.width/2+(r-1)*Au.activationWidth/2,a={startx:i,stopx:i+Au.activationWidth,actor:t.from.actor,enabled:!0};Ou.activations.push(a)}break;case r.db.LINETYPE.ACTIVE_END:{const e=Ou.activations.map((t=>t.actor)).lastIndexOf(t.from.actor);delete Ou.activations.splice(e,1)[0]}}void 0!==t.placement?(o=function(t,e,n){const r=e[t.from].x,i=e[t.to].x,a=t.wrap&&t.message;let s=Gn.calculateTextDimensions(a?Gn.wrapLabel(t.message,Au.width,Bu(Au)):t.message,Bu(Au));const o={width:a?Au.width:Math.max(Au.width,s.width+2*Au.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===n.db.PLACEMENT.RIGHTOF?(o.width=a?Math.max(Au.width,s.width):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*Au.noteMargin),o.startx=r+(e[t.from].width+Au.actorMargin)/2):t.placement===n.db.PLACEMENT.LEFTOF?(o.width=a?Math.max(Au.width,s.width+2*Au.noteMargin):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*Au.noteMargin),o.startx=r-o.width+(e[t.from].width-Au.actorMargin)/2):t.to===t.from?(s=Gn.calculateTextDimensions(a?Gn.wrapLabel(t.message,Math.max(Au.width,e[t.from].width),Bu(Au)):t.message,Bu(Au)),o.width=a?Math.max(Au.width,e[t.from].width):Math.max(e[t.from].width,Au.width,s.width+2*Au.noteMargin),o.startx=r+(e[t.from].width-o.width)/2):(o.width=Math.abs(r+e[t.from].width/2-(i+e[t.to].width/2))+Au.actorMargin,o.startx=r<i?r+e[t.from].width/2-Au.actorMargin/2:i+e[t.to].width/2-Au.actorMargin/2),a&&(o.message=Gn.wrapLabel(t.message,o.width-2*Au.wrapPadding,Bu(Au))),St.debug(`NM:[${o.startx},${o.stopx},${o.starty},${o.stopy}:${o.width},${o.height}=${t.message}]`),o}(t,e,r),t.noteModel=o,a.forEach((t=>{s=t,s.from=Math.min(s.from,o.startx),s.to=Math.max(s.to,o.startx+o.width),s.width=Math.max(s.width,Math.abs(s.from-s.to))-Au.labelBoxWidth}))):(l=function(t,e,n){let r=!1;if([n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(r=!0),!r)return{};const i=Hu(t.from,e),a=Hu(t.to,e),s=i[0]<=a[0]?1:0,o=i[0]<a[0]?0:1,l=[...i,...a],c=Math.abs(a[o]-i[s]);t.wrap&&t.message&&(t.message=Gn.wrapLabel(t.message,Math.max(c+2*Au.wrapPadding,Au.width),Nu(Au)));const u=Gn.calculateTextDimensions(t.message,Nu(Au));return{width:Math.max(t.wrap?0:u.width+2*Au.wrapPadding,c+2*Au.wrapPadding,Au.width),height:0,startx:i[s],stopx:a[o],starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,l),toBounds:Math.max.apply(null,l)}}(t,e,r),t.msgModel=l,l.startx&&l.stopx&&a.length>0&&a.forEach((n=>{if(s=n,l.startx===l.stopx){const n=e[t.from],r=e[t.to];s.from=Math.min(n.x-l.width/2,n.x-n.width/2,s.from),s.to=Math.max(r.x+l.width/2,r.x+n.width/2,s.to),s.width=Math.max(s.width,Math.abs(s.to-s.from))-Au.labelBoxWidth}else s.from=Math.min(l.startx,s.from),s.to=Math.max(l.stopx,s.to),s.width=Math.max(s.width,l.width)-Au.labelBoxWidth})))})),Ou.activations=[],St.debug("Loop type widths:",i),i},zu={bounds:Ou,drawActors:Iu,drawActorsPopup:Pu,setConf:ju,draw:function(t,e,n,r){const{securityLevel:i,sequence:a}=ar();let s;Au=a,r.db.clear(),r.parser.parse(t),"sandbox"===i&&(s=(0,o.Ys)("#i"+e));const l="sandbox"===i?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body"),c="sandbox"===i?s.nodes()[0].contentDocument:document;Ou.init(),St.debug(r.db);const u="sandbox"===i?l.select(`[id="${e}"]`):(0,o.Ys)(`[id="${e}"]`),d=r.db.getActors(),h=r.db.getBoxes(),m=r.db.getActorKeys(),_=r.db.getMessages(),p=r.db.getDiagramTitle(),f=r.db.hasAtLeastOneBox(),y=r.db.hasAtLeastOneBoxWithTitle(),g=function(t,e,n){const r={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){const i=t[e.to];if(e.placement===n.db.PLACEMENT.LEFTOF&&!i.prevActor)return;if(e.placement===n.db.PLACEMENT.RIGHTOF&&!i.nextActor)return;const a=void 0!==e.placement,s=!a,o=a?Bu(Au):Nu(Au),l=e.wrap?Gn.wrapLabel(e.message,Au.width-2*Au.wrapPadding,o):e.message,c=Gn.calculateTextDimensions(l,o).width+2*Au.wrapPadding;s&&e.from===i.nextActor?r[e.to]=Math.max(r[e.to]||0,c):s&&e.from===i.prevActor?r[e.from]=Math.max(r[e.from]||0,c):s&&e.from===e.to?(r[e.from]=Math.max(r[e.from]||0,c/2),r[e.to]=Math.max(r[e.to]||0,c/2)):e.placement===n.db.PLACEMENT.RIGHTOF?r[e.from]=Math.max(r[e.from]||0,c):e.placement===n.db.PLACEMENT.LEFTOF?r[i.prevActor]=Math.max(r[i.prevActor]||0,c):e.placement===n.db.PLACEMENT.OVER&&(i.prevActor&&(r[i.prevActor]=Math.max(r[i.prevActor]||0,c/2)),i.nextActor&&(r[e.from]=Math.max(r[e.from]||0,c/2)))}})),St.debug("maxMessageWidthPerActor:",r),r}(d,_,r);Au.height=function(t,e,n){let r=0;Object.keys(t).forEach((e=>{const n=t[e];n.wrap&&(n.description=Gn.wrapLabel(n.description,Au.width-2*Au.wrapPadding,Fu(Au)));const i=Gn.calculateTextDimensions(n.description,Fu(Au));n.width=n.wrap?Au.width:Math.max(Au.width,i.width+2*Au.wrapPadding),n.height=n.wrap?Math.max(i.height,Au.height):Au.height,r=Math.max(r,n.height)}));for(const a in e){const n=t[a];if(!n)continue;const r=t[n.nextActor];if(!r){const t=e[a]+Au.actorMargin-n.width/2;n.margin=Math.max(t,Au.actorMargin);continue}const i=e[a]+Au.actorMargin-n.width/2-r.width/2;n.margin=Math.max(i,Au.actorMargin)}let i=0;return n.forEach((e=>{const n=Nu(Au);let r=e.actorKeys.reduce(((e,n)=>e+(t[n].width+(t[n].margin||0))),0);r-=2*Au.boxTextMargin,e.wrap&&(e.name=Gn.wrapLabel(e.name,r-2*Au.wrapPadding,n));const a=Gn.calculateTextDimensions(e.name,n);i=Math.max(a.height,i);const s=Math.max(r,a.width+2*Au.wrapPadding);if(e.margin=Au.boxTextMargin,r<s){const t=(s-r)/2;e.margin+=t}})),n.forEach((t=>t.textMaxHeight=i)),Math.max(r,Au.height)}(d,g,h),Cu.insertComputerIcon(u),Cu.insertDatabaseIcon(u),Cu.insertClockIcon(u),f&&(Ou.bumpVerticalPos(Au.boxMargin),y&&Ou.bumpVerticalPos(h[0].textMaxHeight)),Iu(u,d,m,0,Au,_,!1);const b=Wu(_,d,g,r);Cu.insertArrowHead(u),Cu.insertArrowCrossHead(u),Cu.insertArrowFilledHead(u),Cu.insertSequenceNumber(u);let k=1,v=1;const x=[];_.forEach((function(t){let e,n,i;switch(t.type){case r.db.LINETYPE.NOTE:n=t.noteModel,function(t,e){Ou.bumpVerticalPos(Au.boxMargin),e.height=Au.boxMargin,e.starty=Ou.getVerticalPos();const n=Cu.getNoteRect();n.x=e.startx,n.y=e.starty,n.width=e.width||Au.width,n.class="note";const r=t.append("g"),i=Cu.drawRect(r,n),a=Cu.getTextObj();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Au.noteFontFamily,a.fontSize=Au.noteFontSize,a.fontWeight=Au.noteFontWeight,a.anchor=Au.noteAlign,a.textMargin=Au.noteMargin,a.valign="center";const s=xu(r,a),o=Math.round(s.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));i.attr("height",o+2*Au.noteMargin),e.height+=o+2*Au.noteMargin,Ou.bumpVerticalPos(o+2*Au.noteMargin),e.stopy=e.starty+o+2*Au.noteMargin,e.stopx=e.startx+n.width,Ou.insert(e.startx,e.starty,e.stopx,e.stopy),Ou.models.addNote(e)}(u,n);break;case r.db.LINETYPE.ACTIVE_START:Ou.newActivation(t,u,d);break;case r.db.LINETYPE.ACTIVE_END:!function(t,e){const n=Ou.endActivation(t);n.starty+18>e&&(n.starty=e-6,e+=12),Cu.drawActivation(u,n,e,Au,Ru(t.from.actor).length),Ou.insert(n.startx,e-10,n.stopx,e)}(t,Ou.getVerticalPos());break;case r.db.LINETYPE.LOOP_START:$u(b,t,Au.boxMargin,Au.boxMargin+Au.boxTextMargin,(t=>Ou.newLoop(t)));break;case r.db.LINETYPE.LOOP_END:e=Ou.endLoop(),Cu.drawLoop(u,e,"loop",Au),Ou.bumpVerticalPos(e.stopy-Ou.getVerticalPos()),Ou.models.addLoop(e);break;case r.db.LINETYPE.RECT_START:$u(b,t,Au.boxMargin,Au.boxMargin,(t=>Ou.newLoop(void 0,t.message)));break;case r.db.LINETYPE.RECT_END:e=Ou.endLoop(),Cu.drawBackgroundRect(u,e),Ou.models.addLoop(e),Ou.bumpVerticalPos(e.stopy-Ou.getVerticalPos());break;case r.db.LINETYPE.OPT_START:$u(b,t,Au.boxMargin,Au.boxMargin+Au.boxTextMargin,(t=>Ou.newLoop(t)));break;case r.db.LINETYPE.OPT_END:e=Ou.endLoop(),Cu.drawLoop(u,e,"opt",Au),Ou.bumpVerticalPos(e.stopy-Ou.getVerticalPos()),Ou.models.addLoop(e);break;case r.db.LINETYPE.ALT_START:$u(b,t,Au.boxMargin,Au.boxMargin+Au.boxTextMargin,(t=>Ou.newLoop(t)));break;case r.db.LINETYPE.ALT_ELSE:$u(b,t,Au.boxMargin+Au.boxTextMargin,Au.boxMargin,(t=>Ou.addSectionToLoop(t)));break;case r.db.LINETYPE.ALT_END:e=Ou.endLoop(),Cu.drawLoop(u,e,"alt",Au),Ou.bumpVerticalPos(e.stopy-Ou.getVerticalPos()),Ou.models.addLoop(e);break;case r.db.LINETYPE.PAR_START:$u(b,t,Au.boxMargin,Au.boxMargin+Au.boxTextMargin,(t=>Ou.newLoop(t)));break;case r.db.LINETYPE.PAR_AND:$u(b,t,Au.boxMargin+Au.boxTextMargin,Au.boxMargin,(t=>Ou.addSectionToLoop(t)));break;case r.db.LINETYPE.PAR_END:e=Ou.endLoop(),Cu.drawLoop(u,e,"par",Au),Ou.bumpVerticalPos(e.stopy-Ou.getVerticalPos()),Ou.models.addLoop(e);break;case r.db.LINETYPE.AUTONUMBER:k=t.message.start||k,v=t.message.step||v,t.message.visible?r.db.enableSequenceNumbers():r.db.disableSequenceNumbers();break;case r.db.LINETYPE.CRITICAL_START:$u(b,t,Au.boxMargin,Au.boxMargin+Au.boxTextMargin,(t=>Ou.newLoop(t)));break;case r.db.LINETYPE.CRITICAL_OPTION:$u(b,t,Au.boxMargin+Au.boxTextMargin,Au.boxMargin,(t=>Ou.addSectionToLoop(t)));break;case r.db.LINETYPE.CRITICAL_END:e=Ou.endLoop(),Cu.drawLoop(u,e,"critical",Au),Ou.bumpVerticalPos(e.stopy-Ou.getVerticalPos()),Ou.models.addLoop(e);break;case r.db.LINETYPE.BREAK_START:$u(b,t,Au.boxMargin,Au.boxMargin+Au.boxTextMargin,(t=>Ou.newLoop(t)));break;case r.db.LINETYPE.BREAK_END:e=Ou.endLoop(),Cu.drawLoop(u,e,"break",Au),Ou.bumpVerticalPos(e.stopy-Ou.getVerticalPos()),Ou.models.addLoop(e);break;default:try{i=t.msgModel,i.starty=Ou.getVerticalPos(),i.sequenceIndex=k,i.sequenceVisible=r.db.showSequenceNumbers();const e=function(t,e){Ou.bumpVerticalPos(10);const{startx:n,stopx:r,message:i}=e,a=Pt.splitBreaks(i).length,s=Gn.calculateTextDimensions(i,Nu(Au)),o=s.height/a;let l;e.height+=o,Ou.bumpVerticalPos(o);let c=s.height-10;const u=s.width;if(n===r){l=Ou.getVerticalPos()+c,Au.rightAngles||(c+=Au.boxMargin,l=Ou.getVerticalPos()+c),c+=30;const t=Math.max(u/2,Au.width/2);Ou.insert(n-t,Ou.getVerticalPos()-10+c,r+t,Ou.getVerticalPos()+30+c)}else c+=Au.boxMargin,l=Ou.getVerticalPos()+c,Ou.insert(n,l-10,r,l);return Ou.bumpVerticalPos(c),e.height+=c,e.stopy=e.starty+e.height,Ou.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),l}(0,i);x.push({messageModel:i,lineStartY:e}),Ou.models.addMessage(i)}catch(a){St.error("error while drawing message",a)}}[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(k+=v)})),x.forEach((t=>function(t,e,n,r){const{startx:i,stopx:a,starty:s,message:o,type:l,sequenceIndex:c,sequenceVisible:u}=e,d=Gn.calculateTextDimensions(o,Nu(Au)),h=Cu.getTextObj();h.x=i,h.y=s+10,h.width=a-i,h.class="messageText",h.dy="1em",h.text=o,h.fontFamily=Au.messageFontFamily,h.fontSize=Au.messageFontSize,h.fontWeight=Au.messageFontWeight,h.anchor=Au.messageAlign,h.valign="center",h.textMargin=Au.wrapPadding,h.tspan=!1,xu(t,h);const m=d.width;let _;i===a?_=Au.rightAngles?t.append("path").attr("d",`M ${i},${n} H ${i+Math.max(Au.width/2,m/2)} V ${n+25} H ${i}`):t.append("path").attr("d","M "+i+","+n+" C "+(i+60)+","+(n-10)+" "+(i+60)+","+(n+30)+" "+i+","+(n+20)):(_=t.append("line"),_.attr("x1",i),_.attr("y1",n),_.attr("x2",a),_.attr("y2",n)),l===r.db.LINETYPE.DOTTED||l===r.db.LINETYPE.DOTTED_CROSS||l===r.db.LINETYPE.DOTTED_POINT||l===r.db.LINETYPE.DOTTED_OPEN?(_.style("stroke-dasharray","3, 3"),_.attr("class","messageLine1")):_.attr("class","messageLine0");let p="";Au.arrowMarkerAbsolute&&(p=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,p=p.replace(/\(/g,"\\("),p=p.replace(/\)/g,"\\)")),_.attr("stroke-width",2),_.attr("stroke","none"),_.style("fill","none"),l!==r.db.LINETYPE.SOLID&&l!==r.db.LINETYPE.DOTTED||_.attr("marker-end","url("+p+"#arrowhead)"),l!==r.db.LINETYPE.SOLID_POINT&&l!==r.db.LINETYPE.DOTTED_POINT||_.attr("marker-end","url("+p+"#filled-head)"),l!==r.db.LINETYPE.SOLID_CROSS&&l!==r.db.LINETYPE.DOTTED_CROSS||_.attr("marker-end","url("+p+"#crosshead)"),(u||Au.showSequenceNumbers)&&(_.attr("marker-start","url("+p+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",n+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(c))}(u,t.messageModel,t.lineStartY,r))),Au.mirrorActors&&(Ou.bumpVerticalPos(2*Au.boxMargin),Iu(u,d,m,Ou.getVerticalPos(),Au,_,!0),Ou.bumpVerticalPos(Au.boxMargin),wu(u,Ou.getVerticalPos())),Ou.models.boxes.forEach((function(t){t.height=Ou.getVerticalPos()-t.y,Ou.insert(t.x,t.y,t.x+t.width,t.height),t.startx=t.x,t.starty=t.y,t.stopx=t.startx+t.width,t.stopy=t.starty+t.height,t.stroke="rgb(0,0,0, 0.5)",Cu.drawBox(u,t,Au)})),f&&Ou.bumpVerticalPos(Au.boxMargin);const M=Pu(u,d,m,c),{bounds:L}=Ou.getBounds();St.debug("For line height fix Querying: #"+e+" .actor-line");(0,o.td_)("#"+e+" .actor-line").attr("y2",L.stopy);let w=L.stopy-L.starty;w<M.maxHeight&&(w=M.maxHeight);let T=w+2*Au.diagramMarginY;Au.mirrorActors&&(T=T-Au.boxMargin+Au.bottomMarginAdj);let S=L.stopx-L.startx;S<M.maxWidth&&(S=M.maxWidth);const D=S+2*Au.diagramMarginX;p&&u.append("text").text(p).attr("x",(L.stopx-L.startx)/2-2*Au.diagramMarginX).attr("y",-25),hr(u,T,D,Au.useMaxWidth);const Y=p?40:0;u.attr("viewBox",L.startx-Au.diagramMarginX+" -"+(Au.diagramMarginY+Y)+" "+D+" "+(T+Y)),St.debug("models:",Ou.models)}};var Uu=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,3],i=[1,5],a=[1,7],s=[2,5],o=[1,15],l=[1,17],c=[1,21],u=[1,22],d=[1,23],h=[1,24],m=[1,37],_=[1,25],p=[1,26],f=[1,27],y=[1,28],g=[1,29],b=[1,32],k=[1,33],v=[1,34],x=[1,35],M=[1,36],L=[1,39],w=[1,40],T=[1,41],S=[1,42],D=[1,38],Y=[1,45],E=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],C=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],A=[1,4,5,7,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],O=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],N={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,classDefStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"--\x3e":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,class:42,CLASSENTITY_IDS:43,STYLECLASS:44,openDirective:45,typeDirective:46,closeDirective:47,":":48,argDirective:49,direction_tb:50,direction_bt:51,direction_rl:52,direction_lr:53,eol:54,";":55,EDGE_STATE:56,STYLE_SEPARATOR:57,left_of:58,right_of:59,open_directive:60,type_directive:61,arg_directive:62,close_directive:63,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",14:"DESCR",15:"--\x3e",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"class",43:"CLASSENTITY_IDS",44:"STYLECLASS",48:":",50:"direction_tb",51:"direction_bt",52:"direction_rl",53:"direction_lr",55:";",56:"EDGE_STATE",57:"STYLE_SEPARATOR",58:"left_of",59:"right_of",60:"open_directive",61:"type_directive",62:"arg_directive",63:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[11,3],[11,3],[12,3],[6,3],[6,5],[32,1],[32,1],[32,1],[32,1],[54,1],[54,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1],[45,1],[46,1],[49,1],[47,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 4:return r.setRootDoc(a[o]),a[o];case 5:this.$=[];break;case 6:"nl"!=a[o]&&(a[o-1].push(a[o]),this.$=a[o-1]);break;case 7:case 8:case 12:this.$=a[o];break;case 9:this.$="nl";break;case 13:const t=a[o-1];t.description=r.trimColon(a[o]),this.$=t;break;case 14:this.$={stmt:"relation",state1:a[o-2],state2:a[o]};break;case 15:const e=r.trimColon(a[o]);this.$={stmt:"relation",state1:a[o-3],state2:a[o-1],description:e};break;case 19:this.$={stmt:"state",id:a[o-3],type:"default",description:"",doc:a[o-1]};break;case 20:var l=a[o],c=a[o-2].trim();if(a[o].match(":")){var u=a[o].split(":");l=u[0],c=[c,u[1]]}this.$={stmt:"state",id:l,type:"default",description:c};break;case 21:this.$={stmt:"state",id:a[o-3],type:"default",description:a[o-5],doc:a[o-1]};break;case 22:this.$={stmt:"state",id:a[o],type:"fork"};break;case 23:this.$={stmt:"state",id:a[o],type:"join"};break;case 24:this.$={stmt:"state",id:a[o],type:"choice"};break;case 25:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:a[o-1].trim(),note:{position:a[o-2].trim(),text:a[o].trim()}};break;case 30:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 31:case 32:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 33:case 34:this.$={stmt:"classDef",id:a[o-1].trim(),classes:a[o].trim()};break;case 35:this.$={stmt:"applyClass",id:a[o-1].trim(),styleClass:a[o].trim()};break;case 38:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:a[o].trim(),type:"default",description:""};break;case 46:case 47:this.$={stmt:"state",id:a[o-2].trim(),classes:[a[o].trim()],type:"default",description:""};break;case 50:r.parseDirective("%%{","open_directive");break;case 51:r.parseDirective(a[o],"type_directive");break;case 52:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 53:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:n,5:r,6:4,7:i,45:6,60:a},{1:[3]},{3:8,4:n,5:r,6:4,7:i,45:6,60:a},{3:9,4:n,5:r,6:4,7:i,45:6,60:a},{3:10,4:n,5:r,6:4,7:i,45:6,60:a},e([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],s,{8:11}),{46:12,61:[1,13]},{61:[2,50]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:l,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:u,19:d,22:h,24:m,25:_,26:p,27:f,28:y,29:g,32:31,33:b,35:k,37:v,38:x,42:M,45:6,50:L,51:w,52:T,53:S,56:D,60:a},{47:43,48:[1,44],63:Y},e([48,63],[2,51]),e(E,[2,6]),{6:30,10:46,11:18,12:19,13:20,16:c,17:u,19:d,22:h,24:m,25:_,26:p,27:f,28:y,29:g,32:31,33:b,35:k,37:v,38:x,42:M,45:6,50:L,51:w,52:T,53:S,56:D,60:a},e(E,[2,8]),e(E,[2,9]),e(E,[2,10]),e(E,[2,11]),e(E,[2,12],{14:[1,47],15:[1,48]}),e(E,[2,16]),{18:[1,49]},e(E,[2,18],{20:[1,50]}),{23:[1,51]},e(E,[2,22]),e(E,[2,23]),e(E,[2,24]),e(E,[2,25]),{30:52,31:[1,53],58:[1,54],59:[1,55]},e(E,[2,28]),e(E,[2,29]),{34:[1,56]},{36:[1,57]},e(E,[2,32]),{39:[1,58],41:[1,59]},{43:[1,60]},e(C,[2,44],{57:[1,61]}),e(C,[2,45],{57:[1,62]}),e(E,[2,38]),e(E,[2,39]),e(E,[2,40]),e(E,[2,41]),e(A,[2,36]),{49:63,62:[1,64]},e(A,[2,53]),e(E,[2,7]),e(E,[2,13]),{13:65,24:m,56:D},e(E,[2,17]),e(O,s,{8:66}),{24:[1,67]},{24:[1,68]},{23:[1,69]},{24:[2,48]},{24:[2,49]},e(E,[2,30]),e(E,[2,31]),{40:[1,70]},{40:[1,71]},{44:[1,72]},{24:[1,73]},{24:[1,74]},{47:75,63:Y},{63:[2,52]},e(E,[2,14],{14:[1,76]}),{4:o,5:l,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:u,19:d,21:[1,77],22:h,24:m,25:_,26:p,27:f,28:y,29:g,32:31,33:b,35:k,37:v,38:x,42:M,45:6,50:L,51:w,52:T,53:S,56:D,60:a},e(E,[2,20],{20:[1,78]}),{31:[1,79]},{24:[1,80]},e(E,[2,33]),e(E,[2,34]),e(E,[2,35]),e(C,[2,46]),e(C,[2,47]),e(A,[2,37]),e(E,[2,15]),e(E,[2,19]),e(O,s,{8:81}),e(E,[2,26]),e(E,[2,27]),{4:o,5:l,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:u,19:d,21:[1,82],22:h,24:m,25:_,26:p,27:f,28:y,29:g,32:31,33:b,35:k,37:v,38:x,42:M,45:6,50:L,51:w,52:T,53:S,56:D,60:a},e(E,[2,21])],defaultActions:{7:[2,50],8:[2,1],9:[2,2],10:[2,3],54:[2,48],55:[2,49],64:[2,52]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},B=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){switch(n){case 0:return 41;case 1:case 44:return 50;case 2:case 45:return 51;case 3:case 46:return 52;case 4:case 47:return 53;case 5:return this.begin("open_directive"),60;case 6:return this.begin("type_directive"),61;case 7:return this.popState(),this.begin("arg_directive"),48;case 8:return this.popState(),this.popState(),63;case 9:return 62;case 10:case 11:case 13:case 14:case 15:case 16:case 56:case 58:case 64:break;case 12:case 79:return 5;case 17:case 34:return this.pushState("SCALE"),17;case 18:case 35:return 18;case 19:case 25:case 36:case 51:case 54:this.popState();break;case 20:return this.begin("acc_title"),33;case 21:return this.popState(),"acc_title_value";case 22:return this.begin("acc_descr"),35;case 23:return this.popState(),"acc_descr_value";case 24:this.begin("acc_descr_multiline");break;case 26:return"acc_descr_multiline_value";case 27:return this.pushState("CLASSDEF"),38;case 28:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 29:return this.popState(),this.pushState("CLASSDEFID"),39;case 30:return this.popState(),40;case 31:return this.pushState("CLASS"),42;case 32:return this.popState(),this.pushState("CLASS_STYLE"),43;case 33:return this.popState(),44;case 37:this.pushState("STATE");break;case 38:case 41:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 39:case 42:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),26;case 40:case 43:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),27;case 48:this.pushState("STATE_STRING");break;case 49:return this.pushState("STATE_ID"),"AS";case 50:case 66:return this.popState(),"ID";case 52:return"STATE_DESCR";case 53:return 19;case 55:return this.popState(),this.pushState("struct"),20;case 57:return this.popState(),21;case 59:return this.begin("NOTE"),29;case 60:return this.popState(),this.pushState("NOTE_ID"),58;case 61:return this.popState(),this.pushState("NOTE_ID"),59;case 62:this.popState(),this.pushState("FLOATING_NOTE");break;case 63:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 65:return"NOTE_TEXT";case 67:return this.popState(),this.pushState("NOTE_TEXT"),24;case 68:return this.popState(),e.yytext=e.yytext.substr(2).trim(),31;case 69:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),31;case 70:case 71:return 7;case 72:return 16;case 73:return 56;case 74:return 24;case 75:return e.yytext=e.yytext.trim(),14;case 76:return 15;case 77:return 28;case 78:return 57;case 80:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[14,15],inclusive:!1},close_directive:{rules:[14,15],inclusive:!1},arg_directive:{rules:[8,9,14,15],inclusive:!1},type_directive:{rules:[7,8,14,15],inclusive:!1},open_directive:{rules:[6,14,15],inclusive:!1},struct:{rules:[14,15,27,31,37,44,45,46,47,56,57,58,59,73,74,75,76,77],inclusive:!1},FLOATING_NOTE_ID:{rules:[66],inclusive:!1},FLOATING_NOTE:{rules:[63,64,65],inclusive:!1},NOTE_TEXT:{rules:[68,69],inclusive:!1},NOTE_ID:{rules:[67],inclusive:!1},NOTE:{rules:[60,61,62],inclusive:!1},CLASS_STYLE:{rules:[33],inclusive:!1},CLASS:{rules:[32],inclusive:!1},CLASSDEFID:{rules:[30],inclusive:!1},CLASSDEF:{rules:[28,29],inclusive:!1},acc_descr_multiline:{rules:[25,26],inclusive:!1},acc_descr:{rules:[23],inclusive:!1},acc_title:{rules:[21],inclusive:!1},SCALE:{rules:[18,19,35,36],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[50],inclusive:!1},STATE_STRING:{rules:[51,52],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[14,15,38,39,40,41,42,43,48,49,53,54,55],inclusive:!1},ID:{rules:[14,15],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,10,11,12,13,15,16,17,20,22,24,27,31,34,37,55,59,70,71,72,73,74,75,76,78,79,80],inclusive:!0}}},t);function F(){this.yy={}}return N.lexer=B,F.prototype=N,N.Parser=F,new F}();Uu.parser=Uu;const qu=Uu,Vu=(t,e)=>{var n;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.state)?void 0:n.defaultRenderer)&&null!==t.match(/^\s*stateDiagram/)},Gu=(t,e)=>{var n;return null!==t.match(/^\s*stateDiagram-v2/)||!(!t.match(/^\s*stateDiagram/)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.state)?void 0:n.defaultRenderer))},Ju="state",Xu="relation",Ku="default",Qu="divider",td="[*]",ed="start",nd="color",rd="fill";let id="LR",ad=[],sd={};let od={root:{relations:[],states:{},documents:{}}},ld=od.root,cd=0,ud=0;const dd=t=>JSON.parse(JSON.stringify(t)),hd=(t,e,n)=>{if(e.stmt===Xu)hd(t,e.state1,!0),hd(t,e.state2,!1);else if(e.stmt===Ju&&("[*]"===e.id?(e.id=n?t.id+"_start":t.id+"_end",e.start=n):e.id=e.id.trim()),e.doc){const t=[];let n,r=[];for(n=0;n<e.doc.length;n++)if(e.doc[n].type===Qu){const i=dd(e.doc[n]);i.doc=dd(r),t.push(i),r=[]}else r.push(e.doc[n]);if(t.length>0&&r.length>0){const n={stmt:Ju,id:Fn(),type:"divider",doc:dd(r)};t.push(dd(n)),e.doc=t}e.doc.forEach((t=>hd(e,t,!0)))}},md=function(t,e="default",n=null,r=null,i=null,a=null,s=null,o=null){const l=null==t?void 0:t.trim();if(void 0===ld.states[l]?(St.info("Adding state ",l,r),ld.states[l]={id:l,descriptions:[],type:e,doc:n,note:i,classes:[],styles:[],textStyles:[]}):(ld.states[l].doc||(ld.states[l].doc=n),ld.states[l].type||(ld.states[l].type=e)),r&&(St.info("Setting state description",l,r),"string"==typeof r&&bd(l,r.trim()),"object"==typeof r&&r.forEach((t=>bd(l,t.trim())))),i&&(ld.states[l].note=i,ld.states[l].note.text=Pt.sanitizeText(ld.states[l].note.text,ar())),a){St.info("Setting state classes",l,a);("string"==typeof a?[a]:a).forEach((t=>vd(l,t.trim())))}if(s){St.info("Setting state styles",l,s);("string"==typeof s?[s]:s).forEach((t=>xd(l,t.trim())))}if(o){St.info("Setting state styles",l,s);("string"==typeof o?[o]:o).forEach((t=>Md(l,t.trim())))}},_d=function(t){od={root:{relations:[],states:{},documents:{}}},ld=od.root,cd=0,sd={},t||Ar()},pd=function(t){return ld.states[t]};function fd(t=""){let e=t;return t===td&&(cd++,e=`start${cd}`),e}function yd(t="",e="default"){return t===td?ed:e}const gd=function(t,e,n){if("object"==typeof t)!function(t,e,n){let r=fd(t.id.trim()),i=yd(t.id.trim(),t.type),a=fd(e.id.trim()),s=yd(e.id.trim(),e.type);md(r,i,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),md(a,s,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),ld.relations.push({id1:r,id2:a,relationTitle:Pt.sanitizeText(n,ar())})}(t,e,n);else{const r=fd(t.trim()),i=yd(t),a=function(t=""){let e=t;return"[*]"===t&&(cd++,e=`end${cd}`),e}(e.trim()),s=function(t="",e="default"){return"[*]"===t?"end":e}(e);md(r,i),md(a,s),ld.relations.push({id1:r,id2:a,title:Pt.sanitizeText(n,ar())})}},bd=function(t,e){const n=ld.states[t],r=e.startsWith(":")?e.replace(":","").trim():e;n.descriptions.push(Pt.sanitizeText(r,ar()))},kd=function(t,e=""){void 0===sd[t]&&(sd[t]={id:t,styles:[],textStyles:[]});const n=sd[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(nd)){const t=e.replace(rd,"bgFill").replace(nd,rd);n.textStyles.push(t)}n.styles.push(e)}))},vd=function(t,e){t.split(",").forEach((function(t){let n=pd(t);if(void 0===n){const e=t.trim();md(e),n=pd(e)}n.classes.push(e)}))},xd=function(t,e){const n=pd(t);void 0!==n&&n.textStyles.push(e)},Md=function(t,e){const n=pd(t);void 0!==n&&n.textStyles.push(e)},Ld={parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().state,addState:md,clear:_d,getState:pd,getStates:function(){return ld.states},getRelations:function(){return ld.relations},getClasses:function(){return sd},getDirection:()=>id,addRelation:gd,getDividerId:()=>(ud++,"divider-id-"+ud),setDirection:t=>{id=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(){St.info("Documents = ",od)},getRootDoc:()=>ad,setRootDoc:t=>{St.info("Setting root doc",t),ad=t},getRootDocV2:()=>(hd({id:"root"},{id:"root",doc:ad},!0),{id:"root",doc:ad}),extract:t=>{let e;e=t.doc?t.doc:t,St.info(e),_d(!0),St.info("Extract",e),e.forEach((t=>{switch(t.stmt){case Ju:md(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case Xu:gd(t.state1,t.state2,t.description);break;case"classDef":kd(t.id.trim(),t.classes);break;case"applyClass":vd(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:Nr,setAccTitle:Or,getAccDescription:Fr,setAccDescription:Br,addStyleClass:kd,setCssClass:vd,addDescription:bd,setDiagramTitle:Ir,getDiagramTitle:Pr},wd={},Td=(t,e)=>{wd[t]=e},Sd=(t,e)=>{const n=t.append("text").attr("x",2*ar().state.padding).attr("y",ar().state.textHeight+1.3*ar().state.padding).attr("font-size",ar().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),r=n.height,i=t.append("text").attr("x",ar().state.padding).attr("y",r+.4*ar().state.padding+ar().state.dividerMargin+ar().state.textHeight).attr("class","state-description");let a=!0,s=!0;e.descriptions.forEach((function(t){a||(!function(t,e,n){const r=t.append("tspan").attr("x",2*ar().state.padding).text(e);n||r.attr("dy",ar().state.textHeight)}(i,t,s),s=!1),a=!1}));const o=t.append("line").attr("x1",ar().state.padding).attr("y1",ar().state.padding+r+ar().state.dividerMargin/2).attr("y2",ar().state.padding+r+ar().state.dividerMargin/2).attr("class","descr-divider"),l=i.node().getBBox(),c=Math.max(l.width,n.width);return o.attr("x2",c+3*ar().state.padding),t.insert("rect",":first-child").attr("x",ar().state.padding).attr("y",ar().state.padding).attr("width",c+2*ar().state.padding).attr("height",l.height+r+2*ar().state.padding).attr("rx",ar().state.radius),t},Dd=(t,e,n)=>{const r=ar().state.padding,i=2*ar().state.padding,a=t.node().getBBox(),s=a.width,o=a.x,l=t.append("text").attr("x",0).attr("y",ar().state.titleShift).attr("font-size",ar().state.fontSize).attr("class","state-title").text(e.id),c=l.node().getBBox().width+i;let u,d=Math.max(c,s);d===s&&(d+=i);const h=t.node().getBBox();e.doc,u=o-r,c>s&&(u=(s-d)/2+r),Math.abs(o-h.x)<r&&c>s&&(u=o-(c-s)/2);const m=1-ar().state.textHeight;return t.insert("rect",":first-child").attr("x",u).attr("y",m).attr("class",n?"alt-composit":"composit").attr("width",d).attr("height",h.height+ar().state.textHeight+ar().state.titleShift+1).attr("rx","0"),l.attr("x",u+r),c<=s&&l.attr("x",o+(d-i)/2-c/2+r),t.insert("rect",":first-child").attr("x",u).attr("y",ar().state.titleShift-ar().state.textHeight-ar().state.padding).attr("width",d).attr("height",3*ar().state.textHeight).attr("rx",ar().state.radius),t.insert("rect",":first-child").attr("x",u).attr("y",ar().state.titleShift-ar().state.textHeight-ar().state.padding).attr("width",d).attr("height",h.height+3+2*ar().state.textHeight).attr("rx",ar().state.radius),t},Yd=(t,e)=>{e.attr("class","state-note");const n=e.append("rect").attr("x",0).attr("y",ar().state.padding),r=e.append("g"),{textWidth:i,textHeight:a}=((t,e,n,r)=>{let i=0;const a=r.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"<br/>");s=s.replace(/\n/g,"<br/>");const o=s.split(Pt.lineBreakRegex);let l=1.25*ar().state.noteMargin;for(const c of o){const t=c.trim();if(t.length>0){const r=a.append("tspan");r.text(t),0===l&&(l+=r.node().getBBox().height),i+=l,r.attr("x",e+ar().state.noteMargin),r.attr("y",n+i+1.25*ar().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}})(t,0,0,r);return n.attr("height",a+2*ar().state.noteMargin),n.attr("width",i+2*ar().state.noteMargin),n},Ed=function(t,e){const n=e.id,r={id:n,label:e.id,width:0,height:0},i=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&(t=>{t.append("circle").attr("class","start-state").attr("r",ar().state.sizeUnit).attr("cx",ar().state.padding+ar().state.sizeUnit).attr("cy",ar().state.padding+ar().state.sizeUnit)})(i),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",ar().state.sizeUnit+ar().state.miniPadding).attr("cx",ar().state.padding+ar().state.sizeUnit+ar().state.miniPadding).attr("cy",ar().state.padding+ar().state.sizeUnit+ar().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",ar().state.sizeUnit).attr("cx",ar().state.padding+ar().state.sizeUnit+2).attr("cy",ar().state.padding+ar().state.sizeUnit+2)})(i),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let n=ar().state.forkWidth,r=ar().state.forkHeight;if(e.parentId){let t=n;n=r,r=t}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",ar().state.padding).attr("y",ar().state.padding)})(i,e),"note"===e.type&&Yd(e.note.text,i),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",ar().state.textHeight).attr("class","divider").attr("x2",2*ar().state.textHeight).attr("y1",0).attr("y2",0)})(i),"default"===e.type&&0===e.descriptions.length&&((t,e)=>{const n=t.append("text").attr("x",2*ar().state.padding).attr("y",ar().state.textHeight+2*ar().state.padding).attr("font-size",ar().state.fontSize).attr("class","state-title").text(e.id),r=n.node().getBBox();t.insert("rect",":first-child").attr("x",ar().state.padding).attr("y",ar().state.padding).attr("width",r.width+2*ar().state.padding).attr("height",r.height+2*ar().state.padding).attr("rx",ar().state.radius)})(i,e),"default"===e.type&&e.descriptions.length>0&&Sd(i,e);const a=i.node().getBBox();return r.width=a.width+2*ar().state.padding,r.height=a.height+2*ar().state.padding,Td(n,r),r};let Cd=0;let Ad;const Od={},Nd=(t,e,n,r,i,a,s)=>{const l=new ut.k({compound:!0,multigraph:!0});let c,u=!0;for(c=0;c<t.length;c++)if("relation"===t[c].stmt){u=!1;break}n?l.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:u?1:Ad.edgeLengthFactor,nodeSep:u?1:50,isMultiGraph:!0}):l.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:u?1:Ad.edgeLengthFactor,nodeSep:u?1:50,ranker:"tight-tree",isMultiGraph:!0}),l.setDefaultEdgeLabel((function(){return{}})),s.db.extract(t);const d=s.db.getStates(),h=s.db.getRelations(),m=Object.keys(d);for(const o of m){const t=d[o];let c;if(n&&(t.parentId=n),t.doc){let n=e.append("g").attr("id",t.id).attr("class","stateGroup");c=Nd(t.doc,n,t.id,!r,i,a,s);{n=Dd(n,t,r);let e=n.node().getBBox();c.width=e.width,c.height=e.height+Ad.padding/2,Od[t.id]={y:Ad.compositTitleSize}}}else c=Ed(e,t);if(t.note){const n={descriptions:[],id:t.id+"-note",note:t.note,type:"note"},r=Ed(e,n);"left of"===t.note.position?(l.setNode(c.id+"-note",r),l.setNode(c.id,c)):(l.setNode(c.id,c),l.setNode(c.id+"-note",r)),l.setParent(c.id,c.id+"-group"),l.setParent(c.id+"-note",c.id+"-group")}else l.setNode(c.id,c)}St.debug("Count=",l.nodeCount(),l);let _=0;h.forEach((function(t){var e;_++,St.debug("Setting edge",t),l.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*Ad.fontSizeFactor:1),height:Ad.labelHeight*Pt.getRows(t.title).length,labelpos:"c"},"id"+_)})),(0,ct.bK)(l),St.debug("Graph after layout",l.nodes());const p=e.node();l.nodes().forEach((function(t){if(void 0!==t&&void 0!==l.node(t)){St.warn("Node "+t+": "+JSON.stringify(l.node(t))),i.select("#"+p.id+" #"+t).attr("transform","translate("+(l.node(t).x-l.node(t).width/2)+","+(l.node(t).y+(Od[t]?Od[t].y:0)-l.node(t).height/2)+" )"),i.select("#"+p.id+" #"+t).attr("data-x-shift",l.node(t).x-l.node(t).width/2);a.querySelectorAll("#"+p.id+" #"+t+" .divider").forEach((t=>{const e=t.parentElement;let n=0,r=0;e&&(e.parentElement&&(n=e.parentElement.getBBox().width),r=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(r)&&(r=0)),t.setAttribute("x1",0-r+8),t.setAttribute("x2",n-r-8)}))}else St.debug("No Node "+t+": "+JSON.stringify(l.node(t)))}));let f=p.getBBox();l.edges().forEach((function(t){void 0!==t&&void 0!==l.edge(t)&&(St.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(l.edge(t))),function(t,e,n){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const r=e.points,i=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),a=t.append("path").attr("d",i(r)).attr("id","edge"+Cd).attr("class","transition");let s="";if(ar().state.arrowMarkerAbsolute&&(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,s=s.replace(/\(/g,"\\("),s=s.replace(/\)/g,"\\)")),a.attr("marker-end","url("+s+"#"+function(t){switch(t){case Ld.relationType.AGGREGATION:return"aggregation";case Ld.relationType.EXTENSION:return"extension";case Ld.relationType.COMPOSITION:return"composition";case Ld.relationType.DEPENDENCY:return"dependency"}}(Ld.relationType.DEPENDENCY)+"End)"),void 0!==n.title){const r=t.append("g").attr("class","stateLabel"),{x:i,y:a}=Gn.calcLabelPosition(e.points),s=Pt.getRows(n.title);let o=0;const l=[];let c=0,u=0;for(let t=0;t<=s.length;t++){const e=r.append("text").attr("text-anchor","middle").text(s[t]).attr("x",i).attr("y",a+o),n=e.node().getBBox();if(c=Math.max(c,n.width),u=Math.min(u,n.x),St.info(n.x,i,a+o),0===o){const t=e.node().getBBox();o=t.height,St.info("Title height",o,a)}l.push(e)}let d=o*s.length;if(s.length>1){const t=(s.length-1)*o*.5;l.forEach(((e,n)=>e.attr("y",a+n*o-t))),d=o*s.length}const h=r.node().getBBox();r.insert("rect",":first-child").attr("class","box").attr("x",i-c/2-ar().state.padding/2).attr("y",a-d/2-ar().state.padding/2-3.5).attr("width",c+ar().state.padding).attr("height",d+ar().state.padding),St.info(h)}Cd++}(e,l.edge(t),l.edge(t).relation))})),f=p.getBBox();const y={id:n||"root",label:n||"root",width:0,height:0};return y.width=f.width+2*Ad.padding,y.height=f.height+2*Ad.padding,St.debug("Doc rendered",y,l),y},Bd={setConf:function(){},draw:function(t,e,n,r){Ad=ar().state;const i=ar().securityLevel;let a;"sandbox"===i&&(a=(0,o.Ys)("#i"+e));const s="sandbox"===i?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body"),l="sandbox"===i?a.nodes()[0].contentDocument:document;St.debug("Rendering diagram "+t);const c=s.select(`[id='${e}']`);c.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z");new ut.k({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}}));const u=r.db.getRootDoc();Nd(u,c,void 0,!1,s,l,r);const d=Ad.padding,h=c.node().getBBox(),m=h.width+2*d,_=h.height+2*d;hr(c,_,1.75*m,Ad.useMaxWidth),c.attr("viewBox",`${h.x-Ad.padding} ${h.y-Ad.padding} `+m+" "+_)}},Fd="rect",Id="rectWithTitle",Pd="statediagram",jd="transition",Rd="parent",Hd="note",$d="----parent",Zd="fill:none",Wd="fill: #333",zd="text",Ud="normal";let qd={},Vd=0;function Gd(t="",e=0,n="",r="----"){return`state-${t}${null!==n&&n.length>0?`${r}${n}`:""}-${e}`}const Jd=(t,e,n,r,i,a)=>{const s=n.id,o=null==(l=r[s])?"":l.classes?l.classes.join(" "):"";var l;if("root"!==s){let e=Fd;!0===n.start&&(e="start"),!1===n.start&&(e="end"),n.type!==Ku&&(e=n.type),qd[s]||(qd[s]={id:s,shape:e,description:Pt.sanitizeText(s,ar()),classes:`${o} statediagram-state`});const r=qd[s];n.description&&(Array.isArray(r.description)?(r.shape=Id,r.description.push(n.description)):r.description.length>0?(r.shape=Id,r.description===s?r.description=[n.description]:r.description=[r.description,n.description]):(r.shape=Fd,r.description=n.description),r.description=Pt.sanitizeTextOrArray(r.description,ar())),1===r.description.length&&r.shape===Id&&(r.shape=Fd),!r.type&&n.doc&&(St.info("Setting cluster for ",s,Kd(n)),r.type="group",r.dir=Kd(n),r.shape=n.type===Qu?"divider":"roundedWithTitle",r.classes=r.classes+" statediagram-cluster "+(a?"statediagram-cluster-alt":""));const i={labelStyle:"",shape:r.shape,labelText:r.description,classes:r.classes,style:"",id:s,dir:r.dir,domId:Gd(s,Vd),type:r.type,padding:15};if(n.note){const e={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:s+"----note-"+Vd,domId:Gd(s,Vd,Hd),type:r.type,padding:15},a={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:r.classes,style:"",id:s+$d,domId:Gd(s,Vd,Rd),type:"group",padding:0};Vd++;const o=s+$d;t.setNode(o,a),t.setNode(e.id,e),t.setNode(s,i),t.setParent(s,o),t.setParent(e.id,o);let l=s,c=e.id;"left of"===n.note.position&&(l=e.id,c=s),t.setEdge(l,c,{arrowhead:"none",arrowType:"",style:Zd,labelStyle:"",classes:"transition note-edge",arrowheadStyle:Wd,labelpos:"c",labelType:zd,thickness:Ud})}else t.setNode(s,i)}e&&"root"!==e.id&&(St.trace("Setting node ",s," to be child of its parent ",e.id),t.setParent(s,e.id)),n.doc&&(St.trace("Adding nodes children "),Xd(t,n,n.doc,r,i,!a))},Xd=(t,e,n,r,i,a)=>{St.trace("items",n),n.forEach((n=>{switch(n.stmt){case Ju:case Ku:Jd(t,e,n,r,i,a);break;case Xu:{Jd(t,e,n.state1,r,i,a),Jd(t,e,n.state2,r,i,a);const s={id:"edge"+Vd,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:Zd,labelStyle:"",label:Pt.sanitizeText(n.description,ar()),arrowheadStyle:Wd,labelpos:"c",labelType:zd,thickness:Ud,classes:jd};t.setEdge(n.state1.id,n.state2.id,s,Vd),Vd++}}}))},Kd=(t,e="TB")=>{let n=e;if(t.doc)for(let r=0;r<t.doc.length;r++){const e=t.doc[r];"dir"===e.stmt&&(n=e.value)}return n},Qd={setConf:function(t){const e=Object.keys(t);for(const n of e)t[n]},getClasses:function(t,e){St.trace("Extracting classes"),e.db.clear();try{return e.parser.parse(t),e.db.extract(e.db.getRootDocV2()),e.db.getClasses()}catch(n){return n}},draw:function(t,e,n,r){St.info("Drawing state diagram (v2)",e),qd={};let i=r.db.getDirection();void 0===i&&(i="LR");const{securityLevel:a,state:s}=ar(),l=s.nodeSpacing||50,c=s.rankSpacing||50;St.info(r.db.getRootDocV2()),r.db.extract(r.db.getRootDocV2()),St.info(r.db.getRootDocV2());const u=r.db.getStates(),d=new ut.k({multigraph:!0,compound:!0}).setGraph({rankdir:Kd(r.db.getRootDocV2()),nodesep:l,ranksep:c,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));let h;Jd(d,void 0,r.db.getRootDocV2(),u,r.db,!0),"sandbox"===a&&(h=(0,o.Ys)("#i"+e));const m="sandbox"===a?(0,o.Ys)(h.nodes()[0].contentDocument.body):(0,o.Ys)("body"),_=m.select(`[id="${e}"]`),p=m.select("#"+e+" g");Us(p,d,["barb"],Pd,e);Gn.insertTitle(_,"statediagramTitleText",s.titleTopMargin,r.db.getDiagramTitle());const f=_.node().getBBox(),y=f.width+16,g=f.height+16;_.attr("class",Pd);const b=_.node().getBBox();hr(_,g,y,s.useMaxWidth);const k=`${b.x-8} ${b.y-8} ${y} ${g}`;St.debug(`viewBox ${k}`),_.attr("viewBox",k);const v=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const o of v){const t=o.getBBox(),e=document.createElementNS("http://www.w3.org/2000/svg",Fd);e.setAttribute("rx",0),e.setAttribute("ry",0),e.setAttribute("width",t.width),e.setAttribute("height",t.height),o.insertBefore(e,o.firstChild)}}};var th=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,5],i=[6,9,11,17,18,20,22,23,24,26],a=[1,15],s=[1,16],o=[1,17],l=[1,18],c=[1,19],u=[1,20],d=[1,24],h=[4,6,9,11,17,18,20,22,23,24,26],m={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,taskName:24,taskData:25,open_directive:26,type_directive:27,arg_directive:28,close_directive:29,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",24:"taskName",25:"taskData",26:"open_directive",27:"type_directive",28:"arg_directive",29:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 1:return a[o-1];case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:this.$=a[o];break;case 11:r.setDiagramTitle(a[o].substr(6)),this.$=a[o].substr(6);break;case 12:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 13:case 14:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 15:r.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 16:r.addTask(a[o-1],a[o]),this.$="task";break;case 18:r.parseDirective("%%{","open_directive");break;case 19:r.parseDirective(a[o],"type_directive");break;case 20:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 21:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:n,7:3,12:4,26:r},{1:[3]},e(i,[2,3],{5:6}),{3:7,4:n,7:3,12:4,26:r},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:a,18:s,20:o,22:l,23:c,24:u,26:r},{1:[2,2]},{14:22,15:[1,23],29:d},e([15,29],[2,19]),e(i,[2,8],{1:[2,1]}),e(i,[2,4]),{7:21,10:25,12:4,17:a,18:s,20:o,22:l,23:c,24:u,26:r},e(i,[2,6]),e(i,[2,7]),e(i,[2,11]),{19:[1,26]},{21:[1,27]},e(i,[2,14]),e(i,[2,15]),{25:[1,28]},e(i,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},e(i,[2,5]),e(i,[2,12]),e(i,[2,13]),e(i,[2,16]),e(h,[2,9]),{14:32,29:d},{29:[2,20]},{11:[1,33]},e(h,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],s=this.table,o="",l=0,c=0,u=2,d=1,h=a.slice.call(arguments,1),m=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);m.setInput(t,_.yy),_.yy.lexer=m,_.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var f=m.yylloc;a.push(f);var y=m.options&&m.options.ranges;function g(){var t;return"number"!=typeof(t=r.pop()||m.lex()||d)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,k,v,x,M,L,w,T,S={};;){if(k=n[n.length-1],this.defaultActions[k]?v=this.defaultActions[k]:(null==b&&(b=g()),v=s[k]&&s[k][b]),void 0===v||!v.length||!v[0]){var D="";for(M in T=[],s[k])this.terminals_[M]&&M>u&&T.push("'"+this.terminals_[M]+"'");D=m.showPosition?"Parse error on line "+(l+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(b==d?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(D,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:f,expected:T})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(v[0]){case 1:n.push(b),i.push(m.yytext),a.push(m.yylloc),n.push(v[1]),b=null,c=m.yyleng,o=m.yytext,l=m.yylineno,f=m.yylloc;break;case 2:if(L=this.productions_[v[1]][1],S.$=i[i.length-L],S._$={first_line:a[a.length-(L||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(L||1)].first_column,last_column:a[a.length-1].last_column},y&&(S._$.range=[a[a.length-(L||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(S,[o,c,l,_.yy,v[1],i,a].concat(h))))return x;L&&(n=n.slice(0,-1*L*2),i=i.slice(0,-1*L),a=a.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),i.push(S.$),a.push(S._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},_=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var 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-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,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=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],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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,n,r){switch(n){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}},t);function p(){this.yy={}}return m.lexer=_,p.prototype=m,m.Parser=p,new p}();th.parser=th;const eh=th,nh=t=>null!==t.match(/^\s*journey/);let rh="";const ih=[],ah=[],sh=[],oh=function(){let t=!0;for(const[e,n]of sh.entries())sh[e].processed,t=t&&n.processed;return t},lh={parseDirective:function(t,e,n){am.parseDirective(this,t,e,n)},getConfig:()=>ar().journey,clear:function(){ih.length=0,ah.length=0,rh="",sh.length=0,Ar()},setDiagramTitle:Ir,getDiagramTitle:Pr,setAccTitle:Or,getAccTitle:Nr,setAccDescription:Br,getAccDescription:Fr,addSection:function(t){rh=t,ih.push(t)},getSections:function(){return ih},getTasks:function(){let t=oh();let e=0;for(;!t&&e<100;)t=oh(),e++;return ah.push(...sh),ah},addTask:function(t,e){const n=e.substr(1).split(":");let r=0,i=[];1===n.length?(r=Number(n[0]),i=[]):(r=Number(n[0]),i=n[1].split(","));const a=i.map((t=>t.trim())),s={section:rh,type:rh,people:a,task:t,score:r};sh.push(s)},addTaskOrg:function(t){const e={section:rh,type:rh,description:t,task:t,classes:[]};ah.push(e)},getActors:function(){return function(){const t=[];return ah.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},ch=function(t,e){const n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},uh=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},dh=function(t,e){const n=e.text.replace(/<br\s*\/?>/gi," "),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(n),r};let hh=-1;const mh=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},_h=function(){function t(t,e,n,i,a,s,o,l){r(e.append("text").attr("x",n+a/2).attr("y",i+s/2+5).style("font-color",l).style("text-anchor","middle").text(t),o)}function e(t,e,n,i,a,s,o,l,c){const{taskFontSize:u,taskFontFamily:d}=l,h=t.split(/<br\s*\/?>/gi);for(let m=0;m<h.length;m++){const t=m*u-u*(h.length-1)/2,l=e.append("text").attr("x",n+a/2).attr("y",i).attr("fill",c).style("text-anchor","middle").style("font-size",u).style("font-family",d);l.append("tspan").attr("x",n+a/2).attr("dy",t).text(h[m]),l.attr("y",i+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(l,o)}}function n(t,n,i,a,s,o,l,c){const u=n.append("switch"),d=u.append("foreignObject").attr("x",i).attr("y",a).attr("width",s).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,u,i,a,s,o,l,c),r(d,l)}function r(t,e){for(const n in e)n in e&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),ph=uh,fh=function(t,e,n){const r=t.append("g"),i=mh();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=n.width,i.height=n.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,ch(r,i),_h(n)(e.text,r,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},n,e.colour)},yh=dh,gh=function(t,e,n){const r=e.x+n.width/2,i=t.append("g");hh++;i.append("line").attr("id","task"+hh).attr("x1",r).attr("y1",e.y).attr("x2",r).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,r=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.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"),i.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 r=(0,o.Nb1)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",r).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}(i):e.score<3?function(t){const r=(0,o.Nb1)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",r).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}(i):i.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")}(i,{cx:r,cy:300+30*(5-e.score),score:e.score});const a=mh();a.x=e.x,a.y=e.y,a.fill=e.fill,a.width=n.width,a.height=n.height,a.class="task task-type-"+e.num,a.rx=3,a.ry=3,ch(i,a);let s=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,r={cx:s,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};uh(i,r),s+=10})),_h(n)(e.task,i,a.x,a.y,a.width,a.height,{class:"task"},n,e.colour)},bh=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")},kh={};const vh=ar().journey,xh=vh.leftMargin,Mh={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,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){const i=ar().journey,a=this;let s=0;var o;this.sequenceItems.forEach((function(l){s++;const c=a.sequenceItems.length-s+1;a.updateVal(l,"starty",e-c*i.boxMargin,Math.min),a.updateVal(l,"stopy",r+c*i.boxMargin,Math.max),a.updateVal(Mh.data,"startx",t-c*i.boxMargin,Math.min),a.updateVal(Mh.data,"stopx",n+c*i.boxMargin,Math.max),"activation"!==o&&(a.updateVal(l,"startx",t-c*i.boxMargin,Math.min),a.updateVal(l,"stopx",n+c*i.boxMargin,Math.max),a.updateVal(Mh.data,"starty",e-c*i.boxMargin,Math.min),a.updateVal(Mh.data,"stopy",r+c*i.boxMargin,Math.max))}))},insert:function(t,e,n,r){const i=Math.min(t,n),a=Math.max(t,n),s=Math.min(e,r),o=Math.max(e,r);this.updateVal(Mh.data,"startx",i,Math.min),this.updateVal(Mh.data,"starty",s,Math.min),this.updateVal(Mh.data,"stopx",a,Math.max),this.updateVal(Mh.data,"stopy",o,Math.max),this.updateBounds(i,s,a,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Lh=vh.sectionFills,wh=vh.sectionColours,Th=function(t,e,n){const r=ar().journey;let i="";const a=n+(2*r.height+r.diagramMarginY);let s=0,o="#CCC",l="black",c=0;for(const[u,d]of e.entries()){if(i!==d.section){o=Lh[s%Lh.length],c=s%Lh.length,l=wh[s%wh.length];const e={x:u*r.taskMargin+u*r.width+xh,y:50,text:d.section,fill:o,num:c,colour:l};fh(t,e,r),i=d.section,s++}const e=d.people.reduce(((t,e)=>(kh[e]&&(t[e]=kh[e]),t)),{});d.x=u*r.taskMargin+u*r.width+xh,d.y=a,d.width=r.diagramMarginX,d.height=r.diagramMarginY,d.colour=l,d.fill=o,d.num=c,d.actors=e,gh(t,d,r),Mh.insert(d.x,d.y,d.x+d.width+r.taskMargin,450)}},Sh={setConf:function(t){Object.keys(t).forEach((function(e){vh[e]=t[e]}))},draw:function(t,e,n,r){const i=ar().journey;r.db.clear(),r.parser.parse(t+"\n");const a=ar().securityLevel;let s;"sandbox"===a&&(s=(0,o.Ys)("#i"+e));const l="sandbox"===a?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body");Mh.init();const c=l.select("#"+e);bh(c);const u=r.db.getTasks(),d=r.db.getDiagramTitle(),h=r.db.getActors();for(const o in kh)delete kh[o];let m=0;h.forEach((t=>{kh[t]={color:i.actorColours[m%i.actorColours.length],position:m},m++})),function(t){const e=ar().journey;let n=60;Object.keys(kh).forEach((r=>{const i=kh[r].color,a={cx:20,cy:n,r:7,fill:i,stroke:"#000",pos:kh[r].position};ph(t,a);const s={x:40,y:n+7,fill:"#666",text:r,textMargin:5|e.boxTextMargin};yh(t,s),n+=20}))}(c),Mh.insert(0,0,xh,50*Object.keys(kh).length),Th(c,u,0);const _=Mh.getBounds();d&&c.append("text").text(d).attr("x",xh).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const p=_.stopy-_.starty+2*i.diagramMarginY,f=xh+_.stopx+2*i.diagramMarginX;hr(c,p,f,i.useMaxWidth),c.append("line").attr("x1",xh).attr("y1",4*i.height).attr("x2",f-xh-4).attr("y2",4*i.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const y=d?70:0;c.attr("viewBox",`${_.startx} -25 ${f} ${p+y}`),c.attr("preserveAspectRatio","xMinYMin meet"),c.attr("height",p+y+25)}};let Dh={};const Yh={setConf:function(t){Dh={...Dh,...t}},draw:(t,e,n)=>{try{St.debug("Renering svg for syntax error\n");const t=(0,o.Ys)("#"+e),r=t.append("g");r.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"),r.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"),r.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"),r.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"),r.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"),r.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"),r.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in graph"),r.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+n),t.attr("height",100),t.attr("width",500),t.attr("viewBox","768 0 912 512")}catch(i){St.error("Error while rendering info diagram"),St.error((r=i)instanceof Error?r.message:String(r))}var r}},Eh="flowchart-elk",Ch={id:Eh,detector:(t,e)=>{var n;return!!(t.match(/^\s*flowchart-elk/)||t.match(/^\s*flowchart|graph/)&&"elk"===(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))},loader:async()=>{const{diagram:t}=await n.e(3209).then(n.bind(n,83209));return{id:Eh,diagram:t}}},Ah="timeline",Oh={id:Ah,detector:t=>null!==t.match(/^\s*timeline/),loader:async()=>{const{diagram:t}=await n.e(1071).then(n.bind(n,11071));return{id:Ah,diagram:t}}},Nh="mindmap",Bh={id:Nh,detector:t=>null!==t.match(/^\s*mindmap/),loader:async()=>{const{diagram:t}=await n.e(2366).then(n.bind(n,12366));return{id:Nh,diagram:t}}};let Fh=!1;const Ih=()=>{Fh||(Fh=!0,Ln(Ch,Oh,Bh),Xr("error",{db:{clear:()=>{}},styles:fr,renderer:Yh,parser:{parser:{yy:{}},parse:()=>{}},init:()=>{}},(t=>"error"===t.toLowerCase().trim())),Xr("---",{db:{clear:()=>{}},styles:fr,renderer:Yh,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 unindented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),Xr("c4",{parser:Fi,db:Xi,renderer:Ya,styles:wr,init:t=>{Ya.setConf(t.c4)}},Ii),Xr("class",{parser:Ca,db:Ga,renderer:ls,styles:_r,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Ga.clear()}},Aa),Xr("classDiagram",{parser:Ca,db:Ga,renderer:Js,styles:_r,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Ga.clear()}},Oa),Xr("er",{parser:Ks,db:ro,renderer:fo,styles:pr},Qs),Xr("gantt",{parser:wl,db:ic,renderer:oc,styles:gr},Tl),Xr("info",{parser:cc,db:hc,renderer:mc,styles:br},_c),Xr("pie",{parser:fc,db:kc,renderer:Lc,styles:kr},yc),Xr("requirement",{parser:Tc,db:Oc,renderer:Wc,styles:vr},Sc),Xr("sequence",{parser:Uc,db:mu,renderer:zu,styles:xr,init:t=>{if(t.sequence||(t.sequence={}),t.sequence.arrowMarkerAbsolute=t.arrowMarkerAbsolute,"sequenceDiagram"in t)throw new Error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.");mu.setWrap(t.wrap),zu.setConf(t.sequence)}},qc),Xr("state",{parser:qu,db:Ld,renderer:Bd,styles:Mr,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Ld.clear()}},Vu),Xr("stateDiagram",{parser:qu,db:Ld,renderer:Qd,styles:Mr,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Ld.clear()}},Gu),Xr("journey",{parser:eh,db:lh,renderer:Sh,styles:Lr,init:t=>{Sh.setConf(t.journey),lh.clear()}},nh),Xr("flowchart",{parser:go,db:fl,renderer:Ml,styles:yr,init:t=>{t.flowchart||(t.flowchart={}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,bl(t.flowchart),fl.clear(),fl.setGen("gen-1")}},bo),Xr("flowchart-v2",{parser:go,db:fl,renderer:Ml,styles:yr,init:t=>{t.flowchart||(t.flowchart={}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ir({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}}),Ml.setConf(t.flowchart),fl.clear(),fl.setGen("gen-2")}},ko),Xr("gitGraph",{parser:ti,db:gi,renderer:Oi,styles:Ni},ei))};class Ph{constructor(t,e){var n,r;wt(this,"type","graph"),wt(this,"parser"),wt(this,"renderer"),wt(this,"db"),wt(this,"detectTypeFailed",!1),this.txt=t;const i=ar();this.txt=t;try{this.type=Mn(t,i)}catch(o){this.handleError(o,e),this.type="error",this.detectTypeFailed=!0}const a=Kr(this.type);St.debug("Type "+this.type),this.db=a.db,null==(r=(n=this.db).clear)||r.call(n),this.renderer=a.renderer,this.parser=a.parser;const s=this.parser.parse.bind(this.parser);this.parser.parse=t=>s(function(t,e){var n;const r=t.match(bn);if(r){const i=gn(r[1],{schema:yn});return(null==i?void 0:i.title)&&(null==(n=e.setDiagramTitle)||n.call(e,i.title)),t.slice(r[0].length)}return t}(t,this.db)),this.parser.parser.yy=this.db,a.init&&(a.init(i),St.info("Initialized diagram "+this.type,i)),this.txt+="\n",this.parse(this.txt,e)}parse(t,e){var n,r;if(this.detectTypeFailed)return!1;try{return t+="\n",null==(r=(n=this.db).clear)||r.call(n),this.parser.parse(t),!0}catch(i){this.handleError(i,e)}return!1}handleError(t,e){if(void 0===e)throw t;qn(t)?e(t.str,t.hash):e(t)}getParser(){return this.parser}getType(){return this.type}}const jh=(t,e)=>{const n=Mn(t,ar());try{Kr(n)}catch(r){const i=xn[n].loader;if(!i)throw new Error(`Diagram ${n} not found.`);return i().then((({diagram:r})=>(Xr(n,r,void 0),new Ph(t,e))))}return new Ph(t,e)},Rh=Ph;const Hh=["graph","flowchart","flowchart-v2","stateDiagram","stateDiagram-v2"],$h="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Zh="sandbox",Wh="loose",zh="http://www.w3.org/1999/xlink",Uh="http://www.w3.org/1999/xhtml",qh=["foreignobject"],Vh=["dominant-baseline"];const Gh=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},Jh=function(t){let e=t;return e=e.replace(/\ufb02\xb0\xb0/g,"&#"),e=e.replace(/\ufb02\xb0/g,"&"),e=e.replace(/\xb6\xdf/g,";"),e},Xh=(t,e,n=[])=>`\n.${t} ${e} { ${n.join(" !important; ")} !important; }`,Kh=(t,e,n,r)=>{const i=((t,e,n={})=>{var r;let i="";if(void 0!==t.themeCSS&&(i+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(i+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(i+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,Mt.Z)(n)&&Hh.includes(e)){const e=["> *","span"],a=["rect","polygon","ellipse","circle","path"],s=t.htmlLabels||(null==(r=t.flowchart)?void 0:r.htmlLabels)?e:a;for(const t in n){const e=n[t];(0,Mt.Z)(e.styles)||s.forEach((t=>{i+=Xh(e.id,t,e.styles)})),(0,Mt.Z)(e.textStyles)||(i+=Xh(e.id,"tspan",e.textStyles))}}return i})(t,e,n);return B(it(`${r}{${Sr(e,i,t.themeVariables)}}`),F)},Qh=(t="",e,n)=>{let r=t;return n||e||(r=r.replace(/marker-end="url\(.*?#/g,'marker-end="url(#')),r=Jh(r),r=r.replace(/<br>/g,"<br/>"),r},tm=(t="",e)=>`<iframe style="width:100%;height:${e?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`,em=(t,e,n,r,i)=>{const a=t.append("div");a.attr("id",n),r&&a.attr("style",r);const s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return i&&s.attr("xmlns:xlink",i),s.append("g"),t};function nm(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const rm=(t,e,n,r)=>{var i,a,s;null==(i=t.getElementById(e))||i.remove(),null==(a=t.getElementById(n))||a.remove(),null==(s=t.getElementById(r))||s.remove()};function im(t,e,n,r){var i,a;a=t,(i=e).attr("role","graphics-document document"),(0,Mt.Z)(a)||i.attr("aria-roledescription",a),function(t,e,n,r){if(void 0!==t.insert&&(e||n)){if(n){const e="chart-desc-"+r;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(n)}if(e){const n="chart-title-"+r;t.attr("aria-labelledby",n),t.insert("title",":first-child").attr("id",n).text(e)}}}(e,n,r,e.attr("id"))}const am=Object.freeze({render:function(t,e,n,r){var i,a,s,l,c;Ih(),lr();const d=Gn.detectInit(e);d&&(zn(d),or(d));const h=ar();St.debug(h),e.length>(null!=(i=null==h?void 0:h.maxTextSize)?i:5e4)&&(e=$h),e=e.replace(/\r\n?/g,"\n");const m="#"+t,_="i"+t,p="#"+_,f="d"+t,y="#"+f;let g=(0,o.Ys)("body");const b=h.securityLevel===Zh,k=h.securityLevel===Wh,v=h.fontFamily;if(void 0!==r){if(r&&(r.innerHTML=""),b){const t=nm((0,o.Ys)(r),_);g=(0,o.Ys)(t.nodes()[0].contentDocument.body),g.node().style.margin=0}else g=(0,o.Ys)(r);em(g,t,f,`font-family: ${v}`,zh)}else{if(rm(document,t,f,_),b){const t=nm((0,o.Ys)("body"),_);g=(0,o.Ys)(t.nodes()[0].contentDocument.body),g.node().style.margin=0}else g=(0,o.Ys)("body");em(g,t,f)}let x,M;e=Gh(e);try{if(x=jh(e),"then"in x)throw new Error("Diagram is a promise. Use renderAsync.")}catch(N){x=new Rh("error"),M=N}const L=g.select(y).node(),w=x.type,T=L.firstChild,S=T.firstChild,D=Hh.includes(w)?x.renderer.getClasses(e,x):{},Y=Kh(h,w,D,m),E=document.createElement("style");E.innerHTML=Y,T.insertBefore(E,S);try{x.renderer.draw(e,t,Jn,x)}catch(B){throw Yh.draw(e,t,Jn),B}im(w,g.select(`${y} svg`),null==(s=(a=x.db).getAccTitle)?void 0:s.call(a),null==(c=(l=x.db).getAccDescription)?void 0:c.call(l)),g.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",Uh);let C=g.select(y).node().innerHTML;if(St.debug("config.arrowMarkerAbsolute",h.arrowMarkerAbsolute),C=Qh(C,b,Ft(h.arrowMarkerAbsolute)),b){const t=g.select(y+" svg").node();C=tm(C,t)}else k||(C=u().sanitize(C,{ADD_TAGS:qh,ADD_ATTR:Vh}));if(void 0!==n)switch(w){case"flowchart":case"flowchart-v2":n(C,fl.bindFunctions);break;case"gantt":n(C,ic.bindFunctions);break;case"class":case"classDiagram":n(C,Ga.bindFunctions);break;default:n(C)}else St.debug("CB = undefined!");pu();const A=b?p:y,O=(0,o.Ys)(A).node();if(O&&"remove"in O&&O.remove(),M)throw M;return C},renderAsync:async function(t,e,n,r){var i,a,s,l,c;Ih(),lr();const d=Gn.detectInit(e);d&&(zn(d),or(d));const h=ar();St.debug(h),e.length>(null!=(i=null==h?void 0:h.maxTextSize)?i:5e4)&&(e=$h),e=e.replace(/\r\n?/g,"\n");const m="#"+t,_="i"+t,p="#"+_,f="d"+t,y="#"+f;let g=(0,o.Ys)("body");const b=h.securityLevel===Zh,k=h.securityLevel===Wh,v=h.fontFamily;if(void 0!==r){if(r&&(r.innerHTML=""),b){const t=nm((0,o.Ys)(r),_);g=(0,o.Ys)(t.nodes()[0].contentDocument.body),g.node().style.margin=0}else g=(0,o.Ys)(r);em(g,t,f,`font-family: ${v}`,zh)}else{if(rm(document,t,f,_),b){const t=nm((0,o.Ys)("body"),_);g=(0,o.Ys)(t.nodes()[0].contentDocument.body),g.node().style.margin=0}else g=(0,o.Ys)("body");em(g,t,f)}let x,M;e=Gh(e);try{x=await jh(e)}catch(N){x=new Rh("error"),M=N}const L=g.select(y).node(),w=x.type,T=L.firstChild,S=T.firstChild,D=Hh.includes(w)?x.renderer.getClasses(e,x):{},Y=Kh(h,w,D,m),E=document.createElement("style");E.innerHTML=Y,T.insertBefore(E,S);try{await x.renderer.draw(e,t,Jn,x)}catch(B){throw Yh.draw(e,t,Jn),B}im(w,g.select(`${y} svg`),null==(s=(a=x.db).getAccTitle)?void 0:s.call(a),null==(c=(l=x.db).getAccDescription)?void 0:c.call(l)),g.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",Uh);let C=g.select(y).node().innerHTML;if(St.debug("config.arrowMarkerAbsolute",h.arrowMarkerAbsolute),C=Qh(C,b,Ft(h.arrowMarkerAbsolute)),b){const t=g.select(y+" svg").node();C=tm(C,t)}else k||(C=u().sanitize(C,{ADD_TAGS:qh,ADD_ATTR:Vh}));if(void 0!==n)switch(w){case"flowchart":case"flowchart-v2":n(C,fl.bindFunctions);break;case"gantt":n(C,ic.bindFunctions);break;case"class":case"classDiagram":n(C,Ga.bindFunctions);break;default:n(C)}else St.debug("CB = undefined!");pu();const A=b?p:y,O=(0,o.Ys)(A).node();if(O&&"remove"in O&&O.remove(),M)throw M;return C},parse:function(t,e){return Ih(),new Rh(t,e).parse(t,e)},parseAsync:async function(t,e){return Ih(),(await jh(t,e)).parse(t,e)},parseDirective:$r,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables={fontFamily:t.fontFamily}),Kn=Sn({},t),(null==t?void 0:t.theme)&&t.theme in qt?t.themeVariables=qt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=qt.default.getThemeVariables(t.themeVariables));const n="object"==typeof t?(t=>(Qn=Sn({},Xn),Qn=Sn(Qn,t),t.theme&&qt[t.theme]&&(Qn.themeVariables=qt[t.theme].getThemeVariables(t.themeVariables)),nr(Qn,tr),Qn))(t):rr();Dt(n.logLevel),Ih()},getConfig:ar,setConfig:ir,getSiteConfig:rr,updateSiteConfig:t=>(Qn=Sn(Qn,t),nr(Qn,tr),Qn),reset:()=>{lr()},globalReset:()=>{lr(Xn)},defaultConfig:Xn});Dt(ar().logLevel),lr(ar());const sm=(t,e,n)=>{St.warn(t),qn(t)?(n&&n(t.str,t.hash),e.push({...t,message:t.str,error:t})):(n&&n(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},om=async function(t,e,n){const i=am.getConfig();let a;if(t&&(hm.sequenceConfig=t),St.debug((n?"":"No ")+"Callback function found"),void 0===e)a=document.querySelectorAll(".mermaid");else if("string"==typeof e)a=document.querySelectorAll(e);else if(e instanceof HTMLElement)a=[e];else{if(!(e instanceof NodeList))throw new Error("Invalid argument nodes for mermaid.init");a=e}St.debug(`Found ${a.length} diagrams`),void 0!==(null==t?void 0:t.startOnLoad)&&(St.debug("Start On Load: "+(null==t?void 0:t.startOnLoad)),am.updateSiteConfig({startOnLoad:null==t?void 0:t.startOnLoad}));const s=new Gn.initIdGenerator(i.deterministicIds,i.deterministicIDSeed);let o;const l=[];for(const u of Array.from(a)){if(St.info("Rendering diagram: "+u.id),u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");const t=`mermaid-${s.next()}`;o=u.innerHTML,o=r(Gn.entityDecode(o)).trim().replace(/<br\s*\/?>/gi,"<br/>");const e=Gn.detectInit(o);e&&St.debug("Detected early reinit: ",e);try{await am.renderAsync(t,o,((e,r)=>{u.innerHTML=e,void 0!==n&&n(t),r&&r(u)}),u)}catch(c){sm(c,l,hm.parseError)}}if(l.length>0)throw l[0]},lm=function(){if(hm.startOnLoad){const{startOnLoad:t}=am.getConfig();t&&hm.init().catch((t=>St.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",lm,!1);const cm=[];let um=!1;const dm=async()=>{if(!um){for(um=!0;cm.length>0;){const e=cm.shift();if(e)try{await e()}catch(t){St.error("Error executing queue",t)}}um=!1}},hm={startOnLoad:!0,diagrams:{},mermaidAPI:am,parse:t=>am.parse(t,hm.parseError),parseAsync:t=>new Promise(((e,n)=>{cm.push((()=>new Promise(((r,i)=>{am.parseAsync(t,hm.parseError).then((t=>{r(t),e(t)}),(t=>{St.error("Error parsing",t),i(t),n(t)}))})))),dm().catch(n)})),render:am.render,renderAsync:(t,e,n,r)=>new Promise(((i,a)=>{cm.push((()=>new Promise(((s,o)=>{am.renderAsync(t,e,n,r).then((t=>{s(t),i(t)}),(t=>{St.error("Error parsing",t),o(t),a(t)}))})))),dm().catch(a)})),init:async function(t,e,n){try{await om(t,e,n)}catch(r){St.warn("Syntax Error rendering"),qn(r)&&St.warn(r.str),hm.parseError&&hm.parseError(r)}},initThrowsErrors:function(t,e,n){const i=am.getConfig();let a;if(t&&(hm.sequenceConfig=t),St.debug((n?"":"No ")+"Callback function found"),void 0===e)a=document.querySelectorAll(".mermaid");else if("string"==typeof e)a=document.querySelectorAll(e);else if(e instanceof HTMLElement)a=[e];else{if(!(e instanceof NodeList))throw new Error("Invalid argument nodes for mermaid.init");a=e}St.debug(`Found ${a.length} diagrams`),void 0!==(null==t?void 0:t.startOnLoad)&&(St.debug("Start On Load: "+(null==t?void 0:t.startOnLoad)),am.updateSiteConfig({startOnLoad:null==t?void 0:t.startOnLoad}));const s=new Gn.initIdGenerator(i.deterministicIds,i.deterministicIDSeed);let o;const l=[];for(const u of Array.from(a)){if(St.info("Rendering diagram: "+u.id),u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");const t=`mermaid-${s.next()}`;o=u.innerHTML,o=r(Gn.entityDecode(o)).trim().replace(/<br\s*\/?>/gi,"<br/>");const e=Gn.detectInit(o);e&&St.debug("Detected early reinit: ",e);try{am.render(t,o,((e,r)=>{u.innerHTML=e,void 0!==n&&n(t),r&&r(u)}),u)}catch(c){sm(c,l,hm.parseError)}}if(l.length>0)throw l[0]},initThrowsErrorsAsync:om,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{e?Ln(...t):await(async(...t)=>{St.debug(`Loading ${t.length} external diagrams`);const e=(await Promise.allSettled(t.map((async({id:t,detector:e,loader:n})=>{const{diagram:r}=await n();Xr(t,r,e)})))).filter((t=>"rejected"===t.status));if(e.length>0){St.error(`Failed to load ${e.length} external diagrams`);for(const t of e)St.error(t);throw new Error(`Failed to load ${e.length} external diagrams`)}})(...t)},initialize:function(t){am.initialize(t)},parseError:void 0,contentLoaded:lm,setParseErrorHandler:function(t){hm.parseError=t}}},42786:function(t,e,n){!function(t){"use strict";t.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(t){return/^nm$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(30381))},14130:function(t,e,n){!function(t){"use strict";var e=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},n={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},r=function(t){return function(r,i,a,s){var o=e(r),l=n[t][e(r)];return 2===o&&(l=l[i?0:1]),l.replace(/%d/i,r)}},i=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];t.defineLocale("ar-dz",{months:i,monthsShort:i,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(t){return"\u0645"===t},meridiem:function(t,e,n){return t<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},postformat:function(t){return t.replace(/,/g,"\u060c")},week:{dow:0,doy:4}})}(n(30381))},96135:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}})}(n(30381))},56440:function(t,e,n){!function(t){"use strict";var e={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},r={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},i=function(t){return function(e,i,a,s){var o=n(e),l=r[t][n(e)];return 2===o&&(l=l[i?0:1]),l.replace(/%d/i,e)}},a=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];t.defineLocale("ar-ly",{months:a,monthsShort:a,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(t){return"\u0645"===t},meridiem:function(t,e,n){return t<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:i("s"),ss:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(t){return t.replace(/\u060c/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(n(30381))},47702:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}})}(n(30381))},16040:function(t,e,n){!function(t){"use strict";var e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},n={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};t.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(t){return"\u0645"===t},meridiem:function(t,e,n){return t<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(t){return t.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,(function(t){return n[t]})).replace(/\u060c/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"\u060c")},week:{dow:0,doy:6}})}(n(30381))},37100:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}})}(n(30381))},30867:function(t,e,n){!function(t){"use strict";var e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},n={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},r=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},i={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},a=function(t){return function(e,n,a,s){var o=r(e),l=i[t][r(e)];return 2===o&&(l=l[n?0:1]),l.replace(/%d/i,e)}},s=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];t.defineLocale("ar",{months:s,monthsShort:s,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(t){return"\u0645"===t},meridiem:function(t,e,n){return t<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(t){return t.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,(function(t){return n[t]})).replace(/\u060c/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(n(30381))},31083:function(t,e,n){!function(t){"use strict";var e={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};t.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(t){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(t)},meridiem:function(t,e,n){return t<4?"gec\u0259":t<12?"s\u0259h\u0259r":t<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(t){if(0===t)return t+"-\u0131nc\u0131";var n=t%10,r=t%100-n,i=t>=100?100:null;return t+(e[n]||e[r]||e[i])},week:{dow:1,doy:7}})}(n(30381))},9808:function(t,e,n){!function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){return"m"===r?n?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===r?n?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":t+" "+e({ss:n?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:n?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:n?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[r],+t)}t.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:n,mm:n,h:n,hh:n,d:"\u0434\u0437\u0435\u043d\u044c",dd:n,M:"\u043c\u0435\u0441\u044f\u0446",MM:n,y:"\u0433\u043e\u0434",yy:n},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(t){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(t)},meridiem:function(t,e,n){return t<4?"\u043d\u043e\u0447\u044b":t<12?"\u0440\u0430\u043d\u0456\u0446\u044b":t<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t%10!=2&&t%10!=3||t%100==12||t%100==13?t+"-\u044b":t+"-\u0456";case"D":return t+"-\u0433\u0430";default:return t}},week:{dow:1,doy:7}})}(n(30381))},68338:function(t,e,n){!function(t){"use strict";t.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",w:"\u0441\u0435\u0434\u043c\u0438\u0446\u0430",ww:"%d \u0441\u0435\u0434\u043c\u0438\u0446\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-\u0435\u0432":0===n?t+"-\u0435\u043d":n>10&&n<20?t+"-\u0442\u0438":1===e?t+"-\u0432\u0438":2===e?t+"-\u0440\u0438":7===e||8===e?t+"-\u043c\u0438":t+"-\u0442\u0438"},week:{dow:1,doy:7}})}(n(30381))},67438:function(t,e,n){!function(t){"use strict";t.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n(30381))},76225:function(t,e,n){!function(t){"use strict";var e={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},n={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};t.defineLocale("bn-bd",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(t){return t.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u09b0\u09be\u09a4|\u09ad\u09cb\u09b0|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be|\u09b0\u09be\u09a4/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u09b0\u09be\u09a4"===e?t<4?t:t+12:"\u09ad\u09cb\u09b0"===e||"\u09b8\u0995\u09be\u09b2"===e?t:"\u09a6\u09c1\u09aa\u09c1\u09b0"===e?t>=3?t:t+12:"\u09ac\u09bf\u0995\u09be\u09b2"===e||"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"\u09b0\u09be\u09a4":t<6?"\u09ad\u09cb\u09b0":t<12?"\u09b8\u0995\u09be\u09b2":t<15?"\u09a6\u09c1\u09aa\u09c1\u09b0":t<18?"\u09ac\u09bf\u0995\u09be\u09b2":t<20?"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}})}(n(30381))},8905:function(t,e,n){!function(t){"use strict";var e={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},n={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};t.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(t){return t.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u09b0\u09be\u09a4"===e&&t>=4||"\u09a6\u09c1\u09aa\u09c1\u09b0"===e&&t<5||"\u09ac\u09bf\u0995\u09be\u09b2"===e?t+12:t},meridiem:function(t,e,n){return t<4?"\u09b0\u09be\u09a4":t<10?"\u09b8\u0995\u09be\u09b2":t<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":t<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}})}(n(30381))},11560:function(t,e,n){!function(t){"use strict";var e={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},n={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};t.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(t){return t.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===e&&t>=4||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===e&&t<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===e?t+12:t},meridiem:function(t,e,n){return t<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":t<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":t<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":t<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}})}(n(30381))},1278:function(t,e,n){!function(t){"use strict";function e(t,e,n){return t+" "+i({mm:"munutenn",MM:"miz",dd:"devezh"}[n],t)}function n(t){switch(r(t)){case 1:case 3:case 4:case 5:case 9:return t+" bloaz";default:return t+" vloaz"}}function r(t){return t>9?r(t%10):t}function i(t,e){return 2===e?a(t):t}function a(t){var e={m:"v",b:"v",d:"z"};return void 0===e[t.charAt(0)]?t:e[t.charAt(0)]+t.substring(1)}var s=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],o=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,l=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,c=/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,u=[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],d=[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],h=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];t.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:h,fullWeekdaysParse:u,shortWeekdaysParse:d,minWeekdaysParse:h,monthsRegex:o,monthsShortRegex:o,monthsStrictRegex:l,monthsShortStrictRegex:c,monthsParse:s,longMonthsParse:s,shortMonthsParse:s,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:e,h:"un eur",hh:"%d eur",d:"un devezh",dd:e,M:"ur miz",MM:e,y:"ur bloaz",yy:n},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(t){return t+(1===t?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(t){return"g.m."===t},meridiem:function(t,e,n){return t<12?"a.m.":"g.m."}})}(n(30381))},80622:function(t,e,n){!function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"ss":return r+=1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi";case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}t.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:e,m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(30381))},2468:function(t,e,n){!function(t){"use strict";t.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(t,e){var n=1===t?"r":2===t?"n":3===t?"r":4===t?"t":"\xe8";return"w"!==e&&"W"!==e||(n="a"),t+n},week:{dow:1,doy:4}})}(n(30381))},5822:function(t,e,n){!function(t){"use strict";var e={format:"leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),standalone:"ledna_\xfanora_b\u0159ezna_dubna_kv\u011btna_\u010dervna_\u010dervence_srpna_z\xe1\u0159\xed_\u0159\xedjna_listopadu_prosince".split("_")},n="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),r=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],i=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function a(t){return t>1&&t<5&&1!=~~(t/10)}function s(t,e,n,r){var i=t+" ";switch(n){case"s":return e||r?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return e||r?i+(a(t)?"sekundy":"sekund"):i+"sekundami";case"m":return e?"minuta":r?"minutu":"minutou";case"mm":return e||r?i+(a(t)?"minuty":"minut"):i+"minutami";case"h":return e?"hodina":r?"hodinu":"hodinou";case"hh":return e||r?i+(a(t)?"hodiny":"hodin"):i+"hodinami";case"d":return e||r?"den":"dnem";case"dd":return e||r?i+(a(t)?"dny":"dn\xed"):i+"dny";case"M":return e||r?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return e||r?i+(a(t)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):i+"m\u011bs\xedci";case"y":return e||r?"rok":"rokem";case"yy":return e||r?i+(a(t)?"roky":"let"):i+"lety"}}t.defineLocale("cs",{months:e,monthsShort:n,monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},50877:function(t,e,n){!function(t){"use strict";t.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(t){return t+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(t)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(t)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}})}(n(30381))},47373:function(t,e,n){!function(t){"use strict";t.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(t){var e="";return t>20?e=40===t||50===t||60===t||80===t||100===t?"fed":"ain":t>0&&(e=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][t]),t+e},week:{dow:1,doy:4}})}(n(30381))},24780:function(t,e,n){!function(t){"use strict";t.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},60217:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}t.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,w:e,ww:"%d Wochen",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},60894:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}t.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,w:e,ww:"%d Wochen",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},59740:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}t.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,w:e,ww:"%d Wochen",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},5300:function(t,e,n){!function(t){"use strict";var e=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],n=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];t.defineLocale("dv",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(t){return"\u0789\u078a"===t},meridiem:function(t,e,n){return t<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(t){return t.replace(/\u060c/g,",")},postformat:function(t){return t.replace(/,/g,"\u060c")},week:{dow:7,doy:12}})}(n(30381))},50837:function(t,e,n){!function(t){"use strict";function e(t){return"undefined"!=typeof Function&&t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}t.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(t,e){return t?"string"==typeof e&&/D/.test(e.substring(0,e.indexOf("MMMM")))?this._monthsGenitiveEl[t.month()]:this._monthsNominativeEl[t.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(t,e,n){return t>11?n?"\u03bc\u03bc":"\u039c\u039c":n?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(t){return"\u03bc"===(t+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){return 6===this.day()?"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT":"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"},sameElse:"L"},calendar:function(t,n){var r=this._calendarEl[t],i=n&&n.hours();return e(r)&&(r=r.apply(n)),r.replace("{}",i%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}})}(n(30381))},78348:function(t,e,n){!function(t){"use strict";t.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:0,doy:4}})}(n(30381))},77925:function(t,e,n){!function(t){"use strict";t.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}})}(n(30381))},22243:function(t,e,n){!function(t){"use strict";t.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n(30381))},46436:function(t,e,n){!function(t){"use strict";t.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n(30381))},47207:function(t,e,n){!function(t){"use strict";t.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}})}(n(30381))},44175:function(t,e,n){!function(t){"use strict";t.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:0,doy:6}})}(n(30381))},76319:function(t,e,n){!function(t){"use strict";t.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n(30381))},31662:function(t,e,n){!function(t){"use strict";t.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n(30381))},92915:function(t,e,n){!function(t){"use strict";t.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(t){return"p"===t.charAt(0).toLowerCase()},meridiem:function(t,e,n){return t>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n(30381))},55251:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(n(30381))},96112:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:4},invalidDate:"Fecha inv\xe1lida"})}(n(30381))},71146:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}})}(n(30381))},55655:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"})}(n(30381))},5603:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[t+"sekundi",t+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[t+" minuti",t+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[t+" tunni",t+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[t+" kuu",t+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[t+" aasta",t+" aastat"]};return e?i[n][2]?i[n][2]:i[n][1]:r?i[n][0]:i[n][1]}t.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:"%d p\xe4eva",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},77763:function(t,e,n){!function(t){"use strict";t.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(30381))},76959:function(t,e,n){!function(t){"use strict";var e={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},n={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};t.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(t){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(t)},meridiem:function(t,e,n){return t<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(t){return t.replace(/[\u06f0-\u06f9]/g,(function(t){return n[t]})).replace(/\u060c/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}})}(n(30381))},11897:function(t,e,n){!function(t){"use strict";var e="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),n=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",e[7],e[8],e[9]];function r(t,e,n,r){var a="";switch(n){case"s":return r?"muutaman sekunnin":"muutama sekunti";case"ss":a=r?"sekunnin":"sekuntia";break;case"m":return r?"minuutin":"minuutti";case"mm":a=r?"minuutin":"minuuttia";break;case"h":return r?"tunnin":"tunti";case"hh":a=r?"tunnin":"tuntia";break;case"d":return r?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":a=r?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return r?"kuukauden":"kuukausi";case"MM":a=r?"kuukauden":"kuukautta";break;case"y":return r?"vuoden":"vuosi";case"yy":a=r?"vuoden":"vuotta"}return a=i(t,r)+" "+a}function i(t,r){return t<10?r?n[t]:e[t]:t}t.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},42549:function(t,e,n){!function(t){"use strict";t.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n(30381))},94694:function(t,e,n){!function(t){"use strict";t.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},63049:function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}}})}(n(30381))},52330:function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})}(n(30381))},94470:function(t,e,n){!function(t){"use strict";var e=/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,n=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,r=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,i=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i];t.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:e,monthsShortStrictRegex:n,monthsParse:i,longMonthsParse:i,shortMonthsParse:i,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(t,e){switch(e){case"D":return t+(1===t?"er":"");default:case"M":case"Q":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})}(n(30381))},5044:function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");t.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(30381))},29295:function(t,e,n){!function(t){"use strict";var e=["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],n=["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],r=["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],i=["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],a=["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"];t.defineLocale("ga",{months:e,monthsShort:n,monthsParseExact:!0,weekdays:r,weekdaysShort:i,weekdaysMin:a,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?"d":t%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n(30381))},2101:function(t,e,n){!function(t){"use strict";var e=["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],n=["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],r=["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],i=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],a=["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"];t.defineLocale("gd",{months:e,monthsShort:n,monthsParseExact:!0,weekdays:r,weekdaysShort:i,weekdaysMin:a,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?"d":t%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n(30381))},38794:function(t,e,n){!function(t){"use strict";t.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(t){return 0===t.indexOf("un")?"n"+t:"en "+t},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(n(30381))},27884:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[t+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",t+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[t+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",t+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[t+" \u0935\u0930\u093e\u0902\u0928\u0940",t+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[t+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",t+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[t+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",t+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[t+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",t+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return r?i[n][0]:i[n][1]}t.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(t,e){return"D"===e?t+"\u0935\u0947\u0930":t},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0930\u093e\u0924\u0940"===e?t<4?t:t+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===e?t:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===e?t>12?t:t+12:"\u0938\u093e\u0902\u091c\u0947"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"\u0930\u093e\u0924\u0940":t<12?"\u0938\u0915\u093e\u0933\u0940\u0902":t<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":t<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}})}(n(30381))},23168:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={s:["thoddea sekondamni","thodde sekond"],ss:[t+" sekondamni",t+" sekond"],m:["eka mintan","ek minut"],mm:[t+" mintamni",t+" mintam"],h:["eka voran","ek vor"],hh:[t+" voramni",t+" voram"],d:["eka disan","ek dis"],dd:[t+" disamni",t+" dis"],M:["eka mhoinean","ek mhoino"],MM:[t+" mhoineamni",t+" mhoine"],y:["eka vorsan","ek voros"],yy:[t+" vorsamni",t+" vorsam"]};return r?i[n][0]:i[n][1]}t.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(t,e){return"D"===e?t+"er":t},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(t,e){return 12===t&&(t=0),"rati"===e?t<4?t:t+12:"sokallim"===e?t:"donparam"===e?t>12?t:t+12:"sanje"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"rati":t<12?"sokallim":t<16?"donparam":t<20?"sanje":"rati"}})}(n(30381))},95349:function(t,e,n){!function(t){"use strict";var e={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},n={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};t.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(t){return t.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0ab0\u0abe\u0aa4"===e?t<4?t:t+12:"\u0ab8\u0ab5\u0abe\u0ab0"===e?t:"\u0aac\u0aaa\u0acb\u0ab0"===e?t>=10?t:t+12:"\u0ab8\u0abe\u0a82\u0a9c"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"\u0ab0\u0abe\u0aa4":t<10?"\u0ab8\u0ab5\u0abe\u0ab0":t<17?"\u0aac\u0aaa\u0acb\u0ab0":t<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}})}(n(30381))},24206:function(t,e,n){!function(t){"use strict";t.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(t){return 2===t?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":t+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(t){return 2===t?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":t+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(t){return 2===t?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":t+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(t){return 2===t?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":t%10==0&&10!==t?t+" \u05e9\u05e0\u05d4":t+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(t){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(t)},meridiem:function(t,e,n){return t<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":t<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":t<12?n?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":t<18?n?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}})}(n(30381))},30094:function(t,e,n){!function(t){"use strict";var e={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},n={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},r=[/^\u091c\u0928/i,/^\u092b\u093c\u0930|\u092b\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924\u0902|\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935|\u0928\u0935\u0902/i,/^\u0926\u093f\u0938\u0902|\u0926\u093f\u0938/i],i=[/^\u091c\u0928/i,/^\u092b\u093c\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935/i,/^\u0926\u093f\u0938/i];t.defineLocale("hi",{months:{format:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),standalone:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u0902\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u0902\u092c\u0930_\u0926\u093f\u0938\u0902\u092c\u0930".split("_")},monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},monthsParse:r,longMonthsParse:r,shortMonthsParse:i,monthsRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsShortRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsStrictRegex:/^(\u091c\u0928\u0935\u0930\u0940?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908?|\u0905\u0917\u0938\u094d\u0924?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924?\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930?)/i,monthsShortStrictRegex:/^(\u091c\u0928\.?|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\.?|\u0905\u0917\.?|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\.?|\u0926\u093f\u0938\.?)/i,calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(t){return t.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0930\u093e\u0924"===e?t<4?t:t+12:"\u0938\u0941\u092c\u0939"===e?t:"\u0926\u094b\u092a\u0939\u0930"===e?t>=10?t:t+12:"\u0936\u093e\u092e"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"\u0930\u093e\u0924":t<10?"\u0938\u0941\u092c\u0939":t<17?"\u0926\u094b\u092a\u0939\u0930":t<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}})}(n(30381))},30316:function(t,e,n){!function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"ss":return r+=1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi";case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}t.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:e,m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(30381))},22138:function(t,e,n){!function(t){"use strict";var e="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function n(t,e,n,r){var i=t;switch(n){case"s":return r||e?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return i+(r||e)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(r||e?" perc":" perce");case"mm":return i+(r||e?" perc":" perce");case"h":return"egy"+(r||e?" \xf3ra":" \xf3r\xe1ja");case"hh":return i+(r||e?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(r||e?" nap":" napja");case"dd":return i+(r||e?" nap":" napja");case"M":return"egy"+(r||e?" h\xf3nap":" h\xf3napja");case"MM":return i+(r||e?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(r||e?" \xe9v":" \xe9ve");case"yy":return i+(r||e?" \xe9v":" \xe9ve")}return""}function r(t){return(t?"":"[m\xfalt] ")+"["+e[this.day()]+"] LT[-kor]"}t.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan._feb._m\xe1rc._\xe1pr._m\xe1j._j\xfan._j\xfal._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(t){return"u"===t.charAt(1).toLowerCase()},meridiem:function(t,e,n){return t<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return r.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return r.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},11423:function(t,e,n){!function(t){"use strict";t.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(t){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(t)},meridiem:function(t){return t<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":t<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":t<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(t,e){switch(e){case"DDD":case"w":case"W":case"DDDo":return 1===t?t+"-\u056b\u0576":t+"-\u0580\u0564";default:return t}},week:{dow:1,doy:7}})}(n(30381))},29218:function(t,e,n){!function(t){"use strict";t.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"siang":t<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}})}(n(30381))},90135:function(t,e,n){!function(t){"use strict";function e(t){return t%100==11||t%10!=1}function n(t,n,r,i){var a=t+" ";switch(r){case"s":return n||i?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return e(t)?a+(n||i?"sek\xfandur":"sek\xfandum"):a+"sek\xfanda";case"m":return n?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return e(t)?a+(n||i?"m\xedn\xfatur":"m\xedn\xfatum"):n?a+"m\xedn\xfata":a+"m\xedn\xfatu";case"hh":return e(t)?a+(n||i?"klukkustundir":"klukkustundum"):a+"klukkustund";case"d":return n?"dagur":i?"dag":"degi";case"dd":return e(t)?n?a+"dagar":a+(i?"daga":"d\xf6gum"):n?a+"dagur":a+(i?"dag":"degi");case"M":return n?"m\xe1nu\xf0ur":i?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return e(t)?n?a+"m\xe1nu\xf0ir":a+(i?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):n?a+"m\xe1nu\xf0ur":a+(i?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return n||i?"\xe1r":"\xe1ri";case"yy":return e(t)?a+(n||i?"\xe1r":"\xe1rum"):a+(n||i?"\xe1r":"\xe1ri")}}t.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},10150:function(t,e,n){!function(t){"use strict";t.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){return 0===this.day()?"[la scorsa] dddd [alle] LT":"[lo scorso] dddd [alle] LT"},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(n(30381))},90626:function(t,e,n){!function(t){"use strict";t.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){return 0===this.day()?"[La scorsa] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT":"[Lo scorso] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(n(30381))},39183:function(t,e,n){!function(t){"use strict";t.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(t,e){return"\u5143"===e[1]?1:parseInt(e[1]||t,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(t){return"\u5348\u5f8c"===t},meridiem:function(t,e,n){return t<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(t){return t.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(t){return this.week()!==t.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(t,e){switch(e){case"y":return 1===t?"\u5143\u5e74":t+"\u5e74";case"d":case"D":case"DDD":return t+"\u65e5";default:return t}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}})}(n(30381))},24286:function(t,e,n){!function(t){"use strict";t.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(t,e){return 12===t&&(t=0),"enjing"===e?t:"siyang"===e?t>=11?t:t+12:"sonten"===e||"ndalu"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"enjing":t<15?"siyang":t<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n(30381))},12105:function(t,e,n){!function(t){"use strict";t.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(t){return t.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,(function(t,e,n){return"\u10d8"===n?e+"\u10e8\u10d8":e+n+"\u10e8\u10d8"}))},past:function(t){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(t)?t.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(t)?t.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):t},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(t){return 0===t?t:1===t?t+"-\u10da\u10d8":t<20||t<=100&&t%20==0||t%100==0?"\u10db\u10d4-"+t:t+"-\u10d4"},week:{dow:1,doy:7}})}(n(30381))},47772:function(t,e,n){!function(t){"use strict";var e={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};t.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})}(n(30381))},18758:function(t,e,n){!function(t){"use strict";var e={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},n={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};t.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(t){return"\u179b\u17d2\u1784\u17b6\u1785"===t},meridiem:function(t,e,n){return t<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(t){return t.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},week:{dow:1,doy:4}})}(n(30381))},79282:function(t,e,n){!function(t){"use strict";var e={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},n={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};t.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(t){return t.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===e?t<4?t:t+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===e?t:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===e?t>=10?t:t+12:"\u0cb8\u0c82\u0c9c\u0cc6"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":t<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":t<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":t<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(t){return t+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}})}(n(30381))},33730:function(t,e,n){!function(t){"use strict";t.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"\uc77c";case"M":return t+"\uc6d4";case"w":case"W":return t+"\uc8fc";default:return t}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(t){return"\uc624\ud6c4"===t},meridiem:function(t,e,n){return t<12?"\uc624\uc804":"\uc624\ud6c4"}})}(n(30381))},1408:function(t,e,n){!function(t){"use strict";var e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},n={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},r=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"];t.defineLocale("ku",{months:r,monthsShort:r,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(t){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(t)},meridiem:function(t,e,n){return t<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(t){return t.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,(function(t){return n[t]})).replace(/\u060c/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(n(30381))},33291:function(t,e,n){!function(t){"use strict";var e={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};t.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})}(n(30381))},36841:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return e?i[n][0]:i[n][1]}function n(t){return i(t.substr(0,t.indexOf(" ")))?"a "+t:"an "+t}function r(t){return i(t.substr(0,t.indexOf(" ")))?"viru "+t:"virun "+t}function i(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10;return i(0===e?t/10:e)}if(t<1e4){for(;t>=10;)t/=10;return i(t)}return i(t/=1e3)}t.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:n,past:r,s:"e puer Sekonnen",ss:"%d Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d M\xe9int",y:e,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},55466:function(t,e,n){!function(t){"use strict";t.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(t){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===t},meridiem:function(t,e,n){return t<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(t){return"\u0e97\u0eb5\u0ec8"+t}})}(n(30381))},57010:function(t,e,n){!function(t){"use strict";var e={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function n(t,e,n,r){return e?"kelios sekund\u0117s":r?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"}function r(t,e,n,r){return e?a(n)[0]:r?a(n)[1]:a(n)[2]}function i(t){return t%10==0||t>10&&t<20}function a(t){return e[t].split("_")}function s(t,e,n,s){var o=t+" ";return 1===t?o+r(t,e,n[0],s):e?o+(i(t)?a(n)[1]:a(n)[0]):s?o+a(n)[1]:o+(i(t)?a(n)[1]:a(n)[2])}t.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:n,ss:s,m:r,mm:s,h:r,hh:s,d:r,dd:s,M:r,MM:s,y:r,yy:s},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(t){return t+"-oji"},week:{dow:1,doy:4}})}(n(30381))},37595:function(t,e,n){!function(t){"use strict";var e={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function n(t,e,n){return n?e%10==1&&e%100!=11?t[2]:t[3]:e%10==1&&e%100!=11?t[0]:t[1]}function r(t,r,i){return t+" "+n(e[i],t,r)}function i(t,r,i){return n(e[i],t,r)}function a(t,e){return e?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"}t.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:a,ss:r,m:i,mm:r,h:i,hh:r,d:i,dd:r,M:i,MM:r,y:i,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},39861:function(t,e,n){!function(t){"use strict";var e={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};t.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mjesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(30381))},35493:function(t,e,n){!function(t){"use strict";t.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(n(30381))},95966:function(t,e,n){!function(t){"use strict";t.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-\u0435\u0432":0===n?t+"-\u0435\u043d":n>10&&n<20?t+"-\u0442\u0438":1===e?t+"-\u0432\u0438":2===e?t+"-\u0440\u0438":7===e||8===e?t+"-\u043c\u0438":t+"-\u0442\u0438"},week:{dow:1,doy:7}})}(n(30381))},87341:function(t,e,n){!function(t){"use strict";t.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===e&&t>=4||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===e||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===e?t+12:t},meridiem:function(t,e,n){return t<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":t<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":t<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":t<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}})}(n(30381))},5115:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){switch(n){case"s":return e?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return t+(e?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return t+(e?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return t+(e?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return t+(e?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return t+(e?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return t+(e?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return t}}t.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(t){return"\u04ae\u0425"===t},meridiem:function(t,e,n){return t<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+" \u04e9\u0434\u04e9\u0440";default:return t}}})}(n(30381))},10370:function(t,e,n){!function(t){"use strict";var e={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},n={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function r(t,e,n,r){var i="";if(e)switch(n){case"s":i="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":i="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":i="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":i="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":i="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":i="%d \u0924\u093e\u0938";break;case"d":i="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":i="%d \u0926\u093f\u0935\u0938";break;case"M":i="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":i="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":i="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":i="%d \u0935\u0930\u094d\u0937\u0947"}else switch(n){case"s":i="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":i="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":i="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":i="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":i="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":i="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":i="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":i="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":i="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":i="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":i="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":i="%d \u0935\u0930\u094d\u0937\u093e\u0902"}return i.replace(/%d/i,t)}t.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(t){return t.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u092a\u0939\u093e\u091f\u0947"===e||"\u0938\u0915\u093e\u0933\u0940"===e?t:"\u0926\u0941\u092a\u093e\u0930\u0940"===e||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===e||"\u0930\u093e\u0924\u094d\u0930\u0940"===e?t>=12?t:t+12:void 0},meridiem:function(t,e,n){return t>=0&&t<6?"\u092a\u0939\u093e\u091f\u0947":t<12?"\u0938\u0915\u093e\u0933\u0940":t<17?"\u0926\u0941\u092a\u093e\u0930\u0940":t<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}})}(n(30381))},41237:function(t,e,n){!function(t){"use strict";t.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(30381))},9847:function(t,e,n){!function(t){"use strict";t.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(30381))},72126:function(t,e,n){!function(t){"use strict";t.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(n(30381))},56165:function(t,e,n){!function(t){"use strict";var e={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},n={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};t.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(t){return t.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},week:{dow:1,doy:4}})}(n(30381))},64924:function(t,e,n){!function(t){"use strict";t.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",w:"en uke",ww:"%d uker",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},16744:function(t,e,n){!function(t){"use strict";var e={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},n={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};t.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(t){return t.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0930\u093e\u0924\u093f"===e?t<4?t:t+12:"\u092c\u093f\u0939\u093e\u0928"===e?t:"\u0926\u093f\u0909\u0901\u0938\u094b"===e?t>=10?t:t+12:"\u0938\u093e\u0901\u091d"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?"\u0930\u093e\u0924\u093f":t<12?"\u092c\u093f\u0939\u093e\u0928":t<16?"\u0926\u093f\u0909\u0901\u0938\u094b":t<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}})}(n(30381))},59814:function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(30381))},93901:function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",w:"\xe9\xe9n week",ww:"%d weken",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(30381))},83877:function(t,e,n){!function(t){"use strict";t.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},92135:function(t,e,n){!function(t){"use strict";t.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(t,e){var n=1===t?"r":2===t?"n":3===t?"r":4===t?"t":"\xe8";return"w"!==e&&"W"!==e||(n="a"),t+n},week:{dow:1,doy:4}})}(n(30381))},15858:function(t,e,n){!function(t){"use strict";var e={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},n={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};t.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(t){return t.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0a30\u0a3e\u0a24"===e?t<4?t:t+12:"\u0a38\u0a35\u0a47\u0a30"===e?t:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===e?t>=10?t:t+12:"\u0a38\u0a3c\u0a3e\u0a2e"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"\u0a30\u0a3e\u0a24":t<10?"\u0a38\u0a35\u0a47\u0a30":t<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":t<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}})}(n(30381))},64495:function(t,e,n){!function(t){"use strict";var e="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),n="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_"),r=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^pa\u017a/i,/^lis/i,/^gru/i];function i(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function a(t,e,n){var r=t+" ";switch(n){case"ss":return r+(i(t)?"sekundy":"sekund");case"m":return e?"minuta":"minut\u0119";case"mm":return r+(i(t)?"minuty":"minut");case"h":return e?"godzina":"godzin\u0119";case"hh":return r+(i(t)?"godziny":"godzin");case"ww":return r+(i(t)?"tygodnie":"tygodni");case"MM":return r+(i(t)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return r+(i(t)?"lata":"lat")}}t.defineLocale("pl",{months:function(t,r){return t?/D MMMM/.test(r)?n[t.month()]:e[t.month()]:e},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:a,m:a,mm:a,h:a,hh:a,d:"1 dzie\u0144",dd:"%d dni",w:"tydzie\u0144",ww:a,M:"miesi\u0105c",MM:a,y:"rok",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},57971:function(t,e,n){!function(t){"use strict";t.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",invalidDate:"Data inv\xe1lida"})}(n(30381))},89520:function(t,e,n){!function(t){"use strict";t.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(n(30381))},96459:function(t,e,n){!function(t){"use strict";function e(t,e,n){var r=" ";return(t%100>=20||t>=100&&t%100==0)&&(r=" de "),t+r+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"s\u0103pt\u0103m\xe2ni",MM:"luni",yy:"ani"}[n]}t.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:e,m:"un minut",mm:e,h:"o or\u0103",hh:e,d:"o zi",dd:e,w:"o s\u0103pt\u0103m\xe2n\u0103",ww:e,M:"o lun\u0103",MM:e,y:"un an",yy:e},week:{dow:1,doy:7}})}(n(30381))},21793:function(t,e,n){!function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){return"m"===r?n?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":t+" "+e({ss:n?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:n?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",ww:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043d\u0435\u0434\u0435\u043b\u0438_\u043d\u0435\u0434\u0435\u043b\u044c",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[r],+t)}var r=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];t.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:n,m:n,mm:n,h:"\u0447\u0430\u0441",hh:n,d:"\u0434\u0435\u043d\u044c",dd:n,w:"\u043d\u0435\u0434\u0435\u043b\u044f",ww:n,M:"\u043c\u0435\u0441\u044f\u0446",MM:n,y:"\u0433\u043e\u0434",yy:n},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(t){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(t)},meridiem:function(t,e,n){return t<4?"\u043d\u043e\u0447\u0438":t<12?"\u0443\u0442\u0440\u0430":t<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":return t+"-\u0439";case"D":return t+"-\u0433\u043e";case"w":case"W":return t+"-\u044f";default:return t}},week:{dow:1,doy:4}})}(n(30381))},40950:function(t,e,n){!function(t){"use strict";var e=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],n=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];t.defineLocale("sd",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(t){return"\u0634\u0627\u0645"===t},meridiem:function(t,e,n){return t<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(t){return t.replace(/\u060c/g,",")},postformat:function(t){return t.replace(/,/g,"\u060c")},week:{dow:1,doy:4}})}(n(30381))},10490:function(t,e,n){!function(t){"use strict";t.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},90124:function(t,e,n){!function(t){"use strict";t.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(t){return t+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(t){return"\u0db4.\u0dc0."===t||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===t},meridiem:function(t,e,n){return t>11?n?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":n?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}})}(n(30381))},64249:function(t,e,n){!function(t){"use strict";var e="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),n="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function r(t){return t>1&&t<5}function i(t,e,n,i){var a=t+" ";switch(n){case"s":return e||i?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return e||i?a+(r(t)?"sekundy":"sek\xfand"):a+"sekundami";case"m":return e?"min\xfata":i?"min\xfatu":"min\xfatou";case"mm":return e||i?a+(r(t)?"min\xfaty":"min\xfat"):a+"min\xfatami";case"h":return e?"hodina":i?"hodinu":"hodinou";case"hh":return e||i?a+(r(t)?"hodiny":"hod\xedn"):a+"hodinami";case"d":return e||i?"de\u0148":"d\u0148om";case"dd":return e||i?a+(r(t)?"dni":"dn\xed"):a+"d\u0148ami";case"M":return e||i?"mesiac":"mesiacom";case"MM":return e||i?a+(r(t)?"mesiace":"mesiacov"):a+"mesiacmi";case"y":return e||i?"rok":"rokom";case"yy":return e||i?a+(r(t)?"roky":"rokov"):a+"rokmi"}}t.defineLocale("sk",{months:e,monthsShort:n,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:case 4:case 5:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:i,ss:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},14985:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i=t+" ";switch(n){case"s":return e||r?"nekaj sekund":"nekaj sekundami";case"ss":return i+=1===t?e?"sekundo":"sekundi":2===t?e||r?"sekundi":"sekundah":t<5?e||r?"sekunde":"sekundah":"sekund";case"m":return e?"ena minuta":"eno minuto";case"mm":return i+=1===t?e?"minuta":"minuto":2===t?e||r?"minuti":"minutama":t<5?e||r?"minute":"minutami":e||r?"minut":"minutami";case"h":return e?"ena ura":"eno uro";case"hh":return i+=1===t?e?"ura":"uro":2===t?e||r?"uri":"urama":t<5?e||r?"ure":"urami":e||r?"ur":"urami";case"d":return e||r?"en dan":"enim dnem";case"dd":return i+=1===t?e||r?"dan":"dnem":2===t?e||r?"dni":"dnevoma":e||r?"dni":"dnevi";case"M":return e||r?"en mesec":"enim mesecem";case"MM":return i+=1===t?e||r?"mesec":"mesecem":2===t?e||r?"meseca":"mesecema":t<5?e||r?"mesece":"meseci":e||r?"mesecev":"meseci";case"y":return e||r?"eno leto":"enim letom";case"yy":return i+=1===t?e||r?"leto":"letom":2===t?e||r?"leti":"letoma":t<5?e||r?"leta":"leti":e||r?"let":"leti"}}t.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(30381))},51104:function(t,e,n){!function(t){"use strict";t.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(t){return"M"===t.charAt(0)},meridiem:function(t,e,n){return t<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},79915:function(t,e,n){!function(t){"use strict";var e={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0438\u043d\u0443\u0442\u0430"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0430","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],d:["\u0458\u0435\u0434\u0430\u043d \u0434\u0430\u043d","\u0458\u0435\u0434\u043d\u043e\u0433 \u0434\u0430\u043d\u0430"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],M:["\u0458\u0435\u0434\u0430\u043d \u043c\u0435\u0441\u0435\u0446","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0435\u0441\u0435\u0446\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],y:["\u0458\u0435\u0434\u043d\u0443 \u0433\u043e\u0434\u0438\u043d\u0443","\u0458\u0435\u0434\u043d\u0435 \u0433\u043e\u0434\u0438\u043d\u0435"],yy:["\u0433\u043e\u0434\u0438\u043d\u0443","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(t,e){return t%10>=1&&t%10<=4&&(t%100<10||t%100>=20)?t%10==1?e[0]:e[1]:e[2]},translate:function(t,n,r,i){var a,s=e.words[r];return 1===r.length?"y"===r&&n?"\u0458\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430":i||n?s[0]:s[1]:(a=e.correctGrammaticalCase(t,s),"yy"===r&&n&&"\u0433\u043e\u0434\u0438\u043d\u0443"===a?t+" \u0433\u043e\u0434\u0438\u043d\u0430":t+" "+a)}};t.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:e.translate,dd:e.translate,M:e.translate,MM:e.translate,y:e.translate,yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(30381))},49131:function(t,e,n){!function(t){"use strict";var e={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],d:["jedan dan","jednog dana"],dd:["dan","dana","dana"],M:["jedan mesec","jednog meseca"],MM:["mesec","meseca","meseci"],y:["jednu godinu","jedne godine"],yy:["godinu","godine","godina"]},correctGrammaticalCase:function(t,e){return t%10>=1&&t%10<=4&&(t%100<10||t%100>=20)?t%10==1?e[0]:e[1]:e[2]},translate:function(t,n,r,i){var a,s=e.words[r];return 1===r.length?"y"===r&&n?"jedna godina":i||n?s[0]:s[1]:(a=e.correctGrammaticalCase(t,s),"yy"===r&&n&&"godinu"===a?t+" godina":t+" "+a)}};t.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:e.translate,dd:e.translate,M:e.translate,MM:e.translate,y:e.translate,yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(30381))},85893:function(t,e,n){!function(t){"use strict";t.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?"ekuseni":t<15?"emini":t<19?"entsambama":"ebusuku"},meridiemHour:function(t,e){return 12===t&&(t=0),"ekuseni"===e?t:"emini"===e?t>=11?t:t+12:"entsambama"===e||"ebusuku"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n(30381))},98760:function(t,e,n){!function(t){"use strict";t.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?":e":1===e||2===e?":a":":e")},week:{dow:1,doy:4}})}(n(30381))},91172:function(t,e,n){!function(t){"use strict";t.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n(30381))},27333:function(t,e,n){!function(t){"use strict";var e={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},n={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};t.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(t){return t+"\u0bb5\u0ba4\u0bc1"},preparse:function(t){return t.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(t,e,n){return t<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":t<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":t<10?" \u0b95\u0bbe\u0bb2\u0bc8":t<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":t<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":t<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(t,e){return 12===t&&(t=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===e?t<2?t:t+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===e||"\u0b95\u0bbe\u0bb2\u0bc8"===e||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===e&&t>=10?t:t+12},week:{dow:0,doy:6}})}(n(30381))},23110:function(t,e,n){!function(t){"use strict";t.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===e?t<4?t:t+12:"\u0c09\u0c26\u0c2f\u0c02"===e?t:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===e?t>=10?t:t+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":t<10?"\u0c09\u0c26\u0c2f\u0c02":t<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":t<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}})}(n(30381))},52095:function(t,e,n){!function(t){"use strict";t.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n(30381))},27321:function(t,e,n){!function(t){"use strict";var e={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};t.defineLocale("tg",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0430\u043b\u0438_\u043c\u0430\u0440\u0442\u0438_\u0430\u043f\u0440\u0435\u043b\u0438_\u043c\u0430\u0439\u0438_\u0438\u044e\u043d\u0438_\u0438\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442\u0438_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0438_\u043e\u043a\u0442\u044f\u0431\u0440\u0438_\u043d\u043e\u044f\u0431\u0440\u0438_\u0434\u0435\u043a\u0430\u0431\u0440\u0438".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_")},monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u0424\u0430\u0440\u0434\u043e \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u0448\u0430\u0431"===e?t<4?t:t+12:"\u0441\u0443\u0431\u04b3"===e?t:"\u0440\u04ef\u0437"===e?t>=11?t:t+12:"\u0431\u0435\u0433\u043e\u04b3"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"\u0448\u0430\u0431":t<11?"\u0441\u0443\u0431\u04b3":t<16?"\u0440\u04ef\u0437":t<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})}(n(30381))},9041:function(t,e,n){!function(t){"use strict";t.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(t){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===t},meridiem:function(t,e,n){return t<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",w:"1 \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",ww:"%d \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}})}(n(30381))},19005:function(t,e,n){!function(t){"use strict";var e={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};t.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(t,n){switch(n){case"d":case"D":case"Do":case"DD":return t;default:if(0===t)return t+"'unjy";var r=t%10,i=t%100-r,a=t>=100?100:null;return t+(e[r]||e[i]||e[a])}},week:{dow:1,doy:7}})}(n(30381))},75768:function(t,e,n){!function(t){"use strict";t.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n(30381))},89444:function(t,e,n){!function(t){"use strict";var e="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function n(t){var e=t;return e=-1!==t.indexOf("jaj")?e.slice(0,-3)+"leS":-1!==t.indexOf("jar")?e.slice(0,-3)+"waQ":-1!==t.indexOf("DIS")?e.slice(0,-3)+"nem":e+" pIq"}function r(t){var e=t;return e=-1!==t.indexOf("jaj")?e.slice(0,-3)+"Hu\u2019":-1!==t.indexOf("jar")?e.slice(0,-3)+"wen":-1!==t.indexOf("DIS")?e.slice(0,-3)+"ben":e+" ret"}function i(t,e,n,r){var i=a(t);switch(n){case"ss":return i+" lup";case"mm":return i+" tup";case"hh":return i+" rep";case"dd":return i+" jaj";case"MM":return i+" jar";case"yy":return i+" DIS"}}function a(t){var n=Math.floor(t%1e3/100),r=Math.floor(t%100/10),i=t%10,a="";return n>0&&(a+=e[n]+"vatlh"),r>0&&(a+=(""!==a?" ":"")+e[r]+"maH"),i>0&&(a+=(""!==a?" ":"")+e[i]),""===a?"pagh":a}t.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:n,past:r,s:"puS lup",ss:i,m:"wa\u2019 tup",mm:i,h:"wa\u2019 rep",hh:i,d:"wa\u2019 jaj",dd:i,M:"wa\u2019 jar",MM:i,y:"wa\u2019 DIS",yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},72397:function(t,e,n){!function(t){"use strict";var e={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};t.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pzt_Sal_\xc7ar_Per_Cum_Cmt".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(t,e,n){return t<12?n?"\xf6\xf6":"\xd6\xd6":n?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(t){return"\xf6s"===t||"\xd6S"===t},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(t,n){switch(n){case"d":case"D":case"Do":case"DD":return t;default:if(0===t)return t+"'\u0131nc\u0131";var r=t%10,i=t%100-r,a=t>=100?100:null;return t+(e[r]||e[i]||e[a])}},week:{dow:1,doy:7}})}(n(30381))},28254:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={s:["viensas secunds","'iensas secunds"],ss:[t+" secunds",t+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[t+" m\xeduts",t+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[t+" \xfeoras",t+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[t+" ziuas",t+" ziuas"],M:["'n mes","'iens mes"],MM:[t+" mesen",t+" mesen"],y:["'n ar","'iens ar"],yy:[t+" ars",t+" ars"]};return r||e?i[n][0]:i[n][1]}t.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(t){return"d'o"===t.toLowerCase()},meridiem:function(t,e,n){return t>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(30381))},30699:function(t,e,n){!function(t){"use strict";t.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n(30381))},51106:function(t,e,n){!function(t){"use strict";t.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}})}(n(30381))},9288:function(t,e,n){!function(t){"use strict";t.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===e||"\u0633\u06d5\u06be\u06d5\u0631"===e||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===e?t:"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"===e||"\u0643\u06d5\u0686"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":r<900?"\u0633\u06d5\u06be\u06d5\u0631":r<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":r<1230?"\u0686\u06c8\u0634":r<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return t+"-\u06be\u06d5\u067e\u062a\u06d5";default:return t}},preparse:function(t){return t.replace(/\u060c/g,",")},postformat:function(t){return t.replace(/,/g,"\u060c")},week:{dow:1,doy:7}})}(n(30381))},67691:function(t,e,n){!function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){return"m"===r?n?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===r?n?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":t+" "+e({ss:n?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:n?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:n?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[r],+t)}function r(t,e){var n={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===t?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):t?n[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(e)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(e)?"genitive":"nominative"][t.day()]:n.nominative}function i(t){return function(){return t+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}t.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:r,weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:i("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:i("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:i("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:i("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return i("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return i("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:n,m:n,mm:n,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:n,d:"\u0434\u0435\u043d\u044c",dd:n,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:n,y:"\u0440\u0456\u043a",yy:n},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(t){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(t)},meridiem:function(t,e,n){return t<4?"\u043d\u043e\u0447\u0456":t<12?"\u0440\u0430\u043d\u043a\u0443":t<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t+"-\u0439";case"D":return t+"-\u0433\u043e";default:return t}},week:{dow:1,doy:7}})}(n(30381))},13795:function(t,e,n){!function(t){"use strict";var e=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],n=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];t.defineLocale("ur",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(t){return"\u0634\u0627\u0645"===t},meridiem:function(t,e,n){return t<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(t){return t.replace(/\u060c/g,",")},postformat:function(t){return t.replace(/,/g,"\u060c")},week:{dow:1,doy:4}})}(n(30381))},60588:function(t,e,n){!function(t){"use strict";t.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n(30381))},6791:function(t,e,n){!function(t){"use strict";t.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}})}(n(30381))},65666:function(t,e,n){!function(t){"use strict";t.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",w:"m\u1ed9t tu\u1ea7n",ww:"%d tu\u1ea7n",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n(30381))},14378:function(t,e,n){!function(t){"use strict";t.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n(30381))},75805:function(t,e,n){!function(t){"use strict";t.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}})}(n(30381))},83839:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u51cc\u6668"===e||"\u65e9\u4e0a"===e||"\u4e0a\u5348"===e?t:"\u4e0b\u5348"===e||"\u665a\u4e0a"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?"\u51cc\u6668":r<900?"\u65e9\u4e0a":r<1130?"\u4e0a\u5348":r<1230?"\u4e2d\u5348":r<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(t){return t.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(t){return this.week()!==t.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"\u65e5";case"M":return t+"\u6708";case"w":case"W":return t+"\u5468";default:return t}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",w:"1 \u5468",ww:"%d \u5468",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}})}(n(30381))},55726:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u51cc\u6668"===e||"\u65e9\u4e0a"===e||"\u4e0a\u5348"===e?t:"\u4e2d\u5348"===e?t>=11?t:t+12:"\u4e0b\u5348"===e||"\u665a\u4e0a"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"\u51cc\u6668":r<900?"\u65e9\u4e0a":r<1200?"\u4e0a\u5348":1200===r?"\u4e2d\u5348":r<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"\u65e5";case"M":return t+"\u6708";case"w":case"W":return t+"\u9031";default:return t}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(n(30381))},99807:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u51cc\u6668"===e||"\u65e9\u4e0a"===e||"\u4e0a\u5348"===e?t:"\u4e2d\u5348"===e?t>=11?t:t+12:"\u4e0b\u5348"===e||"\u665a\u4e0a"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"\u51cc\u6668":r<900?"\u65e9\u4e0a":r<1130?"\u4e0a\u5348":r<1230?"\u4e2d\u5348":r<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"\u65e5";case"M":return t+"\u6708";case"w":case"W":return t+"\u9031";default:return t}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(n(30381))},74152:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(t,e){return 12===t&&(t=0),"\u51cc\u6668"===e||"\u65e9\u4e0a"===e||"\u4e0a\u5348"===e?t:"\u4e2d\u5348"===e?t>=11?t:t+12:"\u4e0b\u5348"===e||"\u665a\u4e0a"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"\u51cc\u6668":r<900?"\u65e9\u4e0a":r<1130?"\u4e0a\u5348":r<1230?"\u4e2d\u5348":r<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"\u65e5";case"M":return t+"\u6708";case"w":case"W":return t+"\u9031";default:return t}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(n(30381))},30381:function(t,e,n){(t=n.nmd(t)).exports=function(){"use strict";var e,r;function i(){return e.apply(null,arguments)}function a(t){e=t}function s(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function l(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function c(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(l(t,e))return!1;return!0}function u(t){return void 0===t}function d(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function h(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function m(t,e){var n,r=[],i=t.length;for(n=0;n<i;++n)r.push(e(t[n],n));return r}function _(t,e){for(var n in e)l(e,n)&&(t[n]=e[n]);return l(e,"toString")&&(t.toString=e.toString),l(e,"valueOf")&&(t.valueOf=e.valueOf),t}function p(t,e,n,r){return Gn(t,e,n,r,!0).utc()}function f(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function y(t){return null==t._pf&&(t._pf=f()),t._pf}function g(t){if(null==t._isValid){var e=y(t),n=r.call(e.parsedDateParts,(function(t){return null!=t})),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidEra&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function b(t){var e=p(NaN);return null!=t?_(y(e),t):y(e).userInvalidated=!0,e}r=Array.prototype.some?Array.prototype.some:function(t){var e,n=Object(this),r=n.length>>>0;for(e=0;e<r;e++)if(e in n&&t.call(this,n[e],e,n))return!0;return!1};var k=i.momentProperties=[],v=!1;function x(t,e){var n,r,i,a=k.length;if(u(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),u(e._i)||(t._i=e._i),u(e._f)||(t._f=e._f),u(e._l)||(t._l=e._l),u(e._strict)||(t._strict=e._strict),u(e._tzm)||(t._tzm=e._tzm),u(e._isUTC)||(t._isUTC=e._isUTC),u(e._offset)||(t._offset=e._offset),u(e._pf)||(t._pf=y(e)),u(e._locale)||(t._locale=e._locale),a>0)for(n=0;n<a;n++)u(i=e[r=k[n]])||(t[r]=i);return t}function M(t){x(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===v&&(v=!0,i.updateOffset(this),v=!1)}function L(t){return t instanceof M||null!=t&&null!=t._isAMomentObject}function w(t){!1===i.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function T(t,e){var n=!0;return _((function(){if(null!=i.deprecationHandler&&i.deprecationHandler(null,t),n){var r,a,s,o=[],c=arguments.length;for(a=0;a<c;a++){if(r="","object"==typeof arguments[a]){for(s in r+="\n["+a+"] ",arguments[0])l(arguments[0],s)&&(r+=s+": "+arguments[0][s]+", ");r=r.slice(0,-2)}else r=arguments[a];o.push(r)}w(t+"\nArguments: "+Array.prototype.slice.call(o).join("")+"\n"+(new Error).stack),n=!1}return e.apply(this,arguments)}),e)}var S,D={};function Y(t,e){null!=i.deprecationHandler&&i.deprecationHandler(t,e),D[t]||(w(e),D[t]=!0)}function E(t){return"undefined"!=typeof Function&&t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function C(t){var e,n;for(n in t)l(t,n)&&(E(e=t[n])?this[n]=e:this["_"+n]=e);this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function A(t,e){var n,r=_({},t);for(n in e)l(e,n)&&(o(t[n])&&o(e[n])?(r[n]={},_(r[n],t[n]),_(r[n],e[n])):null!=e[n]?r[n]=e[n]:delete r[n]);for(n in t)l(t,n)&&!l(e,n)&&o(t[n])&&(r[n]=_({},r[n]));return r}function O(t){null!=t&&this.set(t)}i.suppressDeprecationWarnings=!1,i.deprecationHandler=null,S=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)l(t,e)&&n.push(e);return n};var N={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function B(t,e,n){var r=this._calendar[t]||this._calendar.sameElse;return E(r)?r.call(e,n):r}function F(t,e,n){var r=""+Math.abs(t),i=e-r.length;return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}var I=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,P=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,j={},R={};function H(t,e,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),t&&(R[t]=i),e&&(R[e[0]]=function(){return F(i.apply(this,arguments),e[1],e[2])}),n&&(R[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function $(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function Z(t){var e,n,r=t.match(I);for(e=0,n=r.length;e<n;e++)R[r[e]]?r[e]=R[r[e]]:r[e]=$(r[e]);return function(e){var i,a="";for(i=0;i<n;i++)a+=E(r[i])?r[i].call(e,t):r[i];return a}}function W(t,e){return t.isValid()?(e=z(e,t.localeData()),j[e]=j[e]||Z(e),j[e](t)):t.localeData().invalidDate()}function z(t,e){var n=5;function r(t){return e.longDateFormat(t)||t}for(P.lastIndex=0;n>=0&&P.test(t);)t=t.replace(P,r),P.lastIndex=0,n-=1;return t}var U={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function q(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.match(I).map((function(t){return"MMMM"===t||"MM"===t||"DD"===t||"dddd"===t?t.slice(1):t})).join(""),this._longDateFormat[t])}var V="Invalid date";function G(){return this._invalidDate}var J="%d",X=/\d{1,2}/;function K(t){return this._ordinal.replace("%d",t)}var Q={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function tt(t,e,n,r){var i=this._relativeTime[n];return E(i)?i(t,e,n,r):i.replace(/%d/i,t)}function et(t,e){var n=this._relativeTime[t>0?"future":"past"];return E(n)?n(e):n.replace(/%s/i,e)}var nt={};function rt(t,e){var n=t.toLowerCase();nt[n]=nt[n+"s"]=nt[e]=t}function it(t){return"string"==typeof t?nt[t]||nt[t.toLowerCase()]:void 0}function at(t){var e,n,r={};for(n in t)l(t,n)&&(e=it(n))&&(r[e]=t[n]);return r}var st={};function ot(t,e){st[t]=e}function lt(t){var e,n=[];for(e in t)l(t,e)&&n.push({unit:e,priority:st[e]});return n.sort((function(t,e){return t.priority-e.priority})),n}function ct(t){return t%4==0&&t%100!=0||t%400==0}function ut(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function dt(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=ut(e)),n}function ht(t,e){return function(n){return null!=n?(_t(this,t,n),i.updateOffset(this,e),this):mt(this,t)}}function mt(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function _t(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&ct(t.year())&&1===t.month()&&29===t.date()?(n=dt(n),t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),te(n,t.month()))):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function pt(t){return E(this[t=it(t)])?this[t]():this}function ft(t,e){if("object"==typeof t){var n,r=lt(t=at(t)),i=r.length;for(n=0;n<i;n++)this[r[n].unit](t[r[n].unit])}else if(E(this[t=it(t)]))return this[t](e);return this}var yt,gt=/\d/,bt=/\d\d/,kt=/\d{3}/,vt=/\d{4}/,xt=/[+-]?\d{6}/,Mt=/\d\d?/,Lt=/\d\d\d\d?/,wt=/\d\d\d\d\d\d?/,Tt=/\d{1,3}/,St=/\d{1,4}/,Dt=/[+-]?\d{1,6}/,Yt=/\d+/,Et=/[+-]?\d+/,Ct=/Z|[+-]\d\d:?\d\d/gi,At=/Z|[+-]\d\d(?::?\d\d)?/gi,Ot=/[+-]?\d+(\.\d{1,3})?/,Nt=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function Bt(t,e,n){yt[t]=E(e)?e:function(t,r){return t&&n?n:e}}function Ft(t,e){return l(yt,t)?yt[t](e._strict,e._locale):new RegExp(It(t))}function It(t){return Pt(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(t,e,n,r,i){return e||n||r||i})))}function Pt(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}yt={};var jt={};function Rt(t,e){var n,r,i=e;for("string"==typeof t&&(t=[t]),d(e)&&(i=function(t,n){n[e]=dt(t)}),r=t.length,n=0;n<r;n++)jt[t[n]]=i}function Ht(t,e){Rt(t,(function(t,n,r,i){r._w=r._w||{},e(t,r._w,r,i)}))}function $t(t,e,n){null!=e&&l(jt,t)&&jt[t](e,n._a,n,t)}var Zt,Wt=0,zt=1,Ut=2,qt=3,Vt=4,Gt=5,Jt=6,Xt=7,Kt=8;function Qt(t,e){return(t%e+e)%e}function te(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=Qt(e,12);return t+=(e-n)/12,1===n?ct(t)?29:28:31-n%7%2}Zt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},H("M",["MM",2],"Mo",(function(){return this.month()+1})),H("MMM",0,0,(function(t){return this.localeData().monthsShort(this,t)})),H("MMMM",0,0,(function(t){return this.localeData().months(this,t)})),rt("month","M"),ot("month",8),Bt("M",Mt),Bt("MM",Mt,bt),Bt("MMM",(function(t,e){return e.monthsShortRegex(t)})),Bt("MMMM",(function(t,e){return e.monthsRegex(t)})),Rt(["M","MM"],(function(t,e){e[zt]=dt(t)-1})),Rt(["MMM","MMMM"],(function(t,e,n,r){var i=n._locale.monthsParse(t,r,n._strict);null!=i?e[zt]=i:y(n).invalidMonth=t}));var ee="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ne="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),re=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,ie=Nt,ae=Nt;function se(t,e){return t?s(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||re).test(e)?"format":"standalone"][t.month()]:s(this._months)?this._months:this._months.standalone}function oe(t,e){return t?s(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[re.test(e)?"format":"standalone"][t.month()]:s(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function le(t,e,n){var r,i,a,s=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)a=p([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(a,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(a,"").toLocaleLowerCase();return n?"MMM"===e?-1!==(i=Zt.call(this._shortMonthsParse,s))?i:null:-1!==(i=Zt.call(this._longMonthsParse,s))?i:null:"MMM"===e?-1!==(i=Zt.call(this._shortMonthsParse,s))||-1!==(i=Zt.call(this._longMonthsParse,s))?i:null:-1!==(i=Zt.call(this._longMonthsParse,s))||-1!==(i=Zt.call(this._shortMonthsParse,s))?i:null}function ce(t,e,n){var r,i,a;if(this._monthsParseExact)return le.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=p([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(a="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[r].test(t))return r;if(n&&"MMM"===e&&this._shortMonthsParse[r].test(t))return r;if(!n&&this._monthsParse[r].test(t))return r}}function ue(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=dt(e);else if(!d(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),te(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function de(t){return null!=t?(ue(this,t),i.updateOffset(this,!0),this):mt(this,"Month")}function he(){return te(this.year(),this.month())}function me(t){return this._monthsParseExact?(l(this,"_monthsRegex")||pe.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=ie),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function _e(t){return this._monthsParseExact?(l(this,"_monthsRegex")||pe.call(this),t?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=ae),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function pe(){function t(t,e){return e.length-t.length}var e,n,r=[],i=[],a=[];for(e=0;e<12;e++)n=p([2e3,e]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(r.sort(t),i.sort(t),a.sort(t),e=0;e<12;e++)r[e]=Pt(r[e]),i[e]=Pt(i[e]);for(e=0;e<24;e++)a[e]=Pt(a[e]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function fe(t){return ct(t)?366:365}H("Y",0,0,(function(){var t=this.year();return t<=9999?F(t,4):"+"+t})),H(0,["YY",2],0,(function(){return this.year()%100})),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),rt("year","y"),ot("year",1),Bt("Y",Et),Bt("YY",Mt,bt),Bt("YYYY",St,vt),Bt("YYYYY",Dt,xt),Bt("YYYYYY",Dt,xt),Rt(["YYYYY","YYYYYY"],Wt),Rt("YYYY",(function(t,e){e[Wt]=2===t.length?i.parseTwoDigitYear(t):dt(t)})),Rt("YY",(function(t,e){e[Wt]=i.parseTwoDigitYear(t)})),Rt("Y",(function(t,e){e[Wt]=parseInt(t,10)})),i.parseTwoDigitYear=function(t){return dt(t)+(dt(t)>68?1900:2e3)};var ye=ht("FullYear",!0);function ge(){return ct(this.year())}function be(t,e,n,r,i,a,s){var o;return t<100&&t>=0?(o=new Date(t+400,e,n,r,i,a,s),isFinite(o.getFullYear())&&o.setFullYear(t)):o=new Date(t,e,n,r,i,a,s),o}function ke(t){var e,n;return t<100&&t>=0?((n=Array.prototype.slice.call(arguments))[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)):e=new Date(Date.UTC.apply(null,arguments)),e}function ve(t,e,n){var r=7+e-n;return-(7+ke(t,0,r).getUTCDay()-e)%7+r-1}function xe(t,e,n,r,i){var a,s,o=1+7*(e-1)+(7+n-r)%7+ve(t,r,i);return o<=0?s=fe(a=t-1)+o:o>fe(t)?(a=t+1,s=o-fe(t)):(a=t,s=o),{year:a,dayOfYear:s}}function Me(t,e,n){var r,i,a=ve(t.year(),e,n),s=Math.floor((t.dayOfYear()-a-1)/7)+1;return s<1?r=s+Le(i=t.year()-1,e,n):s>Le(t.year(),e,n)?(r=s-Le(t.year(),e,n),i=t.year()+1):(i=t.year(),r=s),{week:r,year:i}}function Le(t,e,n){var r=ve(t,e,n),i=ve(t+1,e,n);return(fe(t)-r+i)/7}function we(t){return Me(t,this._week.dow,this._week.doy).week}H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),rt("week","w"),rt("isoWeek","W"),ot("week",5),ot("isoWeek",5),Bt("w",Mt),Bt("ww",Mt,bt),Bt("W",Mt),Bt("WW",Mt,bt),Ht(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=dt(t)}));var Te={dow:0,doy:6};function Se(){return this._week.dow}function De(){return this._week.doy}function Ye(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Ee(t){var e=Me(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Ce(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=e.weekdaysParse(t))?t:null:parseInt(t,10)}function Ae(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Oe(t,e){return t.slice(e,7).concat(t.slice(0,e))}H("d",0,"do","day"),H("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),H("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),H("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),rt("day","d"),rt("weekday","e"),rt("isoWeekday","E"),ot("day",11),ot("weekday",11),ot("isoWeekday",11),Bt("d",Mt),Bt("e",Mt),Bt("E",Mt),Bt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),Bt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),Bt("dddd",(function(t,e){return e.weekdaysRegex(t)})),Ht(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:y(n).invalidWeekday=t})),Ht(["d","e","E"],(function(t,e,n,r){e[r]=dt(t)}));var Ne="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Be="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Fe="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ie=Nt,Pe=Nt,je=Nt;function Re(t,e){var n=s(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===t?Oe(n,this._week.dow):t?n[t.day()]:n}function He(t){return!0===t?Oe(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort}function $e(t){return!0===t?Oe(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Ze(t,e,n){var r,i,a,s=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)a=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(i=Zt.call(this._weekdaysParse,s))?i:null:"ddd"===e?-1!==(i=Zt.call(this._shortWeekdaysParse,s))?i:null:-1!==(i=Zt.call(this._minWeekdaysParse,s))?i:null:"dddd"===e?-1!==(i=Zt.call(this._weekdaysParse,s))||-1!==(i=Zt.call(this._shortWeekdaysParse,s))||-1!==(i=Zt.call(this._minWeekdaysParse,s))?i:null:"ddd"===e?-1!==(i=Zt.call(this._shortWeekdaysParse,s))||-1!==(i=Zt.call(this._weekdaysParse,s))||-1!==(i=Zt.call(this._minWeekdaysParse,s))?i:null:-1!==(i=Zt.call(this._minWeekdaysParse,s))||-1!==(i=Zt.call(this._weekdaysParse,s))||-1!==(i=Zt.call(this._shortWeekdaysParse,s))?i:null}function We(t,e,n){var r,i,a;if(this._weekdaysParseExact)return Ze.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(a="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[r].test(t))return r;if(n&&"ddd"===e&&this._shortWeekdaysParse[r].test(t))return r;if(n&&"dd"===e&&this._minWeekdaysParse[r].test(t))return r;if(!n&&this._weekdaysParse[r].test(t))return r}}function ze(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Ce(t,this.localeData()),this.add(t-e,"d")):e}function Ue(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function qe(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Ae(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Ve(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Xe.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Ie),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Ge(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Xe.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Pe),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Je(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Xe.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=je),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Xe(){function t(t,e){return e.length-t.length}var e,n,r,i,a,s=[],o=[],l=[],c=[];for(e=0;e<7;e++)n=p([2e3,1]).day(e),r=Pt(this.weekdaysMin(n,"")),i=Pt(this.weekdaysShort(n,"")),a=Pt(this.weekdays(n,"")),s.push(r),o.push(i),l.push(a),c.push(r),c.push(i),c.push(a);s.sort(t),o.sort(t),l.sort(t),c.sort(t),this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Ke(){return this.hours()%12||12}function Qe(){return this.hours()||24}function tn(t,e){H(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function en(t,e){return e._meridiemParse}function nn(t){return"p"===(t+"").toLowerCase().charAt(0)}H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Ke),H("k",["kk",2],0,Qe),H("hmm",0,0,(function(){return""+Ke.apply(this)+F(this.minutes(),2)})),H("hmmss",0,0,(function(){return""+Ke.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)})),H("Hmm",0,0,(function(){return""+this.hours()+F(this.minutes(),2)})),H("Hmmss",0,0,(function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)})),tn("a",!0),tn("A",!1),rt("hour","h"),ot("hour",13),Bt("a",en),Bt("A",en),Bt("H",Mt),Bt("h",Mt),Bt("k",Mt),Bt("HH",Mt,bt),Bt("hh",Mt,bt),Bt("kk",Mt,bt),Bt("hmm",Lt),Bt("hmmss",wt),Bt("Hmm",Lt),Bt("Hmmss",wt),Rt(["H","HH"],qt),Rt(["k","kk"],(function(t,e,n){var r=dt(t);e[qt]=24===r?0:r})),Rt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),Rt(["h","hh"],(function(t,e,n){e[qt]=dt(t),y(n).bigHour=!0})),Rt("hmm",(function(t,e,n){var r=t.length-2;e[qt]=dt(t.substr(0,r)),e[Vt]=dt(t.substr(r)),y(n).bigHour=!0})),Rt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[qt]=dt(t.substr(0,r)),e[Vt]=dt(t.substr(r,2)),e[Gt]=dt(t.substr(i)),y(n).bigHour=!0})),Rt("Hmm",(function(t,e,n){var r=t.length-2;e[qt]=dt(t.substr(0,r)),e[Vt]=dt(t.substr(r))})),Rt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[qt]=dt(t.substr(0,r)),e[Vt]=dt(t.substr(r,2)),e[Gt]=dt(t.substr(i))}));var rn=/[ap]\.?m?\.?/i,an=ht("Hours",!0);function sn(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}var on,ln={calendar:N,longDateFormat:U,invalidDate:V,ordinal:J,dayOfMonthOrdinalParse:X,relativeTime:Q,months:ee,monthsShort:ne,week:Te,weekdays:Ne,weekdaysMin:Fe,weekdaysShort:Be,meridiemParse:rn},cn={},un={};function dn(t,e){var n,r=Math.min(t.length,e.length);for(n=0;n<r;n+=1)if(t[n]!==e[n])return n;return r}function hn(t){return t?t.toLowerCase().replace("_","-"):t}function mn(t){for(var e,n,r,i,a=0;a<t.length;){for(e=(i=hn(t[a]).split("-")).length,n=(n=hn(t[a+1]))?n.split("-"):null;e>0;){if(r=pn(i.slice(0,e).join("-")))return r;if(n&&n.length>=e&&dn(i,n)>=e-1)break;e--}a++}return on}function _n(t){return null!=t.match("^[^/\\\\]*$")}function pn(e){var r=null;if(void 0===cn[e]&&t&&t.exports&&_n(e))try{r=on._abbr,n(46700)("./"+e),fn(r)}catch(i){cn[e]=null}return cn[e]}function fn(t,e){var n;return t&&((n=u(e)?bn(t):yn(t,e))?on=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),on._abbr}function yn(t,e){if(null!==e){var n,r=ln;if(e.abbr=t,null!=cn[t])Y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=cn[t]._config;else if(null!=e.parentLocale)if(null!=cn[e.parentLocale])r=cn[e.parentLocale]._config;else{if(null==(n=pn(e.parentLocale)))return un[e.parentLocale]||(un[e.parentLocale]=[]),un[e.parentLocale].push({name:t,config:e}),null;r=n._config}return cn[t]=new O(A(r,e)),un[t]&&un[t].forEach((function(t){yn(t.name,t.config)})),fn(t),cn[t]}return delete cn[t],null}function gn(t,e){if(null!=e){var n,r,i=ln;null!=cn[t]&&null!=cn[t].parentLocale?cn[t].set(A(cn[t]._config,e)):(null!=(r=pn(t))&&(i=r._config),e=A(i,e),null==r&&(e.abbr=t),(n=new O(e)).parentLocale=cn[t],cn[t]=n),fn(t)}else null!=cn[t]&&(null!=cn[t].parentLocale?(cn[t]=cn[t].parentLocale,t===fn()&&fn(t)):null!=cn[t]&&delete cn[t]);return cn[t]}function bn(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return on;if(!s(t)){if(e=pn(t))return e;t=[t]}return mn(t)}function kn(){return S(cn)}function vn(t){var e,n=t._a;return n&&-2===y(t).overflow&&(e=n[zt]<0||n[zt]>11?zt:n[Ut]<1||n[Ut]>te(n[Wt],n[zt])?Ut:n[qt]<0||n[qt]>24||24===n[qt]&&(0!==n[Vt]||0!==n[Gt]||0!==n[Jt])?qt:n[Vt]<0||n[Vt]>59?Vt:n[Gt]<0||n[Gt]>59?Gt:n[Jt]<0||n[Jt]>999?Jt:-1,y(t)._overflowDayOfYear&&(e<Wt||e>Ut)&&(e=Ut),y(t)._overflowWeeks&&-1===e&&(e=Xt),y(t)._overflowWeekday&&-1===e&&(e=Kt),y(t).overflow=e),t}var xn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Mn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ln=/Z|[+-]\d\d(?::?\d\d)?/,wn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Tn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Sn=/^\/?Date\((-?\d+)/i,Dn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Yn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function En(t){var e,n,r,i,a,s,o=t._i,l=xn.exec(o)||Mn.exec(o),c=wn.length,u=Tn.length;if(l){for(y(t).iso=!0,e=0,n=c;e<n;e++)if(wn[e][1].exec(l[1])){i=wn[e][0],r=!1!==wn[e][2];break}if(null==i)return void(t._isValid=!1);if(l[3]){for(e=0,n=u;e<n;e++)if(Tn[e][1].exec(l[3])){a=(l[2]||" ")+Tn[e][0];break}if(null==a)return void(t._isValid=!1)}if(!r&&null!=a)return void(t._isValid=!1);if(l[4]){if(!Ln.exec(l[4]))return void(t._isValid=!1);s="Z"}t._f=i+(a||"")+(s||""),$n(t)}else t._isValid=!1}function Cn(t,e,n,r,i,a){var s=[An(t),ne.indexOf(e),parseInt(n,10),parseInt(r,10),parseInt(i,10)];return a&&s.push(parseInt(a,10)),s}function An(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}function On(t){return t.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Nn(t,e,n){return!t||Be.indexOf(t)===new Date(e[0],e[1],e[2]).getDay()||(y(n).weekdayMismatch=!0,n._isValid=!1,!1)}function Bn(t,e,n){if(t)return Yn[t];if(e)return 0;var r=parseInt(n,10),i=r%100;return(r-i)/100*60+i}function Fn(t){var e,n=Dn.exec(On(t._i));if(n){if(e=Cn(n[4],n[3],n[2],n[5],n[6],n[7]),!Nn(n[1],e,t))return;t._a=e,t._tzm=Bn(n[8],n[9],n[10]),t._d=ke.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),y(t).rfc2822=!0}else t._isValid=!1}function In(t){var e=Sn.exec(t._i);null===e?(En(t),!1===t._isValid&&(delete t._isValid,Fn(t),!1===t._isValid&&(delete t._isValid,t._strict?t._isValid=!1:i.createFromInputFallback(t)))):t._d=new Date(+e[1])}function Pn(t,e,n){return null!=t?t:null!=e?e:n}function jn(t){var e=new Date(i.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function Rn(t){var e,n,r,i,a,s=[];if(!t._d){for(r=jn(t),t._w&&null==t._a[Ut]&&null==t._a[zt]&&Hn(t),null!=t._dayOfYear&&(a=Pn(t._a[Wt],r[Wt]),(t._dayOfYear>fe(a)||0===t._dayOfYear)&&(y(t)._overflowDayOfYear=!0),n=ke(a,0,t._dayOfYear),t._a[zt]=n.getUTCMonth(),t._a[Ut]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[qt]&&0===t._a[Vt]&&0===t._a[Gt]&&0===t._a[Jt]&&(t._nextDay=!0,t._a[qt]=0),t._d=(t._useUTC?ke:be).apply(null,s),i=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[qt]=24),t._w&&void 0!==t._w.d&&t._w.d!==i&&(y(t).weekdayMismatch=!0)}}function Hn(t){var e,n,r,i,a,s,o,l,c;null!=(e=t._w).GG||null!=e.W||null!=e.E?(a=1,s=4,n=Pn(e.GG,t._a[Wt],Me(Jn(),1,4).year),r=Pn(e.W,1),((i=Pn(e.E,1))<1||i>7)&&(l=!0)):(a=t._locale._week.dow,s=t._locale._week.doy,c=Me(Jn(),a,s),n=Pn(e.gg,t._a[Wt],c.year),r=Pn(e.w,c.week),null!=e.d?((i=e.d)<0||i>6)&&(l=!0):null!=e.e?(i=e.e+a,(e.e<0||e.e>6)&&(l=!0)):i=a),r<1||r>Le(n,a,s)?y(t)._overflowWeeks=!0:null!=l?y(t)._overflowWeekday=!0:(o=xe(n,r,i,a,s),t._a[Wt]=o.year,t._dayOfYear=o.dayOfYear)}function $n(t){if(t._f!==i.ISO_8601)if(t._f!==i.RFC_2822){t._a=[],y(t).empty=!0;var e,n,r,a,s,o,l,c=""+t._i,u=c.length,d=0;for(l=(r=z(t._f,t._locale).match(I)||[]).length,e=0;e<l;e++)a=r[e],(n=(c.match(Ft(a,t))||[])[0])&&((s=c.substr(0,c.indexOf(n))).length>0&&y(t).unusedInput.push(s),c=c.slice(c.indexOf(n)+n.length),d+=n.length),R[a]?(n?y(t).empty=!1:y(t).unusedTokens.push(a),$t(a,n,t)):t._strict&&!n&&y(t).unusedTokens.push(a);y(t).charsLeftOver=u-d,c.length>0&&y(t).unusedInput.push(c),t._a[qt]<=12&&!0===y(t).bigHour&&t._a[qt]>0&&(y(t).bigHour=void 0),y(t).parsedDateParts=t._a.slice(0),y(t).meridiem=t._meridiem,t._a[qt]=Zn(t._locale,t._a[qt],t._meridiem),null!==(o=y(t).era)&&(t._a[Wt]=t._locale.erasConvertYear(o,t._a[Wt])),Rn(t),vn(t)}else Fn(t);else En(t)}function Zn(t,e,n){var r;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?((r=t.isPM(n))&&e<12&&(e+=12),r||12!==e||(e=0),e):e}function Wn(t){var e,n,r,i,a,s,o=!1,l=t._f.length;if(0===l)return y(t).invalidFormat=!0,void(t._d=new Date(NaN));for(i=0;i<l;i++)a=0,s=!1,e=x({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[i],$n(e),g(e)&&(s=!0),a+=y(e).charsLeftOver,a+=10*y(e).unusedTokens.length,y(e).score=a,o?a<r&&(r=a,n=e):(null==r||a<r||s)&&(r=a,n=e,s&&(o=!0));_(t,n||e)}function zn(t){if(!t._d){var e=at(t._i),n=void 0===e.day?e.date:e.day;t._a=m([e.year,e.month,n,e.hour,e.minute,e.second,e.millisecond],(function(t){return t&&parseInt(t,10)})),Rn(t)}}function Un(t){var e=new M(vn(qn(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function qn(t){var e=t._i,n=t._f;return t._locale=t._locale||bn(t._l),null===e||void 0===n&&""===e?b({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),L(e)?new M(vn(e)):(h(e)?t._d=e:s(n)?Wn(t):n?$n(t):Vn(t),g(t)||(t._d=null),t))}function Vn(t){var e=t._i;u(e)?t._d=new Date(i.now()):h(e)?t._d=new Date(e.valueOf()):"string"==typeof e?In(t):s(e)?(t._a=m(e.slice(0),(function(t){return parseInt(t,10)})),Rn(t)):o(e)?zn(t):d(e)?t._d=new Date(e):i.createFromInputFallback(t)}function Gn(t,e,n,r,i){var a={};return!0!==e&&!1!==e||(r=e,e=void 0),!0!==n&&!1!==n||(r=n,n=void 0),(o(t)&&c(t)||s(t)&&0===t.length)&&(t=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=i,a._l=n,a._i=t,a._f=e,a._strict=r,Un(a)}function Jn(t,e,n,r){return Gn(t,e,n,r,!1)}i.createFromInputFallback=T("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))})),i.ISO_8601=function(){},i.RFC_2822=function(){};var Xn=T("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=Jn.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:b()})),Kn=T("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=Jn.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:b()}));function Qn(t,e){var n,r;if(1===e.length&&s(e[0])&&(e=e[0]),!e.length)return Jn();for(n=e[0],r=1;r<e.length;++r)e[r].isValid()&&!e[r][t](n)||(n=e[r]);return n}function tr(){return Qn("isBefore",[].slice.call(arguments,0))}function er(){return Qn("isAfter",[].slice.call(arguments,0))}var nr=function(){return Date.now?Date.now():+new Date},rr=["year","quarter","month","week","day","hour","minute","second","millisecond"];function ir(t){var e,n,r=!1,i=rr.length;for(e in t)if(l(t,e)&&(-1===Zt.call(rr,e)||null!=t[e]&&isNaN(t[e])))return!1;for(n=0;n<i;++n)if(t[rr[n]]){if(r)return!1;parseFloat(t[rr[n]])!==dt(t[rr[n]])&&(r=!0)}return!0}function ar(){return this._isValid}function sr(){return Yr(NaN)}function or(t){var e=at(t),n=e.year||0,r=e.quarter||0,i=e.month||0,a=e.week||e.isoWeek||0,s=e.day||0,o=e.hour||0,l=e.minute||0,c=e.second||0,u=e.millisecond||0;this._isValid=ir(e),this._milliseconds=+u+1e3*c+6e4*l+1e3*o*60*60,this._days=+s+7*a,this._months=+i+3*r+12*n,this._data={},this._locale=bn(),this._bubble()}function lr(t){return t instanceof or}function cr(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function ur(t,e,n){var r,i=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),s=0;for(r=0;r<i;r++)(n&&t[r]!==e[r]||!n&&dt(t[r])!==dt(e[r]))&&s++;return s+a}function dr(t,e){H(t,0,0,(function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+F(~~(t/60),2)+e+F(~~t%60,2)}))}dr("Z",":"),dr("ZZ",""),Bt("Z",At),Bt("ZZ",At),Rt(["Z","ZZ"],(function(t,e,n){n._useUTC=!0,n._tzm=mr(At,t)}));var hr=/([\+\-]|\d\d)/gi;function mr(t,e){var n,r,i=(e||"").match(t);return null===i?null:0===(r=60*(n=((i[i.length-1]||[])+"").match(hr)||["-",0,0])[1]+dt(n[2]))?0:"+"===n[0]?r:-r}function _r(t,e){var n,r;return e._isUTC?(n=e.clone(),r=(L(t)||h(t)?t.valueOf():Jn(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),i.updateOffset(n,!1),n):Jn(t).local()}function pr(t){return-Math.round(t._d.getTimezoneOffset())}function fr(t,e,n){var r,a=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=mr(At,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(r=pr(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),a!==t&&(!e||this._changeInProgress?Nr(this,Yr(t-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,i.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:pr(this)}function yr(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function gr(t){return this.utcOffset(0,t)}function br(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(pr(this),"m")),this}function kr(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=mr(Ct,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this}function vr(t){return!!this.isValid()&&(t=t?Jn(t).utcOffset():0,(this.utcOffset()-t)%60==0)}function xr(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Mr(){if(!u(this._isDSTShifted))return this._isDSTShifted;var t,e={};return x(e,this),(e=qn(e))._a?(t=e._isUTC?p(e._a):Jn(e._a),this._isDSTShifted=this.isValid()&&ur(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Lr(){return!!this.isValid()&&!this._isUTC}function wr(){return!!this.isValid()&&this._isUTC}function Tr(){return!!this.isValid()&&this._isUTC&&0===this._offset}i.updateOffset=function(){};var Sr=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Dr=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Yr(t,e){var n,r,i,a=t,s=null;return lr(t)?a={ms:t._milliseconds,d:t._days,M:t._months}:d(t)||!isNaN(+t)?(a={},e?a[e]=+t:a.milliseconds=+t):(s=Sr.exec(t))?(n="-"===s[1]?-1:1,a={y:0,d:dt(s[Ut])*n,h:dt(s[qt])*n,m:dt(s[Vt])*n,s:dt(s[Gt])*n,ms:dt(cr(1e3*s[Jt]))*n}):(s=Dr.exec(t))?(n="-"===s[1]?-1:1,a={y:Er(s[2],n),M:Er(s[3],n),w:Er(s[4],n),d:Er(s[5],n),h:Er(s[6],n),m:Er(s[7],n),s:Er(s[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(i=Ar(Jn(a.from),Jn(a.to)),(a={}).ms=i.milliseconds,a.M=i.months),r=new or(a),lr(t)&&l(t,"_locale")&&(r._locale=t._locale),lr(t)&&l(t,"_isValid")&&(r._isValid=t._isValid),r}function Er(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Cr(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Ar(t,e){var n;return t.isValid()&&e.isValid()?(e=_r(e,t),t.isBefore(e)?n=Cr(t,e):((n=Cr(e,t)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Or(t,e){return function(n,r){var i;return null===r||isNaN(+r)||(Y(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),Nr(this,Yr(n,r),t),this}}function Nr(t,e,n,r){var a=e._milliseconds,s=cr(e._days),o=cr(e._months);t.isValid()&&(r=null==r||r,o&&ue(t,mt(t,"Month")+o*n),s&&_t(t,"Date",mt(t,"Date")+s*n),a&&t._d.setTime(t._d.valueOf()+a*n),r&&i.updateOffset(t,s||o))}Yr.fn=or.prototype,Yr.invalid=sr;var Br=Or(1,"add"),Fr=Or(-1,"subtract");function Ir(t){return"string"==typeof t||t instanceof String}function Pr(t){return L(t)||h(t)||Ir(t)||d(t)||Rr(t)||jr(t)||null==t}function jr(t){var e,n,r=o(t)&&!c(t),i=!1,a=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],s=a.length;for(e=0;e<s;e+=1)n=a[e],i=i||l(t,n);return r&&i}function Rr(t){var e=s(t),n=!1;return e&&(n=0===t.filter((function(e){return!d(e)&&Ir(t)})).length),e&&n}function Hr(t){var e,n,r=o(t)&&!c(t),i=!1,a=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(e=0;e<a.length;e+=1)n=a[e],i=i||l(t,n);return r&&i}function $r(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Zr(t,e){1===arguments.length&&(arguments[0]?Pr(arguments[0])?(t=arguments[0],e=void 0):Hr(arguments[0])&&(e=arguments[0],t=void 0):(t=void 0,e=void 0));var n=t||Jn(),r=_r(n,this).startOf("day"),a=i.calendarFormat(this,r)||"sameElse",s=e&&(E(e[a])?e[a].call(this,n):e[a]);return this.format(s||this.localeData().calendar(a,this,Jn(n)))}function Wr(){return new M(this)}function zr(t,e){var n=L(t)?t:Jn(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=it(e)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())}function Ur(t,e){var n=L(t)?t:Jn(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=it(e)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())}function qr(t,e,n,r){var i=L(t)?t:Jn(t),a=L(e)?e:Jn(e);return!!(this.isValid()&&i.isValid()&&a.isValid())&&("("===(r=r||"()")[0]?this.isAfter(i,n):!this.isBefore(i,n))&&(")"===r[1]?this.isBefore(a,n):!this.isAfter(a,n))}function Vr(t,e){var n,r=L(t)?t:Jn(t);return!(!this.isValid()||!r.isValid())&&("millisecond"===(e=it(e)||"millisecond")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))}function Gr(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function Jr(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function Xr(t,e,n){var r,i,a;if(!this.isValid())return NaN;if(!(r=_r(t,this)).isValid())return NaN;switch(i=6e4*(r.utcOffset()-this.utcOffset()),e=it(e)){case"year":a=Kr(this,r)/12;break;case"month":a=Kr(this,r);break;case"quarter":a=Kr(this,r)/3;break;case"second":a=(this-r)/1e3;break;case"minute":a=(this-r)/6e4;break;case"hour":a=(this-r)/36e5;break;case"day":a=(this-r-i)/864e5;break;case"week":a=(this-r-i)/6048e5;break;default:a=this-r}return n?a:ut(a)}function Kr(t,e){if(t.date()<e.date())return-Kr(e,t);var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,"months");return-(n+(e-r<0?(e-r)/(r-t.clone().add(n-1,"months")):(e-r)/(t.clone().add(n+1,"months")-r)))||0}function Qr(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ti(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||n.year()>9999?W(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):E(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",W(n,"Z")):W(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function ei(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t,e,n,r,i="moment",a="";return this.isLocal()||(i=0===this.utcOffset()?"moment.utc":"moment.parseZone",a="Z"),t="["+i+'("]',e=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",r=a+'[")]',this.format(t+e+n+r)}function ni(t){t||(t=this.isUtc()?i.defaultFormatUtc:i.defaultFormat);var e=W(this,t);return this.localeData().postformat(e)}function ri(t,e){return this.isValid()&&(L(t)&&t.isValid()||Jn(t).isValid())?Yr({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function ii(t){return this.from(Jn(),t)}function ai(t,e){return this.isValid()&&(L(t)&&t.isValid()||Jn(t).isValid())?Yr({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function si(t){return this.to(Jn(),t)}function oi(t){var e;return void 0===t?this._locale._abbr:(null!=(e=bn(t))&&(this._locale=e),this)}i.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",i.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var li=T("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(t){return void 0===t?this.localeData():this.locale(t)}));function ci(){return this._locale}var ui=1e3,di=60*ui,hi=60*di,mi=3506328*hi;function _i(t,e){return(t%e+e)%e}function pi(t,e,n){return t<100&&t>=0?new Date(t+400,e,n)-mi:new Date(t,e,n).valueOf()}function fi(t,e,n){return t<100&&t>=0?Date.UTC(t+400,e,n)-mi:Date.UTC(t,e,n)}function yi(t){var e,n;if(void 0===(t=it(t))||"millisecond"===t||!this.isValid())return this;switch(n=this._isUTC?fi:pi,t){case"year":e=n(this.year(),0,1);break;case"quarter":e=n(this.year(),this.month()-this.month()%3,1);break;case"month":e=n(this.year(),this.month(),1);break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=n(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=_i(e+(this._isUTC?0:this.utcOffset()*di),hi);break;case"minute":e=this._d.valueOf(),e-=_i(e,di);break;case"second":e=this._d.valueOf(),e-=_i(e,ui)}return this._d.setTime(e),i.updateOffset(this,!0),this}function gi(t){var e,n;if(void 0===(t=it(t))||"millisecond"===t||!this.isValid())return this;switch(n=this._isUTC?fi:pi,t){case"year":e=n(this.year()+1,0,1)-1;break;case"quarter":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=n(this.year(),this.month()+1,1)-1;break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=hi-_i(e+(this._isUTC?0:this.utcOffset()*di),hi)-1;break;case"minute":e=this._d.valueOf(),e+=di-_i(e,di)-1;break;case"second":e=this._d.valueOf(),e+=ui-_i(e,ui)-1}return this._d.setTime(e),i.updateOffset(this,!0),this}function bi(){return this._d.valueOf()-6e4*(this._offset||0)}function ki(){return Math.floor(this.valueOf()/1e3)}function vi(){return new Date(this.valueOf())}function xi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Mi(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Li(){return this.isValid()?this.toISOString():null}function wi(){return g(this)}function Ti(){return _({},y(this))}function Si(){return y(this).overflow}function Di(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Yi(t,e){var n,r,a,s=this._eras||bn("en")._eras;for(n=0,r=s.length;n<r;++n)switch("string"==typeof s[n].since&&(a=i(s[n].since).startOf("day"),s[n].since=a.valueOf()),typeof s[n].until){case"undefined":s[n].until=1/0;break;case"string":a=i(s[n].until).startOf("day").valueOf(),s[n].until=a.valueOf()}return s}function Ei(t,e,n){var r,i,a,s,o,l=this.eras();for(t=t.toUpperCase(),r=0,i=l.length;r<i;++r)if(a=l[r].name.toUpperCase(),s=l[r].abbr.toUpperCase(),o=l[r].narrow.toUpperCase(),n)switch(e){case"N":case"NN":case"NNN":if(s===t)return l[r];break;case"NNNN":if(a===t)return l[r];break;case"NNNNN":if(o===t)return l[r]}else if([a,s,o].indexOf(t)>=0)return l[r]}function Ci(t,e){var n=t.since<=t.until?1:-1;return void 0===e?i(t.since).year():i(t.since).year()+(e-t.offset)*n}function Ai(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<e;++t){if(n=this.clone().startOf("day").valueOf(),r[t].since<=n&&n<=r[t].until)return r[t].name;if(r[t].until<=n&&n<=r[t].since)return r[t].name}return""}function Oi(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<e;++t){if(n=this.clone().startOf("day").valueOf(),r[t].since<=n&&n<=r[t].until)return r[t].narrow;if(r[t].until<=n&&n<=r[t].since)return r[t].narrow}return""}function Ni(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<e;++t){if(n=this.clone().startOf("day").valueOf(),r[t].since<=n&&n<=r[t].until)return r[t].abbr;if(r[t].until<=n&&n<=r[t].since)return r[t].abbr}return""}function Bi(){var t,e,n,r,a=this.localeData().eras();for(t=0,e=a.length;t<e;++t)if(n=a[t].since<=a[t].until?1:-1,r=this.clone().startOf("day").valueOf(),a[t].since<=r&&r<=a[t].until||a[t].until<=r&&r<=a[t].since)return(this.year()-i(a[t].since).year())*n+a[t].offset;return this.year()}function Fi(t){return l(this,"_erasNameRegex")||Zi.call(this),t?this._erasNameRegex:this._erasRegex}function Ii(t){return l(this,"_erasAbbrRegex")||Zi.call(this),t?this._erasAbbrRegex:this._erasRegex}function Pi(t){return l(this,"_erasNarrowRegex")||Zi.call(this),t?this._erasNarrowRegex:this._erasRegex}function ji(t,e){return e.erasAbbrRegex(t)}function Ri(t,e){return e.erasNameRegex(t)}function Hi(t,e){return e.erasNarrowRegex(t)}function $i(t,e){return e._eraYearOrdinalRegex||Yt}function Zi(){var t,e,n=[],r=[],i=[],a=[],s=this.eras();for(t=0,e=s.length;t<e;++t)r.push(Pt(s[t].name)),n.push(Pt(s[t].abbr)),i.push(Pt(s[t].narrow)),a.push(Pt(s[t].name)),a.push(Pt(s[t].abbr)),a.push(Pt(s[t].narrow));this._erasRegex=new RegExp("^("+a.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+r.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+n.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+i.join("|")+")","i")}function Wi(t,e){H(0,[t,t.length],0,e)}function zi(t){return Xi.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Ui(t){return Xi.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function qi(){return Le(this.year(),1,4)}function Vi(){return Le(this.isoWeekYear(),1,4)}function Gi(){var t=this.localeData()._week;return Le(this.year(),t.dow,t.doy)}function Ji(){var t=this.localeData()._week;return Le(this.weekYear(),t.dow,t.doy)}function Xi(t,e,n,r,i){var a;return null==t?Me(this,r,i).year:(e>(a=Le(t,r,i))&&(e=a),Ki.call(this,t,e,n,r,i))}function Ki(t,e,n,r,i){var a=xe(t,e,n,r,i),s=ke(a.year,0,a.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}function Qi(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}H("N",0,0,"eraAbbr"),H("NN",0,0,"eraAbbr"),H("NNN",0,0,"eraAbbr"),H("NNNN",0,0,"eraName"),H("NNNNN",0,0,"eraNarrow"),H("y",["y",1],"yo","eraYear"),H("y",["yy",2],0,"eraYear"),H("y",["yyy",3],0,"eraYear"),H("y",["yyyy",4],0,"eraYear"),Bt("N",ji),Bt("NN",ji),Bt("NNN",ji),Bt("NNNN",Ri),Bt("NNNNN",Hi),Rt(["N","NN","NNN","NNNN","NNNNN"],(function(t,e,n,r){var i=n._locale.erasParse(t,r,n._strict);i?y(n).era=i:y(n).invalidEra=t})),Bt("y",Yt),Bt("yy",Yt),Bt("yyy",Yt),Bt("yyyy",Yt),Bt("yo",$i),Rt(["y","yy","yyy","yyyy"],Wt),Rt(["yo"],(function(t,e,n,r){var i;n._locale._eraYearOrdinalRegex&&(i=t.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?e[Wt]=n._locale.eraYearOrdinalParse(t,i):e[Wt]=parseInt(t,10)})),H(0,["gg",2],0,(function(){return this.weekYear()%100})),H(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Wi("gggg","weekYear"),Wi("ggggg","weekYear"),Wi("GGGG","isoWeekYear"),Wi("GGGGG","isoWeekYear"),rt("weekYear","gg"),rt("isoWeekYear","GG"),ot("weekYear",1),ot("isoWeekYear",1),Bt("G",Et),Bt("g",Et),Bt("GG",Mt,bt),Bt("gg",Mt,bt),Bt("GGGG",St,vt),Bt("gggg",St,vt),Bt("GGGGG",Dt,xt),Bt("ggggg",Dt,xt),Ht(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,r){e[r.substr(0,2)]=dt(t)})),Ht(["gg","GG"],(function(t,e,n,r){e[r]=i.parseTwoDigitYear(t)})),H("Q",0,"Qo","quarter"),rt("quarter","Q"),ot("quarter",7),Bt("Q",gt),Rt("Q",(function(t,e){e[zt]=3*(dt(t)-1)})),H("D",["DD",2],"Do","date"),rt("date","D"),ot("date",9),Bt("D",Mt),Bt("DD",Mt,bt),Bt("Do",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),Rt(["D","DD"],Ut),Rt("Do",(function(t,e){e[Ut]=dt(t.match(Mt)[0])}));var ta=ht("Date",!0);function ea(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}H("DDD",["DDDD",3],"DDDo","dayOfYear"),rt("dayOfYear","DDD"),ot("dayOfYear",4),Bt("DDD",Tt),Bt("DDDD",kt),Rt(["DDD","DDDD"],(function(t,e,n){n._dayOfYear=dt(t)})),H("m",["mm",2],0,"minute"),rt("minute","m"),ot("minute",14),Bt("m",Mt),Bt("mm",Mt,bt),Rt(["m","mm"],Vt);var na=ht("Minutes",!1);H("s",["ss",2],0,"second"),rt("second","s"),ot("second",15),Bt("s",Mt),Bt("ss",Mt,bt),Rt(["s","ss"],Gt);var ra,ia,aa=ht("Seconds",!1);for(H("S",0,0,(function(){return~~(this.millisecond()/100)})),H(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),H(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),H(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),H(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),H(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),H(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),rt("millisecond","ms"),ot("millisecond",16),Bt("S",Tt,gt),Bt("SS",Tt,bt),Bt("SSS",Tt,kt),ra="SSSS";ra.length<=9;ra+="S")Bt(ra,Yt);function sa(t,e){e[Jt]=dt(1e3*("0."+t))}for(ra="S";ra.length<=9;ra+="S")Rt(ra,sa);function oa(){return this._isUTC?"UTC":""}function la(){return this._isUTC?"Coordinated Universal Time":""}ia=ht("Milliseconds",!1),H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var ca=M.prototype;function ua(t){return Jn(1e3*t)}function da(){return Jn.apply(null,arguments).parseZone()}function ha(t){return t}ca.add=Br,ca.calendar=Zr,ca.clone=Wr,ca.diff=Xr,ca.endOf=gi,ca.format=ni,ca.from=ri,ca.fromNow=ii,ca.to=ai,ca.toNow=si,ca.get=pt,ca.invalidAt=Si,ca.isAfter=zr,ca.isBefore=Ur,ca.isBetween=qr,ca.isSame=Vr,ca.isSameOrAfter=Gr,ca.isSameOrBefore=Jr,ca.isValid=wi,ca.lang=li,ca.locale=oi,ca.localeData=ci,ca.max=Kn,ca.min=Xn,ca.parsingFlags=Ti,ca.set=ft,ca.startOf=yi,ca.subtract=Fr,ca.toArray=xi,ca.toObject=Mi,ca.toDate=vi,ca.toISOString=ti,ca.inspect=ei,"undefined"!=typeof Symbol&&null!=Symbol.for&&(ca[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),ca.toJSON=Li,ca.toString=Qr,ca.unix=ki,ca.valueOf=bi,ca.creationData=Di,ca.eraName=Ai,ca.eraNarrow=Oi,ca.eraAbbr=Ni,ca.eraYear=Bi,ca.year=ye,ca.isLeapYear=ge,ca.weekYear=zi,ca.isoWeekYear=Ui,ca.quarter=ca.quarters=Qi,ca.month=de,ca.daysInMonth=he,ca.week=ca.weeks=Ye,ca.isoWeek=ca.isoWeeks=Ee,ca.weeksInYear=Gi,ca.weeksInWeekYear=Ji,ca.isoWeeksInYear=qi,ca.isoWeeksInISOWeekYear=Vi,ca.date=ta,ca.day=ca.days=ze,ca.weekday=Ue,ca.isoWeekday=qe,ca.dayOfYear=ea,ca.hour=ca.hours=an,ca.minute=ca.minutes=na,ca.second=ca.seconds=aa,ca.millisecond=ca.milliseconds=ia,ca.utcOffset=fr,ca.utc=gr,ca.local=br,ca.parseZone=kr,ca.hasAlignedHourOffset=vr,ca.isDST=xr,ca.isLocal=Lr,ca.isUtcOffset=wr,ca.isUtc=Tr,ca.isUTC=Tr,ca.zoneAbbr=oa,ca.zoneName=la,ca.dates=T("dates accessor is deprecated. Use date instead.",ta),ca.months=T("months accessor is deprecated. Use month instead",de),ca.years=T("years accessor is deprecated. Use year instead",ye),ca.zone=T("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",yr),ca.isDSTShifted=T("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Mr);var ma=O.prototype;function _a(t,e,n,r){var i=bn(),a=p().set(r,e);return i[n](a,t)}function pa(t,e,n){if(d(t)&&(e=t,t=void 0),t=t||"",null!=e)return _a(t,e,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=_a(t,r,n,"month");return i}function fa(t,e,n,r){"boolean"==typeof t?(d(e)&&(n=e,e=void 0),e=e||""):(n=e=t,t=!1,d(e)&&(n=e,e=void 0),e=e||"");var i,a=bn(),s=t?a._week.dow:0,o=[];if(null!=n)return _a(e,(n+s)%7,r,"day");for(i=0;i<7;i++)o[i]=_a(e,(i+s)%7,r,"day");return o}function ya(t,e){return pa(t,e,"months")}function ga(t,e){return pa(t,e,"monthsShort")}function ba(t,e,n){return fa(t,e,n,"weekdays")}function ka(t,e,n){return fa(t,e,n,"weekdaysShort")}function va(t,e,n){return fa(t,e,n,"weekdaysMin")}ma.calendar=B,ma.longDateFormat=q,ma.invalidDate=G,ma.ordinal=K,ma.preparse=ha,ma.postformat=ha,ma.relativeTime=tt,ma.pastFuture=et,ma.set=C,ma.eras=Yi,ma.erasParse=Ei,ma.erasConvertYear=Ci,ma.erasAbbrRegex=Ii,ma.erasNameRegex=Fi,ma.erasNarrowRegex=Pi,ma.months=se,ma.monthsShort=oe,ma.monthsParse=ce,ma.monthsRegex=_e,ma.monthsShortRegex=me,ma.week=we,ma.firstDayOfYear=De,ma.firstDayOfWeek=Se,ma.weekdays=Re,ma.weekdaysMin=$e,ma.weekdaysShort=He,ma.weekdaysParse=We,ma.weekdaysRegex=Ve,ma.weekdaysShortRegex=Ge,ma.weekdaysMinRegex=Je,ma.isPM=nn,ma.meridiem=sn,fn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===dt(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),i.lang=T("moment.lang is deprecated. Use moment.locale instead.",fn),i.langData=T("moment.langData is deprecated. Use moment.localeData instead.",bn);var xa=Math.abs;function Ma(){var t=this._data;return this._milliseconds=xa(this._milliseconds),this._days=xa(this._days),this._months=xa(this._months),t.milliseconds=xa(t.milliseconds),t.seconds=xa(t.seconds),t.minutes=xa(t.minutes),t.hours=xa(t.hours),t.months=xa(t.months),t.years=xa(t.years),this}function La(t,e,n,r){var i=Yr(e,n);return t._milliseconds+=r*i._milliseconds,t._days+=r*i._days,t._months+=r*i._months,t._bubble()}function wa(t,e){return La(this,t,e,1)}function Ta(t,e){return La(this,t,e,-1)}function Sa(t){return t<0?Math.floor(t):Math.ceil(t)}function Da(){var t,e,n,r,i,a=this._milliseconds,s=this._days,o=this._months,l=this._data;return a>=0&&s>=0&&o>=0||a<=0&&s<=0&&o<=0||(a+=864e5*Sa(Ea(o)+s),s=0,o=0),l.milliseconds=a%1e3,t=ut(a/1e3),l.seconds=t%60,e=ut(t/60),l.minutes=e%60,n=ut(e/60),l.hours=n%24,s+=ut(n/24),o+=i=ut(Ya(s)),s-=Sa(Ea(i)),r=ut(o/12),o%=12,l.days=s,l.months=o,l.years=r,this}function Ya(t){return 4800*t/146097}function Ea(t){return 146097*t/4800}function Ca(t){if(!this.isValid())return NaN;var e,n,r=this._milliseconds;if("month"===(t=it(t))||"quarter"===t||"year"===t)switch(e=this._days+r/864e5,n=this._months+Ya(e),t){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(e=this._days+Math.round(Ea(this._months)),t){case"week":return e/7+r/6048e5;case"day":return e+r/864e5;case"hour":return 24*e+r/36e5;case"minute":return 1440*e+r/6e4;case"second":return 86400*e+r/1e3;case"millisecond":return Math.floor(864e5*e)+r;default:throw new Error("Unknown unit "+t)}}function Aa(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*dt(this._months/12):NaN}function Oa(t){return function(){return this.as(t)}}var Na=Oa("ms"),Ba=Oa("s"),Fa=Oa("m"),Ia=Oa("h"),Pa=Oa("d"),ja=Oa("w"),Ra=Oa("M"),Ha=Oa("Q"),$a=Oa("y");function Za(){return Yr(this)}function Wa(t){return t=it(t),this.isValid()?this[t+"s"]():NaN}function za(t){return function(){return this.isValid()?this._data[t]:NaN}}var Ua=za("milliseconds"),qa=za("seconds"),Va=za("minutes"),Ga=za("hours"),Ja=za("days"),Xa=za("months"),Ka=za("years");function Qa(){return ut(this.days()/7)}var ts=Math.round,es={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ns(t,e,n,r,i){return i.relativeTime(e||1,!!n,t,r)}function rs(t,e,n,r){var i=Yr(t).abs(),a=ts(i.as("s")),s=ts(i.as("m")),o=ts(i.as("h")),l=ts(i.as("d")),c=ts(i.as("M")),u=ts(i.as("w")),d=ts(i.as("y")),h=a<=n.ss&&["s",a]||a<n.s&&["ss",a]||s<=1&&["m"]||s<n.m&&["mm",s]||o<=1&&["h"]||o<n.h&&["hh",o]||l<=1&&["d"]||l<n.d&&["dd",l];return null!=n.w&&(h=h||u<=1&&["w"]||u<n.w&&["ww",u]),(h=h||c<=1&&["M"]||c<n.M&&["MM",c]||d<=1&&["y"]||["yy",d])[2]=e,h[3]=+t>0,h[4]=r,ns.apply(null,h)}function is(t){return void 0===t?ts:"function"==typeof t&&(ts=t,!0)}function as(t,e){return void 0!==es[t]&&(void 0===e?es[t]:(es[t]=e,"s"===t&&(es.ss=e-1),!0))}function ss(t,e){if(!this.isValid())return this.localeData().invalidDate();var n,r,i=!1,a=es;return"object"==typeof t&&(e=t,t=!1),"boolean"==typeof t&&(i=t),"object"==typeof e&&(a=Object.assign({},es,e),null!=e.s&&null==e.ss&&(a.ss=e.s-1)),r=rs(this,!i,a,n=this.localeData()),i&&(r=n.pastFuture(+this,r)),n.postformat(r)}var os=Math.abs;function ls(t){return(t>0)-(t<0)||+t}function cs(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n,r,i,a,s,o,l=os(this._milliseconds)/1e3,c=os(this._days),u=os(this._months),d=this.asSeconds();return d?(t=ut(l/60),e=ut(t/60),l%=60,t%=60,n=ut(u/12),u%=12,r=l?l.toFixed(3).replace(/\.?0+$/,""):"",i=d<0?"-":"",a=ls(this._months)!==ls(d)?"-":"",s=ls(this._days)!==ls(d)?"-":"",o=ls(this._milliseconds)!==ls(d)?"-":"",i+"P"+(n?a+n+"Y":"")+(u?a+u+"M":"")+(c?s+c+"D":"")+(e||t||l?"T":"")+(e?o+e+"H":"")+(t?o+t+"M":"")+(l?o+r+"S":"")):"P0D"}var us=or.prototype;return us.isValid=ar,us.abs=Ma,us.add=wa,us.subtract=Ta,us.as=Ca,us.asMilliseconds=Na,us.asSeconds=Ba,us.asMinutes=Fa,us.asHours=Ia,us.asDays=Pa,us.asWeeks=ja,us.asMonths=Ra,us.asQuarters=Ha,us.asYears=$a,us.valueOf=Aa,us._bubble=Da,us.clone=Za,us.get=Wa,us.milliseconds=Ua,us.seconds=qa,us.minutes=Va,us.hours=Ga,us.days=Ja,us.weeks=Qa,us.months=Xa,us.years=Ka,us.humanize=ss,us.toISOString=cs,us.toString=cs,us.toJSON=cs,us.locale=oi,us.localeData=ci,us.toIsoString=T("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",cs),us.lang=li,H("X",0,0,"unix"),H("x",0,0,"valueOf"),Bt("x",Et),Bt("X",Ot),Rt("X",(function(t,e,n){n._d=new Date(1e3*parseFloat(t))})),Rt("x",(function(t,e,n){n._d=new Date(dt(t))})),i.version="2.29.4",a(Jn),i.fn=ca,i.min=tr,i.max=er,i.now=nr,i.utc=p,i.unix=ua,i.months=ya,i.isDate=h,i.locale=fn,i.invalid=b,i.duration=Yr,i.isMoment=L,i.weekdays=ba,i.parseZone=da,i.localeData=bn,i.isDuration=lr,i.monthsShort=ga,i.weekdaysMin=va,i.defineLocale=yn,i.updateLocale=gn,i.locales=kn,i.weekdaysShort=ka,i.normalizeUnits=it,i.relativeTimeRounding=is,i.relativeTimeThreshold=as,i.calendarFormat=$r,i.prototype=ca,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},i}()},87594:(t,e)=>{function n(t){let e,n=[];for(let r of t.split(",").map((t=>t.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(e=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[t,r,i,a]=e;if(r&&a){r=parseInt(r),a=parseInt(a);const t=r<a?1:-1;"-"!==i&&".."!==i&&"\u2025"!==i||(a+=t);for(let e=r;e!==a;e+=t)n.push(e)}}return n}e.default=n,t.exports=n},59373:(t,e,n)=>{"use strict";function r(t,e){let n;if(void 0===e)for(const r of t)null!=r&&(n<r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n<i||void 0===n&&i>=i)&&(n=i)}return n}function i(t,e){let n;if(void 0===e)for(const r of t)null!=r&&(n>r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function a(t){return t}n.d(e,{Nb1:()=>so,LLu:()=>_,F5q:()=>m,$0Z:()=>ko,Dts:()=>xo,WQY:()=>Lo,qpX:()=>To,u93:()=>So,tFB:()=>Yo,YY7:()=>Ao,OvA:()=>No,dCK:()=>Fo,zgE:()=>jo,fGX:()=>Ho,$m7:()=>Zo,c_6:()=>co,fxm:()=>zo,FdL:()=>Qo,ak_:()=>tl,SxZ:()=>rl,eA_:()=>al,jsv:()=>ol,iJ:()=>sl,JHv:()=>hr,jvg:()=>mo,Fp7:()=>r,VV$:()=>i,ve8:()=>fo,BYU:()=>ai,PKp:()=>mi,Xf:()=>Ys,Ys:()=>Es,td_:()=>Cs,YPS:()=>qn,rr1:()=>Ei,i$Z:()=>la,WQD:()=>Di,Z_i:()=>Ti,F0B:()=>Gi,NGh:()=>Ni});var s=1e-6;function o(t){return"translate("+t+",0)"}function l(t){return"translate(0,"+t+")"}function c(t){return e=>+t(e)}function u(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function d(){return!this.__axis}function h(t,e){var n=[],r=null,i=null,h=6,m=6,_=3,p="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,f=1===t||4===t?-1:1,y=4===t||2===t?"x":"y",g=1===t||3===t?o:l;function b(o){var l=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,b=null==i?e.tickFormat?e.tickFormat.apply(e,n):a:i,k=Math.max(h,0)+_,v=e.range(),x=+v[0]+p,M=+v[v.length-1]+p,L=(e.bandwidth?u:c)(e.copy(),p),w=o.selection?o.selection():o,T=w.selectAll(".domain").data([null]),S=w.selectAll(".tick").data(l,e).order(),D=S.exit(),Y=S.enter().append("g").attr("class","tick"),E=S.select("line"),C=S.select("text");T=T.merge(T.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),S=S.merge(Y),E=E.merge(Y.append("line").attr("stroke","currentColor").attr(y+"2",f*h)),C=C.merge(Y.append("text").attr("fill","currentColor").attr(y,f*k).attr("dy",1===t?"0em":3===t?"0.71em":"0.32em")),o!==w&&(T=T.transition(o),S=S.transition(o),E=E.transition(o),C=C.transition(o),D=D.transition(o).attr("opacity",s).attr("transform",(function(t){return isFinite(t=L(t))?g(t+p):this.getAttribute("transform")})),Y.attr("opacity",s).attr("transform",(function(t){var e=this.parentNode.__axis;return g((e&&isFinite(e=e(t))?e:L(t))+p)}))),D.remove(),T.attr("d",4===t||2===t?m?"M"+f*m+","+x+"H"+p+"V"+M+"H"+f*m:"M"+p+","+x+"V"+M:m?"M"+x+","+f*m+"V"+p+"H"+M+"V"+f*m:"M"+x+","+p+"H"+M),S.attr("opacity",1).attr("transform",(function(t){return g(L(t)+p)})),E.attr(y+"2",f*h),C.attr(y,f*k).text(b),w.filter(d).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===t?"start":4===t?"end":"middle"),w.each((function(){this.__axis=L}))}return b.scale=function(t){return arguments.length?(e=t,b):e},b.ticks=function(){return n=Array.from(arguments),b},b.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),b):n.slice()},b.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),b):r&&r.slice()},b.tickFormat=function(t){return arguments.length?(i=t,b):i},b.tickSize=function(t){return arguments.length?(h=m=+t,b):h},b.tickSizeInner=function(t){return arguments.length?(h=+t,b):h},b.tickSizeOuter=function(t){return arguments.length?(m=+t,b):m},b.tickPadding=function(t){return arguments.length?(_=+t,b):_},b.offset=function(t){return arguments.length?(p=+t,b):p},b}function m(t){return h(1,t)}function _(t){return h(3,t)}function p(){}function f(t){return null==t?p:function(){return this.querySelector(t)}}function y(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function g(){return[]}function b(t){return null==t?g:function(){return this.querySelectorAll(t)}}function k(t){return function(){return this.matches(t)}}function v(t){return function(e){return e.matches(t)}}var x=Array.prototype.find;function M(){return this.firstElementChild}var L=Array.prototype.filter;function w(){return Array.from(this.children)}function T(t){return new Array(t.length)}function S(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function D(t){return function(){return t}}function Y(t,e,n,r,i,a){for(var s,o=0,l=e.length,c=a.length;o<c;++o)(s=e[o])?(s.__data__=a[o],r[o]=s):n[o]=new S(t,a[o]);for(;o<l;++o)(s=e[o])&&(i[o]=s)}function E(t,e,n,r,i,a,s){var o,l,c,u=new Map,d=e.length,h=a.length,m=new Array(d);for(o=0;o<d;++o)(l=e[o])&&(m[o]=c=s.call(l,l.__data__,o,e)+"",u.has(c)?i[o]=l:u.set(c,l));for(o=0;o<h;++o)c=s.call(t,a[o],o,a)+"",(l=u.get(c))?(r[o]=l,l.__data__=a[o],u.delete(c)):n[o]=new S(t,a[o]);for(o=0;o<d;++o)(l=e[o])&&u.get(m[o])===l&&(i[o]=l)}function C(t){return t.__data__}function A(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function O(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}S.prototype={constructor:S,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 N="http://www.w3.org/1999/xhtml";const B={svg:"http://www.w3.org/2000/svg",xhtml:N,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function F(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),B.hasOwnProperty(e)?{space:B[e],local:t}:t}function I(t){return function(){this.removeAttribute(t)}}function P(t){return function(){this.removeAttributeNS(t.space,t.local)}}function j(t,e){return function(){this.setAttribute(t,e)}}function R(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function H(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function $(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function Z(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function W(t){return function(){this.style.removeProperty(t)}}function z(t,e,n){return function(){this.style.setProperty(t,e,n)}}function U(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function q(t,e){return t.style.getPropertyValue(e)||Z(t).getComputedStyle(t,null).getPropertyValue(e)}function V(t){return function(){delete this[t]}}function G(t,e){return function(){this[t]=e}}function J(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function X(t){return t.trim().split(/^|\s+/)}function K(t){return t.classList||new Q(t)}function Q(t){this._node=t,this._names=X(t.getAttribute("class")||"")}function tt(t,e){for(var n=K(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function et(t,e){for(var n=K(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function nt(t){return function(){tt(this,t)}}function rt(t){return function(){et(this,t)}}function it(t,e){return function(){(e.apply(this,arguments)?tt:et)(this,t)}}function at(){this.textContent=""}function st(t){return function(){this.textContent=t}}function ot(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function lt(){this.innerHTML=""}function ct(t){return function(){this.innerHTML=t}}function ut(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function dt(){this.nextSibling&&this.parentNode.appendChild(this)}function ht(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mt(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===N&&e.documentElement.namespaceURI===N?e.createElement(t):e.createElementNS(n,t)}}function _t(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function pt(t){var e=F(t);return(e.local?_t:mt)(e)}function ft(){return null}function yt(){var t=this.parentNode;t&&t.removeChild(this)}function gt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function bt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function vt(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r<a;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.options);++i?e.length=i:delete this.__on}}}function xt(t,e,n){return function(){var r,i=this.__on,a=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(i)for(var s=0,o=i.length;s<o;++s)if((r=i[s]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=a,r.options=n),void(r.value=e);this.addEventListener(t.type,a,n),r={type:t.type,name:t.name,value:e,listener:a,options:n},i?i.push(r):this.__on=[r]}}function Mt(t,e,n){var r=Z(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function Lt(t,e){return function(){return Mt(this,t,e)}}function wt(t,e){return function(){return Mt(this,t,e.apply(this,arguments))}}Q.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 Tt=[null];function St(t,e){this._groups=t,this._parents=e}function Dt(){return new St([[document.documentElement]],Tt)}St.prototype=Dt.prototype={constructor:St,select:function(t){"function"!=typeof t&&(t=f(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,s,o=e[i],l=o.length,c=r[i]=new Array(l),u=0;u<l;++u)(a=o[u])&&(s=t.call(a,a.__data__,u,o))&&("__data__"in a&&(s.__data__=a.__data__),c[u]=s);return new St(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return y(t.apply(this,arguments))}}(t):b(t);for(var e=this._groups,n=e.length,r=[],i=[],a=0;a<n;++a)for(var s,o=e[a],l=o.length,c=0;c<l;++c)(s=o[c])&&(r.push(t.call(s,s.__data__,c,o)),i.push(s));return new St(r,i)},selectChild:function(t){return this.select(null==t?M:function(t){return function(){return x.call(this.children,t)}}("function"==typeof t?t:v(t)))},selectChildren:function(t){return this.selectAll(null==t?w:function(t){return function(){return L.call(this.children,t)}}("function"==typeof t?t:v(t)))},filter:function(t){"function"!=typeof t&&(t=k(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,s=e[i],o=s.length,l=r[i]=[],c=0;c<o;++c)(a=s[c])&&t.call(a,a.__data__,c,s)&&l.push(a);return new St(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,C);var n=e?E:Y,r=this._parents,i=this._groups;"function"!=typeof t&&(t=D(t));for(var a=i.length,s=new Array(a),o=new Array(a),l=new Array(a),c=0;c<a;++c){var u=r[c],d=i[c],h=d.length,m=A(t.call(u,u&&u.__data__,c,r)),_=m.length,p=o[c]=new Array(_),f=s[c]=new Array(_),y=l[c]=new Array(h);n(u,d,p,f,y,m,e);for(var g,b,k=0,v=0;k<_;++k)if(g=p[k]){for(k>=v&&(v=k+1);!(b=f[v])&&++v<_;);g._next=b||null}}return(s=new St(s,r))._enter=o,s._exit=l,s},enter:function(){return new St(this._enter||this._groups.map(T),this._parents)},exit:function(){return new St(this._exit||this._groups.map(T),this._parents)},join:function(t,e,n){var r=this.enter(),i=this,a=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(i=e(i))&&(i=i.selection()),null==n?a.remove():n(a),r&&i?r.merge(i).order():i},merge:function(t){for(var e=t.selection?t.selection():t,n=this._groups,r=e._groups,i=n.length,a=r.length,s=Math.min(i,a),o=new Array(i),l=0;l<s;++l)for(var c,u=n[l],d=r[l],h=u.length,m=o[l]=new Array(h),_=0;_<h;++_)(c=u[_]||d[_])&&(m[_]=c);for(;l<i;++l)o[l]=n[l];return new St(o,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],a=i.length-1,s=i[a];--a>=0;)(r=i[a])&&(s&&4^r.compareDocumentPosition(s)&&s.parentNode.insertBefore(r,s),s=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=O);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a<r;++a){for(var s,o=n[a],l=o.length,c=i[a]=new Array(l),u=0;u<l;++u)(s=o[u])&&(c[u]=s);c.sort(e)}return new St(i,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,n=t.length;e<n;++e)for(var r=t[e],i=0,a=r.length;i<a;++i){var s=r[i];if(s)return s}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,n=0,r=e.length;n<r;++n)for(var i,a=e[n],s=0,o=a.length;s<o;++s)(i=a[s])&&t.call(i,i.__data__,s,a);return this},attr:function(t,e){var n=F(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?P:I:"function"==typeof e?n.local?$:H:n.local?R:j)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?W:"function"==typeof e?U:z)(t,e,null==n?"":n)):q(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?V:"function"==typeof e?J:G)(t,e)):this.node()[t]},classed:function(t,e){var n=X(t+"");if(arguments.length<2){for(var r=K(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?it:e?nt:rt)(n,e))},text:function(t){return arguments.length?this.each(null==t?at:("function"==typeof t?ot:st)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?lt:("function"==typeof t?ut:ct)(t)):this.node().innerHTML},raise:function(){return this.each(dt)},lower:function(){return this.each(ht)},append:function(t){var e="function"==typeof t?t:pt(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:pt(t),r=null==e?ft:"function"==typeof e?e:f(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(yt)},clone:function(t){return this.select(t?bt:gt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,a=kt(t+""),s=a.length;if(!(arguments.length<2)){for(o=e?xt:vt,r=0;r<s;++r)this.each(o(a[r],e,n));return this}var o=this.node().__on;if(o)for(var l,c=0,u=o.length;c<u;++c)for(r=0,l=o[c];r<s;++r)if((i=a[r]).type===l.type&&i.name===l.name)return l.value},dispatch:function(t,e){return this.each(("function"==typeof e?wt:Lt)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r,i=t[e],a=0,s=i.length;a<s;++a)(r=i[a])&&(yield r)}};const Yt=Dt;var Et={value:()=>{}};function Ct(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new At(r)}function At(t){this._=t}function Ot(t,e){return t.trim().split(/^|\s+/).map((function(t){var n="",r=t.indexOf(".");if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function Nt(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function Bt(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=Et,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}At.prototype=Ct.prototype={constructor:At,on:function(t,e){var n,r=this._,i=Ot(t+"",r),a=-1,s=i.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<s;)if(n=(t=i[a]).type)r[n]=Bt(r[n],t.name,e);else if(null==e)for(n in r)r[n]=Bt(r[n],t.name,null);return this}for(;++a<s;)if((n=(t=i[a]).type)&&(n=Nt(r[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new At(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}};const Ft=Ct;var It,Pt,jt=0,Rt=0,Ht=0,$t=0,Zt=0,Wt=0,zt="object"==typeof performance&&performance.now?performance:Date,Ut="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function qt(){return Zt||(Ut(Vt),Zt=zt.now()+Wt)}function Vt(){Zt=0}function Gt(){this._call=this._time=this._next=null}function Jt(t,e,n){var r=new Gt;return r.restart(t,e,n),r}function Xt(){Zt=($t=zt.now())+Wt,jt=Rt=0;try{!function(){qt(),++jt;for(var t,e=It;e;)(t=Zt-e._time)>=0&&e._call.call(void 0,t),e=e._next;--jt}()}finally{jt=0,function(){var t,e,n=It,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:It=e);Pt=t,Qt(r)}(),Zt=0}}function Kt(){var t=zt.now(),e=t-$t;e>1e3&&(Wt-=e,$t=t)}function Qt(t){jt||(Rt&&(Rt=clearTimeout(Rt)),t-Zt>24?(t<1/0&&(Rt=setTimeout(Xt,t-zt.now()-Wt)),Ht&&(Ht=clearInterval(Ht))):(Ht||($t=zt.now(),Ht=setInterval(Kt,1e3)),jt=1,Ut(Xt)))}function te(t,e,n){var r=new Gt;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Gt.prototype=Jt.prototype={constructor:Gt,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?qt():+n)+(null==e?0:+e),this._next||Pt===this||(Pt?Pt._next=this:It=this,Pt=this),this._call=t,this._time=n,Qt()},stop:function(){this._call&&(this._call=null,this._time=1/0,Qt())}};var ee=Ft("start","end","cancel","interrupt"),ne=[];function re(t,e,n,r,i,a){var s=t.__transition;if(s){if(n in s)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(t){n.state=1,n.timer.restart(s,n.delay,n.time),n.delay<=t&&s(t-n.delay)}function s(a){var c,u,d,h;if(1!==n.state)return l();for(c in i)if((h=i[c]).name===n.name){if(3===h.state)return te(s);4===h.state?(h.state=6,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete i[c]):+c<e&&(h.state=6,h.timer.stop(),h.on.call("cancel",t,t.__data__,h.index,h.group),delete i[c])}if(te((function(){3===n.state&&(n.state=4,n.timer.restart(o,n.delay,n.time),o(a))})),n.state=2,n.on.call("start",t,t.__data__,n.index,n.group),2===n.state){for(n.state=3,r=new Array(d=n.tween.length),c=0,u=-1;c<d;++c)(h=n.tween[c].value.call(t,t.__data__,n.index,n.group))&&(r[++u]=h);r.length=u+1}}function o(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(l),n.state=5,1),a=-1,s=r.length;++a<s;)r[a].call(t,i);5===n.state&&(n.on.call("end",t,t.__data__,n.index,n.group),l())}function l(){for(var r in n.state=6,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=Jt(a,0,n.time)}(t,n,{name:e,index:r,group:i,on:ee,tween:ne,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:0})}function ie(t,e){var n=se(t,e);if(n.state>0)throw new Error("too late; already scheduled");return n}function ae(t,e){var n=se(t,e);if(n.state>3)throw new Error("too late; already running");return n}function se(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function oe(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var le,ce=180/Math.PI,ue={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function de(t,e,n,r,i,a){var s,o,l;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(l=t*n+e*r)&&(n-=t*l,r-=e*l),(o=Math.sqrt(n*n+r*r))&&(n/=o,r/=o,l/=o),t*r<e*n&&(t=-t,e=-e,l=-l,s=-s),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*ce,skewX:Math.atan(l)*ce,scaleX:s,scaleY:o}}function he(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(a,s){var o=[],l=[];return a=t(a),s=t(s),function(t,r,i,a,s,o){if(t!==i||r!==a){var l=s.push("translate(",null,e,null,n);o.push({i:l-4,x:oe(t,i)},{i:l-2,x:oe(r,a)})}else(i||a)&&s.push("translate("+i+e+a+n)}(a.translateX,a.translateY,s.translateX,s.translateY,o,l),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:oe(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,s.rotate,o,l),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:oe(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,s.skewX,o,l),function(t,e,n,r,a,s){if(t!==n||e!==r){var o=a.push(i(a)+"scale(",null,",",null,")");s.push({i:o-4,x:oe(t,n)},{i:o-2,x:oe(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,s.scaleX,s.scaleY,o,l),a=s=null,function(t){for(var e,n=-1,r=l.length;++n<r;)o[(e=l[n]).i]=e.x(t);return o.join("")}}}var me=he((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?ue:de(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),_e=he((function(t){return null==t?ue:(le||(le=document.createElementNS("http://www.w3.org/2000/svg","g")),le.setAttribute("transform",t),(t=le.transform.baseVal.consolidate())?de((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):ue)}),", ",")",")");function pe(t,e){var n,r;return function(){var i=ae(this,t),a=i.tween;if(a!==n)for(var s=0,o=(r=n=a).length;s<o;++s)if(r[s].name===e){(r=r.slice()).splice(s,1);break}i.tween=r}}function fe(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var a=ae(this,t),s=a.tween;if(s!==r){i=(r=s).slice();for(var o={name:e,value:n},l=0,c=i.length;l<c;++l)if(i[l].name===e){i[l]=o;break}l===c&&i.push(o)}a.tween=i}}function ye(t,e,n){var r=t._id;return t.each((function(){var t=ae(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return se(t,r).value[e]}}function ge(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function be(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function ke(){}var ve=.7,xe=1/ve,Me="\\s*([+-]?\\d+)\\s*",Le="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",we="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Te=/^#([0-9a-f]{3,8})$/,Se=new RegExp(`^rgb\\(${Me},${Me},${Me}\\)$`),De=new RegExp(`^rgb\\(${we},${we},${we}\\)$`),Ye=new RegExp(`^rgba\\(${Me},${Me},${Me},${Le}\\)$`),Ee=new RegExp(`^rgba\\(${we},${we},${we},${Le}\\)$`),Ce=new RegExp(`^hsl\\(${Le},${we},${we}\\)$`),Ae=new RegExp(`^hsla\\(${Le},${we},${we},${Le}\\)$`),Oe={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 Ne(){return this.rgb().formatHex()}function Be(){return this.rgb().formatRgb()}function Fe(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=Te.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?Ie(e):3===n?new He(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?Pe(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?Pe(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=Se.exec(t))?new He(e[1],e[2],e[3],1):(e=De.exec(t))?new He(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Ye.exec(t))?Pe(e[1],e[2],e[3],e[4]):(e=Ee.exec(t))?Pe(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Ce.exec(t))?qe(e[1],e[2]/100,e[3]/100,1):(e=Ae.exec(t))?qe(e[1],e[2]/100,e[3]/100,e[4]):Oe.hasOwnProperty(t)?Ie(Oe[t]):"transparent"===t?new He(NaN,NaN,NaN,0):null}function Ie(t){return new He(t>>16&255,t>>8&255,255&t,1)}function Pe(t,e,n,r){return r<=0&&(t=e=n=NaN),new He(t,e,n,r)}function je(t){return t instanceof ke||(t=Fe(t)),t?new He((t=t.rgb()).r,t.g,t.b,t.opacity):new He}function Re(t,e,n,r){return 1===arguments.length?je(t):new He(t,e,n,null==r?1:r)}function He(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function $e(){return`#${Ue(this.r)}${Ue(this.g)}${Ue(this.b)}`}function Ze(){const t=We(this.opacity);return`${1===t?"rgb(":"rgba("}${ze(this.r)}, ${ze(this.g)}, ${ze(this.b)}${1===t?")":`, ${t})`}`}function We(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ze(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Ue(t){return((t=ze(t))<16?"0":"")+t.toString(16)}function qe(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ge(t,e,n,r)}function Ve(t){if(t instanceof Ge)return new Ge(t.h,t.s,t.l,t.opacity);if(t instanceof ke||(t=Fe(t)),!t)return new Ge;if(t instanceof Ge)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),s=NaN,o=a-i,l=(a+i)/2;return o?(s=e===a?(n-r)/o+6*(n<r):n===a?(r-e)/o+2:(e-n)/o+4,o/=l<.5?a+i:2-a-i,s*=60):o=l>0&&l<1?0:s,new Ge(s,o,l,t.opacity)}function Ge(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Je(t){return(t=(t||0)%360)<0?t+360:t}function Xe(t){return Math.max(0,Math.min(1,t||0))}function Ke(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function Qe(t,e,n,r,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*n+(1+3*t+3*a-3*s)*r+s*i)/6}ge(ke,Fe,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Ne,formatHex:Ne,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return Ve(this).formatHsl()},formatRgb:Be,toString:Be}),ge(He,Re,be(ke,{brighter(t){return t=null==t?xe:Math.pow(xe,t),new He(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?ve:Math.pow(ve,t),new He(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new He(ze(this.r),ze(this.g),ze(this.b),We(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:$e,formatHex:$e,formatHex8:function(){return`#${Ue(this.r)}${Ue(this.g)}${Ue(this.b)}${Ue(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Ze,toString:Ze})),ge(Ge,(function(t,e,n,r){return 1===arguments.length?Ve(t):new Ge(t,e,n,null==r?1:r)}),be(ke,{brighter(t){return t=null==t?xe:Math.pow(xe,t),new Ge(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?ve:Math.pow(ve,t),new Ge(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,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new He(Ke(t>=240?t-240:t+120,i,r),Ke(t,i,r),Ke(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new Ge(Je(this.h),Xe(this.s),Xe(this.l),We(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=We(this.opacity);return`${1===t?"hsl(":"hsla("}${Je(this.h)}, ${100*Xe(this.s)}%, ${100*Xe(this.l)}%${1===t?")":`, ${t})`}`}}));const tn=t=>()=>t;function en(t,e){return function(n){return t+n*e}}function nn(t){return 1==(t=+t)?rn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):tn(isNaN(e)?n:e)}}function rn(t,e){var n=e-t;return n?en(t,n):tn(isNaN(t)?e:t)}const an=function t(e){var n=nn(e);function r(t,e){var r=n((t=Re(t)).r,(e=Re(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),s=rn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=s(e),t+""}}return r.gamma=t,r}(1);function sn(t){return function(e){var n,r,i=e.length,a=new Array(i),s=new Array(i),o=new Array(i);for(n=0;n<i;++n)r=Re(e[n]),a[n]=r.r||0,s[n]=r.g||0,o[n]=r.b||0;return a=t(a),s=t(s),o=t(o),r.opacity=1,function(t){return r.r=a(t),r.g=s(t),r.b=o(t),r+""}}}sn((function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],s=r>0?t[r-1]:2*i-a,o=r<e-1?t[r+2]:2*a-i;return Qe((n-r/e)*e,s,i,a,o)}})),sn((function(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],a=t[r%e],s=t[(r+1)%e],o=t[(r+2)%e];return Qe((n-r/e)*e,i,a,s,o)}}));var on=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,ln=new RegExp(on.source,"g");function cn(t,e){var n,r,i,a=on.lastIndex=ln.lastIndex=0,s=-1,o=[],l=[];for(t+="",e+="";(n=on.exec(t))&&(r=ln.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),o[s]?o[s]+=i:o[++s]=i),(n=n[0])===(r=r[0])?o[s]?o[s]+=r:o[++s]=r:(o[++s]=null,l.push({i:s,x:oe(n,r)})),a=ln.lastIndex;return a<e.length&&(i=e.slice(a),o[s]?o[s]+=i:o[++s]=i),o.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 n,r=0;r<e;++r)o[(n=l[r]).i]=n.x(t);return o.join("")})}function un(t,e){var n;return("number"==typeof e?oe:e instanceof Fe?an:(n=Fe(e))?(e=n,an):cn)(t,e)}function dn(t){return function(){this.removeAttribute(t)}}function hn(t){return function(){this.removeAttributeNS(t.space,t.local)}}function mn(t,e,n){var r,i,a=n+"";return function(){var s=this.getAttribute(t);return s===a?null:s===r?i:i=e(r=s,n)}}function _n(t,e,n){var r,i,a=n+"";return function(){var s=this.getAttributeNS(t.space,t.local);return s===a?null:s===r?i:i=e(r=s,n)}}function pn(t,e,n){var r,i,a;return function(){var s,o,l=n(this);if(null!=l)return(s=this.getAttribute(t))===(o=l+"")?null:s===r&&o===i?a:(i=o,a=e(r=s,l));this.removeAttribute(t)}}function fn(t,e,n){var r,i,a;return function(){var s,o,l=n(this);if(null!=l)return(s=this.getAttributeNS(t.space,t.local))===(o=l+"")?null:s===r&&o===i?a:(i=o,a=e(r=s,l));this.removeAttributeNS(t.space,t.local)}}function yn(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}function gn(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}function bn(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&gn(t,i)),n}return i._value=e,i}function kn(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&yn(t,i)),n}return i._value=e,i}function vn(t,e){return function(){ie(this,t).delay=+e.apply(this,arguments)}}function xn(t,e){return e=+e,function(){ie(this,t).delay=e}}function Mn(t,e){return function(){ae(this,t).duration=+e.apply(this,arguments)}}function Ln(t,e){return e=+e,function(){ae(this,t).duration=e}}function wn(t,e){if("function"!=typeof e)throw new Error;return function(){ae(this,t).ease=e}}function Tn(t,e,n){var r,i,a=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)?ie:ae;return function(){var s=a(this,t),o=s.on;o!==r&&(i=(r=o).copy()).on(e,n),s.on=i}}var Sn=Yt.prototype.constructor;function Dn(t){return function(){this.style.removeProperty(t)}}function Yn(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function En(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Yn(t,a,n)),r}return a._value=e,a}function Cn(t){return function(e){this.textContent=t.call(this,e)}}function An(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Cn(r)),e}return r._value=t,r}var On=0;function Nn(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Bn(){return++On}var Fn=Yt.prototype;Nn.prototype=function(t){return Yt().transition(t)}.prototype={constructor:Nn,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=f(t));for(var r=this._groups,i=r.length,a=new Array(i),s=0;s<i;++s)for(var o,l,c=r[s],u=c.length,d=a[s]=new Array(u),h=0;h<u;++h)(o=c[h])&&(l=t.call(o,o.__data__,h,c))&&("__data__"in o&&(l.__data__=o.__data__),d[h]=l,re(d[h],e,n,h,d,se(o,n)));return new Nn(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=b(t));for(var r=this._groups,i=r.length,a=[],s=[],o=0;o<i;++o)for(var l,c=r[o],u=c.length,d=0;d<u;++d)if(l=c[d]){for(var h,m=t.call(l,l.__data__,d,c),_=se(l,n),p=0,f=m.length;p<f;++p)(h=m[p])&&re(h,e,n,p,m,_);a.push(m),s.push(l)}return new Nn(a,s,e,n)},selectChild:Fn.selectChild,selectChildren:Fn.selectChildren,filter:function(t){"function"!=typeof t&&(t=k(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,s=e[i],o=s.length,l=r[i]=[],c=0;c<o;++c)(a=s[c])&&t.call(a,a.__data__,c,s)&&l.push(a);return new Nn(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),s=new Array(r),o=0;o<a;++o)for(var l,c=e[o],u=n[o],d=c.length,h=s[o]=new Array(d),m=0;m<d;++m)(l=c[m]||u[m])&&(h[m]=l);for(;o<r;++o)s[o]=e[o];return new Nn(s,this._parents,this._name,this._id)},selection:function(){return new Sn(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=Bn(),r=this._groups,i=r.length,a=0;a<i;++a)for(var s,o=r[a],l=o.length,c=0;c<l;++c)if(s=o[c]){var u=se(s,e);re(s,t,n,c,o,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new Nn(r,this._parents,t,n)},call:Fn.call,nodes:Fn.nodes,node:Fn.node,size:Fn.size,empty:Fn.empty,each:Fn.each,on:function(t,e){var n=this._id;return arguments.length<2?se(this.node(),n).on.on(t):this.each(Tn(n,t,e))},attr:function(t,e){var n=F(t),r="transform"===n?_e:un;return this.attrTween(t,"function"==typeof e?(n.local?fn:pn)(n,r,ye(this,"attr."+t,e)):null==e?(n.local?hn:dn)(n):(n.local?_n:mn)(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=F(t);return this.tween(n,(r.local?bn:kn)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?me:un;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=q(this,t),s=(this.style.removeProperty(t),q(this,t));return a===s?null:a===n&&s===r?i:i=e(n=a,r=s)}}(t,r)).on("end.style."+t,Dn(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,i,a;return function(){var s=q(this,t),o=n(this),l=o+"";return null==o&&(this.style.removeProperty(t),l=o=q(this,t)),s===l?null:s===r&&l===i?a:(i=l,a=e(r=s,o))}}(t,r,ye(this,"style."+t,e))).each(function(t,e){var n,r,i,a,s="style."+e,o="end."+s;return function(){var l=ae(this,t),c=l.on,u=null==l.value[s]?a||(a=Dn(e)):void 0;c===n&&i===u||(r=(n=c).copy()).on(o,i=u),l.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,i,a=n+"";return function(){var s=q(this,t);return s===a?null:s===r?i:i=e(r=s,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){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,En(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(ye(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,An(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=se(this.node(),n).tween,a=0,s=i.length;a<s;++a)if((r=i[a]).name===t)return r.value;return null}return this.each((null==e?pe:fe)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?vn:xn)(e,t)):se(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Mn:Ln)(e,t)):se(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(wn(e,t)):se(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;ae(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,r=n._id,i=n.size();return new Promise((function(a,s){var o={value:s},l={value:function(){0==--i&&a()}};n.each((function(){var n=ae(this,r),i=n.on;i!==t&&((e=(t=i).copy())._.cancel.push(o),e._.interrupt.push(o),e._.end.push(l)),n.on=e})),0===i&&a()}))},[Symbol.iterator]:Fn[Symbol.iterator]};var In={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function Pn(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}Yt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,r,i,a=t.__transition,s=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):s=!1;s&&delete t.__transition}}(this,t)}))},Yt.prototype.transition=function(t){var e,n;t instanceof Nn?(e=t._id,t=t._name):(e=Bn(),(n=In).time=qt(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var s,o=r[a],l=o.length,c=0;c<l;++c)(s=o[c])&&re(s,t,e,c,o,n||Pn(s,e));return new Nn(r,this._parents,t,e)};const{abs:jn,max:Rn,min:Hn}=Math;function $n(t){return[+t[0],+t[1]]}function Zn(t){return[$n(t[0]),$n(t[1])]}["w","e"].map(Wn),["n","s"].map(Wn),["n","w","e","s","nw","ne","sw","se"].map(Wn);function Wn(t){return{type:t}}function zn(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Un(t){return(e,n)=>function(t,e){return fetch(t,e).then(zn)}(e,n).then((e=>(new DOMParser).parseFromString(e,t)))}Un("application/xml");Un("text/html");var qn=Un("image/svg+xml");const Vn=Math.PI/180,Gn=180/Math.PI,Jn=.96422,Xn=.82521,Kn=4/29,Qn=6/29,tr=3*Qn*Qn;function er(t){if(t instanceof nr)return new nr(t.l,t.a,t.b,t.opacity);if(t instanceof cr)return ur(t);t instanceof He||(t=je(t));var e,n,r=sr(t.r),i=sr(t.g),a=sr(t.b),s=rr((.2225045*r+.7168786*i+.0606169*a)/1);return r===i&&i===a?e=n=s:(e=rr((.4360747*r+.3850649*i+.1430804*a)/Jn),n=rr((.0139322*r+.0971045*i+.7141733*a)/Xn)),new nr(116*s-16,500*(e-s),200*(s-n),t.opacity)}function nr(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function rr(t){return t>.008856451679035631?Math.pow(t,1/3):t/tr+Kn}function ir(t){return t>Qn?t*t*t:tr*(t-Kn)}function ar(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function sr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function or(t){if(t instanceof cr)return new cr(t.h,t.c,t.l,t.opacity);if(t instanceof nr||(t=er(t)),0===t.a&&0===t.b)return new cr(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Gn;return new cr(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function lr(t,e,n,r){return 1===arguments.length?or(t):new cr(t,e,n,null==r?1:r)}function cr(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function ur(t){if(isNaN(t.h))return new nr(t.l,0,0,t.opacity);var e=t.h*Vn;return new nr(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function dr(t){return function(e,n){var r=t((e=lr(e)).h,(n=lr(n)).h),i=rn(e.c,n.c),a=rn(e.l,n.l),s=rn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=s(t),e+""}}}ge(nr,(function(t,e,n,r){return 1===arguments.length?er(t):new nr(t,e,n,null==r?1:r)}),be(ke,{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,n=isNaN(this.b)?t:t-this.b/200;return new He(ar(3.1338561*(e=Jn*ir(e))-1.6168667*(t=1*ir(t))-.4906146*(n=Xn*ir(n))),ar(-.9787684*e+1.9161415*t+.033454*n),ar(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),ge(cr,lr,be(ke,{brighter(t){return new cr(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new cr(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return ur(this).rgb()}}));const hr=dr((function(t,e){var n=e-t;return n?en(t,n>180||n<-180?n-360*Math.round(n/360):n):tn(isNaN(t)?e:t)}));dr(rn);const mr=Math.sqrt(50),_r=Math.sqrt(10),pr=Math.sqrt(2);function fr(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/Math.pow(10,i),s=a>=mr?10:a>=_r?5:a>=pr?2:1;let o,l,c;return i<0?(c=Math.pow(10,-i)/s,o=Math.round(t*c),l=Math.round(e*c),o/c<t&&++o,l/c>e&&--l,c=-c):(c=Math.pow(10,i)*s,o=Math.round(t/c),l=Math.round(e/c),o*c<t&&++o,l*c>e&&--l),l<o&&.5<=n&&n<2?fr(t,e,2*n):[o,l,c]}function yr(t,e,n){return fr(t=+t,e=+e,n=+n)[2]}function gr(t,e,n){n=+n;const r=(e=+e)<(t=+t),i=r?yr(e,t,n):yr(t,e,n);return(r?-1:1)*(i<0?1/-i:i)}function br(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function kr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function vr(t){let e,n,r;function i(t,r,i=0,a=t.length){if(i<a){if(0!==e(r,r))return a;do{const e=i+a>>>1;n(t[e],r)<0?i=e+1:a=e}while(i<a)}return i}return 2!==t.length?(e=br,n=(e,n)=>br(t(e),n),r=(e,n)=>t(e)-n):(e=t===br||t===kr?t:xr,n=t,r=t),{left:i,center:function(t,e,n=0,a=t.length){const s=i(t,e,n,a-1);return s>n&&r(t[s-1],e)>-r(t[s],e)?s-1:s},right:function(t,r,i=0,a=t.length){if(i<a){if(0!==e(r,r))return a;do{const e=i+a>>>1;n(t[e],r)<=0?i=e+1:a=e}while(i<a)}return i}}}function xr(){return 0}const Mr=vr(br),Lr=Mr.right,wr=(Mr.left,vr((function(t){return null===t?NaN:+t})).center,Lr);function Tr(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),s=new Array(r);for(n=0;n<i;++n)a[n]=Er(t[n],e[n]);for(;n<r;++n)s[n]=e[n];return function(t){for(n=0;n<i;++n)s[n]=a[n](t);return s}}function Sr(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Dr(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=Er(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}}function Yr(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;n<r;++n)i[n]=t[n]*(1-a)+e[n]*a;return i}}function Er(t,e){var n,r,i=typeof e;return null==e||"boolean"===i?tn(e):("number"===i?oe:"string"===i?(n=Fe(e))?(e=n,an):cn:e instanceof Fe?an:e instanceof Date?Sr:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?Tr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Dr:oe:Yr))(t,e)}function Cr(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}function Ar(t){return+t}var Or=[0,1];function Nr(t){return t}function Br(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:(n=isNaN(e)?NaN:.5,function(){return n});var n}function Fr(t,e,n){var r=t[0],i=t[1],a=e[0],s=e[1];return i<r?(r=Br(i,r),a=n(s,a)):(r=Br(r,i),a=n(a,s)),function(t){return a(r(t))}}function Ir(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),a=new Array(r),s=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<r;)i[s]=Br(t[s],t[s+1]),a[s]=n(e[s],e[s+1]);return function(e){var n=wr(t,e,1,r)-1;return a[n](i[n](e))}}function Pr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function jr(){var t,e,n,r,i,a,s=Or,o=Or,l=Er,c=Nr;function u(){var t,e,n,l=Math.min(s.length,o.length);return c!==Nr&&(t=s[0],e=s[l-1],t>e&&(n=t,t=e,e=n),c=function(n){return Math.max(t,Math.min(e,n))}),r=l>2?Ir:Fr,i=a=null,d}function d(e){return null==e||isNaN(e=+e)?n:(i||(i=r(s.map(t),o,l)))(t(c(e)))}return d.invert=function(n){return c(e((a||(a=r(o,s.map(t),oe)))(n)))},d.domain=function(t){return arguments.length?(s=Array.from(t,Ar),u()):s.slice()},d.range=function(t){return arguments.length?(o=Array.from(t),u()):o.slice()},d.rangeRound=function(t){return o=Array.from(t),l=Cr,u()},d.clamp=function(t){return arguments.length?(c=!!t||Nr,u()):c!==Nr},d.interpolate=function(t){return arguments.length?(l=t,u()):l},d.unknown=function(t){return arguments.length?(n=t,d):n},function(n,r){return t=n,e=r,u()}}function Rr(){return jr()(Nr,Nr)}function Hr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}var $r,Zr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Wr(t){if(!(e=Zr.exec(t)))throw new Error("invalid format: "+t);var e;return new zr({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 zr(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 Ur(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function qr(t){return(t=Ur(Math.abs(t)))?t[1]:NaN}function Vr(t,e){var n=Ur(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Wr.prototype=zr.prototype,zr.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 Gr={"%":(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)=>Vr(100*t,e),r:Vr,s:function(t,e){var n=Ur(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-($r=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,s=r.length;return a===s?r:a>s?r+new Array(a-s+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Ur(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Jr(t){return t}var Xr,Kr,Qr,ti=Array.prototype.map,ei=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function ni(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Jr:(e=ti.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],s=0,o=e[0],l=0;i>0&&o>0&&(l+o+1>r&&(o=Math.max(1,r-l)),a.push(t.substring(i-=o,i+o)),!((l+=o+1)>r));)o=e[s=(s+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",s=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?Jr:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(ti.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",c=void 0===t.minus?"\u2212":t.minus+"",u=void 0===t.nan?"NaN":t.nan+"";function d(t){var e=(t=Wr(t)).fill,n=t.align,d=t.sign,h=t.symbol,m=t.zero,_=t.width,p=t.comma,f=t.precision,y=t.trim,g=t.type;"n"===g?(p=!0,g="g"):Gr[g]||(void 0===f&&(f=12),y=!0,g="g"),(m||"0"===e&&"="===n)&&(m=!0,e="0",n="=");var b="$"===h?i:"#"===h&&/[boxX]/.test(g)?"0"+g.toLowerCase():"",k="$"===h?a:/[%p]/.test(g)?l:"",v=Gr[g],x=/[defgprs%]/.test(g);function M(t){var i,a,l,h=b,M=k;if("c"===g)M=v(t)+M,t="";else{var L=(t=+t)<0||1/t<0;if(t=isNaN(t)?u:v(Math.abs(t),f),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r<n;++r)switch(t[r]){case".":i=e=r;break;case"0":0===i&&(i=r),e=r;break;default:if(!+t[r])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),L&&0==+t&&"+"!==d&&(L=!1),h=(L?"("===d?d:c:"-"===d||"("===d?"":d)+h,M=("s"===g?ei[8+$r/3]:"")+M+(L&&"("===d?")":""),x)for(i=-1,a=t.length;++i<a;)if(48>(l=t.charCodeAt(i))||l>57){M=(46===l?s+t.slice(i+1):t.slice(i))+M,t=t.slice(0,i);break}}p&&!m&&(t=r(t,1/0));var w=h.length+t.length+M.length,T=w<_?new Array(_-w+1).join(e):"";switch(p&&m&&(t=r(T+t,T.length?_-M.length:1/0),T=""),n){case"<":t=h+t+M+T;break;case"=":t=h+T+t+M;break;case"^":t=T.slice(0,w=T.length>>1)+h+t+M+T.slice(w);break;default:t=T+h+t+M}return o(t)}return f=void 0===f?6:/[gprs]/.test(g)?Math.max(1,Math.min(21,f)):Math.max(0,Math.min(20,f)),M.toString=function(){return t+""},M}return{format:d,formatPrefix:function(t,e){var n=d(((t=Wr(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(qr(e)/3))),i=Math.pow(10,-r),a=ei[8+r/3];return function(t){return n(i*t)+a}}}}function ri(t,e,n,r){var i,a=gr(t,e,n);switch((r=Wr(null==r?",f":r)).type){case"s":var s=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(qr(e)/3)))-qr(Math.abs(t)))}(a,s))||(r.precision=i),Qr(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,qr(e)-qr(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-qr(Math.abs(t)))}(a))||(r.precision=i-2*("%"===r.type))}return Kr(r)}function ii(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){if(!((n=+n)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[i,a,s]=r?fr(e,t,n):fr(t,e,n);if(!(a>=i))return[];const o=a-i+1,l=new Array(o);if(r)if(s<0)for(let c=0;c<o;++c)l[c]=(a-c)/-s;else for(let c=0;c<o;++c)l[c]=(a-c)*s;else if(s<0)for(let c=0;c<o;++c)l[c]=(i+c)/-s;else for(let c=0;c<o;++c)l[c]=(i+c)*s;return l}(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ri(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,a=e(),s=0,o=a.length-1,l=a[s],c=a[o],u=10;for(c<l&&(i=l,l=c,c=i,i=s,s=o,o=i);u-- >0;){if((i=yr(l,c,n))===r)return a[s]=l,a[o]=c,e(a);if(i>0)l=Math.floor(l/i)*i,c=Math.ceil(c/i)*i;else{if(!(i<0))break;l=Math.ceil(l*i)/i,c=Math.floor(c*i)/i}r=i}return t},t}function ai(){var t=Rr();return t.copy=function(){return Pr(t,ai())},Hr.apply(t,arguments),ii(t)}Xr=ni({thousands:",",grouping:[3],currency:["$",""]}),Kr=Xr.format,Qr=Xr.formatPrefix;class si extends Map{constructor(t,e=di){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[n,r]of t)this.set(n,r)}get(t){return super.get(li(this,t))}has(t){return super.has(li(this,t))}set(t,e){return super.set(ci(this,t),e)}delete(t){return super.delete(ui(this,t))}}class oi extends Set{constructor(t,e=di){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const n of t)this.add(n)}has(t){return super.has(li(this,t))}add(t){return super.add(ci(this,t))}delete(t){return super.delete(ui(this,t))}}function li({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function ci({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function ui({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function di(t){return null!==t&&"object"==typeof t?t.valueOf():t}const hi=Symbol("implicit");function mi(){var t=new si,e=[],n=[],r=hi;function i(i){let a=t.get(i);if(void 0===a){if(r!==hi)return r;t.set(i,a=e.push(i)-1)}return n[a%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new si;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return mi(e,n).unknown(r)},Hr.apply(i,arguments),i}const _i=1e3,pi=6e4,fi=36e5,yi=864e5,gi=6048e5,bi=2592e6,ki=31536e6,vi=new Date,xi=new Date;function Mi(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e<n-t?e:n},i.offset=(t,n)=>(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,a)=>{const s=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return s;let o;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o<n&&n<r);return s},i.filter=n=>Mi((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})),n&&(i.count=(e,r)=>(vi.setTime(+e),xi.setTime(+r),t(vi),t(xi),Math.floor(n(vi,xi))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t==0:e=>i.count(0,e)%t==0):i:null)),i}const Li=Mi((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Li.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Mi((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):Li:null);Li.range;const wi=Mi((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*_i)}),((t,e)=>(e-t)/_i),(t=>t.getUTCSeconds())),Ti=(wi.range,Mi((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*_i)}),((t,e)=>{t.setTime(+t+e*pi)}),((t,e)=>(e-t)/pi),(t=>t.getMinutes()))),Si=(Ti.range,Mi((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*pi)}),((t,e)=>(e-t)/pi),(t=>t.getUTCMinutes()))),Di=(Si.range,Mi((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*_i-t.getMinutes()*pi)}),((t,e)=>{t.setTime(+t+e*fi)}),((t,e)=>(e-t)/fi),(t=>t.getHours()))),Yi=(Di.range,Mi((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*fi)}),((t,e)=>(e-t)/fi),(t=>t.getUTCHours()))),Ei=(Yi.range,Mi((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pi)/yi),(t=>t.getDate()-1))),Ci=(Ei.range,Mi((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/yi),(t=>t.getUTCDate()-1))),Ai=(Ci.range,Mi((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/yi),(t=>Math.floor(t/yi))));Ai.range;function Oi(t){return Mi((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())*pi)/gi))}const Ni=Oi(0),Bi=Oi(1),Fi=Oi(2),Ii=Oi(3),Pi=Oi(4),ji=Oi(5),Ri=Oi(6);Ni.range,Bi.range,Fi.range,Ii.range,Pi.range,ji.range,Ri.range;function Hi(t){return Mi((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)/gi))}const $i=Hi(0),Zi=Hi(1),Wi=Hi(2),zi=Hi(3),Ui=Hi(4),qi=Hi(5),Vi=Hi(6),Gi=($i.range,Zi.range,Wi.range,zi.range,Ui.range,qi.range,Vi.range,Mi((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()))),Ji=(Gi.range,Mi((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()))),Xi=(Ji.range,Mi((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())));Xi.every=t=>isFinite(t=Math.floor(t))&&t>0?Mi((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null;Xi.range;const Ki=Mi((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()));Ki.every=t=>isFinite(t=Math.floor(t))&&t>0?Mi((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null;Ki.range;function Qi(t,e,n,r,i,a){const s=[[wi,1,_i],[wi,5,5e3],[wi,15,15e3],[wi,30,3e4],[a,1,pi],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,fi],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,yi],[r,2,1728e5],[n,1,gi],[e,1,bi],[e,3,7776e6],[t,1,ki]];function o(e,n,r){const i=Math.abs(n-e)/r,a=vr((([,,t])=>t)).right(s,i);if(a===s.length)return t.every(gr(e/ki,n/ki,r));if(0===a)return Li.every(Math.max(gr(e,n,r),1));const[o,l]=s[i/s[a-1][2]<s[a][2]/i?a-1:a];return o.every(l)}return[function(t,e,n){const r=e<t;r&&([t,e]=[e,t]);const i=n&&"function"==typeof n.range?n:o(t,e,n),a=i?i.range(t,+e+1):[];return r?a.reverse():a},o]}const[ta,ea]=Qi(Ki,Ji,$i,Ai,Yi,Si),[na,ra]=Qi(Xi,Gi,Ni,Ei,Di,Ti);function ia(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 aa(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 sa(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var oa,la,ca={"-":"",_:" ",0:"0"},ua=/^\s*\d+/,da=/^%/,ha=/[\\^$*+?|[\]().{}]/g;function ma(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function _a(t){return t.replace(ha,"\\$&")}function pa(t){return new RegExp("^(?:"+t.map(_a).join("|")+")","i")}function fa(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function ya(t,e,n){var r=ua.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function ga(t,e,n){var r=ua.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function ba(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function ka(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function va(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function xa(t,e,n){var r=ua.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ma(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function La(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function wa(t,e,n){var r=ua.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Ta(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Sa(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Da(t,e,n){var r=ua.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Ya(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Ea(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Ca(t,e,n){var r=ua.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Aa(t,e,n){var r=ua.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Oa(t,e,n){var r=ua.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Na(t,e,n){var r=da.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Ba(t,e,n){var r=ua.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Fa(t,e,n){var r=ua.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Ia(t,e){return ma(t.getDate(),e,2)}function Pa(t,e){return ma(t.getHours(),e,2)}function ja(t,e){return ma(t.getHours()%12||12,e,2)}function Ra(t,e){return ma(1+Ei.count(Xi(t),t),e,3)}function Ha(t,e){return ma(t.getMilliseconds(),e,3)}function $a(t,e){return Ha(t,e)+"000"}function Za(t,e){return ma(t.getMonth()+1,e,2)}function Wa(t,e){return ma(t.getMinutes(),e,2)}function za(t,e){return ma(t.getSeconds(),e,2)}function Ua(t){var e=t.getDay();return 0===e?7:e}function qa(t,e){return ma(Ni.count(Xi(t)-1,t),e,2)}function Va(t){var e=t.getDay();return e>=4||0===e?Pi(t):Pi.ceil(t)}function Ga(t,e){return t=Va(t),ma(Pi.count(Xi(t),t)+(4===Xi(t).getDay()),e,2)}function Ja(t){return t.getDay()}function Xa(t,e){return ma(Bi.count(Xi(t)-1,t),e,2)}function Ka(t,e){return ma(t.getFullYear()%100,e,2)}function Qa(t,e){return ma((t=Va(t)).getFullYear()%100,e,2)}function ts(t,e){return ma(t.getFullYear()%1e4,e,4)}function es(t,e){var n=t.getDay();return ma((t=n>=4||0===n?Pi(t):Pi.ceil(t)).getFullYear()%1e4,e,4)}function ns(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+ma(e/60|0,"0",2)+ma(e%60,"0",2)}function rs(t,e){return ma(t.getUTCDate(),e,2)}function is(t,e){return ma(t.getUTCHours(),e,2)}function as(t,e){return ma(t.getUTCHours()%12||12,e,2)}function ss(t,e){return ma(1+Ci.count(Ki(t),t),e,3)}function os(t,e){return ma(t.getUTCMilliseconds(),e,3)}function ls(t,e){return os(t,e)+"000"}function cs(t,e){return ma(t.getUTCMonth()+1,e,2)}function us(t,e){return ma(t.getUTCMinutes(),e,2)}function ds(t,e){return ma(t.getUTCSeconds(),e,2)}function hs(t){var e=t.getUTCDay();return 0===e?7:e}function ms(t,e){return ma($i.count(Ki(t)-1,t),e,2)}function _s(t){var e=t.getUTCDay();return e>=4||0===e?Ui(t):Ui.ceil(t)}function ps(t,e){return t=_s(t),ma(Ui.count(Ki(t),t)+(4===Ki(t).getUTCDay()),e,2)}function fs(t){return t.getUTCDay()}function ys(t,e){return ma(Zi.count(Ki(t)-1,t),e,2)}function gs(t,e){return ma(t.getUTCFullYear()%100,e,2)}function bs(t,e){return ma((t=_s(t)).getUTCFullYear()%100,e,2)}function ks(t,e){return ma(t.getUTCFullYear()%1e4,e,4)}function vs(t,e){var n=t.getUTCDay();return ma((t=n>=4||0===n?Ui(t):Ui.ceil(t)).getUTCFullYear()%1e4,e,4)}function xs(){return"+0000"}function Ms(){return"%"}function Ls(t){return+t}function ws(t){return Math.floor(+t/1e3)}function Ts(t){return new Date(t)}function Ss(t){return t instanceof Date?+t:+new Date(+t)}function Ds(t,e,n,r,i,a,s,o,l,c){var u=Rr(),d=u.invert,h=u.domain,m=c(".%L"),_=c(":%S"),p=c("%I:%M"),f=c("%I %p"),y=c("%a %d"),g=c("%b %d"),b=c("%B"),k=c("%Y");function v(t){return(l(t)<t?m:o(t)<t?_:s(t)<t?p:a(t)<t?f:r(t)<t?i(t)<t?y:g:n(t)<t?b:k)(t)}return u.invert=function(t){return new Date(d(t))},u.domain=function(t){return arguments.length?h(Array.from(t,Ss)):h().map(Ts)},u.ticks=function(e){var n=h();return t(n[0],n[n.length-1],null==e?10:e)},u.tickFormat=function(t,e){return null==e?v:c(e)},u.nice=function(t){var n=h();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?h(function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],s=t[i];return s<a&&(n=r,r=i,i=n,n=a,a=s,s=n),t[r]=e.floor(a),t[i]=e.ceil(s),t}(n,t)):u},u.copy=function(){return Pr(u,Ds(t,e,n,r,i,a,s,o,l,c))},u}function Ys(){return Hr.apply(Ds(na,ra,Xi,Gi,Ni,Ei,Di,Ti,wi,la).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Es(t){return"string"==typeof t?new St([[document.querySelector(t)]],[document.documentElement]):new St([[t]],Tt)}function Cs(t){return"string"==typeof t?new St([document.querySelectorAll(t)],[document.documentElement]):new St([y(t)],Tt)}function As(t){return function(){return t}}!function(t){oa=function(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,s=t.shortDays,o=t.months,l=t.shortMonths,c=pa(i),u=fa(i),d=pa(a),h=fa(a),m=pa(s),_=fa(s),p=pa(o),f=fa(o),y=pa(l),g=fa(l),b={a:function(t){return s[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return o[t.getMonth()]},c:null,d:Ia,e:Ia,f:$a,g:Qa,G:es,H:Pa,I:ja,j:Ra,L:Ha,m:Za,M:Wa,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Ls,s:ws,S:za,u:Ua,U:qa,V:Ga,w:Ja,W:Xa,x:null,X:null,y:Ka,Y:ts,Z:ns,"%":Ms},k={a:function(t){return s[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:rs,e:rs,f:ls,g:bs,G:vs,H:is,I:as,j:ss,L:os,m:cs,M:us,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Ls,s:ws,S:ds,u:hs,U:ms,V:ps,w:fs,W:ys,x:null,X:null,y:gs,Y:ks,Z:xs,"%":Ms},v={a:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.w=_.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.m=f.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return L(t,e,n,r)},d:Sa,e:Sa,f:Oa,g:Ma,G:xa,H:Ya,I:Ya,j:Da,L:Aa,m:Ta,M:Ea,p:function(t,e,n){var r=c.exec(e.slice(n));return r?(t.p=u.get(r[0].toLowerCase()),n+r[0].length):-1},q:wa,Q:Ba,s:Fa,S:Ca,u:ga,U:ba,V:ka,w:ya,W:va,x:function(t,e,r){return L(t,n,e,r)},X:function(t,e,n){return L(t,r,e,n)},y:Ma,Y:xa,Z:La,"%":Na};function x(t,e){return function(n){var r,i,a,s=[],o=-1,l=0,c=t.length;for(n instanceof Date||(n=new Date(+n));++o<c;)37===t.charCodeAt(o)&&(s.push(t.slice(l,o)),null!=(i=ca[r=t.charAt(++o)])?r=t.charAt(++o):i="e"===r?" ":"0",(a=e[r])&&(r=a(n,i)),s.push(r),l=o+1);return s.push(t.slice(l,o)),s.join("")}}function M(t,e){return function(n){var r,i,a=sa(1900,void 0,1);if(L(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(e&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=aa(sa(a.y,0,1))).getUTCDay(),r=i>4||0===i?Zi.ceil(r):Zi(r),r=Ci.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=ia(sa(a.y,0,1))).getDay(),r=i>4||0===i?Bi.ceil(r):Bi(r),r=Ei.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?aa(sa(a.y,0,1)).getUTCDay():ia(sa(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,aa(a)):ia(a)}}function L(t,e,n,r){for(var i,a,s=0,o=e.length,l=n.length;s<o;){if(r>=l)return-1;if(37===(i=e.charCodeAt(s++))){if(i=e.charAt(s++),!(a=v[i in ca?e.charAt(s++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=x(n,b),b.X=x(r,b),b.c=x(e,b),k.x=x(n,k),k.X=x(r,k),k.c=x(e,k),{format:function(t){var e=x(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=M(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=x(t+="",k);return e.toString=function(){return t},e},utcParse:function(t){var e=M(t+="",!0);return e.toString=function(){return t},e}}}(t),la=oa.format,oa.parse,oa.utcFormat,oa.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 Os=Math.abs,Ns=Math.atan2,Bs=Math.cos,Fs=Math.max,Is=Math.min,Ps=Math.sin,js=Math.sqrt,Rs=1e-12,Hs=Math.PI,$s=Hs/2,Zs=2*Hs;function Ws(t){return t>1?0:t<-1?Hs:Math.acos(t)}function zs(t){return t>=1?$s:t<=-1?-$s:Math.asin(t)}const Us=Math.PI,qs=2*Us,Vs=1e-6,Gs=qs-Vs;function Js(t){this._+=t[0];for(let e=1,n=t.length;e<n;++e)this._+=arguments[e]+t[e]}class Xs{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?Js:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Js;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*n)/n+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,n,r){this._append`Q${+t},${+e},${this._x1=+n},${this._y1=+r}`}bezierCurveTo(t,e,n,r,i,a){this._append`C${+t},${+e},${+n},${+r},${this._x1=+i},${this._y1=+a}`}arcTo(t,e,n,r,i){if(t=+t,e=+e,n=+n,r=+r,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=this._x1,s=this._y1,o=n-t,l=r-e,c=a-t,u=s-e,d=c*c+u*u;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(d>Vs)if(Math.abs(u*o-l*c)>Vs&&i){let h=n-a,m=r-s,_=o*o+l*l,p=h*h+m*m,f=Math.sqrt(_),y=Math.sqrt(d),g=i*Math.tan((Us-Math.acos((_+d-p)/(2*f*y)))/2),b=g/y,k=g/f;Math.abs(b-1)>Vs&&this._append`L${t+b*c},${e+b*u}`,this._append`A${i},${i},0,0,${+(u*h>c*m)},${this._x1=t+k*o},${this._y1=e+k*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error(`negative radius: ${n}`);let s=n*Math.cos(r),o=n*Math.sin(r),l=t+s,c=e+o,u=1^a,d=a?r-i:i-r;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>Vs||Math.abs(this._y1-c)>Vs)&&this._append`L${l},${c}`,n&&(d<0&&(d=d%qs+qs),d>Gs?this._append`A${n},${n},0,1,${u},${t-s},${e-o}A${n},${n},0,1,${u},${this._x1=l},${this._y1=c}`:d>Vs&&this._append`A${n},${n},0,${+(d>=Us)},${u},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function Ks(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Xs(e)}function Qs(t){return t.innerRadius}function to(t){return t.outerRadius}function eo(t){return t.startAngle}function no(t){return t.endAngle}function ro(t){return t&&t.padAngle}function io(t,e,n,r,i,a,s,o){var l=n-t,c=r-e,u=s-i,d=o-a,h=d*l-u*c;if(!(h*h<Rs))return[t+(h=(u*(e-a)-d*(t-i))/h)*l,e+h*c]}function ao(t,e,n,r,i,a,s){var o=t-n,l=e-r,c=(s?a:-a)/js(o*o+l*l),u=c*l,d=-c*o,h=t+u,m=e+d,_=n+u,p=r+d,f=(h+_)/2,y=(m+p)/2,g=_-h,b=p-m,k=g*g+b*b,v=i-a,x=h*p-_*m,M=(b<0?-1:1)*js(Fs(0,v*v*k-x*x)),L=(x*b-g*M)/k,w=(-x*g-b*M)/k,T=(x*b+g*M)/k,S=(-x*g+b*M)/k,D=L-f,Y=w-y,E=T-f,C=S-y;return D*D+Y*Y>E*E+C*C&&(L=T,w=S),{cx:L,cy:w,x01:-u,y01:-d,x11:L*(i/v-1),y11:w*(i/v-1)}}function so(){var t=Qs,e=to,n=As(0),r=null,i=eo,a=no,s=ro,o=null,l=Ks(c);function c(){var c,u,d=+t.apply(this,arguments),h=+e.apply(this,arguments),m=i.apply(this,arguments)-$s,_=a.apply(this,arguments)-$s,p=Os(_-m),f=_>m;if(o||(o=c=l()),h<d&&(u=h,h=d,d=u),h>Rs)if(p>Zs-Rs)o.moveTo(h*Bs(m),h*Ps(m)),o.arc(0,0,h,m,_,!f),d>Rs&&(o.moveTo(d*Bs(_),d*Ps(_)),o.arc(0,0,d,_,m,f));else{var y,g,b=m,k=_,v=m,x=_,M=p,L=p,w=s.apply(this,arguments)/2,T=w>Rs&&(r?+r.apply(this,arguments):js(d*d+h*h)),S=Is(Os(h-d)/2,+n.apply(this,arguments)),D=S,Y=S;if(T>Rs){var E=zs(T/d*Ps(w)),C=zs(T/h*Ps(w));(M-=2*E)>Rs?(v+=E*=f?1:-1,x-=E):(M=0,v=x=(m+_)/2),(L-=2*C)>Rs?(b+=C*=f?1:-1,k-=C):(L=0,b=k=(m+_)/2)}var A=h*Bs(b),O=h*Ps(b),N=d*Bs(x),B=d*Ps(x);if(S>Rs){var F,I=h*Bs(k),P=h*Ps(k),j=d*Bs(v),R=d*Ps(v);if(p<Hs)if(F=io(A,O,j,R,I,P,N,B)){var H=A-F[0],$=O-F[1],Z=I-F[0],W=P-F[1],z=1/Ps(Ws((H*Z+$*W)/(js(H*H+$*$)*js(Z*Z+W*W)))/2),U=js(F[0]*F[0]+F[1]*F[1]);D=Is(S,(d-U)/(z-1)),Y=Is(S,(h-U)/(z+1))}else D=Y=0}L>Rs?Y>Rs?(y=ao(j,R,A,O,h,Y,f),g=ao(I,P,N,B,h,Y,f),o.moveTo(y.cx+y.x01,y.cy+y.y01),Y<S?o.arc(y.cx,y.cy,Y,Ns(y.y01,y.x01),Ns(g.y01,g.x01),!f):(o.arc(y.cx,y.cy,Y,Ns(y.y01,y.x01),Ns(y.y11,y.x11),!f),o.arc(0,0,h,Ns(y.cy+y.y11,y.cx+y.x11),Ns(g.cy+g.y11,g.cx+g.x11),!f),o.arc(g.cx,g.cy,Y,Ns(g.y11,g.x11),Ns(g.y01,g.x01),!f))):(o.moveTo(A,O),o.arc(0,0,h,b,k,!f)):o.moveTo(A,O),d>Rs&&M>Rs?D>Rs?(y=ao(N,B,I,P,d,-D,f),g=ao(A,O,j,R,d,-D,f),o.lineTo(y.cx+y.x01,y.cy+y.y01),D<S?o.arc(y.cx,y.cy,D,Ns(y.y01,y.x01),Ns(g.y01,g.x01),!f):(o.arc(y.cx,y.cy,D,Ns(y.y01,y.x01),Ns(y.y11,y.x11),!f),o.arc(0,0,d,Ns(y.cy+y.y11,y.cx+y.x11),Ns(g.cy+g.y11,g.cx+g.x11),f),o.arc(g.cx,g.cy,D,Ns(g.y11,g.x11),Ns(g.y01,g.x01),!f))):o.arc(0,0,d,x,v,f):o.lineTo(N,B)}else o.moveTo(0,0);if(o.closePath(),c)return o=null,c+""||null}return c.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Hs/2;return[Bs(r)*n,Ps(r)*n]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:As(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:As(+t),c):e},c.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:As(+t),c):n},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:As(+t),c):r},c.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:As(+t),c):i},c.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:As(+t),c):a},c.padAngle=function(t){return arguments.length?(s="function"==typeof t?t:As(+t),c):s},c.context=function(t){return arguments.length?(o=null==t?null:t,c):o},c}Array.prototype.slice;function oo(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function lo(t){this._context=t}function co(t){return new lo(t)}function uo(t){return t[0]}function ho(t){return t[1]}function mo(t,e){var n=As(!0),r=null,i=co,a=null,s=Ks(o);function o(o){var l,c,u,d=(o=oo(o)).length,h=!1;for(null==r&&(a=i(u=s())),l=0;l<=d;++l)!(l<d&&n(c=o[l],l,o))===h&&((h=!h)?a.lineStart():a.lineEnd()),h&&a.point(+t(c,l,o),+e(c,l,o));if(u)return a=null,u+""||null}return t="function"==typeof t?t:void 0===t?uo:As(t),e="function"==typeof e?e:void 0===e?ho:As(e),o.x=function(e){return arguments.length?(t="function"==typeof e?e:As(+e),o):t},o.y=function(t){return arguments.length?(e="function"==typeof t?t:As(+t),o):e},o.defined=function(t){return arguments.length?(n="function"==typeof t?t:As(!!t),o):n},o.curve=function(t){return arguments.length?(i=t,null!=r&&(a=i(r)),o):i},o.context=function(t){return arguments.length?(null==t?r=a=null:a=i(r=t),o):r},o}function _o(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function po(t){return t}function fo(){var t=po,e=_o,n=null,r=As(0),i=As(Zs),a=As(0);function s(s){var o,l,c,u,d,h=(s=oo(s)).length,m=0,_=new Array(h),p=new Array(h),f=+r.apply(this,arguments),y=Math.min(Zs,Math.max(-Zs,i.apply(this,arguments)-f)),g=Math.min(Math.abs(y)/h,a.apply(this,arguments)),b=g*(y<0?-1:1);for(o=0;o<h;++o)(d=p[_[o]=o]=+t(s[o],o,s))>0&&(m+=d);for(null!=e?_.sort((function(t,n){return e(p[t],p[n])})):null!=n&&_.sort((function(t,e){return n(s[t],s[e])})),o=0,c=m?(y-h*b)/m:0;o<h;++o,f=u)l=_[o],u=f+((d=p[l])>0?d*c:0)+b,p[l]={data:s[l],index:o,value:d,startAngle:f,endAngle:u,padAngle:g};return p}return s.value=function(e){return arguments.length?(t="function"==typeof e?e:As(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,n=null,s):e},s.sort=function(t){return arguments.length?(n=t,e=null,s):n},s.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:As(+t),s):r},s.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:As(+t),s):i},s.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:As(+t),s):a},s}function yo(){}function go(t,e,n){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+n)/6)}function bo(t){this._context=t}function ko(t){return new bo(t)}function vo(t){this._context=t}function xo(t){return new vo(t)}function Mo(t){this._context=t}function Lo(t){return new Mo(t)}lo.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)}}},bo.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:go(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:go(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},vo.prototype={areaStart:yo,areaEnd:yo,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:go(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},Mo.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 n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:go(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class wo{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 To(t){return new wo(t,!0)}function So(t){return new wo(t,!1)}function Do(t,e){this._basis=new bo(t),this._beta=e}Do.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],s=t[n]-i,o=e[n]-a,l=-1;++l<=n;)r=l/n,this._basis.point(this._beta*t[l]+(1-this._beta)*(i+r*s),this._beta*e[l]+(1-this._beta)*(a+r*o));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Yo=function t(e){function n(t){return 1===e?new bo(t):new Do(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function Eo(t,e,n){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-n),t._x2,t._y2)}function Co(t,e){this._context=t,this._k=(1-e)/6}Co.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:Eo(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:Eo(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 Ao=function t(e){function n(t){return new Co(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Oo(t,e){this._context=t,this._k=(1-e)/6}Oo.prototype={areaStart:yo,areaEnd:yo,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:Eo(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 No=function t(e){function n(t){return new Oo(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Bo(t,e){this._context=t,this._k=(1-e)/6}Bo.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:Eo(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 Fo=function t(e){function n(t){return new Bo(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Io(t,e,n){var r=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Rs){var o=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*o-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,i=(i*o-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Rs){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,u=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*c+t._x1*t._l23_2a-e*t._l12_2a)/u,s=(s*c+t._y1*t._l23_2a-n*t._l12_2a)/u}t._context.bezierCurveTo(r,i,a,s,t._x2,t._y2)}function Po(t,e){this._context=t,this._alpha=e}Po.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 n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+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:Io(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 jo=function t(e){function n(t){return e?new Po(t,e):new Co(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Ro(t,e){this._context=t,this._alpha=e}Ro.prototype={areaStart:yo,areaEnd:yo,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 n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+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:Io(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 Ho=function t(e){function n(t){return e?new Ro(t,e):new Oo(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function $o(t,e){this._context=t,this._alpha=e}$o.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 n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+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:Io(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 Zo=function t(e){function n(t){return e?new $o(t,e):new Bo(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Wo(t){this._context=t}function zo(t){return new Wo(t)}function Uo(t){return t<0?-1:1}function qo(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),s=(n-t._y1)/(i||r<0&&-0),o=(a*i+s*r)/(r+i);return(Uo(a)+Uo(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(o))||0}function Vo(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Go(t,e,n){var r=t._x0,i=t._y0,a=t._x1,s=t._y1,o=(a-r)/3;t._context.bezierCurveTo(r+o,i+o*e,a-o,s-o*n,a,s)}function Jo(t){this._context=t}function Xo(t){this._context=new Ko(t)}function Ko(t){this._context=t}function Qo(t){return new Jo(t)}function tl(t){return new Xo(t)}function el(t){this._context=t}function nl(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,s[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,s[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,s[e]-=n*s[e-1];for(i[r-1]=s[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function rl(t){return new el(t)}function il(t,e){this._context=t,this._t=e}function al(t){return new il(t,.5)}function sl(t){return new il(t,0)}function ol(t){return new il(t,1)}function ll(t,e,n){this.k=t,this.x=e,this.y=n}Wo.prototype={areaStart:yo,areaEnd:yo,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))}},Jo.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:Go(this,this._t0,Vo(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=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,Go(this,Vo(this,n=qo(this,t,e)),n);break;default:Go(this,this._t0,n=qo(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(Xo.prototype=Object.create(Jo.prototype)).point=function(t,e){Jo.prototype.point.call(this,e,t)},Ko.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,n,r,i,a){this._context.bezierCurveTo(e,t,r,n,a,i)}},el.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,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var r=nl(t),i=nl(e),a=0,s=1;s<n;++a,++s)this._context.bezierCurveTo(r[0][a],i[0][a],r[1][a],i[1][a],t[s],e[s]);(this._line||0!==this._line&&1===n)&&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)}},il.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 n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}},ll.prototype={constructor:ll,scale:function(t){return 1===t?this:new ll(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new ll(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 ll(1,0,0);ll.prototype},23352:(t,e,n)=>{"use strict";function r(t,e,n,r){var a,s,o,l,c,u,d,h,m,_,p,f,y;if(a=e.y-t.y,o=t.x-e.x,c=e.x*t.y-t.x*e.y,m=a*n.x+o*n.y+c,_=a*r.x+o*r.y+c,!(0!==m&&0!==_&&i(m,_)||(s=r.y-n.y,l=n.x-r.x,u=r.x*n.y-n.x*r.y,d=s*t.x+l*t.y+u,h=s*e.x+l*e.y+u,0!==d&&0!==h&&i(d,h)||0==(p=a*l-s*o))))return f=Math.abs(p/2),{x:(y=o*u-l*c)<0?(y-f)/p:(y+f)/p,y:(y=s*c-a*u)<0?(y-f)/p:(y+f)/p}}function i(t,e){return t*e>0}function a(t,e,n){var i=t.x,a=t.y,s=[],o=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;e.forEach((function(t){o=Math.min(o,t.x),l=Math.min(l,t.y)}));for(var c=i-t.width/2-o,u=a-t.height/2-l,d=0;d<e.length;d++){var h=e[d],m=e[d<e.length-1?d+1:0],_=r(t,n,{x:c+h.x,y:u+h.y},{x:c+m.x,y:u+m.y});_&&s.push(_)}return s.length?(s.length>1&&s.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),s=e.x-n.x,o=e.y-n.y,l=Math.sqrt(s*s+o*o);return a<l?-1:a===l?0:1})),s[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}n.d(e,{A:()=>a})},22930:(t,e,n)=>{"use strict";function r(t,e){var n,r,i=t.x,a=t.y,s=e.x-i,o=e.y-a,l=t.width/2,c=t.height/2;return Math.abs(o)*l>Math.abs(s)*c?(o<0&&(c=-c),n=0===o?0:c*s/o,r=c):(s<0&&(l=-l),n=l,r=0===s?0:l*o/s),{x:i+n,y:a+r}}n.d(e,{q:()=>r})},43349:(t,e,n)=>{"use strict";n.d(e,{a:()=>i});var r=n(96225);function i(t,e){var n=t.append("foreignObject").attr("width","100000"),i=n.append("xhtml:div");i.attr("xmlns","http://www.w3.org/1999/xhtml");var a=e.label;switch(typeof a){case"function":i.insert(a);break;case"object":i.insert((function(){return a}));break;default:i.html(a)}r.bg(i,e.labelStyle),i.style("display","inline-block"),i.style("white-space","nowrap");var s=i.node().getBoundingClientRect();return n.attr("width",s.width).attr("height",s.height),n}},96225:(t,e,n)=>{"use strict";n.d(e,{$p:()=>u,O1:()=>s,WR:()=>d,bF:()=>a,bg:()=>c});var r=n(37514),i=n(73234);function a(t,e){return!!t.children(e).length}function s(t){return l(t.v)+":"+l(t.w)+":"+l(t.name)}var o=/:/g;function l(t){return t?String(t).replace(o,"\\:"):""}function c(t,e){e&&t.attr("style",e)}function u(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))}function d(t,e){var n=e.graph();if(r.Z(n)){var a=n.transition;if(i.Z(a))return a(t)}return t}},70277:(t,e,n)=>{"use strict";n.d(e,{L0:()=>r,bK:()=>be,Fv:()=>i,dZ:()=>on});var r={};n.r(r),n.d(r,{run:()=>k,undo:()=>v});var i={};n.r(i),n.d(i,{run:()=>Ee,undo:()=>Ce});var a=n(70870),s=n(66749),o=n(17452),l=n(62002),c=n(27961),u=n(43836),d=n(74379),h=n(45625);class m{constructor(){var t={};t._next=t._prev=t,this._sentinel=t}dequeue(){var t=this._sentinel,e=t._prev;if(e!==t)return _(e),e}enqueue(t){var e=this._sentinel;t._prev&&t._next&&_(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e}toString(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,p)),n=n._prev;return"["+t.join(", ")+"]"}}function _(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function p(t,e){if("_next"!==t&&"_prev"!==t)return e}var f=l.Z(1);function y(t,e){if(t.nodeCount()<=1)return[];var n=function(t,e){var n=new h.k,r=0,i=0;a.Z(t.nodes(),(function(t){n.setNode(t,{v:t,in:0,out:0})})),a.Z(t.edges(),(function(t){var a=n.edge(t.v,t.w)||0,s=e(t),o=a+s;n.setEdge(t.v,t.w,o),i=Math.max(i,n.node(t.v).out+=s),r=Math.max(r,n.node(t.w).in+=s)}));var s=d.Z(i+r+3).map((function(){return new m})),o=r+1;return a.Z(n.nodes(),(function(t){b(s,o,n.node(t))})),{graph:n,buckets:s,zeroIdx:o}}(t,e||f),r=function(t,e,n){var r,i=[],a=e[e.length-1],s=e[0];for(;t.nodeCount();){for(;r=s.dequeue();)g(t,e,n,r);for(;r=a.dequeue();)g(t,e,n,r);if(t.nodeCount())for(var o=e.length-2;o>0;--o)if(r=e[o].dequeue()){i=i.concat(g(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return c.Z(u.Z(r,(function(e){return t.outEdges(e.v,e.w)})))}function g(t,e,n,r,i){var s=i?[]:void 0;return a.Z(t.inEdges(r.v),(function(r){var a=t.edge(r),o=t.node(r.v);i&&s.push({v:r.v,w:r.w}),o.out-=a,b(e,n,o)})),a.Z(t.outEdges(r.v),(function(r){var i=t.edge(r),a=r.w,s=t.node(a);s.in-=i,b(e,n,s)})),t.removeNode(r.v),s}function b(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}function k(t){var e="greedy"===t.graph().acyclicer?y(t,function(t){return function(e){return t.edge(e).weight}}(t)):function(t){var e=[],n={},r={};function i(s){o.Z(r,s)||(r[s]=!0,n[s]=!0,a.Z(t.outEdges(s),(function(t){o.Z(n,t.w)?e.push(t):i(t.w)})),delete n[s])}return a.Z(t.nodes(),i),e}(t);a.Z(e,(function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,s.Z("rev"))}))}function v(t){a.Z(t.edges(),(function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}}))}var x=n(31667),M=n(74752),L=n(79651);const w=function(t,e,n){(void 0!==n&&!(0,L.Z)(t[e],n)||void 0===n&&!(e in t))&&(0,M.Z)(t,e,n)};var T=n(61395),S=n(91050),D=n(12701),Y=n(87215),E=n(73658),C=n(29169),A=n(27771),O=n(836),N=n(77008),B=n(73234),F=n(77226),I=n(37514),P=n(18843);const j=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var R=n(31899),H=n(32957);const $=function(t){return(0,R.Z)(t,(0,H.Z)(t))};const Z=function(t,e,n,r,i,a,s){var o=j(t,n),l=j(e,n),c=s.get(l);if(c)w(t,n,c);else{var u=a?a(o,l,n+"",t,e,s):void 0,d=void 0===u;if(d){var h=(0,A.Z)(l),m=!h&&(0,N.Z)(l),_=!h&&!m&&(0,P.Z)(l);u=l,h||m||_?(0,A.Z)(o)?u=o:(0,O.Z)(o)?u=(0,Y.Z)(o):m?(d=!1,u=(0,S.Z)(l,!0)):_?(d=!1,u=(0,D.Z)(l,!0)):u=[]:(0,I.Z)(l)||(0,C.Z)(l)?(u=o,(0,C.Z)(o)?u=$(o):(0,F.Z)(o)&&!(0,B.Z)(o)||(u=(0,E.Z)(l))):d=!1}d&&(s.set(l,u),i(u,l,r,a,s),s.delete(l)),w(t,n,u)}};const W=function t(e,n,r,i,a){e!==n&&(0,T.Z)(n,(function(s,o){if(a||(a=new x.Z),(0,F.Z)(s))Z(e,n,o,r,t,i,a);else{var l=i?i(j(e,o),s,o+"",e,n,a):void 0;void 0===l&&(l=s),w(e,o,l)}}),H.Z)};var z=n(69581),U=n(50439);const q=function(t){return(0,z.Z)((function(e,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(i--,a):void 0,s&&(0,U.Z)(n[0],n[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++r<i;){var o=n[r];o&&t(e,o,r,a)}return e}))}((function(t,e,n){W(t,e,n)}));var V=n(61666),G=n(3688),J=n(72714);const X=function(t,e,n){for(var r=-1,i=t.length;++r<i;){var a=t[r],s=e(a);if(null!=s&&(void 0===o?s==s&&!(0,J.Z)(s):n(s,o)))var o=s,l=a}return l};const K=function(t,e){return t>e};var Q=n(69203);const tt=function(t){return t&&t.length?X(t,Q.Z,K):void 0};const et=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0};var nt=n(2693),rt=n(74765);const it=function(t,e){var n={};return e=(0,rt.Z)(e,3),(0,nt.Z)(t,(function(t,r,i){(0,M.Z)(n,r,e(t,r,i))})),n};var at=n(49360);const st=function(t,e){return t<e};const ot=function(t){return t&&t.length?X(t,Q.Z,st):void 0};var lt=n(66092);const ct=function(){return lt.Z.Date.now()};function ut(t,e,n,r){var i;do{i=s.Z(r)}while(t.hasNode(i));return n.dummy=e,t.setNode(i,n),i}function dt(t){var e=new h.k({multigraph:t.isMultigraph()}).setGraph(t.graph());return a.Z(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),a.Z(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e}function ht(t,e){var n,r,i=t.x,a=t.y,s=e.x-i,o=e.y-a,l=t.width/2,c=t.height/2;if(!s&&!o)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(o)*l>Math.abs(s)*c?(o<0&&(c=-c),n=c*s/o,r=c):(s<0&&(l=-l),n=l,r=l*o/s),{x:i+n,y:a+r}}function mt(t){var e=u.Z(d.Z(pt(t)+1),(function(){return[]}));return a.Z(t.nodes(),(function(n){var r=t.node(n),i=r.rank;at.Z(i)||(e[i][r.order]=n)})),e}function _t(t,e,n,r){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),ut(t,"border",i,e)}function pt(t){return tt(u.Z(t.nodes(),(function(e){var n=t.node(e).rank;if(!at.Z(n))return n})))}function ft(t,e){var n=ct();try{return e()}finally{console.log(t+" time: "+(ct()-n)+"ms")}}function yt(t,e){return e()}function gt(t,e,n,r,i,a){var s={width:0,height:0,rank:a,borderType:e},o=i[e][a-1],l=ut(t,"border",s,n);i[e][a]=l,t.setParent(l,r),o&&t.setEdge(o,l,{weight:1})}function bt(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(t){a.Z(t.nodes(),(function(e){xt(t.node(e))})),a.Z(t.edges(),(function(e){var n=t.edge(e);a.Z(n.points,xt),o.Z(n,"y")&&xt(n)}))}(t),"lr"!==e&&"rl"!==e||(!function(t){a.Z(t.nodes(),(function(e){Mt(t.node(e))})),a.Z(t.edges(),(function(e){var n=t.edge(e);a.Z(n.points,Mt),o.Z(n,"x")&&Mt(n)}))}(t),kt(t))}function kt(t){a.Z(t.nodes(),(function(e){vt(t.node(e))})),a.Z(t.edges(),(function(e){vt(t.edge(e))}))}function vt(t){var e=t.width;t.width=t.height,t.height=e}function xt(t){t.y=-t.y}function Mt(t){var e=t.x;t.x=t.y,t.y=e}var Lt=n(34148),wt=n(92344);function Tt(t){var e=ut(t,"root",{},"_root"),n=function(t){var e={};function n(r,i){var s=t.children(r);s&&s.length&&a.Z(s,(function(t){n(t,i+1)})),e[r]=i}return a.Z(t.children(),(function(t){n(t,1)})),e}(t),r=tt(Lt.Z(n))-1,i=2*r+1;t.graph().nestingRoot=e,a.Z(t.edges(),(function(e){t.edge(e).minlen*=i}));var s=function(t){return wt.Z(t.edges(),(function(e,n){return e+t.edge(n).weight}),0)}(t)+1;a.Z(t.children(),(function(a){St(t,e,i,s,r,n,a)})),t.graph().nodeRankFactor=i}function St(t,e,n,r,i,s,o){var l=t.children(o);if(l.length){var c=_t(t,"_bt"),u=_t(t,"_bb"),d=t.node(o);t.setParent(c,o),d.borderTop=c,t.setParent(u,o),d.borderBottom=u,a.Z(l,(function(a){St(t,e,n,r,i,s,a);var l=t.node(a),d=l.borderTop?l.borderTop:a,h=l.borderBottom?l.borderBottom:a,m=l.borderTop?r:2*r,_=d!==h?1:i-s[o]+1;t.setEdge(c,d,{weight:m,minlen:_,nestingEdge:!0}),t.setEdge(h,u,{weight:m,minlen:_,nestingEdge:!0})})),t.parent(o)||t.setEdge(e,c,{weight:0,minlen:i+s[o]})}else o!==e&&t.setEdge(e,o,{weight:0,minlen:n})}var Dt=n(48451);const Yt=function(t){return(0,Dt.Z)(t,5)};function Et(t,e,n){var r=function(t){var e;for(;t.hasNode(e=s.Z("_root")););return e}(t),i=new h.k({compound:!0}).setGraph({root:r}).setDefaultNodeLabel((function(e){return t.node(e)}));return a.Z(t.nodes(),(function(s){var l=t.node(s),c=t.parent(s);(l.rank===e||l.minRank<=e&&e<=l.maxRank)&&(i.setNode(s),i.setParent(s,c||r),a.Z(t[n](s),(function(e){var n=e.v===s?e.w:e.v,r=i.edge(n,s),a=at.Z(r)?0:r.weight;i.setEdge(n,s,{weight:t.edge(e).weight+a})})),o.Z(l,"minRank")&&i.setNode(s,{borderLeft:l.borderLeft[e],borderRight:l.borderRight[e]}))})),i}var Ct=n(72954);const At=function(t,e,n){for(var r=-1,i=t.length,a=e.length,s={};++r<i;){var o=r<a?e[r]:void 0;n(s,t[r],o)}return s};const Ot=function(t,e){return At(t||[],e||[],Ct.Z)};var Nt=n(10626),Bt=n(74073),Ft=n(13317),It=n(21018);const Pt=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t};var jt=n(21162);const Rt=function(t,e){if(t!==e){var n=void 0!==t,r=null===t,i=t==t,a=(0,J.Z)(t),s=void 0!==e,o=null===e,l=e==e,c=(0,J.Z)(e);if(!o&&!c&&!a&&t>e||a&&s&&l&&!o&&!c||r&&s&&l||!n&&l||!i)return 1;if(!r&&!a&&!c&&t<e||c&&n&&i&&!r&&!a||o&&n&&i||!s&&i||!l)return-1}return 0};const Ht=function(t,e,n){for(var r=-1,i=t.criteria,a=e.criteria,s=i.length,o=n.length;++r<s;){var l=Rt(i[r],a[r]);if(l)return r>=o?l:l*("desc"==n[r]?-1:1)}return t.index-e.index};const $t=function(t,e,n){e=e.length?(0,Bt.Z)(e,(function(t){return(0,A.Z)(t)?function(e){return(0,Ft.Z)(e,1===t.length?t[0]:t)}:t})):[Q.Z];var r=-1;e=(0,Bt.Z)(e,(0,jt.Z)(rt.Z));var i=(0,It.Z)(t,(function(t,n,i){return{criteria:(0,Bt.Z)(e,(function(e){return e(t)})),index:++r,value:t}}));return Pt(i,(function(t,e){return Ht(t,e,n)}))};const Zt=(0,z.Z)((function(t,e){if(null==t)return[];var n=e.length;return n>1&&(0,U.Z)(t,e[0],e[1])?e=[]:n>2&&(0,U.Z)(e[0],e[1],e[2])&&(e=[e[0]]),$t(t,(0,Nt.Z)(e,1),[])}));function Wt(t,e){for(var n=0,r=1;r<e.length;++r)n+=zt(t,e[r-1],e[r]);return n}function zt(t,e,n){for(var r=Ot(n,u.Z(n,(function(t,e){return e}))),i=c.Z(u.Z(e,(function(e){return Zt(u.Z(t.outEdges(e),(function(e){return{pos:r[e.w],weight:t.edge(e).weight}})),"pos")}))),s=1;s<n.length;)s<<=1;var o=2*s-1;s-=1;var l=u.Z(new Array(o),(function(){return 0})),d=0;return a.Z(i.forEach((function(t){var e=t.pos+s;l[e]+=t.weight;for(var n=0;e>0;)e%2&&(n+=l[e+1]),l[e=e-1>>1]+=t.weight;d+=t.weight*n}))),d}var Ut=n(13445);function qt(t,e){var n={};return a.Z(t,(function(t,e){var r=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};at.Z(t.barycenter)||(r.barycenter=t.barycenter,r.weight=t.weight)})),a.Z(e.edges(),(function(t){var e=n[t.v],r=n[t.w];at.Z(e)||at.Z(r)||(r.indegree++,e.out.push(n[t.w]))})),function(t){var e=[];function n(t){return function(e){e.merged||(at.Z(e.barycenter)||at.Z(t.barycenter)||e.barycenter>=t.barycenter)&&function(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}(t,e)}}function r(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var i=t.pop();e.push(i),a.Z(i.in.reverse(),n(i)),a.Z(i.out,r(i))}return u.Z(Ut.Z(e,(function(t){return!t.merged})),(function(t){return V.Z(t,["vs","i","barycenter","weight"])}))}(Ut.Z(n,(function(t){return!t.indegree})))}function Vt(t,e){var n,r=function(t,e){var n={lhs:[],rhs:[]};return a.Z(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n}(t,(function(t){return o.Z(t,"barycenter")})),i=r.lhs,s=Zt(r.rhs,(function(t){return-t.i})),l=[],u=0,d=0,h=0;i.sort((n=!!e,function(t,e){return t.barycenter<e.barycenter?-1:t.barycenter>e.barycenter?1:n?e.i-t.i:t.i-e.i})),h=Gt(l,s,h),a.Z(i,(function(t){h+=t.vs.length,l.push(t.vs),u+=t.barycenter*t.weight,d+=t.weight,h=Gt(l,s,h)}));var m={vs:c.Z(l)};return d&&(m.barycenter=u/d,m.weight=d),m}function Gt(t,e,n){for(var r;e.length&&(r=et(e)).i<=n;)e.pop(),t.push(r.vs),n++;return n}function Jt(t,e,n,r){var i=t.children(e),s=t.node(e),l=s?s.borderLeft:void 0,d=s?s.borderRight:void 0,h={};l&&(i=Ut.Z(i,(function(t){return t!==l&&t!==d})));var m=function(t,e){return u.Z(e,(function(e){var n=t.inEdges(e);if(n.length){var r=wt.Z(n,(function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}}),{sum:0,weight:0});return{v:e,barycenter:r.sum/r.weight,weight:r.weight}}return{v:e}}))}(t,i);a.Z(m,(function(e){if(t.children(e.v).length){var i=Jt(t,e.v,n,r);h[e.v]=i,o.Z(i,"barycenter")&&(a=e,s=i,at.Z(a.barycenter)?(a.barycenter=s.barycenter,a.weight=s.weight):(a.barycenter=(a.barycenter*a.weight+s.barycenter*s.weight)/(a.weight+s.weight),a.weight+=s.weight))}var a,s}));var _=qt(m,n);!function(t,e){a.Z(t,(function(t){t.vs=c.Z(t.vs.map((function(t){return e[t]?e[t].vs:t})))}))}(_,h);var p=Vt(_,r);if(l&&(p.vs=c.Z([l,p.vs,d]),t.predecessors(l).length)){var f=t.node(t.predecessors(l)[0]),y=t.node(t.predecessors(d)[0]);o.Z(p,"barycenter")||(p.barycenter=0,p.weight=0),p.barycenter=(p.barycenter*p.weight+f.order+y.order)/(p.weight+2),p.weight+=2}return p}function Xt(t){var e=pt(t),n=Kt(t,d.Z(1,e+1),"inEdges"),r=Kt(t,d.Z(e-1,-1,-1),"outEdges"),i=function(t){var e={},n=Ut.Z(t.nodes(),(function(e){return!t.children(e).length})),r=tt(u.Z(n,(function(e){return t.node(e).rank}))),i=u.Z(d.Z(r+1),(function(){return[]})),s=Zt(n,(function(e){return t.node(e).rank}));return a.Z(s,(function n(r){if(!o.Z(e,r)){e[r]=!0;var s=t.node(r);i[s.rank].push(r),a.Z(t.successors(r),n)}})),i}(t);te(t,i);for(var s,l=Number.POSITIVE_INFINITY,c=0,h=0;h<4;++c,++h){Qt(c%2?n:r,c%4>=2);var m=Wt(t,i=mt(t));m<l&&(h=0,s=Yt(i),l=m)}te(t,s)}function Kt(t,e,n){return u.Z(e,(function(e){return Et(t,e,n)}))}function Qt(t,e){var n=new h.k;a.Z(t,(function(t){var r=t.graph().root,i=Jt(t,r,n,e);a.Z(i.vs,(function(e,n){t.node(e).order=n})),function(t,e,n){var r,i={};a.Z(n,(function(n){for(var a,s,o=t.parent(n);o;){if((a=t.parent(o))?(s=i[a],i[a]=o):(s=r,r=o),s&&s!==o)return void e.setEdge(s,o);o=a}}))}(t,n,i.vs)}))}function te(t,e){a.Z(e,(function(e){a.Z(e,(function(e,n){t.node(e).order=n}))}))}function ee(t){var e=function(t){var e={},n=0;function r(i){var s=n;a.Z(t.children(i),r),e[i]={low:s,lim:n++}}return a.Z(t.children(),r),e}(t);a.Z(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,s=[],o=[],l=Math.min(e[n].low,e[r].low),c=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),s.push(i)}while(i&&(e[i].low>l||c>e[i].lim));a=i,i=r;for(;(i=t.parent(i))!==a;)o.push(i);return{path:s.concat(o.reverse()),lca:a}}(t,e,i.v,i.w),s=a.path,o=a.lca,l=0,c=s[l],u=!0;n!==i.w;){if(r=t.node(n),u){for(;(c=s[l])!==o&&t.node(c).maxRank<r.rank;)l++;c===o&&(u=!1)}if(!u){for(;l<s.length-1&&t.node(c=s[l+1]).minRank<=r.rank;)l++;c=s[l]}t.setParent(n,c),n=t.successors(n)[0]}}))}var ne=n(50585),re=n(17179);const ie=function(t){return function(e,n,r){var i=Object(e);if(!(0,ne.Z)(e)){var a=(0,rt.Z)(n,3);e=(0,re.Z)(e),n=function(t){return a(i[t],t,i)}}var s=t(e,n,r);return s>-1?i[a?e[s]:s]:void 0}};var ae=n(21692),se=n(94099);const oe=function(t){var e=(0,se.Z)(t),n=e%1;return e==e?n?e-n:e:0};var le=Math.max;const ce=ie((function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:oe(n);return i<0&&(i=le(r+i,0)),(0,ae.Z)(t,(0,rt.Z)(e,3),i)}));const ue=function(t,e){return t&&t.length?X(t,(0,rt.Z)(e,2),st):void 0};var de=n(68882);const he=function(t,e){return null==t?t:(0,T.Z)(t,(0,de.Z)(e),H.Z)};function me(t,e){var n={};return wt.Z(e,(function(e,r){var i=0,s=0,o=e.length,l=et(r);return a.Z(r,(function(e,c){var u=function(t,e){if(t.node(e).dummy)return ce(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),d=u?t.node(u).order:o;(u||e===l)&&(a.Z(r.slice(s,c+1),(function(e){a.Z(t.predecessors(e),(function(r){var a=t.node(r),s=a.order;!(s<i||d<s)||a.dummy&&t.node(e).dummy||_e(n,r,e)}))})),s=c+1,i=d)})),r})),n}function _e(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function pe(t,e,n){if(e>n){var r=e;e=n,n=r}return o.Z(t[e],n)}function fe(t,e,n,r,i){var s={},l=function(t,e,n,r){var i=new h.k,s=t.graph(),l=function(t,e,n){return function(r,i,a){var s,l=r.node(i),c=r.node(a),u=0;if(u+=l.width/2,o.Z(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":s=-l.width/2;break;case"r":s=l.width/2}if(s&&(u+=n?s:-s),s=0,u+=(l.dummy?e:t)/2,u+=(c.dummy?e:t)/2,u+=c.width/2,o.Z(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":s=c.width/2;break;case"r":s=-c.width/2}return s&&(u+=n?s:-s),s=0,u}}(s.nodesep,s.edgesep,r);return a.Z(e,(function(e){var r;a.Z(e,(function(e){var a=n[e];if(i.setNode(a),r){var s=n[r],o=i.edge(s,a);i.setEdge(s,a,Math.max(l(t,e,r),o||0))}r=e}))})),i}(t,e,n,i),c=i?"borderLeft":"borderRight";function u(t,e){for(var n=l.nodes(),r=n.pop(),i={};r;)i[r]?t(r):(i[r]=!0,n.push(r),n=n.concat(e(r))),r=n.pop()}return u((function(t){s[t]=l.inEdges(t).reduce((function(t,e){return Math.max(t,s[e.v]+l.edge(e))}),0)}),l.predecessors.bind(l)),u((function(e){var n=l.outEdges(e).reduce((function(t,e){return Math.min(t,s[e.w]-l.edge(e))}),Number.POSITIVE_INFINITY),r=t.node(e);n!==Number.POSITIVE_INFINITY&&r.borderType!==c&&(s[e]=Math.max(s[e],n))}),l.successors.bind(l)),a.Z(r,(function(t){s[t]=s[n[t]]})),s}function ye(t){var e,n=mt(t),r=q(me(t,n),function(t,e){var n={};function r(e,r,i,s,o){var l;a.Z(d.Z(r,i),(function(r){l=e[r],t.node(l).dummy&&a.Z(t.predecessors(l),(function(e){var r=t.node(e);r.dummy&&(r.order<s||r.order>o)&&_e(n,e,l)}))}))}return wt.Z(e,(function(e,n){var i,s=-1,o=0;return a.Z(n,(function(a,l){if("border"===t.node(a).dummy){var c=t.predecessors(a);c.length&&(i=t.node(c[0]).order,r(n,o,l,s,i),o=l,s=i)}r(n,o,n.length,i,e.length)})),n})),n}(t,n)),i={};a.Z(["u","d"],(function(s){e="u"===s?n:Lt.Z(n).reverse(),a.Z(["l","r"],(function(n){"r"===n&&(e=u.Z(e,(function(t){return Lt.Z(t).reverse()})));var o=("u"===s?t.predecessors:t.successors).bind(t),l=function(t,e,n,r){var i={},s={},o={};return a.Z(e,(function(t){a.Z(t,(function(t,e){i[t]=t,s[t]=t,o[t]=e}))})),a.Z(e,(function(t){var e=-1;a.Z(t,(function(t){var a=r(t);if(a.length){a=Zt(a,(function(t){return o[t]}));for(var l=(a.length-1)/2,c=Math.floor(l),u=Math.ceil(l);c<=u;++c){var d=a[c];s[t]===t&&e<o[d]&&!pe(n,t,d)&&(s[d]=t,s[t]=i[t]=i[d],e=o[d])}}}))})),{root:i,align:s}}(0,e,r,o),c=fe(t,e,l.root,l.align,"r"===n);"r"===n&&(c=it(c,(function(t){return-t}))),i[s+n]=c}))}));var s=function(t,e){return ue(Lt.Z(e),(function(e){var n=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY;return he(e,(function(e,i){var a=function(t,e){return t.node(e).width}(t,i)/2;n=Math.max(e+a,n),r=Math.min(e-a,r)})),n-r}))}(t,i);return function(t,e){var n=Lt.Z(e),r=ot(n),i=tt(n);a.Z(["u","d"],(function(n){a.Z(["l","r"],(function(a){var s,o=n+a,l=t[o];if(l!==e){var c=Lt.Z(l);(s="l"===a?r-ot(c):i-tt(c))&&(t[o]=it(l,(function(t){return t+s})))}}))}))}(i,s),function(t,e){return it(t.ul,(function(n,r){if(e)return t[e.toLowerCase()][r];var i=Zt(u.Z(t,r));return(i[1]+i[2])/2}))}(i,t.graph().align)}function ge(t){(function(t){var e=mt(t),n=t.graph().ranksep,r=0;a.Z(e,(function(e){var i=tt(u.Z(e,(function(e){return t.node(e).height})));a.Z(e,(function(e){t.node(e).y=r+i/2})),r+=i+n}))})(t=dt(t)),a.Z(ye(t),(function(e,n){t.node(n).x=e}))}function be(t,e){var n=e&&e.debugTiming?ft:yt;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new h.k({multigraph:!0,compound:!0}),n=Ye(t.graph());return e.setGraph(q({},ve,De(n,ke),V.Z(n,xe))),a.Z(t.nodes(),(function(n){var r=Ye(t.node(n));e.setNode(n,G.Z(De(r,Me),Le)),e.setParent(n,t.parent(n))})),a.Z(t.edges(),(function(n){var r=Ye(t.edge(n));e.setEdge(n,q({},Te,De(r,we),V.Z(r,Se)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,a.Z(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){a.Z(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){k(t)})),e(" nestingGraph.run",(function(){Tt(t)})),e(" rank",(function(){on(dt(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){a.Z(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};ut(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){!function(t){var e=ot(u.Z(t.nodes(),(function(e){return t.node(e).rank}))),n=[];a.Z(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var r=0,i=t.graph().nodeRankFactor;a.Z(n,(function(e,n){at.Z(e)&&n%i!=0?--r:r&&a.Z(e,(function(e){t.node(e).rank+=r}))}))}(t)})),e(" nestingGraph.cleanup",(function(){!function(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,a.Z(t.edges(),(function(e){t.edge(e).nestingEdge&&t.removeEdge(e)}))}(t)})),e(" normalizeRanks",(function(){!function(t){var e=ot(u.Z(t.nodes(),(function(e){return t.node(e).rank})));a.Z(t.nodes(),(function(n){var r=t.node(n);o.Z(r,"rank")&&(r.rank-=e)}))}(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;a.Z(t.nodes(),(function(n){var r=t.node(n);r.borderTop&&(r.minRank=t.node(r.borderTop).rank,r.maxRank=t.node(r.borderBottom).rank,e=tt(e,r.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){a.Z(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){Ee(t)})),e(" parentDummyChains",(function(){ee(t)})),e(" addBorderSegments",(function(){!function(t){a.Z(t.children(),(function e(n){var r=t.children(n),i=t.node(n);if(r.length&&a.Z(r,e),o.Z(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var s=i.minRank,l=i.maxRank+1;s<l;++s)gt(t,"borderLeft","_bl",n,i,s),gt(t,"borderRight","_br",n,i,s)}}))}(t)})),e(" order",(function(){Xt(t)})),e(" insertSelfEdges",(function(){!function(t){var e=mt(t);a.Z(e,(function(e){var n=0;a.Z(e,(function(e,r){var i=t.node(e);i.order=r+n,a.Z(i.selfEdges,(function(e){ut(t,"selfedge",{width:e.label.width,height:e.label.height,rank:i.rank,order:r+ ++n,e:e.e,label:e.label},"_se")})),delete i.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){!function(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||kt(t)}(t)})),e(" position",(function(){ge(t)})),e(" positionSelfEdges",(function(){!function(t){a.Z(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,s=n.x-i,o=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*s/3,y:a-o},{x:i+5*s/6,y:a-o},{x:i+s,y:a},{x:i+5*s/6,y:a+o},{x:i+2*s/3,y:a+o}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){a.Z(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),r=t.node(n.borderTop),i=t.node(n.borderBottom),a=t.node(et(n.borderLeft)),s=t.node(et(n.borderRight));n.width=Math.abs(s.x-a.x),n.height=Math.abs(i.y-r.y),n.x=a.x+n.width/2,n.y=r.y+n.height/2}})),a.Z(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){Ce(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){a.Z(t.edges(),(function(e){var n=t.edge(e);if(o.Z(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){bt(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,r=Number.POSITIVE_INFINITY,i=0,s=t.graph(),l=s.marginx||0,c=s.marginy||0;function u(t){var a=t.x,s=t.y,o=t.width,l=t.height;e=Math.min(e,a-o/2),n=Math.max(n,a+o/2),r=Math.min(r,s-l/2),i=Math.max(i,s+l/2)}a.Z(t.nodes(),(function(e){u(t.node(e))})),a.Z(t.edges(),(function(e){var n=t.edge(e);o.Z(n,"x")&&u(n)})),e-=l,r-=c,a.Z(t.nodes(),(function(n){var i=t.node(n);i.x-=e,i.y-=r})),a.Z(t.edges(),(function(n){var i=t.edge(n);a.Z(i.points,(function(t){t.x-=e,t.y-=r})),o.Z(i,"x")&&(i.x-=e),o.Z(i,"y")&&(i.y-=r)})),s.width=n-e+l,s.height=i-r+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){a.Z(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),s=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=s,r=a),i.points.unshift(ht(a,n)),i.points.push(ht(s,r))}))}(t)})),e(" reversePoints",(function(){!function(t){a.Z(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){v(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){a.Z(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),a.Z(t.edges(),(function(n){var r=t.edge(n),i=e.edge(n);r.points=i.points,o.Z(i,"x")&&(r.x=i.x,r.y=i.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))}var ke=["nodesep","edgesep","ranksep","marginx","marginy"],ve={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},xe=["acyclicer","ranker","rankdir","align"],Me=["width","height"],Le={width:0,height:0},we=["minlen","weight","width","height","labeloffset"],Te={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},Se=["labelpos"];function De(t,e){return it(V.Z(t,e),Number)}function Ye(t){var e={};return a.Z(t,(function(t,n){e[n.toLowerCase()]=t})),e}function Ee(t){t.graph().dummyChains=[],a.Z(t.edges(),(function(e){!function(t,e){var n,r,i,a=e.v,s=t.node(a).rank,o=e.w,l=t.node(o).rank,c=e.name,u=t.edge(e),d=u.labelRank;if(l===s+1)return;for(t.removeEdge(e),i=0,++s;s<l;++i,++s)u.points=[],n=ut(t,"edge",r={width:0,height:0,edgeLabel:u,edgeObj:e,rank:s},"_d"),s===d&&(r.width=u.width,r.height=u.height,r.dummy="edge-label",r.labelpos=u.labelpos),t.setEdge(a,n,{weight:u.weight},c),0===i&&t.graph().dummyChains.push(n),a=n;t.setEdge(a,o,{weight:u.weight},c)}(t,e)}))}function Ce(t){a.Z(t.graph().dummyChains,(function(e){var n,r=t.node(e),i=r.edgeLabel;for(t.setEdge(r.edgeObj,i);r.dummy;)n=t.successors(e)[0],t.removeNode(e),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),e=n,r=t.node(e)}))}function Ae(t){var e={};a.Z(t.sources(),(function n(r){var i=t.node(r);if(o.Z(e,r))return i.rank;e[r]=!0;var a=ot(u.Z(t.outEdges(r),(function(e){return n(e.w)-t.edge(e).minlen})));return a!==Number.POSITIVE_INFINITY&&null!=a||(a=0),i.rank=a}))}function Oe(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}function Ne(t){var e,n,r=new h.k({directed:!1}),i=t.nodes()[0],a=t.nodeCount();for(r.setNode(i,{});Be(r,t)<a;)e=Fe(r,t),n=r.hasNode(e.v)?Oe(t,e):-Oe(t,e),Ie(r,t,n);return r}function Be(t,e){return a.Z(t.nodes(),(function n(r){a.Z(e.nodeEdges(r),(function(i){var a=i.v,s=r===a?i.w:a;t.hasNode(s)||Oe(e,i)||(t.setNode(s,{}),t.setEdge(r,s,{}),n(s))}))})),t.nodeCount()}function Fe(t,e){return ue(e.edges(),(function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return Oe(e,n)}))}function Ie(t,e,n){a.Z(t.nodes(),(function(t){e.node(t).rank+=n}))}l.Z(1);l.Z(1);n(39473),n(83970),n(93589),n(18533);(0,n(54193).Z)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var Pe="[\\ud800-\\udfff]",je="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Re="\\ud83c[\\udffb-\\udfff]",He="[^\\ud800-\\udfff]",$e="(?:\\ud83c[\\udde6-\\uddff]){2}",Ze="[\\ud800-\\udbff][\\udc00-\\udfff]",We="(?:"+je+"|"+Re+")"+"?",ze="[\\ufe0e\\ufe0f]?",Ue=ze+We+("(?:\\u200d(?:"+[He,$e,Ze].join("|")+")"+ze+We+")*"),qe="(?:"+[He+je+"?",je,$e,Ze,Pe].join("|")+")";RegExp(Re+"(?="+Re+")|"+qe+Ue,"g");function Ve(){}function Ge(t,e,n){A.Z(e)||(e=[e]);var r=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],s={};return a.Z(e,(function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);Je(t,e,"post"===n,s,r,i)})),i}function Je(t,e,n,r,i,s){o.Z(r,e)||(r[e]=!0,n||s.push(e),a.Z(i(e),(function(e){Je(t,e,n,r,i,s)})),n&&s.push(e))}Ve.prototype=new Error;n(52544);function Xe(t){t=function(t){var e=(new h.k).setGraph(t.graph());return a.Z(t.nodes(),(function(n){e.setNode(n,t.node(n))})),a.Z(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e}(t),Ae(t);var e,n=Ne(t);for(tn(n),Ke(n,t);e=nn(n);)an(n,t,e,rn(n,t,e))}function Ke(t,e){var n=function(t,e){return Ge(t,e,"post")}(t,t.nodes());n=n.slice(0,n.length-1),a.Z(n,(function(n){!function(t,e,n){var r=t.node(n).parent;t.edge(n,r).cutvalue=Qe(t,e,n)}(t,e,n)}))}function Qe(t,e,n){var r=t.node(n).parent,i=!0,s=e.edge(n,r),o=0;return s||(i=!1,s=e.edge(r,n)),o=s.weight,a.Z(e.nodeEdges(n),(function(a){var s,l,c=a.v===n,u=c?a.w:a.v;if(u!==r){var d=c===i,h=e.edge(a).weight;if(o+=d?h:-h,s=n,l=u,t.hasEdge(s,l)){var m=t.edge(n,u).cutvalue;o+=d?-m:m}}})),o}function tn(t,e){arguments.length<2&&(e=t.nodes()[0]),en(t,{},1,e)}function en(t,e,n,r,i){var s=n,l=t.node(r);return e[r]=!0,a.Z(t.neighbors(r),(function(i){o.Z(e,i)||(n=en(t,e,n,i,r))})),l.low=s,l.lim=n++,i?l.parent=i:delete l.parent,n}function nn(t){return ce(t.edges(),(function(e){return t.edge(e).cutvalue<0}))}function rn(t,e,n){var r=n.v,i=n.w;e.hasEdge(r,i)||(r=n.w,i=n.v);var a=t.node(r),s=t.node(i),o=a,l=!1;a.lim>s.lim&&(o=s,l=!0);var c=Ut.Z(e.edges(),(function(e){return l===sn(t,t.node(e.v),o)&&l!==sn(t,t.node(e.w),o)}));return ue(c,(function(t){return Oe(e,t)}))}function an(t,e,n,r){var i=n.v,s=n.w;t.removeEdge(i,s),t.setEdge(r.v,r.w,{}),tn(t),Ke(t,e),function(t,e){var n=ce(t.nodes(),(function(t){return!e.node(t).parent})),r=function(t,e){return Ge(t,e,"pre")}(t,n);r=r.slice(1),a.Z(r,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function sn(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}function on(t){switch(t.graph().ranker){case"network-simplex":default:cn(t);break;case"tight-tree":!function(t){Ae(t),Ne(t)}(t);break;case"longest-path":ln(t)}}Xe.initLowLimValues=tn,Xe.initCutValues=Ke,Xe.calcCutValue=Qe,Xe.leaveEdge=nn,Xe.enterEdge=rn,Xe.exchangeEdges=an;var ln=Ae;function cn(t){Xe(t)}},52544:(t,e,n)=>{"use strict";n.d(e,{k:()=>A});var r=n(17452),i=n(62002),a=n(73234),s=n(17179),o=n(13445),l=n(79697),c=n(70870),u=n(49360),d=n(10626),h=n(69581),m=n(63001),_=n(21692);const p=function(t){return t!=t};const f=function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1};const y=function(t,e,n){return e==e?f(t,e,n):(0,_.Z)(t,p,n)};const g=function(t,e){return!!(null==t?0:t.length)&&y(t,e,0)>-1};const b=function(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1};var k=n(59548),v=n(93203);const x=function(){};var M=n(6545),L=v.Z&&1/(0,M.Z)(new v.Z([,-0]))[1]==1/0?function(t){return new v.Z(t)}:x;const w=L;const T=function(t,e,n){var r=-1,i=g,a=t.length,s=!0,o=[],l=o;if(n)s=!1,i=b;else if(a>=200){var c=e?null:w(t);if(c)return(0,M.Z)(c);s=!1,i=k.Z,l=new m.Z}else l=e?[]:o;t:for(;++r<a;){var u=t[r],d=e?e(u):u;if(u=n||0!==u?u:0,s&&d==d){for(var h=l.length;h--;)if(l[h]===d)continue t;e&&l.push(d),o.push(u)}else i(l,d,n)||(l!==o&&l.push(d),o.push(u))}return o};var S=n(836);const D=(0,h.Z)((function(t){return T((0,d.Z)(t,1,S.Z,!0))}));var Y=n(34148),E=n(92344),C="\0";class A{constructor(t={}){this._isDirected=!r.Z(t,"directed")||t.directed,this._isMultigraph=!!r.Z(t,"multigraph")&&t.multigraph,this._isCompound=!!r.Z(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=i.Z(void 0),this._defaultEdgeLabelFn=i.Z(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(t){return this._label=t,this}graph(){return this._label}setDefaultNodeLabel(t){return a.Z(t)||(t=i.Z(t)),this._defaultNodeLabelFn=t,this}nodeCount(){return this._nodeCount}nodes(){return s.Z(this._nodes)}sources(){var t=this;return o.Z(this.nodes(),(function(e){return l.Z(t._in[e])}))}sinks(){var t=this;return o.Z(this.nodes(),(function(e){return l.Z(t._out[e])}))}setNodes(t,e){var n=arguments,r=this;return c.Z(t,(function(t){n.length>1?r.setNode(t,e):r.setNode(t)})),this}setNode(t,e){return r.Z(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]=C,this._children[t]={},this._children["\0"][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 r.Z(this._nodes,t)}removeNode(t){var e=this;if(r.Z(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],c.Z(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),c.Z(s.Z(this._in[t]),n),delete this._in[t],delete this._preds[t],c.Z(s.Z(this._out[t]),n),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(u.Z(e))e=C;else{for(var n=e+="";!u.Z(n);n=this.parent(n))if(n===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!==C)return e}}children(t){if(u.Z(t)&&(t=C),this._isCompound){var e=this._children[t];if(e)return s.Z(e)}else{if(t===C)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var e=this._preds[t];if(e)return s.Z(e)}successors(t){var e=this._sucs[t];if(e)return s.Z(e)}neighbors(t){var e=this.predecessors(t);if(e)return D(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 n=this;c.Z(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),c.Z(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var r={};function i(t){var a=n.parent(t);return void 0===a||e.hasNode(a)?(r[t]=a,a):a in r?r[a]:i(a)}return this._isCompound&&c.Z(e.nodes(),(function(t){e.setParent(t,i(t))})),e}setDefaultEdgeLabel(t){return a.Z(t)||(t=i.Z(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return Y.Z(this._edgeObjs)}setPath(t,e){var n=this,r=arguments;return E.Z(t,(function(t,i){return r.length>1?n.setEdge(t,i,e):n.setEdge(t,i),i})),this}setEdge(){var t,e,n,i,a=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(i=arguments[1],a=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),t=""+t,e=""+e,u.Z(n)||(n=""+n);var o=B(this._isDirected,t,e,n);if(r.Z(this._edgeLabels,o))return a&&(this._edgeLabels[o]=i),this;if(!u.Z(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[o]=a?i:this._defaultEdgeLabelFn(t,e,n);var l=function(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var s=i;i=a,a=s}var o={v:i,w:a};r&&(o.name=r);return o}(this._isDirected,t,e,n);return t=l.v,e=l.w,Object.freeze(l),this._edgeObjs[o]=l,O(this._preds[e],t),O(this._sucs[t],e),this._in[e][o]=l,this._out[t][o]=l,this._edgeCount++,this}edge(t,e,n){var r=1===arguments.length?F(this._isDirected,arguments[0]):B(this._isDirected,t,e,n);return this._edgeLabels[r]}hasEdge(t,e,n){var i=1===arguments.length?F(this._isDirected,arguments[0]):B(this._isDirected,t,e,n);return r.Z(this._edgeLabels,i)}removeEdge(t,e,n){var r=1===arguments.length?F(this._isDirected,arguments[0]):B(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],N(this._preds[e],t),N(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this}inEdges(t,e){var n=this._in[t];if(n){var r=Y.Z(n);return e?o.Z(r,(function(t){return t.v===e})):r}}outEdges(t,e){var n=this._out[t];if(n){var r=Y.Z(n);return e?o.Z(r,(function(t){return t.w===e})):r}}nodeEdges(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}}function O(t,e){t[e]?t[e]++:t[e]=1}function N(t,e){--t[e]||delete t[e]}function B(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var s=i;i=a,a=s}return i+"\x01"+a+"\x01"+(u.Z(r)?"\0":r)}function F(t,e){return B(t,e.v,e.w,e.name)}A.prototype._nodeCount=0,A.prototype._edgeCount=0},45625:(t,e,n)=>{"use strict";n.d(e,{k:()=>r.k});var r=n(52544)},39354:(t,e,n)=>{"use strict";n.d(e,{c:()=>o});var r=n(49360),i=n(48451);const a=function(t){return(0,i.Z)(t,4)};var s=n(43836);n(52544);function o(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:l(t),edges:c(t)};return r.Z(t.graph())||(e.value=a(t.graph())),e}function l(t){return s.Z(t.nodes(),(function(e){var n=t.node(e),i=t.parent(e),a={v:e};return r.Z(n)||(a.value=n),r.Z(i)||(a.parent=i),a}))}function c(t){return s.Z(t.edges(),(function(e){var n=t.edge(e),i={v:e.v,w:e.w};return r.Z(e.name)||(i.name=e.name),r.Z(n)||(i.value=n),i}))}},91518:(t,e,n)=>{"use strict";n.d(e,{sY:()=>C});var r=n(59373),i=n(17452),a=n(3688),s=n(70870),o=n(70277),l=n(96225),c={normal:function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");l.bg(i,n[r+"Style"]),n[r+"Class"]&&i.attr("class",n[r+"Class"])},vee:function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");l.bg(i,n[r+"Style"]),n[r+"Class"]&&i.attr("class",n[r+"Class"])},undirected:function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");l.bg(i,n[r+"Style"]),n[r+"Class"]&&i.attr("class",n[r+"Class"])}};function u(t){c=t}var d=n(43349);function h(t,e,n){var r=e.label,i=t.append("g");"svg"===e.labelType?function(t,e){var n=t;n.node().appendChild(e.label),l.bg(n,e.labelStyle)}(i,e):"string"!=typeof r||"html"===e.labelType?(0,d.a)(i,e):function(t,e){for(var n=t.append("text"),r=function(t){for(var e,n="",r=!1,i=0;i<t.length;++i)e=t[i],r?(n+="n"===e?"\n":e,r=!1):"\\"===e?r=!0:n+=e;return n}(e.label).split("\n"),i=0;i<r.length;i++)n.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(r[i]);l.bg(n,e.labelStyle)}(i,e);var a,s=i.node().getBBox();switch(n){case"top":a=-e.height/2;break;case"bottom":a=e.height/2-s.height;break;default:a=-s.height/2}return i.attr("transform","translate("+-s.width/2+","+a+")"),i}var m=function(t,e){var n=e.nodes().filter((function(t){return l.bF(e,t)})),i=t.selectAll("g.cluster").data(n,(function(t){return t}));l.WR(i.exit(),e).style("opacity",0).remove();var a=i.enter().append("g").attr("class","cluster").attr("id",(function(t){return e.node(t).id})).style("opacity",0).each((function(t){var n=e.node(t),i=r.Ys(this);r.Ys(this).append("rect"),h(i.append("g").attr("class","label"),n,n.clusterLabelPos)}));return i=i.merge(a),(i=l.WR(i,e).style("opacity",1)).selectAll("rect").each((function(t){var n=e.node(t),i=r.Ys(this);l.bg(i,n.style)})),i};function _(t){m=t}let p=function(t,e){var n,a=t.selectAll("g.edgeLabel").data(e.edges(),(function(t){return l.O1(t)})).classed("update",!0);return a.exit().remove(),a.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(a=t.selectAll("g.edgeLabel")).each((function(t){var n=r.Ys(this);n.select(".label").remove();var a=e.edge(t),s=h(n,e.edge(t),0).classed("label",!0),o=s.node().getBBox();a.labelId&&s.attr("id",a.labelId),i.Z(a,"width")||(a.width=o.width),i.Z(a,"height")||(a.height=o.height)})),n=a.exit?a.exit():a.selectAll(null),l.WR(n,e).style("opacity",0).remove(),a};function f(t){p=t}var y=n(66749),g=n(74379);function b(t,e){return t.intersect(e)}var k=function(t,e,n){var i=t.selectAll("g.edgePath").data(e.edges(),(function(t){return l.O1(t)})).classed("update",!0),a=function(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);return n.append("path").attr("class","path").attr("d",(function(t){var n=e.edge(t),r=e.node(t.v).elem;return x(n,g.Z(n.points.length).map((function(){return e=(t=r).getBBox(),{x:(n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:n.f};var t,e,n})))})),n.append("defs"),n}(i,e);!function(t,e){var n=t.exit();l.WR(n,e).style("opacity",0).remove()}(i,e);var s=void 0!==i.merge?i.merge(a):i;return l.WR(s,e).style("opacity",1),s.each((function(t){var n=r.Ys(this),i=e.edge(t);i.elem=this,i.id&&n.attr("id",i.id),l.$p(n,i.class,(n.classed("update")?"update ":"")+"edgePath")})),s.selectAll("path.path").each((function(t){var n=e.edge(t);n.arrowheadId=y.Z("arrowhead");var i=r.Ys(this).attr("marker-end",(function(){return"url("+(t=location.href,e=n.arrowheadId,t.split("#")[0]+"#"+e+")");var t,e})).style("fill","none");l.WR(i,e).attr("d",(function(t){return function(t,e){var n=t.edge(e),r=t.node(e.v),i=t.node(e.w),a=n.points.slice(1,n.points.length-1);return a.unshift(b(r,a[0])),a.push(b(i,a[a.length-1])),x(n,a)}(e,t)})),l.bg(i,n.style)})),s.selectAll("defs *").remove(),s.selectAll("defs").each((function(t){var i=e.edge(t);(0,n[i.arrowhead])(r.Ys(this),i.arrowheadId,i,"arrowhead")})),s};function v(t){k=t}function x(t,e){var n=(r.jvg||r.YPS.line)().x((function(t){return t.x})).y((function(t){return t.y}));return(n.curve||n.interpolate)(t.curve),n(e)}var M=n(61666),L=function(t,e,n){var a,s=e.nodes().filter((function(t){return!l.bF(e,t)})),o=t.selectAll("g.node").data(s,(function(t){return t})).classed("update",!0);return o.exit().remove(),o.enter().append("g").attr("class","node").style("opacity",0),(o=t.selectAll("g.node")).each((function(t){var a=e.node(t),s=r.Ys(this);l.$p(s,a.class,(s.classed("update")?"update ":"")+"node"),s.select("g.label").remove();var o=s.append("g").attr("class","label"),c=h(o,a),u=n[a.shape],d=M.Z(c.node().getBBox(),"width","height");a.elem=this,a.id&&s.attr("id",a.id),a.labelId&&o.attr("id",a.labelId),i.Z(a,"width")&&(d.width=a.width),i.Z(a,"height")&&(d.height=a.height),d.width+=a.paddingLeft+a.paddingRight,d.height+=a.paddingTop+a.paddingBottom,o.attr("transform","translate("+(a.paddingLeft-a.paddingRight)/2+","+(a.paddingTop-a.paddingBottom)/2+")");var m=r.Ys(this);m.select(".label-container").remove();var _=u(m,d,a).classed("label-container",!0);l.bg(_,a.style);var p=_.node().getBBox();a.width=p.width,a.height=p.height})),a=o.exit?o.exit():o.selectAll(null),l.WR(a,e).style("opacity",0).remove(),o};function w(t){L=t}function T(t,e,n,r){var i=t.x,a=t.y,s=i-r.x,o=a-r.y,l=Math.sqrt(e*e*o*o+n*n*s*s),c=Math.abs(e*n*s/l);r.x<i&&(c=-c);var u=Math.abs(e*n*o/l);return r.y<a&&(u=-u),{x:i+c,y:a+u}}var S=n(23352),D=n(22930),Y={rect:function(t,e,n){var r=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return(0,D.q)(n,t)},r},ellipse:function(t,e,n){var r=e.width/2,i=e.height/2,a=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",i);return n.intersect=function(t){return T(n,r,i,t)},a},circle:function(t,e,n){var r=Math.max(e.width,e.height)/2,i=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return n.intersect=function(t){return function(t,e,n){return T(t,e,e,n)}(n,r,t)},i},diamond:function(t,e,n){var r=e.width*Math.SQRT2/2,i=e.height*Math.SQRT2/2,a=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],s=t.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" "));return n.intersect=function(t){return(0,S.A)(n,a,t)},s}};function E(t){Y=t}function C(){var t=function(t,e){!function(t){t.nodes().forEach((function(e){var n=t.node(e);i.Z(n,"label")||t.children(e).length||(n.label=e),i.Z(n,"paddingX")&&a.Z(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),i.Z(n,"paddingY")&&a.Z(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),i.Z(n,"padding")&&a.Z(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),a.Z(n,A),s.Z(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),i.Z(n,"width")&&(n._prevWidth=n.width),i.Z(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);i.Z(n,"label")||(n.label=""),a.Z(n,O)}))}(e);var n=N(t,"output"),u=N(n,"clusters"),d=N(n,"edgePaths"),h=p(N(n,"edgeLabels"),e),_=L(N(n,"nodes"),e,Y);(0,o.bK)(e),function(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter((function(){return!r.Ys(this).classed("update")})).attr("transform",n),l.WR(t,e).style("opacity",1).attr("transform",n)}(_,e),function(t,e){function n(t){var n=e.edge(t);return i.Z(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter((function(){return!r.Ys(this).classed("update")})).attr("transform",n),l.WR(t,e).style("opacity",1).attr("transform",n)}(h,e),k(d,e,c),function(t,e){var n=t.filter((function(){return!r.Ys(this).classed("update")}));function i(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}n.attr("transform",i),l.WR(t,e).style("opacity",1).attr("transform",i),l.WR(n.selectAll("rect"),e).attr("width",(function(t){return e.node(t).width})).attr("height",(function(t){return e.node(t).height})).attr("x",(function(t){return-e.node(t).width/2})).attr("y",(function(t){return-e.node(t).height/2}))}(m(u,e),e),function(t){s.Z(t.nodes(),(function(e){var n=t.node(e);i.Z(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,i.Z(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(e)};return t.createNodes=function(e){return arguments.length?(w(e),t):L},t.createClusters=function(e){return arguments.length?(_(e),t):m},t.createEdgeLabels=function(e){return arguments.length?(f(e),t):p},t.createEdgePaths=function(e){return arguments.length?(v(e),t):k},t.shapes=function(e){return arguments.length?(E(e),t):Y},t.arrows=function(e){return arguments.length?(u(e),t):c},t}var A={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},O={arrowhead:"normal",curve:r.c_6};function N(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}n(45625)},21883:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(61691),i=n(82142);const a=class{constructor(){this.type=i.w.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=i.w.ALL}is(t){return this.type===t}};const s=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=i.w.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:n,l:i}=t;void 0===e&&(t.h=r.Z.channel.rgb2hsl(t,"h")),void 0===n&&(t.s=r.Z.channel.rgb2hsl(t,"s")),void 0===i&&(t.l=r.Z.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:n,b:i}=t;void 0===e&&(t.r=r.Z.channel.hsl2rgb(t,"r")),void 0===n&&(t.g=r.Z.channel.hsl2rgb(t,"g")),void 0===i&&(t.b=r.Z.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(i.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(i.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(i.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(i.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(i.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(i.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(i.w.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(i.w.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(i.w.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(i.w.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(i.w.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(i.w.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},71610:(t,e,n)=>{"use strict";n.d(e,{Z:()=>p});var r=n(21883),i=n(82142);const a={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(a.re);if(!e)return;const n=e[1],i=parseInt(n,16),s=n.length,o=s%4==0,l=s>4,c=l?1:17,u=l?8:4,d=o?0:-1,h=l?255:15;return r.Z.set({r:(i>>u*(d+3)&h)*c,g:(i>>u*(d+2)&h)*c,b:(i>>u*(d+1)&h)*c,a:o?(i&h)*c/255:1},t)},stringify:t=>{const{r:e,g:n,b:r,a:a}=t;return a<1?`#${i.Q[Math.round(e)]}${i.Q[Math.round(n)]}${i.Q[Math.round(r)]}${i.Q[Math.round(255*a)]}`:`#${i.Q[Math.round(e)]}${i.Q[Math.round(n)]}${i.Q[Math.round(r)]}`}},s=a;var o=n(61691);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,n]=e;switch(n){case"grad":return o.Z.channel.clamp.h(.9*parseFloat(t));case"rad":return o.Z.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return o.Z.channel.clamp.h(360*parseFloat(t))}}return o.Z.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const n=t.match(l.re);if(!n)return;const[,i,a,s,c,u]=n;return r.Z.set({h:l._hue2deg(i),s:o.Z.channel.clamp.s(parseFloat(a)),l:o.Z.channel.clamp.l(parseFloat(s)),a:c?o.Z.channel.clamp.a(u?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{h:e,s:n,l:r,a:i}=t;return i<1?`hsla(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}%, ${o.Z.lang.round(r)}%, ${i})`:`hsl(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}%, ${o.Z.lang.round(r)}%)`}},c=l,u={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=u.colors[t];if(e)return s.parse(e)},stringify:t=>{const e=s.stringify(t);for(const n in u.colors)if(u.colors[n]===e)return n}},d=u,h={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 n=t.match(h.re);if(!n)return;const[,i,a,s,l,c,u,d,m]=n;return r.Z.set({r:o.Z.channel.clamp.r(a?2.55*parseFloat(i):parseFloat(i)),g:o.Z.channel.clamp.g(l?2.55*parseFloat(s):parseFloat(s)),b:o.Z.channel.clamp.b(u?2.55*parseFloat(c):parseFloat(c)),a:d?o.Z.channel.clamp.a(m?parseFloat(d)/100:parseFloat(d)):1},t)},stringify:t=>{const{r:e,g:n,b:r,a:i}=t;return i<1?`rgba(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}, ${o.Z.lang.round(r)}, ${o.Z.lang.round(i)})`:`rgb(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}, ${o.Z.lang.round(r)})`}},m=h,_={format:{keyword:u,hex:s,rgb:h,rgba:h,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=s.parse(t)||m.parse(t)||c.parse(t)||d.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(i.w.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?m.stringify(t):s.stringify(t)},p=_},82142:(t,e,n)=>{"use strict";n.d(e,{Q:()=>i,w:()=>a});var r=n(61691);const i={};for(let s=0;s<=255;s++)i[s]=r.Z.unit.dec2hex(s);const a={ALL:0,RGB:1,HSL:2}},26174:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(61691),i=n(71610);const a=(t,e,n)=>{const a=i.Z.parse(t),s=a[e],o=r.Z.channel.clamp[e](s+n);return s!==o&&(a[e]=o),i.Z.stringify(a)}},7201:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(26174);const i=(t,e)=>(0,r.Z)(t,"l",-e)},12281:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(26174);const i=(t,e)=>(0,r.Z)(t,"l",e)},61691:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});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,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t),hsl2rgb:({h:t,s:e,l:n},i)=>{if(!e)return 2.55*n;t/=360,e/=100;const a=(n/=100)<.5?n*(1+e):n+e-n*e,s=2*n-a;switch(i){case"r":return 255*r.hue2rgb(s,a,t+1/3);case"g":return 255*r.hue2rgb(s,a,t);case"b":return 255*r.hue2rgb(s,a,t-1/3)}},rgb2hsl:({r:t,g:e,b:n},r)=>{t/=255,e/=255,n/=255;const i=Math.max(t,e,n),a=Math.min(t,e,n),s=(i+a)/2;if("l"===r)return 100*s;if(i===a)return 0;const o=i-a;if("s"===r)return 100*(s>.5?o/(2-i-a):o/(i+a));switch(i){case t:return 60*((e-n)/o+(e<n?6:0));case e:return 60*((n-t)/o+2);case n:return 60*((t-e)/o+4);default:return-1}}},i={channel:r,lang:{clamp:(t,e,n)=>e>n?Math.min(e,Math.max(n,t)):Math.min(n,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}`}}}},67308:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});const r=function(){this.__data__=[],this.size=0};var i=n(79651);const a=function(t,e){for(var n=t.length;n--;)if((0,i.Z)(t[n][0],e))return n;return-1};var s=Array.prototype.splice;const o=function(t){var e=this.__data__,n=a(e,t);return!(n<0)&&(n==e.length-1?e.pop():s.call(e,n,1),--this.size,!0)};const l=function(t){var e=this.__data__,n=a(e,t);return n<0?void 0:e[n][1]};const c=function(t){return a(this.__data__,t)>-1};const u=function(t,e){var n=this.__data__,r=a(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this};function d(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}d.prototype.clear=r,d.prototype.delete=o,d.prototype.get=l,d.prototype.has=c,d.prototype.set=u;const h=d},86183:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(62508),i=n(66092);const a=(0,r.Z)(i.Z,"Map")},37834:(t,e,n)=>{"use strict";n.d(e,{Z:()=>M});const r=(0,n(62508).Z)(Object,"create");const i=function(){this.__data__=r?r(null):{},this.size=0};const a=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var s=Object.prototype.hasOwnProperty;const o=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return s.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 u=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this};function d(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}d.prototype.clear=i,d.prototype.delete=a,d.prototype.get=o,d.prototype.has=c,d.prototype.set=u;const h=d;var m=n(67308),_=n(86183);const p=function(){this.size=0,this.__data__={hash:new h,map:new(_.Z||m.Z),string:new h}};const f=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 n=t.__data__;return f(e)?n["string"==typeof e?"string":"hash"]:n.map};const g=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 k=function(t){return y(this,t).has(t)};const v=function(t,e){var n=y(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this};function x(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}x.prototype.clear=p,x.prototype.delete=g,x.prototype.get=b,x.prototype.has=k,x.prototype.set=v;const M=x},93203:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(62508),i=n(66092);const a=(0,r.Z)(i.Z,"Set")},63001:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(37834);const i=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this};const a=function(t){return this.__data__.has(t)};function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r.Z;++e<n;)this.add(t[e])}s.prototype.add=s.prototype.push=i,s.prototype.has=a;const o=s},31667:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(67308);const i=function(){this.__data__=new r.Z,this.size=0};const a=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n};const s=function(t){return this.__data__.get(t)};const o=function(t){return this.__data__.has(t)};var l=n(86183),c=n(37834);const u=function(t,e){var n=this.__data__;if(n instanceof r.Z){var i=n.__data__;if(!l.Z||i.length<199)return i.push([t,e]),this.size=++n.size,this;n=this.__data__=new c.Z(i)}return n.set(t,e),this.size=n.size,this};function d(t){var e=this.__data__=new r.Z(t);this.size=e.size}d.prototype.clear=i,d.prototype.delete=a,d.prototype.get=s,d.prototype.has=o,d.prototype.set=u;const h=d},17685:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=n(66092).Z.Symbol},84073:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=n(66092).Z.Uint8Array},76579:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},68774:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,a=[];++n<r;){var s=t[n];e(s,n,t)&&(a[i++]=s)}return a}},87668:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});const r=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r};var i=n(29169),a=n(27771),s=n(77008),o=n(56009),l=n(18843),c=Object.prototype.hasOwnProperty;const u=function(t,e){var n=(0,a.Z)(t),u=!n&&(0,i.Z)(t),d=!n&&!u&&(0,s.Z)(t),h=!n&&!u&&!d&&(0,l.Z)(t),m=n||u||d||h,_=m?r(t.length,String):[],p=_.length;for(var f in t)!e&&!c.call(t,f)||m&&("length"==f||d&&("offset"==f||"parent"==f)||h&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||(0,o.Z)(f,p))||_.push(f);return _}},74073:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},58694:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},72954:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(74752),i=n(79651),a=Object.prototype.hasOwnProperty;const s=function(t,e,n){var s=t[e];a.call(t,e)&&(0,i.Z)(s,n)&&(void 0!==n||e in t)||(0,r.Z)(t,e,n)}},74752:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(77904);const i=function(t,e,n){"__proto__"==e&&r.Z?(0,r.Z)(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},48451:(t,e,n)=>{"use strict";n.d(e,{Z:()=>Q});var r=n(31667),i=n(76579),a=n(72954),s=n(31899),o=n(17179);const l=function(t,e){return t&&(0,s.Z)(e,(0,o.Z)(e),t)};var c=n(32957);const u=function(t,e){return t&&(0,s.Z)(e,(0,c.Z)(e),t)};var d=n(91050),h=n(87215),m=n(95695);const _=function(t,e){return(0,s.Z)(t,(0,m.Z)(t),e)};var p=n(58694),f=n(12513),y=n(60532);const g=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)(0,p.Z)(e,(0,m.Z)(t)),t=(0,f.Z)(t);return e}:y.Z;const b=function(t,e){return(0,s.Z)(t,g(t),e)};var k=n(1808),v=n(63327);const x=function(t){return(0,v.Z)(t,c.Z,g)};var M=n(83970),L=Object.prototype.hasOwnProperty;const w=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&L.call(t,"index")&&(n.index=t.index,n.input=t.input),n};var T=n(41884);const S=function(t,e){var n=e?(0,T.Z)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)};var D=/\w*$/;const Y=function(t){var e=new t.constructor(t.source,D.exec(t));return e.lastIndex=t.lastIndex,e};var E=n(17685),C=E.Z?E.Z.prototype:void 0,A=C?C.valueOf:void 0;const O=function(t){return A?Object(A.call(t)):{}};var N=n(12701);const B=function(t,e,n){var r=t.constructor;switch(e){case"[object ArrayBuffer]":return(0,T.Z)(t);case"[object Boolean]":case"[object Date]":return new r(+t);case"[object DataView]":return S(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,N.Z)(t,n);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(t);case"[object RegExp]":return Y(t);case"[object Symbol]":return O(t)}};var F=n(73658),I=n(27771),P=n(77008),j=n(18533);const R=function(t){return(0,j.Z)(t)&&"[object Map]"==(0,M.Z)(t)};var H=n(21162),$=n(98351),Z=$.Z&&$.Z.isMap;const W=Z?(0,H.Z)(Z):R;var z=n(77226);const U=function(t){return(0,j.Z)(t)&&"[object Set]"==(0,M.Z)(t)};var q=$.Z&&$.Z.isSet;const V=q?(0,H.Z)(q):U;var G="[object Arguments]",J="[object Function]",X="[object Object]",K={};K[G]=K["[object Array]"]=K["[object ArrayBuffer]"]=K["[object DataView]"]=K["[object Boolean]"]=K["[object Date]"]=K["[object Float32Array]"]=K["[object Float64Array]"]=K["[object Int8Array]"]=K["[object Int16Array]"]=K["[object Int32Array]"]=K["[object Map]"]=K["[object Number]"]=K[X]=K["[object RegExp]"]=K["[object Set]"]=K["[object String]"]=K["[object Symbol]"]=K["[object Uint8Array]"]=K["[object Uint8ClampedArray]"]=K["[object Uint16Array]"]=K["[object Uint32Array]"]=!0,K["[object Error]"]=K[J]=K["[object WeakMap]"]=!1;const Q=function t(e,n,s,m,p,f){var y,g=1&n,v=2&n,L=4&n;if(s&&(y=p?s(e,m,p,f):s(e)),void 0!==y)return y;if(!(0,z.Z)(e))return e;var T=(0,I.Z)(e);if(T){if(y=w(e),!g)return(0,h.Z)(e,y)}else{var S=(0,M.Z)(e),D=S==J||"[object GeneratorFunction]"==S;if((0,P.Z)(e))return(0,d.Z)(e,g);if(S==X||S==G||D&&!p){if(y=v||D?{}:(0,F.Z)(e),!g)return v?b(e,u(y,e)):_(e,l(y,e))}else{if(!K[S])return p?e:{};y=B(e,S,g)}}f||(f=new r.Z);var Y=f.get(e);if(Y)return Y;f.set(e,y),V(e)?e.forEach((function(r){y.add(t(r,n,s,r,e,f))})):W(e)&&e.forEach((function(r,i){y.set(i,t(r,n,s,i,e,f))}));var E=L?v?x:k.Z:v?c.Z:o.Z,C=T?void 0:E(e);return(0,i.Z)(C||e,(function(r,i){C&&(r=e[i=r]),(0,a.Z)(y,i,t(r,n,s,i,e,f))})),y}},49811:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2693),i=n(50585);const a=function(t,e){return function(n,r){if(null==n)return n;if(!(0,i.Z)(n))return t(n,r);for(var a=n.length,s=e?a:-1,o=Object(n);(e?s--:++s<a)&&!1!==r(o[s],s,o););return n}}(r.Z)},21692:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e,n,r){for(var i=t.length,a=n+(r?1:-1);r?a--:++a<i;)if(e(t[a],a,t))return a;return-1}},10626:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(58694),i=n(17685),a=n(29169),s=n(27771),o=i.Z?i.Z.isConcatSpreadable:void 0;const l=function(t){return(0,s.Z)(t)||(0,a.Z)(t)||!!(o&&t&&t[o])};const c=function t(e,n,i,a,s){var o=-1,c=e.length;for(i||(i=l),s||(s=[]);++o<c;){var u=e[o];n>0&&i(u)?n>1?t(u,n-1,i,a,s):(0,r.Z)(s,u):a||(s[s.length]=u)}return s}},61395:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return function(e,n,r){for(var i=-1,a=Object(e),s=r(e),o=s.length;o--;){var l=s[t?o:++i];if(!1===n(a[l],l,a))break}return e}}()},2693:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(61395),i=n(17179);const a=function(t,e){return t&&(0,r.Z)(t,e,i.Z)}},13317:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(22823),i=n(62281);const a=function(t,e){for(var n=0,a=(e=(0,r.Z)(e,t)).length;null!=t&&n<a;)t=t[(0,i.Z)(e[n++])];return n&&n==a?t:void 0}},63327:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(58694),i=n(27771);const a=function(t,e,n){var a=e(t);return(0,i.Z)(t)?a:(0,r.Z)(a,n(t))}},93589:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(17685),i=Object.prototype,a=i.hasOwnProperty,s=i.toString,o=r.Z?r.Z.toStringTag:void 0;const l=function(t){var e=a.call(t,o),n=t[o];try{t[o]=void 0;var r=!0}catch(l){}var i=s.call(t);return r&&(e?t[o]=n:delete t[o]),i};var c=Object.prototype.toString;const u=function(t){return c.call(t)};var d=r.Z?r.Z.toStringTag:void 0;const h=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":d&&d in Object(t)?l(t):u(t)}},74765:(t,e,n)=>{"use strict";n.d(e,{Z:()=>q});var r=n(31667),i=n(63001);const a=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1};var s=n(59548);const o=function(t,e,n,r,o,l){var c=1&n,u=t.length,d=e.length;if(u!=d&&!(c&&d>u))return!1;var h=l.get(t),m=l.get(e);if(h&&m)return h==e&&m==t;var _=-1,p=!0,f=2&n?new i.Z:void 0;for(l.set(t,e),l.set(e,t);++_<u;){var y=t[_],g=e[_];if(r)var b=c?r(g,y,_,e,t,l):r(y,g,_,t,e,l);if(void 0!==b){if(b)continue;p=!1;break}if(f){if(!a(e,(function(t,e){if(!(0,s.Z)(f,e)&&(y===t||o(y,t,n,r,l)))return f.push(e)}))){p=!1;break}}else if(y!==g&&!o(y,g,n,r,l)){p=!1;break}}return l.delete(t),l.delete(e),p};var l=n(17685),c=n(84073),u=n(79651);const d=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n};var h=n(6545),m=l.Z?l.Z.prototype:void 0,_=m?m.valueOf:void 0;const p=function(t,e,n,r,i,a,s){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!a(new c.Z(t),new c.Z(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return(0,u.Z)(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var l=d;case"[object Set]":var m=1&r;if(l||(l=h.Z),t.size!=e.size&&!m)return!1;var p=s.get(t);if(p)return p==e;r|=2,s.set(t,e);var f=o(l(t),l(e),r,i,a,s);return s.delete(t),f;case"[object Symbol]":if(_)return _.call(t)==_.call(e)}return!1};var f=n(1808),y=Object.prototype.hasOwnProperty;const g=function(t,e,n,r,i,a){var s=1&n,o=(0,f.Z)(t),l=o.length;if(l!=(0,f.Z)(e).length&&!s)return!1;for(var c=l;c--;){var u=o[c];if(!(s?u in e:y.call(e,u)))return!1}var d=a.get(t),h=a.get(e);if(d&&h)return d==e&&h==t;var m=!0;a.set(t,e),a.set(e,t);for(var _=s;++c<l;){var p=t[u=o[c]],g=e[u];if(r)var b=s?r(g,p,u,e,t,a):r(p,g,u,t,e,a);if(!(void 0===b?p===g||i(p,g,n,r,a):b)){m=!1;break}_||(_="constructor"==u)}if(m&&!_){var k=t.constructor,v=e.constructor;k==v||!("constructor"in t)||!("constructor"in e)||"function"==typeof k&&k instanceof k&&"function"==typeof v&&v instanceof v||(m=!1)}return a.delete(t),a.delete(e),m};var b=n(83970),k=n(27771),v=n(77008),x=n(18843),M="[object Arguments]",L="[object Array]",w="[object Object]",T=Object.prototype.hasOwnProperty;const S=function(t,e,n,i,a,s){var l=(0,k.Z)(t),c=(0,k.Z)(e),u=l?L:(0,b.Z)(t),d=c?L:(0,b.Z)(e),h=(u=u==M?w:u)==w,m=(d=d==M?w:d)==w,_=u==d;if(_&&(0,v.Z)(t)){if(!(0,v.Z)(e))return!1;l=!0,h=!1}if(_&&!h)return s||(s=new r.Z),l||(0,x.Z)(t)?o(t,e,n,i,a,s):p(t,e,u,n,i,a,s);if(!(1&n)){var f=h&&T.call(t,"__wrapped__"),y=m&&T.call(e,"__wrapped__");if(f||y){var S=f?t.value():t,D=y?e.value():e;return s||(s=new r.Z),a(S,D,n,i,s)}}return!!_&&(s||(s=new r.Z),g(t,e,n,i,a,s))};var D=n(18533);const Y=function t(e,n,r,i,a){return e===n||(null==e||null==n||!(0,D.Z)(e)&&!(0,D.Z)(n)?e!=e&&n!=n:S(e,n,r,i,t,a))};const E=function(t,e,n,i){var a=n.length,s=a,o=!i;if(null==t)return!s;for(t=Object(t);a--;){var l=n[a];if(o&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++a<s;){var c=(l=n[a])[0],u=t[c],d=l[1];if(o&&l[2]){if(void 0===u&&!(c in t))return!1}else{var h=new r.Z;if(i)var m=i(u,d,c,t,e,h);if(!(void 0===m?Y(d,u,3,i,h):m))return!1}}return!0};var C=n(77226);const A=function(t){return t==t&&!(0,C.Z)(t)};var O=n(17179);const N=function(t){for(var e=(0,O.Z)(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,A(i)]}return e};const B=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}};const F=function(t){var e=N(t);return 1==e.length&&e[0][2]?B(e[0][0],e[0][1]):function(n){return n===t||E(n,t,e)}};var I=n(13317);const P=function(t,e,n){var r=null==t?void 0:(0,I.Z)(t,e);return void 0===r?n:r};var j=n(75487),R=n(99365),H=n(62281);const $=function(t,e){return(0,R.Z)(t)&&A(e)?B((0,H.Z)(t),e):function(n){var r=P(n,t);return void 0===r&&r===e?(0,j.Z)(n,t):Y(e,r,3)}};var Z=n(69203),W=n(54193);const z=function(t){return function(e){return(0,I.Z)(e,t)}};const U=function(t){return(0,R.Z)(t)?(0,W.Z)((0,H.Z)(t)):z(t)};const q=function(t){return"function"==typeof t?t:null==t?Z.Z:"object"==typeof t?(0,k.Z)(t)?$(t[0],t[1]):F(t):U(t)}},39473:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(72764);const i=(0,n(1851).Z)(Object.keys,Object);var a=Object.prototype.hasOwnProperty;const s=function(t){if(!(0,r.Z)(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},21018:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(49811),i=n(50585);const a=function(t,e){var n=-1,a=(0,i.Z)(t)?Array(t.length):[];return(0,r.Z)(t,(function(t,r,i){a[++n]=e(t,r,i)})),a}},54193:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return function(e){return null==e?void 0:e[t]}}},69581:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(69203),i=n(81211),a=n(27227);const s=function(t,e){return(0,a.Z)((0,i.Z)(t,e,r.Z),t+"")}},21162:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return function(e){return t(e)}}},59548:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){return t.has(e)}},68882:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(69203);const i=function(t){return"function"==typeof t?t:r.Z}},22823:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(27771),i=n(99365),a=n(42454);var s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g;const l=function(t){var e=(0,a.Z)(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(s,(function(t,n,r,i){e.push(r?i.replace(o,"$1"):n||t)})),e}));var c=n(50751);const u=function(t,e){return(0,r.Z)(t)?t:(0,i.Z)(t,e)?[t]:l((0,c.Z)(t))}},41884:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(84073);const i=function(t){var e=new t.constructor(t.byteLength);return new r.Z(e).set(new r.Z(t)),e}},91050:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(66092),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===i?r.Z.Buffer:void 0,o=s?s.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var n=t.length,r=o?o(n):new t.constructor(n);return t.copy(r),r}},12701:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(41884);const i=function(t,e){var n=e?(0,r.Z)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},87215:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},31899:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(72954),i=n(74752);const a=function(t,e,n,a){var s=!n;n||(n={});for(var o=-1,l=e.length;++o<l;){var c=e[o],u=a?a(n[c],t[c],c,n,t):void 0;void 0===u&&(u=t[c]),s?(0,i.Z)(n,c,u):(0,r.Z)(n,c,u)}return n}},77904:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(62508);const i=function(){try{var t=(0,r.Z)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},13413:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},1808:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(63327),i=n(95695),a=n(17179);const s=function(t){return(0,r.Z)(t,a.Z,i.Z)}},62508:(t,e,n)=>{"use strict";n.d(e,{Z:()=>g});var r=n(73234);const i=n(66092).Z["__core-js_shared__"];var a,s=(a=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";const o=function(t){return!!s&&s in t};var l=n(77226),c=n(90019),u=/^\[object .+?Constructor\]$/,d=Function.prototype,h=Object.prototype,m=d.toString,_=h.hasOwnProperty,p=RegExp("^"+m.call(_).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const f=function(t){return!(!(0,l.Z)(t)||o(t))&&((0,r.Z)(t)?p:u).test((0,c.Z)(t))};const y=function(t,e){return null==t?void 0:t[e]};const g=function(t,e){var n=y(t,e);return f(n)?n:void 0}},12513:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=(0,n(1851).Z)(Object.getPrototypeOf,Object)},95695:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(68774),i=n(60532),a=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;const o=s?function(t){return null==t?[]:(t=Object(t),(0,r.Z)(s(t),(function(e){return a.call(t,e)})))}:i.Z},83970:(t,e,n)=>{"use strict";n.d(e,{Z:()=>M});var r=n(62508),i=n(66092);const a=(0,r.Z)(i.Z,"DataView");var s=n(86183);const o=(0,r.Z)(i.Z,"Promise");var l=n(93203);const c=(0,r.Z)(i.Z,"WeakMap");var u=n(93589),d=n(90019),h="[object Map]",m="[object Promise]",_="[object Set]",p="[object WeakMap]",f="[object DataView]",y=(0,d.Z)(a),g=(0,d.Z)(s.Z),b=(0,d.Z)(o),k=(0,d.Z)(l.Z),v=(0,d.Z)(c),x=u.Z;(a&&x(new a(new ArrayBuffer(1)))!=f||s.Z&&x(new s.Z)!=h||o&&x(o.resolve())!=m||l.Z&&x(new l.Z)!=_||c&&x(new c)!=p)&&(x=function(t){var e=(0,u.Z)(t),n="[object Object]"==e?t.constructor:void 0,r=n?(0,d.Z)(n):"";if(r)switch(r){case y:return f;case g:return h;case b:return m;case k:return _;case v:return p}return e});const M=x},16174:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(22823),i=n(29169),a=n(27771),s=n(56009),o=n(1656),l=n(62281);const c=function(t,e,n){for(var c=-1,u=(e=(0,r.Z)(e,t)).length,d=!1;++c<u;){var h=(0,l.Z)(e[c]);if(!(d=null!=t&&n(t,h)))break;t=t[h]}return d||++c!=u?d:!!(u=null==t?0:t.length)&&(0,o.Z)(u)&&(0,s.Z)(h,u)&&((0,a.Z)(t)||(0,i.Z)(t))}},73658:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(77226),i=Object.create;const a=function(){function t(){}return function(e){if(!(0,r.Z)(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();var s=n(12513),o=n(72764);const l=function(t){return"function"!=typeof t.constructor||(0,o.Z)(t)?{}:a((0,s.Z)(t))}},56009:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=/^(?:0|[1-9]\d*)$/;const i=function(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&r.test(t))&&t>-1&&t%1==0&&t<e}},50439:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(79651),i=n(50585),a=n(56009),s=n(77226);const o=function(t,e,n){if(!(0,s.Z)(n))return!1;var o=typeof e;return!!("number"==o?(0,i.Z)(n)&&(0,a.Z)(e,n.length):"string"==o&&e in n)&&(0,r.Z)(n[e],t)}},99365:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(27771),i=n(72714),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;const o=function(t,e){if((0,r.Z)(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!(0,i.Z)(t))||(s.test(t)||!a.test(t)||null!=e&&t in Object(e))}},72764:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=Object.prototype;const i=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},98351:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(13413),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===i&&r.Z.process;const o=function(){try{var t=a&&a.require&&a.require("util").types;return t||s&&s.binding&&s.binding("util")}catch(e){}}()},1851:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){return function(n){return t(e(n))}}},81211:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const r=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)};var i=Math.max;const a=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var a=arguments,s=-1,o=i(a.length-e,0),l=Array(o);++s<o;)l[s]=a[e+s];s=-1;for(var c=Array(e+1);++s<e;)c[s]=a[s];return c[e]=n(l),r(t,this,c)}}},66092:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(13413),i="object"==typeof self&&self&&self.Object===Object&&self;const a=r.Z||i||Function("return this")()},6545:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},27227:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(62002),i=n(77904),a=n(69203);const s=i.Z?function(t,e){return(0,i.Z)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.Z)(e),writable:!0})}:a.Z;var o=Date.now;const l=function(t){var e=0,n=0;return function(){var r=o(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(s)},62281:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(72714);const i=function(t){if("string"==typeof t||(0,r.Z)(t))return t;var e=t+"";return"0"==e&&1/t==-Infinity?"-0":e}},90019:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=Function.prototype.toString;const i=function(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},62002:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return function(){return t}}},3688:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(69581),i=n(79651),a=n(50439),s=n(32957),o=Object.prototype,l=o.hasOwnProperty;const c=(0,r.Z)((function(t,e){t=Object(t);var n=-1,r=e.length,c=r>2?e[2]:void 0;for(c&&(0,a.Z)(e[0],e[1],c)&&(r=1);++n<r;)for(var u=e[n],d=(0,s.Z)(u),h=-1,m=d.length;++h<m;){var _=d[h],p=t[_];(void 0===p||(0,i.Z)(p,o[_])&&!l.call(t,_))&&(t[_]=u[_])}return t}))},79651:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},13445:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(68774),i=n(49811);const a=function(t,e){var n=[];return(0,i.Z)(t,(function(t,r,i){e(t,r,i)&&n.push(t)})),n};var s=n(74765),o=n(27771);const l=function(t,e){return((0,o.Z)(t)?r.Z:a)(t,(0,s.Z)(e,3))}},27961:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(10626);const i=function(t){return(null==t?0:t.length)?(0,r.Z)(t,1):[]}},70870:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(76579),i=n(49811),a=n(68882),s=n(27771);const o=function(t,e){return((0,s.Z)(t)?r.Z:i.Z)(t,(0,a.Z)(e))}},17452:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=Object.prototype.hasOwnProperty;const i=function(t,e){return null!=t&&r.call(t,e)};var a=n(16174);const s=function(t,e){return null!=t&&(0,a.Z)(t,e,i)}},75487:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const r=function(t,e){return null!=t&&e in Object(t)};var i=n(16174);const a=function(t,e){return null!=t&&(0,i.Z)(t,e,r)}},69203:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return t}},29169:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(93589),i=n(18533);const a=function(t){return(0,i.Z)(t)&&"[object Arguments]"==(0,r.Z)(t)};var s=Object.prototype,o=s.hasOwnProperty,l=s.propertyIsEnumerable;const c=a(function(){return arguments}())?a:function(t){return(0,i.Z)(t)&&o.call(t,"callee")&&!l.call(t,"callee")}},27771:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=Array.isArray},50585:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(73234),i=n(1656);const a=function(t){return null!=t&&(0,i.Z)(t.length)&&!(0,r.Z)(t)}},836:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(50585),i=n(18533);const a=function(t){return(0,i.Z)(t)&&(0,r.Z)(t)}},77008:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(66092);const i=function(){return!1};var a="object"==typeof exports&&exports&&!exports.nodeType&&exports,s=a&&"object"==typeof module&&module&&!module.nodeType&&module,o=s&&s.exports===a?r.Z.Buffer:void 0;const l=(o?o.isBuffer:void 0)||i},79697:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(39473),i=n(83970),a=n(29169),s=n(27771),o=n(50585),l=n(77008),c=n(72764),u=n(18843),d=Object.prototype.hasOwnProperty;const h=function(t){if(null==t)return!0;if((0,o.Z)(t)&&((0,s.Z)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.Z)(t)||(0,u.Z)(t)||(0,a.Z)(t)))return!t.length;var e=(0,i.Z)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.Z)(t))return!(0,r.Z)(t).length;for(var n in t)if(d.call(t,n))return!1;return!0}},73234:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(93589),i=n(77226);const a=function(t){if(!(0,i.Z)(t))return!1;var e=(0,r.Z)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1656:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},77226:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},18533:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},37514:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var r=n(93589),i=n(12513),a=n(18533),s=Function.prototype,o=Object.prototype,l=s.toString,c=o.hasOwnProperty,u=l.call(Object);const d=function(t){if(!(0,a.Z)(t)||"[object Object]"!=(0,r.Z)(t))return!1;var e=(0,i.Z)(t);if(null===e)return!0;var n=c.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==u}},72714:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(93589),i=n(18533);const a=function(t){return"symbol"==typeof t||(0,i.Z)(t)&&"[object Symbol]"==(0,r.Z)(t)}},18843:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var r=n(93589),i=n(1656),a=n(18533),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1;const o=function(t){return(0,a.Z)(t)&&(0,i.Z)(t.length)&&!!s[(0,r.Z)(t)]};var l=n(21162),c=n(98351),u=c.Z&&c.Z.isTypedArray;const d=u?(0,l.Z)(u):o},49360:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return void 0===t}},17179:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(87668),i=n(39473),a=n(50585);const s=function(t){return(0,a.Z)(t)?(0,r.Z)(t):(0,i.Z)(t)}},32957:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(87668),i=n(77226),a=n(72764);const s=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e};var o=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,i.Z)(t))return s(t);var e=(0,a.Z)(t),n=[];for(var r in t)("constructor"!=r||!e&&o.call(t,r))&&n.push(r);return n};var c=n(50585);const u=function(t){return(0,c.Z)(t)?(0,r.Z)(t,!0):l(t)}},43836:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(74073),i=n(74765),a=n(21018),s=n(27771);const o=function(t,e){return((0,s.Z)(t)?r.Z:a.Z)(t,(0,i.Z)(e,3))}},42454:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(37834);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var s=t.apply(this,r);return n.cache=a.set(i,s)||a,s};return n.cache=new(i.Cache||r.Z),n}i.Cache=r.Z;const a=i},61666:(t,e,n)=>{"use strict";n.d(e,{Z:()=>f});var r=n(13317),i=n(72954),a=n(22823),s=n(56009),o=n(77226),l=n(62281);const c=function(t,e,n,r){if(!(0,o.Z)(t))return t;for(var c=-1,u=(e=(0,a.Z)(e,t)).length,d=u-1,h=t;null!=h&&++c<u;){var m=(0,l.Z)(e[c]),_=n;if("__proto__"===m||"constructor"===m||"prototype"===m)return t;if(c!=d){var p=h[m];void 0===(_=r?r(p,m,h):void 0)&&(_=(0,o.Z)(p)?p:(0,s.Z)(e[c+1])?[]:{})}(0,i.Z)(h,m,_),h=h[m]}return t};const u=function(t,e,n){for(var i=-1,s=e.length,o={};++i<s;){var l=e[i],u=(0,r.Z)(t,l);n(u,l)&&c(o,(0,a.Z)(l,t),u)}return o};var d=n(75487);const h=function(t,e){return u(t,e,(function(e,n){return(0,d.Z)(t,n)}))};var m=n(27961),_=n(81211),p=n(27227);const f=function(t){return(0,p.Z)((0,_.Z)(t,void 0,m.Z),t+"")}((function(t,e){return null==t?{}:h(t,e)}))},74379:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=Math.ceil,i=Math.max;const a=function(t,e,n,a){for(var s=-1,o=i(r((e-t)/(n||1)),0),l=Array(o);o--;)l[a?o:++s]=t,t+=n;return l};var s=n(50439),o=n(94099);const l=function(t){return function(e,n,r){return r&&"number"!=typeof r&&(0,s.Z)(e,n,r)&&(n=r=void 0),e=(0,o.Z)(e),void 0===n?(n=e,e=0):n=(0,o.Z)(n),r=void 0===r?e<n?1:-1:(0,o.Z)(r),a(e,n,r,t)}}()},92344:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});const r=function(t,e,n,r){var i=-1,a=null==t?0:t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n};var i=n(49811),a=n(74765);const s=function(t,e,n,r,i){return i(t,(function(t,i,a){n=r?(r=!1,t):e(n,t,i,a)})),n};var o=n(27771);const l=function(t,e,n){var l=(0,o.Z)(t)?r:s,c=arguments.length<3;return l(t,(0,a.Z)(e,4),n,c,i.Z)}},60532:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(){return[]}},94099:(t,e,n)=>{"use strict";n.d(e,{Z:()=>p});var r=/\s/;const i=function(t){for(var e=t.length;e--&&r.test(t.charAt(e)););return e};var a=/^\s+/;const s=function(t){return t?t.slice(0,i(t)+1).replace(a,""):t};var o=n(77226),l=n(72714),c=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,d=/^0o[0-7]+$/i,h=parseInt;const m=function(t){if("number"==typeof t)return t;if((0,l.Z)(t))return NaN;if((0,o.Z)(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=(0,o.Z)(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=s(t);var n=u.test(t);return n||d.test(t)?h(t.slice(2),n?2:8):c.test(t)?NaN:+t};var _=1/0;const p=function(t){return t?(t=m(t))===_||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},50751:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(17685),i=n(74073),a=n(27771),s=n(72714),o=r.Z?r.Z.prototype:void 0,l=o?o.toString:void 0;const c=function t(e){if("string"==typeof e)return e;if((0,a.Z)(e))return(0,i.Z)(e,t)+"";if((0,s.Z)(e))return l?l.call(e):"";var n=e+"";return"0"==n&&1/e==-Infinity?"-0":n};const u=function(t){return null==t?"":c(t)}},66749:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(50751),i=0;const a=function(t){var e=++i;return(0,r.Z)(t)+e}},34148:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(74073);const i=function(t,e){return(0,r.Z)(e,(function(e){return t[e]}))};var a=n(17179);const s=function(t){return null==t?[]:i(t,(0,a.Z)(t))}}}]); \ No newline at end of file diff --git a/docs/assets/js/239.1c1be196.js.LICENSE.txt b/docs/assets/js/239.1c1be196.js.LICENSE.txt new file mode 100644 index 000000000..6eb8857f4 --- /dev/null +++ b/docs/assets/js/239.1c1be196.js.LICENSE.txt @@ -0,0 +1,13 @@ +/*! + * Wait for document loaded before starting the execution + */ + +/*! @license DOMPurify 2.4.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.3/LICENSE */ + +/*! Check if previously processed */ + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ + +//! moment.js + +//! moment.js locale configuration diff --git a/docs/assets/js/24bf3011.c9743c08.js b/docs/assets/js/24bf3011.c9743c08.js new file mode 100644 index 000000000..bd7ff5011 --- /dev/null +++ b/docs/assets/js/24bf3011.c9743c08.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6882],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=n.createContext({}),u=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=u(e.components);return n.createElement(i.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=u(a),m=r,h=p["".concat(i,".").concat(m)]||p[m]||c[m]||o;return a?n.createElement(h,l(l({ref:t},d),{},{components:a})):n.createElement(h,l({ref:t},d))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=p;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,l[1]=s;for(var u=2;u<o;u++)l[u]=a[u];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}p.displayName="MDXCreateElement"},6067:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=a(87462),r=(a(67294),a(3905));const o={},l="Module Composer",s={unversionedId:"advanced/composer",id:"version-0.3.1/advanced/composer",title:"Module Composer",description:"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.",source:"@site/versioned_docs/version-0.3.1/advanced/01-composer.md",sourceDirName:"advanced",slug:"/advanced/composer",permalink:"/docs/0.3.1/advanced/composer",draft:!1,tags:[],version:"0.3.1",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced",permalink:"/docs/0.3.1/category/advanced"},next:{title:"Delegate",permalink:"/docs/0.3.1/advanced/delegate"}},i={},u=[{value:"Conceptual Overview",id:"conceptual-overview",level:2},{value:"Usage",id:"usage",level:2},{value:"Conclusion",id:"conclusion",level:2}],d={toc:u};function c(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"module-composer"},"Module Composer"),(0,r.kt)("p",null,"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples."),(0,r.kt)("h2",{id:"conceptual-overview"},"Conceptual Overview"),(0,r.kt)("p",null,"By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n value: Variable<u8>, // the default namespace would be "contract_value"\n module: Module\n}\n\n#[odra::module]\nstruct Module {\n secret: Variable<String> // the default namespace would be "contract_module_secret"\n}\n')),(0,r.kt)("p",null,"While this isolation often proves useful, there are scenarios where shared storage is beneficial. Here, the Module Composer comes in."),(0,r.kt)("p",null,"Additionally, the Module Composer shortens the storage key - a handy side effect of shared storage. "),(0,r.kt)("p",null,"For each module, Odra generates a corresponding Composer struct (e.g., ",(0,r.kt)("inlineCode",{parentName:"p"},"MyContractComposer")," for ",(0,r.kt)("inlineCode",{parentName:"p"},"MyContract")," module), which aids in manual module composition."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"By default, the #","[odra::module]"," macro generates an implementation of the odra::Instance trait, prefixing the storage key of child modules with the parent namespace. To disable this behavior, pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"skip_instance")," argument to the #","[odra::module]"," macro."),(0,r.kt)("p",null,"Let's write a simple code example. The example provided below introduces some additional complexity by featuring deeper module nesting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::{Instance, Variable, Composer};\n\n#[odra::module]\npub struct SharedStorage {\n pub value: Variable<String>\n}\n\n#[odra::module]\npub struct MyStorage {\n pub shared: SharedStorage,\n pub version: Variable<u8>\n}\n\n#[odra::module]\npub struct MoreStorage {\n pub my_storage: MyStorage,\n pub extra: Variable<u32>\n}\n\n#[odra::module(skip_instance)]\npub struct ComplexContract {\n pub shared: SharedStorage,\n pub more_storage: MoreStorage\n}\n\n#[odra::module]\nimpl ComplexContract {\n #[odra(init)]\n pub fn init(&mut self, version: u8, value: String, extra: u32) {\n self.more_storage.my_storage.version.set(version);\n self.shared.value.set(value);\n self.more_storage.extra.set(extra);\n }\n\n pub fn get_value(&self) -> String {\n self.shared.value.get_or_default()\n }\n\n pub fn get_value_via_storage(&self) -> String {\n self.more_storage.my_storage.shared.value.get_or_default()\n }\n\n pub fn get_extra_value(&self) -> u32 {\n self.more_storage.extra.get_or_default()\n }\n}\n\nimpl Instance for ComplexContract {\n fn instance(namespace: &str) -> Self {\n let value = Composer::new(namespace, "v").compose();\n let shared = SharedStorageComposer::new(namespace, "shared")\n .with_value(&value)\n .compose();\n let my_storage = MyStorageComposer::new(namespace, "my_storage")\n .with_shared(&shared)\n .compose();\n let more_storage = MoreStorageComposer::new(namespace, "more_storage")\n .with_my_storage(&my_storage)\n .compose();\n Self { shared, more_storage }\n }\n}\n\n#[cfg(test)]\nmod test {\n use crate::composer::ComplexContractDeployer;\n\n #[test]\n fn t() {\n let shared_value = "shared_value".to_string();\n let extra_value: u32 = 314;\n let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);\n\n assert_eq!(token.get_value(), shared_value);\n assert_eq!(token.get_value_via_storage(), shared_value);\n assert_eq!(token.get_extra_value(), extra_value);\n }\n}\n')),(0,r.kt)("p",null,"In this example, we've introduced a new module, ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", which nests ",(0,r.kt)("inlineCode",{parentName:"p"},"MyStorage")," and includes an extra value. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ComplexContract")," contains ",(0,r.kt)("inlineCode",{parentName:"p"},"SharedStorage")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels."),(0,r.kt)("p",null,"If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"On the contract level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_shared_value"),"."),(0,r.kt)("li",{parentName:"ol"},"On the ",(0,r.kt)("inlineCode",{parentName:"li"},"MyStorage")," module level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_more_storage_shared_value"),".")),(0,r.kt)("p",null,"This example showcases how you can effectively use the Module Composer feature to build intricate and efficient smart contracts."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"To customize the storage building block, you can use ",(0,r.kt)("inlineCode",{parentName:"p"},"Composer")," which API matches to modules composers API.")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"The Module Composer in Odra provides developers with a high level of flexibility and control over module behavior in their smart contracts. This guide, complete with a practical example, should give you a good understanding of the feature. Embrace the power of the Module Composer and unleash the full potential of your smart contracts!"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/26441f8e.edb7397b.js b/docs/assets/js/26441f8e.edb7397b.js new file mode 100644 index 000000000..8cb4dd2fa --- /dev/null +++ b/docs/assets/js/26441f8e.edb7397b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7742],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,c=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=l(n),g=a,f=d["".concat(c,".").concat(g)]||d[g]||p[g]||s;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,i=new Array(s);i[0]=d;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o.mdxType="string"==typeof e?e:a,i[1]=o;for(var l=2;l<s;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},43240:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const s={},i="Signatures",o={unversionedId:"advanced/signatures",id:"version-0.6.0/advanced/signatures",title:"Signatures",description:"As each backend can use a different scheme for generating key pairs,",source:"@site/versioned_docs/version-0.6.0/advanced/05-signatures.md",sourceDirName:"advanced",slug:"/advanced/signatures",permalink:"/docs/0.6.0/advanced/signatures",draft:!1,tags:[],version:"0.6.0",sidebarPosition:5,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Attributes",permalink:"/docs/0.6.0/advanced/attributes"},next:{title:"Backends",permalink:"/docs/0.6.0/category/backends"}},c={},l=[{value:"Signature verification",id:"signature-verification",level:2},{value:"Testing",id:"testing",level:2},{value:"ECRecover",id:"ecrecover",level:2}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"signatures"},"Signatures"),(0,a.kt)("p",null,"As each backend can use a different scheme for generating key pairs,\nOdra Framework provides a generic function for signature verification inside the contract context.\nThanks to this, you can write your code once, without worrying about underlying cryptography."),(0,a.kt)("h2",{id:"signature-verification"},"Signature verification"),(0,a.kt)("p",null,"Signature verification is conducted by a function in ",(0,a.kt)("inlineCode",{parentName:"p"},"contract_env"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn verify_signature(message: &Bytes, signature: &Bytes, public_key: &PublicKey) -> bool;\n")),(0,a.kt)("p",null,"Here's the simplest example of this function used in a contract:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},"#[odra::module]\nimpl SignatureVerifier {\n pub fn verify_signature(\n &self,\n message: &Bytes,\n signature: &Bytes,\n public_key: &PublicKey\n ) -> bool {\n contract_env::verify_signature(message, signature, public_key)\n }\n}\n")),(0,a.kt)("h2",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Besides the above function in the contract context, Odra provides corresponding functions in the ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn sign_message(message: &Bytes, address: &Address) -> Bytes;\n\npub fn public_key(address: &Address) -> PublicKey;\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"sign_message")," will return a signed message. The signing itself will be performed using a private key\nof an account behind the ",(0,a.kt)("inlineCode",{parentName:"p"},"address"),"."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"public_key")," returns the PublicKey of an ",(0,a.kt)("inlineCode",{parentName:"p"},"address")," account."),(0,a.kt)("p",null,"Thanks to those, you can write generic tests, that will work with all backends, despite differences\nin signature schemes they use."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},'#[test]\nfn signature_verification_works() {\n let message = "Message to be signed";\n let message_bytes = &Bytes::from(message.as_bytes().to_vec());\n let account = test_env::get_account(0);\n\n let signature = test_env::sign_message(message_bytes, &account);\n\n let public_key = test_env::public_key(&account);\n\n let signature_verifier = SignatureVerifierDeployer::default();\n assert!(signature_verifier.verify_signature(message_bytes, &signature, &public_key));\n}\n')),(0,a.kt)("p",null,"If you want, you can also test signatures that were created outside Odra.\nHowever, you will need to prepare separate tests for each backend:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},'/// The following test checks that the signature verification works with the signature produced\n/// by the casper wallet.\n#[test]\n#[cfg(feature = "casper")]\nfn verify_signature_casper_wallet() {\n use odra::casper::casper_types::bytesrepr::FromBytes;\n // Casper Wallet for the message "Ahoj przygodo!" signed using SECP256K1 key\n // produces the following signature:\n // 1e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa\n // Casper Wallet adds "Casper Message:\\n" prefix to the message:\n let message = "Casper Message:\\nAhoj przygodo!";\n let message_bytes = &Bytes::from(message.as_bytes().to_vec());\n\n // Depending on the type of the key, we need to prefix the signature with a tag:\n // 0x01 for ED25519\n // 0x02 for SECP256K1\n let signature_hex = "021e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa";\n let signature: [u8; 65] = hex::decode(signature_hex).unwrap().try_into().unwrap();\n let signature_bytes = &Bytes::from(signature.to_vec());\n\n // Similar to the above, the public key is tagged:\n let public_key_hex = "02036d9b880e44254afaf34330e57703a63aec53b5918d4470059b67a4a906350105";\n let public_key_decoded = hex::decode(public_key_hex).unwrap();\n let (public_key, _) = odra::casper::casper_types::crypto::PublicKey::from_bytes(\n public_key_decoded.as_slice()\n )\n .unwrap();\n\n let signature_verifier = SignatureVerifierDeployer::default();\n assert!(signature_verifier.verify_signature(message_bytes, signature_bytes, &public_key));\n}\n')),(0,a.kt)("h2",{id:"ecrecover"},"ECRecover"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra-proposal#odra-standard-library"},"Odra Standard Library"),"\npart of the original Odra Proposal mentioned ECRecover as one of the functions that will be\nimplemented by the Odra Framework. We decided to add signatures verification instead."),(0,a.kt)("p",null,"The reasoning behind this decision is that the ECRecover works only with one type of signature.\nOdra tries to be backend-agnostic, which implies that it should also be signature-type-agnostic.\nThis was possible to achieve when implementing generic signature verification, but not with ECRecover."),(0,a.kt)("p",null,"In short, the implementation of ECRecover would not depend on the backend, pushing it into some kind of\nutils library, and those already exist, for example in\n",(0,a.kt)("a",{parentName:"p",href:"https://docs.rs/solana-program/latest/solana_program/secp256k1_recover/index.html#"},"solana_program"),"\ncrate."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/274ccf11.c39c7f41.js b/docs/assets/js/274ccf11.c39c7f41.js new file mode 100644 index 000000000..29e8579d2 --- /dev/null +++ b/docs/assets/js/274ccf11.c39c7f41.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7057],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},31990:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,description:"How to get information from the Host"},i="Host Communication",s={unversionedId:"basics/communicating-with-host",id:"version-0.2.0/basics/communicating-with-host",title:"Host Communication",description:"How to get information from the Host",source:"@site/versioned_docs/version-0.2.0/basics/06-communicating-with-host.md",sourceDirName:"basics",slug:"/basics/communicating-with-host",permalink:"/docs/0.2.0/basics/communicating-with-host",draft:!1,tags:[],version:"0.2.0",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"How to get information from the Host"},sidebar:"defaultSidebar",previous:{title:"Storage interaction",permalink:"/docs/0.2.0/basics/storage-interaction"},next:{title:"Testing",permalink:"/docs/0.2.0/basics/testing"}},c={},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"host-communication"},"Host Communication"),(0,o.kt)("p",null,"One of the things that your contract will probably do is to query the host for some information -\nwhat is the current time? Who called me? Following example shows how to do this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/host.rs"',title:'"examples/src/docs/host.rs"'},"use odra::Variable;\nuse odra::types::{BlockTime, Address};\n\n#[odra::module]\npub struct HostContract {\n name: Variable<String>,\n created_at: Variable<BlockTime>,\n created_by: Variable<Address>,\n}\n\n#[odra::module]\nimpl HostContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.created_at.set(odra::contract_env::get_block_time());\n self.created_by.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n}\n")),(0,o.kt)("p",null,"As you can see, we are calling functions from ",(0,o.kt)("inlineCode",{parentName:"p"},"odra::contract_env"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"get_block_time()")," will return\nthe current block time wrapped in Odra type ",(0,o.kt)("inlineCode",{parentName:"p"},"Blocktime"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"caller()")," will return an Odra ",(0,o.kt)("inlineCode",{parentName:"p"},"Address")," of\na caller (this can be an external caller or another contract)."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will learn more functions that Odra exposes from host and types it uses in further articles.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"In the next article, we'll dive into testing your contracts with Odra, so you can check that the code\nwe presented in fact works!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/28efbf3f.834330bf.js b/docs/assets/js/28efbf3f.834330bf.js new file mode 100644 index 000000000..a9f6e2d12 --- /dev/null +++ b/docs/assets/js/28efbf3f.834330bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2240],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=a,h=p["".concat(l,".").concat(m)]||p[m]||u[m]||o;return n?r.createElement(h,s(s({ref:t},d),{},{components:n})):r.createElement(h,s({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},65114:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:7,description:"How to write tests in Odra"},s="Testing",i={unversionedId:"basics/testing",id:"version-0.2.0/basics/testing",title:"Testing",description:"How to write tests in Odra",source:"@site/versioned_docs/version-0.2.0/basics/07-testing.md",sourceDirName:"basics",slug:"/basics/testing",permalink:"/docs/0.2.0/basics/testing",draft:!1,tags:[],version:"0.2.0",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"How to write tests in Odra"},sidebar:"defaultSidebar",previous:{title:"Host Communication",permalink:"/docs/0.2.0/basics/communicating-with-host"},next:{title:"Errors",permalink:"/docs/0.2.0/basics/errors"}},l={},c=[{value:"Test env",id:"test-env",level:2},{value:"Deployer",id:"deployer",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write\nregular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the\nprevious article:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},'use odra::{Variable, List};\n\n#[cfg(test)]\nmod tests {\n use super::DogContract3Deployer;\n\n #[test]\n fn init_test() {\n let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n assert_eq!(dog_contract.walks_amount(), 0);\n assert_eq!(dog_contract.walks_total_length(), 0);\n dog_contract.walk_the_dog(5);\n dog_contract.walk_the_dog(10);\n assert_eq!(dog_contract.walks_amount(), 2);\n assert_eq!(dog_contract.walks_total_length(), 15);\n }\n}\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(module)]")," macro created a Deployer code for us, which will deploy the contract on the\nVM:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},'let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n')),(0,a.kt)("p",null,"From now on, we can use ",(0,a.kt)("inlineCode",{parentName:"p"},"dog_contract")," to interact with our deployed contract - in particular, all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from the impl section that was annotated with a macro are available to us:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"// Impl\npub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n}\n\n...\n\n// Test\ndog_contract.walk_the_dog(5);\n")),(0,a.kt)("h2",{id:"test-env"},"Test env"),(0,a.kt)("p",null,"Odra gives us some additional functions that we can use to communicate with the host (outside the contract context)\nand to configure how the contracts are deployed and called. Let's revisit the example from the previous\narticle about host communication and implement the tests that prove it works:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/testing.rs"',title:'"examples/src/docs/testing.rs"'},'#[cfg(test)]\nmod tests {\n use super::TestingContractDeployer;\n\n #[test]\n fn test_env() {\n let testing_contract = TestingContractDeployer::init("MyContract".to_string());\n let creator = testing_contract.created_by();\n odra::test_env::set_caller(odra::test_env::get_account(1));\n let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());\n let creator2 = testing_contract2.created_by();\n assert!(creator != creator2);\n }\n}\n')),(0,a.kt)("p",null,"In the code above, we are deploying two instances of the same contract, but we're using ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::test_env::set_caller"),"\nto change the caller - so the Address which is deploying the contract. This changes the result of the ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::contract_env::caller()"),"\nthe function we are calling inside the contract."),(0,a.kt)("p",null,"Each test env comes with a set of functions that will let you write better tests:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn set_caller(address: Address)")," - you've seen it in action just now"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn token_balance(address: Address) -> Balance")," - it returns the balance of the account associated with the given address"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn advance_block_time_by(seconds: BlockTime)")," - it increases the current value of block_time"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_account(n: usize) -> Address")," - it returns an nth address that was prepared for you by Odra in advance;\nby default, you start with the 0th account"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn assert_exception<F, E>(err: E, block: F)")," - it executes the ",(0,a.kt)("inlineCode",{parentName:"li"},"block")," code and expects ",(0,a.kt)("inlineCode",{parentName:"li"},"err")," to happen"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError>")," - returns\nthe event emitted by the contract")),(0,a.kt)("p",null,"Again, we'll see those used in the next articles."),(0,a.kt)("h2",{id:"deployer"},"Deployer"),(0,a.kt)("p",null,"You may be wondering what is the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractDeployer")," and where did it come from.\nIt is a piece of code generated automatically for you, thanks to the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nIf you used the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," on one of the methods, it will be the constructor of your contract.\nOdra will make sure that it is called only once, so you can use it to initialize your data structures etc."),(0,a.kt)("p",null,"If you do not provide the init method, you can deploy the contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"::default()")," method.\nIn the end, you will get a ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," instance (in our case the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractRef"),") which reimplements all\nthe methods you defined in the contract, but executes them on a blockchain!"),(0,a.kt)("p",null,"To learn more about the ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," contract, visit the ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/basics/cross-calls"},"Cross calls")," article."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We take a look at how Odra handles errors!"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/29c8e325.0f9aec2a.js b/docs/assets/js/29c8e325.0f9aec2a.js new file mode 100644 index 000000000..281c27cbe --- /dev/null +++ b/docs/assets/js/29c8e325.0f9aec2a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7447],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},72984:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:2,description:"Files and folders in the Odra project"},i="Directory structure",l={unversionedId:"basics/directory-structure",id:"version-0.4.0/basics/directory-structure",title:"Directory structure",description:"Files and folders in the Odra project",source:"@site/versioned_docs/version-0.4.0/basics/02-directory-structure.md",sourceDirName:"basics",slug:"/basics/directory-structure",permalink:"/docs/0.4.0/basics/directory-structure",draft:!1,tags:[],version:"0.4.0",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Files and folders in the Odra project"},sidebar:"tutorialSidebar",previous:{title:"Cargo Odra",permalink:"/docs/0.4.0/basics/cargo-odra"},next:{title:"Odra.toml",permalink:"/docs/0.4.0/basics/odra-toml"}},s={},c=[{value:"Cargo.toml",id:"cargotoml",level:2},{value:"Odra.toml",id:"odratoml",level:2},{value:".builder_* folders",id:"builder_-folders",level:2},{value:"src/",id:"src",level:2},{value:"target/",id:"target",level:2},{value:"wasm/",id:"wasm",level:2}],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"directory-structure"},"Directory structure"),(0,a.kt)("p",null,"After creating a new project using Odra and running the tests, you will be presented with the\nfollowing files and directories:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 CHANGELOG.md\n\u251c\u2500\u2500 Odra.toml\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 .builder_casper/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 flipper.rs\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 target/\n\u2514\u2500\u2500 wasm/\n")),(0,a.kt)("h2",{id:"cargotoml"},"Cargo.toml"),(0,a.kt)("p",null,"Let's first take a look at ",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "sample"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,a.kt)("p",null,"By default, your project will use the latest odra version available at crates.io. We are using two features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/mock-vm")," - it is responsible for running tests on Odra's MockVM"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/casper")," - backend implementation of Casper blockchain\nMore backends will be released as features that will be possible to enable here.")),(0,a.kt)("h2",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"This is the file that holds information about contracts that will be generated when running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"As we can see, we have a single contract, its ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) corresponds to\nthe contract is located in ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),".\nMore contracts can be added here by hand, or by using ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command."),(0,a.kt)("h2",{id:"builder_-folders"},".builder_* folders"),(0,a.kt)("p",null,"Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary\nfor building wasm files and running them against blockchain VMs. As it is not necessary to modify\nfiles in those folders in any way, by default they are hidden (hence the ",(0,a.kt)("inlineCode",{parentName:"p"},".")," at the beginning of the\nfolder name)."),(0,a.kt)("h2",{id:"src"},"src/"),(0,a.kt)("p",null,"This is the folder where your smart contract files live."),(0,a.kt)("h2",{id:"target"},"target/"),(0,a.kt)("p",null,"Files generated by cargo during the build process are put here."),(0,a.kt)("h2",{id:"wasm"},"wasm/"),(0,a.kt)("p",null,"WASM files generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," are put here. You can grab those WASM files\nand deploy them on the blockchain of your choosing."),(0,a.kt)("h1",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now, let's take a look at one of the files mentioned above in more detail,\nnamely the ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/2b7acc9d.b3098d85.js b/docs/assets/js/2b7acc9d.b3098d85.js new file mode 100644 index 000000000..90ed88f34 --- /dev/null +++ b/docs/assets/js/2b7acc9d.b3098d85.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4923],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=a,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},83808:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:3,description:"Odra's configuration file"},i="Odra.toml",l={unversionedId:"basics/odra-toml",id:"version-0.3.0/basics/odra-toml",title:"Odra.toml",description:"Odra's configuration file",source:"@site/versioned_docs/version-0.3.0/basics/03-odra-toml.md",sourceDirName:"basics",slug:"/basics/odra-toml",permalink:"/docs/0.3.0/basics/odra-toml",draft:!1,tags:[],version:"0.3.0",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"Odra's configuration file"},sidebar:"defaultSidebar",previous:{title:"Directory structure",permalink:"/docs/0.3.0/basics/directory-structure"},next:{title:"Flipper Internals",permalink:"/docs/0.3.0/basics/flipper-internals"}},c={},s=[{value:"Adding a new contract manually",id:"adding-a-new-contract-manually",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"As mentioned in the previous article, ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," is a file that contains information about all the contracts\nthat Odra will build. Let's take a look at the file structure again:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," will be used as a name for the contract - the generated wasm file will be in the above case named\n",(0,a.kt)("inlineCode",{parentName:"p"},"flipper.wasm"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) is used by the builder to locate the exact struct where\nthe contract is defined."),(0,a.kt)("h2",{id:"adding-a-new-contract-manually"},"Adding a new contract manually"),(0,a.kt)("p",null,"Besides using the ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command, you can add a new contract to be compiled by hand.\nTo do this, add another ",(0,a.kt)("inlineCode",{parentName:"p"},"[[contracts]]")," element, name it and make sure that the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," is set correctly."),(0,a.kt)("p",null,"For example, if you want to create a new contract called ",(0,a.kt)("inlineCode",{parentName:"p"},"counter"),", your ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file should finally\nlook like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n\n[[contracts]]\nname = "counter"\nfqn = "sample::Counter"\n')),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous\n",(0,a.kt)("inlineCode",{parentName:"p"},"Flipper")," contract."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/2bf460c7.d3ce45e8.js b/docs/assets/js/2bf460c7.d3ce45e8.js new file mode 100644 index 000000000..2c9cdf7c5 --- /dev/null +++ b/docs/assets/js/2bf460c7.d3ce45e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6286],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},p),{},{components:a})):n.createElement(g,i({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=a[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},34226:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1,description:"A tool for managing Odra projects"},i="Cargo Odra",l={unversionedId:"basics/cargo-odra",id:"version-0.3.0/basics/cargo-odra",title:"Cargo Odra",description:"A tool for managing Odra projects",source:"@site/versioned_docs/version-0.3.0/basics/01-cargo-odra.md",sourceDirName:"basics",slug:"/basics/cargo-odra",permalink:"/docs/0.3.0/basics/cargo-odra",draft:!1,tags:[],version:"0.3.0",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"A tool for managing Odra projects"},sidebar:"defaultSidebar",previous:{title:"Basics",permalink:"/docs/0.3.0/category/basics"},next:{title:"Directory structure",permalink:"/docs/0.3.0/basics/directory-structure"}},s={},c=[{value:"Managing projects",id:"managing-projects",level:2},{value:"Generating code",id:"generating-code",level:2},{value:"Testing",id:"testing",level:2},{value:"Building code",id:"building-code",level:2},{value:"Updating dependencies",id:"updating-dependencies",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cargo-odra"},"Cargo Odra"),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.0/getting-started/installation"},"Installation")," tutorial properly,\nyou should already be set up with the Cargo Odra tool. It is an executable that will help you with\nmanaging your smart contracts project, testing and running them on multiple backends (blockchains)."),(0,r.kt)("p",null,"Let's take a look at all the possibilities that Cargo Odra gives you."),(0,r.kt)("h2",{id:"managing-projects"},"Managing projects"),(0,r.kt)("p",null,"Two commands will help you create a new project. The first one is ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra new"),".\nYou need to pass one parameter, namely ",(0,r.kt)("inlineCode",{parentName:"p"},"--name {PROJECT_NAME}"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project\n")),(0,r.kt)("p",null,"This will create a new project in the ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project")," folder and name it ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project"),". You can see it\nfor yourself, for example by taking a look into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file created in your project's folder:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n')),(0,r.kt)("p",null,"The project is created using the template located in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra's main repository"),".\nBy default it uses ",(0,r.kt)("inlineCode",{parentName:"p"},"full")," template, if you want, you can use minimalistic ",(0,r.kt)("inlineCode",{parentName:"p"},"blank")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -t blank --name my-project\n")),(0,r.kt)("p",null,"By default, the latest release of Odra will be used for the template and as a dependency.\nYou can pass a source of Odra you want to use, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"-s")," parameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -n my-project -s ../odra # will use local folder of odra\ncargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release\ncargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io\n")),(0,r.kt)("p",null,"The second way of creating a project is by using ",(0,r.kt)("inlineCode",{parentName:"p"},"init")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra init --name my-project\n")),(0,r.kt)("p",null,"It works in the same way as ",(0,r.kt)("inlineCode",{parentName:"p"},"new"),", but instead of creating a new folder, it will create a project\nin the current, empty directory."),(0,r.kt)("h2",{id:"generating-code"},"Generating code"),(0,r.kt)("p",null,"If you want to quickly create a new contract code, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"generate")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra generate -c counter \n")),(0,r.kt)("p",null,"This will create a new file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/counter.rs")," with sample code, add appropriate ",(0,r.kt)("inlineCode",{parentName:"p"},"use")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mod")," sections\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"src/lib.rs")," and update the ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file accordingly. To learn more about ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file,\nvisit ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.0/basics/odra-toml"},"Odra.toml"),"."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Most used command during the development of your project should be this one:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"It will run your tests against Odra's MockVM. It is substantially faster than virtual machines\nprovided by blockchains developers and implements all the features Odra uses."),(0,r.kt)("p",null,'When you want to run tests against a "real" VM, just provide the name of the backend using ',(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\noption:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files,\nspin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat.\nKeep in mind that this is a lot slower than MockVM and you cannot use the debugger.\nThis is why MockVM was created and should be your first choice when developing contracts.\nOf course, testing all of your code against a blockchain VM is a must in the end."),(0,r.kt)("p",null,"If you want to run only some of the tests, you can pass arguments to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo test")," command\n(which is run in the background obviously):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- this-will-be-passed-to-cargo-test\n")),(0,r.kt)("p",null,"If you want to run tests which names contain the word ",(0,r.kt)("inlineCode",{parentName:"p"},"two"),", you can execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- two\n")),(0,r.kt)("p",null,"Of course, you can do the same when using the backend:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper -- two\n")),(0,r.kt)("h2",{id:"building-code"},"Building code"),(0,r.kt)("p",null,"You can also build the code itself and generate the output contracts without running the tests.\nTo do so, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("p",null,"Where ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," is the name of the backend we are using in this example. If the build process\nfinishes successfully, wasm files will be located in ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," folder."),(0,r.kt)("h2",{id:"updating-dependencies"},"Updating dependencies"),(0,r.kt)("p",null,"You will learn later, that the project using Odra contains more than one Rust project - your own and\none or more builders. To run ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo update")," on all of them at once instead of traversing all the folders\nyou can use this command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra update\n")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next section, we will take a look at all the files and directories that ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," created\nfor us and explain their purpose."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/2c824dec.4ae4c723.js b/docs/assets/js/2c824dec.4ae4c723.js new file mode 100644 index 000000000..18186b91c --- /dev/null +++ b/docs/assets/js/2c824dec.4ae4c723.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8367],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(f,s(s({ref:n},c),{},{components:t})):a.createElement(f,s({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,s=new Array(o);s[0]=d;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,s[1]=l;for(var p=2;p<o;p++)s[p]=t[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,t)}d.displayName="MDXCreateElement"},43783:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:3},s="ERC-20",l={unversionedId:"tutorials/erc20",id:"version-0.5.0/tutorials/erc20",title:"ERC-20",description:"It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.",source:"@site/versioned_docs/version-0.5.0/tutorials/erc20.md",sourceDirName:"tutorials",slug:"/tutorials/erc20",permalink:"/docs/0.5.0/tutorials/erc20",draft:!1,tags:[],version:"0.5.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Ownable",permalink:"/docs/0.5.0/tutorials/ownable"},next:{title:"OwnedToken",permalink:"/docs/0.5.0/tutorials/owned-token"}},i={},p=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:2},{value:"Metadata",id:"metadata",level:3},{value:"Core",id:"core",level:3},{value:"Test",id:"test",level:3},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"erc-20"},"ERC-20"),(0,r.kt)("p",null,"It's time for something that every smart contract developer has done at least once. Let's try to implement ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"Erc20")," standard. Of course, we are going to use the Odra Framework. "),(0,r.kt)("p",null,"The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value. "),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"advanced storage - key-value pairs, "),(0,r.kt)("li",{parentName:"ul"},"Odra types like ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),", "),(0,r.kt)("li",{parentName:"ul"},"advanced events assertion.")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Our module has a pretty complex storage layout in comparison to the previous example."),(0,r.kt)("p",null,"We need to store the following data:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Immutable metadata - name, symbol and decimals."),(0,r.kt)("li",{parentName:"ol"},"Total supply."),(0,r.kt)("li",{parentName:"ol"},"Users' balances."),(0,r.kt)("li",{parentName:"ol"},"Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.")),(0,r.kt)("h2",{id:"module-definition"},"Module definition"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module(events = [Transfer, Approval])]\npub struct Erc20 {\n decimals: Variable<u8>,\n symbol: Variable<String>,\n name: Variable<String>,\n total_supply: Variable<Balance>,\n balances: Mapping<Address, Balance>,\n allowances: Mapping<Address, Mapping<Address, Balance>>\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - For the first time, we need to store key-value pairs. In order to do that, we use ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),". The name is taken after Solidity's native type ",(0,r.kt)("inlineCode",{parentName:"li"},"mapping"),". You may notice the ",(0,r.kt)("inlineCode",{parentName:"li"},"balances")," property maps ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),". If you deal with addresses or you operate on tokens, you should always choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," over ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Odra allows nested ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),"s, what we utilize to store allowances.")),(0,r.kt)("h3",{id:"metadata"},"Metadata"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Erc20 {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn symbol(&self) -> String {\n self.symbol.get_or_default()\n }\n\n pub fn decimals(&self) -> u8 {\n self.decimals.get_or_default()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.total_supply.get_or_default()\n }\n}\n\nimpl Erc20 {\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.balances.add(address, *amount);\n self.total_supply.add(amount);\n Transfer {\n from: None,\n to: Some(*address),\n amount: *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Transfer {\n pub from: Option<Address>,\n pub to: Option<Address>,\n pub amount: Balance\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L1")," - The first ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," block, marked as a module, contains functions defined in the ERC-20 standard."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3-L10")," - A constructor sets the token metadata and mints the initial supply."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12-L14")," - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," example, we used the ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returning an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<T>"),". If the type implements ",(0,r.kt)("inlineCode",{parentName:"li"},"Default")," trait, you can call ",(0,r.kt)("inlineCode",{parentName:"li"},"get_or_default()")," function and the contract does not fail even if the value is not initialized."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29")," - The second ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," is not an odra module, in other words these function will not be a part of contract's ABI."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30-L39")," - Mint function is public, so like in a regular rust code will be accessible from the outside. ",(0,r.kt)("inlineCode",{parentName:"li"},"mint()")," use notation ",(0,r.kt)("inlineCode",{parentName:"li"},"self.balances.add(&address, amount);"),", which it is syntactic sugar for:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"let current_balance = self.balances.get(&address).unwrap_or_default();\nlet new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();\nself.balances.set(&address, new_balance);\n")),(0,r.kt)("h3",{id:"core"},"Core"),(0,r.kt)("p",null,"For the sake of completeness, let's implement the remaining functionalities like ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_from"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"approve"),". They are not introducing any new concepts, so we leave them without additional remarks."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs",title:"erc20.rs"},"#[odra::module]\nimpl Erc20 {\n ...\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n let caller = contract_env::caller();\n self.raw_transfer(&caller, recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let spender = contract_env::caller();\n self.spend_allowance(owner, &spender, amount);\n self.raw_transfer(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n let owner = contract_env::caller();\n self.allowances.get_instance(&owner).set(spender, *amount);\n Approval {\n owner,\n spender: *spender,\n value: *amount\n }\n .emit();\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.balances.get_or_default(&address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.allowances.get_instance(owner).get_or_default(spender)\n }\n}\n\nimpl Erc20 {\n ...\n\n fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let owner_balance = self.balances.get_or_default(&owner);\n if *amount > owner_balance {\n contract_env::revert(Error::InsufficientBalance)\n }\n self.balances.set(owner, owner_balance - *amount);\n self.balances.add(recipient, *amount);\n Transfer {\n from: Some(*owner),\n to: Some(*recipient),\n amount: *amount\n }\n .emit();\n }\n\n fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {\n let allowance = self.allowances.get_instance(owner).get_or_default(spender);\n if allowance < *amount {\n contract_env::revert(Error::InsufficientAllowance)\n }\n let new_allowance = allowance - *amount;\n self.allowances\n .get_instance(owner)\n .set(spender, new_allowance);\n Approval {\n owner: *owner,\n spender: *spender,\n value: allowance - *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Approval {\n pub owner: Address,\n pub spender: Address,\n pub value: U256\n}\n\nexecution_error! {\n pub enum Error {\n InsufficientBalance => 1,\n InsufficientAllowance => 2,\n }\n}\n")),(0,r.kt)("p",null,"Now, compare the code we have written, with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"},"Open Zeppelin code"),". Out of 10, how Solidity-ish is our implementation?"),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},'#[cfg(test)]\npub mod tests {\n use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};\n use odra::{assert_events, test_env, types::U256};\n\n pub const NAME: &str = "Plascoin";\n pub const SYMBOL: &str = "PLS";\n pub const DECIMALS: u8 = 10;\n pub const INITIAL_SUPPLY: u32 = 10_000;\n\n pub fn setup() -> Erc20Ref {\n Erc20Deployer::init(\n String::from(NAME),\n String::from(SYMBOL),\n DECIMALS,\n INITIAL_SUPPLY.into()\n )\n }\n\n #[test]\n fn initialization() {\n let erc20 = setup();\n\n assert_eq!(&erc20.symbol(), SYMBOL);\n assert_eq!(&erc20.name(), NAME);\n assert_eq!(erc20.decimals(), DECIMALS);\n assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());\n assert_events!(\n erc20,\n Transfer {\n from: None,\n to: Some(test_env::get_account(0)),\n amount: INITIAL_SUPPLY.into()\n }\n );\n }\n\n #[test]\n fn transfer_works() {\n let mut erc20 = setup();\n let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n erc20.transfer(&recipient, &amount);\n\n assert_eq!(\n erc20.balance_of(&sender),\n U256::from(INITIAL_SUPPLY) - amount\n );\n assert_eq!(erc20.balance_of(&recipient), amount);\n assert_events!(\n erc20,\n Transfer {\n from: Some(sender),\n to: Some(recipient),\n amount\n }\n );\n }\n\n #[test]\n fn transfer_error() {\n let mut erc20 = setup();\n let recipient = test_env::get_account(1);\n let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);\n\n test_env::assert_exception(Error::InsufficientBalance, || {\n erc20.transfer(&recipient, &amount)\n });\n }\n\n #[test]\n fn transfer_from_and_approval_work() {\n let mut erc20 = setup();\n let (owner, recipient, spender) = (\n test_env::get_account(0),\n test_env::get_account(1),\n test_env::get_account(2)\n );\n let approved_amount = 3_000.into();\n let transfer_amount = 1_000.into();\n\n // Owner approves Spender.\n erc20.approve(&spender, &approved_amount);\n\n // Allowance was recorded.\n assert_eq!(erc20.allowance(&owner, &spender), approved_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount\n }\n );\n\n // Spender transfers tokens from Owner to Recipient.\n test_env::set_caller(spender);\n erc20.transfer_from(&owner, &recipient, &transfer_amount);\n\n // Tokens are transferred and allowance decremented.\n assert_eq!(\n erc20.balance_of(&owner),\n U256::from(INITIAL_SUPPLY) - transfer_amount\n );\n assert_eq!(erc20.balance_of(&recipient), transfer_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount - transfer_amount\n },\n Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount: transfer_amount\n }\n );\n \n assert_events!(erc20, Approval, Transfer);\n }\n\n #[test]\n fn transfer_from_error() {\n let mut erc20 = setup();\n let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n test_env::set_caller(spender);\n test_env::assert_exception(Error::InsufficientAllowance, || {\n erc20.transfer_from(&owner, &spender, &amount)\n });\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L111-123")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events!()")," macro accepts multiple events. You must pass them in the order they were emitted. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L125")," - Alternatively, if you don't want to check the entire event, you may assert only its type.")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"You can not mix both approaches, you pass full events or types only.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"Having two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", let's combine them, and create an ERC-20 on steroids."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/2fe15297.5897a284.js b/docs/assets/js/2fe15297.5897a284.js new file mode 100644 index 000000000..0def1f39e --- /dev/null +++ b/docs/assets/js/2fe15297.5897a284.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2111],{21388:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"0.7.0","label":"0.7.0","banner":null,"badge":true,"noIndex":false,"className":"docs-version-0.7.0","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Odra framework","href":"/docs/","docId":"intro"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Flipper example","href":"/docs/getting-started/flipper","docId":"getting-started/flipper"}],"href":"/docs/category/getting-started"},{"type":"category","label":"Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Cargo Odra","href":"/docs/basics/cargo-odra","docId":"basics/cargo-odra"},{"type":"link","label":"Directory structure","href":"/docs/basics/directory-structure","docId":"basics/directory-structure"},{"type":"link","label":"Odra.toml","href":"/docs/basics/odra-toml","docId":"basics/odra-toml"},{"type":"link","label":"Flipper Internals","href":"/docs/basics/flipper-internals","docId":"basics/flipper-internals"},{"type":"link","label":"Storage interaction","href":"/docs/basics/storage-interaction","docId":"basics/storage-interaction"},{"type":"link","label":"Host Communication","href":"/docs/basics/communicating-with-host","docId":"basics/communicating-with-host"},{"type":"link","label":"Testing","href":"/docs/basics/testing","docId":"basics/testing"},{"type":"link","label":"Errors","href":"/docs/basics/errors","docId":"basics/errors"},{"type":"link","label":"Events","href":"/docs/basics/events","docId":"basics/events"},{"type":"link","label":"Cross calls","href":"/docs/basics/cross-calls","docId":"basics/cross-calls"},{"type":"link","label":"Modules","href":"/docs/basics/modules","docId":"basics/modules"},{"type":"link","label":"Native token","href":"/docs/basics/native-token","docId":"basics/native-token"}],"href":"/docs/category/basics"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Module reusing","href":"/docs/advanced/using","docId":"advanced/using"},{"type":"link","label":"Delegate","href":"/docs/advanced/delegate","docId":"advanced/delegate"},{"type":"link","label":"Advanced Storage Concepts","href":"/docs/advanced/advanced-storage","docId":"advanced/advanced-storage"},{"type":"link","label":"Attributes","href":"/docs/advanced/attributes","docId":"advanced/attributes"},{"type":"link","label":"Signatures","href":"/docs/advanced/signatures","docId":"advanced/signatures"}],"href":"/docs/category/advanced"},{"type":"category","label":"Backends","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is a backend?","href":"/docs/backends/what-is-a-backend","docId":"backends/what-is-a-backend"},{"type":"link","label":"MockVM","href":"/docs/backends/mock-vm","docId":"backends/mock-vm"},{"type":"link","label":"Casper","href":"/docs/backends/casper","docId":"backends/casper"}],"href":"/docs/category/backends"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"odra-examples","href":"/docs/examples/odra-examples","docId":"examples/odra-examples"},{"type":"link","label":"Using odra-modules","href":"/docs/examples/using-odra-modules","docId":"examples/using-odra-modules"}],"href":"/docs/category/examples"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ownable","href":"/docs/tutorials/ownable","docId":"tutorials/ownable"},{"type":"link","label":"ERC-20","href":"/docs/tutorials/erc20","docId":"tutorials/erc20"},{"type":"link","label":"OwnedToken","href":"/docs/tutorials/owned-token","docId":"tutorials/owned-token"},{"type":"link","label":"Access Control","href":"/docs/tutorials/access-control","docId":"tutorials/access-control"},{"type":"link","label":"Pauseable","href":"/docs/tutorials/pauseable","docId":"tutorials/pauseable"}],"href":"/docs/category/tutorials"}]},"docs":{"advanced/advanced-storage":{"id":"advanced/advanced-storage","title":"Advanced Storage Concepts","description":"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.","sidebar":"tutorialSidebar"},"advanced/attributes":{"id":"advanced/attributes","title":"Attributes","description":"Smart contract developers with Ethereum background are familiar with Solidity\'s concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.","sidebar":"tutorialSidebar"},"advanced/delegate":{"id":"advanced/delegate","title":"Delegate","description":"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.","sidebar":"tutorialSidebar"},"advanced/signatures":{"id":"advanced/signatures","title":"Signatures","description":"As each backend can use a different scheme for generating key pairs,","sidebar":"tutorialSidebar"},"advanced/using":{"id":"advanced/using","title":"Module reusing","description":"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.","sidebar":"tutorialSidebar"},"backends/casper":{"id":"backends/casper","title":"Casper","description":"The Casper backend allows you to compile your contracts into WASM files which can be deployed","sidebar":"tutorialSidebar"},"backends/mock-vm":{"id":"backends/mock-vm","title":"MockVM","description":"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing","sidebar":"tutorialSidebar"},"backends/what-is-a-backend":{"id":"backends/what-is-a-backend","title":"What is a backend?","description":"You can think of a backend as a target platform for your smart contract.","sidebar":"tutorialSidebar"},"basics/cargo-odra":{"id":"basics/cargo-odra","title":"Cargo Odra","description":"A tool for managing Odra projects","sidebar":"tutorialSidebar"},"basics/communicating-with-host":{"id":"basics/communicating-with-host","title":"Host Communication","description":"How to get information from the Host","sidebar":"tutorialSidebar"},"basics/cross-calls":{"id":"basics/cross-calls","title":"Cross calls","description":"Contracts calling contracts","sidebar":"tutorialSidebar"},"basics/directory-structure":{"id":"basics/directory-structure","title":"Directory structure","description":"Files and folders in the Odra project","sidebar":"tutorialSidebar"},"basics/errors":{"id":"basics/errors","title":"Errors","description":"Causing and handling errors","sidebar":"tutorialSidebar"},"basics/events":{"id":"basics/events","title":"Events","description":"Creating and emitting Events","sidebar":"tutorialSidebar"},"basics/flipper-internals":{"id":"basics/flipper-internals","title":"Flipper Internals","description":"Detailed explanation of the Flipper contract","sidebar":"tutorialSidebar"},"basics/modules":{"id":"basics/modules","title":"Modules","description":"Divide your code into modules","sidebar":"tutorialSidebar"},"basics/native-token":{"id":"basics/native-token","title":"Native token","description":"How to deposit, withdraw and transfer","sidebar":"tutorialSidebar"},"basics/odra-toml":{"id":"basics/odra-toml","title":"Odra.toml","description":"Odra\'s configuration file","sidebar":"tutorialSidebar"},"basics/storage-interaction":{"id":"basics/storage-interaction","title":"Storage interaction","description":"How to write data into blockchain\'s storage","sidebar":"tutorialSidebar"},"basics/testing":{"id":"basics/testing","title":"Testing","description":"How to write tests in Odra","sidebar":"tutorialSidebar"},"examples/odra-examples":{"id":"examples/odra-examples","title":"odra-examples","description":"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.","sidebar":"tutorialSidebar"},"examples/using-odra-modules":{"id":"examples/using-odra-modules","title":"Using odra-modules","description":"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.","sidebar":"tutorialSidebar"},"getting-started/flipper":{"id":"getting-started/flipper","title":"Flipper example","description":"To quickly start working with Odra, take a look at the following code sample. If you followed the","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Hello fellow Odra user! This page will guide you through the installation process.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Odra framework","description":"Odra Docs","sidebar":"tutorialSidebar"},"tutorials/access-control":{"id":"tutorials/access-control","title":"Access Control","description":"In a previous tutorial, we introduced the Ownable module, which serves the purpose of securing access to specific contract features. While it establishes a fundamental security layer, there are numerous scenarios where this level of security is insufficient,","sidebar":"tutorialSidebar"},"tutorials/erc20":{"id":"tutorials/erc20","title":"ERC-20","description":"It\'s time for something that every smart contract developer has done at least once. Let\'s try to implement Erc20 standard. Of course, we are going to use the Odra Framework.","sidebar":"tutorialSidebar"},"tutorials/ownable":{"id":"tutorials/ownable","title":"Ownable","description":"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract\'s critical features.","sidebar":"tutorialSidebar"},"tutorials/owned-token":{"id":"tutorials/owned-token","title":"OwnedToken","description":"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.","sidebar":"tutorialSidebar"},"tutorials/pauseable":{"id":"tutorials/pauseable","title":"Pauseable","description":"The Pauseable module is like your smart contract\'s safety switch. It lets authorized users temporarily pause certain features if needed. It\'s a great way to boost security, but it\'s not meant to be used on its own. Think of it as an extra tool in your access control toolbox, giving you more control to manage your smart contract safely and efficiently.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/3129ff44.45bcc71d.js b/docs/assets/js/3129ff44.45bcc71d.js new file mode 100644 index 000000000..ae1479f35 --- /dev/null +++ b/docs/assets/js/3129ff44.45bcc71d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6367],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),f=a,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},6533:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:1},i="What is a backend?",c={unversionedId:"backends/what-is-a-backend",id:"version-0.3.1/backends/what-is-a-backend",title:"What is a backend?",description:"You can think of a backend as a target platform for your smart contract.",source:"@site/versioned_docs/version-0.3.1/backends/01-what-is-a-backend.md",sourceDirName:"backends",slug:"/backends/what-is-a-backend",permalink:"/docs/0.3.1/backends/what-is-a-backend",draft:!1,tags:[],version:"0.3.1",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Backends",permalink:"/docs/0.3.1/category/backends"},next:{title:"MockVM",permalink:"/docs/0.3.1/backends/mock-vm"}},s={},l=[{value:"Contract Env",id:"contract-env",level:2},{value:"Test Env",id:"test-env",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-a-backend"},"What is a backend?"),(0,a.kt)("p",null,"You can think of a backend as a target platform for your smart contract.\nThis can be a piece of code allowing you to quickly check your code - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.1/backends/mock-vm"},"MockVM"),",\nor a complete virtual machine, spinning up a blockchain for you - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.1/backends/casper"},"CasperVM"),"."),(0,a.kt)("p",null,"Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env."),(0,a.kt)("h2",{id:"contract-env"},"Contract Env"),(0,a.kt)("p",null,"The Contract Env is a simple interface that each backend needs to implement,\nexposing features of the blockchain from the perspective of the contract."),(0,a.kt)("p",null,"It gives Odra a set of functions, which allows implementing more complex concepts -\nfor example, to implement ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.1/basics/storage-interaction"},"Mapping"),",\nOdra requires some kind of storage integration.\nThe exact implementation of those functions is a responsibility of a backend,\nmaking Odra and its user free to implement the contract logic,\ninstead of messing with the blockchain internals."),(0,a.kt)("p",null,"Other functions from Contract Env include handling transfers, addresses, block time, errors and events."),(0,a.kt)("h2",{id:"test-env"},"Test Env"),(0,a.kt)("p",null,"Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with\nthe backend from the outside world - really useful for implementing tests."),(0,a.kt)("p",null,"This ranges from interacting with the blockchain - like deploying and calling the contracts,\nto the more test-oriented - handling errors, forwarding the block time, etc."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will take a look at backends Odra implements in more detail."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3152febb.b578fce8.js b/docs/assets/js/3152febb.b578fce8.js new file mode 100644 index 000000000..69246ef26 --- /dev/null +++ b/docs/assets/js/3152febb.b578fce8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[225],{43492:t=>{t.exports=JSON.parse('{"title":"Getting started","description":"5 minutes to learn the most important Odra concepts.","slug":"/category/getting-started","permalink":"/docs/category/getting-started","navigation":{"previous":{"title":"Odra framework","permalink":"/docs/"},"next":{"title":"Installation","permalink":"/docs/getting-started/installation"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/3209.aa3c4b05.js b/docs/assets/js/3209.aa3c4b05.js new file mode 100644 index 000000000..ece9ea706 --- /dev/null +++ b/docs/assets/js/3209.aa3c4b05.js @@ -0,0 +1 @@ +(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3209],{17295:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,u){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var o=new Error("Cannot find module '"+a+"'");throw o.code="MODULE_NOT_FOUND",o}var s=e[a]={exports:{}};t[a][0].call(s.exports,(function(n){return r(t[a][1][n]||n)}),s,s.exports,n,t,e,i)}return e[a].exports}for(var c=void 0,a=0;a<i.length;a++)r(i[a]);return r}return n}()({1:[function(n,t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function n(n,t){for(var e=0;e<t.length;e++){var i=t[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();function r(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}var c=function(){function n(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=e.defaultLayoutOptions,c=void 0===i?{}:i,u=e.algorithms,o=void 0===u?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:u,s=e.workerFactory,h=e.workerUrl;if(r(this,n),this.defaultLayoutOptions=c,this.initialized=!1,void 0===h&&void 0===s)throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var f=s;void 0!==h&&void 0===s&&(f=function(n){return new Worker(n)});var l=f(h);if("function"!=typeof l.postMessage)throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new a(l),this.worker.postMessage({cmd:"register",algorithms:o}).then((function(n){return t.initialized=!0})).catch(console.err)}return i(n,[{key:"layout",value:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=t.layoutOptions,i=void 0===e?this.defaultLayoutOptions:e,r=t.logging,c=void 0!==r&&r,a=t.measureExecutionTime,u=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:u}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),n}();e.default=c;var a=function(){function n(t){var e=this;if(r(this,n),void 0===t)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=t,this.worker.onmessage=function(n){setTimeout((function(){e.receive(e,n)}),0)}}return i(n,[{key:"postMessage",value:function(n){var t=this.id||0;this.id=t+1,n.id=t;var e=this;return new Promise((function(i,r){e.resolvers[t]=function(n,t){n?(e.convertGwtStyleError(n),r(n)):i(t)},e.worker.postMessage(n)}))}},{key:"receive",value:function(n,t){var e=t.data,i=n.resolvers[e.id];i&&(delete n.resolvers[e.id],e.error?i(e.error):i(null,e.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(n){if(n){var t=n.__java$exception;t&&(t.cause&&t.cause.backingJsObject&&(n.cause=t.cause.backingJsObject,this.convertGwtStyleError(n.cause)),delete n.__java$exception)}}}]),n}()},{}],2:[function(n,t,i){(function(n){(function(){"use strict";var e;function r(){}function c(){}function a(){}function u(){}function o(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function v(){}function m(){}function y(){}function k(){}function j(){}function E(){}function T(){}function M(){}function S(){}function P(){}function C(){}function I(){}function O(){}function A(){}function $(){}function L(){}function N(){}function x(){}function D(){}function R(){}function K(){}function _(){}function F(){}function B(){}function H(){}function q(){}function G(){}function z(){}function U(){}function X(){}function W(){}function V(){}function Q(){}function Y(){}function J(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function un(){}function on(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function vn(){}function mn(){}function yn(){}function kn(){}function jn(){}function En(){}function Tn(){}function Mn(){}function Sn(){}function Pn(){}function Cn(){}function In(){}function On(){}function An(){}function $n(){}function Ln(){}function Nn(){}function xn(){}function Dn(){}function Rn(){}function Kn(){}function _n(){}function Fn(){}function Bn(){}function Hn(){}function qn(){}function Gn(){}function zn(){}function Un(){}function Xn(){}function Wn(){}function Vn(){}function Qn(){}function Yn(){}function Jn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ut(){}function ot(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function vt(){}function mt(){}function yt(){}function kt(){}function jt(){}function Et(){}function Tt(){}function Mt(){}function St(){}function Pt(){}function Ct(){}function It(){}function Ot(){}function At(){}function $t(){}function Lt(){}function Nt(){}function xt(){}function Dt(){}function Rt(){}function Kt(){}function _t(){}function Ft(){}function Bt(){}function Ht(){}function qt(){}function Gt(){}function zt(){}function Ut(){}function Xt(){}function Wt(){}function Vt(){}function Qt(){}function Yt(){}function Jt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function ue(){}function oe(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function ve(){}function me(){}function ye(){}function ke(){}function je(){}function Ee(){}function Te(){}function Me(){}function Se(){}function Pe(){}function Ce(){}function Ie(){}function Oe(){}function Ae(){}function $e(){}function Le(){}function Ne(){}function xe(){}function De(){}function Re(){}function Ke(){}function _e(){}function Fe(){}function Be(){}function He(){}function qe(){}function Ge(){}function ze(){}function Ue(){}function Xe(){}function We(){}function Ve(){}function Qe(){}function Ye(){}function Je(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function ui(){}function oi(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function vi(){}function mi(){}function yi(){}function ki(){}function ji(){}function Ei(){}function Ti(){}function Mi(){}function Si(){}function Pi(){}function Ci(){}function Ii(){}function Oi(){}function Ai(){}function $i(){}function Li(){}function Ni(){}function xi(){}function Di(){}function Ri(){}function Ki(){}function _i(){}function Fi(){}function Bi(){}function Hi(){}function qi(){}function Gi(){}function zi(){}function Ui(){}function Xi(){}function Wi(){}function Vi(){}function Qi(){}function Yi(){}function Ji(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function ur(){}function or(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function vr(){}function mr(){}function yr(){}function kr(){}function jr(){}function Er(){}function Tr(){}function Mr(){}function Sr(){}function Pr(){}function Cr(){}function Ir(){}function Or(){}function Ar(){}function $r(){}function Lr(){}function Nr(){}function xr(){}function Dr(){}function Rr(){}function Kr(){}function _r(){}function Fr(){}function Br(){}function Hr(){}function qr(){}function Gr(){}function zr(){}function Ur(){}function Xr(){}function Wr(){}function Vr(){}function Qr(){}function Yr(){}function Jr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function uc(){}function oc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function vc(){}function mc(){}function yc(){}function kc(){}function jc(){}function Ec(){}function Tc(){}function Mc(){}function Sc(){}function Pc(){}function Cc(){}function Ic(){}function Oc(){}function Ac(){}function $c(){}function Lc(){}function Nc(){}function xc(){}function Dc(){}function Rc(){}function Kc(){}function _c(){}function Fc(){}function Bc(){}function Hc(){}function qc(){}function Gc(){}function zc(){}function Uc(){}function Xc(){}function Wc(){}function Vc(){}function Qc(){}function Yc(){}function Jc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function ua(){}function oa(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function va(){}function ma(){}function ya(){}function ka(){}function ja(){}function Ea(){}function Ta(){}function Ma(){}function Sa(){}function Pa(){}function Ca(){}function Ia(){}function Oa(){}function Aa(){}function $a(){}function La(){}function Na(){}function xa(){}function Da(){}function Ra(){}function Ka(){}function _a(){}function Fa(){}function Ba(){}function Ha(){}function qa(){}function Ga(){}function za(){}function Ua(){}function Xa(){}function Wa(){}function Va(){}function Qa(){}function Ya(){}function Ja(){}function Za(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function uu(){}function ou(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function vu(){}function mu(){}function yu(){}function ku(){}function ju(){}function Eu(){}function Tu(){}function Mu(){}function Su(){}function Pu(){}function Cu(){}function Iu(){}function Ou(){}function Au(){}function $u(){}function Lu(){}function Nu(){}function xu(){}function Du(){}function Ru(){}function Ku(){}function _u(){}function Fu(){}function Bu(){}function Hu(){}function qu(){}function Gu(){}function zu(){}function Uu(){}function Xu(){}function Wu(){}function Vu(){}function Qu(){}function Yu(){}function Ju(){}function Zu(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function uo(){}function oo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function vo(){}function mo(){}function yo(){}function ko(){}function jo(){}function Eo(){}function To(){}function Mo(){}function So(){}function Po(){}function Co(){}function Io(){}function Oo(){}function Ao(){}function $o(){}function Lo(){}function No(){}function xo(){}function Do(){}function Ro(){}function Ko(){}function _o(){}function Fo(){}function Bo(){}function Ho(){}function qo(){}function Go(){}function zo(){}function Uo(){}function Xo(){}function Wo(){}function Vo(){}function Qo(){}function Yo(){}function Jo(){}function Zo(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function us(){}function os(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function vs(){}function ms(){}function ys(){}function ks(){}function js(){}function Es(){}function Ts(){}function Ms(){}function Ss(){}function Ps(){}function Cs(){}function Is(){}function Os(){}function As(){}function $s(){}function Ls(){}function Ns(){}function xs(){}function Ds(){}function Rs(){}function Ks(){}function _s(){}function Fs(){}function Bs(){}function Hs(){}function qs(){}function Gs(){}function zs(){}function Us(){}function Xs(){}function Ws(){}function Vs(){}function Qs(){}function Ys(){}function Js(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function uh(){}function oh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function vh(){}function mh(){}function yh(){}function kh(){}function jh(){}function Eh(){}function Th(){}function Mh(){}function Sh(){}function Ph(){}function Ch(){}function Ih(){}function Oh(){}function Ah(){}function $h(){}function Lh(){}function Nh(){}function xh(){}function Dh(){}function Rh(){}function Kh(){}function _h(n){}function Fh(n){}function Bh(){iy()}function Hh(){Gsn()}function qh(){Epn()}function Gh(){_kn()}function zh(){jSn()}function Uh(){fRn()}function Xh(){Kyn()}function Wh(){rkn()}function Vh(){EM()}function Qh(){mM()}function Yh(){q_()}function Jh(){TM()}function Zh(){Irn()}function nf(){SM()}function tf(){I6()}function ef(){Pin()}function rf(){Q8()}function cf(){_Z()}function af(){zsn()}function uf(){_Mn()}function of(){Cin()}function sf(){U2()}function hf(){fWn()}function ff(){Gyn()}function lf(){FZ()}function bf(){HXn()}function wf(){RZ()}function df(){Iin()}function gf(){Yun()}function pf(){GZ()}function vf(){C9()}function mf(){PM()}function yf(){KAn()}function kf(){Uyn()}function jf(){Fcn()}function Ef(){MMn()}function Tf(){bRn()}function Mf(){Bvn()}function Sf(){CAn()}function Pf(){Ran()}function Cf(){HZ()}function If(){s_n()}function Of(){$An()}function Af(){W$n()}function $f(){x9()}function Lf(){SMn()}function Nf(){sWn()}function xf(){Xsn()}function Df(){vdn()}function Rf(){qBn()}function Kf(){u_()}function _f(){wcn()}function Ff(){fFn()}function Bf(n){kW(n)}function Hf(n){this.a=n}function qf(n){this.a=n}function Gf(n){this.a=n}function zf(n){this.a=n}function Uf(n){this.a=n}function Xf(n){this.a=n}function Wf(n){this.a=n}function Vf(n){this.a=n}function Qf(n){this.a=n}function Yf(n){this.a=n}function Jf(n){this.a=n}function Zf(n){this.a=n}function nl(n){this.a=n}function tl(n){this.a=n}function el(n){this.a=n}function il(n){this.a=n}function rl(n){this.a=n}function cl(n){this.a=n}function al(n){this.a=n}function ul(n){this.a=n}function ol(n){this.a=n}function sl(n){this.b=n}function hl(n){this.c=n}function fl(n){this.a=n}function ll(n){this.a=n}function bl(n){this.a=n}function wl(n){this.a=n}function dl(n){this.a=n}function gl(n){this.a=n}function pl(n){this.a=n}function vl(n){this.a=n}function ml(n){this.a=n}function yl(n){this.a=n}function kl(n){this.a=n}function jl(n){this.a=n}function El(n){this.a=n}function Tl(n){this.a=n}function Ml(n){this.a=n}function Sl(n){this.a=n}function Pl(n){this.a=n}function Cl(){this.a=[]}function Il(n,t){n.a=t}function Ol(n,t){n.a=t}function Al(n,t){n.b=t}function $l(n,t){n.b=t}function Ll(n,t){n.b=t}function Nl(n,t){n.j=t}function xl(n,t){n.g=t}function Dl(n,t){n.i=t}function Rl(n,t){n.c=t}function Kl(n,t){n.d=t}function _l(n,t){n.d=t}function Fl(n,t){n.c=t}function Bl(n,t){n.k=t}function Hl(n,t){n.c=t}function ql(n,t){n.c=t}function Gl(n,t){n.a=t}function zl(n,t){n.a=t}function Ul(n,t){n.f=t}function Xl(n,t){n.a=t}function Wl(n,t){n.b=t}function Vl(n,t){n.d=t}function Ql(n,t){n.i=t}function Yl(n,t){n.o=t}function Jl(n,t){n.r=t}function Zl(n,t){n.a=t}function nb(n,t){n.b=t}function tb(n,t){n.e=t}function eb(n,t){n.f=t}function ib(n,t){n.g=t}function rb(n,t){n.e=t}function cb(n,t){n.f=t}function ab(n,t){n.f=t}function ub(n,t){n.n=t}function ob(n,t){n.a=t}function sb(n,t){n.a=t}function hb(n,t){n.c=t}function fb(n,t){n.c=t}function lb(n,t){n.d=t}function bb(n,t){n.e=t}function wb(n,t){n.g=t}function db(n,t){n.a=t}function gb(n,t){n.c=t}function pb(n,t){n.d=t}function vb(n,t){n.e=t}function mb(n,t){n.f=t}function yb(n,t){n.j=t}function kb(n,t){n.a=t}function jb(n,t){n.b=t}function Eb(n,t){n.a=t}function Tb(n){n.b=n.a}function Mb(n){n.c=n.d.d}function Sb(n){this.d=n}function Pb(n){this.a=n}function Cb(n){this.a=n}function Ib(n){this.a=n}function Ob(n){this.a=n}function Ab(n){this.a=n}function $b(n){this.a=n}function Lb(n){this.a=n}function Nb(n){this.a=n}function xb(n){this.a=n}function Db(n){this.a=n}function Rb(n){this.a=n}function Kb(n){this.a=n}function _b(n){this.a=n}function Fb(n){this.a=n}function Bb(n){this.b=n}function Hb(n){this.b=n}function qb(n){this.b=n}function Gb(n){this.a=n}function zb(n){this.a=n}function Ub(n){this.a=n}function Xb(n){this.c=n}function Wb(n){this.c=n}function Vb(n){this.c=n}function Qb(n){this.a=n}function Yb(n){this.a=n}function Jb(n){this.a=n}function Zb(n){this.a=n}function nw(n){this.a=n}function tw(n){this.a=n}function ew(n){this.a=n}function iw(n){this.a=n}function rw(n){this.a=n}function cw(n){this.a=n}function aw(n){this.a=n}function uw(n){this.a=n}function ow(n){this.a=n}function sw(n){this.a=n}function hw(n){this.a=n}function fw(n){this.a=n}function lw(n){this.a=n}function bw(n){this.a=n}function ww(n){this.a=n}function dw(n){this.a=n}function gw(n){this.a=n}function pw(n){this.a=n}function vw(n){this.a=n}function mw(n){this.a=n}function yw(n){this.a=n}function kw(n){this.a=n}function jw(n){this.a=n}function Ew(n){this.a=n}function Tw(n){this.a=n}function Mw(n){this.a=n}function Sw(n){this.a=n}function Pw(n){this.a=n}function Cw(n){this.a=n}function Iw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function $w(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function xw(n){this.a=n}function Dw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function _w(n){this.a=n}function Fw(n){this.a=n}function Bw(n){this.e=n}function Hw(n){this.a=n}function qw(n){this.a=n}function Gw(n){this.a=n}function zw(n){this.a=n}function Uw(n){this.a=n}function Xw(n){this.a=n}function Ww(n){this.a=n}function Vw(n){this.a=n}function Qw(n){this.a=n}function Yw(n){this.a=n}function Jw(n){this.a=n}function Zw(n){this.a=n}function nd(n){this.a=n}function td(n){this.a=n}function ed(n){this.a=n}function id(n){this.a=n}function rd(n){this.a=n}function cd(n){this.a=n}function ad(n){this.a=n}function ud(n){this.a=n}function od(n){this.a=n}function sd(n){this.a=n}function hd(n){this.a=n}function fd(n){this.a=n}function ld(n){this.a=n}function bd(n){this.a=n}function wd(n){this.a=n}function dd(n){this.a=n}function gd(n){this.a=n}function pd(n){this.a=n}function vd(n){this.a=n}function md(n){this.a=n}function yd(n){this.a=n}function kd(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Td(n){this.a=n}function Md(n){this.a=n}function Sd(n){this.a=n}function Pd(n){this.a=n}function Cd(n){this.a=n}function Id(n){this.a=n}function Od(n){this.a=n}function Ad(n){this.a=n}function $d(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function xd(n){this.a=n}function Dd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function _d(n){this.a=n}function Fd(n){this.a=n}function Bd(n){this.c=n}function Hd(n){this.b=n}function qd(n){this.a=n}function Gd(n){this.a=n}function zd(n){this.a=n}function Ud(n){this.a=n}function Xd(n){this.a=n}function Wd(n){this.a=n}function Vd(n){this.a=n}function Qd(n){this.a=n}function Yd(n){this.a=n}function Jd(n){this.a=n}function Zd(n){this.a=n}function ng(n){this.a=n}function tg(n){this.a=n}function eg(n){this.a=n}function ig(n){this.a=n}function rg(n){this.a=n}function cg(n){this.a=n}function ag(n){this.a=n}function ug(n){this.a=n}function og(n){this.a=n}function sg(n){this.a=n}function hg(n){this.a=n}function fg(n){this.a=n}function lg(n){this.a=n}function bg(n){this.a=n}function wg(n){this.a=n}function dg(n){this.a=n}function gg(n){this.a=n}function pg(n){this.a=n}function vg(n){this.a=n}function mg(n){this.a=n}function yg(n){this.a=n}function kg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Tg(n){this.a=n}function Mg(n){this.a=n}function Sg(n){this.a=n}function Pg(n){this.a=n}function Cg(n){this.a=n}function Ig(n){this.a=n}function Og(n){this.a=n}function Ag(n){this.a=n}function $g(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function xg(n){this.a=n}function Dg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function _g(n){this.a=n}function Fg(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function qg(n){this.a=n}function Gg(n){this.a=n}function zg(n){this.a=n}function Ug(n){this.a=n}function Xg(n){this.a=n}function Wg(n){this.a=n}function Vg(n){this.a=n}function Qg(n){this.a=n}function Yg(n){this.a=n}function Jg(n){this.a=n}function Zg(n){this.a=n}function np(n){this.a=n}function tp(n){this.a=n}function ep(n){this.a=n}function ip(n){this.a=n}function rp(n){this.a=n}function cp(n){this.a=n}function ap(n){this.a=n}function up(n){this.b=n}function op(n){this.f=n}function sp(n){this.a=n}function hp(n){this.a=n}function fp(n){this.a=n}function lp(n){this.a=n}function bp(n){this.a=n}function wp(n){this.a=n}function dp(n){this.a=n}function gp(n){this.a=n}function pp(n){this.a=n}function vp(n){this.a=n}function mp(n){this.a=n}function yp(n){this.b=n}function kp(n){this.c=n}function jp(n){this.e=n}function Ep(n){this.a=n}function Tp(n){this.a=n}function Mp(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Cp(n){this.d=n}function Ip(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.e=n}function $p(){this.a=0}function Lp(){DA(this)}function Np(){xA(this)}function xp(){$U(this)}function Dp(){wV(this)}function Rp(){_h(this)}function Kp(){this.c=L$t}function _p(n,t){t.Wb(n)}function Fp(n,t){n.b+=t}function Bp(n){n.b=new ok}function Hp(n){return n.e}function qp(n){return n.a}function Gp(n){return n.a}function zp(n){return n.a}function Up(n){return n.a}function Xp(n){return n.a}function Wp(){return null}function Vp(){return null}function Qp(){aE(),dXn()}function Yp(n){n.b.tf(n.e)}function Jp(n,t){n.b=t-n.b}function Zp(n,t){n.a=t-n.a}function nv(n,t){t.ad(n.a)}function tv(n,t){qCn(t,n)}function ev(n,t,e){n.Od(e,t)}function iv(n,t){n.e=t,t.b=n}function rv(n){s_(),this.a=n}function cv(n){s_(),this.a=n}function av(n){s_(),this.a=n}function uv(n){WX(),this.a=n}function ov(n){PY(),ett.be(n)}function sv(){gN.call(this)}function hv(){gN.call(this)}function fv(){sv.call(this)}function lv(){sv.call(this)}function bv(){sv.call(this)}function wv(){sv.call(this)}function dv(){sv.call(this)}function gv(){sv.call(this)}function pv(){sv.call(this)}function vv(){sv.call(this)}function mv(){sv.call(this)}function yv(){sv.call(this)}function kv(){sv.call(this)}function jv(){this.a=this}function Ev(){this.Bb|=256}function Tv(){this.b=new PO}function Mv(){Mv=O,new xp}function Sv(){fv.call(this)}function Pv(n,t){n.length=t}function Cv(n,t){WB(n.a,t)}function Iv(n,t){USn(n.c,t)}function Ov(n,t){TU(n.b,t)}function Av(n,t){Ivn(n.a,t)}function $v(n,t){Oln(n.a,t)}function Lv(n,t){ban(n.e,t)}function Nv(n){AOn(n.c,n.b)}function xv(n,t){n.kc().Nb(t)}function Dv(n){this.a=gbn(n)}function Rv(){this.a=new xp}function Kv(){this.a=new xp}function _v(){this.a=new Np}function Fv(){this.a=new Np}function Bv(){this.a=new Np}function Hv(){this.a=new kn}function qv(){this.a=new k6}function Gv(){this.a=new bt}function zv(){this.a=new WT}function Uv(){this.a=new D0}function Xv(){this.a=new cZ}function Wv(){this.a=new AR}function Vv(){this.a=new Np}function Qv(){this.a=new Np}function Yv(){this.a=new Np}function Jv(){this.a=new Np}function Zv(){this.d=new Np}function nm(){this.a=new Rv}function tm(){this.a=new xp}function em(){this.b=new xp}function im(){this.b=new Np}function rm(){this.e=new Np}function cm(){this.d=new Np}function am(){this.a=new uf}function um(){Np.call(this)}function om(){_v.call(this)}function sm(){NR.call(this)}function hm(){Qv.call(this)}function fm(){lm.call(this)}function lm(){Rp.call(this)}function bm(){Rp.call(this)}function wm(){bm.call(this)}function dm(){dY.call(this)}function gm(){dY.call(this)}function pm(){Wm.call(this)}function vm(){Wm.call(this)}function mm(){Wm.call(this)}function ym(){Vm.call(this)}function km(){YT.call(this)}function jm(){eo.call(this)}function Em(){eo.call(this)}function Tm(){ny.call(this)}function Mm(){ny.call(this)}function Sm(){xp.call(this)}function Pm(){xp.call(this)}function Cm(){xp.call(this)}function Im(){Rv.call(this)}function Om(){jin.call(this)}function Am(){Ev.call(this)}function $m(){OL.call(this)}function Lm(){OL.call(this)}function Nm(){xp.call(this)}function xm(){xp.call(this)}function Dm(){xp.call(this)}function Rm(){yo.call(this)}function Km(){yo.call(this)}function _m(){Rm.call(this)}function Fm(){Dh.call(this)}function Bm(n){dtn.call(this,n)}function Hm(n){dtn.call(this,n)}function qm(n){Qf.call(this,n)}function Gm(n){MT.call(this,n)}function zm(n){Gm.call(this,n)}function Um(n){MT.call(this,n)}function Xm(){this.a=new YT}function Wm(){this.a=new Rv}function Vm(){this.a=new xp}function Qm(){this.a=new Np}function Ym(){this.j=new Np}function Jm(){this.a=new Xa}function Zm(){this.a=new LE}function ny(){this.a=new mo}function ty(){ty=O,_nt=new xk}function ey(){ey=O,Knt=new Nk}function iy(){iy=O,Ont=new c}function ry(){ry=O,znt=new cN}function cy(n){Gm.call(this,n)}function ay(n){Gm.call(this,n)}function uy(n){d4.call(this,n)}function oy(n){d4.call(this,n)}function sy(n){VK.call(this,n)}function hy(n){ySn.call(this,n)}function fy(n){CT.call(this,n)}function ly(n){OT.call(this,n)}function by(n){OT.call(this,n)}function wy(n){OT.call(this,n)}function dy(n){fz.call(this,n)}function gy(n){dy.call(this,n)}function py(){Pl.call(this,{})}function vy(n){CL(),this.a=n}function my(n){n.b=null,n.c=0}function yy(n,t){n.e=t,Cxn(n,t)}function ky(n,t){n.a=t,aCn(n)}function jy(n,t,e){n.a[t.g]=e}function Ey(n,t,e){wjn(e,n,t)}function Ty(n,t){ZR(t.i,n.n)}function My(n,t){ssn(n).td(t)}function Sy(n,t){return n*n/t}function Py(n,t){return n.g-t.g}function Cy(n){return new Sl(n)}function Iy(n){return new GX(n)}function Oy(n){dy.call(this,n)}function Ay(n){dy.call(this,n)}function $y(n){dy.call(this,n)}function Ly(n){fz.call(this,n)}function Ny(n){_cn(),this.a=n}function xy(n){a_(),this.a=n}function Dy(n){FG(),this.f=n}function Ry(n){FG(),this.f=n}function Ky(n){dy.call(this,n)}function _y(n){dy.call(this,n)}function Fy(n){dy.call(this,n)}function By(n){dy.call(this,n)}function Hy(n){dy.call(this,n)}function qy(n){return kW(n),n}function Gy(n){return kW(n),n}function zy(n){return kW(n),n}function Uy(n){return kW(n),n}function Xy(n){return kW(n),n}function Wy(n){return n.b==n.c}function Vy(n){return!!n&&n.b}function Qy(n){return!!n&&n.k}function Yy(n){return!!n&&n.j}function Jy(n){kW(n),this.a=n}function Zy(n){return Zon(n),n}function nk(n){vU(n,n.length)}function tk(n){dy.call(this,n)}function ek(n){dy.call(this,n)}function ik(n){dy.call(this,n)}function rk(n){dy.call(this,n)}function ck(n){dy.call(this,n)}function ak(n){dy.call(this,n)}function uk(n){ZN.call(this,n,0)}function ok(){o1.call(this,12,3)}function sk(){sk=O,ttt=new j}function hk(){hk=O,Ynt=new r}function fk(){fk=O,rtt=new g}function lk(){lk=O,htt=new v}function bk(){throw Hp(new pv)}function wk(){throw Hp(new pv)}function dk(){throw Hp(new pv)}function gk(){throw Hp(new pv)}function pk(){throw Hp(new pv)}function vk(){throw Hp(new pv)}function mk(){this.a=SD(yX(FWn))}function yk(n){s_(),this.a=yX(n)}function kk(n,t){n.Td(t),t.Sd(n)}function jk(n,t){n.a.ec().Mc(t)}function Ek(n,t,e){n.c.lf(t,e)}function Tk(n){Ay.call(this,n)}function Mk(n){_y.call(this,n)}function Sk(){Ab.call(this,"")}function Pk(){Ab.call(this,"")}function Ck(){Ab.call(this,"")}function Ik(){Ab.call(this,"")}function Ok(n){Ay.call(this,n)}function Ak(n){Hb.call(this,n)}function $k(n){bN.call(this,n)}function Lk(n){Ak.call(this,n)}function Nk(){tl.call(this,null)}function xk(){tl.call(this,null)}function Dk(){Dk=O,PY()}function Rk(){Rk=O,ket=mEn()}function Kk(n){return n.a?n.b:0}function _k(n){return n.a?n.b:0}function Fk(n,t){return n.a-t.a}function Bk(n,t){return n.a-t.a}function Hk(n,t){return n.a-t.a}function qk(n,t){return m7(n,t)}function Gk(n,t){return gZ(n,t)}function zk(n,t){return t in n.a}function Uk(n,t){return n.f=t,n}function Xk(n,t){return n.b=t,n}function Wk(n,t){return n.c=t,n}function Vk(n,t){return n.g=t,n}function Qk(n,t){return n.a=t,n}function Yk(n,t){return n.f=t,n}function Jk(n,t){return n.k=t,n}function Zk(n,t){return n.a=t,n}function nj(n,t){return n.e=t,n}function tj(n,t){return n.e=t,n}function ej(n,t){return n.f=t,n}function ij(n,t){n.b=!0,n.d=t}function rj(n,t){n.b=new wA(t)}function cj(n,t,e){t.td(n.a[e])}function aj(n,t,e){t.we(n.a[e])}function uj(n,t){return n.b-t.b}function oj(n,t){return n.g-t.g}function sj(n,t){return n.s-t.s}function hj(n,t){return n?0:t-1}function fj(n,t){return n?0:t-1}function lj(n,t){return n?t-1:0}function bj(n,t){return t.Yf(n)}function wj(n,t){return n.b=t,n}function dj(n,t){return n.a=t,n}function gj(n,t){return n.c=t,n}function pj(n,t){return n.d=t,n}function vj(n,t){return n.e=t,n}function mj(n,t){return n.f=t,n}function yj(n,t){return n.a=t,n}function kj(n,t){return n.b=t,n}function jj(n,t){return n.c=t,n}function Ej(n,t){return n.c=t,n}function Tj(n,t){return n.b=t,n}function Mj(n,t){return n.d=t,n}function Sj(n,t){return n.e=t,n}function Pj(n,t){return n.f=t,n}function Cj(n,t){return n.g=t,n}function Ij(n,t){return n.a=t,n}function Oj(n,t){return n.i=t,n}function Aj(n,t){return n.j=t,n}function $j(n,t){return n.k=t,n}function Lj(n,t){return n.j=t,n}function Nj(n,t){_Mn(),CZ(t,n)}function xj(n,t,e){GG(n.a,t,e)}function Dj(n){BV.call(this,n)}function Rj(n){BV.call(this,n)}function Kj(n){n_.call(this,n)}function _j(n){qbn.call(this,n)}function Fj(n){gtn.call(this,n)}function Bj(n){pQ.call(this,n)}function Hj(n){pQ.call(this,n)}function qj(){O$.call(this,"")}function Gj(){this.a=0,this.b=0}function zj(){this.b=0,this.a=0}function Uj(n,t){n.b=0,Nen(n,t)}function Xj(n,t){n.c=t,n.b=!0}function Wj(n,t){return n.c._b(t)}function Vj(n){return n.e&&n.e()}function Qj(n){return n?n.d:null}function Yj(n,t){return gfn(n.b,t)}function Jj(n){return n?n.g:null}function Zj(n){return n?n.i:null}function nE(n){return ED(n),n.o}function tE(){tE=O,dOt=Xkn()}function eE(){eE=O,gOt=oTn()}function iE(){iE=O,n$t=Vkn()}function rE(){rE=O,dLt=Wkn()}function cE(){cE=O,gLt=iCn()}function aE(){aE=O,lAt=cin()}function uE(){throw Hp(new pv)}function oE(){throw Hp(new pv)}function sE(){throw Hp(new pv)}function hE(){throw Hp(new pv)}function fE(){throw Hp(new pv)}function lE(){throw Hp(new pv)}function bE(n){this.a=new XT(n)}function wE(n){lUn(),DXn(this,n)}function dE(n){this.a=new Wz(n)}function gE(n,t){for(;n.ye(t););}function pE(n,t){for(;n.sd(t););}function vE(n,t){return n.a+=t,n}function mE(n,t){return n.a+=t,n}function yE(n,t){return n.a+=t,n}function kE(n,t){return n.a+=t,n}function jE(n){return EW(n),n.a}function EE(n){return n.b!=n.d.c}function TE(n){return n.l|n.m<<22}function ME(n,t){return n.d[t.p]}function SE(n,t){return Sxn(n,t)}function PE(n,t,e){n.splice(t,e)}function CE(n){n.c?NDn(n):xDn(n)}function IE(n){this.a=0,this.b=n}function OE(){this.a=new CNn(ijt)}function AE(){this.b=new CNn(qyt)}function $E(){this.b=new CNn(WEt)}function LE(){this.b=new CNn(WEt)}function NE(){throw Hp(new pv)}function xE(){throw Hp(new pv)}function DE(){throw Hp(new pv)}function RE(){throw Hp(new pv)}function KE(){throw Hp(new pv)}function _E(){throw Hp(new pv)}function FE(){throw Hp(new pv)}function BE(){throw Hp(new pv)}function HE(){throw Hp(new pv)}function qE(){throw Hp(new pv)}function GE(){throw Hp(new yv)}function zE(){throw Hp(new yv)}function UE(n){this.a=new XE(n)}function XE(n){Gin(this,n,OEn())}function WE(n){return!n||pW(n)}function VE(n){return-1!=WLt[n]}function QE(){0!=ctt&&(ctt=0),utt=-1}function YE(){null==PWn&&(PWn=[])}function JE(n,t){tAn(QQ(n.a),t)}function ZE(n,t){tAn(QQ(n.a),t)}function nT(n,t){HL.call(this,n,t)}function tT(n,t){nT.call(this,n,t)}function eT(n,t){this.b=n,this.c=t}function iT(n,t){this.b=n,this.a=t}function rT(n,t){this.a=n,this.b=t}function cT(n,t){this.a=n,this.b=t}function aT(n,t){this.a=n,this.b=t}function uT(n,t){this.a=n,this.b=t}function oT(n,t){this.a=n,this.b=t}function sT(n,t){this.a=n,this.b=t}function hT(n,t){this.a=n,this.b=t}function fT(n,t){this.a=n,this.b=t}function lT(n,t){this.b=n,this.a=t}function bT(n,t){this.b=n,this.a=t}function wT(n,t){this.b=n,this.a=t}function dT(n,t){this.b=n,this.a=t}function gT(n,t){this.f=n,this.g=t}function pT(n,t){this.e=n,this.d=t}function vT(n,t){this.g=n,this.i=t}function mT(n,t){this.a=n,this.b=t}function yT(n,t){this.a=n,this.f=t}function kT(n,t){this.b=n,this.c=t}function jT(n,t){this.a=n,this.b=t}function ET(n,t){this.a=n,this.b=t}function TT(n,t){this.a=n,this.b=t}function MT(n){aN(n.dc()),this.c=n}function ST(n){this.b=BB(yX(n),83)}function PT(n){this.a=BB(yX(n),83)}function CT(n){this.a=BB(yX(n),15)}function IT(n){this.a=BB(yX(n),15)}function OT(n){this.b=BB(yX(n),47)}function AT(){this.q=new e.Date}function $T(){$T=O,Btt=new A}function LT(){LT=O,bet=new P}function NT(n){return n.f.c+n.g.c}function xT(n,t){return n.b.Hc(t)}function DT(n,t){return n.b.Ic(t)}function RT(n,t){return n.b.Qc(t)}function KT(n,t){return n.b.Hc(t)}function _T(n,t){return n.c.uc(t)}function FT(n,t){return n.a._b(t)}function BT(n,t){return Nfn(n.c,t)}function HT(n,t){return hU(n.b,t)}function qT(n,t){return n>t&&t<OVn}function GT(n,t){return n.Gc(t),n}function zT(n,t){return Frn(n,t),n}function UT(n){return XX(),n?stt:ott}function XT(n){non.call(this,n,0)}function WT(){Wz.call(this,null)}function VT(){B8.call(this,null)}function QT(n){this.c=n,Ann(this)}function YT(){P$(this),yQ(this)}function JT(n,t){EW(n),n.a.Nb(t)}function ZT(n,t){return n.Gc(t),n}function nM(n,t){return n.a.f=t,n}function tM(n,t){return n.a.d=t,n}function eM(n,t){return n.a.g=t,n}function iM(n,t){return n.a.j=t,n}function rM(n,t){return n.a.a=t,n}function cM(n,t){return n.a.d=t,n}function aM(n,t){return n.a.e=t,n}function uM(n,t){return n.a.g=t,n}function oM(n,t){return n.a.f=t,n}function sM(n){return n.b=!1,n}function hM(){hM=O,Pet=new CO}function fM(){fM=O,Cet=new IO}function lM(){lM=O,Het=new U}function bM(){bM=O,vut=new Kt}function wM(){wM=O,rct=new Ix}function dM(){dM=O,tit=new hn}function gM(){gM=O,kut=new _t}function pM(){pM=O,sit=new dn}function vM(){vM=O,Gat=new yt}function mM(){mM=O,Fut=new Gj}function yM(){yM=O,zat=new Pt}function kM(){kM=O,Vat=new DG}function jM(){jM=O,hut=new Mt}function EM(){EM=O,But=new be}function TM(){TM=O,nst=new Ye}function MM(){MM=O,wst=new Lr}function SM(){SM=O,Qst=new rc}function PM(){PM=O,Wkt=new B2}function CM(){CM=O,XEt=new LM}function IM(){IM=O,QEt=new vD}function OM(){OM=O,GTt=new XW}function AM(){AM=O,Wpt=new Wu}function $M(){Sin(),this.c=new ok}function LM(){gT.call(this,H1n,0)}function NM(n,t){Jgn(n.c.b,t.c,t)}function xM(n,t){Jgn(n.c.c,t.b,t)}function DM(n,t,e){mZ(n.d,t.f,e)}function RM(n,t,e,i){Jpn(n,i,t,e)}function KM(n,t,e,i){uNn(i,n,t,e)}function _M(n,t,e,i){oUn(i,n,t,e)}function FM(n,t){return n.a=t.g,n}function BM(n,t){return ekn(n.a,t)}function HM(n){return n.b?n.b:n.a}function qM(n){return(n.c+n.a)/2}function GM(){GM=O,lOt=new to}function zM(){zM=O,COt=new ho}function UM(){UM=O,RAt=new Pm}function XM(){XM=O,UAt=new Cm}function WM(){WM=O,zAt=new Nm}function VM(){VM=O,ZAt=new Dm}function QM(){QM=O,N$t=new z$}function YM(){YM=O,x$t=new U$}function JM(){JM=O,rLt=new Ns}function ZM(){ZM=O,aLt=new xs}function nS(){nS=O,mAt=new xp}function tS(){tS=O,V$t=new Np}function eS(){eS=O,MNt=new Kh}function iS(n){e.clearTimeout(n)}function rS(n){this.a=BB(yX(n),224)}function cS(n){return BB(n,42).cd()}function aS(n){return n.b<n.d.gc()}function uS(n,t){return CG(n.a,t)}function oS(n,t){return Vhn(n,t)>0}function sS(n,t){return Vhn(n,t)<0}function hS(n,t){return n.a.get(t)}function fS(n,t){return t.split(n)}function lS(n,t){return hU(n.e,t)}function bS(n){return kW(n),!1}function wS(n){w1.call(this,n,21)}function dS(n,t){_J.call(this,n,t)}function gS(n,t){gT.call(this,n,t)}function pS(n,t){gT.call(this,n,t)}function vS(n){VX(),VK.call(this,n)}function mS(n,t){jG(n,n.length,t)}function yS(n,t){QU(n,n.length,t)}function kS(n,t,e){t.ud(n.a.Ge(e))}function jS(n,t,e){t.we(n.a.Fe(e))}function ES(n,t,e){t.td(n.a.Kb(e))}function TS(n,t,e){n.Mb(e)&&t.td(e)}function MS(n,t,e){n.splice(t,0,e)}function SS(n,t){return SN(n.e,t)}function PS(n,t){this.d=n,this.e=t}function CS(n,t){this.b=n,this.a=t}function IS(n,t){this.b=n,this.a=t}function OS(n,t){this.b=n,this.a=t}function AS(n,t){this.a=n,this.b=t}function $S(n,t){this.a=n,this.b=t}function LS(n,t){this.a=n,this.b=t}function NS(n,t){this.a=n,this.b=t}function xS(n,t){this.a=n,this.b=t}function DS(n,t){this.b=n,this.a=t}function RS(n,t){this.b=n,this.a=t}function KS(n,t){gT.call(this,n,t)}function _S(n,t){gT.call(this,n,t)}function FS(n,t){gT.call(this,n,t)}function BS(n,t){gT.call(this,n,t)}function HS(n,t){gT.call(this,n,t)}function qS(n,t){gT.call(this,n,t)}function GS(n,t){gT.call(this,n,t)}function zS(n,t){gT.call(this,n,t)}function US(n,t){gT.call(this,n,t)}function XS(n,t){gT.call(this,n,t)}function WS(n,t){gT.call(this,n,t)}function VS(n,t){gT.call(this,n,t)}function QS(n,t){gT.call(this,n,t)}function YS(n,t){gT.call(this,n,t)}function JS(n,t){gT.call(this,n,t)}function ZS(n,t){gT.call(this,n,t)}function nP(n,t){gT.call(this,n,t)}function tP(n,t){gT.call(this,n,t)}function eP(n,t){this.a=n,this.b=t}function iP(n,t){this.a=n,this.b=t}function rP(n,t){this.a=n,this.b=t}function cP(n,t){this.a=n,this.b=t}function aP(n,t){this.a=n,this.b=t}function uP(n,t){this.a=n,this.b=t}function oP(n,t){this.a=n,this.b=t}function sP(n,t){this.a=n,this.b=t}function hP(n,t){this.a=n,this.b=t}function fP(n,t){this.b=n,this.a=t}function lP(n,t){this.b=n,this.a=t}function bP(n,t){this.b=n,this.a=t}function wP(n,t){this.b=n,this.a=t}function dP(n,t){this.c=n,this.d=t}function gP(n,t){this.e=n,this.d=t}function pP(n,t){this.a=n,this.b=t}function vP(n,t){this.b=t,this.c=n}function mP(n,t){gT.call(this,n,t)}function yP(n,t){gT.call(this,n,t)}function kP(n,t){gT.call(this,n,t)}function jP(n,t){gT.call(this,n,t)}function EP(n,t){gT.call(this,n,t)}function TP(n,t){gT.call(this,n,t)}function MP(n,t){gT.call(this,n,t)}function SP(n,t){gT.call(this,n,t)}function PP(n,t){gT.call(this,n,t)}function CP(n,t){gT.call(this,n,t)}function IP(n,t){gT.call(this,n,t)}function OP(n,t){gT.call(this,n,t)}function AP(n,t){gT.call(this,n,t)}function $P(n,t){gT.call(this,n,t)}function LP(n,t){gT.call(this,n,t)}function NP(n,t){gT.call(this,n,t)}function xP(n,t){gT.call(this,n,t)}function DP(n,t){gT.call(this,n,t)}function RP(n,t){gT.call(this,n,t)}function KP(n,t){gT.call(this,n,t)}function _P(n,t){gT.call(this,n,t)}function FP(n,t){gT.call(this,n,t)}function BP(n,t){gT.call(this,n,t)}function HP(n,t){gT.call(this,n,t)}function qP(n,t){gT.call(this,n,t)}function GP(n,t){gT.call(this,n,t)}function zP(n,t){gT.call(this,n,t)}function UP(n,t){gT.call(this,n,t)}function XP(n,t){gT.call(this,n,t)}function WP(n,t){gT.call(this,n,t)}function VP(n,t){gT.call(this,n,t)}function QP(n,t){gT.call(this,n,t)}function YP(n,t){gT.call(this,n,t)}function JP(n,t){gT.call(this,n,t)}function ZP(n,t){this.b=n,this.a=t}function nC(n,t){this.a=n,this.b=t}function tC(n,t){this.a=n,this.b=t}function eC(n,t){this.a=n,this.b=t}function iC(n,t){this.a=n,this.b=t}function rC(n,t){gT.call(this,n,t)}function cC(n,t){gT.call(this,n,t)}function aC(n,t){this.b=n,this.d=t}function uC(n,t){gT.call(this,n,t)}function oC(n,t){gT.call(this,n,t)}function sC(n,t){this.a=n,this.b=t}function hC(n,t){this.a=n,this.b=t}function fC(n,t){gT.call(this,n,t)}function lC(n,t){gT.call(this,n,t)}function bC(n,t){gT.call(this,n,t)}function wC(n,t){gT.call(this,n,t)}function dC(n,t){gT.call(this,n,t)}function gC(n,t){gT.call(this,n,t)}function pC(n,t){gT.call(this,n,t)}function vC(n,t){gT.call(this,n,t)}function mC(n,t){gT.call(this,n,t)}function yC(n,t){gT.call(this,n,t)}function kC(n,t){gT.call(this,n,t)}function jC(n,t){gT.call(this,n,t)}function EC(n,t){gT.call(this,n,t)}function TC(n,t){gT.call(this,n,t)}function MC(n,t){gT.call(this,n,t)}function SC(n,t){gT.call(this,n,t)}function PC(n,t){return SN(n.c,t)}function CC(n,t){return SN(t.b,n)}function IC(n,t){return-n.b.Je(t)}function OC(n,t){return SN(n.g,t)}function AC(n,t){gT.call(this,n,t)}function $C(n,t){gT.call(this,n,t)}function LC(n,t){this.a=n,this.b=t}function NC(n,t){this.a=n,this.b=t}function xC(n,t){this.a=n,this.b=t}function DC(n,t){gT.call(this,n,t)}function RC(n,t){gT.call(this,n,t)}function KC(n,t){gT.call(this,n,t)}function _C(n,t){gT.call(this,n,t)}function FC(n,t){gT.call(this,n,t)}function BC(n,t){gT.call(this,n,t)}function HC(n,t){gT.call(this,n,t)}function qC(n,t){gT.call(this,n,t)}function GC(n,t){gT.call(this,n,t)}function zC(n,t){gT.call(this,n,t)}function UC(n,t){gT.call(this,n,t)}function XC(n,t){gT.call(this,n,t)}function WC(n,t){gT.call(this,n,t)}function VC(n,t){gT.call(this,n,t)}function QC(n,t){gT.call(this,n,t)}function YC(n,t){gT.call(this,n,t)}function JC(n,t){this.a=n,this.b=t}function ZC(n,t){this.a=n,this.b=t}function nI(n,t){this.a=n,this.b=t}function tI(n,t){this.a=n,this.b=t}function eI(n,t){this.a=n,this.b=t}function iI(n,t){this.a=n,this.b=t}function rI(n,t){this.a=n,this.b=t}function cI(n,t){gT.call(this,n,t)}function aI(n,t){this.a=n,this.b=t}function uI(n,t){this.a=n,this.b=t}function oI(n,t){this.a=n,this.b=t}function sI(n,t){this.a=n,this.b=t}function hI(n,t){this.a=n,this.b=t}function fI(n,t){this.a=n,this.b=t}function lI(n,t){this.b=n,this.a=t}function bI(n,t){this.b=n,this.a=t}function wI(n,t){this.b=n,this.a=t}function dI(n,t){this.b=n,this.a=t}function gI(n,t){this.a=n,this.b=t}function pI(n,t){this.a=n,this.b=t}function vI(n,t){JLn(n.a,BB(t,56))}function mI(n,t){v7(n.a,BB(t,11))}function yI(n,t){return hH(),t!=n}function kI(){return Rk(),new ket}function jI(){qZ(),this.b=new Rv}function EI(){dxn(),this.a=new Rv}function TI(){KZ(),KG.call(this)}function MI(n,t){gT.call(this,n,t)}function SI(n,t){this.a=n,this.b=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){this.a=n,this.b=t}function AI(n,t){this.a=n,this.b=t}function $I(n,t){this.d=n,this.b=t}function LI(n,t){this.d=n,this.e=t}function NI(n,t){this.f=n,this.c=t}function xI(n,t){this.b=n,this.c=t}function DI(n,t){this.i=n,this.g=t}function RI(n,t){this.e=n,this.a=t}function KI(n,t){this.a=n,this.b=t}function _I(n,t){n.i=null,arn(n,t)}function FI(n,t){n&&VW(hAt,n,t)}function BI(n,t){return rdn(n.a,t)}function HI(n){return adn(n.c,n.b)}function qI(n){return n?n.dd():null}function GI(n){return null==n?null:n}function zI(n){return typeof n===$Wn}function UI(n){return typeof n===LWn}function XI(n){return typeof n===NWn}function WI(n,t){return n.Hd().Xb(t)}function VI(n,t){return Qcn(n.Kc(),t)}function QI(n,t){return 0==Vhn(n,t)}function YI(n,t){return Vhn(n,t)>=0}function JI(n,t){return 0!=Vhn(n,t)}function ZI(n){return""+(kW(n),n)}function nO(n,t){return n.substr(t)}function tO(n){return zbn(n),n.d.gc()}function eO(n){return zOn(n,n.c),n}function iO(n){return JH(null==n),n}function rO(n,t){return n.a+=""+t,n}function cO(n,t){return n.a+=""+t,n}function aO(n,t){return n.a+=""+t,n}function uO(n,t){return n.a+=""+t,n}function oO(n,t){return n.a+=""+t,n}function sO(n,t){return n.a+=""+t,n}function hO(n,t){r5(n,t,n.a,n.a.a)}function fO(n,t){r5(n,t,n.c.b,n.c)}function lO(n,t,e){Kjn(t,RPn(n,e))}function bO(n,t,e){Kjn(t,RPn(n,e))}function wO(n,t){Tnn(new AL(n),t)}function dO(n,t){n.q.setTime(j2(t))}function gO(n,t){zz.call(this,n,t)}function pO(n,t){zz.call(this,n,t)}function vO(n,t){zz.call(this,n,t)}function mO(n){$U(this),Tcn(this,n)}function yO(n){return l1(n,0),null}function kO(n){return n.a=0,n.b=0,n}function jO(n,t){return n.a=t.g+1,n}function EO(n,t){return 2==n.j[t.p]}function TO(n){return sX(BB(n,79))}function MO(){MO=O,Art=lhn(tpn())}function SO(){SO=O,Zot=lhn(ENn())}function PO(){this.b=new XT(etn(12))}function CO(){this.b=0,this.a=!1}function IO(){this.b=0,this.a=!1}function OO(n){this.a=n,Bh.call(this)}function AO(n){this.a=n,Bh.call(this)}function $O(n,t){iR.call(this,n,t)}function LO(n,t){tK.call(this,n,t)}function NO(n,t){DI.call(this,n,t)}function xO(n,t){Aan.call(this,n,t)}function DO(n,t){QN.call(this,n,t)}function RO(n,t){nS(),VW(mAt,n,t)}function KO(n,t){return fx(n.a,0,t)}function _O(n,t){return n.a.a.a.cc(t)}function FO(n,t){return GI(n)===GI(t)}function BO(n,t){return Pln(n.a,t.a)}function HO(n,t){return E$(n.a,t.a)}function qO(n,t){return FU(n.a,t.a)}function GO(n,t){return n.indexOf(t)}function zO(n,t){return n==t?0:n?1:-1}function UO(n){return n<10?"0"+n:""+n}function XO(n){return yX(n),new OO(n)}function WO(n){return M$(n.l,n.m,n.h)}function VO(n){return CJ((kW(n),n))}function QO(n){return CJ((kW(n),n))}function YO(n,t){return E$(n.g,t.g)}function JO(n){return typeof n===LWn}function ZO(n){return n==Zat||n==eut}function nA(n){return n==Zat||n==nut}function tA(n){return E7(n.b.b,n,0)}function eA(n){this.a=kI(),this.b=n}function iA(n){this.a=kI(),this.b=n}function rA(n,t){return WB(n.a,t),t}function cA(n,t){return WB(n.c,t),n}function aA(n,t){return Jcn(n.a,t),n}function uA(n,t){return G_(),t.a+=n}function oA(n,t){return G_(),t.a+=n}function sA(n,t){return G_(),t.c+=n}function hA(n,t){z9(n,0,n.length,t)}function fA(){ew.call(this,new v4)}function lA(){uG.call(this,0,0,0,0)}function bA(){UV.call(this,0,0,0,0)}function wA(n){this.a=n.a,this.b=n.b}function dA(n){return n==_Pt||n==FPt}function gA(n){return n==HPt||n==KPt}function pA(n){return n==fvt||n==hvt}function vA(n){return n!=QCt&&n!=YCt}function mA(n){return n.Lg()&&n.Mg()}function yA(n){return mV(BB(n,118))}function kA(n){return Jcn(new B2,n)}function jA(n,t){return new Aan(t,n)}function EA(n,t){return new Aan(t,n)}function TA(n,t,e){jen(n,t),Een(n,e)}function MA(n,t,e){Sen(n,t),Men(n,e)}function SA(n,t,e){Pen(n,t),Cen(n,e)}function PA(n,t,e){Ten(n,t),Oen(n,e)}function CA(n,t,e){Ien(n,t),Aen(n,e)}function IA(n,t){Dsn(n,t),xen(n,n.D)}function OA(n){NI.call(this,n,!0)}function AA(n,t,e){ND.call(this,n,t,e)}function $A(n){ODn(),san.call(this,n)}function LA(){gS.call(this,"Head",1)}function NA(){gS.call(this,"Tail",3)}function xA(n){n.c=x8(Ant,HWn,1,0,5,1)}function DA(n){n.a=x8(Ant,HWn,1,8,5,1)}function RA(n){Otn(n.xf(),new Sw(n))}function KA(n){return null!=n?nsn(n):0}function _A(n,t){return Ctn(t,WJ(n))}function FA(n,t){return Ctn(t,WJ(n))}function BA(n,t){return n[n.length]=t}function HA(n,t){return n[n.length]=t}function qA(n){return FB(n.b.Kc(),n.a)}function GA(n,t){return Uin(PX(n.d),t)}function zA(n,t){return Uin(PX(n.g),t)}function UA(n,t){return Uin(PX(n.j),t)}function XA(n,t){iR.call(this,n.b,t)}function WA(n){uG.call(this,n,n,n,n)}function VA(n){return n.b&&VBn(n),n.a}function QA(n){return n.b&&VBn(n),n.c}function YA(n,t){Qet||(n.b=t)}function JA(n,t,e){return $X(n,t,e),e}function ZA(n,t,e){$X(n.c[t.g],t.g,e)}function n$(n,t,e){BB(n.c,69).Xh(t,e)}function t$(n,t,e){SA(e,e.i+n,e.j+t)}function e$(n,t){f9(a4(n.a),e1(t))}function i$(n,t){f9(H7(n.a),i1(t))}function r$(n){wWn(),Ap.call(this,n)}function c$(n){return null==n?0:nsn(n)}function a$(){a$=O,syt=new Hbn(oCt)}function u$(){u$=O,new o$,new Np}function o$(){new xp,new xp,new xp}function s$(){s$=O,Mv(),itt=new xp}function h$(){h$=O,e.Math.log(2)}function f$(){f$=O,zM(),R$t=COt}function l$(){throw Hp(new tk(Tnt))}function b$(){throw Hp(new tk(Tnt))}function w$(){throw Hp(new tk(Mnt))}function d$(){throw Hp(new tk(Mnt))}function g$(n){this.a=n,QB.call(this,n)}function p$(n){this.a=n,ST.call(this,n)}function v$(n){this.a=n,ST.call(this,n)}function m$(n,t){yG(n.c,n.c.length,t)}function y$(n){return n.a<n.c.c.length}function k$(n){return n.a<n.c.a.length}function j$(n,t){return n.a?n.b:t.De()}function E$(n,t){return n<t?-1:n>t?1:0}function T$(n,t){return Vhn(n,t)>0?n:t}function M$(n,t,e){return{l:n,m:t,h:e}}function S$(n,t){null!=n.a&&mI(t,n.a)}function P$(n){n.a=new $,n.c=new $}function C$(n){this.b=n,this.a=new Np}function I$(n){this.b=new et,this.a=n}function O$(n){LR.call(this),this.a=n}function A$(){gS.call(this,"Range",2)}function $$(){tjn(),this.a=new CNn(Uat)}function L$(n,t){yX(t),EV(n).Jc(new b)}function N$(n,t){return BZ(),t.n.b+=n}function x$(n,t,e){return VW(n.g,e,t)}function D$(n,t,e){return VW(n.k,e,t)}function R$(n,t){return VW(n.a,t.a,t)}function K$(n,t,e){return Idn(t,e,n.c)}function _$(n){return new xC(n.c,n.d)}function F$(n){return new xC(n.c,n.d)}function B$(n){return new xC(n.a,n.b)}function H$(n,t){return tzn(n.a,t,null)}function q$(n){SZ(n,null),MZ(n,null)}function G$(n){WZ(n,null),VZ(n,null)}function z$(){QN.call(this,null,null)}function U$(){YN.call(this,null,null)}function X$(n){this.a=n,xp.call(this)}function W$(n){this.b=(SQ(),new Xb(n))}function V$(n){n.j=x8(Ftt,sVn,310,0,0,1)}function Q$(n,t,e){n.c.Vc(t,BB(e,133))}function Y$(n,t,e){n.c.ji(t,BB(e,133))}function J$(n,t){sqn(n),n.Gc(BB(t,15))}function Z$(n,t){return Bqn(n.c,n.b,t)}function nL(n,t){return new pN(n.Kc(),t)}function tL(n,t){return-1!=Fun(n.Kc(),t)}function eL(n,t){return null!=n.a.Bc(t)}function iL(n){return n.Ob()?n.Pb():null}function rL(n){return Bdn(n,0,n.length)}function cL(n,t){return null!=n&&Qpn(n,t)}function aL(n,t){n.q.setHours(t),lBn(n,t)}function uL(n,t){n.c&&(RH(t),kJ(t))}function oL(n,t,e){BB(n.Kb(e),164).Nb(t)}function sL(n,t,e){return HGn(n,t,e),e}function hL(n,t,e){n.a=1502^t,n.b=e^aYn}function fL(n,t,e){return n.a[t.g][e.g]}function lL(n,t){return n.a[t.c.p][t.p]}function bL(n,t){return n.e[t.c.p][t.p]}function wL(n,t){return n.c[t.c.p][t.p]}function dL(n,t){return n.j[t.p]=pLn(t)}function gL(n,t){return f6(n.f,t.tg())}function pL(n,t){return f6(n.b,t.tg())}function vL(n,t){return n.a<XK(t)?-1:1}function mL(n,t,e){return e?0!=t:t!=n-1}function yL(n,t,e){return n.a=t,n.b=e,n}function kL(n,t){return n.a*=t,n.b*=t,n}function jL(n,t,e){return $X(n.g,t,e),e}function EL(n,t,e,i){$X(n.a[t.g],e.g,i)}function TL(n,t){_x(t,n.a.a.a,n.a.a.b)}function ML(n){n.a=BB(yan(n.b.a,4),126)}function SL(n){n.a=BB(yan(n.b.a,4),126)}function PL(n){OY(n,i8n),HLn(n,IUn(n))}function CL(){CL=O,Set=new vy(null)}function IL(){(IL=O)(),$et=new z}function OL(){this.Bb|=256,this.Bb|=512}function AL(n){this.i=n,this.f=this.i.j}function $L(n,t,e){yH.call(this,n,t,e)}function LL(n,t,e){$L.call(this,n,t,e)}function NL(n,t,e){$L.call(this,n,t,e)}function xL(n,t,e){LL.call(this,n,t,e)}function DL(n,t,e){yH.call(this,n,t,e)}function RL(n,t,e){yH.call(this,n,t,e)}function KL(n,t,e){MH.call(this,n,t,e)}function _L(n,t,e){MH.call(this,n,t,e)}function FL(n,t,e){KL.call(this,n,t,e)}function BL(n,t,e){DL.call(this,n,t,e)}function HL(n,t){this.a=n,ST.call(this,t)}function qL(n,t){this.a=n,uk.call(this,t)}function GL(n,t){this.a=n,uk.call(this,t)}function zL(n,t){this.a=n,uk.call(this,t)}function UL(n){this.a=n,hl.call(this,n.d)}function XL(n){this.c=n,this.a=this.c.a}function WL(n,t){this.a=t,uk.call(this,n)}function VL(n,t){this.a=t,d4.call(this,n)}function QL(n,t){this.a=n,d4.call(this,t)}function YL(n,t){return wz(bz(n.c)).Xb(t)}function JL(n,t){return ebn(n,new Ck,t).a}function ZL(n,t){return yX(t),new nN(n,t)}function nN(n,t){this.a=t,OT.call(this,n)}function tN(n){this.b=n,this.a=this.b.a.e}function eN(n){n.b.Qb(),--n.d.f.d,$G(n.d)}function iN(n){tl.call(this,BB(yX(n),35))}function rN(n){tl.call(this,BB(yX(n),35))}function cN(){gT.call(this,"INSTANCE",0)}function aN(n){if(!n)throw Hp(new wv)}function uN(n){if(!n)throw Hp(new dv)}function oN(n){if(!n)throw Hp(new yv)}function sN(){sN=O,JM(),cLt=new Ff}function hN(){hN=O,ptt=!1,vtt=!0}function fN(n){Ab.call(this,(kW(n),n))}function lN(n){Ab.call(this,(kW(n),n))}function bN(n){Hb.call(this,n),this.a=n}function wN(n){qb.call(this,n),this.a=n}function dN(n){Ak.call(this,n),this.a=n}function gN(){V$(this),jQ(this),this._d()}function pN(n,t){this.a=t,OT.call(this,n)}function vN(n,t){return new KPn(n.a,n.b,t)}function mN(n,t){return n.lastIndexOf(t)}function yN(n,t,e){return n.indexOf(t,e)}function kN(n){return null==n?zWn:Bbn(n)}function jN(n){return null==n?null:n.name}function EN(n){return null!=n.a?n.a:null}function TN(n){return EE(n.a)?u1(n):null}function MN(n,t){return null!=$J(n.a,t)}function SN(n,t){return!!t&&n.b[t.g]==t}function PN(n){return n.$H||(n.$H=++cit)}function CN(n){return n.l+n.m*IQn+n.h*OQn}function IN(n,t){return WB(t.a,n.a),n.a}function ON(n,t){return WB(t.b,n.a),n.a}function AN(n,t){return WB(t.a,n.a),n.a}function $N(n){return Px(null!=n.a),n.a}function LN(n){ew.call(this,new q8(n))}function NN(n,t){Sgn.call(this,n,t,null)}function xN(n){this.a=n,Bb.call(this,n)}function DN(){DN=O,Lrt=new iR(dJn,0)}function RN(n,t){return++n.b,WB(n.a,t)}function KN(n,t){return++n.b,y7(n.a,t)}function _N(n,t){return Pln(n.n.a,t.n.a)}function FN(n,t){return Pln(n.c.d,t.c.d)}function BN(n,t){return Pln(n.c.c,t.c.c)}function HN(n,t){return BB(h6(n.b,t),15)}function qN(n,t){return n.n.b=(kW(t),t)}function GN(n,t){return n.n.b=(kW(t),t)}function zN(n){return y$(n.a)||y$(n.b)}function UN(n,t,e){return p3(n,t,e,n.b)}function XN(n,t,e){return p3(n,t,e,n.c)}function WN(n,t,e){BB(D7(n,t),21).Fc(e)}function VN(n,t,e){Oln(n.a,e),Ivn(n.a,t)}function QN(n,t){QM(),this.a=n,this.b=t}function YN(n,t){YM(),this.b=n,this.c=t}function JN(n,t){FG(),this.f=t,this.d=n}function ZN(n,t){w6(t,n),this.d=n,this.c=t}function nx(n){var t;t=n.a,n.a=n.b,n.b=t}function tx(n){return G_(),!!n&&!n.dc()}function ex(n){return new h4(3,n)}function ix(n,t){return new bK(n,n.gc(),t)}function rx(n){return ry(),Cnn((DZ(),Xnt),n)}function cx(n){this.d=n,AL.call(this,n)}function ax(n){this.c=n,AL.call(this,n)}function ux(n){this.c=n,cx.call(this,n)}function ox(){MM(),this.b=new yd(this)}function sx(n){return lin(n,AVn),new J6(n)}function hx(n){return PY(),parseInt(n)||-1}function fx(n,t,e){return n.substr(t,e-t)}function lx(n,t,e){return yN(n,YTn(t),e)}function bx(n){return VU(n.c,n.c.length)}function wx(n){return null!=n.f?n.f:""+n.g}function dx(n){return null!=n.f?n.f:""+n.g}function gx(n){return Px(0!=n.b),n.a.a.c}function px(n){return Px(0!=n.b),n.c.b.c}function vx(n){cL(n,150)&&BB(n,150).Gh()}function mx(n){return n.b=BB(mQ(n.a),42)}function yx(n){hM(),this.b=n,this.a=!0}function kx(n){fM(),this.b=n,this.a=!0}function jx(n){n.d=new Cx(n),n.e=new xp}function Ex(n){if(!n)throw Hp(new vv)}function Tx(n){if(!n)throw Hp(new wv)}function Mx(n){if(!n)throw Hp(new dv)}function Sx(n){if(!n)throw Hp(new lv)}function Px(n){if(!n)throw Hp(new yv)}function Cx(n){nH.call(this,n,null,null)}function Ix(){gT.call(this,"POLYOMINO",0)}function Ox(n,t,e,i){sz.call(this,n,t,e,i)}function Ax(n,t){return _Mn(),JIn(n,t.e,t)}function $x(n,t,e){return AM(),e.qg(n,t)}function Lx(n,t){return!!n.q&&hU(n.q,t)}function Nx(n,t){return n>0?t*t/n:t*t*100}function xx(n,t){return n>0?t/(n*n):100*t}function Dx(n,t,e){return WB(t,own(n,e))}function Rx(n,t,e){x9(),n.Xe(t)&&e.td(n)}function Kx(n,t,e){n.Zc(t).Rb(e)}function _x(n,t,e){return n.a+=t,n.b+=e,n}function Fx(n,t,e){return n.a*=t,n.b*=e,n}function Bx(n,t,e){return n.a-=t,n.b-=e,n}function Hx(n,t){return n.a=t.a,n.b=t.b,n}function qx(n){return n.a=-n.a,n.b=-n.b,n}function Gx(n){this.c=n,this.a=1,this.b=1}function zx(n){this.c=n,Pen(n,0),Cen(n,0)}function Ux(n){YT.call(this),nin(this,n)}function Xx(n){RXn(),Bp(this),this.mf(n)}function Wx(n,t){QM(),QN.call(this,n,t)}function Vx(n,t){YM(),YN.call(this,n,t)}function Qx(n,t){YM(),YN.call(this,n,t)}function Yx(n,t){YM(),Vx.call(this,n,t)}function Jx(n,t,e){y9.call(this,n,t,e,2)}function Zx(n,t){f$(),cG.call(this,n,t)}function nD(n,t){f$(),Zx.call(this,n,t)}function tD(n,t){f$(),Zx.call(this,n,t)}function eD(n,t){f$(),tD.call(this,n,t)}function iD(n,t){f$(),cG.call(this,n,t)}function rD(n,t){f$(),iD.call(this,n,t)}function cD(n,t){f$(),cG.call(this,n,t)}function aD(n,t){return n.c.Fc(BB(t,133))}function uD(n,t,e){return NHn(F7(n,t),e)}function oD(n,t,e){return t.Qk(n.e,n.c,e)}function sD(n,t,e){return t.Rk(n.e,n.c,e)}function hD(n,t){return tfn(n.e,BB(t,49))}function fD(n,t,e){sln(H7(n.a),t,i1(e))}function lD(n,t,e){sln(a4(n.a),t,e1(e))}function bD(n,t){t.$modCount=n.$modCount}function wD(){wD=O,Vkt=new up("root")}function dD(){dD=O,pAt=new Tm,new Mm}function gD(){this.a=new pJ,this.b=new pJ}function pD(){jin.call(this),this.Bb|=BQn}function vD(){gT.call(this,"GROW_TREE",0)}function mD(n){return null==n?null:wUn(n)}function yD(n){return null==n?null:LSn(n)}function kD(n){return null==n?null:Bbn(n)}function jD(n){return null==n?null:Bbn(n)}function ED(n){null==n.o&&g$n(n)}function TD(n){return JH(null==n||zI(n)),n}function MD(n){return JH(null==n||UI(n)),n}function SD(n){return JH(null==n||XI(n)),n}function PD(n){this.q=new e.Date(j2(n))}function CD(n,t){this.c=n,pT.call(this,n,t)}function ID(n,t){this.a=n,CD.call(this,n,t)}function OD(n,t){this.d=n,Mb(this),this.b=t}function AD(n,t){B8.call(this,n),this.a=t}function $D(n,t){B8.call(this,n),this.a=t}function LD(n){qwn.call(this,0,0),this.f=n}function ND(n,t,e){W6.call(this,n,t,e,null)}function xD(n,t,e){W6.call(this,n,t,e,null)}function DD(n,t,e){return n.ue(t,e)<=0?e:t}function RD(n,t,e){return n.ue(t,e)<=0?t:e}function KD(n,t){return BB(lnn(n.b,t),149)}function _D(n,t){return BB(lnn(n.c,t),229)}function FD(n){return BB(xq(n.a,n.b),287)}function BD(n){return new xC(n.c,n.d+n.a)}function HD(n){return BZ(),pA(BB(n,197))}function qD(){qD=O,$rt=nbn((mdn(),_It))}function GD(n,t){t.a?Fxn(n,t):MN(n.a,t.b)}function zD(n,t){Qet||WB(n.a,t)}function UD(n,t){return mM(),wan(t.d.i,n)}function XD(n,t){return Irn(),new cKn(t,n)}function WD(n,t){return OY(t,uJn),n.f=t,n}function VD(n,t,e){return e=T_n(n,t,3,e)}function QD(n,t,e){return e=T_n(n,t,6,e)}function YD(n,t,e){return e=T_n(n,t,9,e)}function JD(n,t,e){++n.j,n.Ki(),L8(n,t,e)}function ZD(n,t,e){++n.j,n.Hi(t,n.oi(t,e))}function nR(n,t,e){n.Zc(t).Rb(e)}function tR(n,t,e){return ZBn(n.c,n.b,t,e)}function eR(n,t){return(t&DWn)%n.d.length}function iR(n,t){up.call(this,n),this.a=t}function rR(n,t){kp.call(this,n),this.a=t}function cR(n,t){kp.call(this,n),this.a=t}function aR(n,t){this.c=n,gtn.call(this,t)}function uR(n,t){this.a=n,yp.call(this,t)}function oR(n,t){this.a=n,yp.call(this,t)}function sR(n){this.a=(lin(n,AVn),new J6(n))}function hR(n){this.a=(lin(n,AVn),new J6(n))}function fR(n){return!n.a&&(n.a=new w),n.a}function lR(n){return n>8?0:n+1}function bR(n,t){return hN(),n==t?0:n?1:-1}function wR(n,t,e){return mG(n,BB(t,22),e)}function dR(n,t,e){return n.apply(t,e)}function gR(n,t,e){return n.a+=Bdn(t,0,e),n}function pR(n,t){var e;return e=n.e,n.e=t,e}function vR(n,t){n[iYn].call(n,t)}function mR(n,t){n[iYn].call(n,t)}function yR(n,t){n.a.Vc(n.b,t),++n.b,n.c=-1}function kR(n){$U(n.e),n.d.b=n.d,n.d.a=n.d}function jR(n){n.b?jR(n.b):n.f.c.zc(n.e,n.d)}function ER(n,t,e){dM(),Il(n,t.Ce(n.a,e))}function TR(n,t){return Qj(Mdn(n.a,t,!0))}function MR(n,t){return Qj(Sdn(n.a,t,!0))}function SR(n,t){return qk(new Array(t),n)}function PR(n){return String.fromCharCode(n)}function CR(n){return null==n?null:n.message}function IR(){this.a=new Np,this.b=new Np}function OR(){this.a=new bt,this.b=new Tv}function AR(){this.b=new Gj,this.c=new Np}function $R(){this.d=new Gj,this.e=new Gj}function LR(){this.n=new Gj,this.o=new Gj}function NR(){this.n=new bm,this.i=new bA}function xR(){this.a=new nf,this.b=new uc}function DR(){this.a=new Np,this.d=new Np}function RR(){this.b=new Rv,this.a=new Rv}function KR(){this.b=new xp,this.a=new xp}function _R(){this.b=new AE,this.a=new da}function FR(){NR.call(this),this.a=new Gj}function BR(n){Oan.call(this,n,(Z9(),Net))}function HR(n,t,e,i){uG.call(this,n,t,e,i)}function qR(n,t,e){null!=e&&Lin(t,Amn(n,e))}function GR(n,t,e){null!=e&&Nin(t,Amn(n,e))}function zR(n,t,e){return e=T_n(n,t,11,e)}function UR(n,t){return n.a+=t.a,n.b+=t.b,n}function XR(n,t){return n.a-=t.a,n.b-=t.b,n}function WR(n,t){return n.n.a=(kW(t),t+10)}function VR(n,t){return n.n.a=(kW(t),t+10)}function QR(n,t){return t==n||Sjn(CLn(t),n)}function YR(n,t){return null==VW(n.a,t,"")}function JR(n,t){return mM(),!wan(t.d.i,n)}function ZR(n,t){dA(n.f)?c$n(n,t):ITn(n,t)}function nK(n,t){return t.Hh(n.a)}function tK(n,t){Ay.call(this,e9n+n+o8n+t)}function eK(n,t,e,i){eU.call(this,n,t,e,i)}function iK(n,t,e,i){eU.call(this,n,t,e,i)}function rK(n,t,e,i){iK.call(this,n,t,e,i)}function cK(n,t,e,i){iU.call(this,n,t,e,i)}function aK(n,t,e,i){iU.call(this,n,t,e,i)}function uK(n,t,e,i){iU.call(this,n,t,e,i)}function oK(n,t,e,i){aK.call(this,n,t,e,i)}function sK(n,t,e,i){aK.call(this,n,t,e,i)}function hK(n,t,e,i){uK.call(this,n,t,e,i)}function fK(n,t,e,i){sK.call(this,n,t,e,i)}function lK(n,t,e,i){Zz.call(this,n,t,e,i)}function bK(n,t,e){this.a=n,ZN.call(this,t,e)}function wK(n,t,e){this.c=t,this.b=e,this.a=n}function dK(n,t,e){return n.d=BB(t.Kb(e),164)}function gK(n,t){return n.Aj().Nh().Kh(n,t)}function pK(n,t){return n.Aj().Nh().Ih(n,t)}function vK(n,t){return kW(n),GI(n)===GI(t)}function mK(n,t){return kW(n),GI(n)===GI(t)}function yK(n,t){return Qj(Mdn(n.a,t,!1))}function kK(n,t){return Qj(Sdn(n.a,t,!1))}function jK(n,t){return n.b.sd(new $S(n,t))}function EK(n,t){return n.b.sd(new LS(n,t))}function TK(n,t){return n.b.sd(new NS(n,t))}function MK(n,t,e){return n.lastIndexOf(t,e)}function SK(n,t,e){return Pln(n[t.b],n[e.b])}function PK(n,t){return hon(t,(HXn(),Rdt),n)}function CK(n,t){return E$(t.a.d.p,n.a.d.p)}function IK(n,t){return E$(n.a.d.p,t.a.d.p)}function OK(n,t){return Pln(n.c-n.s,t.c-t.s)}function AK(n){return n.c?E7(n.c.a,n,0):-1}function $K(n){return n<100?null:new Fj(n)}function LK(n){return n==UCt||n==WCt||n==XCt}function NK(n,t){return cL(t,15)&&QDn(n.c,t)}function xK(n,t){Qet||t&&(n.d=t)}function DK(n,t){return!!lsn(n,t)}function RK(n,t){this.c=n,GU.call(this,n,t)}function KK(n){this.c=n,vO.call(this,bVn,0)}function _K(n,t){JB.call(this,n,n.length,t)}function FK(n,t,e){return BB(n.c,69).lk(t,e)}function BK(n,t,e){return BB(n.c,69).mk(t,e)}function HK(n,t,e){return oD(n,BB(t,332),e)}function qK(n,t,e){return sD(n,BB(t,332),e)}function GK(n,t,e){return IEn(n,BB(t,332),e)}function zK(n,t,e){return QTn(n,BB(t,332),e)}function UK(n,t){return null==t?null:lfn(n.b,t)}function XK(n){return UI(n)?(kW(n),n):n.ke()}function WK(n){return!isNaN(n)&&!isFinite(n)}function VK(n){s_(),this.a=(SQ(),new Ak(n))}function QK(n){hH(),this.d=n,this.a=new Lp}function YK(n,t,e){this.a=n,this.b=t,this.c=e}function JK(n,t,e){this.a=n,this.b=t,this.c=e}function ZK(n,t,e){this.d=n,this.b=e,this.a=t}function n_(n){P$(this),yQ(this),Frn(this,n)}function t_(n){xA(this),tH(this.c,0,n.Pc())}function e_(n){fW(n.a),z8(n.c,n.b),n.b=null}function i_(n){this.a=n,$T(),fan(Date.now())}function r_(){r_=O,iit=new r,rit=new r}function c_(){c_=O,Tet=new L,Met=new N}function a_(){a_=O,wAt=x8(Ant,HWn,1,0,5,1)}function u_(){u_=O,M$t=x8(Ant,HWn,1,0,5,1)}function o_(){o_=O,S$t=x8(Ant,HWn,1,0,5,1)}function s_(){s_=O,new rv((SQ(),SQ(),set))}function h_(n){return Z9(),Cnn((n7(),_et),n)}function f_(n){return qsn(),Cnn((e8(),Zet),n)}function l_(n){return hpn(),Cnn((I4(),pit),n)}function b_(n){return Rnn(),Cnn((O4(),kit),n)}function w_(n){return tRn(),Cnn((xan(),Fit),n)}function d_(n){return Dtn(),Cnn((Z6(),Wit),n)}function g_(n){return J9(),Cnn((n8(),trt),n)}function p_(n){return G7(),Cnn((t8(),urt),n)}function v_(n){return dWn(),Cnn((MO(),Art),n)}function m_(n){return Dan(),Cnn((e7(),_rt),n)}function y_(n){return Hpn(),Cnn((i7(),zrt),n)}function k_(n){return qpn(),Cnn((r7(),ict),n)}function j_(n){return wM(),Cnn((Q2(),act),n)}function E_(n){return Knn(),Cnn((A4(),_ct),n)}function T_(n){return q7(),Cnn((i8(),Lat),n)}function M_(n){return yMn(),Cnn((Xnn(),qat),n)}function S_(n){return Aun(),Cnn((t7(),rut),n)}function P_(n){return Bfn(),Cnn((r8(),gut),n)}function C_(n,t){if(!n)throw Hp(new _y(t))}function I_(n){return uSn(),Cnn((hen(),Aut),n)}function O_(n){uG.call(this,n.d,n.c,n.a,n.b)}function A_(n){uG.call(this,n.d,n.c,n.a,n.b)}function $_(n,t,e){this.b=n,this.c=t,this.a=e}function L_(n,t,e){this.b=n,this.a=t,this.c=e}function N_(n,t,e){this.a=n,this.b=t,this.c=e}function x_(n,t,e){this.a=n,this.b=t,this.c=e}function D_(n,t,e){this.a=n,this.b=t,this.c=e}function R_(n,t,e){this.a=n,this.b=t,this.c=e}function K_(n,t,e){this.b=n,this.a=t,this.c=e}function __(n,t,e){this.e=t,this.b=n,this.d=e}function F_(n,t,e){return dM(),n.a.Od(t,e),t}function B_(n){var t;return(t=new jn).e=n,t}function H_(n){var t;return(t=new Zv).b=n,t}function q_(){q_=O,Uut=new Ne,Xut=new xe}function G_(){G_=O,dst=new vr,gst=new mr}function z_(n){return Iun(),Cnn((a7(),ost),n)}function U_(n){return Oun(),Cnn((o7(),Est),n)}function X_(n){return kDn(),Cnn((Gcn(),Vst),n)}function W_(n){return $Pn(),Cnn((ben(),rht),n)}function V_(n){return V8(),Cnn((R4(),oht),n)}function Q_(n){return Oin(),Cnn((c8(),bht),n)}function Y_(n){return LEn(),Cnn((Hnn(),Ost),n)}function J_(n){return Crn(),Cnn((o8(),_st),n)}function Z_(n){return uin(),Cnn((a8(),vht),n)}function nF(n){return Vvn(),Cnn((Fnn(),Mht),n)}function tF(n){return _nn(),Cnn((L4(),Iht),n)}function eF(n){return Jun(),Cnn((u8(),Nht),n)}function iF(n){return gSn(),Cnn((pen(),Hht),n)}function rF(n){return g7(),Cnn((N4(),Uht),n)}function cF(n){return Bjn(),Cnn((den(),nft),n)}function aF(n){return JMn(),Cnn((wen(),oft),n)}function uF(n){return bDn(),Cnn((Vun(),yft),n)}function oF(n){return Kan(),Cnn((h8(),Mft),n)}function sF(n){return z7(),Cnn((s8(),Oft),n)}function hF(n){return z2(),Cnn((K4(),Nft),n)}function fF(n){return Tbn(),Cnn((qnn(),zlt),n)}function lF(n){return TTn(),Cnn((gen(),rvt),n)}function bF(n){return Mhn(),Cnn((f8(),svt),n)}function wF(n){return bvn(),Cnn((s7(),dvt),n)}function dF(n){return ain(),Cnn((w8(),Uvt),n)}function gF(n){return sNn(),Cnn((qcn(),$vt),n)}function pF(n){return mon(),Cnn((b8(),Rvt),n)}function vF(n){return U7(),Cnn((D4(),Bvt),n)}function mF(n){return Hcn(),Cnn((l8(),Yvt),n)}function yF(n){return Nvn(),Cnn((Bnn(),jvt),n)}function kF(n){return A6(),Cnn((x4(),tmt),n)}function jF(n){return Usn(),Cnn((g8(),amt),n)}function EF(n){return dcn(),Cnn((p8(),fmt),n)}function TF(n){return $un(),Cnn((d8(),gmt),n)}function MF(n){return oin(),Cnn((v8(),Nmt),n)}function SF(n){return Q4(),Cnn((F4(),Gmt),n)}function PF(n){return gJ(),Cnn((B4(),iyt),n)}function CF(n){return oZ(),Cnn((H4(),uyt),n)}function IF(n){return O6(),Cnn((_4(),Pyt),n)}function OF(n){return dJ(),Cnn((q4(),Dyt),n)}function AF(n){return zyn(),Cnn((c7(),Hyt),n)}function $F(n){return DPn(),Cnn((ven(),Jyt),n)}function LF(n){return sZ(),Cnn((U4(),Fkt),n)}function NF(n){return Prn(),Cnn((z4(),Zkt),n)}function xF(n){return B0(),Cnn((G4(),Gkt),n)}function DF(n){return Cbn(),Cnn((m8(),rjt),n)}function RF(n){return D9(),Cnn((X4(),ojt),n)}function KF(n){return Hsn(),Cnn((y8(),bjt),n)}function _F(n){return Omn(),Cnn((u7(),zjt),n)}function FF(n){return Bcn(),Cnn((j8(),Qjt),n)}function BF(n){return Sbn(),Cnn((k8(),eEt),n)}function HF(n){return YLn(),Cnn((Unn(),BEt),n)}function qF(n){return Pbn(),Cnn((E8(),UEt),n)}function GF(n){return CM(),Cnn((W2(),VEt),n)}function zF(n){return IM(),Cnn((X2(),JEt),n)}function UF(n){return $6(),Cnn((V4(),eTt),n)}function XF(n){return $Sn(),Cnn((Gnn(),sTt),n)}function WF(n){return OM(),Cnn((V2(),UTt),n)}function VF(n){return Lun(),Cnn((W4(),QTt),n)}function QF(n){return rpn(),Cnn((znn(),bMt),n)}function YF(n){return PPn(),Cnn((zcn(),EMt),n)}function JF(n){return wvn(),Cnn((len(),xMt),n)}function ZF(n){return wEn(),Cnn((fen(),tSt),n)}function nB(n){return lWn(),Cnn((SO(),Zot),n)}function tB(n){return Srn(),Cnn(($4(),zut),n)}function eB(n){return Ffn(),Cnn((Wnn(),GPt),n)}function iB(n){return Rtn(),Cnn((M8(),VPt),n)}function rB(n){return Mbn(),Cnn((l7(),tCt),n)}function cB(n){return nMn(),Cnn((yen(),sCt),n)}function aB(n){return ufn(),Cnn((T8(),kCt),n)}function uB(n){return Xyn(),Cnn((f7(),PCt),n)}function oB(n){return n$n(),Cnn((Nan(),KCt),n)}function sB(n){return cpn(),Cnn((Vnn(),zCt),n)}function hB(n){return QEn(),Cnn((Htn(),ZCt),n)}function fB(n){return lIn(),Cnn((men(),uIt),n)}function lB(n){return mdn(),Cnn((w7(),BIt),n)}function bB(n){return n_n(),Cnn((Qun(),JIt),n)}function wB(n){return kUn(),Cnn((Qnn(),OIt),n)}function dB(n){return Fwn(),Cnn((b7(),rOt),n)}function gB(n){return Bsn(),Cnn((h7(),fOt),n)}function pB(n){return hAn(),Cnn((Ucn(),cAt),n)}function vB(n,t){return kW(n),n+(kW(t),t)}function mB(n,t){return $T(),f9(QQ(n.a),t)}function yB(n,t){return $T(),f9(QQ(n.a),t)}function kB(n,t){this.c=n,this.a=t,this.b=t-n}function jB(n,t,e){this.a=n,this.b=t,this.c=e}function EB(n,t,e){this.a=n,this.b=t,this.c=e}function TB(n,t,e){this.a=n,this.b=t,this.c=e}function MB(n,t,e){this.a=n,this.b=t,this.c=e}function SB(n,t,e){this.a=n,this.b=t,this.c=e}function PB(n,t,e){this.e=n,this.a=t,this.c=e}function CB(n,t,e){f$(),mJ.call(this,n,t,e)}function IB(n,t,e){f$(),rW.call(this,n,t,e)}function OB(n,t,e){f$(),rW.call(this,n,t,e)}function AB(n,t,e){f$(),rW.call(this,n,t,e)}function $B(n,t,e){f$(),IB.call(this,n,t,e)}function LB(n,t,e){f$(),IB.call(this,n,t,e)}function NB(n,t,e){f$(),LB.call(this,n,t,e)}function xB(n,t,e){f$(),OB.call(this,n,t,e)}function DB(n,t,e){f$(),AB.call(this,n,t,e)}function RB(n,t){return yX(n),yX(t),new hT(n,t)}function KB(n,t){return yX(n),yX(t),new _H(n,t)}function _B(n,t){return yX(n),yX(t),new FH(n,t)}function FB(n,t){return yX(n),yX(t),new lT(n,t)}function BB(n,t){return JH(null==n||Qpn(n,t)),n}function HB(n){var t;return fnn(t=new Np,n),t}function qB(n){var t;return fnn(t=new Rv,n),t}function GB(n){var t;return qrn(t=new zv,n),t}function zB(n){var t;return qrn(t=new YT,n),t}function UB(n){return!n.e&&(n.e=new Np),n.e}function XB(n){return!n.c&&(n.c=new Bo),n.c}function WB(n,t){return n.c[n.c.length]=t,!0}function VB(n,t){this.c=n,this.b=t,this.a=!1}function QB(n){this.d=n,Mb(this),this.b=rz(n.d)}function YB(){this.a=";,;",this.b="",this.c=""}function JB(n,t,e){Uz.call(this,t,e),this.a=n}function ZB(n,t,e){this.b=n,gO.call(this,t,e)}function nH(n,t,e){this.c=n,PS.call(this,t,e)}function tH(n,t,e){_Cn(e,0,n,t,e.length,!1)}function eH(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function iH(n,t){t&&(n.b=t,n.a=(EW(t),t.a))}function rH(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function cH(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function aH(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function uH(n){return uan(xU(JO(n)?Pan(n):n))}function oH(n,t){return E$(oq(n.d),oq(t.d))}function sH(n,t){return t==(kUn(),CIt)?n.c:n.d}function hH(){hH=O,kUn(),Rmt=CIt,Kmt=oIt}function fH(){this.b=Gy(MD(mpn((fRn(),aat))))}function lH(n){return dM(),x8(Ant,HWn,1,n,5,1)}function bH(n){return new xC(n.c+n.b,n.d+n.a)}function wH(n,t){return SM(),E$(n.d.p,t.d.p)}function dH(n){return Px(0!=n.b),Atn(n,n.a.a)}function gH(n){return Px(0!=n.b),Atn(n,n.c.b)}function pH(n,t){if(!n)throw Hp(new $y(t))}function vH(n,t){if(!n)throw Hp(new _y(t))}function mH(n,t,e){dP.call(this,n,t),this.b=e}function yH(n,t,e){LI.call(this,n,t),this.c=e}function kH(n,t,e){btn.call(this,t,e),this.d=n}function jH(n){o_(),yo.call(this),this.th(n)}function EH(n,t,e){this.a=n,NO.call(this,t,e)}function TH(n,t,e){this.a=n,NO.call(this,t,e)}function MH(n,t,e){LI.call(this,n,t),this.c=e}function SH(){R5(),oW.call(this,(WM(),zAt))}function PH(n){return null!=n&&!Xbn(n,LAt,NAt)}function CH(n,t){return(Wfn(n)<<4|Wfn(t))&QVn}function IH(n,t){return nV(),zvn(n,t),new GW(n,t)}function OH(n,t){var e;n.n&&(e=t,WB(n.f,e))}function AH(n,t,e){rtn(n,t,new GX(e))}function $H(n,t){var e;return e=n.c,Kin(n,t),e}function LH(n,t){return n.g=t<0?-1:t,n}function NH(n,t){return ztn(n),n.a*=t,n.b*=t,n}function xH(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function DH(n,t){return r5(n,t,n.c.b,n.c),!0}function RH(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function KH(n){this.b=n,this.a=lz(this.b.a).Ed()}function _H(n,t){this.b=n,this.a=t,Bh.call(this)}function FH(n,t){this.a=n,this.b=t,Bh.call(this)}function BH(n,t){Uz.call(this,t,1040),this.a=n}function HH(n){return 0==n||isNaN(n)?n:n<0?-1:1}function qH(n){return MQ(),PMn(n)==JJ(OMn(n))}function GH(n){return MQ(),OMn(n)==JJ(PMn(n))}function zH(n,t){return Yjn(n,new dP(t.a,t.b))}function UH(n){return!b5(n)&&n.c.i.c==n.d.i.c}function XH(n){var t;return t=n.n,n.a.b+t.d+t.a}function WH(n){var t;return t=n.n,n.e.b+t.d+t.a}function VH(n){var t;return t=n.n,n.e.a+t.b+t.c}function QH(n){return wWn(),new oG(0,n)}function YH(n){return n.a?n.a:eQ(n)}function JH(n){if(!n)throw Hp(new Ky(null))}function ZH(){ZH=O,SQ(),uLt=new Gb(P7n)}function nq(){nq=O,new svn((ty(),_nt),(ey(),Knt))}function tq(){tq=O,Itt=x8(Att,sVn,19,256,0,1)}function eq(n,t,e,i){awn.call(this,n,t,e,i,0,0)}function iq(n,t,e){return VW(n.b,BB(e.b,17),t)}function rq(n,t,e){return VW(n.b,BB(e.b,17),t)}function cq(n,t){return WB(n,new xC(t.a,t.b))}function aq(n,t){return n.c<t.c?-1:n.c==t.c?0:1}function uq(n){return n.e.c.length+n.g.c.length}function oq(n){return n.e.c.length-n.g.c.length}function sq(n){return n.b.c.length-n.e.c.length}function hq(n){return BZ(),(kUn(),bIt).Hc(n.j)}function fq(n){o_(),jH.call(this,n),this.a=-1}function lq(n,t){xI.call(this,n,t),this.a=this}function bq(n,t){var e;return(e=mX(n,t)).i=2,e}function wq(n,t){return++n.j,n.Ti(t)}function dq(n,t,e){return n.a=-1,WN(n,t.g,e),n}function gq(n,t,e){Kzn(n.a,n.b,n.c,BB(t,202),e)}function pq(n,t){Bin(n,null==t?null:(kW(t),t))}function vq(n,t){Rin(n,null==t?null:(kW(t),t))}function mq(n,t){Rin(n,null==t?null:(kW(t),t))}function yq(n,t,e){return new wK(dW(n).Ie(),e,t)}function kq(n,t,e,i,r,c){return Vjn(n,t,e,i,r,0,c)}function jq(){jq=O,jtt=x8(Ttt,sVn,217,256,0,1)}function Eq(){Eq=O,$tt=x8(Rtt,sVn,162,256,0,1)}function Tq(){Tq=O,Ktt=x8(_tt,sVn,184,256,0,1)}function Mq(){Mq=O,Mtt=x8(Stt,sVn,172,128,0,1)}function Sq(){eH(this,!1,!1,!1,!1)}function Pq(n){WX(),this.a=(SQ(),new Gb(yX(n)))}function Cq(n){for(yX(n);n.Ob();)n.Pb(),n.Qb()}function Iq(n){n.a.cd(),BB(n.a.dd(),14).gc(),wk()}function Oq(n){this.c=n,this.b=this.c.d.vc().Kc()}function Aq(n){this.c=n,this.a=new QT(this.c.a)}function $q(n){this.a=new XT(n.gc()),Frn(this,n)}function Lq(n){ew.call(this,new v4),Frn(this,n)}function Nq(n,t){return n.a+=Bdn(t,0,t.length),n}function xq(n,t){return l1(t,n.c.length),n.c[t]}function Dq(n,t){return l1(t,n.a.length),n.a[t]}function Rq(n,t){dM(),B8.call(this,n),this.a=t}function Kq(n,t){return jgn(rbn(jgn(n.a).a,t.a))}function _q(n,t){return kW(n),Ncn(n,(kW(t),t))}function Fq(n,t){return kW(t),Ncn(t,(kW(n),n))}function Bq(n,t){return $X(t,0,Hq(t[0],jgn(1)))}function Hq(n,t){return Kq(BB(n,162),BB(t,162))}function qq(n){return n.c-BB(xq(n.a,n.b),287).b}function Gq(n){return n.q?n.q:(SQ(),SQ(),het)}function zq(n){return n.e.Hd().gc()*n.c.Hd().gc()}function Uq(n,t,e){return E$(t.d[n.g],e.d[n.g])}function Xq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Wq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Vq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Qq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Yq(n,t,i){return e.Math.min(i/n,1/t)}function Jq(n,t){return n?0:e.Math.max(0,t-1)}function Zq(n,t){var e;for(e=0;e<t;++e)n[e]=-1}function nG(n){var t;return(t=uEn(n))?nG(t):n}function tG(n,t){return null==n.a&&wRn(n),n.a[t]}function eG(n){return n.c?n.c.f:n.e.b}function iG(n){return n.c?n.c.g:n.e.a}function rG(n){gtn.call(this,n.gc()),pX(this,n)}function cG(n,t){f$(),jp.call(this,t),this.a=n}function aG(n,t,e){this.a=n,$L.call(this,t,e,2)}function uG(n,t,e,i){_h(this),rH(this,n,t,e,i)}function oG(n,t){wWn(),Ap.call(this,n),this.a=t}function sG(n){this.b=new YT,this.a=n,this.c=-1}function hG(){this.d=new xC(0,0),this.e=new Rv}function fG(n){ZN.call(this,0,0),this.a=n,this.b=0}function lG(n){this.a=n,this.c=new xp,ron(this)}function bG(n){if(n.e.c!=n.b)throw Hp(new vv)}function wG(n){if(n.c.e!=n.a)throw Hp(new vv)}function dG(n){return JO(n)?0|n:TE(n)}function gG(n,t){return wWn(),new UU(n,t)}function pG(n,t){return null==n?null==t:mK(n,t)}function vG(n,t){return null==n?null==t:mgn(n,t)}function mG(n,t,e){return orn(n.a,t),EU(n,t.g,e)}function yG(n,t,e){ihn(0,t,n.length),z9(n,0,t,e)}function kG(n,t,e){LZ(t,n.c.length),MS(n.c,t,e)}function jG(n,t,e){var i;for(i=0;i<t;++i)n[i]=e}function EG(n,t){var e;return $on(e=nbn(n),t),e}function TG(n,t){return!n&&(n=[]),n[n.length]=t,n}function MG(n,t){return!(void 0===n.a.get(t))}function SG(n,t){return Xin(new nn,new uw(n),t)}function PG(n){return null==n?Set:new vy(kW(n))}function CG(n,t){return cL(t,22)&&SN(n,BB(t,22))}function IG(n,t){return cL(t,22)&&$tn(n,BB(t,22))}function OG(n){return H$n(n,26)*rYn+H$n(n,27)*cYn}function AG(n){return Array.isArray(n)&&n.im===I}function $G(n){n.b?$G(n.b):n.d.dc()&&n.f.c.Bc(n.e)}function LG(n,t){UR(n.c,t),n.b.c+=t.a,n.b.d+=t.b}function NG(n,t){LG(n,XR(new xC(t.a,t.b),n.c))}function xG(n,t){this.b=new YT,this.a=n,this.c=t}function DG(){this.b=new Ot,this.c=new lY(this)}function RG(){this.d=new mn,this.e=new fY(this)}function KG(){KZ(),this.f=new YT,this.e=new YT}function _G(){BZ(),this.k=new xp,this.d=new Rv}function FG(){FG=O,bOt=new XA((sWn(),aPt),0)}function BG(){BG=O,qnt=new fG(x8(Ant,HWn,1,0,5,1))}function HG(n,t,e){VAn(e,n,1),WB(t,new cP(e,n))}function qG(n,t,e){Fkn(e,n,1),WB(t,new bP(e,n))}function GG(n,t,e){return TU(n,new xS(t.a,e.a))}function zG(n,t,e){return-E$(n.f[t.p],n.f[e.p])}function UG(n,t,e){var i;n&&((i=n.i).c=t,i.b=e)}function XG(n,t,e){var i;n&&((i=n.i).d=t,i.a=e)}function WG(n,t,e){return n.a=-1,WN(n,t.g+1,e),n}function VG(n,t,e){return e=T_n(n,BB(t,49),7,e)}function QG(n,t,e){return e=T_n(n,BB(t,49),3,e)}function YG(n,t,e){this.a=n,LL.call(this,t,e,22)}function JG(n,t,e){this.a=n,LL.call(this,t,e,14)}function ZG(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function nz(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function tz(n,t){0!=(t.Bb&h6n)&&!n.a.o&&(n.a.o=t)}function ez(n){return null!=n&&DU(n)&&!(n.im===I)}function iz(n){return!Array.isArray(n)&&n.im===I}function rz(n){return cL(n,15)?BB(n,15).Yc():n.Kc()}function cz(n){return n.Qc(x8(Ant,HWn,1,n.gc(),5,1))}function az(n,t){return lgn(F7(n,t))?t.Qh():null}function uz(n){n?Fmn(n,($T(),Btt),""):$T()}function oz(n){this.a=(BG(),qnt),this.d=BB(yX(n),47)}function sz(n,t,e,i){this.a=n,W6.call(this,n,t,e,i)}function hz(n){eS(),this.a=0,this.b=n-1,this.c=1}function fz(n){V$(this),this.g=n,jQ(this),this._d()}function lz(n){return n.c?n.c:n.c=n.Id()}function bz(n){return n.d?n.d:n.d=n.Jd()}function wz(n){return n.c||(n.c=n.Dd())}function dz(n){return n.f||(n.f=n.Dc())}function gz(n){return n.i||(n.i=n.bc())}function pz(n){return wWn(),new vJ(10,n,0)}function vz(n){return JO(n)?""+n:GDn(n)}function mz(n){if(n.e.j!=n.d)throw Hp(new vv)}function yz(n,t){return uan(lSn(JO(n)?Pan(n):n,t))}function kz(n,t){return uan(jAn(JO(n)?Pan(n):n,t))}function jz(n,t){return uan(JSn(JO(n)?Pan(n):n,t))}function Ez(n,t){return bR((kW(n),n),(kW(t),t))}function Tz(n,t){return Pln((kW(n),n),(kW(t),t))}function Mz(n,t){return yX(t),n.a.Ad(t)&&!n.b.Ad(t)}function Sz(n,t){return M$(n.l&t.l,n.m&t.m,n.h&t.h)}function Pz(n,t){return M$(n.l|t.l,n.m|t.m,n.h|t.h)}function Cz(n,t){return M$(n.l^t.l,n.m^t.m,n.h^t.h)}function Iz(n,t){return $fn(n,(kW(t),new rw(t)))}function Oz(n,t){return $fn(n,(kW(t),new cw(t)))}function Az(n){return gcn(),0!=BB(n,11).e.c.length}function $z(n){return gcn(),0!=BB(n,11).g.c.length}function Lz(n,t){return Irn(),Pln(t.a.o.a,n.a.o.a)}function Nz(n,t,e){return TUn(n,BB(t,11),BB(e,11))}function xz(n){return n.e?D6(n.e):null}function Dz(n){n.d||(n.d=n.b.Kc(),n.c=n.b.gc())}function Rz(n,t,e){n.a.Mb(e)&&(n.b=!0,t.td(e))}function Kz(n,t){if(n<0||n>=t)throw Hp(new Sv)}function _z(n,t,e){return $X(t,0,Hq(t[0],e[0])),t}function Fz(n,t,e){t.Ye(e,Gy(MD(RX(n.b,e)))*n.a)}function Bz(n,t,e){return jDn(),Dcn(n,t)&&Dcn(n,e)}function Hz(n){return lIn(),!n.Hc(eIt)&&!n.Hc(rIt)}function qz(n){return new xC(n.c+n.b/2,n.d+n.a/2)}function Gz(n,t){return t.kh()?tfn(n.b,BB(t,49)):t}function zz(n,t){this.e=n,this.d=0!=(64&t)?t|hVn:t}function Uz(n,t){this.c=0,this.d=n,this.b=64|t|hVn}function Xz(n){this.b=new J6(11),this.a=(PQ(),n)}function Wz(n){this.b=null,this.a=(PQ(),n||wet)}function Vz(n){this.a=rvn(n.a),this.b=new t_(n.b)}function Qz(n){this.b=n,cx.call(this,n),ML(this)}function Yz(n){this.b=n,ux.call(this,n),SL(this)}function Jz(n,t,e){this.a=n,eK.call(this,t,e,5,6)}function Zz(n,t,e,i){this.b=n,$L.call(this,t,e,i)}function nU(n,t,e,i,r){k9.call(this,n,t,e,i,r,-1)}function tU(n,t,e,i,r){j9.call(this,n,t,e,i,r,-1)}function eU(n,t,e,i){$L.call(this,n,t,e),this.b=i}function iU(n,t,e,i){yH.call(this,n,t,e),this.b=i}function rU(n){NI.call(this,n,!1),this.a=!1}function cU(n,t){this.b=n,hl.call(this,n.b),this.a=t}function aU(n,t){WX(),jT.call(this,n,sfn(new Jy(t)))}function uU(n,t){return wWn(),new cW(n,t,0)}function oU(n,t){return wWn(),new cW(6,n,t)}function sU(n,t){return mK(n.substr(0,t.length),t)}function hU(n,t){return XI(t)?eY(n,t):!!AY(n.f,t)}function fU(n,t){for(kW(t);n.Ob();)t.td(n.Pb())}function lU(n,t,e){ODn(),this.e=n,this.d=t,this.a=e}function bU(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function wU(n){var t;for(t=n;t.f;)t=t.f;return t}function dU(n){var t;return Px(null!=(t=Eon(n))),t}function gU(n){var t;return Px(null!=(t=mln(n))),t}function pU(n,t){var e;return w6(t,e=n.a.gc()),e-t}function vU(n,t){var e;for(e=0;e<t;++e)n[e]=!1}function mU(n,t,e,i){var r;for(r=t;r<e;++r)n[r]=i}function yU(n,t,e,i){ihn(t,e,n.length),mU(n,t,e,i)}function kU(n,t,e){Kz(e,n.a.c.length),c5(n.a,e,t)}function jU(n,t,e){this.c=n,this.a=t,SQ(),this.b=e}function EU(n,t,e){var i;return i=n.b[t],n.b[t]=e,i}function TU(n,t){return null==n.a.zc(t,n)}function MU(n){if(!n)throw Hp(new yv);return n.d}function SU(n,t){if(null==n)throw Hp(new Hy(t))}function PU(n,t){return!!t&&Frn(n,t)}function CU(n,t,e){return ehn(n,t.g,e),orn(n.c,t),n}function IU(n){return Mzn(n,(Ffn(),_Pt)),n.d=!0,n}function OU(n){return!n.j&&yb(n,FKn(n.g,n.b)),n.j}function AU(n){Mx(-1!=n.b),s6(n.c,n.a=n.b),n.b=-1}function $U(n){n.f=new eA(n),n.g=new iA(n),oY(n)}function LU(n){return new Rq(null,qU(n,n.length))}function NU(n){return new oz(new WL(n.a.length,n.a))}function xU(n){return M$(~n.l&SQn,~n.m&SQn,~n.h&PQn)}function DU(n){return typeof n===AWn||typeof n===xWn}function RU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function KU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function _U(n,t){return n>0?e.Math.log(n/t):-100}function FU(n,t){return Vhn(n,t)<0?-1:Vhn(n,t)>0?1:0}function BU(n,t,e){return SHn(n,BB(t,46),BB(e,167))}function HU(n,t){return BB(wz(lz(n.a)).Xb(t),42).cd()}function qU(n,t){return ptn(t,n.length),new BH(n,t)}function GU(n,t){this.d=n,AL.call(this,n),this.e=t}function zU(n){this.d=(kW(n),n),this.a=0,this.c=bVn}function UU(n,t){Ap.call(this,1),this.a=n,this.b=t}function XU(n,t){return n.c?XU(n.c,t):WB(n.b,t),n}function WU(n,t,e){var i;return i=dnn(n,t),r4(n,t,e),i}function VU(n,t){return m7(n.slice(0,t),n)}function QU(n,t,e){var i;for(i=0;i<t;++i)$X(n,i,e)}function YU(n,t,e,i,r){for(;t<e;)i[r++]=fV(n,t++)}function JU(n,t){return Pln(n.c.c+n.c.b,t.c.c+t.c.b)}function ZU(n,t){return null==Mon(n.a,t,(hN(),ptt))}function nX(n,t){r5(n.d,t,n.b.b,n.b),++n.a,n.c=null}function tX(n,t){J$(n,cL(t,153)?t:BB(t,1937).gl())}function eX(n,t){JT($V(n.Oc(),new Yr),new Id(t))}function iX(n,t,e,i,r){NEn(n,BB(h6(t.k,e),15),e,i,r)}function rX(n){n.s=NaN,n.c=NaN,ZOn(n,n.e),ZOn(n,n.j)}function cX(n){n.a=null,n.e=null,$U(n.b),n.d=0,++n.c}function aX(n){return e.Math.abs(n.d.e-n.e.e)-n.a}function uX(n,t,e){return BB(n.c._c(t,BB(e,133)),42)}function oX(){return ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])}function sX(n){return MQ(),JJ(PMn(n))==JJ(OMn(n))}function hX(n){$R.call(this),this.a=n,WB(n.a,this)}function fX(n,t){this.d=Sln(n),this.c=t,this.a=.5*t}function lX(){v4.call(this),this.a=!0,this.b=!0}function bX(n){return(null==n.i&&qFn(n),n.i).length}function wX(n){return cL(n,99)&&0!=(BB(n,18).Bb&h6n)}function dX(n,t){++n.j,sTn(n,n.i,t),zIn(n,BB(t,332))}function gX(n,t){return t=n.nk(null,t),$Tn(n,null,t)}function pX(n,t){return n.hi()&&(t=nZ(n,t)),n.Wh(t)}function vX(n,t,e){var i;return Qen(e,i=mX(n,t)),i}function mX(n,t){var e;return(e=new pon).j=n,e.d=t,e}function yX(n){if(null==n)throw Hp(new gv);return n}function kX(n){return n.j||(n.j=new wl(n))}function jX(n){return n.f||(n.f=new UL(n))}function EX(n){return n.k||(n.k=new Yf(n))}function TX(n){return n.k||(n.k=new Yf(n))}function MX(n){return n.g||(n.g=new Qf(n))}function SX(n){return n.i||(n.i=new nl(n))}function PX(n){return n.d||(n.d=new il(n))}function CX(n){return yX(n),cL(n,475)?BB(n,475):Bbn(n)}function IX(n){return cL(n,607)?n:new bJ(n)}function OX(n,t){return w2(t,n.c.b.c.gc()),new sT(n,t)}function AX(n,t,e){return wWn(),new T0(n,t,e)}function $X(n,t,e){return Sx(null==e||Q_n(n,e)),n[t]=e}function LX(n,t){var e;return w2(t,e=n.a.gc()),e-1-t}function NX(n,t){return n.a+=String.fromCharCode(t),n}function xX(n,t){return n.a+=String.fromCharCode(t),n}function DX(n,t){for(kW(t);n.c<n.d;)n.ze(t,n.c++)}function RX(n,t){return XI(t)?SJ(n,t):qI(AY(n.f,t))}function KX(n,t){return MQ(),n==PMn(t)?OMn(t):PMn(t)}function _X(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function FX(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function BX(n){this.b=new Np,this.a=new Np,this.c=n}function HX(n){this.c=new Gj,this.a=new Np,this.b=n}function qX(n){$R.call(this),this.a=new Gj,this.c=n}function GX(n){if(null==n)throw Hp(new gv);this.a=n}function zX(n){Mv(),this.b=new Np,this.a=n,vGn(this,n)}function UX(n){this.c=n,this.a=new YT,this.b=new YT}function XX(){XX=O,ott=new Ml(!1),stt=new Ml(!0)}function WX(){WX=O,s_(),Fnt=new SY((SQ(),SQ(),set))}function VX(){VX=O,s_(),Vnt=new vS((SQ(),SQ(),fet))}function QX(){QX=O,t$t=GIn(),gWn(),i$t&&Rkn()}function YX(n,t){return Irn(),BB(oV(n,t.d),15).Fc(t)}function JX(n,t,e,i){return 0==e||(e-i)/e<n.e||t>=n.g}function ZX(n,t,e){return NRn(n,yrn(n,t,e))}function nW(n,t){var e;dnn(n,e=n.a.length),r4(n,e,t)}function tW(n,t){console[n].call(console,t)}function eW(n,t){var e;++n.j,e=n.Vi(),n.Ii(n.oi(e,t))}function iW(n,t,e){BB(t.b,65),Otn(t.a,new EB(n,e,t))}function rW(n,t,e){jp.call(this,t),this.a=n,this.b=e}function cW(n,t,e){Ap.call(this,n),this.a=t,this.b=e}function aW(n,t,e){this.a=n,kp.call(this,t),this.b=e}function uW(n,t,e){this.a=n,H2.call(this,8,t,null,e)}function oW(n){this.a=(kW(_9n),_9n),this.b=n,new Nm}function sW(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function hW(n){this.c=n,this.b=n.a.d.a,bD(n.a.e,this)}function fW(n){Mx(-1!=n.c),n.d.$c(n.c),n.b=n.c,n.c=-1}function lW(n){return e.Math.sqrt(n.a*n.a+n.b*n.b)}function bW(n,t){return Kz(t,n.a.c.length),xq(n.a,t)}function wW(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)}function dW(n){return 0>=n?new VT:Win(n-1)}function gW(n){return!!SNt&&eY(SNt,n)}function pW(n){return n?n.dc():!n.Kc().Ob()}function vW(n){return!n.a&&n.c?n.c.b:n.a}function mW(n){return!n.a&&(n.a=new $L(LOt,n,4)),n.a}function yW(n){return!n.d&&(n.d=new $L(VAt,n,1)),n.d}function kW(n){if(null==n)throw Hp(new gv);return n}function jW(n){n.c?n.c.He():(n.d=!0,QNn(n))}function EW(n){n.c?EW(n.c):(Qln(n),n.d=!0)}function TW(n){TV(n.a),n.b=x8(Ant,HWn,1,n.b.length,5,1)}function MW(n,t){return E$(t.j.c.length,n.j.c.length)}function SW(n,t){n.c<0||n.b.b<n.c?fO(n.b,t):n.a._e(t)}function PW(n,t){var e;(e=n.Yg(t))>=0?n.Bh(e):cIn(n,t)}function CW(n){return n.c.i.c==n.d.i.c}function IW(n){if(4!=n.p)throw Hp(new dv);return n.e}function OW(n){if(3!=n.p)throw Hp(new dv);return n.e}function AW(n){if(6!=n.p)throw Hp(new dv);return n.f}function $W(n){if(6!=n.p)throw Hp(new dv);return n.k}function LW(n){if(3!=n.p)throw Hp(new dv);return n.j}function NW(n){if(4!=n.p)throw Hp(new dv);return n.j}function xW(n){return!n.b&&(n.b=new Tp(new xm)),n.b}function DW(n){return-2==n.c&&gb(n,uMn(n.g,n.b)),n.c}function RW(n,t){var e;return(e=mX("",n)).n=t,e.i=1,e}function KW(n,t){LG(BB(t.b,65),n),Otn(t.a,new Aw(n))}function _W(n,t){f9((!n.a&&(n.a=new oR(n,n)),n.a),t)}function FW(n,t){this.b=n,GU.call(this,n,t),ML(this)}function BW(n,t){this.b=n,RK.call(this,n,t),SL(this)}function HW(n,t,e,i){vT.call(this,n,t),this.d=e,this.a=i}function qW(n,t,e,i){vT.call(this,n,e),this.a=t,this.f=i}function GW(n,t){W$.call(this,Vin(yX(n),yX(t))),this.a=t}function zW(){dMn.call(this,S7n,(rE(),dLt)),Wqn(this)}function UW(){dMn.call(this,V9n,(iE(),n$t)),OHn(this)}function XW(){gT.call(this,"DELAUNAY_TRIANGULATION",0)}function WW(n){return String.fromCharCode.apply(null,n)}function VW(n,t,e){return XI(t)?mZ(n,t,e):jCn(n.f,t,e)}function QW(n){return SQ(),n?n.ve():(PQ(),PQ(),get)}function YW(n,t,e){return Nun(),e.pg(n,BB(t.cd(),146))}function JW(n,t){return nq(),new svn(new rN(n),new iN(t))}function ZW(n){return lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))}function nV(){nV=O,Bnt=new hy(Pun(Gk(Hnt,1),kVn,42,0,[]))}function tV(n){return!n.d&&(n.d=new Hb(n.c.Cc())),n.d}function eV(n){return!n.a&&(n.a=new Lk(n.c.vc())),n.a}function iV(n){return!n.b&&(n.b=new Ak(n.c.ec())),n.b}function rV(n,t){for(;t-- >0;)n=n<<1|(n<0?1:0);return n}function cV(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)}function aV(n,t){return hN(),BB(t.b,19).a<n}function uV(n,t){return hN(),BB(t.a,19).a<n}function oV(n,t){return CG(n.a,t)?n.b[BB(t,22).g]:null}function sV(n,t,e,i){n.a=fx(n.a,0,t)+""+i+nO(n.a,e)}function hV(n,t){n.u.Hc((lIn(),eIt))&&PIn(n,t),z6(n,t)}function fV(n,t){return b1(t,n.length),n.charCodeAt(t)}function lV(){dy.call(this,"There is no more element.")}function bV(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function wV(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function dV(n,t,e,i){return Rcn(n,t,e,!1),Zfn(n,i),n}function gV(n){return n.j.c=x8(Ant,HWn,1,0,5,1),n.a=-1,n}function pV(n){return!n.c&&(n.c=new hK(KOt,n,5,8)),n.c}function vV(n){return!n.b&&(n.b=new hK(KOt,n,4,7)),n.b}function mV(n){return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n}function yV(n){return!n.c&&(n.c=new eU(XOt,n,9,9)),n.c}function kV(n){return n.e==C7n&&vb(n,Tgn(n.g,n.b)),n.e}function jV(n){return n.f==C7n&&mb(n,pkn(n.g,n.b)),n.f}function EV(n){var t;return!(t=n.b)&&(n.b=t=new Jf(n)),t}function TV(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function MV(n){if(zbn(n.d),n.d.d!=n.c)throw Hp(new vv)}function SV(n,t){this.b=n,this.c=t,this.a=new QT(this.b)}function PV(n,t,e){this.a=XVn,this.d=n,this.b=t,this.c=e}function CV(n,t){this.d=(kW(n),n),this.a=16449,this.c=t}function IV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function OV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function AV(n,t){return Qln(n),new Rq(n,new Q9(t,n.a))}function $V(n,t){return Qln(n),new Rq(n,new M6(t,n.a))}function LV(n,t){return Qln(n),new AD(n,new E6(t,n.a))}function NV(n,t){return Qln(n),new $D(n,new T6(t,n.a))}function xV(n,t){return new pY(BB(yX(n),62),BB(yX(t),62))}function DV(n,t){return jM(),Pln((kW(n),n),(kW(t),t))}function RV(){return wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])}function KV(){return CM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])}function _V(){return IM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])}function FV(){return OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])}function BV(n){this.a=new Np,this.e=x8(ANt,sVn,48,n,0,2)}function HV(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function qV(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function GV(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function zV(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function UV(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function XV(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function WV(n,t,e,i){gT.call(this,n,t),this.a=e,this.b=i}function VV(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function QV(n,t,e){EHn(n.a,e),nun(e),AAn(n.b,e),rqn(t,e)}function YV(n,t,e){var i;return i=$Un(n),t.Kh(e,i)}function JV(n,t){var e,i;return(e=n/t)>(i=CJ(e))&&++i,i}function ZV(n){var t;return cen(t=new Kp,n),t}function nQ(n){var t;return DMn(t=new Kp,n),t}function tQ(n,t){return Kcn(t,RX(n.f,t)),null}function eQ(n){return Yin(n)||null}function iQ(n){return!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b}function rQ(n){return null!=n&&xT(jAt,n.toLowerCase())}function cQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function aQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function uQ(n,t){return Pln(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function oQ(n,t){return Pln(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function sQ(n,t,e){e.a?Cen(n,t.b-n.f/2):Pen(n,t.a-n.g/2)}function hQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function fQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function lQ(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function bQ(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function wQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function dQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function gQ(n,t){this.a=n,OD.call(this,n,BB(n.d,15).Zc(t))}function pQ(n){this.f=n,this.c=this.f.e,n.f>0&&ujn(this)}function vQ(n,t,e,i){this.b=n,this.c=i,vO.call(this,t,e)}function mQ(n){return Px(n.b<n.d.gc()),n.d.Xb(n.c=n.b++)}function yQ(n){n.a.a=n.c,n.c.b=n.a,n.a.b=n.c.a=null,n.b=0}function kQ(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function jQ(n){return n.n&&(n.e!==FVn&&n._d(),n.j=null),n}function EQ(n){return JH(null==n||DU(n)&&!(n.im===I)),n}function TQ(n){this.b=new Np,gun(this.b,this.b),this.a=n}function MQ(){MQ=O,Sct=new Np,Mct=new xp,Tct=new Np}function SQ(){SQ=O,set=new S,het=new C,fet=new M}function PQ(){PQ=O,wet=new R,det=new R,get=new K}function CQ(){CQ=O,hit=new gn,lit=new RG,fit=new pn}function IQ(){256==ait&&(iit=rit,rit=new r,ait=0),++ait}function OQ(n){return n.f||(n.f=new pT(n,n.c))}function AQ(n){return QIn(n)&&qy(TD(ZAn(n,(HXn(),dgt))))}function $Q(n,t){return JIn(n,BB(mMn(t,(HXn(),Wgt)),19),t)}function LQ(n,t){return Tfn(n.j,t.s,t.c)+Tfn(t.e,n.s,n.c)}function NQ(n,t){n.e&&!n.e.a&&(Fp(n.e,t),NQ(n.e,t))}function xQ(n,t){n.d&&!n.d.a&&(Fp(n.d,t),xQ(n.d,t))}function DQ(n,t){return-Pln(iG(n)*eG(n),iG(t)*eG(t))}function RQ(n){return BB(n.cd(),146).tg()+":"+Bbn(n.dd())}function KQ(n){var t;G_(),(t=BB(n.g,10)).n.a=n.d.c+t.d.b}function _Q(n,t,e){return MM(),xbn(BB(RX(n.e,t),522),e)}function FQ(n,t){return tsn(n),tsn(t),Py(BB(n,22),BB(t,22))}function BQ(n,t,e){n.i=0,n.e=0,t!=e&&Xon(n,t,e)}function HQ(n,t,e){n.i=0,n.e=0,t!=e&&Won(n,t,e)}function qQ(n,t,e){rtn(n,t,new Sl(XK(e)))}function GQ(n,t,e,i,r,c){j9.call(this,n,t,e,i,r,c?-2:-1)}function zQ(n,t,e,i){LI.call(this,t,e),this.b=n,this.a=i}function UQ(n,t){new YT,this.a=new km,this.b=n,this.c=t}function XQ(n,t){return BB(mMn(n,(hWn(),clt)),15).Fc(t),t}function WQ(n,t){if(null==n)throw Hp(new Hy(t));return n}function VQ(n){return!n.q&&(n.q=new eU(QAt,n,11,10)),n.q}function QQ(n){return!n.s&&(n.s=new eU(FAt,n,21,17)),n.s}function YQ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a}function JQ(n){return cL(n,14)?new $q(BB(n,14)):qB(n.Kc())}function ZQ(n){return new qL(n,n.e.Hd().gc()*n.c.Hd().gc())}function nY(n){return new GL(n,n.e.Hd().gc()*n.c.Hd().gc())}function tY(n){return n&&n.hashCode?n.hashCode():PN(n)}function eY(n,t){return null==t?!!AY(n.f,null):MG(n.g,t)}function iY(n){return yX(n),emn(new oz(ZL(n.a.Kc(),new h)))}function rY(n){return SQ(),cL(n,54)?new $k(n):new bN(n)}function cY(n,t,e){return!!n.f&&n.f.Ne(t,e)}function aY(n,t){return n.a=fx(n.a,0,t)+""+nO(n.a,t+1),n}function uY(n,t){var e;return(e=eL(n.a,t))&&(t.d=null),e}function oY(n){var t,e;t=0|(e=n).$modCount,e.$modCount=t+1}function sY(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function hY(n){this.b=n,this.a=new dE(BB(yX(new tt),62))}function fY(n){this.c=n,this.b=new dE(BB(yX(new vn),62))}function lY(n){this.c=n,this.b=new dE(BB(yX(new It),62))}function bY(){this.a=new Qv,this.b=new hm,this.d=new Dt}function wY(){this.a=new km,this.b=(lin(3,AVn),new J6(3))}function dY(){this.b=new Rv,this.d=new YT,this.e=new om}function gY(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function pY(n,t){zm.call(this,new Wz(n)),this.a=n,this.b=t}function vY(){iSn(this,new Rf),this.wb=(QX(),t$t),iE()}function mY(n){OTn(n,"No crossing minimization",1),HSn(n)}function yY(n){Dk(),e.setTimeout((function(){throw n}),0)}function kY(n){return n.u||(P5(n),n.u=new uR(n,n)),n.u}function jY(n){return BB(yan(n,16),26)||n.zh()}function EY(n,t){return cL(t,146)&&mK(n.b,BB(t,146).tg())}function TY(n,t){return n.a?t.Wg().Kc():BB(t.Wg(),69).Zh()}function MY(n){return n.k==(uSn(),Cut)&&Lx(n,(hWn(),zft))}function SY(n){this.a=(SQ(),cL(n,54)?new $k(n):new bN(n))}function PY(){var n,t;PY=O,t=!Ddn(),n=new d,ett=t?new E:n}function CY(n,t){var e;return e=nE(n.gm),null==t?e:e+": "+t}function IY(n,t){var e;return j4(e=n.b.Qc(t),n.b.gc()),e}function OY(n,t){if(null==n)throw Hp(new Hy(t));return n}function AY(n,t){return hhn(n,t,pZ(n,null==t?0:n.b.se(t)))}function $Y(n,t,e){return e>=0&&mK(n.substr(e,t.length),t)}function LY(n,t,e,i,r,c,a){return new b4(n.e,t,e,i,r,c,a)}function NY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function xY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function DY(n,t){this.g=n,this.d=Pun(Gk(Out,1),a1n,10,0,[t])}function RY(n,t){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t}function KY(n,t){NR.call(this),xtn(this),this.a=n,this.c=t}function _Y(n,t,e,i){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i)}function FY(n,t,e,i){$X(n.c[t.g],t.g,e),$X(n.b[t.g],t.g,i)}function BY(){return A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])}function HY(){return g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])}function qY(){return _nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])}function GY(){return V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])}function zY(){return z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])}function UY(){return U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])}function XY(){return Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])}function WY(){return O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])}function VY(){return gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])}function QY(){return oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])}function YY(){return dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])}function JY(){return B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])}function ZY(){return sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])}function nJ(){return Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])}function tJ(){return D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])}function eJ(){return Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])}function iJ(){return $6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])}function rJ(){return hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])}function cJ(){return Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])}function aJ(){return Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])}function uJ(){return Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])}function oJ(n,t,e,i){return e>=0?n.jh(t,e,i):n.Sg(null,e,i)}function sJ(n){return 0==n.b.b?n.a.$e():dH(n.b)}function hJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.f)}function fJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.k)}function lJ(n){return GI(n.a)===GI((wcn(),I$t))&&Rqn(n),n.a}function bJ(n){this.a=BB(yX(n),271),this.b=(SQ(),new dN(n))}function wJ(n,t){Zl(this,new xC(n.a,n.b)),nb(this,zB(t))}function dJ(){dJ=O,Lyt=new oC(cJn,0),Nyt=new oC(aJn,1)}function gJ(){gJ=O,tyt=new cC(aJn,0),nyt=new cC(cJn,1)}function pJ(){ay.call(this,new XT(etn(12))),aN(!0),this.a=2}function vJ(n,t,e){wWn(),Ap.call(this,n),this.b=t,this.a=e}function mJ(n,t,e){f$(),jp.call(this,t),this.a=n,this.b=e}function yJ(n){NR.call(this),xtn(this),this.a=n,this.c=!0}function kJ(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function jJ(n){pin(n.a),RA(n.a),twn(new Pw(n.a))}function EJ(n,t){oRn(n,!0),Otn(n.e.wf(),new $_(n,!0,t))}function TJ(n,t){return c4(t),Yen(n,x8(ANt,hQn,25,t,15,1),t)}function MJ(n,t){return MQ(),n==JJ(PMn(t))||n==JJ(OMn(t))}function SJ(n,t){return null==t?qI(AY(n.f,null)):hS(n.g,t)}function PJ(n){return 0==n.b?null:(Px(0!=n.b),Atn(n,n.a.a))}function CJ(n){return 0|Math.max(Math.min(n,DWn),-2147483648)}function IJ(n,t){var e=Znt[n.charCodeAt(0)];return null==e?n:e}function OJ(n,t){return WQ(n,"set1"),WQ(t,"set2"),new ET(n,t)}function AJ(n,t){return UR(qx(nen(n.f,t)),n.f.d)}function $J(n,t){var e;return YGn(n,t,e=new q),e.d}function LJ(n,t,e,i){var r;r=new FR,t.a[e.g]=r,mG(n.b,i,r)}function NJ(n,t,e){var i;(i=n.Yg(t))>=0?n.sh(i,e):TLn(n,t,e)}function xJ(n,t,e){hZ(),n&&VW(fAt,n,t),n&&VW(hAt,n,e)}function DJ(n,t,e){this.i=new Np,this.b=n,this.g=t,this.a=e}function RJ(n,t,e){this.c=new Np,this.e=n,this.f=t,this.b=e}function KJ(n,t,e){this.a=new Np,this.e=n,this.f=t,this.c=e}function _J(n,t){V$(this),this.f=t,this.g=n,jQ(this),this._d()}function FJ(n,t){var e;e=n.q.getHours(),n.q.setDate(t),lBn(n,e)}function BJ(n,t){var e;for(yX(t),e=n.a;e;e=e.c)t.Od(e.g,e.i)}function HJ(n){var t;return $on(t=new bE(etn(n.length)),n),t}function qJ(n){function t(){}return t.prototype=n||{},new t}function GJ(n,t){return!!wun(n,t)&&(ein(n),!0)}function zJ(n,t){if(null==t)throw Hp(new gv);return ugn(n,t)}function UJ(n){if(n.qe())return null;var t=n.n;return SWn[t]}function XJ(n){return n.Db>>16!=3?null:BB(n.Cb,33)}function WJ(n){return n.Db>>16!=9?null:BB(n.Cb,33)}function VJ(n){return n.Db>>16!=6?null:BB(n.Cb,79)}function QJ(n){return n.Db>>16!=7?null:BB(n.Cb,235)}function YJ(n){return n.Db>>16!=7?null:BB(n.Cb,160)}function JJ(n){return n.Db>>16!=11?null:BB(n.Cb,33)}function ZJ(n,t){var e;return(e=n.Yg(t))>=0?n.lh(e):qIn(n,t)}function nZ(n,t){var e;return oMn(e=new Lq(t),n),new t_(e)}function tZ(n){var t;return t=n.d,t=n.si(n.f),f9(n,t),t.Ob()}function eZ(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function iZ(n,t){return e.Math.abs(n)<e.Math.abs(t)?n:t}function rZ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a.i>0}function cZ(){this.a=new fA,this.e=new Rv,this.g=0,this.i=0}function aZ(n){this.a=n,this.b=x8(_mt,sVn,1944,n.e.length,0,2)}function uZ(n,t,e){var i;i=Non(n,t,e),n.b=new mrn(i.c.length)}function oZ(){oZ=O,ryt=new rC(pJn,0),cyt=new rC("UP",1)}function sZ(){sZ=O,Rkt=new bC(U3n,0),Kkt=new bC("FAN",1)}function hZ(){hZ=O,fAt=new xp,hAt=new xp,FI(yet,new wo)}function fZ(n){if(0!=n.p)throw Hp(new dv);return JI(n.f,0)}function lZ(n){if(0!=n.p)throw Hp(new dv);return JI(n.k,0)}function bZ(n){return n.Db>>16!=3?null:BB(n.Cb,147)}function wZ(n){return n.Db>>16!=6?null:BB(n.Cb,235)}function dZ(n){return n.Db>>16!=17?null:BB(n.Cb,26)}function gZ(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.le(t))}function pZ(n,t){var e;return null==(e=n.a.get(t))?new Array:e}function vZ(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),lBn(n,e)}function mZ(n,t,e){return null==t?jCn(n.f,null,e):ubn(n.g,t,e)}function yZ(n,t,e,i,r,c){return new N7(n.e,t,n.aj(),e,i,r,c)}function kZ(n,t,e){return n.a=fx(n.a,0,t)+""+e+nO(n.a,t),n}function jZ(n,t,e){return WB(n.a,(nV(),zvn(t,e),new vT(t,e))),n}function EZ(n){return oN(n.c),n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function TZ(n){return oN(n.e),n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function MZ(n,t){n.d&&y7(n.d.e,n),n.d=t,n.d&&WB(n.d.e,n)}function SZ(n,t){n.c&&y7(n.c.g,n),n.c=t,n.c&&WB(n.c.g,n)}function PZ(n,t){n.c&&y7(n.c.a,n),n.c=t,n.c&&WB(n.c.a,n)}function CZ(n,t){n.i&&y7(n.i.j,n),n.i=t,n.i&&WB(n.i.j,n)}function IZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function OZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function AZ(n,t){this.a=n,this.c=B$(this.a),this.b=new gY(t)}function $Z(n){return Qln(n),AV(n,new vw(new Rv))}function LZ(n,t){if(n<0||n>t)throw Hp(new Ay(jYn+n+EYn+t))}function NZ(n,t){return IG(n.a,t)?EU(n,BB(t,22).g,null):null}function xZ(n){return Shn(),hN(),0!=BB(n.a,81).d.e}function DZ(){DZ=O,Xnt=lhn((ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])))}function RZ(){RZ=O,pmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function KZ(){KZ=O,vmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function _Z(){_Z=O,ymt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function FZ(){FZ=O,zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function BZ(){BZ=O,Qmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function HZ(){HZ=O,Zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function qZ(){qZ=O,oyt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function GZ(){GZ=O,zkt=WG(new B2,(zyn(),Fyt),(DPn(),zyt))}function zZ(n,t,e,i){this.c=n,this.d=i,WZ(this,t),VZ(this,e)}function UZ(n){this.c=new YT,this.b=n.b,this.d=n.c,this.a=n.a}function XZ(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function WZ(n,t){n.a&&y7(n.a.k,n),n.a=t,n.a&&WB(n.a.k,n)}function VZ(n,t){n.b&&y7(n.b.f,n),n.b=t,n.b&&WB(n.b.f,n)}function QZ(n,t){iW(n,n.b,n.c),BB(n.b.b,65),t&&BB(t.b,65).b}function YZ(n,t){zln(n,t),cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),2)}function JZ(n,t){cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,t)}function ZZ(n,t){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,t)}function n1(n,t){return ZM(),hnn(t)?new lq(t,n):new xI(t,n)}function t1(n,t){null!=t.c&&nW(n,new GX(t.c))}function e1(n){var t;return iE(),cen(t=new Kp,n),t}function i1(n){var t;return iE(),cen(t=new Kp,n),t}function r1(n,t){var e;return e=new HX(n),t.c[t.c.length]=e,e}function c1(n,t){var e;return(e=BB(lfn(OQ(n.a),t),14))?e.gc():0}function a1(n){return Qln(n),PQ(),PQ(),ytn(n,det)}function u1(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function o1(n,t){Um.call(this,new XT(etn(n))),lin(t,oVn),this.a=t}function s1(n,t,e){Hfn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function h1(n,t,e){var i;Hfn(t,e,n.c.length),i=e-t,PE(n.c,t,i)}function f1(n,t){hL(n,dG(e0(kz(t,24),sYn)),dG(e0(t,sYn)))}function l1(n,t){if(n<0||n>=t)throw Hp(new Ay(jYn+n+EYn+t))}function b1(n,t){if(n<0||n>=t)throw Hp(new Ok(jYn+n+EYn+t))}function w1(n,t){this.b=(kW(n),n),this.a=0==(t&_Qn)?64|t|hVn:t}function d1(n){DA(this),Pv(this.a,kon(e.Math.max(8,n))<<1)}function g1(n){return Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))}function p1(){return qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])}function v1(){return Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])}function m1(){return J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])}function y1(){return G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])}function k1(){return Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])}function j1(){return q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Iat,Aat])}function E1(){return Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])}function T1(){return Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])}function M1(){return uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])}function S1(){return Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])}function P1(){return Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])}function C1(){return z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Cft,Sft])}function I1(){return Kan(),Pun(Gk(Ift,1),$Vn,292,0,[jft,Eft,kft])}function O1(){return ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])}function A1(){return mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])}function $1(){return Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])}function L1(){return $un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])}function N1(){return Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])}function x1(){return dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])}function D1(){return oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])}function R1(){return Cbn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])}function K1(){return Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])}function _1(){return Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])}function F1(){return Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])}function B1(){return Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])}function H1(){return ufn(),Pun(Gk(SCt,1),$Vn,334,0,[vCt,pCt,mCt])}function q1(){return Rtn(),Pun(Gk(nCt,1),$Vn,272,0,[zPt,UPt,XPt])}function G1(n,t){return k$n(n,t,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z1(n,t,e){var i;return(i=cHn(n,t,!1)).b<=t&&i.a<=e}function U1(n,t,e){var i;(i=new ca).b=t,i.a=e,++t.b,WB(n.d,i)}function X1(n,t){var e;return Tx(!!(e=(kW(n),n).g)),kW(t),e(t)}function W1(n,t){var e,i;return i=pU(n,t),e=n.a.Zc(i),new kT(n,e)}function V1(n){return n.Db>>16!=6?null:BB(cAn(n),235)}function Q1(n){if(2!=n.p)throw Hp(new dv);return dG(n.f)&QVn}function Y1(n){if(2!=n.p)throw Hp(new dv);return dG(n.k)&QVn}function J1(n){return n.a==(R5(),eLt)&&db(n,eLn(n.g,n.b)),n.a}function Z1(n){return n.d==(R5(),eLt)&&pb(n,NKn(n.g,n.b)),n.d}function n0(n){return Px(n.a<n.c.c.length),n.b=n.a++,n.c.c[n.b]}function t0(n,t){n.b=n.b|t.b,n.c=n.c|t.c,n.d=n.d|t.d,n.a=n.a|t.a}function e0(n,t){return uan(Sz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function i0(n,t){return uan(Pz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function r0(n,t){return uan(Cz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function c0(n){return rbn(yz(fan(H$n(n,32)),32),fan(H$n(n,32)))}function a0(n){return yX(n),cL(n,14)?new t_(BB(n,14)):HB(n.Kc())}function u0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(n.c,t.c)}function o0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(n.c,t.c)}function s0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(t.c,n.c)}function h0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(t.c,n.c)}function f0(n,t){var e;e=Gy(MD(n.a.We((sWn(),OPt)))),VUn(n,t,e)}function l0(n,t){var e;e=BB(RX(n.g,t),57),Otn(t.d,new oP(n,e))}function b0(n,t){var e,i;return(e=oyn(n))<(i=oyn(t))?-1:e>i?1:0}function w0(n,t){var e;return e=S7(t),BB(RX(n.c,e),19).a}function d0(n,t){var e;for(e=n+"";e.length<t;)e="0"+e;return e}function g0(n){return null==n.c||0==n.c.length?"n_"+n.g:"n_"+n.c}function p0(n){return null==n.c||0==n.c.length?"n_"+n.b:"n_"+n.c}function v0(n,t){return n&&n.equals?n.equals(t):GI(n)===GI(t)}function m0(n,t){return 0==t?!!n.o&&0!=n.o.f:vpn(n,t)}function y0(n,t,e){var i;n.n&&t&&e&&(i=new Zu,WB(n.e,i))}function k0(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function j0(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function E0(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function T0(n,t,e){Ap.call(this,25),this.b=n,this.a=t,this.c=e}function M0(n){wWn(),Ap.call(this,n),this.c=!1,this.a=!1}function S0(n,t,e,i,r,c){Hen.call(this,n,t,e,i,r),c&&(this.o=-2)}function P0(n,t,e,i,r,c){qen.call(this,n,t,e,i,r),c&&(this.o=-2)}function C0(n,t,e,i,r,c){J5.call(this,n,t,e,i,r),c&&(this.o=-2)}function I0(n,t,e,i,r,c){Uen.call(this,n,t,e,i,r),c&&(this.o=-2)}function O0(n,t,e,i,r,c){Z5.call(this,n,t,e,i,r),c&&(this.o=-2)}function A0(n,t,e,i,r,c){Gen.call(this,n,t,e,i,r),c&&(this.o=-2)}function $0(n,t,e,i,r,c){zen.call(this,n,t,e,i,r),c&&(this.o=-2)}function L0(n,t,e,i,r,c){n6.call(this,n,t,e,i,r),c&&(this.o=-2)}function N0(n,t,e,i){jp.call(this,e),this.b=n,this.c=t,this.d=i}function x0(n,t){this.a=new Np,this.d=new Np,this.f=n,this.c=t}function D0(){this.c=new $$,this.a=new bY,this.b=new em,bM()}function R0(){Nun(),this.b=new xp,this.a=new xp,this.c=new Np}function K0(n,t){this.g=n,this.d=(R5(),eLt),this.a=eLt,this.b=t}function _0(n,t){this.f=n,this.a=(R5(),tLt),this.c=tLt,this.b=t}function F0(n,t){!n.c&&(n.c=new Ecn(n,0)),MHn(n.c,(Uqn(),LLt),t)}function B0(){B0=O,Hkt=new wC("DFS",0),Bkt=new wC("BFS",1)}function H0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Hc(e)}function q0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Mc(e)}function G0(n,t,e,i){return n.a+=""+fx(null==t?zWn:Bbn(t),e,i),n}function z0(n,t,e,i,r,c){return Rcn(n,t,e,c),Jfn(n,i),tln(n,r),n}function U0(n){return Px(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function X0(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function W0(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function V0(n){return!(!n.a||0==H7(n.a.a).i||n.b&&Kvn(n.b))}function Q0(n){return!(!n.u||0==a4(n.u.a).i||n.n&&Rvn(n.n))}function Y0(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),16,new zf(n))}function J0(n,t){return FU(fan(n.q.getTime()),fan(t.q.getTime()))}function Z0(n){return BB(Qgn(n,x8(yut,c1n,17,n.c.length,0,1)),474)}function n2(n){return BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193)}function t2(n){return BZ(),!(b5(n)||!b5(n)&&n.c.i.c==n.d.i.c)}function e2(n,t,e){yX(n),xyn(new IZ(new t_(n),t,e))}function i2(n,t,e){yX(n),Dyn(new OZ(new t_(n),t,e))}function r2(n,t){var e;return e=1-t,n.a[e]=wrn(n.a[e],e),wrn(n,t)}function c2(n,t){var e;n.e=new Jm,m$(e=wDn(t),n.c),IDn(n,e,0)}function a2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.a,r)}function u2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.b,r)}function o2(n){var t,e;return e=t_n(t=new lX,n),yzn(t),e}function s2(){var n,t;return n=new Kp,WB(V$t,t=n),t}function h2(n){return n.j.c=x8(Ant,HWn,1,0,5,1),TV(n.c),gV(n.a),n}function f2(n){return MM(),cL(n.g,10)?BB(n.g,10):null}function l2(n){return!EV(n).dc()&&(L$(n,new m),!0)}function b2(n){if(!("stack"in n))try{throw n}catch(t){}return n}function w2(n,t){if(n<0||n>=t)throw Hp(new Ay(LCn(n,t)));return n}function d2(n,t,e){if(n<0||t<n||t>e)throw Hp(new Ay(oPn(n,t,e)))}function g2(n,t){if(TU(n.a,t),t.d)throw Hp(new dy(IYn));t.d=n}function p2(n,t){if(t.$modCount!=n.$modCount)throw Hp(new vv)}function v2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function m2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function y2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function k2(n,t){return n.a<=n.b&&(t.ud(n.a++),!0)}function j2(n){var t;return JO(n)?-0==(t=n)?0:t:pnn(n)}function E2(n){var t;return EW(n),t=new F,gE(n.a,new gw(t)),t}function T2(n){var t;return EW(n),t=new _,gE(n.a,new dw(t)),t}function M2(n,t){this.a=n,Sb.call(this,n),LZ(t,n.gc()),this.b=t}function S2(n){this.e=n,this.b=this.e.a.entries(),this.a=new Array}function P2(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),273,new Gf(n))}function C2(n){return new J6((lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))))}function I2(n){return BB(Qgn(n,x8(Gut,u1n,11,n.c.length,0,1)),1943)}function O2(n,t,e){return e.f.c.length>0?BU(n.a,t,e):BU(n.b,t,e)}function A2(n,t,e){n.d&&y7(n.d.e,n),n.d=t,n.d&&kG(n.d.e,e,n)}function $2(n,t){vXn(t,n),aH(n.d),aH(BB(mMn(n,(HXn(),Agt)),207))}function L2(n,t){pXn(t,n),cH(n.d),cH(BB(mMn(n,(HXn(),Agt)),207))}function N2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.fe()),i}function x2(n,t){var e,i;return i=null,(e=dnn(n,t))&&(i=e.ie()),i}function D2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.ie()),i}function R2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=yPn(e)),i}function K2(n,t,e){var i;return i=Qdn(e),wKn(n.g,i,t),wKn(n.i,t,e),t}function _2(n,t,e){var i;i=Ldn();try{return dR(n,t,e)}finally{y3(i)}}function F2(n){var t;t=n.Wg(),this.a=cL(t,69)?BB(t,69).Zh():t.Kc()}function B2(){Ym.call(this),this.j.c=x8(Ant,HWn,1,0,5,1),this.a=-1}function H2(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function q2(n,t,e,i){this.e=i,this.d=null,this.c=n,this.a=t,this.b=e}function G2(n,t,e){this.d=new Fd(this),this.e=n,this.i=t,this.f=e}function z2(){z2=O,Aft=new DP(eJn,0),$ft=new DP("TOP_LEFT",1)}function U2(){U2=O,Tmt=JW(iln(1),iln(4)),Emt=JW(iln(1),iln(2))}function X2(){X2=O,JEt=lhn((IM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])))}function W2(){W2=O,VEt=lhn((CM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])))}function V2(){V2=O,UTt=lhn((OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])))}function Q2(){Q2=O,act=lhn((wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])))}function Y2(){return Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])}function J2(){return Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])}function Z2(){return qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])}function n3(){return Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])}function t3(){return Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])}function e3(){return Iun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])}function i3(n,t,e,i){return cL(e,54)?new Ox(n,t,e,i):new sz(n,t,e,i)}function r3(){return Oun(),Pun(Gk(Ist,1),$Vn,411,0,[vst,mst,yst,kst])}function c3(n){return n.j==(kUn(),SIt)&&SN(UOn(n),oIt)}function a3(n,t){var e;SZ(e=t.a,t.c.d),MZ(e,t.d.d),Ztn(e.a,n.n)}function u3(n,t){return BB($N(Iz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function o3(n,t){return BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function s3(n){return new w1(tcn(BB(n.a.dd(),14).gc(),n.a.cd()),16)}function h3(n){return cL(n,14)?BB(n,14).dc():!n.Kc().Ob()}function f3(n){return MM(),cL(n.g,145)?BB(n.g,145):null}function l3(n){if(n.e.g!=n.b)throw Hp(new vv);return!!n.c&&n.d>0}function b3(n){return Px(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function w3(n,t){kW(t),$X(n.a,n.c,t),n.c=n.c+1&n.a.length-1,wyn(n)}function d3(n,t){kW(t),n.b=n.b-1&n.a.length-1,$X(n.a,n.b,t),wyn(n)}function g3(n,t){var e;for(e=n.j.c.length;e<t;e++)WB(n.j,n.rg())}function p3(n,t,e,i){var r;return r=i[t.g][e.g],Gy(MD(mMn(n.a,r)))}function v3(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function m3(n,t,e,i,r){this.a=n,this.e=t,this.f=e,this.b=i,this.g=r}function y3(n){n&&Inn((sk(),ttt)),--ctt,n&&-1!=utt&&(iS(utt),utt=-1)}function k3(){return bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])}function j3(){return zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])}function E3(){return Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])}function T3(){return mdn(),Pun(Gk(YIt,1),$Vn,374,0,[KIt,_It,RIt,DIt])}function M3(){return Xyn(),Pun(Gk(RCt,1),$Vn,285,0,[MCt,jCt,ECt,TCt])}function S3(){return Mbn(),Pun(Gk(oCt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])}function P3(){return Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZIt,tOt,nOt])}function C3(){return Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])}function I3(n){return hZ(),hU(fAt,n)?BB(RX(fAt,n),331).ug():null}function O3(n,t,e){return t<0?qIn(n,e):BB(e,66).Nj().Sj(n,n.yh(),t)}function A3(n,t,e){var i;return i=Qdn(e),wKn(n.d,i,t),VW(n.e,t,e),t}function $3(n,t,e){var i;return i=Qdn(e),wKn(n.j,i,t),VW(n.k,t,e),t}function L3(n){var t;return tE(),t=new io,n&&HLn(t,n),t}function N3(n){var t;return t=n.ri(n.i),n.i>0&&aHn(n.g,0,t,0,n.i),t}function x3(n,t){var e;return nS(),!(e=BB(RX(mAt,n),55))||e.wj(t)}function D3(n){if(1!=n.p)throw Hp(new dv);return dG(n.f)<<24>>24}function R3(n){if(1!=n.p)throw Hp(new dv);return dG(n.k)<<24>>24}function K3(n){if(7!=n.p)throw Hp(new dv);return dG(n.k)<<16>>16}function _3(n){if(7!=n.p)throw Hp(new dv);return dG(n.f)<<16>>16}function F3(n){var t;for(t=0;n.Ob();)n.Pb(),t=rbn(t,1);return ttn(t)}function B3(n,t){var e;return e=new Ik,n.xd(e),e.a+="..",t.yd(e),e.a}function H3(n,t,e){var i;i=BB(RX(n.g,e),57),WB(n.a.c,new rI(t,i))}function q3(n,t,e){return Tz(MD(qI(AY(n.f,t))),MD(qI(AY(n.f,e))))}function G3(n,t,e){return UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z3(n,t,e){return pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function U3(n,t,e){return x$n(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function X3(n,t){return n==(uSn(),Cut)&&t==Cut?4:n==Cut||t==Cut?8:32}function W3(n,t){return GI(t)===GI(n)?"(this Map)":null==t?zWn:Bbn(t)}function V3(n,t){return BB(null==t?qI(AY(n.f,null)):hS(n.g,t),281)}function Q3(n,t,e){var i;return i=Qdn(e),VW(n.b,i,t),VW(n.c,t,e),t}function Y3(n,t){var e;for(e=t;e;)_x(n,e.i,e.j),e=JJ(e);return n}function J3(n,t){var e;return e=rY(HB(new C7(n,t))),Cq(new C7(n,t)),e}function Z3(n,t){var e;return ZM(),TSn(e=BB(n,66).Mj(),t),e.Ok(t)}function n4(n,t,e,i,r){WB(t,mCn(r,X$n(r,e,i))),UMn(n,r,t)}function t4(n,t,e){n.i=0,n.e=0,t!=e&&(Won(n,t,e),Xon(n,t,e))}function e4(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+sQn),lBn(n,e)}function i4(n,t,e){if(e){var i=e.ee();n.a[t]=i(e)}else delete n.a[t]}function r4(n,t,e){if(e){var i=e.ee();e=i(e)}else e=void 0;n.a[t]=e}function c4(n){if(n<0)throw Hp(new By("Negative array size: "+n))}function a4(n){return n.n||(P5(n),n.n=new YG(n,VAt,n),kY(n)),n.n}function u4(n){return Px(n.a<n.c.a.length),n.b=n.a,Ann(n),n.c.b[n.b]}function o4(n){n.b!=n.c&&(n.a=x8(Ant,HWn,1,8,5,1),n.b=0,n.c=0)}function s4(n){this.b=new xp,this.c=new xp,this.d=new xp,this.a=n}function h4(n,t){wWn(),Ap.call(this,n),this.a=t,this.c=-1,this.b=-1}function f4(n,t,e,i){j0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function l4(n,t,e,i){E0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function b4(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),this.c=n,this.a=e}function w4(n,t,e){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t,this.d=e}function d4(n){this.e=n,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function g4(n){this.c=n,this.a=BB(Ikn(n),148),this.b=this.a.Aj().Nh()}function p4(n){this.d=n,this.b=this.d.a.entries(),this.a=this.b.next()}function v4(){xp.call(this),jx(this),this.d.b=this.d,this.d.a=this.d}function m4(n,t){$R.call(this),this.a=n,this.b=t,WB(this.a.b,this)}function y4(n,t){return iO(null!=t?SJ(n,t):qI(AY(n.f,t)))}function k4(n,t){return iO(null!=t?SJ(n,t):qI(AY(n.f,t)))}function j4(n,t){var e;for(e=0;e<t;++e)$X(n,e,new Ub(BB(n[e],42)))}function E4(n,t){var e;for(e=n.d-1;e>=0&&n.a[e]===t[e];e--);return e<0}function T4(n,t){var e;return zsn(),0!=(e=n.j.g-t.j.g)?e:0}function M4(n,t){return kW(t),null!=n.a?PG(t.Kb(n.a)):Set}function S4(n){var t;return n?new Lq(n):(qrn(t=new fA,n),t)}function P4(n,t){return t.b.Kb(T7(n,t.c.Ee(),new yw(t)))}function C4(n){yTn(),hL(this,dG(e0(kz(n,24),sYn)),dG(e0(n,sYn)))}function I4(){I4=O,pit=lhn((hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])))}function O4(){O4=O,kit=lhn((Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])))}function A4(){A4=O,_ct=lhn((Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])))}function $4(){$4=O,zut=lhn((Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])))}function L4(){L4=O,Iht=lhn((_nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])))}function N4(){N4=O,Uht=lhn((g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])))}function x4(){x4=O,tmt=lhn((A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])))}function D4(){D4=O,Bvt=lhn((U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])))}function R4(){R4=O,oht=lhn((V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])))}function K4(){K4=O,Nft=lhn((z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])))}function _4(){_4=O,Pyt=lhn((O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])))}function F4(){F4=O,Gmt=lhn((Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])))}function B4(){B4=O,iyt=lhn((gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])))}function H4(){H4=O,uyt=lhn((oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])))}function q4(){q4=O,Dyt=lhn((dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])))}function G4(){G4=O,Gkt=lhn((B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])))}function z4(){z4=O,Zkt=lhn((Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])))}function U4(){U4=O,Fkt=lhn((sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])))}function X4(){X4=O,ojt=lhn((D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])))}function W4(){W4=O,QTt=lhn((Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])))}function V4(){V4=O,eTt=lhn(($6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])))}function Q4(){Q4=O,Hmt=new JP("UPPER",0),Bmt=new JP("LOWER",1)}function Y4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function J4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function Z4(n,t){var e,i;i=!1;do{i|=e=bon(n,t)}while(e);return i}function n5(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function t5(n,t){var e;for(e=t;e;)_x(n,-e.i,-e.j),e=JJ(e);return n}function e5(n,t){var e,i;for(kW(t),i=n.Kc();i.Ob();)e=i.Pb(),t.td(e)}function i5(n,t){var e;return new vT(e=t.cd(),n.e.pc(e,BB(t.dd(),14)))}function r5(n,t,e,i){var r;(r=new $).c=t,r.b=e,r.a=i,i.b=e.a=r,++n.b}function c5(n,t,e){var i;return l1(t,n.c.length),i=n.c[t],n.c[t]=e,i}function a5(n,t,e){return BB(null==t?jCn(n.f,null,e):ubn(n.g,t,e),281)}function u5(n){return n.c&&n.d?p0(n.c)+"->"+p0(n.d):"e_"+PN(n)}function o5(n,t){return(Qln(n),jE(new Rq(n,new Q9(t,n.a)))).sd(tit)}function s5(){return yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])}function h5(){return kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])}function f5(n){return Dk(),function(){return _2(n,this,arguments)}}function l5(){return Date.now?Date.now():(new Date).getTime()}function b5(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function w5(n){if(!n.c.Sb())throw Hp(new yv);return n.a=!0,n.c.Ub()}function d5(n){n.i=0,yS(n.b,null),yS(n.c,null),n.a=null,n.e=null,++n.g}function g5(n){dS.call(this,null==n?zWn:Bbn(n),cL(n,78)?BB(n,78):null)}function p5(n){eWn(),Bp(this),this.a=new YT,dsn(this,n),DH(this.a,n)}function v5(){xA(this),this.b=new xC(RQn,RQn),this.a=new xC(KQn,KQn)}function m5(n,t){this.c=0,this.b=t,pO.call(this,n,17493),this.a=this.c}function y5(n){k5(),Qet||(this.c=n,this.e=!0,this.a=new Np)}function k5(){k5=O,Qet=!0,Wet=!1,Vet=!1,Jet=!1,Yet=!1}function j5(n,t){return!!cL(t,149)&&mK(n.c,BB(t,149).c)}function E5(n,t){var e;return e=0,n&&(e+=n.f.a/2),t&&(e+=t.f.a/2),e}function T5(n,t){return BB(lnn(n.d,t),23)||BB(lnn(n.e,t),23)}function M5(n){this.b=n,AL.call(this,n),this.a=BB(yan(this.b.a,4),126)}function S5(n){this.b=n,ax.call(this,n),this.a=BB(yan(this.b.a,4),126)}function P5(n){return n.t||(n.t=new dp(n),sln(new xy(n),0,n.t)),n.t}function C5(){return Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])}function I5(){return cpn(),Pun(Gk(JCt,1),$Vn,249,0,[BCt,qCt,_Ct,FCt,HCt])}function O5(){return rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])}function A5(){return $Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])}function $5(){return Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])}function L5(){return Vvn(),Pun(Gk(Cht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])}function N5(){return YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])}function x5(){return LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Cst,Sst,Tst])}function D5(){return Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])}function R5(){var n,t;R5=O,iE(),t=new Ev,tLt=t,n=new Om,eLt=n}function K5(n){var t;return n.c||cL(t=n.r,88)&&(n.c=BB(t,26)),n.c}function _5(n){return n.e=3,n.d=n.Yb(),2!=n.e&&(n.e=0,!0)}function F5(n){return M$(n&SQn,n>>22&SQn,n<0?PQn:0)}function B5(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)jW(t[e])}function H5(n,t){var e,i;(e=BB(bfn(n.c,t),14))&&(i=e.gc(),e.$b(),n.d-=i)}function q5(n,t){var e;return!!(e=lsn(n,t.cd()))&&cV(e.e,t.dd())}function G5(n,t){return 0==t||0==n.e?n:t>0?Edn(n,t):Ixn(n,-t)}function z5(n,t){return 0==t||0==n.e?n:t>0?Ixn(n,t):Edn(n,-t)}function U5(n){if(dAn(n))return n.c=n.a,n.a.Pb();throw Hp(new yv)}function X5(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(uSn(),Mut)&&e.k==Mut}function W5(n){var t;return qan(t=new wY,n),hon(t,(HXn(),vgt),null),t}function V5(n,t,e){var i;return(i=n.Yg(t))>=0?n._g(i,e,!0):cOn(n,t,e)}function Q5(n,t,e,i){var r;for(r=0;r<Zit;r++)XG(n.a[t.g][r],e,i[t.g])}function Y5(n,t,e,i){var r;for(r=0;r<nrt;r++)UG(n.a[r][t.g],e,i[t.g])}function J5(n,t,e,i,r){j0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function Z5(n,t,e,i,r){E0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function n6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function t6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.b=e}function e6(n,t,e){jp.call(this,e),this.b=n,this.c=t,this.d=(Bwn(),z$t)}function i6(n,t,e){this.d=n,this.k=t?1:0,this.f=e?1:0,this.o=-1,this.p=0}function r6(n,t,e){var i;Tcn(i=new X$(n.a),n.a.a),jCn(i.f,t,e),n.a.a=i}function c6(n,t){n.qi(n.i+1),jL(n,n.i,n.oi(n.i,t)),n.bi(n.i++,t),n.ci()}function a6(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.di(e,t),n.ci()}function u6(n){var t;return yX(n),$on(t=new J6(ZW(n.length)),n),t}function o6(n){var t;return yX(n),JPn(t=n?new t_(n):HB(n.Kc())),sfn(t)}function s6(n,t){var e;return l1(t,n.c.length),e=n.c[t],PE(n.c,t,1),e}function h6(n,t){var e;return!(e=BB(n.c.xc(t),14))&&(e=n.ic(t)),n.pc(t,e)}function f6(n,t){var e,i;return kW(n),e=n,kW(t),e==(i=t)?0:e<i?-1:1}function l6(n){var t;return t=n.e+n.f,isNaN(t)&&WK(n.d)?n.d:t}function b6(n,t){return n.a?oO(n.a,n.b):n.a=new lN(n.d),aO(n.a,t),n}function w6(n,t){if(n<0||n>t)throw Hp(new Ay(dCn(n,t,"index")));return n}function d6(n,t,e,i){var r;return vTn(r=x8(ANt,hQn,25,t,15,1),n,t,e,i),r}function g6(n,t){var e;e=n.q.getHours()+(t/60|0),n.q.setMinutes(t),lBn(n,e)}function p6(n,t){return e.Math.min(W8(t.a,n.d.d.c),W8(t.b,n.d.d.c))}function v6(n,t){return XI(t)?null==t?gAn(n.f,null):Gan(n.g,t):gAn(n.f,t)}function m6(n){this.c=n,this.a=new Wb(this.c.a),this.b=new Wb(this.c.b)}function y6(){this.e=new Np,this.c=new Np,this.d=new Np,this.b=new Np}function k6(){this.g=new Bv,this.b=new Bv,this.a=new Np,this.k=new Np}function j6(n,t,e){this.a=n,this.c=t,this.d=e,WB(t.e,this),WB(e.b,this)}function E6(n,t){gO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function T6(n,t){pO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function M6(n,t){vO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function S6(n,t,e){this.a=n,this.b=t,this.c=e,WB(n.t,this),WB(t.i,this)}function P6(){this.b=new YT,this.a=new YT,this.b=new YT,this.a=new YT}function C6(){C6=O,TMt=new up("org.eclipse.elk.labels.labelManager")}function I6(){I6=O,est=new iR("separateLayerConnections",(Iun(),ast))}function O6(){O6=O,Myt=new uC("REGULAR",0),Tyt=new uC("CRITICAL",1)}function A6(){A6=O,Zvt=new XP("STACKED",0),Jvt=new XP("SEQUENCED",1)}function $6(){$6=O,nTt=new TC("FIXED",0),ZEt=new TC("CENTER_NODE",1)}function L6(n,t){var e;return e=xGn(n,t),n.b=new mrn(e.c.length),yqn(n,e)}function N6(n,t,e){return++n.e,--n.f,BB(n.d[t].$c(e),133).dd()}function x6(n){var t;return n.a||cL(t=n.r,148)&&(n.a=BB(t,148)),n.a}function D6(n){return n.a?n.e?D6(n.e):null:n}function R6(n,t){return n.p<t.p?1:n.p>t.p?-1:0}function K6(n,t){return kW(t),n.c<n.d&&(n.ze(t,n.c++),!0)}function _6(n,t){return!!hU(n.a,t)&&(v6(n.a,t),!0)}function F6(n){var t;return t=n.cd(),RB(BB(n.dd(),14).Nc(),new Vf(t))}function B6(n){var t;return t=BB(VU(n.b,n.b.length),9),new YK(n.a,t,n.c)}function H6(n){return Qln(n),new AD(n,new ZB(n,n.a.e,4|n.a.d))}function q6(n){var t;for(EW(n),t=0;n.a.sd(new fn);)t=rbn(t,1);return t}function G6(n,t,e){var i,r;for(i=0,r=0;r<t.length;r++)i+=n.$f(t[r],i,e)}function z6(n,t){var e;n.C&&((e=BB(oV(n.b,t),124).n).d=n.C.d,e.a=n.C.a)}function U6(n,t,e){return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),n.a[t][e]}function X6(n,t){ODn(),this.e=n,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[t])}function W6(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function V6(n){var t,e,i,r;r=n.d,t=n.a,e=n.b,i=n.c,n.d=e,n.a=i,n.b=r,n.c=t}function Q6(n,t,e,i){mFn(n,t,e,pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))}function Y6(n,t){OTn(t,"Label management",1),iO(mMn(n,(C6(),TMt))),HSn(t)}function J6(n){xA(this),vH(n>=0,"Initial capacity must not be negative")}function Z6(){Z6=O,Wit=lhn((Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])))}function n8(){n8=O,trt=lhn((J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])))}function t8(){t8=O,urt=lhn((G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])))}function e8(){e8=O,Zet=lhn((qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])))}function i8(){i8=O,Lat=lhn((q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Iat,Aat])))}function r8(){r8=O,gut=lhn((Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])))}function c8(){c8=O,bht=lhn((Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])))}function a8(){a8=O,vht=lhn((uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])))}function u8(){u8=O,Nht=lhn((Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])))}function o8(){o8=O,_st=lhn((Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))}function s8(){s8=O,Oft=lhn((z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Cft,Sft])))}function h8(){h8=O,Mft=lhn((Kan(),Pun(Gk(Ift,1),$Vn,292,0,[jft,Eft,kft])))}function f8(){f8=O,svt=lhn((Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])))}function l8(){l8=O,Yvt=lhn((Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])))}function b8(){b8=O,Rvt=lhn((mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])))}function w8(){w8=O,Uvt=lhn((ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])))}function d8(){d8=O,gmt=lhn(($un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])))}function g8(){g8=O,amt=lhn((Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])))}function p8(){p8=O,fmt=lhn((dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])))}function v8(){v8=O,Nmt=lhn((oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])))}function m8(){m8=O,rjt=lhn((Cbn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])))}function y8(){y8=O,bjt=lhn((Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])))}function k8(){k8=O,eEt=lhn((Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])))}function j8(){j8=O,Qjt=lhn((Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])))}function E8(){E8=O,UEt=lhn((Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])))}function T8(){T8=O,kCt=lhn((ufn(),Pun(Gk(SCt,1),$Vn,334,0,[vCt,pCt,mCt])))}function M8(){M8=O,VPt=lhn((Rtn(),Pun(Gk(nCt,1),$Vn,272,0,[zPt,UPt,XPt])))}function S8(){return QEn(),Pun(Gk(aIt,1),$Vn,98,0,[YCt,QCt,VCt,UCt,WCt,XCt])}function P8(n,t){return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),rdn(n.o,t)}function C8(n){return!n.g&&(n.g=new oo),!n.g.d&&(n.g.d=new lp(n)),n.g.d}function I8(n){return!n.g&&(n.g=new oo),!n.g.a&&(n.g.a=new bp(n)),n.g.a}function O8(n){return!n.g&&(n.g=new oo),!n.g.b&&(n.g.b=new fp(n)),n.g.b}function A8(n){return!n.g&&(n.g=new oo),!n.g.c&&(n.g.c=new wp(n)),n.g.c}function $8(n,t,e){var i,r;for(r=new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function L8(n,t,e){var i,r;if(null!=e)for(i=0;i<t;++i)r=e[i],n.fi(i,r)}function N8(n,t,e,i){var r;return AFn(r=x8(ANt,hQn,25,t+1,15,1),n,t,e,i),r}function x8(n,t,e,i,r,c){var a;return a=Bmn(r,i),10!=r&&Pun(Gk(n,c),t,e,r,a),a}function D8(n,t,e,i){return e&&(i=e.gh(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function R8(n,t,e,i){return e&&(i=e.ih(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function K8(n,t,e){BB(n.b,65),BB(n.b,65),BB(n.b,65),Otn(n.a,new N_(e,t,n))}function _8(n,t,e){if(n<0||t>e||t<n)throw Hp(new Ok(mYn+n+kYn+t+hYn+e))}function F8(n){if(!n)throw Hp(new Fy("Unable to add element to queue"))}function B8(n){n?(this.c=n,this.b=null):(this.c=null,this.b=new Np)}function H8(n,t){PS.call(this,n,t),this.a=x8(Ket,kVn,436,2,0,1),this.b=!0}function q8(n){non.call(this,n,0),jx(this),this.d.b=this.d,this.d.a=this.d}function G8(n){var t;return 0==(t=n.b).b?null:BB(Dpn(t,0),188).b}function z8(n,t){var e;return(e=new q).c=!0,e.d=t.dd(),YGn(n,t.cd(),e)}function U8(n,t){var e;e=n.q.getHours()+(t/3600|0),n.q.setSeconds(t),lBn(n,e)}function X8(n,t,e){var i;(i=n.b[e.c.p][e.p]).b+=t.b,i.c+=t.c,i.a+=t.a,++i.a}function W8(n,t){var i,r;return i=n.a-t.a,r=n.b-t.b,e.Math.sqrt(i*i+r*r)}function V8(){V8=O,cht=new EP("QUADRATIC",0),aht=new EP("SCANLINE",1)}function Q8(){Q8=O,mmt=WG(dq(new B2,(yMn(),Rat),(lWn(),kot)),Bat,qot)}function Y8(){return wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])}function J8(){return wvn(),Pun(Gk(nSt,1),$Vn,248,0,[CMt,AMt,$Mt,LMt,IMt,OMt])}function Z8(){return $Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])}function n9(){return JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])}function t9(){return Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])}function e9(){return TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])}function i9(){return gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])}function r9(){return DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])}function c9(){return lIn(),Pun(Gk(IIt,1),$Vn,273,0,[rIt,eIt,iIt,tIt,nIt,cIt])}function a9(){return nMn(),Pun(Gk(yCt,1),$Vn,312,0,[aCt,rCt,uCt,eCt,cCt,iCt])}function u9(){return uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])}function o9(n){Mx(!!n.c),p2(n.e,n),n.c.Qb(),n.c=null,n.b=dun(n),bD(n.e,n)}function s9(n){return p2(n.c.a.e,n),Px(n.b!=n.c.a.d),n.a=n.b,n.b=n.b.a,n.a}function h9(n){var t;return n.a||-1==n.b||(t=n.c.Tg(),n.a=itn(t,n.b)),n.a}function f9(n,t){return!(n.hi()&&n.Hc(t)||(n.Yh(t),0))}function l9(n,t){return OY(t,"Horizontal alignment cannot be null"),n.b=t,n}function b9(n,t,e){var i;return wWn(),i=ZUn(n,t),e&&i&&gW(n)&&(i=null),i}function w9(n,t,e){var i;for(i=n.Kc();i.Ob();)ZRn(BB(i.Pb(),37),t,e)}function d9(n,t){var e;for(e=t.Kc();e.Ob();)$Kn(n,BB(e.Pb(),37),0,0)}function g9(n,t,i){var r;n.d[t.g]=i,(r=n.g.c)[t.g]=e.Math.max(r[t.g],i+1)}function p9(n,t){var e,i,r;return r=n.r,i=n.d,(e=cHn(n,t,!0)).b!=r||e.a!=i}function v9(n,t){return lS(n.e,t)||Jgn(n.e,t,new ipn(t)),BB(lnn(n.e,t),113)}function m9(n,t,e,i){return kW(n),kW(t),kW(e),kW(i),new jU(n,t,new G)}function y9(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=new Zz(this,t,e,i)}function k9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.b=e}function j9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.a=e}function E9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function T9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function M9(n,t,e){var i;return(i=$$n(n.b,t))?NHn(F7(n,i),e):null}function S9(n,t){var e;return(e=n.Yg(t))>=0?n._g(e,!0,!0):cOn(n,t,!0)}function P9(n,t){return Pln(Gy(MD(mMn(n,(hWn(),Tlt)))),Gy(MD(mMn(t,Tlt))))}function C9(){C9=O,Ukt=ogn(ogn(FM(new B2,(zyn(),Kyt)),(DPn(),Qyt)),Uyt)}function I9(n,t,e){var i;return i=Non(n,t,e),n.b=new mrn(i.c.length),sDn(n,i)}function O9(n){if(n.b<=0)throw Hp(new yv);return--n.b,n.a-=n.c.c,iln(n.a)}function A9(n){var t;if(!n.a)throw Hp(new lV);return t=n.a,n.a=JJ(n.a),t}function $9(n){for(;!n.a;)if(!TK(n.c,new pw(n)))return!1;return!0}function L9(n){return yX(n),cL(n,198)?BB(n,198):new ol(n)}function N9(n){x9(),BB(n.We((sWn(),fPt)),174).Fc((lIn(),iIt)),n.Ye(hPt,null)}function x9(){x9=O,tMt=new bu,iMt=new wu,eMt=vsn((sWn(),hPt),tMt,qSt,iMt)}function D9(){D9=O,cjt=new pC("LEAF_NUMBER",0),ajt=new pC("NODE_SIZE",1)}function R9(n,t,e){n.a=t,n.c=e,n.b.a.$b(),yQ(n.d),n.e.a.c=x8(Ant,HWn,1,0,5,1)}function K9(n){n.a=x8(ANt,hQn,25,n.b+1,15,1),n.c=x8(ANt,hQn,25,n.b,15,1),n.d=0}function _9(n,t){n.a.ue(t.d,n.b)>0&&(WB(n.c,new mH(t.c,t.d,n.d)),n.b=t.d)}function F9(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.g[t]}function B9(n,t,e){if(xsn(n,e),null!=e&&!n.wj(e))throw Hp(new lv);return e}function H9(n){var t;if(n.Ek())for(t=n.i-1;t>=0;--t)Wtn(n,t);return N3(n)}function q9(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function G9(n,t){var e;return c4(t),(e=m7(n.slice(0,t),n)).length=t,e}function z9(n,t,e,i){PQ(),i=i||wet,gCn(n.slice(t,e),n,t,e,-t,i)}function U9(n,t,e,i,r){return t<0?cOn(n,e,i):BB(e,66).Nj().Pj(n,n.yh(),t,i,r)}function X9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function W9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function V9(n,t){if(t.a)throw Hp(new dy(IYn));TU(n.a,t),t.a=n,!n.j&&(n.j=t)}function Q9(n,t){vO.call(this,t.rd(),-16449&t.qd()),kW(n),this.a=n,this.c=t}function Y9(n,t){var e,i;return i=t/n.c.Hd().gc()|0,e=t%n.c.Hd().gc(),U6(n,i,e)}function J9(){J9=O,Yit=new GS(cJn,0),Qit=new GS(eJn,1),Jit=new GS(aJn,2)}function Z9(){Z9=O,Net=new gS("All",0),xet=new LA,Det=new A$,Ret=new NA}function n7(){n7=O,_et=lhn((Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])))}function t7(){t7=O,rut=lhn((Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])))}function e7(){e7=O,_rt=lhn((Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])))}function i7(){i7=O,zrt=lhn((Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])))}function r7(){r7=O,ict=lhn((qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])))}function c7(){c7=O,Hyt=lhn((zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])))}function a7(){a7=O,ost=lhn((Iun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])))}function u7(){u7=O,zjt=lhn((Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])))}function o7(){o7=O,Est=lhn((Oun(),Pun(Gk(Ist,1),$Vn,411,0,[vst,mst,yst,kst])))}function s7(){s7=O,dvt=lhn((bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])))}function h7(){h7=O,fOt=lhn((Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])))}function f7(){f7=O,PCt=lhn((Xyn(),Pun(Gk(RCt,1),$Vn,285,0,[MCt,jCt,ECt,TCt])))}function l7(){l7=O,tCt=lhn((Mbn(),Pun(Gk(oCt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])))}function b7(){b7=O,rOt=lhn((Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZIt,tOt,nOt])))}function w7(){w7=O,BIt=lhn((mdn(),Pun(Gk(YIt,1),$Vn,374,0,[KIt,_It,RIt,DIt])))}function d7(){d7=O,qBn(),HLt=RQn,BLt=KQn,GLt=new Nb(RQn),qLt=new Nb(KQn)}function g7(){g7=O,Ght=new OP(QZn,0),qht=new OP("IMPROVE_STRAIGHTNESS",1)}function p7(n,t){return hH(),WB(n,new rI(t,iln(t.e.c.length+t.g.c.length)))}function v7(n,t){return hH(),WB(n,new rI(t,iln(t.e.c.length+t.g.c.length)))}function m7(n,t){return 10!=vnn(t)&&Pun(tsn(t),t.hm,t.__elementTypeId$,vnn(t),n),n}function y7(n,t){var e;return-1!=(e=E7(n,t,0))&&(s6(n,e),!0)}function k7(n,t){var e;return(e=BB(v6(n.e,t),387))?(RH(e),e.e):null}function j7(n){var t;return JO(n)&&(t=0-n,!isNaN(t))?t:uan(aon(n))}function E7(n,t,e){for(;e<n.c.length;++e)if(cV(t,n.c[e]))return e;return-1}function T7(n,t,e){var i;return EW(n),(i=new sn).a=t,n.a.Nb(new IS(i,e)),i.a}function M7(n){var t;return EW(n),t=x8(xNt,qQn,25,0,15,1),gE(n.a,new ww(t)),t}function S7(n){var t;return t=BB(xq(n.j,0),11),BB(mMn(t,(hWn(),dlt)),11)}function P7(n){var t;if(!Zin(n))throw Hp(new yv);return n.e=1,t=n.d,n.d=null,t}function C7(n,t){var e;this.f=n,this.b=t,e=BB(RX(n.b,t),283),this.c=e?e.b:null}function I7(){G_(),this.b=new xp,this.f=new xp,this.g=new xp,this.e=new xp}function O7(n,t){this.a=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.a),this.b=t}function A7(n){var t;for(t=n.p+1;t<n.c.a.c.length;++t)--BB(xq(n.c.a,t),10).p}function $7(n){var t;null!=(t=n.Ai())&&-1!=n.d&&BB(t,92).Ng(n),n.i&&n.i.Fi()}function L7(n){V$(this),this.g=n?CY(n,n.$d()):null,this.f=n,jQ(this),this._d()}function N7(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),Fh(this),this.c=n,this.b=e}function x7(n,t,e,i,r){return kW(n),kW(t),kW(e),kW(i),kW(r),new jU(n,t,i)}function D7(n,t){if(t<0)throw Hp(new Ay(n5n+t));return g3(n,t+1),xq(n.j,t)}function R7(n,t,e,i){if(!n)throw Hp(new _y($Rn(t,Pun(Gk(Ant,1),HWn,1,5,[e,i]))))}function K7(n,t){return cV(t,xq(n.f,0))||cV(t,xq(n.f,1))||cV(t,xq(n.f,2))}function _7(n,t){LK(BB(BB(n.f,33).We((sWn(),uPt)),98))&&Qbn(yV(BB(n.f,33)),t)}function F7(n,t){var e,i;return!(i=(e=BB(t,675)).Oh())&&e.Rh(i=new RI(n,t)),i}function B7(n,t){var e,i;return!(i=(e=BB(t,677)).pk())&&e.tk(i=new K0(n,t)),i}function H7(n){return n.b||(n.b=new JG(n,VAt,n),!n.a&&(n.a=new oR(n,n))),n.b}function q7(){q7=O,Oat=new WS("XY",0),Iat=new WS("X",1),Aat=new WS("Y",2)}function G7(){G7=O,crt=new zS("TOP",0),rrt=new zS(eJn,1),irt=new zS(oJn,2)}function z7(){z7=O,Pft=new xP(QZn,0),Cft=new xP("TOP",1),Sft=new xP(oJn,2)}function U7(){U7=O,Kvt=new GP("INPUT_ORDER",0),_vt=new GP("PORT_DEGREE",1)}function X7(){X7=O,btt=M$(SQn,SQn,524287),wtt=M$(0,0,CQn),dtt=F5(1),F5(2),gtt=F5(0)}function W7(n,t,e){n.a.c=x8(Ant,HWn,1,0,5,1),Xqn(n,t,e),0==n.a.c.length||f_n(n,t)}function V7(n){var t,e;return YU(n,0,e=n.length,t=x8(ONt,WVn,25,e,15,1),0),t}function Q7(n){var t;return n.dh()||(t=bX(n.Tg())-n.Ah(),n.ph().bk(t)),n.Pg()}function Y7(n){var t;return null==(t=een(yan(n,32)))&&(fgn(n),t=een(yan(n,32))),t}function J7(n,t){var e;return(e=Awn(n.d,t))>=0?Zpn(n,e,!0,!0):cOn(n,t,!0)}function Z7(n,t){var e,i;return MM(),e=f3(n),i=f3(t),!!e&&!!i&&!Kpn(e.k,i.k)}function nnn(n,t){Pen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function tnn(n,t){Cen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function enn(n,t){Sen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function inn(n,t){Men(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function rnn(n){(this.q?this.q:(SQ(),SQ(),het)).Ac(n.q?n.q:(SQ(),SQ(),het))}function cnn(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function ann(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function unn(n,t){Vrt=new it,ect=t,BB((Wrt=n).b,65),K8(Wrt,Vrt,null),uqn(Wrt)}function onn(n,t,e){var i;return i=n.g[t],jL(n,t,n.oi(t,e)),n.gi(t,e,i),n.ci(),i}function snn(n,t){var e;return(e=n.Xc(t))>=0&&(n.$c(e),!0)}function hnn(n){var t;return n.d!=n.r&&(t=Ikn(n),n.e=!!t&&t.Cj()==E9n,n.d=t),n.e}function fnn(n,t){var e;for(yX(n),yX(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function lnn(n,t){var e;return(e=BB(RX(n.e,t),387))?(uL(n,e),e.e):null}function bnn(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function wnn(n,t){return Qln(n),new Rq(n,new KK(new M6(t,n.a)))}function dnn(n,t){var e=n.a[t],i=(Zun(),ftt)[typeof e];return i?i(e):khn(typeof e)}function gnn(n){switch(n.g){case 0:return DWn;case 1:return-1;default:return 0}}function pnn(n){return Kkn(n,(X7(),gtt))<0?-CN(aon(n)):n.l+n.m*IQn+n.h*OQn}function vnn(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function mnn(n){var t;return null!=(t=0==n.b.c.length?null:xq(n.b,0))&&hrn(n,0),t}function ynn(n,t){for(;t[0]<n.length&&GO(" \t\r\n",YTn(fV(n,t[0])))>=0;)++t[0]}function knn(n,t){this.e=t,this.a=Van(n),this.a<54?this.f=j2(n):this.c=npn(n)}function jnn(n,t,e,i){wWn(),Ap.call(this,26),this.c=n,this.a=t,this.d=e,this.b=i}function Enn(n,t,e){var i,r;for(i=10,r=0;r<e-1;r++)t<i&&(n.a+="0"),i*=10;n.a+=t}function Tnn(n,t){var e;for(e=0;n.e!=n.i.gc();)gq(t,kpn(n),iln(e)),e!=DWn&&++e}function Mnn(n,t){var e;for(++n.d,++n.c[t],e=t+1;e<n.a.length;)++n.a[e],e+=e&-e}function Snn(n,t){var e,i,r;r=t.c.i,i=(e=BB(RX(n.f,r),57)).d.c-e.e.c,Yrn(t.a,i,0)}function Pnn(n){var t,e;return t=n+128,!(e=(jq(),jtt)[t])&&(e=jtt[t]=new $b(n)),e}function Cnn(n,t){var e;return kW(t),xnn(!!(e=n[":"+t]),Pun(Gk(Ant,1),HWn,1,5,[t])),e}function Inn(n){var t,e;if(n.b){e=null;do{t=n.b,n.b=null,e=sPn(t,e)}while(n.b);n.b=e}}function Onn(n){var t,e;if(n.a){e=null;do{t=n.a,n.a=null,e=sPn(t,e)}while(n.a);n.a=e}}function Ann(n){var t;for(++n.a,t=n.c.a.length;n.a<t;++n.a)if(n.c.b[n.a])return}function $nn(n,t){var e,i;for(e=(i=t.c)+1;e<=t.f;e++)n.a[e]>n.a[i]&&(i=e);return i}function Lnn(n,t){var e;return 0==(e=Ibn(n.e.c,t.e.c))?Pln(n.e.d,t.e.d):e}function Nnn(n,t){return 0==t.e||0==n.e?eet:($On(),ANn(n,t))}function xnn(n,t){if(!n)throw Hp(new _y(YNn("Enum constant undefined: %s",t)))}function Dnn(){Dnn=O,uut=new St,out=new Tt,cut=new At,aut=new $t,sut=new Lt}function Rnn(){Rnn=O,vit=new BS("BY_SIZE",0),mit=new BS("BY_SIZE_AND_SHAPE",1)}function Knn(){Knn=O,Dct=new XS("EADES",0),Rct=new XS("FRUCHTERMAN_REINGOLD",1)}function _nn(){_nn=O,Sht=new PP("READING_DIRECTION",0),Pht=new PP("ROTATION",1)}function Fnn(){Fnn=O,Mht=lhn((Vvn(),Pun(Gk(Cht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])))}function Bnn(){Bnn=O,jvt=lhn((Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])))}function Hnn(){Hnn=O,Ost=lhn((LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Cst,Sst,Tst])))}function qnn(){qnn=O,zlt=lhn((Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])))}function Gnn(){Gnn=O,sTt=lhn(($Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])))}function znn(){znn=O,bMt=lhn((rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])))}function Unn(){Unn=O,BEt=lhn((YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])))}function Xnn(){Xnn=O,qat=lhn((yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])))}function Wnn(){Wnn=O,GPt=lhn((Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])))}function Vnn(){Vnn=O,zCt=lhn((cpn(),Pun(Gk(JCt,1),$Vn,249,0,[BCt,qCt,_Ct,FCt,HCt])))}function Qnn(){Qnn=O,OIt=lhn((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])))}function Ynn(n,t){var e;return(e=BB(RX(n.a,t),134))||(e=new Zn,VW(n.a,t,e)),e}function Jnn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.a==n}function Znn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.i==n}function ntn(n,t){return kW(t),Dz(n),!!n.d.Ob()&&(t.td(n.d.Pb()),!0)}function ttn(n){return Vhn(n,DWn)>0?DWn:Vhn(n,_Vn)<0?_Vn:dG(n)}function etn(n){return n<3?(lin(n,IVn),n+1):n<OVn?CJ(n/.75+1):DWn}function itn(n,t){var e;return null==n.i&&qFn(n),e=n.i,t>=0&&t<e.length?e[t]:null}function rtn(n,t,e){var i;if(null==t)throw Hp(new gv);return i=zJ(n,t),i4(n,t,e),i}function ctn(n){return n.a>=-.01&&n.a<=fJn&&(n.a=0),n.b>=-.01&&n.b<=fJn&&(n.b=0),n}function atn(n,t){return t==(c_(),c_(),Met)?n.toLocaleLowerCase():n.toLowerCase()}function utn(n){return(0!=(2&n.i)?"interface ":0!=(1&n.i)?"":"class ")+(ED(n),n.o)}function otn(n){var t;t=new $m,f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),t)}function stn(n,t){var e;return e=t>0?t-1:t,$j(Lj(Fen(LH(new Xm,e),n.n),n.j),n.k)}function htn(n,t,e,i){n.j=-1,qOn(n,EPn(n,t,e),(ZM(),BB(t,66).Mj().Ok(i)))}function ftn(n){this.g=n,this.f=new Np,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function ltn(n){this.b=new Np,this.a=new Np,this.c=new Np,this.d=new Np,this.e=n}function btn(n,t){this.a=new xp,this.e=new xp,this.b=(Mhn(),uvt),this.c=n,this.b=t}function wtn(n,t,e){NR.call(this),xtn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function dtn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(ry(),znt)}function gtn(n){if(n<0)throw Hp(new _y("Illegal Capacity: "+n));this.g=this.ri(n)}function ptn(n,t){if(0>n||n>t)throw Hp(new Tk("fromIndex: 0, toIndex: "+n+hYn+t))}function vtn(n){var t;if(n.a==n.b.a)throw Hp(new yv);return t=n.a,n.c=t,n.a=n.a.e,t}function mtn(n){var t;Mx(!!n.c),t=n.c.a,Atn(n.d,n.c),n.b==n.c?n.b=t:--n.a,n.c=null}function ytn(n,t){var e;return Qln(n),e=new vQ(n,n.a.rd(),4|n.a.qd(),t),new Rq(n,e)}function ktn(n,t){var e,i;return(e=BB(lfn(n.d,t),14))?(i=t,n.e.pc(i,e)):null}function jtn(n,t){var e;for(e=n.Kc();e.Ob();)hon(BB(e.Pb(),70),(hWn(),ult),t)}function Etn(n){var t;return(t=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,t=0),t}function Ttn(n,t,i){var r;Fkn(i,r=e.Math.max(0,n.b/2-.5),1),WB(t,new iP(i,r))}function Mtn(n,t,e){return CJ(HH(n.a.e[BB(t.a,10).p]-n.a.e[BB(e.a,10).p]))}function Stn(n,t,e,i,r,c){var a;SZ(a=W5(i),r),MZ(a,c),JIn(n.a,i,new L_(a,t,e.f))}function Ptn(n,t){var e;if(!(e=NNn(n.Tg(),t)))throw Hp(new _y(r6n+t+u6n));return e}function Ctn(n,t){var e;for(e=n;JJ(e);)if((e=JJ(e))==t)return!0;return!1}function Itn(n,t){var e,i,r;for(i=t.a.cd(),e=BB(t.a.dd(),14).gc(),r=0;r<e;r++)n.td(i)}function Otn(n,t){var e,i,r,c;for(kW(t),r=0,c=(i=n.c).length;r<c;++r)e=i[r],t.td(e)}function Atn(n,t){var e;return e=t.c,t.a.b=t.b,t.b.a=t.a,t.a=t.b=null,t.c=null,--n.b,e}function $tn(n,t){return!(!t||n.b[t.g]!=t||($X(n.b,t.g,null),--n.c,0))}function Ltn(n,t){return!!Zrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))}function Ntn(n,t){LK(BB(mMn(BB(n.e,10),(HXn(),ept)),98))&&(SQ(),m$(BB(n.e,10).j,t))}function xtn(n){n.b=(J9(),Qit),n.f=(G7(),rrt),n.d=(lin(2,AVn),new J6(2)),n.e=new Gj}function Dtn(){Dtn=O,Git=new qS("BEGIN",0),zit=new qS(eJn,1),Uit=new qS("END",2)}function Rtn(){Rtn=O,zPt=new _C(eJn,0),UPt=new _C("HEAD",1),XPt=new _C("TAIL",2)}function Ktn(){return hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])}function _tn(){return PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])}function Ftn(){return kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])}function Btn(){return sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Ivt,Tvt,Pvt,Mvt,Svt,Evt,Cvt,Ovt])}function Htn(){Htn=O,ZCt=lhn((QEn(),Pun(Gk(aIt,1),$Vn,98,0,[YCt,QCt,VCt,UCt,WCt,XCt])))}function qtn(){qtn=O,nrt=(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,Zit=nrt}function Gtn(n){this.b=(yX(n),new t_(n)),this.a=new Np,this.d=new Np,this.e=new Gj}function ztn(n){var t;return(t=e.Math.sqrt(n.a*n.a+n.b*n.b))>0&&(n.a/=t,n.b/=t),n}function Utn(n){var t;return n.w?n.w:((t=V1(n))&&!t.kh()&&(n.w=t),t)}function Xtn(n){var t;return null==n?null:VTn(t=BB(n,190),t.length)}function Wtn(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.li(t,n.g[t])}function Vtn(n){var t,e;for(t=n.a.d.j,e=n.c.d.j;t!=e;)orn(n.b,t),t=Mln(t);orn(n.b,t)}function Qtn(n){var t;for(t=0;t<n.c.length;t++)(l1(t,n.c.length),BB(n.c[t],11)).p=t}function Ytn(n,t,e){var i,r,c;for(r=t[e],i=0;i<r.length;i++)c=r[i],n.e[c.c.p][c.p]=i}function Jtn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r<c;++r)e=i[r],lL(n.g,e).a=t}function Ztn(n,t){var e;for(e=spn(n,0);e.b!=e.d.c;)UR(BB(b3(e),8),t);return n}function nen(n,t){return XR(B$(BB(RX(n.g,t),8)),_$(BB(RX(n.f,t),460).b))}function ten(n){var t;return p2(n.e,n),Px(n.b),n.c=n.a,t=BB(n.a.Pb(),42),n.b=dun(n),t}function een(n){var t;return JH(null==n||Array.isArray(n)&&!((t=vnn(n))>=14&&t<=16)),n}function ien(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function ren(n,t,e){var i,r;i=t;do{r=Gy(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function cen(n,t){var e,i;i=n.a,e=Qfn(n,t,null),i!=t&&!n.e&&(e=azn(n,t,e)),e&&e.Fi()}function aen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function uen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function oen(n,t){return _Mn(),E$(n.b.c.length-n.e.c.length,t.b.c.length-t.e.c.length)}function sen(n,t){return Zj(Jrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function hen(){hen=O,Aut=lhn((uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])))}function fen(){fen=O,tSt=lhn((wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])))}function len(){len=O,xMt=lhn((wvn(),Pun(Gk(nSt,1),$Vn,248,0,[CMt,AMt,$Mt,LMt,IMt,OMt])))}function ben(){ben=O,rht=lhn(($Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])))}function wen(){wen=O,oft=lhn((JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])))}function den(){den=O,nft=lhn((Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])))}function gen(){gen=O,rvt=lhn((TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])))}function pen(){pen=O,Hht=lhn((gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])))}function ven(){ven=O,Jyt=lhn((DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])))}function men(){men=O,uIt=lhn((lIn(),Pun(Gk(IIt,1),$Vn,273,0,[rIt,eIt,iIt,tIt,nIt,cIt])))}function yen(){yen=O,sCt=lhn((nMn(),Pun(Gk(yCt,1),$Vn,312,0,[aCt,rCt,uCt,eCt,cCt,iCt])))}function ken(){return n$n(),Pun(Gk(GCt,1),$Vn,93,0,[ICt,CCt,ACt,DCt,xCt,NCt,$Ct,LCt,OCt])}function jen(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,0,e,n.a))}function Een(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.b))}function Ten(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.b))}function Men(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.f))}function Sen(n,t){var e;e=n.g,n.g=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.g))}function Pen(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,5,e,n.i))}function Cen(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,6,e,n.j))}function Ien(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.j))}function Oen(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.c))}function Aen(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,2,e,n.k))}function $en(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,2,e,n.d))}function Len(n,t){var e;e=n.s,n.s=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,4,e,n.s))}function Nen(n,t){var e;e=n.t,n.t=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,5,e,n.t))}function xen(n,t){var e;e=n.F,n.F=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,e,t))}function Den(n,t){var e;return(e=BB(RX((nS(),mAt),n),55))?e.xj(t):x8(Ant,HWn,1,t,5,1)}function Ren(n,t){var e;return t in n.a&&(e=zJ(n,t).he())?e.a:null}function Ken(n,t){var e,i;return tE(),i=new uo,!!t&&INn(i,t),xin(e=i,n),e}function _en(n,t,e){if(xsn(n,e),!n.Bk()&&null!=e&&!n.wj(e))throw Hp(new lv);return e}function Fen(n,t){return n.n=t,n.n?(n.f=new Np,n.e=new Np):(n.f=null,n.e=null),n}function Ben(n,t,e,i,r,c){var a;return Qen(e,a=mX(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Hen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=e}function qen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=e}function Gen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=e}function zen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=e}function Uen(n,t,e,i,r){this.d=t,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=e}function Xen(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r<c;++r)e=i[r],V9(n.a,e);return n}function Wen(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)yX(t[e]);return new AO(n)}function Ven(n){var t=/function(?:\s+([\w$]+))?\s*\(/.exec(n);return t&&t[1]||zVn}function Qen(n,t){if(n){t.n=n;var e=UJ(t);e?e.gm=t:SWn[n]=[t]}}function Yen(n,t,i){var r;return r=n.length,_Cn(n,0,t,0,e.Math.min(i,r),!0),t}function Jen(n,t,e){var i,r;for(r=t.Kc();r.Ob();)i=BB(r.Pb(),79),TU(n,BB(e.Kb(i),33))}function Zen(){YE();for(var n=PWn,t=0;t<arguments.length;t++)n.push(arguments[t])}function nin(n,t){var e,i,r;for(i=0,r=(e=t).length;i<r;++i)r5(n,e[i],n.c.b,n.c)}function tin(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),WB(n.a,t)}function ein(n){Mx(n.c>=0),rgn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function iin(n){return n.a<54?n.f<0?-1:n.f>0?1:0:(!n.c&&(n.c=yhn(n.f)),n.c).e}function rin(n){if(!(n>=0))throw Hp(new _y("tolerance ("+n+") must be >= 0"));return n}function cin(){return cMt||ksn(cMt=new ORn,Pun(Gk(_it,1),HWn,130,0,[new Nf])),cMt}function ain(){ain=O,Gvt=new zP(hJn,0),Hvt=new zP("INPUT",1),qvt=new zP("OUTPUT",2)}function uin(){uin=O,wht=new MP("ARD",0),ght=new MP("MSD",1),dht=new MP("MANUAL",2)}function oin(){oin=O,Omt=new YP("BARYCENTER",0),Amt=new YP(E1n,1),$mt=new YP(T1n,2)}function sin(n,t){var e;if(e=n.gc(),t<0||t>e)throw Hp(new tK(t,e));return new RK(n,t)}function hin(n,t){var e;return cL(t,42)?n.c.Mc(t):(e=rdn(n,t),Wdn(n,t),e)}function fin(n,t,e){return Ihn(n,t),Nrn(n,e),Len(n,0),Nen(n,1),nln(n,!0),Yfn(n,!0),n}function lin(n,t){if(n<0)throw Hp(new _y(t+" cannot be negative but was: "+n));return n}function bin(n,t){var e,i;for(e=0,i=n.gc();e<i;++e)if(cV(t,n.Xb(e)))return e;return-1}function win(n){var t;for(t=n.c.Cc().Kc();t.Ob();)BB(t.Pb(),14).$b();n.c.$b(),n.d=0}function din(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)QU(t=e[i],t.length,null)}function gin(n){var t,e;if(0==n)return 32;for(e=0,t=1;0==(t&n);t<<=1)++e;return e}function pin(n){var t;for(t=new Wb(eyn(n));t.a<t.c.c.length;)BB(n0(t),680).Gf()}function vin(n){vM(),this.g=new xp,this.f=new xp,this.b=new xp,this.c=new pJ,this.i=n}function min(){this.f=new Gj,this.d=new wm,this.c=new Gj,this.a=new Np,this.b=new Np}function yin(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=null,this.c=new lK(this,t,e,i)}function kin(n,t,e,i,r){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1,r||(this.o=-2-i-1)}function jin(){OL.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=k6n}function Ein(){return n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GIt,UIt,qIt,XIt,WIt,QIt,VIt,zIt,HIt])}function Tin(){return tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Iit])}function Min(){Min=O,Ott=Pun(Gk(ANt,1),hQn,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function Sin(){Sin=O,kmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Pin(){Pin=O,jmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Cin(){Cin=O,Mmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Iin(){Iin=O,Cmt=WG(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat,$ot)}function Oin(){Oin=O,hht=new TP("LAYER_SWEEP",0),sht=new TP(B1n,1),fht=new TP(QZn,2)}function Ain(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?BB(xq(e.a,i-1),10):null}function $in(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.k))}function Lin(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.f))}function Nin(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,e,n.i))}function xin(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.a))}function Din(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Rin(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Kin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function _in(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function Fin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,e,n.c))}function Bin(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.d))}function Hin(n,t){var e;e=n.D,n.D=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.D))}function qin(n,t){n.r>0&&n.c<n.r&&(n.c+=t,n.i&&n.i.d>0&&0!=n.g&&qin(n.i,t/n.r*n.i.d))}function Gin(n,t,e){var i;n.b=t,n.a=e,i=512==(512&n.a)?new Fm:new Dh,n.c=MDn(i,n.b,n.a)}function zin(n,t){return $xn(n.e,t)?(ZM(),hnn(t)?new lq(t,n):new xI(t,n)):new KI(t,n)}function Uin(n,t){return Jj(Zrn(n.a,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function Xin(n,t,e){return x7(n,new fw(t),new un,new lw(e),Pun(Gk(nit,1),$Vn,132,0,[]))}function Win(n){return 0>n?new VT:new $D(null,new m5(n+1,n))}function Vin(n,t){var e;return SQ(),e=new XT(1),XI(n)?mZ(e,n,t):jCn(e.f,n,t),new Xb(e)}function Qin(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function Yin(n){var t;return cL(t=mMn(n,(hWn(),dlt)),160)?mwn(BB(t,160)):null}function Jin(n){var t;return(n=e.Math.max(n,2))>(t=kon(n))?(t<<=1)>0?t:OVn:t}function Zin(n){switch(uN(3!=n.e),n.e){case 2:return!1;case 0:return!0}return _5(n)}function nrn(n,t){var e;return!!cL(t,8)&&(e=BB(t,8),n.a==e.a&&n.b==e.b)}function trn(n,t,e){var i,r;return r=t>>5,i=31&t,e0(jz(n.n[e][r],dG(yz(i,1))),3)}function ern(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)vjn(n,(e=BB(i.Pb(),42)).cd(),e.dd())}function irn(n,t){var e;e=new it,BB(t.b,65),BB(t.b,65),BB(t.b,65),Otn(t.a,new TB(n,e,t))}function rrn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,21,e,n.b))}function crn(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,e,n.d))}function arn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,13,e,n.j))}function urn(n,t,e){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i<e;r=r+1&c,++i)$X(t,i,n.a[r])}function orn(n,t){var e;return kW(t),e=t.g,!n.b[e]&&($X(n.b,e,t),++n.c,!0)}function srn(n,t){var e;return!((e=null==t?-1:E7(n.b,t,0))<0||(hrn(n,e),0))}function hrn(n,t){var e;e=s6(n.b,n.b.c.length-1),t<n.b.c.length&&(c5(n.b,t,e),KCn(n,t))}function frn(n,t){0==(k5(),Qet?null:t.c).length&&zD(t,new X),mZ(n.a,Qet?null:t.c,t)}function lrn(n,t){OTn(t,"Hierarchical port constraint processing",1),bpn(n),YXn(n),HSn(t)}function brn(n,t){var e,i;for(i=t.Kc();i.Ob();)e=BB(i.Pb(),266),n.b=!0,TU(n.e,e),e.b=n}function wrn(n,t){var e,i;return e=1-t,i=n.a[e],n.a[e]=i.a[t],i.a[t]=n,n.b=!0,i.b=!1,i}function drn(n,t){var e,i;return e=BB(mMn(n,(HXn(),spt)),8),i=BB(mMn(t,spt),8),Pln(e.b,i.b)}function grn(n){RG.call(this),this.b=Gy(MD(mMn(n,(HXn(),ypt)))),this.a=BB(mMn(n,Zdt),218)}function prn(n,t,e){G2.call(this,n,t,e),this.a=new xp,this.b=new xp,this.d=new Wd(this)}function vrn(n){this.e=n,this.d=new bE(etn(gz(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function mrn(n){this.b=n,this.a=x8(ANt,hQn,25,n+1,15,1),this.c=x8(ANt,hQn,25,n,15,1),this.d=0}function yrn(n,t,e){var i;return jxn(n,t,i=new Np,e,!0,!0),n.b=new mrn(i.c.length),i}function krn(n,t){var e;return(e=BB(RX(n.c,t),458))||((e=new cm).c=t,VW(n.c,e.c,e)),e}function jrn(n,t){var e=n.a,i=0;for(var r in e)e.hasOwnProperty(r)&&(t[i++]=r);return t}function Ern(n){return null==n.b?(YM(),YM(),x$t):n.Lk()?n.Kk():n.Jk()}function Trn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)Pen(t=BB(kpn(e),33),0),Cen(t,0)}function Mrn(){Mrn=O,sat=new up(OZn),hat=new up(AZn),oat=new up($Zn),uat=new up(LZn)}function Srn(){Srn=O,qut=new ZS("TO_INTERNAL_LTR",0),Hut=new ZS("TO_INPUT_DIRECTION",1)}function Prn(){Prn=O,Qkt=new dC("P1_NODE_PLACEMENT",0),Ykt=new dC("P2_EDGE_ROUTING",1)}function Crn(){Crn=O,Rst=new kP("START",0),Dst=new kP("MIDDLE",1),xst=new kP("END",2)}function Irn(){Irn=O,tst=new iR("edgelabelcenterednessanalysis.includelabel",(hN(),ptt))}function Orn(n,t){JT(AV(new Rq(null,new w1(new Cb(n.b),1)),new JC(n,t)),new nI(n,t))}function Arn(){this.c=new IE(0),this.b=new IE(B3n),this.d=new IE(F3n),this.a=new IE(JJn)}function $rn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)Ul(t=BB(e.Pb(),214),new HMn(t.e))}function Lrn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)zl(t=BB(e.Pb(),214),new Vz(t.f))}function Nrn(n,t){var e;e=n.zb,n.zb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.zb))}function xrn(n,t){var e;e=n.xb,n.xb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,e,n.xb))}function Drn(n,t){var e;e=n.yb,n.yb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.yb))}function Rrn(n,t){var e;(e=new Om).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function Krn(n,t){var e;(e=new pD).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function _rn(n,t){var e,i;for(z9(e=n.Pc(),0,e.length,t),i=0;i<e.length;i++)n._c(i,e[i])}function Frn(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),e|=n.Fc(i);return e}function Brn(n){var t,e,i;for(t=0,i=n.Kc();i.Ob();)t=~~(t+=null!=(e=i.Pb())?nsn(e):0);return t}function Hrn(n){var t;return 0==n?"UTC":(n<0?(n=-n,t="UTC+"):t="UTC-",t+bnn(n))}function qrn(n,t){var e;return cL(t,14)?(e=BB(t,14),n.Gc(e)):fnn(n,BB(yX(t),20).Kc())}function Grn(n,t,e){btn.call(this,t,e),this.d=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.d)}function zrn(n){n.a=null,n.e=null,n.b.c=x8(Ant,HWn,1,0,5,1),n.f.c=x8(Ant,HWn,1,0,5,1),n.c=null}function Urn(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function Xrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new xd(n)),t))))}function Wrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new Nd(n)),t))))}function Vrn(n,t){OTn(t,k1n,1),JT(wnn(new Rq(null,new w1(n.b,16)),new Zt),new ne),HSn(t)}function Qrn(n,t){var e,i;return e=BB(ZAn(n,(Uyn(),Ljt)),19),i=BB(ZAn(t,Ljt),19),E$(e.a,i.a)}function Yrn(n,t,e){var i,r;for(r=spn(n,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a+=t,i.b+=e;return n}function Jrn(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&wW(t,i.g))return i;return null}function Zrn(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&wW(t,i.i))return i;return null}function ncn(n,t,e){var i,r,c;for(i=0,r=0;r<e;r++)c=t[r],n[r]=c<<1|i,i=c>>>31;0!=i&&(n[e]=i)}function tcn(n,t){var e,i;for(SQ(),i=new Np,e=0;e<n;++e)i.c[i.c.length]=t;return new $k(i)}function ecn(n){var t;return QI((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.b))}function icn(n){var t;return QI((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.c))}function rcn(n){var t;return QI((t=E2(n)).a,0)?(fM(),fM(),Cet):(fM(),new kx(t.b))}function ccn(n){return n.b.c.i.k==(uSn(),Mut)?BB(mMn(n.b.c.i,(hWn(),dlt)),11):n.b.c}function acn(n){return n.b.d.i.k==(uSn(),Mut)?BB(mMn(n.b.d.i,(hWn(),dlt)),11):n.b.d}function ucn(n,t,e,i,r,c,a,u,o,s,h,f,l){return bCn(n,t,e,i,r,c,a,u,o,s,h,f,l),Gln(n,!1),n}function ocn(n,t,e,i,r,c,a){gT.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=u6(a)}function scn(n,t){typeof window===AWn&&typeof window.$gwt===AWn&&(window.$gwt[n]=t)}function hcn(n,t){return Aun(),n==Zat&&t==eut||n==eut&&t==Zat||n==tut&&t==nut||n==nut&&t==tut}function fcn(n,t){return Aun(),n==Zat&&t==nut||n==Zat&&t==tut||n==eut&&t==tut||n==eut&&t==nut}function lcn(n,t){return h$(),rin(fJn),e.Math.abs(0-t)<=fJn||0==t||isNaN(0)&&isNaN(t)?0:n/t}function bcn(){return bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])}function wcn(){wcn=O,P$t=new Im,I$t=Pun(Gk(FAt,1),N9n,170,0,[]),C$t=Pun(Gk(QAt,1),x9n,59,0,[])}function dcn(){dcn=O,smt=new VP("NO",0),umt=new VP("GREEDY",1),omt=new VP("LOOK_BACK",2)}function gcn(){gcn=O,Dut=new Ht,Nut=new Bt,xut=new qt,Lut=new Gt,Rut=new zt,Kut=new Ut}function pcn(n){var t,e;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),29).p=e,++e}function vcn(n,t){var e;return $In(new xC((e=_Tn(n)).c,e.d),new xC(e.b,e.a),n.rf(),t,n.Hf())}function mcn(n,t){var e;return n.b?null:(e=stn(n,n.g),DH(n.a,e),e.i=n,n.d=t,e)}function ycn(n,t,e){OTn(e,"DFS Treeifying phase",1),jdn(n,t),cxn(n,t),n.a=null,n.b=null,HSn(e)}function kcn(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Np,UCn(this),SQ(),m$(this.a,null)}function jcn(n){this.i=n.gc(),this.i>0&&(this.g=this.ri(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Ecn(n,t){MH.call(this,W$t,n,t),this.b=this,this.a=axn(n.Tg(),itn(this.e.Tg(),this.c))}function Tcn(n,t){var e,i;for(kW(t),i=t.vc().Kc();i.Ob();)e=BB(i.Pb(),42),n.zc(e.cd(),e.dd())}function Mcn(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!G3(n,t,i.Pb()))return!1;return!0}function Scn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.gh(t,-1-(-1==c?i:c),null,r)),r}function Pcn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.ih(t,-1-(-1==c?i:c),null,r)),r}function Ccn(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 Icn(n){switch(n.g){case 2:return kUn(),CIt;case 4:return kUn(),oIt;default:return n}}function Ocn(n){switch(n.g){case 1:return kUn(),SIt;case 3:return kUn(),sIt;default:return n}}function Acn(n){var t,e,i;return n.j==(kUn(),sIt)&&(e=SN(t=UOn(n),oIt),(i=SN(t,CIt))||i&&e)}function $cn(n){var t;return new YK(t=BB(n.e&&n.e(),9),BB(VU(t,t.length),9),t.length)}function Lcn(n,t){OTn(t,k1n,1),twn(sM(new Pw((gM(),new HV(n,!1,!1,new Ft))))),HSn(t)}function Ncn(n,t){return hN(),XI(n)?f6(n,SD(t)):UI(n)?Tz(n,MD(t)):zI(n)?Ez(n,TD(t)):n.wd(t)}function xcn(n,t){t.q=n,n.d=e.Math.max(n.d,t.r),n.b+=t.d+(0==n.a.c.length?0:n.c),WB(n.a,t)}function Dcn(n,t){var e,i,r,c;return r=n.c,e=n.c+n.b,c=n.d,i=n.d+n.a,t.a>r&&t.a<e&&t.b>c&&t.b<i}function Rcn(n,t,e,i){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,e),t&&_In(n,t),i&&n.xk(!0)}function Kcn(n,t){var e;qQ(e=BB(t,183),"x",n.i),qQ(e,"y",n.j),qQ(e,C6n,n.g),qQ(e,P6n,n.f)}function _cn(){_cn=O,Imt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Fcn(){Fcn=O,Dmt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Bcn(){Bcn=O,Xjt=new yC(QZn,0),Wjt=new yC("POLAR_COORDINATE",1),Ujt=new yC("ID",2)}function Hcn(){Hcn=O,Xvt=new UP("EQUALLY",0),Wvt=new UP(mJn,1),Vvt=new UP("NORTH_SOUTH",2)}function qcn(){qcn=O,$vt=lhn((sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Ivt,Tvt,Pvt,Mvt,Svt,Evt,Cvt,Ovt])))}function Gcn(){Gcn=O,Vst=lhn((kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])))}function zcn(){zcn=O,EMt=lhn((PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])))}function Ucn(){Ucn=O,cAt=lhn((hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])))}function Xcn(){Xcn=O,Qrt=new iR("debugSVG",(hN(),!1)),Yrt=new iR("overlapsExisted",!0)}function Wcn(n,t){return x7(new ow(n),new sw(t),new hw(t),new tn,Pun(Gk(nit,1),$Vn,132,0,[]))}function Vcn(){var n;return qet||(qet=new Kv,YA(n=new y5(""),(lM(),Het)),frn(qet,n)),qet}function Qcn(n,t){for(yX(t);n.Ob();)if(!Qan(BB(n.Pb(),10)))return!1;return!0}function Ycn(n,t){var e;return!!(e=XRn(cin(),n))&&(Ypn(t,(sWn(),mPt),e),!0)}function Jcn(n,t){var e;for(e=0;e<t.j.c.length;e++)BB(D7(n,e),21).Gc(BB(D7(t,e),14));return n}function Zcn(n,t){var e,i;for(i=new Wb(t.b);i.a<i.c.c.length;)e=BB(n0(i),29),n.a[e.p]=QMn(e)}function nan(n,t){var e,i;for(kW(t),i=n.vc().Kc();i.Ob();)e=BB(i.Pb(),42),t.Od(e.cd(),e.dd())}function tan(n,t){cL(t,83)?(BB(n.c,76).Xj(),ern(n,BB(t,83))):BB(n.c,76).Wb(t)}function ean(n){return cL(n,152)?o6(BB(n,152)):cL(n,131)?BB(n,131).a:cL(n,54)?new fy(n):new CT(n)}function ian(n,t){return t<n.b.gc()?BB(n.b.Xb(t),10):t==n.b.gc()?n.a:BB(xq(n.e,t-n.b.gc()-1),10)}function ran(n,t){n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=rbn(n.d,t)}function can(n,t){OTn(t,"Edge and layer constraint edge reversal",1),Fzn(LRn(n)),HSn(t)}function aan(n){var t;null==n.d?(++n.e,n.f=0,rfn(null)):(++n.e,t=n.d,n.d=null,n.f=0,rfn(t))}function uan(n){var t;return 0==(t=n.h)?n.l+n.m*IQn:t==PQn?n.l+n.m*IQn-OQn:n}function oan(n){return qD(),n.A.Hc((mdn(),DIt))&&!n.B.Hc((n_n(),UIt))?ndn(n):null}function san(n){if(kW(n),0==n.length)throw Hp(new Mk("Zero length BigInteger"));iKn(this,n)}function han(n){if(!n)throw Hp(new Fy("no calls to next() since the last call to remove()"))}function fan(n){return $Qn<n&&n<OQn?n<0?e.Math.ceil(n):e.Math.floor(n):uan(gNn(n))}function lan(n,t){var e,i,r;for(e=n.c.Ee(),r=t.Kc();r.Ob();)i=r.Pb(),n.a.Od(e,i);return n.b.Kb(e)}function ban(n,t){var e,i,r;if(null!=(e=n.Jg())&&n.Mg())for(i=0,r=e.length;i<r;++i)e[i].ui(t)}function wan(n,t){var e,i;for(i=vW(e=n).e;i;){if((e=i)==t)return!0;i=vW(e).e}return!1}function dan(n,t,e){var i,r;return(i=n.a.f[t.p])<(r=n.a.f[e.p])?-1:i==r?0:1}function gan(n,t,e){var i,r;return r=BB(UK(n.d,t),19),i=BB(UK(n.b,e),19),r&&i?U6(n,r.a,i.a):null}function pan(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)SA(e=BB(kpn(i),33),e.i+t.b,e.j+t.d)}function van(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),70),WB(n.d,e),KMn(n,e)}function man(n,t){var e,i;i=new Np,e=t;do{i.c[i.c.length]=e,e=BB(RX(n.k,e),17)}while(e);return i}function yan(n,t){var e;return 0!=(n.Db&t)?-1==(e=Rmn(n,t))?n.Eb:een(n.Eb)[e]:null}function kan(n,t){var e;return(e=new _f).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function jan(n,t){var e;return(e=new Ev).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function Ean(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return m0(n,t)}function Tan(n){switch(n.a.g){case 1:return new EI;case 3:return new hyn;default:return new If}}function Man(n){var t;if(n.g>1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw Hp(new yv)}function San(n){var t;return a$(),uS(syt,n)||((t=new ua).a=n,wR(syt,n,t)),BB(oV(syt,n),635)}function Pan(n){var t,e,i;return e=0,(i=n)<0&&(i+=OQn,e=PQn),t=CJ(i/IQn),M$(CJ(i-t*IQn),t,e)}function Can(n){var t,e,i;for(i=0,e=new QT(n.a);e.a<e.c.a.length;)t=u4(e),n.b.Hc(t)&&++i;return i}function Ian(n){var t,e,i;for(t=1,i=n.Kc();i.Ob();)t=~~(t=31*t+(null==(e=i.Pb())?0:nsn(e)));return t}function Oan(n,t){var e;this.c=n,gmn(n,e=new Np,t,n.b,null,!1,null,!1),this.a=new M2(e,0)}function Aan(n,t){this.b=n,this.e=t,this.d=t.j,this.f=(ZM(),BB(n,66).Oj()),this.k=axn(t.e.Tg(),n)}function $an(n,t,e){this.b=(kW(n),n),this.d=(kW(t),t),this.e=(kW(e),e),this.c=this.d+""+this.e}function Lan(){this.a=BB(mpn((fRn(),qct)),19).a,this.c=Gy(MD(mpn(cat))),this.b=Gy(MD(mpn(tat)))}function Nan(){Nan=O,KCt=lhn((n$n(),Pun(Gk(GCt,1),$Vn,93,0,[ICt,CCt,ACt,DCt,xCt,NCt,$Ct,LCt,OCt])))}function xan(){xan=O,Fit=lhn((tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Iit])))}function Dan(){Dan=O,Rrt=new US("UP",0),Nrt=new US(pJn,1),xrt=new US(cJn,2),Drt=new US(aJn,3)}function Ran(){Ran=O,sZ(),ykt=new $O(X3n,kkt=Rkt),B0(),vkt=new $O(W3n,mkt=Hkt)}function Kan(){Kan=O,jft=new NP("ONE_SIDED",0),Eft=new NP("TWO_SIDED",1),kft=new NP("OFF",2)}function _an(n){n.r=new Rv,n.w=new Rv,n.t=new Np,n.i=new Np,n.d=new Rv,n.a=new bA,n.c=new xp}function Fan(n){this.n=new Np,this.e=new YT,this.j=new YT,this.k=new Np,this.f=new Np,this.p=n}function Ban(n,t){n.c&&(JKn(n,t,!0),JT(new Rq(null,new w1(t,16)),new qd(n))),JKn(n,t,!1)}function Han(n,t,e){return n==(oin(),$mt)?new Pc:0!=H$n(t,1)?new Rj(e.length):new Dj(e.length)}function qan(n,t){var e;return t?((e=t.Ve()).dc()||(n.q?Tcn(n.q,e):n.q=new mO(e)),n):n}function Gan(n,t){var e;return void 0===(e=n.a.get(t))?++n.d:(mR(n.a,t),--n.c,oY(n.b)),e}function zan(n,t){var e;return 0==(e=t.p-n.p)?Pln(n.f.a*n.f.b,t.f.a*t.f.b):e}function Uan(n,t){var e,i;return(e=n.f.c.length)<(i=t.f.c.length)?-1:e==i?0:1}function Xan(n){return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:eQ(n)}function Wan(n){var t;if(n){if((t=n).dc())throw Hp(new yv);return t.Xb(t.gc()-1)}return u1(n.Kc())}function Van(n){var t;return Vhn(n,0)<0&&(n=uH(n)),64-(0!=(t=dG(kz(n,32)))?ZIn(t):ZIn(dG(n))+32)}function Qan(n){var t;return t=BB(mMn(n,(hWn(),Qft)),61),n.k==(uSn(),Mut)&&(t==(kUn(),CIt)||t==oIt)}function Yan(n,t,e){var i,r;(r=BB(mMn(n,(HXn(),vgt)),74))&&(Wsn(i=new km,0,r),Ztn(i,e),Frn(t,i))}function Jan(n,t,e){var i,r,c,a;i=(a=vW(n)).d,r=a.c,c=n.n,t&&(c.a=c.a-i.b-r.a),e&&(c.b=c.b-i.d-r.b)}function Zan(n,t){var e,i;return(e=n.j)!=(i=t.j)?e.g-i.g:n.p==t.p?0:e==(kUn(),sIt)?n.p-t.p:t.p-n.p}function nun(n){var t,e;for(PUn(n),e=new Wb(n.d);e.a<e.c.c.length;)(t=BB(n0(e),101)).i&&XSn(t)}function tun(n,t,e,i,r){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i),$X(n.b[t.g],e.g,r),$X(n.b[e.g],t.g,r)}function eun(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),BB(i.b,65),Otn(i.a,new EB(n,t,i))}function iun(n,t){n.d==(Ffn(),_Pt)||n.d==HPt?BB(t.a,57).c.Fc(BB(t.b,57)):BB(t.b,57).c.Fc(BB(t.a,57))}function run(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),_pn(n.n,t,i)):eSn(n,t,e,i)}function cun(n,t){var e;return Nrn(e=new Ho,t),f9((!n.A&&(n.A=new NL(O$t,n,7)),n.A),e),e}function aun(n,t,e){var i,r;return r=N2(t,A6n),pjn((i=new aI(n,e)).a,i.b,r),r}function uun(n){var t;return(!n.a||0==(1&n.Bb)&&n.a.kh())&&cL(t=Ikn(n),148)&&(n.a=BB(t,148)),n.a}function oun(n,t){var e,i;for(kW(t),i=t.Kc();i.Ob();)if(e=i.Pb(),!n.Hc(e))return!1;return!0}function sun(n,t){var e,i,r;return e=n.l+t.l,i=n.m+t.m+(e>>22),r=n.h+t.h+(i>>22),M$(e&SQn,i&SQn,r&PQn)}function hun(n,t){var e,i,r;return e=n.l-t.l,i=n.m-t.m+(e>>22),r=n.h-t.h+(i>>22),M$(e&SQn,i&SQn,r&PQn)}function fun(n){var t;return n<128?(!(t=(Mq(),Mtt)[n])&&(t=Mtt[n]=new Lb(n)),t):new Lb(n)}function lun(n){var t;return cL(n,78)?n:((t=n&&n.__java$exception)||ov(t=new jhn(n)),t)}function bun(n){if(cL(n,186))return BB(n,118);if(n)return null;throw Hp(new Hy(e8n))}function wun(n,t){if(null==t)return!1;for(;n.a!=n.b;)if(Nfn(t,_hn(n)))return!0;return!1}function dun(n){return!!n.a.Ob()||n.a==n.d&&(n.a=new S2(n.e.f),n.a.Ob())}function gun(n,t){var e;return 0!=(e=t.Pc()).length&&(tH(n.c,n.c.length,e),!0)}function pun(n,t,e){var i,r;for(r=t.vc().Kc();r.Ob();)i=BB(r.Pb(),42),n.yc(i.cd(),i.dd(),e);return n}function vun(n,t){var e;for(e=new Wb(n.b);e.a<e.c.c.length;)hon(BB(n0(e),70),(hWn(),ult),t)}function mun(n,t,e){var i,r;for(r=new Wb(n.b);r.a<r.c.c.length;)SA(i=BB(n0(r),33),i.i+t,i.j+e)}function yun(n,t){if(!n)throw Hp(new _y($Rn("value already present: %s",Pun(Gk(Ant,1),HWn,1,5,[t]))))}function kun(n,t){return!(!n||!t||n==t)&&_dn(n.d.c,t.d.c+t.d.b)&&_dn(t.d.c,n.d.c+n.d.b)}function jun(){return k5(),Qet?new y5(null):FOn(Vcn(),"com.google.common.base.Strings")}function Eun(n,t){var e;return e=sx(t.a.gc()),JT(ytn(new Rq(null,new w1(t,1)),n.i),new NC(n,e)),e}function Tun(n){var t;return Nrn(t=new Ho,"T"),f9((!n.d&&(n.d=new NL(O$t,n,11)),n.d),t),t}function Mun(n){var t,e,i,r;for(t=1,e=0,r=n.gc();e<r;++e)t=31*t+(null==(i=n.ki(e))?0:nsn(i));return t}function Sun(n,t,e,i){var r;return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),r=n.a[t][e],$X(n.a[t],e,i),r}function Pun(n,t,e,i,r){return r.gm=n,r.hm=t,r.im=I,r.__elementTypeId$=e,r.__elementTypeCategory$=i,r}function Cun(n,t,i,r,c){return jDn(),e.Math.min(zGn(n,t,i,r,c),zGn(i,r,n,t,qx(new xC(c.a,c.b))))}function Iun(){Iun=O,ast=new tP(QZn,0),rst=new tP(C1n,1),cst=new tP(I1n,2),ist=new tP("BOTH",3)}function Oun(){Oun=O,vst=new mP(eJn,0),mst=new mP(cJn,1),yst=new mP(aJn,2),kst=new mP("TOP",3)}function Aun(){Aun=O,Zat=new QS("Q1",0),eut=new QS("Q4",1),nut=new QS("Q2",2),tut=new QS("Q3",3)}function $un(){$un=O,bmt=new QP("OFF",0),wmt=new QP("SINGLE_EDGE",1),lmt=new QP("MULTI_EDGE",2)}function Lun(){Lun=O,WTt=new SC("MINIMUM_SPANNING_TREE",0),XTt=new SC("MAXIMUM_SPANNING_TREE",1)}function Nun(){Nun=O,new up("org.eclipse.elk.addLayoutConfig"),ZTt=new ou,JTt=new au,new uu}function xun(n){var t,e;for(t=new YT,e=spn(n.d,0);e.b!=e.d.c;)DH(t,BB(b3(e),188).c);return t}function Dun(n){var t,e;for(e=new Np,t=n.Kc();t.Ob();)gun(e,wDn(BB(t.Pb(),33)));return e}function Run(n){var t;tBn(n,!0),t=VVn,Lx(n,(HXn(),fpt))&&(t+=BB(mMn(n,fpt),19).a),hon(n,fpt,iln(t))}function Kun(n,t,e){var i;$U(n.a),Otn(e.i,new jg(n)),kgn(n,i=new C$(BB(RX(n.a,t.b),65)),t),e.f=i}function _un(n,t){var e,i;return e=n.c,(i=t.e[n.p])<e.a.c.length-1?BB(xq(e.a,i+1),10):null}function Fun(n,t){var e,i;for(WQ(t,"predicate"),i=0;n.Ob();i++)if(e=n.Pb(),t.Lb(e))return i;return-1}function Bun(n,t){var e,i;if(i=0,n<64&&n<=t)for(t=t<64?t:63,e=n;e<=t;e++)i=i0(i,yz(1,e));return i}function Hun(n){var t,e,i;for(SQ(),i=0,e=n.Kc();e.Ob();)i+=null!=(t=e.Pb())?nsn(t):0,i|=0;return i}function qun(n){var t;return tE(),t=new co,n&&f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),t),t}function Gun(n){var t;return(t=new p).a=n,t.b=yon(n),t.c=x8(Qtt,sVn,2,2,6,1),t.c[0]=Hrn(n),t.c[1]=Hrn(n),t}function zun(n,t){if(0===t)return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),void n.o.c.$b();mPn(n,t)}function Uun(n,t,e){switch(e.g){case 2:n.b=t;break;case 1:n.c=t;break;case 4:n.d=t;break;case 3:n.a=t}}function Xun(n){switch(n.g){case 1:return ECt;case 2:return jCt;case 3:return TCt;default:return MCt}}function Wun(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 2:case 4:return!0;default:return!1}}function Vun(){Vun=O,yft=lhn((bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])))}function Qun(){Qun=O,JIt=lhn((n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GIt,UIt,qIt,XIt,WIt,QIt,VIt,zIt,HIt])))}function Yun(){Yun=O,Xkt=dq(ogn(ogn(FM(dq(new B2,(zyn(),Kyt),(DPn(),Qyt)),_yt),Xyt),Wyt),Fyt,Vyt)}function Jun(){Jun=O,Aht=new CP(QZn,0),Oht=new CP("INCOMING_ONLY",1),$ht=new CP("OUTGOING_ONLY",2)}function Zun(){Zun=O,ftt={boolean:UT,number:Cy,string:Iy,object:TCn,function:TCn,undefined:Wp}}function non(n,t){vH(n>=0,"Negative initial capacity"),vH(t>=0,"Non-positive load factor"),$U(this)}function ton(n,t,e){return!(n>=128)&&JI(n<64?e0(yz(1,n),e):e0(yz(1,n-64),t),0)}function eon(n,t){return!(!n||!t||n==t)&&Ibn(n.b.c,t.b.c+t.b.b)<0&&Ibn(t.b.c,n.b.c+n.b.b)<0}function ion(n){var t,e,i;return e=n.n,i=n.o,t=n.d,new UV(e.a-t.b,e.b-t.d,i.a+(t.b+t.c),i.b+(t.d+t.a))}function ron(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)Son(n,t=e[i],(kUn(),SIt)),Son(n,t,sIt)}function con(n){var t,e;for(null==n.j&&(n.j=(PY(),Ijn(ett.ce(n)))),t=0,e=n.j.length;t<e;++t);}function aon(n){var t,e;return M$(t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,~n.h+(0==t&&0==e?1:0)&PQn)}function uon(n,t){return TFn(BB(BB(RX(n.g,t.a),46).a,65),BB(BB(RX(n.g,t.b),46).a,65))}function oon(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));return n.hi()&&(e=nZ(n,e)),n.Vh(t,e)}function son(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function hon(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function fon(n){var t,e;return qan(e=new y6,n),hon(e,(Mrn(),sat),n),eBn(n,e,t=new xp),Szn(n,e,t),e}function lon(n){var t,e,i;for(jDn(),e=x8(PMt,sVn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=lmn(i,n);return e}function bon(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r<i-1;r++)e|=Pdn(n,t,r,r+1);return e}function won(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)vmn(n,c,a)||FRn(n,c,a,!0,!1)}function don(n,t){this.b=n,NO.call(this,(BB(Wtn(QQ((QX(),t$t).o),10),18),t.i),t.g),this.a=(wcn(),I$t)}function gon(n,t){this.c=n,this.d=t,this.b=this.d/this.c.c.Hd().gc()|0,this.a=this.d%this.c.c.Hd().gc()}function pon(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function von(n,t,i){this.q=new e.Date,this.q.setFullYear(n+sQn,t,i),this.q.setHours(0,0,0,0),lBn(this,0)}function mon(){mon=O,Nvt=new qP(QZn,0),Lvt=new qP("NODES_AND_EDGES",1),xvt=new qP("PREFER_EDGES",2)}function yon(n){var t;return 0==n?"Etc/GMT":(n<0?(n=-n,t="Etc/GMT-"):t="Etc/GMT+",t+bnn(n))}function kon(n){var t;if(n<0)return _Vn;if(0==n)return 0;for(t=OVn;0==(t&n);t>>=1);return t}function jon(n){var t,e;return 32==(e=ZIn(n.h))?32==(t=ZIn(n.m))?ZIn(n.l)+32:t+20-10:e-12}function Eon(n){var t;return null==(t=n.a[n.b])?null:($X(n.a,n.b,null),n.b=n.b+1&n.a.length-1,t)}function Ton(n){var t,e;return t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,e=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,t||e}function Mon(n,t,e){var i,r;return i=new H8(t,e),r=new q,n.b=Wxn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function Son(n,t,e){var i,r,c;for(c=0,r=Lfn(t,e).Kc();r.Ob();)i=BB(r.Pb(),11),VW(n.c,i,iln(c++))}function Pon(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).g.c=-t.g.c-t.g.b;kNn(n)}function Con(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).d.c=-t.d.c-t.d.b;yNn(n)}function Ion(n){var t;return(!n.c||0==(1&n.Bb)&&0!=(64&n.c.Db))&&cL(t=Ikn(n),88)&&(n.c=BB(t,26)),n.c}function Oon(n){var t,e,i;t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,i=~n.h+(0==t&&0==e?1:0)&PQn,n.l=t,n.m=e,n.h=i}function Aon(n){var t,e,i,r,c;for(t=new Gj,r=0,c=(i=n).length;r<c;++r)e=i[r],t.a+=e.a,t.b+=e.b;return t}function $on(n,t){var e,i,r,c,a;for(SQ(),a=!1,r=0,c=(i=t).length;r<c;++r)e=i[r],a|=n.Fc(e);return a}function Lon(n){var t,e;for(jDn(),e=-17976931348623157e292,t=0;t<n.length;t++)n[t]>e&&(e=n[t]);return e}function Non(n,t,e){var i;return jxn(n,t,i=new Np,(kUn(),oIt),!0,!1),jxn(n,e,i,CIt,!1,!1),i}function xon(n,t,e){var i,r;return r=N2(t,"labels"),XAn((i=new gI(n,e)).a,i.b,r),r}function Don(n,t,e,i){var r;return(r=m$n(n,t,e,i))||!(r=aln(n,e,i))||Fqn(n,t,r)?r:null}function Ron(n,t,e,i){var r;return(r=y$n(n,t,e,i))||!(r=uln(n,e,i))||Fqn(n,t,r)?r:null}function Kon(n,t){var e;for(e=0;e<n.a.a.length;e++)if(!BB(Dq(n.a,e),169).Lb(t))return!1;return!0}function _on(n,t,e){if(yX(t),e.Ob())for(sO(t,CX(e.Pb()));e.Ob();)sO(t,n.a),sO(t,CX(e.Pb()));return t}function Fon(n){var t,e,i;for(SQ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?nsn(t):0),i|=0;return i}function Bon(n,t,e,i,r){var c;return c=jAn(n,t),e&&Oon(c),r&&(n=Smn(n,t),ltt=i?aon(n):M$(n.l,n.m,n.h)),c}function Hon(n,t){var e;try{t.Vd()}catch(i){if(!cL(i=lun(i),78))throw Hp(i);e=i,n.c[n.c.length]=e}}function qon(n,t,e){var i,r;return cL(t,144)&&e?(i=BB(t,144),r=e,n.a[i.b][r.b]+n.a[r.b][i.b]):0}function Gon(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return fwn(n,t)}function zon(n,t){switch(t.g){case 0:cL(n.b,631)||(n.b=new Lan);break;case 1:cL(n.b,632)||(n.b=new fH)}}function Uon(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&BB(n.g[n.i-1],47).Ob():tZ(n);)vI(t,aLn(n))}function Xon(n,t,e){n.g=APn(n,t,(kUn(),oIt),n.b),n.d=APn(n,e,oIt,n.b),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Won(n,t,e){n.g=APn(n,t,(kUn(),CIt),n.j),n.d=APn(n,e,CIt,n.j),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Von(n,t,e){return!jE(AV(new Rq(null,new w1(n.c,16)),new aw(new ZC(t,e)))).sd((dM(),tit))}function Qon(n){var t;return EW(n),t=new sn,n.a.sd(t)?(CL(),new vy(kW(t.a))):(CL(),CL(),Set)}function Yon(n){var t;return!(n.b<=0)&&((t=GO("MLydhHmsSDkK",YTn(fV(n.c,0))))>1||t>=0&&n.b<3)}function Jon(n){var t,e;for(t=new km,e=spn(n,0);e.b!=e.d.c;)Kx(t,0,new wA(BB(b3(e),8)));return t}function Zon(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),81).f.$b();ky(n.b,n),BNn(n)}function nsn(n){return XI(n)?vvn(n):UI(n)?VO(n):zI(n)?(kW(n),n?1231:1237):iz(n)?n.Hb():AG(n)?PN(n):tY(n)}function tsn(n){return XI(n)?Qtt:UI(n)?Ptt:zI(n)?ktt:iz(n)||AG(n)?n.gm:n.gm||Array.isArray(n)&&Gk(ntt,1)||ntt}function esn(n){if(0===n.g)return new cu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function isn(n){if(0===n.g)return new iu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function rsn(n,t,e){if(0===t)return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),void tan(n.o,e);yCn(n,t,e)}function csn(n,t,e){this.g=n,this.e=new Gj,this.f=new Gj,this.d=new YT,this.b=new YT,this.a=t,this.c=e}function asn(n,t,e,i){this.b=new Np,this.n=new Np,this.i=i,this.j=e,this.s=n,this.t=t,this.r=0,this.d=0}function usn(n){this.e=n,this.d=new p4(this.e.g),this.a=this.d,this.b=dun(this),this.$modCount=n.$modCount}function osn(n){for(;!n.d||!n.d.Ob();){if(!n.b||Wy(n.b))return null;n.d=BB(dU(n.b),47)}return n.d}function ssn(n){return WB(n.c,(Nun(),ZTt)),uen(n.a,Gy(MD(mpn((Rwn(),Vpt)))))?new qu:new Cg(n)}function hsn(n){switch(n.g){case 1:return F3n;default:case 2:return 0;case 3:return JJn;case 4:return B3n}}function fsn(){var n;return wWn(),PNt||(n=ex(ZUn("M",!0)),n=gG(ZUn("M",!1),n),PNt=n)}function lsn(n,t){var e,i,r;for(r=n.b;r;){if(0==(e=n.a.ue(t,r.d)))return r;i=e<0?0:1,r=r.a[i]}return null}function bsn(n,t,e){var i,r;hN(),i=!!TO(e),(r=BB(t.xc(i),15))||(r=new Np,t.zc(i,r)),r.Fc(e)}function wsn(n,t){var e,i;return(e=BB(ZAn(n,(W$n(),dEt)),19).a)==(i=BB(ZAn(t,dEt),19).a)||e<i?-1:e>i?1:0}function dsn(n,t){return!!bNn(n,t)&&(JIn(n.b,BB(mMn(t,(hWn(),Xft)),21),t),DH(n.a,t),!0)}function gsn(n){var t,e;(t=BB(mMn(n,(hWn(),Elt)),10))&&(y7((e=t.c).a,t),0==e.a.c.length&&y7(vW(t).b,e))}function psn(n){return Qet?x8(Get,dYn,572,0,0,1):BB(Qgn(n.a,x8(Get,dYn,572,n.a.c.length,0,1)),842)}function vsn(n,t,e,i){return nV(),new hy(Pun(Gk(Hnt,1),kVn,42,0,[(zvn(n,t),new vT(n,t)),(zvn(e,i),new vT(e,i))]))}function msn(n,t,e){var i;return fin(i=new $m,t,e),f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),i),i}function ysn(n){var t,e,i,r;for(e=(r=fS(AOt,n)).length,i=x8(Qtt,sVn,2,e,6,1),t=0;t<e;++t)i[t]=r[t];return i}function ksn(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r<c;++r)e=i[r],a=new UX(n),e.Qe(a),NBn(a);$U(n.f)}function jsn(n,t){var e;return t===n||!!cL(t,224)&&(e=BB(t,224),Nfn(n.Zb(),e.Zb()))}function Esn(n,t){var e;2*t+1>=n.b.c.length||(Esn(n,2*t+1),(e=2*t+2)<n.b.c.length&&Esn(n,e),KCn(n,t))}function Tsn(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=Jin(e),i=x8(Qnt,CVn,330,r,0,1),this.b=i}function Msn(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:sS(e0(n[i],UQn),e0(t[i],UQn))?-1:1}function Ssn(n,t){var e,i;for(i=spn(n,0);i.b!=i.d.c;)(e=BB(b3(i),214)).e.length>0&&(t.td(e),e.i&&pln(e))}function Psn(n,t){var e,i;return i=BB(yan(n.a,4),126),e=x8(dAt,i9n,415,t,0,1),null!=i&&aHn(i,0,e,0,i.length),e}function Csn(n,t){var e;return e=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Isn(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(BB(e.Pb(),14).Hc(t))return!0;return!1}function Osn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(vmn(n,c,a))return!0;return!1}function Asn(n,t,e){var i,r,c,a;for(kW(e),a=!1,c=n.Zc(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function $sn(n,t){var e;return n===t||!!cL(t,83)&&(e=BB(t,83),zSn(lz(n),e.vc()))}function Lsn(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=BB(r.Pb(),42),n.re(t,i.dd()))return!0;return!1}function Nsn(n,t,e){return n.d[t.p][e.p]||(ivn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function xsn(n,t){if(!n.ai()&&null==t)throw Hp(new _y("The 'no null' constraint is violated"));return t}function Dsn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),Hin(n,null==t?null:(kW(t),t)),n.C&&n.yk(null)}function Rsn(n,t){return!(!n||n==t||!Lx(t,(hWn(),rlt)))&&BB(mMn(t,(hWn(),rlt)),10)!=n}function Ksn(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.pl()}}function _sn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n.ql()}}function Fsn(n){_J.call(this,"The given string does not match the expected format for individual spacings.",n)}function Bsn(){Bsn=O,uOt=new cI("ELK",0),oOt=new cI("JSON",1),aOt=new cI("DOT",2),sOt=new cI("SVG",3)}function Hsn(){Hsn=O,sjt=new vC(QZn,0),hjt=new vC("RADIAL_COMPACTION",1),fjt=new vC("WEDGE_COMPACTION",2)}function qsn(){qsn=O,zet=new pS("CONCURRENT",0),Uet=new pS("IDENTITY_FINISH",1),Xet=new pS("UNORDERED",2)}function Gsn(){Gsn=O,wM(),oct=new $O(BJn,sct=rct),uct=new up(HJn),hct=new up(qJn),fct=new up(GJn)}function zsn(){zsn=O,lst=new ji,bst=new Ei,fst=new Ti,hst=new Mi,kW(new Si),sst=new D}function Usn(){Usn=O,emt=new WP("CONSERVATIVE",0),imt=new WP("CONSERVATIVE_SOFT",1),rmt=new WP("SLOPPY",2)}function Xsn(){Xsn=O,dCt=new WA(15),wCt=new XA((sWn(),XSt),dCt),gCt=gPt,hCt=aSt,fCt=KSt,bCt=BSt,lCt=FSt}function Wsn(n,t,e){var i,r;for(i=new YT,r=spn(e,0);r.b!=r.d.c;)DH(i,new wA(BB(b3(r),8)));Asn(n,t,i)}function Vsn(n){var t,e,i;for(t=0,i=x8(PMt,sVn,8,n.b,0,1),e=spn(n,0);e.b!=e.d.c;)i[t++]=BB(b3(e),8);return i}function Qsn(n){var t;return!n.a&&(n.a=new eU(WAt,n,9,5)),0!=(t=n.a).i?HM(BB(Wtn(t,0),678)):null}function Ysn(n,t){var e;return e=rbn(n,t),sS(r0(n,t),0)|YI(r0(n,e),0)?e:rbn(bVn,r0(jz(e,63),1))}function Jsn(n,t){var e;e=null!=mpn((Rwn(),Vpt))&&null!=t.wg()?Gy(MD(t.wg()))/Gy(MD(mpn(Vpt))):1,VW(n.b,t,e)}function Zsn(n,t){var e,i;return(e=BB(n.d.Bc(t),14))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function nhn(n,t){var e,i;if(0!=(i=n.c[t]))for(n.c[t]=0,n.d-=i,e=t+1;e<n.a.length;)n.a[e]-=i,e+=e&-e}function thn(n){var t;if((t=n.a.c.length)>0)return Kz(t-1,n.a.c.length),s6(n.a,t-1);throw Hp(new mv)}function ehn(n,t,e){if(t<0)throw Hp(new Ay(n5n+t));t<n.j.c.length?c5(n.j,t,e):(g3(n,t),WB(n.j,e))}function ihn(n,t,e){if(n>t)throw Hp(new _y(mYn+n+yYn+t));if(n<0||t>e)throw Hp(new Tk(mYn+n+kYn+t+hYn+e))}function rhn(n){if(!n.a||0==(8&n.a.i))throw Hp(new Fy("Enumeration class expected for layout option "+n.f))}function chn(n){var t;++n.j,0==n.i?n.g=null:n.i<n.g.length&&(t=n.g,n.g=n.ri(n.i),aHn(t,0,n.g,0,n.i))}function ahn(n,t){var e,i;for(e=n.a.length-1,n.c=n.c-1&e;t!=n.c;)i=t+1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.c,null)}function uhn(n,t){var e,i;for(e=n.a.length-1;t!=n.b;)i=t-1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.b,null),n.b=n.b+1&e}function ohn(n,t,e){var i;return LZ(t,n.c.length),0!=(i=e.Pc()).length&&(tH(n.c,t,i),!0)}function shn(n){var t,e;if(null==n)return null;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return n[t];return null}function hhn(n,t,e){var i,r,c,a;for(c=0,a=(r=e).length;c<a;++c)if(i=r[c],n.b.re(t,i.cd()))return i;return null}function fhn(n){var t,e,i,r,c;for(c=1,i=0,r=(e=n).length;i<r;++i)c=31*c+(null!=(t=e[i])?nsn(t):0),c|=0;return c}function lhn(n){var t,e,i,r,c;for(t={},r=0,c=(i=n).length;r<c;++r)t[":"+(null!=(e=i[r]).f?e.f:""+e.g)]=e;return t}function bhn(n){var t;for(yX(n),C_(!0,"numberToAdvance must be nonnegative"),t=0;t<0&&dAn(n);t++)U5(n);return t}function whn(n){var t,e,i;for(i=0,e=new oz(ZL(n.a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||++i;return i}function dhn(n,t){var e,i,r;for(e=n,r=0;;){if(e==t)return r;if(!(i=e.e))throw Hp(new wv);e=vW(i),++r}}function ghn(n,t){var e,i,r;for(r=t-n.f,i=new Wb(n.d);i.a<i.c.c.length;)kdn(e=BB(n0(i),443),e.e,e.f+r);n.f=t}function phn(n,t,i){return e.Math.abs(t-n)<_3n||e.Math.abs(i-n)<_3n||(t-n>_3n?n-i>_3n:i-n>_3n)}function vhn(n,t){return n?t&&!n.j||cL(n,124)&&0==BB(n,124).a.b?0:n.Re():0}function mhn(n,t){return n?t&&!n.k||cL(n,124)&&0==BB(n,124).a.a?0:n.Se():0}function yhn(n){return ODn(),n<0?-1!=n?new Rpn(-1,-n):Ytt:n<=10?Ztt[CJ(n)]:new Rpn(1,n)}function khn(n){throw Zun(),Hp(new gy("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function jhn(n){hk(),V$(this),jQ(this),this.e=n,Cxn(this,n),this.g=null==n?zWn:Bbn(n),this.a="",this.b=n,this.a=""}function Ehn(){this.a=new nu,this.f=new dg(this),this.b=new gg(this),this.i=new pg(this),this.e=new vg(this)}function Thn(){cy.call(this,new q8(etn(16))),lin(2,oVn),this.b=2,this.a=new HW(null,null,0,null),iv(this.a,this.a)}function Mhn(){Mhn=O,cvt=new KP("DUMMY_NODE_OVER",0),avt=new KP("DUMMY_NODE_UNDER",1),uvt=new KP("EQUAL",2)}function Shn(){Shn=O,Xat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[(Ffn(),_Pt),FPt])),Wat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[HPt,KPt]))}function Phn(n){return(kUn(),yIt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b}function Chn(n){var t,e;for(t=n.b.a.a.ec().Kc();t.Ob();)e=new Q$n(BB(t.Pb(),561),n.e,n.f),WB(n.g,e)}function Ihn(n,t){var e,i;e=n.nk(t,null),i=null,t&&(iE(),cen(i=new Kp,n.r)),(e=HTn(n,i,e))&&e.Fi()}function Ohn(n,t){var e,i;for(i=0!=H$n(n.d,1),e=!0;e;)e=!1,e=t.c.Tf(t.e,i),e|=DNn(n,t,i,!1),i=!i;$rn(n)}function Ahn(n,t){var e,i,r;return i=!1,e=t.q.d,t.d<n.b&&(r=dNn(t.q,n.b),t.q.d>r&&(aEn(t.q,r),i=e!=t.q.d)),i}function $hn(n,t){var i,r,c,a,u;return a=t.i,u=t.j,r=a-(i=n.f).i,c=u-i.j,e.Math.sqrt(r*r+c*c)}function Lhn(n,t){var e;return(e=Ydn(n))||(!$Ot&&($Ot=new Oo),RHn(),f9((e=new Cp(YPn(t))).Vk(),n)),e}function Nhn(n,t){var e,i;return(e=BB(n.c.Bc(t),14))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function xhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Dhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Rhn(n){var t,e;if(null==n)return!1;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return!1;return!0}function Khn(n){var t;if(0!=n.c)return n.c;for(t=0;t<n.a.length;t++)n.c=33*n.c+(-1&n.a[t]);return n.c=n.c*n.e,n.c}function _hn(n){var t;return Px(n.a!=n.b),t=n.d.a[n.a],Ex(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function Fhn(n){var t;if(!(n.c.c<0?n.a>=n.c.b:n.a<=n.c.b))throw Hp(new yv);return t=n.a,n.a+=n.c.c,++n.b,iln(t)}function Bhn(n){var t;return t=new ftn(n),i2(n.a,sut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[t]))),t.d&&WB(t.f,t.d),t.f}function Hhn(n){var t;return qan(t=new O$(n.a),n),hon(t,(hWn(),dlt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function qhn(n,t,e,i){var r,c;for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),70)).n.a=t.a+(i.a-r.o.a)/2,r.n.b=t.b,t.b+=r.o.b+e}function Ghn(n,t,e){var i;for(i=t.a.a.ec().Kc();i.Ob();)if(cY(n,BB(i.Pb(),57),e))return!0;return!1}function zhn(n){var t,e;for(e=new Wb(n.r);e.a<e.c.c.length;)if(t=BB(n0(e),10),n.n[t.p]<=0)return t;return null}function Uhn(n){var t,e;for(e=new Rv,t=new Wb(n);t.a<t.c.c.length;)Frn(e,dDn(BB(n0(t),33)));return e}function Xhn(n){var t;return t=kA(Cmt),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),dft))&&dq(t,(yMn(),_at),(lWn(),Bot)),t}function Whn(n,t,e){var i;i=new MOn(n,t),JIn(n.r,t.Hf(),i),e&&!Hz(n.u)&&(i.c=new yJ(n.d),Otn(t.wf(),new Cw(i)))}function Vhn(n,t){var e;return JO(n)&&JO(t)&&(e=n-t,!isNaN(e))?e:Kkn(JO(n)?Pan(n):n,JO(t)?Pan(t):t)}function Qhn(n,t){return t<n.length&&(b1(t,n.length),63!=n.charCodeAt(t))&&(b1(t,n.length),35!=n.charCodeAt(t))}function Yhn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new ZSn(n.c,n.a,e,c),new uRn(e,n.a,r,n.e,n.b,n.c==(oin(),Amt)))}function Jhn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,1,r,t),e?e.Ei(i):e=i),e}function Zhn(n,t,e){var i,r;return r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,3,r,t),e?e.Ei(i):e=i),e}function nfn(n,t,e){var i,r;return r=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,0,r,t),e?e.Ei(i):e=i),e}function tfn(n,t){var e,i,r,c;return(c=kCn((i=t,(r=n?Ydn(n):null)&&r.Xk(),i)))==t&&(e=Ydn(n))&&e.Xk(),c}function efn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function ifn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function rfn(n){var t,e,i,r;if(null!=n)for(e=0;e<n.length;++e)if(t=n[e])for(BB(t.g,367),r=t.i,i=0;i<r;++i);}function cfn(n){var t,i,r;for(r=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),r=e.Math.max(r,t.g);return r}function afn(n){var t,e,i;for(i=new Wb(n.b);i.a<i.c.c.length;)(t=(e=BB(n0(i),214)).c.Rf()?e.f:e.a)&&wqn(t,e.j)}function ufn(){ufn=O,vCt=new HC("INHERIT",0),pCt=new HC("INCLUDE_CHILDREN",1),mCt=new HC("SEPARATE_CHILDREN",2)}function ofn(n,t){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),void sqn(n.n);case 2:return void $in(n,null)}zun(n,t)}function sfn(n){switch(n.gc()){case 0:return Fnt;case 1:return new Pq(yX(n.Xb(0)));default:return new SY(n)}}function hfn(n){switch(s_(),n.gc()){case 0:return VX(),Vnt;case 1:return new yk(n.Kc().Pb());default:return new vS(n)}}function ffn(n){switch(s_(),n.c){case 0:return VX(),Vnt;case 1:return new yk(JCn(new QT(n)));default:return new sy(n)}}function lfn(n,t){yX(n);try{return n.xc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function bfn(n,t){yX(n);try{return n.Bc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function wfn(n,t){yX(n);try{return n.Hc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function dfn(n,t){yX(n);try{return n.Mc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function gfn(n,t){yX(n);try{return n._b(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function pfn(n,t){n.a.c.length>0&&dsn(BB(xq(n.a,n.a.c.length-1),570),t)||WB(n.a,new p5(t))}function vfn(n){var t,e;G_(),t=n.d.c-n.e.c,Otn((e=BB(n.g,145)).b,new jd(t)),Otn(e.c,new Ed(t)),e5(e.i,new Td(t))}function mfn(n){var t;return(t=new Ck).a+="VerticalSegment ",uO(t,n.e),t.a+=" ",oO(t,JL(new mk,new Wb(n.k))),t.a}function yfn(n){var t;return(t=BB(lnn(n.c.c,""),229))||(t=new UZ(jj(kj(new pu,""),"Other")),Jgn(n.c.c,"",t)),t}function kfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (name: ",cO(t,n.zb),t.a+=")",t.a)}function jfn(n,t,e){var i,r;return r=n.sb,n.sb=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),e}function Efn(n,t){var e,i;for(e=0,i=abn(n,t).Kc();i.Ob();)e+=null!=mMn(BB(i.Pb(),11),(hWn(),Elt))?1:0;return e}function Tfn(n,t,e){var i,r,c;for(i=0,c=spn(n,0);c.b!=c.d.c&&!((r=Gy(MD(b3(c))))>e);)r>=t&&++i;return i}function Mfn(n,t,e){var i;return i=new N7(n.e,3,13,null,t.c||(gWn(),l$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function Sfn(n,t,e){var i;return i=new N7(n.e,4,13,t.c||(gWn(),l$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Pfn(n,t,e){var i,r;return r=n.r,n.r=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,8,r,n.r),e?e.Ei(i):e=i),e}function Cfn(n,t){var e,i;return!(i=(e=BB(t,676)).vk())&&e.wk(i=cL(t,88)?new $I(n,BB(t,26)):new _0(n,BB(t,148))),i}function Ifn(n,t,e){var i;n.qi(n.i+1),i=n.oi(t,e),t!=n.i&&aHn(n.g,t,n.g,t+1,n.i-t),$X(n.g,t,i),++n.i,n.bi(t,e),n.ci()}function Ofn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?oO(n.a,n.b):n.a=new lN(n.d),G0(n.a,t.a,t.d.length,e)),n}function Afn(n,t){var e,i,r;if(t.vi(n.a),null!=(r=BB(yan(n.a,8),1936)))for(e=0,i=r.length;e<i;++e)null.jm()}function $fn(n,t){var e;return e=new sn,n.a.sd(e)?(CL(),new vy(kW(T7(n,e.a,t)))):(EW(n),CL(),CL(),Set)}function Lfn(n,t){switch(t.g){case 2:case 1:return abn(n,t);case 3:case 4:return ean(abn(n,t))}return SQ(),SQ(),set}function Nfn(n,t){return XI(n)?mK(n,t):UI(n)?vK(n,t):zI(n)?(kW(n),GI(n)===GI(t)):iz(n)?n.Fb(t):AG(n)?FO(n,t):v0(n,t)}function xfn(n){return n?0!=(1&n.i)?n==$Nt?ktt:n==ANt?Att:n==DNt?Ctt:n==xNt?Ptt:n==LNt?Rtt:n==RNt?_tt:n==NNt?Ttt:Stt:n:null}function Dfn(n,t,e,i,r){0!=t&&0!=i&&(1==t?r[i]=dvn(r,e,i,n[0]):1==i?r[t]=dvn(r,n,t,e[0]):YOn(n,e,r,t,i))}function Rfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Oe),eOn(e,t))}function Kfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Ae),eOn(e,t))}function _fn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n;case 2:return n.k}return Eyn(n,t,e,i)}function Ffn(){Ffn=O,BPt=new KC(hJn,0),FPt=new KC(aJn,1),_Pt=new KC(cJn,2),KPt=new KC(pJn,3),HPt=new KC("UP",4)}function Bfn(){Bfn=O,wut=new YS(QZn,0),but=new YS("INSIDE_PORT_SIDE_GROUPS",1),lut=new YS("FORCE_MODEL_ORDER",2)}function Hfn(n,t,e){if(n<0||t>e)throw Hp(new Ay(mYn+n+kYn+t+", size: "+e));if(n>t)throw Hp(new _y(mYn+n+yYn+t))}function qfn(n,t,e){if(t<0)cIn(n,e);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Vj(n,n.yh(),t)}}function Gfn(n,t,e,i,r,c,a,u){var o;for(o=e;c<a;)o>=i||t<e&&u.ue(n[t],n[o])<=0?$X(r,c++,n[t++]):$X(r,c++,n[o++])}function zfn(n,t,e,i,r,c){this.e=new Np,this.f=(ain(),Gvt),WB(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Ufn(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),26),GI(t)===GI(e))return!0;return!1}function Xfn(n){var t,e,i,r;for(dWn(),i=0,r=(e=tpn()).length;i<r;++i)if(-1!=E7((t=e[i]).a,n,0))return t;return Irt}function Wfn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function Vfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (source: ",cO(t,n.d),t.a+=")",t.a)}function Qfn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,5,r,n.a),e?KEn(e,i):e=i),e}function Yfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,2,e,t))}function Jfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function Zfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function nln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,3,e,t))}function tln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,9,e,t))}function eln(n,t){var e;return-1==n.b&&n.a&&(e=n.a.Gj(),n.b=e?n.c.Xg(n.a.aj(),e):Awn(n.c.Tg(),n.a)),n.c.Og(n.b,t)}function iln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(tq(),Itt)[t])&&(e=Itt[t]=new xb(n)),e):new xb(n)}function rln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(Tq(),Ktt)[t])&&(e=Ktt[t]=new Rb(n)),e):new Rb(n)}function cln(n){var t;return n.k==(uSn(),Mut)&&((t=BB(mMn(n,(hWn(),Qft)),61))==(kUn(),sIt)||t==SIt)}function aln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?m$n(n,i,t,e):null}function uln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?y$n(n,i,t,e):null}function oln(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),138),GI(t)===GI(e))return!0;return!1}function sln(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));if(n.hi()&&n.Hc(e))throw Hp(new _y(a8n));n.Xh(t,e)}function hln(n,t){var e;if(null==(e=sen(n.i,t)))throw Hp(new ek("Node did not exist in input."));return Kcn(t,e),null}function fln(n,t){var e;if(cL(e=NNn(n,t),322))return BB(e,34);throw Hp(new _y(r6n+t+"' is not a valid attribute"))}function lln(n,t,e){var i,r;for(r=cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function bln(n){var t,e,i;for(i=0,e=n.length,t=0;t<e;t++)32==n[t]||13==n[t]||10==n[t]||9==n[t]||(n[i++]=n[t]);return i}function wln(n){var t,e,i;for(t=new Np,i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),594),gun(t,BB(e.jf(),14));return t}function dln(n){var t,e;for(e=BB(mMn(n,(qqn(),lkt)),15).Kc();e.Ob();)DH((t=BB(e.Pb(),188)).b.d,t),DH(t.c.b,t)}function gln(n){switch(BB(mMn(n,(hWn(),ilt)),303).g){case 1:hon(n,ilt,(z7(),Sft));break;case 2:hon(n,ilt,(z7(),Cft))}}function pln(n){var t;n.g&&(xxn((t=n.c.Rf()?n.f:n.a).a,n.o,!0),xxn(t.a,n.o,!1),hon(n.o,(HXn(),ept),(QEn(),UCt)))}function vln(n){var t;if(!n.a)throw Hp(new Fy("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,xQ(n,t),NQ(n,t)}function mln(n){var t;return null==(t=n.a[n.c-1&n.a.length-1])?null:(n.c=n.c-1&n.a.length-1,$X(n.a,n.c,null),t)}function yln(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=BB(e.Pb(),213)).f&&n.b[t.c]<-1e-10)return t;return null}function kln(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new UV(t.d,0,t.a,t.b);default:return null}}function jln(n){switch(n.g){case 2:return FPt;case 1:return _Pt;case 4:return KPt;case 3:return HPt;default:return BPt}}function Eln(n){switch(n.g){case 1:return CIt;case 2:return sIt;case 3:return oIt;case 4:return SIt;default:return PIt}}function Tln(n){switch(n.g){case 1:return SIt;case 2:return CIt;case 3:return sIt;case 4:return oIt;default:return PIt}}function Mln(n){switch(n.g){case 1:return oIt;case 2:return SIt;case 3:return CIt;case 4:return sIt;default:return PIt}}function Sln(n){switch(n){case 0:return new mm;case 1:return new pm;case 2:return new vm;default:throw Hp(new wv)}}function Pln(n,t){return n<t?-1:n>t?1:n==t?0==n?Pln(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function Cln(n,t){OTn(t,"Sort end labels",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new we),new de),new ge),HSn(t)}function Iln(n,t,e){var i,r;return n.ej()?(r=n.fj(),i=YIn(n,t,e),n.$i(n.Zi(7,iln(e),i,t,r)),i):YIn(n,t,e)}function Oln(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.cd(),N6(n,i=((e=t.Sh())&DWn)%n.d.length,A$n(n,i,e,r)))}function Aln(n,t){var e;e=0!=(n.Bb&k6n),t?n.Bb|=k6n:n.Bb&=-1025,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,10,e,t))}function $ln(n,t){var e;e=0!=(n.Bb&_Qn),t?n.Bb|=_Qn:n.Bb&=-4097,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,12,e,t))}function Lln(n,t){var e;e=0!=(n.Bb&T9n),t?n.Bb|=T9n:n.Bb&=-8193,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,15,e,t))}function Nln(n,t){var e;e=0!=(n.Bb&M9n),t?n.Bb|=M9n:n.Bb&=-2049,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,11,e,t))}function xln(n,t){var e;return 0!=(e=Pln(n.b.c,t.b.c))||0!=(e=Pln(n.a.a,t.a.a))?e:Pln(n.a.b,t.a.b)}function Dln(n,t){var e;if(null==(e=RX(n.k,t)))throw Hp(new ek("Port did not exist in input."));return Kcn(t,e),null}function Rln(n){var t,e;for(e=G$n(Utn(n)).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return y4((UM(),RAt),t);return null}function Kln(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=0,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&++c;return c}function _ln(n,t,e){var i,r;return i=BB(t.We(n.a),35),r=BB(e.We(n.a),35),null!=i&&null!=r?Ncn(i,r):null!=i?-1:null!=r?1:0}function Fln(n,t,e){var i;if(n.c)lMn(n.c,t,e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Fln(BB(n0(i),157),t,e)}function Bln(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),y7(n.b.b,e.b),uY(BB(e.a,189),BB(e.b,81))}function Hln(n){var t,e;for(e=xX(new Ck,91),t=!0;n.Ob();)t||(e.a+=FWn),t=!1,uO(e,n.Pb());return(e.a+="]",e).a}function qln(n,t){var e;e=0!=(n.Bb&hVn),t?n.Bb|=hVn:n.Bb&=-16385,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,16,e,t))}function Gln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function zln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function Uln(n,t){var e;e=0!=(n.Bb&BQn),t?n.Bb|=BQn:n.Bb&=-65537,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,20,e,t))}function Xln(n){var t;return t=x8(ONt,WVn,25,2,15,1),n-=BQn,t[0]=(n>>10)+HQn&QVn,t[1]=56320+(1023&n)&QVn,Bdn(t,0,t.length)}function Wln(n){var t;return(t=BB(mMn(n,(HXn(),Udt)),103))==(Ffn(),BPt)?Gy(MD(mMn(n,Edt)))>=1?FPt:KPt:t}function Vln(n){switch(BB(mMn(n,(HXn(),Zdt)),218).g){case 1:return new ic;case 3:return new oc;default:return new ec}}function Qln(n){if(n.c)Qln(n.c);else if(n.d)throw Hp(new Fy("Stream already terminated, can't be modified or used"))}function Yln(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (identifier: ",cO(t,n.k),t.a+=")",t.a)}function Jln(n,t,e){var i;return tE(),jen(i=new ro,t),Een(i,e),n&&f9((!n.a&&(n.a=new $L(xOt,n,5)),n.a),i),i}function Zln(n,t,e,i){var r,c;return kW(i),kW(e),null==(c=null==(r=n.xc(t))?e:ZT(BB(r,15),BB(e,14)))?n.Bc(t):n.zc(t,c),c}function nbn(n){var t,e,i,r;return orn(e=new YK(t=BB(Vj((r=(i=n.gm).f)==Unt?i:r),9),BB(SR(t,t.length),9),0),n),e}function tbn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),10),oun(e,BB(xq(t,i.p),14)))return i;return null}function ebn(n,t,e){try{_on(n,t,e)}catch(i){throw cL(i=lun(i),597)?Hp(new g5(i)):Hp(i)}return t}function ibn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n-t)&&e<OQn?e:uan(hun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function rbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n+t)&&e<OQn?e:uan(sun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function cbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n*t)&&e<OQn?e:uan(fqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function abn(n,t){var e;return n.i||eIn(n),(e=BB(oV(n.g,t),46))?new s1(n.j,BB(e.a,19).a,BB(e.b,19).a):(SQ(),SQ(),set)}function ubn(n,t,e){var i;return i=n.a.get(t),n.a.set(t,void 0===e?null:e),void 0===i?(++n.c,oY(n.b)):++n.d,i}function obn(n,t,i){n.n=kq(LNt,[sVn,FQn],[364,25],14,[i,CJ(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function sbn(){var n,t,i;yTn(),i=Let+++Date.now(),n=CJ(e.Math.floor(i*uYn))&sYn,t=CJ(i-n*oYn),this.a=1502^n,this.b=t^aYn}function hbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).b);return yX(t),new OO(t)}function fbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).e);return yX(t),new OO(t)}function lbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).g);return yX(t),new OO(t)}function bbn(n){var t,e;for(e=t$n(Utn(dZ(n))).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return k4((XM(),UAt),t);return null}function wbn(n){var t,e;for(t=0,e=n.length;t<e;t++)if(null==n[t])throw Hp(new Hy("at index "+t));return new Jy(n)}function dbn(n,t){var e;if(cL(e=NNn(n.Tg(),t),99))return BB(e,18);throw Hp(new _y(r6n+t+"' is not a valid reference"))}function gbn(n){var t;return(t=bSn(n))>34028234663852886e22?RQn:t<-34028234663852886e22?KQn:t}function pbn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function vbn(n){var t,e,i;for(t=new hR(n.Hd().gc()),i=0,e=L9(n.Hd().Kc());e.Ob();)jZ(t,e.Pb(),iln(i++));return NSn(t.a)}function mbn(n,t){var e,i,r;for(r=new xp,i=t.vc().Kc();i.Ob();)VW(r,(e=BB(i.Pb(),42)).cd(),lan(n,BB(e.dd(),15)));return r}function ybn(n,t){0==n.n.c.length&&WB(n.n,new RJ(n.s,n.t,n.i)),WB(n.b,t),smn(BB(xq(n.n,n.n.c.length-1),211),t),BFn(n,t)}function kbn(n){return n.c==n.b.b&&n.i==n.g.b||(n.a.c=x8(Ant,HWn,1,0,5,1),gun(n.a,n.b),gun(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function jbn(n,t){var e,i;for(i=0,e=BB(t.Kb(n),20).Kc();e.Ob();)qy(TD(mMn(BB(e.Pb(),17),(hWn(),Clt))))||++i;return i}function Ebn(n,t){var i,r;r=Gy(MD(edn(f2(t),(HXn(),ypt)))),Fkn(t,i=e.Math.max(0,r/2-.5),1),WB(n,new lP(t,i))}function Tbn(){Tbn=O,qlt=new BP(QZn,0),_lt=new BP("FIRST",1),Flt=new BP(C1n,2),Blt=new BP("LAST",3),Hlt=new BP(I1n,4)}function Mbn(){Mbn=O,ZPt=new FC(hJn,0),YPt=new FC("POLYLINE",1),QPt=new FC("ORTHOGONAL",2),JPt=new FC("SPLINES",3)}function Sbn(){Sbn=O,Zjt=new kC("ASPECT_RATIO_DRIVEN",0),nEt=new kC("MAX_SCALE_DRIVEN",1),Jjt=new kC("AREA_DRIVEN",2)}function Pbn(){Pbn=O,HEt=new EC("P1_STRUCTURE",0),qEt=new EC("P2_PROCESSING_ORDER",1),GEt=new EC("P3_EXECUTION",2)}function Cbn(){Cbn=O,ejt=new gC("OVERLAP_REMOVAL",0),njt=new gC("COMPACTION",1),tjt=new gC("GRAPH_SIZE_CALCULATION",2)}function Ibn(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t))}function Obn(n,t){var e,i;for(e=spn(n,0);e.b!=e.d.c;){if((i=zy(MD(b3(e))))==t)return;if(i>t){U0(e);break}}nX(e,t)}function Abn(n,t){var e,i,r,c,a;if(e=t.f,Jgn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;c<a;++c)i=r[c],Jgn(n.c.e,i,t)}function $bn(n,t,e,i){var r,c,a;for(r=t+1;r<e;++r)for(c=r;c>t&&i.ue(n[c-1],n[c])>0;--c)a=n[c],$X(n,c,n[c-1]),$X(n,c-1,a)}function Lbn(n,t,e,i){if(t<0)TLn(n,e,i);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Tj(n,n.yh(),t,i)}}function Nbn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw Hp(new _y("Node "+t+" not part of edge "+n))}function xbn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function Dbn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function Rbn(n,t,e,i){switch(t){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return _fn(n,t,e,i)}function Kbn(n){return n.k==(uSn(),Cut)&&o5(new Rq(null,new zU(new oz(ZL(lbn(n).a.Kc(),new h)))),new qr)}function _bn(n){return null==n.e?n:(!n.c&&(n.c=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,null)),n.c)}function Fbn(n,t){return n.h==CQn&&0==n.m&&0==n.l?(t&&(ltt=M$(0,0,0)),WO((X7(),dtt))):(t&&(ltt=M$(n.l,n.m,n.h)),M$(0,0,0))}function Bbn(n){return Array.isArray(n)&&n.im===I?nE(tsn(n))+"@"+(nsn(n)>>>0).toString(16):n.toString()}function Hbn(n){var t;this.a=new YK(t=BB(n.e&&n.e(),9),BB(SR(t,t.length),9),0),this.b=x8(Ant,HWn,1,this.a.a.length,5,1)}function qbn(n){var t,e,i;for(this.a=new fA,i=new Wb(n);i.a<i.c.c.length;)e=BB(n0(i),14),brn(t=new hG,e),TU(this.a,t)}function Gbn(n){var t,e;for(qD(),t=n.o.b,e=BB(BB(h6(n.r,(kUn(),SIt)),21),84).Kc();e.Ob();)BB(e.Pb(),111).e.b+=t}function zbn(n){var t;if(n.b){if(zbn(n.b),n.b.d!=n.c)throw Hp(new vv)}else n.d.dc()&&(t=BB(n.f.c.xc(n.e),14))&&(n.d=t)}function Ubn(n){var t;return null==n||(t=n.length)>0&&(b1(t-1,n.length),58==n.charCodeAt(t-1))&&!Xbn(n,LAt,NAt)}function Xbn(n,t,e){var i,r;for(i=0,r=n.length;i<r;i++)if(ton((b1(i,n.length),n.charCodeAt(i)),t,e))return!0;return!1}function Wbn(n,t){var e,i;for(i=n.e.a.ec().Kc();i.Ob();)if(tSn(t,(e=BB(i.Pb(),266)).d)||ICn(t,e.d))return!0;return!1}function Vbn(n,t){var e,i,r;for(r=(i=HRn(n,t))[i.length-1]/2,e=0;e<i.length;e++)if(i[e]>=r)return t.c+e;return t.c+t.b.gc()}function Qbn(n,t){var e,i,r,c;for(dD(),r=t,z9(i=H9(n),0,i.length,r),e=0;e<i.length;e++)e!=(c=gkn(n,i[e],e))&&Iln(n,e,c)}function Ybn(n,t){var e,i,r,c,a,u;for(i=0,e=0,a=0,u=(c=t).length;a<u;++a)(r=c[a])>0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Jbn(n){var t,e,i;for((i=new Sk).a+="[",t=0,e=n.gc();t<e;)cO(i,kN(n.ki(t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a}function Zbn(n){var t,e,i;return i=ATn(n),!WE(n.c)&&(rtn(i,"knownLayouters",e=new Cl),t=new rp(e),e5(n.c,t)),i}function nwn(n,t){var e,i;for(kW(t),e=!1,i=new Wb(n);i.a<i.c.c.length;)ywn(t,n0(i),!1)&&(AU(i),e=!0);return e}function twn(n){var t,e;for(e=Gy(MD(n.a.We((sWn(),OPt)))),t=new Wb(n.a.xf());t.a<t.c.c.length;)VUn(n,BB(n0(t),680),e)}function ewn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),WB(n.b.b,BB(e.b,81)),g2(BB(e.a,189),BB(e.b,81))}function iwn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)kG(r,0,new HX(n.a));PZ(t,BB(xq(r,r.c.length-e),29)),n.b[t.p]=e}function rwn(n,t,e){var i;!(i=e)&&(i=LH(new Xm,0)),OTn(i,qZn,2),mvn(n.b,t,mcn(i,1)),Kqn(n,t,mcn(i,1)),qUn(t,mcn(i,1)),HSn(i)}function cwn(n,t,e,i,r){BZ(),UNn(aM(cM(rM(uM(new Hv,0),r.d.e-n),t),r.d)),UNn(aM(cM(rM(uM(new Hv,0),e-r.a.e),r.a),i))}function awn(n,t,e,i,r,c){this.a=n,this.c=t,this.b=e,this.f=i,this.d=r,this.e=c,this.c>0&&this.b>0&&Yq(this.c,this.b,this.a)}function uwn(n){Rwn(),this.c=u6(Pun(Gk(rMt,1),HWn,831,0,[Wpt])),this.b=new xp,this.a=n,VW(this.b,Vpt,1),Otn(Qpt,new Pg(this))}function own(n,t){var e;return n.d?hU(n.b,t)?BB(RX(n.b,t),51):(e=t.Kf(),VW(n.b,t,e),e):t.Kf()}function swn(n,t){var e;return GI(n)===GI(t)||!!cL(t,91)&&(e=BB(t,91),n.e==e.e&&n.d==e.d&&E4(n,e.a))}function hwn(n){switch(kUn(),n.g){case 4:return sIt;case 1:return oIt;case 3:return SIt;case 2:return CIt;default:return PIt}}function fwn(n,t){switch(t){case 3:return 0!=n.f;case 4:return 0!=n.g;case 5:return 0!=n.i;case 6:return 0!=n.j}return Ean(n,t)}function lwn(n){switch(n.g){case 0:return new Ga;case 1:return new za;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function bwn(n){switch(n.g){case 0:return new qa;case 1:return new Ua;default:throw Hp(new _y(M1n+(null!=n.f?n.f:""+n.g)))}}function wwn(n){switch(n.g){case 0:return new Vm;case 1:return new ym;default:throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}}function dwn(n){switch(n.g){case 1:return new Ra;case 2:return new gD;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function gwn(n){var t,e;if(n.b)return n.b;for(e=Qet?null:n.d;e;){if(t=Qet?null:e.b)return t;e=Qet?null:e.d}return lM(),Het}function pwn(n){var t,e;return 0==n.e?0:(t=n.d<<5,e=n.a[n.d-1],n.e<0&&Ccn(n)==n.d-1&&(--e,e|=0),t-=ZIn(e))}function vwn(n){var t,e,i;return n<tet.length?tet[n]:(t=31&n,(i=x8(ANt,hQn,25,1+(e=n>>5),15,1))[e]=1<<t,new lU(1,e+1,i))}function mwn(n){var t,e,i;return(e=n.zg())?cL(t=n.Ug(),160)&&null!=(i=mwn(BB(t,160)))?i+"."+e:e:null}function ywn(n,t,e){var i,r;for(r=n.Kc();r.Ob();)if(i=r.Pb(),GI(t)===GI(i)||null!=t&&Nfn(t,i))return e&&r.Qb(),!0;return!1}function kwn(n,t,e){var i,r;if(++n.j,e.dc())return!1;for(r=e.Kc();r.Ob();)i=r.Pb(),n.Hi(t,n.oi(t,i)),++t;return!0}function jwn(n,t,e,i){var r,c;if((c=e-t)<3)for(;c<3;)n*=10,++c;else{for(r=1;c>3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function Ewn(n){return Shn(),hN(),!!(Dbn(BB(n.a,81).j,BB(n.b,103))||0!=BB(n.a,81).d.e&&Dbn(BB(n.a,81).j,BB(n.b,103)))}function Twn(n){x9(),BB(n.We((sWn(),qSt)),174).Hc((n_n(),VIt))&&(BB(n.We(fPt),174).Fc((lIn(),cIt)),BB(n.We(qSt),174).Mc(VIt))}function Mwn(n,t){var e;if(t){for(e=0;e<n.i;++e)if(BB(n.g[e],366).Di(t))return!1;return f9(n,t)}return!1}function Swn(n){var t,e,i;for(t=new Cl,i=new qb(n.b.Kc());i.b.Ob();)e=VSn(BB(i.b.Pb(),686)),WU(t,t.a.length,e);return t.a}function Pwn(n){var t;return!n.c&&(n.c=new Nn),m$(n.d,new Dn),YKn(n),t=lDn(n),JT(new Rq(null,new w1(n.d,16)),new Iw(n)),t}function Cwn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (instanceClassName: ",cO(t,n.D),t.a+=")",t.a)}function Iwn(n,t){var e,i;t&&(e=Ren(t,"x"),Ten(new Zg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new np(n).a,(kW(i),i)))}function Own(n,t){var e,i;t&&(e=Ren(t,"x"),Ien(new Vg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Yg(n).a,(kW(i),i)))}function Awn(n,t){var e,i,r;if(null==n.i&&qFn(n),e=n.i,-1!=(i=t.aj()))for(r=e.length;i<r;++i)if(e[i]==t)return i;return-1}function $wn(n){var t,e,i,r;for(e=BB(n.g,674),i=n.i-1;i>=0;--i)for(t=e[i],r=0;r<i;++r)if(vFn(n,t,e[r])){Lyn(n,i);break}}function Lwn(n){var t=n.e;function e(n){return n&&0!=n.length?"\t"+n.join("\n\t"):""}return t&&(t.stack||e(n[UVn]))}function Nwn(n){var t;switch(WX(),(t=n.Pc()).length){case 0:return Fnt;case 1:return new Pq(yX(t[0]));default:return new SY(wbn(t))}}function xwn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),Nut));case 2:return KB(n.j,(gcn(),Dut));default:return SQ(),SQ(),set}}function Dwn(n,t){switch(t){case 3:return void Men(n,0);case 4:return void Sen(n,0);case 5:return void Pen(n,0);case 6:return void Cen(n,0)}ofn(n,t)}function Rwn(){Rwn=O,AM(),HXn(),Vpt=Opt,Qpt=u6(Pun(Gk(lMt,1),k3n,146,0,[mpt,ypt,jpt,Ept,Spt,Ppt,Cpt,Ipt,$pt,Npt,kpt,Tpt,Apt]))}function Kwn(n){var t,e;t=n.d==($Pn(),Jst),e=$En(n),hon(n.a,(HXn(),kdt),t&&!e||!t&&e?(wvn(),$Mt):(wvn(),AMt))}function _wn(n,t){var e;return(e=BB(P4(n,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Qc(lH(e.gc()))}function Fwn(){Fwn=O,eOt=new YC("SIMPLE",0),ZIt=new YC("GROUP_DEC",1),tOt=new YC("GROUP_MIXED",2),nOt=new YC("GROUP_INC",3)}function Bwn(){Bwn=O,z$t=new $o,K$t=new Lo,_$t=new No,F$t=new xo,B$t=new Do,H$t=new Ro,q$t=new Ko,G$t=new _o,U$t=new Fo}function Hwn(n,t,e){qtn(),sm.call(this),this.a=kq(Xit,[sVn,rJn],[595,212],0,[nrt,Zit],2),this.c=new bA,this.g=n,this.f=t,this.d=e}function qwn(n,t){this.n=kq(LNt,[sVn,FQn],[364,25],14,[t,CJ(e.Math.ceil(n/32))],2),this.o=n,this.p=t,this.j=n-1>>1,this.k=t-1>>1}function Gwn(n,t){OTn(t,"End label post-processing",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new ae),new ue),new oe),HSn(t)}function zwn(n,t,e){var i;return i=Gy(n.p[t.i.p])+Gy(n.d[t.i.p])+t.n.b+t.a.b,Gy(n.p[e.i.p])+Gy(n.d[e.i.p])+e.n.b+e.a.b-i}function Uwn(n,t,e){var i,r;for(i=e0(e,UQn),r=0;0!=Vhn(i,0)&&r<t;r++)i=rbn(i,e0(n[r],UQn)),n[r]=dG(i),i=kz(i,32);return dG(i)}function Xwn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))<64&&(r=i0(r,yz(1,t)));return r}function Wwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Vwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Qwn(n,t){return n.i>0&&(t.length<n.i&&(t=Den(tsn(t).c,n.i)),aHn(n.g,0,t,0,n.i)),t.length>n.i&&$X(t,n.i,null),t}function Ywn(n,t,e){var i,r,c;return n.ej()?(i=n.i,c=n.fj(),Ifn(n,i,t),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):Ifn(n,n.i,t),e}function Jwn(n,t,e){var i,r;return i=new N7(n.e,4,10,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Zwn(n,t,e){var i,r;return i=new N7(n.e,3,10,null,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function ndn(n){var t;return qD(),t=new wA(BB(n.e.We((sWn(),BSt)),8)),n.B.Hc((n_n(),GIt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function tdn(n){return bvn(),(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197)}function edn(n,t){var e,i;return i=null,Lx(n,(HXn(),Mpt))&&(e=BB(mMn(n,Mpt),94)).Xe(t)&&(i=e.We(t)),null==i&&(i=mMn(vW(n),t)),i}function idn(n,t){var e,i,r;return!!cL(t,42)&&(i=(e=BB(t,42)).cd(),wW(r=lfn(n.Rc(),i),e.dd())&&(null!=r||n.Rc()._b(i)))}function rdn(n,t){var e;return n.f>0&&(n.qj(),-1!=A$n(n,((e=null==t?0:nsn(t))&DWn)%n.d.length,e,t))}function cdn(n,t){var e,i;return n.f>0&&(n.qj(),e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?e.dd():null}function adn(n,t){var e,i,r,c;for(c=axn(n.e.Tg(),t),e=BB(n.g,119),r=0;r<n.i;++r)if(i=e[r],c.rl(i.ak()))return!1;return!0}function udn(n){if(null==n.b){for(;n.a.Ob();)if(n.b=n.a.Pb(),!BB(n.b,49).Zg())return!0;return n.b=null,!1}return!0}function odn(n,t){n.mj();try{n.d.Vc(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function sdn(n,t){var e,i;return s$(),i=null,t==(e=fR((fk(),fk(),rtt)))&&(i=BB(SJ(itt,n),615)),i||(i=new zX(n),t==e&&mZ(itt,n,i)),i}function hdn(n,t){var i,r;n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d+=t,i=t-n.f,r=n.e+i,n.f=r-n.e-i,n.e=r}function fdn(n,t){var e;n.c=t,n.a=pwn(t),n.a<54&&(n.f=(e=t.d>1?i0(yz(t.a[1],32),e0(t.a[0],UQn)):e0(t.a[0],UQn),j2(cbn(t.e,e))))}function ldn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n%t)&&e<OQn?e:uan((Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!0),ltt))}function bdn(n,t){var e;Dzn(t),(e=BB(mMn(n,(HXn(),Jdt)),276))&&hon(n,Jdt,Ayn(e)),nx(n.c),nx(n.f),V6(n.d),V6(BB(mMn(n,Agt),207))}function wdn(n){this.e=x8(ANt,hQn,25,n.length,15,1),this.c=x8($Nt,ZYn,25,n.length,16,1),this.b=x8($Nt,ZYn,25,n.length,16,1),this.f=0}function ddn(n){var t,e;for(n.j=x8(xNt,qQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.j[t.p]=t.o.b/n.i}function gdn(n){var t;0!=n.c&&(1==(t=BB(xq(n.a,n.b),287)).b?(++n.b,n.b<n.a.c.length&&Tb(BB(xq(n.a,n.b),287))):--t.b,--n.c)}function pdn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(lbn(t).a.Kc(),new h))),17).d.i).k==(uSn(),Put)&&WB(n.e,t)}while(t.k==(uSn(),Put))}function vdn(){vdn=O,LIt=new WA(15),$It=new XA((sWn(),XSt),LIt),xIt=new XA(LPt,15),NIt=new XA(vPt,iln(0)),AIt=new XA(cSt,dZn)}function mdn(){mdn=O,KIt=new VC("PORTS",0),_It=new VC("PORT_LABELS",1),RIt=new VC("NODE_LABELS",2),DIt=new VC("MINIMUM_SIZE",3)}function ydn(n,t){var e,i;for(i=t.length,e=0;e<i;e+=2)Yxn(n,(b1(e,t.length),t.charCodeAt(e)),(b1(e+1,t.length),t.charCodeAt(e+1)))}function kdn(n,t,e){var i,r,c,a;for(c=t-n.e,a=e-n.f,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),i.s+c,i.t+a);n.e=t,n.f=e}function jdn(n,t){var e,i,r;for(r=t.b.b,n.a=new YT,n.b=x8(ANt,hQn,25,r,15,1),e=0,i=spn(t.b,0);i.b!=i.d.c;)BB(b3(i),86).g=e++}function Edn(n,t){var e,i,r,c;return e=t>>5,t&=31,r=n.d+e+(0==t?0:1),xTn(i=x8(ANt,hQn,25,r,15,1),n.a,e,t),X0(c=new lU(n.e,r,i)),c}function Tdn(n,t,e){var i,r;i=BB(SJ(iNt,t),117),r=BB(SJ(rNt,t),117),e?(mZ(iNt,n,i),mZ(rNt,n,r)):(mZ(rNt,n,i),mZ(iNt,n,r))}function Mdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i>=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function Sdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function Pdn(n,t,e,i){var r,c,a;return r=!1,LGn(n.f,e,i)&&(xgn(n.f,n.a[t][e],n.a[t][i]),a=(c=n.a[t])[i],c[i]=c[e],c[e]=a,r=!0),r}function Cdn(n,t,e,i,r){var c,a,u;for(a=r;t.b!=t.c;)c=BB(dU(t),10),u=BB(abn(c,i).Xb(0),11),n.d[u.p]=a++,e.c[e.c.length]=u;return a}function Idn(n,t,i){var r,c,a,u,o;return u=n.k,o=t.k,c=MD(edn(n,r=i[u.g][o.g])),a=MD(edn(t,r)),e.Math.max((kW(c),c),(kW(a),a))}function Odn(n,t,e){var i,r,c,a;for(i=e/n.c.length,r=0,a=new Wb(n);a.a<a.c.c.length;)ghn(c=BB(n0(a),200),c.f+i*r),ajn(c,t,i),++r}function Adn(n,t,e){var i,r,c;for(r=BB(RX(n.b,e),177),i=0,c=new Wb(t.j);c.a<c.c.c.length;)r[BB(n0(c),113).d.p]&&++i;return i}function $dn(n){var t,e;return null!=(t=BB(yan(n.a,4),126))?(aHn(t,0,e=x8(dAt,i9n,415,t.length,0,1),0,t.length),e):wAt}function Ldn(){var n;return 0!=ctt&&(n=l5())-att>2e3&&(att=n,utt=e.setTimeout(QE,10)),0==ctt++&&(Onn((sk(),ttt)),!0)}function Ndn(n,t){var e;for(e=new oz(ZL(lbn(n).a.Kc(),new h));dAn(e);)if(BB(U5(e),17).d.i.c==t)return!1;return!0}function xdn(n,t){var e;if(cL(t,245)){e=BB(t,245);try{return 0==n.vd(e)}catch(i){if(!cL(i=lun(i),205))throw Hp(i)}}return!1}function Ddn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function Rdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))>0}function Kdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<0}function _dn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<=0}function Fdn(n,t){for(var e=0;!t[e]||""==t[e];)e++;for(var i=t[e++];e<t.length;e++)t[e]&&""!=t[e]&&(i+=n+t[e]);return i}function Bdn(n,t,i){var r,c,a,u;for(_8(t,a=t+i,n.length),u="",c=t;c<a;)r=e.Math.min(c+1e4,a),u+=WW(n.slice(c,r)),c=r;return u}function Hdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function qdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function Gdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function zdn(n,t){var e,i,r;if(n.c)Sen(n.c,t);else for(e=t-iG(n),r=new Wb(n.d);r.a<r.c.c.length;)zdn(i=BB(n0(r),157),iG(i)+e)}function Udn(n,t){var e,i,r;if(n.c)Men(n.c,t);else for(e=t-eG(n),r=new Wb(n.a);r.a<r.c.c.length;)Udn(i=BB(n0(r),157),eG(i)+e)}function Xdn(n,t){var e,i,r;for(i=new J6(t.gc()),e=t.Kc();e.Ob();)(r=t_n(n,BB(e.Pb(),56)))&&(i.c[i.c.length]=r);return i}function Wdn(n,t){var e,i;return n.qj(),(e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?(hin(n,e),e.dd()):null}function Vdn(n){var t,e;for(e=uPn(n),t=null;2==n.c;)QXn(n),t||(wWn(),wWn(),tqn(t=new r$(2),e),e=t),e.$l(uPn(n));return e}function Qdn(n){if(!(q6n in n.a))throw Hp(new ek("Every element must have an id."));return kIn(zJ(n,q6n))}function Ydn(n){var t,e,i;if(!(i=n.Zg()))for(t=0,e=n.eh();e;e=e.eh()){if(++t>GQn)return e.fh();if((i=e.Zg())||e==n)break}return i}function Jdn(n){return hZ(),cL(n,156)?BB(RX(hAt,yet),288).vg(n):hU(hAt,tsn(n))?BB(RX(hAt,tsn(n)),288).vg(n):null}function Zdn(n){if(mgn(a5n,n))return hN(),vtt;if(mgn(u5n,n))return hN(),ptt;throw Hp(new _y("Expecting true or false"))}function ngn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw Hp(new _y("Input edge is not connected to the input port."))}function tgn(n,t){return n.e>t.e?1:n.e<t.e?-1:n.d>t.d?n.e:n.d<t.d?-t.e:n.e*Msn(n.a,t.a,n.d)}function egn(n){return n>=48&&n<48+e.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function ign(n,t){var e;return GI(t)===GI(n)||!!cL(t,21)&&(e=BB(t,21)).gc()==n.gc()&&n.Ic(e)}function rgn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,Ex(e<(n.c-n.b&i)),e>=r?(ahn(n,t),-1):(uhn(n,t),1)}function cgn(n,t){var e,i;for(b1(t,n.length),e=n.charCodeAt(t),i=t+1;i<n.length&&(b1(i,n.length),n.charCodeAt(i)==e);)++i;return i-t}function agn(n){switch(n.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return!0;default:return!1}}function ugn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Zun(),ftt)[typeof e];return r?r(e):khn(typeof e)}function ogn(n,t){if(n.a<0)throw Hp(new Fy("Did not call before(...) or after(...) before calling add(...)."));return WN(n,n.a,t),n}function sgn(n,t,e,i){var r;0!=t.c.length&&(r=MLn(e,i),JT(ytn(new Rq(null,new w1(uIn(t),1)),new ja),new XV(n,e,r,i)))}function hgn(n,t,e){var i;0!=(n.Db&t)?null==e?WOn(n,t):-1==(i=Rmn(n,t))?n.Eb=e:$X(een(n.Eb),i,e):null!=e&&mxn(n,t,e)}function fgn(n){var t;return 0==(32&n.Db)&&0!=(t=bX(BB(yan(n,16),26)||n.zh())-bX(n.zh()))&&hgn(n,32,x8(Ant,HWn,1,t,5,1)),n}function lgn(n){var t;return n.b||Xj(n,!(t=nK(n.e,n.a))||!mK(u5n,cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"qualified"))),n.c}function bgn(n,t,e){var i,r;return((r=(i=BB(Wtn(H7(n.a),t),87)).c||(gWn(),l$t)).kh()?tfn(n.b,BB(r,49)):r)==e?lFn(i):cen(i,e),r}function wgn(n,t){(t||null==console.groupCollapsed?null!=console.group?console.group:console.log:console.groupCollapsed).call(console,n)}function dgn(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65).c.b,K8(i,t,n)}function ggn(n){var t,e;for(t=new Wb(n.g);t.a<t.c.c.length;)BB(n0(t),562);zzn(e=new yxn(n.g,Gy(n.a),n.c)),n.g=e.b,n.d=e.a}function pgn(n,t,i){t.b=e.Math.max(t.b,-i.a),t.c=e.Math.max(t.c,i.a-n.a),t.d=e.Math.max(t.d,-i.b),t.a=e.Math.max(t.a,i.b-n.b)}function vgn(n,t){return n.e<t.e?-1:n.e>t.e?1:n.f<t.f?-1:n.f>t.f?1:nsn(n)-nsn(t)}function mgn(n,t){return kW(n),null!=t&&(!!mK(n,t)||n.length==t.length&&mK(n.toLowerCase(),t.toLowerCase()))}function ygn(n,t){var e,i,r,c;for(i=0,r=t.gc();i<r;++i)cL(e=t.il(i),99)&&0!=(BB(e,18).Bb&h6n)&&null!=(c=t.jl(i))&&t_n(n,BB(c,56))}function kgn(n,t,e){var i,r,c;for(c=new Wb(e.a);c.a<c.c.c.length;)r=BB(n0(c),221),i=new C$(BB(RX(n.a,r.b),65)),WB(t.a,i),kgn(n,i,r)}function jgn(n){var t,e;return Vhn(n,-129)>0&&Vhn(n,128)<0?(t=dG(n)+128,!(e=(Eq(),$tt)[t])&&(e=$tt[t]=new Db(n)),e):new Db(n)}function Egn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Tgn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Mgn(n,t){var e,i;for(qZ(),i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)if((e=BB(U5(i),17)).d.i==t||e.c.i==t)return e;return null}function Sgn(n,t,e){this.c=n,this.f=new Np,this.e=new Gj,this.j=new Sq,this.n=new Sq,this.b=t,this.g=new UV(t.c,t.d,t.b,t.a),this.a=e}function Pgn(n){var t,e,i,r;for(this.a=new fA,this.d=new Rv,this.e=0,i=0,r=(e=n).length;i<r;++i)t=e[i],!this.f&&(this.f=t),g2(this,t)}function Cgn(n){ODn(),0==n.length?(this.e=0,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0])):(this.e=1,this.d=n.length,this.a=n,X0(this))}function Ign(n,t,e){sm.call(this),this.a=x8(Xit,rJn,212,(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,0,1),this.b=n,this.d=t,this.c=e}function Ogn(n){this.d=new Np,this.e=new v4,this.c=x8(ANt,hQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.b=n}function Agn(n){var t,e,i,r;for(hon(r=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),e=0,i=(t=Z0(n.e)).length;e<i;++e)MZ(t[e],r)}function $gn(n){var t,e,i,r;for(hon(t=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),i=0,r=(e=Z0(n.g)).length;i<r;++i)SZ(e[i],t)}function Lgn(n){var t,e;return!!Lx(n.d.i,(HXn(),Wgt))&&(t=BB(mMn(n.c.i,Wgt),19),e=BB(mMn(n.d.i,Wgt),19),E$(t.a,e.a)>0)}function Ngn(n){var t;GI(ZAn(n,(sWn(),ESt)))===GI((ufn(),vCt))&&(JJ(n)?(t=BB(ZAn(JJ(n),ESt),334),Ypn(n,ESt,t)):Ypn(n,ESt,mCt))}function xgn(n,t,e){var i,r;fMn(n.e,t,e,(kUn(),CIt)),fMn(n.i,t,e,oIt),n.a&&(r=BB(mMn(t,(hWn(),dlt)),11),i=BB(mMn(e,dlt),11),k0(n.g,r,i))}function Dgn(n,t,e){var i,r,c;i=t.c.p,c=t.p,n.b[i][c]=new DY(n,t),e&&(n.a[i][c]=new Bd(t),(r=BB(mMn(t,(hWn(),rlt)),10))&&JIn(n.d,r,t))}function Rgn(n,t){var e,i,r;if(WB(Sct,n),t.Fc(n),e=BB(RX(Mct,n),21))for(r=e.Kc();r.Ob();)i=BB(r.Pb(),33),-1!=E7(Sct,i,0)||Rgn(i,t)}function Kgn(n,t,e){var i;(Wet?(gwn(n),1):Vet||Jet?(lM(),1):Yet&&(lM(),0))&&((i=new i_(t)).b=e,aSn(n,i))}function _gn(n,t){var e;e=!n.A.Hc((mdn(),_It))||n.q==(QEn(),XCt),n.u.Hc((lIn(),eIt))?e?NUn(n,t):aUn(n,t):n.u.Hc(rIt)&&(e?Azn(n,t):JUn(n,t))}function Fgn(n,t){var e,i;++n.j,null!=t&&oOn(t,e=cL(i=n.a.Cb,97)?BB(i,97).Jg():null)?hgn(n.a,4,e):hgn(n.a,4,BB(t,126))}function Bgn(n,t,i){return new UV(e.Math.min(n.a,t.a)-i/2,e.Math.min(n.b,t.b)-i/2,e.Math.abs(n.a-t.a)+i,e.Math.abs(n.b-t.b)+i)}function Hgn(n,t){var e,i;return 0!=(e=E$(n.a.c.p,t.a.c.p))?e:0!=(i=E$(n.a.d.i.p,t.a.d.i.p))?i:E$(t.a.d.p,n.a.d.p)}function qgn(n,t,e){var i,r,c,a;return(c=t.j)!=(a=e.j)?c.g-a.g:(i=n.f[t.p],r=n.f[e.p],0==i&&0==r?0:0==i?-1:0==r?1:Pln(i,r))}function Ggn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Wb(kbn(t));i.a<i.c.c.length;)Ggn(n,Nbn(BB(n0(i),213),t),e)}function zgn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new xC(0,i);case 2:case 4:return new xC(i,0);default:return null}}function Ugn(n,t,e){var i;i=BB(sJ(t.f),209);try{i.Ze(n,e),SW(t.f,i)}catch(r){throw cL(r=lun(r),102),Hp(r)}}function Xgn(n,t,e){var i,r,c,a;return i=null,(c=pGn(cin(),t))&&(r=null,null!=(a=Zqn(c,e))&&(r=n.Ye(c,a)),i=r),i}function Wgn(n,t,e,i){var r;return r=new N7(n.e,1,13,t.c||(gWn(),l$t),e.c||(gWn(),l$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Vgn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;t<r&&!ton((b1(t,n.length),n.charCodeAt(t)),e,i);t++);return t}function Qgn(n,t){var e,i;for(i=n.c.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.c[e]);return t.length>i&&$X(t,i,null),t}function Ygn(n,t){var e,i;for(i=n.a.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.a[e]);return t.length>i&&$X(t,i,null),t}function Jgn(n,t,e){var i,r,c;return(r=BB(RX(n.e,t),387))?(c=pR(r,e),uL(n,r),c):(i=new nH(n,t,e),VW(n.e,t,i),kJ(i),null)}function Zgn(n){var t;if(null==n)return null;if(null==(t=L$n(FBn(n,!0))))throw Hp(new ik("Invalid hexBinary value: '"+n+"'"));return t}function npn(n){return ODn(),Vhn(n,0)<0?0!=Vhn(n,-1)?new vEn(-1,j7(n)):Ytt:Vhn(n,10)<=0?Ztt[dG(n)]:new vEn(1,n)}function tpn(){return dWn(),Pun(Gk(Krt,1),$Vn,159,0,[Prt,Srt,Crt,vrt,prt,mrt,jrt,krt,yrt,Mrt,Trt,Ert,drt,wrt,grt,lrt,frt,brt,srt,ort,hrt,Irt])}function epn(n){var t;this.d=new Np,this.j=new Gj,this.g=new Gj,t=n.g.b,this.f=BB(mMn(vW(t),(HXn(),Udt)),103),this.e=Gy(MD(gpn(t,Spt)))}function ipn(n){this.b=new Np,this.e=new Np,this.d=n,this.a=!jE(AV(new Rq(null,new zU(new m6(n.b))),new aw(new Gr))).sd((dM(),tit))}function rpn(){rpn=O,hMt=new AC("PARENTS",0),sMt=new AC("NODES",1),uMt=new AC("EDGES",2),fMt=new AC("PORTS",3),oMt=new AC("LABELS",4)}function cpn(){cpn=O,BCt=new zC("DISTRIBUTED",0),qCt=new zC("JUSTIFIED",1),_Ct=new zC("BEGIN",2),FCt=new zC(eJn,3),HCt=new zC("END",4)}function apn(n){switch(n.yi(null)){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function upn(n){switch(n.g){case 1:return Ffn(),HPt;case 4:return Ffn(),_Pt;case 2:return Ffn(),FPt;case 3:return Ffn(),KPt}return Ffn(),BPt}function opn(n,t,e){var i;switch((i=e.q.getFullYear()-sQn+sQn)<0&&(i=-i),t){case 1:n.a+=i;break;case 2:Enn(n,i%100,2);break;default:Enn(n,i,t)}}function spn(n,t){var e,i;if(LZ(t,n.b),t>=n.b>>1)for(i=n.c,e=n.b;e>t;--e)i=i.b;else for(i=n.a.a,e=0;e<t;++e)i=i.a;return new ZK(n,t,i)}function hpn(){hpn=O,dit=new FS("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),wit=new FS("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function fpn(n){var t,e,i;for(m$(e=uCn(n),But),(i=n.d).c=x8(Ant,HWn,1,0,5,1),t=new Wb(e);t.a<t.c.c.length;)gun(i,BB(n0(t),456).b)}function lpn(n){var t,e;for(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)BB(t.nj(),42).dd();return A8(e)}function bpn(n){var t;LK(BB(mMn(n,(HXn(),ept)),98))&&(fOn((l1(0,(t=n.b).c.length),BB(t.c[0],29))),fOn(BB(xq(t,t.c.length-1),29)))}function wpn(n,t){var i,r,c,a;for(i=0,c=new Wb(t.a);c.a<c.c.c.length;)a=(r=BB(n0(c),10)).o.a+r.d.c+r.d.b+n.j,i=e.Math.max(i,a);return i}function dpn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))>=64&&t<128&&(r=i0(r,yz(1,t-64)));return r}function gpn(n,t){var e,i;return i=null,Lx(n,(sWn(),CPt))&&(e=BB(mMn(n,CPt),94)).Xe(t)&&(i=e.We(t)),null==i&&vW(n)&&(i=mMn(vW(n),t)),i}function ppn(n,t){var e,i,r;(i=(r=t.d.i).k)!=(uSn(),Cut)&&i!=Tut&&dAn(e=new oz(ZL(lbn(r).a.Kc(),new h)))&&VW(n.k,t,BB(U5(e),17))}function vpn(n,t){var e,i,r;return i=itn(n.Tg(),t),(e=t-n.Ah())<0?(r=n.Yg(i))>=0?n.lh(r):qIn(n,i):e<0?qIn(n,i):BB(i,66).Nj().Sj(n,n.yh(),e)}function mpn(n){var t;if(cL(n.a,4)){if(null==(t=Jdn(n.a)))throw Hp(new Fy(o5n+n.b+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return t}return n.a}function ypn(n){var t;if(null==n)return null;if(null==(t=UUn(FBn(n,!0))))throw Hp(new ik("Invalid base64Binary value: '"+n+"'"));return t}function kpn(n){var t;try{return t=n.i.Xb(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function jpn(n){var t;try{return t=n.c.ki(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function Epn(){Epn=O,sWn(),Ect=TPt,pct=ySt,lct=cSt,vct=XSt,_kn(),kct=Mit,yct=Eit,jct=Pit,mct=jit,Gsn(),wct=oct,bct=uct,dct=hct,gct=fct}function Tpn(n){switch(jM(),this.c=new Np,this.d=n,n.g){case 0:case 2:this.a=QW(hut),this.b=RQn;break;case 3:case 1:this.a=hut,this.b=KQn}}function Mpn(n,t,e){var i;if(n.c)Pen(n.c,n.c.i+t),Cen(n.c,n.c.j+e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Mpn(BB(n0(i),157),t,e)}function Spn(n,t){var e,i;if(n.j.length!=t.j.length)return!1;for(e=0,i=n.j.length;e<i;e++)if(!mK(n.j[e],t.j[e]))return!1;return!0}function Ppn(n,t,e){var i;t.a.length>0&&(WB(n.b,new VB(t.a,e)),0<(i=t.a.length)?t.a=t.a.substr(0,0):0>i&&(t.a+=rL(x8(ONt,WVn,25,-i,15,1))))}function Cpn(n,t){var e,i,r;for(e=n.o,r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.a=dyn(i,e.a),i.e.b=e.b*Gy(MD(i.b.We(Lrt)))}function Ipn(n,t){var e,i,r,c;return r=n.k,e=Gy(MD(mMn(n,(hWn(),Tlt)))),c=t.k,i=Gy(MD(mMn(t,Tlt))),c!=(uSn(),Mut)?-1:r!=Mut?1:e==i?0:e<i?-1:1}function Opn(n,t){var e,i;return e=BB(BB(RX(n.g,t.a),46).a,65),i=BB(BB(RX(n.g,t.b),46).a,65),W8(t.a,t.b)-W8(t.a,_$(e.b))-W8(t.b,_$(i.b))}function Apn(n,t){var e;return e=BB(mMn(n,(HXn(),vgt)),74),tL(t,vut)?e?yQ(e):(e=new km,hon(n,vgt,e)):e&&hon(n,vgt,null),e}function $pn(n){var t;return(t=new Ck).a+="n",n.k!=(uSn(),Cut)&&oO(oO((t.a+="(",t),dx(n.k).toLowerCase()),")"),oO((t.a+="_",t),gyn(n)),t.a}function Lpn(n,t){OTn(t,"Self-Loop post-processing",1),JT(AV(AV(wnn(new Rq(null,new w1(n.b,16)),new xi),new Di),new Ri),new Ki),HSn(t)}function Npn(n,t,e,i){var r;return e>=0?n.hh(t,e,i):(n.eh()&&(i=(r=n.Vg())>=0?n.Qg(i):n.eh().ih(n,-1-r,null,i)),n.Sg(t,e,i))}function xpn(n,t){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),void sqn(n.e);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),void sqn(n.d)}Dwn(n,t)}function Dpn(n,t){var e;e=n.Zc(t);try{return e.Pb()}catch(i){throw cL(i=lun(i),109)?Hp(new Ay("Can't get element "+t)):Hp(i)}}function Rpn(n,t){this.e=n,t<XQn?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0|t])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[t%XQn|0,t/XQn|0]))}function Kpn(n,t){var e,i,r,c;for(SQ(),e=n,c=t,cL(n,21)&&!cL(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function _pn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=Lyn(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):Lyn(n,i)),e}function Fpn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=wq(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):wq(n,i)),e}function Bpn(n,t){var e;switch(e=BB(oV(n.b,t),124).n,t.g){case 1:n.t>=0&&(e.d=n.t);break;case 3:n.t>=0&&(e.a=n.t)}n.C&&(e.b=n.C.b,e.c=n.C.c)}function Hpn(){Hpn=O,Brt=new _S(mJn,0),Frt=new _S(yJn,1),Hrt=new _S(kJn,2),qrt=new _S(jJn,3),Brt.a=!1,Frt.a=!0,Hrt.a=!1,qrt.a=!0}function qpn(){qpn=O,Zrt=new KS(mJn,0),Jrt=new KS(yJn,1),nct=new KS(kJn,2),tct=new KS(jJn,3),Zrt.a=!1,Jrt.a=!0,nct.a=!1,tct.a=!0}function Gpn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i).k==(uSn(),Put)&&n.b.Fc(t)}while(t.k==(uSn(),Put));n.b=ean(n.b)}function zpn(n){var t,e,i;for(i=n.c.a,n.p=(yX(i),new t_(i)),e=new Wb(i);e.a<e.c.c.length;)(t=BB(n0(e),10)).p=hCn(t).a;SQ(),m$(n.p,new Oc)}function Upn(n){var t,e,i;if(e=0,0==(i=wDn(n)).c.length)return 1;for(t=new Wb(i);t.a<t.c.c.length;)e+=Upn(BB(n0(t),33));return e}function Xpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.b+e.b.rf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Wpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.d+e.b.rf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Vpn(n,t,e,i){if(t.a<i.a)return!0;if(t.a==i.a){if(t.b<i.b)return!0;if(t.b==i.b&&n.b>e.b)return!0}return!1}function Qpn(n,t){return XI(n)?!!OWn[t]:n.hm?!!n.hm[t]:UI(n)?!!IWn[t]:!!zI(n)&&!!CWn[t]}function Ypn(n,t,e){return null==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),vjn(n.o,t,e)),n}function Jpn(n,t,e,i){var r;(r=Xfn(t.Xe((sWn(),DSt))?BB(t.We(DSt),21):n.j))!=(dWn(),Irt)&&(e&&!agn(r)||USn(N$n(n,r,i),t))}function Zpn(n,t,e,i){var r,c,a;return c=itn(n.Tg(),t),(r=t-n.Ah())<0?(a=n.Yg(c))>=0?n._g(a,e,!0):cOn(n,c,e):BB(c,66).Nj().Pj(n,n.yh(),r,e,i)}function nvn(n,t,e,i){var r,c;e.mh(t)&&(ZM(),hnn(t)?ygn(n,BB(e.ah(t),153)):(r=(c=t)?BB(i,49).xh(c):null)&&_p(e.ah(t),r))}function tvn(n){switch(n.g){case 1:return Dan(),Rrt;case 3:return Dan(),Nrt;case 2:return Dan(),Drt;case 4:return Dan(),xrt;default:return null}}function evn(n){switch(typeof n){case NWn:return vvn(n);case LWn:return CJ(n);case $Wn:return hN(),n?1231:1237;default:return null==n?0:PN(n)}}function ivn(n,t,e){if(n.e)switch(n.b){case 1:BQ(n.c,t,e);break;case 0:HQ(n.c,t,e)}else t4(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function rvn(n){var t,e;if(null==n)return null;for(e=x8(Out,sVn,193,n.length,0,2),t=0;t<e.length;t++)e[t]=BB(G9(n[t],n[t].length),193);return e}function cvn(n){var t;if(Ksn(n))return mz(n),n.Lk()&&(t=FIn(n.e,n.b,n.c,n.a,n.j),n.j=t),n.g=n.a,++n.a,++n.c,n.i=0,n.j;throw Hp(new yv)}function avn(n,t){var e,i,r,c;return(c=n.o)<(e=n.p)?c*=c:e*=e,i=c+e,(c=t.o)<(e=t.p)?c*=c:e*=e,i<(r=c+e)?-1:i==r?0:1}function uvn(n,t){var e,i;if((i=Wyn(n,t))>=0)return i;if(n.Fk())for(e=0;e<n.i;++e)if(GI(n.Gk(BB(n.g[e],56)))===GI(t))return e;return-1}function ovn(n,t,e){var i,r;if(t>=(r=n.gc()))throw Hp(new tK(t,r));if(n.hi()&&(i=n.Xc(e))>=0&&i!=t)throw Hp(new _y(a8n));return n.mi(t,e)}function svn(n,t){if(this.a=BB(yX(n),245),this.b=BB(yX(t),245),n.vd(t)>0||n==(ey(),Knt)||t==(ty(),_nt))throw Hp(new _y("Invalid range: "+B3(n,t)))}function hvn(n){var t,e;for(this.b=new Np,this.c=n,this.a=!1,e=new Wb(n.a);e.a<e.c.c.length;)t=BB(n0(e),10),this.a=this.a|t.k==(uSn(),Cut)}function fvn(n,t){var e,i,r;for(e=AN(new qv,n),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),121),UNn(aM(cM(uM(rM(new Hv,0),0),e),i));return e}function lvn(n,t,e){var i,r,c;for(r=new oz(ZL((t?fbn(n):lbn(n)).a.Kc(),new h));dAn(r);)i=BB(U5(r),17),(c=t?i.c.i:i.d.i).k==(uSn(),Sut)&&PZ(c,e)}function bvn(){bvn=O,lvt=new _P(QZn,0),bvt=new _P("PORT_POSITION",1),fvt=new _P("NODE_SIZE_WHERE_SPACE_PERMITS",2),hvt=new _P("NODE_SIZE",3)}function wvn(){wvn=O,CMt=new DC("AUTOMATIC",0),AMt=new DC(cJn,1),$Mt=new DC(aJn,2),LMt=new DC("TOP",3),IMt=new DC(oJn,4),OMt=new DC(eJn,5)}function dvn(n,t,e,i){var r,c;for($On(),r=0,c=0;c<e;c++)r=rbn(cbn(e0(t[c],UQn),e0(i,UQn)),e0(dG(r),UQn)),n[c]=dG(r),r=jz(r,32);return dG(r)}function gvn(n,t,i){var r,c;for(c=0,r=0;r<Zit;r++)c=e.Math.max(c,vhn(n.a[t.g][r],i));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.b)),c}function pvn(n,t){var e,i;if(Tx(t>0),(t&-t)==t)return CJ(t*H$n(n,31)*4.656612873077393e-10);do{i=(e=H$n(n,31))%t}while(e-i+(t-1)<0);return CJ(i)}function vvn(n){var t,e,i;return r_(),null!=(i=rit[e=":"+n])?CJ((kW(i),i)):(t=null==(i=iit[e])?JNn(n):CJ((kW(i),i)),IQ(),rit[e]=t,t)}function mvn(n,t,e){OTn(e,"Compound graph preprocessor",1),n.a=new pJ,Nzn(n,t,null),GHn(n,t),tNn(n),hon(t,(hWn(),Hft),n.a),n.a=null,$U(n.b),HSn(e)}function yvn(n,t,e){switch(e.g){case 1:n.a=t.a/2,n.b=0;break;case 2:n.a=t.a,n.b=t.b/2;break;case 3:n.a=t.a/2,n.b=t.b;break;case 4:n.a=0,n.b=t.b/2}}function kvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Pst)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Crn(),xst),0),iX(n,e,t[1],Rst,1)}function jvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Cst)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Crn(),xst),0),iX(n,e,t[1],Rst,1)}function Evn(n){switch(n.g){case 0:return null;case 1:return new Arn;case 2:return new Jm;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Tvn(n,t,e){var i,r;for(mun(n,t-n.s,e-n.t),r=new Wb(n.n);r.a<r.c.c.length;)rb(i=BB(n0(r),211),i.e+t-n.s),cb(i,i.f+e-n.t);n.s=t,n.t=e}function Mvn(n){var t,e,i,r;for(e=0,i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),121).d=e++;return r=null,(t=wSn(n)).c.length>1&&(r=fvn(n,t)),r}function Svn(n){var t;return n.f&&n.f.kh()&&(t=BB(n.f,49),n.f=BB(tfn(n,t),82),n.f!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.f))),n.f}function Pvn(n){var t;return n.i&&n.i.kh()&&(t=BB(n.i,49),n.i=BB(tfn(n,t),82),n.i!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,7,t,n.i))),n.i}function Cvn(n){var t;return n.b&&0!=(64&n.b.Db)&&(t=n.b,n.b=BB(tfn(n,t),18),n.b!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,21,t,n.b))),n.b}function Ivn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Sh(),fNn(n,n.f+1),r=(i&DWn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.uj()),e.Fc(t),++n.f)}function Ovn(n,t,e){var i;return!t.Kj()&&(-2!=t.Zj()?null==(i=t.zj())?null==e:Nfn(i,e):t.Hj()==n.e.Tg()&&null==e)}function Avn(){var n;lin(16,IVn),n=Jin(16),this.b=x8(Gnt,CVn,317,n,0,1),this.c=x8(Gnt,CVn,317,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function $vn(n){LR.call(this),this.k=(uSn(),Cut),this.j=(lin(6,AVn),new J6(6)),this.b=(lin(2,AVn),new J6(2)),this.d=new fm,this.f=new wm,this.a=n}function Lvn(n){var t,e;n.c.length<=1||(dPn(n,BB((t=EDn(n,(kUn(),SIt))).a,19).a,BB(t.b,19).a),dPn(n,BB((e=EDn(n,CIt)).a,19).a,BB(e.b,19).a))}function Nvn(){Nvn=O,yvt=new FP("SIMPLE",0),pvt=new FP(B1n,1),vvt=new FP("LINEAR_SEGMENTS",2),gvt=new FP("BRANDES_KOEPF",3),mvt=new FP(j3n,4)}function xvn(n,t,e){LK(BB(mMn(t,(HXn(),ept)),98))||(W7(n,t,DSn(t,e)),W7(n,t,DSn(t,(kUn(),SIt))),W7(n,t,DSn(t,sIt)),SQ(),m$(t.j,new _d(n)))}function Dvn(n,t,e,i){var r;for(r=BB(h6(i?n.a:n.b,t),21).Kc();r.Ob();)if(_Dn(n,e,BB(r.Pb(),33)))return!0;return!1}function Rvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function Kvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function _vn(n){var t,e;for(t=0,e=new Wb(n.c.a);e.a<e.c.c.length;)t+=F3(new oz(ZL(lbn(BB(n0(e),10)).a.Kc(),new h)));return t/n.c.a.c.length}function Fvn(n){var t,e;for(n.c||zqn(n),e=new km,n0(t=new Wb(n.a));t.a<t.c.c.length;)DH(e,BB(n0(t),407).a);return Px(0!=e.b),Atn(e,e.c.b),e}function Bvn(){Bvn=O,bRn(),qTt=RTt,BTt=new WA(8),new XA((sWn(),XSt),BTt),new XA(LPt,8),HTt=xTt,_Tt=MTt,FTt=STt,KTt=new XA(lSt,(hN(),!1))}function Hvn(n,t,e,i){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e;case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d}return Rbn(n,t,e,i)}function qvn(n){var t;return n.a&&n.a.kh()&&(t=BB(n.a,49),n.a=BB(tfn(n,t),138),n.a!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,5,t,n.a))),n.a}function Gvn(n){return n<48||n>102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function zvn(n,t){if(null==n)throw Hp(new Hy("null key in entry: null="+t));if(null==t)throw Hp(new Hy("null value in entry: "+n+"=null"))}function Uvn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(GI(e)===GI(i)||null!=e&&Nfn(e,i)))return!1}return!t.Ob()}function Xvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[vhn(n.a[0],t),vhn(n.a[1],t),vhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Wvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[mhn(n.a[0],t),mhn(n.a[1],t),mhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Vvn(){Vvn=O,yht=new SP("GREEDY",0),mht=new SP(H1n,1),jht=new SP(B1n,2),Eht=new SP("MODEL_ORDER",3),kht=new SP("GREEDY_MODEL_ORDER",4)}function Qvn(n,t){var e,i,r;for(n.b[t.g]=1,i=spn(t.d,0);i.b!=i.d.c;)r=(e=BB(b3(i),188)).c,1==n.b[r.g]?DH(n.a,e):2==n.b[r.g]?n.b[r.g]=1:Qvn(n,r)}function Yvn(n,t){var e,i,r;for(r=new J6(t.gc()),i=t.Kc();i.Ob();)(e=BB(i.Pb(),286)).c==e.f?hPn(n,e,e.c):rPn(n,e)||(r.c[r.c.length]=e);return r}function Jvn(n,t,e){var i,r,c,a;for(a=n.r+t,n.r+=t,n.d+=e,i=e/n.n.c.length,r=0,c=new Wb(n.n);c.a<c.c.c.length;)w$n(BB(n0(c),211),a,i,r),++r}function Zvn(n){var t,e;for(my(n.b.a),n.a=x8(bit,HWn,57,n.c.c.a.b.c.length,0,1),t=0,e=new Wb(n.c.c.a.b);e.a<e.c.c.length;)BB(n0(e),57).f=t++}function nmn(n){var t,e;for(my(n.b.a),n.a=x8(Qat,HWn,81,n.c.a.a.b.c.length,0,1),t=0,e=new Wb(n.c.a.a.b);e.a<e.c.c.length;)BB(n0(e),81).i=t++}function tmn(n,t,e){OTn(e,"Shrinking tree compaction",1),qy(TD(mMn(t,(Xcn(),Qrt))))?(irn(n,t.f),unn(t.f,t.c)):unn(t.f,t.c),HSn(e)}function emn(n){var t;if(t=bhn(n),!dAn(n))throw Hp(new Ay("position (0) must be less than the number of elements that remained ("+t+")"));return U5(n)}function imn(n,t,e){try{return vmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function rmn(n,t,e){try{return mmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function cmn(n,t,e){try{return ymn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function amn(n){switch(n.g){case 1:return kUn(),CIt;case 4:return kUn(),sIt;case 3:return kUn(),oIt;case 2:return kUn(),SIt;default:return kUn(),PIt}}function umn(n,t,e){t.k==(uSn(),Cut)&&e.k==Put&&(n.d=Efn(t,(kUn(),SIt)),n.b=Efn(t,sIt)),e.k==Cut&&t.k==Put&&(n.d=Efn(e,(kUn(),sIt)),n.b=Efn(e,SIt))}function omn(n,t){var e,i;for(i=abn(n,t).Kc();i.Ob();)if(null!=mMn(e=BB(i.Pb(),11),(hWn(),Elt))||zN(new m6(e.b)))return!0;return!1}function smn(n,t){return Pen(t,n.e+n.d+(0==n.c.c.length?0:n.b)),Cen(t,n.f),n.a=e.Math.max(n.a,t.f),n.d+=t.g+(0==n.c.c.length?0:n.b),WB(n.c,t),!0}function hmn(n,t,e){var i,r,c,a;for(a=0,i=e/n.a.c.length,c=new Wb(n.a);c.a<c.c.c.length;)Tvn(r=BB(n0(c),187),r.s,r.t+a*i),Jvn(r,n.d-r.r+t,i),++a}function fmn(n){var t,e,i;for(e=new Wb(n.b);e.a<e.c.c.length;)for(t=0,i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)BB(n0(i),10).p=t++}function lmn(n,t){var e,i,r,c,a,u;for(r=t.length-1,a=0,u=0,i=0;i<=r;i++)c=t[i],e=pSn(r,i)*efn(1-n,r-i)*efn(n,i),a+=c.a*e,u+=c.b*e;return new xC(a,u)}function bmn(n,t){var e,i,r,c,a;for(e=t.gc(),n.qi(n.i+e),c=t.Kc(),a=n.i,n.i+=e,i=a;i<n.i;++i)r=c.Pb(),jL(n,i,n.oi(i,r)),n.bi(i,r),n.ci();return 0!=e}function wmn(n,t,e){var i,r,c;return n.ej()?(i=n.Vi(),c=n.fj(),++n.j,n.Hi(i,n.oi(i,t)),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):ZD(n,n.Vi(),t),e}function dmn(n,t,e){var i,r,c;return(0!=(64&(c=cL(r=(i=BB(Wtn(a4(n.a),t),87)).c,88)?BB(r,26):(gWn(),d$t)).Db)?tfn(n.b,c):c)==e?lFn(i):cen(i,e),c}function gmn(n,t,e,i,r,c,a,u){var o,s;i&&((o=i.a[0])&&gmn(n,t,e,o,r,c,a,u),Iyn(n,e,i.d,r,c,a,u)&&t.Fc(i),(s=i.a[1])&&gmn(n,t,e,s,r,c,a,u))}function pmn(n,t){var e;return n.a||(e=x8(xNt,qQn,25,0,15,1),gE(n.b.a,new bw(e)),e.sort(ien(T.prototype.te,T,[])),n.a=new _K(e,n.d)),K6(n.a,t)}function vmn(n,t,e){try{return QI(trn(n,t,e),1)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function mmn(n,t,e){try{return QI(trn(n,t,e),0)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function ymn(n,t,e){try{return QI(trn(n,t,e),2)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function kmn(n,t){if(-1==n.g)throw Hp(new dv);n.mj();try{n.d._c(n.g,t),n.f=n.d.j}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function jmn(n,t,e){OTn(e,"Linear segments node placement",1),n.b=BB(mMn(t,(hWn(),Alt)),304),VXn(n,t),vHn(n,t),QHn(n,t),hXn(n),n.a=null,n.b=null,HSn(e)}function Emn(n,t){var e,i,r,c;for(c=n.gc(),t.length<c&&(t=qk(new Array(c),t)),r=t,i=n.Kc(),e=0;e<c;++e)$X(r,e,i.Pb());return t.length>c&&$X(t,c,null),t}function Tmn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e<i;e++)if(null==n.Xb(e))return e}else for(e=0;e<i;e++)if(Nfn(t,n.Xb(e)))return e;return-1}function Mmn(n,t){var e,i,r;return e=t.cd(),r=t.dd(),i=n.xc(e),!(!(GI(r)===GI(i)||null!=r&&Nfn(r,i))||null==i&&!n._b(e))}function Smn(n,t){var e,i,r;return t<=22?(e=n.l&(1<<t)-1,i=r=0):t<=44?(e=n.l,i=n.m&(1<<t-22)-1,r=0):(e=n.l,i=n.m,r=n.h&(1<<t-44)-1),M$(e,i,r)}function Pmn(n,t){switch(t.g){case 1:return n.f.n.d+n.t;case 3:return n.f.n.a+n.t;case 2:return n.f.n.c+n.s;case 4:return n.f.n.b+n.s;default:return 0}}function Cmn(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 Imn(n,t,e,i){var r,c;this.a=t,this.c=i,$l(this,new xC(-(r=n.a).c,-r.d)),UR(this.b,e),c=i/2,t.a?Bx(this.b,0,c):Bx(this.b,c,0),WB(n.c,this)}function Omn(){Omn=O,qjt=new mC(QZn,0),Bjt=new mC(q1n,1),Hjt=new mC("EDGE_LENGTH_BY_POSITION",2),Fjt=new mC("CROSSING_MINIMIZATION_BY_POSITION",3)}function Amn(n,t){var e,i;if(e=BB(sen(n.g,t),33))return e;if(i=BB(sen(n.j,t),118))return i;throw Hp(new ek("Referenced shape does not exist: "+t))}function $mn(n,t){if(n.c==t)return n.d;if(n.d==t)return n.c;throw Hp(new _y("Node 'one' must be either source or target of edge 'edge'."))}function Lmn(n,t){if(n.c.i==t)return n.d.i;if(n.d.i==t)return n.c.i;throw Hp(new _y("Node "+t+" is neither source nor target of edge "+n))}function Nmn(n,t){var e;switch(t.g){case 2:case 4:e=n.a,n.c.d.n.b<e.d.n.b&&(e=n.c),bU(n,t,(Oun(),kst),e);break;case 1:case 3:bU(n,t,(Oun(),vst),null)}}function xmn(n,t,e,i,r,c){var a,u,o,s,h;for(a=ijn(t,e,c),u=e==(kUn(),sIt)||e==CIt?-1:1,s=n[e.g],h=0;h<s.length;h++)(o=s[h])>0&&(o+=r),s[h]=a,a+=u*(o+i)}function Dmn(n){var t,e,i;for(i=n.f,n.n=x8(xNt,qQn,25,i,15,1),n.d=x8(xNt,qQn,25,i,15,1),t=0;t<i;t++)e=BB(xq(n.c.b,t),29),n.n[t]=wpn(n,e),n.d[t]=VLn(n,e)}function Rmn(n,t){var e,i,r;for(r=0,i=2;i<t;i<<=1)0!=(n.Db&i)&&++r;if(0==r){for(e=t<<=1;e<=128;e<<=1)if(0!=(n.Db&e))return 0;return-1}return r}function Kmn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=null,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&(!c&&(c=new go),f9(c,i));c&&aXn(n,c)}function _mn(n){var t,e;if(!n)return null;if(n.dc())return"";for(e=new Sk,t=n.Kc();t.Ob();)cO(e,SD(t.Pb())),e.a+=" ";return KO(e,e.a.length-1)}function Fmn(n,t,e){var i,r,c,a;for(con(n),null==n.k&&(n.k=x8(Jnt,sVn,78,0,0,1)),r=0,c=(i=n.k).length;r<c;++r)Fmn(i[r],t,"\t"+e);(a=n.f)&&Fmn(a,t,e)}function Bmn(n,t){var e,i=new Array(t);switch(n){case 14:case 15:e=0;break;case 16:e=!1;break;default:return i}for(var r=0;r<t;++r)i[r]=e;return i}function Hmn(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();Otn(dA(n.d)?n.a.c:n.a.d,new Mw(n)),n.c.Me(n),_xn(n)}function qmn(n){var t,e,i;for(e=new Wb(n.e.c);e.a<e.c.c.length;){for(i=new Wb((t=BB(n0(e),282)).b);i.a<i.c.c.length;)_Bn(BB(n0(i),447));BCn(t)}}function Gmn(n){var t,i,r,c,a;for(r=0,a=0,c=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),a=e.Math.max(a,t.r),r+=t.d+(c>0?n.c:0),++c;n.b=r,n.d=a}function zmn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t);u.a<u.c.c.length;)a=BB(n0(u),200),r=e.Math.max(r,a.e),c+=a.b+(i>0?n.g:0),++i;n.c=c,n.d=r}function Umn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[gvn(n,(Dtn(),Git),t),gvn(n,zit,t),gvn(n,Uit,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Xmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function Wmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function Vmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),ICt))?(t.Mc(ICt),t.Fc(ACt)):t.Hc(ACt)&&(t.Mc(ACt),t.Fc(ICt)))}function Qmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),DCt))?(t.Mc(DCt),t.Fc(NCt)):t.Hc(NCt)&&(t.Mc(NCt),t.Fc(DCt)))}function Ymn(n,t,e){OTn(e,"Self-Loop ordering",1),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new Ii),new Oi),new Ai),new $i),new bd(n)),HSn(e)}function Jmn(n,t,e,i){var r,c;for(r=t;r<n.c.length;r++){if(l1(r,n.c.length),c=BB(n.c[r],11),!e.Mb(c))return r;i.c[i.c.length]=c}return n.c.length}function Zmn(n,t,e,i){var r,c,a;return null==n.a&&dSn(n,t),a=t.b.j.c.length,c=e.d.p,(r=i.d.p-1)<0&&(r=a-1),c<=r?n.a[r]-n.a[c]:n.a[a-1]-n.a[c]+n.a[r]}function nyn(n){var t,e;if(!n.b)for(n.b=C2(BB(n.f,33).Ag().i),e=new AL(BB(n.f,33).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function tyn(n){var t,e;if(!n.e)for(n.e=C2(yV(BB(n.f,33)).i),e=new AL(yV(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),118),WB(n.e,new op(t));return n.e}function eyn(n){var t,e;if(!n.a)for(n.a=C2(YQ(BB(n.f,33)).i),e=new AL(YQ(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),33),WB(n.a,new JN(n,t));return n.a}function iyn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=bzn(n))n.yk(t);else try{n.yk(null)}catch(e){if(!cL(e=lun(e),60))throw Hp(e)}return n.C}function ryn(n){switch(n.q.g){case 5:kjn(n,(kUn(),sIt)),kjn(n,SIt);break;case 4:cGn(n,(kUn(),sIt)),cGn(n,SIt);break;default:FPn(n,(kUn(),sIt)),FPn(n,SIt)}}function cyn(n){switch(n.q.g){case 5:jjn(n,(kUn(),oIt)),jjn(n,CIt);break;case 4:aGn(n,(kUn(),oIt)),aGn(n,CIt);break;default:BPn(n,(kUn(),oIt)),BPn(n,CIt)}}function ayn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),c.a,0),c.a+=i.f.a+t,c.b=e.Math.max(c.b,i.f.b);return c.b>0&&(c.b+=t),c}function uyn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),0,c.b),c.b+=i.f.b+t,c.a=e.Math.max(c.a,i.f.a);return c.a>0&&(c.a+=t),c}function oyn(n){var t,i,r;for(r=DWn,i=new Wb(n.a);i.a<i.c.c.length;)Lx(t=BB(n0(i),10),(hWn(),wlt))&&(r=e.Math.min(r,BB(mMn(t,wlt),19).a));return r}function syn(n,t){var e,i;if(0==t.length)return 0;for(e=ZX(n.a,t[0],(kUn(),CIt)),e+=ZX(n.a,t[t.length-1],oIt),i=0;i<t.length;i++)e+=qMn(n,i,t);return e}function hyn(){gxn(),this.c=new Np,this.i=new Np,this.e=new fA,this.f=new fA,this.g=new fA,this.j=new Np,this.a=new Np,this.b=new xp,this.k=new xp}function fyn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,5,GOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lyn(n){PY();var t=n.e;if(t&&t.stack){var e=t.stack,i=t+"\n";return e.substring(0,i.length)==i&&(e=e.substring(i.length)),e.split("\n")}return[]}function byn(n){var t;return Min(),(t=Ott)[n>>>28]|t[n>>24&15]<<4|t[n>>20&15]<<8|t[n>>16&15]<<12|t[n>>12&15]<<16|t[n>>8&15]<<20|t[n>>4&15]<<24|t[15&n]<<28}function wyn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=kon(e.Math.max(8,r))<<1,0!=n.b?(urn(n,t=SR(n.a,i),r),n.a=t,n.b=0):Pv(n.a,i),n.c=r)}function dyn(n,t){var e;return(e=n.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),CIt)?-e.rf().a-Gy(MD(e.We(aPt))):t+Gy(MD(e.We(aPt))):e.Hf()==(kUn(),CIt)?-e.rf().a:t}function gyn(n){var t;return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:null!=(t=eQ(n))?t:""+(n.c?E7(n.c.a,n,0):-1)}function pyn(n){var t;return 0!=n.f.c.length&&BB(xq(n.f,0),70).a?BB(xq(n.f,0),70).a:null!=(t=eQ(n))?t:""+(n.i?E7(n.i.j,n,0):-1)}function vyn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e<n.gc();++e)if(i=BB(n.Xb(e),128),e==n.gc()-1||!i.o)return new rI(iln(e),i);return null}function myn(n,t,e){var i,r,c,a;for(c=n.c,i=e?n:t,r=(e?t:n).p+1;r<i.p;++r)if((a=BB(xq(c.a,r),10)).k!=(uSn(),Tut)&&!Lkn(a))return!1;return!0}function yyn(n){var t,i,r,c,a;for(a=0,c=KQn,r=0,i=new Wb(n.a);i.a<i.c.c.length;)a+=(t=BB(n0(i),187)).r+(r>0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function kyn(n){var t,e;if(!n.b)for(n.b=C2(BB(n.f,118).Ag().i),e=new AL(BB(n.f,118).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function jyn(n,t){var e,i,r;if(t.dc())return dD(),dD(),pAt;for(e=new aR(n,t.gc()),r=new AL(n);r.e!=r.i.gc();)i=kpn(r),t.Hc(i)&&f9(e,i);return e}function Eyn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),n.o):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),A8(n.o)):Zpn(n,t,e,i)}function Tyn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t<e;++t)vx(Wtn(n.rb,t));if(n.vb)for(t=0,e=n.vb.i;t<e;++t)vx(Wtn(n.vb,t));az((IPn(),Z$t),n),n.Bb|=1}function Myn(n,t,e,i,r,c,a,u,o,s,h,f,l,b){return bCn(n,t,i,null,r,c,a,u,o,s,l,!0,b),zln(n,h),cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),2),e&&rrn(n,e),Uln(n,f),n}function Syn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Pyn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Cyn(n,t){var e,i,r;return!((r=n.h-t.h)<0||(e=n.l-t.l,(r+=(i=n.m-t.m+(e>>22))>>22)<0||(n.l=e&SQn,n.m=i&SQn,n.h=r&PQn,0)))}function Iyn(n,t,e,i,r,c,a){var u,o;return!(t.Ae()&&(o=n.a.ue(e,i),o<0||!r&&0==o)||t.Be()&&(u=n.a.ue(e,c),u>0||!a&&0==u))}function Oyn(n,t){if(zsn(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return jbn(t,bst)-jbn(n,bst);case 4:return jbn(n,lst)-jbn(t,lst)}return 0}function Ayn(n){switch(n.g){case 0:return xht;case 1:return Dht;case 2:return Rht;case 3:return Kht;case 4:return _ht;case 5:return Fht;default:return null}}function $yn(n,t,e){var i,r;return Ihn(r=new Lm,t),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(i=r,0),Nen(i,1),nln(i,!0),Yfn(i,!0),i}function Lyn(n,t){var e,i;if(t>=n.i)throw Hp(new LO(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&aHn(n.g,t+1,n.g,t,i),$X(n.g,--n.i,null),n.fi(t,e),n.ci(),e}function Nyn(n,t){var e;return n.Db>>16==17?n.Cb.ih(n,21,qAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function xyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),679).Ke(e)}function Dyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),369).Ke(e)}function Ryn(n){var t,e,i,r,c;for(r=DWn,c=null,i=new Wb(n.d);i.a<i.c.c.length;)(e=BB(n0(i),213)).d.j^e.e.j&&(t=e.e.e-e.d.e-e.a)<r&&(r=t,c=e);return c}function Kyn(){Kyn=O,dat=new $O(NZn,(hN(),!1)),fat=new $O(xZn,100),q7(),lat=new $O(DZn,bat=Oat),wat=new $O(RZn,lZn),gat=new $O(KZn,iln(DWn))}function _yn(n,t,e){var i,r,c,a,u,o;for(o=0,r=0,c=(i=n.a[t]).length;r<c;++r)for(u=Lfn(i[r],e).Kc();u.Ob();)a=BB(u.Pb(),11),VW(n.f,a,iln(o++))}function Fyn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JIn(n,t,kIn(dnn(e,BB(r.Pb(),19).a)))}function Byn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JIn(n,t,kIn(dnn(e,BB(r.Pb(),19).a)))}function Hyn(n){var t;return _Mn(),z9(t=BB(Emn(gz(n.k),x8(FIt,YZn,61,2,0,1)),122),0,t.length,null),t[0]==(kUn(),sIt)&&t[1]==CIt&&($X(t,0,CIt),$X(t,1,sIt)),t}function qyn(n,t,e){var i,r,c;return c=sDn(n,r=XNn(n,t,e)),K9(n.b),k0(n,t,e),SQ(),m$(r,new Vd(n)),i=sDn(n,r),K9(n.b),k0(n,e,t),new rI(iln(c),iln(i))}function Gyn(){Gyn=O,Umt=dq(new B2,(yMn(),Bat),(lWn(),dot)),Xmt=new iR("linearSegments.inputPrio",iln(0)),Wmt=new iR("linearSegments.outputPrio",iln(0))}function zyn(){zyn=O,Ryt=new fC("P1_TREEIFICATION",0),Kyt=new fC("P2_NODE_ORDERING",1),_yt=new fC("P3_NODE_PLACEMENT",2),Fyt=new fC("P4_EDGE_ROUTING",3)}function Uyn(){Uyn=O,sWn(),xjt=gPt,Kjt=LPt,Cjt=KSt,Ijt=BSt,Ojt=qSt,Pjt=DSt,Ajt=USt,Njt=fPt,KAn(),Mjt=wjt,Sjt=djt,$jt=pjt,Ljt=mjt,Djt=yjt,Rjt=kjt,_jt=Ejt}function Xyn(){Xyn=O,MCt=new qC("UNKNOWN",0),jCt=new qC("ABOVE",1),ECt=new qC("BELOW",2),TCt=new qC("INLINE",3),new iR("org.eclipse.elk.labelSide",MCt)}function Wyn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return e}else for(e=0;e<n.i;++e)if(GI(n.g[e])===GI(t))return e;return-1}function Vyn(n,t,e){var i,r;return t.c==(ain(),qvt)&&e.c==Hvt?-1:t.c==Hvt&&e.c==qvt?1:(i=dhn(t.a,n.a),r=dhn(e.a,n.a),t.c==qvt?r-i:i-r)}function Qyn(n,t,e){if(e&&(t<0||t>e.a.c.length))throw Hp(new _y("index must be >= 0 and <= layer node count"));n.c&&y7(n.c.a,n),n.c=e,e&&kG(e.a,t,n)}function Yyn(n,t){var e,i,r;for(i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)return e=BB(U5(i),17),new qf(yX((r=BB(t.Kb(e),10)).n.b+r.o.b/2));return iy(),iy(),Ont}function Jyn(n,t){this.c=new xp,this.a=n,this.b=t,this.d=BB(mMn(n,(hWn(),Alt)),304),GI(mMn(n,(HXn(),Lgt)))===GI((g7(),qht))?this.e=new gm:this.e=new dm}function Zyn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),33),c+=e.Math.pow(i.g*i.f-t,2);return e.Math.sqrt(c/(n.c.length-1))}function nkn(n,t){var e,i;return i=null,n.Xe((sWn(),CPt))&&(e=BB(n.We(CPt),94)).Xe(t)&&(i=e.We(t)),null==i&&n.yf()&&(i=n.yf().We(t)),null==i&&(i=mpn(t)),i}function tkn(n,t){var e,i;e=n.Zc(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't remove element "+t)):Hp(r)}}function ekn(n,t){var e,i,r;if(0==(e=DBn(n,t,r=new von((i=new AT).q.getFullYear()-sQn,i.q.getMonth(),i.q.getDate())))||e<t.length)throw Hp(new _y(t));return r}function ikn(n,t){var e,i,r;for(kW(t),Tx(t!=n),r=n.b.c.length,i=t.Kc();i.Ob();)e=i.Pb(),WB(n.b,kW(e));return r!=n.b.c.length&&(Esn(n,0),!0)}function rkn(){rkn=O,sWn(),kat=CSt,new XA(dSt,(hN(),!0)),Tat=KSt,Mat=BSt,Sat=qSt,Eat=DSt,Pat=USt,Cat=fPt,Kyn(),yat=dat,vat=lat,mat=wat,jat=gat,pat=fat}function ckn(n,t){if(t==n.c)return n.d;if(t==n.d)return n.c;throw Hp(new _y("'port' must be either the source port or target port of the edge."))}function akn(n,t,e){var i,r;switch(r=n.o,i=n.d,t.g){case 1:return-i.d-e;case 3:return r.b+i.a+e;case 2:return r.a+i.c+e;case 4:return-i.b-e;default:return 0}}function ukn(n,t,e,i){var r,c,a;for(PZ(t,BB(i.Xb(0),29)),a=i.bd(1,i.gc()),c=BB(e.Kb(t),20).Kc();c.Ob();)ukn(n,(r=BB(c.Pb(),17)).c.i==t?r.d.i:r.c.i,e,a)}function okn(n){var t;return t=new xp,Lx(n,(hWn(),Dlt))?BB(mMn(n,Dlt),83):(JT(AV(new Rq(null,new w1(n.j,16)),new tr),new gd(t)),hon(n,Dlt,t),t)}function skn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,6,_Ot,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),yOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function hkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,1,DOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),jOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function fkn(n,t){var e;return n.Db>>16==9?n.Cb.ih(n,9,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),TOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lkn(n,t){var e;return n.Db>>16==5?n.Cb.ih(n,9,XAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),s$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function bkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,0,BOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),e$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function wkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,6,GOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),v$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function dkn(){this.a=new lo,this.g=new Avn,this.j=new Avn,this.b=new xp,this.d=new Avn,this.i=new Avn,this.k=new xp,this.c=new xp,this.e=new xp,this.f=new xp}function gkn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;r<c;r++)if(i=Wtn(n,r),null==t){if(null==i)return r}else if(GI(t)===GI(i)||Nfn(t,i))return r;return-1}function pkn(n,t){var e,i;return(e=t.Hh(n.a))?(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),j7n)),mK(E7n,i)?az(n,Utn(t.Hj())):i):null}function vkn(n,t){var e,i;if(t){if(t==n)return!0;for(e=0,i=BB(t,49).eh();i&&i!=t;i=i.eh()){if(++e>GQn)return vkn(n,i);if(i==n)return!0}}return!1}function mkn(n){switch(DN(),n.q.g){case 5:vIn(n,(kUn(),sIt)),vIn(n,SIt);break;case 4:z$n(n,(kUn(),sIt)),z$n(n,SIt);break;default:vUn(n,(kUn(),sIt)),vUn(n,SIt)}}function ykn(n){switch(DN(),n.q.g){case 5:SOn(n,(kUn(),oIt)),SOn(n,CIt);break;case 4:Cpn(n,(kUn(),oIt)),Cpn(n,CIt);break;default:mUn(n,(kUn(),oIt)),mUn(n,CIt)}}function kkn(n){var t,e;(t=BB(mMn(n,(fRn(),nat)),19))?(e=t.a,hon(n,(Mrn(),hat),0==e?new sbn:new C4(e))):hon(n,(Mrn(),hat),new C4(1))}function jkn(n,t){var e;switch(e=n.i,t.g){case 1:return-(n.n.b+n.o.b);case 2:return n.n.a-e.o.a;case 3:return n.n.b-e.o.b;case 4:return-(n.n.a+n.o.a)}return 0}function Ekn(n,t){switch(n.g){case 0:return t==(Tbn(),Flt)?rst:cst;case 1:return t==(Tbn(),Flt)?rst:ist;case 2:return t==(Tbn(),Flt)?ist:cst;default:return ist}}function Tkn(n,t){var i,r,c;for(y7(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=n4n,r=new Wb(n.a);r.a<r.c.c.length;)i=BB(n0(r),187),c=e.Math.max(c,i.d);n.b=c}function Mkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,12,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),mOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Skn(n,t){var e;return n.Db>>16==11?n.Cb.ih(n,10,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),EOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Pkn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,11,qAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),g$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ckn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,12,QAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),m$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ikn(n){var t;return 0==(1&n.Bb)&&n.r&&n.r.kh()&&(t=BB(n.r,49),n.r=BB(tfn(n,t),138),n.r!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.r))),n.r}function Okn(n,t,i){var r;return r=Pun(Gk(xNt,1),qQn,25,15,[iMn(n,(Dtn(),Git),t,i),iMn(n,zit,t,i),iMn(n,Uit,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function Akn(n,t){var e,i,r;if(0!=(r=Yvn(n,t)).c.length)for(m$(r,new ti),e=r.c.length,i=0;i<e;i++)hPn(n,(l1(i,r.c.length),BB(r.c[i],286)),TDn(n,r,i))}function $kn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Tst)),15).Kc();i.Ob();)for(t=gz((e=BB(i.Pb(),101)).k).Kc();t.Ob();)iX(n,e,BB(t.Pb(),61),(Crn(),Dst),1)}function Lkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&n.c==Ajn(t,n).c)return!0;return!1}function Nkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&t.c.i.c==t.d.i.c)return!0;return!1}function xkn(n,t){var e,i;for(OTn(t,"Dull edge routing",1),i=spn(n.b,0);i.b!=i.d.c;)for(e=spn(BB(b3(i),86).d,0);e.b!=e.d.c;)yQ(BB(b3(e),188).a)}function Dkn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)(i=x2(t,BB(r.Pb(),19).a))&&O$n(n,i)}function Rkn(){var n;for(tS(),nWn((QX(),t$t)),_Xn(t$t),Tyn(t$t),gWn(),L$t=l$t,n=new Wb(V$t);n.a<n.c.c.length;)azn(BB(n0(n),241),l$t,null);return!0}function Kkn(n,t){var e,i,r,c,a,u;return(a=n.h>>19)!=(u=t.h>>19)?u-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function _kn(){_kn=O,tRn(),Pit=new $O(UYn,Cit=xit),Rnn(),Mit=new $O(XYn,Sit=mit),hpn(),Eit=new $O(WYn,Tit=dit),jit=new $O(VYn,(hN(),!0))}function Fkn(n,t,e){var i,r;i=t*e,cL(n.g,145)?(r=f3(n)).f.d?r.f.a||(n.d.a+=i+fJn):(n.d.d-=i+fJn,n.d.a+=i+fJn):cL(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function Bkn(n,t,i){var r,c,a,u,o;for(c=n[i.g],o=new Wb(t.d);o.a<o.c.c.length;)(a=(u=BB(n0(o),101)).i)&&a.i==i&&(c[r=u.d[i.g]]=e.Math.max(c[r],a.j.b))}function Hkn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t.d);u.a<u.c.c.length;)Gmn(a=BB(n0(u),443)),r=e.Math.max(r,a.b),c+=a.d+(i>0?n.g:0),++i;t.b=r,t.e=c}function qkn(n){var t,e,i;if(i=n.b,qT(n.i,i.length)){for(e=2*i.length,n.b=x8(Gnt,CVn,317,e,0,1),n.c=x8(Gnt,CVn,317,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)YCn(n,t,t);++n.g}}function Gkn(n,t,e,i){var r,c,a,u;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)u=a-t.k+i,vmn(t,r,a)?cmn(n,c,u)||Xmn(n,c,u):ymn(t,r,a)&&(imn(n,c,u)||Wmn(n,c,u))}function zkn(n,t,e){var i;(i=t.c.i).k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function Ukn(n,t,i){var r,c,a,u,o,s;return jDn(),u=t/2,a=i/2,o=1,s=1,(r=e.Math.abs(n.a))>u&&(o=u/r),(c=e.Math.abs(n.b))>a&&(s=a/c),kL(n,e.Math.min(o,s)),n}function Xkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),y6n),2014))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new ao}function Wkn(){var n,t;d7();try{if(t=BB(Xjn((WM(),zAt),S7n),2024))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new Ds}function Vkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),V9n),1941))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new qo}function Qkn(n,t,e){var i,r;return r=n.e,n.e=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),r!=t&&(e=azn(n,t?kLn(n,t):n.a,e)),e}function Ykn(){AT.call(this),this.e=-1,this.a=!1,this.p=_Vn,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=_Vn}function Jkn(n,t){var e,i,r;if(i=n.b.d.d,n.a||(i+=n.b.d.a),r=t.b.d.d,t.a||(r+=t.b.d.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function Zkn(n,t){var e,i,r;if(i=n.b.b.d,n.a||(i+=n.b.b.a),r=t.b.b.d,t.a||(r+=t.b.b.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function njn(n,t){var e,i,r;if(i=n.b.g.d,n.a||(i+=n.b.g.a),r=t.b.g.d,t.a||(r+=t.b.g.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function tjn(){tjn=O,Nat=WG(dq(dq(dq(new B2,(yMn(),Fat),(lWn(),yot)),Fat,Tot),Bat,Aot),Bat,oot),Dat=dq(dq(new B2,Fat,Jut),Fat,sot),xat=WG(new B2,Bat,fot)}function ejn(n){var t,e,i,r,c;for(t=BB(mMn(n,(hWn(),zft)),83),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=BB(i.Pb(),306)).i).c+=c.a,r.d+=c.b,e.c?NDn(e):xDn(e);hon(n,zft,null)}function ijn(n,t,e){var i,r;switch(i=(r=n.b).d,t.g){case 1:return-i.d-e;case 2:return r.o.a+i.c+e;case 3:return r.o.b+i.a+e;case 4:return-i.b-e;default:return-1}}function rjn(n){var t,e,i,r,c;if(i=0,r=ZJn,n.b)for(t=0;t<360;t++)e=.017453292519943295*t,UKn(n,n.d,0,0,Z3n,e),(c=n.b.ig(n.d))<r&&(i=e,r=c);UKn(n,n.d,0,0,Z3n,i)}function cjn(n,t){var e,i,r,c;for(c=new xp,t.e=null,t.f=null,i=new Wb(t.i);i.a<i.c.c.length;)e=BB(n0(i),65),r=BB(RX(n.g,e.a),46),e.a=qz(e.b),VW(c,e.a,r);n.g=c}function ajn(n,t,e){var i,r,c,a,u;for(r=(t-n.e)/n.d.c.length,c=0,u=new Wb(n.d);u.a<u.c.c.length;)a=BB(n0(u),443),i=n.b-a.b+e,kdn(a,a.e+c*r,a.f),hmn(a,r,i),++c}function ujn(n){var t;if(n.f.qj(),-1!=n.b){if(++n.b,t=n.f.d[n.a],n.b<t.i)return;++n.a}for(;n.a<n.f.d.length;++n.a)if((t=n.f.d[n.a])&&0!=t.i)return void(n.b=0);n.b=-1}function ojn(n,t){var e,i,r;for(e=$Cn(n,0==(r=t.c.length)?"":(l1(0,t.c.length),SD(t.c[0]))),i=1;i<r&&e;++i)e=BB(e,49).oh((l1(i,t.c.length),SD(t.c[i])));return e}function sjn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),10),n.c[e.c.p][e.p].a=OG(n.i),n.c[e.c.p][e.p].d=Gy(n.c[e.c.p][e.p].a),n.c[e.c.p][e.p].b=1}function hjn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),157),c+=e.Math.pow(iG(i)*eG(i)-t,2);return e.Math.sqrt(c/(n.c.length-1))}function fjn(n,t,e,i){var r,c,a;return a=NRn(n,c=qRn(n,t,e,i)),fMn(n,t,e,i),K9(n.b),SQ(),m$(c,new Qd(n)),r=NRn(n,c),fMn(n,e,t,i),K9(n.b),new rI(iln(a),iln(r))}function ljn(n,t,e){var i;for(OTn(e,"Interactive node placement",1),n.a=BB(mMn(t,(hWn(),Alt)),304),i=new Wb(t.b);i.a<i.c.c.length;)nDn(n,BB(n0(i),29));HSn(e)}function bjn(n,t){OTn(t,"General Compactor",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),dwn(BB(ZAn(n,(Uyn(),Sjt)),380)).hg(n),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function wjn(n,t,e){var i,r;for(CA(n,n.j+t,n.k+e),r=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));r.e!=r.i.gc();)TA(i=BB(kpn(r),469),i.a+t,i.b+e);PA(n,n.b+t,n.c+e)}function djn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),Ywn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),Ywn(n.d,t,i)}return FTn(n,t,e,i)}function gjn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),_pn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),_pn(n.d,t,i)}return run(n,t,e,i)}function pjn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&bIn(n,r,t)}function vjn(n,t,e){var i,r,c;return n.qj(),c=null==t?0:nsn(t),n.f>0&&(r=aOn(n,(c&DWn)%n.d.length,c,t))?r.ed(e):(i=n.tj(c,t,e),n.c.Fc(i),null)}function mjn(n,t){var e,i,r,c;switch(Cfn(n,t)._k()){case 3:case 2:for(r=0,c=(e=YBn(t)).i;r<c;++r)if(5==DW(B7(n,i=BB(Wtn(e,r),34))))return i}return null}function yjn(n){var t,e,i,r,c;if(qT(n.f,n.b.length))for(i=x8(Qnt,CVn,330,2*n.b.length,0,1),n.b=i,r=i.length-1,e=n.a;e!=n;e=e.Rd())t=(c=BB(e,330)).d&r,c.a=i[t],i[t]=c}function kjn(n,t){var i,r,c,a;for(a=0,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)r=BB(c.Pb(),111),a=e.Math.max(a,r.e.a+r.b.rf().a);(i=BB(oV(n.b,t),124)).n.b=0,i.a.a=a}function jjn(n,t){var i,r,c,a;for(i=0,a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)c=BB(a.Pb(),111),i=e.Math.max(i,c.e.b+c.b.rf().b);(r=BB(oV(n.b,t),124)).n.d=0,r.a.b=i}function Ejn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=kA(vyt),e.Hc((bDn(),gft))&&Jcn(t,kyt),e.Hc(vft)&&Jcn(t,Eyt),e.Hc(sft)&&Jcn(t,myt),e.Hc(fft)&&Jcn(t,yyt),t}function Tjn(n,t){var e;OTn(t,"Delaunay triangulation",1),e=new Np,Otn(n.i,new yg(e)),qy(TD(mMn(n,(Xcn(),Qrt)))),n.e?Frn(n.e,$Xn(e)):n.e=$Xn(e),HSn(t)}function Mjn(n){if(n<0)throw Hp(new _y("The input must be positive"));return n<MMt.length?j2(MMt[n]):e.Math.sqrt(Z3n*n)*(ifn(n,n)/efn(2.718281828459045,n))}function Sjn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return!0}else for(e=0;e<n.i;++e)if(GI(n.g[e])===GI(t))return!0;return!1}function Pjn(n,t){if(null==t){for(;n.a.Ob();)if(null==BB(n.a.Pb(),42).dd())return!0}else for(;n.a.Ob();)if(Nfn(t,BB(n.a.Pb(),42).dd()))return!0;return!1}function Cjn(n,t){var e;return t===n||!!cL(t,664)&&(e=BB(t,1947),ign(n.g||(n.g=new Zf(n)),e.g||(e.g=new Zf(e))))}function Ijn(n){var t,i,r;for(t="Sz",i="ez",r=e.Math.min(n.length,5)-1;r>=0;r--)if(mK(n[r].d,t)||mK(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function Ojn(n,t){var i;return JO(n)&&JO(t)&&$Qn<(i=n/t)&&i<OQn?i<0?e.Math.ceil(i):e.Math.floor(i):uan(Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!1))}function Ajn(n,t){if(t==n.c.i)return n.d.i;if(t==n.d.i)return n.c.i;throw Hp(new _y("'node' must either be the source node or target node of the edge."))}function $jn(n){var t,e,i,r;if(r=BB(mMn(n,(hWn(),Fft)),37)){for(i=new Gj,t=vW(n.c.i);t!=r;)t=vW(e=t.e),_x(UR(UR(i,e.n),t.c),t.d.b,t.d.d);return i}return Fut}function Ljn(n){var t;JT(wnn(new Rq(null,new w1((t=BB(mMn(n,(hWn(),Olt)),403)).d,16)),new _i),new wd(n)),JT(AV(new Rq(null,new w1(t.d,16)),new Fi),new dd(n))}function Njn(n,t){var e,i;for(e=new oz(ZL((t?lbn(n):fbn(n)).a.Kc(),new h));dAn(e);)if((i=Ajn(BB(U5(e),17),n)).k==(uSn(),Put)&&i.c!=n.c)return i;return null}function xjn(n){var t,i,r;for(i=new Wb(n.p);i.a<i.c.c.length;)(t=BB(n0(i),10)).k==(uSn(),Cut)&&(r=t.o.b,n.i=e.Math.min(n.i,r),n.g=e.Math.max(n.g,r))}function Djn(n,t,e){var i,r,c;for(c=new Wb(t);c.a<c.c.c.length;)i=BB(n0(c),10),n.c[i.c.p][i.p].e=!1;for(r=new Wb(t);r.a<r.c.c.length;)xzn(n,i=BB(n0(r),10),e)}function Rjn(n,t,i){var r,c;(r=Tfn(t.j,i.s,i.c)+Tfn(i.e,t.s,t.c))==(c=Tfn(i.j,t.s,t.c)+Tfn(t.e,i.s,i.c))?r>0&&(n.b+=2,n.a+=r):(n.b+=1,n.a+=e.Math.min(r,c))}function Kjn(n,t){var e;if(e=!1,XI(t)&&(e=!0,nW(n,new GX(SD(t)))),e||cL(t,236)&&(e=!0,nW(n,new Sl(XK(BB(t,236))))),!e)throw Hp(new Ly(H6n))}function _jn(n,t,e,i){var r,c,a;return r=new N7(n.e,1,10,cL(a=t.c,88)?BB(a,26):(gWn(),d$t),cL(c=e.c,88)?BB(c,26):(gWn(),d$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Fjn(n){var t,e;switch(BB(mMn(vW(n),(HXn(),pgt)),420).g){case 0:return t=n.n,e=n.o,new xC(t.a+e.a/2,t.b+e.b/2);case 1:return new wA(n.n);default:return null}}function Bjn(){Bjn=O,Qht=new AP(QZn,0),Vht=new AP("LEFTUP",1),Jht=new AP("RIGHTUP",2),Wht=new AP("LEFTDOWN",3),Yht=new AP("RIGHTDOWN",4),Xht=new AP("BALANCED",5)}function Hjn(n,t,e){var i,r,c;if(0==(i=Pln(n.a[t.p],n.a[e.p]))){if(r=BB(mMn(t,(hWn(),clt)),15),c=BB(mMn(e,clt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function qjn(n){switch(n.g){case 1:return new _a;case 2:return new Fa;case 3:return new Ka;case 0:return null;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Gjn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),sqn(n.n),!n.n&&(n.n=new eU(zOt,n,1,7)),void pX(n.n,BB(e,14));case 2:return void $in(n,SD(e))}rsn(n,t,e)}function zjn(n,t,e){switch(t){case 3:return void Men(n,Gy(MD(e)));case 4:return void Sen(n,Gy(MD(e)));case 5:return void Pen(n,Gy(MD(e)));case 6:return void Cen(n,Gy(MD(e)))}Gjn(n,t,e)}function Ujn(n,t,e){var i,r;(i=HTn(r=new Lm,t,null))&&i.Fi(),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(r,0),Nen(r,1),nln(r,!0),Yfn(r,!0)}function Xjn(n,t){var e,i;return cL(e=hS(n.g,t),235)?((i=BB(e,235)).Qh(),i.Nh()):cL(e,498)?i=BB(e,1938).b:null}function Wjn(n,t,e,i){var r,c;return yX(t),yX(e),R7(!!(c=BB(UK(n.d,t),19)),"Row %s not in %s",t,n.e),R7(!!(r=BB(UK(n.b,e),19)),"Column %s not in %s",e,n.c),Sun(n,c.a,r.a,i)}function Vjn(n,t,e,i,r,c,a){var u,o,s,h,f;if(f=Bmn(u=(s=c==a-1)?i:0,h=r[c]),10!=i&&Pun(Gk(n,a-c),t[c],e[c],u,f),!s)for(++c,o=0;o<h;++o)f[o]=Vjn(n,t,e,i,r,c,a);return f}function Qjn(n){if(-1==n.g)throw Hp(new dv);n.mj();try{n.i.$c(n.g),n.f=n.i.j,n.g<n.e&&--n.e,n.g=-1}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}}function Yjn(n,t){return n.b.a=e.Math.min(n.b.a,t.c),n.b.b=e.Math.min(n.b.b,t.d),n.a.a=e.Math.max(n.a.a,t.c),n.a.b=e.Math.max(n.a.b,t.d),n.c[n.c.length]=t,!0}function Jjn(n){var t,e,i;for(i=-1,e=0,t=new Wb(n);t.a<t.c.c.length;){if(BB(n0(t),243).c==(ain(),Hvt)){i=0==e?0:e-1;break}e==n.c.length-1&&(i=e),e+=1}return i}function Zjn(n){var t,i,r,c;for(c=0,t=0,r=new Wb(n.c);r.a<r.c.c.length;)Pen(i=BB(n0(r),33),n.e+c),Cen(i,n.f),c+=i.g+n.b,t=e.Math.max(t,i.f+n.b);n.d=c-n.b,n.a=t-n.b}function nEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),57)).d.c,t.d.c=t.d.d,t.d.d=i,i=t.d.b,t.d.b=t.d.a,t.d.a=i,i=t.b.a,t.b.a=t.b.b,t.b.b=i;yNn(n)}function tEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),81)).g.c,t.g.c=t.g.d,t.g.d=i,i=t.g.b,t.g.b=t.g.a,t.g.a=i,i=t.e.a,t.e.a=t.e.b,t.e.b=i;kNn(n)}function eEn(n){var t,e,i,r,c;for(c=gz(n.k),kUn(),i=0,r=(e=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;i<r;++i)if((t=e[i])!=PIt&&!c.Hc(t))return t;return null}function iEn(n,t){var e,i;return(i=BB(EN(Qon(AV(new Rq(null,new w1(t.j,16)),new bc))),11))&&(e=BB(xq(i.e,0),17))?BB(mMn(e,(hWn(),wlt)),19).a:gnn(n.b)}function rEn(n,t){var e,i,r;for(r=new Wb(t.a);r.a<r.c.c.length;)for(i=BB(n0(r),10),nk(n.d),e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)XOn(n,i,BB(U5(e),17).d.i)}function cEn(n,t){var e,i;for(y7(n.b,t),i=new Wb(n.n);i.a<i.c.c.length;)if(-1!=E7((e=BB(n0(i),211)).c,t,0)){y7(e.c,t),Zjn(e),0==e.c.c.length&&y7(n.n,e);break}fHn(n)}function aEn(n,t){var i,r,c,a,u;for(u=n.f,c=0,a=0,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),n.e,u),p9(i,t),a=e.Math.max(a,i.r),c=u+=i.d+n.c;n.d=a,n.b=c}function uEn(n){var t,e;return h3(e=wLn(n))?null:(yX(e),t=BB(emn(new oz(ZL(e.a.Kc(),new h))),79),PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)))}function oEn(n){return n.o||(n.Lj()?n.o=new aW(n,n,null):n.rk()?n.o=new rR(n,null):1==DW(B7((IPn(),Z$t),n))?n.o=new g4(n):n.o=new cR(n,null)),n.o}function sEn(n,t,e,i){var r,c,a,u,o;e.mh(t)&&(r=(a=t)?BB(i,49).xh(a):null)&&(o=e.ah(t),(u=t.t)>1||-1==u?(c=BB(o,15),r.Wb(Xdn(n,c))):r.Wb(t_n(n,BB(o,56))))}function hEn(n,t,e,i){YE();var r=PWn;function c(){for(var n=0;n<r.length;n++)r[n]()}if(n)try{HNt(c)()}catch(a){n(t,a)}else HNt(c)()}function fEn(n){var t,e,i,r,c;for(i=new usn(new Pb(n.b).a);i.b;)t=BB((e=ten(i)).cd(),10),c=BB(BB(e.dd(),46).a,10),r=BB(BB(e.dd(),46).b,8),UR(kO(t.n),UR(B$(c.n),r))}function lEn(n){switch(BB(mMn(n.b,(HXn(),egt)),375).g){case 1:JT($V(wnn(new Rq(null,new w1(n.d,16)),new _r),new Fr),new Br);break;case 2:vRn(n);break;case 0:CCn(n)}}function bEn(n,t,e){OTn(e,"Straight Line Edge Routing",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),mHn(n,BB(ZAn(t,(wD(),Vkt)),33)),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function wEn(){wEn=O,ZMt=new RC("V_TOP",0),JMt=new RC("V_CENTER",1),YMt=new RC("V_BOTTOM",2),VMt=new RC("H_LEFT",3),WMt=new RC("H_CENTER",4),QMt=new RC("H_RIGHT",5)}function dEn(n){var t;return 0!=(64&n.Db)?Cwn(n):((t=new fN(Cwn(n))).a+=" (abstract: ",yE(t,0!=(256&n.Bb)),t.a+=", interface: ",yE(t,0!=(512&n.Bb)),t.a+=")",t.a)}function gEn(n,t,e,i){var r,c,a;return mA(n.e)&&(a=LY(n,1,r=t.ak(),t.dd(),c=e.dd(),r.$j()?pBn(n,r,c,cL(r,99)&&0!=(BB(r,18).Bb&BQn)):-1,!0),i?i.Ei(a):i=a),i}function pEn(n){var t;null==n.c&&(t=GI(n.b)===GI(Ynt)?null:n.b,n.d=null==t?zWn:ez(t)?jN(EQ(t)):XI(t)?qVn:nE(tsn(t)),n.a=n.a+": "+(ez(t)?CR(EQ(t)):t+""),n.c="("+n.d+") "+n.a)}function vEn(n,t){this.e=n,QI(e0(t,-4294967296),0)?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t)])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t),dG(kz(t,32))]))}function mEn(){function n(){try{return(new Map).entries().next().done}catch(n){return!1}}return typeof Map===xWn&&Map.prototype.entries&&n()?Map:bUn()}function yEn(n,t){var e,i,r;for(r=new M2(n.e,0),e=0;r.b<r.d.gc();){if((i=Gy((Px(r.b<r.d.gc()),MD(r.d.Xb(r.c=r.b++))))-t)>D3n)return e;i>-1e-6&&++e}return e}function kEn(n,t){var e;t!=n.b?(e=null,n.b&&(e=oJ(n.b,n,-4,e)),t&&(e=Npn(t,n,-4,e)),(e=Zhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function jEn(n,t){var e;t!=n.f?(e=null,n.f&&(e=oJ(n.f,n,-1,e)),t&&(e=Npn(t,n,-1,e)),(e=nfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,t,t))}function EEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function TEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function MEn(n,t,e){var i,r;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?Tz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function SEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),OV(new Bg(n).a,i)}function PEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),IV(new $g(n).a,i)}function CEn(n){if(null!=n&&n.length>0&&33==fV(n,n.length-1))try{return null==YPn(fx(n,0,n.length-1)).e}catch(t){if(!cL(t=lun(t),32))throw Hp(t)}return!1}function IEn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,3,i,null,c,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,1,i,i.zj(),c,-1,!0),e?e.Ei(r):e=r,e}function OEn(){var n,t,e;for(t=0,n=0;n<"X".length;n++){if(0==(e=QOn((b1(n,"X".length),"X".charCodeAt(n)))))throw Hp(new ak("Unknown Option: "+"X".substr(n)));t|=e}return t}function AEn(n,t,e){var i,r;switch(i=Wln(vW(t)),CZ(r=new CSn,t),e.g){case 1:qCn(r,Tln(hwn(i)));break;case 2:qCn(r,hwn(i))}return hon(r,(HXn(),tpt),MD(mMn(n,tpt))),r}function $En(n){var t,e;return t=BB(U5(new oz(ZL(fbn(n.a).a.Kc(),new h))),17),e=BB(U5(new oz(ZL(lbn(n.a).a.Kc(),new h))),17),qy(TD(mMn(t,(hWn(),Clt))))||qy(TD(mMn(e,Clt)))}function LEn(){LEn=O,Mst=new yP("ONE_SIDE",0),Pst=new yP("TWO_SIDES_CORNER",1),Cst=new yP("TWO_SIDES_OPPOSING",2),Sst=new yP("THREE_SIDES",3),Tst=new yP("FOUR_SIDES",4)}function NEn(n,t,e,i,r){var c,a;c=BB(P4(AV(t.Oc(),new Zr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),a=BB(gan(n.b,e,i),15),0==r?a.Wc(0,c):a.Gc(c)}function xEn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(i),10)).a.Kc(),new h));dAn(e);)r=BB(U5(e),17).c.i.p,n.n[r]=n.n[r]-1}function DEn(n,t){var e,i,r,c;for(r=new Wb(t.d);r.a<r.c.c.length;)for(i=BB(n0(r),101),c=BB(RX(n.c,i),112).o,e=new QT(i.b);e.a<e.c.a.length;)g9(i,BB(u4(e),61),c)}function REn(n){var t;for(t=new Wb(n.e.b);t.a<t.c.c.length;)hzn(n,BB(n0(t),29));JT(AV(wnn(wnn(new Rq(null,new w1(n.e.b,16)),new Xc),new Zc),new na),new hg(n))}function KEn(n,t){return!!t&&!n.Di(t)&&(n.i?n.i.Ei(t):cL(t,143)?(n.i=BB(t,143),!0):(n.i=new po,n.i.Ei(t)))}function _En(n){if(n=FBn(n,!0),mK(a5n,n)||mK("1",n))return hN(),vtt;if(mK(u5n,n)||mK("0",n))return hN(),ptt;throw Hp(new ik("Invalid boolean value: '"+n+"'"))}function FEn(n,t,e){var i,r,c;for(r=n.vc().Kc();r.Ob();)if(c=(i=BB(r.Pb(),42)).cd(),GI(t)===GI(c)||null!=t&&Nfn(t,c))return e&&(i=new PS(i.cd(),i.dd()),r.Qb()),i;return null}function BEn(n){var t,e,i;qD(),n.B.Hc((n_n(),qIt))&&(i=n.f.i,t=new gY(n.a.c),(e=new bm).b=t.c-i.c,e.d=t.d-i.d,e.c=i.c+i.b-(t.c+t.b),e.a=i.d+i.a-(t.d+t.a),n.e.Ff(e))}function HEn(n,t,i,r){var c,a,u;for(u=e.Math.min(i,WFn(BB(n.b,65),t,i,r)),a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),221))!=t&&(u=e.Math.min(u,HEn(c,t,u,r)));return u}function qEn(n){var t,e,i;for(i=x8(Out,sVn,193,n.b.c.length,0,2),e=new M2(n.b,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),29),i[e.b-1]=n2(t.a);return i}function GEn(n,t,e,i,r){var c,a,u,o;for(a=nj(Zk(H_(tvn(e)),i),akn(n,e,r)),o=DSn(n,e).Kc();o.Ob();)t[(u=BB(o.Pb(),11)).p]&&(c=t[u.p].i,WB(a.d,new xG(c,kln(a,c))));Pwn(a)}function zEn(n,t){this.f=new xp,this.b=new xp,this.j=new xp,this.a=n,this.c=t,this.c>0&&_yn(this,this.c-1,(kUn(),oIt)),this.c<this.a.length-1&&_yn(this,this.c+1,(kUn(),CIt))}function UEn(n){n.length>0&&n[0].length>0&&(this.c=qy(TD(mMn(vW(n[0][0]),(hWn(),alt))))),this.a=x8(Pmt,sVn,2018,n.length,0,2),this.b=x8(Lmt,sVn,2019,n.length,0,2),this.d=new Thn}function XEn(n){return 0!=n.c.length&&((l1(0,n.c.length),BB(n.c[0],17)).c.i.k==(uSn(),Put)||o5($V(new Rq(null,new w1(n,16)),new Kc),new _c))}function WEn(n,t,e){return OTn(e,"Tree layout",1),h2(n.b),CU(n.b,(zyn(),Ryt),Ryt),CU(n.b,Kyt,Kyt),CU(n.b,_yt,_yt),CU(n.b,Fyt,Fyt),n.a=$qn(n.b,t),lxn(n,t,mcn(e,1)),HSn(e),t}function VEn(n,t){var i,r,c,a,u,o;for(u=wDn(t),c=t.f,o=t.g,a=e.Math.sqrt(c*c+o*o),r=0,i=new Wb(u);i.a<i.c.c.length;)r+=VEn(n,BB(n0(i),33));return e.Math.max(r,a)}function QEn(){QEn=O,YCt=new UC(hJn,0),QCt=new UC("FREE",1),VCt=new UC("FIXED_SIDE",2),UCt=new UC("FIXED_ORDER",3),WCt=new UC("FIXED_RATIO",4),XCt=new UC("FIXED_POS",5)}function YEn(n,t){var e,i,r;if(e=t.Hh(n.a))for(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),T7n)),i=1;i<(IPn(),nLt).length;++i)if(mK(nLt[i],r))return i;return 0}function JEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function ZEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function nTn(n){var t,e,i;for(i=new $an(FWn,"{","}"),e=n.vc().Kc();e.Ob();)b6(i,W3(n,(t=BB(e.Pb(),42)).cd())+"="+W3(n,t.dd()));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function tTn(n){for(var t,e,i,r;!Wy(n.o);)e=BB(dU(n.o),46),i=BB(e.a,121),r=Nbn(t=BB(e.b,213),i),t.e==i?(RN(r.g,t),i.e=r.e+t.a):(RN(r.b,t),i.e=r.e-t.a),WB(n.e.a,i)}function eTn(n,t){var e,i,r;for(e=null,r=BB(t.Kb(n),20).Kc();r.Ob();)if(i=BB(r.Pb(),17),e){if((i.c.i==n?i.d.i:i.c.i)!=e)return!1}else e=i.c.i==n?i.d.i:i.c.i;return!0}function iTn(n,t){var e,i,r;for(i=new Wb(QLn(n,!1,t));i.a<i.c.c.length;)0==(e=BB(n0(i),129)).d?(WZ(e,null),VZ(e,null)):(r=e.a,WZ(e,e.b),VZ(e,r))}function rTn(n){var t,e;return Jcn(t=new B2,Cyt),(e=BB(mMn(n,(hWn(),Zft)),21)).Hc((bDn(),vft))&&Jcn(t,$yt),e.Hc(sft)&&Jcn(t,Iyt),e.Hc(gft)&&Jcn(t,Ayt),e.Hc(fft)&&Jcn(t,Oyt),t}function cTn(n){var t,e,i,r;for(Sqn(n),e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)r=(i=(t=BB(U5(e),17)).c.i==n)?t.d:t.c,i?MZ(t,null):SZ(t,null),hon(t,(hWn(),mlt),r),uAn(n,r.i)}function aTn(n,t,e,i){var r,c;switch(r=e[(c=t.i).g][n.d[c.g]],c.g){case 1:r-=i+t.j.b,t.g.b=r;break;case 3:r+=i,t.g.b=r;break;case 4:r-=i+t.j.a,t.g.a=r;break;case 2:r+=i,t.g.a=r}}function uTn(n){var t,e;for(e=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));e.e!=e.i.gc();)if(!dAn(new oz(ZL(wLn(t=BB(kpn(e),33)).a.Kc(),new h))))return t;return null}function oTn(){var n;return WOt?BB($$n((WM(),zAt),y6n),2016):(n=BB(cL(SJ((WM(),zAt),y6n),555)?SJ(zAt,y6n):new sAn,555),WOt=!0,_Gn(n),jWn(n),Tyn(n),mZ(zAt,y6n,n),n)}function sTn(n,t,e){var i,r;if(0==n.j)return e;if(r=BB(_en(n,t,e),72),!(i=e.ak()).Ij()||!n.a.rl(i))throw Hp(new dy("Invalid entry feature '"+i.Hj().zb+"."+i.ne()+"'"));return r}function hTn(n,t){var e,i,r,c,a,u,o;for(u=0,o=(a=n.a).length;u<o;++u)for(r=0,c=(i=a[u]).length;r<c;++r)if(e=i[r],GI(t)===GI(e)||null!=t&&Nfn(t,e))return!0;return!1}function fTn(n){var t,e,i;return Vhn(n,0)>=0?(e=Ojn(n,AQn),i=ldn(n,AQn)):(e=Ojn(t=jz(n,1),5e8),i=rbn(yz(i=ldn(t,5e8),1),e0(n,1))),i0(yz(i,32),e0(e,UQn))}function lTn(n,t,e){var i;switch(Px(0!=t.b),i=BB(Atn(t,t.a.a),8),e.g){case 0:i.b=0;break;case 2:i.b=n.f;break;case 3:i.a=0;break;default:i.a=n.g}return nX(spn(t,0),i),t}function bTn(n,t,e,i){var r,c,a,u,o;switch(o=n.b,u=zgn(a=(c=t.d).j,o.d[a.g],e),r=UR(B$(c.n),c.a),c.j.g){case 1:case 3:u.a+=r.a;break;case 2:case 4:u.b+=r.b}r5(i,u,i.c.b,i.c)}function wTn(n,t,e){var i,r,c,a;for(a=E7(n.e,t,0),(c=new rm).b=e,i=new M2(n.e,a);i.b<i.d.gc();)Px(i.b<i.d.gc()),(r=BB(i.d.Xb(i.c=i.b++),10)).p=e,WB(c.e,r),fW(i);return c}function dTn(n,t,e,i){var r,c,a,u,o;for(r=null,c=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).i+a.g,n<a.j+a.f+i&&(r?e.i-o<e.i-c&&(r=a):r=a,c=r.i+r.g);return r?c+i:0}function gTn(n,t,e,i){var r,c,a,u,o;for(c=null,r=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).j+a.f,n<a.i+a.g+i&&(c?e.j-o<e.j-r&&(c=a):c=a,r=c.j+c.f);return c?r+i:0}function pTn(n){var t,e,i;for(t=!1,i=n.b.c.length,e=0;e<i;e++)Yon(BB(xq(n.b,e),434))?!t&&e+1<i&&Yon(BB(xq(n.b,e+1),434))&&(t=!0,BB(xq(n.b,e),434).a=!0):t=!1}function vTn(n,t,e,i,r){var c,a;for(c=0,a=0;a<r;a++)c=rbn(c,ibn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}function mTn(n,t){var e,i;for($On(),ODn(),i=Jtt,e=n;t>1;t>>=1)0!=(1&t)&&(i=Nnn(i,e)),e=1==e.d?Nnn(e,e):new Cgn(I_n(e.a,e.d,x8(ANt,hQn,25,e.d<<1,15,1)));return i=Nnn(i,e)}function yTn(){var n,t,e,i;for(yTn=O,Oet=x8(xNt,qQn,25,25,15,1),Aet=x8(xNt,qQn,25,33,15,1),i=152587890625e-16,t=32;t>=0;t--)Aet[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)Oet[n]=e,e*=.5}function kTn(n){var t,e;if(qy(TD(ZAn(n,(HXn(),wgt)))))for(e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)if(QIn(t=BB(U5(e),79))&&qy(TD(ZAn(t,dgt))))return!0;return!1}function jTn(n,t){var e,i,r;TU(n.f,t)&&(t.b=n,i=t.c,-1!=E7(n.j,i,0)||WB(n.j,i),r=t.d,-1!=E7(n.j,r,0)||WB(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new epn(n)),van(n.i,e)))}function ETn(n){var t,e,i,r;return(e=(t=n.c.d).j)==(r=(i=n.d.d).j)?t.p<i.p?0:1:Mln(e)==r?0:Eln(e)==r?1:SN(n.b.b,Mln(e))?0:1}function TTn(){TTn=O,tvt=new RP(j3n,0),Zpt=new RP("LONGEST_PATH",1),Ypt=new RP("COFFMAN_GRAHAM",2),Jpt=new RP(B1n,3),evt=new RP("STRETCH_WIDTH",4),nvt=new RP("MIN_WIDTH",5)}function MTn(n){var t;this.d=new xp,this.c=n.c,this.e=n.d,this.b=n.b,this.f=new sG(n.e),this.a=n.a,n.f?this.g=n.f:this.g=new YK(t=BB(Vj(aAt),9),BB(SR(t,t.length),9),0)}function STn(n,t){var e,i,r,c;!(r=D2(i=n,"layoutOptions"))&&(r=D2(i,M6n)),r&&(e=null,(c=r)&&(e=new TT(c,jrn(c,x8(Qtt,sVn,2,0,6,1)))),e&&e5(e,new wI(c,t)))}function PTn(n){if(cL(n,239))return BB(n,33);if(cL(n,186))return WJ(BB(n,118));throw Hp(n?new tk("Only support nodes and ports."):new Hy(e8n))}function CTn(n,t,e,i){return t>=0&&mK(n.substr(t,"GMT".length),"GMT")||t>=0&&mK(n.substr(t,"UTC".length),"UTC")?(e[0]=t+3,y_n(n,e,i)):y_n(n,e,i)}function ITn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)(r=(e=BB(n0(i),70)).n).a=c,n.i==(kUn(),sIt)?r.b=a+n.j.b-e.o.b:r.b=a,UR(r,t),c+=e.o.a+n.e}function OTn(n,t,e){if(n.b)throw Hp(new Fy("The task is already done."));return null==n.p&&(n.p=t,n.r=e,n.k&&(n.o=($T(),cbn(fan(Date.now()),VVn))),!0)}function ATn(n){var t;return t=new py,null!=n.tg()&&AH(t,q6n,n.tg()),null!=n.ne()&&AH(t,t8n,n.ne()),null!=n.sg()&&AH(t,"description",n.sg()),t}function $Tn(n,t,e){var i,r,c;return c=n.q,n.q=t,0!=(4&n.Db)&&0==(1&n.Db)&&(r=new nU(n,1,9,c,t),e?e.Ei(r):e=r),t?(i=t.c)!=n.r&&(e=n.nk(i,e)):n.r&&(e=n.nk(null,e)),e}function LTn(n,t,e){var i,r;for(e=Npn(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function NTn(n,t,e){var i,r;for(e=oJ(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function xTn(n,t,e,i){var r,c,a;if(0==i)aHn(t,0,n,e,n.length-e);else for(a=32-i,n[n.length-1]=0,c=n.length-1;c>e;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<<i;for(r=0;r<e;r++)n[r]=0}function DTn(n){var t,i,r,c,a;for(t=0,i=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),t=e.Math.max(t,r.d.b),i=e.Math.max(i,r.d.c);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.b=t,r.d.c=i}function RTn(n){var t,i,r,c,a;for(i=0,t=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),i=e.Math.max(i,r.d.d),t=e.Math.max(t,r.d.a);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.d=i,r.d.a=t}function KTn(n,t){var e,i,r,c;for(c=new Np,r=0,i=t.Kc();i.Ob();){for(e=iln(BB(i.Pb(),19).a+r);e.a<n.f&&!tG(n,e.a);)e=iln(e.a+1),++r;if(e.a>=n.f)break;c.c[c.c.length]=e}return c}function _Tn(n){var t,e,i,r;for(t=null,r=new Wb(n.wf());r.a<r.c.c.length;)e=new UV((i=BB(n0(r),181)).qf().a,i.qf().b,i.rf().a,i.rf().b),t?CPn(t,e):t=e;return!t&&(t=new bA),t}function FTn(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),Ywn(n.n,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Qj(n,fgn(n),e-bX(n.zh()),t,i)}function BTn(n,t,e){var i,r,c,a,u;for(i=e.gc(),n.qi(n.i+i),(u=n.i-t)>0&&aHn(n.g,t,n.g,t+i,u),a=e.Kc(),n.i+=i,r=0;r<i;++r)c=a.Pb(),jL(n,t,n.oi(t,c)),n.bi(t,c),n.ci(),++t;return 0!=i}function HTn(n,t,e){var i;return t!=n.q?(n.q&&(e=oJ(n.q,n,-10,e)),t&&(e=Npn(t,n,-10,e)),e=$Tn(n,t,e)):0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,9,t,t),e?e.Ei(i):e=i),e}function qTn(n,t,e,i){return C_(0==(e&hVn),"flatMap does not support SUBSIZED characteristic"),C_(0==(4&e),"flatMap does not support SORTED characteristic"),yX(n),yX(t),new q2(n,e,i,t)}function GTn(n,t){SU(t,"Cannot suppress a null exception."),vH(t!=n,"Exception can not suppress itself."),n.i||(null==n.k?n.k=Pun(Gk(Jnt,1),sVn,78,0,[t]):n.k[n.k.length]=t)}function zTn(n,t,e,i){var r,c,a,u,o,s;for(a=e.length,c=0,r=-1,s=atn(n.substr(t),(c_(),Tet)),u=0;u<a;++u)(o=e[u].length)>c&&sU(s,atn(e[u],Tet))&&(r=u,c=o);return r>=0&&(i[0]=t+c),r}function UTn(n,t){var e;if(0!=(e=YO(n.b.Hf(),t.b.Hf())))return e;switch(n.b.Hf().g){case 1:case 2:return E$(n.b.sf(),t.b.sf());case 3:case 4:return E$(t.b.sf(),n.b.sf())}return 0}function XTn(n){var t,e,i;for(i=n.e.c.length,n.a=kq(ANt,[sVn,hQn],[48,25],15,[i,i],2),e=new Wb(n.c);e.a<e.c.c.length;)t=BB(n0(e),282),n.a[t.c.b][t.d.b]+=BB(mMn(t,(fRn(),Zct)),19).a}function WTn(n,t,e){OTn(e,"Grow Tree",1),n.b=t.f,qy(TD(mMn(t,(Xcn(),Qrt))))?(n.c=new it,QZ(n,null)):n.c=new it,n.a=!1,FNn(n,t.f),hon(t,Yrt,(hN(),!!n.a)),HSn(e)}function VTn(n,t){var e,i,r,c,a;if(null==n)return null;for(a=x8(ONt,WVn,25,2*t,15,1),i=0,r=0;i<t;++i)e=n[i]>>4&15,c=15&n[i],a[r++]=OOt[e],a[r++]=OOt[c];return Bdn(a,0,a.length)}function QTn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,4,i,c,null,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,i.Kj()?2:1,i,c,i.zj(),-1,!0),e?e.Ei(r):e=r,e}function YTn(n){var t,e;return n>=BQn?(t=HQn+(n-BQn>>10&1023)&QVn,e=56320+(n-BQn&1023)&QVn,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&QVn)}function JTn(n,t){var e,i,r,c;return qD(),(r=BB(BB(h6(n.r,t),21),84)).gc()>=2&&(i=BB(r.Kc().Pb(),111),e=n.u.Hc((lIn(),tIt)),c=n.u.Hc(cIt),!i.a&&!e&&(2==r.gc()||c))}function ZTn(n,t,e,i,r){var c,a,u;for(c=eDn(n,t,e,i,r),u=!1;!c;)E$n(n,r,!0),u=!0,c=eDn(n,t,e,i,r);u&&E$n(n,r,!1),0!=(a=Dun(r)).c.length&&(n.d&&n.d.lg(a),ZTn(n,r,e,i,a))}function nMn(){nMn=O,aCt=new BC(QZn,0),rCt=new BC("DIRECTED",1),uCt=new BC("UNDIRECTED",2),eCt=new BC("ASSOCIATION",3),cCt=new BC("GENERALIZATION",4),iCt=new BC("DEPENDENCY",5)}function tMn(n,t){var e;if(!WJ(n))throw Hp(new Fy(F5n));switch(e=WJ(n),t.g){case 1:return-(n.j+n.f);case 2:return n.i-e.g;case 3:return n.j-e.f;case 4:return-(n.i+n.g)}return 0}function eMn(n,t){var e,i;for(kW(t),i=n.b.c.length,WB(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.ue(xq(n.b,i),t)<=0)return c5(n.b,e,t),!0;c5(n.b,e,xq(n.b,i))}return c5(n.b,i,t),!0}function iMn(n,t,i,r){var c,a;if(c=0,i)c=mhn(n.a[i.g][t.g],r);else for(a=0;a<nrt;a++)c=e.Math.max(c,mhn(n.a[a][t.g],r));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function rMn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(kUn(),oIt)&&i.i!=(kUn(),CIt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function cMn(n,t,e,i){var r;if(r=!1,XI(i)&&(r=!0,AH(t,e,SD(i))),r||zI(i)&&(r=!0,cMn(n,t,e,i)),r||cL(i,236)&&(r=!0,qQ(t,e,BB(i,236))),!r)throw Hp(new Ly(H6n))}function aMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(IPn(),Y$t).length;++i)if(mK(Y$t[i],r))return i;return 0}function uMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(IPn(),J$t).length;++i)if(mK(J$t[i],r))return i;return 0}function oMn(n,t){var e,i,r,c;if(kW(t),(c=n.a.gc())<t.gc())for(e=n.a.ec().Kc();e.Ob();)i=e.Pb(),t.Hc(i)&&e.Qb();else for(r=t.Kc();r.Ob();)i=r.Pb(),n.a.Bc(i);return c!=n.a.gc()}function sMn(n){var t,e;switch(e=B$(Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))),t=n.i.d,n.j.g){case 1:e.b-=t.d;break;case 2:e.a+=t.c;break;case 3:e.b+=t.a;break;case 4:e.a-=t.b}return e}function hMn(n){var t;for(Irn(),t=BB(U5(new oz(ZL(fbn(n).a.Kc(),new h))),17).c.i;t.k==(uSn(),Put);)hon(t,(hWn(),olt),(hN(),!0)),t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i}function fMn(n,t,e,i){var r,c,a;for(a=Lfn(t,i).Kc();a.Ob();)r=BB(a.Pb(),11),n.d[r.p]=n.d[r.p]+n.c[e.p];for(c=Lfn(e,i).Kc();c.Ob();)r=BB(c.Pb(),11),n.d[r.p]=n.d[r.p]-n.c[t.p]}function lMn(n,t,e){var i,r;for(r=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));r.e!=r.i.gc();)SA(i=BB(kpn(r),33),i.i+t,i.j+e);e5((!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b),new tI(t,e))}function bMn(n,t,e,i){var r,c;for(r=null==(c=t).d||n.a.ue(e.d,c.d)>0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.ue(e.d,c.d)>0?1:0;c.a[r]=i,i.b=e.b,i.a[0]=e.a[0],i.a[1]=e.a[1],e.a[0]=null,e.a[1]=null}function wMn(n){return lIn(),!(Can(OJ(EG(eIt,Pun(Gk(IIt,1),$Vn,273,0,[rIt])),n))>1||Can(OJ(EG(tIt,Pun(Gk(IIt,1),$Vn,273,0,[nIt,cIt])),n))>1)}function dMn(n,t){cL(SJ((WM(),zAt),n),498)?mZ(zAt,n,new OI(this,t)):mZ(zAt,n,this),iSn(this,t),t==(iE(),n$t)?(this.wb=BB(this,1939),BB(t,1941)):this.wb=(QX(),t$t)}function gMn(n){var t,e;if(null==n)return null;for(t=null,e=0;e<IOt.length;++e)try{return BM(IOt[e],n)}catch(i){if(!cL(i=lun(i),32))throw Hp(i);t=i}throw Hp(new L7(t))}function pMn(){pMn=O,pet=Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),vet=Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function vMn(n){var t,e,i;(t=mK(typeof t,gYn)?null:new ln)&&(lM(),tW(e=(i=900)>=VVn?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&xNn(t,e,n.b,"Exception: ",!0))}function mMn(n,t){var e,i;return!n.q&&(n.q=new xp),null!=(i=RX(n.q,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e))),e)}function yMn(){yMn=O,Rat=new VS("P1_CYCLE_BREAKING",0),Kat=new VS("P2_LAYERING",1),_at=new VS("P3_NODE_ORDERING",2),Fat=new VS("P4_NODE_PLACEMENT",3),Bat=new VS("P5_EDGE_ROUTING",4)}function kMn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),y7(n.b.b,r.b),y7(n.b.a,BB(r.b,81).d)}function jMn(n,t){var e;if(Dnn(),n.c==t.c){if(n.b==t.b||hcn(n.b,t.b)){if(e=ZO(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return E$(n.b.g,t.b.g)}return Pln(n.c,t.c)}function EMn(n,t){var e;OTn(t,"Hierarchical port position processing",1),(e=n.b).c.length>0&&i_n((l1(0,e.c.length),BB(e.c[0],29)),n),e.c.length>1&&i_n(BB(xq(e,e.c.length-1),29),n),HSn(t)}function TMn(n,t){var e,i;if(NMn(n,t))return!0;for(i=new Wb(t);i.a<i.c.c.length;){if(_Dn(n,e=BB(n0(i),33),uEn(e)))return!0;if($hn(n,e)-n.g<=n.a)return!0}return!1}function MMn(){MMn=O,bRn(),kTt=RTt,vTt=LTt,pTt=ATt,dTt=PTt,gTt=ITt,wTt=new WA(8),bTt=new XA((sWn(),XSt),wTt),mTt=new XA(LPt,8),yTt=xTt,hTt=jTt,fTt=TTt,lTt=new XA(lSt,(hN(),!1))}function SMn(){SMn=O,zMt=new WA(15),GMt=new XA((sWn(),XSt),zMt),XMt=new XA(LPt,15),UMt=new XA(pPt,iln(0)),_Mt=jSt,BMt=KSt,qMt=qSt,DMt=new XA(cSt,f5n),FMt=CSt,HMt=BSt,RMt=uSt,KMt=hSt}function PMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function CMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function IMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function OMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function AMn(n,t,e){var i,r,c;if(++n.j,t>=(r=n.Vi())||t<0)throw Hp(new Ay(u8n+t+o8n+r));if(e>=r||e<0)throw Hp(new Ay(s8n+e+o8n+r));return t!=e?(c=n.Ti(e),n.Hi(t,c),i=c):i=n.Oi(e),i}function $Mn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Ug();e;e=e.Ug()){if(++t>GQn)return $Mn(e);if(i=e,e==n)throw Hp(new Fy("There is a cycle in the containment hierarchy of "+n))}return i}function LMn(n){var t,e,i;for(i=new $an(FWn,"[","]"),e=n.Kc();e.Ob();)b6(i,GI(t=e.Pb())===GI(n)?"(this Collection)":null==t?zWn:Bbn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function NMn(n,t){var e,i;if(i=!1,t.gc()<2)return!1;for(e=0;e<t.gc();e++)e<t.gc()-1?i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(e+1),33)):i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(0),33));return i}function xMn(n,t){var e;t!=n.a?(e=null,n.a&&(e=BB(n.a,49).ih(n,4,GOt,e)),t&&(e=BB(t,49).gh(n,4,GOt,e)),(e=Jhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,t,t))}function DMn(n,t){var e;t!=n.e?(n.e&&_6(xW(n.e),n),t&&(!t.b&&(t.b=new Tp(new xm)),YR(t.b,n)),(e=Qkn(n,t,null))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function RMn(n){var t,e,i;for(e=n.length,i=0;i<e&&(b1(i,n.length),n.charCodeAt(i)<=32);)++i;for(t=e;t>i&&(b1(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||t<e?n.substr(i,t-i):n}function KMn(n,t){var i;i=t.o,dA(n.f)?(n.j.a=e.Math.max(n.j.a,i.a),n.j.b+=i.b,n.d.c.length>1&&(n.j.b+=n.e)):(n.j.a+=i.a,n.j.b=e.Math.max(n.j.b,i.b),n.d.c.length>1&&(n.j.a+=n.e))}function _Mn(){_Mn=O,$st=Pun(Gk(FIt,1),YZn,61,0,[(kUn(),sIt),oIt,SIt]),Ast=Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt,CIt]),Lst=Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt,sIt]),Nst=Pun(Gk(FIt,1),YZn,61,0,[CIt,sIt,oIt])}function FMn(n,t,e,i){var r,c,a,u,o;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(o=n.b,r=c.j,u=null;r!=a.j;)u=0==t?Mln(r):Eln(r),DH(i,UR(zgn(r,o.d[r.g],e),zgn(u,o.d[u.g],e))),r=u}function BMn(n,t,e,i){var r,c,a,u,o;return u=BB((a=qyn(n.a,t,e)).a,19).a,c=BB(a.b,19).a,i&&(o=BB(mMn(t,(hWn(),Elt)),10),r=BB(mMn(e,Elt),10),o&&r&&(t4(n.b,o,r),u+=n.b.i,c+=n.b.e)),u>c}function HMn(n){var t,e,i,r,c,a,u,o;for(this.a=rvn(n),this.b=new Np,i=0,r=(e=n).length;i<r;++i)for(t=e[i],c=new Np,WB(this.b,c),u=0,o=(a=t).length;u<o;++u)WB(c,new t_(a[u].j))}function qMn(n,t,e){var i,r,c;return c=0,i=e[t],t<e.length-1&&(r=e[t+1],n.b[t]?(c=bWn(n.d,i,r),c+=ZX(n.a,i,(kUn(),oIt)),c+=ZX(n.a,r,CIt)):c=I9(n.a,i,r)),n.c[t]&&(c+=L6(n.a,i)),c}function GMn(n,t,e,i,r){var c,a,u,o;for(o=null,u=new Wb(i);u.a<u.c.c.length;)if((a=BB(n0(u),441))!=e&&-1!=E7(a.e,r,0)){o=a;break}SZ(c=W5(r),e.b),MZ(c,o.b),JIn(n.a,r,new L_(c,t,e.f))}function zMn(n){for(;0!=n.g.c&&0!=n.d.c;)FD(n.g).c>FD(n.d).c?(n.i+=n.g.c,gdn(n.d)):FD(n.d).c>FD(n.g).c?(n.e+=n.d.c,gdn(n.g)):(n.i+=qq(n.g),n.e+=qq(n.d),gdn(n.g),gdn(n.d))}function UMn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new zZ((O6(),Tyt),t,c,1),new zZ(Tyt,c,a,1),r=new Wb(e);r.a<r.c.c.length;)(i=BB(n0(r),112))!=c&&i!=t&&i!=a&&(gHn(n.a,i,t),gHn(n.a,i,a))}function XMn(n,t,i,r){n.a.d=e.Math.min(t,i),n.a.a=e.Math.max(t,r)-n.a.d,t<i?(n.b=.5*(t+i),n.g=K3n*n.b+.9*t,n.f=K3n*n.b+.9*i):(n.b=.5*(t+r),n.g=K3n*n.b+.9*r,n.f=K3n*n.b+.9*t)}function WMn(){function n(){return(new Date).getTime()}SWn={},!Array.isArray&&(Array.isArray=function(n){return"[object Array]"===Object.prototype.toString.call(n)}),!Date.now&&(Date.now=n)}function VMn(n,t){var e,i;i=BB(mMn(t,(HXn(),ept)),98),hon(t,(hWn(),ylt),i),(e=t.e)&&(JT(new Rq(null,new w1(e.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(e.b,16)),new mt),new Kw(n)))}function QMn(n){var t,i,r,c;if(gA(BB(mMn(n.b,(HXn(),Udt)),103)))return 0;for(t=0,r=new Wb(n.a);r.a<r.c.c.length;)(i=BB(n0(r),10)).k==(uSn(),Cut)&&(c=i.o.a,t=e.Math.max(t,c));return t}function YMn(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 1:hon(n,kgt,(Tbn(),Blt));break;case 2:hon(n,kgt,(Tbn(),Hlt));break;case 3:hon(n,kgt,(Tbn(),_lt));break;case 4:hon(n,kgt,(Tbn(),Flt))}}function JMn(){JMn=O,cft=new $P(QZn,0),eft=new $P(cJn,1),aft=new $P(aJn,2),rft=new $P("LEFT_RIGHT_CONSTRAINT_LOCKING",3),ift=new $P("LEFT_RIGHT_CONNECTION_LOCKING",4),tft=new $P(q1n,5)}function ZMn(n,t,i){var r,c,a,u,o,s,h;o=i.a/2,a=i.b/2,s=1,h=1,(r=e.Math.abs(t.a-n.a))>o&&(s=o/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),u=e.Math.min(s,h),n.a+=u*(t.a-n.a),n.b+=u*(t.b-n.b)}function nSn(n,t,e,i,r){var c,a;for(a=!1,c=BB(xq(e.b,0),33);hBn(n,t,c,i,r)&&(a=!0,cEn(e,c),0!=e.b.c.length);)c=BB(xq(e.b,0),33);return 0==e.b.c.length&&Tkn(e.j,e),a&&Gmn(t.q),a}function tSn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(cNn(n,i,r=BB(b3(c),8)))return!0;i=r}return!!cNn(n,i,e)}function eSn(n,t,e,i){return 0==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),BK(n.o,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Rj(n,fgn(n),e-bX(n.zh()),t,i)}function iSn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=BB(n.sb,49).ih(n,1,HOt,e)),t&&(e=BB(t,49).gh(n,1,HOt,e)),(e=jfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function rSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need an end point."));e=Ren(t,"x"),Ten(new Kg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new _g(n).a,(kW(i),i))}function cSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need a start point."));e=Ren(t,"x"),Ien(new xg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Dg(n).a,(kW(i),i))}function aSn(n,t){var e,i,r,c,a;for(i=0,c=psn(n).length;i<c;++i)vMn(t);for(a=!Qet&&n.e?Qet?null:n.d:null;a;){for(e=0,r=psn(a).length;e<r;++e)vMn(t);a=!Qet&&a.e?Qet?null:a.d:null}}function uSn(){uSn=O,Cut=new JS("NORMAL",0),Put=new JS("LONG_EDGE",1),Mut=new JS("EXTERNAL_PORT",2),Iut=new JS("NORTH_SOUTH_PORT",3),Sut=new JS("LABEL",4),Tut=new JS("BREAKING_POINT",5)}function oSn(n){var t,e,i,r;if(t=!1,Lx(n,(hWn(),zft)))for(e=BB(mMn(n,zft),83),r=new Wb(n.j);r.a<r.c.c.length;)J$n(i=BB(n0(r),11))&&(t||(iIn(vW(n)),t=!0),fpn(BB(e.xc(i),306)))}function sSn(n,t,e){var i;OTn(e,"Self-Loop routing",1),i=Vln(t),iO(mMn(t,(C6(),TMt))),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new zi),new Ui),new Xi),new Wi),new eP(n,i)),HSn(e)}function hSn(n){var t,e,i;return i=ATn(n),null!=n.e&&AH(i,n8n,n.e),!!n.k&&AH(i,"type",dx(n.k)),!WE(n.j)&&(e=new Cl,rtn(i,N6n,e),t=new cp(e),e5(n.j,t)),i}function fSn(n){var t,e,i,r;for(r=xX((lin(n.gc(),"size"),new Ik),123),i=!0,e=lz(n).Kc();e.Ob();)t=BB(e.Pb(),42),i||(r.a+=FWn),i=!1,uO(xX(uO(r,t.cd()),61),t.dd());return(r.a+="}",r).a}function lSn(n,t){var e,i,r;return(t&=63)<22?(e=n.l<<t,i=n.m<<t|n.l>>22-t,r=n.h<<t|n.m>>22-t):t<44?(e=0,i=n.l<<t-22,r=n.m<<t-22|n.l>>44-t):(e=0,i=0,r=n.l<<t-44),M$(e&SQn,i&SQn,r&PQn)}function bSn(n){if(null==ytt&&(ytt=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!ytt.test(n))throw Hp(new Mk(DQn+n+'"'));return parseFloat(n)}function wSn(n){var t,e,i,r;for(t=new Np,vU(e=x8($Nt,ZYn,25,n.a.c.length,16,1),e.length),r=new Wb(n.a);r.a<r.c.c.length;)e[(i=BB(n0(r),121)).d]||(t.c[t.c.length]=i,Ggn(n,i,e));return t}function dSn(n,t){var e,i,r,c;for(c=t.b.j,n.a=x8(ANt,hQn,25,c.c.length,15,1),r=0,i=0;i<c.c.length;i++)l1(i,c.c.length),0==(e=BB(c.c[i],11)).e.c.length&&0==e.g.c.length?r+=1:r+=3,n.a[i]=r}function gSn(){gSn=O,Dht=new IP("ALWAYS_UP",0),xht=new IP("ALWAYS_DOWN",1),Kht=new IP("DIRECTION_UP",2),Rht=new IP("DIRECTION_DOWN",3),Fht=new IP("SMART_UP",4),_ht=new IP("SMART_DOWN",5)}function pSn(n,t){if(n<0||t<0)throw Hp(new _y("k and n must be positive"));if(t>n)throw Hp(new _y("k must be smaller than n"));return 0==t||t==n?1:0==n?0:Mjn(n)/(Mjn(t)*Mjn(n-t))}function vSn(n,t){var e,i,r,c;for(e=new OA(n);null!=e.g||e.c?null==e.g||0!=e.i&&BB(e.g[e.i-1],47).Ob():tZ(e);)if(cL(c=BB(aLn(e),56),160))for(i=BB(c,160),r=0;r<t.length;r++)t[r].og(i)}function mSn(n){var t;return 0!=(64&n.Db)?Yln(n):((t=new fN(Yln(n))).a+=" (height: ",vE(t,n.f),t.a+=", width: ",vE(t,n.g),t.a+=", x: ",vE(t,n.i),t.a+=", y: ",vE(t,n.j),t.a+=")",t.a)}function ySn(n){var t,e,i,r,c,a;for(t=new v4,r=0,c=(i=n).length;r<c;++r)if(null!=Jgn(t,a=yX((e=i[r]).cd()),yX(e.dd())))throw Hp(new _y("duplicate key: "+a));this.b=(SQ(),new Xb(t))}function kSn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],b6(c,String.fromCharCode(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function jSn(){jSn=O,Knn(),Ict=new $O(oZn,Oct=Rct),iln(1),Cct=new $O(sZn,iln(300)),iln(0),Lct=new $O(hZn,iln(0)),new $p,Nct=new $O(fZn,lZn),new $p,Act=new $O(bZn,5),xct=Rct,$ct=Dct}function ESn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),WB(n.b.b,BB(r.b,81)),WB(n.b.a,BB(r.b,81).d)}function TSn(n,t){var e;if(null!=t&&!n.c.Yj().wj(t))throw e=cL(t,56)?BB(t,56).Tg().zb:nE(tsn(t)),Hp(new Ky(r6n+n.c.ne()+"'s type '"+n.c.Yj().ne()+"' does not permit a value of type '"+e+"'"))}function MSn(n,t,e){var i,r;for(r=new M2(n.b,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),GI(mMn(i=BB(r.d.Xb(r.c=r.b++),70),(hWn(),vlt)))===GI(t)&&(OPn(i.n,vW(n.c.i),e),fW(r),WB(t.b,i))}function SSn(n,t){if(t.a)switch(BB(mMn(t.b,(hWn(),ylt)),98).g){case 0:case 1:lEn(t);case 2:JT(new Rq(null,new w1(t.d,16)),new Li),oAn(n.a,t)}else JT(new Rq(null,new w1(t.d,16)),new Li)}function PSn(n){var t,i;return i=e.Math.sqrt((null==n.k&&(n.k=Wrn(n,new Ec)),Gy(n.k)/(n.b*(null==n.g&&(n.g=Xrn(n,new jc)),Gy(n.g))))),t=dG(fan(e.Math.round(i))),t=e.Math.min(t,n.f)}function CSn(){gcn(),LR.call(this),this.j=(kUn(),PIt),this.a=new Gj,new fm,this.f=(lin(2,AVn),new J6(2)),this.e=(lin(4,AVn),new J6(4)),this.g=(lin(4,AVn),new J6(4)),this.b=new hP(this.e,this.g)}function ISn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Clt))))&&(e=t.c.i,(n!=(Tbn(),_lt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Flt)}function OSn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Clt))))&&(e=t.d.i,(n!=(Tbn(),Blt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Hlt)}function ASn(n,t){var e,i,r,c,a,u,o;for(a=n.d,o=n.o,u=new UV(-a.b,-a.d,a.b+o.a+a.c,a.d+o.b+a.a),r=0,c=(i=t).length;r<c;++r)(e=i[r])&&CPn(u,e.i);a.b=-u.c,a.d=-u.d,a.c=u.b-a.b-o.a,a.a=u.a-a.d-o.b}function $Sn(){$Sn=O,iTt=new MC("CENTER_DISTANCE",0),rTt=new MC("CIRCLE_UNDERLAP",1),uTt=new MC("RECTANGLE_UNDERLAP",2),cTt=new MC("INVERTED_OVERLAP",3),aTt=new MC("MINIMUM_ROOT_DISTANCE",4)}function LSn(n){var t,e,i,r;if(KDn(),null==n)return null;for(i=n.length,t=x8(ONt,WVn,25,2*i,15,1),e=0;e<i;e++)(r=n[e])<0&&(r+=256),t[2*e]=YLt[r>>4],t[2*e+1]=YLt[15&r];return Bdn(t,0,t.length)}function NSn(n){var t;switch(nV(),n.c.length){case 0:return Bnt;case 1:return IH((t=BB(JCn(new Wb(n)),42)).cd(),t.dd());default:return new hy(BB(Qgn(n,x8(Hnt,kVn,42,n.c.length,0,1)),165))}}function xSn(n){var t,e,i,r,c;for(t=new Lp,e=new Lp,d3(t,n),d3(e,n);e.b!=e.c;)for(c=new Wb(BB(dU(e),37).a);c.a<c.c.c.length;)(r=BB(n0(c),10)).e&&(d3(t,i=r.e),d3(e,i));return t}function DSn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),xut));case 2:return KB(n.j,(gcn(),Lut));case 3:return KB(n.j,(gcn(),Rut));case 4:return KB(n.j,(gcn(),Kut));default:return SQ(),SQ(),set}}function RSn(n,t){var e,i,r;e=sH(t,n.e),i=BB(RX(n.g.f,e),19).a,r=n.a.c.length-1,0!=n.a.c.length&&BB(xq(n.a,r),287).c==i?(++BB(xq(n.a,r),287).a,++BB(xq(n.a,r),287).b):WB(n.a,new Gx(i))}function KSn(n,t,e){var i,r;return 0!=(i=SRn(n,t,e))?i:Lx(t,(hWn(),wlt))&&Lx(e,wlt)?((r=E$(BB(mMn(t,wlt),19).a,BB(mMn(e,wlt),19).a))<0?uKn(n,t,e):r>0&&uKn(n,e,t),r):IOn(n,t,e)}function _Sn(n,t,e){var i,r,c,a;if(0!=t.b){for(i=new YT,a=spn(t,0);a.b!=a.d.c;)Frn(i,xun(c=BB(b3(a),86))),(r=c.e).a=BB(mMn(c,(qqn(),gkt)),19).a,r.b=BB(mMn(c,pkt),19).a;_Sn(n,i,mcn(e,i.b/n.a|0))}}function FSn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(z1(n,n.g,t))return n.g;for(c=n.r,i=n.g,a=n.r,r=(c-i)/2+i;i+1<c;)(e=cHn(n,r,!1)).b<=r&&e.a<=t?(a=r,c=r):i=r,r=(c-i)/2+i;return a}function BSn(n,t,e){OTn(e,"Recursive Graph Layout",hDn(n,t,!0)),vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new $f])),P8(t,(sWn(),mPt))||vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new gu])),lXn(n,t,null,e),HSn(e)}function HSn(n){var t;if(null==n.p)throw Hp(new Fy("The task has not begun yet."));n.b||(n.k&&($T(),t=cbn(fan(Date.now()),VVn),n.q=1e-9*j2(ibn(t,n.o))),n.c<n.r&&qin(n,n.r-n.c),n.b=!0)}function qSn(n){var t,e,i;for(DH(i=new km,new xC(n.j,n.k)),e=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));e.e!=e.i.gc();)DH(i,new xC((t=BB(kpn(e),469)).a,t.b));return DH(i,new xC(n.b,n.c)),i}function GSn(n,t,e,i,r){var c,a,u,o;if(r)for(o=((c=new hz(r.a.length)).b-c.a)*c.c<0?(eS(),MNt):new XL(c);o.Ob();)u=x2(r,BB(o.Pb(),19).a),D_n((a=new hQ(n,t,e,i)).a,a.b,a.c,a.d,u)}function zSn(n,t){var e;if(GI(n)===GI(t))return!0;if(cL(t,21)){e=BB(t,21);try{return n.gc()==e.gc()&&n.Ic(e)}catch(i){if(cL(i=lun(i),173)||cL(i,205))return!1;throw Hp(i)}}return!1}function USn(n,t){var i;WB(n.d,t),i=t.rf(),n.c?(n.e.a=e.Math.max(n.e.a,i.a),n.e.b+=i.b,n.d.c.length>1&&(n.e.b+=n.a)):(n.e.a+=i.a,n.e.b=e.Math.max(n.e.b,i.b),n.d.c.length>1&&(n.e.a+=n.a))}function XSn(n){var t,e,i,r;switch(t=(r=n.i).b,i=r.j,e=r.g,r.a.g){case 0:e.a=(n.g.b.o.a-i.a)/2;break;case 1:e.a=t.d.n.a+t.d.a.a;break;case 2:e.a=t.d.n.a+t.d.a.a-i.a;break;case 3:e.b=t.d.n.b+t.d.a.b}}function WSn(n,t,e,i,r){if(i<t||r<e)throw Hp(new _y("The highx must be bigger then lowx and the highy must be bigger then lowy"));return n.a<t?n.a=t:n.a>i&&(n.a=i),n.b<e?n.b=e:n.b>r&&(n.b=r),n}function VSn(n){if(cL(n,149))return MNn(BB(n,149));if(cL(n,229))return Zbn(BB(n,229));if(cL(n,23))return hSn(BB(n,23));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[n])))))}function QSn(n,t,e,i,r){var c,a,u;for(c=!0,a=0;a<i;a++)c&=0==e[a];if(0==r)aHn(e,i,n,0,t),a=t;else{for(u=32-r,c&=e[a]<<u==0,a=0;a<t-1;a++)n[a]=e[a+i]>>>r|e[a+i+1]<<u;n[a]=e[a+i]>>>r,++a}return c}function YSn(n,t,e,i){var r,c;if(t.k==(uSn(),Put))for(c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if((r=BB(U5(c),17)).c.i.k==Put&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function JSn(n,t){var e,i,r,c;return t&=63,e=n.h&PQn,t<22?(c=e>>>t,r=n.m>>t|e<<22-t,i=n.l>>t|n.m<<22-t):t<44?(c=0,r=e>>>t-22,i=n.m>>t-22|n.h<<44-t):(c=0,r=0,i=e>>>t-44),M$(i&SQn,r&SQn,c&PQn)}function ZSn(n,t,e,i){var r;this.b=i,this.e=n==(oin(),Amt),r=t[e],this.d=kq($Nt,[sVn,ZYn],[177,25],16,[r.length,r.length],2),this.a=kq(ANt,[sVn,hQn],[48,25],15,[r.length,r.length],2),this.c=new zEn(t,e)}function nPn(n){var t,e,i;for(n.k=new o1((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,n.j.c.length),i=new Wb(n.j);i.a<i.c.c.length;)t=(e=BB(n0(i),113)).d.j,JIn(n.k,t,e);n.e=iNn(gz(n.k))}function tPn(n,t){var e,i,r;TU(n.d,t),e=new ka,VW(n.c,t,e),e.f=Phn(t.c),e.a=Phn(t.d),e.d=(gxn(),(r=t.c.i.k)==(uSn(),Cut)||r==Tut),e.e=(i=t.d.i.k)==Cut||i==Tut,e.b=t.c.j==(kUn(),CIt),e.c=t.d.j==oIt}function ePn(n){var t,e,i,r,c;for(c=DWn,r=DWn,i=new Wb(kbn(n));i.a<i.c.c.length;)t=(e=BB(n0(i),213)).e.e-e.d.e,e.e==n&&t<r?r=t:t<c&&(c=t);return r==DWn&&(r=-1),c==DWn&&(c=-1),new rI(iln(r),iln(c))}function iPn(n,t){var i,r,c;return c=ZJn,qpn(),r=Zrt,c=e.Math.abs(n.b),(i=e.Math.abs(t.f-n.b))<c&&(c=i,r=nct),(i=e.Math.abs(n.a))<c&&(c=i,r=tct),(i=e.Math.abs(t.g-n.a))<c&&(c=i,r=Jrt),r}function rPn(n,t){var e,i,r;for(e=t.a.o.a,r=new Sb(new s1(vW(t.a).b,t.c,t.f+1));r.b<r.d.gc();)if(Px(r.b<r.d.gc()),(i=BB(r.d.Xb(r.c=r.b++),29)).c.a>=e)return hPn(n,t,i.p),!0;return!1}function cPn(n){var t;return 0!=(64&n.Db)?mSn(n):(t=new lN(Z5n),!n.a||oO(oO((t.a+=' "',t),n.a),'"'),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function aPn(n,t,e){var i,r,c,a,u;for(u=axn(n.e.Tg(),t),r=BB(n.g,119),i=0,a=0;a<n.i;++a)if(c=r[a],u.rl(c.ak())){if(i==e)return fDn(n,a),ZM(),BB(t,66).Oj()?c:c.dd();++i}throw Hp(new Ay(e9n+e+o8n+i))}function uPn(n){var t,e,i;if(2==(t=n.c)||7==t||1==t)return wWn(),wWn(),sNt;for(i=OXn(n),e=null;2!=(t=n.c)&&7!=t&&1!=t;)e||(wWn(),wWn(),tqn(e=new r$(1),i),i=e),tqn(e,OXn(n));return i}function oPn(n,t,e){return n<0||n>e?dCn(n,e,"start index"):t<0||t>e?dCn(t,e,"end index"):$Rn("end index (%s) must not be less than start index (%s)",Pun(Gk(Ant,1),HWn,1,5,[iln(t),iln(n)]))}function sPn(n,t){var e,i,r,c;for(i=0,r=n.length;i<r;i++){c=n[i];try{c[1]?c[0].jm()&&(t=TG(t,c)):c[0].jm()}catch(a){if(!cL(a=lun(a),78))throw Hp(a);e=a,Dk(),yY(cL(e,477)?BB(e,477).ae():e)}}return t}function hPn(n,t,i){var r,c;for(i!=t.c+t.b.gc()&&wHn(t.a,ian(t,i-t.c)),c=t.a.c.p,n.a[c]=e.Math.max(n.a[c],t.a.o.a),r=BB(mMn(t.a,(hWn(),Plt)),15).Kc();r.Ob();)hon(BB(r.Pb(),70),tst,(hN(),!0))}function fPn(n,t){var i,r,c;c=qNn(t),hon(t,(hWn(),llt),c),c&&(r=DWn,AY(n.f,c)&&(r=BB(qI(AY(n.f,c)),19).a),qy(TD(mMn(i=BB(xq(t.g,0),17),Clt)))||VW(n,c,iln(e.Math.min(BB(mMn(i,wlt),19).a,r))))}function lPn(n,t,e){var i,r,c,a;for(t.p=-1,a=xwn(t,(ain(),qvt)).Kc();a.Ob();)for(r=new Wb(BB(a.Pb(),11).g);r.a<r.c.c.length;)t!=(c=(i=BB(n0(r),17)).d.i)&&(c.p<0?e.Fc(i):c.p>0&&lPn(n,c,e));t.p=0}function bPn(n){var t;this.c=new YT,this.f=n.e,this.e=n.d,this.i=n.g,this.d=n.c,this.b=n.b,this.k=n.j,this.a=n.a,n.i?this.j=n.i:this.j=new YK(t=BB(Vj(jMt),9),BB(SR(t,t.length),9),0),this.g=n.f}function wPn(n){var t,e,i,r;for(t=xX(oO(new lN("Predicates."),"and"),40),e=!0,r=new Sb(n);r.b<r.d.gc();)Px(r.b<r.d.gc()),i=r.d.Xb(r.c=r.b++),e||(t.a+=","),t.a+=""+i,e=!1;return(t.a+=")",t).a}function dPn(n,t,e){var i,r,c;if(!(e<=t+2))for(r=(e-t)/2|0,i=0;i<r;++i)l1(t+i,n.c.length),c=BB(n.c[t+i],11),c5(n,t+i,(l1(e-i-1,n.c.length),BB(n.c[e-i-1],11))),l1(e-i-1,n.c.length),n.c[e-i-1]=c}function gPn(n,t,e){var i,r,c,a,u,o,s;u=(c=n.d.p).e,o=c.r,n.g=new QK(o),i=(a=n.d.o.c.p)>0?u[a-1]:x8(Out,a1n,10,0,0,1),r=u[a],s=a<u.length-1?u[a+1]:x8(Out,a1n,10,0,0,1),t==e-1?uZ(n.g,r,s):uZ(n.g,i,r)}function pPn(n){var t;this.j=new Np,this.f=new Rv,this.b=new YK(t=BB(Vj(FIt),9),BB(SR(t,t.length),9),0),this.d=x8(ANt,hQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.g=n}function vPn(n,t){var e,i,r;if(0!=t.c.length){for(e=TMn(n,t),r=!1;!e;)E$n(n,t,!0),r=!0,e=TMn(n,t);r&&E$n(n,t,!1),i=Dun(t),n.b&&n.b.lg(i),n.a=$hn(n,(l1(0,t.c.length),BB(t.c[0],33))),vPn(n,i)}}function mPn(n,t){var e,i,r;if(i=itn(n.Tg(),t),(e=t-n.Ah())<0){if(!i)throw Hp(new _y(o6n+t+s6n));if(!i.Ij())throw Hp(new _y(r6n+i.ne()+c6n));(r=n.Yg(i))>=0?n.Bh(r):cIn(n,i)}else qfn(n,e,i)}function yPn(n){var t,e;if(e=null,t=!1,cL(n,204)&&(t=!0,e=BB(n,204).a),t||cL(n,258)&&(t=!0,e=""+BB(n,258).a),t||cL(n,483)&&(t=!0,e=""+BB(n,483).a),!t)throw Hp(new Ly(H6n));return e}function kPn(n,t){var e,i;if(n.f){for(;t.Ob();)if(cL(i=(e=BB(t.Pb(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Ub(),!0;return!1}return t.Ob()}function jPn(n,t){var e,i;if(n.f){for(;t.Sb();)if(cL(i=(e=BB(t.Ub(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Pb(),!0;return!1}return t.Sb()}function EPn(n,t,e){var i,r,c,a,u,o;for(o=axn(n.e.Tg(),t),i=0,u=n.i,r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())){if(e==i)return a;++i,u=a+1}if(e==i)return u;throw Hp(new Ay(e9n+e+o8n+i))}function TPn(n,t){var i,r,c;if(0==n.f.c.length)return null;for(c=new bA,i=new Wb(n.f);i.a<i.c.c.length;)r=BB(n0(i),70).o,c.b=e.Math.max(c.b,r.a),c.a+=r.b;return c.a+=(n.f.c.length-1)*t,c}function MPn(n,t,e){var i,r,c;for(r=new oz(ZL(hbn(e).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||!b5(i)&&i.c.i.c==i.d.i.c||(c=zLn(n,i,e,new um)).c.length>1&&(t.c[t.c.length]=c)}function SPn(n){var t,e,i;for(Frn(e=new YT,n.o),i=new om;0!=e.b;)WUn(n,t=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),508),!0)&&WB(i.a,t);for(;0!=i.a.c.length;)WUn(n,t=BB(thn(i),508),!1)}function PPn(){PPn=O,kMt=new $C(hJn,0),wMt=new $C("BOOLEAN",1),vMt=new $C("INT",2),yMt=new $C("STRING",3),dMt=new $C("DOUBLE",4),gMt=new $C("ENUM",5),pMt=new $C("ENUMSET",6),mMt=new $C("OBJECT",7)}function CPn(n,t){var i,r,c,a,u;r=e.Math.min(n.c,t.c),a=e.Math.min(n.d,t.d),(c=e.Math.max(n.c+n.b,t.c+t.b))<r&&(i=r,r=c,c=i),(u=e.Math.max(n.d+n.a,t.d+t.a))<a&&(i=a,a=u,u=i),xH(n,r,a,c-r,u-a)}function IPn(){IPn=O,J$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,d7n,g7n,p7n,v7n,m7n,n8n]),Y$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"empty",d7n,K9n,"elementOnly"]),nLt=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"preserve","replace",y7n]),Z$t=new SH}function OPn(n,t,e){var i,r,c;if(t!=e){i=t;do{UR(n,i.c),(r=i.e)&&(_x(n,(c=i.d).b,c.d),UR(n,r.n),i=vW(r))}while(r);i=e;do{XR(n,i.c),(r=i.e)&&(Bx(n,(c=i.d).b,c.d),XR(n,r.n),i=vW(r))}while(r)}}function APn(n,t,e,i){var r,c,a,u,o;if(i.f.c+i.g.c==0)for(u=0,o=(a=n.a[n.c]).length;u<o;++u)VW(i,c=a[u],new kcn(n,c,e));return(r=BB(qI(AY(i.f,t)),663)).b=0,r.c=r.f,0==r.c||Tb(BB(xq(r.a,r.b),287)),r}function $Pn(){$Pn=O,Zst=new jP("MEDIAN_LAYER",0),tht=new jP("TAIL_LAYER",1),Jst=new jP("HEAD_LAYER",2),nht=new jP("SPACE_EFFICIENT_LAYER",3),eht=new jP("WIDEST_LAYER",4),Yst=new jP("CENTER_LAYER",5)}function LPn(n){switch(n.g){case 0:case 1:case 2:return kUn(),sIt;case 3:case 4:case 5:return kUn(),SIt;case 6:case 7:case 8:return kUn(),CIt;case 9:case 10:case 11:return kUn(),oIt;default:return kUn(),PIt}}function NPn(n,t){var e;return 0!=n.c.length&&(e=tdn((l1(0,n.c.length),BB(n.c[0],17)).c.i),BZ(),e==(bvn(),fvt)||e==hvt||o5($V(new Rq(null,new w1(n,16)),new Fc),new ig(t)))}function xPn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new P6),DH(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=BB(c.Pb(),188)).b!=t&&xPn(n,r.b,i),r.c!=t&&xPn(n,r.c,i),DH(i.a,r);return i}return null}function DPn(){DPn=O,Qyt=new lC("ROOT_PROC",0),Uyt=new lC("FAN_PROC",1),Wyt=new lC("NEIGHBORS_PROC",2),Xyt=new lC("LEVEL_HEIGHT",3),Vyt=new lC("NODE_POSITION_PROC",4),zyt=new lC("DETREEIFYING_PROC",5)}function RPn(n,t){if(cL(t,239))return zA(n,BB(t,33));if(cL(t,186))return UA(n,BB(t,118));if(cL(t,439))return GA(n,BB(t,202));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function KPn(n,t,e){var i,r;if(this.f=n,w6(e,r=(i=BB(RX(n.b,t),283))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++<r;)TZ(this);else for(this.c=i?i.b:null;e-- >0;)EZ(this);this.b=t,this.a=null}function _Pn(n,t){var e,i;t.a?zNn(n,t):(!!(e=BB(kK(n.b,t.b),57))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=BB(yK(n.b,t.b),57))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),MN(n.b,t.b))}function FPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).dc())return e.n.b=0,void(e.n.c=0);e.n.b=n.C.b,e.n.c=n.C.c,n.A.Hc((mdn(),_It))&&yRn(n,t),i=Xpn(n,t),PDn(n,t)==(cpn(),BCt)&&(i+=2*n.w),e.a.a=i}function BPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).dc())return e.n.d=0,void(e.n.a=0);e.n.d=n.C.d,e.n.a=n.C.a,n.A.Hc((mdn(),_It))&&kRn(n,t),i=Wpn(n,t),PDn(n,t)==(cpn(),BCt)&&(i+=2*n.w),e.a.b=i}function HPn(n,t){var e,i,r,c;for(c=new Np,i=new Wb(t);i.a<i.c.c.length;)WB(c,new RS(e=BB(n0(i),65),!0)),WB(c,new RS(e,!1));my((r=new hY(n)).a.a),e2(c,n.b,new Jy(Pun(Gk(oit,1),HWn,679,0,[r])))}function qPn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;return u=n.a,f=n.b,o=t.a,l=t.b,s=e.a,b=e.b,new xC(((c=u*l-f*o)*(s-(h=i.a))-(a=s*(w=i.b)-b*h)*(u-o))/(r=(u-o)*(b-w)-(f-l)*(s-h)),(c*(b-w)-a*(f-l))/r)}function GPn(n,t){var e,i,r;if(!n.d[t.p]){for(n.d[t.p]=!0,n.a[t.p]=!0,i=new oz(ZL(lbn(t).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||(r=e.d.i,n.a[r.p]?WB(n.b,e):GPn(n,r));n.a[t.p]=!1}}function zPn(n,t,e){var i;switch(i=0,BB(mMn(t,(HXn(),kgt)),163).g){case 2:i=2*-e+n.a,++n.a;break;case 1:i=-e;break;case 3:i=e;break;case 4:i=2*e+n.b,++n.b}return Lx(t,(hWn(),wlt))&&(i+=BB(mMn(t,wlt),19).a),i}function UPn(n,t,e){var i,r,c;for(e.zc(t,n),WB(n.n,t),c=n.p.eg(t),t.j==n.p.fg()?Obn(n.e,c):Obn(n.j,c),rX(n),r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(r);)i=BB(U5(r),11),e._b(i)||UPn(n,i,e)}function XPn(n){var t,e;return BB(ZAn(n,(sWn(),KSt)),21).Hc((mdn(),DIt))?(e=BB(ZAn(n,qSt),21),t=new wA(BB(ZAn(n,BSt),8)),e.Hc((n_n(),GIt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t):new Gj}function WPn(n){var t,e,i;if(!n.b){for(i=new Co,e=new ax(RBn(n));e.e!=e.i.gc();)0!=((t=BB(jpn(e),18)).Bb&h6n)&&f9(i,t);chn(i),n.b=new NO((BB(Wtn(QQ((QX(),t$t).o),8),18),i.i),i.g),P5(n).b&=-9}return n.b}function VPn(n,t){var e,i,r,c,a,u;a=BB(Emn(gz(t.k),x8(FIt,YZn,61,2,0,1)),122),Zmn(n,u=t.g,e=o3(t,a[0]),i=u3(t,a[1]))<=Zmn(n,u,r=o3(t,a[1]),c=u3(t,a[0]))?(t.a=e,t.c=i):(t.a=r,t.c=c)}function QPn(n,t,e){var i,r,c;for(OTn(e,"Processor set neighbors",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&LDn(n,new bg(r),e),HSn(e)}function YPn(n){var t,e,i,r;return RHn(),t=-1==(i=GO(n,YTn(35)))?n:n.substr(0,i),e=-1==i?null:n.substr(i+1),(r=V3(EAt,t))?null!=e&&(r=Csn(r,(kW(e),e))):(r=WXn(t),a5(EAt,t,r),null!=e&&(r=Csn(r,e))),r}function JPn(n){var t,e,i,r,c,a,u;if(SQ(),cL(n,54))for(c=0,r=n.gc()-1;c<r;++c,--r)t=n.Xb(c),n._c(c,n.Xb(r)),n._c(r,t);else for(e=n.Yc(),a=n.Zc(n.gc());e.Tb()<a.Vb();)i=e.Pb(),u=a.Ub(),e.Wb(u),a.Wb(i)}function ZPn(n,t){var e,i,r;OTn(t,"End label pre-processing",1),e=Gy(MD(mMn(n,(HXn(),jpt)))),i=Gy(MD(mMn(n,Spt))),r=gA(BB(mMn(n,Udt),103)),JT(wnn(new Rq(null,new w1(n.b,16)),new he),new D_(e,i,r)),HSn(t)}function nCn(n,t){var e,i,r,c,a,u;for(u=0,d3(c=new Lp,t);c.b!=c.c;)for(u+=syn((a=BB(dU(c),214)).d,a.e),r=new Wb(a.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(u+=nCn(n,e));return u}function tCn(n,t,i){var r,c;_an(this),t==(dJ(),Lyt)?TU(this.r,n.c):TU(this.w,n.c),TU(i==Lyt?this.r:this.w,n.d),tPn(this,n),XMn(this,r=Phn(n.c),c=Phn(n.d),c),this.o=(gxn(),e.Math.abs(r-c)<.2)}function eCn(n,t,e){var i,r,c,a,u;if(null!=(a=BB(yan(n.a,8),1936)))for(r=0,c=a.length;r<c;++r)null.jm();i=e,0==(1&n.a.Db)&&(u=new uW(n,e,t),i.ui(u)),cL(i,672)?BB(i,672).wi(n.a):i.ti()==n.a&&i.vi(null)}function iCn(){var n;return ZLt?BB($$n((WM(),zAt),S7n),1945):(sUn(),n=BB(cL(SJ((WM(),zAt),S7n),586)?SJ(zAt,S7n):new zW,586),ZLt=!0,gXn(n),pWn(n),VW((VM(),ZAt),n,new Ks),Tyn(n),mZ(zAt,S7n,n),n)}function rCn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function cCn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function aCn(n){var t,e,i;for(_$n(n),i=new Np,e=new Wb(n.a.a.b);e.a<e.c.c.length;)WB(i,new fP(t=BB(n0(e),81),!0)),WB(i,new fP(t,!1));nmn(n.c),i2(i,n.b,new Jy(Pun(Gk(Jat,1),HWn,369,0,[n.c]))),vAn(n)}function uCn(n){var t,e,i,r;for(e=new xp,r=new Wb(n.d);r.a<r.c.c.length;)i=BB(n0(r),181),t=BB(i.We((hWn(),Uft)),17),AY(e.f,t)||VW(e,t,new TQ(t)),WB(BB(qI(AY(e.f,t)),456).b,i);return new t_(new Ob(e))}function oCn(n,t){var e,i,r,c,a;for(i=new d1(n.j.c.length),e=null,c=new Wb(n.j);c.a<c.c.c.length;)(r=BB(n0(c),11)).j!=e&&(i.b==i.c||F$n(i,e,t),o4(i),e=r.j),(a=mAn(r))&&w3(i,a);i.b==i.c||F$n(i,e,t)}function sCn(n,t){var e,i;for(i=new M2(n.b,0);i.b<i.d.gc();)Px(i.b<i.d.gc()),e=BB(i.d.Xb(i.c=i.b++),70),BB(mMn(e,(HXn(),Ydt)),272)==(Rtn(),UPt)&&(fW(i),WB(t.b,e),Lx(e,(hWn(),Uft))||hon(e,Uft,n))}function hCn(n){var t,i,r;for(t=F3(new oz(ZL(lbn(n).a.Kc(),new h))),i=new oz(ZL(fbn(n).a.Kc(),new h));dAn(i);)r=F3(new oz(ZL(lbn(BB(U5(i),17).c.i).a.Kc(),new h))),t=e.Math.max(t,r);return iln(t)}function fCn(n,t,e){var i,r,c,a;for(OTn(e,"Processor arrange node",1),r=null,c=new YT,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(r=a);r5(c,r,c.c.b,c.c),Yzn(n,c,mcn(e,1)),HSn(e)}function lCn(n,t,e){var i,r,c;i=BB(ZAn(n,(sWn(),hSt)),21),r=0,c=0,t.a>e.a&&(i.Hc((wEn(),WMt))?r=(t.a-e.a)/2:i.Hc(QMt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((wEn(),JMt))?c=(t.b-e.b)/2:i.Hc(YMt)&&(c=t.b-e.b)),lMn(n,r,c)}function bCn(n,t,e,i,r,c,a,u,o,s,h,f,l){cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=a,$ln(n,u),Nln(n,o),Aln(n,s),Lln(n,h),nln(n,f),qln(n,l),Yfn(n,!0),Len(n,r),n.ok(c),Ihn(n,t),null!=i&&(n.i=null,arn(n,i))}function wCn(n){var t,e;if(n.f){for(;n.n>0;){if(cL(e=(t=BB(n.k.Xb(n.n-1),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;--n.n}return!1}return n.n>0}function dCn(n,t,e){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,[e,iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must not be greater than size (%s)",Pun(Gk(Ant,1),HWn,1,5,[e,iln(n),iln(t)]))}function gCn(n,t,e,i,r,c){var a,u,o;if(i-e<7)$bn(t,e,i,c);else if(gCn(t,n,u=e+r,o=u+((a=i+r)-u>>1),-r,c),gCn(t,n,o,a,-r,c),c.ue(n[o-1],n[o])<=0)for(;e<i;)$X(t,e++,n[u++]);else Gfn(n,u,o,a,t,e,i,c)}function pCn(n,t){var e,i,r;for(r=new Np,i=new Wb(n.c.a.b);i.a<i.c.c.length;)e=BB(n0(i),57),t.Lb(e)&&(WB(r,new OS(e,!0)),WB(r,new OS(e,!1)));Zvn(n.e),e2(r,n.d,new Jy(Pun(Gk(oit,1),HWn,679,0,[n.e])))}function vCn(n,t){var e,i,r,c,a,u,o;for(o=t.d,r=t.b.j,u=new Wb(o);u.a<u.c.c.length;)for(a=BB(n0(u),101),c=x8($Nt,ZYn,25,r.c.length,16,1),VW(n.b,a,c),e=a.a.d.p-1,i=a.c.d.p;e!=i;)c[e=(e+1)%r.c.length]=!0}function mCn(n,t){for(n.r=new Fan(n.p),Jl(n.r,n),Frn(n.r.j,n.j),yQ(n.j),DH(n.j,t),DH(n.r.e,t),rX(n),rX(n.r);0!=n.f.c.length;)G$(BB(xq(n.f,0),129));for(;0!=n.k.c.length;)G$(BB(xq(n.k,0),129));return n.r}function yCn(n,t,e){var i,r,c;if(r=itn(n.Tg(),t),(i=t-n.Ah())<0){if(!r)throw Hp(new _y(o6n+t+s6n));if(!r.Ij())throw Hp(new _y(r6n+r.ne()+c6n));(c=n.Yg(r))>=0?n.sh(c,e):TLn(n,r,e)}else Lbn(n,i,r,e)}function kCn(n){var t,e,i,r;if(e=BB(n,49).qh())try{if(i=null,(t=$$n((WM(),zAt),M_n(_bn(e))))&&(r=t.rh())&&(i=r.Wk(Xy(e.e))),i&&i!=n)return kCn(i)}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}return n}function jCn(n,t,e){var i,r,c,a;if(a=null==t?0:n.b.se(t),0==(r=null==(i=n.a.get(a))?new Array:i).length)n.a.set(a,r);else if(c=hhn(n,t,r))return c.ed(e);return $X(r,r.length,new PS(t,e)),++n.c,oY(n.b),null}function ECn(n,t){var e;return h2(n.a),CU(n.a,(Prn(),Qkt),Qkt),CU(n.a,Ykt,Ykt),dq(e=new B2,Ykt,(Cbn(),ejt)),GI(ZAn(t,(Uyn(),Sjt)))!==GI((Hsn(),sjt))&&dq(e,Ykt,njt),dq(e,Ykt,tjt),aA(n.a,e),$qn(n.a,t)}function TCn(n){if(!n)return lk(),htt;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=ftt[typeof t];return i?i(t):khn(typeof t)}return n instanceof Array||n instanceof e.Array?new Tl(n):new Pl(n)}function MCn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SIn(r),c.a=MIn(r),c.b=e.Math.max(c.b,a.a),c.b>a.a&&!t&&(c.b=a.a),c.c=-(c.b-a.a)/2,i.g){case 1:c.d=-c.a;break;case 3:c.d=a.b}_Fn(r),GFn(r)}function SCn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SIn(r),c.a=MIn(r),c.a=e.Math.max(c.a,a.b),c.a>a.b&&!t&&(c.a=a.b),c.d=-(c.a-a.b)/2,i.g){case 4:c.c=-c.b;break;case 2:c.c=a.a}_Fn(r),GFn(r)}function PCn(n,t){var e,i,r,c,a;if(!t.dc())if(r=BB(t.Xb(0),128),1!=t.gc())for(e=1;e<t.gc();)!r.j&&r.o||(c=vyn(t,e))&&(i=BB(c.a,19).a,kxn(n,r,a=BB(c.b,128),e,i,t),e=i+1,r=a);else kxn(n,r,r,1,0,t)}function CCn(n){var t,e,i,r;for(m$(r=new t_(n.d),new zr),kDn(),t=Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst]),e=0,i=new Wb(r);i.a<i.c.c.length;)COn(BB(n0(i),101),t[e%t.length]),++e}function ICn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(r=BB(b3(c),8),!Dcn(n,i)||!Dcn(n,r))return!1;i=r}return!(!Dcn(n,i)||!Dcn(n,e))}function OCn(n,t){var e,i,r,c,a;return e=Ren(a=n,"x"),nnn(new qg(t).a,e),i=Ren(a,"y"),tnn(new Gg(t).a,i),r=Ren(a,C6n),enn(new zg(t).a,r),c=Ren(a,P6n),inn(new Ug(t).a,c),c}function ACn(n,t){dRn(n,t),0!=(1&n.b)&&(n.a.a=null),0!=(2&n.b)&&(n.a.f=null),0!=(4&n.b)&&(n.a.g=null,n.a.i=null),0!=(16&n.b)&&(n.a.d=null,n.a.e=null),0!=(8&n.b)&&(n.a.b=null),0!=(32&n.b)&&(n.a.j=null,n.a.c=null)}function $Cn(n,t){var e,i;if(i=0,t.length>0)try{i=l_n(t,_Vn,DWn)}catch(r){throw cL(r=lun(r),127)?Hp(new L7(r)):Hp(r)}return!n.a&&(n.a=new Sp(n)),i<(e=n.a).i&&i>=0?BB(Wtn(e,i),56):null}function LCn(n,t){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,["index",iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must be less than size (%s)",Pun(Gk(Ant,1),HWn,1,5,["index",iln(n),iln(t)]))}function NCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function xCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function DCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function RCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function KCn(n,t){var e,i,r,c,a,u;for(e=n.b.c.length,r=xq(n.b,t);2*t+1<e&&(u=c=2*t+1,(a=c+1)<e&&n.a.ue(xq(n.b,a),xq(n.b,c))<0&&(u=a),i=u,!(n.a.ue(r,xq(n.b,i))<0));)c5(n.b,t,xq(n.b,i)),t=i;c5(n.b,t,r)}function _Cn(n,t,i,r,c,a){var u,o,s,h,f;for(GI(n)===GI(i)&&(n=n.slice(t,t+c),t=0),s=i,o=t,h=t+c;o<h;)c=(u=e.Math.min(o+1e4,h))-o,(f=n.slice(o,u)).splice(0,0,r,a?c:0),Array.prototype.splice.apply(s,f),o=u,r+=c}function FCn(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 BCn(n){var t,e,i,r,c,a,u;if((i=n.a.c.length)>0)for(a=n.c.d,r=kL(XR(new xC((u=n.d.d).a,u.b),a),1/(i+1)),c=new xC(a.a,a.b),e=new Wb(n.a);e.a<e.c.c.length;)(t=BB(n0(e),559)).d.a=c.a,t.d.b=c.b,UR(c,r)}function HCn(n,t,i){var r,c,a,u,o,s;for(s=RQn,a=new Wb(GLn(n.b));a.a<a.c.c.length;)for(c=BB(n0(a),168),o=new Wb(GLn(t.b));o.a<o.c.c.length;)u=BB(n0(o),168),r=Cun(c.a,c.b,u.a,u.b,i),s=e.Math.min(s,r);return s}function qCn(n,t){if(!t)throw Hp(new gv);if(n.j=t,!n.d)switch(n.j.g){case 1:n.a.a=n.o.a/2,n.a.b=0;break;case 2:n.a.a=n.o.a,n.a.b=n.o.b/2;break;case 3:n.a.a=n.o.a/2,n.a.b=n.o.b;break;case 4:n.a.a=0,n.a.b=n.o.b/2}}function GCn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function zCn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function UCn(n){var t,e,i,r;for(r=Lfn(n.d,n.e).Kc();r.Ob();)for(i=BB(r.Pb(),11),e=new Wb(n.e==(kUn(),CIt)?i.e:i.g);e.a<e.c.c.length;)b5(t=BB(n0(e),17))||t.c.i.c==t.d.i.c||(RSn(n,t),++n.f,++n.c)}function XCn(n,t){var e,i;if(t.dc())return SQ(),SQ(),set;for(WB(i=new Np,iln(_Vn)),e=1;e<n.f;++e)null==n.a&&wRn(n),n.a[e]&&WB(i,iln(e));return 1==i.c.length?(SQ(),SQ(),set):(WB(i,iln(DWn)),dBn(t,i))}function WCn(n,t){var e,i,r,c,a,u;e=ckn(t,u=t.c.i.k!=(uSn(),Cut)?t.d:t.c).i,r=BB(RX(n.k,u),121),i=n.i[e.p].a,AK(u.i)<(e.c?E7(e.c.a,e,0):-1)?(c=r,a=i):(c=i,a=r),UNn(aM(cM(uM(rM(new Hv,0),4),c),a))}function VCn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kIn(dnn(e,BB(r.Pb(),19).a))))&&(!t.b&&(t.b=new hK(KOt,t,4,7)),f9(t.b,c))}function QCn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kIn(dnn(e,BB(r.Pb(),19).a))))&&(!t.c&&(t.c=new hK(KOt,t,5,8)),f9(t.c,c))}function YCn(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 JCn(n){var t,e,i;if(t=n.Pb(),!n.Ob())return t;for(i=uO(oO(new Ck,"expected one element but was: <"),t),e=0;e<4&&n.Ob();e++)uO((i.a+=FWn,i),n.Pb());throw n.Ob()&&(i.a+=", ..."),i.a+=">",Hp(new _y(i.a))}function ZCn(n,t){var e;t.d?t.d.b=t.b:n.a=t.b,t.b?t.b.d=t.d:n.e=t.d,t.e||t.c?(--(e=BB(RX(n.b,t.a),283)).a,t.e?t.e.c=t.c:e.b=t.c,t.c?t.c.e=t.e:e.c=t.e):((e=BB(v6(n.b,t.a),283)).a=0,++n.c),--n.d}function nIn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[3]=t[3]+(e%60/10|0)&QVn,t[4]=t[4]+e%10&QVn,Bdn(t,0,t.length)}function tIn(n,t,e){var i,r;for(i=t.d,r=e.d;i.a-r.a==0&&i.b-r.b==0;)i.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,i.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5}function eIn(n){var t,e,i,r;for(n.g=new Hbn(BB(yX(FIt),290)),i=0,kUn(),e=sIt,t=0;t<n.j.c.length;t++)(r=BB(xq(n.j,t),11)).j!=e&&(i!=t&&mG(n.g,e,new rI(iln(i),iln(t))),e=r.j,i=t);mG(n.g,e,new rI(iln(i),iln(t)))}function iIn(n){var t,e,i,r,c;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)for(r=new Wb(BB(n0(t),29).a);r.a<r.c.c.length;)for((i=BB(n0(r),10)).p=e++,c=new Wb(i.j);c.a<c.c.c.length;)BB(n0(c),11).p=e++}function rIn(n,t,e,i,r){var c,a,u,o;if(t)for(a=t.Kc();a.Ob();)for(o=cRn(BB(a.Pb(),10),(ain(),qvt),e).Kc();o.Ob();)u=BB(o.Pb(),11),(c=BB(qI(AY(r.f,u)),112))||(c=new Fan(n.d),i.c[i.c.length]=c,UPn(c,u,r))}function cIn(n,t){var e,i,r;if(!(r=Fqn((IPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ol(t)}function aIn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=CJ(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):Van(fan(n))}function uIn(n){var t,e,i,r,c,a,u;for(c=new fA,e=new Wb(n);e.a<e.c.c.length;)a=(t=BB(n0(e),129)).a,u=t.b,c.a._b(a)||c.a._b(u)||(r=a,i=u,a.e.b+a.j.b>2&&u.e.b+u.j.b<=2&&(r=u,i=a),c.a.zc(r,c),r.q=i);return c}function oIn(n,t){var e,i,r;return qan(i=new $vn(n),t),hon(i,(hWn(),Vft),t),hon(i,(HXn(),ept),(QEn(),XCt)),hon(i,kdt,(wvn(),OMt)),Bl(i,(uSn(),Mut)),CZ(e=new CSn,i),qCn(e,(kUn(),CIt)),CZ(r=new CSn,i),qCn(r,oIt),i}function sIn(n){switch(n.g){case 0:return new Ny((oin(),Omt));case 1:return new df;case 2:return new jf;default:throw Hp(new _y("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function hIn(n,t){var e,i,r,c;for(n.c[t.p]=!0,WB(n.a,t),c=new Wb(t.j);c.a<c.c.c.length;)for(e=new m6((r=BB(n0(c),11)).b);y$(e.a)||y$(e.b);)i=ngn(r,BB(y$(e.a)?n0(e.a):n0(e.b),17)).i,n.c[i.p]||hIn(n,i)}function fIn(n){var t,i,r,c,a,u,o;for(u=0,i=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));i.e!=i.i.gc();)o=(t=BB(kpn(i),33)).g,c=t.f,r=e.Math.sqrt(o*o+c*c),u=e.Math.max(r,u),a=fIn(t),u=e.Math.max(a,u);return u}function lIn(){lIn=O,rIt=new XC("OUTSIDE",0),eIt=new XC("INSIDE",1),iIt=new XC("NEXT_TO_PORT_IF_POSSIBLE",2),tIt=new XC("ALWAYS_SAME_SIDE",3),nIt=new XC("ALWAYS_OTHER_SAME_SIDE",4),cIt=new XC("SPACE_EFFICIENT",5)}function bIn(n,t,e){var i,r,c,a;return $in(i=K2(n,(tE(),r=new jm,!!e&&nNn(r,e),r),t),R2(t,q6n)),STn(t,i),o$n(t,i),OCn(t,i),c=N2(t,"ports"),PLn((a=new pI(n,i)).a,a.b,c),xon(n,t,i),aun(n,t,i),i}function wIn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,58,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[4]=t[4]+(e%60/10|0)&QVn,t[5]=t[5]+e%10&QVn,Bdn(t,0,t.length)}function dIn(n){var t;return t=Pun(Gk(ONt,1),WVn,25,15,[71,77,84,45,48,48,58,48,48]),n<=0&&(t[3]=43,n=-n),t[4]=t[4]+((n/60|0)/10|0)&QVn,t[5]=t[5]+(n/60|0)%10&QVn,t[7]=t[7]+(n%60/10|0)&QVn,t[8]=t[8]+n%10&QVn,Bdn(t,0,t.length)}function gIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+vz(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function pIn(n,t){var i,r,c;for(c=DWn,r=new Wb(kbn(t));r.a<r.c.c.length;)(i=BB(n0(r),213)).f&&!n.c[i.c]&&(n.c[i.c]=!0,c=e.Math.min(c,pIn(n,Nbn(i,t))));return n.i[t.d]=n.j,n.g[t.d]=e.Math.min(c,n.j++),n.g[t.d]}function vIn(n,t){var e,i,r;for(r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.b=(e=i.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),sIt)?-e.rf().b-Gy(MD(e.We(aPt))):Gy(MD(e.We(aPt))):e.Hf()==(kUn(),sIt)?-e.rf().b:0}function mIn(n){var t,e,i,r,c,a,u;for(e=QA(n.e),c=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),t=e.a-c.a,r=e.b-c.b,u=0;u<n.c;u++){for(i=t,a=0;a<n.d;a++)Wbn(n.e,new UV(i,r,n.a,n.b))&&FRn(n,a,u,!1,!0),i+=n.a;r+=n.b}}function yIn(n){var t,e,i;if(qy(TD(ZAn(n,(sWn(),SSt))))){for(i=new Np,e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)QIn(t=BB(U5(e),79))&&qy(TD(ZAn(t,PSt)))&&(i.c[i.c.length]=t);return i}return SQ(),SQ(),set}function kIn(n){var t;if(t=!1,cL(n,204))return t=!0,BB(n,204).a;if(!t&&cL(n,258)&&BB(n,258).a%1==0)return t=!0,iln(QO(BB(n,258).a));throw Hp(new ek("Id must be a string or an integer: '"+n+"'."))}function jIn(n,t){var e,i,r,c,a,u;for(c=null,r=new rU((!n.a&&(n.a=new Sp(n)),n.a));bOn(r);)if(YBn(a=(e=BB(aLn(r),56)).Tg()),null!=(i=(u=a.o)&&e.mh(u)?pK(uun(u),e.ah(u)):null)&&mK(i,t)){c=e;break}return c}function EIn(n,t,e){var i,r,c,a,u;if(lin(e,"occurrences"),0==e)return(u=BB(lfn(OQ(n.a),t),14))?u.gc():0;if(!(a=BB(lfn(OQ(n.a),t),14)))return 0;if(e>=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i<e;i++)r.Pb(),r.Qb();return c}function TIn(n,t,e){var i,r,c;return lin(e,"oldCount"),lin(0,"newCount"),((i=BB(lfn(OQ(n.a),t),14))?i.gc():0)==e&&(lin(0,"count"),(c=-((r=BB(lfn(OQ(n.a),t),14))?r.gc():0))>0?wk():c<0&&EIn(n,t,-c),!0)}function MIn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=Xvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=Kk(ecn(LV(AV(LU(n.a),new Mn),new Sn)));return a>0?a+n.n.d+n.n.a:0}function SIn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=Kk(ecn(LV(AV(LU(n.a),new En),new Tn)));else{for(t=0,r=0,c=(i=Wvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}return a>0?a+n.n.b+n.n.c:0}function PIn(n,t){var i,r,c,a;for(i=(a=BB(oV(n.b,t),124)).a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).c&&(i.a=e.Math.max(i.a,VH(r.c)));if(i.a>0)switch(t.g){case 2:a.n.c=n.s;break;case 4:a.n.b=n.s}}function CIn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(fRn(),Zct)),19).a-BB(mMn(n,Zct),19).a)?(i=XR(B$(BB(mMn(n,(Mrn(),uat)),8)),BB(mMn(n,oat),8)),r=XR(B$(BB(mMn(t,uat),8)),BB(mMn(t,oat),8)),Pln(i.a*i.b,r.a*r.b)):e}function IIn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(CAn(),$kt)),19).a-BB(mMn(n,$kt),19).a)?(i=XR(B$(BB(mMn(n,(qqn(),Zyt)),8)),BB(mMn(n,nkt),8)),r=XR(B$(BB(mMn(t,Zyt),8)),BB(mMn(t,nkt),8)),Pln(i.a*i.b,r.a*r.b)):e}function OIn(n){var t,e;return(e=new Ck).a+="e_",null!=(t=Xan(n))&&(e.a+=""+t),n.c&&n.d&&(oO((e.a+=" ",e),pyn(n.c)),oO(uO((e.a+="[",e),n.c.i),"]"),oO((e.a+=e1n,e),pyn(n.d)),oO(uO((e.a+="[",e),n.d.i),"]")),e.a}function AIn(n){switch(n.g){case 0:return new pf;case 1:return new vf;case 2:return new gf;case 3:return new mf;default:throw Hp(new _y("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function $In(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 LIn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)r=x2(e,BB(c.Pb(),19).a),L6n in r.a||N6n in r.a?sKn(n,r,t):EXn(n,r,t),PL(BB(RX(n.b,Qdn(r)),79))}function NIn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=Ikn(n))&&(ZM(),t.Cj()==E9n)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function xIn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 2:case 3:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function DIn(n,t){var e,i,r,c;if(QXn(n),0!=n.c||123!=n.a)throw Hp(new ak(kWn((u$(),P8n))));if(c=112==t,i=n.d,(e=lx(n.i,125,i))<0)throw Hp(new ak(kWn((u$(),C8n))));return r=fx(n.i,i,e),n.d=e+1,b9(r,c,512==(512&n.e))}function RIn(n){var t;if((t=BB(mMn(n,(HXn(),qdt)),314))==(Oin(),hht))throw Hp(new ck("The hierarchy aware processor "+t+" in child node "+n+" is only allowed if the root node specifies the same hierarchical processor."))}function KIn(n,t){var e,i,r,c;for(G_(),e=null,r=t.Kc();r.Ob();)(i=BB(r.Pb(),128)).o||(WB((c=new PBn(F$(i.a),bH(i.a),null,BB(i.d.a.ec().Kc().Pb(),17))).c,i.a),n.c[n.c.length]=c,e&&WB(e.d,c),e=c)}function _In(n,t){var e,i,r;if(t)if(0!=(4&t.i))for(i="[]",e=t.c;;e=e.c){if(0==(4&e.i)){Hin(n,r=Uy((ED(e),e.o+i))),xen(n,r);break}i+="[]"}else Hin(n,r=Uy((ED(t),t.o))),xen(n,r);else Hin(n,null),xen(n,null);n.yk(t)}function FIn(n,t,e,i,r){var c,a,u,o;return GI(o=hD(n,BB(r,56)))!==GI(r)?(u=BB(n.g[e],72),jL(n,e,sTn(n,e,c=Z3(t,o))),mA(n.e)&&(KEn(a=LY(n,9,c.ak(),r,o,i,!1),new N7(n.e,9,n.c,u,c,i,!1)),$7(a)),o):r}function BIn(n,t,e){var i,r,c,a,u,o;for(i=BB(h6(n.c,t),15),r=BB(h6(n.c,e),15),c=i.Zc(i.gc()),a=r.Zc(r.gc());c.Sb()&&a.Sb();)if((u=BB(c.Ub(),19))!=(o=BB(a.Ub(),19)))return E$(u.a,o.a);return c.Ob()||a.Ob()?c.Ob()?1:-1:0}function HIn(n,t){var e,i;try{return X1(n.a,t)}catch(r){if(cL(r=lun(r),32)){try{if(i=l_n(t,_Vn,DWn),e=Vj(n.a),i>=0&&i<e.length)return e[i]}catch(c){if(!cL(c=lun(c),127))throw Hp(c)}return null}throw Hp(r)}}function qIn(n,t){var e,i,r;if(r=Fqn((IPn(),Z$t),n.Tg(),t))return ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ll(t);throw Hp(new _y(r6n+t.ne()+u6n))}function GIn(){var n;return tS(),Q$t?BB($$n((WM(),zAt),V9n),1939):(RO(Hnt,new Cs),nzn(),n=BB(cL(SJ((WM(),zAt),V9n),547)?SJ(zAt,V9n):new UW,547),Q$t=!0,oWn(n),TWn(n),VW((VM(),ZAt),n,new Go),mZ(zAt,V9n,n),n)}function zIn(n,t){var e,i,r,c;n.j=-1,mA(n.e)?(e=n.i,c=0!=n.i,c6(n,t),i=new N7(n.e,3,n.c,null,t,e,c),r=t.Qk(n.e,n.c,null),(r=IEn(n,t,r))?(r.Ei(i),r.Fi()):ban(n.e,i)):(c6(n,t),(r=t.Qk(n.e,n.c,null))&&r.Fi())}function UIn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(b1(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)b1(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function XIn(n){var t,i,r,c,a;return i=c=BB(n.a,19).a,r=a=BB(n.b,19).a,t=e.Math.max(e.Math.abs(c),e.Math.abs(a)),c<=0&&c==a?(i=0,r=a-1):c==-t&&a!=t?(i=a,r=c,a>=0&&++i):(i=-a,r=c),new rI(iln(i),iln(r))}function WIn(n,t,e,i){var r,c,a,u,o,s;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)if(o=c,s=u=a-t.k+i,o+=n.j,s+=n.k,o>=0&&s>=0&&o<n.o&&s<n.p&&(!mmn(t,r,a)&&imn(n,c,u)||vmn(t,r,a)&&!rmn(n,c,u)))return!0;return!1}function VIn(n,t,e){var i,r,c,a;c=n.c,a=n.d,r=(Aon(Pun(Gk(PMt,1),sVn,8,0,[c.i.n,c.n,c.a])).b+Aon(Pun(Gk(PMt,1),sVn,8,0,[a.i.n,a.n,a.a])).b)/2,i=null,i=c.j==(kUn(),oIt)?new xC(t+c.i.c.c.a+e,r):new xC(t-e,r),Kx(n.a,0,i)}function QIn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=i)return!1}else t=i;return!0}function YIn(n,t,e){var i;if(++n.j,t>=n.i)throw Hp(new Ay(u8n+t+o8n+n.i));if(e>=n.i)throw Hp(new Ay(s8n+e+o8n+n.i));return i=n.g[e],t!=e&&(t<e?aHn(n.g,t,n.g,t+1,e-t):aHn(n.g,e+1,n.g,e,t-e),$X(n.g,t,i),n.ei(t,i,e),n.ci()),i}function JIn(n,t,e){var i;if(i=BB(n.c.xc(t),14))return!!i.Fc(e)&&(++n.d,!0);if((i=n.ic(t)).Fc(e))return++n.d,n.c.zc(t,i),!0;throw Hp(new g5("New Collection violated the Collection spec"))}function ZIn(n){var t,e,i;return n<0?0:0==n?32:(e=16-(t=(i=-(n>>16))>>16&16),e+=t=(i=(n>>=t)-256)>>16&8,e+=t=(i=(n<<=t)-_Qn)>>16&4,(e+=t=(i=(n<<=t)-hVn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function nOn(n){var t,e,i,r;for(MQ(),Sct=new Np,Mct=new xp,Tct=new Np,!n.a&&(n.a=new eU(UOt,n,10,11)),xUn(t=n.a),r=new AL(t);r.e!=r.i.gc();)i=BB(kpn(r),33),-1==E7(Sct,i,0)&&(e=new Np,WB(Tct,e),Rgn(i,e));return Tct}function tOn(n,t,e){var i,r,c,a;n.a=e.b.d,cL(t,352)?(e5(c=qSn(r=cDn(BB(t,79),!1,!1)),i=new Nw(n)),VFn(c,r),null!=t.We((sWn(),OSt))&&e5(BB(t.We(OSt),74),i)):((a=BB(t,470)).Hg(a.Dg()+n.a.a),a.Ig(a.Eg()+n.a.b))}function eOn(n,t){var i,r,c,a,u,o,s,h;for(h=Gy(MD(mMn(t,(HXn(),Npt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,o=1;o<n.length;o++)r=n[o].n,c=n[o].o,i=n[o].d,(a=r.a-i.b-s)<0&&(r.a-=a),(u=t.f).a=e.Math.max(u.a,r.a+c.a),s=r.a+c.a+i.c+h}function iOn(n,t){var e,i,r,c,a,u;return i=BB(BB(RX(n.g,t.a),46).a,65),r=BB(BB(RX(n.g,t.b),46).a,65),(e=nqn(c=i.b,a=r.b))>=0?e:(u=lW(XR(new xC(a.c+a.b/2,a.d+a.a/2),new xC(c.c+c.b/2,c.d+c.a/2))),-(Y_n(c,a)-1)*u)}function rOn(n,t,e){var i;JT(new Rq(null,(!e.a&&(e.a=new eU(FOt,e,6,6)),new w1(e.a,16))),new eI(n,t)),JT(new Rq(null,(!e.n&&(e.n=new eU(zOt,e,1,7)),new w1(e.n,16))),new iI(n,t)),(i=BB(ZAn(e,(sWn(),OSt)),74))&&Yrn(i,n,t)}function cOn(n,t,e){var i,r,c;if(c=Fqn((IPn(),Z$t),n.Tg(),t))return ZM(),BB(c,66).Oj()||(c=Z1(B7(Z$t,c))),r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).hl(t,e);throw Hp(new _y(r6n+t.ne()+u6n))}function aOn(n,t,e,i){var r,c,a,u,o;if(r=n.d[t])if(c=r.g,o=r.i,null!=i){for(u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return a}else for(u=0;u<o;++u)if(GI((a=BB(c[u],133)).cd())===GI(i))return a;return null}function uOn(n,t){var e;if(t<0)throw Hp(new Oy("Negative exponent"));if(0==t)return Jtt;if(1==t||swn(n,Jtt)||swn(n,eet))return n;if(!fAn(n,0)){for(e=1;!fAn(n,e);)++e;return Nnn(vwn(e*t),uOn(z5(n,e),t))}return mTn(n,t)}function oOn(n,t){var e,i,r;if(GI(n)===GI(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],!(GI(i)===GI(r)||null!=i&&Nfn(i,r)))return!1;return!0}function sOn(n){var t,e,i;for(kM(),this.b=Vat,this.c=(Ffn(),BPt),this.f=(yM(),zat),this.a=n,tj(this,new Ct),kNn(this),i=new Wb(n.b);i.a<i.c.c.length;)(e=BB(n0(i),81)).d||(t=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[e])),WB(n.a,t))}function hOn(n,t,e){var i,r,c,a,u,o;if(!n||0==n.c.length)return null;for(c=new KY(t,!e),r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),70),USn(c,(gM(),new Bw(i)));return(a=c.i).a=(o=c.n,c.e.b+o.d+o.a),a.b=(u=c.n,c.e.a+u.b+u.c),c}function fOn(n){var t,e,i,r,c,a,u;for(hA(u=n2(n.a),new Pe),e=null,c=0,a=(r=u).length;c<a&&(i=r[c]).k==(uSn(),Mut);++c)(t=BB(mMn(i,(hWn(),Qft)),61))!=(kUn(),CIt)&&t!=oIt||(e&&BB(mMn(e,clt),15).Fc(i),e=i)}function lOn(n,t,e){var i,r,c,a,u,o;l1(t,n.c.length),u=BB(n.c[t],329),s6(n,t),u.b/2>=e&&(i=t,c=(o=(u.c+u.a)/2)-e,u.c<=o-e&&kG(n,i++,new kB(u.c,c)),(a=o+e)<=u.a&&(r=new kB(a,u.a),LZ(i,n.c.length),MS(n.c,i,r)))}function bOn(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=BB(n.g[n.i-1],47)}else n.d=n.si(n.f),f9(n,n.d),t=n.d;return t==n.b&&null.km>=null.jm()?(aLn(n),bOn(n)):t.Ob()}function wOn(n,t,e){var i,r,c,a;if(!(a=e)&&(a=LH(new Xm,0)),OTn(a,qZn,1),$Gn(n.c,t),1==(c=RGn(n.a,t)).gc())VHn(BB(c.Xb(0),37),a);else for(r=1/c.gc(),i=c.Kc();i.Ob();)VHn(BB(i.Pb(),37),mcn(a,r));Ek(n.a,c,t),FDn(t),HSn(a)}function dOn(n){if(this.a=n,n.c.i.k==(uSn(),Mut))this.c=n.c,this.d=BB(mMn(n.c.i,(hWn(),Qft)),61);else{if(n.d.i.k!=Mut)throw Hp(new _y("Edge "+n+" is not an external edge."));this.c=n.d,this.d=BB(mMn(n.d.i,(hWn(),Qft)),61)}}function gOn(n,t){var e,i,r;r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,r,n.b)),t?t!=n&&(Nrn(n,t.zb),$en(n,t.d),Fin(n,null==(e=null==(i=t.c)?t.zb:i)||mK(e,t.zb)?null:e)):(Nrn(n,null),$en(n,0),Fin(n,null))}function pOn(n){var t,e;if(n.f){for(;n.n<n.o;){if(cL(e=(t=BB(n.j?n.j.pi(n.n):n.k.Xb(n.n),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;++n.n}return!1}return n.n<n.o}function vOn(n,t){var e;this.e=(WX(),yX(n),WX(),Nwn(n)),this.c=(yX(t),Nwn(t)),aN(this.e.Hd().dc()==this.c.Hd().dc()),this.d=vbn(this.e),this.b=vbn(this.c),e=kq(Ant,[sVn,HWn],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2),this.a=e,din(this)}function mOn(n){var t=(!Znt&&(Znt=QUn()),Znt);return'"'+n.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,(function(n){return IJ(n,t)}))+'"'}function yOn(n){var t,e;for(CQ(),this.b=hit,this.c=lit,this.g=(pM(),sit),this.d=(Ffn(),BPt),this.a=n,yNn(this),e=new Wb(n.b);e.a<e.c.c.length;)!(t=BB(n0(e),57)).a&&IN(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),n),t.e=new gY(t.d)}function kOn(n){var t,e,i,r,c;for(r=n.e.c.length,i=x8(Rnt,nZn,15,r,0,1),c=new Wb(n.e);c.a<c.c.c.length;)i[BB(n0(c),144).b]=new YT;for(e=new Wb(n.c);e.a<e.c.c.length;)i[(t=BB(n0(e),282)).c.b].Fc(t),i[t.d.b].Fc(t);return i}function jOn(n){var t,e,i,r,c,a;for(a=sx(n.c.length),r=new Wb(n);r.a<r.c.c.length;){for(i=BB(n0(r),10),c=new Rv,e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||TU(c,t.d.i);a.c[a.c.length]=c}return a}function EOn(n,t){var e,i,r,c,a;if(t>=(a=null==(e=BB(yan(n.a,4),126))?0:e.length))throw Hp(new tK(t,a));return r=e[t],1==a?i=null:(aHn(e,0,i=x8(dAt,i9n,415,a-1,0,1),0,t),(c=a-t-1)>0&&aHn(e,t+1,i,t,c)),Fgn(n,i),eCn(n,t,r),r}function TOn(){TOn=O,lLt=BB(Wtn(QQ((cE(),gLt).qb),6),34),sLt=BB(Wtn(QQ(gLt.qb),3),34),hLt=BB(Wtn(QQ(gLt.qb),4),34),fLt=BB(Wtn(QQ(gLt.qb),5),18),oEn(lLt),oEn(sLt),oEn(hLt),oEn(fLt),bLt=new Jy(Pun(Gk(FAt,1),N9n,170,0,[lLt,sLt]))}function MOn(n,t){var e;this.d=new lm,this.b=t,this.e=new wA(t.qf()),e=n.u.Hc((lIn(),iIt)),n.u.Hc(eIt)?n.D?this.a=e&&!t.If():this.a=!0:n.u.Hc(rIt)?this.a=!!e&&!(t.zf().Kc().Ob()||t.Bf().Kc().Ob()):this.a=!1}function SOn(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),CIt)?-i.rf().a-Gy(MD(i.We(aPt))):e+Gy(MD(i.We(aPt))):i.Hf()==(kUn(),CIt)?-i.rf().a:e}function POn(n,t){var e,i,r;e=BB(mMn(n,(HXn(),Udt)),103),r=BB(ZAn(t,upt),61),(i=BB(mMn(n,ept),98))!=(QEn(),QCt)&&i!=YCt?r==(kUn(),PIt)&&(r=OFn(t,e))==PIt&&(r=hwn(e)):r=XHn(t)>0?hwn(e):Tln(hwn(e)),Ypn(t,upt,r)}function COn(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&m$(a,new Ur),r=a.c.length/2|0,i=0;i<r;i++)l1(i,a.c.length),(c=BB(a.c[i],113)).c&&qCn(c.d,t.a);for(e=r;e<a.c.length;e++)l1(e,a.c.length),(c=BB(a.c[e],113)).c&&qCn(c.d,t.b)}function IOn(n,t,e){var i,r,c;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?((c=Tz(i.a,r.a))<0?uKn(n,t,e):c>0&&uKn(n,e,t),c):null!=i.a?(uKn(n,t,e),-1):null!=r.a?(uKn(n,e,t),1):0}function OOn(n,t){var e,i,r,c;n.ej()?(e=n.Vi(),c=n.fj(),++n.j,n.Hi(e,n.oi(e,t)),i=n.Zi(3,null,t,e,c),n.bj()&&(r=n.cj(t,null))?(r.Ei(i),r.Fi()):n.$i(i)):(eW(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function AOn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),r=new go,e=BB(n.g,119),c=n.i;--c>=0;)i=e[c],a.rl(i.ak())&&f9(r,i);!aXn(n,r)&&mA(n.e)&&Lv(n,t.$j()?LY(n,6,t,(SQ(),set),null,-1,!1):LY(n,t.Kj()?2:1,t,null,null,-1,!1))}function $On(){var n,t;for($On=O,aet=x8(oet,sVn,91,32,0,1),uet=x8(oet,sVn,91,32,0,1),n=1,t=0;t<=18;t++)aet[t]=npn(n),uet[t]=npn(yz(n,t)),n=cbn(n,5);for(;t<uet.length;t++)aet[t]=Nnn(aet[t-1],aet[1]),uet[t]=Nnn(uet[t-1],(ODn(),net))}function LOn(n,t){var e,i,r,c;return n.a==(JMn(),cft)||(r=t.a.c,e=t.a.c+t.a.b,!(t.j&&(c=(i=t.A).c.c.a-i.o.a/2,r-(i.n.a+i.o.a)>c)||t.q&&(c=(i=t.C).c.c.a-i.o.a/2,i.n.a-e>c)))}function NOn(n,t){OTn(t,"Partition preprocessing",1),JT(BB(P4(AV(wnn(AV(new Rq(null,new w1(n.a,16)),new vi),new mi),new yi),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15).Oc(),new ki),HSn(t)}function xOn(n){var t,e,i,r,c,a;for(qZ(),e=new v4,i=new Wb(n.e.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)r=BB(n0(c),10),(t=BB(lnn(e,a=n.g[r.p]),15))||Jgn(e,a,t=new Np),t.Fc(r);return e}function DOn(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=x8(Rnt,nZn,15,r,0,1),n.b=x8($Nt,ZYn,25,r,16,1),a=spn(t.b,0);a.b!=a.d.c;)c=BB(b3(a),86),n.a[c.g]=new YT;for(i=spn(t.a,0);i.b!=i.d.c;)e=BB(b3(i),188),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function ROn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (startX: ",vE(t,n.j),t.a+=", startY: ",vE(t,n.k),t.a+=", endX: ",vE(t,n.b),t.a+=", endY: ",vE(t,n.c),t.a+=", identifier: ",cO(t,n.d),t.a+=")",t.a)}function KOn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (ordered: ",yE(t,0!=(256&n.Bb)),t.a+=", unique: ",yE(t,0!=(512&n.Bb)),t.a+=", lowerBound: ",mE(t,n.s),t.a+=", upperBound: ",mE(t,n.t),t.a+=")",t.a)}function _On(n,t,e,i,r,c,a,u){var o;return cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=i,$ln(n,r),Nln(n,c),Aln(n,a),Lln(n,!1),nln(n,!0),qln(n,u),Yfn(n,!0),Len(n,0),n.b=0,Nen(n,1),(o=HTn(n,t,null))&&o.Fi(),Gln(n,!1),n}function FOn(n,t){var i,r;return BB(SJ(n.a,t),512)||(i=new y5(t),k5(),xK(i,FOn(n,fx(r=Qet?null:i.c,0,e.Math.max(0,mN(r,YTn(46)))))),0==(Qet?null:i.c).length&&zD(i,new X),mZ(n.a,Qet?null:i.c,i),i)}function BOn(n,t){var e;n.b=t,n.g=new Np,e=JOn(n.b),n.e=e,n.f=e,n.c=qy(TD(mMn(n.b,(_kn(),jit)))),n.a=MD(mMn(n.b,(sWn(),cSt))),null==n.a&&(n.a=1),Gy(n.a)>1?n.e*=Gy(n.a):n.f/=Gy(n.a),Chn(n),ggn(n),TRn(n),hon(n.b,(Epn(),gct),n.g)}function HOn(n,t,e){var i,r,c,a,u;for(i=0,u=e,t||(i=e*(n.c.length-1),u*=-1),c=new Wb(n);c.a<c.c.c.length;){for(hon(r=BB(n0(c),10),(HXn(),kdt),(wvn(),OMt)),r.o.a=i,a=DSn(r,(kUn(),oIt)).Kc();a.Ob();)BB(a.Pb(),11).n.a=i;i+=u}}function qOn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),Ifn(n,t,e),i=n.Zi(3,null,e,t,c),n.bj()?(r=n.cj(e,null),n.ij()&&(r=n.jj(e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(Ifn(n,t,e),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function GOn(n,t,e){var i,r,c,a,u,o;return(u=n.Gk(e))!=e?(a=n.g[t],o=u,jL(n,t,n.oi(t,o)),c=a,n.gi(t,o,c),n.rk()&&(i=e,r=n.dj(i,null),!BB(u,49).eh()&&(r=n.cj(o,r)),r&&r.Fi()),mA(n.e)&&Lv(n,n.Zi(9,e,u,t,!1)),u):e}function zOn(n,t){var e,i,r;for(e=new Wb(n.a.a);e.a<e.c.c.length;)BB(n0(e),189).g=!0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)(i=BB(n0(r),81)).k=qy(TD(n.e.Kb(new rI(i,t)))),i.d.g=i.d.g&qy(TD(n.e.Kb(new rI(i,t))));return n}function UOn(n){var t,e,i,r,c;if(e=new YK(t=BB(Vj(FIt),9),BB(SR(t,t.length),9),0),c=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(c.j);r.a<r.c.c.length;)GI(mMn(i=BB(n0(r),11),dlt))===GI(n)&&zN(new m6(i.b))&&orn(e,i.j);return e}function XOn(n,t,e){var i,r,c,a;if(!n.d[e.p]){for(i=new oz(ZL(lbn(e).a.Kc(),new h));dAn(i);){for(c=new oz(ZL(fbn(a=BB(U5(i),17).d.i).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).c.i==t&&(n.a[r.p]=!0);XOn(n,t,a)}n.d[e.p]=!0}}function WOn(n,t){var e,i,r,c,a,u,o;if(1==(i=pbn(254&n.Db)))n.Eb=null;else if(c=een(n.Eb),2==i)r=Rmn(n,t),n.Eb=c[0==r?1:0];else{for(a=x8(Ant,HWn,1,i-1,5,1),e=2,u=0,o=0;e<=128;e<<=1)e==t?++u:0!=(n.Db&e)&&(a[o++]=c[u++]);n.Eb=a}n.Db&=~t}function VOn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 4:case 5:case 6:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function QOn(n){var t;switch(t=0,n){case 105:t=2;break;case 109:t=8;break;case 115:t=4;break;case 120:t=16;break;case 117:t=32;break;case 119:t=64;break;case 70:t=256;break;case 72:t=128;break;case 88:t=512;break;case 44:t=k6n}return t}function YOn(n,t,e,i,r){var c,a,u,o;if(GI(n)!==GI(t)||i!=r)for(u=0;u<i;u++){for(a=0,c=n[u],o=0;o<r;o++)a=rbn(rbn(cbn(e0(c,UQn),e0(t[o],UQn)),e0(e[u+o],UQn)),e0(dG(a),UQn)),e[u+o]=dG(a),a=jz(a,32);e[u+r]=dG(a)}else I_n(n,i,e)}function JOn(n){var t,i,r,c,a,u,o,s,h,f,l;for(f=0,h=0,o=(c=n.a).a.gc(),r=c.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),561)).b&&VBn(i),f+=(l=(t=i.a).a)+(u=t.b),h+=l*u;return s=e.Math.sqrt(400*o*h-4*h+f*f)+f,0==(a=2*(100*o-1))?s:s/a}function ZOn(n,t){0!=t.b&&(isNaN(n.s)?n.s=Gy((Px(0!=t.b),MD(t.a.a.c))):n.s=e.Math.min(n.s,Gy((Px(0!=t.b),MD(t.a.a.c)))),isNaN(n.c)?n.c=Gy((Px(0!=t.b),MD(t.c.b.c))):n.c=e.Math.max(n.c,Gy((Px(0!=t.b),MD(t.c.b.c)))))}function nAn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=JJ(i))return!0}else t=JJ(i);return!1}function tAn(n,t){var e,i,r,c;n.ej()?(e=n.i,c=n.fj(),c6(n,t),i=n.Zi(3,null,t,e,c),n.bj()?(r=n.cj(t,null),n.ij()&&(r=n.jj(t,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(c6(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function eAn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),++n.j,n.Hi(t,n.oi(t,e)),i=n.Zi(3,null,e,t,c),n.bj()&&(r=n.cj(e,null))?(r.Ei(i),r.Fi()):n.$i(i)):(++n.j,n.Hi(t,n.oi(t,e)),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function iAn(n){var t,e,i,r;for(r=n.length,t=null,i=0;i<r;i++)b1(i,n.length),GO(".*+?{[()|\\^$",YTn(e=n.charCodeAt(i)))>=0?(t||(t=new Pk,i>0&&cO(t,n.substr(0,i))),t.a+="\\",NX(t,e&QVn)):t&&NX(t,e&QVn);return t?t.a:n}function rAn(n){var t;if(!n.a)throw Hp(new Fy("IDataType class expected for layout option "+n.f));if(null==(t=I3(n.a)))throw Hp(new Fy("Couldn't create new instance of property '"+n.f+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return BB(t,414)}function cAn(n){var t,e,i,r,c;return(c=n.eh())&&c.kh()&&(r=tfn(n,c))!=c?(e=n.Vg(),i=(t=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-t,null,null),n.Rg(BB(r,49),e),i&&i.Fi(),n.Lg()&&n.Mg()&&e>-1&&ban(n,new nU(n,9,e,c,r)),r):c}function aAn(n){var t,e,i,r,c,a,u;for(c=0,r=n.f.e,e=0;e<r.c.length;++e)for(l1(e,r.c.length),a=BB(r.c[e],144),i=e+1;i<r.c.length;++i)l1(i,r.c.length),u=BB(r.c[i],144),t=W8(a.d,u.d)-n.a[a.b][u.b],c+=n.i[a.b][u.b]*t*t;return c}function uAn(n,t){var e;if(!Lx(t,(HXn(),kgt))&&(e=Ekn(BB(mMn(t,est),360),BB(mMn(n,kgt),163)),hon(t,est,e),!dAn(new oz(ZL(hbn(t).a.Kc(),new h)))))switch(e.g){case 1:hon(t,kgt,(Tbn(),_lt));break;case 2:hon(t,kgt,(Tbn(),Blt))}}function oAn(n,t){var e;mRn(n),n.a=(e=new ok,JT(new Rq(null,new w1(t.d,16)),new Od(e)),e),Mxn(n,BB(mMn(t.b,(HXn(),igt)),376)),kvn(n),OAn(n),$kn(n),jvn(n),jqn(n,t),JT(wnn(new Rq(null,Y0(SX(n.b).a)),new Wr),new Vr),t.a=!1,n.a=null}function sAn(){dMn.call(this,y6n,(tE(),dOt)),this.p=null,this.a=null,this.f=null,this.n=null,this.g=null,this.c=null,this.i=null,this.j=null,this.d=null,this.b=null,this.e=null,this.k=null,this.o=null,this.s=null,this.q=!1,this.r=!1}function hAn(){hAn=O,iAt=new MI(G1n,0),nAt=new MI("INSIDE_SELF_LOOPS",1),tAt=new MI("MULTI_EDGES",2),ZOt=new MI("EDGE_LABELS",3),eAt=new MI("PORTS",4),YOt=new MI("COMPOUND",5),QOt=new MI("CLUSTERS",6),JOt=new MI("DISCONNECTED",7)}function fAn(n,t){var e,i,r;if(0==t)return 0!=(1&n.a[0]);if(t<0)throw Hp(new Oy("Negative bit address"));if((r=t>>5)>=n.d)return n.e<0;if(e=n.a[r],t=1<<(31&t),n.e<0){if(r<(i=Ccn(n)))return!1;e=i==r?-e:~e}return 0!=(e&t)}function lAn(n,t,e,i){var r;BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),NH(r=XR(B$(BB(e.b,65).c),BB(i.b,65).c),HCn(BB(e.b,65),BB(i.b,65),r)),BB(i.b,65),BB(i.b,65),BB(i.b,65).c.a,r.a,BB(i.b,65).c.b,r.b,BB(i.b,65),Otn(i.a,new TB(n,t,i))}function bAn(n,t){var e,i,r,c,a,u,o;if(c=t.e)for(e=cAn(c),i=BB(n.g,674),a=0;a<n.i;++a)if(qvn(o=i[a])==e&&(!o.d&&(o.d=new $L(VAt,o,1)),r=o.d,(u=BB(e.ah(gKn(c,c.Cb,c.Db>>16)),15).Xc(c))<r.i))return bAn(n,BB(Wtn(r,u),87));return t}function wAn(n,t,e){var i,r=SWn,c=r[n],a=c instanceof Array?c[0]:null;c&&!a?MWn=c:(!(i=t&&t.prototype)&&(i=SWn[t]),(MWn=qJ(i)).hm=e,!t&&(MWn.im=I),r[n]=MWn);for(var u=3;u<arguments.length;++u)arguments[u].prototype=MWn;a&&(MWn.gm=a)}function dAn(n){for(var t;!BB(yX(n.a),47).Ob();){if(n.d=osn(n),!n.d)return!1;if(n.a=BB(n.d.Pb(),47),cL(n.a,39)){if(t=BB(n.a,39),n.a=t.a,!n.b&&(n.b=new Lp),d3(n.b,n.d),t.b)for(;!Wy(t.b);)d3(n.b,BB(gU(t.b),47));n.d=t.d}}return!0}function gAn(n,t){var e,i,r,c,a;for(c=null==t?0:n.b.se(t),i=null==(e=n.a.get(c))?new Array:e,a=0;a<i.length;a++)if(r=i[a],n.b.re(t,r.cd()))return 1==i.length?(i.length=0,vR(n.a,c)):i.splice(a,1),--n.c,oY(n.b),r.dd();return null}function pAn(n,t){var e,i,r,c;for(r=1,t.j=!0,c=null,i=new Wb(kbn(t));i.a<i.c.c.length;)e=BB(n0(i),213),n.c[e.c]||(n.c[e.c]=!0,c=Nbn(e,t),e.f?r+=pAn(n,c):c.j||e.a!=e.e.e-e.d.e||(e.f=!0,TU(n.p,e),r+=pAn(n,c)));return r}function vAn(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function mAn(n){var t,i,r,c,a;if(a=K_n(n,c=new Np),t=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(t.j);r.a<r.c.c.length;)GI(mMn(i=BB(n0(r),11),dlt))===GI(n)&&(a=e.Math.max(a,K_n(i,c)));return 0==c.c.length||hon(n,blt,a),-1!=a?c:null}function yAn(n,t,e){var i,r,c,a,u,o;r=(i=(c=BB(xq(t.e,0),17).c).i).k,u=(a=(o=BB(xq(e.g,0),17).d).i).k,r==(uSn(),Put)?hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)):hon(n,(hWn(),hlt),c),hon(n,(hWn(),flt),u==Put?BB(mMn(a,flt),11):o)}function kAn(n,t){var e,i,r,c;for(e=(c=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&wW(i.i,t))return r?r.a=i.a:n.b[e]=i.a,kk(i.c,i.f),iv(i.b,i.e),--n.f,++n.e,!0;return!1}function jAn(n,t){var e,i,r,c,a;return t&=63,(i=0!=((e=n.h)&CQn))&&(e|=-1048576),t<22?(a=e>>t,c=n.m>>t|e<<22-t,r=n.l>>t|n.m<<22-t):t<44?(a=i?PQn:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?PQn:0,c=i?SQn:0,r=e>>t-44),M$(r&SQn,c&SQn,a&PQn)}function EAn(n){var t,i,r,c,a,u;for(this.c=new Np,this.d=n,r=RQn,c=RQn,t=KQn,i=KQn,u=spn(n,0);u.b!=u.d.c;)a=BB(b3(u),8),r=e.Math.min(r,a.a),c=e.Math.min(c,a.b),t=e.Math.max(t,a.a),i=e.Math.max(i,a.b);this.a=new UV(r,c,t-r,i-c)}function TAn(n,t){var e,i,r,c;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)for((r=BB(n0(c),10)).k==(uSn(),Sut)&&hFn(r,t),e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)vun(BB(U5(e),17),t)}function MAn(n){var t,e,i;this.c=n,i=BB(mMn(n,(HXn(),Udt)),103),t=Gy(MD(mMn(n,Edt))),e=Gy(MD(mMn(n,Kpt))),i==(Ffn(),_Pt)||i==FPt||i==BPt?this.b=t*e:this.b=1/(t*e),this.j=Gy(MD(mMn(n,Apt))),this.e=Gy(MD(mMn(n,Opt))),this.f=n.b.c.length}function SAn(n){var t,e;for(n.e=x8(ANt,hQn,25,n.p.c.length,15,1),n.k=x8(ANt,hQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.e[t.p]=F3(new oz(ZL(fbn(t).a.Kc(),new h))),n.k[t.p]=F3(new oz(ZL(lbn(t).a.Kc(),new h)))}function PAn(n){var t,e,i,r,c;for(i=0,n.q=new Np,t=new Rv,c=new Wb(n.p);c.a<c.c.c.length;){for((r=BB(n0(c),10)).p=i,e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)TU(t,BB(U5(e),17).d.i);t.a.Bc(r),WB(n.q,new $q(t)),t.a.$b(),++i}}function CAn(){CAn=O,Okt=new WA(20),Ikt=new XA((sWn(),XSt),Okt),xkt=new XA(LPt,20),jkt=new XA(cSt,dZn),$kt=new XA(pPt,iln(1)),Nkt=new XA(kPt,(hN(),!0)),Ekt=lSt,Mkt=KSt,Skt=BSt,Pkt=qSt,Tkt=DSt,Ckt=USt,Akt=fPt,Ran(),Dkt=ykt,Lkt=vkt}function IAn(n,t){var e,i,r,c,a,u,o,s,h;if(n.a.f>0&&cL(t,42)&&(n.a.qj(),c=null==(o=(s=BB(t,42)).cd())?0:nsn(o),a=eR(n.a,c),e=n.a.d[a]))for(i=BB(e.g,367),h=e.i,u=0;u<h;++u)if((r=i[u]).Sh()==c&&r.Fb(s))return IAn(n,s),!0;return!1}function OAn(n){var t,e,i,r;for(r=BB(h6(n.a,(LEn(),Sst)),15).Kc();r.Ob();)iX(n,i=BB(r.Pb(),101),(e=(t=gz(i.k)).Hc((kUn(),sIt))?t.Hc(oIt)?t.Hc(SIt)?t.Hc(CIt)?null:$st:Nst:Lst:Ast)[0],(Crn(),xst),0),iX(n,i,e[1],Dst,1),iX(n,i,e[2],Rst,1)}function AAn(n,t){var e,i;Jxn(n,t,e=mKn(t)),iTn(n.a,BB(mMn(vW(t.b),(hWn(),Slt)),230)),b_n(n),DEn(n,t),i=x8(ANt,hQn,25,t.b.j.c.length,15,1),szn(n,t,(kUn(),sIt),i,e),szn(n,t,oIt,i,e),szn(n,t,SIt,i,e),szn(n,t,CIt,i,e),n.a=null,n.c=null,n.b=null}function $An(){$An=O,Sbn(),oEt=new $O(E4n,sEt=nEt),aEt=new $O(T4n,(hN(),!0)),iln(-1),iEt=new $O(M4n,iln(-1)),iln(-1),rEt=new $O(S4n,iln(-1)),uEt=new $O(P4n,!1),hEt=new $O(C4n,!0),cEt=new $O(I4n,!1),fEt=new $O(O4n,-1)}function LAn(n,t,e){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),sqn(n.e),!n.e&&(n.e=new hK(_Ot,n,7,4)),void pX(n.e,BB(e,14));case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),sqn(n.d),!n.d&&(n.d=new hK(_Ot,n,8,5)),void pX(n.d,BB(e,14))}zjn(n,t,e)}function NAn(n,t){var e,i,r,c,a;if(GI(t)===GI(n))return!0;if(!cL(t,15))return!1;if(a=BB(t,15),n.gc()!=a.gc())return!1;for(c=a.Kc(),i=n.Kc();i.Ob();)if(e=i.Pb(),r=c.Pb(),!(GI(e)===GI(r)||null!=e&&Nfn(e,r)))return!1;return!0}function xAn(n,t){var e,i,r,c;for((c=BB(P4(wnn(wnn(new Rq(null,new w1(t.b,16)),new Re),new Ke),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Jc(new _e),e=0,r=c.Kc();r.Ob();)-1==(i=BB(r.Pb(),11)).p&&FAn(n,i,e++)}function DAn(n){switch(n.g){case 0:return new Cf;case 1:return new lf;case 2:return new ff;case 3:return new jI;case 4:return new _G;default:throw Hp(new _y("No implementation is available for the node placer "+(null!=n.f?n.f:""+n.g)))}}function RAn(n){switch(n.g){case 0:return new KG;case 1:return new wf;case 2:return new rf;case 3:return new cf;case 4:return new TI;default:throw Hp(new _y("No implementation is available for the cycle breaker "+(null!=n.f?n.f:""+n.g)))}}function KAn(){KAn=O,mjt=new $O(u4n,iln(0)),yjt=new $O(o4n,0),Hsn(),djt=new $O(s4n,gjt=sjt),iln(0),wjt=new $O(h4n,iln(1)),Bcn(),kjt=new $O(f4n,jjt=Xjt),D9(),Ejt=new $O(l4n,Tjt=ajt),Omn(),pjt=new $O(b4n,vjt=qjt)}function _An(n,t,e){var i;i=null,t&&(i=t.d),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b+t.o.b+i.a+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b+t.o.b+i.a+e.b))}function FAn(n,t,e){var i,r,c;for(t.p=e,c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(c);)-1==(i=BB(U5(c),11)).p&&FAn(n,i,e);if(t.i.k==(uSn(),Put))for(r=new Wb(t.i.j);r.a<r.c.c.length;)(i=BB(n0(r),11))!=t&&-1==i.p&&FAn(n,i,e)}function BAn(n){var t,i,r,c,a;if(c=BB(P4($Z(a1(n)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),r=ZJn,c.gc()>=2)for(t=MD((i=c.Kc()).Pb());i.Ob();)a=t,t=MD(i.Pb()),r=e.Math.min(r,(kW(t),t-(kW(a),a)));return r}function HAn(n,t){var e,i,r,c,a;r5(i=new YT,t,i.c.b,i.c);do{for(Px(0!=i.b),e=BB(Atn(i,i.a.a),86),n.b[e.g]=1,c=spn(e.d,0);c.b!=c.d.c;)a=(r=BB(b3(c),188)).c,1==n.b[a.g]?DH(n.a,r):2==n.b[a.g]?n.b[a.g]=1:r5(i,a,i.c.b,i.c)}while(0!=i.b)}function qAn(n,t){var e,i,r;if(GI(t)===GI(yX(n)))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),(r=n.gc())!=i.gc())return!1;if(cL(i,54)){for(e=0;e<r;e++)if(!wW(n.Xb(e),i.Xb(e)))return!1;return!0}return Uvn(n.Kc(),i.Kc())}function GAn(n,t){var e;if(0!=n.c.length){if(2==n.c.length)hFn((l1(0,n.c.length),BB(n.c[0],10)),(Xyn(),jCt)),hFn((l1(1,n.c.length),BB(n.c[1],10)),ECt);else for(e=new Wb(n);e.a<e.c.c.length;)hFn(BB(n0(e),10),t);n.c=x8(Ant,HWn,1,0,5,1)}}function zAn(n){var t,e;if(2!=n.c.length)throw Hp(new Fy("Order only allowed for two paths."));l1(0,n.c.length),t=BB(n.c[0],17),l1(1,n.c.length),e=BB(n.c[1],17),t.d.i!=e.c.i&&(n.c=x8(Ant,HWn,1,0,5,1),n.c[n.c.length]=e,n.c[n.c.length]=t)}function UAn(n,t){var e,i,r,c,a;for(i=new v4,c=S4(new Jy(n.g)).a.ec().Kc();c.Ob();){if(!(r=BB(c.Pb(),10))){OH(t,"There are no classes in a balanced layout.");break}(e=BB(lnn(i,a=n.j[r.p]),15))||Jgn(i,a,e=new Np),e.Fc(r)}return i}function XAn(n,t,e){var i,r,c,a;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=x2(e,BB(r.Pb(),19).a))&&(a=Ken(R2(c,O6n),t),VW(n.f,a,c),q6n in c.a&&$in(a,R2(c,q6n)),STn(c,a),OCn(c,a))}function WAn(n,t){var e,i,r;for(OTn(t,"Port side processing",1),r=new Wb(n.a);r.a<r.c.c.length;)cBn(BB(n0(r),10));for(e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)cBn(BB(n0(i),10));HSn(t)}function VAn(n,t,e){var i,r,c,a,u;if(!(r=n.f)&&(r=BB(n.a.a.ec().Kc().Pb(),57)),Fkn(r,t,e),1!=n.a.a.gc())for(i=t*e,a=n.a.a.ec().Kc();a.Ob();)(c=BB(a.Pb(),57))!=r&&((u=f3(c)).f.d?(c.d.d+=i+fJn,c.d.a-=i+fJn):u.f.a&&(c.d.a-=i+fJn))}function QAn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w;return u=i-n,o=r-t,s=(a=e.Math.atan2(u,o))+JJn,h=a-JJn,f=c*e.Math.sin(s)+n,b=c*e.Math.cos(s)+t,l=c*e.Math.sin(h)+n,w=c*e.Math.cos(h)+t,u6(Pun(Gk(PMt,1),sVn,8,0,[new xC(f,b),new xC(l,w)]))}function YAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],o=Gy(n.p[l.p])+Gy(n.d[a.p])-a.d.d,(s=Ain(a,r))&&(h=n.g[s.p],u=Gy(n.p[h.p])+Gy(n.d[s.p])+s.o.b+s.d.a,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function JAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],u=Gy(n.p[l.p])+Gy(n.d[a.p])+a.o.b+a.d.a,(s=_un(a,r))&&(h=n.g[s.p],o=Gy(n.p[h.p])+Gy(n.d[s.p])-s.d.d,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function ZAn(n,t){var e,i;return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),null!=(i=cdn(n.o,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),vjn(n.o,t,e))),e)}function n$n(){n$n=O,ICt=new GC("H_LEFT",0),CCt=new GC("H_CENTER",1),ACt=new GC("H_RIGHT",2),DCt=new GC("V_TOP",3),xCt=new GC("V_CENTER",4),NCt=new GC("V_BOTTOM",5),$Ct=new GC("INSIDE",6),LCt=new GC("OUTSIDE",7),OCt=new GC("H_PRIORITY",8)}function t$n(n){var t,e,i,r,c,a,u;if((t=n.Hh(V9n))&&null!=(u=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"settingDelegates")))){for(e=new Np,c=0,a=(r=kKn(u,"\\w+")).length;c<a;++c)i=r[c],e.c[e.c.length]=i;return e}return SQ(),SQ(),set}function e$n(n,t){var e,i,r,c,a,u,o;if(!t.f)throw Hp(new _y("The input edge is not a tree edge."));for(c=null,r=DWn,i=new Wb(n.d);i.a<i.c.c.length;)u=(e=BB(n0(i),213)).d,o=e.e,FCn(n,u,t)&&!FCn(n,o,t)&&(a=o.e-u.e-e.a)<r&&(r=a,c=e);return c}function i$n(n){var t,e,i,r,c,a;if(!(n.f.e.c.length<=1)){t=0,r=aAn(n),e=RQn;do{for(t>0&&(r=e),a=new Wb(n.f.e);a.a<a.c.c.length;)qy(TD(mMn(c=BB(n0(a),144),(rkn(),yat))))||(i=Z_n(n,c),UR(kO(c.d),i));e=aAn(n)}while(!JX(n,t++,r,e))}}function r$n(n,t){var e,i,r;for(OTn(t,"Layer constraint preprocessing",1),e=new Np,r=new M2(n.a,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),Wun(i=BB(r.d.Xb(r.c=r.b++),10))&&(cTn(i),e.c[e.c.length]=i,fW(r));0==e.c.length||hon(n,(hWn(),nlt),e),HSn(t)}function c$n(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)r=(e=BB(n0(i),70)).n,n.a==(Oun(),mst)||n.i==(kUn(),oIt)?r.a=c:n.a==yst||n.i==(kUn(),CIt)?r.a=c+n.j.a-e.o.a:r.a=c+(n.j.a-e.o.a)/2,r.b=a,UR(r,t),a+=e.o.b+n.e}function a$n(n,t,e){var i,r,c,a;for(OTn(e,"Processor set coordinates",1),n.a=0==t.b.b?1:t.b.b,c=null,i=spn(t.b,0);!c&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(c=a,(r=a.e).a=BB(mMn(a,gkt),19).a,r.b=0);_Sn(n,xun(c),mcn(e,1)),HSn(e)}function u$n(n,t,e){var i,r,c;for(OTn(e,"Processor determine the height for each level",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&Zxn(n,u6(Pun(Gk(Yyt,1),tZn,86,0,[r])),e),HSn(e)}function o$n(n,t){var e,i,r,c,a;(c=D2(n,"individualSpacings"))&&(!P8(t,(sWn(),CPt))&&(e=new Yu,Ypn(t,CPt,e)),r=BB(ZAn(t,CPt),373),i=null,(a=c)&&(i=new TT(a,jrn(a,x8(Qtt,sVn,2,0,6,1)))),i&&e5(i,new dI(a,r)))}function s$n(n,t){var e,i,r,c,a,u;return c=null,(J6n in(a=n).a||Z6n in a.a||D6n in a.a)&&(u=qun(t),i=D2(a,J6n),Own(new Hg(u).a,i),r=D2(a,Z6n),Iwn(new Jg(u).a,r),e=N2(a,D6n),PEn(new tp(u).a,e),c=e),c}function h$n(n,t){var e,i,r;if(t===n)return!0;if(cL(t,543)){if(r=BB(t,835),n.a.d!=r.a.d||EV(n).gc()!=EV(r).gc())return!1;for(i=EV(r).Kc();i.Ob();)if(c1(n,(e=BB(i.Pb(),416)).a.cd())!=BB(e.a.dd(),14).gc())return!1;return!0}return!1}function f$n(n){var t,e,i,r;return t=i=BB(n.a,19).a,e=r=BB(n.b,19).a,0==i&&0==r?e-=1:-1==i&&r<=0?(t=0,e-=2):i<=0&&r>0?(t-=1,e-=1):i>=0&&r<0?(t+=1,e+=1):i>0&&r>=0?(t-=1,e+=1):(t+=1,e-=1),new rI(iln(t),iln(e))}function l$n(n,t){return n.c<t.c?-1:n.c>t.c?1:n.b<t.b?-1:n.b>t.b?1:n.a!=t.a?nsn(n.a)-nsn(t.a):n.d==(Q4(),Hmt)&&t.d==Bmt?-1:n.d==Bmt&&t.d==Hmt?1:0}function b$n(n,t){var e,i,r,c,a;return a=(c=t.a).c.i==t.b?c.d:c.c,i=c.c.i==t.b?c.c:c.d,(r=zwn(n.a,a,i))>0&&r<ZJn?(e=YAn(n.a,i.i,r,n.c),ren(n.a,i.i,-e),e>0):r<0&&-r<ZJn&&(e=JAn(n.a,i.i,-r,n.c),ren(n.a,i.i,e),e>0)}function w$n(n,t,e,i){var r,c,a,u,o,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Wb(n.c);s.a<s.c.c.length;)u=(o=BB(n0(s),33)).g,a=o.f,Pen(o,o.i+c*r),Cen(o,o.j+i*e),Sen(o,o.g+r),Men(o,n.a),++c,lCn(o,new xC(o.g,o.f),new xC(u,a))}function d$n(n){var t,e,i,r,c,a,u;if(null==n)return null;for(u=n.length,a=x8(NNt,v6n,25,r=(u+1)/2|0,15,1),u%2!=0&&(a[--r]=ZDn((b1(u-1,n.length),n.charCodeAt(u-1)))),e=0,i=0;e<r;++e)t=ZDn(fV(n,i++)),c=ZDn(fV(n,i++)),a[e]=(t<<4|c)<<24>>24;return a}function g$n(n){if(n.pe()){var t=n.c;return t.qe()?n.o="["+t.n:t.pe()?n.o="["+t.ne():n.o="[L"+t.ne()+";",n.b=t.me()+"[]",void(n.k=t.oe()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=Fdn(".",[e,Fdn("$",i)]),n.b=Fdn(".",[e,Fdn(".",i)]),n.k=i[i.length-1]}function p$n(n,t){var e,i,r,c,a;for(a=null,c=new Wb(n.e.a);c.a<c.c.c.length;)if((r=BB(n0(c),121)).b.a.c.length==r.g.a.c.length){for(i=r.e,a=ePn(r),e=r.e-BB(a.a,19).a+1;e<r.e+BB(a.b,19).a;e++)t[e]<t[i]&&(i=e);t[i]<t[r.e]&&(--t[r.e],++t[i],r.e=i)}}function v$n(n){var t,i,r,c,a,u,o;for(r=RQn,i=KQn,t=new Wb(n.e.b);t.a<t.c.c.length;)for(a=new Wb(BB(n0(t),29).a);a.a<a.c.c.length;)c=BB(n0(a),10),u=(o=Gy(n.p[c.p]))+Gy(n.b[n.g[c.p].p]),r=e.Math.min(r,o),i=e.Math.max(i,u);return i-r}function m$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=jKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function y$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=EKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function k$n(n,t,e){var i,r,c,a,u,o;if(a=new go,u=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj())for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&f9(a,r);else for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&(o=r.dd(),f9(a,e?FIn(n,t,c,a.i,o):o));return N3(a)}function j$n(n,t){var e,i,r,c;for(e=new Hbn(uht),$Pn(),r=0,c=(i=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;r<c;++r)wR(e,i[r],new Np);return JT($V(AV(wnn(new Rq(null,new w1(n.b,16)),new Ze),new ni),new hd(t)),new fd(e)),e}function E$n(n,t,i){var r,c,a,u,o,s,h,f;for(a=t.Kc();a.Ob();)s=(c=BB(a.Pb(),33)).i+c.g/2,f=c.j+c.f/2,o=s-((u=n.f).i+u.g/2),h=f-(u.j+u.f/2),r=e.Math.sqrt(o*o+h*h),o*=n.e/r,h*=n.e/r,i?(s-=o,f-=h):(s+=o,f+=h),Pen(c,s-c.g/2),Cen(c,f-c.f/2)}function T$n(n){var t,e,i;if(!n.c&&null!=n.b){for(t=n.b.length-4;t>=0;t-=2)for(e=0;e<=t;e+=2)(n.b[e]>n.b[e+2]||n.b[e]===n.b[e+2]&&n.b[e+1]>n.b[e+3])&&(i=n.b[e+2],n.b[e+2]=n.b[e],n.b[e]=i,i=n.b[e+3],n.b[e+3]=n.b[e+1],n.b[e+1]=i);n.c=!0}}function M$n(n,t){var e,i,r,c,a,u;for(c=(1==t?Wat:Xat).a.ec().Kc();c.Ob();)for(r=BB(c.Pb(),103),u=BB(h6(n.f.c,r),21).Kc();u.Ob();)switch(a=BB(u.Pb(),46),i=BB(a.b,81),e=BB(a.a,189).c,r.g){case 2:case 1:i.g.d+=e;break;case 4:case 3:i.g.c+=e}}function S$n(n,t){var e,i,r,c,a,u,o,s,h;for(s=-1,h=0,u=0,o=(a=n).length;u<o;++u){for(c=a[u],e=new kH(-1==s?n[0]:n[s],t,(Mhn(),uvt)),i=0;i<c.length;i++)for(r=i+1;r<c.length;r++)Lx(c[i],(hWn(),wlt))&&Lx(c[r],wlt)&&fXn(e,c[i],c[r])>0&&++h;++s}return h}function P$n(n){var t;return(t=new lN(nE(n.gm))).a+="@",oO(t,(nsn(n)>>>0).toString(16)),n.kh()?(t.a+=" (eProxyURI: ",uO(t,n.qh()),n.$g()&&(t.a+=" eClass: ",uO(t,n.$g())),t.a+=")"):n.$g()&&(t.a+=" (eClass: ",uO(t,n.$g()),t.a+=")"),t.a}function C$n(n){var t,e,i;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));for(n.d==(Ffn(),BPt)&&Tzn(n,_Pt),e=new Wb(n.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).g=t.i;for(i=new Wb(n.a.b);i.a<i.c.c.length;)BB(n0(i),57).i=KQn;return n.b.Le(n),n}function I$n(n,t){var e,i,r,c,a;if(t<2*n.b)throw Hp(new _y("The knot vector must have at least two time the dimension elements."));for(n.f=1,r=0;r<n.b;r++)WB(n.e,0);for(e=a=t+1-2*n.b,c=1;c<a;c++)WB(n.e,c/e);if(n.d)for(i=0;i<n.b;i++)WB(n.e,1)}function O$n(n,t){var e,i,r,c,a;if(c=t,!(a=BB(Uin(PX(n.i),c),33)))throw Hp(new ek("Unable to find elk node for json object '"+R2(c,q6n)+"' Panic!"));i=N2(c,"edges"),LIn((e=new uI(n,a)).a,e.b,i),r=N2(c,A6n),Dkn(new Ng(n).a,r)}function A$n(n,t,e,i){var r,c,a,u,o;if(null!=i){if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return u}else if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if(GI((a=BB(c[u],133)).cd())===GI(i))return u;return-1}function $$n(n,t){var e,i;return cL(e=null==t?qI(AY(n.f,null)):hS(n.g,t),235)?((i=BB(e,235)).Qh(),i):cL(e,498)?((i=BB(e,1938).a)&&(null==i.yb||(null==t?jCn(n.f,null,i):ubn(n.g,t,i))),i):null}function L$n(n){var t,e,i,r,c,a,u;if(KDn(),null==n)return null;if((r=n.length)%2!=0)return null;for(t=V7(n),e=x8(NNt,v6n,25,c=r/2|0,15,1),i=0;i<c;i++){if(-1==(a=QLt[t[2*i]]))return null;if(-1==(u=QLt[t[2*i+1]]))return null;e[i]=(a<<4|u)<<24>>24}return e}function N$n(n,t,e){var i,r,c;if(!(r=BB(oV(n.i,t),306)))if(r=new wtn(n.d,t,e),mG(n.i,t,r),agn(t))EL(n.a,t.c,t.b,r);else switch(c=LPn(t),i=BB(oV(n.p,c),244),c.g){case 1:case 3:r.j=!0,jy(i,t.b,r);break;case 4:case 2:r.k=!0,jy(i,t.c,r)}return r}function x$n(n,t,e,i){var r,c,a,u,o,s;if(u=new go,o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj())for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&f9(u,c);else for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&(s=c.dd(),f9(u,i?FIn(n,t,a,u.i,s):s));return Qwn(u,e)}function D$n(n,t){var i,r,c,a,u,o;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Wb(t.j);a.a<a.c.c.length;)for(i=new Wb(BB(n0(a),11).g);i.a<i.c.c.length;)t!=(o=BB(n0(i),17).d.i)&&(u=D$n(n,o),c=e.Math.max(c,u+1));return iwn(n,t,c),c}function R$n(n,t,e){var i,r,c;for(i=1;i<n.c.length;i++){for(l1(i,n.c.length),c=BB(n.c[i],10),r=i;r>0&&t.ue((l1(r-1,n.c.length),BB(n.c[r-1],10)),c)>0;)c5(n,r,(l1(r-1,n.c.length),BB(n.c[r-1],10))),--r;l1(r,n.c.length),n.c[r]=c}e.a=new xp,e.b=new xp}function K$n(n,t,e){var i,r,c,a,u,o,s;for(s=new YK(i=BB(t.e&&t.e(),9),BB(SR(i,i.length),9),0),a=0,u=(c=kKn(e,"[\\[\\]\\s,]+")).length;a<u;++a)if(0!=RMn(r=c[a]).length){if(null==(o=HIn(n,r)))return null;orn(s,BB(o,22))}return s}function _$n(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function F$n(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(kUn(),sIt)||t==oIt?(jtn(BB(Eon(n),15),(Xyn(),jCt)),jtn(BB(Eon(n),15),ECt)):(jtn(BB(Eon(n),15),(Xyn(),ECt)),jtn(BB(Eon(n),15),jCt));else for(i=new bV(n);i.a!=i.b;)jtn(BB(_hn(i),15),e)}function B$n(n,t){var e,i,r,c,a,u;for(a=new M2(i=HB(new sp(n)),i.c.length),u=new M2(r=HB(new sp(t)),r.c.length),c=null;a.b>0&&u.b>0&&(Px(a.b>0),e=BB(a.a.Xb(a.c=--a.b),33),Px(u.b>0),e==BB(u.a.Xb(u.c=--u.b),33));)c=e;return c}function H$n(n,t){var i,r,c,a;return c=n.a*aYn+1502*n.b,a=n.b*aYn+11,c+=i=e.Math.floor(a*uYn),a-=i*oYn,c%=oYn,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*Oet[t]):((r=n.a*(1<<t-24)+e.Math.floor(n.b*Aet[t]))>=2147483648&&(r-=XQn),r)}function q$n(n,t,e){var i,r,c,a;w0(n,t)>w0(n,e)?(i=abn(e,(kUn(),oIt)),n.d=i.dc()?0:uq(BB(i.Xb(0),11)),a=abn(t,CIt),n.b=a.dc()?0:uq(BB(a.Xb(0),11))):(r=abn(e,(kUn(),CIt)),n.d=r.dc()?0:uq(BB(r.Xb(0),11)),c=abn(t,oIt),n.b=c.dc()?0:uq(BB(c.Xb(0),11)))}function G$n(n){var t,e,i,r,c,a,u;if(n&&(t=n.Hh(V9n))&&null!=(a=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"conversionDelegates")))){for(u=new Np,r=0,c=(i=kKn(a,"\\w+")).length;r<c;++r)e=i[r],u.c[u.c.length]=e;return u}return SQ(),SQ(),set}function z$n(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=e*Gy(MD(r.b.We(Lrt))),r.e.b=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),sIt)?-i.rf().b-Gy(MD(i.We(aPt))):Gy(MD(i.We(aPt))):i.Hf()==(kUn(),sIt)?-i.rf().b:0}function U$n(n){var t,e,i,r,c,a,u,o;t=!0,r=null,c=null;n:for(o=new Wb(n.a);o.a<o.c.c.length;)for(i=new oz(ZL(fbn(u=BB(n0(o),10)).a.Kc(),new h));dAn(i);){if(e=BB(U5(i),17),r&&r!=u){t=!1;break n}if(r=u,a=e.c.i,c&&c!=a){t=!1;break n}c=a}return t}function X$n(n,t,e){var i,r,c,a,u,o;for(c=-1,u=-1,a=0;a<t.c.length&&(l1(a,t.c.length),!((r=BB(t.c[a],329)).c>n.c));a++)r.a>=n.s&&(c<0&&(c=a),u=a);return o=(n.s+n.c)/2,c>=0&&(o=qM((l1(i=YRn(n,t,c,u),t.c.length),BB(t.c[i],329))),lOn(t,i,e)),o}function W$n(){W$n=O,lEt=new XA((sWn(),cSt),1.3),gEt=jSt,IEt=new WA(15),CEt=new XA(XSt,IEt),$Et=new XA(LPt,15),bEt=hSt,jEt=KSt,EEt=BSt,TEt=qSt,kEt=DSt,MEt=USt,OEt=fPt,$An(),PEt=oEt,yEt=aEt,SEt=uEt,AEt=hEt,pEt=cEt,vEt=CSt,mEt=ISt,dEt=rEt,wEt=iEt,LEt=fEt}function V$n(n,t,e){var i,r,c,a,u;for(Bin(r=new jo,(kW(t),t)),!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),u=r.b,a=1;a<e.length;a+=2)vjn(u,e[a-1],e[a]);for(!n.Ab&&(n.Ab=new eU(KAt,n,0,3)),i=n.Ab,c=0;c<0;++c)i=mW(BB(Wtn(i,i.i-1),590));f9(i,r)}function Q$n(n,t,e){var i,r,c;for(LD.call(this,new Np),this.a=t,this.b=e,this.e=n,n.b&&VBn(n),i=n.a,this.d=JV(i.a,this.a),this.c=JV(i.b,this.b),obn(this,this.d,this.c),mIn(this),c=this.e.e.a.ec().Kc();c.Ob();)(r=BB(c.Pb(),266)).c.c.length>0&&xqn(this,r)}function Y$n(n,t,e,i,r,c){var a,u,o;if(!r[t.b]){for(r[t.b]=!0,!(a=i)&&(a=new y6),WB(a.e,t),o=c[t.b].Kc();o.Ob();)(u=BB(o.Pb(),282)).d!=e&&u.c!=e&&(u.c!=t&&Y$n(n,u.c,t,a,r,c),u.d!=t&&Y$n(n,u.d,t,a,r,c),WB(a.c,u),gun(a.d,u.b));return a}return null}function J$n(n){var t,e,i;for(t=0,e=new Wb(n.e);e.a<e.c.c.length;)o5(new Rq(null,new w1(BB(n0(e),17).b,16)),new pe)&&++t;for(i=new Wb(n.g);i.a<i.c.c.length;)o5(new Rq(null,new w1(BB(n0(i),17).b,16)),new ve)&&++t;return t>=2}function Z$n(n,t){var e,i,r,c;for(OTn(t,"Self-Loop pre-processing",1),i=new Wb(n.a);i.a<i.c.c.length;)Kbn(e=BB(n0(i),10))&&(c=new Ogn(e),hon(e,(hWn(),Olt),c),k_n(c),JT($V(wnn(new Rq(null,new w1((r=c).d,16)),new Hi),new qi),new Gi),ixn(r));HSn(t)}function nLn(n,t,e,i,r){var c,a,u,o,s;for(c=n.c.d.j,a=BB(Dpn(e,0),8),s=1;s<e.b;s++)o=BB(Dpn(e,s),8),r5(i,a,i.c.b,i.c),u=kL(UR(new wA(a),o),.5),UR(u,kL(new XZ(hsn(c)),r)),r5(i,u,i.c.b,i.c),a=o,c=0==t?Mln(c):Eln(c);DH(i,(Px(0!=e.b),BB(e.c.b.c,8)))}function tLn(n){return n$n(),!(Can(OJ(EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[LCt])),n))>1||Can(OJ(EG(ICt,Pun(Gk(GCt,1),$Vn,93,0,[CCt,ACt])),n))>1||Can(OJ(EG(DCt,Pun(Gk(GCt,1),$Vn,93,0,[xCt,NCt])),n))>1)}function eLn(n,t){var e,i,r;return(e=t.Hh(n.a))&&null!=(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"affiliation")))?-1==(i=mN(r,YTn(35)))?uln(n,az(n,Utn(t.Hj())),r):0==i?uln(n,null,r.substr(1)):uln(n,r.substr(0,i),r.substr(i+1)):null}function iLn(n){var t,e;try{return null==n?zWn:Bbn(n)}catch(i){if(cL(i=lun(i),102))return t=i,e=nE(tsn(n))+"@"+($T(),(evn(n)>>>0).toString(16)),Kgn(jun(),(lM(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+nE(t.gm)+">";throw Hp(i)}}function rLn(n){switch(n.g){case 0:return new of;case 1:return new ef;case 2:return new $M;case 3:return new Ic;case 4:return new RR;case 5:return new sf;default:throw Hp(new _y("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function cLn(n,t,e){var i,r,c;for(c=new Wb(n.t);c.a<c.c.c.length;)(i=BB(n0(c),268)).b.s<0&&i.c>0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&DH(t,i.b));for(r=new Wb(n.i);r.a<r.c.c.length;)(i=BB(n0(r),268)).a.s<0&&i.c>0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&DH(e,i.a))}function aLn(n){var t,e,i;if(null==n.g&&(n.d=n.si(n.f),f9(n,n.d),n.c))return n.f;if(i=(t=BB(n.g[n.i-1],47)).Pb(),n.e=t,(e=n.si(i)).Ob())n.d=e,f9(n,e);else for(n.d=null;!t.Ob()&&($X(n.g,--n.i,null),0!=n.i);)t=BB(n.g[n.i-1],47);return i}function uLn(n,t){var e,i,r,c,a,u;if(r=(i=t).ak(),$xn(n.e,r)){if(r.hi()&&G3(n,r,i.dd()))return!1}else for(u=axn(n.e.Tg(),r),e=BB(n.g,119),c=0;c<n.i;++c)if(a=e[c],u.rl(a.ak()))return!Nfn(a,i)&&(BB(ovn(n,c,t),72),!0);return f9(n,t)}function oLn(n,t,i,r){var c,a,u;for(Bl(c=new $vn(n),(uSn(),Sut)),hon(c,(hWn(),dlt),t),hon(c,Plt,r),hon(c,(HXn(),ept),(QEn(),XCt)),hon(c,hlt,t.c),hon(c,flt,t.d),zxn(t,c),u=e.Math.floor(i/2),a=new Wb(c.j);a.a<a.c.c.length;)BB(n0(a),11).n.b=u;return c}function sLn(n,t){var e,i,r,c,a,u,o,s,h;for(o=sx(n.c-n.b&n.a.length-1),s=null,h=null,c=new bV(n);c.a!=c.b;)r=BB(_hn(c),10),e=(u=BB(mMn(r,(hWn(),hlt)),11))?u.i:null,i=(a=BB(mMn(r,flt),11))?a.i:null,s==e&&h==i||(GAn(o,t),s=e,h=i),o.c[o.c.length]=r;GAn(o,t)}function hLn(n){var t,i,r,c,a,u;for(t=0,i=new Wb(n.a);i.a<i.c.c.length;)for(c=new oz(ZL(lbn(BB(n0(i),10)).a.Kc(),new h));dAn(c);)n==(r=BB(U5(c),17)).d.i.c&&r.c.j==(kUn(),CIt)&&(a=g1(r.c).b,u=g1(r.d).b,t=e.Math.max(t,e.Math.abs(u-a)));return t}function fLn(n,t,e){var i,r;OTn(e,"Remove overlaps",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),i=BB(ZAn(t,(wD(),Vkt)),33),n.f=i,n.a=Evn(BB(ZAn(t,(Uyn(),Rjt)),293)),ib(n,(kW(r=MD(ZAn(t,(sWn(),LPt)))),r)),Xzn(n,t,wDn(i),e),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function lLn(n,t,i){switch(i.g){case 1:return new xC(t.a,e.Math.min(n.d.b,t.b));case 2:return new xC(e.Math.max(n.c.a,t.a),t.b);case 3:return new xC(t.a,e.Math.max(n.c.b,t.b));case 4:return new xC(e.Math.min(t.a,n.d.a),t.b)}return new xC(t.a,t.b)}function bLn(n,t,e,i){var r,c,a,u,o,s,h,f,l;for(f=i?(kUn(),CIt):(kUn(),oIt),r=!1,s=0,h=(o=t[e]).length;s<h;++s)LK(BB(mMn(u=o[s],(HXn(),ept)),98))||(a=u.e,(l=!abn(u,f).dc()&&!!a)&&(c=qEn(a),n.b=new zEn(c,i?0:c.length-1)),r|=c_n(n,u,f,l));return r}function wLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).d&&(e.d=new hK(_Ot,e,8,5)),e.d));return yX(t),new OO(t)}function dLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).e&&(e.e=new hK(_Ot,e,7,4)),e.e));return yX(t),new OO(t)}function gLn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return HLt;if(45==t)return BLt}else if(3==e)return HLt;return bSn(i)}function pLn(n){var t,e,i,r;for(t=0,e=0,r=new Wb(n.j);r.a<r.c.c.length;)if(t=dG(rbn(t,q6(AV(new Rq(null,new w1((i=BB(n0(r),11)).e,16)),new Yc)))),e=dG(rbn(e,q6(AV(new Rq(null,new w1(i.g,16)),new Jc)))),t>1||e>1)return 2;return t+e==1?2:0}function vLn(n,t,e){var i,r,c,a;for(OTn(e,"ELK Force",1),qy(TD(ZAn(t,(fRn(),Wct))))||jJ(new Tw((GM(),new Dy(t)))),kkn(a=fon(t)),zon(n,BB(mMn(a,Gct),424)),r=(c=HFn(n.a,a)).Kc();r.Ob();)i=BB(r.Pb(),231),PKn(n.b,i,mcn(e,1/c.gc()));SUn(a=GUn(c)),HSn(e)}function mLn(n,t){var e,i,r;if(OTn(t,"Breaking Point Processor",1),Ozn(n),qy(TD(mMn(n,(HXn(),Gpt))))){for(i=new Wb(n.b);i.a<i.c.c.length;)for(e=0,r=new Wb(BB(n0(i),29).a);r.a<r.c.c.length;)BB(n0(r),10).p=e++;oHn(n),Hxn(n,!0),Hxn(n,!1)}HSn(t)}function yLn(n,t,e){var i,r,c,a,u;for(a=n.c,c=(e.q?e.q:(SQ(),SQ(),het)).vc().Kc();c.Ob();)r=BB(c.Pb(),42),!jE(AV(new Rq(null,new w1(a,16)),new aw(new LC(t,r)))).sd((dM(),tit))&&(cL(u=r.dd(),4)&&null!=(i=Jdn(u))&&(u=i),t.Ye(BB(r.cd(),146),u))}function kLn(n,t){var e,i,r,c;if(t){for(c=!(r=cL(n.Cb,88)||cL(n.Cb,99))&&cL(n.Cb,322),e=new AL((!t.a&&(t.a=new aG(t,VAt,t)),t.a));e.e!=e.i.gc();)if(i=lFn(BB(kpn(e),87)),r?cL(i,88):c?cL(i,148):i)return i;return r?(gWn(),d$t):(gWn(),l$t)}return null}function jLn(n,t){var e,i,r,c,a;for(OTn(t,"Constraints Postprocessor",1),c=0,r=new Wb(n.b);r.a<r.c.c.length;){for(a=0,i=new Wb(BB(n0(r),29).a);i.a<i.c.c.length;)(e=BB(n0(i),10)).k==(uSn(),Cut)&&(hon(e,(HXn(),jgt),iln(c)),hon(e,Bdt,iln(a)),++a);++c}HSn(t)}function ELn(n,t,e,i){var r,c,a,u,o,s;for(XR(u=new xC(e,i),BB(mMn(t,(qqn(),nkt)),8)),s=spn(t.b,0);s.b!=s.d.c;)UR((o=BB(b3(s),86)).e,u),DH(n.b,o);for(a=spn(t.a,0);a.b!=a.d.c;){for(r=spn((c=BB(b3(a),188)).a,0);r.b!=r.d.c;)UR(BB(b3(r),8),u);DH(n.a,c)}}function TLn(n,t,e){var i,r,c;if(!(c=Fqn((IPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));if(ZM(),!BB(c,66).Oj()&&!(c=Z1(B7(Z$t,c))))throw Hp(new _y(r6n+t.ne()+c6n));r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).ml(t,e)}function MLn(n,t){var e,i,r,c,a;for(e=new Np,r=wnn(new Rq(null,new w1(n,16)),new Ea),c=wnn(new Rq(null,new w1(n,16)),new Ta),a=M7(H6(LV(SNn(Pun(Gk(eit,1),HWn,833,0,[r,c])),new Ma))),i=1;i<a.length;i++)a[i]-a[i-1]>=2*t&&WB(e,new kB(a[i-1]+t,a[i]-t));return e}function SLn(n,t,e){OTn(e,"Eades radial",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),n.d=BB(ZAn(t,(wD(),Vkt)),33),n.c=Gy(MD(ZAn(t,(Uyn(),Djt)))),n.e=Evn(BB(ZAn(t,Rjt),293)),n.a=lwn(BB(ZAn(t,_jt),426)),n.b=qjn(BB(ZAn(t,$jt),340)),rjn(n),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function PLn(n,t,e){var i,r,c,a,u;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&($in(a=$3(n,(tE(),u=new Em,!!t&&BLn(u,t),u),r),R2(r,q6n)),STn(r,a),OCn(r,a),xon(n,r,a))}function CLn(n){var t,e,i,r;if(!n.j){if(r=new Io,null==(t=P$t).a.zc(n,t)){for(i=new AL(kY(n));i.e!=i.i.gc();)pX(r,CLn(e=BB(kpn(i),26))),f9(r,e);t.a.Bc(n)}chn(r),n.j=new NO((BB(Wtn(QQ((QX(),t$t).o),11),18),r.i),r.g),P5(n).b&=-33}return n.j}function ILn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return GLt;if(45==t)return qLt}else if(3==e)return GLt;return new Dv(i)}function OLn(n){var t,e,i;return 0!=((e=n.l)&e-1)||0!=((i=n.m)&i-1)||0!=((t=n.h)&t-1)||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?gin(e):0==t&&0!=i&&0==e?gin(i)+22:0!=t&&0==i&&0==e?gin(t)+44:-1}function ALn(n,t){var e,i,r,c;for(OTn(t,"Edge joining",1),e=qy(TD(mMn(n,(HXn(),Dpt)))),i=new Wb(n.b);i.a<i.c.c.length;)for(c=new M2(BB(n0(i),29).a,0);c.b<c.d.gc();)Px(c.b<c.d.gc()),(r=BB(c.d.Xb(c.c=c.b++),10)).k==(uSn(),Put)&&(rGn(r,e),fW(c));HSn(t)}function $Ln(n,t,e){var i;if(h2(n.b),CU(n.b,(Pbn(),HEt),(OM(),GTt)),CU(n.b,qEt,t.g),CU(n.b,GEt,t.a),n.a=$qn(n.b,t),OTn(e,"Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),51).pf(t,mcn(e,1));HSn(e)}function LLn(n,t){var e,i,r,c,a;for(r=t.a&n.f,c=null,i=n.b[r];;i=i.b){if(i==t){c?c.b=t.b:n.b[r]=t.b;break}c=i}for(a=t.f&n.f,c=null,e=n.c[a];;e=e.d){if(e==t){c?c.d=t.d:n.c[a]=t.d;break}c=e}t.e?t.e.c=t.c:n.a=t.c,t.c?t.c.e=t.e:n.e=t.e,--n.i,++n.g}function NLn(n){var t,i,r,c,a,u,o,s,h,f;for(i=n.o,t=n.p,u=DWn,c=_Vn,o=DWn,a=_Vn,h=0;h<i;++h)for(f=0;f<t;++f)vmn(n,h,f)&&(u=e.Math.min(u,h),c=e.Math.max(c,h),o=e.Math.min(o,f),a=e.Math.max(a,f));return s=c-u+1,r=a-o+1,new VV(iln(u),iln(o),iln(s),iln(r))}function xLn(n,t){var e,i,r,c;for(Px((c=new M2(n,0)).b<c.d.gc()),e=BB(c.d.Xb(c.c=c.b++),140);c.b<c.d.gc();)Px(c.b<c.d.gc()),r=new mH((i=BB(c.d.Xb(c.c=c.b++),140)).c,e.d,t),Px(c.b>0),c.a.Xb(c.c=--c.b),yR(c,r),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),r.a=!1,e=i}function DLn(n){var t,e,i,r,c;for(i=BB(mMn(n,(hWn(),Kft)),11),c=new Wb(n.j);c.a<c.c.c.length;){for(e=new Wb((r=BB(n0(c),11)).g);e.a<e.c.c.length;)return MZ(BB(n0(e),17),i),r;for(t=new Wb(r.e);t.a<t.c.c.length;)return SZ(BB(n0(t),17),i),r}return null}function RLn(n,t,i){var r,c;Vhn(r=fan(i.q.getTime()),0)<0?(c=VVn-dG(ldn(j7(r),VVn)))==VVn&&(c=0):c=dG(ldn(r,VVn)),1==t?xX(n,48+(c=e.Math.min((c+50)/100|0,9))&QVn):2==t?Enn(n,c=e.Math.min((c+5)/10|0,99),2):(Enn(n,c,3),t>3&&Enn(n,0,t-3))}function KLn(n){var t,e,i,r;return GI(mMn(n,(HXn(),sgt)))===GI((ufn(),pCt))?!n.e&&GI(mMn(n,Rdt))!==GI((Kan(),kft)):(i=BB(mMn(n,Kdt),292),r=qy(TD(mMn(n,Hdt)))||GI(mMn(n,qdt))===GI((Oin(),sht)),t=BB(mMn(n,Ddt),19).a,e=n.a.c.length,!r&&i!=(Kan(),kft)&&(0==t||t>e))}function _Ln(n){var t,e;for(e=0;e<n.c.length&&!(sq((l1(e,n.c.length),BB(n.c[e],113)))>0);e++);if(e>0&&e<n.c.length-1)return e;for(t=0;t<n.c.length&&!(sq((l1(t,n.c.length),BB(n.c[t],113)))>0);t++);return t>0&&e<n.c.length-1?t:n.c.length/2|0}function FLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=6&&t){if(vkn(n,t))throw Hp(new _y(w6n+ROn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,6,i)),(i=QD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,6,t,t))}function BLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(vkn(n,t))throw Hp(new _y(w6n+URn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?fkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,9,i)),(i=YD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,9,t,t))}function HLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+lHn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Mkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,12,i)),(i=VD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function qLn(n){var t,e,i,r,c;if(i=Ikn(n),null==(c=n.j)&&i)return n.$j()?null:i.zj();if(cL(i,148)){if((e=i.Aj())&&(r=e.Nh())!=n.i){if((t=BB(i,148)).Ej())try{n.g=r.Kh(t,c)}catch(a){if(!cL(a=lun(a),78))throw Hp(a);n.g=null}n.i=r}return n.g}return null}function GLn(n){var t;return WB(t=new Np,new xS(new xC(n.c,n.d),new xC(n.c+n.b,n.d))),WB(t,new xS(new xC(n.c,n.d),new xC(n.c,n.d+n.a))),WB(t,new xS(new xC(n.c+n.b,n.d+n.a),new xC(n.c+n.b,n.d))),WB(t,new xS(new xC(n.c+n.b,n.d+n.a),new xC(n.c,n.d+n.a))),t}function zLn(n,t,e,i){var r,c,a;if(a=Ajn(t,e),i.c[i.c.length]=t,-1==n.j[a.p]||2==n.j[a.p]||n.a[t.p])return i;for(n.j[a.p]=-1,c=new oz(ZL(hbn(a).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&(b5(r)||r.c.i.c!=r.d.i.c)&&r!=t)return zLn(n,r,a,i);return i}function ULn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=BB(r.Pb(),79),!BB(RX(n.b,i),266)&&(JJ(PMn(i))==JJ(OMn(i))?tDn(n,i,e):PMn(i)==JJ(OMn(i))?null==RX(n.c,i)&&null!=RX(n.b,OMn(i))&&rzn(n,i,e,!1):null==RX(n.d,i)&&null!=RX(n.b,PMn(i))&&rzn(n,i,e,!0))}function XLn(n,t){var e,i,r,c,a,u,o;for(r=n.Kc();r.Ob();)for(i=BB(r.Pb(),10),CZ(u=new CSn,i),qCn(u,(kUn(),oIt)),hon(u,(hWn(),jlt),(hN(),!0)),a=t.Kc();a.Ob();)c=BB(a.Pb(),10),CZ(o=new CSn,c),qCn(o,CIt),hon(o,jlt,!0),hon(e=new wY,jlt,!0),SZ(e,u),MZ(e,o)}function WLn(n,t,e,i){var r,c,a,u;r=Adn(n,t,e),c=Adn(n,e,t),a=BB(RX(n.c,t),112),u=BB(RX(n.c,e),112),r<c?new zZ((O6(),Myt),a,u,c-r):c<r?new zZ((O6(),Myt),u,a,r-c):(0!=r||t.i&&e.i&&i[t.i.c][e.i.c])&&(new zZ((O6(),Myt),a,u,0),new zZ(Myt,u,a,0))}function VLn(n,t){var e,i,r,c,a,u;for(r=0,a=new Wb(t.a);a.a<a.c.c.length;)for(r+=(c=BB(n0(a),10)).o.b+c.d.a+c.d.d+n.e,i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)(e=BB(U5(i),17)).c.i.k==(uSn(),Iut)&&(r+=(u=BB(mMn(e.c.i,(hWn(),dlt)),10)).o.b+u.d.a+u.d.d);return r}function QLn(n,t,e){var i,r,c,a,u,o,s;for(c=new Np,OBn(n,s=new YT,a=new YT,t),Ezn(n,s,a,t,e),o=new Wb(n);o.a<o.c.c.length;)for(r=new Wb((u=BB(n0(o),112)).k);r.a<r.c.c.length;)i=BB(n0(r),129),(!t||i.c==(O6(),Tyt))&&u.g>i.b.g&&(c.c[c.c.length]=i);return c}function YLn(){YLn=O,DEt=new jC("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),xEt=new jC("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),KEt=new jC("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),REt=new jC("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),_Et=new jC("WHOLE_DRAWING",4)}function JLn(n,t){if(cL(t,239))return hln(n,BB(t,33));if(cL(t,186))return Dln(n,BB(t,118));if(cL(t,354))return tQ(n,BB(t,137));if(cL(t,352))return JFn(n,BB(t,79));if(t)return null;throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function ZLn(n){var t,e,i,r,c,a,u;for(c=new YT,r=new Wb(n.d.a);r.a<r.c.c.length;)0==(i=BB(n0(r),121)).b.a.c.length&&r5(c,i,c.c.b,c.c);if(c.b>1)for(t=AN((e=new qv,++n.b,e),n.d),u=spn(c,0);u.b!=u.d.c;)a=BB(b3(u),121),UNn(aM(cM(uM(rM(new Hv,1),0),t),a))}function nNn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=11&&t){if(vkn(n,t))throw Hp(new _y(w6n+zRn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,10,i)),(i=zR(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,t,t))}function tNn(n){var t,e,i,r;for(i=new usn(new Pb(n.b).a);i.b;)r=BB((e=ten(i)).cd(),11),hon(t=BB(e.dd(),10),(hWn(),dlt),r),hon(r,Elt,t),hon(r,elt,(hN(),!0)),qCn(r,BB(mMn(t,Qft),61)),mMn(t,Qft),hon(r.i,(HXn(),ept),(QEn(),VCt)),BB(mMn(vW(r.i),Zft),21).Fc((bDn(),dft))}function eNn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Wb(n.d.i.j);c.a<c.c.c.length;)i+=BB(n0(c),11).e.c.length;else i=1;if(n.d)for(c=new Wb(n.c.i.j);c.a<c.c.c.length;)r+=BB(n0(c),11).g.c.length;else r=1;return(e+t)/2+.4*CJ(HH(r-i))*(e-t)}function iNn(n){var t,e;if(LEn(),n.Hc((kUn(),PIt)))throw Hp(new _y("Port sides must not contain UNDEFINED"));switch(n.gc()){case 1:return Mst;case 2:return t=n.Hc(oIt)&&n.Hc(CIt),e=n.Hc(sIt)&&n.Hc(SIt),t||e?Cst:Pst;case 3:return Sst;case 4:return Tst;default:return null}}function rNn(n,t,e){var i,r,c,a;for(OTn(e,"Breaking Point Removing",1),n.a=BB(mMn(t,(HXn(),Zdt)),218),r=new Wb(t.b);r.a<r.c.c.length;)for(a=new Wb(a0(BB(n0(r),29).a));a.a<a.c.c.length;)Jnn(c=BB(n0(a),10))&&!(i=BB(mMn(c,(hWn(),Rft)),305)).d&&zUn(n,i);HSn(e)}function cNn(n,t,e){return jDn(),(!Dcn(n,t)||!Dcn(n,e))&&(mzn(new xC(n.c,n.d),new xC(n.c+n.b,n.d),t,e)||mzn(new xC(n.c+n.b,n.d),new xC(n.c+n.b,n.d+n.a),t,e)||mzn(new xC(n.c+n.b,n.d+n.a),new xC(n.c,n.d+n.a),t,e)||mzn(new xC(n.c,n.d+n.a),new xC(n.c,n.d),t,e))}function aNn(n,t){var e,i,r,c;if(!n.dc())for(e=0,i=n.gc();e<i;++e)if(null==(c=SD(n.Xb(e)))?null==t:mK(c.substr(0,3),"!##")?null!=t&&(r=t.length,!mK(c.substr(c.length-r,r),t)||c.length!=t.length+3)&&!mK(S7n,t):mK(c,P7n)&&!mK(S7n,t)||mK(c,t))return!0;return!1}function uNn(n,t,e,i){var r,c,a,u,o,s;for(a=n.j.c.length,o=x8(art,rJn,306,a,0,1),u=0;u<a;u++)(c=BB(xq(n.j,u),11)).p=u,o[u]=hOn(mAn(c),e,i);for(VNn(n,o,e,t,i),s=new xp,r=0;r<o.length;r++)o[r]&&VW(s,BB(xq(n.j,r),11),o[r]);s.f.c+s.g.c!=0&&(hon(n,(hWn(),zft),s),ASn(n,o))}function oNn(n,t,e){var i,r;for(i=new Wb(n.a.b);i.a<i.c.c.length;)if((r=f2(BB(n0(i),57)))&&r.k==(uSn(),Mut))switch(BB(mMn(r,(hWn(),Qft)),61).g){case 4:r.n.a=t.a;break;case 2:r.n.a=e.a-(r.o.a+r.d.c);break;case 1:r.n.b=t.b;break;case 3:r.n.b=e.b-(r.o.b+r.d.a)}}function sNn(){sNn=O,Ivt=new HP(QZn,0),Tvt=new HP("NIKOLOV",1),Pvt=new HP("NIKOLOV_PIXEL",2),Mvt=new HP("NIKOLOV_IMPROVED",3),Svt=new HP("NIKOLOV_IMPROVED_PIXEL",4),Evt=new HP("DUMMYNODE_PERCENTAGE",5),Cvt=new HP("NODECOUNT_PERCENTAGE",6),Ovt=new HP("NO_BOUNDARY",7)}function hNn(n,t,e){var i,r,c;if(!(r=BB(ZAn(t,(SMn(),UMt)),19))&&(r=iln(0)),!(c=BB(ZAn(e,UMt),19))&&(c=iln(0)),r.a>c.a)return-1;if(r.a<c.a)return 1;if(n.a){if(0!=(i=Pln(t.j,e.j)))return i;if(0!=(i=Pln(t.i,e.i)))return i}return Pln(t.g*t.f,e.g*e.f)}function fNn(n,t){var e,i,r,c,a,u,o,s,h,f;if(++n.e,t>(o=null==n.d?0:n.d.length)){for(h=n.d,n.d=x8(oAt,c9n,63,2*o+4,0,1),c=0;c<o;++c)if(s=h[c])for(i=s.g,f=s.i,u=0;u<f;++u)a=eR(n,(r=BB(i[u],133)).Sh()),!(e=n.d[a])&&(e=n.d[a]=n.uj()),e.Fc(r);return!0}return!1}function lNn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak()))throw Hp(new _y(I7n));sln(n,t,e)}function bNn(n,t){var e,i,r,c,a,u;for(e=BB(mMn(t,(hWn(),Xft)),21),a=BB(h6((RXn(),fut),e),21),u=BB(h6(put,e),21),c=a.Kc();c.Ob();)if(i=BB(c.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;for(r=u.Kc();r.Ob();)if(i=BB(r.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;return!0}function wNn(n,t){var e,i,r;for(OTn(t,"Partition postprocessing",1),e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)for(r=new Wb(BB(n0(i),10).j);r.a<r.c.c.length;)qy(TD(mMn(BB(n0(r),11),(hWn(),jlt))))&&AU(r);HSn(t)}function dNn(n,t){var e,i,r,c,a,u,o;if(1==n.a.c.length)return FSn(BB(xq(n.a,0),187),t);for(r=cfn(n),a=0,u=n.d,i=r,o=n.d,c=(u-i)/2+i;i+1<u;){for(a=0,e=new Wb(n.a);e.a<e.c.c.length;)a+=cHn(BB(n0(e),187),c,!1).a;a<t?(o=c,u=c):i=c,c=(u-i)/2+i}return o}function gNn(n){var t,e,i,r;return isNaN(n)?(X7(),gtt):n<-0x8000000000000000?(X7(),wtt):n>=0x8000000000000000?(X7(),btt):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=OQn&&(n-=(e=CJ(n/OQn))*OQn),t=0,n>=IQn&&(n-=(t=CJ(n/IQn))*IQn),r=M$(CJ(n),t,e),i&&Oon(r),r)}function pNn(n,t){var e,i,r,c;for(e=!t||!n.u.Hc((lIn(),eIt)),c=0,r=new Wb(n.e.Cf());r.a<r.c.c.length;){if((i=BB(n0(r),838)).Hf()==(kUn(),PIt))throw Hp(new _y("Label and node size calculator can only be used with ports that have port sides assigned."));i.vf(c++),Whn(n,i,e)}}function vNn(n,t){var e,i,r,c;return(i=t.Hh(n.a))&&(!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),null!=(e=SD(cdn(i.b,J9n)))&&cL(c=-1==(r=e.lastIndexOf("#"))?uD(n,t.Aj(),e):0==r?M9(n,null,e.substr(1)):M9(n,e.substr(0,r),e.substr(r+1)),148))?BB(c,148):null}function mNn(n,t){var e,i,r,c;return(e=t.Hh(n.a))&&(!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),null!=(r=SD(cdn(e.b,k7n)))&&cL(c=-1==(i=r.lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148))?BB(c,148):null}function yNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),307)).j=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),57)).b),(!t.j||i.d.c<t.j.d.c)&&(t.j=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),57)).b.a=i.d.c-t.j.d.c,i.b.b=i.d.d-t.j.d.d}return n}function kNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),189)).f=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),81)).e),(!t.f||i.g.c<t.f.g.c)&&(t.f=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),81)).e.a=i.g.c-t.f.g.c,i.e.b=i.g.d-t.f.g.d}return n}function jNn(n){var t,i,r;return i=BB(n.a,19).a,r=BB(n.b,19).a,i<(t=e.Math.max(e.Math.abs(i),e.Math.abs(r)))&&r==-t?new rI(iln(i+1),iln(r)):i==t&&r<t?new rI(iln(i),iln(r+1)):i>=-t&&r==t?new rI(iln(i-1),iln(r)):new rI(iln(i),iln(r-1))}function ENn(){return lWn(),Pun(Gk(ust,1),$Vn,77,0,[rot,tot,cot,kot,Fot,Mot,Uot,Oot,Kot,got,Not,Iot,_ot,lot,Wot,Vut,Lot,Hot,jot,Bot,Qot,Dot,Qut,Rot,Yot,Got,Vot,Eot,sot,Tot,yot,Xot,Zut,uot,Pot,Jut,Cot,vot,bot,Aot,dot,eot,not,mot,wot,$ot,zot,Yut,xot,pot,Sot,hot,oot,qot,aot,fot,iot])}function TNn(n,t,e){n.d=0,n.b=0,t.k==(uSn(),Iut)&&e.k==Iut&&BB(mMn(t,(hWn(),dlt)),10)==BB(mMn(e,dlt),10)&&(S7(t).j==(kUn(),sIt)?q$n(n,t,e):q$n(n,e,t)),t.k==Iut&&e.k==Put?S7(t).j==(kUn(),sIt)?n.d=1:n.b=1:e.k==Iut&&t.k==Put&&(S7(e).j==(kUn(),sIt)?n.b=1:n.d=1),umn(n,t,e)}function MNn(n){var t,e,i,r,c;return c=ATn(n),null!=n.a&&AH(c,"category",n.a),!WE(new Cb(n.d))&&(rtn(c,"knownOptions",i=new Cl),t=new ep(i),e5(new Cb(n.d),t)),!WE(n.g)&&(rtn(c,"supportedFeatures",r=new Cl),e=new ip(r),e5(n.g,e)),c}function SNn(n){var t,e,i,r,c,a,u,o;for(t=336,e=0,r=new sR(n.length),u=0,o=(a=n).length;u<o;++u)Qln(c=a[u]),EW(c),i=c.a,WB(r.a,yX(i)),t&=i.qd(),e=Ysn(e,i.rd());return BB(BB(XU(new Rq(null,qTn(new w1((WX(),Nwn(r.a)),16),new k,t,e)),new El(n)),670),833)}function PNn(n,t){var e;n.d&&(t.c!=n.e.c||fcn(n.e.b,t.b))&&(WB(n.f,n.d),n.a=n.d.c+n.d.b,n.d=null,n.e=null),nA(t.b)?n.c=t:n.b=t,(t.b==(Aun(),Zat)&&!t.a||t.b==nut&&t.a||t.b==tut&&t.a||t.b==eut&&!t.a)&&n.c&&n.b&&(e=new UV(n.a,n.c.d,t.c-n.a,n.b.d-n.c.d),n.d=e,n.e=t)}function CNn(n){var t;if(Ym.call(this),this.i=new lu,this.g=n,this.f=BB(n.e&&n.e(),9).length,0==this.f)throw Hp(new _y("There must be at least one phase in the phase enumeration."));this.c=new YK(t=BB(Vj(this.g),9),BB(SR(t,t.length),9),0),this.a=new B2,this.b=new xp}function INn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=7&&t){if(vkn(n,t))throw Hp(new _y(w6n+cPn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,1,DOt,i)),(i=VG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,t,t))}function ONn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+Vfn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?bkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,0,BOt,i)),(i=QG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function ANn(n,t){var e,i,r,c,a,u,o,s,h;return $On(),t.d>n.d&&(u=n,n=t,t=u),t.d<63?Xxn(n,t):(s=z5(n,a=(-2&n.d)<<4),h=z5(t,a),i=uBn(n,G5(s,a)),r=uBn(t,G5(h,a)),o=ANn(s,h),e=ANn(i,r),c=G5(c=$Hn($Hn(c=ANn(uBn(s,i),uBn(r,h)),o),e),a),$Hn($Hn(o=G5(o,a<<1),c),e))}function $Nn(n,t,e){var i,r,c,a,u;for(a=Lfn(n,e),u=x8(Out,a1n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)qy(TD(mMn(r=BB(c.Pb(),11),(hWn(),elt))))&&(u[i++]=BB(mMn(r,Elt),10));if(i<t.length)throw Hp(new Fy("Expected "+t.length+" hierarchical ports, but found only "+i+"."));return u}function LNn(n,t){var e,i,r,c,a,u;if(!n.tb){for(!n.rb&&(n.rb=new Jz(n,HAt,n)),u=new XT((c=n.rb).i),r=new AL(c);r.e!=r.i.gc();)i=BB(kpn(r),138),(e=BB(null==(a=i.ne())?jCn(u.f,null,i):ubn(u.g,a,i),138))&&(null==a?jCn(u.f,null,e):ubn(u.g,a,e));n.tb=u}return BB(SJ(n.tb,t),138)}function NNn(n,t){var e,i,r,c,a;if((null==n.i&&qFn(n),n.i).length,!n.p){for(a=new XT(1+(3*n.g.i/2|0)),r=new ax(n.g);r.e!=r.i.gc();)i=BB(jpn(r),170),(e=BB(null==(c=i.ne())?jCn(a.f,null,i):ubn(a.g,c,i),170))&&(null==c?jCn(a.f,null,e):ubn(a.g,c,e));n.p=a}return BB(SJ(n.p,t),170)}function xNn(n,t,e,i,r){var c,a,u,o;for(wgn(i+CY(e,e.$d()),r),tW(t,Lwn(e)),(c=e.f)&&xNn(n,t,c,"Caused by: ",!1),null==e.k&&(e.k=x8(Jnt,sVn,78,0,0,1)),u=0,o=(a=e.k).length;u<o;++u)xNn(n,t,a[u],"Suppressed: ",!1);null!=console.groupEnd&&console.groupEnd.call(console)}function DNn(n,t,e,i){var r,c,a,u;for(a=(u=t.e).length,c=t.q._f(u,e?0:a-1,e),c|=gRn(n,u[e?0:a-1],e,i),r=e?1:a-2;e?r<a:r>=0;r+=e?1:-1)c|=t.c.Sf(u,r,e,i&&!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,(hWn(),Ilt))))),c|=t.q._f(u,r,e),c|=gRn(n,u[r],e,i);return TU(n.c,t),c}function RNn(n,t,e){var i,r,c,a,u,o,s,h;for(s=0,h=(o=I2(n.j)).length;s<h;++s){if(u=o[s],e==(ain(),Hvt)||e==Gvt)for(c=0,a=(r=Z0(u.g)).length;c<a;++c)OSn(t,i=r[c])&&tBn(i,!0);if(e==qvt||e==Gvt)for(c=0,a=(r=Z0(u.e)).length;c<a;++c)ISn(t,i=r[c])&&tBn(i,!0)}}function KNn(n){var t,e;switch(t=null,e=null,eEn(n).g){case 1:kUn(),t=oIt,e=CIt;break;case 2:kUn(),t=SIt,e=sIt;break;case 3:kUn(),t=CIt,e=oIt;break;case 4:kUn(),t=sIt,e=SIt}Gl(n,BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)),ql(n,BB($N(Iz(BB(h6(n.k,e),15).Oc(),Qst)),113))}function _Nn(n){var t,e,i,r,c,a;if((r=BB(xq(n.j,0),11)).e.c.length+r.g.c.length==0)n.n.a=0;else{for(a=0,i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(r),new Gw(r)])));dAn(i);)a+=(e=BB(U5(i),11)).i.n.a+e.n.a+e.a.a;c=(t=BB(mMn(n,(HXn(),npt)),8))?t.a:0,n.n.a=a/(r.e.c.length+r.g.c.length)-c}}function FNn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)e=BB(n0(i),221),LG(BB(e.b,65),XR(B$(BB(t.b,65).c),BB(t.b,65).a)),(r=Y_n(BB(t.b,65).b,BB(e.b,65).b))>1&&(n.a=!0),NG(BB(e.b,65),UR(B$(BB(t.b,65).c),kL(XR(B$(BB(e.b,65).a),BB(t.b,65).a),r))),QZ(n,t),FNn(n,e)}function BNn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),189)).e=0,e.d.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),189)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),81).f.Kc();a.Ob();)(c=BB(a.Pb(),81)).d!=e&&(TU(e.d,c),++c.d.e)}function HNn(n){var t,e,i,r,c,a,u,o;for(e=0,t=o=n.j.c.length,r=2*o,u=new Wb(n.j);u.a<u.c.c.length;)switch((a=BB(n0(u),11)).j.g){case 2:case 4:a.p=-1;break;case 1:case 3:i=a.e.c.length,c=a.g.c.length,a.p=i>0&&c>0?t++:i>0?e++:c>0?r++:e++}SQ(),m$(n.j,new bi)}function qNn(n){var t,e;e=null,t=BB(xq(n.g,0),17);do{if(Lx(e=t.d.i,(hWn(),flt)))return BB(mMn(e,flt),11).i;if(e.k!=(uSn(),Cut)&&dAn(new oz(ZL(lbn(e).a.Kc(),new h))))t=BB(U5(new oz(ZL(lbn(e).a.Kc(),new h))),17);else if(e.k!=Cut)return null}while(e&&e.k!=(uSn(),Cut));return e}function GNn(n,t){var e,i,r,c,a,u,o,s,h;for(u=t.j,a=t.g,o=BB(xq(u,u.c.length-1),113),l1(0,u.c.length),s=Zmn(n,a,o,h=BB(u.c[0],113)),c=1;c<u.c.length;c++)l1(c-1,u.c.length),e=BB(u.c[c-1],113),l1(c,u.c.length),(i=Zmn(n,a,e,r=BB(u.c[c],113)))>s&&(o=e,h=r,s=i);t.a=h,t.c=o}function zNn(n,t){var e;if(!ZU(n.b,t.b))throw Hp(new Fy("Invalid hitboxes for scanline constraint calculation."));(kun(t.b,BB(MR(n.b,t.b),57))||kun(t.b,BB(TR(n.b,t.b),57)))&&($T(),t.b),n.a[t.b.f]=BB(kK(n.b,t.b),57),(e=BB(yK(n.b,t.b),57))&&(n.a[e.f]=t.b)}function UNn(n){if(!n.a.d||!n.a.e)throw Hp(new Fy((ED(Hit),Hit.k+" must have a source and target "+(ED(qit),qit.k+" specified."))));if(n.a.d==n.a.e)throw Hp(new Fy("Network simplex does not support self-loops: "+n.a+" "+n.a.d+" "+n.a.e));return RN(n.a.d.g,n.a),RN(n.a.e.b,n.a),n.a}function XNn(n,t,e){var i,r,c,a,u,o,s;for(s=new dE(new Jd(n)),u=0,o=(a=Pun(Gk(Gut,1),u1n,11,0,[t,e])).length;u<o;++u)for(c=a[u],Mon(s.a,c,(hN(),ptt)),r=new m6(c.b);y$(r.a)||y$(r.b);)(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==i.d||ZU(s,c==i.c?i.d:i.c);return yX(s),new t_(s)}function WNn(n,t,e){var i,r,c,a,u,o;if(i=0,0!=t.b&&0!=e.b){c=spn(t,0),a=spn(e,0),u=Gy(MD(b3(c))),o=Gy(MD(b3(a))),r=!0;do{if(u>o-n.b&&u<o+n.b)return-1;u>o-n.a&&u<o+n.a&&++i,u<=o&&c.b!=c.d.c?u=Gy(MD(b3(c))):o<=u&&a.b!=a.d.c?o=Gy(MD(b3(a))):r=!1}while(r)}return i}function VNn(n,t,e,i,r){var c,a,u,o;for(o=new YK(c=BB(Vj(FIt),9),BB(SR(c,c.length),9),0),u=new Wb(n.j);u.a<u.c.c.length;)t[(a=BB(n0(u),11)).p]&&(BUn(a,t[a.p],i),orn(o,a.j));r?(GEn(n,t,(kUn(),oIt),2*e,i),GEn(n,t,CIt,2*e,i)):(GEn(n,t,(kUn(),sIt),2*e,i),GEn(n,t,SIt,2*e,i))}function QNn(n){var t,e,i,r,c;if(c=new Np,Otn(n.b,new kw(c)),n.b.c=x8(Ant,HWn,1,0,5,1),0!=c.c.length){for(l1(0,c.c.length),t=BB(c.c[0],78),e=1,i=c.c.length;e<i;++e)l1(e,c.c.length),(r=BB(c.c[e],78))!=t&>n(t,r);if(cL(t,60))throw Hp(BB(t,60));if(cL(t,289))throw Hp(BB(t,289))}}function YNn(n,t){var e,i,r,c;for(n=null==n?zWn:(kW(n),n),e=new Ik,c=0,i=0;i<t.length&&-1!=(r=n.indexOf("%s",c));)oO(e,n.substr(c,r-c)),uO(e,t[i++]),c=r+2;if(oO(e,n.substr(c)),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function JNn(n){var t,e,i,r;for(t=0,r=(i=n.length)-4,e=0;e<r;)b1(e+3,n.length),t=n.charCodeAt(e+3)+(b1(e+2,n.length),31*(n.charCodeAt(e+2)+(b1(e+1,n.length),31*(n.charCodeAt(e+1)+(b1(e,n.length),31*(n.charCodeAt(e)+31*t)))))),t|=0,e+=4;for(;e<i;)t=31*t+fV(n,e++);return t|=0}function ZNn(n){var t;for(t=new oz(ZL(lbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).d.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST, but has at least one outgoing edge that does not go to a LAST_SEPARATE node. That must not happen."))}function nxn(n,t,i,r){var c,a,u,o,s,f,l;for(o=0,s=new Wb(n.a);s.a<s.c.c.length;){for(u=0,a=new oz(ZL(fbn(BB(n0(s),10)).a.Kc(),new h));dAn(a);)f=g1((c=BB(U5(a),17)).c).b,l=g1(c.d).b,u=e.Math.max(u,e.Math.abs(l-f));o=e.Math.max(o,u)}return r*e.Math.min(1,t/i)*o}function txn(n){var t;return t=new Pk,0!=(256&n)&&(t.a+="F"),0!=(128&n)&&(t.a+="H"),0!=(512&n)&&(t.a+="X"),0!=(2&n)&&(t.a+="i"),0!=(8&n)&&(t.a+="m"),0!=(4&n)&&(t.a+="s"),0!=(32&n)&&(t.a+="u"),0!=(64&n)&&(t.a+="w"),0!=(16&n)&&(t.a+="x"),0!=(n&k6n)&&(t.a+=","),Uy(t.a)}function exn(n,t){var e,i,r;for(OTn(t,"Resize child graph to fit parent.",1),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),29),gun(n.a,e.a),e.a.c=x8(Ant,HWn,1,0,5,1);for(r=new Wb(n.a);r.a<r.c.c.length;)PZ(BB(n0(r),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),Bxn(n),n.e&&S_n(n.e,n),HSn(t)}function ixn(n){var t,e,i,r,c,a,u;if(r=(i=n.b).e,c=LK(BB(mMn(i,(HXn(),ept)),98)),e=!!r&&BB(mMn(r,(hWn(),Zft)),21).Hc((bDn(),lft)),!c&&!e)for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(a=BB(t.dd(),113)).a&&(CZ(a.d,null),a.c=!0,n.a=!0)}function rxn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(f=-1,l=0,s=0,h=(o=n).length;s<h;++s){for(a=0,u=(c=o[s]).length;a<u;++a)for(r=c[a],t=new pP(-1==f?n[0]:n[f],okn(r)),e=0;e<r.j.c.length;e++)for(i=e+1;i<r.j.c.length;i++)Nz(t,BB(xq(r.j,e),11),BB(xq(r.j,i),11))>0&&++l;++f}return l}function cxn(n,t){var e,i,r,c,a;for(a=BB(mMn(t,(CAn(),Lkt)),425),c=spn(t.b,0);c.b!=c.d.c;)if(r=BB(b3(c),86),0==n.b[r.g]){switch(a.g){case 0:Qvn(n,r);break;case 1:HAn(n,r)}n.b[r.g]=2}for(i=spn(n.a,0);i.b!=i.d.c;)ywn((e=BB(b3(i),188)).b.d,e,!0),ywn(e.c.b,e,!0);hon(t,(qqn(),lkt),n.a)}function axn(n,t){var e,i,r,c;return ZM(),t?t==(Uqn(),KLt)||(t==yLt||t==vLt||t==mLt)&&n!=pLt?new cUn(n,t):((e=(i=BB(t,677)).pk())||(kV(B7((IPn(),Z$t),t)),e=i.pk()),!e.i&&(e.i=new xp),!(r=BB(qI(AY((c=e.i).f,n)),1942))&&VW(c,n,r=new cUn(n,t)),r):aLt}function uxn(n,t){var e,i,r,c,a,u,o,s;for(u=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).a,s=n.i.n.b,r=0,c=(i=Z0(n.e)).length;r<c;++r)MZ(e=i[r],u),fO(e.a,new xC(o,s)),t&&((a=BB(mMn(e,(HXn(),vgt)),74))||(a=new km,hon(e,vgt,a)),DH(a,new xC(o,s)))}function oxn(n,t){var e,i,r,c,a,u,o,s;for(i=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[i.i.n,i.n,i.a])).a,s=n.i.n.b,a=0,u=(c=Z0(n.g)).length;a<u;++a)SZ(r=c[a],i),hO(r.a,new xC(o,s)),t&&((e=BB(mMn(r,(HXn(),vgt)),74))||(e=new km,hon(r,vgt,e)),DH(e,new xC(o,s)))}function sxn(n,t){var e,i,r,c,a;for(n.b=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230),n.e=c0(n.d),c=new YT,r=u6(Pun(Gk(jut,1),JZn,37,0,[t])),a=0;a<r.c.length;)l1(a,r.c.length),(i=BB(r.c[a],37)).p=a++,gun(r,(e=new CGn(i,n.a,n.b)).b),WB(n.b,e),e.s&&nX(spn(c,0),e);return n.c=new Rv,c}function hxn(n,t){var e,i,r,c,a,u;for(a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)(e=(c=BB(a.Pb(),111)).c?VH(c.c):0)>0?c.a?e>(u=c.b.rf().a)&&(r=(e-u)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:Hz(n.u)&&((i=_Tn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.rf().a&&(c.d.c=i.c+i.b-c.b.rf().a))}function fxn(n,t){var e,i;for(OTn(t,"Semi-Interactive Crossing Minimization Processor",1),e=!1,i=new Wb(n.b);i.a<i.c.c.length;)e|=null!=$fn(ytn(AV(AV(new Rq(null,new w1(BB(n0(i),29).a,16)),new Qi),new Yi),new Ji),new Zi).a;e&&hon(n,(hWn(),alt),(hN(),!0)),HSn(t)}function lxn(n,t,e){var i,r,c;if(!(r=e)&&(r=new Xm),OTn(r,"Layout",n.a.c.length),qy(TD(mMn(t,(CAn(),Ekt)))))for($T(),i=0;i<n.a.c.length;i++)i++,nE(tsn(BB(xq(n.a,i),51)));for(c=new Wb(n.a);c.a<c.c.c.length;)BB(n0(c),51).pf(t,mcn(r,1));HSn(r)}function bxn(n){var t,i;if(t=BB(n.a,19).a,i=BB(n.b,19).a,t>=0){if(t==i)return new rI(iln(-t-1),iln(-t-1));if(t==-i)return new rI(iln(-t),iln(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new rI(iln(-t),iln(t<0?i:i+1)):new rI(iln(t+1),iln(i))}function wxn(n){var t,e;e=BB(mMn(n,(HXn(),kgt)),163),t=BB(mMn(n,(hWn(),ilt)),303),e==(Tbn(),Flt)?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Cft))):e==Hlt?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Sft))):t==(z7(),Cft)?(hon(n,kgt,Flt),hon(n,ilt,Pft)):t==Sft&&(hon(n,kgt,Hlt),hon(n,ilt,Pft))}function dxn(){dxn=O,jyt=new oa,vyt=dq(new B2,(yMn(),_at),(lWn(),jot)),kyt=WG(dq(new B2,_at,Dot),Bat,xot),Eyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),myt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),yyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function gxn(){gxn=O,Cyt=dq(WG(new B2,(yMn(),Bat),(lWn(),hot)),_at,jot),$yt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),Iyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),Ayt=dq(dq(new B2,_at,Dot),Bat,xot),Oyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function pxn(n,t,e,i,r){var c,a;(b5(t)||t.c.i.c!=t.d.i.c)&&nrn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])),e)||b5(t)||(t.c==r?Kx(t.a,0,new wA(e)):DH(t.a,new wA(e)),i&&!FT(n.a,e)&&((a=BB(mMn(t,(HXn(),vgt)),74))||(a=new km,hon(t,vgt,a)),r5(a,c=new wA(e),a.c.b,a.c),TU(n.a,c)))}function vxn(n){var t;for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).c.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function mxn(n,t,e){var i,r,c,a,u,o;if(0==(r=pbn(254&n.Db)))n.Eb=e;else{if(1==r)a=x8(Ant,HWn,1,2,5,1),0==Rmn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=x8(Ant,HWn,1,r+1,5,1),c=een(n.Eb),i=2,u=0,o=0;i<=128;i<<=1)i==t?a[o++]=e:0!=(n.Db&i)&&(a[o++]=c[u++]);n.Eb=a}n.Db|=t}function yxn(n,t,i){var r,c,a,u;for(this.b=new Np,c=0,r=0,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),167),i&&KBn(a),WB(this.b,a),c+=a.o,r+=a.p;this.b.c.length>0&&(c+=(a=BB(xq(this.b,0),167)).o,r+=a.p),c*=2,r*=2,t>1?c=CJ(e.Math.ceil(c*t)):r=CJ(e.Math.ceil(r/t)),this.a=new qwn(c,r)}function kxn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=BB(RX(n.f,t.A),57)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=BB(RX(n.f,i.C),57)).d.c,++f):s=i.a.c,w=d+(o=(s-d)/e.Math.max(2,f-h)),l=h;l<f;++l)g=(u=BB(a.Xb(l),128)).a.b,u.a.c=w-g/2,w+=o}function jxn(n,t,e,i,r,c){var a,u,o,s,h,f;for(s=e.c.length,c&&(n.c=x8(ANt,hQn,25,t.length,15,1)),a=r?0:t.length-1;r?a<t.length:a>=0;a+=r?1:-1){for(u=t[a],o=i==(kUn(),oIt)?r?abn(u,i):ean(abn(u,i)):r?ean(abn(u,i)):abn(u,i),c&&(n.c[u.p]=o.gc()),f=o.Kc();f.Ob();)h=BB(f.Pb(),11),n.d[h.p]=s++;gun(e,o)}}function Exn(n,t,e){var i,r,c,a,u,o,s,h;for(c=Gy(MD(n.b.Kc().Pb())),s=Gy(MD(Wan(t.b))),i=kL(B$(n.a),s-e),r=kL(B$(t.a),e-c),kL(h=UR(i,r),1/(s-c)),this.a=h,this.b=new Np,u=!0,(a=n.b.Kc()).Pb();a.Ob();)o=Gy(MD(a.Pb())),u&&o-e>D3n&&(this.b.Fc(e),u=!1),this.b.Fc(o);u&&this.b.Fc(e)}function Txn(n){var t,e,i,r;if(hKn(n,n.n),n.d.c.length>0){for(nk(n.c);pAn(n,BB(n0(new Wb(n.e.a)),121))<n.e.a.c.length;){for(r=(t=Ryn(n)).e.e-t.d.e-t.a,t.e.j&&(r=-r),i=new Wb(n.e.a);i.a<i.c.c.length;)(e=BB(n0(i),121)).j&&(e.e+=r);nk(n.c)}nk(n.c),pIn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}}function Mxn(n,t){var e,i,r,c,a;for(r=BB(h6(n.a,(LEn(),Mst)),15).Kc();r.Ob();)switch(i=BB(r.Pb(),101),e=BB(xq(i.j,0),113).d.j,m$(c=new t_(i.j),new Jr),t.g){case 1:NEn(n,c,e,(Crn(),Dst),1);break;case 0:NEn(n,new s1(c,0,a=_Ln(c)),e,(Crn(),Dst),0),NEn(n,new s1(c,a,c.c.length),e,Dst,1)}}function Sxn(n,t){var e,i;if(Nun(),e=T5(cin(),t.tg())){if(i=e.j,cL(n,239))return rZ(BB(n,33))?SN(i,(rpn(),sMt))||SN(i,hMt):SN(i,(rpn(),sMt));if(cL(n,352))return SN(i,(rpn(),uMt));if(cL(n,186))return SN(i,(rpn(),fMt));if(cL(n,354))return SN(i,(rpn(),oMt))}return!0}function Pxn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak())&&a!=t)throw Hp(new _y(I7n));return BB(ovn(n,t,e),72)}function Cxn(n,t){if(t instanceof Object)try{if(t.__java$exception=n,-1!=navigator.userAgent.toLowerCase().indexOf("msie")&&$doc.documentMode<9)return;var e=n;Object.defineProperties(t,{cause:{get:function(){var n=e.Zd();return n&&n.Xd()}},suppressed:{get:function(){return e.Yd()}}})}catch(i){}}function Ixn(n,t){var e,i,r,c,a;if(i=t>>5,t&=31,i>=n.d)return n.e<0?(ODn(),Ytt):(ODn(),eet);if(c=n.d-i,QSn(r=x8(ANt,hQn,25,c+1,15,1),c,n.a,i,t),n.e<0){for(e=0;e<i&&0==n.a[e];e++);if(e<i||t>0&&n.a[e]<<32-t!=0){for(e=0;e<c&&-1==r[e];e++)r[e]=0;e==c&&++c,++r[e]}}return X0(a=new lU(n.e,c,r)),a}function Oxn(n){var t,e,i,r;return e=new $w(r=WJ(n)),i=new Lw(r),gun(t=new Np,(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),gun(t,(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),BB(P4($V(AV(new Rq(null,new w1(t,16)),e),i),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)}function Axn(n,t,e,i){var r,c,a,u,o;if(ZM(),u=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),t),r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak()))throw Hp(new _y(I7n));sln(n,EPn(n,t,e),u?BB(i,72):Z3(t,i))}function $xn(n,t){var e,i,r;return ZM(),!!t.$j()||-2==t.Zj()&&(t==(TOn(),lLt)||t==sLt||t==hLt||t==fLt||!(Awn(r=n.Tg(),t)>=0)&&(!(e=Fqn((IPn(),Z$t),r,t))||((i=e.Zj())>1||-1==i)&&3!=DW(B7(Z$t,e))))}function Lxn(n,t,e,i){var r,c,a,u,o;return u=PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82)),JJ(u)==JJ(o)||Ctn(o,u)?null:(a=XJ(t))==e?i:(c=BB(RX(n.a,a),10))&&(r=c.e)?r:null}function Nxn(n,t){var e;switch(OTn(t,"Label side selection ("+(e=BB(mMn(n,(HXn(),Jdt)),276))+")",1),e.g){case 0:TAn(n,(Xyn(),jCt));break;case 1:TAn(n,(Xyn(),ECt));break;case 2:sBn(n,(Xyn(),jCt));break;case 3:sBn(n,(Xyn(),ECt));break;case 4:uDn(n,(Xyn(),jCt));break;case 5:uDn(n,(Xyn(),ECt))}HSn(t)}function xxn(n,t,e){var i,r,c,a,u;if((c=n[lj(e,n.length)])[0].k==(uSn(),Mut))for(r=fj(e,c.length),u=t.j,i=0;i<u.c.length;i++)l1(i,u.c.length),a=BB(u.c[i],11),(e?a.j==(kUn(),oIt):a.j==(kUn(),CIt))&&qy(TD(mMn(a,(hWn(),elt))))&&(c5(u,i,BB(mMn(c[r],(hWn(),dlt)),11)),r+=e?1:-1)}function Dxn(n,t){var e,i,r,c,a;a=new Np,e=t;do{(c=BB(RX(n.b,e),128)).B=e.c,c.D=e.d,a.c[a.c.length]=c,e=BB(RX(n.k,e),17)}while(e);return l1(0,a.c.length),(i=BB(a.c[0],128)).j=!0,i.A=BB(i.d.a.ec().Kc().Pb(),17).c.i,(r=BB(xq(a,a.c.length-1),128)).q=!0,r.C=BB(r.d.a.ec().Kc().Pb(),17).d.i,a}function Rxn(n){if(null==n.g)switch(n.p){case 0:n.g=fZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.g=Pnn(D3(n));break;case 2:n.g=fun(Q1(n));break;case 3:n.g=OW(n);break;case 4:n.g=new Nb(IW(n));break;case 6:n.g=jgn(AW(n));break;case 5:n.g=iln(hJ(n));break;case 7:n.g=rln(_3(n))}return n.g}function Kxn(n){if(null==n.n)switch(n.p){case 0:n.n=lZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.n=Pnn(R3(n));break;case 2:n.n=fun(Y1(n));break;case 3:n.n=LW(n);break;case 4:n.n=new Nb(NW(n));break;case 6:n.n=jgn($W(n));break;case 5:n.n=iln(fJ(n));break;case 7:n.n=rln(K3(n))}return n.n}function _xn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),307)).g=0,e.i=0,e.e.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),307)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),57).c.Kc();a.Ob();)(c=BB(a.Pb(),57)).a!=e&&(TU(e.e,c),++c.a.g,++c.a.i)}function Fxn(n,t){var e,i,r;if(!ZU(n.a,t.b))throw Hp(new Fy("Invalid hitboxes for scanline overlap calculation."));for(r=!1,i=new Fb(new BR(new xN(new _b(n.a.a).a).b));aS(i.a.a);)if(e=BB(mx(i.a).cd(),65),eon(t.b,e))xj(n.b.a,t.b,e),r=!0;else if(r)break}function Bxn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DIt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GIt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),XBn(n,i,t)}function Hxn(n,t){var e,i,r,c,a,u,o,s;r=t?new pc:new vc,c=!1;do{for(c=!1,a=(t?ean(n.b):n.b).Kc();a.Ob();)for(s=a0(BB(a.Pb(),29).a),t||new fy(s),o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),r.Mb(u)&&(i=u,e=BB(mMn(u,(hWn(),Rft)),305),c=eRn(i,t?e.b:e.k,t,!1))}while(c)}function qxn(n,t,e){var i,r,c,a;for(OTn(e,"Longest path layering",1),n.a=t,a=n.a.a,n.b=x8(ANt,hQn,25,a.c.length,15,1),i=0,c=new Wb(a);c.a<c.c.c.length;)BB(n0(c),10).p=i,n.b[i]=-1,++i;for(r=new Wb(a);r.a<r.c.c.length;)D$n(n,BB(n0(r),10));a.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,HSn(e)}function Gxn(n,t){var e,i,r;t.a?(ZU(n.b,t.b),n.a[t.b.i]=BB(kK(n.b,t.b),81),(e=BB(yK(n.b,t.b),81))&&(n.a[e.i]=t.b)):(!!(i=BB(kK(n.b,t.b),81))&&i==n.a[t.b.i]&&!!i.d&&i.d!=t.b.d&&i.f.Fc(t.b),!!(r=BB(yK(n.b,t.b),81))&&n.a[r.i]==t.b&&!!r.d&&r.d!=t.b.d&&t.b.f.Fc(r),MN(n.b,t.b))}function zxn(n,t){var i,r,c,a,u,o;return a=n.d,(o=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,o=0),t.o.b=o,u=e.Math.floor(o/2),qCn(r=new CSn,(kUn(),CIt)),CZ(r,t),r.n.b=u,qCn(c=new CSn,oIt),CZ(c,t),c.n.b=u,MZ(n,r),qan(i=new wY,n),hon(i,vgt,null),SZ(i,c),MZ(i,a),jFn(t,n,i),sCn(n,i),i}function Uxn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=new B2,e.Hc((bDn(),bft))&&(Jcn(t,byt),Jcn(t,dyt)),(e.Hc(dft)||qy(TD(mMn(n,(HXn(),ugt)))))&&(Jcn(t,dyt),e.Hc(gft)&&Jcn(t,gyt)),e.Hc(lft)&&Jcn(t,lyt),e.Hc(vft)&&Jcn(t,pyt),e.Hc(wft)&&Jcn(t,wyt),e.Hc(sft)&&Jcn(t,hyt),e.Hc(fft)&&Jcn(t,fyt),t}function Xxn(n,t){var e,i,r,c,a,u,o,s,h;return c=(e=n.d)+(i=t.d),a=n.e!=t.e?-1:1,2==c?(h=dG(o=cbn(e0(n.a[0],UQn),e0(t.a[0],UQn))),0==(s=dG(jz(o,32)))?new X6(a,h):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[h,s]))):(Dfn(n.a,e,t.a,i,r=x8(ANt,hQn,25,c,15,1)),X0(u=new lU(a,c,r)),u)}function Wxn(n,t,e,i){var r,c;return t?0==(r=n.a.ue(e.d,t.d))?(i.d=pR(t,e.e),i.b=!0,t):(c=r<0?0:1,t.a[c]=Wxn(n,t.a[c],e,i),Vy(t.a[c])&&(Vy(t.a[1-c])?(t.b=!0,t.a[0].b=!1,t.a[1].b=!1):Vy(t.a[c].a[c])?t=wrn(t,1-c):Vy(t.a[c].a[1-c])&&(t=r2(t,1-c))),t):e}function Vxn(n,t,i){var r,c,a,u;c=n.i,r=n.n,Y5(n,(Dtn(),Git),c.c+r.b,i),Y5(n,Uit,c.c+c.b-r.c-i[2],i),u=c.b-r.b-r.c,i[0]>0&&(i[0]+=n.d,u-=i[0]),i[2]>0&&(i[2]+=n.d,u-=i[2]),a=e.Math.max(0,u),i[1]=e.Math.max(i[1],u),Y5(n,zit,c.c+r.b+i[0]-(i[1]-u)/2,i),t==zit&&(n.c.b=a,n.c.c=c.c+r.b+(a-u)/2)}function Qxn(){this.c=x8(xNt,qQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.b=x8(xNt,qQn,25,Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]).length,15,1),this.a=x8(xNt,qQn,25,Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]).length,15,1),mS(this.c,RQn),mS(this.b,KQn),mS(this.a,KQn)}function Yxn(n,t,e){var i,r,c,a;if(t<=e?(r=t,c=e):(r=e,c=t),i=0,null==n.b)n.b=x8(ANt,hQn,25,2,15,1),n.b[0]=r,n.b[1]=c,n.c=!0;else{if(i=n.b.length,n.b[i-1]+1==r)return void(n.b[i-1]=c);a=x8(ANt,hQn,25,i+2,15,1),aHn(n.b,0,a,0,i),n.b=a,n.b[i-1]>=r&&(n.c=!1,n.a=!1),n.b[i++]=r,n.b[i]=c,n.c||T$n(n)}}function Jxn(n,t,e){var i,r,c,a,u,o,s;for(s=t.d,n.a=new J6(s.c.length),n.c=new xp,u=new Wb(s);u.a<u.c.c.length;)a=BB(n0(u),101),c=new Fan(null),WB(n.a,c),VW(n.c,a,c);for(n.b=new xp,vCn(n,t),i=0;i<s.c.length-1;i++)for(o=BB(xq(t.d,i),101),r=i+1;r<s.c.length;r++)WLn(n,o,BB(xq(t.d,r),101),e)}function Zxn(n,t,e){var i,r,c,a,u,o;if(!h3(t)){for(OTn(o=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),u=new Ia,a=0,c=t.Kc();c.Ob();)i=BB(c.Pb(),86),u=Wen(Pun(Gk(xnt,1),HWn,20,0,[u,new bg(i)])),a<i.f.b&&(a=i.f.b);for(r=t.Kc();r.Ob();)hon(i=BB(r.Pb(),86),(qqn(),ukt),a);HSn(o),Zxn(n,u,e)}}function nDn(n,t){var i,r,c,a,u,o,s;for(i=KQn,uSn(),o=Cut,c=new Wb(t.a);c.a<c.c.c.length;)(a=(r=BB(n0(c),10)).k)!=Cut&&(null==(u=MD(mMn(r,(hWn(),plt))))?(i=e.Math.max(i,0),r.n.b=i+XN(n.a,a,o)):r.n.b=(kW(u),u)),s=XN(n.a,a,o),r.n.b<i+s+r.d.d&&(r.n.b=i+s+r.d.d),i=r.n.b+r.o.b+r.d.a,o=a}function tDn(n,t,e){var i,r,c;for(qan(c=new EAn(XXn(qSn(cDn(t,!1,!1)),Gy(MD(ZAn(t,(Epn(),pct))))+n.a)),t),VW(n.b,t,c),e.c[e.c.length]=c,!t.n&&(t.n=new eU(zOt,t,1,7)),r=new AL(t.n);r.e!=r.i.gc();)i=JRn(n,BB(kpn(r),137),!0,0,0),e.c[e.c.length]=i;return c}function eDn(n,t,e,i,r){var c,a,u;if(n.d&&n.d.lg(r),Dvn(n,e,BB(r.Xb(0),33),!1))return!0;if(Dvn(n,i,BB(r.Xb(r.gc()-1),33),!0))return!0;if(NMn(n,r))return!0;for(u=r.Kc();u.Ob();)for(a=BB(u.Pb(),33),c=t.Kc();c.Ob();)if(_Dn(n,a,BB(c.Pb(),33)))return!0;return!1}function iDn(n,t,e){var i,r,c,a,u,o,s,h,f;f=t.c.length;n:for(c=BB((s=n.Yg(e))>=0?n._g(s,!1,!0):cOn(n,e,!1),58).Kc();c.Ob();){for(r=BB(c.Pb(),56),h=0;h<f;++h)if(l1(h,t.c.length),o=(a=BB(t.c[h],72)).dd(),u=a.ak(),i=r.bh(u,!1),null==o?null!=i:!Nfn(o,i))continue n;return r}return null}function rDn(n,t,e,i){var r,c,a,u;for(r=BB(DSn(t,(kUn(),CIt)).Kc().Pb(),11),c=BB(DSn(t,oIt).Kc().Pb(),11),u=new Wb(n.j);u.a<u.c.c.length;){for(a=BB(n0(u),11);0!=a.e.c.length;)MZ(BB(xq(a.e,0),17),r);for(;0!=a.g.c.length;)SZ(BB(xq(a.g,0),17),c)}e||hon(t,(hWn(),hlt),null),i||hon(t,(hWn(),flt),null)}function cDn(n,t,e){var i,r;if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)return qun(n);if(i=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),t&&(sqn((!i.a&&(i.a=new $L(xOt,i,5)),i.a)),Ien(i,0),Aen(i,0),Ten(i,0),Oen(i,0)),e)for(!n.a&&(n.a=new eU(FOt,n,6,6)),r=n.a;r.i>1;)fDn(r,r.i-1);return i}function aDn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Comment post-processing",1),c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),i=new Np,u=new Wb(r.a);u.a<u.c.c.length;)a=BB(n0(u),10),o=BB(mMn(a,(hWn(),Klt)),15),e=BB(mMn(a,Dft),15),(o||e)&&(Wzn(a,o,e),o&&gun(i,o),e&&gun(i,e));gun(r.a,i)}HSn(t)}function uDn(n,t){var e,i,r,c,a,u;for(e=new Lp,r=new Wb(n.b);r.a<r.c.c.length;){for(u=!0,i=0,a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)switch((c=BB(n0(a),10)).k.g){case 4:++i;case 1:w3(e,c);break;case 0:oCn(c,t);default:e.b==e.c||p_n(e,i,u,!1,t),u=!1,i=0}e.b==e.c||p_n(e,i,u,!0,t)}}function oDn(n,t){var e,i,r,c,a,u;for(r=new Np,e=0;e<=n.i;e++)(i=new HX(t)).p=n.i-e,r.c[r.c.length]=i;for(u=new Wb(n.o);u.a<u.c.c.length;)PZ(a=BB(n0(u),10),BB(xq(r,n.i-n.f[a.p]),29));for(c=new Wb(r);c.a<c.c.c.length;)0==BB(n0(c),29).a.c.length&&AU(c);t.b.c=x8(Ant,HWn,1,0,5,1),gun(t.b,r)}function sDn(n,t){var e,i,r,c,a,u;for(e=0,u=new Wb(t);u.a<u.c.c.length;){for(a=BB(n0(u),11),nhn(n.b,n.d[a.p]),r=new m6(a.b);y$(r.a)||y$(r.b);)(c=ME(n,a==(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c?i.d:i.c))>n.d[a.p]&&(e+=n5(n.b,c),d3(n.a,iln(c)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function hDn(n,t,e){var i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)0==(!(i=BB(kpn(r),33)).a&&(i.a=new eU(UOt,i,10,11)),i.a).i||(c+=hDn(n,i,!1));if(e)for(a=JJ(t);a;)c+=(!a.a&&(a.a=new eU(UOt,a,10,11)),a.a).i,a=JJ(a);return c}function fDn(n,t){var e,i,r,c;return n.ej()?(i=null,r=n.fj(),n.ij()&&(i=n.kj(n.pi(t),null)),e=n.Zi(4,c=Lyn(n,t),null,t,r),n.bj()&&null!=c?(i=n.dj(c,i))?(i.Ei(e),i.Fi()):n.$i(e):i?(i.Ei(e),i.Fi()):n.$i(e),c):(c=Lyn(n,t),n.bj()&&null!=c&&(i=n.dj(c,null))&&i.Fi(),c)}function lDn(n){var t,i,r,c,a,u,o,s,h,f;for(h=n.a,t=new Rv,s=0,r=new Wb(n.d);r.a<r.c.c.length;){for(f=0,_rn((i=BB(n0(r),222)).b,new $n),u=spn(i.b,0);u.b!=u.d.c;)a=BB(b3(u),222),t.a._b(a)&&(c=i.c,f<(o=a.c).d+o.a+h&&f+c.a+h>o.d&&(f=o.d+o.a+h));i.c.d=f,t.a.zc(i,t),s=e.Math.max(s,i.c.d+i.c.a)}return s}function bDn(){bDn=O,hft=new LP("COMMENTS",0),lft=new LP("EXTERNAL_PORTS",1),bft=new LP("HYPEREDGES",2),wft=new LP("HYPERNODES",3),dft=new LP("NON_FREE_PORTS",4),gft=new LP("NORTH_SOUTH_PORTS",5),vft=new LP(G1n,6),sft=new LP("CENTER_LABELS",7),fft=new LP("END_LABELS",8),pft=new LP("PARTITIONS",9)}function wDn(n){var t,e,i,r,c;for(r=new Np,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||(r.c[r.c.length]=c));return r}function dDn(n){var t,e,i,r,c;for(r=new Rv,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||r.a.zc(c,r));return r}function gDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function pDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function vDn(n,t,e,i,r,c){var a,u,o;if(u=32,i<0){if(t[0]>=n.length)return!1;if(43!=(u=fV(n,t[0]))&&45!=u)return!1;if(++t[0],(i=UIn(n,t))<0)return!1;45==u&&(i=-i)}return 32==u&&t[0]-e==2&&2==r.b&&(a=(o=(new AT).q.getFullYear()-sQn+sQn-80)%100,c.a=i==a,i+=100*(o/100|0)+(i<a?100:0)),c.p=i,!0}function mDn(n,t){var i,r,c;JJ(n)&&(c=BB(mMn(t,(HXn(),Fgt)),174),GI(ZAn(n,ept))===GI((QEn(),YCt))&&Ypn(n,ept,QCt),GM(),r=qzn(new Dy(JJ(n)),new JN(JJ(n)?new Dy(JJ(n)):null,n),!1,!0),orn(c,(mdn(),DIt)),(i=BB(mMn(t,Hgt),8)).a=e.Math.max(r.a,i.a),i.b=e.Math.max(r.b,i.b))}function yDn(n,t,e){var i,r,c,a,u,o;for(a=BB(mMn(n,(hWn(),nlt)),15).Kc();a.Ob();){switch(c=BB(a.Pb(),10),BB(mMn(c,(HXn(),kgt)),163).g){case 2:PZ(c,t);break;case 4:PZ(c,e)}for(r=new oz(ZL(hbn(c).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c&&i.d||(u=!i.d,o=BB(mMn(i,mlt),11),u?MZ(i,o):SZ(i,o))}}function kDn(){kDn=O,Bst=new WV(mJn,0,(kUn(),sIt),sIt),Gst=new WV(kJn,1,SIt,SIt),Fst=new WV(yJn,2,oIt,oIt),Xst=new WV(jJn,3,CIt,CIt),qst=new WV("NORTH_WEST_CORNER",4,CIt,sIt),Hst=new WV("NORTH_EAST_CORNER",5,sIt,oIt),Ust=new WV("SOUTH_WEST_CORNER",6,SIt,CIt),zst=new WV("SOUTH_EAST_CORNER",7,oIt,SIt)}function jDn(){jDn=O,MMt=Pun(Gk(LNt,1),FQn,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368e3,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]),e.Math.pow(2,-65)}function EDn(n,t){var e,i,r,c,a;if(0==n.c.length)return new rI(iln(0),iln(0));for(e=(l1(0,n.c.length),BB(n.c[0],11)).j,a=0,c=t.g,i=t.g+1;a<n.c.length-1&&e.g<c;)e=(l1(++a,n.c.length),BB(n.c[a],11)).j;for(r=a;r<n.c.length-1&&e.g<i;)++r,e=(l1(a,n.c.length),BB(n.c[a],11)).j;return new rI(iln(a),iln(r))}function TDn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=t.c.length,l1(i,t.c.length),o=(u=BB(t.c[i],286)).a.o.a,l=u.c,b=0,h=u.c;h<=u.f;h++){if(o<=n.a[h])return h;for(f=n.a[h],s=null,c=i+1;c<a;c++)l1(c,t.c.length),(r=BB(t.c[c],286)).c<=h&&r.f>=h&&(s=r);s&&(f=e.Math.max(f,s.a.o.a)),f>b&&(l=h,b=f)}return l}function MDn(n,t,e){var i,r,c;if(n.e=e,n.d=0,n.b=0,n.f=1,n.i=t,16==(16&n.e)&&(n.i=pKn(n.i)),n.j=n.i.length,QXn(n),c=Vdn(n),n.d!=n.j)throw Hp(new ak(kWn((u$(),w8n))));if(n.g){for(i=0;i<n.g.a.c.length;i++)if(r=BB(bW(n.g,i),584),n.f<=r.a)throw Hp(new ak(kWn((u$(),d8n))));n.g.a.c=x8(Ant,HWn,1,0,5,1)}return c}function SDn(n,t){var e,i,r;if(null==t){for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(null==(null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e}else for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(mK(t,null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e;return null}function PDn(n,t){var e;switch(e=null,t.g){case 1:n.e.Xe((sWn(),ePt))&&(e=BB(n.e.We(ePt),249));break;case 3:n.e.Xe((sWn(),iPt))&&(e=BB(n.e.We(iPt),249));break;case 2:n.e.Xe((sWn(),tPt))&&(e=BB(n.e.We(tPt),249));break;case 4:n.e.Xe((sWn(),rPt))&&(e=BB(n.e.We(rPt),249))}return!e&&(e=BB(n.e.We((sWn(),ZSt)),249)),e}function CDn(n,t,e){var i,r,c,a,u,o;for(t.p=1,r=t.c,o=xwn(t,(ain(),qvt)).Kc();o.Ob();)for(i=new Wb(BB(o.Pb(),11).g);i.a<i.c.c.length;)t!=(u=BB(n0(i),17).d.i)&&u.c.p<=r.p&&((c=r.p+1)==e.b.c.length?((a=new HX(e)).p=c,WB(e.b,a),PZ(u,a)):PZ(u,a=BB(xq(e.b,c),29)),CDn(n,u,e))}function IDn(n,t,i){var r,c,a,u,o,s;for(c=i,a=0,o=new Wb(t);o.a<o.c.c.length;)Ypn(u=BB(n0(o),33),(Uyn(),Ljt),iln(c++)),s=wDn(u),r=e.Math.atan2(u.j+u.f/2,u.i+u.g/2),(r+=r<0?Z3n:0)<.7853981633974483||r>p4n?m$(s,n.b):r<=p4n&&r>v4n?m$(s,n.d):r<=v4n&&r>m4n?m$(s,n.c):r<=m4n&&m$(s,n.a),a=IDn(n,s,a);return c}function ODn(){var n;for(ODn=O,Jtt=new X6(1,1),net=new X6(1,10),eet=new X6(0,0),Ytt=new X6(-1,1),Ztt=Pun(Gk(oet,1),sVn,91,0,[eet,Jtt,new X6(1,2),new X6(1,3),new X6(1,4),new X6(1,5),new X6(1,6),new X6(1,7),new X6(1,8),new X6(1,9),net]),tet=x8(oet,sVn,91,32,0,1),n=0;n<tet.length;n++)tet[n]=npn(yz(1,n))}function ADn(n,t,e,i,r,c){var a,u,o,s;for(u=!jE(AV(n.Oc(),new aw(new Je))).sd((dM(),tit)),a=n,c==(Ffn(),HPt)&&(a=cL(a,152)?o6(BB(a,152)):cL(a,131)?BB(a,131).a:cL(a,54)?new fy(a):new CT(a)),s=a.Kc();s.Ob();)(o=BB(s.Pb(),70)).n.a=t.a,o.n.b=u?t.b+(i.b-o.o.b)/2:r?t.b:t.b+i.b-o.o.b,t.a+=o.o.a+e}function $Dn(n,t,e,i){var r,c,a,u,o;for(r=(i.c+i.a)/2,yQ(t.j),DH(t.j,r),yQ(e.e),DH(e.e,r),o=new zj,a=new Wb(n.f);a.a<a.c.c.length;)Rjn(o,t,u=BB(n0(a),129).a),Rjn(o,e,u);for(c=new Wb(n.k);c.a<c.c.c.length;)Rjn(o,t,u=BB(n0(c),129).b),Rjn(o,e,u);return o.b+=2,o.a+=LQ(t,n.q),o.a+=LQ(n.q,e),o}function LDn(n,t,e){var i,r,c,a,u;if(!h3(t)){for(OTn(u=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),a=new Aa,c=null,r=t.Kc();r.Ob();)i=BB(r.Pb(),86),a=Wen(Pun(Gk(xnt,1),HWn,20,0,[a,new bg(i)])),c&&(hon(c,(qqn(),bkt),i),hon(i,ckt,c),G8(i)==G8(c)&&(hon(c,wkt,i),hon(i,akt,c))),c=i;HSn(u),LDn(n,a,e)}}function NDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.d,n.f==(G7(),rrt)?u+=(e.a-n.e.b)/2:n.f==irt&&(u+=e.a-n.e.b),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).b=u,u+=a.b+n.a,n.b.g){case 0:c.a=e.c+t.b;break;case 1:c.a=e.c+t.b+(e.b-a.a)/2;break;case 2:c.a=e.c+e.b-t.c-a.a}i.tf(c)}}function xDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.c,n.b==(J9(),Qit)?u+=(e.b-n.e.a)/2:n.b==Jit&&(u+=e.b-n.e.a),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).a=u,u+=a.a+n.a,n.f.g){case 0:c.b=e.d+t.d;break;case 1:c.b=e.d+t.d+(e.a-a.b)/2;break;case 2:c.b=e.d+e.a-t.a-a.b}i.tf(c)}}function DDn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=new xC(s,l),h=new xC(a,b),r=s,e.p||(r+=n.c),o=new xC(r+=e.F+e.v*n.b,l),f=new xC(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xC(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function RDn(n){NM(n,new MTn(vj(wj(pj(gj(new du,_5n),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Qu))),u2(n,_5n,QJn,LIt),u2(n,_5n,vZn,15),u2(n,_5n,yZn,iln(0)),u2(n,_5n,VJn,dZn)}function KDn(){var n,t,e,i,r,c;for(KDn=O,QLt=x8(NNt,v6n,25,255,15,1),YLt=x8(ONt,WVn,25,16,15,1),t=0;t<255;t++)QLt[t]=-1;for(e=57;e>=48;e--)QLt[e]=e-48<<24>>24;for(i=70;i>=65;i--)QLt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)QLt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)YLt[c]=48+c&QVn;for(n=10;n<=15;n++)YLt[n]=65+n-10&QVn}function _Dn(n,t,e){var i,r,c,a,u,o,s,h;return u=t.i-n.g/2,o=e.i-n.g/2,s=t.j-n.g/2,h=e.j-n.g/2,c=t.g+n.g/2,a=e.g+n.g/2,i=t.f+n.g/2,r=e.f+n.g/2,u<o+a&&o<u&&s<h+r&&h<s||o<u+c&&u<o&&h<s+i&&s<h||u<o+a&&o<u&&s<h&&h<s+i||o<u+c&&u<o&&s<h+r&&h<s}function FDn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DIt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GIt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),qy(TD(mMn(n,Bgt)))||UBn(n,i,t)}function BDn(n,t){var e,i,r,c;for(c=abn(t,(kUn(),SIt)).Kc();c.Ob();)i=BB(c.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=abn(t,sIt).Kc();r.Ob();)i=BB(r.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[e.p].d),n.i[t.p].a))}function HDn(n){var t,e,i,r,c;if(!n.c){if(c=new Eo,null==(t=P$t).a.zc(n,t)){for(i=new AL(a4(n));i.e!=i.i.gc();)cL(r=lFn(e=BB(kpn(i),87)),88)&&pX(c,HDn(BB(r,26))),f9(c,e);t.a.Bc(n),t.a.gc()}$wn(c),chn(c),n.c=new NO((BB(Wtn(QQ((QX(),t$t).o),15),18),c.i),c.g),P5(n).b&=-33}return n.c}function qDn(n){var t;if(10!=n.c)throw Hp(new ak(kWn((u$(),g8n))));switch(t=n.a){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw Hp(new ak(kWn((u$(),U8n))))}return t}function GDn(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==CQn&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19!=0)return"-"+GDn(aon(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Aqn(e,F5(AQn),!0),t=""+TE(ltt),0!=e.l||0!=e.m||0!=e.h)for(r=9-t.length;r>0;r--)t="0"+t;i=t+i}return i}function zDn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var n="__proto__",t=Object.create(null);return void 0===t[n]&&0==Object.getOwnPropertyNames(t).length&&(t[n]=42,42===t[n]&&0!=Object.getOwnPropertyNames(t).length)}function UDn(n){var t,e,i,r,c,a,u;for(t=!1,e=0,r=new Wb(n.d.b);r.a<r.c.c.length;)for((i=BB(n0(r),29)).p=e++,a=new Wb(i.a);a.a<a.c.c.length;)c=BB(n0(a),10),!t&&!h3(hbn(c))&&(t=!0);u=EG((Ffn(),BPt),Pun(Gk(WPt,1),$Vn,103,0,[_Pt,FPt])),t||(orn(u,HPt),orn(u,KPt)),n.a=new ltn(u),$U(n.f),$U(n.b),$U(n.e),$U(n.g)}function XDn(n,t,e){var i,r,c,a,u,o,s,h,f;for(i=e.c,r=e.d,u=g1(t.c),o=g1(t.d),i==t.c?(u=lLn(n,u,r),o=sMn(t.d)):(u=sMn(t.c),o=lLn(n,o,r)),r5(s=new Kj(t.a),u,s.a,s.a.a),r5(s,o,s.c.b,s.c),a=t.c==i,f=new Jv,c=0;c<s.b-1;++c)h=new rI(BB(Dpn(s,c),8),BB(Dpn(s,c+1),8)),a&&0==c||!a&&c==s.b-2?f.b=h:WB(f.a,h);return f}function WDn(n,t){var e,i,r,c;if(0!=(c=n.j.g-t.j.g))return c;if(e=BB(mMn(n,(HXn(),ipt)),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function VDn(n,t,i,r){var c,a,u,o;if(F3((q_(),new oz(ZL(hbn(t).a.Kc(),new h))))>=n.a)return-1;if(!eTn(t,i))return-1;if(h3(BB(r.Kb(t),20)))return 1;for(c=0,u=BB(r.Kb(t),20).Kc();u.Ob();){if(-1==(o=VDn(n,(a=BB(u.Pb(),17)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,o))>n.c-1)return-1}return c+1}function QDn(n,t){var e,i,r,c,a,u;if(GI(t)===GI(n))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),u=n.gc(),i.gc()!=u)return!1;if(a=i.Kc(),n.ni()){for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),null==r?null!=c:!Nfn(r,c))return!1}else for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),GI(r)!==GI(c))return!1;return!0}function YDn(n,t){var e,i,r,c,a,u;if(n.f>0)if(n.qj(),null!=t){for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(Nfn(t,(r=i[a]).dd()))return!0}else for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(r=i[a],GI(t)===GI(r.dd()))return!0;return!1}function JDn(n,t,e){var i,r,c,a;OTn(e,"Orthogonally routing hierarchical port edges",1),n.a=0,NGn(t,i=UHn(t)),Qqn(n,t,i),fUn(t),r=BB(mMn(t,(HXn(),ept)),98),Czn((l1(0,(c=t.b).c.length),BB(c.c[0],29)),r,t),Czn(BB(xq(c,c.c.length-1),29),r,t),TBn((l1(0,(a=t.b).c.length),BB(a.c[0],29))),TBn(BB(xq(a,a.c.length-1),29)),HSn(e)}function ZDn(n){switch(n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n-48<<24>>24;case 97:case 98:case 99:case 100:case 101:case 102:return n-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return n-65+10<<24>>24;default:throw Hp(new Mk("Invalid hexadecimal"))}}function nRn(n,t,e){var i,r,c,a;for(OTn(e,"Processor order nodes",2),n.a=Gy(MD(mMn(t,(CAn(),xkt)))),r=new YT,a=spn(t.b,0);a.b!=a.d.c;)qy(TD(mMn(c=BB(b3(a),86),(qqn(),dkt))))&&r5(r,c,r.c.b,r.c);Px(0!=r.b),KHn(n,i=BB(r.a.a.c,86)),!e.b&&qin(e,1),BRn(n,i,0-Gy(MD(mMn(i,(qqn(),ukt))))/2,0),!e.b&&qin(e,1),HSn(e)}function tRn(){tRn=O,Rit=new HS("SPIRAL",0),$it=new HS("LINE_BY_LINE",1),Lit=new HS("MANHATTAN",2),Ait=new HS("JITTER",3),xit=new HS("QUADRANTS_LINE_BY_LINE",4),Dit=new HS("QUADRANTS_MANHATTAN",5),Nit=new HS("QUADRANTS_JITTER",6),Oit=new HS("COMBINE_LINE_BY_LINE_MANHATTAN",7),Iit=new HS("COMBINE_JITTER_MANHATTAN",8)}function eRn(n,t,e,i){var r,c,a,u,o,s;for(o=Njn(n,e),s=Njn(t,e),r=!1;o&&s&&(i||myn(o,s,e));)a=Njn(o,e),u=Njn(s,e),A7(t),A7(n),c=o.c,rGn(o,!1),rGn(s,!1),e?(Qyn(t,s.p,c),t.p=s.p,Qyn(n,o.p+1,c),n.p=o.p):(Qyn(n,o.p,c),n.p=o.p,Qyn(t,s.p+1,c),t.p=s.p),PZ(o,null),PZ(s,null),o=a,s=u,r=!0;return r}function iRn(n,t,e,i){var r,c,a,u,o;for(r=!1,c=!1,u=new Wb(i.j);u.a<u.c.c.length;)GI(mMn(a=BB(n0(u),11),(hWn(),dlt)))===GI(e)&&(0==a.g.c.length?0==a.e.c.length||(r=!0):c=!0);return o=0,r&&r^c?o=e.j==(kUn(),sIt)?-n.e[i.c.p][i.p]:t-n.e[i.c.p][i.p]:c&&r^c?o=n.e[i.c.p][i.p]+1:r&&c&&(o=e.j==(kUn(),sIt)?0:t/2),o}function rRn(n,t,e,i,r,c,a,u){var o,s,h;for(o=0,null!=t&&(o^=vvn(t.toLowerCase())),null!=e&&(o^=vvn(e)),null!=i&&(o^=vvn(i)),null!=a&&(o^=vvn(a)),null!=u&&(o^=vvn(u)),s=0,h=c.length;s<h;s++)o^=vvn(c[s]);n?o|=256:o&=-257,r?o|=16:o&=-17,this.f=o,this.i=null==t?null:(kW(t),t),this.a=e,this.d=i,this.j=c,this.g=a,this.e=u}function cRn(n,t,e){var i,r;switch(r=null,t.g){case 1:gcn(),r=Nut;break;case 2:gcn(),r=Dut}switch(i=null,e.g){case 1:gcn(),i=xut;break;case 2:gcn(),i=Lut;break;case 3:gcn(),i=Rut;break;case 4:gcn(),i=Kut}return r&&i?KB(n.j,new Hf(new Jy(Pun(Gk(Lnt,1),HWn,169,0,[BB(yX(r),169),BB(yX(i),169)])))):(SQ(),SQ(),set)}function aRn(n){var t,e,i;switch(t=BB(mMn(n,(HXn(),Hgt)),8),hon(n,Hgt,new xC(t.b,t.a)),BB(mMn(n,kdt),248).g){case 1:hon(n,kdt,(wvn(),LMt));break;case 2:hon(n,kdt,(wvn(),IMt));break;case 3:hon(n,kdt,(wvn(),AMt));break;case 4:hon(n,kdt,(wvn(),$Mt))}(n.q?n.q:(SQ(),SQ(),het))._b(spt)&&(i=(e=BB(mMn(n,spt),8)).a,e.a=e.b,e.b=i)}function uRn(n,t,e,i,r,c){if(this.b=e,this.d=r,n>=t.length)throw Hp(new Ay("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new QK(i),yrn(this.e,this.c,(kUn(),CIt)),this.i=new QK(i),yrn(this.i,this.c,oIt),this.f=new lG(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(uSn(),Mut),this.a&&gPn(this,n,t.length)}function oRn(n,t){var e,i,r,c,a,u;c=!n.B.Hc((n_n(),HIt)),a=n.B.Hc(zIt),n.a=new Hwn(a,c,n.c),n.n&&kQ(n.a.n,n.n),jy(n.g,(Dtn(),zit),n.a),t||((i=new Ign(1,c,n.c)).n.a=n.k,mG(n.p,(kUn(),sIt),i),(r=new Ign(1,c,n.c)).n.d=n.k,mG(n.p,SIt,r),(u=new Ign(0,c,n.c)).n.c=n.k,mG(n.p,CIt,u),(e=new Ign(0,c,n.c)).n.b=n.k,mG(n.p,oIt,e))}function sRn(n){var t,e,i;switch((t=BB(mMn(n.d,(HXn(),Zdt)),218)).g){case 2:e=MXn(n);break;case 3:i=new Np,JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Or),new Ar),new $r),new pr),new Cd(i)),e=i;break;default:throw Hp(new Fy("Compaction not supported for "+t+" edges."))}gqn(n,e),e5(new Cb(n.g),new Sd(n))}function hRn(n,t){var e;return e=new Zn,t&&qan(e,BB(RX(n.a,DOt),94)),cL(t,470)&&qan(e,BB(RX(n.a,ROt),94)),cL(t,354)?(qan(e,BB(RX(n.a,zOt),94)),e):(cL(t,82)&&qan(e,BB(RX(n.a,KOt),94)),cL(t,239)?(qan(e,BB(RX(n.a,UOt),94)),e):cL(t,186)?(qan(e,BB(RX(n.a,XOt),94)),e):(cL(t,352)&&qan(e,BB(RX(n.a,_Ot),94)),e))}function fRn(){fRn=O,Zct=new XA((sWn(),pPt),iln(1)),cat=new XA(LPt,80),rat=new XA(SPt,5),Fct=new XA(cSt,dZn),nat=new XA(vPt,iln(1)),iat=new XA(kPt,(hN(),!0)),Qct=new WA(50),Vct=new XA(XSt,Qct),Hct=CSt,Yct=uPt,Bct=new XA(dSt,!1),Wct=USt,Xct=qSt,Uct=KSt,zct=DSt,Jct=fPt,jSn(),Gct=Ict,aat=Nct,qct=Cct,tat=Act,eat=Lct}function lRn(n){var t,e,i,r,c,a,u;for(u=new v5,a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k!=(uSn(),Mut))for(_An(u,c,new Gj),r=new oz(ZL(lbn(c).a.Kc(),new h));dAn(r);)if((i=BB(U5(r),17)).c.i.k!=Mut&&i.d.i.k!=Mut)for(e=spn(i.a,0);e.b!=e.d.c;)Yjn(u,new dP((t=BB(b3(e),8)).a,t.b));return u}function bRn(){bRn=O,RTt=new up(K4n),OM(),xTt=new $O(q4n,DTt=GTt),Lun(),LTt=new $O(_4n,NTt=WTt),$Sn(),ATt=new $O(F4n,$Tt=rTt),PTt=new $O(B4n,null),$6(),ITt=new $O(H4n,OTt=ZEt),CM(),jTt=new $O(G4n,ETt=XEt),TTt=new $O(z4n,(hN(),!1)),MTt=new $O(U4n,iln(64)),STt=new $O(X4n,!0),CTt=nTt}function wRn(n){var t,e,i,r,c;if(null==n.a)if(n.a=x8($Nt,ZYn,25,n.c.b.c.length,16,1),n.a[0]=!1,Lx(n.c,(HXn(),Upt)))for(e=BB(mMn(n.c,Upt),15).Kc();e.Ob();)(t=BB(e.Pb(),19).a)>0&&t<n.a.length&&(n.a[t]=!1);else for((c=new Wb(n.c.b)).a<c.c.c.length&&n0(c),i=1;c.a<c.c.c.length;)r=BB(n0(c),29),n.a[i++]=U$n(r)}function dRn(n,t){var e,i;switch(i=n.b,t){case 1:n.b|=1,n.b|=4,n.b|=8;break;case 2:n.b|=2,n.b|=4,n.b|=8;break;case 4:n.b|=1,n.b|=2,n.b|=4,n.b|=8;break;case 3:n.b|=16,n.b|=8;break;case 0:n.b|=32,n.b|=16,n.b|=8,n.b|=1,n.b|=2,n.b|=4}if(n.b!=i&&n.c)for(e=new AL(n.c);e.e!=e.i.gc();)ACn(P5(BB(kpn(e),473)),t)}function gRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(r=!1,u=0,o=(a=t).length;u<o;++u)c=a[u],qy((hN(),!!c.e))&&!BB(xq(n.b,c.e.p),214).s&&(r|=(s=c.e,(f=(h=BB(xq(n.b,s.p),214)).e)[l=fj(e,f.length)][0].k==(uSn(),Mut)?f[l]=$Nn(c,f[l],e?(kUn(),CIt):(kUn(),oIt)):h.c.Tf(f,e),b=DNn(n,h,e,i),xxn(h.e,h.o,e),b));return r}function pRn(n,t){var e,i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)GI(ZAn(i=BB(kpn(r),33),(sWn(),ESt)))!==GI((ufn(),mCt))&&((a=BB(ZAn(t,mPt),149))==(e=BB(ZAn(i,mPt),149))||a&&j5(a,e))&&0!=(!i.a&&(i.a=new eU(UOt,i,10,11)),i.a).i&&(c+=pRn(n,i));return c}function vRn(n){var t,e,i,r,c,a,u;for(i=0,u=0,a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),101),r=BB(P4(AV(new Rq(null,new w1(c.j,16)),new Xr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=null,i<=u?(kUn(),e=sIt,i+=r.gc()):u<i&&(kUn(),e=SIt,u+=r.gc()),t=e,JT($V(r.Oc(),new Hr),new Ad(t))}function mRn(n){var t,e,i,r,c,a,u,o;for(n.b=new vOn(new Jy((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]))),new Jy((Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))),u=0,o=(a=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;u<o;++u)for(c=a[u],i=0,r=(e=Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])).length;i<r;++i)t=e[i],Wjn(n.b,c,t,new Np)}function yRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lIn(),rIt)),e=n.u.Hc(tIt),i=n.u.Hc(nIt),s=n.u.Hc(cIt),f=n.B.Hc((n_n(),QIt)),h=!e&&!i&&(s||2==a.gc()),hxn(n,t),r=null,o=null,u){for(o=r=BB((c=a.Kc()).Pb(),111);c.Ob();)o=BB(c.Pb(),111);r.d.b=0,o.d.c=0,h&&!r.a&&(r.d.c=0)}f&&(DTn(a),u&&(r.d.b=0,o.d.c=0))}function kRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lIn(),rIt)),e=n.u.Hc(tIt),i=n.u.Hc(nIt),o=n.u.Hc(cIt),f=n.B.Hc((n_n(),QIt)),s=!e&&!i&&(o||2==a.gc()),V_n(n,t),h=null,r=null,u){for(r=h=BB((c=a.Kc()).Pb(),111);c.Ob();)r=BB(c.Pb(),111);h.d.d=0,r.d.a=0,s&&!h.a&&(h.d.a=0)}f&&(RTn(a),u&&(h.d.d=0,r.d.a=0))}function jRn(n,t,e){var i,r,c,a,u;if(i=t.k,t.p>=0)return!1;if(t.p=e.b,WB(e.e,t),i==(uSn(),Put)||i==Iut)for(r=new Wb(t.j);r.a<r.c.c.length;)for(u=new zw(new Wb(new Gw(BB(n0(r),11)).a.g));y$(u.a);)if(a=(c=BB(n0(u.a),17).d.i).k,t.c!=c.c&&(a==Put||a==Iut)&&jRn(n,c,e))return!0;return!0}function ERn(n){var t;return 0!=(64&n.Db)?KOn(n):((t=new fN(KOn(n))).a+=" (changeable: ",yE(t,0!=(n.Bb&k6n)),t.a+=", volatile: ",yE(t,0!=(n.Bb&M9n)),t.a+=", transient: ",yE(t,0!=(n.Bb&_Qn)),t.a+=", defaultValueLiteral: ",cO(t,n.j),t.a+=", unsettable: ",yE(t,0!=(n.Bb&T9n)),t.a+=", derived: ",yE(t,0!=(n.Bb&hVn)),t.a+=")",t.a)}function TRn(n){var t,e,i,r,c,a,u,o,s,h;for(e=NLn(n.d),c=(r=BB(mMn(n.b,(Epn(),vct)),116)).b+r.c,a=r.d+r.a,o=e.d.a*n.e+c,u=e.b.a*n.f+a,Ll(n.b,new xC(o,u)),h=new Wb(n.g);h.a<h.c.c.length;)t=UR(Fx(new xC((s=BB(n0(h),562)).g-e.a.a,s.i-e.c.a),s.a,s.b),kL(Bx(B$(VA(s.e)),s.d*s.a,s.c*s.b),-.5)),i=QA(s.e),ij(s.e,XR(t,i))}function MRn(n,t,e,i){var r,c,a,u,o;for(o=x8(xNt,sVn,104,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,0,2),a=0,u=(c=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;a<u;++a)o[(r=c[a]).g]=x8(xNt,qQn,25,n.c[r.g],15,1);return Bkn(o,n,sIt),Bkn(o,n,SIt),xmn(o,n,sIt,t,e,i),xmn(o,n,oIt,t,e,i),xmn(o,n,SIt,t,e,i),xmn(o,n,CIt,t,e,i),o}function SRn(n,t,e){if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.b,t)){if(FT(BB(RX(n.b,t),53),e))return-1}else VW(n.b,t,new Rv);if(hU(n.b,e)){if(FT(BB(RX(n.b,e),53),t))return 1}else VW(n.b,e,new Rv);return 0}function PRn(n,t,e,i){var r,c,a,u,o,s;if(null==e)for(r=BB(n.g,119),u=0;u<n.i;++u)if((a=r[u]).ak()==t)return _pn(n,a,i);return ZM(),c=BB(t,66).Oj()?BB(e,72):Z3(t,e),mA(n.e)?(s=!adn(n,t),i=Ywn(n,c,i),o=t.$j()?LY(n,3,t,null,e,pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)),s):LY(n,1,t,t.zj(),e,-1,s),i?i.Ei(o):i=o):i=Ywn(n,c,i),i}function CRn(n){var t,i,r,c,a,u;n.q!=(QEn(),WCt)&&n.q!=XCt&&(c=n.f.n.d+XH(BB(oV(n.b,(kUn(),sIt)),124))+n.c,t=n.f.n.a+XH(BB(oV(n.b,SIt),124))+n.c,r=BB(oV(n.b,oIt),124),u=BB(oV(n.b,CIt),124),a=e.Math.max(0,r.n.d-c),a=e.Math.max(a,u.n.d-c),i=e.Math.max(0,r.n.a-t),i=e.Math.max(i,u.n.a-t),r.n.d=a,u.n.d=a,r.n.a=i,u.n.a=i)}function IRn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Restoring reversed edges",1),a=new Wb(n.b);a.a<a.c.c.length;)for(u=new Wb(BB(n0(a),29).a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(r=0,c=(i=Z0(BB(n0(o),11).g)).length;r<c;++r)qy(TD(mMn(e=i[r],(hWn(),Clt))))&&tBn(e,!1);HSn(t)}function ORn(){this.b=new v4,this.d=new v4,this.e=new v4,this.c=new v4,this.a=new xp,this.f=new xp,xJ(PMt,new mu,new yu),xJ(NMt,new Au,new $u),xJ(Eut,new Lu,new Nu),xJ(_ut,new Du,new Ru),xJ(hOt,new Ku,new _u),xJ(met,new ku,new ju),xJ(Iet,new Eu,new Tu),xJ(jet,new Mu,new Su),xJ(Eet,new Pu,new Cu),xJ(Bet,new Iu,new Ou)}function ARn(n){var t,e,i,r,c,a;return c=0,(t=Ikn(n)).Bj()&&(c|=4),0!=(n.Bb&T9n)&&(c|=2),cL(n,99)?(r=Cvn(e=BB(n,18)),0!=(e.Bb&h6n)&&(c|=32),r&&(bX(dZ(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),0!=(r.Bb&h6n)&&(c|=64)),0!=(e.Bb&BQn)&&(c|=M9n),c|=k6n):cL(t,457)?c|=512:(i=t.Bj())&&0!=(1&i.i)&&(c|=256),0!=(512&n.Bb)&&(c|=128),c}function $Rn(n,t){var e,i,r,c,a;for(n=null==n?zWn:(kW(n),n),r=0;r<t.length;r++)t[r]=iLn(t[r]);for(e=new Ik,a=0,i=0;i<t.length&&-1!=(c=n.indexOf("%s",a));)e.a+=""+fx(null==n?zWn:(kW(n),n),a,c),uO(e,t[i++]),a=c+2;if(G0(e,n,a,n.length),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function LRn(n){var t,e,i,r,c;for(c=new J6(n.a.c.length),r=new Wb(n.a);r.a<r.c.c.length;){switch(i=BB(n0(r),10),t=null,(e=BB(mMn(i,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),t=$ht;break;case 3:case 4:Jun(),t=Oht}t?(hon(i,(hWn(),Gft),(Jun(),$ht)),t==Oht?RNn(i,e,(ain(),Hvt)):t==$ht&&RNn(i,e,(ain(),qvt))):c.c[c.c.length]=i}return c}function NRn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Wb(t);o.a<o.c.c.length;){for(u=BB(n0(o),11),nhn(n.b,n.d[u.p]),a=0,r=new m6(u.b);y$(r.a)||y$(r.b);)CW(i=BB(y$(r.a)?n0(r.a):n0(r.b),17))?(c=ME(n,u==i.c?i.d:i.c))>n.d[u.p]&&(e+=n5(n.b,c),d3(n.a,iln(c))):++a;for(e+=n.b.d*a;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function xRn(n,t){var e;return n.f==uLt?(e=DW(B7((IPn(),Z$t),t)),n.e?4==e&&t!=(TOn(),lLt)&&t!=(TOn(),sLt)&&t!=(TOn(),hLt)&&t!=(TOn(),fLt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(Z1(B7((IPn(),Z$t),t)))||n.d.Hc(Fqn((IPn(),Z$t),n.b,t))))||!(!n.f||!aNn((IPn(),n.f),jV(B7(Z$t,t))))&&(e=DW(B7(Z$t,t)),n.e?4==e:2==e)}function DRn(n,t,i,r){var c,a,u,o,s,h,f,l;return s=(u=BB(ZAn(i,(sWn(),gPt)),8)).a,f=u.b+n,(c=e.Math.atan2(f,s))<0&&(c+=Z3n),(c+=t)>Z3n&&(c-=Z3n),h=(o=BB(ZAn(r,gPt),8)).a,l=o.b+n,(a=e.Math.atan2(l,h))<0&&(a+=Z3n),(a+=t)>Z3n&&(a-=Z3n),h$(),rin(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:c<a?-1:c>a?1:zO(isNaN(c),isNaN(a))}function RRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),57),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),57)).i=KQn,a=t.c.Kc();a.Ob();)c=BB(a.Pb(),57),BB(qI(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).c.$b(),t.c=BB(qI(AY(u.f,t)),15);_xn(n)}function KRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),81),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),81)).o=KQn,a=t.f.Kc();a.Ob();)c=BB(a.Pb(),81),BB(qI(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).f.$b(),t.f=BB(qI(AY(u.f,t)),15);BNn(n)}function _Rn(n,t,e,i){var r,c;for(Gkn(n,t,e,i),xl(t,n.j-t.j+e),Dl(t,n.k-t.k+i),c=new Wb(t.f);c.a<c.c.c.length;)switch((r=BB(n0(c),324)).a.g){case 0:won(n,t.g+r.b.a,0,t.g+r.c.a,t.i-1);break;case 1:won(n,t.g+t.o,t.i+r.b.a,n.o-1,t.i+r.c.a);break;case 2:won(n,t.g+r.b.a,t.i+t.p,t.g+r.c.a,n.p-1);break;default:won(n,0,t.i+r.b.a,t.g-1,t.i+r.c.a)}}function FRn(n,t,e,i,r){var c,a;try{if(t>=n.o)throw Hp(new Sv);a=t>>5,c=yz(1,dG(yz(31&t,1))),n.n[e][a]=r?i0(n.n[e][a],c):e0(n.n[e][a],uH(c)),c=yz(c,1),n.n[e][a]=i?i0(n.n[e][a],c):e0(n.n[e][a],uH(c))}catch(u){throw cL(u=lun(u),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(u)}}function BRn(n,t,i,r){var c,a;t&&(c=Gy(MD(mMn(t,(qqn(),fkt))))+r,a=i+Gy(MD(mMn(t,ukt)))/2,hon(t,gkt,iln(dG(fan(e.Math.round(c))))),hon(t,pkt,iln(dG(fan(e.Math.round(a))))),0==t.d.b||BRn(n,BB(iL(new wg(spn(new bg(t).a.d,0))),86),i+Gy(MD(mMn(t,ukt)))+n.a,r+Gy(MD(mMn(t,okt)))),null!=mMn(t,wkt)&&BRn(n,BB(mMn(t,wkt),86),i,r))}function HRn(n,t){var i,r,c,a,u,o,s,h,f,l,b;for(c=2*Gy(MD(mMn(s=vW(t.a),(HXn(),Tpt)))),f=Gy(MD(mMn(s,Apt))),h=e.Math.max(c,f),a=x8(xNt,qQn,25,t.f-t.c+1,15,1),r=-h,i=0,o=t.b.Kc();o.Ob();)u=BB(o.Pb(),10),r+=n.a[u.c.p]+h,a[i++]=r;for(r+=n.a[t.a.c.p]+h,a[i++]=r,b=new Wb(t.e);b.a<b.c.c.length;)l=BB(n0(b),10),r+=n.a[l.c.p]+h,a[i++]=r;return a}function qRn(n,t,e,i){var r,c,a,u,o,s,h,f;for(f=new dE(new Yd(n)),u=0,o=(a=Pun(Gk(Out,1),a1n,10,0,[t,e])).length;u<o;++u)for(h=Lfn(a[u],i).Kc();h.Ob();)for(c=new m6((s=BB(h.Pb(),11)).b);y$(c.a)||y$(c.b);)b5(r=BB(y$(c.a)?n0(c.a):n0(c.b),17))||(Mon(f.a,s,(hN(),ptt)),CW(r)&&ZU(f,s==r.c?r.d:r.c));return yX(f),new t_(f)}function GRn(n,t){var e,i,r,c;if(0!=(c=BB(ZAn(n,(sWn(),wPt)),61).g-BB(ZAn(t,wPt),61).g))return c;if(e=BB(ZAn(n,sPt),19),i=BB(ZAn(t,sPt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(BB(ZAn(n,wPt),61).g){case 1:return Pln(n.i,t.i);case 2:return Pln(n.j,t.j);case 3:return Pln(t.i,n.i);case 4:return Pln(t.j,n.j);default:throw Hp(new Fy(r1n))}}function zRn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(n6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function URn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(t6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function XRn(n,t){var e,i,r,c,a,u;if(null==t||0==t.length)return null;if(!(r=BB(SJ(n.a,t),149))){for(i=new Kb(new Ob(n.b).a.vc().Kc());i.a.Ob();)if(c=BB(i.a.Pb(),42),a=(e=BB(c.dd(),149)).c,u=t.length,mK(a.substr(a.length-u,u),t)&&(t.length==a.length||46==fV(a,a.length-t.length-1))){if(r)return null;r=e}r&&mZ(n.a,t,r)}return r}function WRn(n,t){var e,i,r;return e=new xn,(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())<(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?-1:i==r?0:1}function VRn(n){var t,e,i;Lx(n,(HXn(),$gt))&&((i=BB(mMn(n,$gt),21)).dc()||(e=new YK(t=BB(Vj(GCt),9),BB(SR(t,t.length),9),0),i.Hc((n$n(),$Ct))?orn(e,$Ct):orn(e,LCt),i.Hc(OCt)||orn(e,OCt),i.Hc(ICt)?orn(e,DCt):i.Hc(CCt)?orn(e,xCt):i.Hc(ACt)&&orn(e,NCt),i.Hc(DCt)?orn(e,ICt):i.Hc(xCt)?orn(e,CCt):i.Hc(NCt)&&orn(e,ACt),hon(n,$gt,e)))}function QRn(n){var t,e,i,r,c,a,u;for(r=BB(mMn(n,(hWn(),rlt)),10),l1(0,(i=n.j).c.length),e=BB(i.c[0],11),a=new Wb(r.j);a.a<a.c.c.length;)if(GI(c=BB(n0(a),11))===GI(mMn(e,dlt))){c.j==(kUn(),sIt)&&n.p>r.p?(qCn(c,SIt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=u-t)):c.j==SIt&&r.p>n.p&&(qCn(c,sIt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=-(u-t)));break}return r}function YRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;if(c=e,e<i)for(b=new Fan(n.p),w=new Fan(n.p),Frn(b.e,n.e),b.q=n.q,b.r=w,rX(b),Frn(w.j,n.j),w.r=b,rX(w),f=BB((l=new rI(b,w)).a,112),h=BB(l.b,112),l1(c,t.c.length),a=$Dn(n,f,h,r=BB(t.c[c],329)),s=e+1;s<=i;s++)l1(s,t.c.length),Vpn(u=BB(t.c[s],329),o=$Dn(n,f,h,u),r,a)&&(r=u,a=o);return c}function JRn(n,t,e,i,r){var c,a,u,o,s,h,f;if(!(cL(t,239)||cL(t,354)||cL(t,186)))throw Hp(new _y("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,o=t.i+i-a,h=t.j+r-a,s=o+t.g+n.a,f=h+t.f+n.a,DH(c=new km,new xC(o,h)),DH(c,new xC(o,f)),DH(c,new xC(s,f)),DH(c,new xC(s,h)),qan(u=new EAn(c),t),e&&VW(n.b,t,u),u}function ZRn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xC(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function nKn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xC(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function tKn(n){if(0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i)throw Hp(new ck("Edges must have a source."));if(0==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new ck("Edges must have a target."));if(!n.b&&(n.b=new hK(KOt,n,4,7)),!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)))throw Hp(new ck("Hyperedges are not supported."))}function eKn(n,t){var e,i,r,c,a,u,o,s,h,f;for(f=0,d3(c=new Lp,t);c.b!=c.c;)for(o=BB(dU(c),214),s=0,h=BB(mMn(t.j,(HXn(),Ldt)),339),a=Gy(MD(mMn(t.j,Idt))),u=Gy(MD(mMn(t.j,Odt))),h!=(mon(),Nvt)&&(s+=a*S$n(o.e,h),s+=u*rxn(o.e)),f+=syn(o.d,o.e)+s,r=new Wb(o.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(f+=nCn(n,e));return f}function iKn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=b=t.length,b1(0,t.length),45==t.charCodeAt(0)?(f=-1,l=1,--b):(f=1,l=0),r=b/(c=(uHn(),cet)[10])|0,0!=(g=b%c)&&++r,u=x8(ANt,hQn,25,r,15,1),e=ret[8],a=0,w=l+(0==g?c:g),d=l;d<o;w=(d=w)+c)i=l_n(t.substr(d,w-d),_Vn,DWn),$On(),s=dvn(u,u,a,e),s+=Uwn(u,a,i),u[a++]=s;h=a,n.e=f,n.d=h,n.a=u,X0(n)}function rKn(n,t,e,i,r,c,a){if(n.c=i.qf().a,n.d=i.qf().b,r&&(n.c+=r.qf().a,n.d+=r.qf().b),n.b=t.rf().a,n.a=t.rf().b,r)switch(r.Hf().g){case 0:case 2:n.c+=r.rf().a+a+c.a+a;break;case 4:n.c-=a+c.a+a+t.rf().a;break;case 1:n.c+=r.rf().a+a,n.d-=a+c.b+a+t.rf().b;break;case 3:n.c+=r.rf().a+a,n.d+=r.rf().b+a+c.b+a}else e?n.c-=a+t.rf().a:n.c+=i.rf().a+a}function cKn(n,t){var e,i;for(this.b=new Np,this.e=new Np,this.a=n,this.d=t,Gpn(this),pdn(this),this.b.dc()?this.c=n.c.p:this.c=BB(this.b.Xb(0),10).c.p,0==this.e.c.length?this.f=n.c.p:this.f=BB(xq(this.e,this.e.c.length-1),10).c.p,i=BB(mMn(n,(hWn(),Plt)),15).Kc();i.Ob();)if(Lx(e=BB(i.Pb(),70),(HXn(),Vdt))){this.d=BB(mMn(e,Vdt),227);break}}function aKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.e,t),53),a=BB(RX(n.e,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.e,s),53),t),Frn(BB(RX(n.e,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function uKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.b,t),53),a=BB(RX(n.b,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.b,s),53),t),Frn(BB(RX(n.b,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function oKn(n,t){var e,i,r;switch(OTn(t,"Breaking Point Insertion",1),i=new MAn(n),BB(mMn(n,(HXn(),Bpt)),337).g){case 2:r=new Tc;case 0:r=new wc;break;default:r=new Mc}if(e=r.Vf(n,i),qy(TD(mMn(n,qpt)))&&(e=Dqn(n,e)),!r.Wf()&&Lx(n,Xpt))switch(BB(mMn(n,Xpt),338).g){case 2:e=XCn(i,e);break;case 1:e=KTn(i,e)}e.dc()||tXn(n,e),HSn(t)}function sKn(n,t,e){var i,r,c,a,u,o,s;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),a=N2(s,L6n),VCn((i=new oI(n,o)).a,i.b,a),u=N2(s,N6n),QCn((r=new sI(n,o)).a,r.b,u),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),sXn(n,s,o),xon(n,s,o)}function hKn(n,t){var i,r,c,a,u,o,s;for(c=x8(ANt,hQn,25,n.e.a.c.length,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)c[(a=BB(n0(u),121)).d]+=a.b.a.c.length;for(o=zB(t);0!=o.b;)for(r=L9(new Wb((a=BB(0==o.b?null:(Px(0!=o.b),Atn(o,o.a.a)),121)).g.a));r.Ob();)(s=(i=BB(r.Pb(),213)).e).e=e.Math.max(s.e,a.e+i.a),--c[s.d],0==c[s.d]&&r5(o,s,o.c.b,o.c)}function fKn(n){var t,i,r,c,a,u,o,s,h,f,l;for(i=_Vn,c=DWn,o=new Wb(n.e.a);o.a<o.c.c.length;)a=BB(n0(o),121),c=e.Math.min(c,a.e),i=e.Math.max(i,a.e);for(t=x8(ANt,hQn,25,i-c+1,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).e-=c,++t[a.e];if(r=0,null!=n.k)for(f=0,l=(h=n.k).length;f<l&&(s=h[f],t[r++]+=s,t.length!=r);++f);return t}function lKn(n){switch(n.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return BB(Kxn(n),19).a==n.o;case 1:case 2:if(-2==n.o)return!1;switch(n.p){case 0:case 1:case 2:case 6:case 5:case 7:return QI(n.k,n.f);case 3:case 4:return n.j==n.e;default:return null==n.n?null==n.g:Nfn(n.n,n.g)}default:return!1}}function bKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,K5n),"ELK Fixed"),"Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points."),new Vu))),u2(n,K5n,QJn,dCt),u2(n,K5n,g3n,mpn(gCt)),u2(n,K5n,g5n,mpn(hCt)),u2(n,K5n,PZn,mpn(fCt)),u2(n,K5n,BZn,mpn(bCt)),u2(n,K5n,Y2n,mpn(lCt))}function wKn(n,t,e){var i,r,c,a;if(i=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),a=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),(c=Jrn(n,t,i))&&a==c.f&&wW(e,c.i))return e;if(Zrn(n,e,a))throw Hp(new _y("value already present: "+e));return r=new qW(t,i,e,a),c?(LLn(n,c),YCn(n,r,c),c.e=null,c.c=null,c.i):(YCn(n,r,null),qkn(n),null)}function dKn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=c.b?new xC(a,l):new xC(s,l),h=c.c?new xC(s,b):new xC(a,b),r=s,e.p||(r+=n.c),o=new xC(r+=e.F+e.v*n.b,l),f=new xC(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xC(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function gKn(n,t,e){var i,r,c,a,u,o;if(t){if(e<=-1){if(cL(i=itn(t.Tg(),-1-e),99))return BB(i,18);for(u=0,o=(a=BB(t.ah(i),153)).gc();u<o;++u)if(GI(a.jl(u))===GI(n)&&cL(r=a.il(u),99)&&0!=((c=BB(r,18)).Bb&h6n))return c;throw Hp(new Fy("The containment feature could not be located"))}return Cvn(BB(itn(n.Tg(),e),18))}return null}function pKn(n){var t,e,i,r,c;for(i=n.length,t=new Pk,c=0;c<i;)if(9!=(e=fV(n,c++))&&10!=e&&12!=e&&13!=e&&32!=e)if(35!=e)92==e&&c<i?35==(b1(c,n.length),r=n.charCodeAt(c))||9==r||10==r||12==r||13==r||32==r?(NX(t,r&QVn),++c):(t.a+="\\",NX(t,r&QVn),++c):NX(t,e&QVn);else for(;c<i&&13!=(e=fV(n,c++))&&10!=e;);return t.a}function vKn(n,t){var e,i,r;for(i=new Wb(t);i.a<i.c.c.length;)if(e=BB(n0(i),33),JIn(n.a,e,e),JIn(n.b,e,e),0!=(r=wDn(e)).c.length)for(n.d&&n.d.lg(r),JIn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JIn(n.b,e,BB(xq(r,r.c.length-1),33));0!=Dun(r).c.length;)r=Dun(r),n.d&&n.d.lg(r),JIn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JIn(n.b,e,BB(xq(r,r.c.length-1),33))}function mKn(n){var t,e,i,r,c,a,u,o,s,h;for(e=0,u=new Wb(n.d);u.a<u.c.c.length;)(a=BB(n0(u),101)).i&&(a.i.c=e++);for(t=kq($Nt,[sVn,ZYn],[177,25],16,[e,e],2),h=n.d,r=0;r<h.c.length;r++)if(l1(r,h.c.length),(o=BB(h.c[r],101)).i)for(c=r+1;c<h.c.length;c++)l1(c,h.c.length),(s=BB(h.c[c],101)).i&&(i=rMn(o,s),t[o.i.c][s.i.c]=i,t[s.i.c][o.i.c]=i);return t}function yKn(n,t,e,i){var r,c,a;return a=new yT(t,e),n.a?i?(++(r=BB(RX(n.b,t),283)).a,a.d=i.d,a.e=i.e,a.b=i,a.c=i,i.e?i.e.c=a:BB(RX(n.b,t),283).b=a,i.d?i.d.b=a:n.a=a,i.d=a,i.e=a):(n.e.b=a,a.d=n.e,n.e=a,(r=BB(RX(n.b,t),283))?(++r.a,(c=r.c).c=a,a.e=c,r.c=a):(VW(n.b,t,r=new sY(a)),++n.c)):(n.a=n.e=a,VW(n.b,t,new sY(a)),++n.c),++n.d,a}function kKn(n,t){var e,i,r,c,a,u,o,s;for(e=new RegExp(t,"g"),o=x8(Qtt,sVn,2,0,6,1),i=0,s=n,c=null;;){if(null==(u=e.exec(s))||""==s){o[i]=s;break}a=u.index,o[i]=s.substr(0,a),s=fx(s,a+u[0].length,s.length),e.lastIndex=0,c==s&&(o[i]=s.substr(0,1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=o.length;r>0&&""==o[r-1];)--r;r<o.length&&(o.length=r)}return o}function jKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,r=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=jKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(r||(r=!0,u=new rG(u)),u.Gc(e)):u=e);return(i=xIn(n,t)).dc()?u||(SQ(),SQ(),set):u?(r||(u=new rG(u)),u.Gc(i),u):i}function EKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,i=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=EKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(i||(i=!0,u=new rG(u)),u.Gc(e)):u=e);return(r=VOn(n,t)).dc()?u||(SQ(),SQ(),set):u?(i||(u=new rG(u)),u.Gc(r),u):r}function TKn(n,t,e){var i,r,c,a,u,o;if(cL(t,72))return _pn(n,t,e);for(u=null,c=null,i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(t,(r=i[a]).dd())&&cL(c=r.ak(),99)&&0!=(BB(c,18).Bb&h6n)){u=r;break}return u&&(mA(n.e)&&(o=c.$j()?LY(n,4,c,t,null,pBn(n,c,t,cL(c,99)&&0!=(BB(c,18).Bb&BQn)),!0):LY(n,c.Kj()?2:1,c,t,c.zj(),-1,!0),e?e.Ei(o):e=o),e=TKn(n,u,e)),e}function MKn(n){var t,i,r,c;r=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?c=r.a:(c=SIn(n.f),n.A.Hc((mdn(),RIt))&&!n.B.Hc((n_n(),XIt))&&(c=e.Math.max(c,SIn(BB(oV(n.p,(kUn(),sIt)),244))),c=e.Math.max(c,SIn(BB(oV(n.p,SIt),244)))),(t=oan(n))&&(c=e.Math.max(c,t.a))),qy(TD(n.e.yf().We((sWn(),FSt))))?r.a=e.Math.max(r.a,c):r.a=c,(i=n.f.i).c=0,i.b=c,_Fn(n.f)}function SKn(n,t){var e,i,r,c,a,u,o,s,h;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"memberTypes")))){for(s=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)cL(h=-1==(i=(r=c[a]).lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148)&&WB(s,BB(h,148));return s}return SQ(),SQ(),set}function PKn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,aZn,1),n.bf(t),c=0;n.df(c);){for(h=new Wb(t.e);h.a<h.c.c.length;)for(o=BB(n0(h),144),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[t.e,t.d,t.b])));dAn(u);)(a=BB(U5(u),357))!=o&&(r=n.af(a,o))&&UR(o.a,r);for(s=new Wb(t.e);s.a<s.c.c.length;)WSn(i=(o=BB(n0(s),144)).a,-n.d,-n.d,n.d,n.d),UR(o.d,i),kO(i);n.cf(),++c}HSn(e)}function CKn(n,t,e){var i,r,c,a;if(a=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj()){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(r,e))return fDn(n,c),!0}else if(null!=e){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(e,r.dd()))return fDn(n,c),!0}else for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&null==r.dd())return fDn(n,c),!0;return!1}function IKn(n,t){var e,i,r,c,a;for(null==n.c||n.c.length<t.c.length?n.c=x8($Nt,ZYn,25,t.c.length,16,1):nk(n.c),n.a=new Np,i=0,a=new Wb(t);a.a<a.c.c.length;)(r=BB(n0(a),10)).p=i++;for(e=new YT,c=new Wb(t);c.a<c.c.c.length;)r=BB(n0(c),10),n.c[r.p]||(hIn(n,r),0==e.b||(Px(0!=e.b),BB(e.a.a.c,15)).gc()<n.a.c.length?hO(e,n.a):fO(e,n.a),n.a=new Np);return e}function OKn(n,t,e,i){var r,c,a,u,o,s,h;for(Pen(a=BB(Wtn(t,0),33),0),Cen(a,0),(o=new Np).c[o.c.length]=a,u=a,c=new eq(n.a,a.g,a.f,(YLn(),_Et)),s=1;s<t.i;s++)Pen(h=BB(Wtn(t,s),33),(r=aqn(n,nHn(n,DEt,h,u,c,o,e),nHn(n,xEt,h,u,c,o,e),nHn(n,KEt,h,u,c,o,e),nHn(n,REt,h,u,c,o,e),h,u,i)).d),Cen(h,r.e),ab(r,_Et),c=r,u=h,o.c[o.c.length]=h;return c}function AKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,Q4n),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new eu))),u2(n,Q4n,K4n,mpn(qTt)),u2(n,Q4n,QJn,BTt),u2(n,Q4n,vZn,8),u2(n,Q4n,q4n,mpn(HTt)),u2(n,Q4n,U4n,mpn(_Tt)),u2(n,Q4n,X4n,mpn(FTt)),u2(n,Q4n,X2n,(hN(),!1))}function $Kn(n,t,e,i){var r,c,a,u,o,s,h,f;for(a=_x(t.c,e,i),h=new Wb(t.a);h.a<h.c.c.length;){for(UR((s=BB(n0(h),10)).n,a),f=new Wb(s.j);f.a<f.c.c.length;)for(c=new Wb(BB(n0(f),11).g);c.a<c.c.c.length;)for(Ztn((r=BB(n0(c),17)).a,a),(u=BB(mMn(r,(HXn(),vgt)),74))&&Ztn(u,a),o=new Wb(r.b);o.a<o.c.c.length;)UR(BB(n0(o),70).n,a);WB(n.a,s),s.a=n}}function LKn(n,t){var e,i,r,c;if(OTn(t,"Node and Port Label Placement and Node Sizing",1),RA((gM(),new HV(n,!0,!0,new Ve))),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft)))for(i=(r=BB(mMn(n,(HXn(),cpt)),21)).Hc((lIn(),iIt)),c=qy(TD(mMn(n,apt))),e=new Wb(n.b);e.a<e.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(e),29).a,16)),new Qe),new K_(r,i,c));HSn(t)}function NKn(n,t){var e,i,r,c,a,u;if((e=t.Hh(n.a))&&null!=(u=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),n8n))))switch(r=mN(u,YTn(35)),i=t.Hj(),-1==r?(a=az(n,Utn(i)),c=u):0==r?(a=null,c=u.substr(1)):(a=u.substr(0,r),c=u.substr(r+1)),DW(B7(n,t))){case 2:case 3:return Don(n,i,a,c);case 0:case 4:case 5:case 6:return Ron(n,i,a,c)}return null}function xKn(n,t,e){var i,r,c,a,u;if(ZM(),a=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))return!1}else for(u=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c],u.rl(r.ak()))return!(a?Nfn(r,e):null==e?null==r.dd():Nfn(e,r.dd()))&&(BB(ovn(n,c,a?BB(e,72):Z3(t,e)),72),!0);return f9(n,a?BB(e,72):Z3(t,e))}function DKn(n){var t,e,i,r,c;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));for(n.c==(Ffn(),BPt)&&Mzn(n,_Pt),t=new Wb(n.a.a);t.a<t.c.c.length;)BB(n0(t),189).e=0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((i=BB(n0(r),81)).o=KQn,e=i.f.Kc();e.Ob();)++BB(e.Pb(),81).d.e;for(Gzn(n),c=new Wb(n.a.b);c.a<c.c.c.length;)BB(n0(c),81).k=!0;return n}function RKn(n,t){var e,i,r,c,a,u,o,s;for(u=new pPn(n),r5(e=new YT,t,e.c.b,e.c);0!=e.b;){for((i=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),113)).d.p=1,a=new Wb(i.e);a.a<a.c.c.length;)jTn(u,r=BB(n0(a),409)),0==(s=r.d).d.p&&r5(e,s,e.c.b,e.c);for(c=new Wb(i.b);c.a<c.c.c.length;)jTn(u,r=BB(n0(c),409)),0==(o=r.c).d.p&&r5(e,o,e.c.b,e.c)}return u}function KKn(n){var t,e,i,r,c;if(1!=(i=Gy(MD(ZAn(n,(sWn(),yPt))))))for(MA(n,i*n.g,i*n.f),e=XO(_B((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),new Bu)),c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n),(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),e])));dAn(c);)(r=BB(U5(c),470)).Gg(i*r.Dg(),i*r.Eg()),r.Fg(i*r.Cg(),i*r.Bg()),(t=BB(r.We(cPt),8))&&(t.a*=i,t.b*=i)}function _Kn(n,t,e,i,r){var c,a,u,o,s,h;for(c=new Wb(n.b);c.a<c.c.c.length;)for(s=0,h=(o=n2(BB(n0(c),29).a)).length;s<h;++s)switch(BB(mMn(u=o[s],(HXn(),kgt)),163).g){case 1:vxn(u),PZ(u,t),lvn(u,!0,i);break;case 3:ZNn(u),PZ(u,e),lvn(u,!1,r)}for(a=new M2(n.b,0);a.b<a.d.gc();)0==(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)).a.c.length&&fW(a)}function FKn(n,t){var e,i,r,c,a,u,o;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),M7n)))){for(i=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)mK(r=c[a],"##other")?WB(i,"!##"+az(n,Utn(t.Hj()))):mK(r,"##local")?i.c[i.c.length]=null:mK(r,E7n)?WB(i,az(n,Utn(t.Hj()))):i.c[i.c.length]=r;return i}return SQ(),SQ(),set}function BKn(n,t){var e,i,r;return e=new Xn,(i=1==(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())?1:0)<(r=1==(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?1:0)?-1:i==r?0:1}function HKn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(r=qy(TD(mMn(u=n.i,(HXn(),wgt)))),h=0,i=0,s=new Wb(n.g);s.a<s.c.c.length;)c=(a=b5(o=BB(n0(s),17)))&&r&&qy(TD(mMn(o,dgt))),l=o.d.i,a&&c?++i:a&&!c?++h:vW(l).e==u?++i:++h;for(e=new Wb(n.e);e.a<e.c.c.length;)c=(a=b5(t=BB(n0(e),17)))&&r&&qy(TD(mMn(t,dgt))),f=t.c.i,a&&c?++h:a&&!c?++i:vW(f).e==u?++h:++i;return h-i}function qKn(n,t,e,i){this.e=n,this.k=BB(mMn(n,(hWn(),Alt)),304),this.g=x8(Out,a1n,10,t,0,1),this.b=x8(Ptt,sVn,333,t,7,1),this.a=x8(Out,a1n,10,t,0,1),this.d=x8(Ptt,sVn,333,t,7,1),this.j=x8(Out,a1n,10,t,0,1),this.i=x8(Ptt,sVn,333,t,7,1),this.p=x8(Ptt,sVn,333,t,7,1),this.n=x8(ktt,sVn,476,t,8,1),yS(this.n,(hN(),!1)),this.f=x8(ktt,sVn,476,t,8,1),yS(this.f,!0),this.o=e,this.c=i}function GKn(n,t){var e,i,r;if(!t.dc())if(BB(t.Xb(0),286).d==($Pn(),nht))Akn(n,t);else for(i=t.Kc();i.Ob();){switch((e=BB(i.Pb(),286)).d.g){case 5:hPn(n,e,Vbn(n,e));break;case 0:hPn(n,e,(r=(e.f-e.c+1-1)/2|0,e.c+r));break;case 4:hPn(n,e,$nn(n,e));break;case 2:Kwn(e),hPn(n,e,$En(e)?e.c:e.f);break;case 1:Kwn(e),hPn(n,e,$En(e)?e.f:e.c)}hMn(e.a)}}function zKn(n,t){var e,i,r,c,a;if(!t.e){for(t.e=!0,i=t.d.a.ec().Kc();i.Ob();)e=BB(i.Pb(),17),t.o&&t.d.a.gc()<=1?(a=new xC((c=t.a.c)+(t.a.c+t.a.b-c)/2,t.b),DH(BB(t.d.a.ec().Kc().Pb(),17).a,a)):(r=BB(RX(t.c,e),459)).b||r.c?dKn(n,e,t):n.d==(Usn(),rmt)&&(r.d||r.e)&&LOn(n,t)&&t.d.a.gc()<=1?dzn(e,t):DDn(n,e,t);t.k&&e5(t.d,new Te)}}function UKn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g,p,v,m;for(o=(r+c)/2+a,g=i*e.Math.cos(o),p=i*e.Math.sin(o),v=g-t.g/2,m=p-t.f/2,Pen(t,v),Cen(t,m),l=n.a.jg(t),(d=2*e.Math.acos(i/i+n.c))<c-r?(b=d/l,u=(r+c-d)/2):(b=(c-r)/l,u=r),w=wDn(t),n.e&&(n.e.kg(n.d),n.e.lg(w)),h=new Wb(w);h.a<h.c.c.length;)s=BB(n0(h),33),f=n.a.jg(s),UKn(n,s,i+n.c,u,u+b*f,a),u+=b*f}function XKn(n,t,e){var i;switch(i=e.q.getMonth(),t){case 5:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[i]);break;case 4:oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[i]);break;case 3:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[i]);break;default:Enn(n,i+1,t)}}function WKn(n,t){var e,i,r,c;if(OTn(t,"Network simplex",1),n.e.a.c.length<1)HSn(t);else{for(r=new Wb(n.e.a);r.a<r.c.c.length;)BB(n0(r),121).e=0;for((c=n.e.a.c.length>=40)&&EFn(n),BHn(n),Txn(n),e=yln(n),i=0;e&&i<n.f;)e_n(n,e,e$n(n,e)),e=yln(n),++i;c&&tTn(n),n.a?p$n(n,fKn(n)):fKn(n),n.b=null,n.d=null,n.p=null,n.c=null,n.g=null,n.i=null,n.n=null,n.o=null,HSn(t)}}function VKn(n,t,e,i){var r,c,a,u,o,s,h,f;for(XR(u=new xC(e,i),BB(mMn(t,(Mrn(),oat)),8)),f=new Wb(t.e);f.a<f.c.c.length;)UR((h=BB(n0(f),144)).d,u),WB(n.e,h);for(a=new Wb(t.c);a.a<a.c.c.length;){for(r=new Wb((c=BB(n0(a),282)).a);r.a<r.c.c.length;)UR(BB(n0(r),559).d,u);WB(n.c,c)}for(s=new Wb(t.d);s.a<s.c.c.length;)UR((o=BB(n0(s),447)).d,u),WB(n.d,o)}function QKn(n,t){var e,i,r,c,a,u,o,s;for(o=new Wb(t.j);o.a<o.c.c.length;)for(r=new m6((u=BB(n0(o),11)).b);y$(r.a)||y$(r.b);)t!=(c=(e=(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==u?i.d:i.c).i)&&((s=BB(mMn(i,(HXn(),fpt)),19).a)<0&&(s=0),a=c.p,0==n.b[a]&&(i.d==e?(n.a[a]-=s+1,n.a[a]<=0&&n.c[a]>0&&DH(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&DH(n.e,c))))}function YKn(n){var t,e,i,r,c,a,u;for(c=new dE(BB(yX(new Rn),62)),u=KQn,e=new Wb(n.d);e.a<e.c.c.length;){for(u=(t=BB(n0(e),222)).c.c;0!=c.a.c&&(a=BB(MU(q9(c.a)),222)).c.c+a.c.b<u;)$J(c.a,a);for(r=new Fb(new BR(new xN(new _b(c.a).a).b));aS(r.a.a);)DH((i=BB(mx(r.a).cd(),222)).b,t),DH(t.b,i);Mon(c.a,t,(hN(),ptt))}}function JKn(n,t,e){var i,r,c,a,u,o,s,h,f;for(c=new J6(t.c.length),s=new Wb(t);s.a<s.c.c.length;)a=BB(n0(s),10),WB(c,n.b[a.c.p][a.p]);for(mqn(n,c,e),f=null;f=ezn(c);)rBn(n,BB(f.a,233),BB(f.b,233),c);for(t.c=x8(Ant,HWn,1,0,5,1),r=new Wb(c);r.a<r.c.c.length;)for(o=0,h=(u=(i=BB(n0(r),233)).d).length;o<h;++o)a=u[o],t.c[t.c.length]=a,n.a[a.c.p][a.p].a=lL(i.g,i.d[0]).a}function ZKn(n,t){var e,i,r,c;if(0<(cL(n,14)?BB(n,14).gc():F3(n.Kc()))){if(1<(r=t)){for(--r,c=new pa,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));return ZKn(c,r)}if(r<0){for(c=new va,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));if(0<(cL(c,14)?BB(c,14).gc():F3(c.Kc())))return ZKn(c,r)}}return BB(iL(n.Kc()),86)}function n_n(){n_n=O,GIt=new QC("DEFAULT_MINIMUM_SIZE",0),UIt=new QC("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),qIt=new QC("COMPUTE_PADDING",2),XIt=new QC("OUTSIDE_NODE_LABELS_OVERHANG",3),WIt=new QC("PORTS_OVERHANG",4),QIt=new QC("UNIFORM_PORT_SPACING",5),VIt=new QC("SPACE_EFFICIENT_PORT_LABELS",6),zIt=new QC("FORCE_TABULAR_NODE_LABELS",7),HIt=new QC("ASYMMETRICAL",8)}function t_n(n,t){var e,i,r,c,a,u,o,s;if(t){if(e=(c=t.Tg())?Utn(c).Nh().Jh(c):null){for(Jgn(n,t,e),o=0,s=(null==(r=t.Tg()).i&&qFn(r),r.i).length;o<s;++o)null==r.i&&qFn(r),i=r.i,(u=o>=0&&o<i.length?i[o]:null).Ij()&&!u.Jj()&&(cL(u,322)?nvn(n,BB(u,34),t,e):0!=((a=BB(u,18)).Bb&h6n)&&sEn(n,a,t,e));t.kh()&&BB(e,49).vh(BB(t,49).qh())}return e}return null}function e_n(n,t,e){var i,r,c;if(!t.f)throw Hp(new _y("Given leave edge is no tree edge."));if(e.f)throw Hp(new _y("Given enter edge is a tree edge already."));for(t.f=!1,eL(n.p,t),e.f=!0,TU(n.p,e),i=e.e.e-e.d.e-e.a,FCn(n,e.e,t)||(i=-i),c=new Wb(n.e.a);c.a<c.c.c.length;)FCn(n,r=BB(n0(c),121),t)||(r.e+=i);n.j=1,nk(n.c),pIn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}function i_n(n,t){var e,i,r,c,a,u;if((u=BB(mMn(t,(HXn(),ept)),98))==(QEn(),WCt)||u==XCt)for(r=new xC(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((e=BB(mMn(c,(hWn(),Qft)),61))!=(kUn(),oIt)&&e!=CIt||(i=Gy(MD(mMn(c,Tlt))),u==WCt&&(i*=r),c.n.b=i-BB(mMn(c,npt),8).b,Jan(c,!1,!0)))}function r_n(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;if(Ytn(n,t,e),c=t[e],b=i?(kUn(),CIt):(kUn(),oIt),mL(t.length,e,i)){for(G6(n,r=t[i?e-1:e+1],i?(ain(),qvt):(ain(),Hvt)),h=0,l=(o=c).length;h<l;++h)xvn(n,a=o[h],b);for(G6(n,c,i?(ain(),Hvt):(ain(),qvt)),s=0,f=(u=r).length;s<f;++s)(a=u[s]).e||xvn(n,a,Tln(b))}else for(s=0,f=(u=c).length;s<f;++s)xvn(n,a=u[s],b);return!1}function c_n(n,t,e,i){var r,c,a,u,o;u=abn(t,e),(e==(kUn(),SIt)||e==CIt)&&(u=cL(u,152)?o6(BB(u,152)):cL(u,131)?BB(u,131).a:cL(u,54)?new fy(u):new CT(u)),a=!1;do{for(r=!1,c=0;c<u.gc()-1;c++)BMn(n,BB(u.Xb(c),11),BB(u.Xb(c+1),11),i)&&(a=!0,k0(n.a,BB(u.Xb(c),11),BB(u.Xb(c+1),11)),o=BB(u.Xb(c+1),11),u._c(c+1,BB(u.Xb(c),11)),u._c(c,o),r=!0)}while(r);return a}function a_n(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;if(!mA(n.e))return BB(YIn(n,t,e),72);if(t!=e&&(a=(b=(r=BB(n.g,119))[e]).ak(),$xn(n.e,a))){for(w=axn(n.e.Tg(),a),o=-1,u=-1,i=0,s=0,f=t>e?t:e;s<=f;++s)s==e?u=i++:(c=r[s],h=w.rl(c.ak()),s==t&&(o=s!=f||h?i:i-1),h&&++i);return l=BB(Iln(n,t,e),72),u!=o&&Lv(n,new j9(n.e,7,a,iln(u),b.dd(),o)),l}return BB(Iln(n,t,e),72)}function u_n(n,t){var e,i,r,c,a,u;for(OTn(t,"Port order processing",1),u=BB(mMn(n,(HXn(),opt)),421),e=new Wb(n.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)i=BB(n0(r),10),c=BB(mMn(i,ept),98),a=i.j,c==(QEn(),UCt)||c==WCt||c==XCt?(SQ(),m$(a,sst)):c!=QCt&&c!=YCt&&(SQ(),m$(a,fst),Lvn(a),u==(U7(),_vt)&&m$(a,hst)),i.i=!0,eIn(i);HSn(t)}function o_n(n){var t,i,r,c,a,u,o,s;for(s=new xp,t=new Fv,u=n.Kc();u.Ob();)c=BB(u.Pb(),10),o=AN(oM(new qv,c),t),jCn(s.f,c,o);for(a=n.Kc();a.Ob();)for(r=new oz(ZL(lbn(c=BB(a.Pb(),10)).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||UNn(aM(cM(rM(uM(new Hv,e.Math.max(1,BB(mMn(i,(HXn(),lpt)),19).a)),1),BB(RX(s,i.c.i),121)),BB(RX(s,i.d.i),121)));return t}function s_n(){s_n=O,byt=dq(new B2,(yMn(),Fat),(lWn(),vot)),dyt=dq(new B2,_at,jot),gyt=WG(dq(new B2,_at,Dot),Bat,xot),lyt=WG(dq(dq(new B2,_at,lot),Fat,bot),Bat,wot),pyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),wyt=WG(new B2,Bat,mot),hyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),fyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function h_n(n,t,e,i,r,c){var a,u,o,s,h,f;for(a=lSn(t,o=jon(t)-jon(n)),u=M$(0,0,0);o>=0&&(!Cyn(n,a)||(o<22?u.l|=1<<o:o<44?u.m|=1<<o-22:u.h|=1<<o-44,0!=n.l||0!=n.m||0!=n.h));)s=a.m,h=a.h,f=a.l,a.h=h>>>1,a.m=s>>>1|(1&h)<<21,a.l=f>>>1|(1&s)<<21,--o;return e&&Oon(u),c&&(i?(ltt=aon(n),r&&(ltt=hun(ltt,(X7(),dtt)))):ltt=M$(n.l,n.m,n.h)),u}function f_n(n,t){var e,i,r,c,a,u,o,s,h,f;for(s=n.e[t.c.p][t.p]+1,o=t.c.a.c.length+1,u=new Wb(n.a);u.a<u.c.c.length;){for(a=BB(n0(u),11),f=0,c=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(a),new Gw(a)])));dAn(r);)(i=BB(U5(r),11)).i.c==t.c&&(f+=bL(n,i.i)+1,++c);e=f/c,(h=a.j)==(kUn(),oIt)?n.f[a.p]=e<s?n.c-e:n.b+(o-e):h==CIt&&(n.f[a.p]=e<s?n.b+e:n.c-(o-e))}}function l_n(n,t,e){var i,r,c,a;if(null==n)throw Hp(new Mk(zWn));for(i=(c=n.length)>0&&(b1(0,n.length),45==n.charCodeAt(0)||(b1(0,n.length),43==n.charCodeAt(0)))?1:0;i<c;i++)if(-1==egn((b1(i,n.length),n.charCodeAt(i))))throw Hp(new Mk(DQn+n+'"'));if(r=(a=parseInt(n,10))<t,isNaN(a))throw Hp(new Mk(DQn+n+'"'));if(r||a>e)throw Hp(new Mk(DQn+n+'"'));return a}function b_n(n){var t,i,r,c,a,u;for(a=new YT,c=new Wb(n.a);c.a<c.c.c.length;)Vl(r=BB(n0(c),112),r.f.c.length),Ql(r,r.k.c.length),0==r.i&&(r.o=0,r5(a,r,a.c.b,a.c));for(;0!=a.b;)for(i=(r=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),112)).o+1,t=new Wb(r.f);t.a<t.c.c.length;)Yl(u=BB(n0(t),129).a,e.Math.max(u.o,i)),Ql(u,u.i-1),0==u.i&&r5(a,u,a.c.b,a.c)}function w_n(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n);a.a<a.c.c.length;){for(c=BB(n0(a),79),u=(i=PTn(BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82))).i,o=i.j,CA(r=BB(Wtn((!c.a&&(c.a=new eU(FOt,c,6,6)),c.a),0),202),r.j+u,r.k+o),PA(r,r.b+u,r.c+o),e=new AL((!r.a&&(r.a=new $L(xOt,r,5)),r.a));e.e!=e.i.gc();)TA(t=BB(kpn(e),469),t.a+u,t.b+o);Yrn(BB(ZAn(c,(sWn(),OSt)),74),u,o)}}function d_n(n){switch(n){case 100:return mWn(snt,!0);case 68:return mWn(snt,!1);case 119:return mWn(hnt,!0);case 87:return mWn(hnt,!1);case 115:return mWn(fnt,!0);case 83:return mWn(fnt,!1);case 99:return mWn(lnt,!0);case 67:return mWn(lnt,!1);case 105:return mWn(bnt,!0);case 73:return mWn(bnt,!1);default:throw Hp(new dy(ont+n.toString(16)))}}function g_n(n){var t,i,r,c,a;switch(c=BB(xq(n.a,0),10),t=new $vn(n),WB(n.a,t),t.o.a=e.Math.max(1,c.o.a),t.o.b=e.Math.max(1,c.o.b),t.n.a=c.n.a,t.n.b=c.n.b,BB(mMn(c,(hWn(),Qft)),61).g){case 4:t.n.a+=2;break;case 1:t.n.b+=2;break;case 2:t.n.a-=2;break;case 3:t.n.b-=2}return CZ(r=new CSn,t),SZ(i=new wY,a=BB(xq(c.j,0),11)),MZ(i,r),UR(kO(r.n),a.n),UR(kO(r.a),a.a),t}function p_n(n,t,e,i,r){e&&(!i||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.b],10).k==(uSn(),Sut)?hFn(BB(n.a[n.b],10),(Xyn(),jCt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.c-1&n.a.length-1],10).k==(uSn(),Sut)?hFn(BB(n.a[n.c-1&n.a.length-1],10),(Xyn(),ECt)):2==(n.c-n.b&n.a.length-1)?(hFn(BB(Eon(n),10),(Xyn(),jCt)),hFn(BB(Eon(n),10),ECt)):sLn(n,r),o4(n)}function v_n(n,t,i){var r,c,a,u,o;for(a=0,c=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));c.e!=c.i.gc();)u="",0==(!(r=BB(kpn(c),33)).n&&(r.n=new eU(zOt,r,1,7)),r.n).i||(u=BB(Wtn((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n),0),137).a),qan(o=new csn(a++,t,u),r),hon(o,(qqn(),skt),r),o.e.b=r.j+r.f/2,o.f.a=e.Math.max(r.g,1),o.e.a=r.i+r.g/2,o.f.b=e.Math.max(r.f,1),DH(t.b,o),jCn(i.f,r,o)}function m_n(n){var t,e,i,r,c;i=BB(mMn(n,(hWn(),dlt)),33),c=BB(ZAn(i,(HXn(),Fgt)),174).Hc((mdn(),_It)),n.e||(r=BB(mMn(n,Zft),21),t=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((bDn(),lft))?(Ypn(i,ept,(QEn(),XCt)),KUn(i,t.a,t.b,!1,!0)):qy(TD(ZAn(i,Bgt)))||KUn(i,t.a,t.b,!0,!0)),Ypn(i,Fgt,c?nbn(_It):new YK(e=BB(Vj(YIt),9),BB(SR(e,e.length),9),0))}function y_n(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(fV(n,t[0])){case 43:r=1;break;case 45:r=-1;break;default:return e.o=0,!0}if(++t[0],c=t[0],0==(a=UIn(n,t))&&t[0]==c)return!1;if(t[0]<n.length&&58==fV(n,t[0])){if(i=60*a,++t[0],c=t[0],0==(a=UIn(n,t))&&t[0]==c)return!1;i+=a}else(i=a)<24&&t[0]-c<=2?i*=60:i=i%100+60*(i/100|0);return i*=r,e.o=-i,!0}function k_n(n){var t,e,i,r,c,a,u;for(r=new Np,i=new oz(ZL(lbn(n.b).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))&&WB(r,new j6(e,v9(n,e.c),v9(n,e.d)));for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(c=BB(t.dd(),113)).d.p=0;for(a=new Kb(new Ob(n.e).a.vc().Kc());a.a.Ob();)t=BB(a.a.Pb(),42),0==(c=BB(t.dd(),113)).d.p&&WB(n.d,RKn(n,c))}function j_n(n){var t,e,i,r,c;for(c=WJ(n),r=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));r.e!=r.i.gc();)if(i=BB(kpn(r),79),!Ctn(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82)),c))return!0;for(e=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));e.e!=e.i.gc();)if(t=BB(kpn(e),79),!Ctn(PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),c))return!0;return!1}function E_n(n){var t,i,r,c,a,u,o,s;for(s=new km,o=null,i=BB(b3(t=spn(n,0)),8),c=BB(b3(t),8);t.b!=t.d.c;)o=i,i=c,c=BB(b3(t),8),a=ctn(XR(new xC(o.a,o.b),i)),u=ctn(XR(new xC(c.a,c.b),i)),r=10,r=e.Math.min(r,e.Math.abs(a.a+a.b)/2),r=e.Math.min(r,e.Math.abs(u.a+u.b)/2),a.a=HH(a.a)*r,a.b=HH(a.b)*r,u.a=HH(u.a)*r,u.b=HH(u.b)*r,DH(s,UR(a,i)),DH(s,UR(u,i));return s}function T_n(n,t,e,i){var r,c,a,u,o;return a=n.eh(),r=null,(o=n.Zg())?t&&0==(gKn(n,t,e).Bb&BQn)?(i=_pn(o.Vk(),n,i),n.uh(null),r=t.fh()):o=null:(a&&(o=a.fh()),t&&(r=t.fh())),o!=r&&o&&o.Zk(n),u=n.Vg(),n.Rg(t,e),o!=r&&r&&r.Yk(n),n.Lg()&&n.Mg()&&(a&&u>=0&&u!=e&&(c=new nU(n,1,u,a,null),i?i.Ei(c):i=c),e>=0&&(c=new nU(n,1,e,u==e?a:null,t),i?i.Ei(c):i=c)),i}function M_n(n){var t,e,i;if(null==n.b){if(i=new Sk,null!=n.i&&(cO(i,n.i),i.a+=":"),0!=(256&n.f)){for(0!=(256&n.f)&&null!=n.a&&(rQ(n.i)||(i.a+="//"),cO(i,n.a)),null!=n.d&&(i.a+="/",cO(i,n.d)),0!=(16&n.f)&&(i.a+="/"),t=0,e=n.j.length;t<e;t++)0!=t&&(i.a+="/"),cO(i,n.j[t]);null!=n.g&&(i.a+="?",cO(i,n.g))}else cO(i,n.a);null!=n.e&&(i.a+="#",cO(i,n.e)),n.b=i.a}return n.b}function S_n(n,t){var e,i,r,c,a,u;for(r=new Wb(t.a);r.a<r.c.c.length;)cL(c=mMn(i=BB(n0(r),10),(hWn(),dlt)),11)&&(u=yFn(t,i,(a=BB(c,11)).o.a,a.o.b),a.n.a=u.a,a.n.b=u.b,qCn(a,BB(mMn(i,Qft),61)));e=new xC(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))?(hon(n,(HXn(),ept),(QEn(),XCt)),BB(mMn(vW(n),Zft),21).Fc(dft),bGn(n,e,!1)):bGn(n,e,!0)}function P_n(n,t,e){var i,r,c,a,u;OTn(e,"Minimize Crossings "+n.a,1),i=0==t.b.c.length||!jE(AV(new Rq(null,new w1(t.b,16)),new aw(new Ac))).sd((dM(),tit)),u=1==t.b.c.length&&1==BB(xq(t.b,0),29).a.c.length,c=GI(mMn(t,(HXn(),sgt)))===GI((ufn(),pCt)),i||u&&!c||(Ssn(r=sxn(n,t),(a=BB(Dpn(r,0),214)).c.Rf()?a.c.Lf()?new Ud(n):new Xd(n):new zd(n)),afn(n)),HSn(e)}function C_n(n,t,e,i){var r,c,a,u;if(u=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),r=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),a=Zrn(n,t,u),c=Jrn(n,e,r),a&&r==a.a&&wW(e,a.g))return e;if(c&&!i)throw Hp(new _y("key already present: "+e));return a&&LLn(n,a),c&&LLn(n,c),YCn(n,new qW(e,r,t,u),c),c&&(c.e=null,c.c=null),a&&(a.e=null,a.c=null),qkn(n),a?a.g:null}function I_n(n,t,e){var i,r,c,a,u;for(c=0;c<t;c++){for(i=0,u=c+1;u<t;u++)i=rbn(rbn(cbn(e0(n[c],UQn),e0(n[u],UQn)),e0(e[c+u],UQn)),e0(dG(i),UQn)),e[c+u]=dG(i),i=jz(i,32);e[c+t]=dG(i)}for(ncn(e,e,t<<1),i=0,r=0,a=0;r<t;++r,a++)i=rbn(rbn(cbn(e0(n[r],UQn),e0(n[r],UQn)),e0(e[a],UQn)),e0(dG(i),UQn)),e[a]=dG(i),i=rbn(i=jz(i,32),e0(e[++a],UQn)),e[a]=dG(i),i=jz(i,32);return e}function O_n(n,t,i){var r,c,a,u,o,s,h,f;if(!h3(t)){for(s=Gy(MD(edn(i.c,(HXn(),Npt)))),!(h=BB(edn(i.c,Lpt),142))&&(h=new lm),r=i.a,c=null,o=t.Kc();o.Ob();)u=BB(o.Pb(),11),f=0,c?(f=s,f+=c.o.b):f=h.d,a=AN(oM(new qv,u),n.f),VW(n.k,u,a),UNn(aM(cM(rM(uM(new Hv,0),CJ(e.Math.ceil(f))),r),a)),c=u,r=a;UNn(aM(cM(rM(uM(new Hv,0),CJ(e.Math.ceil(h.a+c.o.b))),r),i.d))}}function A_n(n,t,e,i,r,c,a,u){var o,s,h;return h=!1,s=c-e.s,o=e.t-t.f+cHn(e,s,!1).a,!(i.g+u>s)&&(o+u+cHn(i,s,!1).a<=t.b&&(p9(e,c-e.s),e.c=!0,p9(i,c-e.s),Tvn(i,e.s,e.t+e.d+u),i.k=!0,xcn(e.q,i),h=!0,r&&(tin(t,i),i.j=t,n.c.length>a&&(Tkn((l1(a,n.c.length),BB(n.c[a],200)),i),0==(l1(a,n.c.length),BB(n.c[a],200)).a.c.length&&s6(n,a)))),h)}function $_n(n,t){var e,i,r,c,a;if(OTn(t,"Partition midprocessing",1),r=new pJ,JT(AV(new Rq(null,new w1(n.a,16)),new di),new ld(r)),0!=r.d){for(a=BB(P4(a1(new Rq(null,(r.i||(r.i=new HL(r,r.c))).Nc())),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=BB((i=a.Kc()).Pb(),19);i.Ob();)c=BB(i.Pb(),19),XLn(BB(h6(r,e),21),BB(h6(r,c),21)),e=c;HSn(t)}}function L_n(n,t,e){var i,r,c,a,u;if(0==t.p){for(t.p=1,(r=e)||(r=new rI(new Np,new YK(i=BB(Vj(FIt),9),BB(SR(i,i.length),9),0))),BB(r.a,15).Fc(t),t.k==(uSn(),Mut)&&BB(r.b,21).Fc(BB(mMn(t,(hWn(),Qft)),61)),a=new Wb(t.j);a.a<a.c.c.length;)for(c=BB(n0(a),11),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(c),new Gw(c)])));dAn(u);)L_n(n,BB(U5(u),11).i,r);return r}return null}function N_n(n,t){var e,i,r,c,a;if(n.Ab)if(n.Ab){if((a=n.Ab.i)>0)if(r=BB(n.Ab.g,1934),null==t){for(c=0;c<a;++c)if(null==(e=r[c]).d)return e}else for(c=0;c<a;++c)if(mK(t,(e=r[c]).d))return e}else if(null==t){for(i=new AL(n.Ab);i.e!=i.i.gc();)if(null==(e=BB(kpn(i),590)).d)return e}else for(i=new AL(n.Ab);i.e!=i.i.gc();)if(mK(t,(e=BB(kpn(i),590)).d))return e;return null}function x_n(n,t){var e,i,r,c,a,u,o;if(null==(o=TD(mMn(t,(CAn(),Nkt))))||(kW(o),o)){for(DOn(n,t),r=new Np,u=spn(t.b,0);u.b!=u.d.c;)(e=xPn(n,BB(b3(u),86),null))&&(qan(e,t),r.c[r.c.length]=e);if(n.a=null,n.b=null,r.c.length>1)for(i=new Wb(r);i.a<i.c.c.length;)for(c=0,a=spn((e=BB(n0(i),135)).b,0);a.b!=a.d.c;)BB(b3(a),86).g=c++;return r}return u6(Pun(Gk(Gyt,1),tZn,135,0,[t]))}function D_n(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p;crn(b=A3(n,qun(t),r),R2(r,q6n)),d=D2(w=r,U6n),cSn(new Lg(b).a,d),g=D2(w,"endPoint"),rSn(new Rg(b).a,g),p=N2(w,D6n),SEn(new Fg(b).a,p),f=R2(r,K6n),qR((c=new hI(n,b)).a,c.b,f),l=R2(r,R6n),GR((a=new fI(n,b)).a,a.b,l),s=N2(r,F6n),Fyn((u=new lI(e,b)).b,u.a,s),h=N2(r,_6n),Byn((o=new bI(i,b)).b,o.a,h)}function R_n(n,t,e){var i,r,c,a,u;switch(u=null,t.g){case 1:for(r=new Wb(n.j);r.a<r.c.c.length;)if(qy(TD(mMn(i=BB(n0(r),11),(hWn(),tlt)))))return i;hon(u=new CSn,(hWn(),tlt),(hN(),!0));break;case 2:for(a=new Wb(n.j);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),11),(hWn(),klt)))))return c;hon(u=new CSn,(hWn(),klt),(hN(),!0))}return u&&(CZ(u,n),qCn(u,e),yvn(u.n,n.o,e)),u}function K_n(n,t){var i,r,c,a,u,o;for(o=-1,u=new YT,r=new m6(n.b);y$(r.a)||y$(r.b);){for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),o=e.Math.max(o,Gy(MD(mMn(i,(HXn(),agt))))),i.c==n?JT(AV(new Rq(null,new w1(i.b,16)),new fe),new nd(u)):JT(AV(new Rq(null,new w1(i.b,16)),new le),new td(u)),a=spn(u,0);a.b!=a.d.c;)Lx(c=BB(b3(a),70),(hWn(),Uft))||hon(c,Uft,i);gun(t,u),yQ(u)}return o}function __n(n,t,e,i,r){var c,a,u,o;Bl(c=new $vn(n),(uSn(),Iut)),hon(c,(HXn(),ept),(QEn(),XCt)),hon(c,(hWn(),dlt),t.c.i),hon(a=new CSn,dlt,t.c),qCn(a,r),CZ(a,c),hon(t.c,Elt,c),Bl(u=new $vn(n),Iut),hon(u,ept,XCt),hon(u,dlt,t.d.i),hon(o=new CSn,dlt,t.d),qCn(o,r),CZ(o,u),hon(t.d,Elt,u),SZ(t,a),MZ(t,o),LZ(0,e.c.length),MS(e.c,0,c),i.c[i.c.length]=u,hon(c,Bft,iln(1)),hon(u,Bft,iln(1))}function F_n(n,t,i,r,c){var a,u,o,s,h;o=c?r.b:r.a,FT(n.a,r)||(h=o>i.s&&o<i.c,s=!1,0!=i.e.b&&0!=i.j.b&&(s|=e.Math.abs(o-Gy(MD(gx(i.e))))<lZn&&e.Math.abs(o-Gy(MD(gx(i.j))))<lZn,s|=e.Math.abs(o-Gy(MD(px(i.e))))<lZn&&e.Math.abs(o-Gy(MD(px(i.j))))<lZn),(h||s)&&((u=BB(mMn(t,(HXn(),vgt)),74))||(u=new km,hon(t,vgt,u)),r5(u,a=new wA(r),u.c.b,u.c),TU(n.a,a)))}function B_n(n,t,e,i){var r,c,a,u,o,s,h;if(WIn(n,t,e,i))return!0;for(a=new Wb(t.f);a.a<a.c.c.length;){switch(c=BB(n0(a),324),u=!1,s=(o=n.j-t.j+e)+t.o,r=(h=n.k-t.k+i)+t.p,c.a.g){case 0:u=Osn(n,o+c.b.a,0,o+c.c.a,h-1);break;case 1:u=Osn(n,s,h+c.b.a,n.o-1,h+c.c.a);break;case 2:u=Osn(n,o+c.b.a,r,o+c.c.a,n.p-1);break;default:u=Osn(n,0,h+c.b.a,o-1,h+c.c.a)}if(u)return!0}return!1}function H_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(fbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rI(e.c.i,e)));SQ(),m$(s,n.c),kG(n.b,u.p,s)}}function q_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(lbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rI(e.d.i,e)));SQ(),m$(s,n.c),kG(n.f,u.p,s)}}function G_n(n){NM(n,new MTn(vj(wj(pj(gj(new du,l5n),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new xu))),u2(n,l5n,QJn,zMt),u2(n,l5n,vZn,15),u2(n,l5n,pZn,iln(0)),u2(n,l5n,A4n,mpn(_Mt)),u2(n,l5n,PZn,mpn(BMt)),u2(n,l5n,SZn,mpn(qMt)),u2(n,l5n,VJn,f5n),u2(n,l5n,jZn,mpn(FMt)),u2(n,l5n,BZn,mpn(HMt)),u2(n,l5n,b5n,mpn(RMt)),u2(n,l5n,u3n,mpn(KMt))}function z_n(n,t){var e,i,r,c,a,u,o,s,h;if(a=(r=n.i).o.a,c=r.o.b,a<=0&&c<=0)return kUn(),PIt;switch(s=n.n.a,h=n.n.b,u=n.o.a,e=n.o.b,t.g){case 2:case 1:if(s<0)return kUn(),CIt;if(s+u>a)return kUn(),oIt;break;case 4:case 3:if(h<0)return kUn(),sIt;if(h+e>c)return kUn(),SIt}return(o=(s+u/2)/a)+(i=(h+e/2)/c)<=1&&o-i<=0?(kUn(),CIt):o+i>=1&&o-i>=0?(kUn(),oIt):i<.5?(kUn(),sIt):(kUn(),SIt)}function U_n(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(e=!1,o=Gy(MD(mMn(t,(HXn(),Opt)))),l=KVn*o,r=new Wb(t.b);r.a<r.c.c.length;)for(i=BB(n0(r),29),c=BB(n0(u=new Wb(i.a)),10),s=wU(n.a[c.p]);u.a<u.c.c.length;)a=BB(n0(u),10),s!=(h=wU(n.a[a.p]))&&(f=K$(n.b,c,a),c.n.b+c.o.b+c.d.a+s.a+f>a.n.b-a.d.d+h.a+l&&(b=s.g+h.g,h.a=(h.g*h.a+s.g*s.a)/b,h.g=b,s.f=h,e=!0)),c=a,s=h;return e}function X_n(n,t,e,i,r,c,a){var u,o,s,h,f;for(f=new bA,o=t.Kc();o.Ob();)for(h=new Wb(BB(o.Pb(),839).wf());h.a<h.c.c.length;)GI((s=BB(n0(h),181)).We((sWn(),gSt)))===GI((Rtn(),XPt))&&(rKn(f,s,!1,i,r,c,a),CPn(n,f));for(u=e.Kc();u.Ob();)for(h=new Wb(BB(u.Pb(),839).wf());h.a<h.c.c.length;)GI((s=BB(n0(h),181)).We((sWn(),gSt)))===GI((Rtn(),UPt))&&(rKn(f,s,!0,i,r,c,a),CPn(n,f))}function W_n(n,t,e){var i,r,c,a,u,o,s;for(a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)for(r=new oz(ZL(dLn(c=BB(kpn(a),33)).a.Kc(),new h));dAn(r);)nAn(i=BB(U5(r),79))||nAn(i)||QIn(i)||(o=BB(qI(AY(e.f,c)),86),s=BB(RX(e,PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))),86),o&&s&&(hon(u=new UQ(o,s),(qqn(),skt),i),qan(u,i),DH(o.d,u),DH(s.b,u),DH(t.a,u)))}function V_n(n,t){var i,r,c,a,u,o,s;for(o=BB(BB(h6(n.r,t),21),84).Kc();o.Ob();)(r=(u=BB(o.Pb(),111)).c?WH(u.c):0)>0?u.a?r>(s=u.b.rf().b)&&(n.v||1==u.c.d.c.length?(a=(r-s)/2,u.d.d=a,u.d.a=a):(i=(BB(xq(u.c.d,0),181).rf().b-s)/2,u.d.d=e.Math.max(0,i),u.d.a=r-i-s)):u.d.a=n.t+r:Hz(n.u)&&((c=_Tn(u.b)).d<0&&(u.d.d=-c.d),c.d+c.a>u.b.rf().b&&(u.d.a=c.d+c.a-u.b.rf().b))}function Q_n(n,t){var e;switch(vnn(n)){case 6:return XI(t);case 7:return UI(t);case 8:return zI(t);case 3:return Array.isArray(t)&&!((e=vnn(t))>=14&&e<=16);case 11:return null!=t&&typeof t===xWn;case 12:return null!=t&&(typeof t===AWn||typeof t==xWn);case 0:return Qpn(t,n.__elementTypeId$);case 2:return DU(t)&&!(t.im===I);case 1:return DU(t)&&!(t.im===I)||Qpn(t,n.__elementTypeId$);default:return!0}}function Y_n(n,t){var i,r,c,a;return r=e.Math.min(e.Math.abs(n.c-(t.c+t.b)),e.Math.abs(n.c+n.b-t.c)),a=e.Math.min(e.Math.abs(n.d-(t.d+t.a)),e.Math.abs(n.d+n.a-t.d)),(i=e.Math.abs(n.c+n.b/2-(t.c+t.b/2)))>n.b/2+t.b/2||(c=e.Math.abs(n.d+n.a/2-(t.d+t.a/2)))>n.a/2+t.a/2?1:0==i&&0==c?0:0==i?a/c+1:0==c?r/i+1:e.Math.min(r/i,a/c)+1}function J_n(n,t){var i,r,c,a,u,o;return(c=iin(n))==(o=iin(t))?n.e==t.e&&n.a<54&&t.a<54?n.f<t.f?-1:n.f>t.f?1:0:(r=n.e-t.e,(i=(n.d>0?n.d:e.Math.floor((n.a-1)*zQn)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*zQn)+1))>r+1?c:i<r-1?-c:(!n.c&&(n.c=yhn(n.f)),a=n.c,!t.c&&(t.c=yhn(t.f)),u=t.c,r<0?a=Nnn(a,kBn(-r)):r>0&&(u=Nnn(u,kBn(r))),tgn(a,u))):c<o?-1:1}function Z_n(n,t){var e,i,r,c,a,u,o;for(c=0,u=0,o=0,r=new Wb(n.f.e);r.a<r.c.c.length;)t!=(i=BB(n0(r),144))&&(c+=a=n.i[t.b][i.b],(e=W8(t.d,i.d))>0&&n.d!=(q7(),Aat)&&(u+=a*(i.d.a+n.a[t.b][i.b]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(q7(),Iat)&&(o+=a*(i.d.b+n.a[t.b][i.b]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new xC(u/c,t.d.b);case 2:return new xC(t.d.a,o/c);default:return new xC(u/c,o/c)}}function nFn(n,t){var e,i,r,c;if(zsn(),c=BB(mMn(n.i,(HXn(),ept)),98),0!=n.j.g-t.j.g||c!=(QEn(),UCt)&&c!=WCt&&c!=XCt)return 0;if(c==(QEn(),UCt)&&(e=BB(mMn(n,ipt),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a)))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function tFn(n){var t,e,i,r,c;for(WB(c=new J6((!n.a&&(n.a=new $L(xOt,n,5)),n.a).i+2),new xC(n.j,n.k)),JT(new Rq(null,(!n.a&&(n.a=new $L(xOt,n,5)),new w1(n.a,16))),new Ig(c)),WB(c,new xC(n.b,n.c)),t=1;t<c.c.length-1;)l1(t-1,c.c.length),e=BB(c.c[t-1],8),l1(t,c.c.length),i=BB(c.c[t],8),l1(t+1,c.c.length),r=BB(c.c[t+1],8),e.a==i.a&&i.a==r.a||e.b==i.b&&i.b==r.b?s6(c,t):++t;return c}function eFn(n,t){var e,i,r,c,a,u,o;for(e=ON(iM(tM(eM(new Wv,t),new gY(t.e)),gst),n.a),0==t.j.c.length||V9(BB(xq(t.j,0),57).a,e),o=new Dp,VW(n.e,e,o),a=new Rv,u=new Rv,c=new Wb(t.k);c.a<c.c.c.length;)TU(a,(r=BB(n0(c),17)).c),TU(u,r.d);(i=a.a.gc()-u.a.gc())<0?(Uun(o,!0,(Ffn(),_Pt)),Uun(o,!1,FPt)):i>0&&(Uun(o,!1,(Ffn(),_Pt)),Uun(o,!0,FPt)),Otn(t.g,new sP(n,e)),VW(n.g,t,e)}function iFn(){var n;for(iFn=O,Ltt=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),Ntt=x8(ANt,hQn,25,37,15,1),xtt=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),Dtt=x8(LNt,FQn,25,37,14,1),n=2;n<=36;n++)Ntt[n]=CJ(e.Math.pow(n,Ltt[n])),Dtt[n]=Ojn(bVn,Ntt[n])}function rFn(n){var t;if(1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));return t=new km,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),!1)),bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),!0)),t}function cFn(n,t){var e,i,r;for(r=!1,i=new oz(ZL((t.d?n.a.c==(gJ(),tyt)?fbn(t.b):lbn(t.b):n.a.c==(gJ(),nyt)?fbn(t.b):lbn(t.b)).a.Kc(),new h));dAn(i);)if(e=BB(U5(i),17),(qy(n.a.f[n.a.g[t.b.p].p])||b5(e)||e.c.i.c!=e.d.i.c)&&!qy(n.a.n[n.a.g[t.b.p].p])&&!qy(n.a.n[n.a.g[t.b.p].p])&&(r=!0,FT(n.b,n.a.g[Lmn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function aFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(SQ(),m$(n,new Xu),u=new M2(n,0),f=new Np,c=0;u.b<u.d.gc();)Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),157),0!=f.c.length&&iG(a)*eG(a)>2*c?(h=new Gtn(f),s=iG(a)/eG(a),o=yXn(h,t,new bm,e,i,r,s),UR(kO(h.e),o),f.c=x8(Ant,HWn,1,0,5,1),c=0,f.c[f.c.length]=h,f.c[f.c.length]=a,c=iG(h)*eG(h)+iG(a)*eG(a)):(f.c[f.c.length]=a,c+=iG(a)*eG(a));return f}function uFn(n,t,e){var i,r,c,a,u,o,s;if(0==(i=e.gc()))return!1;if(n.ej())if(o=n.fj(),kwn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,o):n.Zi(5,null,e,t,o),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)s=n.Oi(r),u=n.cj(s,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(kwn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)u=n.cj(n.Oi(r),u);u&&u.Fi()}return!0}function oFn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=n.Ui(t,n.oi(t,e)),e,t,c),n.bj()&&!(n.ni()&&a?Nfn(a,e):GI(a)===GI(e))?(a&&(r=n.dj(a,r)),(r=n.cj(e,r))?(r.Ei(i),r.Fi()):n.$i(i)):r?(r.Ei(i),r.Fi()):n.$i(i),a):(a=n.Ui(t,n.oi(t,e)),n.bj()&&!(n.ni()&&a?Nfn(a,e):GI(a)===GI(e))&&(r=null,a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function sFn(n,t){var i,r,c,a,u,o,s,h;if(n.e=t,n.f=BB(mMn(t,(Mrn(),hat)),230),XTn(t),n.d=e.Math.max(16*t.e.c.length+t.c.c.length,256),!qy(TD(mMn(t,(fRn(),Hct)))))for(h=n.e.e.c.length,o=new Wb(t.e);o.a<o.c.c.length;)(s=BB(n0(o),144).d).a=OG(n.f)*h,s.b=OG(n.f)*h;for(i=t.b,a=new Wb(t.c);a.a<a.c.c.length;)if(c=BB(n0(a),282),(r=BB(mMn(c,eat),19).a)>0){for(u=0;u<r;u++)WB(i,new hX(c));BCn(c)}}function hFn(n,t){var i,r,c,a,u;if(n.k==(uSn(),Sut)&&(i=jE(AV(BB(mMn(n,(hWn(),Plt)),15).Oc(),new aw(new ri))).sd((dM(),tit))?t:(Xyn(),TCt),hon(n,ult,i),i!=(Xyn(),ECt)))for(r=BB(mMn(n,dlt),17),u=Gy(MD(mMn(r,(HXn(),agt)))),a=0,i==jCt?a=n.o.b-e.Math.ceil(u/2):i==TCt&&(n.o.b-=Gy(MD(mMn(vW(n),jpt))),a=(n.o.b-e.Math.ceil(u))/2),c=new Wb(n.j);c.a<c.c.c.length;)BB(n0(c),11).n.b=a}function fFn(){fFn=O,JM(),TNt=new Rh,Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(z7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(X7n)]),Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),new $A("-1"),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE("\\c+")])]),new $A("0"),new $A("0"),new $A("1"),new $A("0"),new $A(int)}function lFn(n){var t,e;return n.c&&n.c.kh()&&(e=BB(n.c,49),n.c=BB(tfn(n,e),138),n.c!=e&&(0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,2,e,n.c)),cL(n.Cb,399)?n.Db>>16==-15&&n.Cb.nh()&&$7(new k9(n.Cb,9,13,e,n.c,uvn(H7(BB(n.Cb,59)),n))):cL(n.Cb,88)&&n.Db>>16==-23&&n.Cb.nh()&&(cL(t=n.c,88)||(gWn(),t=d$t),cL(e,88)||(gWn(),e=d$t),$7(new k9(n.Cb,9,10,e,t,uvn(a4(BB(n.Cb,26)),n)))))),n.c}function bFn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hypernodes processing",1),i=new Wb(n.b);i.a<i.c.c.length;)for(a=new Wb(BB(n0(i),29).a);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),10),(HXn(),bgt))))&&c.j.c.length<=2){for(s=0,o=0,e=0,r=0,u=new Wb(c.j);u.a<u.c.c.length;)switch(BB(n0(u),11).j.g){case 1:++s;break;case 2:++o;break;case 3:++e;break;case 4:++r}0==s&&0==e&&jXn(n,c,r<=o)}HSn(t)}function wFn(n,t){var e,i,r,c,a,u,o,s,h;for(OTn(t,"Layer constraint edge reversal",1),a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),h=-1,e=new Np,s=n2(c.a),r=0;r<s.length;r++)i=BB(mMn(s[r],(hWn(),ilt)),303),-1==h?i!=(z7(),Cft)&&(h=r):i==(z7(),Cft)&&(PZ(s[r],null),Qyn(s[r],h++,c)),i==(z7(),Sft)&&WB(e,s[r]);for(o=new Wb(e);o.a<o.c.c.length;)PZ(u=BB(n0(o),10),null),PZ(u,c)}HSn(t)}function dFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Hyperedge merging",1),xAn(n,t),u=new M2(t.b,0);u.b<u.d.gc();)if(Px(u.b<u.d.gc()),0!=(s=BB(u.d.Xb(u.c=u.b++),29).a).c.length)for(i=null,r=null,c=null,a=null,o=0;o<s.c.length;o++)l1(o,s.c.length),(r=(i=BB(s.c[o],10)).k)==(uSn(),Put)&&a==Put&&(h=hHn(i,c)).a&&(rDn(i,c,h.b,h.c),l1(o,s.c.length),PE(s.c,o,1),--o,i=c,r=a),c=i,a=r;HSn(e)}function gFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Ilt)))||GI(mMn(t.j,(HXn(),Ldt)))===GI((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Ilt)))&&hon(t.j,Ilt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Ilt,!0)),e=eKn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=eKn(n,t)}while(r>e);return r}function pFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Ilt)))||GI(mMn(t.j,(HXn(),Ldt)))===GI((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Ilt)))&&hon(t.j,Ilt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Ilt,!0)),e=nCn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=nCn(n,t)}while(r>e);return r}function vFn(n,t,e){var i,r,c,a,u,o,s;if(t==e)return!0;if(t=bAn(n,t),e=bAn(n,e),i=qvn(t)){if((o=qvn(e))!=i)return!!o&&(a=i.Dj())==o.Dj()&&null!=a;if(!t.d&&(t.d=new $L(VAt,t,1)),r=(c=t.d).i,!e.d&&(e.d=new $L(VAt,e,1)),r==(s=e.d).i)for(u=0;u<r;++u)if(!vFn(n,BB(Wtn(c,u),87),BB(Wtn(s,u),87)))return!1;return!0}return t.e==e.e}function mFn(n,t,e,i){var r,c,a,u,o,s,h,f;if($xn(n.e,t)){for(f=axn(n.e.Tg(),t),c=BB(n.g,119),h=null,o=-1,u=-1,r=0,s=0;s<n.i;++s)a=c[s],f.rl(a.ak())&&(r==e&&(o=s),r==i&&(u=s,h=a.dd()),++r);if(-1==o)throw Hp(new Ay(u8n+e+o8n+r));if(-1==u)throw Hp(new Ay(s8n+i+o8n+r));return Iln(n,o,u),mA(n.e)&&Lv(n,LY(n,7,t,iln(i),h,e,!0)),h}throw Hp(new _y("The feature must be many-valued to support move"))}function yFn(n,t,e,i){var r,c,a,u,o;switch((o=new wA(t.n)).a+=t.o.a/2,o.b+=t.o.b/2,u=Gy(MD(mMn(t,(HXn(),tpt)))),c=n.f,a=n.d,r=n.c,BB(mMn(t,(hWn(),Qft)),61).g){case 1:o.a+=a.b+r.a-e/2,o.b=-i-u,t.n.b=-(a.d+u+r.b);break;case 2:o.a=c.a+a.b+a.c+u,o.b+=a.d+r.b-i/2,t.n.a=c.a+a.c+u-r.a;break;case 3:o.a+=a.b+r.a-e/2,o.b=c.b+a.d+a.a+u,t.n.b=c.b+a.a+u-r.b;break;case 4:o.a=-e-u,o.b+=a.d+r.b-i/2,t.n.a=-(a.b+u+r.a)}return o}function kFn(n){var t,e,i,r,c,a;return qan(i=new min,n),GI(mMn(i,(HXn(),Udt)))===GI((Ffn(),BPt))&&hon(i,Udt,Wln(i)),null==mMn(i,(C6(),TMt))&&(a=BB($Mn(n),160),hon(i,TMt,iO(a.We(TMt)))),hon(i,(hWn(),dlt),n),hon(i,Zft,new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),r=Pzn((JJ(n)&&(GM(),new Dy(JJ(n))),GM(),new JN(JJ(n)?new Dy(JJ(n)):null,n)),FPt),c=BB(mMn(i,zgt),116),eZ(e=i.d,c),eZ(e,r),i}function jFn(n,t,e){var i,r;i=t.c.i,r=e.d.i,i.k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,TD(mMn(i,slt)))):i.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,(hN(),!0))):r.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(r,hlt),11)),hon(n,flt,BB(mMn(r,flt),11)),hon(n,slt,(hN(),!0))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function EFn(n){var t,e,i,r,c,a,u;for(n.o=new Lp,i=new YT,a=new Wb(n.e.a);a.a<a.c.c.length;)1==kbn(c=BB(n0(a),121)).c.length&&r5(i,c,i.c.b,i.c);for(;0!=i.b;)0!=kbn(c=BB(0==i.b?null:(Px(0!=i.b),Atn(i,i.a.a)),121)).c.length&&(t=BB(xq(kbn(c),0),213),e=c.g.a.c.length>0,u=Nbn(t,c),KN(e?u.b:u.g,t),1==kbn(u).c.length&&r5(i,u,i.c.b,i.c),r=new rI(c,t),d3(n.o,r),y7(n.e.a,c))}function TFn(n,t){var i,r,c,a;return r=e.Math.abs(qz(n.b).a-qz(t.b).a),a=e.Math.abs(qz(n.b).b-qz(t.b).b),i=1,c=1,r>n.b.b/2+t.b.b/2&&(i=1-e.Math.min(e.Math.abs(n.b.c-(t.b.c+t.b.b)),e.Math.abs(n.b.c+n.b.b-t.b.c))/r),a>n.b.a/2+t.b.a/2&&(c=1-e.Math.min(e.Math.abs(n.b.d-(t.b.d+t.b.a)),e.Math.abs(n.b.d+n.b.a-t.b.d))/a),(1-e.Math.min(i,c))*e.Math.sqrt(r*r+a*a)}function MFn(n){var t,e,i;for(nUn(n,n.e,n.f,(dJ(),Lyt),!0,n.c,n.i),nUn(n,n.e,n.f,Lyt,!1,n.c,n.i),nUn(n,n.e,n.f,Nyt,!0,n.c,n.i),nUn(n,n.e,n.f,Nyt,!1,n.c,n.i),IFn(n,n.c,n.e,n.f,n.i),e=new M2(n.i,0);e.b<e.d.gc();)for(Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),128),i=new M2(n.i,e.b);i.b<i.d.gc();)Px(i.b<i.d.gc()),Nqn(t,BB(i.d.Xb(i.c=i.b++),128));IXn(n.i,BB(mMn(n.d,(hWn(),Slt)),230)),GGn(n.i)}function SFn(n,t){var e,i;if(null!=t)if(i=iyn(n)){if(0==(1&i.i))return nS(),!(e=BB(RX(mAt,i),55))||e.wj(t);if(i==$Nt)return zI(t);if(i==ANt)return cL(t,19);if(i==DNt)return cL(t,155);if(i==NNt)return cL(t,217);if(i==ONt)return cL(t,172);if(i==xNt)return UI(t);if(i==RNt)return cL(t,184);if(i==LNt)return cL(t,162)}else if(cL(t,56))return n.uk(BB(t,56));return!1}function PFn(){var n,t,e,i,r,c,a,u,o;for(PFn=O,WLt=x8(NNt,v6n,25,255,15,1),VLt=x8(ONt,WVn,25,64,15,1),t=0;t<255;t++)WLt[t]=-1;for(e=90;e>=65;e--)WLt[e]=e-65<<24>>24;for(i=122;i>=97;i--)WLt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)WLt[r]=r-48+52<<24>>24;for(WLt[43]=62,WLt[47]=63,c=0;c<=25;c++)VLt[c]=65+c&QVn;for(a=26,o=0;a<=51;++a,o++)VLt[a]=97+o&QVn;for(n=52,u=0;n<=61;++n,u++)VLt[n]=48+u&QVn;VLt[62]=43,VLt[63]=47}function CFn(n,t){var i,r,c,a,u,o,s,h,f,l,b;if(n.dc())return new Gj;for(s=0,f=0,r=n.Kc();r.Ob();)c=BB(r.Pb(),37).f,s=e.Math.max(s,c.a),f+=c.a*c.b;for(s=e.Math.max(s,e.Math.sqrt(f)*Gy(MD(mMn(BB(n.Kc().Pb(),37),(HXn(),Edt))))),l=0,b=0,o=0,i=t,u=n.Kc();u.Ob();)l+(h=(a=BB(u.Pb(),37)).f).a>s&&(l=0,b+=o+t,o=0),ZRn(a,l,b),i=e.Math.max(i,l+h.a),o=e.Math.max(o,h.b),l+=h.a+t;return new xC(i+t,b+o+t)}function IFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(a=new Wb(t);a.a<a.c.c.length;){if(o=(c=BB(n0(a),17)).c,e.a._b(o))dJ(),s=Lyt;else{if(!i.a._b(o))throw Hp(new _y("Source port must be in one of the port sets."));dJ(),s=Nyt}if(h=c.d,e.a._b(h))dJ(),f=Lyt;else{if(!i.a._b(h))throw Hp(new _y("Target port must be in one of the port sets."));dJ(),f=Nyt}u=new tCn(c,s,f),VW(n.b,c,u),r.c[r.c.length]=u}}function OFn(n,t){var e,i,r,c,a,u,o;if(!WJ(n))throw Hp(new Fy(F5n));if(c=(i=WJ(n)).g,r=i.f,c<=0&&r<=0)return kUn(),PIt;switch(u=n.i,o=n.j,t.g){case 2:case 1:if(u<0)return kUn(),CIt;if(u+n.g>c)return kUn(),oIt;break;case 4:case 3:if(o<0)return kUn(),sIt;if(o+n.f>r)return kUn(),SIt}return(a=(u+n.g/2)/c)+(e=(o+n.f/2)/r)<=1&&a-e<=0?(kUn(),CIt):a+e>=1&&a-e>=0?(kUn(),oIt):e<.5?(kUn(),sIt):(kUn(),SIt)}function AFn(n,t,e,i,r){var c,a;if(c=rbn(e0(t[0],UQn),e0(i[0],UQn)),n[0]=dG(c),c=kz(c,32),e>=r){for(a=1;a<r;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}else{for(a=1;a<e;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<r;a++)c=rbn(c,e0(i[a],UQn)),n[a]=dG(c),c=kz(c,32)}0!=Vhn(c,0)&&(n[a]=dG(c))}function $Fn(n){var t,e,i,r,c,a;if(wWn(),4!=n.e&&5!=n.e)throw Hp(new _y("Token#complementRanges(): must be RANGE: "+n.e));for(T$n(c=n),qHn(c),i=c.b.length+2,0==c.b[0]&&(i-=2),(e=c.b[c.b.length-1])==unt&&(i-=2),(r=new M0(4)).b=x8(ANt,hQn,25,i,15,1),a=0,c.b[0]>0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t<c.b.length-2;t+=2)r.b[a++]=c.b[t]+1,r.b[a++]=c.b[t+1]-1;return e!=unt&&(r.b[a++]=e+1,r.b[a]=unt),r.a=!0,r}function LFn(n,t,e){var i,r,c,a,u,o,s,h;if(0==(i=e.gc()))return!1;if(n.ej())if(s=n.fj(),BTn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,s):n.Zi(5,null,e,t,s),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)h=n.g[r],u=n.cj(h,u),u=n.jj(h,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(BTn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)o=n.g[r],u=n.cj(o,u);u&&u.Fi()}return!0}function NFn(n,t,e,i){var r,c,a,u,o;for(a=new Wb(n.k);a.a<a.c.c.length;)r=BB(n0(a),129),i&&r.c!=(O6(),Tyt)||(o=r.b).g<0&&r.d>0&&(Vl(o,o.d-r.d),r.c==(O6(),Tyt)&&Xl(o,o.a-r.d),o.d<=0&&o.i>0&&r5(t,o,t.c.b,t.c));for(c=new Wb(n.f);c.a<c.c.c.length;)r=BB(n0(c),129),i&&r.c!=(O6(),Tyt)||(u=r.a).g<0&&r.d>0&&(Ql(u,u.i-r.d),r.c==(O6(),Tyt)&&Wl(u,u.b-r.d),u.i<=0&&u.d>0&&r5(e,u,e.c.b,e.c))}function xFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Processor compute fanout",1),$U(n.b),$U(n.a),u=null,c=spn(t.b,0);!u&&c.b!=c.d.c;)qy(TD(mMn(s=BB(b3(c),86),(qqn(),dkt))))&&(u=s);for(r5(o=new YT,u,o.c.b,o.c),jUn(n,o),h=spn(t.b,0);h.b!=h.d.c;)a=SD(mMn(s=BB(b3(h),86),(qqn(),rkt))),r=null!=SJ(n.b,a)?BB(SJ(n.b,a),19).a:0,hon(s,ikt,iln(r)),i=1+(null!=SJ(n.a,a)?BB(SJ(n.a,a),19).a:0),hon(s,tkt,iln(i));HSn(e)}function DFn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(f=yEn(n,e),u=0;u<t;u++){for(yR(r,e),l=new Np,Px(i.b<i.d.gc()),b=BB(i.d.Xb(i.c=i.b++),407),s=f+u;s<n.b;s++)a=b,Px(i.b<i.d.gc()),WB(l,new Exn(a,b=BB(i.d.Xb(i.c=i.b++),407),e));for(h=f+u;h<n.b;h++)Px(i.b>0),i.a.Xb(i.c=--i.b),h>f+u&&fW(i);for(c=new Wb(l);c.a<c.c.c.length;)yR(i,BB(n0(c),407));if(u<t-1)for(o=f+u;o<n.b;o++)Px(i.b>0),i.a.Xb(i.c=--i.b)}}function RFn(){var n,t,e,i,r,c;if(wWn(),CNt)return CNt;for(sHn(n=new M0(4),ZUn(pnt,!0)),WGn(n,ZUn("M",!0)),WGn(n,ZUn("C",!0)),c=new M0(4),i=0;i<11;i++)Yxn(c,i,i);return sHn(t=new M0(4),ZUn("M",!0)),Yxn(t,4448,4607),Yxn(t,65438,65439),tqn(r=new r$(2),n),tqn(r,sNt),(e=new r$(2)).$l(gG(c,ZUn("L",!0))),e.$l(t),e=new h4(3,e),e=new UU(r,e),CNt=e}function KFn(n){var t,e;if(!Ycn(t=SD(ZAn(n,(sWn(),eSt))),n)&&!P8(n,mPt)&&(0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i||qy(TD(ZAn(n,SSt))))){if(null!=t&&0!=RMn(t).length)throw gzn(n,e=oO(oO(new lN("Layout algorithm '"),t),"' not found for ")),Hp(new rk(e.a));if(!Ycn(w1n,n))throw gzn(n,e=oO(oO(new lN("Unable to load default layout algorithm "),w1n)," for unconfigured node ")),Hp(new rk(e.a))}}function _Fn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(i=n.i,t=n.n,0==n.b)for(w=i.c+t.b,b=i.b-t.b-t.c,s=0,f=(u=n.a).length;s<f;++s)UG(c=u[s],w,b);else r=Wvn(n,!1),UG(n.a[0],i.c+t.b,r[0]),UG(n.a[2],i.c+i.b-t.c-r[2],r[2]),l=i.b-t.b-t.c,r[0]>0&&(l-=r[0]+n.c,r[0]+=n.c),r[2]>0&&(l-=r[2]+n.c),r[1]=e.Math.max(r[1],l),UG(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Te()}function FFn(n){var t,e,i,r,c,a,u,o,s,h,f;for((f=new aa).d=0,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),29),f.d+=c.a.c.length;for(i=0,r=0,f.a=x8(ANt,hQn,25,n.b.c.length,15,1),s=0,h=0,f.e=x8(ANt,hQn,25,f.d,15,1),e=new Wb(n.b);e.a<e.c.c.length;)for((t=BB(n0(e),29)).p=i++,f.a[t.p]=r++,h=0,o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p=s++,f.e[u.p]=h++;return f.c=new fg(f),f.b=sx(f.d),H_n(f,n),f.f=sx(f.d),q_n(f,n),f}function BFn(n,t){var i,r,c;for(c=BB(xq(n.n,n.n.c.length-1),211).d,n.p=e.Math.min(n.p,t.g),n.r=e.Math.max(n.r,c),n.g=e.Math.max(n.g,t.g+(1==n.b.c.length?0:n.i)),n.o=e.Math.min(n.o,t.f),n.e+=t.f+(1==n.b.c.length?0:n.i),n.f=e.Math.max(n.f,t.f),r=n.n.c.length>0?(n.n.c.length-1)*n.i:0,i=new Wb(n.n);i.a<i.c.c.length;)r+=BB(n0(i),211).a;n.d=r,n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function HFn(n,t){var e,i,r,c,a,u,o,s,h;if(null==(s=TD(mMn(t,(fRn(),iat))))||(kW(s),s)){for(h=x8($Nt,ZYn,25,t.e.c.length,16,1),a=kOn(t),r=new YT,o=new Wb(t.e);o.a<o.c.c.length;)(e=Y$n(n,BB(n0(o),144),null,null,h,a))&&(qan(e,t),r5(r,e,r.c.b,r.c));if(r.b>1)for(i=spn(r,0);i.b!=i.d.c;)for(c=0,u=new Wb((e=BB(b3(i),231)).e);u.a<u.c.c.length;)BB(n0(u),144).b=c++;return r}return u6(Pun(Gk(Kct,1),tZn,231,0,[t]))}function qFn(n){var t,e,i,r,c;if(!n.g){if(c=new To,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,qFn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(i=c.i,!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();++i)ub(BB(kpn(r),449),i);pX(c,(!n.s&&(n.s=new eU(FAt,n,21,17)),n.s)),chn(c),n.g=new don(n,c),n.i=BB(c.g,247),null==n.i&&(n.i=I$t),n.p=null,P5(n).b&=-5}return n.g}function GFn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(r=n.i,i=n.n,0==n.b)t=Xvn(n,!1),XG(n.a[0],r.d+i.d,t[0]),XG(n.a[2],r.d+r.a-i.a-t[2],t[2]),l=r.a-i.d-i.a,t[0]>0&&(t[0]+=n.c,l-=t[0]),t[2]>0&&(l-=t[2]+n.c),t[1]=e.Math.max(t[1],l),XG(n.a[1],r.d+i.d+t[0]-(t[1]-l)/2,t[1]);else for(w=r.d+i.d,b=r.a-i.d-i.a,s=0,f=(u=n.a).length;s<f;++s)XG(c=u[s],w,b);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Ue()}function zFn(n){var t,e,i,r,c,a,u,o,s;for(s=x8(ANt,hQn,25,n.b.c.length+1,15,1),o=new Rv,i=0,c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),s[i++]=o.a.gc(),u=new Wb(r.a);u.a<u.c.c.length;)for(e=new oz(ZL(lbn(BB(n0(u),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.zc(t,o);for(a=new Wb(r.a);a.a<a.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(a),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.Bc(t)}return s}function UFn(n,t,e,i){var r,c,a,u,o;if(o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&Nfn(c,e))return!0}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],o.rl(c.ak())&&Nfn(e,c.dd()))return!0;if(i)for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&GI(e)===GI(hD(n,BB(c.dd(),56))))return!0}else for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&null==c.dd())return!1;return!1}function XFn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),a=BB(n.g,119),$xn(n.e,t)){if(t.hi()&&(c=pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))>=0&&c!=e)throw Hp(new _y(a8n));for(r=0,o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak())){if(r==e)return BB(ovn(n,o,(ZM(),BB(t,66).Oj()?BB(i,72):Z3(t,i))),72);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak()))return ZM(),BB(t,66).Oj()?u:u.dd();return null}function WFn(n,t,i,r){var c,a,u,o;for(o=i,u=new Wb(t.a);u.a<u.c.c.length;){if(a=BB(n0(u),221),c=BB(a.b,65),Ibn(n.b.c,c.b.c+c.b.b)<=0&&Ibn(c.b.c,n.b.c+n.b.b)<=0&&Ibn(n.b.d,c.b.d+c.b.a)<=0&&Ibn(c.b.d,n.b.d+n.b.a)<=0){if(0==Ibn(c.b.c,n.b.c+n.b.b)&&r.a<0||0==Ibn(c.b.c+c.b.b,n.b.c)&&r.a>0||0==Ibn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Ibn(c.b.d+c.b.a,n.b.d)&&r.b>0){o=0;break}}else o=e.Math.min(o,HCn(n,c,r));o=e.Math.min(o,WFn(n,a,o,r))}return o}function VFn(n,t){var e,i,r,c,a,u;if(n.b<2)throw Hp(new _y("The vector chain must contain at least a source and a target point."));for(Px(0!=n.b),CA(t,(i=BB(n.a.a.c,8)).a,i.b),u=new cx((!t.a&&(t.a=new $L(xOt,t,5)),t.a)),c=spn(n,1);c.a<n.b-1;)a=BB(b3(c),8),u.e!=u.i.gc()?e=BB(kpn(u),469):(tE(),odn(u,e=new ro)),TA(e,a.a,a.b);for(;u.e!=u.i.gc();)kpn(u),Qjn(u);Px(0!=n.b),PA(t,(r=BB(n.c.b.c,8)).a,r.b)}function QFn(n,t){var e,i,r,c,a,u,o,s;for(e=0,i=new Wb((l1(0,n.c.length),BB(n.c[0],101)).g.b.j);i.a<i.c.c.length;)BB(n0(i),11).p=e++;for(t==(kUn(),sIt)?m$(n,new nc):m$(n,new tc),a=0,s=n.c.length-1;a<s;)l1(a,n.c.length),c=BB(n.c[a],101),l1(s,n.c.length),o=BB(n.c[s],101),r=t==sIt?c.c:c.a,u=t==sIt?o.a:o.c,bU(c,t,(Oun(),yst),r),bU(o,t,mst,u),++a,--s;a==s&&bU((l1(a,n.c.length),BB(n.c[a],101)),t,(Oun(),vst),null)}function YFn(n,t,e){var i,r,c,a,u,o,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new xC(t.i+t.g/2,t.j+t.f/2),(o=BB(ZAn(t,(sWn(),gPt)),8)).a=o.a+h,o.b=o.b+f,r=(a.b-o.b)/(a.a-o.a),i=a.b-r*a.a,u=new xC(e.i+e.g/2,e.j+e.f/2),(s=BB(ZAn(e,gPt),8)).a=s.a+h,s.b=s.b+f,c=(u.b-s.b)/(u.a-s.a),l=(i-(u.b-c*u.a))/(c-r),!(o.a<l&&a.a<l||l<o.a&&l<a.a||s.a<l&&u.a<l||l<s.a&&l<u.a)}function JFn(n,t){var e,i,r,c,a,u;if(!(a=BB(RX(n.c,t),183)))throw Hp(new ek("Edge did not exist in input."));return i=Qdn(a),!WE((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a))&&(e=new MB(n,i,u=new Cl),wO((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),e),rtn(a,x6n,u)),P8(t,(sWn(),OSt))&&!(!(r=BB(ZAn(t,OSt),74))||pW(r))&&(e5(r,new Qg(c=new Cl)),rtn(a,"junctionPoints",c)),AH(a,"container",XJ(t).k),null}function ZFn(n,t,e){var i,r,c,a,u,o;this.a=n,this.b=t,this.c=e,this.e=u6(Pun(Gk(uit,1),HWn,168,0,[new xS(n,t),new xS(t,e),new xS(e,n)])),this.f=u6(Pun(Gk(PMt,1),sVn,8,0,[n,t,e])),this.d=(i=XR(B$(this.b),this.a),r=XR(B$(this.c),this.a),c=XR(B$(this.c),this.b),a=i.a*(this.a.a+this.b.a)+i.b*(this.a.b+this.b.b),u=r.a*(this.a.a+this.c.a)+r.b*(this.a.b+this.c.b),o=2*(i.a*c.b-i.b*c.a),new xC((r.b*a-i.b*u)/o,(i.a*u-r.a*a)/o))}function nBn(n,t,e,i){var r,c,a,u,o,s,h,f,l;if(f=new GX(n.p),rtn(t,t8n,f),e&&!(n.f?rY(n.f):null).a.dc())for(rtn(t,"logs",s=new Cl),u=0,l=new qb((n.f?rY(n.f):null).b.Kc());l.b.Ob();)h=new GX(SD(l.b.Pb())),dnn(s,u),r4(s,u,h),++u;if(i&&rtn(t,"executionTime",new Sl(n.q)),!rY(n.a).a.dc())for(a=new Cl,rtn(t,A6n,a),u=0,c=new qb(rY(n.a).b.Kc());c.b.Ob();)r=BB(c.b.Pb(),1949),o=new py,dnn(a,u),r4(a,u,o),nBn(r,o,e,i),++u}function tBn(n,t){var e,i,r,c,a,u;for(c=n.c,a=n.d,SZ(n,null),MZ(n,null),t&&qy(TD(mMn(a,(hWn(),tlt))))?SZ(n,R_n(a.i,(ain(),qvt),(kUn(),oIt))):SZ(n,a),t&&qy(TD(mMn(c,(hWn(),klt))))?MZ(n,R_n(c.i,(ain(),Hvt),(kUn(),CIt))):MZ(n,c),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),70),(r=BB(mMn(e,(HXn(),Ydt)),272))==(Rtn(),XPt)?hon(e,Ydt,UPt):r==UPt&&hon(e,Ydt,XPt);u=qy(TD(mMn(n,(hWn(),Clt)))),hon(n,Clt,(hN(),!u)),n.a=Jon(n.a)}function eBn(n,t,i){var r,c,a,u,o;for(r=0,a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)u="",0==(!(c=BB(kpn(a),33)).n&&(c.n=new eU(zOt,c,1,7)),c.n).i||(u=BB(Wtn((!c.n&&(c.n=new eU(zOt,c,1,7)),c.n),0),137).a),qan(o=new qX(u),c),hon(o,(Mrn(),sat),c),o.b=r++,o.d.a=c.i+c.g/2,o.d.b=c.j+c.f/2,o.e.a=e.Math.max(c.g,1),o.e.b=e.Math.max(c.f,1),WB(t.e,o),jCn(i.f,c,o),BB(ZAn(c,(fRn(),Yct)),98),QEn()}function iBn(n,t){var i,r,c,a,u,o,s,h,f,l,b;i=AN(new qv,n.f),o=n.i[t.c.i.p],l=n.i[t.d.i.p],u=t.c,f=t.d,a=u.a.b,h=f.a.b,o.b||(a+=u.n.b),l.b||(h+=f.n.b),s=CJ(e.Math.max(0,a-h)),c=CJ(e.Math.max(0,h-a)),b=e.Math.max(1,BB(mMn(t,(HXn(),bpt)),19).a)*X3(t.c.i.k,t.d.i.k),r=new nC(UNn(aM(cM(rM(uM(new Hv,b),c),i),BB(RX(n.k,t.c),121))),UNn(aM(cM(rM(uM(new Hv,b),s),i),BB(RX(n.k,t.d),121)))),n.c[t.p]=r}function rBn(n,t,e,i){var r,c,a,u,o,s;for(a=new uGn(n,t,e),o=new M2(i,0),r=!1;o.b<o.d.gc();)Px(o.b<o.d.gc()),(u=BB(o.d.Xb(o.c=o.b++),233))==t||u==e?fW(o):!r&&Gy(lL(u.g,u.d[0]).a)>Gy(lL(a.g,a.d[0]).a)?(Px(o.b>0),o.a.Xb(o.c=--o.b),yR(o,a),r=!0):u.e&&u.e.gc()>0&&(c=(!u.e&&(u.e=new Np),u.e).Mc(t),s=(!u.e&&(u.e=new Np),u.e).Mc(e),(c||s)&&((!u.e&&(u.e=new Np),u.e).Fc(a),++a.c));r||(i.c[i.c.length]=a)}function cBn(n){var t,e,i;if(vA(BB(mMn(n,(HXn(),ept)),98)))for(e=new Wb(n.j);e.a<e.c.c.length;)(t=BB(n0(e),11)).j==(kUn(),PIt)&&((i=BB(mMn(t,(hWn(),Elt)),10))?qCn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qCn(t,oIt):qCn(t,CIt));else{for(e=new Wb(n.j);e.a<e.c.c.length;)t=BB(n0(e),11),(i=BB(mMn(t,(hWn(),Elt)),10))?qCn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qCn(t,(kUn(),oIt)):qCn(t,(kUn(),CIt));hon(n,ept,(QEn(),VCt))}}function aBn(n){var t,e;switch(n){case 91:case 93:case 45:case 94:case 44:case 92:e="\\"+String.fromCharCode(n&QVn);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=n<32?"\\x"+fx(t="0"+(n>>>0).toString(16),t.length-2,t.length):n>=BQn?"\\v"+fx(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&QVn)}return e}function uBn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=n.e,0==(o=t.e))return n;if(0==a)return 0==t.e?t:new lU(-t.e,t.d,t.a);if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a<0&&(e=j7(e)),o<0&&(i=j7(i)),npn(ibn(e,i));if(-1==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))f=-o,h=a==o?d6(t.a,u,n.a,c):N8(t.a,u,n.a,c);else if(f=a,a==o){if(0==r)return ODn(),eet;h=d6(n.a,c,t.a,u)}else h=N8(n.a,c,t.a,u);return X0(s=new lU(f,h.length,h)),s}function oBn(n){var t,e,i,r,c,a;for(this.e=new Np,this.a=new Np,e=n.b-1;e<3;e++)Kx(n,0,BB(Dpn(n,0),8));if(n.b<4)throw Hp(new _y("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,I$n(this,n.b+this.b-1),a=new Np,c=new Wb(this.e),t=0;t<this.b-1;t++)WB(a,MD(n0(c)));for(r=spn(n,0);r.b!=r.d.c;)i=BB(b3(r),8),WB(a,MD(n0(c))),WB(this.a,new wJ(i,a)),l1(0,a.c.length),a.c.splice(0,1)}function sBn(n,t){var e,i,r,c,a,u,o;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)for((c=BB(n0(a),10)).k==(uSn(),Sut)&&(u=BB(U5(new oz(ZL(fbn(c).a.Kc(),new h))),17),o=BB(U5(new oz(ZL(lbn(c).a.Kc(),new h))),17),hFn(c,qy(TD(mMn(u,(hWn(),Clt))))&&qy(TD(mMn(o,Clt)))?Xun(t):t)),i=new oz(ZL(lbn(c).a.Kc(),new h));dAn(i);)vun(e=BB(U5(i),17),qy(TD(mMn(e,(hWn(),Clt))))?Xun(t):t)}function hBn(n,t,e,i,r){var c,a;if(e.f>=t.o&&e.f<=t.f||.5*t.a<=e.f&&1.5*t.a>=e.f){if((c=BB(xq(t.n,t.n.c.length-1),211)).e+c.d+e.g+r<=i&&(BB(xq(t.n,t.n.c.length-1),211).f-n.f+e.f<=n.b||1==n.a.c.length))return ybn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return WB(t.b,e),a=BB(xq(t.n,t.n.c.length-1),211),WB(t.n,new RJ(t.s,a.f+a.a+t.i,t.i)),smn(BB(xq(t.n,t.n.c.length-1),211),e),BFn(t,e),!0}return!1}function fBn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=onn(n,t,e),e,t,c),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GI(a)===GI(e))?(null!=a&&(r=n.dj(a,r)),r=n.cj(e,r),n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):(n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)),a):(a=onn(n,t,e),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GI(a)===GI(e))&&(r=null,null!=a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function lBn(n,t){var i,r,c,a,u,o,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(u=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(o=u/60|0,s=u%60,r=n.q.getDate(),n.q.getHours()+o>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+o,n.q.getMinutes()+s,n.q.getSeconds(),n.q.getMilliseconds()),n.q.setTime(c.getTime()))),a=n.q.getTime(),n.q.setTime(a+36e5),n.q.getHours()!=t&&n.q.setTime(a)}function bBn(n,t){var e,i,r,c;if(OTn(t,"Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new MAn(n)).i&&(r.i=Wrn(r,new kc)),e=Gy(r.i)*r.f/(null==r.i&&(r.i=Wrn(r,new kc)),Gy(r.i)),r.b>e)HSn(t);else{switch(BB(mMn(n,(HXn(),Bpt)),337).g){case 2:c=new Tc;break;case 0:c=new wc;break;default:c=new Mc}if(i=c.Vf(n,r),!c.Wf())switch(BB(mMn(n,Xpt),338).g){case 2:i=XCn(r,i);break;case 1:i=KTn(r,i)}iqn(n,r,i),HSn(t)}else HSn(t)}function wBn(n,t){var e,i,r,c;if(f1(n.d,n.e),n.c.a.$b(),0!=Gy(MD(mMn(t.j,(HXn(),Idt))))||0!=Gy(MD(mMn(t.j,Idt))))for(e=ZJn,GI(mMn(t.j,Ldt))!==GI((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=gFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);else for(e=DWn,GI(mMn(t.j,Ldt))!==GI((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=pFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);}function dBn(n,t){var e,i,r,c,a,u;for(r=new Np,c=0,e=0,a=0;c<t.c.length-1&&e<n.gc();){for(i=BB(n.Xb(e),19).a+a;(l1(c+1,t.c.length),BB(t.c[c+1],19)).a<i;)++c;for(u=0,i-(l1(c,t.c.length),BB(t.c[c],19)).a>(l1(c+1,t.c.length),BB(t.c[c+1],19)).a-i&&++u,WB(r,(l1(c+u,t.c.length),BB(t.c[c+u],19))),a+=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a-i,++e;e<n.gc()&&BB(n.Xb(e),19).a+a<=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a;)++e;c+=1+u}return r}function gBn(n){var t,e,i,r,c;if(!n.d){if(c=new Po,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,gBn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new eU(QAt,n,11,10)),i=new AL(n.q);i.e!=i.i.gc();++r)BB(kpn(i),399);pX(c,(!n.q&&(n.q=new eU(QAt,n,11,10)),n.q)),chn(c),n.d=new NO((BB(Wtn(QQ((QX(),t$t).o),9),18),c.i),c.g),n.e=BB(c.g,673),null==n.e&&(n.e=C$t),P5(n).b&=-17}return n.d}function pBn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),o=0,r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(Nfn(c,e))return o;++o}}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],s.rl(c.ak())){if(Nfn(e,c.dd()))return o;++o}if(i)for(o=0,a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(GI(e)===GI(hD(n,BB(c.dd(),56))))return o;++o}}else for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(null==c.dd())return o;++o}return-1}function vBn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(SQ(),m$(n,new zu),a=zB(n),b=new Np,l=new Np,u=null,o=0;0!=a.b;)c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),157),!u||iG(u)*eG(u)/2<iG(c)*eG(c)?(u=c,b.c[b.c.length]=c):(o+=iG(c)*eG(c),l.c[l.c.length]=c,l.c.length>1&&(o>iG(u)*eG(u)/2||0==a.b)&&(f=new Gtn(l),h=iG(u)/eG(u),s=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),s),u=f,b.c[b.c.length]=f,o=0,l.c=x8(Ant,HWn,1,0,5,1)));return gun(b,l),b}function mBn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(e.mh(t)&&(h=(b=t)?BB(i,49).xh(b):null))if(d=e.bh(t,n.a),(w=t.t)>1||-1==w)if(f=BB(d,69),l=BB(h,69),f.dc())l.$b();else for(a=!!Cvn(t),c=0,u=n.a?f.Kc():f.Zh();u.Ob();)s=BB(u.Pb(),56),(r=BB(lnn(n,s),56))?(a?-1==(o=l.Xc(r))?l.Xh(c,r):c!=o&&l.ji(c,r):l.Xh(c,r),++c):n.b&&!a&&(l.Xh(c,s),++c);else null==d?h.Wb(null):null==(r=lnn(n,d))?n.b&&!Cvn(t)&&h.Wb(d):h.Wb(r)}function yBn(n,t){var i,r,c,a,u,o,s,f;for(i=new Le,c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&eTn(o=r.c.i,Xut)){if(-1==(f=VDn(n,o,Xut,Uut)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Np),WB(i.a,o)}for(u=new oz(ZL(lbn(t).a.Kc(),new h));dAn(u);)if(!b5(a=BB(U5(u),17))&&eTn(s=a.d.i,Uut)){if(-1==(f=VDn(n,s,Uut,Xut)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Np),WB(i.c,s)}return i}function kBn(n){var t,e,i,r;if($On(),t=CJ(n),n<uet.length)return uet[t];if(n<=50)return uOn((ODn(),net),t);if(n<=VVn)return G5(uOn(aet[1],t),t);if(n>1e6)throw Hp(new Oy("power of ten too big"));if(n<=DWn)return G5(uOn(aet[1],t),t);for(r=i=uOn(aet[1],DWn),e=fan(n-DWn),t=CJ(n%DWn);Vhn(e,DWn)>0;)r=Nnn(r,i),e=ibn(e,DWn);for(r=G5(r=Nnn(r,uOn(aet[1],t)),DWn),e=fan(n-DWn);Vhn(e,DWn)>0;)r=G5(r,DWn),e=ibn(e,DWn);return r=G5(r,t)}function jBn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hierarchical port dummy size processing",1),u=new Np,s=new Np,e=2*Gy(MD(mMn(n,(HXn(),kpt)))),r=new Wb(n.b);r.a<r.c.c.length;){for(i=BB(n0(r),29),u.c=x8(Ant,HWn,1,0,5,1),s.c=x8(Ant,HWn,1,0,5,1),a=new Wb(i.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((o=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sIt)?u.c[u.c.length]=c:o==SIt&&(s.c[s.c.length]=c));HOn(u,!0,e),HOn(s,!1,e)}HSn(t)}function EBn(n,t){var e,i,r,c,a;OTn(t,"Layer constraint postprocessing",1),0!=(a=n.b).c.length&&(l1(0,a.c.length),_Kn(n,BB(a.c[0],29),BB(xq(a,a.c.length-1),29),e=new HX(n),r=new HX(n)),0==e.a.c.length||(LZ(0,a.c.length),MS(a.c,0,e)),0==r.a.c.length||(a.c[a.c.length]=r)),Lx(n,(hWn(),nlt))&&(yDn(n,i=new HX(n),c=new HX(n)),0==i.a.c.length||(LZ(0,a.c.length),MS(a.c,0,i)),0==c.a.c.length||(a.c[a.c.length]=c)),HSn(t)}function TBn(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),oIt)||r==CIt))for(i=new oz(ZL(hbn(c).a.Kc(),new h));dAn(i);)0!=(t=(e=BB(U5(i),17)).a).b&&((u=e.c).i==c&&(Px(0!=t.b),BB(t.a.a.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).b),(o=e.d).i==c&&(Px(0!=t.b),BB(t.c.b.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).b))}function MBn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Sort By Input Model "+mMn(n,(HXn(),Ldt)),1),r=0,i=new Wb(n.b);i.a<i.c.c.length;){for(e=BB(n0(i),29),o=0==r?0:r-1,u=BB(xq(n.b,o),29),a=new Wb(e.a);a.a<a.c.c.length;)GI(mMn(c=BB(n0(a),10),ept))!==GI((QEn(),UCt))&&GI(mMn(c,ept))!==GI(XCt)&&(SQ(),m$(c.j,new O7(u,okn(c))),OH(t,"Node "+c+" ports: "+c.j));SQ(),m$(e.a,new Grn(u,BB(mMn(n,Ldt),339),BB(mMn(n,Adt),378))),OH(t,"Layer "+r+": "+e),++r}HSn(t)}function SBn(n,t){var e,i,r;if(r=kFn(t),JT(new Rq(null,(!t.c&&(t.c=new eU(XOt,t,9,9)),new w1(t.c,16))),new Uw(r)),uzn(t,i=BB(mMn(r,(hWn(),Zft)),21)),i.Hc((bDn(),lft)))for(e=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));e.e!=e.i.gc();)Qzn(n,t,r,BB(kpn(e),118));return 0!=BB(ZAn(t,(HXn(),Fgt)),174).gc()&&mDn(t,r),qy(TD(mMn(r,Xgt)))&&i.Fc(pft),Lx(r,gpt)&&My(new uwn(Gy(MD(mMn(r,gpt)))),r),GI(ZAn(t,sgt))===GI((ufn(),pCt))?cWn(n,t,r):eXn(n,t,r),r}function PBn(n,t,i,r){var c,a,u;if(this.j=new Np,this.k=new Np,this.b=new Np,this.c=new Np,this.e=new bA,this.i=new km,this.f=new Dp,this.d=new Np,this.g=new Np,WB(this.b,n),WB(this.b,t),this.e.c=e.Math.min(n.a,t.a),this.e.d=e.Math.min(n.b,t.b),this.e.b=e.Math.abs(n.a-t.a),this.e.a=e.Math.abs(n.b-t.b),c=BB(mMn(r,(HXn(),vgt)),74))for(u=spn(c,0);u.b!=u.d.c;)aen((a=BB(b3(u),8)).a,n.a)&&DH(this.i,a);i&&WB(this.j,i),WB(this.k,r)}function CBn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(h=new Xz(new xw(e)),vU(u=x8($Nt,ZYn,25,n.f.e.c.length,16,1),u.length),e[t.b]=0,s=new Wb(n.f.e);s.a<s.c.c.length;)(o=BB(n0(s),144)).b!=t.b&&(e[o.b]=DWn),F8(eMn(h,o));for(;0!=h.b.c.length;)for(u[(f=BB(mnn(h),144)).b]=!0,c=vN(new mT(n.b,f),0);c.c;)u[(l=$mn(r=BB(EZ(c),282),f)).b]||(a=Lx(r,(rkn(),pat))?Gy(MD(mMn(r,pat))):n.c,(i=e[f.b]+a)<e[l.b]&&(e[l.b]=i,srn(h,l),F8(eMn(h,l))))}function IBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(r=!0,a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),s=KQn,h=null,o=new Wb(c.a);o.a<o.c.c.length;){if(u=BB(n0(o),10),f=Gy(t.p[u.p])+Gy(t.d[u.p])-u.d.d,i=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a,!(f>s&&i>s)){r=!1,e.n&&OH(e,"bk node placement breaks on "+u+" which should have been after "+h);break}h=u,s=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a}if(!r)break}return e.n&&OH(e,t+" is feasible: "+r),r}function OBn(n,t,e,i){var r,c,a,u,o,s,h;for(u=-1,h=new Wb(n);h.a<h.c.c.length;)(s=BB(n0(h),112)).g=u--,a=r=dG(E2(NV(AV(new Rq(null,new w1(s.f,16)),new sa),new ha)).d),o=c=dG(E2(NV(AV(new Rq(null,new w1(s.k,16)),new fa),new la)).d),i||(a=dG(E2(NV(new Rq(null,new w1(s.f,16)),new ba)).d),o=dG(E2(NV(new Rq(null,new w1(s.k,16)),new wa)).d)),s.d=a,s.a=r,s.i=o,s.b=c,0==o?r5(e,s,e.c.b,e.c):0==a&&r5(t,s,t.c.b,t.c)}function ABn(n,t,e,i){var r,c,a,u,o,s,h;if(e.d.i!=t.i){for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XCt)),i.c[i.c.length]=r,CZ(a=new CSn,r),qCn(a,(kUn(),CIt)),CZ(u=new CSn,r),qCn(u,oIt),h=e.d,MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,h),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),GI(mMn(o=BB(s.d.Xb(s.c=s.b++),70),Ydt))===GI((Rtn(),UPt))&&(hon(o,Uft,e),fW(s),WB(c.b,o));yAn(r,a,u)}}function $Bn(n,t,e,i){var r,c,a,u,o,s;if(e.c.i!=t.i)for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XCt)),i.c[i.c.length]=r,CZ(a=new CSn,r),qCn(a,(kUn(),CIt)),CZ(u=new CSn,r),qCn(u,oIt),MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,t),yAn(r,a,u),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),o=BB(s.d.Xb(s.c=s.b++),70),BB(mMn(o,Ydt),272)==(Rtn(),UPt)&&(Lx(o,Uft)||hon(o,Uft,e),fW(s),WB(c.b,o))}function LBn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(l=new Np,p=S4(r),g=t*n.a,w=0,a=new Rv,u=new Rv,o=new Np,v=0,m=0,b=0,d=0,h=0,f=0;0!=p.a.gc();)(s=tbn(p,c,u))&&(p.a.Bc(s),o.c[o.c.length]=s,a.a.zc(s,a),w=n.f[s.p],v+=n.e[s.p]-w*n.b,m+=n.c[s.p]*n.b,f+=w*n.b,d+=n.e[s.p]),(!s||0==p.a.gc()||v>=g&&n.e[s.p]>w*n.b||m>=i*g)&&(l.c[l.c.length]=o,o=new Np,Frn(u,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=m,v=m,m=0,f=0,d=0);return new rI(b,l)}function NBn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(e=new Kb(new Ob(n.c.b).a.vc().Kc());e.a.Ob();)u=BB(e.a.Pb(),42),null==(r=(t=BB(u.dd(),149)).a)&&(r=""),!(i=_D(n.c,r))&&0==r.length&&(i=yfn(n)),i&&!ywn(i.c,t,!1)&&DH(i.c,t);for(a=spn(n.a,0);a.b!=a.d.c;)c=BB(b3(a),478),s=T5(n.c,c.a),l=T5(n.c,c.b),s&&l&&DH(s.c,new rI(l,c.c));for(yQ(n.a),f=spn(n.b,0);f.b!=f.d.c;)h=BB(b3(f),478),t=KD(n.c,h.a),o=T5(n.c,h.b),t&&o&&DM(t,o,h.c);yQ(n.b)}function xBn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;c=new Pl(n),d5((a=new dkn).g),d5(a.j),$U(a.b),d5(a.d),d5(a.i),$U(a.k),$U(a.c),$U(a.e),b=bIn(a,c,null),O$n(a,c),r=b,t&&(u=eHn(s=new Pl(t)),vSn(r,Pun(Gk(nMt,1),HWn,527,0,[u]))),l=!1,f=!1,e&&(s=new Pl(e),l8n in s.a&&(l=zJ(s,l8n).ge().a),b8n in s.a&&(f=zJ(s,b8n).ge().a)),h=$j(Fen(new Xm,l),f),BSn(new su,r,h),l8n in c.a&&rtn(c,l8n,null),(l||f)&&(nBn(h,o=new py,l,f),rtn(c,l8n,o)),i=new Xg(a),Uon(new OA(r),i)}function DBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(a=new Ykn,s=Pun(Gk(ANt,1),hQn,25,15,[0]),r=-1,c=0,i=0,o=0;o<n.b.c.length;++o){if(!((h=BB(xq(n.b,o),434)).b>0)){if(r=-1,32==fV(h.c,0)){if(f=s[0],ynn(t,s),s[0]>f)continue}else if($Y(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=o,c=s[0],i=0),r>=0){if(u=h.b,o==r&&0==(u-=i++))return 0;if(!LUn(t,s,h,u,a)){o=r-1,s[0]=c;continue}}else if(r=-1,!LUn(t,s,h,0,a))return 0}return dUn(a,e)?s[0]:0}function RBn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Mo,c=new Mo,null==(t=P$t).a.zc(n,t)){for(r=new AL(kY(n));r.e!=r.i.gc();)pX(a,RBn(BB(kpn(r),26)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),i=new AL(n.s);i.e!=i.i.gc();)cL(e=BB(kpn(i),170),99)&&f9(c,BB(e,18));chn(c),n.r=new TH(n,(BB(Wtn(QQ((QX(),t$t).o),6),18),c.i),c.g),pX(a,n.r),chn(a),n.f=new NO((BB(Wtn(QQ(t$t.o),5),18),a.i),a.g),P5(n).b&=-3}return n.f}function KBn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(a=n.o,i=x8(ANt,hQn,25,a,15,1),r=x8(ANt,hQn,25,a,15,1),e=n.p,t=x8(ANt,hQn,25,e,15,1),c=x8(ANt,hQn,25,e,15,1),s=0;s<a;s++){for(f=0;f<e&&!vmn(n,s,f);)++f;i[s]=f}for(h=0;h<a;h++){for(f=e-1;f>=0&&!vmn(n,h,f);)--f;r[h]=f}for(b=0;b<e;b++){for(u=0;u<a&&!vmn(n,u,b);)++u;t[b]=u}for(w=0;w<e;w++){for(u=a-1;u>=0&&!vmn(n,u,w);)--u;c[w]=u}for(o=0;o<a;o++)for(l=0;l<e;l++)o<c[l]&&o>t[l]&&l<r[o]&&l>i[o]&&FRn(n,o,l,!1,!0)}function _Bn(n){var t,e,i,r,c,a,u,o;e=qy(TD(mMn(n,(fRn(),Bct)))),c=n.a.c.d,u=n.a.d.d,e?(a=kL(XR(new xC(u.a,u.b),c),.5),o=kL(B$(n.e),.5),t=XR(UR(new xC(c.a,c.b),a),o),Hx(n.d,t)):(r=Gy(MD(mMn(n.a,rat))),i=n.d,c.a>=u.a?c.b>=u.b?(i.a=u.a+(c.a-u.a)/2+r,i.b=u.b+(c.b-u.b)/2-r-n.e.b):(i.a=u.a+(c.a-u.a)/2+r,i.b=c.b+(u.b-c.b)/2+r):c.b>=u.b?(i.a=c.a+(u.a-c.a)/2+r,i.b=u.b+(c.b-u.b)/2+r):(i.a=c.a+(u.a-c.a)/2+r,i.b=c.b+(u.b-c.b)/2-r-n.e.b))}function FBn(n,t){var e,i,r,c,a,u,o;if(null==n)return null;if(0==(c=n.length))return"";for(o=x8(ONt,WVn,25,c,15,1),_8(0,c,n.length),_8(0,c,o.length),YU(n,0,c,o,0),e=null,u=t,r=0,a=0;r<c;r++)i=o[r],EWn(),i<=32&&0!=(2&JLt[i])?u?(!e&&(e=new fN(n)),aY(e,r-a++)):(u=t,32!=i&&(!e&&(e=new fN(n)),sV(e,r-a,r-a+1,String.fromCharCode(32)))):u=!1;return u?e?(c=e.a.length)>0?fx(e.a,0,c-1):"":n.substr(0,c-1):e?e.a:n}function BBn(n){NM(n,new MTn(vj(wj(pj(gj(new du,UJn),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new at))),u2(n,UJn,XJn,mpn(Ect)),u2(n,UJn,WJn,mpn(pct)),u2(n,UJn,VJn,mpn(lct)),u2(n,UJn,QJn,mpn(vct)),u2(n,UJn,XYn,mpn(kct)),u2(n,UJn,WYn,mpn(yct)),u2(n,UJn,UYn,mpn(jct)),u2(n,UJn,VYn,mpn(mct)),u2(n,UJn,BJn,mpn(wct)),u2(n,UJn,HJn,mpn(bct)),u2(n,UJn,qJn,mpn(dct)),u2(n,UJn,GJn,mpn(gct))}function HBn(n,t,e,i){var r,c,a,u,o,s,h;if(Bl(c=new $vn(n),(uSn(),Iut)),hon(c,(HXn(),ept),(QEn(),XCt)),r=0,t){for(hon(a=new CSn,(hWn(),dlt),t),hon(c,dlt,t.i),qCn(a,(kUn(),CIt)),CZ(a,c),s=0,h=(o=Z0(t.e)).length;s<h;++s)MZ(o[s],a);hon(t,Elt,c),++r}if(e){for(u=new CSn,hon(c,(hWn(),dlt),e.i),hon(u,dlt,e),qCn(u,(kUn(),oIt)),CZ(u,c),s=0,h=(o=Z0(e.g)).length;s<h;++s)SZ(o[s],u);hon(e,Elt,c),++r}return hon(c,(hWn(),Bft),iln(r)),i.c[i.c.length]=c,c}function qBn(){qBn=O,OOt=Pun(Gk(ONt,1),WVn,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),AOt=new RegExp("[ \t\n\r\f]+");try{IOt=Pun(Gk(D$t,1),HWn,2015,0,[new vp((s$(),sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",fR((fk(),fk(),rtt))))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm",fR(rtt))),new vp(sdn("yyyy-MM-dd",fR(rtt)))])}catch(n){if(!cL(n=lun(n),78))throw Hp(n)}}function GBn(n){var t,i,r,c;if(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=iin(n)<0?1:0,i=n.e,r.length,e.Math.abs(CJ(n.e)),c=new Ik,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>qtt.length;i-=qtt.length)Nq(c,qtt);gR(c,qtt,CJ(i)),oO(c,r.substr(t))}else oO(c,fx(r,t,CJ(i=t-i))),c.a+=".",oO(c,nO(r,CJ(i)));else{for(oO(c,r.substr(t));i<-qtt.length;i+=qtt.length)Nq(c,qtt);gR(c,qtt,CJ(-i))}return c.a}function zBn(n,t,i,r){var c,a,u,o,s,h,f,l,b;return h=(s=XR(new xC(i.a,i.b),n)).a*t.b-s.b*t.a,f=t.a*r.b-t.b*r.a,l=(s.a*r.b-s.b*r.a)/f,b=h/f,0==f?0==h?(a=W8(n,c=UR(new xC(i.a,i.b),kL(new xC(r.a,r.b),.5))),u=W8(UR(new xC(n.a,n.b),t),c),o=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a<u&&a<=o?new xC(n.a,n.b):u<=o?UR(new xC(n.a,n.b),t):null):null:l>=0&&l<=1&&b>=0&&b<=1?UR(new xC(n.a,n.b),kL(new xC(t.a,t.b),l)):null}function UBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(u=new Wb(n.a);u.a<u.c.c.length;)(a=BB(n0(u),10)).k==(uSn(),Mut)&&((r=BB(mMn(a,Qft),61))==(kUn(),oIt)?a.n.a+=e.a-t.a:r==SIt&&(a.n.b+=e.b-t.b));c=n.d,n.f.a=e.a-c.b-c.c,n.f.b=e.b-c.d-c.a}function XBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,Qft),61))==(kUn(),oIt)?c.n.a+=e.a-t.a:r==SIt&&(c.n.b+=e.b-t.b));u=n.d,n.f.a=e.a-u.b-u.c,n.f.b=e.b-u.d-u.a}function WBn(n){var t,i,r,c,a,u,o,s,h,f;for(s=new Ib(new Cb(xOn(n)).a.vc().Kc());s.a.Ob();){for(r=BB(s.a.Pb(),42),h=0,f=0,h=(o=BB(r.cd(),10)).d.d,f=o.o.b+o.d.a,n.d[o.p]=0,t=o;(c=n.a[t.p])!=o;)i=Mgn(t,c),u=0,u=n.c==(gJ(),nyt)?i.d.n.b+i.d.a.b-i.c.n.b-i.c.a.b:i.c.n.b+i.c.a.b-i.d.n.b-i.d.a.b,a=Gy(n.d[t.p])+u,n.d[c.p]=a,h=e.Math.max(h,c.d.d-a),f=e.Math.max(f,a+c.o.b+c.d.a),t=c;t=o;do{n.d[t.p]=Gy(n.d[t.p])+h,t=n.a[t.p]}while(t!=o);n.b[o.p]=h+f}}function VBn(n){var t,i,r,c,a,u,o,s,h,f,l;for(n.b=!1,f=RQn,o=KQn,l=RQn,s=KQn,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=BB(i.Pb(),266)).a,f=e.Math.min(f,r.c),o=e.Math.max(o,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Wb(t.c);a.a<a.c.c.length;)(c=BB(n0(a),395)).a.a?(u=(h=r.d+c.b.b)+c.c,l=e.Math.min(l,h),s=e.Math.max(s,u)):(u=(h=r.c+c.b.a)+c.c,f=e.Math.min(f,h),o=e.Math.max(o,u));n.a=new xC(o-f,s-l),n.c=new xC(f+n.d.a,l+n.d.b)}function QBn(n,t,e){var i,r,c,a,u,o,s,h;for(h=new Np,c=0,tin(s=new x0(0,e),new asn(0,0,s,e)),r=0,o=new AL(n);o.e!=o.i.gc();)u=BB(kpn(o),33),i=BB(xq(s.a,s.a.c.length-1),187),r+u.g+(0==BB(xq(s.a,0),187).b.c.length?0:e)>t&&(r=0,c+=s.b+e,h.c[h.c.length]=s,tin(s=new x0(c,e),i=new asn(0,s.f,s,e)),r=0),0==i.b.c.length||u.f>=i.o&&u.f<=i.f||.5*i.a<=u.f&&1.5*i.a>=u.f?ybn(i,u):(tin(s,a=new asn(i.s+i.r+e,s.f,s,e)),ybn(a,u)),r=u.i+u.g;return h.c[h.c.length]=s,h}function YBn(n){var t,e,i,r,c,a;if(!n.a){if(n.o=null,a=new gp(n),t=new So,null==(e=P$t).a.zc(n,e)){for(c=new AL(kY(n));c.e!=c.i.gc();)pX(a,YBn(BB(kpn(c),26)));e.a.Bc(n),e.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();)cL(i=BB(kpn(r),170),322)&&f9(t,BB(i,34));chn(t),n.k=new EH(n,(BB(Wtn(QQ((QX(),t$t).o),7),18),t.i),t.g),pX(a,n.k),chn(a),n.a=new NO((BB(Wtn(QQ(t$t.o),4),18),a.i),a.g),P5(n).b&=-2}return n.a}function JBn(n,t,e,i,r,c,a){var u,o,s,h,f;return h=!1,u=dNn(e.q,t.f+t.b-e.q.f),!((f=r-(e.q.e+u-a))<i.g)&&(o=c==n.c.length-1&&f>=(l1(c,n.c.length),BB(n.c[c],200)).e,!((s=cHn(i,f,!1).a)>t.b&&!o)&&((o||s<=t.b)&&(o&&s>t.b?(e.d=s,p9(e,FSn(e,s))):(aEn(e.q,u),e.c=!0),p9(i,r-(e.s+e.r)),Tvn(i,e.q.e+e.q.d,t.f),tin(t,i),n.c.length>c&&(Tkn((l1(c,n.c.length),BB(n.c[c],200)),i),0==(l1(c,n.c.length),BB(n.c[c],200)).a.c.length&&s6(n,c)),h=!0),h))}function ZBn(n,t,e,i){var r,c,a,u,o,s,h;if(h=axn(n.e.Tg(),t),r=0,c=BB(n.g,119),o=null,ZM(),BB(t,66).Oj()){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(a,e)){o=a;break}++r}}else if(null!=e){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(e,a.dd())){o=a;break}++r}}else for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(null==a.dd()){o=a;break}++r}return o&&(mA(n.e)&&(s=t.$j()?new b4(n.e,4,t,e,null,r,!0):LY(n,t.Kj()?2:1,t,e,t.zj(),-1,!0),i?i.Ei(s):i=s),i=TKn(n,o,i)),i}function nHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d;switch(w=0,d=0,s=c.c,o=c.b,f=i.f,b=i.g,t.g){case 0:w=r.i+r.g+u,d=n.c?gTn(w,a,r,u):r.j,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 1:d=r.j+r.f+u,w=n.c?dTn(d,a,r,u):r.i,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 2:w=s+u,d=0,l=s+u+b,h=e.Math.max(o,f);break;case 3:w=0,d=o+u,l=e.Math.max(s,b),h=o+u+f;break;default:throw Hp(new _y("IllegalPlacementOption."))}return new awn(n.a,l,h,t,w,d)}function tHn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if(o=n.d,l=BB(mMn(n,(hWn(),Klt)),15),t=BB(mMn(n,Dft),15),l||t){if(a=Gy(MD(edn(n,(HXn(),ppt)))),u=Gy(MD(edn(n,vpt))),b=0,l){for(h=0,c=l.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),b+=r.o.a;b+=a*(l.gc()-1),o.d+=h+u}if(i=0,t){for(h=0,c=t.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),i+=r.o.a;i+=a*(t.gc()-1),o.a+=h+u}(s=e.Math.max(b,i))>n.o.a&&(f=(s-n.o.a)/2,o.b=e.Math.max(o.b,f),o.c=e.Math.max(o.c,f))}}function eHn(n){var t,e,i,r,c,a;for(cA(r=new R0,(Nun(),JTt)),i=new Sb(new Jy(new TT(n,jrn(n,x8(Qtt,sVn,2,0,6,1))).b));i.b<i.d.gc();)Px(i.b<i.d.gc()),e=SD(i.d.Xb(i.c=i.b++)),(c=pGn(lAt,e))&&null!=(a=Zqn(c,(t=zJ(n,e)).je()?t.je().a:t.ge()?""+t.ge().a:t.he()?""+t.he().a:t.Ib()))&&((SN(c.j,(rpn(),sMt))||SN(c.j,hMt))&&son(Ynn(r,UOt),c,a),SN(c.j,uMt)&&son(Ynn(r,_Ot),c,a),SN(c.j,fMt)&&son(Ynn(r,XOt),c,a),SN(c.j,oMt)&&son(Ynn(r,zOt),c,a));return r}function iHn(n,t,e,i){var r,c,a,u,o,s;if(o=axn(n.e.Tg(),t),c=BB(n.g,119),$xn(n.e,t)){for(r=0,u=0;u<n.i;++u)if(a=c[u],o.rl(a.ak())){if(r==e)return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FIn(n,t,u,r,s)),s);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(r=0,u=0;u<n.i;++u){if(a=c[u],o.rl(a.ak()))return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FIn(n,t,u,r,s)),s);++r}return t.zj()}function rHn(n,t,e){var i,r,c,a,u,o,s,h;if(r=BB(n.g,119),$xn(n.e,t))return ZM(),BB(t,66).Oj()?new lq(t,n):new xI(t,n);for(s=axn(n.e.Tg(),t),i=0,u=0;u<n.i;++u){if(a=(c=r[u]).ak(),s.rl(a)){if(ZM(),BB(t,66).Oj())return c;if(a==(TOn(),lLt)||a==sLt){for(o=new lN(Bbn(c.dd()));++u<n.i;)((a=(c=r[u]).ak())==lLt||a==sLt)&&oO(o,Bbn(c.dd()));return gK(BB(t.Yj(),148),o.a)}return null!=(h=c.dd())&&e&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(h=FIn(n,t,u,i,h)),h}++i}return t.zj()}function cHn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=0,u=n.t,c=0,r=0,s=0,b=0,l=0,i&&(n.n.c=x8(Ant,HWn,1,0,5,1),WB(n.n,new RJ(n.s,n.t,n.i))),o=0,f=new Wb(n.b);f.a<f.c.c.length;)a+(h=BB(n0(f),33)).g+(o>0?n.i:0)>t&&s>0&&(a=0,u+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,WB(n.n,new RJ(n.s,u,n.i))),o=0),b+=h.g+(o>0?n.i:0),s=e.Math.max(s,h.f),i&&smn(BB(xq(n.n,l),211),h),a+=h.g+(o>0?n.i:0),++o;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,yyn(n.j)),new UV(n.s,n.t,c,r)}function aHn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;if($T(),SU(n,"src"),SU(e,"dest"),l=tsn(n),o=tsn(e),pH(0!=(4&l.i),"srcType is not an array"),pH(0!=(4&o.i),"destType is not an array"),f=l.c,a=o.c,pH(0!=(1&f.i)?f==a:0==(1&a.i),"Array types don't match"),b=n.length,s=e.length,t<0||i<0||r<0||t+r>b||i+r>s)throw Hp(new fv);if(0==(1&f.i)&&l!=o)if(h=een(n),c=een(e),GI(n)===GI(e)&&t<i)for(t+=r,u=i+r;u-- >i;)$X(c,u,h[--t]);else for(u=i+r;i<u;)$X(c,i++,h[t++]);else r>0&&_Cn(n,t,e,i,r,!0)}function uHn(){uHn=O,ret=Pun(Gk(ANt,1),hQn,25,15,[_Vn,1162261467,OVn,1220703125,362797056,1977326743,OVn,387420489,AQn,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,OVn,1291467969,1544804416,1838265625,60466176]),cet=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function oHn(n){var t,e,i,r,c,a,u;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(a0(BB(n0(i),29).a));c.a<c.c.c.length;)if(Znn(r=BB(n0(c),10))&&!(e=BB(mMn(r,(hWn(),Rft)),305)).g&&e.d)for(t=e,u=e.d;u;)eRn(u.i,u.k,!1,!0),A7(t.a),A7(u.i),A7(u.k),A7(u.b),MZ(u.c,t.c.d),MZ(t.c,null),PZ(t.a,null),PZ(u.i,null),PZ(u.k,null),PZ(u.b,null),(a=new v3(t.i,u.a,t.e,u.j,u.f)).k=t.k,a.n=t.n,a.b=t.b,a.c=u.c,a.g=t.g,a.d=u.d,hon(t.i,Rft,a),hon(u.a,Rft,a),u=u.d,t=a}function sHn(n,t){var e,i,r,c,a;if(a=BB(t,136),T$n(n),T$n(a),null!=a.b){if(n.c=!0,null==n.b)return n.b=x8(ANt,hQn,25,a.b.length,15,1),void aHn(a.b,0,n.b,0,a.b.length);for(c=x8(ANt,hQn,25,n.b.length+a.b.length,15,1),e=0,i=0,r=0;e<n.b.length||i<a.b.length;)e>=n.b.length?(c[r++]=a.b[i++],c[r++]=a.b[i++]):i>=a.b.length?(c[r++]=n.b[e++],c[r++]=n.b[e++]):a.b[i]<n.b[e]||a.b[i]===n.b[e]&&a.b[i+1]<n.b[e+1]?(c[r++]=a.b[i++],c[r++]=a.b[i++]):(c[r++]=n.b[e++],c[r++]=n.b[e++]);n.b=c}}function hHn(n,t){var e,i,r,c,a,u,o,s,h,f;return e=qy(TD(mMn(n,(hWn(),slt)))),u=qy(TD(mMn(t,slt))),i=BB(mMn(n,hlt),11),o=BB(mMn(t,hlt),11),r=BB(mMn(n,flt),11),s=BB(mMn(t,flt),11),h=!!i&&i==o,f=!!r&&r==s,e||u?(c=(!qy(TD(mMn(n,slt)))||qy(TD(mMn(n,olt))))&&(!qy(TD(mMn(t,slt)))||qy(TD(mMn(t,olt)))),a=!(qy(TD(mMn(n,slt)))&&qy(TD(mMn(n,olt)))||qy(TD(mMn(t,slt)))&&qy(TD(mMn(t,olt)))),new R_(h&&c||f&&a,h,f)):new R_(BB(n0(new Wb(n.j)),11).p==BB(n0(new Wb(t.j)),11).p,h,f)}function fHn(n){var t,i,r,c,a,u,o,s;for(r=0,i=0,s=new YT,t=0,o=new Wb(n.n);o.a<o.c.c.length;)0==(u=BB(n0(o),211)).c.c.length?r5(s,u,s.c.b,s.c):(r=e.Math.max(r,u.d),i+=u.a+(t>0?n.i:0)),++t;for(nwn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=RQn,n.p=RQn,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),33),n.p=e.Math.min(n.p,c.g),n.g=e.Math.max(n.g,c.g),n.f=e.Math.max(n.f,c.f),n.o=e.Math.min(n.o,c.f),n.e+=c.f+n.i;n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function lHn(n){var t,e,i,r;return 0!=(64&n.Db)?Yln(n):(t=new lN(V5n),(i=n.k)?oO(oO((t.a+=' "',t),i),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(r=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new hK(KOt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",oO(t,JL(new mk,new AL(n.b))),e&&(t.a+="]"),t.a+=e1n,e&&(t.a+="["),oO(t,JL(new mk,new AL(n.c))),e&&(t.a+="]"),t.a)}function bHn(n,t){var e,i,r,c,a,u,o;if(n.a){if(o=null,null!=(u=n.a.ne())?t.a+=""+u:null!=(a=n.a.Dj())&&(-1!=(c=GO(a,YTn(91)))?(o=a.substr(c),t.a+=""+fx(null==a?zWn:(kW(a),a),0,c)):t.a+=""+a),n.d&&0!=n.d.i){for(r=!0,t.a+="<",i=new AL(n.d);i.e!=i.i.gc();)e=BB(kpn(i),87),r?r=!1:t.a+=FWn,bHn(e,t);t.a+=">"}null!=o&&(t.a+=""+o)}else n.e?null!=(u=n.e.zb)&&(t.a+=""+u):(t.a+="?",n.b?(t.a+=" super ",bHn(n.b,t)):n.f&&(t.a+=" extends ",bHn(n.f,t)))}function wHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(y=n.c,k=t.c,e=E7(y.a,n,0),i=E7(k.a,t,0),v=BB(xwn(n,(ain(),Hvt)).Kc().Pb(),11),T=BB(xwn(n,qvt).Kc().Pb(),11),m=BB(xwn(t,Hvt).Kc().Pb(),11),M=BB(xwn(t,qvt).Kc().Pb(),11),g=Z0(v.e),j=Z0(T.g),p=Z0(m.e),E=Z0(M.g),Qyn(n,i,k),s=0,b=(c=p).length;s<b;++s)MZ(c[s],v);for(h=0,w=(a=E).length;h<w;++h)SZ(a[h],T);for(Qyn(t,e,y),f=0,d=(u=g).length;f<d;++f)MZ(u[f],m);for(o=0,l=(r=j).length;o<l;++o)SZ(r[o],M)}function dHn(n,t,e,i){var r,c,a,u,o,s;if(c=Wln(i),!qy(TD(mMn(i,(HXn(),Igt))))&&!qy(TD(mMn(n,bgt)))||vA(BB(mMn(n,ept),98)))switch(CZ(u=new CSn,n),t?((s=u.n).a=t.a-n.n.a,s.b=t.b-n.n.b,WSn(s,0,0,n.o.a,n.o.b),qCn(u,z_n(u,c))):(r=hwn(c),qCn(u,e==(ain(),qvt)?r:Tln(r))),a=BB(mMn(i,(hWn(),Zft)),21),o=u.j,c.g){case 2:case 1:(o==(kUn(),sIt)||o==SIt)&&a.Fc((bDn(),gft));break;case 4:case 3:(o==(kUn(),oIt)||o==CIt)&&a.Fc((bDn(),gft))}else r=hwn(c),u=R_n(n,e,e==(ain(),qvt)?r:Tln(r));return u}function gHn(n,t,i){var r,c,a,u,o,s,h;return e.Math.abs(t.s-t.c)<lZn||e.Math.abs(i.s-i.c)<lZn?0:(r=WNn(n,t.j,i.e),c=WNn(n,i.j,t.e),a=0,-1==r||-1==c?(-1==r&&(new zZ((O6(),Tyt),i,t,1),++a),-1==c&&(new zZ((O6(),Tyt),t,i,1),++a)):(u=Tfn(t.j,i.s,i.c),u+=Tfn(i.e,t.s,t.c),o=Tfn(i.j,t.s,t.c),(s=r+16*u)<(h=c+16*(o+=Tfn(t.e,i.s,i.c)))?new zZ((O6(),Myt),t,i,h-s):s>h?new zZ((O6(),Myt),i,t,s-h):s>0&&h>0&&(new zZ((O6(),Myt),t,i,0),new zZ(Myt,i,t,0))),a)}function pHn(n,t){var i,r,c,a,u;for(u=new usn(new Pb(n.f.b).a);u.b;){if(c=BB((a=ten(u)).cd(),594),1==t){if(c.gf()!=(Ffn(),HPt)&&c.gf()!=KPt)continue}else if(c.gf()!=(Ffn(),_Pt)&&c.gf()!=FPt)continue;switch(r=BB(BB(a.dd(),46).b,81),i=BB(BB(a.dd(),46).a,189).c,c.gf().g){case 2:r.g.c=n.e.a,r.g.b=e.Math.max(1,r.g.b+i);break;case 1:r.g.c=r.g.c+i,r.g.b=e.Math.max(1,r.g.b-i);break;case 4:r.g.d=n.e.b,r.g.a=e.Math.max(1,r.g.a+i);break;case 3:r.g.d=r.g.d+i,r.g.a=e.Math.max(1,r.g.a-i)}}}function vHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=x8(ANt,hQn,25,t.b.c.length,15,1),h=x8($ut,$Vn,267,t.b.c.length,0,1),s=x8(Out,a1n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b<w;++b){for(g=0,u=new Wb((f=l[b]).e);u.a<u.c.c.length;)++o[r=tA((c=BB(n0(u),10)).c)],d=Gy(MD(mMn(t,(HXn(),ypt)))),o[r]>0&&s[r]&&(d=K$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Wb(f.e);a.a<a.c.c.length;)(c=BB(n0(a),10)).n.b=g+c.d.d,(i=c.c).c.b=g+c.d.d+c.o.b+c.d.a,h[E7(i.b.b,i,0)]=c.k,s[E7(i.b.b,i,0)]=c}}function mHn(n,t){var e,i,r,c,a,u,o,s,f,l,b;for(i=new oz(ZL(dLn(t).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(o=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),nAn(e)||(a=t.i+t.g/2,u=t.j+t.f/2,f=o.i+o.g/2,l=o.j+o.f/2,(b=new Gj).a=f-a,b.b=l-u,Ukn(c=new xC(b.a,b.b),t.g,t.f),b.a-=c.a,b.b-=c.b,a=f-b.a,u=l-b.b,Ukn(s=new xC(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,f=a+b.a,l=u+b.b,Ien(r=cDn(e,!0,!0),a),Aen(r,u),Ten(r,f),Oen(r,l),mHn(n,o)))}function yHn(n){NM(n,new MTn(vj(wj(pj(gj(new du,R4n),"ELK SPOrE Compaction"),"ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree."),new tu))),u2(n,R4n,K4n,mpn(kTt)),u2(n,R4n,_4n,mpn(vTt)),u2(n,R4n,F4n,mpn(pTt)),u2(n,R4n,B4n,mpn(dTt)),u2(n,R4n,H4n,mpn(gTt)),u2(n,R4n,QJn,wTt),u2(n,R4n,vZn,8),u2(n,R4n,q4n,mpn(yTt)),u2(n,R4n,G4n,mpn(hTt)),u2(n,R4n,z4n,mpn(fTt)),u2(n,R4n,X2n,(hN(),!1))}function kHn(n,t){var i,r,c,a,u,o,s,h,f,l;for(OTn(t,"Simple node placement",1),l=BB(mMn(n,(hWn(),Alt)),304),o=0,a=new Wb(n.b);a.a<a.c.c.length;){for((u=(r=BB(n0(a),29)).c).b=0,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(u.b+=Idn(s,i,l.c)),u.b+=s.d.d+s.o.b+s.d.a,i=s;o=e.Math.max(o,u.b)}for(c=new Wb(n.b);c.a<c.c.c.length;)for(f=(o-(u=(r=BB(n0(c),29)).c).b)/2,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(f+=Idn(s,i,l.c)),f+=s.d.d,s.n.b=f,f+=s.o.b+s.d.a,i=s;HSn(t)}function jHn(n,t,e,i){var r,c,a,u,o,s,h,f;if(0==i.gc())return!1;if(ZM(),a=(o=BB(t,66).Oj())?i:new gtn(i.gc()),$xn(n.e,t)){if(t.hi())for(h=i.Kc();h.Ob();)UFn(n,t,s=h.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(c=Z3(t,s),a.Fc(c));else if(!o)for(h=i.Kc();h.Ob();)c=Z3(t,s=h.Pb()),a.Fc(c)}else{for(f=axn(n.e.Tg(),t),r=BB(n.g,119),u=0;u<n.i;++u)if(c=r[u],f.rl(c.ak()))throw Hp(new _y(I7n));if(i.gc()>1)throw Hp(new _y(I7n));o||(c=Z3(t,i.Kc().Pb()),a.Fc(c))}return oon(n,EPn(n,t,e),a)}function EHn(n,t){var e,i,r,c;for(Qtn(t.b.j),JT($V(new Rq(null,new w1(t.d,16)),new cc),new ac),c=new Wb(t.d);c.a<c.c.c.length;){switch((r=BB(n0(c),101)).e.g){case 0:e=BB(xq(r.j,0),113).d.j,Gl(r,BB($N(Oz(BB(h6(r.k,e),15).Oc(),Qst)),113)),ql(r,BB($N(Iz(BB(h6(r.k,e),15).Oc(),Qst)),113));break;case 1:i=Hyn(r),Gl(r,BB($N(Oz(BB(h6(r.k,i[0]),15).Oc(),Qst)),113)),ql(r,BB($N(Iz(BB(h6(r.k,i[1]),15).Oc(),Qst)),113));break;case 2:VPn(n,r);break;case 3:KNn(r);break;case 4:GNn(n,r)}Vtn(r)}n.a=null}function THn(n,t,e){var i,r,c,a,u,o,s,h;return i=n.a.o==(oZ(),cyt)?RQn:KQn,!(u=cFn(n,new aC(t,e))).a&&u.c?(DH(n.d,u),i):u.a?(r=u.a.c,o=u.a.d,e?(s=n.a.c==(gJ(),tyt)?o:r,c=n.a.c==tyt?r:o,a=n.a.g[c.i.p],h=Gy(n.a.p[a.p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b):(s=n.a.c==(gJ(),nyt)?o:r,c=n.a.c==nyt?r:o,h=Gy(n.a.p[n.a.g[c.i.p].p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b),n.a.n[n.a.g[r.i.p].p]=(hN(),!0),n.a.n[n.a.g[o.i.p].p]=!0,h):i}function MHn(n,t,e){var i,r,c,a,u,o,s;if($xn(n.e,t))ZM(),AOn((u=BB(t,66).Oj()?new lq(t,n):new xI(t,n)).c,u.b),Z$(u,BB(e,14));else{for(s=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c].ak(),s.rl(r)){if(r==(TOn(),lLt)||r==sLt){for(a=c,(o=Ovn(n,t,e))?fDn(n,c):++c;c<n.i;)(r=i[c].ak())==lLt||r==sLt?fDn(n,c):++c;o||BB(ovn(n,a,Z3(t,e)),72)}else Ovn(n,t,e)?fDn(n,c):BB(ovn(n,c,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e))),72);return}Ovn(n,t,e)||f9(n,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e)))}}function SHn(n,t,e){var i,r,c,a,u,o,s,h;return Nfn(e,n.b)||(n.b=e,c=new Jn,a=BB(P4($V(new Rq(null,new w1(e.f,16)),c),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21),n.e=!0,n.f=!0,n.c=!0,n.d=!0,r=a.Hc((Hpn(),Brt)),i=a.Hc(Hrt),r&&!i&&(n.f=!1),!r&&i&&(n.d=!1),r=a.Hc(Frt),i=a.Hc(qrt),r&&!i&&(n.c=!1),!r&&i&&(n.e=!1)),h=BB(n.a.Ce(t,e),46),o=BB(h.a,19).a,s=BB(h.b,19).a,u=!1,o<0?n.c||(u=!0):n.e||(u=!0),s<0?n.d||(u=!0):n.f||(u=!0),u?SHn(n,h,e):h}function PHn(n){var t,i,r,c;c=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?t=c.b:(t=MIn(n.f),n.A.Hc((mdn(),RIt))&&!n.B.Hc((n_n(),XIt))&&(t=e.Math.max(t,MIn(BB(oV(n.p,(kUn(),oIt)),244))),t=e.Math.max(t,MIn(BB(oV(n.p,CIt),244)))),(i=oan(n))&&(t=e.Math.max(t,i.b)),n.A.Hc(KIt)&&(n.q!=(QEn(),WCt)&&n.q!=XCt||(t=e.Math.max(t,XH(BB(oV(n.b,(kUn(),oIt)),124))),t=e.Math.max(t,XH(BB(oV(n.b,CIt),124)))))),qy(TD(n.e.yf().We((sWn(),FSt))))?c.b=e.Math.max(c.b,t):c.b=t,(r=n.f.i).d=0,r.a=t,GFn(n.f)}function CHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(h=0;h<t.length;h++){for(a=n.Kc();a.Ob();)BB(a.Pb(),225).Of(h,t);for(f=0;f<t[h].length;f++){for(u=n.Kc();u.Ob();)BB(u.Pb(),225).Pf(h,f,t);for(b=t[h][f].j,l=0;l<b.c.length;l++){for(o=n.Kc();o.Ob();)BB(o.Pb(),225).Qf(h,f,l,t);for(l1(l,b.c.length),e=0,r=new m6(BB(b.c[l],11).b);y$(r.a)||y$(r.b);)for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),s=n.Kc();s.Ob();)BB(s.Pb(),225).Nf(h,f,l,e++,i,t)}}}for(c=n.Kc();c.Ob();)BB(c.Pb(),225).Mf()}function IHn(n,t){var e,i,r,c,a;for(n.b=Gy(MD(mMn(t,(HXn(),kpt)))),n.c=Gy(MD(mMn(t,Tpt))),n.d=BB(mMn(t,rgt),336),n.a=BB(mMn(t,Pdt),275),fmn(t),r=(c=BB(P4(AV(AV(wnn(wnn(new Rq(null,new w1(t.b,16)),new ye),new ke),new je),new Ee),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Kc();r.Ob();)e=BB(r.Pb(),17),BB(mMn(e,(hWn(),Nlt)),15).Jc(new ed(n)),hon(e,Nlt,null);for(i=c.Kc();i.Ob();)e=BB(i.Pb(),17),a=BB(mMn(e,(hWn(),xlt)),17),FXn(n,BB(mMn(e,$lt),15),a),hon(e,$lt,null)}function OHn(n){n.b=null,n.a=null,n.o=null,n.q=null,n.v=null,n.w=null,n.B=null,n.p=null,n.Q=null,n.R=null,n.S=null,n.T=null,n.U=null,n.V=null,n.W=null,n.bb=null,n.eb=null,n.ab=null,n.H=null,n.db=null,n.c=null,n.d=null,n.f=null,n.n=null,n.r=null,n.s=null,n.u=null,n.G=null,n.J=null,n.e=null,n.j=null,n.i=null,n.g=null,n.k=null,n.t=null,n.F=null,n.I=null,n.L=null,n.M=null,n.O=null,n.P=null,n.$=null,n.N=null,n.Z=null,n.cb=null,n.K=null,n.D=null,n.A=null,n.C=null,n._=null,n.fb=null,n.X=null,n.Y=null,n.gb=!1,n.hb=!1}function AHn(n){var t,e,i,r,c;if(n.k!=(uSn(),Cut))return!1;if(n.j.c.length<=1)return!1;if(BB(mMn(n,(HXn(),ept)),98)==(QEn(),XCt))return!1;if(bvn(),(i=(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))==lvt)return!1;if(i!=fvt&&i!=hvt){if(r=Gy(MD(edn(n,Npt))),!(t=BB(mMn(n,Lpt),142))&&(t=new HR(r,r,r,r)),c=abn(n,(kUn(),CIt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=abn(n,oIt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function $Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(a=n.e,o=t.e,0==a)return t;if(0==o)return n;if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a==o?(w=dG(h=rbn(e,i)),0==(b=dG(jz(h,32)))?new X6(a,w):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[w,b]))):npn(a<0?ibn(i,e):ibn(e,i));if(a==o)l=a,f=c>=u?N8(n.a,c,t.a,u):N8(t.a,u,n.a,c);else{if(0==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))return ODn(),eet;1==r?(l=a,f=d6(n.a,c,t.a,u)):(l=o,f=d6(t.a,u,n.a,c))}return X0(s=new lU(l,f.length,f)),s}function LHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w;return l=qy(TD(mMn(t,(HXn(),Ogt)))),b=null,a==(ain(),Hvt)&&r.c.i==i?b=r.c:a==qvt&&r.d.i==i&&(b=r.d),(h=u)&&l&&!b?(WB(h.e,r),w=e.Math.max(Gy(MD(mMn(h.d,agt))),Gy(MD(mMn(r,agt)))),hon(h.d,agt,w)):(kUn(),f=PIt,b?f=b.j:vA(BB(mMn(i,ept),98))&&(f=a==Hvt?CIt:oIt),s=xHn(n,t,i,a,f,r),o=W5((vW(i),r)),a==Hvt?(SZ(o,BB(xq(s.j,0),11)),MZ(o,c)):(SZ(o,c),MZ(o,BB(xq(s.j,0),11))),h=new zfn(r,o,s,BB(mMn(s,(hWn(),dlt)),11),a,!b)),JIn(n.a,r,new L_(h.d,t,a)),h}function NHn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=null,n.d&&(h=BB(SJ(n.d,t),138)),!h){if(f=(c=n.a.Mh()).i,!n.d||NT(n.d)!=f){for(o=new xp,n.d&&Tcn(o,n.d),u=s=o.f.c+o.g.c;u<f;++u)i=BB(Wtn(c,u),138),(e=BB(null==(r=Cfn(n.e,i).ne())?jCn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jCn(o.f,null,e):ubn(o.g,r,e));if(o.f.c+o.g.c!=f)for(a=0;a<s;++a)i=BB(Wtn(c,a),138),(e=BB(null==(r=Cfn(n.e,i).ne())?jCn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jCn(o.f,null,e):ubn(o.g,r,e));n.d=o}h=BB(SJ(n.d,t),138)}return h}function xHn(n,t,e,i,r,c){var a,u,o,s,h,f;return a=null,s=i==(ain(),Hvt)?c.c:c.d,o=Wln(t),s.i==e?(a=BB(RX(n.b,s),10))||(hon(a=bXn(s,BB(mMn(e,(HXn(),ept)),98),r,HKn(s),null,s.n,s.o,o,t),(hWn(),dlt),s),VW(n.b,s,a)):(u=AEn(a=bXn((h=new Zn,f=Gy(MD(mMn(t,(HXn(),ypt))))/2,son(h,tpt,f),h),BB(mMn(e,ept),98),r,i==Hvt?-1:1,null,new Gj,new xC(0,0),o,t),e,i),hon(a,(hWn(),dlt),u),VW(n.b,u,a)),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)),vA(BB(mMn(t,(HXn(),ept)),98))?hon(t,ept,(QEn(),VCt)):hon(t,ept,(QEn(),QCt)),a}function DHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;OTn(t,"Orthogonal edge routing",1),s=Gy(MD(mMn(n,(HXn(),Apt)))),e=Gy(MD(mMn(n,kpt))),i=Gy(MD(mMn(n,Tpt))),l=new fX(0,e),d=0,a=new M2(n.b,0),u=null,h=null,o=null,f=null;do{f=(h=a.b<a.d.gc()?(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)):null)?h.a:null,u&&(Tqn(u,d),d+=u.c.a),w=AGn(l,n,o,f,u?d+i:d),r=!u||VI(o,(dxn(),jyt)),c=!h||VI(f,(dxn(),jyt)),w>0?(b=(w-1)*e,u&&(b+=i),h&&(b+=i),b<s&&!r&&!c&&(b=s),d+=b):!r&&!c&&(d+=s),u=h,o=f}while(h);n.f.a=d,HSn(t)}function RHn(){var n;RHn=O,EAt=new Sm,kAt=x8(Qtt,sVn,2,0,6,1),SAt=i0(Bun(33,58),Bun(1,26)),PAt=i0(Bun(97,122),Bun(65,90)),CAt=Bun(48,57),TAt=i0(SAt,0),MAt=i0(PAt,CAt),IAt=i0(i0(0,Bun(1,6)),Bun(33,38)),OAt=i0(i0(CAt,Bun(65,70)),Bun(97,102)),xAt=i0(TAt,dpn("-_.!~*'()")),DAt=i0(MAt,Xwn("-_.!~*'()")),dpn(u9n),Xwn(u9n),i0(xAt,dpn(";:@&=+$,")),i0(DAt,Xwn(";:@&=+$,")),AAt=dpn(":/?#"),$At=Xwn(":/?#"),LAt=dpn("/?#"),NAt=Xwn("/?#"),(n=new Rv).a.zc("jar",n),n.a.zc("zip",n),n.a.zc("archive",n),SQ(),jAt=new Ak(n)}function KHn(n,t){var e,i,r,c,a;if(hon(t,(qqn(),okt),0),r=BB(mMn(t,akt),86),0==t.d.b)r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a)):hon(t,fkt,0);else{for(e=new wg(spn(new bg(t).a.d,0));EE(e.a);)KHn(n,BB(b3(e.a),188).c);i=BB(iL(new wg(spn(new bg(t).a.d,0))),86),c=(Gy(MD(mMn(BB(TN(new wg(spn(new bg(t).a.d,0))),86),fkt)))+Gy(MD(mMn(i,fkt))))/2,r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a),hon(t,okt,Gy(MD(mMn(t,fkt)))-c),IGn(n,t)):hon(t,fkt,c)}}function _Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;u=0,b=0,o=TJ(n.f,n.f.length),c=n.d,a=n.i,i=n.a,r=n.b;do{for(l=0,s=new Wb(n.p);s.a<s.c.c.length;)f=OGn(n,BB(n0(s),10)),e=!0,(n.q==(sNn(),Tvt)||n.q==Pvt)&&(e=qy(TD(f.b))),BB(f.a,19).a<0&&e?(++l,o=TJ(n.f,n.f.length),n.d=n.d+BB(f.a,19).a,b+=c-n.d,c=n.d+BB(f.a,19).a,a=n.i,i=a0(n.a),r=a0(n.b)):(n.f=TJ(o,o.length),n.d=c,n.a=(yX(i),i?new t_(i):HB(new Wb(i))),n.b=(yX(r),r?new t_(r):HB(new Wb(r))),n.i=a);++u,h=0!=l&&qy(TD(t.Kb(new rI(iln(b),iln(u)))))}while(h)}function FHn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return a=n.f,l=t.f,u=a==(YLn(),xEt)||a==REt,o=a==DEt||a==KEt,b=l==DEt||l==KEt,s=a==DEt||a==xEt,w=l==DEt||l==xEt,!u||l!=xEt&&l!=REt?o&&b?n.f==KEt?n:t:s&&w?(a==DEt?(f=n,h=t):(f=t,h=n),d=i.j+i.f,g=f.e+r.f,p=e.Math.max(d,g)-e.Math.min(i.j,f.e),c=(f.d+r.g-i.i)*p,v=i.i+i.g,m=h.d+r.g,c<=(e.Math.max(v,m)-e.Math.min(i.i,h.d))*(h.e+r.f-i.j)?n.f==DEt?n:t:n.f==xEt?n:t):n:n.f==REt?n:t}function BHn(n){var t,e,i,r,c,a,u,o,s,h;for(s=n.e.a.c.length,c=new Wb(n.e.a);c.a<c.c.c.length;)BB(n0(c),121).j=!1;for(n.i=x8(ANt,hQn,25,s,15,1),n.g=x8(ANt,hQn,25,s,15,1),n.n=new Np,r=0,h=new Np,u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).d=r++,0==a.b.a.c.length&&WB(n.n,a),gun(h,a.g);for(t=0,i=new Wb(h);i.a<i.c.c.length;)(e=BB(n0(i),213)).c=t++,e.f=!1;o=h.c.length,null==n.b||n.b.length<o?(n.b=x8(xNt,qQn,25,o,15,1),n.c=x8($Nt,ZYn,25,o,16,1)):nk(n.c),n.d=h,n.p=new LN(etn(n.d.c.length)),n.j=1}function HHn(n,t){var e,i,r,c,a,u,o,s,h;if(!(t.e.c.length<=1)){for(n.f=t,n.d=BB(mMn(n.f,(rkn(),vat)),379),n.g=BB(mMn(n.f,jat),19).a,n.e=Gy(MD(mMn(n.f,mat))),n.c=Gy(MD(mMn(n.f,pat))),cX(n.b),r=new Wb(n.f.c);r.a<r.c.c.length;)i=BB(n0(r),282),yKn(n.b,i.c,i,null),yKn(n.b,i.d,i,null);for(u=n.f.e.c.length,n.a=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),s=new Wb(n.f.e);s.a<s.c.c.length;)CBn(n,o=BB(n0(s),144),n.a[o.b]);for(n.i=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),c=0;c<u;++c)for(a=0;a<u;++a)h=1/((e=n.a[c][a])*e),n.i[c][a]=h}}function qHn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r<n.b.length;){for(t!=r?(n.b[t]=n.b[r++],n.b[t+1]=n.b[r++]):r+=2,e=n.b[t+1];r<n.b.length&&!(e+1<n.b[r]);)if(e+1==n.b[r])n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2;else if(e>=n.b[r+1])r+=2;else{if(!(e<n.b[r+1]))throw Hp(new dy("Token#compactRanges(): Internel Error: ["+n.b[t]+","+n.b[t+1]+"] ["+n.b[r]+","+n.b[r+1]+"]"));n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2}t+=2}t!=n.b.length&&(i=x8(ANt,hQn,25,t,15,1),aHn(n.b,0,i,0,t),n.b=i),n.a=!0}}function GHn(n,t){var e,i,r,c,a,u,o;for(a=gz(n.a).Kc();a.Ob();){if((c=BB(a.Pb(),17)).b.c.length>0)for(i=new t_(BB(h6(n.a,c),21)),SQ(),m$(i,new _w(t)),r=new M2(c.b,0);r.b<r.d.gc();){switch(Px(r.b<r.d.gc()),e=BB(r.d.Xb(r.c=r.b++),70),u=-1,BB(mMn(e,(HXn(),Ydt)),272).g){case 1:u=i.c.length-1;break;case 0:u=Jjn(i);break;case 2:u=0}-1!=u&&(l1(u,i.c.length),WB((o=BB(i.c[u],243)).b.b,e),BB(mMn(vW(o.b.c.i),(hWn(),Zft)),21).Fc((bDn(),fft)),BB(mMn(vW(o.b.c.i),Zft),21).Fc(sft),fW(r),hon(e,vlt,c))}SZ(c,null),MZ(c,null)}}function zHn(n,t){var e,i,r,c;return e=new _n,1==(r=2==(r=(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)).gc())?1:0)&&QI(ldn(BB(P4(AV(i.Lc(),new Fn),Wcn(jgn(0),new en)),162).a,2),0)&&(r=0),1==(c=2==(c=(i=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21)).gc())?1:0)&&QI(ldn(BB(P4(AV(i.Lc(),new Bn),Wcn(jgn(0),new en)),162).a,2),0)&&(c=0),r<c?-1:r==c?0:1}function UHn(n){var t,e,i,r,c,a,u,o,s,h,f;if(o=new Np,!Lx(n,(hWn(),Wft)))return o;for(i=BB(mMn(n,Wft),15).Kc();i.Ob();)dqn(t=BB(i.Pb(),10),n),o.c[o.c.length]=t;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&(u=BB(mMn(c,Vft),10))&&(CZ(s=new CSn,c),qCn(s,BB(mMn(c,Qft),61)),h=BB(xq(u.j,0),11),SZ(f=new wY,s),MZ(f,h));for(e=new Wb(o);e.a<e.c.c.length;)PZ(t=BB(n0(e),10),BB(xq(n.b,n.b.c.length-1),29));return o}function XHn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(c=qy(TD(ZAn(t=WJ(n),(HXn(),wgt)))),h=0,r=0,s=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));s.e!=s.i.gc();)a=(u=QIn(o=BB(kpn(s),79)))&&c&&qy(TD(ZAn(o,dgt))),l=PTn(BB(Wtn((!o.c&&(o.c=new hK(KOt,o,5,8)),o.c),0),82)),u&&a?++r:u&&!a?++h:JJ(l)==t||l==t?++r:++h;for(i=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));i.e!=i.i.gc();)a=(u=QIn(e=BB(kpn(i),79)))&&c&&qy(TD(ZAn(e,dgt))),f=PTn(BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),u&&a?++h:u&&!a?++r:JJ(f)==t||f==t?++h:++r;return h-r}function WHn(n,t){var e,i,r,c,a,u,o,s,h;if(OTn(t,"Edge splitting",1),n.b.c.length<=2)HSn(t);else{for(Px((c=new M2(n.b,0)).b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29);c.b<c.d.gc();)for(r=a,Px(c.b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29),u=new Wb(r.a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(i=new Wb(BB(n0(o),11).g);i.a<i.c.c.length;)(s=(e=BB(n0(i),17)).d.i.c)!=r&&s!=a&&zxn(e,(Bl(h=new $vn(n),(uSn(),Put)),hon(h,(hWn(),dlt),e),hon(h,(HXn(),ept),(QEn(),XCt)),PZ(h,a),h));HSn(t)}}function VHn(n,t){var e,i,r,c,a,u,o,s,h;if((a=null!=t.p&&!t.b)||OTn(t,aZn,1),c=1/(e=BB(mMn(n,(hWn(),Mlt)),15)).gc(),t.n)for(OH(t,"ELK Layered uses the following "+e.gc()+" modules:"),h=0,s=e.Kc();s.Ob();)OH(t," Slot "+(h<10?"0":"")+h+++": "+nE(tsn(BB(s.Pb(),51))));for(o=e.Kc();o.Ob();)BB(o.Pb(),51).pf(n,mcn(t,c));for(r=new Wb(n.b);r.a<r.c.c.length;)i=BB(n0(r),29),gun(n.a,i.a),i.a.c=x8(Ant,HWn,1,0,5,1);for(u=new Wb(n.a);u.a<u.c.c.length;)PZ(BB(n0(u),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),a||HSn(t)}function QHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;r=Gy(MD(mMn(t,(HXn(),Dgt)))),l=4,c=3,j=20/(k=BB(mMn(t,xpt),19).a),b=!1,s=0,u=DWn;do{for(a=1!=s,f=0!=s,E=0,v=0,y=(g=n.a).length;v<y;++v)(w=g[v]).f=null,Bzn(n,w,a,f,r),E+=e.Math.abs(w.a);do{o=U_n(n,t)}while(o);for(p=0,m=(d=n.a).length;p<m;++p)if(0!=(i=wU(w=d[p]).a))for(h=new Wb(w.e);h.a<h.c.c.length;)BB(n0(h),10).n.b+=i;0==s||1==s?--l<=0&&(E<u||-l>k)?(s=2,u=DWn):0==s?(s=1,u=E):(s=0,u=E):(b=E>=u||u-E<j,u=E,b&&--c)}while(!(b&&c<=0))}function YHn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(w=new xp,c=n.a.ec().Kc();c.Ob();)VW(w,i=BB(c.Pb(),168),e.Je(i));for(yX(n),m$(a=n?new t_(n):HB(n.a.ec().Kc()),new Ew(w)),u=S4(a),o=new C$(t),jCn((b=new xp).f,t,o);0!=u.a.gc();){for(s=null,h=null,f=null,r=u.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),168),Gy(MD(qI(AY(w.f,i))))<=RQn){if(hU(b,i.a)&&!hU(b,i.b)){h=i.b,f=i.a,s=i;break}if(hU(b,i.b)&&!hU(b,i.a)){h=i.a,f=i.b,s=i;break}}if(!s)break;l=new C$(h),WB(BB(qI(AY(b.f,f)),221).a,l),jCn(b.f,h,l),u.a.Bc(s)}return o}function JHn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Depth-first cycle removal",1),o=(s=t.a).c.length,n.c=new Np,n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,o,16,1),n.b=new Np,c=0,u=new Wb(s);u.a<u.c.c.length;)(a=BB(n0(u),10)).p=c,h3(fbn(a))&&WB(n.c,a),++c;for(h=new Wb(n.c);h.a<h.c.c.length;)GPn(n,BB(n0(h),10));for(r=0;r<o;r++)n.d[r]||(l1(r,s.c.length),GPn(n,BB(s.c[r],10)));for(i=new Wb(n.b);i.a<i.c.c.length;)tBn(BB(n0(i),17),!0),hon(t,(hWn(),qft),(hN(),!0));n.c=null,n.d=null,n.a=null,n.b=null,HSn(e)}function ZHn(n,t){var e,i,r,c,a,u,o;for(n.a.c=x8(Ant,HWn,1,0,5,1),i=spn(t.b,0);i.b!=i.d.c;)0==(e=BB(b3(i),86)).b.b&&(hon(e,(qqn(),dkt),(hN(),!0)),WB(n.a,e));switch(n.a.c.length){case 0:hon(r=new csn(0,t,"DUMMY_ROOT"),(qqn(),dkt),(hN(),!0)),hon(r,ekt,!0),DH(t.b,r);break;case 1:break;default:for(c=new csn(0,t,"SUPER_ROOT"),u=new Wb(n.a);u.a<u.c.c.length;)hon(o=new UQ(c,a=BB(n0(u),86)),(qqn(),ekt),(hN(),!0)),DH(c.a.a,o),DH(c.d,o),DH(a.b,o),hon(a,dkt,!1);hon(c,(qqn(),dkt),(hN(),!0)),hon(c,ekt,!0),DH(t.b,c)}}function nqn(n,t){var i,r,c,a,u,o;return jDn(),a=t.c-(n.c+n.b),c=n.c-(t.c+t.b),u=n.d-(t.d+t.a),i=t.d-(n.d+n.a),r=e.Math.max(c,a),o=e.Math.max(u,i),h$(),rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>=0^(rin(A3n),(e.Math.abs(o)<=A3n||0==o||isNaN(o)&&isNaN(0)?0:o<0?-1:o>0?1:zO(isNaN(o),isNaN(0)))>=0)?e.Math.max(o,r):(rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>0?e.Math.sqrt(o*o+r*r):-e.Math.sqrt(o*o+r*r))}function tqn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new _v),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=BB(bW(n.a,a-1),117)).e&&10!=c.e||0!=t.e&&10!=t.e?Cv(n.a,t):(0==t.e||t.bm().length,0==c.e?(e=new Pk,(i=c._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn),c=new vJ(10,null,0),kU(n.a,c,a-1)):(c.bm().length,cO(e=new Pk,c.bm())),0==t.e?(i=t._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn):cO(e,t.bm()),BB(c,521).b=e.a):Cv(n.a,t);else for(r=0;r<t.em();r++)tqn(n,t.am(r));else Cv(n.a,t)}function eqn(n){var t,e,i,r,c;return null!=n.g?n.g:n.a<32?(n.g=DUn(fan(n.f),CJ(n.e)),n.g):(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e?r:(t=(!n.c&&(n.c=yhn(n.f)),n.c).e<0?2:1,e=r.length,i=-n.e+e-t,(c=new Ck).a+=""+r,n.e>0&&i>=-6?i>=0?kZ(c,e-CJ(n.e),String.fromCharCode(46)):(c.a=fx(c.a,0,t-1)+"0."+nO(c.a,t-1),kZ(c,t+1,Bdn(qtt,0,-CJ(i)-1))):(e-t>=1&&(kZ(c,t,String.fromCharCode(46)),++e),kZ(c,e,String.fromCharCode(69)),i>0&&kZ(c,++e,String.fromCharCode(43)),kZ(c,++e,""+vz(fan(i)))),n.g=c.a,n.g))}function iqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!e.dc()){for(a=0,h=0,l=BB((i=e.Kc()).Pb(),19).a;a<t.f;){if(a==l&&(h=0,l=i.Ob()?BB(i.Pb(),19).a:t.f+1),a!=h)for(b=BB(xq(n.b,a),29),f=BB(xq(n.b,h),29),s=new Wb(a0(b.a));s.a<s.c.c.length;)if(Qyn(o=BB(n0(s),10),f.a.c.length,f),0==h)for(c=new Wb(a0(fbn(o)));c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(n,(hWn(),qft),(hN(),!0)),iGn(n,r,1);++h,++a}for(u=new M2(n.b,0);u.b<u.d.gc();)Px(u.b<u.d.gc()),0==BB(u.d.Xb(u.c=u.b++),29).a.c.length&&fW(u)}}function rqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=(a=t.b).o,o=a.d,i=Gy(MD(gpn(a,(HXn(),ypt)))),r=Gy(MD(gpn(a,jpt))),s=Gy(MD(gpn(a,$pt))),rH(u=new fm,o.d,o.c,o.a,o.b),l=MRn(t,i,r,s),p=new Wb(t.d);p.a<p.c.c.length;){for(w=(g=BB(n0(p),101)).f.a.ec().Kc();w.Ob();)c=(b=BB(w.Pb(),409)).a,f=ETn(b),v=new km,bTn(b,b.c,l,v),FMn(b,f,l,v),bTn(b,b.d,l,v),e=v,e=n.Uf(b,f,e),yQ(c.a),Frn(c.a,e),JT(new Rq(null,new w1(e,16)),new wP(h,u));(d=g.i)&&(aTn(g,d,l,r),pgn(h,u,m=new wA(d.g)),UR(m,d.j),pgn(h,u,m))}rH(o,u.d,u.c,u.a,u.b)}function cqn(n,t,e){var i,r,c;if((r=BB(mMn(t,(HXn(),Pdt)),275))!=(JMn(),cft)){switch(OTn(e,"Horizontal Compaction",1),n.a=t,Vk(i=new yOn(((c=new I7).d=t,c.c=BB(mMn(c.d,Zdt),218),UDn(c),SGn(c),sRn(c),c.a)),n.b),1===BB(mMn(t,Sdt),422).g?Wk(i,new grn(n.a)):Wk(i,(CQ(),fit)),r.g){case 1:C$n(i);break;case 2:C$n(Tzn(i,(Ffn(),FPt)));break;case 3:C$n(Uk(Tzn(C$n(i),(Ffn(),FPt)),new gr));break;case 4:C$n(Uk(Tzn(C$n(i),(Ffn(),FPt)),new kd(c)));break;case 5:C$n(Xk(i,wst))}Tzn(i,(Ffn(),_Pt)),i.e=!0,Lzn(c),HSn(e)}}function aqn(n,t,e,i,r,c,a,u){var o,s,h,f;switch(o=u6(Pun(Gk(FEt,1),HWn,220,0,[t,e,i,r])),f=null,n.b.g){case 1:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ja,new Qa,new Ya]));break;case 0:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ya,new Qa,new Ja]));break;case 2:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Qa,new Ja,new Ya]))}for(h=new Wb(f);h.a<h.c.c.length;)s=BB(n0(h),526),o.c.length>1&&(o=s.mg(o,n.a,u));return 1==o.c.length?BB(xq(o,o.c.length-1),220):2==o.c.length?FHn((l1(0,o.c.length),BB(o.c[0],220)),(l1(1,o.c.length),BB(o.c[1],220)),a,c):null}function uqn(n){var t,i,r,c,a,u;for(Otn(n.a,new nt),i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),221),r=XR(B$(BB(n.b,65).c),BB(t.b,65).c),ect?(u=BB(n.b,65).b,a=BB(t.b,65).b,e.Math.abs(r.a)>=e.Math.abs(r.b)?(r.b=0,a.d+a.a>u.d&&a.d<u.d+u.a&&NH(r,e.Math.max(u.c-(a.c+a.b),a.c-(u.c+u.b)))):(r.a=0,a.c+a.b>u.c&&a.c<u.c+u.b&&NH(r,e.Math.max(u.d-(a.d+a.a),a.d-(u.d+u.a))))):NH(r,TFn(BB(n.b,65),BB(t.b,65))),c=e.Math.sqrt(r.a*r.a+r.b*r.b),NH(r,c=HEn(Wrt,t,c,r)),LG(BB(t.b,65),r),Otn(t.a,new Aw(r)),BB(Wrt.b,65),K8(Wrt,Vrt,t)}function oqn(n){var t,i,r,c,a,u,o,s,f,l,b,w;for(n.f=new Fv,o=0,r=0,c=new Wb(n.e.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;){for((a=BB(n0(u),10)).p=o++,i=new oz(ZL(lbn(a).a.Kc(),new h));dAn(i);)BB(U5(i),17).p=r++;for(t=AHn(a),l=new Wb(a.j);l.a<l.c.c.length;)f=BB(n0(l),11),t&&(w=f.a.b)!=e.Math.floor(w)&&(s=w-j2(fan(e.Math.round(w))),f.a.b-=s),(b=f.n.b+f.a.b)!=e.Math.floor(b)&&(s=b-j2(fan(e.Math.round(b))),f.n.b-=s)}n.g=o,n.b=r,n.i=x8(eyt,HWn,401,o,0,1),n.c=x8(Jmt,HWn,649,r,0,1),n.d.a.$b()}function sqn(n){var t,e,i,r,c,a,u,o,s;if(n.ej())if(o=n.fj(),n.i>0){if(t=new DI(n.i,n.g),c=(e=n.i)<100?null:new Fj(e),n.ij())for(i=0;i<n.i;++i)a=n.g[i],c=n.kj(a,c);if(a6(n),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new ax(t);i.e!=i.i.gc();)c=n.dj(jpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r)}else a6(n),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if(n.i>0){for(u=n.g,s=n.i,a6(n),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else a6(n);else a6(n)}function hqn(n,t,i){var r,c,a,u,o,s,h,f,l;for(_an(this),i==(dJ(),Lyt)?TU(this.r,n):TU(this.w,n),f=RQn,h=KQn,u=t.a.ec().Kc();u.Ob();)c=BB(u.Pb(),46),o=BB(c.a,455),(s=(r=BB(c.b,17)).c)==n&&(s=r.d),TU(o==Lyt?this.r:this.w,s),l=(kUn(),yIt).Hc(s.j)?Gy(MD(mMn(s,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,f=e.Math.min(f,l),h=e.Math.max(h,l);for(XMn(this,(kUn(),yIt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b,f,h),a=t.a.ec().Kc();a.Ob();)c=BB(a.Pb(),46),tPn(this,BB(c.b,17));this.o=!1}function fqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return e=8191&n.l,i=n.l>>13|(15&n.m)<<9,r=n.m>>4&8191,c=n.m>>17|(255&n.h)<<5,a=(1048320&n.h)>>8,g=i*(u=8191&t.l),p=r*u,v=c*u,m=a*u,0!=(o=t.l>>13|(15&t.m)<<9)&&(g+=e*o,p+=i*o,v+=r*o,m+=c*o),0!=(s=t.m>>4&8191)&&(p+=e*s,v+=i*s,m+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(v+=e*h,m+=i*h),0!=(f=(1048320&t.h)>>8)&&(m+=e*f),b=((d=e*u)>>22)+(g>>9)+((262143&p)<<4)+((31&v)<<17),w=(p>>18)+(v>>5)+((4095&m)<<8),w+=(b+=(l=(d&SQn)+((511&g)<<13))>>22)>>22,M$(l&=SQn,b&=SQn,w&=PQn)}function lqn(n){var t,i,r,c,a,u,o;if(0!=(o=BB(xq(n.j,0),11)).g.c.length&&0!=o.e.c.length)throw Hp(new Fy("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=o.g.c.length){for(a=RQn,i=new Wb(o.g);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.d.i,(HXn(),Cgt)),142),a=e.Math.min(a,u.n.a-r.b);return new qf(yX(a))}if(0!=o.e.c.length){for(c=KQn,i=new Wb(o.e);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.c.i,(HXn(),Cgt)),142),c=e.Math.max(c,u.n.a+u.o.a+r.c);return new qf(yX(c))}return iy(),iy(),Ont}function bqn(n,t){var e,i,r,c,a,u;if(n.Fk()){if(n.i>4){if(!n.wj(t))return!1;if(n.rk()){if(u=(e=(i=BB(t,49)).Ug())==n.e&&(n.Dk()?i.Og(i.Vg(),n.zk())==n.Ak():-1-i.Vg()==n.aj()),n.Ek()&&!u&&!e&&i.Zg())for(r=0;r<n.i;++r)if(GI(n.Gk(BB(n.g[r],56)))===GI(t))return!0;return u}if(n.Dk()&&!n.Ck()){if(GI(c=BB(t,56).ah(Cvn(BB(n.ak(),18))))===GI(n.e))return!0;if(null==c||!BB(c,56).kh())return!1}}if(a=Sjn(n,t),n.Ek()&&!a)for(r=0;r<n.i;++r)if(GI(i=n.Gk(BB(n.g[r],56)))===GI(t))return!0;return a}return Sjn(n,t)}function wqn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(h=new Np,l=new Rv,a=t.b,r=0;r<a.c.length;r++){for(s=(l1(r,a.c.length),BB(a.c[r],29)).a,h.c=x8(Ant,HWn,1,0,5,1),c=0;c<s.c.length;c++)(u=n.a[r][c]).p=c,u.k==(uSn(),Iut)&&(h.c[h.c.length]=u),c5(BB(xq(t.b,r),29).a,c,u),u.j.c=x8(Ant,HWn,1,0,5,1),gun(u.j,BB(BB(xq(n.b,r),15).Xb(c),14)),LK(BB(mMn(u,(HXn(),ept)),98))||hon(u,ept,(QEn(),UCt));for(i=new Wb(h);i.a<i.c.c.length;)f=QRn(e=BB(n0(i),10)),l.a.zc(f,l),l.a.zc(e,l)}for(o=l.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),SQ(),m$(u.j,(zsn(),sst)),u.i=!0,eIn(u)}function dqn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=BB(mMn(n,(hWn(),Qft)),61),i=BB(xq(n.j,0),11),h==(kUn(),sIt)?qCn(i,SIt):h==SIt&&qCn(i,sIt),BB(mMn(t,(HXn(),Fgt)),174).Hc((mdn(),_It))){if(o=Gy(MD(mMn(n,Cpt))),s=Gy(MD(mMn(n,Ipt))),a=Gy(MD(mMn(n,Spt))),(u=BB(mMn(t,cpt),21)).Hc((lIn(),eIt)))for(e=s,f=n.o.a/2-i.n.a,c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.b=e,r.n.a=f-r.o.a/2,e+=r.o.b+a;else if(u.Hc(rIt))for(c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.a=o+n.o.a-i.n.a;f0(new Pw((gM(),new HV(t,!1,!1,new Ft))),new __(null,n,!1))}}function gqn(n,t){var i,r,c,a,u,o,s;if(0!=t.c.length){for(SQ(),yG(t.c,t.c.length,null),r=BB(n0(c=new Wb(t)),145);c.a<c.c.c.length;)i=BB(n0(c),145),!aen(r.e.c,i.e.c)||Kdn(BD(r.e).b,i.e.d)||Kdn(BD(i.e).b,r.e.d)?(eFn(n,r),r=i):(gun(r.k,i.k),gun(r.b,i.b),gun(r.c,i.c),Frn(r.i,i.i),gun(r.d,i.d),gun(r.j,i.j),a=e.Math.min(r.e.c,i.e.c),u=e.Math.min(r.e.d,i.e.d),o=e.Math.max(r.e.c+r.e.b,i.e.c+i.e.b)-a,s=e.Math.max(r.e.d+r.e.a,i.e.d+i.e.a)-u,xH(r.e,a,u,o,s),t0(r.f,i.f),!r.a&&(r.a=i.a),gun(r.g,i.g),WB(r.g,i));eFn(n,r)}}function pqn(n,t,e,i){var r,c,a,u,o,s;if((u=n.j)==(kUn(),PIt)&&t!=(QEn(),QCt)&&t!=(QEn(),YCt)&&(qCn(n,u=z_n(n,e)),!(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),tpt))&&u!=PIt&&(0!=n.n.a||0!=n.n.b)&&hon(n,tpt,jkn(n,u))),t==(QEn(),WCt)){switch(s=0,u.g){case 1:case 3:(c=n.i.o.a)>0&&(s=n.n.a/c);break;case 2:case 4:(r=n.i.o.b)>0&&(s=n.n.b/r)}hon(n,(hWn(),Tlt),s)}if(o=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=QCt&&t!=YCt&&u!=PIt)switch(u.g){case 1:a.a=o.a/2;break;case 2:a.a=o.a,a.b=o.b/2;break;case 3:a.a=o.a/2,a.b=o.b;break;case 4:a.b=o.b/2}else a.a=o.a/2,a.b=o.b/2}function vqn(n){var t,e,i,r,c,a,u,o,s,h;if(n.ej())if(h=n.Vi(),o=n.fj(),h>0)if(t=new jcn(n.Gi()),c=(e=h)<100?null:new Fj(e),JD(n,e,t.g),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new AL(t);i.e!=i.i.gc();)c=n.dj(kpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r);else JD(n,n.Vi(),n.Wi()),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if((h=n.Vi())>0){for(u=n.Wi(),s=h,JD(n,h,u),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else JD(n,n.Vi(),n.Wi());else JD(n,n.Vi(),n.Wi())}function mqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(u=new Wb(t);u.a<u.c.c.length;)(c=BB(n0(u),233)).e=null,c.c=0;for(o=null,a=new Wb(t);a.a<a.c.c.length;)if(f=(c=BB(n0(a),233)).d[0],!e||f.k==(uSn(),Cut)){for(b=BB(mMn(f,(hWn(),clt)),15).Kc();b.Ob();)l=BB(b.Pb(),10),e&&l.k!=(uSn(),Cut)||((!c.e&&(c.e=new Np),c.e).Fc(n.b[l.c.p][l.p]),++n.b[l.c.p][l.p].c);if(!e&&f.k==(uSn(),Cut)){if(o)for(h=BB(h6(n.d,o),21).Kc();h.Ob();)for(s=BB(h.Pb(),10),r=BB(h6(n.d,f),21).Kc();r.Ob();)i=BB(r.Pb(),10),UB(n.b[s.c.p][s.p]).Fc(n.b[i.c.p][i.p]),++n.b[i.c.p][i.p].c;o=f}}}function yqn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),11),nhn(n.b,n.d[r.p]),o.c=x8(Ant,HWn,1,0,5,1),r.i.k.g){case 0:Otn(BB(mMn(r,(hWn(),Elt)),10).j,new Zd(o));break;case 1:S$(Qon(AV(new Rq(null,new w1(r.i.j,16)),new ng(r))),new tg(o));break;case 3:WB(o,new rI(BB(mMn(r,(hWn(),dlt)),11),iln(r.e.c.length+r.g.c.length)))}for(u=new Wb(o);u.a<u.c.c.length;)a=BB(n0(u),46),(i=ME(n,BB(a.a,11)))>n.d[r.p]&&(e+=n5(n.b,i)*BB(a.b,19).a,d3(n.a,iln(i)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function kqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for((f=new wA(BB(ZAn(n,(SMn(),HMt)),8))).a=e.Math.max(f.a-i.b-i.c,0),f.b=e.Math.max(f.b-i.d-i.a,0),(null==(c=MD(ZAn(n,DMt)))||(kW(c),c<=0))&&(c=1.3),u=new Np,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)a=new zx(BB(kpn(l),33)),u.c[u.c.length]=a;switch(BB(ZAn(n,RMt),311).g){case 3:w=aFn(u,t,f.a,f.b,(s=r,kW(c),s));break;case 1:w=vBn(u,t,f.a,f.b,(h=r,kW(c),h));break;default:w=Mqn(u,t,f.a,f.b,(o=r,kW(c),o))}KUn(n,(b=yXn(new Gtn(w),t,i,f.a,f.b,r,(kW(c),c))).a,b.b,!1,!0)}function jqn(n,t){var e,i,r,c;c=new t_((e=t.b).j),r=0,(i=e.j).c=x8(Ant,HWn,1,0,5,1),eX(BB(gan(n.b,(kUn(),sIt),(Crn(),Rst)),15),e),r=Jmn(c,r,new xr,i),eX(BB(gan(n.b,sIt,Dst),15),e),r=Jmn(c,r,new Nr,i),eX(BB(gan(n.b,sIt,xst),15),e),eX(BB(gan(n.b,oIt,Rst),15),e),eX(BB(gan(n.b,oIt,Dst),15),e),r=Jmn(c,r,new Dr,i),eX(BB(gan(n.b,oIt,xst),15),e),eX(BB(gan(n.b,SIt,Rst),15),e),r=Jmn(c,r,new Rr,i),eX(BB(gan(n.b,SIt,Dst),15),e),r=Jmn(c,r,new Kr,i),eX(BB(gan(n.b,SIt,xst),15),e),eX(BB(gan(n.b,CIt,Rst),15),e),r=Jmn(c,r,new Qr,i),eX(BB(gan(n.b,CIt,Dst),15),e),eX(BB(gan(n.b,CIt,xst),15),e)}function Eqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Layer size calculation",1),f=RQn,h=KQn,c=!1,o=new Wb(n.b);o.a<o.c.c.length;)if((s=(u=BB(n0(o),29)).c).a=0,s.b=0,0!=u.a.c.length){for(c=!0,b=new Wb(u.a);b.a<b.c.c.length;)d=(l=BB(n0(b),10)).o,w=l.d,s.a=e.Math.max(s.a,d.a+w.b+w.c);g=(r=BB(xq(u.a,0),10)).n.b-r.d.d,r.k==(uSn(),Mut)&&(g-=BB(mMn(n,(HXn(),Lpt)),142).d),i=(a=BB(xq(u.a,u.a.c.length-1),10)).n.b+a.o.b+a.d.a,a.k==Mut&&(i+=BB(mMn(n,(HXn(),Lpt)),142).a),s.b=i-g,f=e.Math.min(f,g),h=e.Math.max(h,i)}c||(f=0,h=0),n.f.b=h-f,n.c.b-=f,HSn(t)}function Tqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(c=0,a=0,s=new Wb(n.a);s.a<s.c.c.length;)u=BB(n0(s),10),c=e.Math.max(c,u.d.b),a=e.Math.max(a,u.d.c);for(o=new Wb(n.a);o.a<o.c.c.length;){switch(u=BB(n0(o),10),BB(mMn(u,(HXn(),kdt)),248).g){case 1:w=0;break;case 2:w=1;break;case 5:w=.5;break;default:for(i=0,f=0,b=new Wb(u.j);b.a<b.c.c.length;)0==(l=BB(n0(b),11)).e.c.length||++i,0==l.g.c.length||++f;w=i+f==0?.5:f/(i+f)}g=n.c,h=u.o.a,p=(g.a-h)*w,w>.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=u.d.b)&&(p=r),d=u.d.c,p>g.a-d-h&&(p=g.a-d-h),u.n.a=t+p}}function Mqn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(u=x8(xNt,qQn,25,n.c.length,15,1),ikn(l=new Xz(new Uu),n),s=0,b=new Np;0!=l.b.c.length;)if(a=BB(0==l.b.c.length?null:xq(l.b,0),157),s>1&&iG(a)*eG(a)/2>u[0]){for(c=0;c<b.c.length-1&&iG(a)*eG(a)/2>u[c];)++c;f=new Gtn(new s1(b,0,c+1)),h=iG(a)/eG(a),o=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),o),F8(eMn(l,f)),ikn(l,new s1(b,c+1,b.c.length)),b.c=x8(Ant,HWn,1,0,5,1),s=0,jG(u,u.length,0)}else null!=(0==l.b.c.length?null:xq(l.b,0))&&hrn(l,0),s>0&&(u[s]=u[s-1]),u[s]+=iG(a)*eG(a),++s,b.c[b.c.length]=a;return b}function Sqn(n){var t,e,i;if((e=BB(mMn(n,(HXn(),kgt)),163))==(Tbn(),Flt)){for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(!X5(BB(U5(t),17)))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(e==Hlt)for(i=new oz(ZL(lbn(n).a.Kc(),new h));dAn(i);)if(!X5(BB(U5(i),17)))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}function Pqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(OTn(t,"Label dummy removal",1),i=Gy(MD(mMn(n,(HXn(),jpt)))),r=Gy(MD(mMn(n,Spt))),o=BB(mMn(n,Udt),103),u=new Wb(n.b);u.a<u.c.c.length;)for(h=new M2(BB(n0(u),29).a,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),(s=BB(h.d.Xb(h.c=h.b++),10)).k==(uSn(),Sut)&&(f=BB(mMn(s,(hWn(),dlt)),17),b=Gy(MD(mMn(f,agt))),a=GI(mMn(s,ult))===GI((Xyn(),ECt)),e=new wA(s.n),a&&(e.b+=b+i),c=new xC(s.o.a,s.o.b-b-i),l=BB(mMn(s,Plt),15),o==(Ffn(),HPt)||o==KPt?ADn(l,e,r,c,a,o):qhn(l,e,r,c),gun(f.b,l),rGn(s,GI(mMn(n,Zdt))===GI((Mbn(),YPt))),fW(h));HSn(t)}function Cqn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(u=new Np,r=new Wb(t.a);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),10).j);a.a<a.c.c.length;){for(s=null,m=0,y=(v=Z0((c=BB(n0(a),11)).g)).length;m<y;++m)wan((p=v[m]).d.i,e)||((g=LHn(n,t,e,p,p.c,(ain(),qvt),s))!=s&&(u.c[u.c.length]=g),g.c&&(s=g));for(o=null,w=0,d=(b=Z0(c.e)).length;w<d;++w)wan((l=b[w]).c.i,e)||((g=LHn(n,t,e,l,l.d,(ain(),Hvt),o))!=o&&(u.c[u.c.length]=g),g.c&&(o=g))}for(f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),441),-1!=E7(t.a,h.a,0)||WB(t.a,h.a),h.c&&(i.c[i.c.length]=h)}function Iqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Interactive cycle breaking",1),h=new Np,l=new Wb(t.a);l.a<l.c.c.length;)for((f=BB(n0(l),10)).p=1,b=Fjn(f).a,s=xwn(f,(ain(),qvt)).Kc();s.Ob();)for(c=new Wb(BB(s.Pb(),11).g);c.a<c.c.c.length;)(w=(i=BB(n0(c),17)).d.i)!=f&&Fjn(w).a<b&&(h.c[h.c.length]=i);for(a=new Wb(h);a.a<a.c.c.length;)tBn(i=BB(n0(a),17),!0);for(h.c=x8(Ant,HWn,1,0,5,1),o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p>0&&lPn(n,u,h);for(r=new Wb(h);r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0);h.c=x8(Ant,HWn,1,0,5,1),HSn(e)}function Oqn(n,t){var e,i,r,c,a,u,o,s,h;return s="",0==t.length?n.de(XVn,zVn,-1,-1):(mK((h=RMn(t)).substr(0,3),"at ")&&(h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=RMn(h.substr(a+1)),h=RMn(h.substr(0,a))):(e=h.indexOf(")",a),s=h.substr(a+1,e-(a+1)),h=RMn(h.substr(0,a))),-1!=(a=GO(h,YTn(46)))&&(h=h.substr(a+1)),(0==h.length||mK(h,"Anonymous function"))&&(h=zVn),u=mN(s,YTn(58)),r=MK(s,YTn(58),u-1),o=-1,i=-1,c=XVn,-1!=u&&-1!=r&&(c=s.substr(0,r),o=hx(s.substr(r+1,u-(r+1))),i=hx(s.substr(u+1))),n.de(c,h,o,i))}function Aqn(n,t,e){var i,r,c,a,u,o;if(0==t.l&&0==t.m&&0==t.h)throw Hp(new Oy("divide by zero"));if(0==n.l&&0==n.m&&0==n.h)return e&&(ltt=M$(0,0,0)),M$(0,0,0);if(t.h==CQn&&0==t.m&&0==t.l)return Fbn(n,e);if(o=!1,t.h>>19!=0&&(t=aon(t),o=!o),a=OLn(t),c=!1,r=!1,i=!1,n.h==CQn&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return u=jAn(n,a),o&&Oon(u),e&&(ltt=M$(0,0,0)),u;n=WO((X7(),btt)),i=!0,o=!o}else n.h>>19!=0&&(c=!0,n=aon(n),i=!0,o=!o);return-1!=a?Bon(n,a,o,c,e):Kkn(n,t)<0?(e&&(ltt=c?aon(n):M$(n.l,n.m,n.h)),M$(0,0,0)):h_n(i?n:M$(n.l,n.m,n.h),t,o,c,r,e)}function $qn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(n.e&&n.c.c<n.f)throw Hp(new Fy("Expected "+n.f+" phases to be configured; only found "+n.c.c));for(h=BB(Vj(n.g),9),b=sx(n.f),u=0,s=(c=h).length;u<s;++u)(f=BB(D7(n,(i=c[u]).g),246))?WB(b,BB(own(n,f),123)):b.c[b.c.length]=null;for(w=new B2,JT(AV($V(AV(new Rq(null,new w1(b,16)),new hu),new Eg(t)),new fu),new Tg(w)),Jcn(w,n.a),e=new Np,a=0,o=(r=h).length;a<o;++a)gun(e,Eun(n,JQ(BB(D7(w,(i=r[a]).g),20)))),(l=BB(xq(b,i.g),123))&&(e.c[e.c.length]=l);return gun(e,Eun(n,JQ(BB(D7(w,h[h.length-1].g+1),20)))),e}function Lqn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w;for(OTn(i,"Model order cycle breaking",1),n.a=0,n.b=0,l=new Np,h=t.a.c.length,s=new Wb(t.a);s.a<s.c.c.length;)Lx(o=BB(n0(s),10),(hWn(),wlt))&&(h=e.Math.max(h,BB(mMn(o,wlt),19).a+1));for(w=new Wb(t.a);w.a<w.c.c.length;)for(u=zPn(n,b=BB(n0(w),10),h),f=xwn(b,(ain(),qvt)).Kc();f.Ob();)for(a=new Wb(BB(f.Pb(),11).g);a.a<a.c.c.length;)zPn(n,(r=BB(n0(a),17)).d.i,h)<u&&(l.c[l.c.length]=r);for(c=new Wb(l);c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(t,(hWn(),qft),(hN(),!0));l.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function Nqn(n,t){var e,i,r,c,a,u,o;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=BB(a.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(u=n.r.a.ec().Kc();u.Ob();)r=BB(u.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(o=t.w.a.ec().Kc();o.Ob();)r=BB(o.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&++i;for(c=t.r.a.ec().Kc();c.Ob();)r=BB(c.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e<i?new S6(n,t,i-e):i<e?new S6(t,n,e-i):(new S6(t,n,0),new S6(n,t,0))}}function xqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(s=t.c,r=QA(n.e),f=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),e=r.a-f.a,i=r.b-f.b,e=(a=t.a).c-e,i=a.d-i,o=new Wb(s);o.a<o.c.c.length;){switch(b=e+(l=(u=BB(n0(o),395)).b).a,g=i+l.b,w=CJ(b/n.a),p=CJ(g/n.b),(c=u.a).g){case 0:Hpn(),h=Brt;break;case 1:Hpn(),h=Frt;break;case 2:Hpn(),h=Hrt;break;default:Hpn(),h=qrt}c.a?(v=CJ((g+u.c)/n.b),WB(n.f,new x_(h,iln(p),iln(v))),c==(qpn(),tct)?won(n,0,p,w,v):won(n,w,p,n.d-1,v)):(d=CJ((b+u.c)/n.a),WB(n.f,new x_(h,iln(w),iln(d))),c==(qpn(),Zrt)?won(n,w,0,d,p):won(n,w,p,d,n.c-1))}}function Dqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(l=new Np,c=new Np,d=null,u=t.Kc();u.Ob();)a=new Hd(BB(u.Pb(),19).a),c.c[c.c.length]=a,d&&(a.d=d,d.e=a),d=a;for(m=zFn(n),h=0;h<c.c.length;++h){for(b=null,g=D6((l1(0,c.c.length),BB(c.c[0],652))),i=null,r=RQn,f=1;f<n.b.c.length;++f)p=g?e.Math.abs(g.b-f):e.Math.abs(f-b.b)+1,(w=b?e.Math.abs(f-b.b):p+1)<p?(s=b,o=w):(s=g,o=p),y=Gy(MD(mMn(n,(HXn(),Hpt)))),(v=m[f]+e.Math.pow(o,y))<r&&(r=v,(i=s).c=f),g&&f==g.b&&(b=g,g=xz(g));i&&(WB(l,iln(i.c)),i.a=!0,vln(i))}return SQ(),yG(l.c,l.c.length,null),l}function Rqn(n){var t,e,i,r,c,a,u,o,s,h;for(t=new To,e=new To,s=mK(K9n,(r=N_n(n.b,_9n))?SD(cdn((!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),r.b),F9n)):null),o=0;o<n.i;++o)cL(u=BB(n.g[o],170),99)?0!=((a=BB(u,18)).Bb&h6n)?(0==(a.Bb&hVn)||!s&&null==((c=N_n(a,_9n))?SD(cdn((!c.b&&(c.b=new Jx((gWn(),k$t),X$t,c)),c.b),n8n)):null))&&f9(t,a):(h=Cvn(a))&&0!=(h.Bb&h6n)||(0==(a.Bb&hVn)||!s&&null==((i=N_n(a,_9n))?SD(cdn((!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),i.b),n8n)):null))&&f9(e,a):(ZM(),BB(u,66).Oj()&&(u.Jj()||(f9(t,u),f9(e,u))));chn(t),chn(e),n.a=BB(t.g,247),BB(e.g,247)}function Kqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(o=xSn(t),BB(mMn(t,(HXn(),qdt)),314)!=(Oin(),hht)&&e5(o,new vt),e5(o,new Dw(BB(mMn(t,Rdt),292))),b=0,s=new Np,r=new bV(o);r.a!=r.b;)i=BB(_hn(r),37),$Gn(n.c,i),b+=(f=BB(mMn(i,(hWn(),Mlt)),15)).gc(),WB(s,new rI(i,f.Kc()));for(OTn(e,"Recursive hierarchical layout",b),l=BB(BB(xq(s,s.c.length-1),46).b,47);l.Ob();)for(u=new Wb(s);u.a<u.c.c.length;)for(a=BB(n0(u),46),f=BB(a.b,47),c=BB(a.a,37);f.Ob();){if(cL(h=BB(f.Pb(),51),507)){if(c.e)break;h.pf(c,mcn(e,1));break}h.pf(c,mcn(e,1))}HSn(e)}function _qn(n,t){var e,i,r,c,a,u,o,s;if(b1(u=t.length-1,t.length),93==(a=t.charCodeAt(u))){if((c=GO(t,YTn(91)))>=0)return r=dbn(n,t.substr(1,c-1)),YUn(n,t.substr(c+1,u-(c+1)),r)}else{if(e=-1,null==Ett&&(Ett=new RegExp("\\d")),Ett.test(String.fromCharCode(a))&&(e=MK(t,YTn(46),u-1))>=0){i=BB(V5(n,Ptn(n,t.substr(1,e-1)),!1),58),o=0;try{o=l_n(t.substr(e+1),_Vn,DWn)}catch(h){throw cL(h=lun(h),127)?Hp(new L7(h)):Hp(h)}if(o<i.gc())return cL(s=i.Xb(o),72)&&(s=BB(s,72).dd()),BB(s,56)}if(e<0)return BB(V5(n,Ptn(n,t.substr(1)),!1),56)}return null}function Fqn(n,t,e){var i,r,c,a,u,o,s;if(Awn(t,e)>=0)return e;switch(DW(B7(n,e))){case 2:if(mK("",Cfn(n,e.Hj()).ne())){if(o=m$n(n,t,u=jV(B7(n,e)),kV(B7(n,e))))return o;for(a=0,s=(r=jKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(r.Xb(a),170))),u))return o}return null;case 4:if(mK("",Cfn(n,e.Hj()).ne())){for(i=e;i;i=J1(B7(n,i)))if(o=y$n(n,t,jV(B7(n,i)),kV(B7(n,i))))return o;if(u=jV(B7(n,e)),mK(S7n,u))return mjn(n,t);for(a=0,s=(c=EKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(c.Xb(a),170))),u))return o}return null;default:return null}}function Bqn(n,t,e){var i,r,c,a,u,o,s,h;if(0==e.gc())return!1;if(ZM(),c=(u=BB(t,66).Oj())?e:new gtn(e.gc()),$xn(n.e,t)){if(t.hi())for(s=e.Kc();s.Ob();)UFn(n,t,o=s.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(r=Z3(t,o),c.Hc(r)||c.Fc(r));else if(!u)for(s=e.Kc();s.Ob();)r=Z3(t,o=s.Pb()),c.Fc(r)}else{if(e.gc()>1)throw Hp(new _y(I7n));for(h=axn(n.e.Tg(),t),i=BB(n.g,119),a=0;a<n.i;++a)if(r=i[a],h.rl(r.ak())){if(e.Hc(u?r:r.dd()))return!1;for(s=e.Kc();s.Ob();)o=s.Pb(),BB(ovn(n,a,u?BB(o,72):Z3(t,o)),72);return!0}u||(r=Z3(t,e.Kc().Pb()),c.Fc(r))}return pX(n,c)}function Hqn(n,t){var i,r,c,a,u,o,s;for(s=new YT,o=new Kb(new Ob(n.c).a.vc().Kc());o.a.Ob();)c=BB(o.a.Pb(),42),0==(a=BB(c.dd(),458)).b&&r5(s,a,s.c.b,s.c);for(;0!=s.b;)for(null==(a=BB(0==s.b?null:(Px(0!=s.b),Atn(s,s.a.a)),458)).a&&(a.a=0),r=new Wb(a.d);r.a<r.c.c.length;)null==(i=BB(n0(r),654)).b.a?i.b.a=Gy(a.a)+i.a:t.o==(oZ(),ryt)?i.b.a=e.Math.min(Gy(i.b.a),Gy(a.a)+i.a):i.b.a=e.Math.max(Gy(i.b.a),Gy(a.a)+i.a),--i.b.b,0==i.b.b&&DH(s,i.b);for(u=new Kb(new Ob(n.c).a.vc().Kc());u.a.Ob();)c=BB(u.a.Pb(),42),a=BB(c.dd(),458),t.i[a.c.p]=a.a}function qqn(){qqn=O,skt=new up(OZn),new up(AZn),new iR("DEPTH",iln(0)),ikt=new iR("FAN",iln(0)),tkt=new iR(U3n,iln(0)),dkt=new iR("ROOT",(hN(),!1)),ckt=new iR("LEFTNEIGHBOR",null),bkt=new iR("RIGHTNEIGHBOR",null),akt=new iR("LEFTSIBLING",null),wkt=new iR("RIGHTSIBLING",null),ekt=new iR("DUMMY",!1),new iR("LEVEL",iln(0)),lkt=new iR("REMOVABLE_EDGES",new YT),gkt=new iR("XCOOR",iln(0)),pkt=new iR("YCOOR",iln(0)),ukt=new iR("LEVELHEIGHT",0),rkt=new iR("ID",""),hkt=new iR("POSITION",iln(0)),fkt=new iR("PRELIM",0),okt=new iR("MODIFIER",0),nkt=new up($Zn),Zyt=new up(LZn)}function Gqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(f=i+t.c.c.a,w=new Wb(t.j);w.a<w.c.c.length;){if(b=BB(n0(w),11),c=Aon(Pun(Gk(PMt,1),sVn,8,0,[b.i.n,b.n,b.a])),t.k==(uSn(),Iut)&&(o=BB(mMn(b,(hWn(),dlt)),11),c.a=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).a,t.n.a=c.a),u=new xC(0,c.b),b.j==(kUn(),oIt))u.a=f;else{if(b.j!=CIt)continue;u.a=i}if(!(e.Math.abs(c.a-u.a)<=r)||Nkn(t))for(a=b.g.c.length+b.e.c.length>1,h=new m6(b.b);y$(h.a)||y$(h.b);)l=(s=BB(y$(h.a)?n0(h.a):n0(h.b),17)).c==b?s.d:s.c,e.Math.abs(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).b-u.b)>1&&pxn(n,s,u,a,b)}}function zqn(n){var t,i,r,c,a,u;if(c=new M2(n.e,0),r=new M2(n.a,0),n.d)for(i=0;i<n.b;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++);else for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);for(t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++))));n.f-t>D3n;){for(a=t,u=0;e.Math.abs(t-a)<D3n;)++u,t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++)))),Px(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);u<n.b&&(Px(c.b>0),c.a.Xb(c.c=--c.b),DFn(n,n.b-u,a,r,c),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++)),Px(r.b>0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);n.d=!0,n.c=!0}function Uqn(){Uqn=O,pLt=(cE(),gLt).b,yLt=BB(Wtn(QQ(gLt.b),0),34),vLt=BB(Wtn(QQ(gLt.b),1),34),mLt=BB(Wtn(QQ(gLt.b),2),34),OLt=gLt.bb,BB(Wtn(QQ(gLt.bb),0),34),BB(Wtn(QQ(gLt.bb),1),34),$Lt=gLt.fb,LLt=BB(Wtn(QQ(gLt.fb),0),34),BB(Wtn(QQ(gLt.fb),1),34),BB(Wtn(QQ(gLt.fb),2),18),xLt=gLt.qb,KLt=BB(Wtn(QQ(gLt.qb),0),34),BB(Wtn(QQ(gLt.qb),1),18),BB(Wtn(QQ(gLt.qb),2),18),DLt=BB(Wtn(QQ(gLt.qb),3),34),RLt=BB(Wtn(QQ(gLt.qb),4),34),FLt=BB(Wtn(QQ(gLt.qb),6),34),_Lt=BB(Wtn(QQ(gLt.qb),5),18),kLt=gLt.j,jLt=gLt.k,ELt=gLt.q,TLt=gLt.w,MLt=gLt.B,SLt=gLt.A,PLt=gLt.C,CLt=gLt.D,ILt=gLt._,ALt=gLt.cb,NLt=gLt.hb}function Xqn(n,t,i){var r,c,a,u,o,s,h,f,l;n.c=0,n.b=0,r=2*t.c.a.c.length+1;n:for(h=i.Kc();h.Ob();){if(l=0,u=(s=BB(h.Pb(),11)).j==(kUn(),sIt)||s.j==SIt){if(!(f=BB(mMn(s,(hWn(),Elt)),10)))continue;l+=iRn(n,r,s,f)}else{for(o=new Wb(s.g);o.a<o.c.c.length;){if((c=BB(n0(o),17).d).i.c==t.c){WB(n.a,s);continue n}l+=n.g[c.p]}for(a=new Wb(s.e);a.a<a.c.c.length;){if((c=BB(n0(a),17).c).i.c==t.c){WB(n.a,s);continue n}l-=n.g[c.p]}}s.e.c.length+s.g.c.length>0?(n.f[s.p]=l/(s.e.c.length+s.g.c.length),n.c=e.Math.min(n.c,n.f[s.p]),n.b=e.Math.max(n.b,n.f[s.p])):u&&(n.f[s.p]=l)}}function Wqn(n){n.b=null,n.bb=null,n.fb=null,n.qb=null,n.a=null,n.c=null,n.d=null,n.e=null,n.f=null,n.n=null,n.M=null,n.L=null,n.Q=null,n.R=null,n.K=null,n.db=null,n.eb=null,n.g=null,n.i=null,n.j=null,n.k=null,n.gb=null,n.o=null,n.p=null,n.q=null,n.r=null,n.$=null,n.ib=null,n.S=null,n.T=null,n.t=null,n.s=null,n.u=null,n.v=null,n.w=null,n.B=null,n.A=null,n.C=null,n.D=null,n.F=null,n.G=null,n.H=null,n.I=null,n.J=null,n.P=null,n.Z=null,n.U=null,n.V=null,n.W=null,n.X=null,n.Y=null,n._=null,n.ab=null,n.cb=null,n.hb=null,n.nb=null,n.lb=null,n.mb=null,n.ob=null,n.pb=null,n.jb=null,n.kb=null,n.N=!1,n.O=!1}function Vqn(n,t,e){var i,r;for(OTn(e,"Graph transformation ("+n.a+")",1),r=a0(t.a),i=new Wb(t.b);i.a<i.c.c.length;)gun(r,BB(n0(i),29).a);if(BB(mMn(t,(HXn(),Xdt)),419)==(_nn(),Sht))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r);break;case 3:bdn(t,r);break;case 4:n.a==(Srn(),qut)?(bdn(t,r),$2(t,r)):($2(t,r),bdn(t,r))}else if(n.a==(Srn(),qut))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:bdn(t,r),L2(t,r);break;case 4:L2(t,r),bdn(t,r)}else switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:L2(t,r),bdn(t,r);break;case 4:bdn(t,r),L2(t,r)}HSn(e)}function Qqn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w;for(o=new fA,s=new fA,b=new fA,w=new fA,u=Gy(MD(mMn(t,(HXn(),Opt)))),r=Gy(MD(mMn(t,ypt))),a=new Wb(e);a.a<a.c.c.length;)if(c=BB(n0(a),10),(f=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sIt))for(s.a.zc(c,s),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(o,BB(U5(i),17).c.i);else if(f==SIt)for(w.a.zc(c,w),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(b,BB(U5(i),17).c.i);0!=o.a.gc()&&(l=AGn(new fX(2,r),t,o,s,-u-t.c.b))>0&&(n.a=u+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=AGn(new fX(1,r),t,b,w,t.f.b+u-t.c.b))>0&&(t.f.b+=u+(l-1)*r)}function Yqn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,Dsn(n,null)):(n.F=(kW(t),t),-1!=(i=GO(t,YTn(60)))?(r=t.substr(0,i),-1==GO(t,YTn(46))&&!mK(r,$Wn)&&!mK(r,S9n)&&!mK(r,P9n)&&!mK(r,C9n)&&!mK(r,I9n)&&!mK(r,O9n)&&!mK(r,A9n)&&!mK(r,$9n)&&(r=L9n),-1!=(e=mN(t,YTn(62)))&&(r+=""+t.substr(e+1)),Dsn(n,r)):(r=t,-1==GO(t,YTn(46))&&(-1!=(i=GO(t,YTn(91)))&&(r=t.substr(0,i)),mK(r,$Wn)||mK(r,S9n)||mK(r,P9n)||mK(r,C9n)||mK(r,I9n)||mK(r,O9n)||mK(r,A9n)||mK(r,$9n)?r=t:(r=L9n,-1!=i&&(r+=""+t.substr(i)))),Dsn(n,r),r==t&&(n.F=n.D))),0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,c,t))}function Jqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(!((d=t.b.c.length)<3)){for(b=x8(ANt,hQn,25,d,15,1),f=0,h=new Wb(t.b);h.a<h.c.c.length;)s=BB(n0(h),29),b[f++]=s.a.c.length;for(l=new M2(t.b,2),i=1;i<d-1;i++)for(Px(l.b<l.d.gc()),w=new Wb((e=BB(l.d.Xb(l.c=l.b++),29)).a),c=0,u=0,o=0;o<b[i+1];o++)if(m=BB(n0(w),10),o==b[i+1]-1||YSn(n,m,i+1,i)){for(a=b[i]-1,YSn(n,m,i+1,i)&&(a=n.c.e[BB(BB(BB(xq(n.c.b,m.p),15).Xb(0),46).a,10).p]);u<=o;){if(!YSn(n,v=BB(xq(e.a,u),10),i+1,i))for(p=BB(xq(n.c.b,v.p),15).Kc();p.Ob();)g=BB(p.Pb(),46),((r=n.c.e[BB(g.a,10).p])<c||r>a)&&TU(n.b,BB(g.b,17));++u}c=a}}}function Zqn(n,t){var e;if(null==t||mK(t,zWn))return null;if(0==t.length&&n.k!=(PPn(),pMt))return null;switch(n.k.g){case 1:return mgn(t,a5n)?(hN(),vtt):mgn(t,u5n)?(hN(),ptt):null;case 2:try{return iln(l_n(t,_Vn,DWn))}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 4:try{return bSn(t)}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 3:return t;case 5:return rhn(n),HIn(n,t);case 6:return rhn(n),K$n(n,n.a,t);case 7:try{return(e=rAn(n)).Jf(t),e}catch(i){if(cL(i=lun(i),32))return null;throw Hp(i)}default:throw Hp(new Fy("Invalid type set for this layout option."))}}function nGn(n){var t,e,i,r,c,a,u;for(Dnn(),u=new Vv,e=new Wb(n);e.a<e.c.c.length;)t=BB(n0(e),140),(!u.b||t.c>=u.b.c)&&(u.b=t),(!u.c||t.c<=u.c.c)&&(u.d=u.c,u.c=t),(!u.e||t.d>=u.e.d)&&(u.e=t),(!u.f||t.d<=u.f.d)&&(u.f=t);return i=new Tpn((Aun(),Zat)),i2(n,out,new Jy(Pun(Gk(Jat,1),HWn,369,0,[i]))),a=new Tpn(eut),i2(n,uut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[a]))),r=new Tpn(nut),i2(n,aut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[r]))),c=new Tpn(tut),i2(n,cut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[c]))),xLn(i.c,Zat),xLn(r.c,nut),xLn(c.c,tut),xLn(a.c,eut),u.a.c=x8(Ant,HWn,1,0,5,1),gun(u.a,i.c),gun(u.a,ean(r.c)),gun(u.a,c.c),gun(u.a,ean(a.c)),u}function tGn(n){var t;switch(n.d){case 1:if(n.hj())return-2!=n.o;break;case 2:if(n.hj())return-2==n.o;break;case 3:case 5:case 4:case 6:case 7:return n.o>-2;default:return!1}switch(t=n.gj(),n.p){case 0:return null!=t&&qy(TD(t))!=JI(n.k,0);case 1:return null!=t&&BB(t,217).a!=dG(n.k)<<24>>24;case 2:return null!=t&&BB(t,172).a!=(dG(n.k)&QVn);case 6:return null!=t&&JI(BB(t,162).a,n.k);case 5:return null!=t&&BB(t,19).a!=dG(n.k);case 7:return null!=t&&BB(t,184).a!=dG(n.k)<<16>>16;case 3:return null!=t&&Gy(MD(t))!=n.j;case 4:return null!=t&&BB(t,155).a!=n.j;default:return null==t?null!=n.n:!Nfn(t,n.n)}}function eGn(n,t,e){var i,r,c,a;return n.Fk()&&n.Ek()&&GI(a=Gz(n,BB(e,56)))!==GI(e)?(n.Oi(t),n.Ui(t,B9(n,t,a)),n.rk()&&(r=BB(e,49),c=n.Dk()?n.Bk()?r.ih(n.b,Cvn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),null):r.ih(n.b,Awn(r.Tg(),Cvn(BB(itn(jY(n.b),n.aj()),18))),null,null):r.ih(n.b,-1-n.aj(),null,null),!BB(a,49).eh()&&(i=BB(a,49),c=n.Dk()?n.Bk()?i.gh(n.b,Cvn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),c):i.gh(n.b,Awn(i.Tg(),Cvn(BB(itn(jY(n.b),n.aj()),18))),null,c):i.gh(n.b,-1-n.aj(),null,c)),c&&c.Fi()),mA(n.b)&&n.$i(n.Zi(9,e,a,t,!1)),a):e}function iGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(f=Gy(MD(mMn(n,(HXn(),Ept)))),r=Gy(MD(mMn(n,Rpt))),hon(b=new Yu,Ept,f+r),v=(h=t).d,g=h.c.i,m=h.d.i,p=tA(g.c),y=tA(m.c),c=new Np,l=p;l<=y;l++)Bl(o=new $vn(n),(uSn(),Put)),hon(o,(hWn(),dlt),h),hon(o,ept,(QEn(),XCt)),hon(o,Mpt,b),w=BB(xq(n.b,l),29),l==p?Qyn(o,w.a.c.length-i,w):PZ(o,w),(k=Gy(MD(mMn(h,agt))))<0&&hon(h,agt,k=0),o.o.b=k,d=e.Math.floor(k/2),qCn(u=new CSn,(kUn(),CIt)),CZ(u,o),u.n.b=d,qCn(s=new CSn,oIt),CZ(s,o),s.n.b=d,MZ(h,u),qan(a=new wY,h),hon(a,vgt,null),SZ(a,s),MZ(a,v),zkn(o,h,a),c.c[c.c.length]=a,h=a;return c}function rGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(u=BB(DSn(n,(kUn(),CIt)).Kc().Pb(),11).e,f=BB(DSn(n,oIt).Kc().Pb(),11).g,a=u.c.length,g=g1(BB(xq(n.j,0),11));a-- >0;){for(l1(0,u.c.length),b=BB(u.c[0],17),l1(0,f.c.length),r=E7((i=BB(f.c[0],17)).d.e,i,0),A2(b,i.d,r),SZ(i,null),MZ(i,null),l=b.a,t&&DH(l,new wA(g)),e=spn(i.a,0);e.b!=e.d.c;)DH(l,new wA(BB(b3(e),8)));for(d=b.b,h=new Wb(i.b);h.a<h.c.c.length;)s=BB(n0(h),70),d.c[d.c.length]=s;if(w=BB(mMn(b,(HXn(),vgt)),74),c=BB(mMn(i,vgt),74))for(w||(w=new km,hon(b,vgt,w)),o=spn(c,0);o.b!=o.d.c;)DH(w,new wA(BB(b3(o),8)))}}function cGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.b=0,void(i.n.c=0);for(h=n.u.Hc((lIn(),eIt)),u=0,o=s.Kc(),f=null,l=0,b=0;o.Ob();)c=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),a=r.b.rf().a,n.A.Hc((mdn(),_It))&&yRn(n,t),f?(w=b+f.d.c+n.w+r.d.b,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-c)<=fJn||l==c||isNaN(l)&&isNaN(c)?0:w/(c-l)))):n.C&&n.C.b>0&&(u=e.Math.max(u,lcn(n.C.b+r.d.b,c))),f=r,l=c,b=a;n.C&&n.C.c>0&&(w=b+n.C.c,h&&(w+=f.d.c),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-1)<=fJn||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=u}function aGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((lIn(),eIt)),u=0,n.A.Hc((mdn(),_It))&&kRn(n,t),o=s.Kc(),f=null,b=0,l=0;o.Ob();)a=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),c=r.b.rf().b,f?(w=l+f.d.a+n.w+r.d.d,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-a)<=fJn||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(u=e.Math.max(u,lcn(n.C.d+r.d.d,a))),f=r,b=a,l=c;n.C&&n.C.a>0&&(w=l+n.C.a,h&&(w+=f.d.a),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-1)<=fJn||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=u}function uGn(n,t,e){var i,r,c,a,u,o;for(this.g=n,u=t.d.length,o=e.d.length,this.d=x8(Out,a1n,10,u+o,0,1),a=0;a<u;a++)this.d[a]=t.d[a];for(c=0;c<o;c++)this.d[u+c]=e.d[c];if(t.e){if(this.e=zB(t.e),this.e.Mc(e),e.e)for(r=e.e.Kc();r.Ob();)(i=BB(r.Pb(),233))!=t&&(this.e.Hc(i)?--i.c:this.e.Fc(i))}else e.e&&(this.e=zB(e.e),this.e.Mc(t));this.f=t.f+e.f,this.a=t.a+e.a,this.a>0?Jtn(this,this.f/this.a):null!=lL(t.g,t.d[0]).a&&null!=lL(e.g,e.d[0]).a?Jtn(this,(Gy(lL(t.g,t.d[0]).a)+Gy(lL(e.g,e.d[0]).a))/2):null!=lL(t.g,t.d[0]).a?Jtn(this,lL(t.g,t.d[0]).a):null!=lL(e.g,e.d[0]).a&&Jtn(this,lL(e.g,e.d[0]).a)}function oGn(n,t){var e,i,r,c,a,u,o,s,h;for(n.a=new BX($cn(WPt)),i=new Wb(t.a);i.a<i.c.c.length;){for(e=BB(n0(i),841),a=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),WB(n.a.a,a),o=new Wb(e.d);o.a<o.c.c.length;)FGn(s=new NN(n,u=BB(n0(o),110)),BB(mMn(e.c,(hWn(),Xft)),21)),hU(n.g,e)||(VW(n.g,e,new xC(u.c,u.d)),VW(n.f,e,s)),WB(n.a.b,s),g2(a,s);for(c=new Wb(e.b);c.a<c.c.c.length;)s=new NN(n,(r=BB(n0(c),594)).kf()),VW(n.b,r,new rI(a,s)),FGn(s,BB(mMn(e.c,(hWn(),Xft)),21)),r.hf()&&(FGn(h=new Sgn(n,r.hf(),1),BB(mMn(e.c,Xft),21)),g2(new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),h),JIn(n.c,r.gf(),new rI(a,h)))}return n.a}function sGn(n){var t;this.a=n,t=(uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])).length,this.b=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),this.c=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),FY(this,Cut,(HXn(),Opt),Apt),tun(this,Cut,Put,Ept,Tpt),_Y(this,Cut,Iut,Ept),_Y(this,Cut,Mut,Ept),tun(this,Cut,Sut,Opt,Apt),FY(this,Put,ypt,kpt),_Y(this,Put,Iut,ypt),_Y(this,Put,Mut,ypt),tun(this,Put,Sut,Ept,Tpt),ZA(this,Iut,ypt),_Y(this,Iut,Mut,ypt),_Y(this,Iut,Sut,Ppt),ZA(this,Mut,Npt),tun(this,Mut,Sut,Ipt,Cpt),FY(this,Sut,ypt,ypt),FY(this,Tut,ypt,kpt),tun(this,Tut,Cut,Ept,Tpt),tun(this,Tut,Sut,Ept,Tpt),tun(this,Tut,Put,Ept,Tpt)}function hGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(cL(a=e.ak(),99)&&0!=(BB(a,18).Bb&BQn)&&(l=BB(e.dd(),49),(d=tfn(n.e,l))!=l)){if(jL(n,t,sTn(n,t,h=Z3(a,d))),f=null,mA(n.e)&&(i=Fqn((IPn(),Z$t),n.e.Tg(),a))!=itn(n.e.Tg(),n.c)){for(g=axn(n.e.Tg(),a),u=0,c=BB(n.g,119),o=0;o<t;++o)r=c[o],g.rl(r.ak())&&++u;(f=new b4(n.e,9,i,l,d,u,!1)).Ei(new N7(n.e,9,n.c,e,h,t,!1))}return(b=Cvn(w=BB(a,18)))?(f=l.ih(n.e,Awn(l.Tg(),b),null,f),f=BB(d,49).gh(n.e,Awn(d.Tg(),b),null,f)):0!=(w.Bb&h6n)&&(s=-1-Awn(n.e.Tg(),w),f=l.ih(n.e,s,null,null),!BB(d,49).eh()&&(f=BB(d,49).gh(n.e,s,null,f))),f&&f.Fi(),h}return e}function fGn(n){var t,i,r,c,a,u,o,s;for(a=new Wb(n.a.b);a.a<a.c.c.length;)(c=BB(n0(a),81)).b.c=c.g.c,c.b.d=c.g.d;for(s=new xC(RQn,RQn),t=new xC(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);for(o=TX(n.c).a.nc();o.Ob();)u=BB(o.Pb(),46),i=BB(u.b,81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);n.d=qx(new xC(s.a,s.b)),n.e=XR(new xC(t.a,t.b),s),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1)}function lGn(n){var t,e,i;for(ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Nf])),e=new Tl(n),i=0;i<e.a.length;++i)mK(t=dnn(e,i).je().a,"layered")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new hf])):mK(t,"force")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new zh])):mK(t,"stress")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Xh])):mK(t,"mrtree")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Pf])):mK(t,"radial")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new yf])):mK(t,"disco")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Gh,new Hh])):mK(t,"sporeOverlap")||mK(t,"sporeCompaction")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Tf])):mK(t,"rectpacking")&&ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Of]))}function bGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=new wA(n.o),p=t.a/l.a,u=t.b/l.b,d=t.a-l.a,c=t.b-l.b,e)for(r=GI(mMn(n,(HXn(),ept)))===GI((QEn(),XCt)),w=new Wb(n.j);w.a<w.c.c.length;)switch((b=BB(n0(w),11)).j.g){case 1:r||(b.n.a*=p);break;case 2:b.n.a+=d,r||(b.n.b*=u);break;case 3:r||(b.n.a*=p),b.n.b+=c;break;case 4:r||(b.n.b*=u)}for(s=new Wb(n.b);s.a<s.c.c.length;)h=(o=BB(n0(s),70)).n.a+o.o.a/2,f=o.n.b+o.o.b/2,(g=h/l.a)+(a=f/l.b)>=1&&(g-a>0&&f>=0?(o.n.a+=d,o.n.b+=c*a):g-a<0&&h>=0&&(o.n.a+=d*g,o.n.b+=c));n.o.a=t.a,n.o.b=t.b,hon(n,(HXn(),Fgt),(mdn(),new YK(i=BB(Vj(YIt),9),BB(SR(i,i.length),9),0)))}function wGn(n,t,e,i,r,c){if(null!=t&&Xbn(t,AAt,$At))throw Hp(new _y("invalid scheme: "+t));if(!(n||null!=e&&-1==GO(e,YTn(35))&&e.length>0&&(b1(0,e.length),47!=e.charCodeAt(0))))throw Hp(new _y("invalid opaquePart: "+e));if(n&&(null==t||!xT(jAt,t.toLowerCase()))&&null!=e&&Xbn(e,LAt,NAt))throw Hp(new _y(o9n+e));if(n&&null!=t&&xT(jAt,t.toLowerCase())&&!CEn(e))throw Hp(new _y(o9n+e));if(!Ubn(i))throw Hp(new _y("invalid device: "+i));if(!Rhn(r))throw Hp(new _y(null==r?"invalid segments: null":"invalid segment: "+shn(r)));if(null!=c&&-1!=GO(c,YTn(35)))throw Hp(new _y("invalid query: "+c))}function dGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(t,"Calculate Graph Size",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),o=ZJn,s=ZJn,a=n4n,u=n4n,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)d=(h=BB(kpn(l),33)).i,g=h.j,v=h.g,r=h.f,c=BB(ZAn(h,(sWn(),$St)),142),o=e.Math.min(o,d-c.b),s=e.Math.min(s,g-c.d),a=e.Math.max(a,d+v+c.c),u=e.Math.max(u,g+r+c.a);for(b=new xC(o-(w=BB(ZAn(n,(sWn(),XSt)),116)).b,s-w.d),f=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));f.e!=f.i.gc();)Pen(h=BB(kpn(f),33),h.i-b.a),Cen(h,h.j-b.b);p=a-o+(w.b+w.c),i=u-s+(w.d+w.a),Sen(n,p),Men(n,i),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function gGn(n){var t,e,i,r,c,a,u,o,s,h;for(i=new Np,a=new Wb(n.e.a);a.a<a.c.c.length;){for(h=0,(r=BB(n0(a),121)).k.c=x8(Ant,HWn,1,0,5,1),e=new Wb(kbn(r));e.a<e.c.c.length;)(t=BB(n0(e),213)).f&&(WB(r.k,t),++h);1==h&&(i.c[i.c.length]=r)}for(c=new Wb(i);c.a<c.c.c.length;)for(r=BB(n0(c),121);1==r.k.c.length;){for(s=BB(n0(new Wb(r.k)),213),n.b[s.c]=s.g,u=s.d,o=s.e,e=new Wb(kbn(r));e.a<e.c.c.length;)Nfn(t=BB(n0(e),213),s)||(t.f?u==t.d||o==t.e?n.b[s.c]-=n.b[t.c]-t.g:n.b[s.c]+=n.b[t.c]-t.g:r==u?t.d==r?n.b[s.c]+=t.g:n.b[s.c]-=t.g:t.d==r?n.b[s.c]-=t.g:n.b[s.c]+=t.g);y7(u.k,s),y7(o.k,s),r=u==r?s.e:s.d}}function pGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(null==t||0==t.length)return null;if(!(c=BB(SJ(n.f,t),23))){for(r=new Kb(new Ob(n.d).a.vc().Kc());r.a.Ob();)if(a=BB(r.a.Pb(),42),u=(e=BB(a.dd(),23)).f,l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}if(!c)for(i=new Kb(new Ob(n.d).a.vc().Kc());i.a.Ob();)if(a=BB(i.a.Pb(),42),null!=(f=(e=BB(a.dd(),23)).g))for(s=0,h=(o=f).length;s<h;++s)if(u=o[s],l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}c&&mZ(n.f,t,c)}return c}function vGn(n,t){var e,i,r,c,a;for(e=new Ik,a=!1,c=0;c<t.length;c++)if(b1(c,t.length),32!=(i=t.charCodeAt(c)))a?39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+=String.fromCharCode(i),++c):a=!1:e.a+=String.fromCharCode(i):GO("GyMLdkHmsSEcDahKzZv",YTn(i))>0?(Ppn(n,e,0),e.a+=String.fromCharCode(i),Ppn(n,e,r=cgn(t,c)),c+=r-1):39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+="'",++c):a=!0:e.a+=String.fromCharCode(i);else for(Ppn(n,e,0),e.a+=" ",Ppn(n,e,0);c+1<t.length&&(b1(c+1,t.length),32==t.charCodeAt(c+1));)++c;Ppn(n,e,0),pTn(n)}function mGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(OTn(i,"Network simplex layering",1),n.b=t,p=4*BB(mMn(t,(HXn(),xpt)),19).a,(g=n.b.a).c.length<1)HSn(i);else{for(d=null,c=spn(a=IKn(n,g),0);c.b!=c.d.c;){for(r=BB(b3(c),15),o=p*CJ(e.Math.sqrt(r.gc())),WKn(Qk(Jk(Yk(B_(u=o_n(r)),o),d),!0),mcn(i,1)),l=n.b.b,w=new Wb(u.a);w.a<w.c.c.length;){for(b=BB(n0(w),121);l.c.length<=b.e;)kG(l,l.c.length,new HX(n.b));PZ(BB(b.f,10),BB(xq(l,b.e),29))}if(a.b>1)for(d=x8(ANt,hQn,25,n.b.b.c.length,15,1),f=0,h=new Wb(n.b.b);h.a<h.c.c.length;)s=BB(n0(h),29),d[f++]=s.a.c.length}g.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,n.c=null,HSn(i)}}function yGn(n){var t,i,r,c,a,u,o;for(t=0,a=new Wb(n.b.a);a.a<a.c.c.length;)(r=BB(n0(a),189)).b=0,r.c=0;for(ESn(n,0),ewn(n,n.g),kNn(n.c),Zy(n.c),Ffn(),i=_Pt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Mzn(n.c,i)),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.g),kMn(n,0),pHn(n,0),M$n(n,1),ESn(n,1),ewn(n,n.d),kNn(n.c),u=new Wb(n.b.a);u.a<u.c.c.length;)r=BB(n0(u),189),t+=e.Math.abs(r.c);for(o=new Wb(n.b.a);o.a<o.c.c.length;)(r=BB(n0(o),189)).b=0,r.c=0;for(i=HPt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Zy(Mzn(n.c,i))),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.d),kMn(n,1),pHn(n,1),M$n(n,0),Zy(n.c),c=new Wb(n.b.a);c.a<c.c.c.length;)r=BB(n0(c),189),t+=e.Math.abs(r.c);return t}function kGn(n,t){var e,i,r,c,a,u,o,s,h;if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)i+=2;else if(c>=u&&r<=o)u<=r&&c<=o?(e[h++]=r,e[h++]=c,i+=2):u<=r?(e[h++]=r,e[h++]=o,n.b[i]=o+1,a+=2):c<=o?(e[h++]=u,e[h++]=c,i+=2):(e[h++]=u,e[h++]=o,n.b[i]=o+1);else{if(!(o<r))throw Hp(new dy("Token#intersectRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] & ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}function jGn(n){var t,i,r,c,a,u,o;for(t=new Np,n.g=new Np,n.d=new Np,u=new usn(new Pb(n.f.b).a);u.b;)WB(t,BB(BB((a=ten(u)).dd(),46).b,81)),dA(BB(a.cd(),594).gf())?WB(n.d,BB(a.dd(),46)):WB(n.g,BB(a.dd(),46));for(ewn(n,n.d),ewn(n,n.g),n.c=new sOn(n.b),ej(n.c,(vM(),Gat)),Bln(n,n.d),Bln(n,n.g),gun(t,n.c.a.b),n.e=new xC(RQn,RQn),n.a=new xC(KQn,KQn),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),81),n.e.a=e.Math.min(n.e.a,i.g.c),n.e.b=e.Math.min(n.e.b,i.g.d),n.a.a=e.Math.max(n.a.a,i.g.c+i.g.b),n.a.b=e.Math.max(n.a.b,i.g.d+i.g.a);tj(n.c,new jt),o=0;do{c=yGn(n),++o}while((o<2||c>KVn)&&o<10);tj(n.c,new Et),yGn(n),IU(n.c),fGn(n.f)}function EGn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(qy(TD(mMn(e,(HXn(),wgt)))))for(r=new Wb(e.j);r.a<r.c.c.length;)for(u=0,o=(a=Z0(BB(n0(r),11).g)).length;u<o;++u)(c=a[u]).d.i==e&&qy(TD(mMn(c,dgt)))&&(h=c.c,(s=BB(RX(n.b,h),10))||(hon(s=bXn(h,(QEn(),QCt),h.j,-1,null,null,h.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),h),VW(n.b,h,s),WB(t.a,s)),l=c.d,(f=BB(RX(n.b,l),10))||(hon(f=bXn(l,(QEn(),QCt),l.j,1,null,null,l.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),l),VW(n.b,l,f),WB(t.a,f)),SZ(i=W5(c),BB(xq(s.j,0),11)),MZ(i,BB(xq(f.j,0),11)),JIn(n.a,c,new L_(i,t,(ain(),qvt))),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)))}function TGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Label dummy switching",1),i=BB(mMn(t,(HXn(),Vdt)),227),pcn(t),r=j$n(t,i),n.a=x8(xNt,qQn,25,t.b.c.length,15,1),$Pn(),h=0,b=(u=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;h<b;++h)if(((c=u[h])==eht||c==Yst||c==nht)&&!BB(SN(r.a,c)?r.b[c.g]:null,15).dc()){Zcn(n,t);break}for(f=0,w=(o=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;f<w;++f)(c=o[f])==eht||c==Yst||c==nht||GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));for(s=0,l=(a=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;s<l;++s)((c=a[s])==eht||c==Yst||c==nht)&&GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));n.a=null,HSn(e)}function MGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;switch(n.k.g){case 1:if(i=BB(mMn(n,(hWn(),dlt)),17),(e=BB(mMn(i,glt),74))?qy(TD(mMn(i,Clt)))&&(e=Jon(e)):e=new km,s=BB(mMn(n,hlt),11)){if(t<=(h=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a]))).a)return h.b;r5(e,h,e.a,e.a.a)}if(f=BB(mMn(n,flt),11)){if((l=Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))).a<=t)return l.b;r5(e,l,e.c.b,e.c)}if(e.b>=2){for(a=BB(b3(o=spn(e,0)),8),u=BB(b3(o),8);u.a<t&&o.b!=o.d.c;)a=u,u=BB(b3(o),8);return a.b+(t-a.a)/(u.a-a.a)*(u.b-a.b)}break;case 3:switch(r=(c=BB(mMn(BB(xq(n.j,0),11),(hWn(),dlt)),11)).i,c.j.g){case 1:return r.n.b;case 3:return r.n.b+r.o.b}}return Fjn(n).b}function SGn(n){var t,e,i,r,c,a,u,o,s,f;for(c=new Wb(n.d.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;)!qy(TD(mMn(a=BB(n0(u),10),(HXn(),Tdt))))||h3(hbn(a))?(r=new UV(a.n.a-a.d.b,a.n.b-a.d.d,a.o.a+a.d.b+a.d.c,a.o.b+a.d.d+a.d.a),t=ON(iM(tM(eM(new Wv,a),r),dst),n.a),IN(nM(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),t),n.a),o=new Dp,VW(n.e,t,o),(e=F3(new oz(ZL(fbn(a).a.Kc(),new h)))-F3(new oz(ZL(lbn(a).a.Kc(),new h))))<0?Uun(o,!0,(Ffn(),_Pt)):e>0&&Uun(o,!0,(Ffn(),FPt)),a.k==(uSn(),Mut)&&wV(o),VW(n.f,a,t)):((s=(i=BB(iY(hbn(a)),17)).c.i)==a&&(s=i.d.i),f=new rI(s,XR(B$(a.n),s.n)),VW(n.b,a,f))}function PGn(n,t,i){var r,c,a,u,o,s,h,f;switch(OTn(i,"Node promotion heuristic",1),n.g=t,yUn(n),n.q=BB(mMn(t,(HXn(),Sgt)),260),f=BB(mMn(n.g,Mgt),19).a,a=new hi,n.q.g){case 2:case 1:default:_Hn(n,a);break;case 3:for(n.q=(sNn(),Ovt),_Hn(n,a),s=0,o=new Wb(n.a);o.a<o.c.c.length;)u=BB(n0(o),19),s=e.Math.max(s,u.a);s>n.j&&(n.q=Tvt,_Hn(n,a));break;case 4:for(n.q=(sNn(),Ovt),_Hn(n,a),h=0,c=new Wb(n.b);c.a<c.c.c.length;)r=MD(n0(c)),h=e.Math.max(h,(kW(r),r));h>n.k&&(n.q=Pvt,_Hn(n,a));break;case 6:_Hn(n,new od(CJ(e.Math.ceil(n.f.length*f/100))));break;case 5:_Hn(n,new sd(CJ(e.Math.ceil(n.d*f/100))))}oDn(n,t),HSn(i)}function CGn(n,t,e){var i,r,c,a;this.j=n,this.e=qEn(n),this.o=this.j.e,this.i=!!this.o,this.p=this.i?BB(xq(e,vW(this.o).p),214):null,r=BB(mMn(n,(hWn(),Zft)),21),this.g=r.Hc((bDn(),lft)),this.b=new Np,this.d=new wdn(this.e),a=BB(mMn(this.j,Slt),230),this.q=Han(t,a,this.e),this.k=new aZ(this),c=u6(Pun(Gk(jst,1),HWn,225,0,[this,this.d,this.k,this.q])),t!=(oin(),Omt)||qy(TD(mMn(n,(HXn(),xdt))))?t==Omt&&qy(TD(mMn(n,(HXn(),xdt))))?(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new prn(i,a,BB(this.q,402))):this.c=new vP(t,this):(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new G2(i,a,BB(this.q,402))),WB(c,this.c),CHn(c,this.e),this.s=wXn(this.k)}function IGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=(s=BB(iL(new wg(spn(new bg(t).a.d,0))),86))?BB(mMn(s,(qqn(),ckt)),86):null,r=1;s&&l;){for(a=0,v=0,e=s,i=l,c=0;c<r;c++)e=G8(e),i=G8(i),v+=Gy(MD(mMn(e,(qqn(),okt)))),a+=Gy(MD(mMn(i,okt)));if(p=Gy(MD(mMn(l,(qqn(),fkt)))),g=Gy(MD(mMn(s,fkt))),h=E5(s,l),0<(f=p+a+n.a+h-g-v)){for(u=t,o=0;u&&u!=i;)++o,u=BB(mMn(u,akt),86);if(!u)return;for(d=f/o,u=t;u!=i;)w=Gy(MD(mMn(u,fkt)))+f,hon(u,fkt,w),b=Gy(MD(mMn(u,okt)))+f,hon(u,okt,b),f-=d,u=BB(mMn(u,akt),86)}++r,l=(s=0==s.d.b?ZKn(new bg(t),r):BB(iL(new wg(spn(new bg(s).a.d,0))),86))?BB(mMn(s,ckt),86):null}}function OGn(n,t){var e,i,r,c,a,u,o,s,f;for(u=!0,r=0,o=n.f[t.p],s=t.o.b+n.n,e=n.c[t.p][2],c5(n.a,o,iln(BB(xq(n.a,o),19).a-1+e)),c5(n.b,o,Gy(MD(xq(n.b,o)))-s+e*n.e),++o>=n.i?(++n.i,WB(n.a,iln(1)),WB(n.b,s)):(i=n.c[t.p][1],c5(n.a,o,iln(BB(xq(n.a,o),19).a+1-i)),c5(n.b,o,Gy(MD(xq(n.b,o)))+s-i*n.e)),(n.q==(sNn(),Tvt)&&(BB(xq(n.a,o),19).a>n.j||BB(xq(n.a,o-1),19).a>n.j)||n.q==Pvt&&(Gy(MD(xq(n.b,o)))>n.k||Gy(MD(xq(n.b,o-1)))>n.k))&&(u=!1),c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)a=BB(U5(c),17).c.i,n.f[a.p]==o&&(r+=BB((f=OGn(n,a)).a,19).a,u=u&&qy(TD(f.b)));return n.f[t.p]=o,new rI(iln(r+=n.c[t.p][0]),(hN(),!!u))}function AGn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=new xp,u=new Np,rIn(n,i,n.d.fg(),u,l),rIn(n,r,n.d.gg(),u,l),n.b=.2*(g=BAn(wnn(new Rq(null,new w1(u,16)),new Sa)),p=BAn(wnn(new Rq(null,new w1(u,16)),new Pa)),e.Math.min(g,p)),a=0,o=0;o<u.c.length-1;o++)for(l1(o,u.c.length),s=BB(u.c[o],112),d=o+1;d<u.c.length;d++)a+=gHn(n,s,(l1(d,u.c.length),BB(u.c[d],112)));for(b=BB(mMn(t,(hWn(),Slt)),230),a>=2&&(v=QLn(u,!0,b),!n.e&&(n.e=new lg(n)),sgn(n.e,v,u,n.b)),iTn(u,b),czn(u),w=-1,f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),112),e.Math.abs(h.s-h.c)<lZn||(w=e.Math.max(w,h.o),n.d.dg(h,c,n.c));return n.d.a.a.$b(),w+1}function $Gn(n,t){var e,i;Gy(MD(mMn(t,(HXn(),ypt))))<2&&hon(t,ypt,2),BB(mMn(t,Udt),103)==(Ffn(),BPt)&&hon(t,Udt,Wln(t)),0==(e=BB(mMn(t,wpt),19)).a?hon(t,(hWn(),Slt),new sbn):hon(t,(hWn(),Slt),new C4(e.a)),null==TD(mMn(t,xgt))&&hon(t,xgt,(hN(),GI(mMn(t,Zdt))===GI((Mbn(),QPt)))),JT(new Rq(null,new w1(t.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(t.b,16)),new mt),new Kw(n)),i=new sGn(t),hon(t,(hWn(),Alt),i),h2(n.a),CU(n.a,(yMn(),Rat),BB(mMn(t,Gdt),246)),CU(n.a,Kat,BB(mMn(t,Pgt),246)),CU(n.a,_at,BB(mMn(t,qdt),246)),CU(n.a,Fat,BB(mMn(t,_gt),246)),CU(n.a,Bat,San(BB(mMn(t,Zdt),218))),aA(n.a,LXn(t)),hon(t,Mlt,$qn(n.a,t))}function LGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;return l=n.c[t],b=n.c[e],!((w=BB(mMn(l,(hWn(),clt)),15))&&0!=w.gc()&&w.Hc(b)||(d=l.k!=(uSn(),Put)&&b.k!=Put,v=(g=BB(mMn(l,rlt),10))!=(p=BB(mMn(b,rlt),10)),m=!!g&&g!=l||!!p&&p!=b,y=omn(l,(kUn(),sIt)),k=omn(b,SIt),m|=omn(l,SIt)||omn(b,sIt),d&&(m&&v||y||k))||l.k==(uSn(),Iut)&&b.k==Cut||b.k==(uSn(),Iut)&&l.k==Cut)&&(h=n.c[t],c=n.c[e],r=fjn(n.e,h,c,(kUn(),CIt)),o=fjn(n.i,h,c,oIt),TNn(n.f,h,c),s=Nsn(n.b,h,c)+BB(r.a,19).a+BB(o.a,19).a+n.f.d,u=Nsn(n.b,c,h)+BB(r.b,19).a+BB(o.b,19).a+n.f.b,n.a&&(f=BB(mMn(h,dlt),11),a=BB(mMn(c,dlt),11),s+=BB((i=qyn(n.g,f,a)).a,19).a,u+=BB(i.b,19).a),s>u)}function NGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(i=BB(mMn(n,(HXn(),ept)),98),u=n.f,a=n.d,o=u.a+a.b+a.c,s=0-a.d-n.c.b,f=u.b+a.d+a.a-n.c.b,h=new Np,l=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),10),i.g){case 1:case 2:case 3:_Nn(r);break;case 4:w=(b=BB(mMn(r,npt),8))?b.a:0,r.n.a=o*Gy(MD(mMn(r,(hWn(),Tlt))))-w,Jan(r,!0,!1);break;case 5:g=(d=BB(mMn(r,npt),8))?d.a:0,r.n.a=Gy(MD(mMn(r,(hWn(),Tlt))))-g,Jan(r,!0,!1),u.a=e.Math.max(u.a,r.n.a+r.o.a/2)}switch(BB(mMn(r,(hWn(),Qft)),61).g){case 1:r.n.b=s,h.c[h.c.length]=r;break;case 3:r.n.b=f,l.c[l.c.length]=r}}switch(i.g){case 1:case 2:Rfn(h,n),Rfn(l,n);break;case 3:Kfn(h,n),Kfn(l,n)}}function xGn(n,t){var e,i,r,c,a,u,o,s,h,f;for(h=new Np,f=new Lp,c=null,r=0,i=0;i<t.length;++i)switch(Rsn(c,e=t[i])&&(r=Cdn(n,f,h,Kmt,r)),Lx(e,(hWn(),rlt))&&(c=BB(mMn(e,rlt),10)),e.k.g){case 0:for(o=qA(KB(abn(e,(kUn(),sIt)),new xc));Zin(o);)a=BB(P7(o),11),n.d[a.p]=r++,h.c[h.c.length]=a;for(r=Cdn(n,f,h,Kmt,r),s=qA(KB(abn(e,SIt),new xc));Zin(s);)a=BB(P7(s),11),n.d[a.p]=r++,h.c[h.c.length]=a;break;case 3:abn(e,Rmt).dc()||(a=BB(abn(e,Rmt).Xb(0),11),n.d[a.p]=r++,h.c[h.c.length]=a),abn(e,Kmt).dc()||d3(f,e);break;case 1:for(u=abn(e,(kUn(),CIt)).Kc();u.Ob();)a=BB(u.Pb(),11),n.d[a.p]=r++,h.c[h.c.length]=a;abn(e,oIt).Jc(new ZP(f,e))}return Cdn(n,f,h,Kmt,r),h}function DGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=RQn,f=RQn,o=KQn,s=KQn,b=new Wb(t.i);b.a<b.c.c.length;)l=BB(n0(b),65),SA(c=BB(BB(RX(n.g,l.a),46).b,33),l.b.c,l.b.d),h=e.Math.min(h,c.i),f=e.Math.min(f,c.j),o=e.Math.max(o,c.i+c.g),s=e.Math.max(s,c.j+c.f);for(w=BB(ZAn(n.c,(MMn(),bTt)),116),KUn(n.c,o-h+(w.b+w.c),s-f+(w.d+w.a),!0,!0),lMn(n.c,-h+w.b,-f+w.d),r=new AL(iQ(n.c));r.e!=r.i.gc();)u=cDn(i=BB(kpn(r),79),!0,!0),d=PMn(i),p=OMn(i),g=new xC(d.i+d.g/2,d.j+d.f/2),a=new xC(p.i+p.g/2,p.j+p.f/2),Ukn(v=XR(new xC(a.a,a.b),g),d.g,d.f),UR(g,v),Ukn(m=XR(new xC(g.a,g.b),a),p.g,p.f),UR(a,m),CA(u,g.a,g.b),PA(u,a.a,a.b)}function RGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;if(n.c=n.d,l=null==(b=TD(mMn(t,(HXn(),dpt))))||(kW(b),b),c=BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft)),e=!((r=BB(mMn(t,ept),98))==(QEn(),UCt)||r==WCt||r==XCt),!l||!e&&c)f=new Jy(Pun(Gk(jut,1),JZn,37,0,[t]));else{for(h=new Wb(t.a);h.a<h.c.c.length;)BB(n0(h),10).p=0;for(f=new Np,s=new Wb(t.a);s.a<s.c.c.length;)if(i=L_n(n,BB(n0(s),10),null)){for(qan(o=new min,t),hon(o,Xft,BB(i.b,21)),kQ(o.d,t.d),hon(o,Hgt,null),u=BB(i.a,15).Kc();u.Ob();)a=BB(u.Pb(),10),WB(o.a,a),a.a=o;f.Fc(o)}c&&(GI(mMn(t,Cdt))===GI((Bfn(),lut))?n.c=n.b:n.c=n.a)}return GI(mMn(t,Cdt))!==GI((Bfn(),wut))&&(SQ(),f.ad(new xt)),f}function KGn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,Q3n),"ELK Mr. Tree"),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new Na),Y3n),nbn((hAn(),JOt))))),u2(n,Q3n,QJn,Okt),u2(n,Q3n,vZn,20),u2(n,Q3n,VJn,dZn),u2(n,Q3n,pZn,iln(1)),u2(n,Q3n,kZn,(hN(),!0)),u2(n,Q3n,X2n,mpn(Ekt)),u2(n,Q3n,PZn,mpn(Mkt)),u2(n,Q3n,BZn,mpn(Skt)),u2(n,Q3n,SZn,mpn(Pkt)),u2(n,Q3n,CZn,mpn(Tkt)),u2(n,Q3n,MZn,mpn(Ckt)),u2(n,Q3n,IZn,mpn(Akt)),u2(n,Q3n,X3n,mpn(Dkt)),u2(n,Q3n,W3n,mpn(Lkt))}function _Gn(n){n.q||(n.q=!0,n.p=kan(n,0),n.a=kan(n,1),Krn(n.a,0),n.f=kan(n,2),Krn(n.f,1),Rrn(n.f,2),n.n=kan(n,3),Rrn(n.n,3),Rrn(n.n,4),Rrn(n.n,5),Rrn(n.n,6),n.g=kan(n,4),Krn(n.g,7),Rrn(n.g,8),n.c=kan(n,5),Krn(n.c,7),Krn(n.c,8),n.i=kan(n,6),Krn(n.i,9),Krn(n.i,10),Krn(n.i,11),Krn(n.i,12),Rrn(n.i,13),n.j=kan(n,7),Krn(n.j,9),n.d=kan(n,8),Krn(n.d,3),Krn(n.d,4),Krn(n.d,5),Krn(n.d,6),Rrn(n.d,7),Rrn(n.d,8),Rrn(n.d,9),Rrn(n.d,10),n.b=kan(n,9),Rrn(n.b,0),Rrn(n.b,1),n.e=kan(n,10),Rrn(n.e,1),Rrn(n.e,2),Rrn(n.e,3),Rrn(n.e,4),Krn(n.e,5),Krn(n.e,6),Krn(n.e,7),Krn(n.e,8),Krn(n.e,9),Krn(n.e,10),Rrn(n.e,11),n.k=kan(n,11),Rrn(n.k,0),Rrn(n.k,1),n.o=jan(n,12),n.s=jan(n,13))}function FGn(n,t){t.dc()&&eH(n.j,!0,!0,!0,!0),Nfn(t,(kUn(),dIt))&&eH(n.j,!0,!0,!0,!1),Nfn(t,hIt)&&eH(n.j,!1,!0,!0,!0),Nfn(t,EIt)&&eH(n.j,!0,!0,!1,!0),Nfn(t,MIt)&&eH(n.j,!0,!1,!0,!0),Nfn(t,gIt)&&eH(n.j,!1,!0,!0,!1),Nfn(t,fIt)&&eH(n.j,!1,!0,!1,!0),Nfn(t,TIt)&&eH(n.j,!0,!1,!1,!0),Nfn(t,jIt)&&eH(n.j,!0,!1,!0,!1),Nfn(t,yIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,bIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,yIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,lIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,kIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,mIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,vIt)&&eH(n.j,!0,!0,!0,!0)}function BGn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(c=new Np,s=new Wb(i);s.a<s.c.c.length;)if(a=null,(u=BB(n0(s),441)).f==(ain(),qvt))for(w=new Wb(u.e);w.a<w.c.c.length;)vW(g=(b=BB(n0(w),17)).d.i)==t?Stn(n,t,u,b,u.b,b.d):!e||wan(g,e)?GMn(n,t,u,i,b):((l=LHn(n,t,e,b,u.b,qvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l));else for(f=new Wb(u.e);f.a<f.c.c.length;)if(vW(d=(h=BB(n0(f),17)).c.i)==t)Stn(n,t,u,h,h.c,u.b);else{if(!e||wan(d,e))continue;(l=LHn(n,t,e,h,u.b,Hvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l)}for(o=new Wb(c);o.a<o.c.c.length;)u=BB(n0(o),441),-1!=E7(t.a,u.a,0)||WB(t.a,u.a),u.c&&(r.c[r.c.length]=u)}function HGn(n,t,e){var i,r,c,a,u,o,s,h;for(o=new Np,u=new Wb(t.a);u.a<u.c.c.length;)for(h=abn(BB(n0(u),10),(kUn(),oIt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).g);r.a<r.c.c.length;)!b5(i=BB(n0(r),17))&&i.c.i.c==i.d.i.c||b5(i)||i.d.i.c!=e||(o.c[o.c.length]=i);for(a=ean(e.a).Kc();a.Ob();)for(h=abn(BB(a.Pb(),10),(kUn(),CIt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).e);r.a<r.c.c.length;)if((b5(i=BB(n0(r),17))||i.c.i.c!=i.d.i.c)&&!b5(i)&&i.c.i.c==t){for(Px((s=new M2(o,o.c.length)).b>0),c=BB(s.a.Xb(s.c=--s.b),17);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,Px(s.b>0),c=BB(s.a.Xb(s.c=--s.b),17);s.b>0&&fW(s)}}function qGn(n,t,e){var i,r,c,a,u,o,s,h,f;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(i=Cfn((IPn(),Z$t),t).$k())return i.Aj().Nh().Ih(i,e);if(a=Cfn(Z$t,t).al()){if(null==e)return null;if((u=BB(e,15)).dc())return"";for(f=new Sk,c=u.Kc();c.Ob();)r=c.Pb(),cO(f,a.Aj().Nh().Ih(a,r)),f.a+=" ";return KO(f,f.a.length-1)}if(!(h=Cfn(Z$t,t).bl()).dc()){for(s=h.Kc();s.Ob();)if((o=BB(s.Pb(),148)).wj(e))try{if(null!=(f=o.Aj().Nh().Ih(o,e)))return f}catch(l){if(!cL(l=lun(l),102))throw Hp(l)}throw Hp(new _y("Invalid value: '"+e+"' for datatype :"+t.ne()))}return BB(t,834).Fj(),null==e?null:cL(e,172)?""+BB(e,172).a:tsn(e)==mtt?H$(IOt[0],BB(e,199)):Bbn(e)}function GGn(n){var t,i,r,c,a,u,o,s,h;for(s=new YT,u=new YT,c=new Wb(n);c.a<c.c.c.length;)(i=BB(n0(c),128)).v=0,i.n=i.i.c.length,i.u=i.t.c.length,0==i.n&&r5(s,i,s.c.b,s.c),0==i.u&&0==i.r.a.gc()&&r5(u,i,u.c.b,u.c);for(a=-1;0!=s.b;)for(t=new Wb((i=BB(tkn(s,0),128)).t);t.a<t.c.c.length;)(h=BB(n0(t),268).b).v=e.Math.max(h.v,i.v+1),a=e.Math.max(a,h.v),--h.n,0==h.n&&r5(s,h,s.c.b,s.c);if(a>-1){for(r=spn(u,0);r.b!=r.d.c;)(i=BB(b3(r),128)).v=a;for(;0!=u.b;)for(t=new Wb((i=BB(tkn(u,0),128)).i);t.a<t.c.c.length;)0==(o=BB(n0(t),268).a).r.a.gc()&&(o.v=e.Math.min(o.v,i.v-1),--o.u,0==o.u&&r5(u,o,u.c.b,u.c))}}function zGn(n,t,i,r,c){var a,u,o,s;return s=RQn,u=!1,a=!!(o=zBn(n,XR(new xC(t.a,t.b),n),UR(new xC(i.a,i.b),c),XR(new xC(r.a,r.b),i)))&&!(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n||e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n),(o=zBn(n,XR(new xC(t.a,t.b),n),i,c))&&((e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a?s=e.Math.min(s,lW(XR(o,i))):u=!0),(o=zBn(n,XR(new xC(t.a,t.b),n),r,c))&&(u||(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a)&&(s=e.Math.min(s,lW(XR(o,r)))),s}function UGn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,_Zn),FZn),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new gt),gZn))),u2(n,_Zn,jZn,mpn(kat)),u2(n,_Zn,TZn,(hN(),!0)),u2(n,_Zn,PZn,mpn(Tat)),u2(n,_Zn,BZn,mpn(Mat)),u2(n,_Zn,SZn,mpn(Sat)),u2(n,_Zn,CZn,mpn(Eat)),u2(n,_Zn,MZn,mpn(Pat)),u2(n,_Zn,IZn,mpn(Cat)),u2(n,_Zn,NZn,mpn(yat)),u2(n,_Zn,DZn,mpn(vat)),u2(n,_Zn,RZn,mpn(mat)),u2(n,_Zn,KZn,mpn(jat)),u2(n,_Zn,xZn,mpn(pat))}function XGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Interactive crossing minimization",1),a=0,c=new Wb(n.b);c.a<c.c.c.length;)(i=BB(n0(c),29)).p=a++;for(d=new Rj((l=qEn(n)).length),CHn(new Jy(Pun(Gk(jst,1),HWn,225,0,[d])),l),w=0,a=0,r=new Wb(n.b);r.a<r.c.c.length;){for(e=0,f=0,h=new Wb((i=BB(n0(r),29)).a);h.a<h.c.c.length;)for((o=BB(n0(h),10)).n.a>0&&(e+=o.n.a+o.o.a/2,++f),b=new Wb(o.j);b.a<b.c.c.length;)BB(n0(b),11).p=w++;for(f>0&&(e/=f),g=x8(xNt,qQn,25,i.a.c.length,15,1),u=0,s=new Wb(i.a);s.a<s.c.c.length;)(o=BB(n0(s),10)).p=u++,g[o.p]=MGn(o,e),o.k==(uSn(),Put)&&hon(o,(hWn(),plt),g[o.p]);SQ(),m$(i.a,new Gd(g)),r_n(d,l,a,!0),++a}HSn(t)}function WGn(n,t){var e,i,r,c,a,u,o,s,h;if(5!=t.e){if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)e[h++]=n.b[i++],e[h++]=n.b[i++];else if(c>=u&&r<=o)u<=r&&c<=o?i+=2:u<=r?(n.b[i]=o+1,a+=2):c<=o?(e[h++]=r,e[h++]=u-1,i+=2):(e[h++]=r,e[h++]=u-1,n.b[i]=o+1,a+=2);else{if(!(o<r))throw Hp(new dy("Token#subtractRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] - ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}else kGn(n,t)}function VGn(n){var t,e,i,r,c,a,u;if(!n.A.dc()){if(n.A.Hc((mdn(),KIt))&&(BB(oV(n.b,(kUn(),sIt)),124).k=!0,BB(oV(n.b,SIt),124).k=!0,t=n.q!=(QEn(),WCt)&&n.q!=XCt,Nl(BB(oV(n.b,oIt),124),t),Nl(BB(oV(n.b,CIt),124),t),Nl(n.g,t),n.A.Hc(_It)&&(BB(oV(n.b,sIt),124).j=!0,BB(oV(n.b,SIt),124).j=!0,BB(oV(n.b,oIt),124).k=!0,BB(oV(n.b,CIt),124).k=!0,n.g.k=!0)),n.A.Hc(RIt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,u=n.B.Hc((n_n(),XIt)),c=0,a=(r=tpn()).length;c<a;++c)i=r[c],(e=BB(oV(n.i,i),306))&&(agn(i)?(e.j=!0,e.k=!0):(e.j=!u,e.k=!u));n.A.Hc(DIt)&&n.B.Hc((n_n(),UIt))&&(n.g.j=!0,n.g.j=!0,n.a.j||(n.a.j=!0,n.a.k=!0,n.a.e=!0))}}function QGn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;for(e=new Wb(n.e.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),o=(f=n.i[i.p]).a.e,u=f.d.e,i.n.b=o,d=u-o-i.o.b,t=AHn(i),bvn(),h=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197),t&&(h==fvt||h==hvt)&&(i.o.b+=d),t&&(h==bvt||h==fvt||h==hvt)){for(b=new Wb(i.j);b.a<b.c.c.length;)l=BB(n0(b),11),(kUn(),bIt).Hc(l.j)&&(s=BB(RX(n.k,l),121),l.n.b=s.e-o);for(a=new Wb(i.b);a.a<a.c.c.length;)c=BB(n0(a),70),(w=BB(mMn(i,$gt),21)).Hc((n$n(),NCt))?c.n.b+=d:w.Hc(xCt)&&(c.n.b+=d/2);(h==fvt||h==hvt)&&abn(i,(kUn(),SIt)).Jc(new ag(d))}}function YGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(o=new H8(null,null)).a[1]=n.b,f=o;f.a[r];)s=r,u=l,l=f,f=f.a[r],r=(i=n.a.ue(t,f.d))<0?0:1,0==i&&(!e.c||cV(f.e,e.d))&&(a=f),f&&f.b||Vy(f.a[r])||(Vy(f.a[1-r])?l=l.a[s]=wrn(f,r):Vy(f.a[1-r])||(b=l.a[1-s])&&(Vy(b.a[1-s])||Vy(b.a[s])?(c=u.a[1]==l?1:0,Vy(b.a[s])?u.a[c]=r2(l,s):Vy(b.a[1-s])&&(u.a[c]=wrn(l,s)),f.b=u.a[c].b=!0,u.a[c].a[0].b=!1,u.a[c].a[1].b=!1):(l.b=!1,b.b=!0,f.b=!0)));return a&&(e.b=!0,e.d=a.e,f!=a&&(bMn(n,o,a,h=new H8(f.d,f.e)),l==a&&(l=h)),l.a[l.a[1]==f?1:0]=f.a[f.a[0]?0:1],--n.c),n.b=o.a[1],n.b&&(n.b.b=!1),e.b}function JGn(n){var t,i,r,c,a,u,o,s,h,f,l,b;for(c=new Wb(n.a.a.b);c.a<c.c.c.length;)for(s=(r=BB(n0(c),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),r.a!=o.a&&(l=dA(n.a.d)?n.a.g.Oe(r,o):n.a.g.Pe(r,o),a=r.b.a+r.d.b+l-o.b.a,a=e.Math.ceil(a),a=e.Math.max(0,a),Z7(r,o)?(u=AN(new qv,n.d),t=(h=CJ(e.Math.ceil(o.b.a-r.b.a)))-(o.b.a-r.b.a),i=r,(f=f3(r).a)||(f=f3(o).a,t=-t,i=o),f&&(i.b.a-=t,f.n.a-=t),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,h)),1),u),n.c[r.a.d])),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,-h)),1),u),n.c[o.a.d]))):(b=1,(cL(r.g,145)&&cL(o.g,10)||cL(o.g,145)&&cL(r.g,10))&&(b=2),UNn(aM(cM(uM(rM(new Hv,CJ(a)),b),n.c[r.a.d]),n.c[o.a.d]))))}function ZGn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(i)for(r=-1,f=new M2(t,0);f.b<f.d.gc();){if(Px(f.b<f.d.gc()),o=BB(f.d.Xb(f.c=f.b++),10),null==(l=n.c[o.c.p][o.p].a)){for(u=r+1,a=new M2(t,f.b);a.b<a.d.gc();)if(null!=(b=wL(n,(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),10))).a)){kW(b),u=b;break}l=(r+u)/2,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=(kW(l),l),n.c[o.c.p][o.p].b=1}kW(l),r=l}else{for(c=0,h=new Wb(t);h.a<h.c.c.length;)o=BB(n0(h),10),null!=n.c[o.c.p][o.p].a&&(c=e.Math.max(c,Gy(n.c[o.c.p][o.p].a)));for(c+=2,s=new Wb(t);s.a<s.c.c.length;)o=BB(n0(s),10),null==n.c[o.c.p][o.p].a&&(l=H$n(n.i,24)*uYn*c-1,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=l,n.c[o.c.p][o.p].b=1)}}function nzn(){RO(BAt,new ts),RO(KAt,new ls),RO(qAt,new Es),RO(HAt,new Is),RO(GAt,new Os),RO(XAt,new As),RO(WAt,new $s),RO(HOt,new Ls),RO(BOt,new zo),RO(qOt,new Uo),RO(LOt,new Xo),RO(QAt,new Wo),RO(GOt,new Vo),RO(YAt,new Qo),RO(JAt,new Yo),RO(FAt,new Jo),RO(_At,new Zo),RO(X$t,new ns),RO(VAt,new es),RO(O$t,new is),RO(ktt,new rs),RO(Gk(NNt,1),new cs),RO(Ttt,new as),RO(Stt,new us),RO(mtt,new os),RO(_Nt,new ss),RO(Ptt,new hs),RO(uAt,new fs),RO(yAt,new bs),RO(oLt,new ws),RO($$t,new ds),RO(Ctt,new gs),RO(Att,new ps),RO($nt,new vs),RO(Rtt,new ms),RO(Nnt,new ys),RO(iLt,new ks),RO(FNt,new js),RO(_tt,new Ts),RO(Qtt,new Ms),RO(sAt,new Ss),RO(BNt,new Ps)}function tzn(n,t,e){var i,r,c,a,u,o,s,h,f;for(!e&&(e=Gun(t.q.getTimezoneOffset())),r=6e4*(t.q.getTimezoneOffset()-e.a),o=u=new PD(rbn(fan(t.q.getTime()),r)),u.q.getTimezoneOffset()!=t.q.getTimezoneOffset()&&(r>0?r-=864e5:r+=864e5,o=new PD(rbn(fan(t.q.getTime()),r))),h=new Ik,s=n.a.length,c=0;c<s;)if((i=fV(n.a,c))>=97&&i<=122||i>=65&&i<=90){for(a=c+1;a<s&&fV(n.a,a)==i;++a);aWn(h,i,a-c,u,o,e),c=a}else if(39==i){if(++c<s&&39==fV(n.a,c)){h.a+="'",++c;continue}for(f=!1;!f;){for(a=c;a<s&&39!=fV(n.a,a);)++a;if(a>=s)throw Hp(new _y("Missing trailing '"));a+1<s&&39==fV(n.a,a+1)?++a:f=!0,oO(h,fx(n.a,c,a)),c=a+1}}else h.a+=String.fromCharCode(i),++c;return h.a}function ezn(n){var t,e,i,r,c,a,u,o;for(t=null,i=new Wb(n);i.a<i.c.c.length;)Gy(lL((e=BB(n0(i),233)).g,e.d[0]).a),e.b=null,e.e&&e.e.gc()>0&&0==e.c&&(!t&&(t=new Np),t.c[t.c.length]=e);if(t)for(;0!=t.c.length;){if((e=BB(s6(t,0),233)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Np),c=new Wb(e.b);c.a<c.c.c.length;)if(zy(lL((r=BB(n0(c),233)).g,r.d[0]).a)==zy(lL(e.g,e.d[0]).a)){if(E7(n,r,0)>E7(n,e,0))return new rI(r,e)}else if(Gy(lL(r.g,r.d[0]).a)>Gy(lL(e.g,e.d[0]).a))return new rI(r,e);for(u=(!e.e&&(e.e=new Np),e.e).Kc();u.Ob();)!(a=BB(u.Pb(),233)).b&&(a.b=new Np),LZ(0,(o=a.b).c.length),MS(o.c,0,e),a.c==o.c.length&&(t.c[t.c.length]=a)}return null}function izn(n,t){var e,i,r,c,a,u;if(null==n)return zWn;if(null!=t.a.zc(n,t))return"[...]";for(e=new $an(FWn,"[","]"),c=0,a=(r=n).length;c<a;++c)null!=(i=r[c])&&0!=(4&tsn(i).i)?!Array.isArray(i)||(u=vnn(i))>=14&&u<=16?cL(i,177)?b6(e,RCn(BB(i,177))):cL(i,190)?b6(e,JEn(BB(i,190))):cL(i,195)?b6(e,kSn(BB(i,195))):cL(i,2012)?b6(e,ZEn(BB(i,2012))):cL(i,48)?b6(e,DCn(BB(i,48))):cL(i,364)?b6(e,gIn(BB(i,364))):cL(i,832)?b6(e,xCn(BB(i,832))):cL(i,104)&&b6(e,NCn(BB(i,104))):t.a._b(i)?(e.a?oO(e.a,e.b):e.a=new lN(e.d),aO(e.a,"[...]")):b6(e,izn(een(i),new $q(t))):b6(e,null==i?zWn:Bbn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function rzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(w=qSn(cDn(t,!1,!1)),r&&(w=Jon(w)),g=Gy(MD(ZAn(t,(Epn(),pct)))),Px(0!=w.b),b=BB(w.a.a.c,8),h=BB(Dpn(w,1),8),w.b>2?(gun(s=new Np,new s1(w,1,w.b)),qan(d=new EAn(XXn(s,g+n.a)),t),i.c[i.c.length]=d):d=BB(RX(n.b,r?PMn(t):OMn(t)),266),u=PMn(t),r&&(u=OMn(t)),a=iPn(b,u),o=g+n.a,a.a?(o+=e.Math.abs(b.b-h.b),l=new xC(h.a,(h.b+b.b)/2)):(o+=e.Math.abs(b.a-h.a),l=new xC((h.a+b.a)/2,h.b)),VW(r?n.d:n.c,t,new Imn(d,a,l,o)),VW(n.b,t,d),!t.n&&(t.n=new eU(zOt,t,1,7)),f=new AL(t.n);f.e!=f.i.gc();)c=JRn(n,BB(kpn(f),137),!0,0,0),i.c[i.c.length]=c}function czn(n){var t,i,r,c,a,u,o,s,h;for(s=new Np,u=new Np,a=new Wb(n);a.a<a.c.c.length;)Vl(r=BB(n0(a),112),r.f.c.length),Ql(r,r.k.c.length),0==r.d&&(s.c[s.c.length]=r),0==r.i&&0==r.e.b&&(u.c[u.c.length]=r);for(i=-1;0!=s.c.length;)for(t=new Wb((r=BB(s6(s,0),112)).k);t.a<t.c.c.length;)Yl(h=BB(n0(t),129).b,e.Math.max(h.o,r.o+1)),i=e.Math.max(i,h.o),Vl(h,h.d-1),0==h.d&&(s.c[s.c.length]=h);if(i>-1){for(c=new Wb(u);c.a<c.c.c.length;)(r=BB(n0(c),112)).o=i;for(;0!=u.c.length;)for(t=new Wb((r=BB(s6(u,0),112)).f);t.a<t.c.c.length;)(o=BB(n0(t),129).a).e.b>0||(Yl(o,e.Math.min(o.o,r.o-1)),Ql(o,o.i-1),0==o.i&&(u.c[u.c.length]=o))}}function azn(n,t,e){var i,r,c,a,u;if(u=n.c,!t&&(t=L$t),n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&(a=new nU(n,1,2,u,n.c),e?e.Ei(a):e=a),u!=t)if(cL(n.Cb,284))n.Db>>16==-10?e=BB(n.Cb,284).nk(t,e):n.Db>>16==-15&&(!t&&(gWn(),t=l$t),!u&&(gWn(),u=l$t),n.Cb.nh()&&(a=new N7(n.Cb,1,13,u,t,uvn(H7(BB(n.Cb,59)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,88))n.Db>>16==-23&&(cL(t,88)||(gWn(),t=d$t),cL(u,88)||(gWn(),u=d$t),n.Cb.nh()&&(a=new N7(n.Cb,1,10,u,t,uvn(a4(BB(n.Cb,26)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,444))for(!(c=BB(n.Cb,836)).b&&(c.b=new Tp(new xm)),r=new Mp(new usn(new Pb(c.b.a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,c),e);return e}function uzn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(a=qy(TD(ZAn(n,(HXn(),wgt)))),l=BB(ZAn(n,cpt),21),o=!1,s=!1,f=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));!(f.e==f.i.gc()||o&&s);){for(c=BB(kpn(f),118),u=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!c.d&&(c.d=new hK(_Ot,c,8,5)),c.d),(!c.e&&(c.e=new hK(_Ot,c,7,4)),c.e)])));dAn(r)&&(i=BB(U5(r),79),h=a&&QIn(i)&&qy(TD(ZAn(i,dgt))),e=bqn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),c)?n==JJ(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))):n==JJ(PTn(BB(Wtn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),0),82))),!((h||e)&&++u>1)););(u>0||l.Hc((lIn(),eIt))&&(!c.n&&(c.n=new eU(zOt,c,1,7)),c.n).i>0)&&(o=!0),u>1&&(s=!0)}o&&t.Fc((bDn(),lft)),s&&t.Fc((bDn(),bft))}function ozn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if((b=BB(ZAn(n,(sWn(),KSt)),21)).dc())return null;if(o=0,u=0,b.Hc((mdn(),KIt))){for(f=BB(ZAn(n,uPt),98),r=2,i=2,c=2,a=2,t=JJ(n)?BB(ZAn(JJ(n),bSt),103):BB(ZAn(n,bSt),103),h=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=BB(kpn(h),118),(l=BB(ZAn(s,wPt),61))==(kUn(),PIt)&&(l=OFn(s,t),Ypn(s,wPt,l)),f==(QEn(),XCt))switch(l.g){case 1:r=e.Math.max(r,s.i+s.g);break;case 2:i=e.Math.max(i,s.j+s.f);break;case 3:c=e.Math.max(c,s.i+s.g);break;case 4:a=e.Math.max(a,s.j+s.f)}else switch(l.g){case 1:r+=s.g+2;break;case 2:i+=s.f+2;break;case 3:c+=s.g+2;break;case 4:a+=s.f+2}o=e.Math.max(r,c),u=e.Math.max(i,a)}return KUn(n,o,u,!0,!0)}function szn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(m=BB(P4(ytn(AV(new Rq(null,new w1(t.d,16)),new $d(i)),new Ld(i)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),l=DWn,f=_Vn,s=new Wb(t.b.j);s.a<s.c.c.length;)(o=BB(n0(s),11)).j==i&&(l=e.Math.min(l,o.p),f=e.Math.max(f,o.p));if(l==DWn)for(u=0;u<m.gc();u++)g9(BB(m.Xb(u),101),i,u);else for(Zq(y=x8(ANt,hQn,25,c.length,15,1),y.length),v=m.Kc();v.Ob();){for(p=BB(v.Pb(),101),a=BB(RX(n.b,p),177),h=0,g=l;g<=f;g++)a[g]&&(h=e.Math.max(h,r[g]));if(p.i){for(w=p.i.c,k=new Rv,b=0;b<c.length;b++)c[w][b]&&TU(k,iln(y[b]));for(;FT(k,iln(h));)++h}for(g9(p,i,h),d=l;d<=f;d++)a[d]&&(r[d]=h+1);p.i&&(y[p.i.c]=h)}}function hzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(c=null,r=new Wb(t.a);r.a<r.c.c.length;)AHn(i=BB(n0(r),10))?(h=new GV(i,!0,o=AN(oM(new qv,i),n.f),s=AN(oM(new qv,i),n.f)),f=i.o.b,bvn(),b=1e4,(l=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197))==hvt&&(b=1),w=UNn(aM(cM(rM(uM(new Hv,b),CJ(e.Math.ceil(f))),o),s)),l==fvt&&TU(n.d,w),O_n(n,ean(abn(i,(kUn(),CIt))),h),O_n(n,abn(i,oIt),h),a=h):(d=AN(oM(new qv,i),n.f),JT(AV(new Rq(null,new w1(i.j,16)),new Bc),new tC(n,d)),a=new GV(i,!1,d,d)),n.i[i.p]=a,c&&(u=c.c.d.a+K$(n.n,c.c,i)+i.d.d,c.b||(u+=c.c.o.b),UNn(aM(cM(uM(rM(new Hv,CJ(e.Math.ceil(u))),0),c.d),a.a))),c=a}function fzn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g;for(OTn(t,"Label dummy insertions",1),b=new Np,u=Gy(MD(mMn(n,(HXn(),jpt)))),f=Gy(MD(mMn(n,Spt))),l=BB(mMn(n,Udt),103),w=new Wb(n.a);w.a<w.c.c.length;)for(a=new oz(ZL(lbn(BB(n0(w),10)).a.Kc(),new h));dAn(a);)if((c=BB(U5(a),17)).c.i!=c.d.i&&tL(c.b,nst)){for(i=oLn(n,c,g=Etn(c),d=sx(c.b.c.length)),b.c[b.c.length]=i,r=i.o,o=new M2(c.b,0);o.b<o.d.gc();)Px(o.b<o.d.gc()),GI(mMn(s=BB(o.d.Xb(o.c=o.b++),70),Ydt))===GI((Rtn(),zPt))&&(l==(Ffn(),HPt)||l==KPt?(r.a+=s.o.a+f,r.b=e.Math.max(r.b,s.o.b)):(r.a=e.Math.max(r.a,s.o.a),r.b+=s.o.b+f),d.c[d.c.length]=s,fW(o));l==(Ffn(),HPt)||l==KPt?(r.a-=f,r.b+=u+g):r.b+=u-f+g}gun(n.a,b),HSn(t)}function lzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(l=XDn(n,t,a=new dOn(t)),w=e.Math.max(Gy(MD(mMn(t,(HXn(),agt)))),1),f=new Wb(l.a);f.a<f.c.c.length;)h=BB(n0(f),46),s=Bgn(BB(h.a,8),BB(h.b,8),w),zH(i,new xC(s.c,s.d)),zH(i,_x(new xC(s.c,s.d),s.b,0)),zH(i,_x(new xC(s.c,s.d),0,s.a)),zH(i,_x(new xC(s.c,s.d),s.b,s.a));switch(b=a.d,o=Bgn(BB(l.b.a,8),BB(l.b.b,8),w),b==(kUn(),CIt)||b==oIt?(r.c[b.g]=e.Math.min(r.c[b.g],o.d),r.b[b.g]=e.Math.max(r.b[b.g],o.d+o.a)):(r.c[b.g]=e.Math.min(r.c[b.g],o.c),r.b[b.g]=e.Math.max(r.b[b.g],o.c+o.b)),c=KQn,u=a.c.i.d,b.g){case 4:c=u.c;break;case 2:c=u.b;break;case 1:c=u.a;break;case 3:c=u.d}return r.a[b.g]=e.Math.max(r.a[b.g],c),a}function bzn(n){var t,e,i,r;if(-1!=(t=GO(e=null!=n.D?n.D:n.B,YTn(91)))){i=e.substr(0,t),r=new Sk;do{r.a+="["}while(-1!=(t=lx(e,91,++t)));mK(i,$Wn)?r.a+="Z":mK(i,S9n)?r.a+="B":mK(i,P9n)?r.a+="C":mK(i,C9n)?r.a+="D":mK(i,I9n)?r.a+="F":mK(i,O9n)?r.a+="I":mK(i,A9n)?r.a+="J":mK(i,$9n)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}}else if(-1==GO(e,YTn(46))){if(mK(e,$Wn))return $Nt;if(mK(e,S9n))return NNt;if(mK(e,P9n))return ONt;if(mK(e,C9n))return xNt;if(mK(e,I9n))return DNt;if(mK(e,O9n))return ANt;if(mK(e,A9n))return LNt;if(mK(e,$9n))return RNt}return null}function wzn(n,t,e){var i,r,c,a,u,o,s,h;for(qan(s=new $vn(e),t),hon(s,(hWn(),dlt),t),s.o.a=t.g,s.o.b=t.f,s.n.a=t.i,s.n.b=t.j,WB(e.a,s),VW(n.a,t,s),(0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i||qy(TD(ZAn(t,(HXn(),wgt)))))&&hon(s,_ft,(hN(),!0)),o=BB(mMn(e,Zft),21),(h=BB(mMn(s,(HXn(),ept)),98))==(QEn(),YCt)?hon(s,ept,QCt):h!=QCt&&o.Fc((bDn(),dft)),i=BB(mMn(e,Udt),103),u=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));u.e!=u.i.gc();)qy(TD(ZAn(a=BB(kpn(u),118),Ggt)))||Zzn(n,a,s,o,i,h);for(c=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));c.e!=c.i.gc();)!qy(TD(ZAn(r=BB(kpn(c),137),Ggt)))&&r.a&&WB(s.b,Hhn(r));return qy(TD(mMn(s,Tdt)))&&o.Fc((bDn(),hft)),qy(TD(mMn(s,bgt)))&&(o.Fc((bDn(),wft)),o.Fc(bft),hon(s,ept,QCt)),s}function dzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;u=BB(RX(t.c,n),459),g=t.a.c,o=t.a.c+t.a.b,a=(E=u.f)<(T=u.a),b=new xC(g,E),p=new xC(o,T),w=new xC(r=(g+o)/2,E),v=new xC(r,T),c=eNn(n,E,T),y=g1(t.B),k=new xC(r,c),j=g1(t.D),e=lon(Pun(Gk(PMt,1),sVn,8,0,[y,k,j])),f=!1,(d=t.B.i)&&d.c&&u.d&&((s=a&&d.p<d.c.a.c.length-1||!a&&d.p>0)?s&&(h=d.p,a?++h:--h,f=!(cNn(i=ion(BB(xq(d.c.a,h),10)),y,e[0])||Bz(i,y,e[0]))):f=!0),l=!1,(m=t.D.i)&&m.c&&u.e&&(a&&m.p>0||!a&&m.p<m.c.a.c.length-1?(h=m.p,a?--h:++h,l=!(cNn(i=ion(BB(xq(m.c.a,h),10)),e[0],j)||Bz(i,e[0],j))):l=!0),f&&l&&DH(n.a,k),f||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[b,w])),l||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[v,p]))}function gzn(n,t){var e,i,r,c,a,u,o;if(cL(n.Ug(),160)?(gzn(BB(n.Ug(),160),t),t.a+=" > "):t.a+="Root ",mK((e=n.Tg().zb).substr(0,3),"Elk")?oO(t,e.substr(3)):t.a+=""+e,r=n.zg())oO((t.a+=" ",t),r);else if(cL(n,354)&&(o=BB(n,137).a))oO((t.a+=" ",t),o);else{for(c=new AL(n.Ag());c.e!=c.i.gc();)if(o=BB(kpn(c),137).a)return void oO((t.a+=" ",t),o);if(cL(n,352)&&(!(i=BB(n,79)).b&&(i.b=new hK(KOt,i,4,7)),0!=i.b.i&&(!i.c&&(i.c=new hK(KOt,i,5,8)),0!=i.c.i))){for(t.a+=" (",a=new cx((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b));a.e!=a.i.gc();)a.e>0&&(t.a+=FWn),gzn(BB(kpn(a),160),t);for(t.a+=e1n,u=new cx((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c));u.e!=u.i.gc();)u.e>0&&(t.a+=FWn),gzn(BB(kpn(u),160),t);t.a+=")"}}}function pzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(c=BB(mMn(n,(hWn(),dlt)),79)){for(i=n.a,UR(r=new wA(e),$jn(n)),wan(n.d.i,n.c.i)?(l=n.c,XR(f=Aon(Pun(Gk(PMt,1),sVn,8,0,[l.n,l.a])),e)):f=g1(n.c),r5(i,f,i.a,i.a.a),b=g1(n.d),null!=mMn(n,Rlt)&&UR(b,BB(mMn(n,Rlt),8)),r5(i,b,i.c.b,i.c),Ztn(i,r),Lin(a=cDn(c,!0,!0),BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82)),Nin(a,BB(Wtn((!c.c&&(c.c=new hK(KOt,c,5,8)),c.c),0),82)),VFn(i,a),h=new Wb(n.b);h.a<h.c.c.length;)s=BB(n0(h),70),Sen(u=BB(mMn(s,dlt),137),s.o.a),Men(u,s.o.b),SA(u,s.n.a+r.a,s.n.b+r.b),Ypn(u,(Irn(),tst),TD(mMn(s,tst)));(o=BB(mMn(n,(HXn(),vgt)),74))?(Ztn(o,r),Ypn(c,vgt,o)):Ypn(c,vgt,null),t==(Mbn(),JPt)?Ypn(c,Zdt,JPt):Ypn(c,Zdt,null)}}function vzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(b=t.c.length,l=0,f=new Wb(n.b);f.a<f.c.c.length;)if(0!=(p=(h=BB(n0(f),29)).a).c.length){for(s=0,v=null,r=BB(n0(g=new Wb(p)),10),c=null;r;){if((c=BB(xq(t,r.p),257)).c>=0){for(o=null,u=new M2(h.a,s+1);u.b<u.d.gc()&&(Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),10),!((o=BB(xq(t,a.p),257)).d==c.d&&o.c<c.c));)o=null;o&&(v&&(c5(i,r.p,iln(BB(xq(i,r.p),19).a-1)),BB(xq(e,v.p),15).Mc(c)),c=wTn(c,r,b++),t.c[t.c.length]=c,WB(e,new Np),v?(BB(xq(e,v.p),15).Fc(c),WB(i,iln(1))):WB(i,iln(0)))}w=null,g.a<g.c.c.length&&(w=BB(n0(g),10),d=BB(xq(t,w.p),257),BB(xq(e,r.p),15).Fc(d),c5(i,w.p,iln(BB(xq(i,w.p),19).a+1))),c.d=l,c.c=s++,v=r,r=w}++l}}function mzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return o=n,h=XR(new xC(t.a,t.b),n),s=i,f=XR(new xC(r.a,r.b),i),l=o.a,g=o.b,w=s.a,v=s.b,b=h.a,p=h.b,c=(d=f.a)*p-b*(m=f.b),h$(),rin(A3n),!(e.Math.abs(0-c)<=A3n||0==c||isNaN(0)&&isNaN(c))&&(a=1/c*((l-w)*p-(g-v)*b),u=1/c*-(-(l-w)*m+(g-v)*d),rin(A3n),(e.Math.abs(0-a)<=A3n||0==a||isNaN(0)&&isNaN(a)?0:0<a?-1:0>a?1:zO(isNaN(0),isNaN(a)))<0&&(rin(A3n),(e.Math.abs(a-1)<=A3n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:zO(isNaN(a),isNaN(1)))<0)&&(rin(A3n),(e.Math.abs(0-u)<=A3n||0==u||isNaN(0)&&isNaN(u)?0:0<u?-1:0>u?1:zO(isNaN(0),isNaN(u)))<0)&&(rin(A3n),(e.Math.abs(u-1)<=A3n||1==u||isNaN(u)&&isNaN(1)?0:u<1?-1:u>1?1:zO(isNaN(u),isNaN(1)))<0))}function yzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(f=new hW(new iw(n));f.b!=f.c.a.d;)for(u=BB((h=s9(f)).d,56),t=BB(h.e,56),d=0,y=(null==(a=u.Tg()).i&&qFn(a),a.i).length;d<y;++d)if(null==a.i&&qFn(a),c=a.i,(s=d>=0&&d<c.length?c[d]:null).Ij()&&!s.Jj())if(cL(s,99))0==((o=BB(s,18)).Bb&h6n)&&(!(j=Cvn(o))||0==(j.Bb&h6n))&&mBn(n,o,u,t);else if(ZM(),BB(s,66).Oj()&&(e=BB((k=s)?BB(t,49).xh(k):null,153)))for(b=BB(u.ah(s),153),i=e.gc(),g=0,w=b.gc();g<w;++g)if(cL(l=b.il(g),99)){if(null==(r=lnn(n,m=b.jl(g)))&&null!=m){if(v=BB(l,18),!n.b||0!=(v.Bb&h6n)||Cvn(v))continue;r=m}if(!e.dl(l,r))for(p=0;p<i;++p)if(e.il(p)==l&&GI(e.jl(p))===GI(r)){e.ii(e.gc()-1,p),--i;break}}else e.dl(b.il(g),b.jl(g))}function kzn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;if(p=QBn(t,i,n.g),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),n.b)for(g=0;g<p.c.length;g++)l1(g,p.c.length),f=BB(p.c[g],200),0!=g&&(l1(g-1,p.c.length),ghn(f,(b=BB(p.c[g-1],200)).f+b.b+n.g)),mXn(g,p,i,n.g),Hkn(n,f),c.n&&a&&y0(c,o2(a),(Bsn(),uOt));else for(d=new Wb(p);d.a<d.c.c.length;)for(h=new Wb((w=BB(n0(d),200)).a);h.a<h.c.c.length;)xcn(v=new KJ((s=BB(n0(h),187)).s,s.t,n.g),s),WB(w.d,v);return zmn(n,p),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),m=e.Math.max(n.d,r.a-(u.b+u.c)),o=(l=e.Math.max(n.c,r.b-(u.d+u.a)))-n.c,n.e&&n.f&&(m/l<n.a?m=l*n.a:o+=m/n.a-l),n.e&&Odn(p,m,o),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),new eq(n.a,m,n.c+o,(YLn(),_Et))}function jzn(n){var t,i,r,c,a,u,o,s,h,f;for(n.j=x8(ANt,hQn,25,n.g,15,1),n.o=new Np,JT(wnn(new Rq(null,new w1(n.e.b,16)),new Wc),new ug(n)),n.a=x8($Nt,ZYn,25,n.b,16,1),$fn(new Rq(null,new w1(n.e.b,16)),new sg(n)),f=new Np,JT(AV(wnn(new Rq(null,new w1(n.e.b,16)),new Qc),new og(n)),new eC(n,f)),o=new Wb(f);o.a<o.c.c.length;)if(!((u=BB(n0(o),508)).c.length<=1))if(2!=u.c.length){if(!XEn(u)&&!NPn(u,new Vc))for(s=new Wb(u),r=null;s.a<s.c.c.length;)t=BB(n0(s),17),i=n.c[t.p],h=!r||s.a>=s.c.c.length?X3((uSn(),Cut),Put):X3((uSn(),Put),Put),h*=2,c=i.a.g,i.a.g=e.Math.max(c,c+(h-c)),a=i.b.g,i.b.g=e.Math.max(a,a+(h-a)),r=t}else zAn(u),AHn((l1(0,u.c.length),BB(u.c[0],17)).d.i)||WB(n.o,u)}function Ezn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(m=GB(n),o=new Np,s=(c=n.c.length)-1,h=c+1;0!=m.a.c;){for(;0!=e.b;)Px(0!=e.b),p=BB(Atn(e,e.a.a),112),$J(m.a,p),p.g=s--,NFn(p,t,e,i);for(;0!=t.b;)Px(0!=t.b),v=BB(Atn(t,t.a.a),112),$J(m.a,v),v.g=h++,NFn(v,t,e,i);for(u=_Vn,d=new Fb(new BR(new xN(new _b(m.a).a).b));aS(d.a.a);){if(w=BB(mx(d.a).cd(),112),!i&&w.b>0&&w.a<=0){o.c=x8(Ant,HWn,1,0,5,1),o.c[o.c.length]=w;break}(b=w.i-w.d)>=u&&(b>u&&(o.c=x8(Ant,HWn,1,0,5,1),u=b),o.c[o.c.length]=w)}0!=o.c.length&&(a=BB(xq(o,pvn(r,o.c.length)),112),$J(m.a,a),a.g=h++,NFn(a,t,e,i),o.c=x8(Ant,HWn,1,0,5,1))}for(g=n.c.length+1,l=new Wb(n);l.a<l.c.c.length;)(f=BB(n0(l),112)).g<c&&(f.g=f.g+g)}function Tzn(n,t){var e;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));if(!SS(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.d)return n;switch(e=n.d,n.d=t,e.g){case 0:switch(t.g){case 2:Hmn(n);break;case 1:Con(n),Hmn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Con(n),Hmn(n)}break;case 2:switch(t.g){case 1:Con(n),RRn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Con(n),Hmn(n)}break;case 1:switch(t.g){case 2:Con(n),RRn(n);break;case 4:Con(n),nEn(n),Hmn(n);break;case 3:Con(n),nEn(n),Con(n),Hmn(n)}break;case 4:switch(t.g){case 2:nEn(n),Hmn(n);break;case 1:nEn(n),Con(n),Hmn(n);break;case 3:Con(n),RRn(n)}break;case 3:switch(t.g){case 2:Con(n),nEn(n),Hmn(n);break;case 1:Con(n),nEn(n),Con(n),Hmn(n);break;case 4:Con(n),RRn(n)}}return n}function Mzn(n,t){var e;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));if(!PC(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.c)return n;switch(e=n.c,n.c=t,e.g){case 0:switch(t.g){case 2:Zon(n);break;case 1:Pon(n),Zon(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 2:switch(t.g){case 1:Pon(n),KRn(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 1:switch(t.g){case 2:Pon(n),KRn(n);break;case 4:Pon(n),tEn(n),Zon(n);break;case 3:Pon(n),tEn(n),Pon(n),Zon(n)}break;case 4:switch(t.g){case 2:tEn(n),Zon(n);break;case 1:tEn(n),Pon(n),Zon(n);break;case 3:Pon(n),KRn(n)}break;case 3:switch(t.g){case 2:Pon(n),tEn(n),Zon(n);break;case 1:Pon(n),tEn(n),Pon(n),Zon(n);break;case 4:Pon(n),KRn(n)}}return n}function Szn(n,t,i){var r,c,a,u,o,s,f,l;for(s=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new oz(ZL(dLn(o=BB(kpn(s),33)).a.Kc(),new h));dAn(c);){if(!(r=BB(U5(c),79)).b&&(r.b=new hK(KOt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new hK(KOt,r,5,8)),r.c.i<=1)))throw Hp(new ck("Graph must not contain hyperedges."));if(!nAn(r)&&o!=PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82)))for(qan(f=new IR,r),hon(f,(Mrn(),sat),r),Rl(f,BB(qI(AY(i.f,o)),144)),Kl(f,BB(RX(i,PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82))),144)),WB(t.c,f),u=new AL((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n));u.e!=u.i.gc();)qan(l=new m4(f,(a=BB(kpn(u),137)).a),a),hon(l,sat,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),_Bn(l),WB(t.d,l)}}function Pzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(EJ(l=new eUn(n),!(t==(Ffn(),HPt)||t==KPt)),f=l.a,b=new bm,Dtn(),u=0,s=(c=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;u<s;++u)i=c[u],(h=fL(f,Git,i))&&(b.d=e.Math.max(b.d,h.Re()));for(a=0,o=(r=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;a<o;++a)i=r[a],(h=fL(f,Uit,i))&&(b.a=e.Math.max(b.a,h.Re()));for(p=0,m=(d=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;p<m;++p)(h=fL(f,d[p],Git))&&(b.b=e.Math.max(b.b,h.Se()));for(g=0,v=(w=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;g<v;++g)(h=fL(f,w[g],Uit))&&(b.c=e.Math.max(b.c,h.Se()));return b.d>0&&(b.d+=f.n.d,b.d+=f.d),b.a>0&&(b.a+=f.n.a,b.a+=f.d),b.b>0&&(b.b+=f.n.b,b.b+=f.d),b.c>0&&(b.c+=f.n.c,b.c+=f.d),b}function Czn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(b=i.d,l=i.c,u=(a=new xC(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Wb(n.a);h.a<h.c.c.length;)if((o=BB(n0(h),10)).k==(uSn(),Mut)){switch(r=BB(mMn(o,(hWn(),Qft)),61),c=BB(mMn(o,Yft),8),f=o.n,r.g){case 2:f.a=i.f.a+b.c-l.a;break;case 4:f.a=-l.a-b.b}switch(d=0,r.g){case 2:case 4:t==(QEn(),WCt)?(w=Gy(MD(mMn(o,Tlt))),f.b=a.b*w-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0)):t==XCt&&(f.b=Gy(MD(mMn(o,Tlt)))-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0))}u=e.Math.max(u,d)}for(i.f.b+=u-a.b,s=new Wb(n.a);s.a<s.c.c.length;)if((o=BB(n0(s),10)).k==(uSn(),Mut))switch(r=BB(mMn(o,(hWn(),Qft)),61),f=o.n,r.g){case 1:f.b=-l.b-b.d;break;case 3:f.b=i.f.b+b.a-l.b}}function Izn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(r=BB(mMn(n,(qqn(),skt)),33),o=DWn,s=DWn,a=_Vn,u=_Vn,k=spn(n.b,0);k.b!=k.d.c;)w=(m=BB(b3(k),86)).e,d=m.f,o=e.Math.min(o,w.a-d.a/2),s=e.Math.min(s,w.b-d.b/2),a=e.Math.max(a,w.a+d.a/2),u=e.Math.max(u,w.b+d.b/2);for(l=new xC((b=BB(ZAn(r,(CAn(),Ikt)),116)).b-o,b.d-s),y=spn(n.b,0);y.b!=y.d.c;)cL(f=mMn(m=BB(b3(y),86),skt),239)&&SA(c=BB(f,33),(h=UR(m.e,l)).a-c.g/2,h.b-c.f/2);for(v=spn(n.a,0);v.b!=v.d.c;)p=BB(b3(v),188),(i=BB(mMn(p,skt),79))&&(r5(t=p.a,g=new wA(p.b.e),t.a,t.a.a),r5(t,j=new wA(p.c.e),t.c.b,t.c),ZMn(g,BB(Dpn(t,1),8),p.b.f),ZMn(j,BB(Dpn(t,t.b-2),8),p.c.f),VFn(t,cDn(i,!0,!0)));KUn(r,a-o+(b.b+b.c),u-s+(b.d+b.a),!1,!1)}function Ozn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(yR(o=new M2(s=n.b,0),new HX(n)),g=!1,c=1;o.b<o.d.gc();){for(Px(o.b<o.d.gc()),u=BB(o.d.Xb(o.c=o.b++),29),l1(c,s.c.length),b=BB(s.c[c],29),d=(w=a0(u.a)).c.length,l=new Wb(w);l.a<l.c.c.length;)PZ(h=BB(n0(l),10),b);if(g){for(f=W1(new fy(w),0);f.c.Sb();)for(r=new Wb(a0(fbn(h=BB(w5(f),10))));r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0),hon(n,(hWn(),qft),(hN(),!0)),e=iGn(n,i,d),t=BB(mMn(h,Rft),305),p=BB(xq(e,e.c.length-1),17),t.k=p.c.i,t.n=p,t.b=i.d.i,t.c=i;g=!1}else 0!=w.c.length&&(l1(0,w.c.length),BB(w.c[0],10).k==(uSn(),Tut)&&(g=!0,c=-1));++c}for(a=new M2(n.b,0);a.b<a.d.gc();)Px(a.b<a.d.gc()),0==BB(a.d.Xb(a.c=a.b++),29).a.c.length&&fW(a)}function Azn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=BB(BB(h6(n.r,t),21),84)).gc()<=2||t==(kUn(),oIt)||t==(kUn(),CIt))JUn(n,t);else{for(g=n.u.Hc((lIn(),cIt)),i=t==(kUn(),sIt)?(Dan(),Rrt):(Dan(),Nrt),v=t==sIt?(G7(),irt):(G7(),crt),r=Zk(H_(i),n.s),p=t==sIt?RQn:KQn,h=f.Kc();h.Ob();)!(o=BB(h.Pb(),111)).c||o.c.d.c.length<=0||(d=o.b.rf(),w=o.e,(b=(l=o.c).i).b=(a=l.n,l.e.a+a.b+a.c),b.a=(u=l.n,l.e.b+u.d+u.a),g?(b.c=w.a-(c=l.n,l.e.a+c.b+c.c)-n.s,g=!1):b.c=w.a+d.a+n.s,OY(v,uJn),l.f=v,l9(l,(J9(),Jit)),WB(r.d,new xG(b,kln(r,b))),p=t==sIt?e.Math.min(p,w.b):e.Math.max(p,w.b+o.b.rf().b));for(p+=t==sIt?-n.t:n.t,Pwn((r.e=p,r)),s=f.Kc();s.Ob();)!(o=BB(s.Pb(),111)).c||o.c.d.c.length<=0||((b=o.c.i).c-=o.e.a,b.d-=o.e.b)}}function $zn(n,t,i){var r;if(OTn(i,"StretchWidth layering",1),0!=t.a.c.length){for(n.c=t,n.t=0,n.u=0,n.i=RQn,n.g=KQn,n.d=Gy(MD(mMn(t,(HXn(),ypt)))),zpn(n),PAn(n),SAn(n),xjn(n),ddn(n),n.i=e.Math.max(1,n.i),n.g=e.Math.max(1,n.g),n.d=n.d/n.i,n.f=n.g/n.i,n.s=_vn(n),r=new HX(n.c),WB(n.c.b,r),n.r=a0(n.p),n.n=TJ(n.k,n.k.length);0!=n.r.c.length;)n.o=zhn(n),!n.o||Ton(n)&&0!=n.b.a.gc()?(xEn(n,r),r=new HX(n.c),WB(n.c.b,r),Frn(n.a,n.b),n.b.a.$b(),n.t=n.u,n.u=0):Ton(n)?(n.c.b.c=x8(Ant,HWn,1,0,5,1),r=new HX(n.c),WB(n.c.b,r),n.t=0,n.u=0,n.b.a.$b(),n.a.a.$b(),++n.f,n.r=a0(n.p),n.n=TJ(n.k,n.k.length)):(PZ(n.o,r),y7(n.r,n.o),TU(n.b,n.o),n.t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p],n.u+=n.e[n.o.p]*n.d);t.a.c=x8(Ant,HWn,1,0,5,1),JPn(t.b),HSn(i)}else HSn(i)}function Lzn(n){var t,i,r,c;for(JT(AV(new Rq(null,new w1(n.a.b,16)),new yr),new kr),fEn(n),JT(AV(new Rq(null,new w1(n.a.b,16)),new jr),new Er),n.c==(Mbn(),JPt)&&(JT(AV(wnn(new Rq(null,new w1(new Cb(n.f),1)),new Tr),new Mr),new Md(n)),JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Sr),new Pr),new Cr),new Ir),new Pd(n))),c=new xC(RQn,RQn),t=new xC(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),57),c.a=e.Math.min(c.a,i.d.c),c.b=e.Math.min(c.b,i.d.d),t.a=e.Math.max(t.a,i.d.c+i.d.b),t.b=e.Math.max(t.b,i.d.d+i.d.a);UR(kO(n.d.c),qx(new xC(c.a,c.b))),UR(kO(n.d.f),XR(new xC(t.a,t.b),c)),oNn(n,c,t),$U(n.f),$U(n.b),$U(n.g),$U(n.e),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.d=null}function Nzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(i=new Np,w=new Wb(t.a);w.a<w.c.c.length;)if((l=(b=BB(n0(w),10)).e)&&(gun(i,Nzn(n,l,b)),EGn(n,l,b),BB(mMn(l,(hWn(),Zft)),21).Hc((bDn(),lft))))for(p=BB(mMn(b,(HXn(),ept)),98),f=BB(mMn(b,cpt),174).Hc((lIn(),eIt)),g=new Wb(b.j);g.a<g.c.c.length;)for(d=BB(n0(g),11),(r=BB(RX(n.b,d),10))||(hon(r=bXn(d,p,d.j,-(d.e.c.length-d.g.c.length),null,new Gj,d.o,BB(mMn(l,Udt),103),l),dlt,d),VW(n.b,d,r),WB(l.a,r)),c=BB(xq(r.j,0),11),s=new Wb(d.f);s.a<s.c.c.length;)o=BB(n0(s),70),(a=new qj).o.a=o.o.a,a.o.b=o.o.b,WB(c.f,a),f||(v=d.j,h=0,Hz(BB(mMn(b,cpt),21))&&(h=$In(o.n,o.o,d.o,0,v)),p==(QEn(),QCt)||(kUn(),bIt).Hc(v)?a.o.a=h:a.o.b=h);return BGn(n,t,e,i,u=new Np),e&&Cqn(n,t,e,u),u}function xzn(n,t,e){var i,r,c,a,u,o,s,h;if(!n.c[t.c.p][t.p].e){for(n.c[t.c.p][t.p].e=!0,n.c[t.c.p][t.p].b=0,n.c[t.c.p][t.p].d=0,n.c[t.c.p][t.p].a=null,h=new Wb(t.j);h.a<h.c.c.length;)for(s=BB(n0(h),11),o=(e?new Hw(s):new Gw(s)).Kc();o.Ob();)(a=(u=BB(o.Pb(),11)).i).c==t.c?a!=t&&(xzn(n,a,e),n.c[t.c.p][t.p].b+=n.c[a.c.p][a.p].b,n.c[t.c.p][t.p].d+=n.c[a.c.p][a.p].d):(n.c[t.c.p][t.p].d+=n.g[u.p],++n.c[t.c.p][t.p].b);if(c=BB(mMn(t,(hWn(),xft)),15))for(r=c.Kc();r.Ob();)i=BB(r.Pb(),10),t.c==i.c&&(xzn(n,i,e),n.c[t.c.p][t.p].b+=n.c[i.c.p][i.p].b,n.c[t.c.p][t.p].d+=n.c[i.c.p][i.p].d);n.c[t.c.p][t.p].b>0&&(n.c[t.c.p][t.p].d+=H$n(n.i,24)*uYn*.07000000029802322-.03500000014901161,n.c[t.c.p][t.p].a=n.c[t.c.p][t.p].d/n.c[t.c.p][t.p].b)}}function Dzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(l=new Wb(n);l.a<l.c.c.length;){for(nx((f=BB(n0(l),10)).n),nx(f.o),V6(f.f),VRn(f),aRn(f),w=new Wb(f.j);w.a<w.c.c.length;){for(nx((b=BB(n0(w),11)).n),nx(b.a),nx(b.o),qCn(b,amn(b.j)),(r=BB(mMn(b,(HXn(),ipt)),19))&&hon(b,ipt,iln(-r.a)),i=new Wb(b.g);i.a<i.c.c.length;){for(t=spn((e=BB(n0(i),17)).a,0);t.b!=t.d.c;)nx(BB(b3(t),8));if(a=BB(mMn(e,vgt),74))for(c=spn(a,0);c.b!=c.d.c;)nx(BB(b3(c),8));for(s=new Wb(e.b);s.a<s.c.c.length;)nx((u=BB(n0(s),70)).n),nx(u.o)}for(h=new Wb(b.f);h.a<h.c.c.length;)nx((u=BB(n0(h),70)).n),nx(u.o)}for(f.k==(uSn(),Mut)&&(hon(f,(hWn(),Qft),amn(BB(mMn(f,Qft),61))),wxn(f)),o=new Wb(f.b);o.a<o.c.c.length;)VRn(u=BB(n0(o),70)),nx(u.o),nx(u.n)}}function Rzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(n.e=t,u=nOn(t),m=new Np,i=new Wb(u);i.a<i.c.c.length;){for(e=BB(n0(i),15),y=new Np,m.c[m.c.length]=y,o=new Rv,l=e.Kc();l.Ob();){for(c=JRn(n,f=BB(l.Pb(),33),!0,0,0),y.c[y.c.length]=c,new xC(b=f.i,w=f.j),!f.n&&(f.n=new eU(zOt,f,1,7)),h=new AL(f.n);h.e!=h.i.gc();)r=JRn(n,BB(kpn(h),137),!1,b,w),y.c[y.c.length]=r;for(!f.c&&(f.c=new eU(XOt,f,9,9)),g=new AL(f.c);g.e!=g.i.gc();)for(a=JRn(n,d=BB(kpn(g),118),!1,b,w),y.c[y.c.length]=a,p=d.i+b,v=d.j+w,!d.n&&(d.n=new eU(zOt,d,1,7)),s=new AL(d.n);s.e!=s.i.gc();)r=JRn(n,BB(kpn(s),137),!1,p,v),y.c[y.c.length]=r;Frn(o,JQ(Wen(Pun(Gk(xnt,1),HWn,20,0,[dLn(f),wLn(f)]))))}ULn(n,o,y)}return n.f=new _j(m),qan(n.f,t),n.f}function Kzn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;null==(w=RX(n.e,i))&&(s=BB(w=new py,183),o=new GX(t+"_s"+r),rtn(s,q6n,o)),nW(e,b=BB(w,183)),qQ(g=new py,"x",i.j),qQ(g,"y",i.k),rtn(b,U6n,g),qQ(f=new py,"x",i.b),qQ(f,"y",i.c),rtn(b,"endPoint",f),!WE((!i.a&&(i.a=new $L(xOt,i,5)),i.a))&&(c=new Wg(h=new Cl),e5((!i.a&&(i.a=new $L(xOt,i,5)),i.a),c),rtn(b,D6n,h)),!!Svn(i)&&cMn(n.a,b,K6n,RPn(n,Svn(i))),!!Pvn(i)&&cMn(n.a,b,R6n,RPn(n,Pvn(i))),!(0==(!i.e&&(i.e=new hK(FOt,i,10,9)),i.e).i)&&(a=new SI(n,l=new Cl),e5((!i.e&&(i.e=new hK(FOt,i,10,9)),i.e),a),rtn(b,F6n,l)),0!=(!i.g&&(i.g=new hK(FOt,i,9,10)),i.g).i&&(u=new PI(n,d=new Cl),e5((!i.g&&(i.g=new hK(FOt,i,9,10)),i.g),u),rtn(b,_6n,d))}function _zn(n){var t,i,r,c,a,u,o;for(qD(),r=n.f.n,u=EX(n.r).a.nc();u.Ob();){if(c=0,(a=BB(u.Pb(),111)).b.Xe((sWn(),aPt))&&(c=Gy(MD(a.b.We(aPt))))<0)switch(a.b.Hf().g){case 1:r.d=e.Math.max(r.d,-c);break;case 3:r.a=e.Math.max(r.a,-c);break;case 2:r.c=e.Math.max(r.c,-c);break;case 4:r.b=e.Math.max(r.b,-c)}if(Hz(n.u))switch(t=vcn(a.b,c),o=!BB(n.e.We(qSt),174).Hc((n_n(),HIt)),i=!1,a.b.Hf().g){case 1:i=t>r.d,r.d=e.Math.max(r.d,t),o&&i&&(r.d=e.Math.max(r.d,r.a),r.a=r.d+c);break;case 3:i=t>r.a,r.a=e.Math.max(r.a,t),o&&i&&(r.a=e.Math.max(r.a,r.d),r.d=r.a+c);break;case 2:i=t>r.c,r.c=e.Math.max(r.c,t),o&&i&&(r.c=e.Math.max(r.b,r.c),r.b=r.c+c);break;case 4:i=t>r.b,r.b=e.Math.max(r.b,t),o&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function Fzn(n){var t,e,i,r,c,a,u,o,s,h,f;for(s=new Wb(n);s.a<s.c.c.length;){switch(o=BB(n0(s),10),c=null,(a=BB(mMn(o,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),c=$ht;break;case 3:case 4:Jun(),c=Oht}if(c)hon(o,(hWn(),Gft),(Jun(),$ht)),c==Oht?RNn(o,a,(ain(),Hvt)):c==$ht&&RNn(o,a,(ain(),qvt));else if(vA(BB(mMn(o,ept),98))&&0!=o.j.c.length){for(t=!0,f=new Wb(o.j);f.a<f.c.c.length;){if(!((h=BB(n0(f),11)).j==(kUn(),oIt)&&h.e.c.length-h.g.c.length>0||h.j==CIt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Wb(h.g);r.a<r.c.c.length;)if(e=BB(n0(r),17),(u=BB(mMn(e.d.i,kgt),163))==(Tbn(),Blt)||u==Hlt){t=!1;break}for(i=new Wb(h.e);i.a<i.c.c.length;)if(e=BB(n0(i),17),(u=BB(mMn(e.c.i,kgt),163))==(Tbn(),_lt)||u==Flt){t=!1;break}}t&&RNn(o,a,(ain(),Gvt))}}}function Bzn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(E=0,w=0,l=new Wb(t.e);l.a<l.c.c.length;){for(f=BB(n0(l),10),b=0,o=0,s=i?BB(mMn(f,Xmt),19).a:_Vn,v=r?BB(mMn(f,Wmt),19).a:_Vn,h=e.Math.max(s,v),y=new Wb(f.j);y.a<y.c.c.length;){if(m=BB(n0(y),11),k=f.n.b+m.n.b+m.a.b,r)for(u=new Wb(m.g);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).d).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o));if(i)for(u=new Wb(m.e);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).c).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o))}o>0&&(E+=b/o,++w)}w>0?(t.a=c*E/w,t.g=w):(t.a=0,t.g=0)}function Hzn(n,t){var e,i,r,c,a,u,o,s,h,f;for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(u=new Wb(BB(n0(i),29).a);u.a<u.c.c.length;)a=BB(n0(u),10),t.j[a.p]=a,t.i[a.p]=t.o==(oZ(),cyt)?KQn:RQn;for($U(n.c),c=n.a.b,t.c==(gJ(),nyt)&&(c=cL(c,152)?o6(BB(c,152)):cL(c,131)?BB(c,131).a:cL(c,54)?new fy(c):new CT(c)),R9(n.e,t,n.b),yS(t.p,null),r=c.Kc();r.Ob();)for(o=BB(r.Pb(),29).a,t.o==(oZ(),cyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new CT(o)),f=o.Kc();f.Ob();)h=BB(f.Pb(),10),t.g[h.p]==h&&oXn(n,h,t);for(Hqn(n,t),e=c.Kc();e.Ob();)for(f=new Wb(BB(e.Pb(),29).a);f.a<f.c.c.length;)h=BB(n0(f),10),t.p[h.p]=t.p[t.g[h.p].p],h==t.g[h.p]&&(s=Gy(t.i[t.j[h.p].p]),(t.o==(oZ(),cyt)&&s>KQn||t.o==ryt&&s<RQn)&&(t.p[h.p]=Gy(t.p[h.p])+s));n.e.cg()}function qzn(n,t,e,i){var r,c,a,u,o;return pNn(u=new eUn(t),i),r=!0,n&&n.Xe((sWn(),bSt))&&(r=(c=BB(n.We((sWn(),bSt)),103))==(Ffn(),BPt)||c==_Pt||c==FPt),oRn(u,!1),Otn(u.e.wf(),new $_(u,!1,r)),LJ(u,u.f,(Dtn(),Git),(kUn(),sIt)),LJ(u,u.f,Uit,SIt),LJ(u,u.g,Git,CIt),LJ(u,u.g,Uit,oIt),Bpn(u,sIt),Bpn(u,SIt),hV(u,oIt),hV(u,CIt),qD(),(a=u.A.Hc((mdn(),DIt))&&u.B.Hc((n_n(),UIt))?ndn(u):null)&&rj(u.a,a),_zn(u),ryn(u),cyn(u),VGn(u),MKn(u),mkn(u),_gn(u,sIt),_gn(u,SIt),CRn(u),PHn(u),e?(Gbn(u),ykn(u),_gn(u,oIt),_gn(u,CIt),o=u.B.Hc((n_n(),XIt)),MCn(u,o,sIt),MCn(u,o,SIt),SCn(u,o,oIt),SCn(u,o,CIt),JT(new Rq(null,new w1(new Ob(u.i),0)),new In),JT(AV(new Rq(null,EX(u.r).a.oc()),new On),new An),BEn(u),u.e.uf(u.o),JT(new Rq(null,EX(u.r).a.oc()),new Ln),u.o):u.o}function Gzn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),81),h=e.Math.min(h,t.d.f.g.c+t.e.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),189)).i=h,0==a.e&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),189)).f.g.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),81),g=a.i+f.e.a,f.d.g||f.g.c<g?f.o=g:f.o=f.g.c;for(c-=a.f.o,a.b+=c,n.c==(Ffn(),FPt)||n.c==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),81)).f.Kc();s.Ob();)o=BB(s.Pb(),81),d=dA(n.c)?n.f.ef(f,o):n.f.ff(f,o),o.d.i=e.Math.max(o.d.i,f.o+f.g.b+d-o.e.a),o.k||(o.d.i=e.Math.max(o.d.i,o.g.c-o.e.a)),--o.d.e,0==o.d.e&&DH(w,o.d)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),81)).g.c=t.o}function zzn(n){var t,e,i,r,c,a,u,o;switch(u=n.b,t=n.a,0===BB(mMn(n,(_kn(),Mit)),427).g?m$(u,new nw(new Gn)):m$(u,new nw(new zn)),1===BB(mMn(n,Eit),428).g?(m$(u,new qn),m$(u,new Un),m$(u,new Kn)):(m$(u,new qn),m$(u,new Hn)),BB(mMn(n,Pit),250).g){case 0:o=new Yn;break;case 1:o=new Vn;break;case 2:o=new Qn;break;case 3:o=new Wn;break;case 5:o=new Ow(new Qn);break;case 4:o=new Ow(new Vn);break;case 7:o=new DS(new Ow(new Vn),new Ow(new Qn));break;case 8:o=new DS(new Ow(new Wn),new Ow(new Qn));break;default:o=new Ow(new Wn)}for(a=new Wb(u);a.a<a.c.c.length;){for(c=BB(n0(a),167),r=0,e=new rI(iln(i=0),iln(r));B_n(t,c,i,r);)e=BB(o.Ce(e,c),46),i=BB(e.a,19).a,r=BB(e.b,19).a;_Rn(t,c,i,r)}}function Uzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,MA(n.e,c.a,c.b),j=l/w,E=h/b,s=new AL(mV(n.e));s.e!=s.i.gc();)Pen(o=BB(kpn(s),137),o.i*j),Cen(o,o.j*E);for(v=new AL(yV(n.e));v.e!=v.i.gc();)y=(p=BB(kpn(v),118)).i,k=p.j,y>0&&Pen(p,y*j),k>0&&Cen(p,k*E);for(nan(n.b,new lt),t=new Np,u=new usn(new Pb(n.c).a);u.b;)i=BB((a=ten(u)).cd(),79),e=BB(a.dd(),395).a,r=cDn(i,!1,!1),VFn(f=lTn(PMn(i),qSn(r),e),r),(m=CMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.a.a.c,8)),e));for(g=new usn(new Pb(n.d).a);g.b;)i=BB((d=ten(g)).cd(),79),e=BB(d.dd(),395).a,r=cDn(i,!1,!1),f=lTn(OMn(i),Jon(qSn(r)),e),VFn(f=Jon(f),r),(m=IMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.c.b.c,8)),e))}function Xzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(0!=i.c.length){for(w=new Np,b=new Wb(i);b.a<b.c.c.length;)WB(w,new xC((l=BB(n0(b),33)).i,l.j));for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt));NMn(n,i);)E$n(n,i,!1);for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),u=0,o=0,c=null,0!=i.c.length&&(l1(0,i.c.length),u=(c=BB(i.c[0],33)).i-(l1(0,w.c.length),BB(w.c[0],8)).a,o=c.j-(l1(0,w.c.length),BB(w.c[0],8)).b),a=e.Math.sqrt(u*u+o*o),f=Uhn(i);0!=f.a.gc();){for(h=f.a.ec().Kc();h.Ob();)s=BB(h.Pb(),33),g=(d=n.f).i+d.g/2,p=d.j+d.f/2,v=s.i+s.g/2,y=s.j+s.f/2-p,j=(m=v-g)/(k=e.Math.sqrt(m*m+y*y)),E=y/k,Pen(s,s.i+j*a),Cen(s,s.j+E*a);r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),f=Uhn(new t_(f))}n.a&&n.a.lg(new t_(f)),r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),Xzn(n,t,new t_(f),r)}}function Wzn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(g=n.n,p=n.o,b=n.d,l=Gy(MD(edn(n,(HXn(),ppt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),o=t.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a-u.o.b,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=u.o.b,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,CZ(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),o=i.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=0,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,CZ(d,n)),c+=r}}function Vzn(n,t){var i,r,c,a,u,o;if(BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))){for(o=new Wb(t.a);o.a<o.c.c.length;)(a=BB(n0(o),10)).k==(uSn(),Cut)&&(c=BB(mMn(a,(HXn(),Cgt)),142),n.c=e.Math.min(n.c,a.n.a-c.b),n.a=e.Math.max(n.a,a.n.a+a.o.a+c.c),n.d=e.Math.min(n.d,a.n.b-c.d),n.b=e.Math.max(n.b,a.n.b+a.o.b+c.a));for(u=new Wb(t.a);u.a<u.c.c.length;)if((a=BB(n0(u),10)).k!=(uSn(),Cut))switch(a.k.g){case 2:if((r=BB(mMn(a,(HXn(),kgt)),163))==(Tbn(),Flt)){a.n.a=n.c-10,Yyn(a,new Ge).Jb(new rd(a));break}if(r==Hlt){a.n.a=n.a+10,Yyn(a,new ze).Jb(new cd(a));break}if((i=BB(mMn(a,ilt),303))==(z7(),Cft)){lqn(a).Jb(new ad(a)),a.n.b=n.d-10;break}if(i==Sft){lqn(a).Jb(new ud(a)),a.n.b=n.b+10;break}break;default:throw Hp(new _y("The node type "+a.k+" is not supported by the "+Jot))}}}function Qzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(o=new xC(i.i+i.g/2,i.j+i.f/2),l=XHn(i),b=BB(ZAn(t,(HXn(),ept)),98),d=BB(ZAn(i,upt),61),BI(lpn(i),tpt)||(w=0==i.i&&0==i.j?0:tMn(i,d),Ypn(i,tpt,w)),hon(r=bXn(i,b,d,l,new xC(t.g,t.f),o,new xC(i.g,i.f),BB(mMn(e,Udt),103),e),(hWn(),dlt),i),Hl(c=BB(xq(r.j,0),11),j_n(i)),hon(r,cpt,(lIn(),nbn(rIt))),h=BB(ZAn(t,cpt),174).Hc(eIt),u=new AL((!i.n&&(i.n=new eU(zOt,i,1,7)),i.n));u.e!=u.i.gc();)if(!qy(TD(ZAn(a=BB(kpn(u),137),Ggt)))&&a.a&&(f=Hhn(a),WB(c.f,f),!h))switch(s=0,Hz(BB(ZAn(t,cpt),21))&&(s=$In(new xC(a.i,a.j),new xC(a.g,a.f),new xC(i.g,i.f),0,d)),d.g){case 2:case 4:f.o.a=s;break;case 1:case 3:f.o.b=s}hon(r,Cpt,MD(ZAn(JJ(t),Cpt))),hon(r,Ipt,MD(ZAn(JJ(t),Ipt))),hon(r,Spt,MD(ZAn(JJ(t),Spt))),WB(e.a,r),VW(n.a,i,r)}function Yzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(e,"Processor arrange level",1),h=0,SQ(),_rn(t,new ap((qqn(),ikt))),c=t.b,u=spn(t,t.b),s=!0;s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?--c:s=!1;if(a=new n_(new s1(t,0,c)),o=new n_(new s1(t,c,t.b)),0==a.b)for(b=spn(o,0);b.b!=b.d.c;)hon(BB(b3(b),86),hkt,iln(h++));else for(f=a.b,m=spn(a,0);m.b!=m.d.c;){for(hon(v=BB(b3(m),86),hkt,iln(h++)),Yzn(n,i=xun(v),mcn(e,1/f|0)),_rn(i,QW(new ap(hkt))),l=new YT,p=spn(i,0);p.b!=p.d.c;)for(g=BB(b3(p),86),d=spn(v.d,0);d.b!=d.d.c;)(w=BB(b3(d),188)).c==g&&r5(l,w,l.c.b,l.c);for(yQ(v.d),Frn(v.d,l),u=spn(o,o.b),r=v.d.b,s=!0;0<r&&s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?(hon(g,hkt,iln(h++)),--r,mtn(u)):s=!1}HSn(e)}function Jzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Inverted port preprocessing",1),u=new M2(n.b,0),e=null,g=new Np;u.b<u.d.gc();){for(d=e,Px(u.b<u.d.gc()),e=BB(u.d.Xb(u.c=u.b++),29),h=new Wb(g);h.a<h.c.c.length;)PZ(o=BB(n0(h),10),d);for(g.c=x8(Ant,HWn,1,0,5,1),f=new Wb(e.a);f.a<f.c.c.length;)if((o=BB(n0(f),10)).k==(uSn(),Cut)&&vA(BB(mMn(o,(HXn(),ept)),98))){for(w=cRn(o,(ain(),Hvt),(kUn(),oIt)).Kc();w.Ob();)for(l=BB(w.Pb(),11),r=0,c=(i=BB(Qgn(a=l.e,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)$Bn(n,l,i[r],g);for(b=cRn(o,qvt,CIt).Kc();b.Ob();)for(l=BB(b.Pb(),11),r=0,c=(i=BB(Qgn(a=l.g,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)ABn(n,l,i[r],g)}}for(s=new Wb(g);s.a<s.c.c.length;)PZ(o=BB(n0(s),10),e);HSn(t)}function Zzn(n,t,e,i,r,c){var a,u,o,s,h,f;for(qan(s=new CSn,t),qCn(s,BB(ZAn(t,(HXn(),upt)),61)),hon(s,(hWn(),dlt),t),CZ(s,e),(f=s.o).a=t.g,f.b=t.f,(h=s.n).a=t.i,h.b=t.j,VW(n.a,t,s),(a=o5($V(wnn(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Vt),new Xt),new Ww(t)))||(a=o5($V(wnn(new Rq(null,(!t.d&&(t.d=new hK(_Ot,t,8,5)),new w1(t.d,16))),new Qt),new Wt),new Vw(t))),a||(a=o5(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Yt)),hon(s,elt,(hN(),!!a)),pqn(s,c,r,BB(ZAn(t,npt),8)),o=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));o.e!=o.i.gc();)!qy(TD(ZAn(u=BB(kpn(o),137),Ggt)))&&u.a&&WB(s.f,Hhn(u));switch(r.g){case 2:case 1:(s.j==(kUn(),sIt)||s.j==SIt)&&i.Fc((bDn(),gft));break;case 4:case 3:(s.j==(kUn(),oIt)||s.j==CIt)&&i.Fc((bDn(),gft))}return s}function nUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;for(l=null,r==(dJ(),Lyt)?l=t:r==Nyt&&(l=i),d=l.a.ec().Kc();d.Ob();){for(w=BB(d.Pb(),11),g=Aon(Pun(Gk(PMt,1),sVn,8,0,[w.i.n,w.n,w.a])).b,m=new Rv,o=new Rv,h=new m6(w.b);y$(h.a)||y$(h.b);)if(qy(TD(mMn(s=BB(y$(h.a)?n0(h.a):n0(h.b),17),(hWn(),Clt))))==c&&-1!=E7(a,s,0)){if(p=s.d==w?s.c:s.d,v=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).b,e.Math.abs(v-g)<.2)continue;v<g?t.a._b(p)?TU(m,new rI(Lyt,s)):TU(m,new rI(Nyt,s)):t.a._b(p)?TU(o,new rI(Lyt,s)):TU(o,new rI(Nyt,s))}if(m.a.gc()>1)for(e5(m,new sC(n,b=new hqn(w,m,r))),u.c[u.c.length]=b,f=m.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b);if(o.a.gc()>1)for(e5(o,new hC(n,b=new hqn(w,o,r))),u.c[u.c.length]=b,f=o.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b)}}function tUn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,w4n),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new Ha),w4n))),u2(n,w4n,g3n,mpn(xjt)),u2(n,w4n,vZn,mpn(Kjt)),u2(n,w4n,PZn,mpn(Cjt)),u2(n,w4n,BZn,mpn(Ijt)),u2(n,w4n,SZn,mpn(Ojt)),u2(n,w4n,CZn,mpn(Pjt)),u2(n,w4n,MZn,mpn(Ajt)),u2(n,w4n,IZn,mpn(Njt)),u2(n,w4n,h4n,mpn(Mjt)),u2(n,w4n,s4n,mpn(Sjt)),u2(n,w4n,b4n,mpn($jt)),u2(n,w4n,u4n,mpn(Ljt)),u2(n,w4n,o4n,mpn(Djt)),u2(n,w4n,f4n,mpn(Rjt)),u2(n,w4n,l4n,mpn(_jt))}function eUn(n){var t;if(this.r=xV(new Pn,new Cn),this.b=new Hbn(BB(yX(FIt),290)),this.p=new Hbn(BB(yX(FIt),290)),this.i=new Hbn(BB(yX(Krt),290)),this.e=n,this.o=new wA(n.rf()),this.D=n.Df()||qy(TD(n.We((sWn(),SSt)))),this.A=BB(n.We((sWn(),KSt)),21),this.B=BB(n.We(qSt),21),this.q=BB(n.We(uPt),98),this.u=BB(n.We(fPt),21),!wMn(this.u))throw Hp(new rk("Invalid port label placement: "+this.u));if(this.v=qy(TD(n.We(bPt))),this.j=BB(n.We(DSt),21),!tLn(this.j))throw Hp(new rk("Invalid node label placement: "+this.j));this.n=BB(nkn(n,NSt),116),this.k=Gy(MD(nkn(n,OPt))),this.d=Gy(MD(nkn(n,IPt))),this.w=Gy(MD(nkn(n,RPt))),this.s=Gy(MD(nkn(n,APt))),this.t=Gy(MD(nkn(n,$Pt))),this.C=BB(nkn(n,xPt),142),this.c=2*this.d,t=!this.B.Hc((n_n(),HIt)),this.f=new Ign(0,t,0),this.g=new Ign(1,t,0),jy(this.f,(Dtn(),zit),this.g)}function iUn(n,t,i,r,c){var a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,g=0,d=0,w=1,m=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));m.e!=m.i.gc();)w+=F3(new oz(ZL(dLn(p=BB(kpn(m),33)).a.Kc(),new h))),T=p.g,g=e.Math.max(g,T),b=p.f,d=e.Math.max(d,b),y+=T*b;for(u=y+2*r*r*w*(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i,a=e.Math.sqrt(u),s=e.Math.max(a*i,g),o=e.Math.max(a/i,d),v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();)p=BB(kpn(v),33),M=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(s-p.g),S=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(o-p.f),Pen(p,M),Cen(p,S);for(E=s+(c.b+c.c),j=o+(c.d+c.a),k=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));k.e!=k.i.gc();)for(l=new oz(ZL(dLn(BB(kpn(k),33)).a.Kc(),new h));dAn(l);)nAn(f=BB(U5(l),79))||BXn(f,t,E,j);KUn(n,E+=c.b+c.c,j+=c.d+c.a,!1,!0)}function rUn(n){var t,e,i,r,c,a,u,o,s,h,f;if(null==n)throw Hp(new Mk(zWn));if(s=n,o=!1,(c=n.length)>0&&(b1(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(n=n.substr(1),--c,o=45==t)),0==c)throw Hp(new Mk(DQn+s+'"'));for(;n.length>0&&(b1(0,n.length),48==n.charCodeAt(0));)n=n.substr(1),--c;if(c>(iFn(),xtt)[10])throw Hp(new Mk(DQn+s+'"'));for(r=0;r<c;r++)if(-1==egn((b1(r,n.length),n.charCodeAt(r))))throw Hp(new Mk(DQn+s+'"'));for(f=0,a=Ltt[10],h=Ntt[10],u=j7(Dtt[10]),e=!0,(i=c%a)>0&&(f=-parseInt(n.substr(0,i),10),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt(n.substr(0,a),10),n=n.substr(a),c-=a,e)e=!1;else{if(Vhn(f,u)<0)throw Hp(new Mk(DQn+s+'"'));f=cbn(f,h)}f=ibn(f,i)}if(Vhn(f,0)>0)throw Hp(new Mk(DQn+s+'"'));if(!o&&Vhn(f=j7(f),0)<0)throw Hp(new Mk(DQn+s+'"'));return f}function cUn(n,t){var e,i,r,c,a,u,o;if(ZH(),this.a=new X$(this),this.b=n,this.c=t,this.f=OU(B7((IPn(),Z$t),t)),this.f.dc())if((u=mjn(Z$t,n))==t)for(this.e=!0,this.d=new Np,this.f=new fo,this.f.Fc(S7n),BB(NHn(F7(Z$t,Utn(n)),""),26)==n&&this.f.Fc(az(Z$t,Utn(n))),r=EKn(Z$t,n).Kc();r.Ob();)switch(i=BB(r.Pb(),170),DW(B7(Z$t,i))){case 4:this.d.Fc(i);break;case 5:this.f.Gc(OU(B7(Z$t,i)))}else if(ZM(),BB(t,66).Oj())for(this.e=!0,this.f=null,this.d=new Np,a=0,o=(null==n.i&&qFn(n),n.i).length;a<o;++a)for(null==n.i&&qFn(n),e=n.i,i=a>=0&&a<e.length?e[a]:null,c=Z1(B7(Z$t,i));c;c=Z1(B7(Z$t,c)))c==t&&this.d.Fc(i);else 1==DW(B7(Z$t,t))&&u?(this.f=null,this.d=(TOn(),bLt)):(this.f=null,this.e=!0,this.d=(SQ(),new Gb(t)));else this.e=5==DW(B7(Z$t,t)),this.f.Fb(uLt)&&(this.f=uLt)}function aUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(i=0,r=Pmn(n,t),b=n.s,w=n.t,h=BB(BB(h6(n.r,t),21),84).Kc();h.Ob();)if((s=BB(h.Pb(),111)).c&&!(s.c.d.c.length<=0)){switch(d=s.b.rf(),o=s.b.Xe((sWn(),aPt))?Gy(MD(s.b.We(aPt))):0,(l=(f=s.c).i).b=(u=f.n,f.e.a+u.b+u.c),l.a=(a=f.n,f.e.b+a.d+a.a),t.g){case 1:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=d.b+o+r,l9(f,(J9(),Qit)),WD(f,(G7(),crt));break;case 3:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=-o-r-l.a,l9(f,(J9(),Qit)),WD(f,(G7(),irt));break;case 2:l.c=-o-r-l.b,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Jit)),WD(f,(G7(),rrt));break;case 4:l.c=d.a+o+r,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Yit)),WD(f,(G7(),rrt))}(t==(kUn(),sIt)||t==SIt)&&(i=e.Math.max(i,l.a))}i>0&&(BB(oV(n.b,t),124).a.b=i)}function uUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Comment pre-processing",1),e=0,o=new Wb(n.a);o.a<o.c.c.length;)if(qy(TD(mMn(u=BB(n0(o),10),(HXn(),Tdt))))){for(++e,r=0,i=null,s=null,w=new Wb(u.j);w.a<w.c.c.length;)r+=(l=BB(n0(w),11)).e.c.length+l.g.c.length,1==l.e.c.length&&(s=(i=BB(xq(l.e,0),17)).c),1==l.g.c.length&&(s=(i=BB(xq(l.g,0),17)).d);if(1!=r||s.e.c.length+s.g.c.length!=1||qy(TD(mMn(s.i,Tdt)))){for(g=new Np,b=new Wb(u.j);b.a<b.c.c.length;){for(f=new Wb((l=BB(n0(b),11)).g);f.a<f.c.c.length;)0==(h=BB(n0(f),17)).d.g.c.length||(g.c[g.c.length]=h);for(a=new Wb(l.e);a.a<a.c.c.length;)0==(c=BB(n0(a),17)).c.e.c.length||(g.c[g.c.length]=c)}for(d=new Wb(g);d.a<d.c.c.length;)tBn(BB(n0(d),17),!0)}else nXn(u,i,s,s.i),AU(o)}t.n&&OH(t,"Found "+e+" comment boxes"),HSn(t)}function oUn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(l=Gy(MD(mMn(n,(HXn(),Cpt)))),b=Gy(MD(mMn(n,Ipt))),f=Gy(MD(mMn(n,Spt))),u=n.o,a=(c=BB(xq(n.j,0),11)).n,d=TPn(c,f)){if(t.Hc((lIn(),eIt)))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:d.c=(u.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(u.a-d.b)/2-a.a,d.d=-b-d.a;break;case 2:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=-l-d.b;break;case 4:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=l}else if(t.Hc(rIt))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Wb(c.f);s.a<s.c.c.length;)(w=(o=BB(n0(s),70)).n).a=d.c,w.b=r,r+=o.o.b+f}}function sUn(){RO(wLt,new Vs),RO(zLt,new ah),RO(ULt,new ph),RO(XLt,new Ch),RO(Qtt,new $h),RO(Gk(NNt,1),new Lh),RO(ktt,new Nh),RO(Ttt,new xh),RO(Qtt,new _s),RO(Qtt,new Fs),RO(Qtt,new Bs),RO(Ptt,new Hs),RO(Qtt,new qs),RO(Rnt,new Gs),RO(Rnt,new zs),RO(Qtt,new Us),RO(Ctt,new Xs),RO(Qtt,new Ws),RO(Qtt,new Qs),RO(Qtt,new Ys),RO(Qtt,new Js),RO(Qtt,new Zs),RO(Gk(NNt,1),new nh),RO(Qtt,new th),RO(Qtt,new eh),RO(Rnt,new ih),RO(Rnt,new rh),RO(Qtt,new ch),RO(Att,new uh),RO(Qtt,new oh),RO(Rtt,new sh),RO(Qtt,new hh),RO(Qtt,new fh),RO(Qtt,new lh),RO(Qtt,new bh),RO(Rnt,new wh),RO(Rnt,new dh),RO(Qtt,new gh),RO(Qtt,new vh),RO(Qtt,new mh),RO(Qtt,new yh),RO(Qtt,new kh),RO(Qtt,new jh),RO(_tt,new Eh),RO(Qtt,new Th),RO(Qtt,new Mh),RO(Qtt,new Sh),RO(_tt,new Ph),RO(Rtt,new Ih),RO(Qtt,new Oh),RO(Att,new Ah)}function hUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=t.length)>0&&(b1(0,t.length),64!=(u=t.charCodeAt(0)))){if(37==u&&(o=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(b1(h+1,t.length),o=46==t.charCodeAt(h+1))))){if(v=mK("%",a=t.substr(1,h-1))?null:$Un(a),i=0,o)try{i=l_n(t.substr(h+2),_Vn,DWn)}catch(m){throw cL(m=lun(m),127)?Hp(new L7(m)):Hp(m)}for(d=Ern(n.Wg());d.Ob();)if(cL(b=Man(d),510)&&(p=(r=BB(b,590)).d,(null==v?null==p:mK(v,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:t.substr(0,s),e=0,-1!=s)try{e=l_n(t.substr(s+1),_Vn,DWn)}catch(m){if(!cL(m=lun(m),127))throw Hp(m);l=t}for(l=mK("%",l)?null:$Un(l),w=Ern(n.Wg());w.Ob();)if(cL(b=Man(w),191)&&(g=(c=BB(b,191)).ne(),(null==l?null==g:mK(l,g))&&0==e--))return c;return null}return _qn(n,t)}function fUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(m=new Np,f=new Wb(n.b);f.a<f.c.c.length;)for(w=new Wb(BB(n0(f),29).a);w.a<w.c.c.length;)if((l=BB(n0(w),10)).k==(uSn(),Mut)&&Lx(l,(hWn(),Vft))){for(d=null,p=null,g=null,j=new Wb(l.j);j.a<j.c.c.length;)switch((k=BB(n0(j),11)).j.g){case 4:d=k;break;case 2:p=k;break;default:g=k}for(s=new Kj((v=BB(xq(g.g,0),17)).a),UR(o=new wA(g.n),l.n),nX(spn(s,0),o),y=Jon(v.a),UR(h=new wA(g.n),l.n),r5(y,h,y.c.b,y.c),E=BB(mMn(l,Vft),10),T=BB(xq(E.j,0),11),c=0,u=(i=BB(Qgn(d.e,x8(yut,c1n,17,0,0,1)),474)).length;c<u;++c)MZ(t=i[c],T),Wsn(t.a,t.a.b,s);for(r=0,a=(e=Z0(p.g)).length;r<a;++r)SZ(t=e[r],T),Wsn(t.a,0,y);SZ(v,null),MZ(v,null),m.c[m.c.length]=l}for(b=new Wb(m);b.a<b.c.c.length;)PZ(l=BB(n0(b),10),null)}function lUn(){var n,t,e;for(lUn=O,new knn(1,0),new knn(10,0),new knn(0,0),Htt=x8(iet,sVn,240,11,0,1),qtt=x8(ONt,WVn,25,100,15,1),Gtt=Pun(Gk(xNt,1),qQn,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),ztt=x8(ANt,hQn,25,Gtt.length,15,1),Utt=Pun(Gk(xNt,1),qQn,25,15,[1,10,100,VVn,1e4,GQn,1e6,1e7,1e8,AQn,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Xtt=x8(ANt,hQn,25,Utt.length,15,1),Wtt=x8(iet,sVn,240,11,0,1),n=0;n<Wtt.length;n++)Htt[n]=new knn(n,0),Wtt[n]=new knn(0,n),qtt[n]=48;for(;n<qtt.length;n++)qtt[n]=48;for(e=0;e<ztt.length;e++)ztt[e]=aIn(Gtt[e]);for(t=0;t<Xtt.length;t++)Xtt[t]=aIn(Utt[t]);$On()}function bUn(){function n(){this.obj=this.createObject()}return n.prototype.createObject=function(n){return Object.create(null)},n.prototype.get=function(n){return this.obj[n]},n.prototype.set=function(n,t){this.obj[n]=t},n.prototype[iYn]=function(n){delete this.obj[n]},n.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)},n.prototype.entries=function(){var n=this.keys(),t=this,e=0;return{next:function(){if(e>=n.length)return{done:!0};var i=n[e++];return{value:[i,t.get(i)],done:!1}}}},zDn()||(n.prototype.createObject=function(){return{}},n.prototype.get=function(n){return this.obj[":"+n]},n.prototype.set=function(n,t){this.obj[":"+n]=t},n.prototype[iYn]=function(n){delete this.obj[":"+n]},n.prototype.keys=function(){var n=[];for(var t in this.obj)58==t.charCodeAt(0)&&n.push(t.substring(1));return n}),n}function wUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(PFn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=x8(ONt,WVn,25,4*(0!=(u=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,o=0;o<l;o++)t=n[r++],h=(15&(e=n[r++]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,d=0==(-128&(i=n[r++]))?i>>6<<24>>24:(i>>6^252)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2|d],c[a++]=VLt[63&i];return 8==u?(s=(3&(t=n[r]))<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[s<<4],c[a++]=61,c[a++]=61):16==u&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2],c[a++]=61),Bdn(c,0,c.length)}function dUn(n,t){var i,r,c,a,u,o;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>_Vn&&e4(t,n.p-sQn),u=t.q.getDate(),FJ(t,1),n.k>=0&&vZ(t,n.k),n.c>=0?FJ(t,n.c):n.k>=0?(r=35-new von(t.q.getFullYear()-sQn,t.q.getMonth(),35).q.getDate(),FJ(t,e.Math.min(r,u))):FJ(t,u),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),aL(t,24==n.f&&n.g?0:n.f),n.j>=0&&g6(t,n.j),n.n>=0&&U8(t,n.n),n.i>=0&&dO(t,rbn(cbn(Ojn(fan(t.q.getTime()),VVn),VVn),n.i)),n.a&&(e4(c=new AT,c.q.getFullYear()-sQn-80),sS(fan(t.q.getTime()),fan(c.q.getTime()))&&e4(t,c.q.getFullYear()-sQn+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),o=t.q.getMonth(),FJ(t,t.q.getDate()+i),t.q.getMonth()!=o&&FJ(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>_Vn&&(a=t.q.getTimezoneOffset(),dO(t,rbn(fan(t.q.getTime()),60*(n.o-a)*VVn))),!0}function gUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(cL(r=mMn(t,(hWn(),dlt)),239)){for(b=BB(r,33),w=t.e,f=new wA(t.c),c=t.d,f.a+=c.b,f.b+=c.d,SN(BB(ZAn(b,(HXn(),qgt)),174),(n_n(),qIt))&&(Ol(l=BB(ZAn(b,zgt),116),c.a),_l(l,c.d),Al(l,c.b),Fl(l,c.c)),e=new Np,s=new Wb(t.a);s.a<s.c.c.length;)for(cL(mMn(u=BB(n0(s),10),dlt),239)?CUn(u,f):cL(mMn(u,dlt),186)&&!w&&SA(i=BB(mMn(u,dlt),118),(g=yFn(t,u,i.g,i.f)).a,g.b),d=new Wb(u.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Qw(u)),new Yw(e));if(w)for(d=new Wb(w.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Jw(w)),new Zw(e));for(p=BB(ZAn(b,Zdt),218),a=new Wb(e);a.a<a.c.c.length;)pzn(BB(n0(a),17),p,f);for(m_n(t),o=new Wb(t.a);o.a<o.c.c.length;)(h=(u=BB(n0(o),10)).e)&&gUn(n,h)}}function pUn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,gZn),"ELK Force"),"Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported."),new dt),gZn),EG((hAn(),tAt),Pun(Gk(aAt,1),$Vn,237,0,[ZOt]))))),u2(n,gZn,pZn,iln(1)),u2(n,gZn,vZn,80),u2(n,gZn,mZn,5),u2(n,gZn,VJn,dZn),u2(n,gZn,yZn,iln(1)),u2(n,gZn,kZn,(hN(),!0)),u2(n,gZn,QJn,Qct),u2(n,gZn,jZn,mpn(Hct)),u2(n,gZn,EZn,mpn(Yct)),u2(n,gZn,TZn,!1),u2(n,gZn,MZn,mpn(Wct)),u2(n,gZn,SZn,mpn(Xct)),u2(n,gZn,PZn,mpn(Uct)),u2(n,gZn,CZn,mpn(zct)),u2(n,gZn,IZn,mpn(Jct)),u2(n,gZn,oZn,mpn(Gct)),u2(n,gZn,fZn,mpn(aat)),u2(n,gZn,sZn,mpn(qct)),u2(n,gZn,bZn,mpn(tat)),u2(n,gZn,hZn,mpn(eat))}function vUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,f=PDn(n,t),r=s.b-o.b-o.c,c=u.a.a,a=s.c+o.b,w=n.w,f!=(cpn(),BCt)&&f!=qCt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=f==BCt?c-2*n.w:c,f=FCt),r<c&&!n.B.Hc((n_n(),WIt)))f==BCt?a+=w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=f==BCt?c-2*n.w:c,f=FCt),f.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=w+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),w+=e.Math.max(0,i)}for(b=BB(BB(h6(n.r,t),21),84).Kc();b.Ob();)(l=BB(b.Pb(),111)).e.a=a+l.d.b,l.e.b=(h=l.b).Xe((sWn(),aPt))?h.Hf()==(kUn(),sIt)?-h.rf().b-Gy(MD(h.We(aPt))):Gy(MD(h.We(aPt))):h.Hf()==(kUn(),sIt)?-h.rf().b:0,a+=l.d.b+l.b.rf().a+l.d.c+w}}function mUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,l=PDn(n,t),r=s.a-o.d-o.a,c=u.a.b,a=s.d+o.d,d=n.w,h=n.o.a,l!=(cpn(),BCt)&&l!=qCt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=l==BCt?c-2*n.w:c,l=FCt),r<c&&!n.B.Hc((n_n(),WIt)))l==BCt?a+=d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=l==BCt?c-2*n.w:c,l=FCt),l.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=d+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),d+=e.Math.max(0,i)}for(w=BB(BB(h6(n.r,t),21),84).Kc();w.Ob();)(b=BB(w.Pb(),111)).e.a=(f=b.b).Xe((sWn(),aPt))?f.Hf()==(kUn(),CIt)?-f.rf().a-Gy(MD(f.We(aPt))):h+Gy(MD(f.We(aPt))):f.Hf()==(kUn(),CIt)?-f.rf().a:h,b.e.b=a+b.d.d,a+=b.d.d+b.b.rf().b+b.d.a+d}}function yUn(n){var t,i,r,c,a,u,o,s,f,l,b,w,d,g,p;for(n.n=Gy(MD(mMn(n.g,(HXn(),Opt)))),n.e=Gy(MD(mMn(n.g,Tpt))),n.i=n.g.b.c.length,o=n.i-1,w=0,n.j=0,n.k=0,n.a=u6(x8(Att,sVn,19,n.i,0,1)),n.b=u6(x8(Ptt,sVn,333,n.i,7,1)),u=new Wb(n.g.b);u.a<u.c.c.length;){for((c=BB(n0(u),29)).p=o,b=new Wb(c.a);b.a<b.c.c.length;)(l=BB(n0(b),10)).p=w,++w;--o}for(n.f=x8(ANt,hQn,25,w,15,1),n.c=kq(ANt,[sVn,hQn],[48,25],15,[w,3],2),n.o=new Np,n.p=new Np,t=0,n.d=0,a=new Wb(n.g.b);a.a<a.c.c.length;){for(o=(c=BB(n0(a),29)).p,r=0,p=0,s=c.a.c.length,f=0,b=new Wb(c.a);b.a<b.c.c.length;)w=(l=BB(n0(b),10)).p,n.f[w]=l.c.p,f+=l.o.b+n.n,i=F3(new oz(ZL(fbn(l).a.Kc(),new h))),g=F3(new oz(ZL(lbn(l).a.Kc(),new h))),n.c[w][0]=g-i,n.c[w][1]=i,n.c[w][2]=g,r+=i,p+=g,i>0&&WB(n.p,l),WB(n.o,l);d=s+(t-=r),f+=t*n.e,c5(n.a,o,iln(d)),c5(n.b,o,f),n.j=e.Math.max(n.j,d),n.k=e.Math.max(n.k,f),n.d+=t,t+=p}}function kUn(){var n;kUn=O,PIt=new WC(hJn,0),sIt=new WC(mJn,1),oIt=new WC(yJn,2),SIt=new WC(kJn,3),CIt=new WC(jJn,4),SQ(),wIt=new Ak(new YK(n=BB(Vj(FIt),9),BB(SR(n,n.length),9),0)),dIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[]))),hIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[]))),EIt=ffn(EG(SIt,Pun(Gk(FIt,1),YZn,61,0,[]))),MIt=ffn(EG(CIt,Pun(Gk(FIt,1),YZn,61,0,[]))),yIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[SIt]))),bIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),jIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),gIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt]))),TIt=ffn(EG(SIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),fIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[SIt]))),mIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,CIt]))),lIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt]))),kIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt]))),pIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt]))),vIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt,CIt])))}function jUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(0!=t.b){for(l=new YT,a=null,b=null,i=CJ(e.Math.floor(e.Math.log(t.b)*e.Math.LOG10E)+1),u=0,v=spn(t,0);v.b!=v.d.c;)for(g=BB(b3(v),86),GI(b)!==GI(mMn(g,(qqn(),rkt)))&&(b=SD(mMn(g,rkt)),u=0),a=null!=b?b+d0(u++,i):d0(u++,i),hon(g,rkt,a),d=new wg(spn(new bg(g).a.d,0));EE(d.a);)r5(l,w=BB(b3(d.a),188).c,l.c.b,l.c),hon(w,rkt,a);for(f=new xp,c=0;c<a.length-i;c++)for(p=spn(t,0);p.b!=p.d.c;)mZ(f,o=fx(SD(mMn(g=BB(b3(p),86),(qqn(),rkt))),0,c+1),iln(null!=(null==o?qI(AY(f.f,null)):hS(f.g,o))?BB(null==o?qI(AY(f.f,null)):hS(f.g,o),19).a+1:1));for(h=new usn(new Pb(f).a);h.b;)s=ten(h),r=iln(null!=RX(n.a,s.cd())?BB(RX(n.a,s.cd()),19).a:0),mZ(n.a,SD(s.cd()),iln(BB(s.dd(),19).a+r.a)),(!(r=BB(RX(n.b,s.cd()),19))||r.a<BB(s.dd(),19).a)&&mZ(n.b,SD(s.cd()),BB(s.dd(),19));jUn(n,l)}}function EUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(i,"Interactive node layering",1),r=new Np,w=new Wb(t.a);w.a<w.c.c.length;){for(s=(h=(l=BB(n0(w),10)).n.a)+l.o.a,s=e.Math.max(h+1,s),v=new M2(r,0),c=null;v.b<v.d.gc();){if(Px(v.b<v.d.gc()),(g=BB(v.d.Xb(v.c=v.b++),569)).c>=s){Px(v.b>0),v.a.Xb(v.c=--v.b);break}g.a>h&&(c?(gun(c.b,g.b),c.a=e.Math.max(c.a,g.a),fW(v)):(WB(g.b,l),g.c=e.Math.min(g.c,h),g.a=e.Math.max(g.a,s),c=g))}c||((c=new im).c=h,c.a=s,yR(v,c),WB(c.b,l))}for(o=t.b,f=0,p=new Wb(r);p.a<p.c.c.length;)for(g=BB(n0(p),569),(a=new HX(t)).p=f++,o.c[o.c.length]=a,d=new Wb(g.b);d.a<d.c.c.length;)PZ(l=BB(n0(d),10),a),l.p=0;for(b=new Wb(t.a);b.a<b.c.c.length;)0==(l=BB(n0(b),10)).p&&CDn(n,l,t);for(u=new M2(o,0);u.b<u.d.gc();)0==(Px(u.b<u.d.gc()),BB(u.d.Xb(u.c=u.b++),29)).a.c.length&&fW(u);t.a.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function TUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(0!=t.e.c.length&&0!=e.e.c.length){if((i=BB(xq(t.e,0),17).c.i)==(a=BB(xq(e.e,0),17).c.i))return E$(BB(mMn(BB(xq(t.e,0),17),(hWn(),wlt)),19).a,BB(mMn(BB(xq(e.e,0),17),wlt),19).a);for(f=0,l=(h=n.a).length;f<l;++f){if((s=h[f])==i)return 1;if(s==a)return-1}}return 0!=t.g.c.length&&0!=e.g.c.length?(c=BB(mMn(t,(hWn(),llt)),10),o=BB(mMn(e,llt),10),r=0,u=0,Lx(BB(xq(t.g,0),17),wlt)&&(r=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),Lx(BB(xq(e.g,0),17),wlt)&&(u=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),c&&c==o?qy(TD(mMn(BB(xq(t.g,0),17),Clt)))&&!qy(TD(mMn(BB(xq(e.g,0),17),Clt)))?1:!qy(TD(mMn(BB(xq(t.g,0),17),Clt)))&&qy(TD(mMn(BB(xq(e.g,0),17),Clt)))||r<u?-1:r>u?1:0:(n.b&&(n.b._b(c)&&(r=BB(n.b.xc(c),19).a),n.b._b(o)&&(u=BB(n.b.xc(o),19).a)),r<u?-1:r>u?1:0)):0!=t.e.c.length&&0!=e.g.c.length?1:-1}function MUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(OTn(t,O1n,1),w=new Np,y=new Np,s=new Wb(n.b);s.a<s.c.c.length;)for(g=-1,l=0,b=(f=n2((o=BB(n0(s),29)).a)).length;l<b;++l)if(++g,(h=f[l]).k==(uSn(),Cut)&&vA(BB(mMn(h,(HXn(),ept)),98))){for(LK(BB(mMn(h,(HXn(),ept)),98))||HNn(h),hon(h,(hWn(),rlt),h),w.c=x8(Ant,HWn,1,0,5,1),y.c=x8(Ant,HWn,1,0,5,1),e=new Np,qrn(v=new YT,DSn(h,(kUn(),sIt))),AXn(n,v,w,y,e),u=g,k=h,c=new Wb(w);c.a<c.c.c.length;)Qyn(i=BB(n0(c),10),u,o),++g,hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(i,clt),15).Fc(k);for(yQ(v),p=DSn(h,SIt).Kc();p.Ob();)r5(v,BB(p.Pb(),11),v.a,v.a.a);for(AXn(n,v,y,null,e),m=h,r=new Wb(y);r.a<r.c.c.length;)Qyn(i=BB(n0(r),10),++g,o),hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(m,clt),15).Fc(i);0==e.c.length||hon(h,xft,e)}HSn(t)}function SUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(h=BB(mMn(n,(Mrn(),sat)),33),d=DWn,g=DWn,b=_Vn,w=_Vn,v=new Wb(n.e);v.a<v.c.c.length;)E=(p=BB(n0(v),144)).d,T=p.e,d=e.Math.min(d,E.a-T.a/2),g=e.Math.min(g,E.b-T.b/2),b=e.Math.max(b,E.a+T.a/2),w=e.Math.max(w,E.b+T.b/2);for(k=new xC((j=BB(ZAn(h,(fRn(),Vct)),116)).b-d,j.d-g),o=new Wb(n.e);o.a<o.c.c.length;)cL(y=mMn(u=BB(n0(o),144),sat),239)&&SA(f=BB(y,33),(m=UR(u.d,k)).a-f.g/2,m.b-f.f/2);for(r=new Wb(n.c);r.a<r.c.c.length;)i=BB(n0(r),282),s=cDn(BB(mMn(i,sat),79),!0,!0),Ukn(S=XR(B$(i.d.d),i.c.d),i.c.e.a,i.c.e.b),CA(s,(M=UR(S,i.c.d)).a,M.b),Ukn(P=XR(B$(i.c.d),i.d.d),i.d.e.a,i.d.e.b),PA(s,(t=UR(P,i.d.d)).a,t.b);for(a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),447),SA(BB(mMn(c,sat),137),(l=UR(c.d,k)).a,l.b);KUn(h,b-d+(j.b+j.c),w-g+(j.d+j.a),!1,!0)}function PUn(n){var t,e,i,r,c,a,u,o,s,h,f;for(e=null,u=null,(r=BB(mMn(n.b,(HXn(),igt)),376))==(A6(),Jvt)&&(e=new Np,u=new Np),a=new Wb(n.d);a.a<a.c.c.length;)if((c=BB(n0(a),101)).i)switch(c.e.g){case 0:t=BB(u4(new QT(c.b)),61),r==Jvt&&t==(kUn(),sIt)?e.c[e.c.length]=c:r==Jvt&&t==(kUn(),SIt)?u.c[u.c.length]=c:Nmn(c,t);break;case 1:o=c.a.d.j,s=c.c.d.j,o==(kUn(),sIt)?bU(c,sIt,(Oun(),mst),c.a):s==sIt?bU(c,sIt,(Oun(),yst),c.c):o==SIt?bU(c,SIt,(Oun(),yst),c.a):s==SIt&&bU(c,SIt,(Oun(),mst),c.c);break;case 2:case 3:SN(i=c.b,(kUn(),sIt))?SN(i,SIt)?SN(i,CIt)?SN(i,oIt)||bU(c,sIt,(Oun(),yst),c.c):bU(c,sIt,(Oun(),mst),c.a):bU(c,sIt,(Oun(),vst),null):bU(c,SIt,(Oun(),vst),null);break;case 4:h=c.a.d.j,f=c.a.d.j,h==(kUn(),sIt)||f==sIt?bU(c,SIt,(Oun(),vst),null):bU(c,sIt,(Oun(),vst),null)}e&&(0==e.c.length||QFn(e,(kUn(),sIt)),0==u.c.length||QFn(u,(kUn(),SIt)))}function CUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;for(i=BB(mMn(n,(hWn(),dlt)),33),b=BB(mMn(n,(HXn(),Bdt)),19).a,c=BB(mMn(n,jgt),19).a,Ypn(i,Bdt,iln(b)),Ypn(i,jgt,iln(c)),Pen(i,n.n.a+t.a),Cen(i,n.n.b+t.b),(0!=BB(ZAn(i,Fgt),174).gc()||n.e||GI(mMn(vW(n),_gt))===GI((Nvn(),mvt))&&pA((bvn(),(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))))&&(Sen(i,n.o.a),Men(i,n.o.b)),f=new Wb(n.j);f.a<f.c.c.length;)cL(w=mMn(s=BB(n0(f),11),dlt),186)&&(SA(r=BB(w,118),s.n.a,s.n.b),Ypn(r,upt,s.j));for(l=0!=BB(mMn(n,$gt),174).gc(),o=new Wb(n.b);o.a<o.c.c.length;)a=BB(n0(o),70),(l||0!=BB(mMn(a,$gt),174).gc())&&(MA(e=BB(mMn(a,dlt),137),a.o.a,a.o.b),SA(e,a.n.a,a.n.b));if(!Hz(BB(mMn(n,cpt),21)))for(h=new Wb(n.j);h.a<h.c.c.length;)for(u=new Wb((s=BB(n0(h),11)).f);u.a<u.c.c.length;)a=BB(n0(u),70),Sen(e=BB(mMn(a,dlt),137),a.o.a),Men(e,a.o.b),SA(e,a.n.a,a.n.b)}function IUn(n){var t,e,i,r,c;switch(OY(n,i8n),(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i+(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){case 0:throw Hp(new _y("The edge must have at least one source or target."));case 1:return 0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i?JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))):JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))}if(1==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i&&1==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){if(r=PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),c=PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),JJ(r)==JJ(c))return JJ(r);if(r==JJ(c))return r;if(c==JJ(r))return c}for(t=PTn(BB(U5(i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])))),82));dAn(i);)if((e=PTn(BB(U5(i),82)))!=t&&!Ctn(e,t))if(JJ(e)==JJ(t))t=JJ(e);else if(!(t=B$n(t,e)))return null;return t}function OUn(n,t,i){var r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;for(OTn(i,"Polyline edge routing",1),v=Gy(MD(mMn(t,(HXn(),tgt)))),d=Gy(MD(mMn(t,Apt))),c=Gy(MD(mMn(t,kpt))),r=e.Math.min(1,c/d),k=0,s=0,0!=t.b.c.length&&(k=.4*r*(j=hLn(BB(xq(t.b,0),29)))),o=new M2(t.b,0);o.b<o.d.gc();){for(Px(o.b<o.d.gc()),(a=VI(u=BB(o.d.Xb(o.c=o.b++),29),jyt))&&k>0&&(k-=d),Tqn(u,k),l=0,w=new Wb(u.a);w.a<w.c.c.length;){for(f=0,p=new oz(ZL(lbn(b=BB(n0(w),10)).a.Kc(),new h));dAn(p);)m=g1((g=BB(U5(p),17)).c).b,y=g1(g.d).b,u!=g.d.i.c||b5(g)||(VIn(g,k,.4*r*e.Math.abs(m-y)),g.c.j==(kUn(),CIt)&&(m=0,y=0)),f=e.Math.max(f,e.Math.abs(y-m));switch(b.k.g){case 0:case 4:case 1:case 3:case 5:Gqn(n,b,k,v)}l=e.Math.max(l,f)}o.b<o.d.gc()&&(j=hLn((Px(o.b<o.d.gc()),BB(o.d.Xb(o.c=o.b++),29))),l=e.Math.max(l,j),Px(o.b>0),o.a.Xb(o.c=--o.b)),s=.4*r*l,!a&&o.b<o.d.gc()&&(s+=d),k+=u.c.a+s}n.a.a.$b(),t.f.a=k,HSn(i)}function AUn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v;for(s=new xp,u=new pJ,i=new Wb(n.a.a.b);i.a<i.c.c.length;)if(o=f2(t=BB(n0(i),57)))jCn(s.f,o,t);else if(v=f3(t))for(r=new Wb(v.k);r.a<r.c.c.length;)JIn(u,BB(n0(r),17),t);for(e=new Wb(n.a.a.b);e.a<e.c.c.length;)if(o=f2(t=BB(n0(e),57)))for(a=new oz(ZL(lbn(o).a.Kc(),new h));dAn(a);)if(!b5(c=BB(U5(a),17))&&(w=c.c,p=c.d,!(kUn(),yIt).Hc(c.c.j)||!yIt.Hc(c.d.j))){if(d=BB(RX(s,c.d.i),57),UNn(aM(cM(uM(rM(new Hv,0),100),n.c[t.a.d]),n.c[d.a.d])),w.j==CIt&&$z((gcn(),w)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c<t.d.c){if((b=n.c[f.a.d])==(g=n.c[t.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}if(p.j==oIt&&Az((gcn(),p)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c>t.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}}}function $Un(n){var t,e,i,r,c,a,u,o;if(RHn(),null==n)return null;if((r=GO(n,YTn(37)))<0)return n;for(o=new lN(n.substr(0,r)),t=x8(NNt,v6n,25,4,15,1),u=0,i=0,a=n.length;r<a;r++)if(b1(r,n.length),37==n.charCodeAt(r)&&n.length>r+2&&ton((b1(r+1,n.length),n.charCodeAt(r+1)),IAt,OAt)&&ton((b1(r+2,n.length),n.charCodeAt(r+2)),IAt,OAt))if(e=CH((b1(r+1,n.length),n.charCodeAt(r+1)),(b1(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[u++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[u++]=e<<24>>24,i=2):224==(240&e)?(t[u++]=e<<24>>24,i=3):240==(248&e)&&(t[u++]=e<<24>>24,i=4)),i>0){if(u==i){switch(u){case 2:xX(o,((31&t[0])<<6|63&t[1])&QVn);break;case 3:xX(o,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&QVn)}u=0,i=0}}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,o.a+=String.fromCharCode(e)}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,xX(o,(b1(r,n.length),n.charCodeAt(r)))}return o.a}function LUn(n,t,e,i,r){var c,a,u;if(ynn(n,t),a=t[0],c=fV(e.c,0),u=-1,Yon(e))if(i>0){if(a+i>n.length)return!1;u=UIn(n.substr(0,a+i),t)}else u=UIn(n,t);switch(c){case 71:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn]),t),r.e=u,!0;case 77:return gDn(n,t,r,u,a);case 76:return pDn(n,t,r,u,a);case 69:return rCn(n,t,a,r);case 99:return cCn(n,t,a,r);case 97:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"]),t),r.b=u,!0;case 121:return vDn(n,t,a,u,e,r);case 100:return!(u<=0||(r.c=u,0));case 83:return!(u<0)&&jwn(u,a,t[0],r);case 104:12==u&&(u=0);case 75:case 72:return!(u<0||(r.f=u,r.g=!1,0));case 107:return!(u<0||(r.f=u,r.g=!0,0));case 109:return!(u<0||(r.j=u,0));case 115:return!(u<0||(r.n=u,0));case 90:if(a<n.length&&(b1(a,n.length),90==n.charCodeAt(a)))return++t[0],r.o=0,!0;case 122:case 118:return CTn(n,a,t,r);default:return!1}}function NUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(b=BB(BB(h6(n.r,t),21),84),t!=(kUn(),oIt)&&t!=CIt){for(a=t==sIt?(Dan(),Nrt):(Dan(),Rrt),k=t==sIt?(G7(),crt):(G7(),irt),c=(r=(i=BB(oV(n.b,t),124)).i).c+Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.b,n.C.b,n.k])),v=r.c+r.b-Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.c,n.C.c,n.k])),u=Zk(H_(a),n.t),m=t==sIt?KQn:RQn,l=b.Kc();l.Ob();)!(h=BB(l.Pb(),111)).c||h.c.d.c.length<=0||(p=h.b.rf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(o=w.n,w.e.b+o.d+o.a),OY(k,uJn),w.f=k,l9(w,(J9(),Jit)),d.c=g.a-(d.b-p.a)/2,j=e.Math.min(c,g.a),E=e.Math.max(v,g.a+p.a),d.c<j?d.c=j:d.c+d.b>E&&(d.c=E-d.b),WB(u.d,new xG(d,kln(u,d))),m=t==sIt?e.Math.max(m,g.b+h.b.rf().b):e.Math.min(m,g.b));for(m+=t==sIt?n.t:-n.t,(y=Pwn((u.e=m,u)))>0&&(BB(oV(n.b,t),124).a.b=y),f=b.Kc();f.Ob();)!(h=BB(f.Pb(),111)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else aUn(n,t)}function xUn(n){var t,e,i,r,c,a,u,o,s,f;for(t=new xp,a=new AL(n);a.e!=a.i.gc();){for(c=BB(kpn(a),33),e=new Rv,VW(Mct,c,e),f=new ut,i=BB(P4(new Rq(null,new zU(new oz(ZL(wLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)])))),83),Jen(e,BB(i.xc((hN(),!0)),14),new ot),r=BB(P4(AV(BB(i.xc(!1),15).Lc(),new st),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();r.Ob();)(s=CMn(BB(r.Pb(),79)))&&((u=BB(qI(AY(t.f,s)),21))||(u=Oxn(s),jCn(t.f,s,u)),Frn(e,u));for(i=BB(P4(new Rq(null,new zU(new oz(ZL(dLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet])))),83),Jen(e,BB(i.xc(!0),14),new ht),o=BB(P4(AV(BB(i.xc(!1),15).Lc(),new ft),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();o.Ob();)(s=IMn(BB(o.Pb(),79)))&&((u=BB(qI(AY(t.f,s)),21))||(u=Oxn(s),jCn(t.f,s,u)),Frn(e,u))}}function DUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(uHn(),(o=Vhn(n,0)<0)&&(n=j7(n)),0==Vhn(n,0))switch(t){case 0:return"0";case 1:return WQn;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(b=new Ck).a+=t<0?"0E+":"0E",b.a+=t==_Vn?"2147483648":""+-t,b.a}f=x8(ONt,WVn,25,1+(h=18),15,1),e=h,d=n;do{s=d,d=Ojn(d,10),f[--e]=dG(rbn(48,ibn(s,cbn(d,10))))&QVn}while(0!=Vhn(d,0));if(r=ibn(ibn(ibn(h,e),t),1),0==t)return o&&(f[--e]=45),Bdn(f,e,h-e);if(t>0&&Vhn(r,-6)>=0){if(Vhn(r,0)>=0){for(c=e+dG(r),u=h-1;u>=c;u--)f[u+1]=f[u];return f[++c]=46,o&&(f[--e]=45),Bdn(f,e,h-e+1)}for(a=2;sS(a,rbn(j7(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,o&&(f[--e]=45),Bdn(f,e,h-e)}return w=e+1,i=h,l=new Ik,o&&(l.a+="-"),i-w>=1?(xX(l,f[e]),l.a+=".",l.a+=Bdn(f,e+1,h-e-1)):l.a+=Bdn(f,e,h-e),l.a+="E",Vhn(r,0)>0&&(l.a+="+"),l.a+=""+vz(r),l.a}function RUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(n.e.a.$b(),n.f.a.$b(),n.c.c=x8(Ant,HWn,1,0,5,1),n.i.c=x8(Ant,HWn,1,0,5,1),n.g.a.$b(),t)for(a=new Wb(t.a);a.a<a.c.c.length;)for(h=DSn(c=BB(n0(a),10),(kUn(),oIt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.e,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Cut)||u==Iut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i));if(e)for(a=new Wb(e.a);a.a<a.c.c.length;){for(o=new Wb((c=BB(n0(a),10)).j);o.a<o.c.c.length;)for(r=new Wb(BB(n0(o),11).g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))&&TU(n.g,i);for(h=DSn(c,(kUn(),CIt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.f,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Cut)||u==Iut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i))}}function KUn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(p=new xC(n.g,n.f),(g=XPn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),E=g.a/p.a,f=g.b/p.b,k=g.a-p.a,s=g.b-p.b,r)for(u=JJ(n)?BB(ZAn(JJ(n),(sWn(),bSt)),103):BB(ZAn(n,(sWn(),bSt)),103),o=GI(ZAn(n,(sWn(),uPt)))===GI((QEn(),XCt)),m=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));m.e!=m.i.gc();)switch(v=BB(kpn(m),118),(y=BB(ZAn(v,wPt),61))==(kUn(),PIt)&&(y=OFn(v,u),Ypn(v,wPt,y)),y.g){case 1:o||Pen(v,v.i*E);break;case 2:Pen(v,v.i+k),o||Cen(v,v.j*f);break;case 3:o||Pen(v,v.i*E),Cen(v,v.j+s);break;case 4:o||Cen(v,v.j*f)}if(MA(n,g.a,g.b),c)for(b=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=BB(kpn(b),137)).i+l.g/2,d=l.j+l.f/2,(j=w/p.a)+(h=d/p.b)>=1&&(j-h>0&&d>=0?(Pen(l,l.i+k),Cen(l,l.j+s*h)):j-h<0&&w>=0&&(Pen(l,l.i+k*j),Cen(l,l.j+s)));return Ypn(n,(sWn(),KSt),(mdn(),new YK(a=BB(Vj(YIt),9),BB(SR(a,a.length),9),0))),new xC(E,f)}function _Un(n){var t,i,r,c,a,u,o,s,h,f,l;if(f=JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))==JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))),u=new Gj,(t=BB(ZAn(n,(Xsn(),hCt)),74))&&t.b>=2){if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),i=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(l=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));l.e!=l.i.gc();)Qjn(l);VFn(t,BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202))}if(f)for(r=new AL((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new AL((!(i=BB(kpn(r),202)).a&&(i.a=new $L(xOt,i,5)),i.a));s.e!=s.i.gc();)o=BB(kpn(s),469),u.a=e.Math.max(u.a,o.a),u.b=e.Math.max(u.b,o.b);for(a=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));a.e!=a.i.gc();)c=BB(kpn(a),137),(h=BB(ZAn(c,gCt),8))&&SA(c,h.a,h.b),f&&(u.a=e.Math.max(u.a,c.i+c.g),u.b=e.Math.max(u.b,c.j+c.f));return u}function FUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(v=t.c.length,c=new qKn(n.a,i,null,null),E=x8(xNt,qQn,25,v,15,1),w=x8(xNt,qQn,25,v,15,1),b=x8(xNt,qQn,25,v,15,1),d=0,o=0;o<v;o++)w[o]=DWn,b[o]=_Vn;for(s=0;s<v;s++)for(l1(s,t.c.length),r=BB(t.c[s],180),E[s]=v$n(r),E[d]>E[s]&&(d=s),f=new Wb(n.a.b);f.a<f.c.c.length;)for(p=new Wb(BB(n0(f),29).a);p.a<p.c.c.length;)g=BB(n0(p),10),k=Gy(r.p[g.p])+Gy(r.d[g.p]),w[s]=e.Math.min(w[s],k),b[s]=e.Math.max(b[s],k+g.o.b);for(j=x8(xNt,qQn,25,v,15,1),h=0;h<v;h++)(l1(h,t.c.length),BB(t.c[h],180)).o==(oZ(),ryt)?j[h]=w[d]-w[h]:j[h]=b[d]-b[h];for(a=x8(xNt,qQn,25,v,15,1),l=new Wb(n.a.b);l.a<l.c.c.length;)for(y=new Wb(BB(n0(l),29).a);y.a<y.c.c.length;){for(m=BB(n0(y),10),u=0;u<v;u++)a[u]=Gy((l1(u,t.c.length),BB(t.c[u],180)).p[m.p])+Gy((l1(u,t.c.length),BB(t.c[u],180)).d[m.p])+j[u];a.sort(ien(T.prototype.te,T,[])),c.p[m.p]=(a[1]+a[2])/2,c.d[m.p]=0}return c}function BUn(n,t,e){var i,r,c,a,u;switch(i=t.i,c=n.i.o,r=n.i.d,u=n.n,a=Aon(Pun(Gk(PMt,1),sVn,8,0,[u,n.a])),n.j.g){case 1:WD(t,(G7(),irt)),i.d=-r.d-e-i.a,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 2:l9(t,(J9(),Yit)),i.c=c.a+r.c+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e);break;case 3:WD(t,(G7(),crt)),i.d=c.b+r.a+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 4:l9(t,(J9(),Jit)),i.c=-r.b-e-i.b,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e)}}function HUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O;for(w=0,S=0,s=new Wb(n);s.a<s.c.c.length;)ozn(o=BB(n0(s),33)),w=e.Math.max(w,o.g),S+=o.g*o.f;for(M=Zyn(n,S/n.c.length),S+=n.c.length*M,w=e.Math.max(w,e.Math.sqrt(S*u))+i.b,I=i.b,O=i.d,b=0,f=i.b+i.c,DH(T=new YT,iln(0)),j=new YT,h=new M2(n,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),C=(o=BB(h.d.Xb(h.c=h.b++),33)).g,l=o.f,I+C>w&&(a&&(fO(j,b),fO(T,iln(h.b-1))),I=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+C)),Pen(o,I),Cen(o,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 M2(n,0),fO(T,iln(n.c.length)),p=BB(b3(E=spn(T,0)),19).a,fO(j,b),k=spn(j,0),y=0;h.b<h.d.gc();)h.b==p&&(I=i.b,y=Gy(MD(b3(k))),p=BB(b3(E),19).a),Px(h.b<h.d.gc()),v=(o=BB(h.d.Xb(h.c=h.b++),33)).f,Men(o,y),d=y,h.b==p&&(g=f-I-i.c,m=o.g,Sen(o,g),lCn(o,new xC(g,d),new xC(m,v))),I+=o.g+t;return new xC(f,P)}function qUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(OTn(t,"Compound graph postprocessor",1),i=qy(TD(mMn(n,(HXn(),Dpt)))),o=BB(mMn(n,(hWn(),Hft)),224),f=new Rv,v=o.ec().Kc();v.Ob();){for(p=BB(v.Pb(),17),u=new t_(o.cc(p)),SQ(),m$(u,new _w(n)),j=ccn((l1(0,u.c.length),BB(u.c[0],243))),T=acn(BB(xq(u,u.c.length-1),243)),y=j.i,m=wan(T.i,y)?y.e:vW(y),l=Apn(p,u),yQ(p.a),b=null,a=new Wb(u);a.a<a.c.c.length;)c=BB(n0(a),243),OPn(g=new Gj,c.a,m),w=c.b,Wsn(r=new km,0,w.a),Ztn(r,g),k=new wA(g1(w.c)),E=new wA(g1(w.d)),UR(k,g),UR(E,g),b&&(0==r.b?d=E:(Px(0!=r.b),d=BB(r.a.a.c,8)),M=e.Math.abs(b.a-d.a)>lZn,S=e.Math.abs(b.b-d.b)>lZn,(!i&&M&&S||i&&(M||S))&&DH(p.a,k)),Frn(p.a,r),0==r.b?b=k:(Px(0!=r.b),b=BB(r.c.b.c,8)),Yan(w,l,g),acn(c)==T&&(vW(T.i)!=c.a&&OPn(g=new Gj,vW(T.i),m),hon(p,Rlt,g)),MSn(w,p,m),f.a.zc(w,f);SZ(p,j),MZ(p,T)}for(h=f.a.ec().Kc();h.Ob();)SZ(s=BB(h.Pb(),17),null),MZ(s,null);HSn(t)}function GUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(1==n.gc())return BB(n.Xb(0),231);if(n.gc()<=0)return new y6;for(c=n.Kc();c.Ob();){for(i=BB(c.Pb(),231),d=0,f=DWn,l=DWn,s=_Vn,h=_Vn,w=new Wb(i.e);w.a<w.c.c.length;)b=BB(n0(w),144),d+=BB(mMn(b,(fRn(),Zct)),19).a,f=e.Math.min(f,b.d.a-b.e.a/2),l=e.Math.min(l,b.d.b-b.e.b/2),s=e.Math.max(s,b.d.a+b.e.a/2),h=e.Math.max(h,b.d.b+b.e.b/2);hon(i,(fRn(),Zct),iln(d)),hon(i,(Mrn(),oat),new xC(f,l)),hon(i,uat,new xC(s,h))}for(SQ(),n.ad(new wt),qan(g=new y6,BB(n.Xb(0),94)),o=0,m=0,a=n.Kc();a.Ob();)i=BB(a.Pb(),231),p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8)),o=e.Math.max(o,p.a),m+=p.a*p.b;for(o=e.Math.max(o,e.Math.sqrt(m)*Gy(MD(mMn(g,(fRn(),Fct))))),y=0,k=0,u=0,t=v=Gy(MD(mMn(g,cat))),r=n.Kc();r.Ob();)i=BB(r.Pb(),231),y+(p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8))).a>o&&(y=0,k+=u+v,u=0),VKn(g,i,y,k),t=e.Math.max(t,y+p.a),u=e.Math.max(u,p.b),y+=p.a+v;return g}function zUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;switch(h=new km,n.a.g){case 3:l=BB(mMn(t.e,(hWn(),Nlt)),15),b=BB(mMn(t.j,Nlt),15),w=BB(mMn(t.f,Nlt),15),e=BB(mMn(t.e,$lt),15),i=BB(mMn(t.j,$lt),15),r=BB(mMn(t.f,$lt),15),gun(a=new Np,l),b.Jc(new yc),gun(a,cL(b,152)?o6(BB(b,152)):cL(b,131)?BB(b,131).a:cL(b,54)?new fy(b):new CT(b)),gun(a,w),gun(c=new Np,e),gun(c,cL(i,152)?o6(BB(i,152)):cL(i,131)?BB(i,131).a:cL(i,54)?new fy(i):new CT(i)),gun(c,r),hon(t.f,Nlt,a),hon(t.f,$lt,c),hon(t.f,xlt,t.f),hon(t.e,Nlt,null),hon(t.e,$lt,null),hon(t.j,Nlt,null),hon(t.j,$lt,null);break;case 1:Frn(h,t.e.a),DH(h,t.i.n),Frn(h,ean(t.j.a)),DH(h,t.a.n),Frn(h,t.f.a);break;default:Frn(h,t.e.a),Frn(h,ean(t.j.a)),Frn(h,t.f.a)}yQ(t.f.a),Frn(t.f.a,h),SZ(t.f,t.e.c),u=BB(mMn(t.e,(HXn(),vgt)),74),s=BB(mMn(t.j,vgt),74),o=BB(mMn(t.f,vgt),74),(u||s||o)&&(PU(f=new km,o),PU(f,s),PU(f,u),hon(t.f,vgt,f)),SZ(t.j,null),MZ(t.j,null),SZ(t.e,null),MZ(t.e,null),PZ(t.a,null),PZ(t.i,null),t.g&&zUn(n,t.g)}function UUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(PFn(),null==n)return null;if((w=bln(c=V7(n)))%4!=0)return null;if(0==(d=w/4|0))return x8(NNt,v6n,25,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,u=0,o=0,s=0,b=0,l=0,h=0,f=x8(NNt,v6n,25,3*d,15,1);b<d-1;b++){if(!(VE(a=c[h++])&&VE(u=c[h++])&&VE(o=c[h++])&&VE(s=c[h++])))return null;t=WLt[a],e=WLt[u],i=WLt[o],r=WLt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24}return VE(a=c[h++])&&VE(u=c[h++])?(t=WLt[a],e=WLt[u],o=c[h++],s=c[h++],-1==WLt[o]||-1==WLt[s]?61==o&&61==s?0!=(15&e)?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=o&&61==s?0!=(3&(i=WLt[o]))?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+2,15,1),0,3*b),g[l++]=(t<<2|e>>4)<<24>>24,g[l]=((15&e)<<4|i>>2&15)<<24>>24,g):null:(i=WLt[o],r=WLt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24,f)):null}function XUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(t,O1n,1),l=BB(mMn(n,(HXn(),Zdt)),218),i=new Wb(n.b);i.a<i.c.c.length;)for(a=0,u=(c=n2(BB(n0(i),29).a)).length;a<u;++a)if((r=c[a]).k==(uSn(),Iut)){if(l==(Mbn(),JPt))for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||Agn(o),0==o.g.c.length||$gn(o);else if(cL(mMn(r,(hWn(),dlt)),17))w=BB(mMn(r,dlt),17),d=BB(DSn(r,(kUn(),CIt)).Kc().Pb(),11),g=BB(DSn(r,oIt).Kc().Pb(),11),p=BB(mMn(d,dlt),11),SZ(w,v=BB(mMn(g,dlt),11)),MZ(w,p),(m=new wA(g.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[v.i.n,v.n,v.a])).a,DH(w.a,m),(m=new wA(d.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).a,DH(w.a,m);else{if(r.j.c.length>=2){for(b=!0,e=BB(n0(h=new Wb(r.j)),11),f=null;h.a<h.c.c.length;)if(f=e,e=BB(n0(h),11),!Nfn(mMn(f,dlt),mMn(e,dlt))){b=!1;break}}else b=!1;for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||uxn(o,b),0==o.g.c.length||oxn(o,b)}PZ(r,null)}HSn(t)}function WUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;return y=n.c[(l1(0,t.c.length),BB(t.c[0],17)).p],T=n.c[(l1(1,t.c.length),BB(t.c[1],17)).p],!(y.a.e.e-y.a.a-(y.b.e.e-y.b.a)==0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)==0||!cL(v=y.b.e.f,10)||(p=BB(v,10),j=n.i[p.p],E=p.c?E7(p.c.a,p,0):-1,a=RQn,E>0&&(c=BB(xq(p.c.a,E-1),10),u=n.i[c.p],M=e.Math.ceil(K$(n.n,c,p)),a=j.a.e-p.d.d-(u.a.e+c.o.b+c.d.a)-M),h=RQn,E<p.c.a.c.length-1&&(s=BB(xq(p.c.a,E+1),10),f=n.i[s.p],M=e.Math.ceil(K$(n.n,s,p)),h=f.a.e-s.d.d-(j.a.e+p.o.b+p.d.a)-M),!(i&&(h$(),rin(A3n),e.Math.abs(a-h)<=A3n||a==h||isNaN(a)&&isNaN(h)))&&(r=aX(y.a),o=-aX(y.b),l=-aX(T.a),m=aX(T.b),g=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)>0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)<0,d=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)<0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)>0,w=y.a.e.e+y.b.a<T.b.e.e+T.a.a,b=y.a.e.e+y.b.a>T.b.e.e+T.a.a,k=0,!g&&!d&&(b?a+l>0?k=l:h-r>0&&(k=r):w&&(a+o>0?k=o:h-m>0&&(k=m))),j.a.e+=k,j.b&&(j.d.e+=k),1)))}function VUn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(r=new UV(t.qf().a,t.qf().b,t.rf().a,t.rf().b),c=new bA,n.c)for(u=new Wb(t.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+t.qf().a,c.d=a.qf().b+t.qf().b,c.b=a.rf().a,c.a=a.rf().b,CPn(r,c);for(h=new Wb(t.Cf());h.a<h.c.c.length;){if(f=(s=BB(n0(h),838)).qf().a+t.qf().a,l=s.qf().b+t.qf().b,n.e&&(c.c=f,c.d=l,c.b=s.rf().a,c.a=s.rf().b,CPn(r,c)),n.d)for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+f,c.d=a.qf().b+l,c.b=a.rf().a,c.a=a.rf().b,CPn(r,c);if(n.b){if(b=new xC(-i,-i),BB(t.We((sWn(),fPt)),174).Hc((lIn(),rIt)))for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),b.a+=a.rf().a+i,b.b+=a.rf().b+i;b.a=e.Math.max(b.a,0),b.b=e.Math.max(b.b,0),X_n(r,s.Bf(),s.zf(),t,s,b,i)}}n.b&&X_n(r,t.Bf(),t.zf(),t,null,null,i),(o=new A_(t.Af())).d=e.Math.max(0,t.qf().b-r.d),o.a=e.Math.max(0,r.d+r.a-(t.qf().b+t.rf().b)),o.b=e.Math.max(0,t.qf().a-r.c),o.c=e.Math.max(0,r.c+r.b-(t.qf().a+t.rf().a)),t.Ef(o)}function QUn(){var n=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F"];return n[34]='\\"',n[92]="\\\\",n[173]="\\u00ad",n[1536]="\\u0600",n[1537]="\\u0601",n[1538]="\\u0602",n[1539]="\\u0603",n[1757]="\\u06dd",n[1807]="\\u070f",n[6068]="\\u17b4",n[6069]="\\u17b5",n[8203]="\\u200b",n[8204]="\\u200c",n[8205]="\\u200d",n[8206]="\\u200e",n[8207]="\\u200f",n[8232]="\\u2028",n[8233]="\\u2029",n[8234]="\\u202a",n[8235]="\\u202b",n[8236]="\\u202c",n[8237]="\\u202d",n[8238]="\\u202e",n[8288]="\\u2060",n[8289]="\\u2061",n[8290]="\\u2062",n[8291]="\\u2063",n[8292]="\\u2064",n[8298]="\\u206a",n[8299]="\\u206b",n[8300]="\\u206c",n[8301]="\\u206d",n[8302]="\\u206e",n[8303]="\\u206f",n[65279]="\\ufeff",n[65529]="\\ufff9",n[65530]="\\ufffa",n[65531]="\\ufffb",n}function YUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(o=new Np,f=t.length,a=Ion(e),s=0;s<f;++s){switch(h=yN(t,YTn(61),s),c=(r=uun(i=fln(a,t.substr(s,h-s)))).Aj().Nh(),fV(t,++h)){case 39:u=lx(t,39,++h),WB(o,new CI(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 34:u=lx(t,34,++h),WB(o,new CI(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 91:WB(o,new CI(i,l=new Np));n:for(;;){switch(fV(t,++h)){case 39:u=lx(t,39,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 34:u=lx(t,34,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));l.c[l.c.length]=null,h+=3}if(!(h<f))break;switch(b1(h,t.length),t.charCodeAt(h)){case 44:break;case 93:break n;default:throw Hp(new dy("Expecting , or ]"))}}s=h+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));WB(o,new CI(i,null)),s=h+3}if(!(s<f))break;if(b1(s,t.length),44!=t.charCodeAt(s))throw Hp(new dy("Expecting ,"))}return iDn(n,o,e)}function JUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(s=BB(BB(h6(n.r,t),21),84),a=JTn(n,t),e=n.u.Hc((lIn(),nIt)),o=s.Kc();o.Ob();)if((u=BB(o.Pb(),111)).c&&!(u.c.d.c.length<=0)){switch(l=u.b.rf(),(f=(h=u.c).i).b=(c=h.n,h.e.a+c.b+c.c),f.a=(r=h.n,h.e.b+r.d+r.a),t.g){case 1:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=-f.a-n.t,WD(h,(G7(),irt));break;case 3:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=l.b+n.t,WD(h,(G7(),crt));break;case 2:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=l.a+n.s,l9(h,(J9(),Yit));break;case 4:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=-f.b-n.s,l9(h,(J9(),Jit))}a=!1}}function ZUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(wWn(),0==NT(iNt)){for(f=x8(INt,sVn,117,cNt.length,0,1),a=0;a<f.length;a++)f[a]=new M0(4);for(i=new Pk,c=0;c<eNt.length;c++){if(h=new M0(4),c<84?(b1(u=2*c,vnt.length),l=vnt.charCodeAt(u),b1(u+1,vnt.length),Yxn(h,l,vnt.charCodeAt(u+1))):Yxn(h,aNt[u=2*(c-84)],aNt[u+1]),mK(o=eNt[c],"Specials")&&Yxn(h,65520,65533),mK(o,gnt)&&(Yxn(h,983040,1048573),Yxn(h,1048576,1114109)),mZ(iNt,o,h),mZ(rNt,o,$Fn(h)),0<(s=i.a.length)?i.a=i.a.substr(0,0):0>s&&(i.a+=rL(x8(ONt,WVn,25,-s,15,1))),i.a+="Is",GO(o,YTn(32))>=0)for(r=0;r<o.length;r++)b1(r,o.length),32!=o.charCodeAt(r)&&NX(i,(b1(r,o.length),o.charCodeAt(r)));else i.a+=""+o;Tdn(i.a,o,!0)}Tdn(pnt,"Cn",!1),Tdn(mnt,"Cn",!0),Yxn(e=new M0(4),0,unt),mZ(iNt,"ALL",e),mZ(rNt,"ALL",$Fn(e)),!SNt&&(SNt=new xp),mZ(SNt,pnt,pnt),!SNt&&(SNt=new xp),mZ(SNt,mnt,mnt),!SNt&&(SNt=new xp),mZ(SNt,"ALL","ALL")}return BB(SJ(t?iNt:rNt,n),136)}function nXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=!1,f=!1,vA(BB(mMn(i,(HXn(),ept)),98))){a=!1,u=!1;n:for(w=new Wb(i.j);w.a<w.c.c.length;)for(b=BB(n0(w),11),d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(b),new Gw(b)])));dAn(d);)if(!qy(TD(mMn(BB(U5(d),11).i,Tdt)))){if(b.j==(kUn(),sIt)){a=!0;break n}if(b.j==SIt){u=!0;break n}}l=u&&!a,f=a&&!u}if(l||f||0==i.b.c.length)p=!f;else{for(h=0,s=new Wb(i.b);s.a<s.c.c.length;)h+=(o=BB(n0(s),70)).n.b+o.o.b/2;p=(h/=i.b.c.length)>=i.o.b/2}p?(g=BB(mMn(i,(hWn(),Klt)),15))?l?c=g:(r=BB(mMn(i,Dft),15))?c=g.gc()<=r.gc()?g:r:(c=new Np,hon(i,Dft,c)):(c=new Np,hon(i,Klt,c)):(r=BB(mMn(i,(hWn(),Dft)),15))?f?c=r:(g=BB(mMn(i,Klt),15))?c=r.gc()<=g.gc()?r:g:(c=new Np,hon(i,Klt,c)):(c=new Np,hon(i,Dft,c)),c.Fc(n),hon(n,(hWn(),Kft),e),t.d==e?(MZ(t,null),e.e.c.length+e.g.c.length==0&&CZ(e,null),gsn(e)):(SZ(t,null),e.e.c.length+e.g.c.length==0&&CZ(e,null)),yQ(t.a)}function tXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I;for(v=new M2(n.b,0),d=0,s=BB((f=t.Kc()).Pb(),19).a,k=0,e=new Rv,E=new fA;v.b<v.d.gc();){for(Px(v.b<v.d.gc()),y=new Wb(BB(v.d.Xb(v.c=v.b++),29).a);y.a<y.c.c.length;){for(w=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(w);)l=BB(U5(w),17),E.a.zc(l,E);for(b=new oz(ZL(fbn(m).a.Kc(),new h));dAn(b);)l=BB(U5(b),17),E.a.Bc(l)}if(d+1==s){for(yR(v,r=new HX(n)),yR(v,c=new HX(n)),M=E.a.ec().Kc();M.Ob();)T=BB(M.Pb(),17),e.a._b(T)||(++k,e.a.zc(T,e)),hon(a=new $vn(n),(HXn(),ept),(QEn(),VCt)),PZ(a,r),Bl(a,(uSn(),Tut)),CZ(g=new CSn,a),qCn(g,(kUn(),CIt)),CZ(S=new CSn,a),qCn(S,oIt),hon(i=new $vn(n),ept,VCt),PZ(i,c),Bl(i,Tut),CZ(p=new CSn,i),qCn(p,CIt),CZ(P=new CSn,i),qCn(P,oIt),SZ(j=new wY,T.c),MZ(j,g),SZ(I=new wY,S),MZ(I,p),SZ(T,P),u=new v3(a,i,j,I,T),hon(a,(hWn(),Rft),u),hon(i,Rft,u),(C=j.c.i).k==Tut&&((o=BB(mMn(C,Rft),305)).d=u,u.g=o);if(!f.Ob())break;s=BB(f.Pb(),19).a}++d}return iln(k)}function eXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(f=0,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)qy(TD(ZAn(i=BB(kpn(r),33),(HXn(),Ggt))))||(GI(ZAn(t,Ldt))===GI((mon(),Nvt))&&GI(ZAn(t,Gdt))!==GI((Vvn(),Eht))&&GI(ZAn(t,Gdt))!==GI((Vvn(),kht))&&!qy(TD(ZAn(t,xdt)))&&GI(ZAn(t,Cdt))===GI((Bfn(),wut))||qy(TD(ZAn(i,$dt)))||(Ypn(i,(hWn(),wlt),iln(f)),++f),wzn(n,i,e));for(f=0,s=new AL((!t.b&&(t.b=new eU(_Ot,t,12,3)),t.b));s.e!=s.i.gc();)u=BB(kpn(s),79),(GI(ZAn(t,(HXn(),Ldt)))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&(Ypn(u,(hWn(),wlt),iln(f)),++f),w=PMn(u),d=OMn(u),h=qy(TD(ZAn(w,wgt))),b=!qy(TD(ZAn(u,Ggt))),l=h&&QIn(u)&&qy(TD(ZAn(u,dgt))),c=JJ(w)==t&&JJ(w)==JJ(d),a=(JJ(w)==t&&d==t)^(JJ(d)==t&&w==t),b&&!l&&(a||c)&&uWn(n,u,t,e);if(JJ(t))for(o=new AL(iQ(JJ(t)));o.e!=o.i.gc();)(w=PMn(u=BB(kpn(o),79)))==t&&QIn(u)&&(l=qy(TD(ZAn(w,(HXn(),wgt))))&&qy(TD(ZAn(u,dgt))))&&uWn(n,u,t,e)}function iXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(OTn(i,"MinWidth layering",1),w=t.b,T=t.a,A=BB(mMn(t,(HXn(),Egt)),19).a,o=BB(mMn(t,Tgt),19).a,n.b=Gy(MD(mMn(t,ypt))),n.d=RQn,k=new Wb(T);k.a<k.c.c.length;)(m=BB(n0(k),10)).k==(uSn(),Cut)&&(P=m.o.b,n.d=e.Math.min(n.d,P));for(n.d=e.Math.max(1,n.d),M=T.c.length,n.c=x8(ANt,hQn,25,M,15,1),n.f=x8(ANt,hQn,25,M,15,1),n.e=x8(xNt,qQn,25,M,15,1),h=0,n.a=0,j=new Wb(T);j.a<j.c.c.length;)(m=BB(n0(j),10)).p=h++,n.c[m.p]=whn(fbn(m)),n.f[m.p]=whn(lbn(m)),n.e[m.p]=m.o.b/n.d,n.a+=n.e[m.p];for(n.b/=n.d,n.a/=M,E=jOn(T),m$(T,QW(new Kd(n))),g=RQn,d=DWn,u=null,O=A,I=A,a=o,c=o,A<0&&(O=BB(Tmt.a.zd(),19).a,I=BB(Tmt.b.zd(),19).a),o<0&&(a=BB(Emt.a.zd(),19).a,c=BB(Emt.b.zd(),19).a),C=O;C<=I;C++)for(r=a;r<=c;r++)v=Gy(MD((S=LBn(n,C,r,T,E)).a)),p=(b=BB(S.b,15)).gc(),(v<g||v==g&&p<d)&&(g=v,d=p,u=b);for(l=u.Kc();l.Ob();){for(f=BB(l.Pb(),15),s=new HX(t),y=f.Kc();y.Ob();)PZ(m=BB(y.Pb(),10),s);w.c[w.c.length]=s}JPn(w),T.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function rXn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(n.b=t,n.a=BB(mMn(t,(HXn(),hgt)),19).a,n.c=BB(mMn(t,lgt),19).a,0==n.c&&(n.c=DWn),g=new M2(t.b,0);g.b<g.d.gc();){for(Px(g.b<g.d.gc()),d=BB(g.d.Xb(g.c=g.b++),29),o=new Np,l=-1,y=-1,m=new Wb(d.a);m.a<m.c.c.length;)v=BB(n0(m),10),F3((q_(),new oz(ZL(hbn(v).a.Kc(),new h))))>=n.a&&(r=yBn(n,v),l=e.Math.max(l,r.b),y=e.Math.max(y,r.d),WB(o,new rI(v,r)));for(E=new Np,f=0;f<l;++f)kG(E,0,(Px(g.b>0),g.a.Xb(g.c=--g.b),yR(g,T=new HX(n.b)),Px(g.b<g.d.gc()),g.d.Xb(g.c=g.b++),T));for(u=new Wb(o);u.a<u.c.c.length;)if(c=BB(n0(u),46),w=BB(c.b,571).a)for(b=new Wb(w);b.a<b.c.c.length;)ukn(n,BB(n0(b),10),Uut,E);for(i=new Np,s=0;s<y;++s)WB(i,(yR(g,M=new HX(n.b)),M));for(a=new Wb(o);a.a<a.c.c.length;)if(c=BB(n0(a),46),j=BB(c.b,571).c)for(k=new Wb(j);k.a<k.c.c.length;)ukn(n,BB(n0(k),10),Xut,i)}for(p=new M2(t.b,0);p.b<p.d.gc();)Px(p.b<p.d.gc()),0==BB(p.d.Xb(p.c=p.b++),29).a.c.length&&fW(p)}function cXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(OTn(i,"Spline edge routing",1),0==t.b.c.length)return t.f.a=0,void HSn(i);v=Gy(MD(mMn(t,(HXn(),Apt)))),o=Gy(MD(mMn(t,Tpt))),u=Gy(MD(mMn(t,kpt))),T=BB(mMn(t,rgt),336)==(Usn(),rmt),E=Gy(MD(mMn(t,cgt))),n.d=t,n.j.c=x8(Ant,HWn,1,0,5,1),n.a.c=x8(Ant,HWn,1,0,5,1),$U(n.k),f=VI((s=BB(xq(t.b,0),29)).a,(dxn(),jyt)),l=VI((d=BB(xq(t.b,t.b.c.length-1),29)).a,jyt),g=new Wb(t.b),p=null,C=0;do{for(RUn(n,p,m=g.a<g.c.c.length?BB(n0(g),29):null),MFn(n),P=0,y=C,b=!p||f&&p==s,w=!m||l&&m==d,(M=_k(rcn(NV(AV(new Rq(null,new w1(n.i,16)),new ya),new ma))))>0?(h=0,p&&(h+=o),h+=(M-1)*u,m&&(h+=o),T&&m&&(h=e.Math.max(h,nxn(m,u,v,E))),h<v&&!b&&!w&&(P=(v-h)/2,h=v),y+=h):!b&&!w&&(y+=v),m&&Tqn(m,y),j=new Wb(n.i);j.a<j.c.c.length;)(k=BB(n0(j),128)).a.c=C,k.a.b=y-C,k.F=P,k.p=!p;gun(n.a,n.i),C=y,m&&(C+=m.c.a),p=m,b=w}while(m);for(c=new Wb(n.j);c.a<c.c.c.length;)a=man(n,r=BB(n0(c),17)),hon(r,(hWn(),$lt),a),S=Dxn(n,r),hon(r,Nlt,S);t.f.a=C,n.d=null,HSn(i)}function aXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(d=0!=n.i,v=!1,g=null,mA(n.e)){if((h=t.gc())>0){for(l=h<100?null:new Fj(h),w=(s=new jcn(t)).g,g=x8(ANt,hQn,25,h,15,1),i=0,m=new gtn(h),r=0;r<n.i;++r){b=u=n.g[r];n:for(p=0;p<2;++p){for(o=h;--o>=0;)if(null!=b?Nfn(b,w[o]):GI(b)===GI(w[o])){g.length<=i&&aHn(g,0,g=x8(ANt,hQn,25,2*g.length,15,1),0,i),g[i++]=r,f9(m,w[o]);break n}if(GI(b)===GI(u))break}}if(s=m,w=m.g,h=i,i>g.length&&aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i),i>0){for(v=!0,c=0;c<i;++c)l=zK(n,BB(b=w[c],72),l);for(a=i;--a>=0;)Lyn(n,g[a]);if(i!=h){for(r=h;--r>=i;)Lyn(s,r);aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i)}t=s}}}else for(t=jyn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(Lyn(n,r),v=!0);if(v){if(null!=g){for(f=1==(e=t.gc())?yZ(n,4,t.Kc().Pb(),null,g[0],d):yZ(n,6,t,g,g[0],d),l=e<100?null:new Fj(e),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l?(l.Ei(f),l.Fi()):ban(n.e,f)}else{for(l=$K(t.gc()),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l&&l.Fi()}return!0}return!1}function uXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m;for((e=new hvn(t)).a||g_n(t),s=lRn(t),o=new pJ,g=new Qxn,d=new Wb(t.a);d.a<d.c.c.length;)for(r=new oz(ZL(lbn(BB(n0(d),10)).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c.i.k!=(uSn(),Mut)&&i.d.i.k!=Mut||JIn(o,upn((f=lzn(n,i,s,g)).d),f.a);for(a=new Np,m=BB(mMn(e.c,(hWn(),Xft)),21).Kc();m.Ob();){switch(v=BB(m.Pb(),61),w=g.c[v.g],b=g.b[v.g],u=g.a[v.g],c=null,p=null,v.g){case 4:c=new UV(n.d.a,w,s.b.a-n.d.a,b-w),p=new UV(n.d.a,w,u,b-w),zH(s,new xC(c.c+c.b,c.d)),zH(s,new xC(c.c+c.b,c.d+c.a));break;case 2:c=new UV(s.a.a,w,n.c.a-s.a.a,b-w),p=new UV(n.c.a-u,w,u,b-w),zH(s,new xC(c.c,c.d)),zH(s,new xC(c.c,c.d+c.a));break;case 1:c=new UV(w,n.d.b,b-w,s.b.b-n.d.b),p=new UV(w,n.d.b,b-w,u),zH(s,new xC(c.c,c.d+c.a)),zH(s,new xC(c.c+c.b,c.d+c.a));break;case 3:c=new UV(w,s.a.b,b-w,n.c.b-s.a.b),p=new UV(w,n.c.b-u,b-w,u),zH(s,new xC(c.c,c.d)),zH(s,new xC(c.c+c.b,c.d))}c&&((l=new nm).d=v,l.b=c,l.c=p,l.a=JQ(BB(h6(o,upn(v)),21)),a.c[a.c.length]=l)}return gun(e.b,a),e.d=Bhn(nGn(s)),e}function oXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(null==i.p[t.p]){o=!0,i.p[t.p]=0,u=t,d=i.o==(oZ(),ryt)?KQn:RQn;do{c=n.b.e[u.p],a=u.c.a.c.length,i.o==ryt&&c>0||i.o==cyt&&c<a-1?(s=null,h=null,s=i.o==cyt?BB(xq(u.c.a,c+1),10):BB(xq(u.c.a,c-1),10),oXn(n,h=i.g[s.p],i),d=n.e.bg(d,t,u),i.j[t.p]==t&&(i.j[t.p]=i.j[h.p]),i.j[t.p]==i.j[h.p]?(w=K$(n.d,u,s),i.o==cyt?(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d-w-u.d.a-u.o.b-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.min(l,d)):i.p[t.p]=e.Math.min(r,e.Math.min(l,d))):(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])+s.o.b+s.d.a+w+u.d.d-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.max(l,d)):i.p[t.p]=e.Math.max(r,e.Math.max(l,d)))):(w=Gy(MD(mMn(n.a,(HXn(),Opt)))),b=krn(n,i.j[t.p]),f=krn(n,i.j[h.p]),i.o==cyt?U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])+u.o.b+u.d.a+w-(Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d)):U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])-u.d.d-Gy(i.p[h.p])-Gy(i.d[s.p])-s.o.b-s.d.a-w))):d=n.e.bg(d,t,u),u=i.a[u.p]}while(u!=t);Ov(n.e,t)}}function sXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(f=t,h=new pJ,l=new pJ,c=N2(f,x6n),GSn((i=new fQ(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new HL(h,h.c))).Kc();d.Ob();)for(w=BB(d.Pb(),202),u=BB(h6(h,w),21).Kc();u.Ob();){if(a=u.Pb(),!(b=BB(sen(n.d,a),202)))throw r=R2(f,q6n),Hp(new ek(V6n+a+Q6n+r+W6n));!w.e&&(w.e=new hK(FOt,w,10,9)),f9(w.e,b)}for(p=(l.i||(l.i=new HL(l,l.c))).Kc();p.Ob();)for(g=BB(p.Pb(),202),s=BB(h6(l,g),21).Kc();s.Ob();){if(o=s.Pb(),!(b=BB(sen(n.d,o),202)))throw r=R2(f,q6n),Hp(new ek(V6n+o+Q6n+r+W6n));!g.g&&(g.g=new hK(FOt,g,9,10)),f9(g.g,b)}!e.b&&(e.b=new hK(KOt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new hK(KOt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new hK(KOt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new hK(KOt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new eU(FOt,e,6,6)),e.a).i&&(Svn(v=BB(Wtn((!e.a&&(e.a=new eU(FOt,e,6,6)),e.a),0),202))||Pvn(v)||(Lin(v,BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),Nin(v,BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82))))}function hXn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,k=(m=n.a).length;y<k;++y){for(v=m[y],s=DWn,h=DWn,w=new Wb(v.e);w.a<w.c.c.length;)(a=(l=BB(n0(w),10)).c?E7(l.c.a,l,0):-1)>0?(f=BB(xq(l.c.a,a-1),10),T=K$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+T)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a<l.c.a.c.length-1?(f=BB(xq(l.c.a,a+1),10),T=K$(n.b,l,f),p=f.n.b-f.d.d-(l.n.b+l.o.b+l.d.a+T)):p=2*l.n.b,h=e.Math.min(p,h);for(o=DWn,c=!1,S=new Wb((r=BB(xq(v.e,0),10)).j);S.a<S.c.c.length;)for(M=BB(n0(S),11),d=r.n.b+M.n.b+M.a.b,i=new Wb(M.e);i.a<i.c.c.length;)t=(j=BB(n0(i),17).c).i.n.b+j.n.b+j.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);for(E=new Wb((u=BB(xq(v.e,v.e.c.length-1),10)).j);E.a<E.c.c.length;)for(j=BB(n0(E),11),d=u.n.b+j.n.b+j.a.b,i=new Wb(j.g);i.a<i.c.c.length;)t=(M=BB(n0(i),17).d).i.n.b+M.n.b+M.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);if(c&&0!=o)for(b=new Wb(v.e);b.a<b.c.c.length;)(l=BB(n0(b),10)).n.b+=o}}function fXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.e,t)){if(FT(BB(RX(n.e,t),53),e))return-1}else VW(n.e,t,new Rv);if(hU(n.e,e)){if(FT(BB(RX(n.a,e),53),t))return 1}else VW(n.e,e,new Rv);if(n.c==(mon(),xvt)||!Lx(t,(hWn(),wlt))||!Lx(e,(hWn(),wlt))){if(o=BB(EN(M4(Qon(AV(new Rq(null,new w1(t.j,16)),new sc)),new hc)),11),h=BB(EN(M4(Qon(AV(new Rq(null,new w1(e.j,16)),new fc)),new lc)),11),o&&h){if(u=o.i,s=h.i,u&&u==s){for(l=new Wb(u.j);l.a<l.c.c.length;){if((f=BB(n0(l),11))==o)return aKn(n,e,t),-1;if(f==h)return aKn(n,t,e),1}return E$(iEn(n,t),iEn(n,e))}for(d=0,g=(w=n.d).length;d<g;++d){if((b=w[d])==u)return aKn(n,e,t),-1;if(b==s)return aKn(n,t,e),1}}if(!Lx(t,(hWn(),wlt))||!Lx(e,wlt))return(r=iEn(n,t))>(a=iEn(n,e))?aKn(n,t,e):aKn(n,e,t),r<a?-1:r>a?1:0}return(i=BB(mMn(t,(hWn(),wlt)),19).a)>(c=BB(mMn(e,wlt),19).a)?aKn(n,t,e):aKn(n,e,t),i<c?-1:i>c?1:0}function lXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(qy(TD(ZAn(t,(sWn(),zSt)))))return SQ(),SQ(),set;if(o=0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,s=!(h=yIn(t)).dc(),o||s){if(!(r=BB(ZAn(t,mPt),149)))throw Hp(new rk("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(d=OC(r,(hAn(),nAt)),Ngn(t),!o&&s&&!d)return SQ(),SQ(),set;if(u=new Np,GI(ZAn(t,ESt))===GI((ufn(),pCt))&&(OC(r,YOt)||OC(r,QOt)))for(l=pRn(n,t),Frn(b=new YT,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=b.b;)Ngn(f=BB(0==b.b?null:(Px(0!=b.b),Atn(b,b.a.a)),33)),GI(ZAn(f,ESt))===GI(mCt)||P8(f,eSt)&&!j5(r,ZAn(f,mPt))?(gun(u,lXn(n,f,e,i)),Ypn(f,ESt,mCt),KKn(f)):Frn(b,(!f.a&&(f.a=new eU(UOt,f,10,11)),f.a));else for(l=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,a=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));a.e!=a.i.gc();)gun(u,lXn(n,c=BB(kpn(a),33),e,i)),KKn(c);for(w=new Wb(u);w.a<w.c.c.length;)Ypn(BB(n0(w),79),zSt,(hN(),!0));return Ugn(t,r,mcn(i,l)),w_n(u),s&&d?h:(SQ(),SQ(),set)}return SQ(),SQ(),set}function bXn(n,t,e,i,r,c,a,u,o){var s,h,f,l,b,w,d;switch(b=e,Bl(h=new $vn(o),(uSn(),Mut)),hon(h,(hWn(),Yft),a),hon(h,(HXn(),ept),(QEn(),XCt)),d=Gy(MD(n.We(tpt))),hon(h,tpt,d),CZ(f=new CSn,h),t!=QCt&&t!=YCt||(b=i>=0?hwn(u):Tln(hwn(u)),n.Ye(upt,b)),s=new Gj,l=!1,n.Xe(npt)?(Hx(s,BB(n.We(npt),8)),l=!0):yL(s,a.a/2,a.b/2),b.g){case 4:hon(h,kgt,(Tbn(),Flt)),hon(h,Gft,(Jun(),$ht)),h.o.b=a.b,d<0&&(h.o.a=-d),qCn(f,(kUn(),oIt)),l||(s.a=a.a),s.a-=a.a;break;case 2:hon(h,kgt,(Tbn(),Hlt)),hon(h,Gft,(Jun(),Oht)),h.o.b=a.b,d<0&&(h.o.a=-d),qCn(f,(kUn(),CIt)),l||(s.a=0);break;case 1:hon(h,ilt,(z7(),Cft)),h.o.a=a.a,d<0&&(h.o.b=-d),qCn(f,(kUn(),SIt)),l||(s.b=a.b),s.b-=a.b;break;case 3:hon(h,ilt,(z7(),Sft)),h.o.a=a.a,d<0&&(h.o.b=-d),qCn(f,(kUn(),sIt)),l||(s.b=0)}if(Hx(f.n,s),hon(h,npt,s),t==UCt||t==WCt||t==XCt){if(w=0,t==UCt&&n.Xe(ipt))switch(b.g){case 1:case 2:w=BB(n.We(ipt),19).a;break;case 3:case 4:w=-BB(n.We(ipt),19).a}else switch(b.g){case 4:case 2:w=c.b,t==WCt&&(w/=r.b);break;case 1:case 3:w=c.a,t==WCt&&(w/=r.a)}hon(h,Tlt,w)}return hon(h,Qft,b),h}function wXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E;if((e=Gy(MD(mMn(n.a.j,(HXn(),_dt)))))<-1||!n.a.i||LK(BB(mMn(n.a.o,ept),98))||abn(n.a.o,(kUn(),oIt)).gc()<2&&abn(n.a.o,CIt).gc()<2)return!0;if(n.a.c.Rf())return!1;for(y=0,m=0,v=new Np,o=0,s=(u=n.a.e).length;o<s;++o){for(b=0,d=(l=u[o]).length;b<d;++b)if((f=l[b]).k!=(uSn(),Iut)){for(i=n.b[f.c.p][f.p],f.k==Mut?(i.b=1,BB(mMn(f,(hWn(),dlt)),11).j==(kUn(),oIt)&&(m+=i.a)):(E=abn(f,(kUn(),CIt))).dc()||!tL(E,new Nc)?i.c=1:((r=abn(f,oIt)).dc()||!tL(r,new Lc))&&(y+=i.a),a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);for(j=new oz(new WL((g=Wen(Pun(Gk(xnt,1),HWn,20,0,[abn(f,(kUn(),sIt)),abn(f,SIt)]))).a.length,g.a));dAn(j);)k=BB(U5(j),11),(p=BB(mMn(k,(hWn(),Elt)),10))&&(y+=i.c,m+=i.b,X8(n,i,p))}else v.c[v.c.length]=f;for(w=new Wb(v);w.a<w.c.c.length;)for(f=BB(n0(w),10),i=n.b[f.c.p][f.p],a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);v.c=x8(Ant,HWn,1,0,5,1)}return(0==(t=y+m)?RQn:(y-m)/t)>=e}function dXn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=Swn((SQ(),new Hb(new Ob(lAt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=Swn((SQ(),new Hb(new Ob(lAt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=Swn((SQ(),new Hb(new Ob(lAt.d))));n.postMessage({id:e.id,data:c});break;case"register":lGn(e.algorithms),n.postMessage({id:e.id});break;case"layout":xBn(e.graph,e.layoutOptions||{},e.options||{}),n.postMessage({id:e.id,data:e.graph})}},this.saveDispatch=function(e){try{t.dispatch(e)}catch(i){n.postMessage({id:e.data.id,error:i})}}}function e(t){var e=this;this.dispatcher=new n({postMessage:function(n){e.onmessage({data:n})}}),this.postMessage=function(n){setTimeout((function(){e.dispatcher.saveDispatch({data:n})}),0)}}if(aE(),typeof document===gYn&&typeof self!==gYn){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==gYn&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function gXn(n){n.N||(n.N=!0,n.b=kan(n,0),Rrn(n.b,0),Rrn(n.b,1),Rrn(n.b,2),n.bb=kan(n,1),Rrn(n.bb,0),Rrn(n.bb,1),n.fb=kan(n,2),Rrn(n.fb,3),Rrn(n.fb,4),Krn(n.fb,5),n.qb=kan(n,3),Rrn(n.qb,0),Krn(n.qb,1),Krn(n.qb,2),Rrn(n.qb,3),Rrn(n.qb,4),Krn(n.qb,5),Rrn(n.qb,6),n.a=jan(n,4),n.c=jan(n,5),n.d=jan(n,6),n.e=jan(n,7),n.f=jan(n,8),n.g=jan(n,9),n.i=jan(n,10),n.j=jan(n,11),n.k=jan(n,12),n.n=jan(n,13),n.o=jan(n,14),n.p=jan(n,15),n.q=jan(n,16),n.s=jan(n,17),n.r=jan(n,18),n.t=jan(n,19),n.u=jan(n,20),n.v=jan(n,21),n.w=jan(n,22),n.B=jan(n,23),n.A=jan(n,24),n.C=jan(n,25),n.D=jan(n,26),n.F=jan(n,27),n.G=jan(n,28),n.H=jan(n,29),n.J=jan(n,30),n.I=jan(n,31),n.K=jan(n,32),n.M=jan(n,33),n.L=jan(n,34),n.P=jan(n,35),n.Q=jan(n,36),n.R=jan(n,37),n.S=jan(n,38),n.T=jan(n,39),n.U=jan(n,40),n.V=jan(n,41),n.X=jan(n,42),n.W=jan(n,43),n.Y=jan(n,44),n.Z=jan(n,45),n.$=jan(n,46),n._=jan(n,47),n.ab=jan(n,48),n.cb=jan(n,49),n.db=jan(n,50),n.eb=jan(n,51),n.gb=jan(n,52),n.hb=jan(n,53),n.ib=jan(n,54),n.jb=jan(n,55),n.kb=jan(n,56),n.lb=jan(n,57),n.mb=jan(n,58),n.nb=jan(n,59),n.ob=jan(n,60),n.pb=jan(n,61))}function pXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.a)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.a+d.o.a+d.d.c);else m=t.f.a-t.c.a;for(m-=t.c.a,g=new Wb(n);g.a<g.c.c.length;){switch(Zp((d=BB(n0(g),10)).n,m-d.o.a),cH(d.f),Vmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Zp(BB(mMn(d,spt),8),m-d.o.a),BB(mMn(d,kdt),248).g){case 1:hon(d,kdt,(wvn(),$Mt));break;case 2:hon(d,kdt,(wvn(),AMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Zp((y=BB(n0(k),11)).n,v.a-y.o.a),Zp(y.a,y.o.a),qCn(y,Icn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a=m-i.a;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).a=m-o.a;for(b=new Wb(c.b);b.a<b.c.c.length;)Zp((f=BB(n0(b),70)).n,m-f.o.a)}for(w=new Wb(y.f);w.a<w.c.c.length;)Zp((f=BB(n0(w),70)).n,y.o.a-f.o.a)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Icn(BB(mMn(d,Qft),61))),YMn(d)),l=new Wb(d.b);l.a<l.c.c.length;)Vmn(f=BB(n0(l),70)),Zp(f.n,v.a-f.o.a)}}function vXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.b)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.b+d.o.b+d.d.a);else m=t.f.b-t.c.b;for(m-=t.c.b,g=new Wb(n);g.a<g.c.c.length;){switch(Jp((d=BB(n0(g),10)).n,m-d.o.b),aH(d.f),Qmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Jp(BB(mMn(d,spt),8),m-d.o.b),BB(mMn(d,kdt),248).g){case 3:hon(d,kdt,(wvn(),IMt));break;case 4:hon(d,kdt,(wvn(),LMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Jp((y=BB(n0(k),11)).n,v.b-y.o.b),Jp(y.a,y.o.b),qCn(y,Ocn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).b=m-i.b;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).b=m-o.b;for(b=new Wb(c.b);b.a<b.c.c.length;)Jp((f=BB(n0(b),70)).n,m-f.o.b)}for(w=new Wb(y.f);w.a<w.c.c.length;)Jp((f=BB(n0(w),70)).n,y.o.b-f.o.b)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Ocn(BB(mMn(d,Qft),61))),gln(d)),l=new Wb(d.b);l.a<l.c.c.length;)Qmn(f=BB(n0(l),70)),Jp(f.n,v.b-f.o.b)}}function mXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(f=!1,s=n+1,l1(n,t.c.length),a=(h=BB(t.c[n],200)).a,u=null,c=0;c<h.a.c.length;c++)if(l1(c,a.c.length),!(r=BB(a.c[c],187)).c)if(0!=r.b.c.length){if(r.k||(u&&Gmn(u),Tvn(r,(u=new KJ(u?u.e+u.d+i:0,h.f,i)).e+u.d,h.f),WB(h.d,u),xcn(u,r),r.k=!0),o=null,b=null,c<h.a.c.length-1?b=BB(xq(h.a,c+1),187):s<t.c.length&&0!=(l1(s,t.c.length),BB(t.c[s],200)).a.c.length&&(b=BB(xq((l1(s,t.c.length),BB(t.c[s],200)).a,0),187)),l=!1,(o=b)&&(l=!Nfn(o.j,h)),o){if(0==o.b.c.length){Tkn(h,o);break}if(p9(r,e-r.s),Gmn(r.q),f|=nSn(h,r,o,e,i),0==o.b.c.length)for(Tkn((l1(s,t.c.length),BB(t.c[s],200)),o),o=null;t.c.length>s&&0==(l1(s,t.c.length),BB(t.c[s],200)).a.c.length;)y7(t,(l1(s,t.c.length),t.c[s]));if(!o){--c;continue}if(A_n(t,h,r,o,l,e,s,i)){f=!0;continue}if(l){if(JBn(t,h,r,o,e,s,i)){f=!0;continue}if(Ahn(h,r)){r.c=!0,f=!0;continue}}else if(Ahn(h,r)){r.c=!0,f=!0;continue}if(f)continue}Ahn(h,r)?(r.c=!0,f=!0,o&&(o.k=!1)):Gmn(r.q)}else $T(),Tkn(h,r),--c,f=!0;return f}function yXn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(g=0,P=0,h=new Wb(n.b);h.a<h.c.c.length;)(s=BB(n0(h),157)).c&&ozn(s.c),g=e.Math.max(g,iG(s)),P+=iG(s)*eG(s);for(p=P/n.b.c.length,S=hjn(n.b,p),P+=n.b.c.length*S,g=e.Math.max(g,e.Math.sqrt(P*u))+i.b,O=i.b,A=i.d,w=0,l=i.b+i.c,DH(M=new YT,iln(0)),E=new YT,f=new M2(n.b,0),d=null,o=new Np;f.b<f.d.gc();)Px(f.b<f.d.gc()),I=iG(s=BB(f.d.Xb(f.c=f.b++),157)),b=eG(s),O+I>g&&(a&&(fO(E,w),fO(M,iln(f.b-1)),WB(n.d,d),o.c=x8(Ant,HWn,1,0,5,1)),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+I)),o.c[o.c.length]=s,Mpn(s,O,A),l=e.Math.max(l,O+I+i.c),w=e.Math.max(w,b),O+=I+t,d=s;if(gun(n.a,o),WB(n.d,BB(xq(o,o.c.length-1),157)),l=e.Math.max(l,r),(C=A+w+i.a)<c&&(w+=c-C,C=c),a)for(O=i.b,f=new M2(n.b,0),fO(M,iln(n.b.c.length)),m=BB(b3(T=spn(M,0)),19).a,fO(E,w),j=spn(E,0),k=0;f.b<f.d.gc();)f.b==m&&(O=i.b,k=Gy(MD(b3(j))),m=BB(b3(T),19).a),Px(f.b<f.d.gc()),Udn(s=BB(f.d.Xb(f.c=f.b++),157),k),f.b==m&&(v=l-O-i.c,y=iG(s),zdn(s,v),Fln(s,(v-y)/2,0)),O+=iG(s)+t;return new xC(l,C)}function kXn(n){var t,e,i,r;switch(r=null,n.c){case 6:return n.Vl();case 13:return n.Wl();case 23:return n.Nl();case 22:return n.Sl();case 18:return n.Pl();case 8:QXn(n),wWn(),r=oNt;break;case 9:return n.vl(!0);case 19:return n.wl();case 10:switch(n.a){case 100:case 68:case 119:case 87:case 115:case 83:return r=n.ul(n.a),QXn(n),r;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:(t=n.tl())<BQn?(wWn(),wWn(),r=new oG(0,t)):r=pz(Xln(t));break;case 99:return n.Fl();case 67:return n.Al();case 105:return n.Il();case 73:return n.Bl();case 103:return n.Gl();case 88:return n.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n.xl();case 80:case 112:if(!(r=DIn(n,n.a)))throw Hp(new ak(kWn((u$(),O8n))));break;default:r=QH(n.a)}QXn(n);break;case 0:if(93==n.a||123==n.a||125==n.a)throw Hp(new ak(kWn((u$(),I8n))));r=QH(n.a),e=n.a,QXn(n),(64512&e)==HQn&&0==n.c&&56320==(64512&n.a)&&((i=x8(ONt,WVn,25,2,15,1))[0]=e&QVn,i[1]=n.a&QVn,r=oU(pz(Bdn(i,0,i.length)),0),QXn(n));break;default:throw Hp(new ak(kWn((u$(),I8n))))}return r}function jXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(r=new Np,c=DWn,a=DWn,u=DWn,i)for(c=n.f.a,d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).g);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((f=BB(gx(o.a),8)).a<c&&(a=c-f.a,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=f.a),f.a<=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,1),8).b-f.b)))));else for(d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).e);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((b=BB(px(o.a),8)).a>c&&(a=b.a-c,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=b.a),b.a>=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,o.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&u>t.o.b/2){for(CZ(w=new CSn,t),qCn(w,(kUn(),sIt)),w.n.a=t.o.a/2,CZ(g=new CSn,t),qCn(g,SIt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Wb(r);s.a<s.c.c.length;)o=BB(n0(s),17),i?(h=BB(dH(o.a),8),(0==o.a.b?g1(o.d):BB(gx(o.a),8)).b>=h.b?SZ(o,g):SZ(o,w)):(h=BB(gH(o.a),8),(0==o.a.b?g1(o.c):BB(px(o.a),8)).b>=h.b?MZ(o,g):MZ(o,w)),(l=BB(mMn(o,(HXn(),vgt)),74))&&ywn(l,h,!0);t.n.a=c-t.o.a/2}}function EXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),h=BB(sen(n.g,kIn(zJ(s,T6n))),33),i=null,(a=zJ(s,"sourcePort"))&&(i=kIn(a)),f=BB(sen(n.j,i),118),!h)throw Hp(new ek("An edge must have a source node (edge id: '"+Qdn(s)+W6n));if(f&&!wW(WJ(f),h))throw Hp(new ek("The source port of an edge must be a port of the edge's source node (edge id: '"+R2(s,q6n)+W6n));if(!o.b&&(o.b=new hK(KOt,o,4,7)),f9(o.b,f||h),l=BB(sen(n.g,kIn(zJ(s,Y6n))),33),r=null,(u=zJ(s,"targetPort"))&&(r=kIn(u)),b=BB(sen(n.j,r),118),!l)throw Hp(new ek("An edge must have a target node (edge id: '"+Qdn(s)+W6n));if(b&&!wW(WJ(b),l))throw Hp(new ek("The target port of an edge must be a port of the edge's target node (edge id: '"+R2(s,q6n)+W6n));if(!o.c&&(o.c=new hK(KOt,o,5,8)),f9(o.c,b||l),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),s$n(s,o),xon(n,s,o)}function TXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;return f=CFn(HN(n,(kUn(),wIt)),t),w=ayn(HN(n,dIt),t),y=ayn(HN(n,EIt),t),T=uyn(HN(n,MIt),t),l=uyn(HN(n,hIt),t),v=ayn(HN(n,jIt),t),d=ayn(HN(n,gIt),t),j=ayn(HN(n,TIt),t),k=ayn(HN(n,fIt),t),M=uyn(HN(n,bIt),t),p=ayn(HN(n,yIt),t),m=ayn(HN(n,mIt),t),E=ayn(HN(n,lIt),t),S=uyn(HN(n,kIt),t),b=uyn(HN(n,pIt),t),g=ayn(HN(n,vIt),t),e=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.a,T.a,j.a,S.a])),i=Lon(Pun(Gk(xNt,1),qQn,25,15,[w.a,f.a,y.a,g.a])),r=p.a,c=Lon(Pun(Gk(xNt,1),qQn,25,15,[d.a,l.a,k.a,b.a])),s=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.b,w.b,d.b,m.b])),o=Lon(Pun(Gk(xNt,1),qQn,25,15,[T.b,f.b,l.b,g.b])),h=M.b,u=Lon(Pun(Gk(xNt,1),qQn,25,15,[j.b,y.b,k.b,E.b])),w9(HN(n,wIt),e+r,s+h),w9(HN(n,vIt),e+r,s+h),w9(HN(n,dIt),e+r,0),w9(HN(n,EIt),e+r,s+h+o),w9(HN(n,MIt),0,s+h),w9(HN(n,hIt),e+r+i,s+h),w9(HN(n,gIt),e+r+i,0),w9(HN(n,TIt),0,s+h+o),w9(HN(n,fIt),e+r+i,s+h+o),w9(HN(n,bIt),0,s),w9(HN(n,yIt),e,0),w9(HN(n,lIt),0,s+h+o),w9(HN(n,pIt),e+r+i,0),(a=new Gj).a=Lon(Pun(Gk(xNt,1),qQn,25,15,[e+i+r+c,M.a,m.a,E.a])),a.b=Lon(Pun(Gk(xNt,1),qQn,25,15,[s+o+h+u,p.b,S.b,b.b])),a}function MXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g;for(d=new Np,l=new Wb(n.d.b);l.a<l.c.c.length;)for(w=new Wb(BB(n0(l),29).a);w.a<w.c.c.length;){for(b=BB(n0(w),10),r=BB(RX(n.f,b),57),o=new oz(ZL(lbn(b).a.Kc(),new h));dAn(o);)if(s=!0,f=null,(i=spn((a=BB(U5(o),17)).a,0)).b!=i.d.c){for(t=BB(b3(i),8),e=null,a.c.j==(kUn(),sIt)&&((g=new PBn(t,new xC(t.a,r.d.d),r,a)).f.a=!0,g.a=a.c,d.c[d.c.length]=g),a.c.j==SIt&&((g=new PBn(t,new xC(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.c,d.c[d.c.length]=g);i.b!=i.d.c;)e=BB(b3(i),8),aen(t.b,e.b)||(f=new PBn(t,e,null,a),d.c[d.c.length]=f,s&&(s=!1,e.b<r.d.d?f.f.a=!0:e.b>r.d.d+r.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))),i.b!=i.d.c&&(t=e);f&&(c=BB(RX(n.f,a.d.i),57),t.b<c.d.d?f.f.a=!0:t.b>c.d.d+c.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))}for(u=new oz(ZL(fbn(b).a.Kc(),new h));dAn(u);)0!=(a=BB(U5(u),17)).a.b&&(t=BB(px(a.a),8),a.d.j==(kUn(),sIt)&&((g=new PBn(t,new xC(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,d.c[d.c.length]=g),a.d.j==SIt&&((g=new PBn(t,new xC(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,d.c[d.c.length]=g))}return d}function SXn(n,t,e){var i,r,c,a,u,o,s;if(OTn(e,"Network simplex node placement",1),n.e=t,n.n=BB(mMn(t,(hWn(),Alt)),304),oqn(n),REn(n),JT(wnn(new Rq(null,new w1(n.e.b,16)),new Hc),new cg(n)),JT(AV(wnn(AV(wnn(new Rq(null,new w1(n.e.b,16)),new ta),new ea),new ia),new ra),new rg(n)),qy(TD(mMn(n.e,(HXn(),xgt))))&&(OTn(c=mcn(e,1),"Straight Edges Pre-Processing",1),jzn(n),HSn(c)),Mvn(n.f),r=BB(mMn(t,xpt),19).a*n.f.a.c.length,WKn(Qk(Yk(B_(n.f),r),!1),mcn(e,1)),0!=n.d.a.gc()){for(OTn(c=mcn(e,1),"Flexible Where Space Processing",1),a=BB($N(Oz($V(new Rq(null,new w1(n.f.a,16)),new qc),new Dc)),19).a,u=BB($N(Iz($V(new Rq(null,new w1(n.f.a,16)),new Gc),new Rc)),19).a-a,o=AN(new qv,n.f),s=AN(new qv,n.f),UNn(aM(cM(rM(uM(new Hv,2e4),u),o),s)),JT(AV(AV(LU(n.i),new zc),new Uc),new zV(a,o,u,s)),i=n.d.a.ec().Kc();i.Ob();)BB(i.Pb(),213).g=1;WKn(Qk(Yk(B_(n.f),r),!1),mcn(c,1)),HSn(c)}qy(TD(mMn(t,xgt)))&&(OTn(c=mcn(e,1),"Straight Edges Post-Processing",1),SPn(n),HSn(c)),QGn(n),n.e=null,n.f=null,n.i=null,n.c=null,$U(n.k),n.j=null,n.a=null,n.o=null,n.d.a.$b(),HSn(e)}function PXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(u=new Wb(n.a.b);u.a<u.c.c.length;)for(m=new Wb(BB(n0(u),29).a);m.a<m.c.c.length;)v=BB(n0(m),10),t.g[v.p]=v,t.a[v.p]=v,t.d[v.p]=0;for(o=n.a.b,t.c==(gJ(),nyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new CT(o)),a=o.Kc();a.Ob();)for(b=-1,l=BB(a.Pb(),29).a,t.o==(oZ(),cyt)&&(b=DWn,l=cL(l,152)?o6(BB(l,152)):cL(l,131)?BB(l,131).a:cL(l,54)?new fy(l):new CT(l)),k=l.Kc();k.Ob();)if(y=BB(k.Pb(),10),f=null,(f=t.c==nyt?BB(xq(n.b.f,y.p),15):BB(xq(n.b.b,y.p),15)).gc()>0)if(r=f.gc(),s=CJ(e.Math.floor((r+1)/2))-1,c=CJ(e.Math.ceil((r+1)/2))-1,t.o==cyt)for(h=c;h>=s;h--)t.a[y.p]==y&&(d=BB(f.Xb(h),46),w=BB(d.a,10),!FT(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=y,t.g[y.p]=t.g[w.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[y.p]==y&&(p=BB(f.Xb(h),46),g=BB(p.a,10),!FT(i,p.b)&&b<n.b.e[g.p]&&(t.a[g.p]=y,t.g[y.p]=t.g[g.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[g.p]))}function CXn(){CXn=O,eE(),POt=gOt.a,BB(Wtn(QQ(gOt.a),0),18),kOt=gOt.f,BB(Wtn(QQ(gOt.f),0),18),BB(Wtn(QQ(gOt.f),1),34),SOt=gOt.n,BB(Wtn(QQ(gOt.n),0),34),BB(Wtn(QQ(gOt.n),1),34),BB(Wtn(QQ(gOt.n),2),34),BB(Wtn(QQ(gOt.n),3),34),jOt=gOt.g,BB(Wtn(QQ(gOt.g),0),18),BB(Wtn(QQ(gOt.g),1),34),vOt=gOt.c,BB(Wtn(QQ(gOt.c),0),18),BB(Wtn(QQ(gOt.c),1),18),EOt=gOt.i,BB(Wtn(QQ(gOt.i),0),18),BB(Wtn(QQ(gOt.i),1),18),BB(Wtn(QQ(gOt.i),2),18),BB(Wtn(QQ(gOt.i),3),18),BB(Wtn(QQ(gOt.i),4),34),TOt=gOt.j,BB(Wtn(QQ(gOt.j),0),18),mOt=gOt.d,BB(Wtn(QQ(gOt.d),0),18),BB(Wtn(QQ(gOt.d),1),18),BB(Wtn(QQ(gOt.d),2),18),BB(Wtn(QQ(gOt.d),3),18),BB(Wtn(QQ(gOt.d),4),34),BB(Wtn(QQ(gOt.d),5),34),BB(Wtn(QQ(gOt.d),6),34),BB(Wtn(QQ(gOt.d),7),34),pOt=gOt.b,BB(Wtn(QQ(gOt.b),0),34),BB(Wtn(QQ(gOt.b),1),34),yOt=gOt.e,BB(Wtn(QQ(gOt.e),0),34),BB(Wtn(QQ(gOt.e),1),34),BB(Wtn(QQ(gOt.e),2),34),BB(Wtn(QQ(gOt.e),3),34),BB(Wtn(QQ(gOt.e),4),18),BB(Wtn(QQ(gOt.e),5),18),BB(Wtn(QQ(gOt.e),6),18),BB(Wtn(QQ(gOt.e),7),18),BB(Wtn(QQ(gOt.e),8),18),BB(Wtn(QQ(gOt.e),9),18),BB(Wtn(QQ(gOt.e),10),34),MOt=gOt.k,BB(Wtn(QQ(gOt.k),0),34),BB(Wtn(QQ(gOt.k),1),34)}function IXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(M=new YT,j=new YT,g=-1,o=new Wb(n);o.a<o.c.c.length;){for((a=BB(n0(o),128)).s=g--,h=0,m=0,c=new Wb(a.t);c.a<c.c.c.length;)m+=(i=BB(n0(c),268)).c;for(r=new Wb(a.i);r.a<r.c.c.length;)h+=(i=BB(n0(r),268)).c;a.n=h,a.u=m,0==m?r5(j,a,j.c.b,j.c):0==h&&r5(M,a,M.c.b,M.c)}for(P=S4(n),d=(f=n.c.length)+1,p=f-1,b=new Np;0!=P.a.gc();){for(;0!=j.b;)Px(0!=j.b),k=BB(Atn(j,j.a.a),128),P.a.Bc(k),k.s=p--,cLn(k,M,j);for(;0!=M.b;)Px(0!=M.b),E=BB(Atn(M,M.a.a),128),P.a.Bc(E),E.s=d++,cLn(E,M,j);for(w=_Vn,s=P.a.ec().Kc();s.Ob();)(v=(a=BB(s.Pb(),128)).u-a.n)>=w&&(v>w&&(b.c=x8(Ant,HWn,1,0,5,1),w=v),b.c[b.c.length]=a);0!=b.c.length&&(l=BB(xq(b,pvn(t,b.c.length)),128),P.a.Bc(l),l.s=d++,cLn(l,M,j),b.c=x8(Ant,HWn,1,0,5,1))}for(y=n.c.length+1,u=new Wb(n);u.a<u.c.c.length;)(a=BB(n0(u),128)).s<f&&(a.s+=y);for(T=new Wb(n);T.a<T.c.c.length;)for(e=new M2((E=BB(n0(T),128)).t,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),S=(i=BB(e.d.Xb(e.c=e.b++),268)).b,E.s>S.s&&(fW(e),y7(S.i,i),i.c>0&&(i.a=S,WB(S.t,i),i.b=E,WB(E.i,i)))}function OXn(n){var t,e,i,r,c;switch(t=n.c){case 11:return n.Ml();case 12:return n.Ol();case 14:return n.Ql();case 15:return n.Tl();case 16:return n.Rl();case 17:return n.Ul();case 21:return QXn(n),wWn(),wWn(),sNt;case 10:switch(n.a){case 65:return n.yl();case 90:return n.Dl();case 122:return n.Kl();case 98:return n.El();case 66:return n.zl();case 60:return n.Jl();case 62:return n.Hl()}}switch(c=kXn(n),t=n.c){case 3:return n.Zl(c);case 4:return n.Xl(c);case 5:return n.Yl(c);case 0:if(123==n.a&&n.d<n.j){if(r=n.d,i=0,e=-1,!((t=fV(n.i,r++))>=48&&t<=57))throw Hp(new ak(kWn((u$(),X8n))));for(i=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((i=10*i+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(e=i,44==t){if(r>=n.j)throw Hp(new ak(kWn((u$(),V8n))));if((t=fV(n.i,r++))>=48&&t<=57){for(e=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((e=10*e+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(i>e)throw Hp(new ak(kWn((u$(),Q8n))))}else e=-1}if(125!=t)throw Hp(new ak(kWn((u$(),W8n))));n.sl(r)?(wWn(),wWn(),c=new h4(9,c),n.d=r+1):(wWn(),wWn(),c=new h4(3,c),n.d=r),c.dm(i),c.cm(e),QXn(n)}}return c}function AXn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(w=new J6(t.b),v=new J6(t.b),l=new J6(t.b),j=new J6(t.b),d=new J6(t.b),k=spn(t,0);k.b!=k.d.c;)for(u=new Wb((m=BB(b3(k),11)).g);u.a<u.c.c.length;)if((c=BB(n0(u),17)).c.i==c.d.i){if(m.j==c.d.j){j.c[j.c.length]=c;continue}if(m.j==(kUn(),sIt)&&c.d.j==SIt){d.c[d.c.length]=c;continue}}for(o=new Wb(d);o.a<o.c.c.length;)__n(n,c=BB(n0(o),17),e,i,(kUn(),oIt));for(a=new Wb(j);a.a<a.c.c.length;)c=BB(n0(a),17),Bl(E=new $vn(n),(uSn(),Iut)),hon(E,(HXn(),ept),(QEn(),XCt)),hon(E,(hWn(),dlt),c),hon(T=new CSn,dlt,c.d),qCn(T,(kUn(),CIt)),CZ(T,E),hon(M=new CSn,dlt,c.c),qCn(M,oIt),CZ(M,E),hon(c.c,Elt,E),hon(c.d,Elt,E),SZ(c,null),MZ(c,null),e.c[e.c.length]=E,hon(E,Bft,iln(2));for(y=spn(t,0);y.b!=y.d.c;)s=(m=BB(b3(y),11)).e.c.length>0,g=m.g.c.length>0,s&&g?l.c[l.c.length]=m:s?w.c[w.c.length]=m:g&&(v.c[v.c.length]=m);for(b=new Wb(w);b.a<b.c.c.length;)WB(r,HBn(n,BB(n0(b),11),null,e));for(p=new Wb(v);p.a<p.c.c.length;)WB(r,HBn(n,null,BB(n0(p),11),e));for(f=new Wb(l);f.a<f.c.c.length;)WB(r,HBn(n,h=BB(n0(f),11),h,e))}function $Xn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(d=new xC(RQn,RQn),t=new xC(KQn,KQn),k=new Wb(n);k.a<k.c.c.length;)y=BB(n0(k),8),d.a=e.Math.min(d.a,y.a),d.b=e.Math.min(d.b,y.b),t.a=e.Math.max(t.a,y.a),t.b=e.Math.max(t.b,y.b);for(s=new xC(t.a-d.a,t.b-d.b),h=new ZFn(new xC(d.a-50,d.b-s.a-50),new xC(d.a-50,t.b+s.a+50),new xC(t.a+s.b/2+50,d.b+s.b/2)),m=new Rv,c=new Np,i=new Np,m.a.zc(h,m),E=new Wb(n);E.a<E.c.c.length;){for(j=BB(n0(E),8),c.c=x8(Ant,HWn,1,0,5,1),v=m.a.ec().Kc();v.Ob();)W8((g=BB(v.Pb(),308)).d,g.a),Ibn(W8(g.d,j),W8(g.d,g.a))<0&&(c.c[c.c.length]=g);for(i.c=x8(Ant,HWn,1,0,5,1),p=new Wb(c);p.a<p.c.c.length;)for(b=new Wb((g=BB(n0(p),308)).e);b.a<b.c.c.length;){for(f=BB(n0(b),168),a=!0,o=new Wb(c);o.a<o.c.c.length;)(u=BB(n0(o),308))!=g&&(cV(f,xq(u.e,0))||cV(f,xq(u.e,1))||cV(f,xq(u.e,2)))&&(a=!1);a&&(i.c[i.c.length]=f)}for(oMn(m,c),e5(m,new bn),l=new Wb(i);l.a<l.c.c.length;)TU(m,new ZFn(j,(f=BB(n0(l),168)).a,f.b))}for(e5(m,new jw(w=new Rv)),r=w.a.ec().Kc();r.Ob();)(K7(h,(f=BB(r.Pb(),168)).a)||K7(h,f.b))&&r.Qb();return e5(w,new wn),w}function LXn(n){var t,e,i;switch(e=BB(mMn(n,(hWn(),Zft)),21),t=kA(Nat),BB(mMn(n,(HXn(),sgt)),334)==(ufn(),pCt)&&Jcn(t,xat),qy(TD(mMn(n,ugt)))?dq(t,(yMn(),Rat),(lWn(),Hot)):dq(t,(yMn(),_at),(lWn(),Hot)),null!=mMn(n,(C6(),TMt))&&Jcn(t,Dat),(qy(TD(mMn(n,ggt)))||qy(TD(mMn(n,ogt))))&&WG(t,(yMn(),Bat),(lWn(),eot)),BB(mMn(n,Udt),103).g){case 2:case 3:case 4:WG(dq(t,(yMn(),Rat),(lWn(),rot)),Bat,iot)}switch(e.Hc((bDn(),hft))&&WG(dq(dq(t,(yMn(),Rat),(lWn(),tot)),Fat,Zut),Bat,not),GI(mMn(n,Sgt))!==GI((sNn(),Ivt))&&dq(t,(yMn(),_at),(lWn(),Not)),e.Hc(pft)&&(dq(t,(yMn(),Rat),(lWn(),Fot)),dq(t,Kat,Kot),dq(t,_at,_ot)),GI(mMn(n,Pdt))!==GI((JMn(),cft))&&GI(mMn(n,Zdt))!==GI((Mbn(),YPt))&&WG(t,(yMn(),Bat),(lWn(),pot)),qy(TD(mMn(n,fgt)))&&dq(t,(yMn(),_at),(lWn(),got)),qy(TD(mMn(n,Hdt)))&&dq(t,(yMn(),_at),(lWn(),Wot)),KLn(n)&&(i=(GI(mMn(n,sgt))===GI(pCt)?BB(mMn(n,Rdt),292):BB(mMn(n,Kdt),292))==(Kan(),jft)?(lWn(),Rot):(lWn(),Yot),dq(t,(yMn(),Fat),i)),BB(mMn(n,zpt),377).g){case 1:dq(t,(yMn(),Fat),(lWn(),Vot));break;case 2:WG(dq(dq(t,(yMn(),_at),(lWn(),Vut)),Fat,Qut),Bat,Yut)}return GI(mMn(n,Ldt))!==GI((mon(),Nvt))&&dq(t,(yMn(),_at),(lWn(),Qot)),t}function NXn(n){NM(n,new MTn(vj(wj(pj(gj(new du,$4n),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new Za))),u2(n,$4n,VJn,1.3),u2(n,$4n,A4n,mpn(gEt)),u2(n,$4n,QJn,IEt),u2(n,$4n,vZn,15),u2(n,$4n,u3n,mpn(bEt)),u2(n,$4n,PZn,mpn(jEt)),u2(n,$4n,BZn,mpn(EEt)),u2(n,$4n,SZn,mpn(TEt)),u2(n,$4n,CZn,mpn(kEt)),u2(n,$4n,MZn,mpn(MEt)),u2(n,$4n,IZn,mpn(OEt)),u2(n,$4n,E4n,mpn(PEt)),u2(n,$4n,T4n,mpn(yEt)),u2(n,$4n,P4n,mpn(SEt)),u2(n,$4n,C4n,mpn(AEt)),u2(n,$4n,I4n,mpn(pEt)),u2(n,$4n,jZn,mpn(vEt)),u2(n,$4n,m3n,mpn(mEt)),u2(n,$4n,S4n,mpn(dEt)),u2(n,$4n,M4n,mpn(wEt)),u2(n,$4n,O4n,mpn(LEt))}function xXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(cL(t,457)){if(!(d=SDn(BB(t,671),e)))throw Hp(new _y(p6n+e+"' is not a valid enumerator of '"+t.ne()+"'"));return d}switch(Cfn((IPn(),Z$t),t).cl()){case 2:e=FBn(e,!1);break;case 3:e=FBn(e,!0)}if(i=Cfn(Z$t,t).$k())return i.Aj().Nh().Kh(i,e);if(f=Cfn(Z$t,t).al()){for(d=new Np,s=0,h=(o=ysn(e)).length;s<h;++s)u=o[s],WB(d,f.Aj().Nh().Kh(f,u));return d}if(!(w=Cfn(Z$t,t).bl()).dc()){for(b=w.Kc();b.Ob();){l=BB(b.Pb(),148);try{if(null!=(d=l.Aj().Nh().Kh(l,e)))return d}catch(g){if(!cL(g=lun(g),60))throw Hp(g)}}throw Hp(new _y(p6n+e+"' does not match any member types of the union datatype '"+t.ne()+"'"))}if(BB(t,834).Fj(),!(r=xfn(t.Bj())))return null;if(r==Stt){c=0;try{c=l_n(e,_Vn,DWn)&QVn}catch(g){if(!cL(g=lun(g),127))throw Hp(g);c=V7(e)[0]}return fun(c)}if(r==mtt){for(a=0;a<IOt.length;++a)try{return BM(IOt[a],e)}catch(g){if(!cL(g=lun(g),32))throw Hp(g)}throw Hp(new _y(p6n+e+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw Hp(new _y(p6n+e+"' is invalid. "))}function DXn(n,t){var e,i,r,c,a,u,o,s;if(e=0,a=0,c=t.length,u=null,s=new Ik,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&(++e,++a<c&&(b1(a,t.length),43==t.charCodeAt(a)||(b1(a,t.length),45==t.charCodeAt(a)))))throw Hp(new Mk(DQn+t+'"'));for(;a<c&&(b1(a,t.length),46!=t.charCodeAt(a))&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;if(s.a+=""+fx(null==t?zWn:(kW(t),t),e,a),a<c&&(b1(a,t.length),46==t.charCodeAt(a))){for(e=++a;a<c&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;n.e=a-e,s.a+=""+fx(null==t?zWn:(kW(t),t),e,a)}else n.e=0;if(a<c&&(b1(a,t.length),101==t.charCodeAt(a)||(b1(a,t.length),69==t.charCodeAt(a)))&&(e=++a,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&++a<c&&(b1(a,t.length),45!=t.charCodeAt(a))&&++e,u=t.substr(e,c-e),n.e=n.e-l_n(u,_Vn,DWn),n.e!=CJ(n.e)))throw Hp(new Mk("Scale out of range."));if((o=s.a).length<16){if(n.f=(null==Vtt&&(Vtt=new RegExp("^[+-]?\\d*$","i")),Vtt.test(o)?parseInt(o,10):NaN),isNaN(n.f))throw Hp(new Mk(DQn+t+'"'));n.a=aIn(n.f)}else fdn(n,new $A(o));for(n.d=s.a.length,r=0;r<s.a.length&&(45==(i=fV(s.a,r))||48==i);++r)--n.d;0==n.d&&(n.d=1)}function RXn(){RXn=O,JIn(fut=new pJ,(kUn(),wIt),vIt),JIn(fut,MIt,vIt),JIn(fut,MIt,kIt),JIn(fut,hIt,pIt),JIn(fut,hIt,vIt),JIn(fut,dIt,vIt),JIn(fut,dIt,mIt),JIn(fut,EIt,lIt),JIn(fut,EIt,vIt),JIn(fut,yIt,bIt),JIn(fut,yIt,vIt),JIn(fut,yIt,mIt),JIn(fut,yIt,lIt),JIn(fut,bIt,yIt),JIn(fut,bIt,kIt),JIn(fut,bIt,pIt),JIn(fut,bIt,vIt),JIn(fut,jIt,jIt),JIn(fut,jIt,mIt),JIn(fut,jIt,kIt),JIn(fut,gIt,gIt),JIn(fut,gIt,mIt),JIn(fut,gIt,pIt),JIn(fut,TIt,TIt),JIn(fut,TIt,lIt),JIn(fut,TIt,kIt),JIn(fut,fIt,fIt),JIn(fut,fIt,lIt),JIn(fut,fIt,pIt),JIn(fut,mIt,dIt),JIn(fut,mIt,yIt),JIn(fut,mIt,jIt),JIn(fut,mIt,gIt),JIn(fut,mIt,vIt),JIn(fut,mIt,mIt),JIn(fut,mIt,kIt),JIn(fut,mIt,pIt),JIn(fut,lIt,EIt),JIn(fut,lIt,yIt),JIn(fut,lIt,TIt),JIn(fut,lIt,fIt),JIn(fut,lIt,lIt),JIn(fut,lIt,kIt),JIn(fut,lIt,pIt),JIn(fut,lIt,vIt),JIn(fut,kIt,MIt),JIn(fut,kIt,bIt),JIn(fut,kIt,jIt),JIn(fut,kIt,TIt),JIn(fut,kIt,mIt),JIn(fut,kIt,lIt),JIn(fut,kIt,kIt),JIn(fut,kIt,vIt),JIn(fut,pIt,hIt),JIn(fut,pIt,bIt),JIn(fut,pIt,gIt),JIn(fut,pIt,fIt),JIn(fut,pIt,mIt),JIn(fut,pIt,lIt),JIn(fut,pIt,pIt),JIn(fut,pIt,vIt),JIn(fut,vIt,wIt),JIn(fut,vIt,MIt),JIn(fut,vIt,hIt),JIn(fut,vIt,dIt),JIn(fut,vIt,EIt),JIn(fut,vIt,yIt),JIn(fut,vIt,bIt),JIn(fut,vIt,mIt),JIn(fut,vIt,lIt),JIn(fut,vIt,kIt),JIn(fut,vIt,pIt),JIn(fut,vIt,vIt)}function KXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(n.d=new xC(RQn,RQn),n.c=new xC(KQn,KQn),l=t.Kc();l.Ob();)for(m=new Wb(BB(l.Pb(),37).a);m.a<m.c.c.length;)v=BB(n0(m),10),n.d.a=e.Math.min(n.d.a,v.n.a-v.d.b),n.d.b=e.Math.min(n.d.b,v.n.b-v.d.d),n.c.a=e.Math.max(n.c.a,v.n.a+v.o.a+v.d.c),n.c.b=e.Math.max(n.c.b,v.n.b+v.o.b+v.d.a);for(o=new Yv,f=t.Kc();f.Ob();)r=uXn(n,BB(f.Pb(),37)),WB(o.a,r),r.a=r.a|!BB(mMn(r.c,(hWn(),Xft)),21).dc();for(n.b=(Shn(),(T=new kt).f=new vin(i),T.b=oGn(T.f,o),T),jGn((w=n.b,new Xm,w)),n.e=new Gj,n.a=n.b.f.e,u=new Wb(o.a);u.a<u.c.c.length;)for(c=BB(n0(u),841),y=AJ(n.b,c),nKn(c.c,y.a,y.b),g=new Wb(c.c.a);g.a<g.c.c.length;)(d=BB(n0(g),10)).k==(uSn(),Mut)&&(p=lLn(n,d.n,BB(mMn(d,(hWn(),Qft)),61)),UR(kO(d.n),p));for(a=new Wb(o.a);a.a<a.c.c.length;)for(h=new Wb(wln(c=BB(n0(a),841)));h.a<h.c.c.length;)for(Kx(E=new Kj((s=BB(n0(h),17)).a),0,g1(s.c)),DH(E,g1(s.d)),b=null,j=spn(E,0);j.b!=j.d.c;)k=BB(b3(j),8),b?(uen(b.a,k.a)?(n.e.a=e.Math.min(n.e.a,b.a),n.a.a=e.Math.max(n.a.a,b.a)):uen(b.b,k.b)&&(n.e.b=e.Math.min(n.e.b,b.b),n.a.b=e.Math.max(n.a.b,b.b)),b=k):b=k;qx(n.e),UR(n.a,n.e)}function _Xn(n){V$n(n.b,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentTransient"])),V$n(n.a,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedSourceURI"])),V$n(n.o,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),V$n(n.p,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),V$n(n.v,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),V$n(n.R,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedName"])),V$n(n.T,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),V$n(n.U,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),V$n(n.W,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),V$n(n.bb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidDefaultValueLiteral"])),V$n(n.eb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),V$n(n.H,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentType ConsistentBounds ConsistentArguments"]))}function FXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(!t.dc()){if(r=new km,f=(a=e||BB(t.Xb(0),17)).c,gxn(),(s=f.i.k)!=(uSn(),Cut)&&s!=Iut&&s!=Mut&&s!=Tut)throw Hp(new _y("The target node of the edge must be a normal node or a northSouthPort."));for(fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))),(kUn(),yIt).Hc(f.j)&&(b=Gy(MD(mMn(f,(hWn(),Llt)))),r5(r,new xC(Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a])).a,b),r.c.b,r.c)),o=null,i=!1,u=t.Kc();u.Ob();)0!=(c=BB(u.Pb(),17).a).b&&(i?(r5(r,kL(UR(o,(Px(0!=c.b),BB(c.a.a.c,8))),.5),r.c.b,r.c),i=!1):i=!0,o=B$((Px(0!=c.b),BB(c.c.b.c,8))),Frn(r,c),yQ(c));l=a.d,yIt.Hc(l.j)&&(b=Gy(MD(mMn(l,(hWn(),Llt)))),r5(r,new xC(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).a,b),r.c.b,r.c)),fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a]))),n.d==(Usn(),emt)&&(Px(0!=r.b),w=BB(r.a.a.c,8),d=BB(Dpn(r,1),8),(g=new XZ(hsn(f.j))).a*=5,g.b*=5,p=XR(new xC(d.a,d.b),w),UR(v=new xC(iZ(g.a,p.a),iZ(g.b,p.b)),w),nX(spn(r,1),v),Px(0!=r.b),m=BB(r.c.b.c,8),y=BB(Dpn(r,r.b-2),8),(g=new XZ(hsn(l.j))).a*=5,g.b*=5,p=XR(new xC(y.a,y.b),m),UR(k=new xC(iZ(g.a,p.a),iZ(g.b,p.b)),m),Kx(r,r.b-1,k)),h=new oBn(r),Frn(a.a,Fvn(h))}}function BXn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$,L,N,x;if(y=(v=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),k=v.Eg(),m=v.Cg()/2,w=v.Bg()/2,cL(v,186)&&(y+=WJ(p=BB(v,118)).i,y+=WJ(p).i),y+=m,k+=w,C=(S=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),I=S.Eg(),P=S.Cg()/2,j=S.Bg()/2,cL(S,186)&&(C+=WJ(M=BB(S,118)).i,C+=WJ(M).i),C+=P,I+=j,0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),o=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),o);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(b=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));b.e!=b.i.gc();)Qjn(b);for(d=C,C>y+m?d=y+m:C<y-m&&(d=y-m),g=I,I>k+w?g=k+w:I<k-w&&(g=k-w),d>y-m&&d<y+m&&g>k-w&&g<k+w&&(d=y+m),Ien(u=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),d),Aen(u,g),E=y,y>C+P?E=C+P:y<C-P&&(E=C-P),T=k,k>I+j?T=I+j:k<I-j&&(T=I-j),E>C-P&&E<C+P&&T>I-j&&T<I+j&&(T=I+j),Ten(u,E),Oen(u,T),sqn((!u.a&&(u.a=new $L(xOt,u,5)),u.a)),a=pvn(t,5),v==S&&++a,A=E-d,N=T-g,h=.20000000298023224*e.Math.sqrt(A*A+N*N),$=A/(a+1),x=N/(a+1),O=d,L=g,s=0;s<a;s++)L+=x,(f=(O+=$)+H$n(t,24)*uYn*h-h/2)<0?f=1:f>i&&(f=i-1),(l=L+H$n(t,24)*uYn*h-h/2)<0?l=1:l>r&&(l=r-1),tE(),jen(c=new ro,f),Een(c,l),f9((!u.a&&(u.a=new $L(xOt,u,5)),u.a),c)}function HXn(){HXn=O,sWn(),ppt=jPt,vpt=EPt,mpt=TPt,ypt=MPt,jpt=SPt,Ept=PPt,Spt=IPt,Cpt=APt,Ipt=$Pt,Ppt=OPt,Opt=LPt,$pt=NPt,Npt=RPt,Mpt=CPt,fWn(),gpt=_wt,kpt=Fwt,Tpt=Bwt,Apt=Hwt,hpt=new XA(pPt,iln(0)),fpt=Dwt,lpt=Rwt,bpt=Kwt,zpt=ldt,Rpt=zwt,Kpt=Wwt,Bpt=edt,_pt=Ywt,Fpt=Zwt,Xpt=pdt,Upt=wdt,qpt=odt,Hpt=adt,Gpt=hdt,Rgt=Pwt,Kgt=Cwt,rgt=Kbt,cgt=Bbt,Ugt=new WA(12),zgt=new XA(XSt,Ugt),Mbn(),Zdt=new XA(vSt,ngt=QPt),tpt=new XA(aPt,0),wpt=new XA(vPt,iln(1)),Edt=new XA(cSt,dZn),Ggt=zSt,ept=uPt,upt=wPt,zdt=lSt,kdt=iSt,sgt=ESt,dpt=new XA(kPt,(hN(),!0)),wgt=SSt,dgt=PSt,Fgt=KSt,qgt=qSt,Bgt=FSt,Ffn(),Udt=new XA(bSt,Wdt=BPt),$gt=DSt,Agt=NSt,cpt=fPt,rpt=hPt,apt=bPt,cpn(),new XA(ZSt,Vgt=qCt),Ygt=ePt,Jgt=iPt,Zgt=rPt,Qgt=tPt,Dpt=Gwt,Pgt=lwt,Sgt=hwt,xpt=qwt,kgt=ewt,Gdt=Tbt,qdt=jbt,xdt=ubt,Ddt=obt,Kdt=bbt,Rdt=sbt,Hdt=ybt,Igt=wwt,Ogt=dwt,pgt=Vbt,_gt=$wt,Ngt=mwt,ugt=Gbt,Dgt=Mwt,egt=Nbt,igt=Dbt,Ndt=hSt,Lgt=gwt,Pdt=Qlt,Sdt=Wlt,Mdt=Xlt,fgt=Xbt,hgt=Ubt,lgt=Wbt,Hgt=BSt,vgt=OSt,agt=ySt,Ydt=gSt,Qdt=dSt,_dt=gbt,ipt=sPt,Tdt=sSt,bgt=MSt,npt=cPt,Xgt=VSt,Wgt=YSt,Egt=cwt,Tgt=uwt,spt=gPt,jdt=Ult,Mgt=swt,Jdt=Obt,Vdt=Cbt,Cgt=$St,mgt=Zbt,xgt=jwt,Lpt=xPt,Xdt=Sbt,opt=Nwt,tgt=$bt,ygt=twt,Fdt=vbt,ggt=ISt,jgt=rwt,Bdt=mbt,Ldt=cbt,Adt=ebt,Idt=nbt,Odt=tbt,$dt=rbt,Cdt=Jlt,ogt=zbt}function qXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(uHn(),T=n.e,w=n.d,r=n.a,0==T)switch(t){case 0:return"0";case 1:return WQn;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(j=new Ck).a+=t<0?"0E+":"0E",j.a+=-t,j.a}if(y=x8(ONt,WVn,25,1+(m=10*w+1+7),15,1),e=m,1==w)if((u=r[0])<0){C=e0(u,UQn);do{d=C,C=Ojn(C,10),y[--e]=48+dG(ibn(d,cbn(C,10)))&QVn}while(0!=Vhn(C,0))}else{C=u;do{d=C,C=C/10|0,y[--e]=d-10*C+48&QVn}while(0!=C)}else{aHn(r,0,S=x8(ANt,hQn,25,w,15,1),0,P=w);n:for(;;){for(E=0,s=P-1;s>=0;s--)p=fTn(rbn(yz(E,32),e0(S[s],UQn))),S[s]=dG(p),E=dG(kz(p,32));v=dG(E),g=e;do{y[--e]=48+v%10&QVn}while(0!=(v=v/10|0)&&0!=e);for(i=9-g+e,o=0;o<i&&e>0;o++)y[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==y[e];)++e}if(b=T<0,a=m-e-t-1,0==t)return b&&(y[--e]=45),Bdn(y,e,m-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=m-1;l>=h;l--)y[l+1]=y[l];return y[++h]=46,b&&(y[--e]=45),Bdn(y,e,m-e+1)}for(f=2;f<1-a;f++)y[--e]=48;return y[--e]=46,y[--e]=48,b&&(y[--e]=45),Bdn(y,e,m-e)}return M=e+1,c=m,k=new Ik,b&&(k.a+="-"),c-M>=1?(xX(k,y[e]),k.a+=".",k.a+=Bdn(y,e+1,m-e-1)):k.a+=Bdn(y,e,m-e),k.a+="E",a>0&&(k.a+="+"),k.a+=""+a,k.a}function GXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(n.c=t,n.g=new xp,GM(),twn(new Pw(new Dy(n.c))),v=SD(ZAn(n.c,(MMn(),dTt))),u=BB(ZAn(n.c,pTt),316),y=BB(ZAn(n.c,vTt),429),c=BB(ZAn(n.c,hTt),482),m=BB(ZAn(n.c,gTt),430),n.j=Gy(MD(ZAn(n.c,mTt))),a=n.a,u.g){case 0:a=n.a;break;case 1:a=n.b;break;case 2:a=n.i;break;case 3:a=n.e;break;case 4:a=n.f;break;default:throw Hp(new _y(N4n+(null!=u.f?u.f:""+u.g)))}if(n.d=new DJ(a,y,c),hon(n.d,(Xcn(),Qrt),TD(ZAn(n.c,lTt))),n.d.c=qy(TD(ZAn(n.c,fTt))),0==YQ(n.c).i)return n.d;for(h=new AL(YQ(n.c));h.e!=h.i.gc();){for(l=(s=BB(kpn(h),33)).g/2,f=s.f/2,k=new xC(s.i+l,s.j+f);hU(n.g,k);)_x(k,(e.Math.random()-.5)*lZn,(e.Math.random()-.5)*lZn);w=BB(ZAn(s,(sWn(),$St)),142),d=new AZ(k,new UV(k.a-l-n.j/2-w.b,k.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),WB(n.d.i,d),VW(n.g,k,new rI(d,s))}switch(m.g){case 0:if(null==v)n.d.d=BB(xq(n.d.i,0),65);else for(p=new Wb(n.d.i);p.a<p.c.c.length;)d=BB(n0(p),65),null!=(b=BB(BB(RX(n.g,d.a),46).b,33).zg())&&mK(b,v)&&(n.d.d=d);break;case 1:for((i=new xC(n.c.g,n.c.f)).a*=.5,i.b*=.5,_x(i,n.c.i,n.c.j),r=RQn,g=new Wb(n.d.i);g.a<g.c.c.length;)(o=W8((d=BB(n0(g),65)).a,i))<r&&(r=o,n.d.d=d);break;default:throw Hp(new _y(N4n+(null!=m.f?m.f:""+m.g)))}return n.d}function zXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(j=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),f=new km,k=new xp,E=tFn(j),jCn(k.f,j,E),b=new xp,r=new YT,d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!t.d&&(t.d=new hK(_Ot,t,8,5)),t.d),(!t.e&&(t.e=new hK(_Ot,t,7,4)),t.e)])));dAn(d);){if(w=BB(U5(d),79),1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));w!=n&&(r5(r,p=BB(Wtn((!w.a&&(w.a=new eU(FOt,w,6,6)),w.a),0),202),r.c.b,r.c),(g=BB(qI(AY(k.f,p)),12))||(g=tFn(p),jCn(k.f,p,g)),l=i?XR(new wA(BB(xq(E,E.c.length-1),8)),BB(xq(g,g.c.length-1),8)):XR(new wA((l1(0,E.c.length),BB(E.c[0],8))),(l1(0,g.c.length),BB(g.c[0],8))),jCn(b.f,p,l))}if(0!=r.b)for(v=BB(xq(E,i?E.c.length-1:0),8),h=1;h<E.c.length;h++){for(m=BB(xq(E,i?E.c.length-1-h:h),8),c=spn(r,0);c.b!=c.d.c;)p=BB(b3(c),202),(g=BB(qI(AY(k.f,p)),12)).c.length<=h?mtn(c):(y=UR(new wA(BB(xq(g,i?g.c.length-1-h:h),8)),BB(qI(AY(b.f,p)),8)),m.a==y.a&&m.b==y.b||(a=m.a-v.a,o=m.b-v.b,(u=y.a-v.a)*o==(s=y.b-v.b)*a&&(0==a||isNaN(a)?a:a<0?-1:1)==(0==u||isNaN(u)?u:u<0?-1:1)&&(0==o||isNaN(o)?o:o<0?-1:1)==(0==s||isNaN(s)?s:s<0?-1:1)?(e.Math.abs(a)<e.Math.abs(u)||e.Math.abs(o)<e.Math.abs(s))&&r5(f,m,f.c.b,f.c):h>1&&r5(f,v,f.c.b,f.c),mtn(c)));v=m}return f}function UXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(OTn(e,"Greedy cycle removal",1),A=(m=t.a).c.length,n.a=x8(ANt,hQn,25,A,15,1),n.c=x8(ANt,hQn,25,A,15,1),n.b=x8(ANt,hQn,25,A,15,1),s=0,p=new Wb(m);p.a<p.c.c.length;){for((d=BB(n0(p),10)).p=s,T=new Wb(d.j);T.a<T.c.c.length;){for(u=new Wb((k=BB(n0(T),11)).e);u.a<u.c.c.length;)(i=BB(n0(u),17)).c.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.a[s]+=S>0?S+1:1);for(a=new Wb(k.g);a.a<a.c.c.length;)(i=BB(n0(a),17)).d.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.c[s]+=S>0?S+1:1)}0==n.c[s]?DH(n.e,d):0==n.a[s]&&DH(n.f,d),++s}for(w=-1,b=1,f=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230);A>0;){for(;0!=n.e.b;)C=BB(dH(n.e),10),n.b[C.p]=w--,QKn(n,C),--A;for(;0!=n.f.b;)I=BB(dH(n.f),10),n.b[I.p]=b++,QKn(n,I),--A;if(A>0){for(l=_Vn,v=new Wb(m);v.a<v.c.c.length;)d=BB(n0(v),10),0==n.b[d.p]&&(y=n.c[d.p]-n.a[d.p])>=l&&(y>l&&(f.c=x8(Ant,HWn,1,0,5,1),l=y),f.c[f.c.length]=d);h=n.Zf(f),n.b[h.p]=b++,QKn(n,h),--A}}for(P=m.c.length+1,s=0;s<m.c.length;s++)n.b[s]<0&&(n.b[s]+=P);for(g=new Wb(m);g.a<g.c.c.length;)for(E=0,M=(j=I2((d=BB(n0(g),10)).j)).length;E<M;++E)for(c=0,o=(r=Z0((k=j[E]).g)).length;c<o;++c)O=(i=r[c]).d.i.p,n.b[d.p]>n.b[O]&&(tBn(i,!0),hon(t,qft,(hN(),!0)));n.a=null,n.c=null,n.b=null,yQ(n.f),yQ(n.e),HSn(e)}function XXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(i=new Np,u=new Np,g=t/2,b=n.gc(),r=BB(n.Xb(0),8),p=BB(n.Xb(1),8),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8))),s=2;s<b;s++)d=r,r=p,p=BB(n.Xb(s),8),WB(i,(l1(1,(w=QAn(r.a,r.b,d.a,d.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8)));for(WB(i,(l1(1,(w=QAn(p.a,p.b,r.a,r.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),e=new km,a=new Np,DH(e,(l1(0,i.c.length),BB(i.c[0],8))),h=1;h<i.c.length-2;h+=2)l1(h,i.c.length),c=BB(i.c[h],8),l=qPn((l1(h-1,i.c.length),BB(i.c[h-1],8)),c,(l1(h+1,i.c.length),BB(i.c[h+1],8)),(l1(h+2,i.c.length),BB(i.c[h+2],8))),isFinite(l.a)&&isFinite(l.b)?r5(e,l,e.c.b,e.c):r5(e,c,e.c.b,e.c);for(DH(e,BB(xq(i,i.c.length-1),8)),WB(a,(l1(0,u.c.length),BB(u.c[0],8))),f=1;f<u.c.length-2;f+=2)l1(f,u.c.length),c=BB(u.c[f],8),l=qPn((l1(f-1,u.c.length),BB(u.c[f-1],8)),c,(l1(f+1,u.c.length),BB(u.c[f+1],8)),(l1(f+2,u.c.length),BB(u.c[f+2],8))),isFinite(l.a)&&isFinite(l.b)?a.c[a.c.length]=l:a.c[a.c.length]=c;for(WB(a,BB(xq(u,u.c.length-1),8)),o=a.c.length-1;o>=0;o--)DH(e,(l1(o,a.c.length),BB(a.c[o],8)));return e}function WXn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=kAt,s=null,c=null,(o=Vgn(n,u=0,AAt,$At))<n.length&&(b1(o,n.length),58==n.charCodeAt(o))&&(f=n.substr(u,o-u),u=o+1),e=null!=f&&xT(jAt,f.toLowerCase())){if(-1==(o=n.lastIndexOf("!/")))throw Hp(new _y("no archive separator"));a=!0,i=fx(n,u,++o),u=o}else u>=0&&mK(n.substr(u,"//".length),"//")?(o=Vgn(n,u+=2,LAt,NAt),i=n.substr(u,o-u),u=o):null==f||u!=n.length&&(b1(u,n.length),47==n.charCodeAt(u))||(a=!1,-1==(o=yN(n,YTn(35),u))&&(o=n.length),i=n.substr(u,o-u),u=o);if(!e&&u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(o=Vgn(n,u+1,LAt,NAt),(h=n.substr(u+1,o-(u+1))).length>0&&58==fV(h,h.length-1)&&(r=h,u=o)),u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(++u,t=!0),u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u))){for(l=new Np;u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u));)o=Vgn(n,u,LAt,NAt),WB(l,n.substr(u,o-u)),(u=o)<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(Qhn(n,++u)||(l.c[l.c.length]=""));Qgn(l,b=x8(Qtt,sVn,2,l.c.length,6,1))}return u<n.length&&(b1(u,n.length),63==n.charCodeAt(u))&&(-1==(o=lx(n,35,++u))&&(o=n.length),s=n.substr(u,o-u),u=o),u<n.length&&(c=nO(n,++u)),wGn(a,f,i,r,b,s),new rRn(a,f,i,r,t,b,s,c)}function VXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$;for(O=new Np,w=new Wb(t.b);w.a<w.c.c.length;)for(k=new Wb(BB(n0(w),29).a);k.a<k.c.c.length;){for((y=BB(n0(k),10)).p=-1,l=_Vn,T=_Vn,S=new Wb(y.j);S.a<S.c.c.length;){for(c=new Wb((M=BB(n0(S),11)).e);c.a<c.c.c.length;)i=BB(n0(c),17),P=BB(mMn(i,(HXn(),bpt)),19).a,l=e.Math.max(l,P);for(r=new Wb(M.g);r.a<r.c.c.length;)i=BB(n0(r),17),P=BB(mMn(i,(HXn(),bpt)),19).a,T=e.Math.max(T,P)}hon(y,Xmt,iln(l)),hon(y,Wmt,iln(T))}for(p=0,b=new Wb(t.b);b.a<b.c.c.length;)for(k=new Wb(BB(n0(b),29).a);k.a<k.c.c.length;)(y=BB(n0(k),10)).p<0&&((I=new rm).b=p++,jRn(n,y,I),O.c[O.c.length]=I);for(E=sx(O.c.length),f=sx(O.c.length),u=0;u<O.c.length;u++)WB(E,new Np),WB(f,iln(0));for(vzn(t,O,E,f),A=BB(Qgn(O,x8(Ymt,O3n,257,O.c.length,0,1)),840),j=BB(Qgn(E,x8(Rnt,nZn,15,E.c.length,0,1)),192),h=x8(ANt,hQn,25,f.c.length,15,1),o=0;o<h.length;o++)h[o]=(l1(o,f.c.length),BB(f.c[o],19)).a;for(v=0,m=new Np,s=0;s<A.length;s++)0==h[s]&&WB(m,A[s]);for(g=x8(ANt,hQn,25,A.length,15,1);0!=m.c.length;)for(g[(I=BB(s6(m,0),257)).b]=v++;!j[I.b].dc();)--h[($=BB(j[I.b].$c(0),257)).b],0==h[$.b]&&(m.c[m.c.length]=$);for(n.a=x8(Ymt,O3n,257,A.length,0,1),a=0;a<A.length;a++)for(d=A[a],C=g[a],n.a[C]=d,d.b=C,k=new Wb(d.e);k.a<k.c.c.length;)(y=BB(n0(k),10)).p=C;return n.a}function QXn(n){var t,e,i;if(n.d>=n.j)return n.a=-1,void(n.c=1);if(t=fV(n.i,n.d++),n.a=t,1!=n.b){switch(t){case 124:i=2;break;case 42:i=3;break;case 43:i=4;break;case 63:i=5;break;case 41:i=7;break;case 46:i=8;break;case 91:i=9;break;case 94:i=11;break;case 36:i=12;break;case 40:if(i=6,n.d>=n.j)break;if(63!=fV(n.i,n.d))break;if(++n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));switch(t=fV(n.i,n.d++)){case 58:i=13;break;case 61:i=14;break;case 33:i=15;break;case 91:i=19;break;case 62:i=18;break;case 60:if(n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));if(61==(t=fV(n.i,n.d++)))i=16;else{if(33!=t)throw Hp(new ak(kWn((u$(),v8n))));i=17}break;case 35:for(;n.d<n.j&&41!=(t=fV(n.i,n.d++)););if(41!=t)throw Hp(new ak(kWn((u$(),m8n))));i=21;break;default:if(45==t||97<=t&&t<=122||65<=t&&t<=90){--n.d,i=22;break}if(40==t){i=23;break}throw Hp(new ak(kWn((u$(),p8n))))}break;case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;case 45:512==(512&n.e)&&n.d<n.j&&91==fV(n.i,n.d)?(++n.d,i=24):i=0;break;case 91:if(512!=(512&n.e)&&n.d<n.j&&58==fV(n.i,n.d)){++n.d,i=20;break}default:(64512&t)==HQn&&n.d<n.j&&56320==(64512&(e=fV(n.i,n.d)))&&(n.a=BQn+(t-HQn<<10)+e-56320,++n.d),i=0}n.c=i}}function YXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;if((j=BB(mMn(n,(HXn(),ept)),98))!=(QEn(),QCt)&&j!=YCt){for(s=new J6((lin((b=(w=n.b).c.length)+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),d=new J6((lin(b+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),WB(s,new xp),WB(s,new xp),WB(d,new Np),WB(d,new Np),k=new Np,t=0;t<b;t++)for(l1(t,w.c.length),e=BB(w.c[t],29),l1(t,s.c.length),E=BB(s.c[t],83),g=new xp,s.c[s.c.length]=g,l1(t,d.c.length),M=BB(d.c[t],15),v=new Np,d.c[d.c.length]=v,r=new Wb(e.a);r.a<r.c.c.length;)if(cln(i=BB(n0(r),10)))k.c[k.c.length]=i;else{for(o=new oz(ZL(fbn(i).a.Kc(),new h));dAn(o);)cln(S=(a=BB(U5(o),17)).c.i)&&((T=BB(E.xc(mMn(S,(hWn(),dlt))),10))||(T=oIn(n,S),E.zc(mMn(S,dlt),T),M.Fc(T)),SZ(a,BB(xq(T.j,1),11)));for(u=new oz(ZL(lbn(i).a.Kc(),new h));dAn(u);)cln(P=(a=BB(U5(u),17)).d.i)&&((p=BB(RX(g,mMn(P,(hWn(),dlt))),10))||(p=oIn(n,P),VW(g,mMn(P,dlt),p),v.c[v.c.length]=p),MZ(a,BB(xq(p.j,0),11)))}for(f=0;f<d.c.length;f++)if(l1(f,d.c.length),!(m=BB(d.c[f],15)).dc())for(l=null,0==f?(l=new HX(n),LZ(0,w.c.length),MS(w.c,0,l)):f==s.c.length-1?(l=new HX(n),w.c[w.c.length]=l):(l1(f-1,w.c.length),l=BB(w.c[f-1],29)),c=m.Kc();c.Ob();)PZ(BB(c.Pb(),10),l);for(y=new Wb(k);y.a<y.c.c.length;)PZ(BB(n0(y),10),null);hon(n,(hWn(),Wft),k)}}function JXn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;if(OTn(e,"Coffman-Graham Layering",1),0!=t.a.c.length){for(j=BB(mMn(t,(HXn(),mgt)),19).a,o=0,a=0,b=new Wb(t.a);b.a<b.c.c.length;)for((l=BB(n0(b),10)).p=o++,c=new oz(ZL(lbn(l).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).p=a++;for(n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,a,16,1),n.b=x8(ANt,hQn,25,o,15,1),n.e=x8(ANt,hQn,25,o,15,1),n.f=x8(ANt,hQn,25,o,15,1),win(n.c),rEn(n,t),d=new Xz(new Dd(n)),k=new Wb(t.a);k.a<k.c.c.length;){for(c=new oz(ZL(fbn(m=BB(n0(k),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.b[m.p];0==n.b[m.p]&&F8(eMn(d,m))}for(u=0;0!=d.b.c.length;)for(m=BB(mnn(d),10),n.f[m.p]=u++,c=new oz(ZL(lbn(m).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(p=r.d.i,--n.b[p.p],JIn(n.c,p,iln(n.f[m.p])),0==n.b[p.p]&&F8(eMn(d,p)));for(w=new Xz(new Rd(n)),y=new Wb(t.a);y.a<y.c.c.length;){for(c=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.e[m.p];0==n.e[m.p]&&F8(eMn(w,m))}for(i=r1(t,f=new Np);0!=w.b.c.length;)for(v=BB(mnn(w),10),(i.a.c.length>=j||!Ndn(v,i))&&(i=r1(t,f)),PZ(v,i),c=new oz(ZL(fbn(v).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&F8(eMn(w,g)));for(s=f.c.length-1;s>=0;--s)WB(t.b,(l1(s,f.c.length),BB(f.c[s],29)));t.a.c=x8(Ant,HWn,1,0,5,1),HSn(e)}else HSn(e)}function ZXn(n){var t,e,i,r,c,a,u,o;for(n.b=1,QXn(n),t=null,0==n.c&&94==n.a?(QXn(n),wWn(),wWn(),Yxn(t=new M0(4),0,unt),a=new M0(4)):(wWn(),wWn(),a=new M0(4)),r=!0;1!=(o=n.c);){if(0==o&&93==n.a&&!r){t&&(WGn(t,a),a=t);break}if(e=n.a,i=!1,10==o)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(a,d_n(e)),i=!0;break;case 105:case 73:case 99:case 67:sHn(a,d_n(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(u=DIn(n,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(a,u),i=!0;break;default:e=qDn(n)}else if(24==o&&!r){if(t&&(WGn(t,a),a=t),WGn(a,ZXn(n)),0!=n.c||93!=n.a)throw Hp(new ak(kWn((u$(),N8n))));break}if(QXn(n),!i){if(0==o){if(91==e)throw Hp(new ak(kWn((u$(),x8n))));if(93==e)throw Hp(new ak(kWn((u$(),D8n))));if(45==e&&!r&&93!=n.a)throw Hp(new ak(kWn((u$(),R8n))))}if(0!=n.c||45!=n.a||45==e&&r)Yxn(a,e,e);else{if(QXn(n),1==(o=n.c))throw Hp(new ak(kWn((u$(),$8n))));if(0==o&&93==n.a)Yxn(a,e,e),Yxn(a,45,45);else{if(0==o&&93==n.a||24==o)throw Hp(new ak(kWn((u$(),R8n))));if(c=n.a,0==o){if(91==c)throw Hp(new ak(kWn((u$(),x8n))));if(93==c)throw Hp(new ak(kWn((u$(),D8n))));if(45==c)throw Hp(new ak(kWn((u$(),R8n))))}else 10==o&&(c=qDn(n));if(QXn(n),e>c)throw Hp(new ak(kWn((u$(),F8n))));Yxn(a,e,c)}}}r=!1}if(1==n.c)throw Hp(new ak(kWn((u$(),$8n))));return T$n(a),qHn(a),n.b=0,QXn(n),a}function nWn(n){V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#decimal"])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#integer"])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#boolean"])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EBoolean",t8n,"EBoolean:Object"])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#byte"])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#hexBinary"])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EByte",t8n,"EByte:Object"])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EChar",t8n,"EChar:Object"])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#double"])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EDouble",t8n,"EDouble:Object"])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#float"])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EFloat",t8n,"EFloat:Object"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#int"])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EInt",t8n,"EInt:Object"])),V$n(n.N,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#long"])),V$n(n.O,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"ELong",t8n,"ELong:Object"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#short"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EShort",t8n,"EShort:Object"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#string"]))}function tWn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(1==n.c.length)return l1(0,n.c.length),BB(n.c[0],135);if(n.c.length<=0)return new P6;for(s=new Wb(n);s.a<s.c.c.length;){for(u=BB(n0(s),135),m=0,d=DWn,g=DWn,b=_Vn,w=_Vn,v=spn(u.b,0);v.b!=v.d.c;)p=BB(b3(v),86),m+=BB(mMn(p,(CAn(),$kt)),19).a,d=e.Math.min(d,p.e.a),g=e.Math.min(g,p.e.b),b=e.Math.max(b,p.e.a+p.f.a),w=e.Math.max(w,p.e.b+p.f.b);hon(u,(CAn(),$kt),iln(m)),hon(u,(qqn(),nkt),new xC(d,g)),hon(u,Zyt,new xC(b,w))}for(SQ(),m$(n,new ga),qan(k=new P6,(l1(0,n.c.length),BB(n.c[0],94))),l=0,S=0,h=new Wb(n);h.a<h.c.c.length;)u=BB(n0(h),135),j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8)),l=e.Math.max(l,j.a),S+=j.a*j.b;for(l=e.Math.max(l,e.Math.sqrt(S)*Gy(MD(mMn(k,(CAn(),jkt))))),P=0,C=0,f=0,t=E=Gy(MD(mMn(k,xkt))),o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),135),P+(j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8))).a>l&&(P=0,C+=f+E,f=0),ELn(k,u,P,C),t=e.Math.max(t,P+j.a),f=e.Math.max(f,j.b),P+=j.a+E;for(y=new xp,i=new xp,M=new Wb(n);M.a<M.c.c.length;)for(r=qy(TD(mMn(T=BB(n0(M),135),(sWn(),lSt)))),a=(T.q?T.q:het).vc().Kc();a.Ob();)hU(y,(c=BB(a.Pb(),42)).cd())?GI(BB(c.cd(),146).wg())!==GI(c.dd())&&(r&&hU(i,c.cd())?($T(),BB(c.cd(),146).tg()):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()),r&&VW(i,BB(c.cd(),146),c.dd()))):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()));return k}function eWn(){eWn=O,RXn(),JIn(put=new pJ,(kUn(),dIt),wIt),JIn(put,MIt,wIt),JIn(put,gIt,wIt),JIn(put,jIt,wIt),JIn(put,kIt,wIt),JIn(put,mIt,wIt),JIn(put,jIt,dIt),JIn(put,wIt,hIt),JIn(put,dIt,hIt),JIn(put,MIt,hIt),JIn(put,gIt,hIt),JIn(put,yIt,hIt),JIn(put,jIt,hIt),JIn(put,kIt,hIt),JIn(put,mIt,hIt),JIn(put,bIt,hIt),JIn(put,wIt,EIt),JIn(put,dIt,EIt),JIn(put,hIt,EIt),JIn(put,MIt,EIt),JIn(put,gIt,EIt),JIn(put,yIt,EIt),JIn(put,jIt,EIt),JIn(put,bIt,EIt),JIn(put,TIt,EIt),JIn(put,kIt,EIt),JIn(put,pIt,EIt),JIn(put,mIt,EIt),JIn(put,dIt,MIt),JIn(put,gIt,MIt),JIn(put,jIt,MIt),JIn(put,mIt,MIt),JIn(put,dIt,gIt),JIn(put,MIt,gIt),JIn(put,jIt,gIt),JIn(put,gIt,gIt),JIn(put,kIt,gIt),JIn(put,wIt,fIt),JIn(put,dIt,fIt),JIn(put,hIt,fIt),JIn(put,EIt,fIt),JIn(put,MIt,fIt),JIn(put,gIt,fIt),JIn(put,yIt,fIt),JIn(put,jIt,fIt),JIn(put,TIt,fIt),JIn(put,bIt,fIt),JIn(put,mIt,fIt),JIn(put,kIt,fIt),JIn(put,vIt,fIt),JIn(put,wIt,TIt),JIn(put,dIt,TIt),JIn(put,hIt,TIt),JIn(put,MIt,TIt),JIn(put,gIt,TIt),JIn(put,yIt,TIt),JIn(put,jIt,TIt),JIn(put,bIt,TIt),JIn(put,mIt,TIt),JIn(put,pIt,TIt),JIn(put,vIt,TIt),JIn(put,dIt,bIt),JIn(put,MIt,bIt),JIn(put,gIt,bIt),JIn(put,jIt,bIt),JIn(put,TIt,bIt),JIn(put,mIt,bIt),JIn(put,kIt,bIt),JIn(put,wIt,lIt),JIn(put,dIt,lIt),JIn(put,hIt,lIt),JIn(put,MIt,lIt),JIn(put,gIt,lIt),JIn(put,yIt,lIt),JIn(put,jIt,lIt),JIn(put,bIt,lIt),JIn(put,mIt,lIt),JIn(put,dIt,kIt),JIn(put,hIt,kIt),JIn(put,EIt,kIt),JIn(put,gIt,kIt),JIn(put,wIt,pIt),JIn(put,dIt,pIt),JIn(put,EIt,pIt),JIn(put,MIt,pIt),JIn(put,gIt,pIt),JIn(put,yIt,pIt),JIn(put,jIt,pIt),JIn(put,jIt,vIt),JIn(put,gIt,vIt),JIn(put,bIt,wIt),JIn(put,bIt,MIt),JIn(put,bIt,hIt),JIn(put,yIt,wIt),JIn(put,yIt,dIt),JIn(put,yIt,EIt)}function iWn(n,t){switch(n.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new zQ(n.b,n.a,t,n.c);case 1:return new LL(n.a,t,Awn(t.Tg(),n.c));case 43:return new xL(n.a,t,Awn(t.Tg(),n.c));case 3:return new $L(n.a,t,Awn(t.Tg(),n.c));case 45:return new NL(n.a,t,Awn(t.Tg(),n.c));case 41:return new y9(BB(Ikn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 50:return new yin(BB(Ikn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 5:return new iK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 47:return new rK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 7:return new eU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 49:return new eK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 9:return new FL(n.a,t,Awn(t.Tg(),n.c));case 11:return new _L(n.a,t,Awn(t.Tg(),n.c));case 13:return new KL(n.a,t,Awn(t.Tg(),n.c));case 15:return new MH(n.a,t,Awn(t.Tg(),n.c));case 17:return new BL(n.a,t,Awn(t.Tg(),n.c));case 19:return new RL(n.a,t,Awn(t.Tg(),n.c));case 21:return new DL(n.a,t,Awn(t.Tg(),n.c));case 23:return new yH(n.a,t,Awn(t.Tg(),n.c));case 25:return new fK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 27:return new hK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 29:return new oK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 31:return new cK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 33:return new sK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 35:return new uK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 37:return new aK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 39:return new iU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 40:return new Ecn(t,Awn(t.Tg(),n.c));default:throw Hp(new dy("Unknown feature style: "+n.e))}}function rWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(OTn(e,"Brandes & Koepf node placement",1),n.a=t,n.c=FFn(t),i=BB(mMn(t,(HXn(),Ngt)),274),b=qy(TD(mMn(t,xgt))),n.d=i==(Bjn(),Qht)&&!b||i==Xht,Jqn(n,t),y=null,k=null,g=null,p=null,lin(4,AVn),d=new J6(4),BB(mMn(t,Ngt),274).g){case 3:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),d.c[d.c.length]=g;break;case 1:p=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),nyt)),d.c[d.c.length]=p;break;case 4:y=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),tyt)),d.c[d.c.length]=y;break;case 2:k=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),tyt)),d.c[d.c.length]=k;break;default:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),p=new qKn(t,n.c.d,cyt,nyt),y=new qKn(t,n.c.d,ryt,tyt),k=new qKn(t,n.c.d,cyt,tyt),d.c[d.c.length]=y,d.c[d.c.length]=k,d.c[d.c.length]=g,d.c[d.c.length]=p}for(r=new iC(t,n.c),u=new Wb(d);u.a<u.c.c.length;)PXn(r,c=BB(n0(u),180),n.b),WBn(c);for(l=new Jyn(t,n.c),o=new Wb(d);o.a<o.c.c.length;)Hzn(l,c=BB(n0(o),180));if(e.n)for(s=new Wb(d);s.a<s.c.c.length;)OH(e,(c=BB(n0(s),180))+" size is "+v$n(c));if(f=null,n.d&&IBn(t,h=FUn(n,d,n.c.d),e)&&(f=h),!f)for(s=new Wb(d);s.a<s.c.c.length;)IBn(t,c=BB(n0(s),180),e)&&(!f||v$n(f)>v$n(c))&&(f=c);for(!f&&(l1(0,d.c.length),f=BB(d.c[0],180)),w=new Wb(t.b);w.a<w.c.c.length;)for(m=new Wb(BB(n0(w),29).a);m.a<m.c.c.length;)(v=BB(n0(m),10)).n.b=Gy(f.p[v.p])+Gy(f.d[v.p]);for(e.n&&(OH(e,"Chosen node placement: "+f),OH(e,"Blocks: "+xOn(f)),OH(e,"Classes: "+UAn(f,e)),OH(e,"Marked edges: "+n.b)),a=new Wb(d);a.a<a.c.c.length;)(c=BB(n0(a),180)).g=null,c.b=null,c.a=null,c.d=null,c.j=null,c.i=null,c.p=null;zrn(n.c),n.b.a.$b(),HSn(e)}function cWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(a=new YT,v=BB(mMn(e,(HXn(),Udt)),103),w=0,Frn(a,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=a.b;)s=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33),(GI(ZAn(t,Ldt))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&!qy(TD(ZAn(s,$dt)))&&Ypn(s,(hWn(),wlt),iln(w++)),!qy(TD(ZAn(s,Ggt)))&&(f=0!=(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a).i,b=kTn(s),l=GI(ZAn(s,sgt))===GI((ufn(),pCt)),g=null,(T=!P8(s,(sWn(),eSt))||mK(SD(ZAn(s,eSt)),w1n))&&l&&(f||b)&&(hon(g=kFn(s),Udt,v),Lx(g,gpt)&&My(new uwn(Gy(MD(mMn(g,gpt)))),g),0!=BB(ZAn(s,Fgt),174).gc()&&(h=g,JT(new Rq(null,(!s.c&&(s.c=new eU(XOt,s,9,9)),new w1(s.c,16))),new Xw(h)),mDn(s,g))),m=e,(y=BB(RX(n.a,JJ(s)),10))&&(m=y.e),d=wzn(n,s,m),g&&(d.e=g,g.e=d,Frn(a,(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a))));for(w=0,r5(a,t,a.c.b,a.c);0!=a.b;){for(o=new AL((!(c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33)).b&&(c.b=new eU(_Ot,c,12,3)),c.b));o.e!=o.i.gc();)tKn(u=BB(kpn(o),79)),(GI(ZAn(t,Ldt))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&Ypn(u,(hWn(),wlt),iln(w++)),j=PTn(BB(Wtn((!u.b&&(u.b=new hK(KOt,u,4,7)),u.b),0),82)),E=PTn(BB(Wtn((!u.c&&(u.c=new hK(KOt,u,5,8)),u.c),0),82)),qy(TD(ZAn(u,Ggt)))||qy(TD(ZAn(j,Ggt)))||qy(TD(ZAn(E,Ggt)))||(p=c,QIn(u)&&qy(TD(ZAn(j,wgt)))&&qy(TD(ZAn(u,dgt)))||Ctn(E,j)?p=j:Ctn(j,E)&&(p=E),m=e,(y=BB(RX(n.a,p),10))&&(m=y.e),hon(uWn(n,u,p,m),(hWn(),Fft),Lxn(n,u,t,e)));if(l=GI(ZAn(c,sgt))===GI((ufn(),pCt)))for(r=new AL((!c.a&&(c.a=new eU(UOt,c,10,11)),c.a));r.e!=r.i.gc();)T=!P8(i=BB(kpn(r),33),(sWn(),eSt))||mK(SD(ZAn(i,eSt)),w1n),k=GI(ZAn(i,sgt))===GI(pCt),T&&k&&r5(a,i,a.c.b,a.c)}}function aWn(n,t,e,i,r,c){var a,u,o,s,h,f,l;switch(t){case 71:a=i.q.getFullYear()-sQn>=-1900?1:0,oO(n,e>=4?Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn])[a]:Pun(Gk(Qtt,1),sVn,2,6,["BC","AD"])[a]);break;case 121:opn(n,e,i);break;case 77:XKn(n,e,i);break;case 107:Enn(n,0==(u=r.q.getHours())?24:u,e);break;case 83:RLn(n,e,r);break;case 69:o=i.q.getDay(),oO(n,5==e?Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[o]:4==e?Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[o]:Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[o]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[1]):oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[0]);break;case 104:Enn(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Enn(n,r.q.getHours()%12,e);break;case 72:Enn(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[h]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Enn(n,h,1);break;case 76:f=i.q.getMonth(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[f]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Enn(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,oO(n,e<4?Pun(Gk(Qtt,1),sVn,2,6,["Q1","Q2","Q3","Q4"])[l]:Pun(Gk(Qtt,1),sVn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Enn(n,i.q.getDate(),e);break;case 109:Enn(n,r.q.getMinutes(),e);break;case 115:Enn(n,r.q.getSeconds(),e);break;case 122:oO(n,e<4?c.c[0]:c.c[1]);break;case 118:oO(n,c.b);break;case 90:oO(n,e<3?nIn(c):3==e?wIn(c):dIn(c.a));break;default:return!1}return!0}function uWn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(tKn(t),o=BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82),h=BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82),u=PTn(o),s=PTn(h),a=0==(!t.a&&(t.a=new eU(FOt,t,6,6)),t.a).i?null:BB(Wtn((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),0),202),j=BB(RX(n.a,u),10),S=BB(RX(n.a,s),10),E=null,P=null,cL(o,186)&&(cL(k=BB(RX(n.a,o),299),11)?E=BB(k,11):cL(k,10)&&(j=BB(k,10),E=BB(xq(j.j,0),11))),cL(h,186)&&(cL(M=BB(RX(n.a,h),299),11)?P=BB(M,11):cL(M,10)&&(S=BB(M,10),P=BB(xq(S.j,0),11))),!j||!S)throw Hp(new ck("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(qan(d=new wY,t),hon(d,(hWn(),dlt),t),hon(d,(HXn(),vgt),null),b=BB(mMn(i,Zft),21),j==S&&b.Fc((bDn(),vft)),E||(ain(),y=qvt,T=null,a&&vA(BB(mMn(j,ept),98))&&(Y3(T=new xC(a.j,a.k),XJ(t)),t5(T,e),Ctn(s,u)&&(y=Hvt,UR(T,j.n))),E=dHn(j,T,y,i)),P||(ain(),y=Hvt,C=null,a&&vA(BB(mMn(S,ept),98))&&(Y3(C=new xC(a.b,a.c),XJ(t)),t5(C,e)),P=dHn(S,C,y,vW(S))),SZ(d,E),MZ(d,P),(E.e.c.length>1||E.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((bDn(),bft)),l=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));l.e!=l.i.gc();)if(!qy(TD(ZAn(f=BB(kpn(l),137),Ggt)))&&f.a)switch(g=Hhn(f),WB(d.b,g),BB(mMn(g,Ydt),272).g){case 1:case 2:b.Fc((bDn(),fft));break;case 0:b.Fc((bDn(),sft)),hon(g,Ydt,(Rtn(),zPt))}if(c=BB(mMn(i,qdt),314),p=BB(mMn(i,_gt),315),r=c==(Oin(),sht)||p==(Nvn(),pvt),a&&0!=(!a.a&&(a.a=new $L(xOt,a,5)),a.a).i&&r){for(v=qSn(a),w=new km,m=spn(v,0);m.b!=m.d.c;)DH(w,new wA(BB(b3(m),8)));hon(d,glt,w)}return d}function oWn(n){n.gb||(n.gb=!0,n.b=kan(n,0),Rrn(n.b,18),Krn(n.b,19),n.a=kan(n,1),Rrn(n.a,1),Krn(n.a,2),Krn(n.a,3),Krn(n.a,4),Krn(n.a,5),n.o=kan(n,2),Rrn(n.o,8),Rrn(n.o,9),Krn(n.o,10),Krn(n.o,11),Krn(n.o,12),Krn(n.o,13),Krn(n.o,14),Krn(n.o,15),Krn(n.o,16),Krn(n.o,17),Krn(n.o,18),Krn(n.o,19),Krn(n.o,20),Krn(n.o,21),Krn(n.o,22),Krn(n.o,23),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),n.p=kan(n,3),Rrn(n.p,2),Rrn(n.p,3),Rrn(n.p,4),Rrn(n.p,5),Krn(n.p,6),Krn(n.p,7),otn(n.p),otn(n.p),n.q=kan(n,4),Rrn(n.q,8),n.v=kan(n,5),Krn(n.v,9),otn(n.v),otn(n.v),otn(n.v),n.w=kan(n,6),Rrn(n.w,2),Rrn(n.w,3),Rrn(n.w,4),Krn(n.w,5),n.B=kan(n,7),Krn(n.B,1),otn(n.B),otn(n.B),otn(n.B),n.Q=kan(n,8),Krn(n.Q,0),otn(n.Q),n.R=kan(n,9),Rrn(n.R,1),n.S=kan(n,10),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),n.T=kan(n,11),Krn(n.T,10),Krn(n.T,11),Krn(n.T,12),Krn(n.T,13),Krn(n.T,14),otn(n.T),otn(n.T),n.U=kan(n,12),Rrn(n.U,2),Rrn(n.U,3),Krn(n.U,4),Krn(n.U,5),Krn(n.U,6),Krn(n.U,7),otn(n.U),n.V=kan(n,13),Krn(n.V,10),n.W=kan(n,14),Rrn(n.W,18),Rrn(n.W,19),Rrn(n.W,20),Krn(n.W,21),Krn(n.W,22),Krn(n.W,23),n.bb=kan(n,15),Rrn(n.bb,10),Rrn(n.bb,11),Rrn(n.bb,12),Rrn(n.bb,13),Rrn(n.bb,14),Rrn(n.bb,15),Rrn(n.bb,16),Krn(n.bb,17),otn(n.bb),otn(n.bb),n.eb=kan(n,16),Rrn(n.eb,2),Rrn(n.eb,3),Rrn(n.eb,4),Rrn(n.eb,5),Rrn(n.eb,6),Rrn(n.eb,7),Krn(n.eb,8),Krn(n.eb,9),n.ab=kan(n,17),Rrn(n.ab,0),Rrn(n.ab,1),n.H=kan(n,18),Krn(n.H,0),Krn(n.H,1),Krn(n.H,2),Krn(n.H,3),Krn(n.H,4),Krn(n.H,5),otn(n.H),n.db=kan(n,19),Krn(n.db,2),n.c=jan(n,20),n.d=jan(n,21),n.e=jan(n,22),n.f=jan(n,23),n.i=jan(n,24),n.g=jan(n,25),n.j=jan(n,26),n.k=jan(n,27),n.n=jan(n,28),n.r=jan(n,29),n.s=jan(n,30),n.t=jan(n,31),n.u=jan(n,32),n.fb=jan(n,33),n.A=jan(n,34),n.C=jan(n,35),n.D=jan(n,36),n.F=jan(n,37),n.G=jan(n,38),n.I=jan(n,39),n.J=jan(n,40),n.L=jan(n,41),n.M=jan(n,42),n.N=jan(n,43),n.O=jan(n,44),n.P=jan(n,45),n.X=jan(n,46),n.Y=jan(n,47),n.Z=jan(n,48),n.$=jan(n,49),n._=jan(n,50),n.cb=jan(n,51),n.K=jan(n,52))}function sWn(){var n,t;sWn=O,eSt=new up(w5n),mPt=new up(d5n),wvn(),iSt=new $O(W2n,rSt=CMt),new $p,cSt=new $O(VJn,null),aSt=new up(g5n),wEn(),fSt=EG(ZMt,Pun(Gk(qPt,1),$Vn,291,0,[VMt])),hSt=new $O(u3n,fSt),lSt=new $O(X2n,(hN(),!1)),Ffn(),bSt=new $O(J2n,wSt=BPt),Mbn(),vSt=new $O(y2n,mSt=ZPt),jSt=new $O(A4n,!1),ufn(),ESt=new $O(d2n,TSt=vCt),WSt=new WA(12),XSt=new $O(QJn,WSt),CSt=new $O(jZn,!1),ISt=new $O(m3n,!1),USt=new $O(MZn,!1),QEn(),uPt=new $O(EZn,oPt=YCt),gPt=new up(g3n),pPt=new up(pZn),vPt=new up(yZn),kPt=new up(kZn),ASt=new km,OSt=new $O(o3n,ASt),sSt=new $O(f3n,!1),MSt=new $O(l3n,!1),new up(p5n),LSt=new lm,$St=new $O(p3n,LSt),zSt=new $O(z2n,!1),new $p,yPt=new $O(v5n,1),new $O(m5n,!0),iln(0),new $O(y5n,iln(100)),new $O(k5n,!1),iln(0),new $O(j5n,iln(4e3)),iln(0),new $O(E5n,iln(400)),new $O(T5n,!1),new $O(M5n,!1),new $O(S5n,!0),new $O(P5n,!1),Fwn(),uSt=new $O(b5n,oSt=eOt),jPt=new $O(L2n,10),EPt=new $O(N2n,10),TPt=new $O(XJn,20),MPt=new $O(x2n,10),SPt=new $O(mZn,2),PPt=new $O(D2n,10),IPt=new $O(R2n,0),OPt=new $O(F2n,5),APt=new $O(K2n,1),$Pt=new $O(_2n,1),LPt=new $O(vZn,20),NPt=new $O(B2n,10),RPt=new $O(H2n,10),CPt=new up(q2n),DPt=new lA,xPt=new $O(v3n,DPt),YSt=new up(d3n),VSt=new $O(w3n,QSt=!1),xSt=new WA(5),NSt=new $O(Z2n,xSt),n$n(),t=BB(Vj(GCt),9),RSt=new YK(t,BB(SR(t,t.length),9),0),DSt=new $O(CZn,RSt),cpn(),ZSt=new $O(e3n,nPt=BCt),ePt=new up(i3n),iPt=new up(r3n),rPt=new up(c3n),tPt=new up(a3n),n=BB(Vj(YIt),9),_St=new YK(n,BB(SR(n,n.length),9),0),KSt=new $O(PZn,_St),GSt=nbn((n_n(),GIt)),qSt=new $O(SZn,GSt),HSt=new xC(0,0),BSt=new $O(BZn,HSt),FSt=new $O(Y2n,!1),Rtn(),gSt=new $O(s3n,pSt=zPt),dSt=new $O(TZn,!1),new up(C5n),iln(1),new $O(I5n,null),cPt=new up(b3n),sPt=new up(h3n),kUn(),wPt=new $O(U2n,dPt=PIt),aPt=new up(G2n),lIn(),lPt=nbn(rIt),fPt=new $O(IZn,lPt),hPt=new $O(n3n,!1),bPt=new $O(t3n,!0),SSt=new $O(V2n,!1),PSt=new $O(Q2n,!1),ySt=new $O(WJn,1),nMn(),new $O(O5n,kSt=aCt),JSt=!0}function hWn(){var n,t;hWn=O,dlt=new up(OZn),Fft=new up("coordinateOrigin"),Mlt=new up("processors"),_ft=new iR("compoundNode",(hN(),!1)),elt=new iR("insideConnections",!1),glt=new up("originalBendpoints"),plt=new up("originalDummyNodePosition"),vlt=new up("originalLabelEdge"),Plt=new up("representedLabels"),zft=new up("endLabels"),Uft=new up("endLabel.origin"),ult=new iR("labelSide",(Xyn(),MCt)),blt=new iR("maxEdgeThickness",0),Clt=new iR("reversed",!1),Slt=new up(AZn),hlt=new iR("longEdgeSource",null),flt=new iR("longEdgeTarget",null),slt=new iR("longEdgeHasLabelDummies",!1),olt=new iR("longEdgeBeforeLabelDummy",!1),Gft=new iR("edgeConstraint",(Jun(),Aht)),rlt=new up("inLayerLayoutUnit"),ilt=new iR("inLayerConstraint",(z7(),Pft)),clt=new iR("inLayerSuccessorConstraint",new Np),alt=new iR("inLayerSuccessorConstraintBetweenNonDummies",!1),Elt=new up("portDummy"),Bft=new iR("crossingHint",iln(0)),Zft=new iR("graphProperties",new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),Qft=new iR("externalPortSide",(kUn(),PIt)),Yft=new iR("externalPortSize",new Gj),Wft=new up("externalPortReplacedDummies"),Vft=new up("externalPortReplacedDummy"),Xft=new iR("externalPortConnections",new YK(n=BB(Vj(FIt),9),BB(SR(n,n.length),9),0)),Tlt=new iR(dJn,0),xft=new up("barycenterAssociates"),Klt=new up("TopSideComments"),Dft=new up("BottomSideComments"),Kft=new up("CommentConnectionPort"),tlt=new iR("inputCollect",!1),klt=new iR("outputCollect",!1),qft=new iR("cyclic",!1),Hft=new up("crossHierarchyMap"),Rlt=new up("targetOffset"),new iR("splineLabelSize",new Gj),Alt=new up("spacings"),jlt=new iR("partitionConstraint",!1),Rft=new up("breakingPoint.info"),xlt=new up("splines.survivingEdge"),Nlt=new up("splines.route.start"),$lt=new up("splines.edgeChain"),ylt=new up("originalPortConstraints"),Olt=new up("selfLoopHolder"),Llt=new up("splines.nsPortY"),wlt=new up("modelOrder"),llt=new up("longEdgeTargetNode"),Jft=new iR(z1n,!1),Ilt=new iR(z1n,!1),nlt=new up("layerConstraints.hiddenNodes"),mlt=new up("layerConstraints.opposidePort"),Dlt=new up("targetNode.modelOrder")}function fWn(){fWn=O,_nn(),Sbt=new $O(U1n,Pbt=Sht),Gbt=new $O(X1n,(hN(),!1)),z2(),Vbt=new $O(W1n,Qbt=Aft),wwt=new $O(V1n,!1),dwt=new $O(Q1n,!0),Ult=new $O(Y1n,!1),U7(),Nwt=new $O(J1n,xwt=Kvt),iln(1),qwt=new $O(Z1n,iln(7)),Gwt=new $O(n0n,!1),zbt=new $O(t0n,!1),Vvn(),Tbt=new $O(e0n,Mbt=yht),TTn(),lwt=new $O(i0n,bwt=tvt),Tbn(),ewt=new $O(r0n,iwt=qlt),iln(-1),twt=new $O(c0n,iln(-1)),iln(-1),rwt=new $O(a0n,iln(-1)),iln(-1),cwt=new $O(u0n,iln(4)),iln(-1),uwt=new $O(o0n,iln(2)),sNn(),hwt=new $O(s0n,fwt=Ivt),iln(0),swt=new $O(h0n,iln(0)),Zbt=new $O(f0n,iln(DWn)),Oin(),jbt=new $O(l0n,Ebt=hht),ubt=new $O(b0n,!1),gbt=new $O(w0n,.1),ybt=new $O(d0n,!1),iln(-1),vbt=new $O(g0n,iln(-1)),iln(-1),mbt=new $O(p0n,iln(-1)),iln(0),obt=new $O(v0n,iln(40)),Kan(),bbt=new $O(m0n,wbt=Eft),sbt=new $O(y0n,hbt=kft),Nvn(),$wt=new $O(k0n,Lwt=gvt),jwt=new up(j0n),g7(),gwt=new $O(E0n,pwt=qht),Bjn(),mwt=new $O(T0n,ywt=Qht),new $p,Mwt=new $O(M0n,.3),Pwt=new up(S0n),bvn(),Cwt=new $O(P0n,Iwt=lvt),Hcn(),Nbt=new $O(C0n,xbt=Wvt),A6(),Dbt=new $O(I0n,Rbt=Zvt),Usn(),Kbt=new $O(O0n,_bt=rmt),Bbt=new $O(A0n,.2),$bt=new $O($0n,2),_wt=new $O(L0n,null),Bwt=new $O(N0n,10),Fwt=new $O(x0n,10),Hwt=new $O(D0n,20),iln(0),Dwt=new $O(R0n,iln(0)),iln(0),Rwt=new $O(K0n,iln(0)),iln(0),Kwt=new $O(_0n,iln(0)),Xlt=new $O(F0n,!1),JMn(),Qlt=new $O(B0n,Ylt=cft),V8(),Wlt=new $O(H0n,Vlt=aht),Xbt=new $O(q0n,!1),iln(0),Ubt=new $O(G0n,iln(16)),iln(0),Wbt=new $O(z0n,iln(5)),$un(),ldt=new $O(U0n,bdt=bmt),zwt=new $O(X0n,10),Wwt=new $O(W0n,1),uin(),edt=new $O(V0n,idt=ght),Ywt=new up(Q0n),ndt=iln(1),iln(0),Zwt=new $O(Y0n,ndt),dcn(),pdt=new $O(J0n,vdt=umt),wdt=new up(Z0n),odt=new $O(n2n,!0),adt=new $O(t2n,2),hdt=new $O(e2n,!0),gSn(),Obt=new $O(i2n,Abt=_ht),$Pn(),Cbt=new $O(r2n,Ibt=Zst),mon(),cbt=new $O(c2n,abt=Nvt),rbt=new $O(a2n,!1),Bfn(),Jlt=new $O(u2n,Zlt=wut),Mhn(),ebt=new $O(o2n,ibt=cvt),nbt=new $O(s2n,0),tbt=new $O(h2n,0),Jbt=jht,Ybt=sht,awt=nvt,owt=nvt,nwt=Ypt,ufn(),pbt=pCt,kbt=hht,dbt=hht,fbt=hht,lbt=pCt,Ewt=mvt,Twt=gvt,vwt=gvt,kwt=gvt,Swt=vvt,Awt=mvt,Owt=mvt,Mbn(),Fbt=JPt,Hbt=JPt,qbt=rmt,Lbt=YPt,Uwt=wmt,Xwt=lmt,Vwt=wmt,Qwt=lmt,rdt=wmt,cdt=lmt,Jwt=dht,tdt=ght,mdt=wmt,ydt=lmt,ddt=wmt,gdt=lmt,sdt=lmt,udt=lmt,fdt=lmt}function lWn(){lWn=O,rot=new nP("DIRECTION_PREPROCESSOR",0),tot=new nP("COMMENT_PREPROCESSOR",1),cot=new nP("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),kot=new nP("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Fot=new nP("PARTITION_PREPROCESSOR",4),Mot=new nP("LABEL_DUMMY_INSERTER",5),Uot=new nP("SELF_LOOP_PREPROCESSOR",6),Oot=new nP("LAYER_CONSTRAINT_PREPROCESSOR",7),Kot=new nP("PARTITION_MIDPROCESSOR",8),got=new nP("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),Not=new nP("NODE_PROMOTION",10),Iot=new nP("LAYER_CONSTRAINT_POSTPROCESSOR",11),_ot=new nP("PARTITION_POSTPROCESSOR",12),lot=new nP("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Wot=new nP("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),Vut=new nP("BREAKING_POINT_INSERTER",15),Lot=new nP("LONG_EDGE_SPLITTER",16),Hot=new nP("PORT_SIDE_PROCESSOR",17),jot=new nP("INVERTED_PORT_PROCESSOR",18),Bot=new nP("PORT_LIST_SORTER",19),Qot=new nP("SORT_BY_INPUT_ORDER_OF_MODEL",20),Dot=new nP("NORTH_SOUTH_PORT_PREPROCESSOR",21),Qut=new nP("BREAKING_POINT_PROCESSOR",22),Rot=new nP(E1n,23),Yot=new nP(T1n,24),Got=new nP("SELF_LOOP_PORT_RESTORER",25),Vot=new nP("SINGLE_EDGE_GRAPH_WRAPPER",26),Eot=new nP("IN_LAYER_CONSTRAINT_PROCESSOR",27),sot=new nP("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),Tot=new nP("LABEL_AND_NODE_SIZE_PROCESSOR",29),yot=new nP("INNERMOST_NODE_MARGIN_CALCULATOR",30),Xot=new nP("SELF_LOOP_ROUTER",31),Zut=new nP("COMMENT_NODE_MARGIN_CALCULATOR",32),uot=new nP("END_LABEL_PREPROCESSOR",33),Pot=new nP("LABEL_DUMMY_SWITCHER",34),Jut=new nP("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),Cot=new nP("LABEL_SIDE_SELECTOR",36),vot=new nP("HYPEREDGE_DUMMY_MERGER",37),bot=new nP("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),Aot=new nP("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),dot=new nP("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),eot=new nP("CONSTRAINTS_POSTPROCESSOR",41),not=new nP("COMMENT_POSTPROCESSOR",42),mot=new nP("HYPERNODE_PROCESSOR",43),wot=new nP("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),$ot=new nP("LONG_EDGE_JOINER",45),zot=new nP("SELF_LOOP_POSTPROCESSOR",46),Yut=new nP("BREAKING_POINT_REMOVER",47),xot=new nP("NORTH_SOUTH_PORT_POSTPROCESSOR",48),pot=new nP("HORIZONTAL_COMPACTOR",49),Sot=new nP("LABEL_DUMMY_REMOVER",50),hot=new nP("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),oot=new nP("END_LABEL_SORTER",52),qot=new nP("REVERSED_EDGE_RESTORER",53),aot=new nP("END_LABEL_POSTPROCESSOR",54),fot=new nP("HIERARCHICAL_NODE_RESIZER",55),iot=new nP("DIRECTION_POSTPROCESSOR",56)}function bWn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$,L,N,x,D,R,K,_,F,B,H,q,G,z,U,X,W,V,Q,Y,J,Z,nn,tn,en,rn,cn,an,un,on;for(J=0,L=0,D=(O=t).length;L<D;++L)for(G=new Wb((C=O[L]).j);G.a<G.c.c.length;){for(U=0,o=new Wb((q=BB(n0(G),11)).g);o.a<o.c.c.length;)u=BB(n0(o),17),C.c!=u.d.i.c&&++U;U>0&&(n.a[q.p]=J++)}for(rn=0,N=0,R=(A=i).length;N<R;++N){for(K=0,G=new Wb((C=A[N]).j);G.a<G.c.c.length&&(q=BB(n0(G),11)).j==(kUn(),sIt);)for(o=new Wb(q.e);o.a<o.c.c.length;)if(u=BB(n0(o),17),C.c!=u.c.i.c){++K;break}for(F=0,X=new M2(C.j,C.j.c.length);X.b>0;){for(Px(X.b>0),U=0,o=new Wb((q=BB(X.a.Xb(X.c=--X.b),11)).e);o.a<o.c.c.length;)u=BB(n0(o),17),C.c!=u.c.i.c&&++U;U>0&&(q.j==(kUn(),sIt)?(n.a[q.p]=rn,++rn):(n.a[q.p]=rn+K+F,++F))}rn+=F}for(z=new xp,d=new fA,$=0,x=(I=t).length;$<x;++$)for(tn=new Wb((C=I[$]).j);tn.a<tn.c.c.length;)for(o=new Wb((nn=BB(n0(tn),11)).g);o.a<o.c.c.length;)if(an=(u=BB(n0(o),17)).d,C.c!=an.i.c)if(Z=BB(qI(AY(z.f,nn)),467),cn=BB(qI(AY(z.f,an)),467),Z||cn)if(Z)if(cn)if(Z==cn)WB(Z.a,u);else{for(WB(Z.a,u),H=new Wb(cn.d);H.a<H.c.c.length;)B=BB(n0(H),11),jCn(z.f,B,Z);gun(Z.a,cn.a),gun(Z.d,cn.d),d.a.Bc(cn)}else WB(Z.a,u),WB(Z.d,an),jCn(z.f,an,Z);else WB(cn.a,u),WB(cn.d,nn),jCn(z.f,nn,cn);else w=new DR,d.a.zc(w,d),WB(w.a,u),WB(w.d,nn),jCn(z.f,nn,w),WB(w.d,an),jCn(z.f,an,w);for(g=BB(Emn(d,x8(Fmt,{3:1,4:1,5:1,1946:1},467,d.a.gc(),0,1)),1946),P=t[0].c,Y=i[0].c,l=0,b=(f=g).length;l<b;++l)for((h=f[l]).e=J,h.f=rn,G=new Wb(h.d);G.a<G.c.c.length;)q=BB(n0(G),11),W=n.a[q.p],q.i.c==P?(W<h.e&&(h.e=W),W>h.b&&(h.b=W)):q.i.c==Y&&(W<h.f&&(h.f=W),W>h.c&&(h.c=W));for(z9(g,0,g.length,null),en=x8(ANt,hQn,25,g.length,15,1),r=x8(ANt,hQn,25,rn+1,15,1),v=0;v<g.length;v++)en[v]=g[v].f,r[en[v]]=1;for(a=0,m=0;m<r.length;m++)1==r[m]?r[m]=a:--a;for(V=0,y=0;y<en.length;y++)en[y]+=r[en[y]],V=e.Math.max(V,en[y]+1);for(s=1;s<V;)s*=2;for(on=2*s-1,s-=1,un=x8(ANt,hQn,25,on,15,1),c=0,M=0;M<en.length;M++)for(++un[T=en[M]+s];T>0;)T%2>0&&(c+=un[T+1]),++un[T=(T-1)/2|0];for(S=x8(qmt,HWn,362,2*g.length,0,1),k=0;k<g.length;k++)S[2*k]=new qV(g[k],g[k].e,g[k].b,(Q4(),Hmt)),S[2*k+1]=new qV(g[k],g[k].b,g[k].e,Bmt);for(z9(S,0,S.length,null),_=0,j=0;j<S.length;j++)switch(S[j].d.g){case 0:++_;break;case 1:c+=--_}for(Q=x8(qmt,HWn,362,2*g.length,0,1),E=0;E<g.length;E++)Q[2*E]=new qV(g[E],g[E].f,g[E].c,(Q4(),Hmt)),Q[2*E+1]=new qV(g[E],g[E].c,g[E].f,Bmt);for(z9(Q,0,Q.length,null),_=0,p=0;p<Q.length;p++)switch(Q[p].d.g){case 0:++_;break;case 1:c+=--_}return c}function wWn(){wWn=O,sNt=new Ap(7),hNt=new oG(8,94),new oG(8,64),fNt=new oG(8,36),pNt=new oG(8,65),vNt=new oG(8,122),mNt=new oG(8,90),jNt=new oG(8,98),dNt=new oG(8,66),yNt=new oG(8,60),ENt=new oG(8,62),oNt=new Ap(11),Yxn(uNt=new M0(4),48,57),Yxn(kNt=new M0(4),48,57),Yxn(kNt,65,90),Yxn(kNt,95,95),Yxn(kNt,97,122),Yxn(gNt=new M0(4),9,9),Yxn(gNt,10,10),Yxn(gNt,12,12),Yxn(gNt,13,13),Yxn(gNt,32,32),lNt=$Fn(uNt),wNt=$Fn(kNt),bNt=$Fn(gNt),iNt=new xp,rNt=new xp,cNt=Pun(Gk(Qtt,1),sVn,2,6,["Cn","Lu","Ll","Lt","Lm","Lo","Mn","Me","Mc","Nd","Nl","No","Zs","Zl","Zp","Cc","Cf",null,"Co","Cs","Pd","Ps","Pe","Pc","Po","Sm","Sc","Sk","So","Pi","Pf","L","M","N","Z","C","P","S"]),eNt=Pun(Gk(Qtt,1),sVn,2,6,["Basic Latin","Latin-1 Supplement","Latin Extended-A","Latin Extended-B","IPA Extensions","Spacing Modifier Letters","Combining Diacritical Marks","Greek","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul Jamo","Ethiopic","Cherokee","Unified Canadian Aboriginal Syllabics","Ogham","Runic","Khmer","Mongolian","Latin Extended Additional","Greek Extended","General Punctuation","Superscripts and Subscripts","Currency Symbols","Combining Marks for Symbols","Letterlike Symbols","Number Forms","Arrows","Mathematical Operators","Miscellaneous Technical","Control Pictures","Optical Character Recognition","Enclosed Alphanumerics","Box Drawing","Block Elements","Geometric Shapes","Miscellaneous Symbols","Dingbats","Braille Patterns","CJK Radicals Supplement","Kangxi Radicals","Ideographic Description Characters","CJK Symbols and Punctuation","Hiragana","Katakana","Bopomofo","Hangul Compatibility Jamo","Kanbun","Bopomofo Extended","Enclosed CJK Letters and Months","CJK Compatibility","CJK Unified Ideographs Extension A","CJK Unified Ideographs","Yi Syllables","Yi Radicals","Hangul Syllables",gnt,"CJK Compatibility Ideographs","Alphabetic Presentation Forms","Arabic Presentation Forms-A","Combining Half Marks","CJK Compatibility Forms","Small Form Variants","Arabic Presentation Forms-B","Specials","Halfwidth and Fullwidth Forms","Old Italic","Gothic","Deseret","Byzantine Musical Symbols","Musical Symbols","Mathematical Alphanumeric Symbols","CJK Unified Ideographs Extension B","CJK Compatibility Ideographs Supplement","Tags"]),aNt=Pun(Gk(ANt,1),hQn,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function dWn(){dWn=O,Prt=new ocn("OUT_T_L",0,(J9(),Yit),(G7(),irt),(Dtn(),Git),Git,Pun(Gk(Dnt,1),HWn,21,0,[EG((n$n(),LCt),Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt]))])),Srt=new ocn("OUT_T_C",1,Qit,irt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt,OCt]))])),Crt=new ocn("OUT_T_R",2,Jit,irt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt]))])),vrt=new ocn("OUT_B_L",3,Yit,crt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt]))])),prt=new ocn("OUT_B_C",4,Qit,crt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt,OCt]))])),mrt=new ocn("OUT_B_R",5,Jit,crt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt]))])),jrt=new ocn("OUT_L_T",6,Jit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,DCt,OCt]))])),krt=new ocn("OUT_L_C",7,Jit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,xCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,xCt,OCt]))])),yrt=new ocn("OUT_L_B",8,Jit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,NCt,OCt]))])),Mrt=new ocn("OUT_R_T",9,Yit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,DCt,OCt]))])),Trt=new ocn("OUT_R_C",10,Yit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,xCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,xCt,OCt]))])),Ert=new ocn("OUT_R_B",11,Yit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,NCt,OCt]))])),drt=new ocn("IN_T_L",12,Yit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt,OCt]))])),wrt=new ocn("IN_T_C",13,Qit,crt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt,OCt]))])),grt=new ocn("IN_T_R",14,Jit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt,OCt]))])),lrt=new ocn("IN_C_L",15,Yit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ICt,OCt]))])),frt=new ocn("IN_C_C",16,Qit,rrt,zit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,CCt,OCt]))])),brt=new ocn("IN_C_R",17,Jit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ACt,OCt]))])),srt=new ocn("IN_B_L",18,Yit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt,OCt]))])),ort=new ocn("IN_B_C",19,Qit,irt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt,OCt]))])),hrt=new ocn("IN_B_R",20,Jit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt,OCt]))])),Irt=new ocn(hJn,21,null,null,null,null,Pun(Gk(Dnt,1),HWn,21,0,[]))}function gWn(){gWn=O,i$t=(QX(),t$t).b,BB(Wtn(QQ(t$t.b),0),34),BB(Wtn(QQ(t$t.b),1),18),e$t=t$t.a,BB(Wtn(QQ(t$t.a),0),34),BB(Wtn(QQ(t$t.a),1),18),BB(Wtn(QQ(t$t.a),2),18),BB(Wtn(QQ(t$t.a),3),18),BB(Wtn(QQ(t$t.a),4),18),r$t=t$t.o,BB(Wtn(QQ(t$t.o),0),34),BB(Wtn(QQ(t$t.o),1),34),a$t=BB(Wtn(QQ(t$t.o),2),18),BB(Wtn(QQ(t$t.o),3),18),BB(Wtn(QQ(t$t.o),4),18),BB(Wtn(QQ(t$t.o),5),18),BB(Wtn(QQ(t$t.o),6),18),BB(Wtn(QQ(t$t.o),7),18),BB(Wtn(QQ(t$t.o),8),18),BB(Wtn(QQ(t$t.o),9),18),BB(Wtn(QQ(t$t.o),10),18),BB(Wtn(QQ(t$t.o),11),18),BB(Wtn(QQ(t$t.o),12),18),BB(Wtn(QQ(t$t.o),13),18),BB(Wtn(QQ(t$t.o),14),18),BB(Wtn(QQ(t$t.o),15),18),BB(Wtn(VQ(t$t.o),0),59),BB(Wtn(VQ(t$t.o),1),59),BB(Wtn(VQ(t$t.o),2),59),BB(Wtn(VQ(t$t.o),3),59),BB(Wtn(VQ(t$t.o),4),59),BB(Wtn(VQ(t$t.o),5),59),BB(Wtn(VQ(t$t.o),6),59),BB(Wtn(VQ(t$t.o),7),59),BB(Wtn(VQ(t$t.o),8),59),BB(Wtn(VQ(t$t.o),9),59),c$t=t$t.p,BB(Wtn(QQ(t$t.p),0),34),BB(Wtn(QQ(t$t.p),1),34),BB(Wtn(QQ(t$t.p),2),34),BB(Wtn(QQ(t$t.p),3),34),BB(Wtn(QQ(t$t.p),4),18),BB(Wtn(QQ(t$t.p),5),18),BB(Wtn(VQ(t$t.p),0),59),BB(Wtn(VQ(t$t.p),1),59),u$t=t$t.q,BB(Wtn(QQ(t$t.q),0),34),o$t=t$t.v,BB(Wtn(QQ(t$t.v),0),18),BB(Wtn(VQ(t$t.v),0),59),BB(Wtn(VQ(t$t.v),1),59),BB(Wtn(VQ(t$t.v),2),59),s$t=t$t.w,BB(Wtn(QQ(t$t.w),0),34),BB(Wtn(QQ(t$t.w),1),34),BB(Wtn(QQ(t$t.w),2),34),BB(Wtn(QQ(t$t.w),3),18),h$t=t$t.B,BB(Wtn(QQ(t$t.B),0),18),BB(Wtn(VQ(t$t.B),0),59),BB(Wtn(VQ(t$t.B),1),59),BB(Wtn(VQ(t$t.B),2),59),b$t=t$t.Q,BB(Wtn(QQ(t$t.Q),0),18),BB(Wtn(VQ(t$t.Q),0),59),w$t=t$t.R,BB(Wtn(QQ(t$t.R),0),34),d$t=t$t.S,BB(Wtn(VQ(t$t.S),0),59),BB(Wtn(VQ(t$t.S),1),59),BB(Wtn(VQ(t$t.S),2),59),BB(Wtn(VQ(t$t.S),3),59),BB(Wtn(VQ(t$t.S),4),59),BB(Wtn(VQ(t$t.S),5),59),BB(Wtn(VQ(t$t.S),6),59),BB(Wtn(VQ(t$t.S),7),59),BB(Wtn(VQ(t$t.S),8),59),BB(Wtn(VQ(t$t.S),9),59),BB(Wtn(VQ(t$t.S),10),59),BB(Wtn(VQ(t$t.S),11),59),BB(Wtn(VQ(t$t.S),12),59),BB(Wtn(VQ(t$t.S),13),59),BB(Wtn(VQ(t$t.S),14),59),g$t=t$t.T,BB(Wtn(QQ(t$t.T),0),18),BB(Wtn(QQ(t$t.T),2),18),p$t=BB(Wtn(QQ(t$t.T),3),18),BB(Wtn(QQ(t$t.T),4),18),BB(Wtn(VQ(t$t.T),0),59),BB(Wtn(VQ(t$t.T),1),59),BB(Wtn(QQ(t$t.T),1),18),v$t=t$t.U,BB(Wtn(QQ(t$t.U),0),34),BB(Wtn(QQ(t$t.U),1),34),BB(Wtn(QQ(t$t.U),2),18),BB(Wtn(QQ(t$t.U),3),18),BB(Wtn(QQ(t$t.U),4),18),BB(Wtn(QQ(t$t.U),5),18),BB(Wtn(VQ(t$t.U),0),59),m$t=t$t.V,BB(Wtn(QQ(t$t.V),0),18),y$t=t$t.W,BB(Wtn(QQ(t$t.W),0),34),BB(Wtn(QQ(t$t.W),1),34),BB(Wtn(QQ(t$t.W),2),34),BB(Wtn(QQ(t$t.W),3),18),BB(Wtn(QQ(t$t.W),4),18),BB(Wtn(QQ(t$t.W),5),18),j$t=t$t.bb,BB(Wtn(QQ(t$t.bb),0),34),BB(Wtn(QQ(t$t.bb),1),34),BB(Wtn(QQ(t$t.bb),2),34),BB(Wtn(QQ(t$t.bb),3),34),BB(Wtn(QQ(t$t.bb),4),34),BB(Wtn(QQ(t$t.bb),5),34),BB(Wtn(QQ(t$t.bb),6),34),BB(Wtn(QQ(t$t.bb),7),18),BB(Wtn(VQ(t$t.bb),0),59),BB(Wtn(VQ(t$t.bb),1),59),E$t=t$t.eb,BB(Wtn(QQ(t$t.eb),0),34),BB(Wtn(QQ(t$t.eb),1),34),BB(Wtn(QQ(t$t.eb),2),34),BB(Wtn(QQ(t$t.eb),3),34),BB(Wtn(QQ(t$t.eb),4),34),BB(Wtn(QQ(t$t.eb),5),34),BB(Wtn(QQ(t$t.eb),6),18),BB(Wtn(QQ(t$t.eb),7),18),k$t=t$t.ab,BB(Wtn(QQ(t$t.ab),0),34),BB(Wtn(QQ(t$t.ab),1),34),f$t=t$t.H,BB(Wtn(QQ(t$t.H),0),18),BB(Wtn(QQ(t$t.H),1),18),BB(Wtn(QQ(t$t.H),2),18),BB(Wtn(QQ(t$t.H),3),18),BB(Wtn(QQ(t$t.H),4),18),BB(Wtn(QQ(t$t.H),5),18),BB(Wtn(VQ(t$t.H),0),59),T$t=t$t.db,BB(Wtn(QQ(t$t.db),0),18),l$t=t$t.M}function pWn(n){var t;n.O||(n.O=!0,Nrn(n,"type"),xrn(n,"ecore.xml.type"),Drn(n,S7n),t=BB($$n((WM(),zAt),S7n),1945),f9(kY(n.fb),n.b),z0(n.b,wLt,"AnyType",!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.D,K9n,null,0,-1,wLt,!1,!1,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.D,"any",null,0,-1,wLt,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),2),34),n.wb.D,"anyAttribute",null,0,-1,wLt,!1,!1,!0,!1,!1,!1),z0(n.bb,zLt,A7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.gb,"data",null,0,1,zLt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.gb,Y6n,null,1,1,zLt,!1,!1,!0,!1,!0,!1),z0(n.fb,ULt,$7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.fb),0),34),t.gb,"rawValue",null,0,1,ULt,!0,!0,!0,!1,!0,!0),ucn(BB(Wtn(QQ(n.fb),1),34),t.a,E6n,null,0,1,ULt,!0,!0,!0,!1,!0,!0),Myn(BB(Wtn(QQ(n.fb),2),18),n.wb.q,null,"instanceType",1,1,ULt,!1,!1,!0,!1,!1,!1,!1),z0(n.qb,XLt,L7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),0),34),n.wb.D,K9n,null,0,-1,null,!1,!1,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),1),18),n.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),2),18),n.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.qb),3),34),n.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),4),34),n.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),Myn(BB(Wtn(QQ(n.qb),5),18),n.bb,null,cnt,0,-2,null,!0,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),6),34),n.gb,O6n,null,0,-2,null,!0,!0,!0,!1,!1,!0),dV(n.a,Ant,"AnySimpleType",!0),dV(n.c,Qtt,"AnyURI",!0),dV(n.d,Gk(NNt,1),"Base64Binary",!0),dV(n.e,$Nt,"Boolean",!0),dV(n.f,ktt,"BooleanObject",!0),dV(n.g,NNt,"Byte",!0),dV(n.i,Ttt,"ByteObject",!0),dV(n.j,Qtt,"Date",!0),dV(n.k,Qtt,"DateTime",!0),dV(n.n,iet,"Decimal",!0),dV(n.o,xNt,"Double",!0),dV(n.p,Ptt,"DoubleObject",!0),dV(n.q,Qtt,"Duration",!0),dV(n.s,Rnt,"ENTITIES",!0),dV(n.r,Rnt,"ENTITIESBase",!0),dV(n.t,Qtt,_7n,!0),dV(n.u,DNt,"Float",!0),dV(n.v,Ctt,"FloatObject",!0),dV(n.w,Qtt,"GDay",!0),dV(n.B,Qtt,"GMonth",!0),dV(n.A,Qtt,"GMonthDay",!0),dV(n.C,Qtt,"GYear",!0),dV(n.D,Qtt,"GYearMonth",!0),dV(n.F,Gk(NNt,1),"HexBinary",!0),dV(n.G,Qtt,"ID",!0),dV(n.H,Qtt,"IDREF",!0),dV(n.J,Rnt,"IDREFS",!0),dV(n.I,Rnt,"IDREFSBase",!0),dV(n.K,ANt,"Int",!0),dV(n.M,oet,"Integer",!0),dV(n.L,Att,"IntObject",!0),dV(n.P,Qtt,"Language",!0),dV(n.Q,LNt,"Long",!0),dV(n.R,Rtt,"LongObject",!0),dV(n.S,Qtt,"Name",!0),dV(n.T,Qtt,F7n,!0),dV(n.U,oet,"NegativeInteger",!0),dV(n.V,Qtt,Q7n,!0),dV(n.X,Rnt,"NMTOKENS",!0),dV(n.W,Rnt,"NMTOKENSBase",!0),dV(n.Y,oet,"NonNegativeInteger",!0),dV(n.Z,oet,"NonPositiveInteger",!0),dV(n.$,Qtt,"NormalizedString",!0),dV(n._,Qtt,"NOTATION",!0),dV(n.ab,Qtt,"PositiveInteger",!0),dV(n.cb,Qtt,"QName",!0),dV(n.db,RNt,"Short",!0),dV(n.eb,_tt,"ShortObject",!0),dV(n.gb,Qtt,qVn,!0),dV(n.hb,Qtt,"Time",!0),dV(n.ib,Qtt,"Token",!0),dV(n.jb,RNt,"UnsignedByte",!0),dV(n.kb,_tt,"UnsignedByteObject",!0),dV(n.lb,LNt,"UnsignedInt",!0),dV(n.mb,Rtt,"UnsignedIntObject",!0),dV(n.nb,oet,"UnsignedLong",!0),dV(n.ob,ANt,"UnsignedShort",!0),dV(n.pb,Att,"UnsignedShortObject",!0),Lhn(n,S7n),yWn(n))}function vWn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,w1n),"ELK Layered"),"Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level."),new Cc),w1n),EG((hAn(),iAt),Pun(Gk(aAt,1),$Vn,237,0,[nAt,tAt,ZOt,eAt,YOt,QOt]))))),u2(n,w1n,L2n,mpn(ppt)),u2(n,w1n,N2n,mpn(vpt)),u2(n,w1n,XJn,mpn(mpt)),u2(n,w1n,x2n,mpn(ypt)),u2(n,w1n,mZn,mpn(jpt)),u2(n,w1n,D2n,mpn(Ept)),u2(n,w1n,R2n,mpn(Spt)),u2(n,w1n,K2n,mpn(Cpt)),u2(n,w1n,_2n,mpn(Ipt)),u2(n,w1n,F2n,mpn(Ppt)),u2(n,w1n,vZn,mpn(Opt)),u2(n,w1n,B2n,mpn($pt)),u2(n,w1n,H2n,mpn(Npt)),u2(n,w1n,q2n,mpn(Mpt)),u2(n,w1n,L0n,mpn(gpt)),u2(n,w1n,x0n,mpn(kpt)),u2(n,w1n,N0n,mpn(Tpt)),u2(n,w1n,D0n,mpn(Apt)),u2(n,w1n,pZn,iln(0)),u2(n,w1n,R0n,mpn(fpt)),u2(n,w1n,K0n,mpn(lpt)),u2(n,w1n,_0n,mpn(bpt)),u2(n,w1n,U0n,mpn(zpt)),u2(n,w1n,X0n,mpn(Rpt)),u2(n,w1n,W0n,mpn(Kpt)),u2(n,w1n,V0n,mpn(Bpt)),u2(n,w1n,Q0n,mpn(_pt)),u2(n,w1n,Y0n,mpn(Fpt)),u2(n,w1n,J0n,mpn(Xpt)),u2(n,w1n,Z0n,mpn(Upt)),u2(n,w1n,n2n,mpn(qpt)),u2(n,w1n,t2n,mpn(Hpt)),u2(n,w1n,e2n,mpn(Gpt)),u2(n,w1n,S0n,mpn(Rgt)),u2(n,w1n,P0n,mpn(Kgt)),u2(n,w1n,O0n,mpn(rgt)),u2(n,w1n,A0n,mpn(cgt)),u2(n,w1n,QJn,Ugt),u2(n,w1n,y2n,ngt),u2(n,w1n,G2n,0),u2(n,w1n,yZn,iln(1)),u2(n,w1n,VJn,dZn),u2(n,w1n,z2n,mpn(Ggt)),u2(n,w1n,EZn,mpn(ept)),u2(n,w1n,U2n,mpn(upt)),u2(n,w1n,X2n,mpn(zdt)),u2(n,w1n,W2n,mpn(kdt)),u2(n,w1n,d2n,mpn(sgt)),u2(n,w1n,kZn,(hN(),!0)),u2(n,w1n,V2n,mpn(wgt)),u2(n,w1n,Q2n,mpn(dgt)),u2(n,w1n,PZn,mpn(Fgt)),u2(n,w1n,SZn,mpn(qgt)),u2(n,w1n,Y2n,mpn(Bgt)),u2(n,w1n,J2n,Wdt),u2(n,w1n,CZn,mpn($gt)),u2(n,w1n,Z2n,mpn(Agt)),u2(n,w1n,IZn,mpn(cpt)),u2(n,w1n,n3n,mpn(rpt)),u2(n,w1n,t3n,mpn(apt)),u2(n,w1n,e3n,Vgt),u2(n,w1n,i3n,mpn(Ygt)),u2(n,w1n,r3n,mpn(Jgt)),u2(n,w1n,c3n,mpn(Zgt)),u2(n,w1n,a3n,mpn(Qgt)),u2(n,w1n,n0n,mpn(Dpt)),u2(n,w1n,i0n,mpn(Pgt)),u2(n,w1n,s0n,mpn(Sgt)),u2(n,w1n,Z1n,mpn(xpt)),u2(n,w1n,r0n,mpn(kgt)),u2(n,w1n,e0n,mpn(Gdt)),u2(n,w1n,l0n,mpn(qdt)),u2(n,w1n,b0n,mpn(xdt)),u2(n,w1n,v0n,mpn(Ddt)),u2(n,w1n,m0n,mpn(Kdt)),u2(n,w1n,y0n,mpn(Rdt)),u2(n,w1n,d0n,mpn(Hdt)),u2(n,w1n,V1n,mpn(Igt)),u2(n,w1n,Q1n,mpn(Ogt)),u2(n,w1n,W1n,mpn(pgt)),u2(n,w1n,k0n,mpn(_gt)),u2(n,w1n,T0n,mpn(Ngt)),u2(n,w1n,X1n,mpn(ugt)),u2(n,w1n,M0n,mpn(Dgt)),u2(n,w1n,C0n,mpn(egt)),u2(n,w1n,I0n,mpn(igt)),u2(n,w1n,u3n,mpn(Ndt)),u2(n,w1n,E0n,mpn(Lgt)),u2(n,w1n,B0n,mpn(Pdt)),u2(n,w1n,H0n,mpn(Sdt)),u2(n,w1n,F0n,mpn(Mdt)),u2(n,w1n,q0n,mpn(fgt)),u2(n,w1n,G0n,mpn(hgt)),u2(n,w1n,z0n,mpn(lgt)),u2(n,w1n,BZn,mpn(Hgt)),u2(n,w1n,o3n,mpn(vgt)),u2(n,w1n,WJn,mpn(agt)),u2(n,w1n,s3n,mpn(Ydt)),u2(n,w1n,TZn,mpn(Qdt)),u2(n,w1n,w0n,mpn(_dt)),u2(n,w1n,h3n,mpn(ipt)),u2(n,w1n,f3n,mpn(Tdt)),u2(n,w1n,l3n,mpn(bgt)),u2(n,w1n,b3n,mpn(npt)),u2(n,w1n,w3n,mpn(Xgt)),u2(n,w1n,d3n,mpn(Wgt)),u2(n,w1n,u0n,mpn(Egt)),u2(n,w1n,o0n,mpn(Tgt)),u2(n,w1n,g3n,mpn(spt)),u2(n,w1n,Y1n,mpn(jdt)),u2(n,w1n,h0n,mpn(Mgt)),u2(n,w1n,i2n,mpn(Jdt)),u2(n,w1n,r2n,mpn(Vdt)),u2(n,w1n,p3n,mpn(Cgt)),u2(n,w1n,f0n,mpn(mgt)),u2(n,w1n,j0n,mpn(xgt)),u2(n,w1n,v3n,mpn(Lpt)),u2(n,w1n,U1n,mpn(Xdt)),u2(n,w1n,J1n,mpn(opt)),u2(n,w1n,$0n,mpn(tgt)),u2(n,w1n,c0n,mpn(ygt)),u2(n,w1n,g0n,mpn(Fdt)),u2(n,w1n,m3n,mpn(ggt)),u2(n,w1n,a0n,mpn(jgt)),u2(n,w1n,p0n,mpn(Bdt)),u2(n,w1n,c2n,mpn(Ldt)),u2(n,w1n,o2n,mpn(Adt)),u2(n,w1n,s2n,mpn(Idt)),u2(n,w1n,h2n,mpn(Odt)),u2(n,w1n,a2n,mpn($dt)),u2(n,w1n,u2n,mpn(Cdt)),u2(n,w1n,t0n,mpn(ogt))}function mWn(n,t){var e;return nNt||(nNt=new xp,tNt=new xp,wWn(),wWn(),ydn(e=new M0(4),"\t\n\r\r "),mZ(nNt,fnt,e),mZ(tNt,fnt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),dnt),sHn(e,BB(SJ(nNt,snt),117)),mZ(nNt,hnt,e),mZ(tNt,hnt,$Fn(e)),ydn(e=new M0(4),"-.0:AZ__az\xb7\xb7\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u02d0\u02d1\u0300\u0345\u0360\u0361\u0386\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0483\u0486\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05a1\u05a3\u05b9\u05bb\u05bd\u05bf\u05bf\u05c1\u05c2\u05c4\u05c4\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0640\u0652\u0660\u0669\u0670\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06e8\u06ea\u06ed\u06f0\u06f9\u0901\u0903\u0905\u0939\u093c\u094d\u0951\u0954\u0958\u0963\u0966\u096f\u0981\u0983\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bc\u09bc\u09be\u09c4\u09c7\u09c8\u09cb\u09cd\u09d7\u09d7\u09dc\u09dd\u09df\u09e3\u09e6\u09f1\u0a02\u0a02\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3c\u0a3e\u0a42\u0a47\u0a48\u0a4b\u0a4d\u0a59\u0a5c\u0a5e\u0a5e\u0a66\u0a74\u0a81\u0a83\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abc\u0ac5\u0ac7\u0ac9\u0acb\u0acd\u0ae0\u0ae0\u0ae6\u0aef\u0b01\u0b03\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3c\u0b43\u0b47\u0b48\u0b4b\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f\u0b61\u0b66\u0b6f\u0b82\u0b83\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0bbe\u0bc2\u0bc6\u0bc8\u0bca\u0bcd\u0bd7\u0bd7\u0be7\u0bef\u0c01\u0c03\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c3e\u0c44\u0c46\u0c48\u0c4a\u0c4d\u0c55\u0c56\u0c60\u0c61\u0c66\u0c6f\u0c82\u0c83\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cbe\u0cc4\u0cc6\u0cc8\u0cca\u0ccd\u0cd5\u0cd6\u0cde\u0cde\u0ce0\u0ce1\u0ce6\u0cef\u0d02\u0d03\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d3e\u0d43\u0d46\u0d48\u0d4a\u0d4d\u0d57\u0d57\u0d60\u0d61\u0d66\u0d6f\u0e01\u0e2e\u0e30\u0e3a\u0e40\u0e4e\u0e50\u0e59\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb9\u0ebb\u0ebd\u0ec0\u0ec4\u0ec6\u0ec6\u0ec8\u0ecd\u0ed0\u0ed9\u0f18\u0f19\u0f20\u0f29\u0f35\u0f35\u0f37\u0f37\u0f39\u0f39\u0f3e\u0f47\u0f49\u0f69\u0f71\u0f84\u0f86\u0f8b\u0f90\u0f95\u0f97\u0f97\u0f99\u0fad\u0fb1\u0fb7\u0fb9\u0fb9\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u20d0\u20dc\u20e1\u20e1\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302f\u3031\u3035\u3041\u3094\u3099\u309a\u309d\u309e\u30a1\u30fa\u30fc\u30fe\u3105\u312c\u4e00\u9fa5\uac00\ud7a3"),mZ(nNt,lnt,e),mZ(tNt,lnt,$Fn(e)),ydn(e=new M0(4),dnt),Yxn(e,95,95),Yxn(e,58,58),mZ(nNt,bnt,e),mZ(tNt,bnt,$Fn(e))),BB(SJ(t?nNt:tNt,n),136)}function yWn(n){V$n(n.a,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anySimpleType"])),V$n(n.b,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyType",F9n,K9n])),V$n(BB(Wtn(QQ(n.b),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.b),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,M7n,P7n,t8n,":1",D7n,"lax"])),V$n(BB(Wtn(QQ(n.b),2),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,p7n,M7n,P7n,t8n,":2",D7n,"lax"])),V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyURI",T7n,y7n])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"base64Binary",T7n,y7n])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$Wn,T7n,y7n])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"boolean:Object",J9n,$Wn])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,S9n])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"byte:Object",J9n,S9n])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"date",T7n,y7n])),V$n(n.k,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"dateTime",T7n,y7n])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"decimal",T7n,y7n])),V$n(n.o,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,C9n,T7n,y7n])),V$n(n.p,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"double:Object",J9n,C9n])),V$n(n.q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"duration",T7n,y7n])),V$n(n.s,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ENTITIES",J9n,R7n,K7n,"1"])),V$n(n.r,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,R7n,k7n,_7n])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,_7n,J9n,F7n])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,I9n,T7n,y7n])),V$n(n.v,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"float:Object",J9n,I9n])),V$n(n.w,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gDay",T7n,y7n])),V$n(n.B,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonth",T7n,y7n])),V$n(n.A,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonthDay",T7n,y7n])),V$n(n.C,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYear",T7n,y7n])),V$n(n.D,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYearMonth",T7n,y7n])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"hexBinary",T7n,y7n])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ID",J9n,F7n])),V$n(n.H,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREF",J9n,F7n])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREFS",J9n,B7n,K7n,"1"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,B7n,k7n,"IDREF"])),V$n(n.K,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,O9n])),V$n(n.M,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,H7n])),V$n(n.L,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"int:Object",J9n,O9n])),V$n(n.P,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"language",J9n,q7n,G7n,z7n])),V$n(n.Q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,A9n])),V$n(n.R,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"long:Object",J9n,A9n])),V$n(n.S,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"Name",J9n,q7n,G7n,U7n])),V$n(n.T,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,F7n,J9n,"Name",G7n,X7n])),V$n(n.U,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"negativeInteger",J9n,W7n,V7n,"-1"])),V$n(n.V,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Q7n,J9n,q7n,G7n,"\\c+"])),V$n(n.X,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NMTOKENS",J9n,Y7n,K7n,"1"])),V$n(n.W,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Y7n,k7n,Q7n])),V$n(n.Y,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,J7n,J9n,H7n,Z7n,"0"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,W7n,J9n,H7n,V7n,"0"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,nnt,J9n,NWn,T7n,"replace"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NOTATION",T7n,y7n])),V$n(n.ab,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"positiveInteger",J9n,J7n,Z7n,"1"])),V$n(n.bb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"processingInstruction_._type",F9n,"empty"])),V$n(BB(Wtn(QQ(n.bb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"data"])),V$n(BB(Wtn(QQ(n.bb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,Y6n])),V$n(n.cb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"QName",T7n,y7n])),V$n(n.db,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$9n])),V$n(n.eb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"short:Object",J9n,$9n])),V$n(n.fb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"simpleAnyType",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":3",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":4",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":5",F9n,d7n])),V$n(n.gb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,NWn,T7n,"preserve"])),V$n(n.hb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"time",T7n,y7n])),V$n(n.ib,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,q7n,J9n,nnt,T7n,y7n])),V$n(n.jb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,tnt,V7n,"255",Z7n,"0"])),V$n(n.kb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedByte:Object",J9n,tnt])),V$n(n.lb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,ent,V7n,"4294967295",Z7n,"0"])),V$n(n.mb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedInt:Object",J9n,ent])),V$n(n.nb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedLong",J9n,J7n,V7n,int,Z7n,"0"])),V$n(n.ob,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,rnt,V7n,"65535",Z7n,"0"])),V$n(n.pb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedShort:Object",J9n,rnt])),V$n(n.qb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"",F9n,K9n])),V$n(BB(Wtn(QQ(n.qb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.qb),1),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xmlns:prefix"])),V$n(BB(Wtn(QQ(n.qb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xsi:schemaLocation"])),V$n(BB(Wtn(QQ(n.qb),3),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"cDATA",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),4),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"comment",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),5),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,cnt,j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),6),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,O6n,j7n,E7n]))}function kWn(n){return mK("_UI_EMFDiagnostic_marker",n)?"EMF Problem":mK("_UI_CircularContainment_diagnostic",n)?"An object may not circularly contain itself":mK(w8n,n)?"Wrong character.":mK(d8n,n)?"Invalid reference number.":mK(g8n,n)?"A character is required after \\.":mK(p8n,n)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":mK(v8n,n)?"'(?<' or '(?<!' is expected.":mK(m8n,n)?"A comment is not terminated.":mK(y8n,n)?"')' is expected.":mK(k8n,n)?"Unexpected end of the pattern in a modifier group.":mK(j8n,n)?"':' is expected.":mK(E8n,n)?"Unexpected end of the pattern in a conditional group.":mK(T8n,n)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":mK(M8n,n)?"There are more than three choices in a conditional group.":mK(S8n,n)?"A character in U+0040-U+005f must follow \\c.":mK(P8n,n)?"A '{' is required before a character category.":mK(C8n,n)?"A property name is not closed by '}'.":mK(I8n,n)?"Unexpected meta character.":mK(O8n,n)?"Unknown property.":mK(A8n,n)?"A POSIX character class must be closed by ':]'.":mK($8n,n)?"Unexpected end of the pattern in a character class.":mK(L8n,n)?"Unknown name for a POSIX character class.":mK("parser.cc.4",n)?"'-' is invalid here.":mK(N8n,n)?"']' is expected.":mK(x8n,n)?"'[' is invalid in a character class. Write '\\['.":mK(D8n,n)?"']' is invalid in a character class. Write '\\]'.":mK(R8n,n)?"'-' is an invalid character range. Write '\\-'.":mK(K8n,n)?"'[' is expected.":mK(_8n,n)?"')' or '-[' or '+[' or '&[' is expected.":mK(F8n,n)?"The range end code point is less than the start code point.":mK(B8n,n)?"Invalid Unicode hex notation.":mK(H8n,n)?"Overflow in a hex notation.":mK(q8n,n)?"'\\x{' must be closed by '}'.":mK(G8n,n)?"Invalid Unicode code point.":mK(z8n,n)?"An anchor must not be here.":mK(U8n,n)?"This expression is not supported in the current option setting.":mK(X8n,n)?"Invalid quantifier. A digit is expected.":mK(W8n,n)?"Invalid quantifier. Invalid quantity or a '}' is missing.":mK(V8n,n)?"Invalid quantifier. A digit or '}' is expected.":mK(Q8n,n)?"Invalid quantifier. A min quantity must be <= a max quantity.":mK(Y8n,n)?"Invalid quantifier. A quantity value overflow.":mK("_UI_PackageRegistry_extensionpoint",n)?"Ecore Package Registry for Generated Packages":mK("_UI_DynamicPackageRegistry_extensionpoint",n)?"Ecore Package Registry for Dynamic Packages":mK("_UI_FactoryRegistry_extensionpoint",n)?"Ecore Factory Override Registry":mK("_UI_URIExtensionParserRegistry_extensionpoint",n)?"URI Extension Parser Registry":mK("_UI_URIProtocolParserRegistry_extensionpoint",n)?"URI Protocol Parser Registry":mK("_UI_URIContentParserRegistry_extensionpoint",n)?"URI Content Parser Registry":mK("_UI_ContentHandlerRegistry_extensionpoint",n)?"Content Handler Registry":mK("_UI_URIMappingRegistry_extensionpoint",n)?"URI Converter Mapping Registry":mK("_UI_PackageRegistryImplementation_extensionpoint",n)?"Ecore Package Registry Implementation":mK("_UI_ValidationDelegateRegistry_extensionpoint",n)?"Validation Delegate Registry":mK("_UI_SettingDelegateRegistry_extensionpoint",n)?"Feature Setting Delegate Factory Registry":mK("_UI_InvocationDelegateRegistry_extensionpoint",n)?"Operation Invocation Delegate Factory Registry":mK("_UI_EClassInterfaceNotAbstract_diagnostic",n)?"A class that is an interface must also be abstract":mK("_UI_EClassNoCircularSuperTypes_diagnostic",n)?"A class may not be a super type of itself":mK("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",n)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":mK("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",n)?"The opposite of the opposite may not be a reference different from this one":mK("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",n)?"The opposite must be a feature of the reference's type":mK("_UI_EReferenceTransientOppositeNotTransient_diagnostic",n)?"The opposite of a transient reference must be transient if it is proxy resolving":mK("_UI_EReferenceOppositeBothContainment_diagnostic",n)?"The opposite of a containment reference must not be a containment reference":mK("_UI_EReferenceConsistentUnique_diagnostic",n)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":mK("_UI_ETypedElementNoType_diagnostic",n)?"The typed element must have a type":mK("_UI_EAttributeNoDataType_diagnostic",n)?"The generic attribute type must not refer to a class":mK("_UI_EReferenceNoClass_diagnostic",n)?"The generic reference type must not refer to a data type":mK("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",n)?"A generic type can't refer to both a type parameter and a classifier":mK("_UI_EGenericTypeNoClass_diagnostic",n)?"A generic super type must refer to a class":mK("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",n)?"A generic type in this context must refer to a classifier or a type parameter":mK("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",n)?"A generic type may have bounds only when used as a type argument":mK("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",n)?"A generic type must not have both a lower and an upper bound":mK("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",n)?"A generic type with bounds must not also refer to a type parameter or classifier":mK("_UI_EGenericTypeNoArguments_diagnostic",n)?"A generic type may have arguments only if it refers to a classifier":mK("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",n)?"A generic type may only refer to a type parameter that is in scope":n}function jWn(n){var t,e,i,r,c,a,u;n.r||(n.r=!0,Nrn(n,"graph"),xrn(n,"graph"),Drn(n,y6n),cun(n.o,"T"),f9(kY(n.a),n.p),f9(kY(n.f),n.a),f9(kY(n.n),n.f),f9(kY(n.g),n.n),f9(kY(n.c),n.n),f9(kY(n.i),n.c),f9(kY(n.j),n.c),f9(kY(n.d),n.f),f9(kY(n.e),n.a),z0(n.p,Xrt,OJn,!0,!0,!1),u=Tun(a=msn(n.p,n.p,"setProperty")),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),kEn(e,i=nQ(u)),Ujn(a,t,j6n),Ujn(a,t=nQ(u),E6n),u=Tun(a=msn(n.p,null,"getProperty")),t=ZV(n.o),e=nQ(u),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),(c=HTn(a,t=nQ(u),null))&&c.Fi(),a=msn(n.p,n.wb.e,"hasProperty"),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),$yn(a=msn(n.p,n.p,"copyProperties"),n.p,T6n),a=msn(n.p,null,"getAllProperties"),t=ZV(n.wb.P),e=ZV(n.o),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),i=new Kp,f9((!e.d&&(e.d=new $L(VAt,e,1)),e.d),i),e=ZV(n.wb.M),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(a,t,null))&&r.Fi(),z0(n.a,NOt,z5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.a),0),18),n.k,null,M6n,0,-1,NOt,!1,!1,!0,!0,!1,!1,!1),z0(n.f,DOt,X5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.f),0),18),n.g,BB(Wtn(QQ(n.g),0),18),"labels",0,-1,DOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.f),1),34),n.wb._,S6n,null,0,1,DOt,!1,!1,!0,!1,!0,!1),z0(n.n,ROt,"ElkShape",!0,!1,!0),ucn(BB(Wtn(QQ(n.n),0),34),n.wb.t,P6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),1),34),n.wb.t,C6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),2),34),n.wb.t,"x",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),3),34),n.wb.t,"y",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.n,null,"setDimensions"),n.wb.t,C6n),$yn(a,n.wb.t,P6n),$yn(a=msn(n.n,null,"setLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.g,zOt,Z5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.g),0),18),n.f,BB(Wtn(QQ(n.f),0),18),I6n,0,1,zOt,!1,!1,!0,!1,!1,!1,!1),ucn(BB(Wtn(QQ(n.g),1),34),n.wb._,O6n,"",0,1,zOt,!1,!1,!0,!1,!0,!1),z0(n.c,KOt,W5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.c),0),18),n.d,BB(Wtn(QQ(n.d),1),18),"outgoingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.c),1),18),n.d,BB(Wtn(QQ(n.d),2),18),"incomingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),z0(n.i,UOt,n6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.i),0),18),n.j,BB(Wtn(QQ(n.j),0),18),"ports",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),1),18),n.i,BB(Wtn(QQ(n.i),2),18),A6n,0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),2),18),n.i,BB(Wtn(QQ(n.i),1),18),I6n,0,1,UOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),3),18),n.d,BB(Wtn(QQ(n.d),0),18),"containedEdges",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.i),4),34),n.wb.e,$6n,null,0,1,UOt,!0,!0,!1,!1,!0,!0),z0(n.j,XOt,t6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.j),0),18),n.i,BB(Wtn(QQ(n.i),0),18),I6n,0,1,XOt,!1,!1,!0,!1,!1,!1,!1),z0(n.d,_Ot,V5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.d),0),18),n.i,BB(Wtn(QQ(n.i),3),18),"containingNode",0,1,_Ot,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.d),1),18),n.c,BB(Wtn(QQ(n.c),0),18),L6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),2),18),n.c,BB(Wtn(QQ(n.c),1),18),N6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),3),18),n.e,BB(Wtn(QQ(n.e),5),18),x6n,0,-1,_Ot,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.d),4),34),n.wb.e,"hyperedge",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),5),34),n.wb.e,$6n,null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),6),34),n.wb.e,"selfloop",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),7),34),n.wb.e,"connected",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),z0(n.b,xOt,U5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.t,"x",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.t,"y",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.b,null,"set"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.e,FOt,Q5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.e),0),34),n.wb.t,"startX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),1),34),n.wb.t,"startY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),2),34),n.wb.t,"endX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),3),34),n.wb.t,"endY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.e),4),18),n.b,null,D6n,0,-1,FOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),5),18),n.d,BB(Wtn(QQ(n.d),3),18),I6n,0,1,FOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),6),18),n.c,null,R6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),7),18),n.c,null,K6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),8),18),n.e,BB(Wtn(QQ(n.e),9),18),_6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),9),18),n.e,BB(Wtn(QQ(n.e),8),18),F6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),ucn(BB(Wtn(QQ(n.e),10),34),n.wb._,S6n,null,0,1,FOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.e,null,"setStartLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),$yn(a=msn(n.e,null,"setEndLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.k,Hnt,"ElkPropertyToValueMapEntry",!1,!1,!1),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.k),0),34),t,"key",Hnt,!1,!1,!0,!1),ucn(BB(Wtn(QQ(n.k),1),34),n.s,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),dV(n.o,lMt,"IProperty",!0),dV(n.s,Ant,"PropertyValue",!0),Lhn(n,y6n))}function EWn(){EWn=O,(JLt=x8(NNt,v6n,25,BQn,15,1))[9]=35,JLt[10]=19,JLt[13]=19,JLt[32]=51,JLt[33]=49,JLt[34]=33,yU(JLt,35,38,49),JLt[38]=1,yU(JLt,39,45,49),yU(JLt,45,47,-71),JLt[47]=49,yU(JLt,48,58,-71),JLt[58]=61,JLt[59]=49,JLt[60]=1,JLt[61]=49,JLt[62]=33,yU(JLt,63,65,49),yU(JLt,65,91,-3),yU(JLt,91,93,33),JLt[93]=1,JLt[94]=33,JLt[95]=-3,JLt[96]=33,yU(JLt,97,123,-3),yU(JLt,123,183,33),JLt[183]=-87,yU(JLt,184,192,33),yU(JLt,192,215,-19),JLt[215]=33,yU(JLt,216,247,-19),JLt[247]=33,yU(JLt,248,306,-19),yU(JLt,306,308,33),yU(JLt,308,319,-19),yU(JLt,319,321,33),yU(JLt,321,329,-19),JLt[329]=33,yU(JLt,330,383,-19),JLt[383]=33,yU(JLt,384,452,-19),yU(JLt,452,461,33),yU(JLt,461,497,-19),yU(JLt,497,500,33),yU(JLt,500,502,-19),yU(JLt,502,506,33),yU(JLt,506,536,-19),yU(JLt,536,592,33),yU(JLt,592,681,-19),yU(JLt,681,699,33),yU(JLt,699,706,-19),yU(JLt,706,720,33),yU(JLt,720,722,-87),yU(JLt,722,768,33),yU(JLt,768,838,-87),yU(JLt,838,864,33),yU(JLt,864,866,-87),yU(JLt,866,902,33),JLt[902]=-19,JLt[903]=-87,yU(JLt,904,907,-19),JLt[907]=33,JLt[908]=-19,JLt[909]=33,yU(JLt,910,930,-19),JLt[930]=33,yU(JLt,931,975,-19),JLt[975]=33,yU(JLt,976,983,-19),yU(JLt,983,986,33),JLt[986]=-19,JLt[987]=33,JLt[988]=-19,JLt[989]=33,JLt[990]=-19,JLt[991]=33,JLt[992]=-19,JLt[993]=33,yU(JLt,994,1012,-19),yU(JLt,1012,1025,33),yU(JLt,1025,1037,-19),JLt[1037]=33,yU(JLt,1038,1104,-19),JLt[1104]=33,yU(JLt,1105,1117,-19),JLt[1117]=33,yU(JLt,1118,1154,-19),JLt[1154]=33,yU(JLt,1155,1159,-87),yU(JLt,1159,1168,33),yU(JLt,1168,1221,-19),yU(JLt,1221,1223,33),yU(JLt,1223,1225,-19),yU(JLt,1225,1227,33),yU(JLt,1227,1229,-19),yU(JLt,1229,1232,33),yU(JLt,1232,1260,-19),yU(JLt,1260,1262,33),yU(JLt,1262,1270,-19),yU(JLt,1270,1272,33),yU(JLt,1272,1274,-19),yU(JLt,1274,1329,33),yU(JLt,1329,1367,-19),yU(JLt,1367,1369,33),JLt[1369]=-19,yU(JLt,1370,1377,33),yU(JLt,1377,1415,-19),yU(JLt,1415,1425,33),yU(JLt,1425,1442,-87),JLt[1442]=33,yU(JLt,1443,1466,-87),JLt[1466]=33,yU(JLt,1467,1470,-87),JLt[1470]=33,JLt[1471]=-87,JLt[1472]=33,yU(JLt,1473,1475,-87),JLt[1475]=33,JLt[1476]=-87,yU(JLt,1477,1488,33),yU(JLt,1488,1515,-19),yU(JLt,1515,1520,33),yU(JLt,1520,1523,-19),yU(JLt,1523,1569,33),yU(JLt,1569,1595,-19),yU(JLt,1595,1600,33),JLt[1600]=-87,yU(JLt,1601,1611,-19),yU(JLt,1611,1619,-87),yU(JLt,1619,1632,33),yU(JLt,1632,1642,-87),yU(JLt,1642,1648,33),JLt[1648]=-87,yU(JLt,1649,1720,-19),yU(JLt,1720,1722,33),yU(JLt,1722,1727,-19),JLt[1727]=33,yU(JLt,1728,1743,-19),JLt[1743]=33,yU(JLt,1744,1748,-19),JLt[1748]=33,JLt[1749]=-19,yU(JLt,1750,1765,-87),yU(JLt,1765,1767,-19),yU(JLt,1767,1769,-87),JLt[1769]=33,yU(JLt,1770,1774,-87),yU(JLt,1774,1776,33),yU(JLt,1776,1786,-87),yU(JLt,1786,2305,33),yU(JLt,2305,2308,-87),JLt[2308]=33,yU(JLt,2309,2362,-19),yU(JLt,2362,2364,33),JLt[2364]=-87,JLt[2365]=-19,yU(JLt,2366,2382,-87),yU(JLt,2382,2385,33),yU(JLt,2385,2389,-87),yU(JLt,2389,2392,33),yU(JLt,2392,2402,-19),yU(JLt,2402,2404,-87),yU(JLt,2404,2406,33),yU(JLt,2406,2416,-87),yU(JLt,2416,2433,33),yU(JLt,2433,2436,-87),JLt[2436]=33,yU(JLt,2437,2445,-19),yU(JLt,2445,2447,33),yU(JLt,2447,2449,-19),yU(JLt,2449,2451,33),yU(JLt,2451,2473,-19),JLt[2473]=33,yU(JLt,2474,2481,-19),JLt[2481]=33,JLt[2482]=-19,yU(JLt,2483,2486,33),yU(JLt,2486,2490,-19),yU(JLt,2490,2492,33),JLt[2492]=-87,JLt[2493]=33,yU(JLt,2494,2501,-87),yU(JLt,2501,2503,33),yU(JLt,2503,2505,-87),yU(JLt,2505,2507,33),yU(JLt,2507,2510,-87),yU(JLt,2510,2519,33),JLt[2519]=-87,yU(JLt,2520,2524,33),yU(JLt,2524,2526,-19),JLt[2526]=33,yU(JLt,2527,2530,-19),yU(JLt,2530,2532,-87),yU(JLt,2532,2534,33),yU(JLt,2534,2544,-87),yU(JLt,2544,2546,-19),yU(JLt,2546,2562,33),JLt[2562]=-87,yU(JLt,2563,2565,33),yU(JLt,2565,2571,-19),yU(JLt,2571,2575,33),yU(JLt,2575,2577,-19),yU(JLt,2577,2579,33),yU(JLt,2579,2601,-19),JLt[2601]=33,yU(JLt,2602,2609,-19),JLt[2609]=33,yU(JLt,2610,2612,-19),JLt[2612]=33,yU(JLt,2613,2615,-19),JLt[2615]=33,yU(JLt,2616,2618,-19),yU(JLt,2618,2620,33),JLt[2620]=-87,JLt[2621]=33,yU(JLt,2622,2627,-87),yU(JLt,2627,2631,33),yU(JLt,2631,2633,-87),yU(JLt,2633,2635,33),yU(JLt,2635,2638,-87),yU(JLt,2638,2649,33),yU(JLt,2649,2653,-19),JLt[2653]=33,JLt[2654]=-19,yU(JLt,2655,2662,33),yU(JLt,2662,2674,-87),yU(JLt,2674,2677,-19),yU(JLt,2677,2689,33),yU(JLt,2689,2692,-87),JLt[2692]=33,yU(JLt,2693,2700,-19),JLt[2700]=33,JLt[2701]=-19,JLt[2702]=33,yU(JLt,2703,2706,-19),JLt[2706]=33,yU(JLt,2707,2729,-19),JLt[2729]=33,yU(JLt,2730,2737,-19),JLt[2737]=33,yU(JLt,2738,2740,-19),JLt[2740]=33,yU(JLt,2741,2746,-19),yU(JLt,2746,2748,33),JLt[2748]=-87,JLt[2749]=-19,yU(JLt,2750,2758,-87),JLt[2758]=33,yU(JLt,2759,2762,-87),JLt[2762]=33,yU(JLt,2763,2766,-87),yU(JLt,2766,2784,33),JLt[2784]=-19,yU(JLt,2785,2790,33),yU(JLt,2790,2800,-87),yU(JLt,2800,2817,33),yU(JLt,2817,2820,-87),JLt[2820]=33,yU(JLt,2821,2829,-19),yU(JLt,2829,2831,33),yU(JLt,2831,2833,-19),yU(JLt,2833,2835,33),yU(JLt,2835,2857,-19),JLt[2857]=33,yU(JLt,2858,2865,-19),JLt[2865]=33,yU(JLt,2866,2868,-19),yU(JLt,2868,2870,33),yU(JLt,2870,2874,-19),yU(JLt,2874,2876,33),JLt[2876]=-87,JLt[2877]=-19,yU(JLt,2878,2884,-87),yU(JLt,2884,2887,33),yU(JLt,2887,2889,-87),yU(JLt,2889,2891,33),yU(JLt,2891,2894,-87),yU(JLt,2894,2902,33),yU(JLt,2902,2904,-87),yU(JLt,2904,2908,33),yU(JLt,2908,2910,-19),JLt[2910]=33,yU(JLt,2911,2914,-19),yU(JLt,2914,2918,33),yU(JLt,2918,2928,-87),yU(JLt,2928,2946,33),yU(JLt,2946,2948,-87),JLt[2948]=33,yU(JLt,2949,2955,-19),yU(JLt,2955,2958,33),yU(JLt,2958,2961,-19),JLt[2961]=33,yU(JLt,2962,2966,-19),yU(JLt,2966,2969,33),yU(JLt,2969,2971,-19),JLt[2971]=33,JLt[2972]=-19,JLt[2973]=33,yU(JLt,2974,2976,-19),yU(JLt,2976,2979,33),yU(JLt,2979,2981,-19),yU(JLt,2981,2984,33),yU(JLt,2984,2987,-19),yU(JLt,2987,2990,33),yU(JLt,2990,2998,-19),JLt[2998]=33,yU(JLt,2999,3002,-19),yU(JLt,3002,3006,33),yU(JLt,3006,3011,-87),yU(JLt,3011,3014,33),yU(JLt,3014,3017,-87),JLt[3017]=33,yU(JLt,3018,3022,-87),yU(JLt,3022,3031,33),JLt[3031]=-87,yU(JLt,3032,3047,33),yU(JLt,3047,3056,-87),yU(JLt,3056,3073,33),yU(JLt,3073,3076,-87),JLt[3076]=33,yU(JLt,3077,3085,-19),JLt[3085]=33,yU(JLt,3086,3089,-19),JLt[3089]=33,yU(JLt,3090,3113,-19),JLt[3113]=33,yU(JLt,3114,3124,-19),JLt[3124]=33,yU(JLt,3125,3130,-19),yU(JLt,3130,3134,33),yU(JLt,3134,3141,-87),JLt[3141]=33,yU(JLt,3142,3145,-87),JLt[3145]=33,yU(JLt,3146,3150,-87),yU(JLt,3150,3157,33),yU(JLt,3157,3159,-87),yU(JLt,3159,3168,33),yU(JLt,3168,3170,-19),yU(JLt,3170,3174,33),yU(JLt,3174,3184,-87),yU(JLt,3184,3202,33),yU(JLt,3202,3204,-87),JLt[3204]=33,yU(JLt,3205,3213,-19),JLt[3213]=33,yU(JLt,3214,3217,-19),JLt[3217]=33,yU(JLt,3218,3241,-19),JLt[3241]=33,yU(JLt,3242,3252,-19),JLt[3252]=33,yU(JLt,3253,3258,-19),yU(JLt,3258,3262,33),yU(JLt,3262,3269,-87),JLt[3269]=33,yU(JLt,3270,3273,-87),JLt[3273]=33,yU(JLt,3274,3278,-87),yU(JLt,3278,3285,33),yU(JLt,3285,3287,-87),yU(JLt,3287,3294,33),JLt[3294]=-19,JLt[3295]=33,yU(JLt,3296,3298,-19),yU(JLt,3298,3302,33),yU(JLt,3302,3312,-87),yU(JLt,3312,3330,33),yU(JLt,3330,3332,-87),JLt[3332]=33,yU(JLt,3333,3341,-19),JLt[3341]=33,yU(JLt,3342,3345,-19),JLt[3345]=33,yU(JLt,3346,3369,-19),JLt[3369]=33,yU(JLt,3370,3386,-19),yU(JLt,3386,3390,33),yU(JLt,3390,3396,-87),yU(JLt,3396,3398,33),yU(JLt,3398,3401,-87),JLt[3401]=33,yU(JLt,3402,3406,-87),yU(JLt,3406,3415,33),JLt[3415]=-87,yU(JLt,3416,3424,33),yU(JLt,3424,3426,-19),yU(JLt,3426,3430,33),yU(JLt,3430,3440,-87),yU(JLt,3440,3585,33),yU(JLt,3585,3631,-19),JLt[3631]=33,JLt[3632]=-19,JLt[3633]=-87,yU(JLt,3634,3636,-19),yU(JLt,3636,3643,-87),yU(JLt,3643,3648,33),yU(JLt,3648,3654,-19),yU(JLt,3654,3663,-87),JLt[3663]=33,yU(JLt,3664,3674,-87),yU(JLt,3674,3713,33),yU(JLt,3713,3715,-19),JLt[3715]=33,JLt[3716]=-19,yU(JLt,3717,3719,33),yU(JLt,3719,3721,-19),JLt[3721]=33,JLt[3722]=-19,yU(JLt,3723,3725,33),JLt[3725]=-19,yU(JLt,3726,3732,33),yU(JLt,3732,3736,-19),JLt[3736]=33,yU(JLt,3737,3744,-19),JLt[3744]=33,yU(JLt,3745,3748,-19),JLt[3748]=33,JLt[3749]=-19,JLt[3750]=33,JLt[3751]=-19,yU(JLt,3752,3754,33),yU(JLt,3754,3756,-19),JLt[3756]=33,yU(JLt,3757,3759,-19),JLt[3759]=33,JLt[3760]=-19,JLt[3761]=-87,yU(JLt,3762,3764,-19),yU(JLt,3764,3770,-87),JLt[3770]=33,yU(JLt,3771,3773,-87),JLt[3773]=-19,yU(JLt,3774,3776,33),yU(JLt,3776,3781,-19),JLt[3781]=33,JLt[3782]=-87,JLt[3783]=33,yU(JLt,3784,3790,-87),yU(JLt,3790,3792,33),yU(JLt,3792,3802,-87),yU(JLt,3802,3864,33),yU(JLt,3864,3866,-87),yU(JLt,3866,3872,33),yU(JLt,3872,3882,-87),yU(JLt,3882,3893,33),JLt[3893]=-87,JLt[3894]=33,JLt[3895]=-87,JLt[3896]=33,JLt[3897]=-87,yU(JLt,3898,3902,33),yU(JLt,3902,3904,-87),yU(JLt,3904,3912,-19),JLt[3912]=33,yU(JLt,3913,3946,-19),yU(JLt,3946,3953,33),yU(JLt,3953,3973,-87),JLt[3973]=33,yU(JLt,3974,3980,-87),yU(JLt,3980,3984,33),yU(JLt,3984,3990,-87),JLt[3990]=33,JLt[3991]=-87,JLt[3992]=33,yU(JLt,3993,4014,-87),yU(JLt,4014,4017,33),yU(JLt,4017,4024,-87),JLt[4024]=33,JLt[4025]=-87,yU(JLt,4026,4256,33),yU(JLt,4256,4294,-19),yU(JLt,4294,4304,33),yU(JLt,4304,4343,-19),yU(JLt,4343,4352,33),JLt[4352]=-19,JLt[4353]=33,yU(JLt,4354,4356,-19),JLt[4356]=33,yU(JLt,4357,4360,-19),JLt[4360]=33,JLt[4361]=-19,JLt[4362]=33,yU(JLt,4363,4365,-19),JLt[4365]=33,yU(JLt,4366,4371,-19),yU(JLt,4371,4412,33),JLt[4412]=-19,JLt[4413]=33,JLt[4414]=-19,JLt[4415]=33,JLt[4416]=-19,yU(JLt,4417,4428,33),JLt[4428]=-19,JLt[4429]=33,JLt[4430]=-19,JLt[4431]=33,JLt[4432]=-19,yU(JLt,4433,4436,33),yU(JLt,4436,4438,-19),yU(JLt,4438,4441,33),JLt[4441]=-19,yU(JLt,4442,4447,33),yU(JLt,4447,4450,-19),JLt[4450]=33,JLt[4451]=-19,JLt[4452]=33,JLt[4453]=-19,JLt[4454]=33,JLt[4455]=-19,JLt[4456]=33,JLt[4457]=-19,yU(JLt,4458,4461,33),yU(JLt,4461,4463,-19),yU(JLt,4463,4466,33),yU(JLt,4466,4468,-19),JLt[4468]=33,JLt[4469]=-19,yU(JLt,4470,4510,33),JLt[4510]=-19,yU(JLt,4511,4520,33),JLt[4520]=-19,yU(JLt,4521,4523,33),JLt[4523]=-19,yU(JLt,4524,4526,33),yU(JLt,4526,4528,-19),yU(JLt,4528,4535,33),yU(JLt,4535,4537,-19),JLt[4537]=33,JLt[4538]=-19,JLt[4539]=33,yU(JLt,4540,4547,-19),yU(JLt,4547,4587,33),JLt[4587]=-19,yU(JLt,4588,4592,33),JLt[4592]=-19,yU(JLt,4593,4601,33),JLt[4601]=-19,yU(JLt,4602,7680,33),yU(JLt,7680,7836,-19),yU(JLt,7836,7840,33),yU(JLt,7840,7930,-19),yU(JLt,7930,7936,33),yU(JLt,7936,7958,-19),yU(JLt,7958,7960,33),yU(JLt,7960,7966,-19),yU(JLt,7966,7968,33),yU(JLt,7968,8006,-19),yU(JLt,8006,8008,33),yU(JLt,8008,8014,-19),yU(JLt,8014,8016,33),yU(JLt,8016,8024,-19),JLt[8024]=33,JLt[8025]=-19,JLt[8026]=33,JLt[8027]=-19,JLt[8028]=33,JLt[8029]=-19,JLt[8030]=33,yU(JLt,8031,8062,-19),yU(JLt,8062,8064,33),yU(JLt,8064,8117,-19),JLt[8117]=33,yU(JLt,8118,8125,-19),JLt[8125]=33,JLt[8126]=-19,yU(JLt,8127,8130,33),yU(JLt,8130,8133,-19),JLt[8133]=33,yU(JLt,8134,8141,-19),yU(JLt,8141,8144,33),yU(JLt,8144,8148,-19),yU(JLt,8148,8150,33),yU(JLt,8150,8156,-19),yU(JLt,8156,8160,33),yU(JLt,8160,8173,-19),yU(JLt,8173,8178,33),yU(JLt,8178,8181,-19),JLt[8181]=33,yU(JLt,8182,8189,-19),yU(JLt,8189,8400,33),yU(JLt,8400,8413,-87),yU(JLt,8413,8417,33),JLt[8417]=-87,yU(JLt,8418,8486,33),JLt[8486]=-19,yU(JLt,8487,8490,33),yU(JLt,8490,8492,-19),yU(JLt,8492,8494,33),JLt[8494]=-19,yU(JLt,8495,8576,33),yU(JLt,8576,8579,-19),yU(JLt,8579,12293,33),JLt[12293]=-87,JLt[12294]=33,JLt[12295]=-19,yU(JLt,12296,12321,33),yU(JLt,12321,12330,-19),yU(JLt,12330,12336,-87),JLt[12336]=33,yU(JLt,12337,12342,-87),yU(JLt,12342,12353,33),yU(JLt,12353,12437,-19),yU(JLt,12437,12441,33),yU(JLt,12441,12443,-87),yU(JLt,12443,12445,33),yU(JLt,12445,12447,-87),yU(JLt,12447,12449,33),yU(JLt,12449,12539,-19),JLt[12539]=33,yU(JLt,12540,12543,-87),yU(JLt,12543,12549,33),yU(JLt,12549,12589,-19),yU(JLt,12589,19968,33),yU(JLt,19968,40870,-19),yU(JLt,40870,44032,33),yU(JLt,44032,55204,-19),yU(JLt,55204,HQn,33),yU(JLt,57344,65534,33)}function TWn(n){var t,e,i,r,c,a,u;n.hb||(n.hb=!0,Nrn(n,"ecore"),xrn(n,"ecore"),Drn(n,V9n),cun(n.fb,"E"),cun(n.L,"T"),cun(n.P,"K"),cun(n.P,"V"),cun(n.cb,"E"),f9(kY(n.b),n.bb),f9(kY(n.a),n.Q),f9(kY(n.o),n.p),f9(kY(n.p),n.R),f9(kY(n.q),n.p),f9(kY(n.v),n.q),f9(kY(n.w),n.R),f9(kY(n.B),n.Q),f9(kY(n.R),n.Q),f9(kY(n.T),n.eb),f9(kY(n.U),n.R),f9(kY(n.V),n.eb),f9(kY(n.W),n.bb),f9(kY(n.bb),n.eb),f9(kY(n.eb),n.R),f9(kY(n.db),n.R),z0(n.b,BAt,l9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.e,"iD",null,0,1,BAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.b),1),18),n.q,null,"eAttributeType",1,1,BAt,!0,!0,!1,!1,!0,!1,!0),z0(n.a,KAt,s9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.a),0),34),n._,T6n,null,0,1,KAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.a),1),18),n.ab,null,"details",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),2),18),n.Q,BB(Wtn(QQ(n.Q),0),18),"eModelElement",0,1,KAt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),3),18),n.S,null,"contents",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),4),18),n.S,null,"references",0,-1,KAt,!1,!1,!0,!1,!0,!1,!1),z0(n.o,qAt,"EClass",!1,!1,!0),ucn(BB(Wtn(QQ(n.o),0),34),n.e,"abstract",null,0,1,qAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.o),1),34),n.e,"interface",null,0,1,qAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),2),18),n.o,null,"eSuperTypes",0,-1,qAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.o),3),18),n.T,BB(Wtn(QQ(n.T),0),18),"eOperations",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),4),18),n.b,null,"eAllAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),5),18),n.W,null,"eAllReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),6),18),n.W,null,"eReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),7),18),n.b,null,"eAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),8),18),n.W,null,"eAllContainments",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),9),18),n.T,null,"eAllOperations",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),10),18),n.bb,null,"eAllStructuralFeatures",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),11),18),n.o,null,"eAllSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),12),18),n.b,null,"eIDAttribute",0,1,qAt,!0,!0,!1,!1,!1,!1,!0),Myn(BB(Wtn(QQ(n.o),13),18),n.bb,BB(Wtn(QQ(n.bb),7),18),"eStructuralFeatures",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),14),18),n.H,null,"eGenericSuperTypes",0,-1,qAt,!1,!1,!0,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),15),18),n.H,null,"eAllGenericSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),$yn(u=fin(BB(Wtn(VQ(n.o),0),59),n.e,"isSuperTypeOf"),n.o,"someClass"),fin(BB(Wtn(VQ(n.o),1),59),n.I,"getFeatureCount"),$yn(u=fin(BB(Wtn(VQ(n.o),2),59),n.bb,Z9n),n.I,"featureID"),$yn(u=fin(BB(Wtn(VQ(n.o),3),59),n.I,n7n),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.o),4),59),n.bb,Z9n),n._,"featureName"),fin(BB(Wtn(VQ(n.o),5),59),n.I,"getOperationCount"),$yn(u=fin(BB(Wtn(VQ(n.o),6),59),n.T,"getEOperation"),n.I,"operationID"),$yn(u=fin(BB(Wtn(VQ(n.o),7),59),n.I,e7n),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),8),59),n.T,"getOverride"),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),9),59),n.H,"getFeatureType"),n.bb,t7n),z0(n.p,HAt,b9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),0),34),n._,"instanceClassName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.p),1),34),t,"instanceClass",HAt,!0,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),2),34),n.M,r7n,null,0,1,HAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.p),3),34),n._,"instanceTypeName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),Myn(BB(Wtn(QQ(n.p),4),18),n.U,BB(Wtn(QQ(n.U),3),18),"ePackage",0,1,HAt,!0,!1,!1,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.p),5),18),n.db,null,c7n,0,-1,HAt,!1,!1,!0,!0,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.p),0),59),n.e,a7n),n.M,AWn),fin(BB(Wtn(VQ(n.p),1),59),n.I,"getClassifierID"),z0(n.q,GAt,"EDataType",!1,!1,!0),ucn(BB(Wtn(QQ(n.q),0),34),n.e,"serializable",a5n,0,1,GAt,!1,!1,!0,!1,!0,!1),z0(n.v,XAt,"EEnum",!1,!1,!0),Myn(BB(Wtn(QQ(n.v),0),18),n.w,BB(Wtn(QQ(n.w),3),18),"eLiterals",0,-1,XAt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.v),0),59),n.w,u7n),n._,t8n),$yn(u=fin(BB(Wtn(VQ(n.v),1),59),n.w,u7n),n.I,E6n),$yn(u=fin(BB(Wtn(VQ(n.v),2),59),n.w,"getEEnumLiteralByLiteral"),n._,"literal"),z0(n.w,WAt,w9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.w),0),34),n.I,E6n,null,0,1,WAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),1),34),n.A,"instance",null,0,1,WAt,!0,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),2),34),n._,"literal",null,0,1,WAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.w),3),18),n.v,BB(Wtn(QQ(n.v),0),18),"eEnum",0,1,WAt,!0,!1,!1,!1,!1,!1,!1),z0(n.B,HOt,"EFactory",!1,!1,!0),Myn(BB(Wtn(QQ(n.B),0),18),n.U,BB(Wtn(QQ(n.U),2),18),"ePackage",1,1,HOt,!0,!1,!0,!1,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.B),0),59),n.S,"create"),n.o,"eClass"),$yn(u=fin(BB(Wtn(VQ(n.B),1),59),n.M,"createFromString"),n.q,"eDataType"),$yn(u,n._,"literalValue"),$yn(u=fin(BB(Wtn(VQ(n.B),2),59),n._,"convertToString"),n.q,"eDataType"),$yn(u,n.M,"instanceValue"),z0(n.Q,BOt,Y5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.Q),0),18),n.a,BB(Wtn(QQ(n.a),2),18),"eAnnotations",0,-1,BOt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.Q),0),59),n.a,"getEAnnotation"),n._,T6n),z0(n.R,qOt,J5n,!0,!1,!0),ucn(BB(Wtn(QQ(n.R),0),34),n._,t8n,null,0,1,qOt,!1,!1,!0,!1,!0,!1),z0(n.S,LOt,"EObject",!1,!1,!0),fin(BB(Wtn(VQ(n.S),0),59),n.o,"eClass"),fin(BB(Wtn(VQ(n.S),1),59),n.e,"eIsProxy"),fin(BB(Wtn(VQ(n.S),2),59),n.X,"eResource"),fin(BB(Wtn(VQ(n.S),3),59),n.S,"eContainer"),fin(BB(Wtn(VQ(n.S),4),59),n.bb,"eContainingFeature"),fin(BB(Wtn(VQ(n.S),5),59),n.W,"eContainmentFeature"),u=fin(BB(Wtn(VQ(n.S),6),59),null,"eContents"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(u,t,null))&&r.Fi(),u=fin(BB(Wtn(VQ(n.S),7),59),null,"eAllContents"),t=ZV(n.cb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(c=HTn(u,t,null))&&c.Fi(),u=fin(BB(Wtn(VQ(n.S),8),59),null,"eCrossReferences"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(a=HTn(u,t,null))&&a.Fi(),$yn(u=fin(BB(Wtn(VQ(n.S),9),59),n.M,"eGet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),10),59),n.M,"eGet"),n.bb,t7n),$yn(u,n.e,"resolve"),$yn(u=fin(BB(Wtn(VQ(n.S),11),59),null,"eSet"),n.bb,t7n),$yn(u,n.M,"newValue"),$yn(u=fin(BB(Wtn(VQ(n.S),12),59),n.e,"eIsSet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),13),59),null,"eUnset"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),14),59),n.M,"eInvoke"),n.T,i7n),t=ZV(n.fb),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(u,t,"arguments"),_W(u,n.K),z0(n.T,QAt,g9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.T),0),18),n.o,BB(Wtn(QQ(n.o),3),18),o7n,0,1,QAt,!0,!1,!1,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),1),18),n.db,null,c7n,0,-1,QAt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.T),2),18),n.V,BB(Wtn(QQ(n.V),0),18),"eParameters",0,-1,QAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),3),18),n.p,null,"eExceptions",0,-1,QAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.T),4),18),n.H,null,"eGenericExceptions",0,-1,QAt,!1,!1,!0,!0,!1,!0,!1),fin(BB(Wtn(VQ(n.T),0),59),n.I,e7n),$yn(u=fin(BB(Wtn(VQ(n.T),1),59),n.e,"isOverrideOf"),n.T,"someOperation"),z0(n.U,GOt,"EPackage",!1,!1,!0),ucn(BB(Wtn(QQ(n.U),0),34),n._,"nsURI",null,0,1,GOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.U),1),34),n._,"nsPrefix",null,0,1,GOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.U),2),18),n.B,BB(Wtn(QQ(n.B),0),18),"eFactoryInstance",1,1,GOt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.U),3),18),n.p,BB(Wtn(QQ(n.p),4),18),"eClassifiers",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),4),18),n.U,BB(Wtn(QQ(n.U),5),18),"eSubpackages",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),5),18),n.U,BB(Wtn(QQ(n.U),4),18),"eSuperPackage",0,1,GOt,!0,!1,!1,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.U),0),59),n.p,"getEClassifier"),n._,t8n),z0(n.V,YAt,p9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.V),0),18),n.T,BB(Wtn(QQ(n.T),2),18),"eOperation",0,1,YAt,!0,!1,!1,!1,!1,!1,!1),z0(n.W,JAt,v9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.W),0),34),n.e,"containment",null,0,1,JAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.W),1),34),n.e,"container",null,0,1,JAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.W),2),34),n.e,"resolveProxies",a5n,0,1,JAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.W),3),18),n.W,null,"eOpposite",0,1,JAt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.W),4),18),n.o,null,"eReferenceType",1,1,JAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.W),5),18),n.b,null,"eKeys",0,-1,JAt,!1,!1,!0,!1,!0,!1,!1),z0(n.bb,FAt,f9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.e,"changeable",a5n,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.e,"volatile",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),2),34),n.e,"transient",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),3),34),n._,"defaultValueLiteral",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),4),34),n.M,r7n,null,0,1,FAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.bb),5),34),n.e,"unsettable",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),6),34),n.e,"derived",null,0,1,FAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.bb),7),18),n.o,BB(Wtn(QQ(n.o),13),18),o7n,0,1,FAt,!0,!1,!1,!1,!1,!1,!1),fin(BB(Wtn(VQ(n.bb),0),59),n.I,n7n),u=fin(BB(Wtn(VQ(n.bb),1),59),null,"getContainerClass"),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(i=HTn(u,t,null))&&i.Fi(),z0(n.eb,_At,h9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.eb),0),34),n.e,"ordered",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),1),34),n.e,"unique",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),2),34),n.I,"lowerBound",null,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),3),34),n.I,"upperBound","1",0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),4),34),n.e,"many",null,0,1,_At,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.eb),5),34),n.e,"required",null,0,1,_At,!0,!0,!1,!1,!0,!0),Myn(BB(Wtn(QQ(n.eb),6),18),n.p,null,"eType",0,1,_At,!1,!0,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.eb),7),18),n.H,null,"eGenericType",0,1,_At,!1,!0,!0,!0,!1,!0,!1),z0(n.ab,Hnt,"EStringToStringMapEntry",!1,!1,!1),ucn(BB(Wtn(QQ(n.ab),0),34),n._,"key",null,0,1,Hnt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.ab),1),34),n._,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),z0(n.H,VAt,d9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.H),0),18),n.H,null,"eUpperBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),1),18),n.H,null,"eTypeArguments",0,-1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),2),18),n.p,null,"eRawType",1,1,VAt,!0,!1,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.H),3),18),n.H,null,"eLowerBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),4),18),n.db,null,"eTypeParameter",0,1,VAt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),5),18),n.p,null,"eClassifier",0,1,VAt,!1,!1,!0,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.H),0),59),n.e,a7n),n.M,AWn),z0(n.db,O$t,m9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.db),0),18),n.H,null,"eBounds",0,-1,O$t,!1,!1,!0,!0,!1,!1,!1),dV(n.c,iet,"EBigDecimal",!0),dV(n.d,oet,"EBigInteger",!0),dV(n.e,$Nt,"EBoolean",!0),dV(n.f,ktt,"EBooleanObject",!0),dV(n.i,NNt,"EByte",!0),dV(n.g,Gk(NNt,1),"EByteArray",!0),dV(n.j,Ttt,"EByteObject",!0),dV(n.k,ONt,"EChar",!0),dV(n.n,Stt,"ECharacterObject",!0),dV(n.r,mtt,"EDate",!0),dV(n.s,_Nt,"EDiagnosticChain",!1),dV(n.t,xNt,"EDouble",!0),dV(n.u,Ptt,"EDoubleObject",!0),dV(n.fb,uAt,"EEList",!1),dV(n.A,yAt,"EEnumerator",!1),dV(n.C,oLt,"EFeatureMap",!1),dV(n.D,$$t,"EFeatureMapEntry",!1),dV(n.F,DNt,"EFloat",!0),dV(n.G,Ctt,"EFloatObject",!0),dV(n.I,ANt,"EInt",!0),dV(n.J,Att,"EIntegerObject",!0),dV(n.L,$nt,"EJavaClass",!0),dV(n.M,Ant,"EJavaObject",!0),dV(n.N,LNt,"ELong",!0),dV(n.O,Rtt,"ELongObject",!0),dV(n.P,Nnt,"EMap",!1),dV(n.X,iLt,"EResource",!1),dV(n.Y,FNt,"EResourceSet",!1),dV(n.Z,RNt,"EShort",!0),dV(n.$,_tt,"EShortObject",!0),dV(n._,Qtt,"EString",!0),dV(n.cb,sAt,"ETreeIterator",!1),dV(n.K,BNt,"EInvocationTargetException",!1),Lhn(n,V9n))}"undefined"!=typeof window?e=window:void 0!==n?e=n:"undefined"!=typeof self&&(e=self);var MWn,SWn,PWn,CWn,IWn,OWn,AWn="object",$Wn="boolean",LWn="number",NWn="string",xWn="function",DWn=2147483647,RWn="java.lang",KWn={3:1},_Wn="com.google.common.base",FWn=", ",BWn="%s (%s) must not be negative",HWn={3:1,4:1,5:1},qWn="negative size: ",GWn="Optional.of(",zWn="null",UWn={198:1,47:1},XWn="com.google.common.collect",WWn={198:1,47:1,125:1},VWn={224:1,3:1},QWn={47:1},YWn="java.util",JWn={83:1},ZWn={20:1,28:1,14:1},nVn=1965,tVn={20:1,28:1,14:1,21:1},eVn={83:1,171:1,161:1},iVn={20:1,28:1,14:1,21:1,84:1},rVn={20:1,28:1,14:1,271:1,21:1,84:1},cVn={47:1,125:1},aVn={345:1,42:1},uVn="AbstractMapEntry",oVn="expectedValuesPerKey",sVn={3:1,6:1,4:1,5:1},hVn=16384,fVn={164:1},lVn={38:1},bVn={l:4194303,m:4194303,h:524287},wVn={196:1},dVn={245:1,3:1,35:1},gVn="range unbounded on this side",pVn={20:1},vVn={20:1,14:1},mVn={3:1,20:1,28:1,14:1},yVn={152:1,3:1,20:1,28:1,14:1,15:1,54:1},kVn={3:1,4:1,5:1,165:1},jVn={3:1,83:1},EVn={20:1,14:1,21:1},TVn={3:1,20:1,28:1,14:1,21:1},MVn={20:1,14:1,21:1,84:1},SVn=461845907,PVn=-862048943,CVn={3:1,6:1,4:1,5:1,165:1},IVn="expectedSize",OVn=1073741824,AVn="initialArraySize",$Vn={3:1,6:1,4:1,9:1,5:1},LVn={20:1,28:1,52:1,14:1,15:1},NVn="arraySize",xVn={20:1,28:1,52:1,14:1,15:1,54:1},DVn={45:1},RVn={365:1},KVn=1e-4,_Vn=-2147483648,FVn="__noinit__",BVn={3:1,102:1,60:1,78:1},HVn="com.google.gwt.core.client.impl",qVn="String",GVn="com.google.gwt.core.client",zVn="anonymous",UVn="fnStack",XVn="Unknown",WVn={195:1,3:1,4:1},VVn=1e3,QVn=65535,YVn="January",JVn="February",ZVn="March",nQn="April",tQn="May",eQn="June",iQn="July",rQn="August",cQn="September",aQn="October",uQn="November",oQn="December",sQn=1900,hQn={48:1,3:1,4:1},fQn="Before Christ",lQn="Anno Domini",bQn="Sunday",wQn="Monday",dQn="Tuesday",gQn="Wednesday",pQn="Thursday",vQn="Friday",mQn="Saturday",yQn="com.google.gwt.i18n.shared",kQn="DateTimeFormat",jQn="com.google.gwt.i18n.client",EQn="DefaultDateTimeFormatInfo",TQn={3:1,4:1,35:1,199:1},MQn="com.google.gwt.json.client",SQn=4194303,PQn=1048575,CQn=524288,IQn=4194304,OQn=17592186044416,AQn=1e9,$Qn=-17592186044416,LQn="java.io",NQn={3:1,102:1,73:1,60:1,78:1},xQn={3:1,289:1,78:1},DQn='For input string: "',RQn=1/0,KQn=-1/0,_Qn=4096,FQn={3:1,4:1,364:1},BQn=65536,HQn=55296,qQn={104:1,3:1,4:1},GQn=1e5,zQn=.3010299956639812,UQn=4294967295,XQn=4294967296,WQn="0.0",VQn={42:1},QQn={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},YQn={3:1,20:1,28:1,52:1,14:1,15:1,54:1},JQn={20:1,14:1,15:1},ZQn={3:1,62:1},nYn={182:1},tYn={3:1,4:1,83:1},eYn={3:1,4:1,20:1,28:1,14:1,53:1,21:1},iYn="delete",rYn=1.4901161193847656e-8,cYn=11102230246251565e-32,aYn=15525485,uYn=5.960464477539063e-8,oYn=16777216,sYn=16777215,hYn=", length: ",fYn={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},lYn={3:1,35:1,22:1,297:1},bYn="java.util.function",wYn="java.util.logging",dYn={3:1,4:1,5:1,842:1},gYn="undefined",pYn="java.util.stream",vYn={525:1,670:1},mYn="fromIndex: ",yYn=" > toIndex: ",kYn=", toIndex: ",jYn="Index: ",EYn=", Size: ",TYn="org.eclipse.elk.alg.common",MYn={62:1},SYn="org.eclipse.elk.alg.common.compaction",PYn="Scanline/EventHandler",CYn="org.eclipse.elk.alg.common.compaction.oned",IYn="CNode belongs to another CGroup.",OYn="ISpacingsHandler/1",AYn="The ",$Yn=" instance has been finished already.",LYn="The direction ",NYn=" is not supported by the CGraph instance.",xYn="OneDimensionalCompactor",DYn="OneDimensionalCompactor/lambda$0$Type",RYn="Quadruplet",KYn="ScanlineConstraintCalculator",_Yn="ScanlineConstraintCalculator/ConstraintsScanlineHandler",FYn="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",BYn="ScanlineConstraintCalculator/Timestamp",HYn="ScanlineConstraintCalculator/lambda$0$Type",qYn={169:1,45:1},GYn="org.eclipse.elk.alg.common.compaction.options",zYn="org.eclipse.elk.core.data",UYn="org.eclipse.elk.polyomino.traversalStrategy",XYn="org.eclipse.elk.polyomino.lowLevelSort",WYn="org.eclipse.elk.polyomino.highLevelSort",VYn="org.eclipse.elk.polyomino.fill",QYn={130:1},YYn="polyomino",JYn="org.eclipse.elk.alg.common.networksimplex",ZYn={177:1,3:1,4:1},nJn="org.eclipse.elk.alg.common.nodespacing",tJn="org.eclipse.elk.alg.common.nodespacing.cellsystem",eJn="CENTER",iJn={212:1,326:1},rJn={3:1,4:1,5:1,595:1},cJn="LEFT",aJn="RIGHT",uJn="Vertical alignment cannot be null",oJn="BOTTOM",sJn="org.eclipse.elk.alg.common.nodespacing.internal",hJn="UNDEFINED",fJn=.01,lJn="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",bJn="LabelPlacer/lambda$0$Type",wJn="LabelPlacer/lambda$1$Type",dJn="portRatioOrPosition",gJn="org.eclipse.elk.alg.common.overlaps",pJn="DOWN",vJn="org.eclipse.elk.alg.common.polyomino",mJn="NORTH",yJn="EAST",kJn="SOUTH",jJn="WEST",EJn="org.eclipse.elk.alg.common.polyomino.structures",TJn="Direction",MJn="Grid is only of size ",SJn=". Requested point (",PJn=") is out of bounds.",CJn=" Given center based coordinates were (",IJn="org.eclipse.elk.graph.properties",OJn="IPropertyHolder",AJn={3:1,94:1,134:1},$Jn="org.eclipse.elk.alg.common.spore",LJn="org.eclipse.elk.alg.common.utils",NJn={209:1},xJn="org.eclipse.elk.core",DJn="Connected Components Compaction",RJn="org.eclipse.elk.alg.disco",KJn="org.eclipse.elk.alg.disco.graph",_Jn="org.eclipse.elk.alg.disco.options",FJn="CompactionStrategy",BJn="org.eclipse.elk.disco.componentCompaction.strategy",HJn="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",qJn="org.eclipse.elk.disco.debug.discoGraph",GJn="org.eclipse.elk.disco.debug.discoPolys",zJn="componentCompaction",UJn="org.eclipse.elk.disco",XJn="org.eclipse.elk.spacing.componentComponent",WJn="org.eclipse.elk.edge.thickness",VJn="org.eclipse.elk.aspectRatio",QJn="org.eclipse.elk.padding",YJn="org.eclipse.elk.alg.disco.transform",JJn=1.5707963267948966,ZJn=17976931348623157e292,nZn={3:1,4:1,5:1,192:1},tZn={3:1,6:1,4:1,5:1,106:1,120:1},eZn="org.eclipse.elk.alg.force",iZn="ComponentsProcessor",rZn="ComponentsProcessor/1",cZn="org.eclipse.elk.alg.force.graph",aZn="Component Layout",uZn="org.eclipse.elk.alg.force.model",oZn="org.eclipse.elk.force.model",sZn="org.eclipse.elk.force.iterations",hZn="org.eclipse.elk.force.repulsivePower",fZn="org.eclipse.elk.force.temperature",lZn=.001,bZn="org.eclipse.elk.force.repulsion",wZn="org.eclipse.elk.alg.force.options",dZn=1.600000023841858,gZn="org.eclipse.elk.force",pZn="org.eclipse.elk.priority",vZn="org.eclipse.elk.spacing.nodeNode",mZn="org.eclipse.elk.spacing.edgeLabel",yZn="org.eclipse.elk.randomSeed",kZn="org.eclipse.elk.separateConnectedComponents",jZn="org.eclipse.elk.interactive",EZn="org.eclipse.elk.portConstraints",TZn="org.eclipse.elk.edgeLabels.inline",MZn="org.eclipse.elk.omitNodeMicroLayout",SZn="org.eclipse.elk.nodeSize.options",PZn="org.eclipse.elk.nodeSize.constraints",CZn="org.eclipse.elk.nodeLabels.placement",IZn="org.eclipse.elk.portLabels.placement",OZn="origin",AZn="random",$Zn="boundingBox.upLeft",LZn="boundingBox.lowRight",NZn="org.eclipse.elk.stress.fixed",xZn="org.eclipse.elk.stress.desiredEdgeLength",DZn="org.eclipse.elk.stress.dimension",RZn="org.eclipse.elk.stress.epsilon",KZn="org.eclipse.elk.stress.iterationLimit",_Zn="org.eclipse.elk.stress",FZn="ELK Stress",BZn="org.eclipse.elk.nodeSize.minimum",HZn="org.eclipse.elk.alg.force.stress",qZn="Layered layout",GZn="org.eclipse.elk.alg.layered",zZn="org.eclipse.elk.alg.layered.compaction.components",UZn="org.eclipse.elk.alg.layered.compaction.oned",XZn="org.eclipse.elk.alg.layered.compaction.oned.algs",WZn="org.eclipse.elk.alg.layered.compaction.recthull",VZn="org.eclipse.elk.alg.layered.components",QZn="NONE",YZn={3:1,6:1,4:1,9:1,5:1,122:1},JZn={3:1,6:1,4:1,5:1,141:1,106:1,120:1},ZZn="org.eclipse.elk.alg.layered.compound",n1n={51:1},t1n="org.eclipse.elk.alg.layered.graph",e1n=" -> ",i1n="Not supported by LGraph",r1n="Port side is undefined",c1n={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},a1n={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},u1n={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},o1n="([{\"' \t\r\n",s1n=")]}\"' \t\r\n",h1n="The given string contains parts that cannot be parsed as numbers.",f1n="org.eclipse.elk.core.math",l1n={3:1,4:1,142:1,207:1,414:1},b1n={3:1,4:1,116:1,207:1,414:1},w1n="org.eclipse.elk.layered",d1n="org.eclipse.elk.alg.layered.graph.transform",g1n="ElkGraphImporter",p1n="ElkGraphImporter/lambda$0$Type",v1n="ElkGraphImporter/lambda$1$Type",m1n="ElkGraphImporter/lambda$2$Type",y1n="ElkGraphImporter/lambda$4$Type",k1n="Node margin calculation",j1n="org.eclipse.elk.alg.layered.intermediate",E1n="ONE_SIDED_GREEDY_SWITCH",T1n="TWO_SIDED_GREEDY_SWITCH",M1n="No implementation is available for the layout processor ",S1n="IntermediateProcessorStrategy",P1n="Node '",C1n="FIRST_SEPARATE",I1n="LAST_SEPARATE",O1n="Odd port side processing",A1n="org.eclipse.elk.alg.layered.intermediate.compaction",$1n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",L1n="org.eclipse.elk.alg.layered.p3order.counting",N1n={225:1},x1n="org.eclipse.elk.alg.layered.intermediate.loops",D1n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",R1n="org.eclipse.elk.alg.layered.intermediate.loops.routing",K1n="org.eclipse.elk.alg.layered.intermediate.preserveorder",_1n="org.eclipse.elk.alg.layered.intermediate.wrapping",F1n="org.eclipse.elk.alg.layered.options",B1n="INTERACTIVE",H1n="DEPTH_FIRST",q1n="EDGE_LENGTH",G1n="SELF_LOOPS",z1n="firstTryWithInitialOrder",U1n="org.eclipse.elk.layered.directionCongruency",X1n="org.eclipse.elk.layered.feedbackEdges",W1n="org.eclipse.elk.layered.interactiveReferencePoint",V1n="org.eclipse.elk.layered.mergeEdges",Q1n="org.eclipse.elk.layered.mergeHierarchyEdges",Y1n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",J1n="org.eclipse.elk.layered.portSortingStrategy",Z1n="org.eclipse.elk.layered.thoroughness",n0n="org.eclipse.elk.layered.unnecessaryBendpoints",t0n="org.eclipse.elk.layered.generatePositionAndLayerIds",e0n="org.eclipse.elk.layered.cycleBreaking.strategy",i0n="org.eclipse.elk.layered.layering.strategy",r0n="org.eclipse.elk.layered.layering.layerConstraint",c0n="org.eclipse.elk.layered.layering.layerChoiceConstraint",a0n="org.eclipse.elk.layered.layering.layerId",u0n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",o0n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",s0n="org.eclipse.elk.layered.layering.nodePromotion.strategy",h0n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",f0n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",l0n="org.eclipse.elk.layered.crossingMinimization.strategy",b0n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",w0n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",d0n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",g0n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",p0n="org.eclipse.elk.layered.crossingMinimization.positionId",v0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",m0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",y0n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",k0n="org.eclipse.elk.layered.nodePlacement.strategy",j0n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",E0n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",T0n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M0n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",S0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",P0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",C0n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",I0n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",O0n="org.eclipse.elk.layered.edgeRouting.splines.mode",A0n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",$0n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",L0n="org.eclipse.elk.layered.spacing.baseValue",N0n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",x0n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",D0n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",R0n="org.eclipse.elk.layered.priority.direction",K0n="org.eclipse.elk.layered.priority.shortness",_0n="org.eclipse.elk.layered.priority.straightness",F0n="org.eclipse.elk.layered.compaction.connectedComponents",B0n="org.eclipse.elk.layered.compaction.postCompaction.strategy",H0n="org.eclipse.elk.layered.compaction.postCompaction.constraints",q0n="org.eclipse.elk.layered.highDegreeNodes.treatment",G0n="org.eclipse.elk.layered.highDegreeNodes.threshold",z0n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U0n="org.eclipse.elk.layered.wrapping.strategy",X0n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",W0n="org.eclipse.elk.layered.wrapping.correctionFactor",V0n="org.eclipse.elk.layered.wrapping.cutting.strategy",Q0n="org.eclipse.elk.layered.wrapping.cutting.cuts",Y0n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",J0n="org.eclipse.elk.layered.wrapping.validify.strategy",Z0n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",n2n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",t2n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",e2n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",i2n="org.eclipse.elk.layered.edgeLabels.sideSelection",r2n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",c2n="org.eclipse.elk.layered.considerModelOrder.strategy",a2n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",u2n="org.eclipse.elk.layered.considerModelOrder.components",o2n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",s2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",h2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",f2n="layering",l2n="layering.minWidth",b2n="layering.nodePromotion",w2n="crossingMinimization",d2n="org.eclipse.elk.hierarchyHandling",g2n="crossingMinimization.greedySwitch",p2n="nodePlacement",v2n="nodePlacement.bk",m2n="edgeRouting",y2n="org.eclipse.elk.edgeRouting",k2n="spacing",j2n="priority",E2n="compaction",T2n="compaction.postCompaction",M2n="Specifies whether and how post-process compaction is applied.",S2n="highDegreeNodes",P2n="wrapping",C2n="wrapping.cutting",I2n="wrapping.validify",O2n="wrapping.multiEdge",A2n="edgeLabels",$2n="considerModelOrder",L2n="org.eclipse.elk.spacing.commentComment",N2n="org.eclipse.elk.spacing.commentNode",x2n="org.eclipse.elk.spacing.edgeEdge",D2n="org.eclipse.elk.spacing.edgeNode",R2n="org.eclipse.elk.spacing.labelLabel",K2n="org.eclipse.elk.spacing.labelPortHorizontal",_2n="org.eclipse.elk.spacing.labelPortVertical",F2n="org.eclipse.elk.spacing.labelNode",B2n="org.eclipse.elk.spacing.nodeSelfLoop",H2n="org.eclipse.elk.spacing.portPort",q2n="org.eclipse.elk.spacing.individual",G2n="org.eclipse.elk.port.borderOffset",z2n="org.eclipse.elk.noLayout",U2n="org.eclipse.elk.port.side",X2n="org.eclipse.elk.debugMode",W2n="org.eclipse.elk.alignment",V2n="org.eclipse.elk.insideSelfLoops.activate",Q2n="org.eclipse.elk.insideSelfLoops.yo",Y2n="org.eclipse.elk.nodeSize.fixedGraphSize",J2n="org.eclipse.elk.direction",Z2n="org.eclipse.elk.nodeLabels.padding",n3n="org.eclipse.elk.portLabels.nextToPortIfPossible",t3n="org.eclipse.elk.portLabels.treatAsGroup",e3n="org.eclipse.elk.portAlignment.default",i3n="org.eclipse.elk.portAlignment.north",r3n="org.eclipse.elk.portAlignment.south",c3n="org.eclipse.elk.portAlignment.west",a3n="org.eclipse.elk.portAlignment.east",u3n="org.eclipse.elk.contentAlignment",o3n="org.eclipse.elk.junctionPoints",s3n="org.eclipse.elk.edgeLabels.placement",h3n="org.eclipse.elk.port.index",f3n="org.eclipse.elk.commentBox",l3n="org.eclipse.elk.hypernode",b3n="org.eclipse.elk.port.anchor",w3n="org.eclipse.elk.partitioning.activate",d3n="org.eclipse.elk.partitioning.partition",g3n="org.eclipse.elk.position",p3n="org.eclipse.elk.margins",v3n="org.eclipse.elk.spacing.portsSurrounding",m3n="org.eclipse.elk.interactiveLayout",y3n="org.eclipse.elk.core.util",k3n={3:1,4:1,5:1,593:1},j3n="NETWORK_SIMPLEX",E3n={123:1,51:1},T3n="org.eclipse.elk.alg.layered.p1cycles",M3n="org.eclipse.elk.alg.layered.p2layers",S3n={402:1,225:1},P3n={832:1,3:1,4:1},C3n="org.eclipse.elk.alg.layered.p3order",I3n="org.eclipse.elk.alg.layered.p4nodes",O3n={3:1,4:1,5:1,840:1},A3n=1e-5,$3n="org.eclipse.elk.alg.layered.p4nodes.bk",L3n="org.eclipse.elk.alg.layered.p5edges",N3n="org.eclipse.elk.alg.layered.p5edges.orthogonal",x3n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",D3n=1e-6,R3n="org.eclipse.elk.alg.layered.p5edges.splines",K3n=.09999999999999998,_3n=1e-8,F3n=4.71238898038469,B3n=3.141592653589793,H3n="org.eclipse.elk.alg.mrtree",q3n="org.eclipse.elk.alg.mrtree.graph",G3n="org.eclipse.elk.alg.mrtree.intermediate",z3n="Set neighbors in level",U3n="DESCENDANTS",X3n="org.eclipse.elk.mrtree.weighting",W3n="org.eclipse.elk.mrtree.searchOrder",V3n="org.eclipse.elk.alg.mrtree.options",Q3n="org.eclipse.elk.mrtree",Y3n="org.eclipse.elk.tree",J3n="org.eclipse.elk.alg.radial",Z3n=6.283185307179586,n4n=5e-324,t4n="org.eclipse.elk.alg.radial.intermediate",e4n="org.eclipse.elk.alg.radial.intermediate.compaction",i4n={3:1,4:1,5:1,106:1},r4n="org.eclipse.elk.alg.radial.intermediate.optimization",c4n="No implementation is available for the layout option ",a4n="org.eclipse.elk.alg.radial.options",u4n="org.eclipse.elk.radial.orderId",o4n="org.eclipse.elk.radial.radius",s4n="org.eclipse.elk.radial.compactor",h4n="org.eclipse.elk.radial.compactionStepSize",f4n="org.eclipse.elk.radial.sorter",l4n="org.eclipse.elk.radial.wedgeCriteria",b4n="org.eclipse.elk.radial.optimizationCriteria",w4n="org.eclipse.elk.radial",d4n="org.eclipse.elk.alg.radial.p1position.wedge",g4n="org.eclipse.elk.alg.radial.sorting",p4n=5.497787143782138,v4n=3.9269908169872414,m4n=2.356194490192345,y4n="org.eclipse.elk.alg.rectpacking",k4n="org.eclipse.elk.alg.rectpacking.firstiteration",j4n="org.eclipse.elk.alg.rectpacking.options",E4n="org.eclipse.elk.rectpacking.optimizationGoal",T4n="org.eclipse.elk.rectpacking.lastPlaceShift",M4n="org.eclipse.elk.rectpacking.currentPosition",S4n="org.eclipse.elk.rectpacking.desiredPosition",P4n="org.eclipse.elk.rectpacking.onlyFirstIteration",C4n="org.eclipse.elk.rectpacking.rowCompaction",I4n="org.eclipse.elk.rectpacking.expandToAspectRatio",O4n="org.eclipse.elk.rectpacking.targetWidth",A4n="org.eclipse.elk.expandNodes",$4n="org.eclipse.elk.rectpacking",L4n="org.eclipse.elk.alg.rectpacking.util",N4n="No implementation available for ",x4n="org.eclipse.elk.alg.spore",D4n="org.eclipse.elk.alg.spore.options",R4n="org.eclipse.elk.sporeCompaction",K4n="org.eclipse.elk.underlyingLayoutAlgorithm",_4n="org.eclipse.elk.processingOrder.treeConstruction",F4n="org.eclipse.elk.processingOrder.spanningTreeCostFunction",B4n="org.eclipse.elk.processingOrder.preferredRoot",H4n="org.eclipse.elk.processingOrder.rootSelection",q4n="org.eclipse.elk.structure.structureExtractionStrategy",G4n="org.eclipse.elk.compaction.compactionStrategy",z4n="org.eclipse.elk.compaction.orthogonal",U4n="org.eclipse.elk.overlapRemoval.maxIterations",X4n="org.eclipse.elk.overlapRemoval.runScanline",W4n="processingOrder",V4n="overlapRemoval",Q4n="org.eclipse.elk.sporeOverlap",Y4n="org.eclipse.elk.alg.spore.p1structure",J4n="org.eclipse.elk.alg.spore.p2processingorder",Z4n="org.eclipse.elk.alg.spore.p3execution",n5n="Invalid index: ",t5n="org.eclipse.elk.core.alg",e5n={331:1},i5n={288:1},r5n="Make sure its type is registered with the ",c5n=" utility class.",a5n="true",u5n="false",o5n="Couldn't clone property '",s5n=.05,h5n="org.eclipse.elk.core.options",f5n=1.2999999523162842,l5n="org.eclipse.elk.box",b5n="org.eclipse.elk.box.packingMode",w5n="org.eclipse.elk.algorithm",d5n="org.eclipse.elk.resolvedAlgorithm",g5n="org.eclipse.elk.bendPoints",p5n="org.eclipse.elk.labelManager",v5n="org.eclipse.elk.scaleFactor",m5n="org.eclipse.elk.animate",y5n="org.eclipse.elk.animTimeFactor",k5n="org.eclipse.elk.layoutAncestors",j5n="org.eclipse.elk.maxAnimTime",E5n="org.eclipse.elk.minAnimTime",T5n="org.eclipse.elk.progressBar",M5n="org.eclipse.elk.validateGraph",S5n="org.eclipse.elk.validateOptions",P5n="org.eclipse.elk.zoomToFit",C5n="org.eclipse.elk.font.name",I5n="org.eclipse.elk.font.size",O5n="org.eclipse.elk.edge.type",A5n="partitioning",$5n="nodeLabels",L5n="portAlignment",N5n="nodeSize",x5n="port",D5n="portLabels",R5n="insideSelfLoops",K5n="org.eclipse.elk.fixed",_5n="org.eclipse.elk.random",F5n="port must have a parent node to calculate the port side",B5n="The edge needs to have exactly one edge section. Found: ",H5n="org.eclipse.elk.core.util.adapters",q5n="org.eclipse.emf.ecore",G5n="org.eclipse.elk.graph",z5n="EMapPropertyHolder",U5n="ElkBendPoint",X5n="ElkGraphElement",W5n="ElkConnectableShape",V5n="ElkEdge",Q5n="ElkEdgeSection",Y5n="EModelElement",J5n="ENamedElement",Z5n="ElkLabel",n6n="ElkNode",t6n="ElkPort",e6n={92:1,90:1},i6n="org.eclipse.emf.common.notify.impl",r6n="The feature '",c6n="' is not a valid changeable feature",a6n="Expecting null",u6n="' is not a valid feature",o6n="The feature ID",s6n=" is not a valid feature ID",h6n=32768,f6n={105:1,92:1,90:1,56:1,49:1,97:1},l6n="org.eclipse.emf.ecore.impl",b6n="org.eclipse.elk.graph.impl",w6n="Recursive containment not allowed for ",d6n="The datatype '",g6n="' is not a valid classifier",p6n="The value '",v6n={190:1,3:1,4:1},m6n="The class '",y6n="http://www.eclipse.org/elk/ElkGraph",k6n=1024,j6n="property",E6n="value",T6n="source",M6n="properties",S6n="identifier",P6n="height",C6n="width",I6n="parent",O6n="text",A6n="children",$6n="hierarchical",L6n="sources",N6n="targets",x6n="sections",D6n="bendPoints",R6n="outgoingShape",K6n="incomingShape",_6n="outgoingSections",F6n="incomingSections",B6n="org.eclipse.emf.common.util",H6n="Severe implementation error in the Json to ElkGraph importer.",q6n="id",G6n="org.eclipse.elk.graph.json",z6n="Unhandled parameter types: ",U6n="startPoint",X6n="An edge must have at least one source and one target (edge id: '",W6n="').",V6n="Referenced edge section does not exist: ",Q6n=" (edge id: '",Y6n="target",J6n="sourcePoint",Z6n="targetPoint",n8n="group",t8n="name",e8n="connectableShape cannot be null",i8n="edge cannot be null",r8n="Passed edge is not 'simple'.",c8n="org.eclipse.elk.graph.util",a8n="The 'no duplicates' constraint is violated",u8n="targetIndex=",o8n=", size=",s8n="sourceIndex=",h8n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},f8n={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},l8n="logging",b8n="measureExecutionTime",w8n="parser.parse.1",d8n="parser.parse.2",g8n="parser.next.1",p8n="parser.next.2",v8n="parser.next.3",m8n="parser.next.4",y8n="parser.factor.1",k8n="parser.factor.2",j8n="parser.factor.3",E8n="parser.factor.4",T8n="parser.factor.5",M8n="parser.factor.6",S8n="parser.atom.1",P8n="parser.atom.2",C8n="parser.atom.3",I8n="parser.atom.4",O8n="parser.atom.5",A8n="parser.cc.1",$8n="parser.cc.2",L8n="parser.cc.3",N8n="parser.cc.5",x8n="parser.cc.6",D8n="parser.cc.7",R8n="parser.cc.8",K8n="parser.ope.1",_8n="parser.ope.2",F8n="parser.ope.3",B8n="parser.descape.1",H8n="parser.descape.2",q8n="parser.descape.3",G8n="parser.descape.4",z8n="parser.descape.5",U8n="parser.process.1",X8n="parser.quantifier.1",W8n="parser.quantifier.2",V8n="parser.quantifier.3",Q8n="parser.quantifier.4",Y8n="parser.quantifier.5",J8n="org.eclipse.emf.common.notify",Z8n={415:1,672:1},n9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},t9n={366:1,143:1},e9n="index=",i9n={3:1,4:1,5:1,126:1},r9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},c9n={3:1,6:1,4:1,5:1,192:1},a9n={3:1,4:1,5:1,165:1,367:1},u9n=";/?:@&=+$,",o9n="invalid authority: ",s9n="EAnnotation",h9n="ETypedElement",f9n="EStructuralFeature",l9n="EAttribute",b9n="EClassifier",w9n="EEnumLiteral",d9n="EGenericType",g9n="EOperation",p9n="EParameter",v9n="EReference",m9n="ETypeParameter",y9n="org.eclipse.emf.ecore.util",k9n={76:1},j9n={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},E9n="org.eclipse.emf.ecore.util.FeatureMap$Entry",T9n=8192,M9n=2048,S9n="byte",P9n="char",C9n="double",I9n="float",O9n="int",A9n="long",$9n="short",L9n="java.lang.Object",N9n={3:1,4:1,5:1,247:1},x9n={3:1,4:1,5:1,673:1},D9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},R9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},K9n="mixed",_9n="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",F9n="kind",B9n={3:1,4:1,5:1,674:1},H9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},q9n={20:1,28:1,52:1,14:1,15:1,58:1,69:1},G9n={47:1,125:1,279:1},z9n={72:1,332:1},U9n="The value of type '",X9n="' must be of type '",W9n=1316,V9n="http://www.eclipse.org/emf/2002/Ecore",Q9n=-32768,Y9n="constraints",J9n="baseType",Z9n="getEStructuralFeature",n7n="getFeatureID",t7n="feature",e7n="getOperationID",i7n="operation",r7n="defaultValue",c7n="eTypeParameters",a7n="isInstance",u7n="getEEnumLiteral",o7n="eContainingClass",s7n={55:1},h7n={3:1,4:1,5:1,119:1},f7n="org.eclipse.emf.ecore.resource",l7n={92:1,90:1,591:1,1935:1},b7n="org.eclipse.emf.ecore.resource.impl",w7n="unspecified",d7n="simple",g7n="attribute",p7n="attributeWildcard",v7n="element",m7n="elementWildcard",y7n="collapse",k7n="itemType",j7n="namespace",E7n="##targetNamespace",T7n="whiteSpace",M7n="wildcards",S7n="http://www.eclipse.org/emf/2003/XMLType",P7n="##any",C7n="uninitialized",I7n="The multiplicity constraint is violated",O7n="org.eclipse.emf.ecore.xml.type",A7n="ProcessingInstruction",$7n="SimpleAnyType",L7n="XMLTypeDocumentRoot",N7n="org.eclipse.emf.ecore.xml.type.impl",x7n="INF",D7n="processing",R7n="ENTITIES_._base",K7n="minLength",_7n="ENTITY",F7n="NCName",B7n="IDREFS_._base",H7n="integer",q7n="token",G7n="pattern",z7n="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",U7n="\\i\\c*",X7n="[\\i-[:]][\\c-[:]]*",W7n="nonPositiveInteger",V7n="maxInclusive",Q7n="NMTOKEN",Y7n="NMTOKENS_._base",J7n="nonNegativeInteger",Z7n="minInclusive",nnt="normalizedString",tnt="unsignedByte",ent="unsignedInt",int="18446744073709551615",rnt="unsignedShort",cnt="processingInstruction",ant="org.eclipse.emf.ecore.xml.type.internal",unt=1114111,ont="Internal Error: shorthands: \\u",snt="xml:isDigit",hnt="xml:isWord",fnt="xml:isSpace",lnt="xml:isNameChar",bnt="xml:isInitialNameChar",wnt="09\u0660\u0669\u06f0\u06f9\u0966\u096f\u09e6\u09ef\u0a66\u0a6f\u0ae6\u0aef\u0b66\u0b6f\u0be7\u0bef\u0c66\u0c6f\u0ce6\u0cef\u0d66\u0d6f\u0e50\u0e59\u0ed0\u0ed9\u0f20\u0f29",dnt="AZaz\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0641\u064a\u0671\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06d5\u06e5\u06e6\u0905\u0939\u093d\u093d\u0958\u0961\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09dc\u09dd\u09df\u09e1\u09f0\u09f1\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5c\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ae0\u0ae0\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c60\u0c61\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cde\u0cde\u0ce0\u0ce1\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d60\u0d61\u0e01\u0e2e\u0e30\u0e30\u0e32\u0e33\u0e40\u0e45\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4\u0f40\u0f47\u0f49\u0f69\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30a1\u30fa\u3105\u312c\u4e00\u9fa5\uac00\ud7a3",gnt="Private Use",pnt="ASSIGNED",vnt="\0\x7f\x80\xff\u0100\u017f\u0180\u024f\u0250\u02af\u02b0\u02ff\u0300\u036f\u0370\u03ff\u0400\u04ff\u0530\u058f\u0590\u05ff\u0600\u06ff\u0700\u074f\u0780\u07bf\u0900\u097f\u0980\u09ff\u0a00\u0a7f\u0a80\u0aff\u0b00\u0b7f\u0b80\u0bff\u0c00\u0c7f\u0c80\u0cff\u0d00\u0d7f\u0d80\u0dff\u0e00\u0e7f\u0e80\u0eff\u0f00\u0fff\u1000\u109f\u10a0\u10ff\u1100\u11ff\u1200\u137f\u13a0\u13ff\u1400\u167f\u1680\u169f\u16a0\u16ff\u1780\u17ff\u1800\u18af\u1e00\u1eff\u1f00\u1fff\u2000\u206f\u2070\u209f\u20a0\u20cf\u20d0\u20ff\u2100\u214f\u2150\u218f\u2190\u21ff\u2200\u22ff\u2300\u23ff\u2400\u243f\u2440\u245f\u2460\u24ff\u2500\u257f\u2580\u259f\u25a0\u25ff\u2600\u26ff\u2700\u27bf\u2800\u28ff\u2e80\u2eff\u2f00\u2fdf\u2ff0\u2fff\u3000\u303f\u3040\u309f\u30a0\u30ff\u3100\u312f\u3130\u318f\u3190\u319f\u31a0\u31bf\u3200\u32ff\u3300\u33ff\u3400\u4db5\u4e00\u9fff\ua000\ua48f\ua490\ua4cf\uac00\ud7a3\ue000\uf8ff\uf900\ufaff\ufb00\ufb4f\ufb50\ufdff\ufe20\ufe2f\ufe30\ufe4f\ufe50\ufe6f\ufe70\ufefe\ufeff\ufeff\uff00\uffef",mnt="UNASSIGNED",ynt={3:1,117:1},knt="org.eclipse.emf.ecore.xml.type.util",jnt={3:1,4:1,5:1,368:1},Ent="org.eclipse.xtext.xbase.lib",Tnt="Cannot add elements to a Range",Mnt="Cannot set elements in a Range",Snt="Cannot remove elements from a Range",Pnt="locale",Cnt="default",Int="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,WMn(),wAn(1,null,{},r),MWn.Fb=function(n){return FO(this,n)},MWn.Gb=function(){return this.gm},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return nE(tsn(this))+"@"+(nsn(this)>>>0).toString(16)},MWn.equals=function(n){return this.Fb(n)},MWn.hashCode=function(){return this.Hb()},MWn.toString=function(){return this.Ib()},wAn(290,1,{290:1,2026:1},pon),MWn.le=function(n){var t;return(t=new pon).i=4,t.c=n>1?gZ(this,n-1):this,t},MWn.me=function(){return ED(this),this.b},MWn.ne=function(){return nE(this)},MWn.oe=function(){return ED(this),this.k},MWn.pe=function(){return 0!=(4&this.i)},MWn.qe=function(){return 0!=(1&this.i)},MWn.Ib=function(){return utn(this)},MWn.i=0;var Ont,Ant=vX(RWn,"Object",1),$nt=vX(RWn,"Class",290);wAn(1998,1,KWn),vX(_Wn,"Optional",1998),wAn(1170,1998,KWn,c),MWn.Fb=function(n){return n===this},MWn.Hb=function(){return 2040732332},MWn.Ib=function(){return"Optional.absent()"},MWn.Jb=function(n){return yX(n),iy(),Ont},vX(_Wn,"Absent",1170),wAn(628,1,{},mk),vX(_Wn,"Joiner",628);var Lnt=bq(_Wn,"Predicate");wAn(582,1,{169:1,582:1,3:1,45:1},Hf),MWn.Mb=function(n){return Kon(this,n)},MWn.Lb=function(n){return Kon(this,n)},MWn.Fb=function(n){var t;return!!cL(n,582)&&(t=BB(n,582),NAn(this.a,t.a))},MWn.Hb=function(){return Fon(this.a)+306654252},MWn.Ib=function(){return wPn(this.a)},vX(_Wn,"Predicates/AndPredicate",582),wAn(408,1998,{408:1,3:1},qf),MWn.Fb=function(n){var t;return!!cL(n,408)&&(t=BB(n,408),Nfn(this.a,t.a))},MWn.Hb=function(){return 1502476572+nsn(this.a)},MWn.Ib=function(){return GWn+this.a+")"},MWn.Jb=function(n){return new qf(WQ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},vX(_Wn,"Present",408),wAn(198,1,UWn),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){bk()},vX(XWn,"UnmodifiableIterator",198),wAn(1978,198,WWn),MWn.Qb=function(){bk()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(XWn,"UnmodifiableListIterator",1978),wAn(386,1978,WWn),MWn.Ob=function(){return this.c<this.d},MWn.Sb=function(){return this.c>0},MWn.Pb=function(){if(this.c>=this.d)throw Hp(new yv);return this.Xb(this.c++)},MWn.Tb=function(){return this.c},MWn.Ub=function(){if(this.c<=0)throw Hp(new yv);return this.Xb(--this.c)},MWn.Vb=function(){return this.c-1},MWn.c=0,MWn.d=0,vX(XWn,"AbstractIndexedListIterator",386),wAn(699,198,UWn),MWn.Ob=function(){return Zin(this)},MWn.Pb=function(){return P7(this)},MWn.e=1,vX(XWn,"AbstractIterator",699),wAn(1986,1,{224:1}),MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.Fb=function(n){return jsn(this,n)},MWn.Hb=function(){return nsn(this.Zb())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return gz(this)},MWn.Ib=function(){return Bbn(this.Zb())},vX(XWn,"AbstractMultimap",1986),wAn(726,1986,VWn),MWn.$b=function(){win(this)},MWn._b=function(n){return Wj(this,n)},MWn.ac=function(){return new pT(this,this.c)},MWn.ic=function(n){return this.hc()},MWn.bc=function(){return new HL(this,this.c)},MWn.jc=function(){return this.mc(this.hc())},MWn.kc=function(){return new Hm(this)},MWn.lc=function(){return qTn(this.c.vc().Nc(),new u,64,this.d)},MWn.cc=function(n){return h6(this,n)},MWn.fc=function(n){return Nhn(this,n)},MWn.gc=function(){return this.d},MWn.mc=function(n){return SQ(),new Hb(n)},MWn.nc=function(){return new Bm(this)},MWn.oc=function(){return qTn(this.c.Cc().Nc(),new a,64,this.d)},MWn.pc=function(n,t){return new W6(this,n,t,null)},MWn.d=0,vX(XWn,"AbstractMapBasedMultimap",726),wAn(1631,726,VWn),MWn.hc=function(){return new J6(this.a)},MWn.jc=function(){return SQ(),SQ(),set},MWn.cc=function(n){return BB(h6(this,n),15)},MWn.fc=function(n){return BB(Nhn(this,n),15)},MWn.Zb=function(){return OQ(this)},MWn.Fb=function(n){return jsn(this,n)},MWn.qc=function(n){return BB(h6(this,n),15)},MWn.rc=function(n){return BB(Nhn(this,n),15)},MWn.mc=function(n){return rY(BB(n,15))},MWn.pc=function(n,t){return i3(this,n,BB(t,15),null)},vX(XWn,"AbstractListMultimap",1631),wAn(732,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()||this.e.Ob()},MWn.Pb=function(){var n;return this.e.Ob()||(n=BB(this.c.Pb(),42),this.b=n.cd(),this.a=BB(n.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},MWn.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},vX(XWn,"AbstractMapBasedMultimap/Itr",732),wAn(1099,732,QWn,Bm),MWn.sc=function(n,t){return t},vX(XWn,"AbstractMapBasedMultimap/1",1099),wAn(1100,1,{},a),MWn.Kb=function(n){return BB(n,14).Nc()},vX(XWn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),wAn(1101,732,QWn,Hm),MWn.sc=function(n,t){return new vT(n,t)},vX(XWn,"AbstractMapBasedMultimap/2",1101);var Nnt=bq(YWn,"Map");wAn(1967,1,JWn),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.vc().$b()},MWn.tc=function(n){return Mmn(this,n)},MWn._b=function(n){return!!FEn(this,n,!1)},MWn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=BB(t.Pb(),42).dd(),GI(n)===GI(e)||null!=n&&Nfn(n,e))return!0;return!1},MWn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!cL(n,83))return!1;if(i=BB(n,83),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=BB(e.Pb(),42),!this.tc(t))return!1;return!0},MWn.xc=function(n){return qI(FEn(this,n,!1))},MWn.Hb=function(){return Hun(this.vc())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return new Cb(this)},MWn.zc=function(n,t){throw Hp(new tk("Put not supported on this map"))},MWn.Ac=function(n){Tcn(this,n)},MWn.Bc=function(n){return qI(FEn(this,n,!0))},MWn.gc=function(){return this.vc().gc()},MWn.Ib=function(){return nTn(this)},MWn.Cc=function(){return new Ob(this)},vX(YWn,"AbstractMap",1967),wAn(1987,1967,JWn),MWn.bc=function(){return new ST(this)},MWn.vc=function(){return dz(this)},MWn.ec=function(){return this.g||(this.g=this.bc())},MWn.Cc=function(){return this.i||(this.i=new PT(this))},vX(XWn,"Maps/ViewCachingAbstractMap",1987),wAn(389,1987,JWn,pT),MWn.xc=function(n){return ktn(this,n)},MWn.Bc=function(n){return Zsn(this,n)},MWn.$b=function(){this.d==this.e.c?this.e.$b():Cq(new Oq(this))},MWn._b=function(n){return gfn(this.d,n)},MWn.Ec=function(){return new Xf(this)},MWn.Dc=function(){return this.Ec()},MWn.Fb=function(n){return this===n||Nfn(this.d,n)},MWn.Hb=function(){return nsn(this.d)},MWn.ec=function(){return this.e.ec()},MWn.gc=function(){return this.d.gc()},MWn.Ib=function(){return Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/AsMap",389);var xnt=bq(RWn,"Iterable");wAn(28,1,ZWn),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){throw Hp(new tk("Add not supported on this collection"))},MWn.Gc=function(n){return Frn(this,n)},MWn.$b=function(){TV(this)},MWn.Hc=function(n){return ywn(this,n,!1)},MWn.Ic=function(n){return oun(this,n)},MWn.dc=function(){return 0==this.gc()},MWn.Mc=function(n){return ywn(this,n,!0)},MWn.Pc=function(){return cz(this)},MWn.Qc=function(n){return Emn(this,n)},MWn.Ib=function(){return LMn(this)},vX(YWn,"AbstractCollection",28);var Dnt=bq(YWn,"Set");wAn(nVn,28,tVn),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return ign(this,n)},MWn.Hb=function(){return Hun(this)},vX(YWn,"AbstractSet",nVn),wAn(1970,nVn,tVn),vX(XWn,"Sets/ImprovedAbstractSet",1970),wAn(1971,1970,tVn),MWn.$b=function(){this.Rc().$b()},MWn.Hc=function(n){return idn(this,n)},MWn.dc=function(){return this.Rc().dc()},MWn.Mc=function(n){var t;return!!this.Hc(n)&&(t=BB(n,42),this.Rc().ec().Mc(t.cd()))},MWn.gc=function(){return this.Rc().gc()},vX(XWn,"Maps/EntrySet",1971),wAn(1097,1971,tVn,Xf),MWn.Hc=function(n){return wfn(this.a.d.vc(),n)},MWn.Kc=function(){return new Oq(this.a)},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!wfn(this.a.d.vc(),n)&&(t=BB(n,42),H5(this.a.e,t.cd()),!0)},MWn.Nc=function(){return RB(this.a.d.vc().Nc(),new Wf(this.a))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),wAn(1098,1,{},Wf),MWn.Kb=function(n){return i5(this.a,BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),wAn(730,1,QWn,Oq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){var n;return n=BB(this.b.Pb(),42),this.a=BB(n.dd(),14),i5(this.c,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Qb=function(){han(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),wAn(532,1970,tVn,ST),MWn.$b=function(){this.b.$b()},MWn.Hc=function(n){return this.b._b(n)},MWn.Jc=function(n){yX(n),this.b.wc(new vl(n))},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new ly(this.b.vc().Kc())},MWn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},MWn.gc=function(){return this.b.gc()},vX(XWn,"Maps/KeySet",532),wAn(318,532,tVn,HL),MWn.$b=function(){Cq(new eT(this,this.b.vc().Kc()))},MWn.Ic=function(n){return this.b.ec().Ic(n)},MWn.Fb=function(n){return this===n||Nfn(this.b.ec(),n)},MWn.Hb=function(){return nsn(this.b.ec())},MWn.Kc=function(){return new eT(this,this.b.vc().Kc())},MWn.Mc=function(n){var t,e;return e=0,(t=BB(this.b.Bc(n),14))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/KeySet",318),wAn(731,1,QWn,eT),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()},MWn.Pb=function(){return this.a=BB(this.c.Pb(),42),this.a.cd()},MWn.Qb=function(){var n;han(!!this.a),n=BB(this.a.dd(),14),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/KeySet/1",731),wAn(491,389,{83:1,161:1},CD),MWn.bc=function(){return this.Sc()},MWn.ec=function(){return this.Tc()},MWn.Sc=function(){return new nT(this.c,this.Uc())},MWn.Tc=function(){return this.b||(this.b=this.Sc())},MWn.Uc=function(){return BB(this.d,161)},vX(XWn,"AbstractMapBasedMultimap/SortedAsMap",491),wAn(542,491,eVn,ID),MWn.bc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.Sc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.ec=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Tc=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Uc=function(){return BB(BB(this.d,161),171)},vX(XWn,"AbstractMapBasedMultimap/NavigableAsMap",542),wAn(490,318,iVn,nT),MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/SortedKeySet",490),wAn(388,490,rVn,tT),vX(XWn,"AbstractMapBasedMultimap/NavigableKeySet",388),wAn(541,28,ZWn,W6),MWn.Fc=function(n){var t,e;return zbn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&jR(this)),t},MWn.Gc=function(n){var t,e,i;return!n.dc()&&(zbn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&jR(this)),t)},MWn.$b=function(){var n;zbn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,$G(this))},MWn.Hc=function(n){return zbn(this),this.d.Hc(n)},MWn.Ic=function(n){return zbn(this),this.d.Ic(n)},MWn.Fb=function(n){return n===this||(zbn(this),Nfn(this.d,n))},MWn.Hb=function(){return zbn(this),nsn(this.d)},MWn.Kc=function(){return zbn(this),new QB(this)},MWn.Mc=function(n){var t;return zbn(this),(t=this.d.Mc(n))&&(--this.f.d,$G(this)),t},MWn.gc=function(){return tO(this)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Ib=function(){return zbn(this),Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection",541);var Rnt=bq(YWn,"List");wAn(728,541,{20:1,28:1,14:1,15:1},sz),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Vc=function(n,t){var e;zbn(this),e=this.d.dc(),BB(this.d,15).Vc(n,t),++this.a.d,e&&jR(this)},MWn.Wc=function(n,t){var e,i,r;return!t.dc()&&(zbn(this),r=this.d.gc(),(e=BB(this.d,15).Wc(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&jR(this)),e)},MWn.Xb=function(n){return zbn(this),BB(this.d,15).Xb(n)},MWn.Xc=function(n){return zbn(this),BB(this.d,15).Xc(n)},MWn.Yc=function(){return zbn(this),new g$(this)},MWn.Zc=function(n){return zbn(this),new gQ(this,n)},MWn.$c=function(n){var t;return zbn(this),t=BB(this.d,15).$c(n),--this.a.d,$G(this),t},MWn._c=function(n,t){return zbn(this),BB(this.d,15)._c(n,t)},MWn.bd=function(n,t){return zbn(this),i3(this.a,this.e,BB(this.d,15).bd(n,t),this.b?this.b:this)},vX(XWn,"AbstractMapBasedMultimap/WrappedList",728),wAn(1096,728,{20:1,28:1,14:1,15:1,54:1},Ox),vX(XWn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),wAn(620,1,QWn,QB),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return MV(this),this.b.Ob()},MWn.Pb=function(){return MV(this),this.b.Pb()},MWn.Qb=function(){eN(this)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),wAn(729,620,cVn,g$,gQ),MWn.Qb=function(){eN(this)},MWn.Rb=function(n){var t;t=0==tO(this.a),(MV(this),BB(this.b,125)).Rb(n),++this.a.a.d,t&&jR(this.a)},MWn.Sb=function(){return(MV(this),BB(this.b,125)).Sb()},MWn.Tb=function(){return(MV(this),BB(this.b,125)).Tb()},MWn.Ub=function(){return(MV(this),BB(this.b,125)).Ub()},MWn.Vb=function(){return(MV(this),BB(this.b,125)).Vb()},MWn.Wb=function(n){(MV(this),BB(this.b,125)).Wb(n)},vX(XWn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),wAn(727,541,iVn,ND),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSortedSet",727),wAn(1095,727,rVn,AA),vX(XWn,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),wAn(1094,541,tVn,xD),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSet",1094),wAn(1103,1,{},u),MWn.Kb=function(n){return F6(BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/lambda$1$Type",1103),wAn(1102,1,{},Vf),MWn.Kb=function(n){return new vT(this.a,n)},vX(XWn,"AbstractMapBasedMultimap/lambda$2$Type",1102);var Knt,_nt,Fnt,Bnt,Hnt=bq(YWn,"Map/Entry");wAn(345,1,aVn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),wW(this.cd(),t.cd())&&wW(this.dd(),t.dd()))},MWn.Hb=function(){var n,t;return n=this.cd(),t=this.dd(),(null==n?0:nsn(n))^(null==t?0:nsn(t))},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(XWn,uVn,345),wAn(1988,28,ZWn),MWn.$b=function(){this.fd().$b()},MWn.Hc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),H0(this.fd(),t.cd(),t.dd()))},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),q0(this.fd(),t.cd(),t.dd()))},MWn.gc=function(){return this.fd().d},vX(XWn,"Multimaps/Entries",1988),wAn(733,1988,ZWn,Qf),MWn.Kc=function(){return this.a.kc()},MWn.fd=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"AbstractMultimap/Entries",733),wAn(734,733,tVn,qm),MWn.Nc=function(){return this.a.lc()},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"AbstractMultimap/EntrySet",734),wAn(735,28,ZWn,Yf),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return Isn(this.a,n)},MWn.Kc=function(){return this.a.nc()},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return this.a.oc()},vX(XWn,"AbstractMultimap/Values",735),wAn(1989,28,{835:1,20:1,28:1,14:1}),MWn.Jc=function(n){yX(n),EV(this).Jc(new pl(n))},MWn.Nc=function(){var n;return qTn(n=EV(this).Nc(),new y,64|1296&n.qd(),this.a.d)},MWn.Fc=function(n){return wk(),!0},MWn.Gc=function(n){return yX(this),yX(n),cL(n,543)?l2(BB(n,835)):!n.dc()&&fnn(this,n.Kc())},MWn.Hc=function(n){var t;return((t=BB(lfn(OQ(this.a),n),14))?t.gc():0)>0},MWn.Fb=function(n){return h$n(this,n)},MWn.Hb=function(){return nsn(EV(this))},MWn.dc=function(){return EV(this).dc()},MWn.Mc=function(n){return EIn(this,n,1)>0},MWn.Ib=function(){return Bbn(EV(this))},vX(XWn,"AbstractMultiset",1989),wAn(1991,1970,tVn),MWn.$b=function(){win(this.a.a)},MWn.Hc=function(n){var t;return!(!cL(n,492)||(t=BB(n,416),BB(t.a.dd(),14).gc()<=0||c1(this.a,t.a.cd())!=BB(t.a.dd(),14).gc()))},MWn.Mc=function(n){var t,e,i;return!(!cL(n,492)||(t=(e=BB(n,416)).a.cd(),0==(i=BB(e.a.dd(),14).gc())))&&TIn(this.a,t,i)},vX(XWn,"Multisets/EntrySet",1991),wAn(1109,1991,tVn,Jf),MWn.Kc=function(){return new wy(dz(OQ(this.a.a)).Kc())},MWn.gc=function(){return OQ(this.a.a).gc()},vX(XWn,"AbstractMultiset/EntrySet",1109),wAn(619,726,VWn),MWn.hc=function(){return this.gd()},MWn.jc=function(){return this.hd()},MWn.cc=function(n){return this.jd(n)},MWn.fc=function(n){return this.kd(n)},MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.hd=function(){return SQ(),SQ(),fet},MWn.Fb=function(n){return jsn(this,n)},MWn.jd=function(n){return BB(h6(this,n),21)},MWn.kd=function(n){return BB(Nhn(this,n),21)},MWn.mc=function(n){return SQ(),new Ak(BB(n,21))},MWn.pc=function(n,t){return new xD(this,n,BB(t,21))},vX(XWn,"AbstractSetMultimap",619),wAn(1657,619,VWn),MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.jc=function(){return IX(new dE(this.b))},MWn.hd=function(){return IX(new dE(this.b))},MWn.cc=function(n){return BB(BB(h6(this,n),21),84)},MWn.jd=function(n){return BB(BB(h6(this,n),21),84)},MWn.fc=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.kd=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.mc=function(n){return cL(n,271)?IX(BB(n,271)):(SQ(),new dN(BB(n,84)))},MWn.Zb=function(){return this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c))},MWn.pc=function(n,t){return cL(t,271)?new AA(this,n,BB(t,271)):new ND(this,n,BB(t,84))},vX(XWn,"AbstractSortedSetMultimap",1657),wAn(1658,1657,VWn),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.bc=function(){return cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)},vX(XWn,"AbstractSortedKeySortedSetMultimap",1658),wAn(2010,1,{1947:1}),MWn.Fb=function(n){return Cjn(this,n)},MWn.Hb=function(){return Hun(this.g||(this.g=new Zf(this)))},MWn.Ib=function(){return nTn(this.f||(this.f=new UL(this)))},vX(XWn,"AbstractTable",2010),wAn(665,nVn,tVn,Zf),MWn.$b=function(){dk()},MWn.Hc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WI(t.c.e,t.b)),83))&&wfn(e.vc(),new vT(WI(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.Kc=function(){return ZQ(this.a)},MWn.Mc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WI(t.c.e,t.b)),83))&&dfn(e.vc(),new vT(WI(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return P2(this.a)},vX(XWn,"AbstractTable/CellSet",665),wAn(1928,28,ZWn,nl),MWn.$b=function(){dk()},MWn.Hc=function(n){return hTn(this.a,n)},MWn.Kc=function(){return nY(this.a)},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return Y0(this.a)},vX(XWn,"AbstractTable/Values",1928),wAn(1632,1631,VWn),vX(XWn,"ArrayListMultimapGwtSerializationDependencies",1632),wAn(513,1632,VWn,ok,o1),MWn.hc=function(){return new J6(this.a)},MWn.a=0,vX(XWn,"ArrayListMultimap",513),wAn(664,2010,{664:1,1947:1,3:1},vOn),vX(XWn,"ArrayTable",664),wAn(1924,386,WWn,qL),MWn.Xb=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1",1924),wAn(1925,1,{},Gf),MWn.ld=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1methodref$getCell$Type",1925),wAn(2011,1,{682:1}),MWn.Fb=function(n){var t;return n===this||!!cL(n,468)&&(t=BB(n,682),wW(WI(this.c.e,this.b),WI(t.c.e,t.b))&&wW(WI(this.c.c,this.a),WI(t.c.c,t.a))&&wW(U6(this.c,this.b,this.a),U6(t.c,t.b,t.a)))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[WI(this.c.e,this.b),WI(this.c.c,this.a),U6(this.c,this.b,this.a)]))},MWn.Ib=function(){return"("+WI(this.c.e,this.b)+","+WI(this.c.c,this.a)+")="+U6(this.c,this.b,this.a)},vX(XWn,"Tables/AbstractCell",2011),wAn(468,2011,{468:1,682:1},gon),MWn.a=0,MWn.b=0,MWn.d=0,vX(XWn,"ArrayTable/2",468),wAn(1927,1,{},zf),MWn.ld=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/2methodref$getValue$Type",1927),wAn(1926,386,WWn,GL),MWn.Xb=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/3",1926),wAn(1979,1967,JWn),MWn.$b=function(){Cq(this.kc())},MWn.vc=function(){return new ml(this)},MWn.lc=function(){return new CV(this.kc(),this.gc())},vX(XWn,"Maps/IteratorBasedAbstractMap",1979),wAn(828,1979,JWn),MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return Yj(this.c,n)},MWn.kc=function(){return new zL(this,this.c.b.c.gc())},MWn.lc=function(){return yq(this.c.b.c.gc(),16,new Uf(this))},MWn.xc=function(n){var t;return(t=BB(UK(this.c,n),19))?this.nd(t.a):null},MWn.dc=function(){return this.c.b.c.dc()},MWn.ec=function(){return bz(this.c)},MWn.zc=function(n,t){var e;if(!(e=BB(UK(this.c,n),19)))throw Hp(new _y(this.md()+" "+n+" not in "+bz(this.c)));return this.od(e.a,t)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.b.c.gc()},vX(XWn,"ArrayTable/ArrayMap",828),wAn(1923,1,{},Uf),MWn.ld=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),wAn(1921,345,aVn,sT),MWn.cd=function(){return YL(this.a,this.b)},MWn.dd=function(){return this.a.nd(this.b)},MWn.ed=function(n){return this.a.od(this.b,n)},MWn.b=0,vX(XWn,"ArrayTable/ArrayMap/1",1921),wAn(1922,386,WWn,zL),MWn.Xb=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/2",1922),wAn(1920,828,JWn,cU),MWn.md=function(){return"Column"},MWn.nd=function(n){return U6(this.b,this.a,n)},MWn.od=function(n,t){return Sun(this.b,this.a,n,t)},MWn.a=0,vX(XWn,"ArrayTable/Row",1920),wAn(829,828,JWn,UL),MWn.nd=function(n){return new cU(this.a,n)},MWn.zc=function(n,t){return BB(t,83),gk()},MWn.od=function(n,t){return BB(t,83),pk()},MWn.md=function(){return"Row"},vX(XWn,"ArrayTable/RowMap",829),wAn(1120,1,fVn,hT),MWn.qd=function(){return-262&this.a.qd()},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.Nb(new cT(n,this.b))},MWn.sd=function(n){return this.a.sd(new rT(n,this.b))},vX(XWn,"CollectSpliterators/1",1120),wAn(1121,1,lVn,rT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$0$Type",1121),wAn(1122,1,lVn,cT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$1$Type",1122),wAn(1123,1,fVn,q2),MWn.qd=function(){return this.a},MWn.rd=function(){return this.d&&(this.b=T$(this.b,this.d.rd())),T$(this.b,0)},MWn.Nb=function(n){this.d&&(this.d.Nb(n),this.d=null),this.c.Nb(new iT(this.e,n)),this.b=0},MWn.sd=function(n){for(;;){if(this.d&&this.d.sd(n))return JI(this.b,bVn)&&(this.b=ibn(this.b,1)),!0;if(this.d=null,!this.c.sd(new aT(this,this.e)))return!1}},MWn.a=0,MWn.b=0,vX(XWn,"CollectSpliterators/1FlatMapSpliterator",1123),wAn(1124,1,lVn,aT),MWn.td=function(n){dK(this.a,this.b,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),wAn(1125,1,lVn,iT),MWn.td=function(n){oL(this.b,this.a,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),wAn(1117,1,fVn,wK),MWn.qd=function(){return 16464|this.b},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.xe(new oT(n,this.c))},MWn.sd=function(n){return this.a.ye(new uT(n,this.c))},MWn.b=0,vX(XWn,"CollectSpliterators/1WithCharacteristics",1117),wAn(1118,1,wVn,uT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),wAn(1119,1,wVn,oT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),wAn(245,1,dVn),MWn.wd=function(n){return this.vd(BB(n,245))},MWn.vd=function(n){var t;return n==(ty(),_nt)?1:n==(ey(),Knt)?-1:(nq(),0!=(t=Ncn(this.a,n.a))?t:cL(this,519)==cL(n,519)?0:cL(this,519)?1:-1)},MWn.zd=function(){return this.a},MWn.Fb=function(n){return xdn(this,n)},vX(XWn,"Cut",245),wAn(1761,245,dVn,Nk),MWn.vd=function(n){return n==this?0:1},MWn.xd=function(n){throw Hp(new hv)},MWn.yd=function(n){n.a+="+\u221e)"},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!1},MWn.Ib=function(){return"+\u221e"},vX(XWn,"Cut/AboveAll",1761),wAn(519,245,{245:1,519:1,3:1,35:1},iN),MWn.xd=function(n){uO((n.a+="(",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),93)},MWn.Hb=function(){return~nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<0},MWn.Ib=function(){return"/"+this.a+"\\"},vX(XWn,"Cut/AboveValue",519),wAn(1760,245,dVn,xk),MWn.vd=function(n){return n==this?0:-1},MWn.xd=function(n){n.a+="(-\u221e"},MWn.yd=function(n){throw Hp(new hv)},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!0},MWn.Ib=function(){return"-\u221e"},vX(XWn,"Cut/BelowAll",1760),wAn(1762,245,dVn,rN),MWn.xd=function(n){uO((n.a+="[",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),41)},MWn.Hb=function(){return nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<=0},MWn.Ib=function(){return"\\"+this.a+"/"},vX(XWn,"Cut/BelowValue",1762),wAn(537,1,pVn),MWn.Jc=function(n){e5(this,n)},MWn.Ib=function(){return Hln(BB(WQ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},vX(XWn,"FluentIterable",537),wAn(433,537,pVn,OO),MWn.Kc=function(){return new oz(ZL(this.a.Kc(),new h))},vX(XWn,"FluentIterable/2",433),wAn(1046,537,pVn,AO),MWn.Kc=function(){return NU(this)},vX(XWn,"FluentIterable/3",1046),wAn(708,386,WWn,WL),MWn.Xb=function(n){return this.a[n].Kc()},vX(XWn,"FluentIterable/3/1",708),wAn(1972,1,{}),MWn.Ib=function(){return Bbn(this.Bd().b)},vX(XWn,"ForwardingObject",1972),wAn(1973,1972,vVn),MWn.Bd=function(){return this.Cd()},MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return this.Cd(),oE()},MWn.Gc=function(n){return this.Cd(),sE()},MWn.$b=function(){this.Cd(),hE()},MWn.Hc=function(n){return this.Cd().Hc(n)},MWn.Ic=function(n){return this.Cd().Ic(n)},MWn.dc=function(){return this.Cd().b.dc()},MWn.Kc=function(){return this.Cd().Kc()},MWn.Mc=function(n){return this.Cd(),fE()},MWn.gc=function(){return this.Cd().b.gc()},MWn.Pc=function(){return this.Cd().Pc()},MWn.Qc=function(n){return this.Cd().Qc(n)},vX(XWn,"ForwardingCollection",1973),wAn(1980,28,mVn),MWn.Kc=function(){return this.Ed()},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Hc=function(n){return null!=n&&ywn(this,n,!1)},MWn.Dd=function(){switch(this.gc()){case 0:return WX(),WX(),Fnt;case 1:return WX(),new Pq(yX(this.Ed().Pb()));default:return new aU(this,this.Pc())}},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"ImmutableCollection",1980),wAn(712,1980,mVn,rv),MWn.Kc=function(){return L9(this.a.Kc())},MWn.Hc=function(n){return null!=n&&this.a.Hc(n)},MWn.Ic=function(n){return this.a.Ic(n)},MWn.dc=function(){return this.a.dc()},MWn.Ed=function(){return L9(this.a.Kc())},MWn.gc=function(){return this.a.gc()},MWn.Pc=function(){return this.a.Pc()},MWn.Qc=function(n){return this.a.Qc(n)},MWn.Ib=function(){return Bbn(this.a)},vX(XWn,"ForwardingImmutableCollection",712),wAn(152,1980,yVn),MWn.Kc=function(){return this.Ed()},MWn.Yc=function(){return this.Fd(0)},MWn.Zc=function(n){return this.Fd(n)},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.bd=function(n,t){return this.Gd(n,t)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return qAn(this,n)},MWn.Hb=function(){return Ian(this)},MWn.Xc=function(n){return null==n?-1:Tmn(this,n)},MWn.Ed=function(){return this.Fd(0)},MWn.Fd=function(n){return ix(this,n)},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.Gd=function(n,t){return sfn(new s1(new IT(this),n,t))},vX(XWn,"ImmutableList",152),wAn(2006,152,yVn),MWn.Kc=function(){return L9(this.Hd().Kc())},MWn.bd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Hc=function(n){return null!=n&&this.Hd().Hc(n)},MWn.Ic=function(n){return this.Hd().Ic(n)},MWn.Fb=function(n){return Nfn(this.Hd(),n)},MWn.Xb=function(n){return WI(this,n)},MWn.Hb=function(){return nsn(this.Hd())},MWn.Xc=function(n){return this.Hd().Xc(n)},MWn.dc=function(){return this.Hd().dc()},MWn.Ed=function(){return L9(this.Hd().Kc())},MWn.gc=function(){return this.Hd().gc()},MWn.Gd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Pc=function(){return this.Hd().Qc(x8(Ant,HWn,1,this.Hd().gc(),5,1))},MWn.Qc=function(n){return this.Hd().Qc(n)},MWn.Ib=function(){return Bbn(this.Hd())},vX(XWn,"ForwardingImmutableList",2006),wAn(714,1,jVn),MWn.vc=function(){return lz(this)},MWn.wc=function(n){nan(this,n)},MWn.ec=function(){return bz(this)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.Cc=function(){return this.Ld()},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return null!=this.xc(n)},MWn.uc=function(n){return this.Ld().Hc(n)},MWn.Jd=function(){return new cv(this)},MWn.Kd=function(){return new av(this)},MWn.Fb=function(n){return $sn(this,n)},MWn.Hb=function(){return lz(this).Hb()},MWn.dc=function(){return 0==this.gc()},MWn.zc=function(n,t){return vk()},MWn.Bc=function(n){throw Hp(new pv)},MWn.Ib=function(){return fSn(this)},MWn.Ld=function(){return this.e?this.e:this.e=this.Kd()},MWn.c=null,MWn.d=null,MWn.e=null,vX(XWn,"ImmutableMap",714),wAn(715,714,jVn),MWn._b=function(n){return Yj(this,n)},MWn.uc=function(n){return _T(this.b,n)},MWn.Id=function(){return hfn(new el(this))},MWn.Jd=function(){return hfn(iV(this.b))},MWn.Kd=function(){return s_(),new rv(tV(this.b))},MWn.Fb=function(n){return BT(this.b,n)},MWn.xc=function(n){return UK(this,n)},MWn.Hb=function(){return nsn(this.b.c)},MWn.dc=function(){return this.b.c.dc()},MWn.gc=function(){return this.b.c.gc()},MWn.Ib=function(){return Bbn(this.b.c)},vX(XWn,"ForwardingImmutableMap",715),wAn(1974,1973,EVn),MWn.Bd=function(){return this.Md()},MWn.Cd=function(){return this.Md()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return n===this||this.Md().Fb(n)},MWn.Hb=function(){return this.Md().Hb()},vX(XWn,"ForwardingSet",1974),wAn(1069,1974,EVn,el),MWn.Bd=function(){return eV(this.a.b)},MWn.Cd=function(){return eV(this.a.b)},MWn.Hc=function(n){if(cL(n,42)&&null==BB(n,42).cd())return!1;try{return KT(eV(this.a.b),n)}catch(t){if(cL(t=lun(t),205))return!1;throw Hp(t)}},MWn.Md=function(){return eV(this.a.b)},MWn.Qc=function(n){var t;return t=IY(eV(this.a.b),n),eV(this.a.b).b.gc()<t.length&&$X(t,eV(this.a.b).b.gc(),null),t},vX(XWn,"ForwardingImmutableMap/1",1069),wAn(1981,1980,TVn),MWn.Kc=function(){return this.Ed()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"ImmutableSet",1981),wAn(703,1981,TVn),MWn.Kc=function(){return L9(new qb(this.a.b.Kc()))},MWn.Hc=function(n){return null!=n&&xT(this.a,n)},MWn.Ic=function(n){return DT(this.a,n)},MWn.Hb=function(){return nsn(this.a.b)},MWn.dc=function(){return this.a.b.dc()},MWn.Ed=function(){return L9(new qb(this.a.b.Kc()))},MWn.gc=function(){return this.a.b.gc()},MWn.Pc=function(){return this.a.b.Pc()},MWn.Qc=function(n){return RT(this.a,n)},MWn.Ib=function(){return Bbn(this.a.b)},vX(XWn,"ForwardingImmutableSet",703),wAn(1975,1974,MVn),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Nc=function(){return new wS(this)},vX(XWn,"ForwardingSortedSet",1975),wAn(533,1979,jVn,Avn),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new p$(this.d||(this.d=new il(this)))},MWn.$b=function(){d5(this)},MWn._b=function(n){return!!Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))},MWn.uc=function(n){return Ltn(this,n)},MWn.kc=function(){return new VL(this,this)},MWn.wc=function(n){BJ(this,n)},MWn.xc=function(n){return sen(this,n)},MWn.ec=function(){return new v$(this)},MWn.zc=function(n,t){return wKn(this,n,t)},MWn.Bc=function(n){var t;return(t=Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this,t),t.e=null,t.c=null,t.i):null},MWn.gc=function(){return this.i},MWn.pd=function(){return new p$(this.d||(this.d=new il(this)))},MWn.f=0,MWn.g=0,MWn.i=0,vX(XWn,"HashBiMap",533),wAn(534,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return l3(this)},MWn.Pb=function(){var n;if(!l3(this))throw Hp(new yv);return n=this.c,this.c=n.c,this.f=n,--this.d,this.Nd(n)},MWn.Qb=function(){if(this.e.g!=this.b)throw Hp(new vv);han(!!this.f),LLn(this.e,this.f),this.b=this.e.g,this.f=null},MWn.b=0,MWn.d=0,MWn.f=null,vX(XWn,"HashBiMap/Itr",534),wAn(1011,534,QWn,VL),MWn.Nd=function(n){return new bT(this,n)},vX(XWn,"HashBiMap/1",1011),wAn(1012,345,aVn,bT),MWn.cd=function(){return this.a.g},MWn.dd=function(){return this.a.i},MWn.ed=function(n){var t,e,i;return e=this.a.i,(i=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.f&&(GI(n)===GI(e)||null!=n&&Nfn(n,e))?n:(yun(!Zrn(this.b.a,n,i),n),LLn(this.b.a,this.a),t=new qW(this.a.g,this.a.a,n,i),YCn(this.b.a,t,this.a),this.a.e=null,this.a.c=null,this.b.b=this.b.a.g,this.b.f==this.a&&(this.b.f=t),this.a=t,e)},vX(XWn,"HashBiMap/1/MapEntry",1012),wAn(238,345,{345:1,238:1,3:1,42:1},vT),MWn.cd=function(){return this.g},MWn.dd=function(){return this.i},MWn.ed=function(n){throw Hp(new pv)},vX(XWn,"ImmutableEntry",238),wAn(317,238,{345:1,317:1,238:1,3:1,42:1},qW),MWn.a=0,MWn.f=0;var qnt,Gnt=vX(XWn,"HashBiMap/BiEntry",317);wAn(610,1979,jVn,il),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new v$(this.a)},MWn.$b=function(){d5(this.a)},MWn._b=function(n){return Ltn(this.a,n)},MWn.kc=function(){return new QL(this,this.a)},MWn.wc=function(n){yX(n),BJ(this.a,new rl(n))},MWn.xc=function(n){return Uin(this,n)},MWn.ec=function(){return new p$(this)},MWn.zc=function(n,t){return C_n(this.a,n,t,!1)},MWn.Bc=function(n){var t;return(t=Zrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this.a,t),t.e=null,t.c=null,t.g):null},MWn.gc=function(){return this.a.i},MWn.pd=function(){return new v$(this.a)},vX(XWn,"HashBiMap/Inverse",610),wAn(1008,534,QWn,QL),MWn.Nd=function(n){return new wT(this,n)},vX(XWn,"HashBiMap/Inverse/1",1008),wAn(1009,345,aVn,wT),MWn.cd=function(){return this.a.i},MWn.dd=function(){return this.a.g},MWn.ed=function(n){var t,e,i;return i=this.a.g,(t=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.a&&(GI(n)===GI(i)||null!=n&&Nfn(n,i))?n:(yun(!Jrn(this.b.a.a,n,t),n),LLn(this.b.a.a,this.a),e=new qW(n,t,this.a.i,this.a.f),this.a=e,YCn(this.b.a.a,e,null),this.b.b=this.b.a.a.g,i)},vX(XWn,"HashBiMap/Inverse/1/InverseEntry",1009),wAn(611,532,tVn,p$),MWn.Kc=function(){return new uy(this.a.a)},MWn.Mc=function(n){var t;return!!(t=Zrn(this.a.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a.a,t),!0)},vX(XWn,"HashBiMap/Inverse/InverseKeySet",611),wAn(1007,534,QWn,uy),MWn.Nd=function(n){return n.i},vX(XWn,"HashBiMap/Inverse/InverseKeySet/1",1007),wAn(1010,1,{},rl),MWn.Od=function(n,t){ev(this.a,n,t)},vX(XWn,"HashBiMap/Inverse/lambda$0$Type",1010),wAn(609,532,tVn,v$),MWn.Kc=function(){return new oy(this.a)},MWn.Mc=function(n){var t;return!!(t=Jrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a,t),t.e=null,t.c=null,!0)},vX(XWn,"HashBiMap/KeySet",609),wAn(1006,534,QWn,oy),MWn.Nd=function(n){return n.g},vX(XWn,"HashBiMap/KeySet/1",1006),wAn(1093,619,VWn),vX(XWn,"HashMultimapGwtSerializationDependencies",1093),wAn(265,1093,VWn,pJ),MWn.hc=function(){return new bE(etn(this.a))},MWn.gd=function(){return new bE(etn(this.a))},MWn.a=2,vX(XWn,"HashMultimap",265),wAn(1999,152,yVn),MWn.Hc=function(n){return this.Pd().Hc(n)},MWn.dc=function(){return this.Pd().dc()},MWn.gc=function(){return this.Pd().gc()},vX(XWn,"ImmutableAsList",1999),wAn(1931,715,jVn),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"ImmutableBiMap",1931),wAn(1977,1,{}),vX(XWn,"ImmutableCollection/Builder",1977),wAn(1022,703,TVn,sy),vX(XWn,"ImmutableEnumSet",1022),wAn(969,386,WWn,bK),MWn.Xb=function(n){return this.a.Xb(n)},vX(XWn,"ImmutableList/1",969),wAn(968,1977,{},sR),vX(XWn,"ImmutableList/Builder",968),wAn(614,198,UWn,cl),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},vX(XWn,"ImmutableMap/1",614),wAn(1041,1,{},o),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"ImmutableMap/2methodref$getKey$Type",1041),wAn(1040,1,{},hR),vX(XWn,"ImmutableMap/Builder",1040),wAn(2e3,1981,TVn),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Dd=function(){return new uv(this)},MWn.Jc=function(n){var t,e;for(yX(n),e=this.gc(),t=0;t<e;t++)n.td(BB(wz(lz(this.a)).Xb(t),42).cd())},MWn.Ed=function(){var n;return(n=this.c,n||(this.c=new uv(this))).Ed()},MWn.Nc=function(){return yq(this.gc(),1296,new ul(this))},vX(XWn,"IndexedImmutableSet",2e3),wAn(1180,2e3,TVn,cv),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Hc=function(n){return this.a._b(n)},MWn.Jc=function(n){yX(n),nan(this.a,new al(n))},MWn.Ed=function(){return new cl(lz(this.a).Ed())},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new o)},vX(XWn,"ImmutableMapKeySet",1180),wAn(1181,1,{},al),MWn.Od=function(n,t){s_(),this.a.td(n)},vX(XWn,"ImmutableMapKeySet/lambda$0$Type",1181),wAn(1178,1980,mVn,av),MWn.Kc=function(){return new KH(this)},MWn.Hc=function(n){return null!=n&&Pjn(new KH(this),n)},MWn.Ed=function(){return new KH(this)},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new s)},vX(XWn,"ImmutableMapValues",1178),wAn(1179,1,{},s),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"ImmutableMapValues/0methodref$getValue$Type",1179),wAn(626,198,UWn,KH),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},vX(XWn,"ImmutableMapValues/1",626),wAn(1182,1,{},ul),MWn.ld=function(n){return HU(this.a,n)},vX(XWn,"IndexedImmutableSet/0methodref$get$Type",1182),wAn(752,1999,yVn,uv),MWn.Pd=function(){return this.a},MWn.Xb=function(n){return HU(this.a,n)},MWn.gc=function(){return this.a.a.gc()},vX(XWn,"IndexedImmutableSet/1",752),wAn(44,1,{},h),MWn.Kb=function(n){return BB(n,20).Kc()},MWn.Fb=function(n){return this===n},vX(XWn,"Iterables/10",44),wAn(1042,537,pVn,_H),MWn.Jc=function(n){yX(n),this.b.Jc(new dT(this.a,n))},MWn.Kc=function(){return qA(this)},vX(XWn,"Iterables/4",1042),wAn(1043,1,lVn,dT),MWn.td=function(n){TS(this.b,this.a,n)},vX(XWn,"Iterables/4/lambda$0$Type",1043),wAn(1044,537,pVn,FH),MWn.Jc=function(n){yX(n),e5(this.a,new fT(n,this.b))},MWn.Kc=function(){return ZL(new AL(this.a),this.b)},vX(XWn,"Iterables/5",1044),wAn(1045,1,lVn,fT),MWn.td=function(n){this.a.td(yA(n))},vX(XWn,"Iterables/5/lambda$0$Type",1045),wAn(1071,198,UWn,ol),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return this.a.Pb()},vX(XWn,"Iterators/1",1071),wAn(1072,699,UWn,lT),MWn.Yb=function(){for(var n;this.b.Ob();)if(n=this.b.Pb(),this.a.Lb(n))return n;return this.e=2,null},vX(XWn,"Iterators/5",1072),wAn(487,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.Qd(this.b.Pb())},MWn.Qb=function(){this.b.Qb()},vX(XWn,"TransformedIterator",487),wAn(1073,487,QWn,nN),MWn.Qd=function(n){return this.a.Kb(n)},vX(XWn,"Iterators/6",1073),wAn(717,198,UWn,sl),MWn.Ob=function(){return!this.a},MWn.Pb=function(){if(this.a)throw Hp(new yv);return this.a=!0,this.b},MWn.a=!1,vX(XWn,"Iterators/9",717),wAn(1070,386,WWn,fG),MWn.Xb=function(n){return this.a[this.b+n]},MWn.b=0,vX(XWn,"Iterators/ArrayItr",1070),wAn(39,1,{39:1,47:1},oz),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return dAn(this)},MWn.Pb=function(){return U5(this)},MWn.Qb=function(){han(!!this.c),this.c.Qb(),this.c=null},vX(XWn,"Iterators/ConcatenatedIterator",39),wAn(22,1,{3:1,35:1,22:1}),MWn.wd=function(n){return Py(this,BB(n,22))},MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return dx(this)},MWn.g=0;var znt,Unt=vX(RWn,"Enum",22);wAn(538,22,{538:1,3:1,35:1,22:1,47:1},cN),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Qb=function(){han(!1)};var Xnt,Wnt=Ben(XWn,"Iterators/EmptyModifiableIterator",538,Unt,oX,rx);wAn(1834,619,VWn),vX(XWn,"LinkedHashMultimapGwtSerializationDependencies",1834),wAn(1835,1834,VWn,Thn),MWn.hc=function(){return new LN(etn(this.b))},MWn.$b=function(){win(this),iv(this.a,this.a)},MWn.gd=function(){return new LN(etn(this.b))},MWn.ic=function(n){return new Tsn(this,n,this.b)},MWn.kc=function(){return new tN(this)},MWn.lc=function(){return new w1(BB(this.g||(this.g=new qm(this)),21),17)},MWn.ec=function(){return this.i||(this.i=new HL(this,this.c))},MWn.nc=function(){return new by(new tN(this))},MWn.oc=function(){return RB(new w1(BB(this.g||(this.g=new qm(this)),21),17),new f)},MWn.b=2,vX(XWn,"LinkedHashMultimap",1835),wAn(1838,1,{},f),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"LinkedHashMultimap/0methodref$getValue$Type",1838),wAn(824,1,QWn,tN),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return vtn(this)},MWn.Ob=function(){return this.a!=this.b.a},MWn.Qb=function(){han(!!this.c),q0(this.b,this.c.g,this.c.i),this.c=null},vX(XWn,"LinkedHashMultimap/1",824),wAn(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},HW),MWn.Rd=function(){return this.f},MWn.Sd=function(n){this.c=n},MWn.Td=function(n){this.f=n},MWn.d=0;var Vnt,Qnt=vX(XWn,"LinkedHashMultimap/ValueEntry",330);wAn(1836,1970,{2020:1,20:1,28:1,14:1,21:1},Tsn),MWn.Fc=function(n){var t,e,i,r,c;for(t=(c=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))&this.b.length-1,e=r=this.b[t];e;e=e.a)if(e.d==c&&wW(e.i,n))return!1;return i=new HW(this.c,n,c,r),kk(this.d,i),i.f=this,this.d=i,iv(this.g.a.b,i),iv(i,this.g.a),this.b[t]=i,++this.f,++this.e,yjn(this),!0},MWn.$b=function(){var n,t;for(yS(this.b,null),this.f=0,n=this.a;n!=this;n=n.Rd())iv((t=BB(n,330)).b,t.e);this.a=this,this.d=this,++this.e},MWn.Hc=function(n){var t,e;for(e=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))),t=this.b[e&this.b.length-1];t;t=t.a)if(t.d==e&&wW(t.i,n))return!0;return!1},MWn.Jc=function(n){var t;for(yX(n),t=this.a;t!=this;t=t.Rd())n.td(BB(t,330).i)},MWn.Rd=function(){return this.a},MWn.Kc=function(){return new sW(this)},MWn.Mc=function(n){return kAn(this,n)},MWn.Sd=function(n){this.d=n},MWn.Td=function(n){this.a=n},MWn.gc=function(){return this.f},MWn.e=0,MWn.f=0,vX(XWn,"LinkedHashMultimap/ValueSet",1836),wAn(1837,1,QWn,sW),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return wG(this),this.b!=this.c},MWn.Pb=function(){var n,t;if(wG(this),this.b==this.c)throw Hp(new yv);return t=(n=BB(this.b,330)).i,this.d=n,this.b=n.f,t},MWn.Qb=function(){wG(this),han(!!this.d),kAn(this.c,this.d.i),this.a=this.c.e,this.d=null},MWn.a=0,vX(XWn,"LinkedHashMultimap/ValueSet/1",1837),wAn(766,1986,VWn,PO),MWn.Zb=function(){return this.f||(this.f=new rS(this))},MWn.Fb=function(n){return jsn(this,n)},MWn.cc=function(n){return new mT(this,n)},MWn.fc=function(n){return J3(this,n)},MWn.$b=function(){cX(this)},MWn._b=function(n){return HT(this,n)},MWn.ac=function(){return new rS(this)},MWn.bc=function(){return new yl(this)},MWn.qc=function(n){return new mT(this,n)},MWn.dc=function(){return!this.a},MWn.rc=function(n){return J3(this,n)},MWn.gc=function(){return this.d},MWn.c=0,MWn.d=0,vX(XWn,"LinkedListMultimap",766),wAn(52,28,LVn),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new tk("Add not supported on this list"))},MWn.Fc=function(n){return this.Vc(this.gc(),n),!0},MWn.Wc=function(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),this.Vc(n++,i),e=!0;return e},MWn.$b=function(){this.Ud(0,this.gc())},MWn.Fb=function(n){return NAn(this,n)},MWn.Hb=function(){return Fon(this)},MWn.Xc=function(n){return bin(this,n)},MWn.Kc=function(){return new Sb(this)},MWn.Yc=function(){return this.Zc(0)},MWn.Zc=function(n){return new M2(this,n)},MWn.$c=function(n){throw Hp(new tk("Remove not supported on this list"))},MWn.Ud=function(n,t){var e,i;for(i=this.Zc(n),e=n;e<t;++e)i.Pb(),i.Qb()},MWn._c=function(n,t){throw Hp(new tk("Set not supported on this list"))},MWn.bd=function(n,t){return new s1(this,n,t)},MWn.j=0,vX(YWn,"AbstractList",52),wAn(1964,52,LVn),MWn.Vc=function(n,t){Kx(this,n,t)},MWn.Wc=function(n,t){return Asn(this,n,t)},MWn.Xb=function(n){return Dpn(this,n)},MWn.Kc=function(){return this.Zc(0)},MWn.$c=function(n){return tkn(this,n)},MWn._c=function(n,t){var e,i;e=this.Zc(n);try{return i=e.Pb(),e.Wb(t),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't set element "+n)):Hp(r)}},vX(YWn,"AbstractSequentialList",1964),wAn(636,1964,LVn,mT),MWn.Zc=function(n){return vN(this,n)},MWn.gc=function(){var n;return(n=BB(RX(this.a.b,this.b),283))?n.a:0},vX(XWn,"LinkedListMultimap/1",636),wAn(1297,1970,tVn,yl),MWn.Hc=function(n){return HT(this.a,n)},MWn.Kc=function(){return new vrn(this.a)},MWn.Mc=function(n){return!J3(this.a,n).a.dc()},MWn.gc=function(){return NT(this.a.b)},vX(XWn,"LinkedListMultimap/1KeySetImpl",1297),wAn(1296,1,QWn,vrn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return bG(this),!!this.c},MWn.Pb=function(){bG(this),oN(this.c),this.a=this.c,TU(this.d,this.a.a);do{this.c=this.c.b}while(this.c&&!TU(this.d,this.c.a));return this.a.a},MWn.Qb=function(){bG(this),han(!!this.a),Cq(new C7(this.e,this.a.a)),this.a=null,this.b=this.e.c},MWn.b=0,vX(XWn,"LinkedListMultimap/DistinctKeyIterator",1296),wAn(283,1,{283:1},sY),MWn.a=0,vX(XWn,"LinkedListMultimap/KeyList",283),wAn(1295,345,aVn,yT),MWn.cd=function(){return this.a},MWn.dd=function(){return this.f},MWn.ed=function(n){var t;return t=this.f,this.f=n,t},vX(XWn,"LinkedListMultimap/Node",1295),wAn(560,1,cVn,C7,KPn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.e=yKn(this.f,this.b,n,this.c),++this.d,this.a=null},MWn.Ob=function(){return!!this.c},MWn.Sb=function(){return!!this.e},MWn.Pb=function(){return EZ(this)},MWn.Tb=function(){return this.d},MWn.Ub=function(){return TZ(this)},MWn.Vb=function(){return this.d-1},MWn.Qb=function(){han(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,ZCn(this.f,this.a),this.a=null},MWn.Wb=function(n){uN(!!this.a),this.a.f=n},MWn.d=0,vX(XWn,"LinkedListMultimap/ValueForKeyIterator",560),wAn(1018,52,LVn),MWn.Vc=function(n,t){this.a.Vc(n,t)},MWn.Wc=function(n,t){return this.a.Wc(n,t)},MWn.Hc=function(n){return this.a.Hc(n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.$c=function(n){return this.a.$c(n)},MWn._c=function(n,t){return this.a._c(n,t)},MWn.gc=function(){return this.a.gc()},vX(XWn,"Lists/AbstractListWrapper",1018),wAn(1019,1018,xVn),vX(XWn,"Lists/RandomAccessListWrapper",1019),wAn(1021,1019,xVn,IT),MWn.Zc=function(n){return this.a.Zc(n)},vX(XWn,"Lists/1",1021),wAn(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},CT),MWn.Vc=function(n,t){this.a.Vc(pU(this,n),t)},MWn.$b=function(){this.a.$b()},MWn.Xb=function(n){return this.a.Xb(LX(this,n))},MWn.Kc=function(){return W1(this,0)},MWn.Zc=function(n){return W1(this,n)},MWn.$c=function(n){return this.a.$c(LX(this,n))},MWn.Ud=function(n,t){(d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))).$b()},MWn._c=function(n,t){return this.a._c(LX(this,n),t)},MWn.gc=function(){return this.a.gc()},MWn.bd=function(n,t){return d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))},vX(XWn,"Lists/ReverseList",131),wAn(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},fy),vX(XWn,"Lists/RandomAccessReverseList",280),wAn(1020,1,cVn,kT),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.c.Rb(n),this.c.Ub(),this.a=!1},MWn.Ob=function(){return this.c.Sb()},MWn.Sb=function(){return this.c.Ob()},MWn.Pb=function(){return w5(this)},MWn.Tb=function(){return pU(this.b,this.c.Tb())},MWn.Ub=function(){if(!this.c.Ob())throw Hp(new yv);return this.a=!0,this.c.Pb()},MWn.Vb=function(){return pU(this.b,this.c.Tb())-1},MWn.Qb=function(){han(this.a),this.c.Qb(),this.a=!1},MWn.Wb=function(n){uN(this.a),this.c.Wb(n)},MWn.a=!1,vX(XWn,"Lists/ReverseList/1",1020),wAn(432,487,QWn,ly),MWn.Qd=function(n){return cS(n)},vX(XWn,"Maps/1",432),wAn(698,487,QWn,by),MWn.Qd=function(n){return BB(n,42).dd()},vX(XWn,"Maps/2",698),wAn(962,487,QWn,pN),MWn.Qd=function(n){return new vT(n,_O(this.a,n))},vX(XWn,"Maps/3",962),wAn(959,1971,tVn,ml),MWn.Jc=function(n){xv(this.a,n)},MWn.Kc=function(){return this.a.kc()},MWn.Rc=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"Maps/IteratorBasedAbstractMap/1",959),wAn(960,1,{},vl),MWn.Od=function(n,t){this.a.td(n)},vX(XWn,"Maps/KeySet/lambda$0$Type",960),wAn(958,28,ZWn,PT),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Jc=function(n){yX(n),this.a.wc(new ll(n))},MWn.dc=function(){return this.a.dc()},MWn.Kc=function(){return new by(this.a.vc().Kc())},MWn.Mc=function(n){var t,e;try{return ywn(this,n,!0)}catch(i){if(cL(i=lun(i),41)){for(e=this.a.vc().Kc();e.Ob();)if(wW(n,(t=BB(e.Pb(),42)).dd()))return this.a.Bc(t.cd()),!0;return!1}throw Hp(i)}},MWn.gc=function(){return this.a.gc()},vX(XWn,"Maps/Values",958),wAn(961,1,{},ll),MWn.Od=function(n,t){this.a.td(t)},vX(XWn,"Maps/Values/lambda$0$Type",961),wAn(736,1987,JWn,rS),MWn.xc=function(n){return this.a._b(n)?this.a.cc(n):null},MWn.Bc=function(n){return this.a._b(n)?this.a.fc(n):null},MWn.$b=function(){this.a.$b()},MWn._b=function(n){return this.a._b(n)},MWn.Ec=function(){return new fl(this)},MWn.Dc=function(){return this.Ec()},MWn.dc=function(){return this.a.dc()},MWn.ec=function(){return this.a.ec()},MWn.gc=function(){return this.a.ec().gc()},vX(XWn,"Multimaps/AsMap",736),wAn(1104,1971,tVn,fl),MWn.Kc=function(){return nL(this.a.a.ec(),new bl(this))},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!idn(this,n)&&(t=BB(n,42),jk(this.a,t.cd()),!0)},vX(XWn,"Multimaps/AsMap/EntrySet",1104),wAn(1108,1,{},bl),MWn.Kb=function(n){return _O(this,n)},MWn.Fb=function(n){return this===n},vX(XWn,"Multimaps/AsMap/EntrySet/1",1108),wAn(543,1989,{543:1,835:1,20:1,28:1,14:1},wl),MWn.$b=function(){win(this.a)},MWn.Hc=function(n){return Wj(this.a,n)},MWn.Jc=function(n){yX(n),e5(MX(this.a),new gl(n))},MWn.Kc=function(){return new ly(MX(this.a).a.kc())},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return RB(MX(this.a).Nc(),new l)},vX(XWn,"Multimaps/Keys",543),wAn(1106,1,{},l),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"Multimaps/Keys/0methodref$getKey$Type",1106),wAn(1105,487,QWn,wy),MWn.Qd=function(n){return new dl(BB(n,42))},vX(XWn,"Multimaps/Keys/1",1105),wAn(1990,1,{416:1}),MWn.Fb=function(n){var t;return!!cL(n,492)&&(t=BB(n,416),BB(this.a.dd(),14).gc()==BB(t.a.dd(),14).gc()&&wW(this.a.cd(),t.a.cd()))},MWn.Hb=function(){var n;return(null==(n=this.a.cd())?0:nsn(n))^BB(this.a.dd(),14).gc()},MWn.Ib=function(){var n,t;return t=kN(this.a.cd()),1==(n=BB(this.a.dd(),14).gc())?t:t+" x "+n},vX(XWn,"Multisets/AbstractEntry",1990),wAn(492,1990,{492:1,416:1},dl),vX(XWn,"Multimaps/Keys/1/1",492),wAn(1107,1,lVn,gl),MWn.td=function(n){this.a.td(BB(n,42).cd())},vX(XWn,"Multimaps/Keys/lambda$1$Type",1107),wAn(1110,1,lVn,b),MWn.td=function(n){Iq(BB(n,416))},vX(XWn,"Multiset/lambda$0$Type",1110),wAn(737,1,lVn,pl),MWn.td=function(n){Itn(this.a,BB(n,416))},vX(XWn,"Multiset/lambda$1$Type",737),wAn(1111,1,{},m),vX(XWn,"Multisets/0methodref$add$Type",1111),wAn(738,1,{},y),MWn.Kb=function(n){return s3(BB(n,416))},vX(XWn,"Multisets/lambda$3$Type",738),wAn(2008,1,KWn),vX(XWn,"RangeGwtSerializationDependencies",2008),wAn(514,2008,{169:1,514:1,3:1,45:1},svn),MWn.Lb=function(n){return Mz(this,BB(n,35))},MWn.Mb=function(n){return Mz(this,BB(n,35))},MWn.Fb=function(n){var t;return!!cL(n,514)&&(t=BB(n,514),xdn(this.a,t.a)&&xdn(this.b,t.b))},MWn.Hb=function(){return 31*this.a.Hb()+this.b.Hb()},MWn.Ib=function(){return B3(this.a,this.b)},vX(XWn,"Range",514),wAn(778,1999,yVn,aU),MWn.Zc=function(n){return ix(this.b,n)},MWn.Pd=function(){return this.a},MWn.Xb=function(n){return WI(this.b,n)},MWn.Fd=function(n){return ix(this.b,n)},vX(XWn,"RegularImmutableAsList",778),wAn(646,2006,yVn,SY),MWn.Hd=function(){return this.a},vX(XWn,"RegularImmutableList",646),wAn(616,715,jVn,hy),vX(XWn,"RegularImmutableMap",616),wAn(716,703,TVn,vS),vX(XWn,"RegularImmutableSet",716),wAn(1976,nVn,tVn),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"Sets/SetView",1976),wAn(963,1976,tVn,ET),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Hc=function(n){return CG(this.a,n)&&this.b.Hc(n)},MWn.Ic=function(n){return oun(this.a,n)&&this.b.Ic(n)},MWn.dc=function(){return Kpn(this.b,this.a)},MWn.Lc=function(){return AV(new Rq(null,new w1(this.a,1)),new jl(this.b))},MWn.gc=function(){return Can(this)},MWn.Oc=function(){return AV(new Rq(null,new w1(this.a,1)),new kl(this.b))},vX(XWn,"Sets/2",963),wAn(700,699,UWn,SV),MWn.Yb=function(){for(var n;k$(this.a);)if(n=u4(this.a),this.c.Hc(n))return n;return this.e=2,null},vX(XWn,"Sets/2/1",700),wAn(964,1,DVn,kl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/4methodref$contains$Type",964),wAn(965,1,DVn,jl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/5methodref$contains$Type",965),wAn(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},bJ),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Jc=function(n){this.a.Jc(n)},MWn.Lc=function(){return this.a.Lc()},MWn.Oc=function(){return this.a.Oc()},vX(XWn,"Sets/UnmodifiableNavigableSet",607),wAn(1932,1931,jVn,GW),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"SingletonImmutableBiMap",1932),wAn(647,2006,yVn,Pq),MWn.Hd=function(){return this.a},vX(XWn,"SingletonImmutableList",647),wAn(350,1981,TVn,yk),MWn.Kc=function(){return new sl(this.a)},MWn.Hc=function(n){return Nfn(this.a,n)},MWn.Ed=function(){return new sl(this.a)},MWn.gc=function(){return 1},vX(XWn,"SingletonImmutableSet",350),wAn(1115,1,{},k),MWn.Kb=function(n){return BB(n,164)},vX(XWn,"Streams/lambda$0$Type",1115),wAn(1116,1,RVn,El),MWn.Vd=function(){B5(this.a)},vX(XWn,"Streams/lambda$1$Type",1116),wAn(1659,1658,VWn,pY),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.ac=function(){return cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)},MWn.ic=function(n){return null==n&&this.a.ue(n,n),new dE(this.b)},vX(XWn,"TreeMultimap",1659),wAn(78,1,{3:1,78:1}),MWn.Wd=function(n){return new Error(n)},MWn.Xd=function(){return this.e},MWn.Yd=function(){return _wn($V(LU((null==this.k&&(this.k=x8(Jnt,sVn,78,0,0,1)),this.k)),new x),new on)},MWn.Zd=function(){return this.f},MWn.$d=function(){return this.g},MWn._d=function(){yy(this,b2(this.Wd(CY(this,this.g)))),ov(this)},MWn.Ib=function(){return CY(this,this.$d())},MWn.e=FVn,MWn.i=!1,MWn.n=!0;var Ynt,Jnt=vX(RWn,"Throwable",78);wAn(102,78,{3:1,102:1,78:1}),vX(RWn,"Exception",102),wAn(60,102,BVn,sv,dy),vX(RWn,"RuntimeException",60),wAn(598,60,BVn),vX(RWn,"JsException",598),wAn(863,598,BVn),vX(HVn,"JavaScriptExceptionBase",863),wAn(477,863,{477:1,3:1,102:1,60:1,78:1},jhn),MWn.$d=function(){return pEn(this),this.c},MWn.ae=function(){return GI(this.b)===GI(Ynt)?null:this.b},vX(GVn,"JavaScriptException",477);var Znt,ntt=vX(GVn,"JavaScriptObject$",0);wAn(1948,1,{}),vX(GVn,"Scheduler",1948);var ttt,ett,itt,rtt,ctt=0,att=0,utt=-1;wAn(890,1948,{},j),vX(HVn,"SchedulerImpl",890),wAn(1960,1,{}),vX(HVn,"StackTraceCreator/Collector",1960),wAn(864,1960,{},E),MWn.be=function(n){var t={},e=[];n[UVn]=e;for(var i=arguments.callee.caller;i;){var r=(PY(),i.name||(i.name=Ven(i.toString())));e.push(r);var c,a,u=":"+r,o=t[u];if(o)for(c=0,a=o.length;c<a;c++)if(o[c]===i)return;(o||(t[u]=[])).push(i),i=i.caller}},MWn.ce=function(n){var t,e,i,r;for(PY(),e=(i=n&&n[UVn]?n[UVn]:[]).length,r=x8(Ftt,sVn,310,e,0,1),t=0;t<e;t++)r[t]=new PV(i[t],null,-1);return r},vX(HVn,"StackTraceCreator/CollectorLegacy",864),wAn(1961,1960,{}),MWn.be=function(n){},MWn.de=function(n,t,e,i){return new PV(t,n+"@"+i,e<0?-1:e)},MWn.ce=function(n){var t,e,i,r,c,a;if(r=lyn(n),c=x8(Ftt,sVn,310,0,0,1),t=0,0==(i=r.length))return c;for(mK((a=Oqn(this,r[0])).d,zVn)||(c[t++]=a),e=1;e<i;e++)c[t++]=Oqn(this,r[e]);return c},vX(HVn,"StackTraceCreator/CollectorModern",1961),wAn(865,1961,{},d),MWn.de=function(n,t,e,i){return new PV(t,n,-1)},vX(HVn,"StackTraceCreator/CollectorModernNoSourceMap",865),wAn(1050,1,{}),vX(yQn,kQn,1050),wAn(615,1050,{615:1},zX),vX(jQn,kQn,615),wAn(2001,1,{}),vX(yQn,EQn,2001),wAn(2002,2001,{}),vX(jQn,EQn,2002),wAn(1090,1,{},g),vX(jQn,"LocaleInfo",1090),wAn(1918,1,{},p),MWn.a=0,vX(jQn,"TimeZone",1918),wAn(1258,2002,{},w),vX("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1258),wAn(434,1,{434:1},VB),MWn.a=!1,MWn.b=0,vX(yQn,"DateTimeFormat/PatternPart",434),wAn(199,1,TQn,AT,von,PD),MWn.wd=function(n){return J0(this,BB(n,199))},MWn.Fb=function(n){return cL(n,199)&&QI(fan(this.q.getTime()),fan(BB(n,199).q.getTime()))},MWn.Hb=function(){var n;return dG(r0(n=fan(this.q.getTime()),jz(n,32)))},MWn.Ib=function(){var n,t,i;return n=((i=-this.q.getTimezoneOffset())>=0?"+":"")+(i/60|0),t=UO(e.Math.abs(i)%60),(pMn(),pet)[this.q.getDay()]+" "+vet[this.q.getMonth()]+" "+UO(this.q.getDate())+" "+UO(this.q.getHours())+":"+UO(this.q.getMinutes())+":"+UO(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var ott,stt,htt,ftt,ltt,btt,wtt,dtt,gtt,ptt,vtt,mtt=vX(YWn,"Date",199);wAn(1915,199,TQn,Ykn),MWn.a=!1,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=!1,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,MWn.o=0,MWn.p=0,vX("com.google.gwt.i18n.shared.impl","DateRecord",1915),wAn(1966,1,{}),MWn.fe=function(){return null},MWn.ge=function(){return null},MWn.he=function(){return null},MWn.ie=function(){return null},MWn.je=function(){return null},vX(MQn,"JSONValue",1966),wAn(216,1966,{216:1},Cl,Tl),MWn.Fb=function(n){return!!cL(n,216)&&v0(this.a,BB(n,216).a)},MWn.ee=function(){return qp},MWn.Hb=function(){return tY(this.a)},MWn.fe=function(){return this},MWn.Ib=function(){var n,t,e;for(e=new lN("["),t=0,n=this.a.length;t<n;t++)t>0&&(e.a+=","),uO(e,dnn(this,t));return e.a+="]",e.a},vX(MQn,"JSONArray",216),wAn(483,1966,{483:1},Ml),MWn.ee=function(){return Gp},MWn.ge=function(){return this},MWn.Ib=function(){return hN(),""+this.a},MWn.a=!1,vX(MQn,"JSONBoolean",483),wAn(985,60,BVn,gy),vX(MQn,"JSONException",985),wAn(1023,1966,{},v),MWn.ee=function(){return Vp},MWn.Ib=function(){return zWn},vX(MQn,"JSONNull",1023),wAn(258,1966,{258:1},Sl),MWn.Fb=function(n){return!!cL(n,258)&&this.a==BB(n,258).a},MWn.ee=function(){return zp},MWn.Hb=function(){return VO(this.a)},MWn.he=function(){return this},MWn.Ib=function(){return this.a+""},MWn.a=0,vX(MQn,"JSONNumber",258),wAn(183,1966,{183:1},py,Pl),MWn.Fb=function(n){return!!cL(n,183)&&v0(this.a,BB(n,183).a)},MWn.ee=function(){return Up},MWn.Hb=function(){return tY(this.a)},MWn.ie=function(){return this},MWn.Ib=function(){var n,t,e,i,r,c;for(c=new lN("{"),n=!0,i=0,r=(e=jrn(this,x8(Qtt,sVn,2,0,6,1))).length;i<r;++i)t=e[i],n?n=!1:c.a+=FWn,oO(c,mOn(t)),c.a+=":",uO(c,zJ(this,t));return c.a+="}",c.a},vX(MQn,"JSONObject",183),wAn(596,nVn,tVn,TT),MWn.Hc=function(n){return XI(n)&&zk(this.a,SD(n))},MWn.Kc=function(){return new Sb(new Jy(this.b))},MWn.gc=function(){return this.b.length},vX(MQn,"JSONObject/1",596),wAn(204,1966,{204:1},GX),MWn.Fb=function(n){return!!cL(n,204)&&mK(this.a,BB(n,204).a)},MWn.ee=function(){return Xp},MWn.Hb=function(){return vvn(this.a)},MWn.je=function(){return this},MWn.Ib=function(){return mOn(this.a)},vX(MQn,"JSONString",204),wAn(1962,1,{525:1}),vX(LQn,"OutputStream",1962),wAn(1963,1962,{525:1}),vX(LQn,"FilterOutputStream",1963),wAn(866,1963,{525:1},A),vX(LQn,"PrintStream",866),wAn(418,1,{475:1}),MWn.Ib=function(){return this.a},vX(RWn,"AbstractStringBuilder",418),wAn(529,60,BVn,Oy),vX(RWn,"ArithmeticException",529),wAn(73,60,NQn,fv,Ay),vX(RWn,"IndexOutOfBoundsException",73),wAn(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},Sv,Tk),vX(RWn,"ArrayIndexOutOfBoundsException",320),wAn(528,60,BVn,lv,$y),vX(RWn,"ArrayStoreException",528),wAn(289,78,xQn,Ly),vX(RWn,"Error",289),wAn(194,289,xQn,hv,g5),vX(RWn,"AssertionError",194),CWn={3:1,476:1,35:1};var ytt,ktt=vX(RWn,"Boolean",476);wAn(236,1,{3:1,236:1}),vX(RWn,"Number",236),wAn(217,236,{3:1,217:1,35:1,236:1},$b),MWn.wd=function(n){return Fk(this,BB(n,217))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,217)&&BB(n,217).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var jtt,Ett,Ttt=vX(RWn,"Byte",217);wAn(172,1,{3:1,172:1,35:1},Lb),MWn.wd=function(n){return Bk(this,BB(n,172))},MWn.Fb=function(n){return cL(n,172)&&BB(n,172).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return String.fromCharCode(this.a)},MWn.a=0;var Mtt,Stt=vX(RWn,"Character",172);wAn(205,60,{3:1,205:1,102:1,60:1,78:1},bv,Ky),vX(RWn,"ClassCastException",205),IWn={3:1,35:1,333:1,236:1};var Ptt=vX(RWn,"Double",333);wAn(155,236,{3:1,35:1,155:1,236:1},Nb,Dv),MWn.wd=function(n){return BO(this,BB(n,155))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,155)&&vK(this.a,BB(n,155).a)},MWn.Hb=function(){return CJ(this.a)},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ctt=vX(RWn,"Float",155);wAn(32,60,{3:1,102:1,32:1,60:1,78:1},wv,_y,Fsn),vX(RWn,"IllegalArgumentException",32),wAn(71,60,BVn,dv,Fy),vX(RWn,"IllegalStateException",71),wAn(19,236,{3:1,35:1,19:1,236:1},xb),MWn.wd=function(n){return HO(this,BB(n,19))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,19)&&BB(n,19).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Itt,Ott,Att=vX(RWn,"Integer",19);wAn(162,236,{3:1,35:1,162:1,236:1},Db),MWn.wd=function(n){return qO(this,BB(n,162))},MWn.ke=function(){return j2(this.a)},MWn.Fb=function(n){return cL(n,162)&&QI(BB(n,162).a,this.a)},MWn.Hb=function(){return dG(this.a)},MWn.Ib=function(){return""+vz(this.a)},MWn.a=0;var $tt,Ltt,Ntt,xtt,Dtt,Rtt=vX(RWn,"Long",162);wAn(2039,1,{}),wAn(1831,60,BVn,By),vX(RWn,"NegativeArraySizeException",1831),wAn(173,598,{3:1,102:1,173:1,60:1,78:1},gv,Hy),MWn.Wd=function(n){return new TypeError(n)},vX(RWn,"NullPointerException",173),wAn(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},Mk),vX(RWn,"NumberFormatException",127),wAn(184,236,{3:1,35:1,236:1,184:1},Rb),MWn.wd=function(n){return Hk(this,BB(n,184))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,184)&&BB(n,184).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ktt,_tt=vX(RWn,"Short",184);wAn(310,1,{3:1,310:1},PV),MWn.Fb=function(n){var t;return!!cL(n,310)&&(t=BB(n,310),this.c==t.c&&this.d==t.d&&this.a==t.a&&this.b==t.b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[iln(this.c),this.a,this.d,this.b]))},MWn.Ib=function(){return this.a+"."+this.d+"("+(null!=this.b?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},MWn.c=0;var Ftt=vX(RWn,"StackTraceElement",310);OWn={3:1,475:1,35:1,2:1};var Btt,Htt,qtt,Gtt,ztt,Utt,Xtt,Wtt,Vtt,Qtt=vX(RWn,qVn,2);wAn(107,418,{475:1},Sk,Pk,fN),vX(RWn,"StringBuffer",107),wAn(100,418,{475:1},Ck,Ik,lN),vX(RWn,"StringBuilder",100),wAn(687,73,NQn,Ok),vX(RWn,"StringIndexOutOfBoundsException",687),wAn(2043,1,{}),wAn(844,1,{},x),MWn.Kb=function(n){return BB(n,78).e},vX(RWn,"Throwable/lambda$0$Type",844),wAn(41,60,{3:1,102:1,60:1,78:1,41:1},pv,tk),vX(RWn,"UnsupportedOperationException",41),wAn(240,236,{3:1,35:1,236:1,240:1},knn,wE),MWn.wd=function(n){return J_n(this,BB(n,240))},MWn.ke=function(){return bSn(eqn(this))},MWn.Fb=function(n){var t;return this===n||!!cL(n,240)&&(t=BB(n,240),this.e==t.e&&0==J_n(this,t))},MWn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=fan(this.f),this.b=dG(e0(n,-1)),this.b=33*this.b+dG(e0(kz(n,32),-1)),this.b=17*this.b+CJ(this.e),this.b):(this.b=17*Khn(this.c)+CJ(this.e),this.b)},MWn.Ib=function(){return eqn(this)},MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0;var Ytt,Jtt,Ztt,net,tet,eet,iet=vX("java.math","BigDecimal",240);wAn(91,236,{3:1,35:1,236:1,91:1},Rpn,X6,lU,vEn,Cgn,$A),MWn.wd=function(n){return tgn(this,BB(n,91))},MWn.ke=function(){return bSn(qXn(this,0))},MWn.Fb=function(n){return swn(this,n)},MWn.Hb=function(){return Khn(this)},MWn.Ib=function(){return qXn(this,0)},MWn.b=-2,MWn.c=0,MWn.d=0,MWn.e=0;var ret,cet,aet,uet,oet=vX("java.math","BigInteger",91);wAn(488,1967,JWn),MWn.$b=function(){$U(this)},MWn._b=function(n){return hU(this,n)},MWn.uc=function(n){return Lsn(this,n,this.g)||Lsn(this,n,this.f)},MWn.vc=function(){return new Pb(this)},MWn.xc=function(n){return RX(this,n)},MWn.zc=function(n,t){return VW(this,n,t)},MWn.Bc=function(n){return v6(this,n)},MWn.gc=function(){return NT(this)},vX(YWn,"AbstractHashMap",488),wAn(261,nVn,tVn,Pb),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return m2(this,n)},MWn.Kc=function(){return new usn(this.a)},MWn.Mc=function(n){var t;return!!m2(this,n)&&(t=BB(n,42).cd(),this.a.Bc(t),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractHashMap/EntrySet",261),wAn(262,1,QWn,usn),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return ten(this)},MWn.Ob=function(){return this.b},MWn.Qb=function(){o9(this)},MWn.b=!1,vX(YWn,"AbstractHashMap/EntrySetIterator",262),wAn(417,1,QWn,Sb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this)},MWn.Pb=function(){return mQ(this)},MWn.Qb=function(){fW(this)},MWn.b=0,MWn.c=-1,vX(YWn,"AbstractList/IteratorImpl",417),wAn(96,417,cVn,M2),MWn.Qb=function(){fW(this)},MWn.Rb=function(n){yR(this,n)},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Ub=function(){return Px(this.b>0),this.a.Xb(this.c=--this.b)},MWn.Vb=function(){return this.b-1},MWn.Wb=function(n){Mx(-1!=this.c),this.a._c(this.c,n)},vX(YWn,"AbstractList/ListIteratorImpl",96),wAn(219,52,LVn,s1),MWn.Vc=function(n,t){LZ(n,this.b),this.c.Vc(this.a+n,t),++this.b},MWn.Xb=function(n){return l1(n,this.b),this.c.Xb(this.a+n)},MWn.$c=function(n){var t;return l1(n,this.b),t=this.c.$c(this.a+n),--this.b,t},MWn._c=function(n,t){return l1(n,this.b),this.c._c(this.a+n,t)},MWn.gc=function(){return this.b},MWn.a=0,MWn.b=0,vX(YWn,"AbstractList/SubList",219),wAn(384,nVn,tVn,Cb),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a._b(n)},MWn.Kc=function(){return new Ib(this.a.vc().Kc())},MWn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/1",384),wAn(691,1,QWn,Ib),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/1/1",691),wAn(226,28,ZWn,Ob),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Kc=function(){return new Kb(this.a.vc().Kc())},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/2",226),wAn(294,1,QWn,Kb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/2/1",294),wAn(484,1,{484:1,42:1}),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.d,t.cd())&&cV(this.e,t.dd()))},MWn.cd=function(){return this.d},MWn.dd=function(){return this.e},MWn.Hb=function(){return KA(this.d)^KA(this.e)},MWn.ed=function(n){return pR(this,n)},MWn.Ib=function(){return this.d+"="+this.e},vX(YWn,"AbstractMap/AbstractEntry",484),wAn(383,484,{484:1,383:1,42:1},PS),vX(YWn,"AbstractMap/SimpleEntry",383),wAn(1984,1,VQn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.cd(),t.cd())&&cV(this.dd(),t.dd()))},MWn.Hb=function(){return KA(this.cd())^KA(this.dd())},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(YWn,uVn,1984),wAn(1992,1967,eVn),MWn.tc=function(n){return q5(this,n)},MWn._b=function(n){return DK(this,n)},MWn.vc=function(){return new Bb(this)},MWn.xc=function(n){return qI(lsn(this,n))},MWn.ec=function(){return new _b(this)},vX(YWn,"AbstractNavigableMap",1992),wAn(739,nVn,tVn,Bb),MWn.Hc=function(n){return cL(n,42)&&q5(this.b,BB(n,42))},MWn.Kc=function(){return new BR(this.b)},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),z8(this.b,t))},MWn.gc=function(){return this.b.c},vX(YWn,"AbstractNavigableMap/EntrySet",739),wAn(493,nVn,rVn,_b),MWn.Nc=function(){return new wS(this)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(this.a).b))},MWn.Mc=function(n){return!!DK(this.a,n)&&($J(this.a,n),!0)},MWn.gc=function(){return this.a.c},vX(YWn,"AbstractNavigableMap/NavigableKeySet",493),wAn(494,1,QWn,Fb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this.a.a)},MWn.Pb=function(){return mx(this.a).cd()},MWn.Qb=function(){e_(this.a)},vX(YWn,"AbstractNavigableMap/NavigableKeySet/1",494),wAn(2004,28,ZWn),MWn.Fc=function(n){return F8(eMn(this,n)),!0},MWn.Gc=function(n){return kW(n),vH(n!=this,"Can't add a queue to itself"),Frn(this,n)},MWn.$b=function(){for(;null!=mnn(this););},vX(YWn,"AbstractQueue",2004),wAn(302,28,{4:1,20:1,28:1,14:1},Lp,d1),MWn.Fc=function(n){return w3(this,n),!0},MWn.$b=function(){o4(this)},MWn.Hc=function(n){return wun(new bV(this),n)},MWn.dc=function(){return Wy(this)},MWn.Kc=function(){return new bV(this)},MWn.Mc=function(n){return GJ(new bV(this),n)},MWn.gc=function(){return this.c-this.b&this.a.length-1},MWn.Nc=function(){return new w1(this,272)},MWn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.length<t&&(n=qk(new Array(t),n)),urn(this,n,t),n.length>t&&$X(n,t,null),n},MWn.b=0,MWn.c=0,vX(YWn,"ArrayDeque",302),wAn(446,1,QWn,bV),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a!=this.b},MWn.Pb=function(){return _hn(this)},MWn.Qb=function(){ein(this)},MWn.a=0,MWn.b=0,MWn.c=-1,vX(YWn,"ArrayDeque/IteratorImpl",446),wAn(12,52,QQn,Np,J6,t_),MWn.Vc=function(n,t){kG(this,n,t)},MWn.Fc=function(n){return WB(this,n)},MWn.Wc=function(n,t){return ohn(this,n,t)},MWn.Gc=function(n){return gun(this,n)},MWn.$b=function(){this.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this,n,0)},MWn.Jc=function(n){Otn(this,n)},MWn.Xb=function(n){return xq(this,n)},MWn.Xc=function(n){return E7(this,n,0)},MWn.dc=function(){return 0==this.c.length},MWn.Kc=function(){return new Wb(this)},MWn.$c=function(n){return s6(this,n)},MWn.Mc=function(n){return y7(this,n)},MWn.Ud=function(n,t){h1(this,n,t)},MWn._c=function(n,t){return c5(this,n,t)},MWn.gc=function(){return this.c.length},MWn.ad=function(n){m$(this,n)},MWn.Pc=function(){return bx(this)},MWn.Qc=function(n){return Qgn(this,n)};var set,het,fet,bet,wet,det,get,pet,vet,met=vX(YWn,"ArrayList",12);wAn(7,1,QWn,Wb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return y$(this)},MWn.Pb=function(){return n0(this)},MWn.Qb=function(){AU(this)},MWn.a=0,MWn.b=-1,vX(YWn,"ArrayList/1",7),wAn(2013,e.Function,{},T),MWn.te=function(n,t){return Pln(n,t)},wAn(154,52,YQn,Jy),MWn.Hc=function(n){return-1!=bin(this,n)},MWn.Jc=function(n){var t,e,i,r;for(kW(n),i=0,r=(e=this.a).length;i<r;++i)t=e[i],n.td(t)},MWn.Xb=function(n){return Dq(this,n)},MWn._c=function(n,t){var e;return l1(n,this.a.length),e=this.a[n],$X(this.a,n,t),e},MWn.gc=function(){return this.a.length},MWn.ad=function(n){yG(this.a,this.a.length,n)},MWn.Pc=function(){return Ygn(this,x8(Ant,HWn,1,this.a.length,5,1))},MWn.Qc=function(n){return Ygn(this,n)},vX(YWn,"Arrays/ArrayList",154),wAn(940,52,YQn,S),MWn.Hc=function(n){return!1},MWn.Xb=function(n){return yO(n)},MWn.Kc=function(){return SQ(),LT(),bet},MWn.Yc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptyList",940),wAn(941,1,cVn,P),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new dv)},MWn.Wb=function(n){throw Hp(new dv)},vX(YWn,"Collections/EmptyListIterator",941),wAn(943,1967,jVn,C),MWn._b=function(n){return!1},MWn.uc=function(n){return!1},MWn.vc=function(){return SQ(),fet},MWn.xc=function(n){return null},MWn.ec=function(){return SQ(),fet},MWn.gc=function(){return 0},MWn.Cc=function(){return SQ(),set},vX(YWn,"Collections/EmptyMap",943),wAn(942,nVn,TVn,M),MWn.Hc=function(n){return!1},MWn.Kc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptySet",942),wAn(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},Gb),MWn.Hc=function(n){return cV(this.a,n)},MWn.Xb=function(n){return l1(n,1),this.a},MWn.gc=function(){return 1},vX(YWn,"Collections/SingletonList",599),wAn(372,1,vVn,Hb),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,this.Nc())},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return oE()},MWn.Gc=function(n){return sE()},MWn.$b=function(){hE()},MWn.Hc=function(n){return xT(this,n)},MWn.Ic=function(n){return DT(this,n)},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new qb(this.b.Kc())},MWn.Mc=function(n){return fE()},MWn.gc=function(){return this.b.gc()},MWn.Pc=function(){return this.b.Pc()},MWn.Qc=function(n){return RT(this,n)},MWn.Ib=function(){return Bbn(this.b)},vX(YWn,"Collections/UnmodifiableCollection",372),wAn(371,1,QWn,qb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.b.Pb()},MWn.Qb=function(){lE()},vX(YWn,"Collections/UnmodifiableCollectionIterator",371),wAn(531,372,JQn,bN),MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.Hb=function(){return nsn(this.a)},MWn.Xc=function(n){return this.a.Xc(n)},MWn.dc=function(){return this.a.dc()},MWn.Yc=function(){return new wN(this.a.Zc(0))},MWn.Zc=function(n){return new wN(this.a.Zc(n))},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.ad=function(n){throw Hp(new pv)},MWn.bd=function(n,t){return new bN(this.a.bd(n,t))},vX(YWn,"Collections/UnmodifiableList",531),wAn(690,371,cVn,wN),MWn.Qb=function(){lE()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Sb=function(){return this.a.Sb()},MWn.Tb=function(){return this.a.Tb()},MWn.Ub=function(){return this.a.Ub()},MWn.Vb=function(){return this.a.Vb()},MWn.Wb=function(n){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableListIterator",690),wAn(600,1,JWn,Xb),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return this.c._b(n)},MWn.uc=function(n){return _T(this,n)},MWn.vc=function(){return eV(this)},MWn.Fb=function(n){return BT(this,n)},MWn.xc=function(n){return this.c.xc(n)},MWn.Hb=function(){return nsn(this.c)},MWn.dc=function(){return this.c.dc()},MWn.ec=function(){return iV(this)},MWn.zc=function(n,t){throw Hp(new pv)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.gc()},MWn.Ib=function(){return Bbn(this.c)},MWn.Cc=function(){return tV(this)},vX(YWn,"Collections/UnmodifiableMap",600),wAn(382,372,EVn,Ak),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return Nfn(this.b,n)},MWn.Hb=function(){return nsn(this.b)},vX(YWn,"Collections/UnmodifiableSet",382),wAn(944,382,EVn,Lk),MWn.Hc=function(n){return KT(this,n)},MWn.Ic=function(n){return this.b.Ic(n)},MWn.Kc=function(){return new zb(this.b.Kc())},MWn.Pc=function(){var n;return j4(n=this.b.Pc(),n.length),n},MWn.Qc=function(n){return IY(this,n)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet",944),wAn(945,1,QWn,zb),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return new Ub(BB(this.a.Pb(),42))},MWn.Ob=function(){return this.a.Ob()},MWn.Qb=function(){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",945),wAn(688,1,VQn,Ub),MWn.Fb=function(n){return this.a.Fb(n)},MWn.cd=function(){return this.a.cd()},MWn.dd=function(){return this.a.dd()},MWn.Hb=function(){return this.a.Hb()},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return Bbn(this.a)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",688),wAn(601,531,{20:1,14:1,15:1,54:1},$k),vX(YWn,"Collections/UnmodifiableRandomAccessList",601),wAn(689,382,MVn,dN),MWn.Nc=function(){return new wS(this)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Hb=function(){return nsn(this.a)},vX(YWn,"Collections/UnmodifiableSortedSet",689),wAn(847,1,ZQn,D),MWn.ue=function(n,t){var e;return 0!=(e=T4(BB(n,11),BB(t,11)))?e:nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(YWn,"Comparator/lambda$0$Type",847),wAn(751,1,ZQn,R),MWn.ue=function(n,t){return _q(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),get},vX(YWn,"Comparators/NaturalOrderComparator",751),wAn(1177,1,ZQn,K),MWn.ue=function(n,t){return Fq(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),det},vX(YWn,"Comparators/ReverseNaturalOrderComparator",1177),wAn(64,1,ZQn,nw),MWn.Fb=function(n){return this===n},MWn.ue=function(n,t){return this.a.ue(t,n)},MWn.ve=function(){return this.a},vX(YWn,"Comparators/ReversedComparator",64),wAn(166,60,BVn,vv),vX(YWn,"ConcurrentModificationException",166),wAn(1904,1,nYn,_),MWn.we=function(n){hdn(this,n)},MWn.Ib=function(){return"DoubleSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?l6(this)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+l6(this)+"]"},MWn.a=0,MWn.b=KQn,MWn.c=RQn,MWn.d=0,MWn.e=0,MWn.f=0,vX(YWn,"DoubleSummaryStatistics",1904),wAn(1805,60,BVn,mv),vX(YWn,"EmptyStackException",1805),wAn(451,1967,JWn,Hbn),MWn.zc=function(n,t){return wR(this,n,t)},MWn.$b=function(){TW(this)},MWn._b=function(n){return uS(this,n)},MWn.uc=function(n){var t,e;for(e=new QT(this.a);e.a<e.c.a.length;)if(t=u4(e),cV(n,this.b[t.g]))return!0;return!1},MWn.vc=function(){return new tw(this)},MWn.xc=function(n){return oV(this,n)},MWn.Bc=function(n){return NZ(this,n)},MWn.gc=function(){return this.a.c},vX(YWn,"EnumMap",451),wAn(1352,nVn,tVn,tw),MWn.$b=function(){TW(this.a)},MWn.Hc=function(n){return v2(this,n)},MWn.Kc=function(){return new Aq(this.a)},MWn.Mc=function(n){var t;return!!v2(this,n)&&(t=BB(n,42).cd(),NZ(this.a,t),!0)},MWn.gc=function(){return this.a.a.c},vX(YWn,"EnumMap/EntrySet",1352),wAn(1353,1,QWn,Aq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.b=u4(this.a),new CS(this.c,this.b)},MWn.Ob=function(){return k$(this.a)},MWn.Qb=function(){Mx(!!this.b),NZ(this.c,this.b),this.b=null},vX(YWn,"EnumMap/EntrySetIterator",1353),wAn(1354,1984,VQn,CS),MWn.cd=function(){return this.a},MWn.dd=function(){return this.b.b[this.a.g]},MWn.ed=function(n){return EU(this.b,this.a.g,n)},vX(YWn,"EnumMap/MapEntry",1354),wAn(174,nVn,{20:1,28:1,14:1,174:1,21:1});var yet=vX(YWn,"EnumSet",174);wAn(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},YK),MWn.Fc=function(n){return orn(this,BB(n,22))},MWn.Hc=function(n){return CG(this,n)},MWn.Kc=function(){return new QT(this)},MWn.Mc=function(n){return IG(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"EnumSet/EnumSetImpl",156),wAn(343,1,QWn,QT),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return u4(this)},MWn.Ob=function(){return k$(this)},MWn.Qb=function(){Mx(-1!=this.b),$X(this.c.b,this.b,null),--this.c.c,this.b=-1},MWn.a=-1,MWn.b=-1,vX(YWn,"EnumSet/EnumSetImpl/IteratorImpl",343),wAn(43,488,tYn,xp,XT,mO),MWn.re=function(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)},MWn.se=function(n){return 0|nsn(n)},vX(YWn,"HashMap",43),wAn(53,nVn,eYn,Rv,bE,$q),MWn.Fc=function(n){return TU(this,n)},MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return FT(this,n)},MWn.dc=function(){return 0==this.a.gc()},MWn.Kc=function(){return this.a.ec().Kc()},MWn.Mc=function(n){return eL(this,n)},MWn.gc=function(){return this.a.gc()};var ket,jet=vX(YWn,"HashSet",53);wAn(1781,1,wVn,F),MWn.ud=function(n){ran(this,n)},MWn.Ib=function(){return"IntSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?j2(this.d)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+vz(this.d)+"]"},MWn.a=0,MWn.b=_Vn,MWn.c=DWn,MWn.d=0,vX(YWn,"IntSummaryStatistics",1781),wAn(1049,1,pVn,eA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new S2(this)},MWn.c=0,vX(YWn,"InternalHashCodeMap",1049),wAn(711,1,QWn,S2),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.d=this.a[this.c++],this.d},MWn.Ob=function(){var n;return this.c<this.a.length||!(n=this.b.next()).done&&(this.a=n.value[1],this.c=0,!0)},MWn.Qb=function(){gAn(this.e,this.d.cd()),0!=this.c&&--this.c},MWn.c=0,MWn.d=null,vX(YWn,"InternalHashCodeMap/1",711),wAn(1047,1,pVn,iA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new p4(this)},MWn.c=0,MWn.d=0,vX(YWn,"InternalStringMap",1047),wAn(710,1,QWn,p4),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.c=this.a,this.a=this.b.next(),new JK(this.d,this.c,this.d.d)},MWn.Ob=function(){return!this.a.done},MWn.Qb=function(){Gan(this.d,this.c.value[0])},vX(YWn,"InternalStringMap/1",710),wAn(1048,1984,VQn,JK),MWn.cd=function(){return this.b.value[0]},MWn.dd=function(){return this.a.d!=this.c?hS(this.a,this.b.value[0]):this.b.value[1]},MWn.ed=function(n){return ubn(this.a,this.b.value[0],n)},MWn.c=0,vX(YWn,"InternalStringMap/2",1048),wAn(228,43,tYn,v4,q8),MWn.$b=function(){kR(this)},MWn._b=function(n){return lS(this,n)},MWn.uc=function(n){var t;for(t=this.d.a;t!=this.d;){if(cV(t.e,n))return!0;t=t.a}return!1},MWn.vc=function(){return new iw(this)},MWn.xc=function(n){return lnn(this,n)},MWn.zc=function(n,t){return Jgn(this,n,t)},MWn.Bc=function(n){return k7(this,n)},MWn.gc=function(){return NT(this.e)},MWn.c=!1,vX(YWn,"LinkedHashMap",228),wAn(387,383,{484:1,383:1,387:1,42:1},Cx,nH),vX(YWn,"LinkedHashMap/ChainEntry",387),wAn(701,nVn,tVn,iw),MWn.$b=function(){kR(this.a)},MWn.Hc=function(n){return y2(this,n)},MWn.Kc=function(){return new hW(this)},MWn.Mc=function(n){var t;return!!y2(this,n)&&(t=BB(n,42).cd(),k7(this.a,t),!0)},MWn.gc=function(){return NT(this.a.e)},vX(YWn,"LinkedHashMap/EntrySet",701),wAn(702,1,QWn,hW),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return s9(this)},MWn.Ob=function(){return this.b!=this.c.a.d},MWn.Qb=function(){Mx(!!this.a),p2(this.c.a.e,this),RH(this.a),v6(this.c.a.e,this.a.d),bD(this.c.a.e,this),this.a=null},vX(YWn,"LinkedHashMap/EntrySet/EntryIterator",702),wAn(178,53,eYn,fA,LN,Lq);var Eet=vX(YWn,"LinkedHashSet",178);wAn(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},YT,n_),MWn.Fc=function(n){return DH(this,n)},MWn.$b=function(){yQ(this)},MWn.Zc=function(n){return spn(this,n)},MWn.gc=function(){return this.b},MWn.b=0;var Tet,Met,Set,Pet,Cet,Iet=vX(YWn,"LinkedList",68);wAn(970,1,cVn,ZK),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){nX(this,n)},MWn.Ob=function(){return EE(this)},MWn.Sb=function(){return this.b.b!=this.d.a},MWn.Pb=function(){return b3(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){return U0(this)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){mtn(this)},MWn.Wb=function(n){Mx(!!this.c),this.c.c=n},MWn.a=0,MWn.c=null,vX(YWn,"LinkedList/ListIteratorImpl",970),wAn(608,1,{},$),vX(YWn,"LinkedList/Node",608),wAn(1959,1,{}),vX(YWn,"Locale",1959),wAn(861,1959,{},L),MWn.Ib=function(){return""},vX(YWn,"Locale/1",861),wAn(862,1959,{},N),MWn.Ib=function(){return"unknown"},vX(YWn,"Locale/4",862),wAn(109,60,{3:1,102:1,60:1,78:1,109:1},yv,lV),vX(YWn,"NoSuchElementException",109),wAn(404,1,{404:1},vy),MWn.Fb=function(n){var t;return n===this||!!cL(n,404)&&(t=BB(n,404),cV(this.a,t.a))},MWn.Hb=function(){return KA(this.a)},MWn.Ib=function(){return null!=this.a?GWn+kN(this.a)+")":"Optional.empty()"},vX(YWn,"Optional",404),wAn(463,1,{463:1},CO,yx),MWn.Fb=function(n){var t;return n===this||!!cL(n,463)&&(t=BB(n,463),this.a==t.a&&0==Pln(this.b,t.b))},MWn.Hb=function(){return this.a?CJ(this.b):0},MWn.Ib=function(){return this.a?"OptionalDouble.of("+this.b+")":"OptionalDouble.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalDouble",463),wAn(517,1,{517:1},IO,kx),MWn.Fb=function(n){var t;return n===this||!!cL(n,517)&&(t=BB(n,517),this.a==t.a&&0==E$(this.b,t.b))},MWn.Hb=function(){return this.a?this.b:0},MWn.Ib=function(){return this.a?"OptionalInt.of("+this.b+")":"OptionalInt.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalInt",517),wAn(503,2004,ZWn,Xz),MWn.Gc=function(n){return ikn(this,n)},MWn.$b=function(){this.b.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=(null==n?-1:E7(this.b,n,0))},MWn.Kc=function(){return new Vb(this)},MWn.Mc=function(n){return srn(this,n)},MWn.gc=function(){return this.b.c.length},MWn.Nc=function(){return new w1(this,256)},MWn.Pc=function(){return bx(this.b)},MWn.Qc=function(n){return Qgn(this.b,n)},vX(YWn,"PriorityQueue",503),wAn(1277,1,QWn,Vb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a<this.c.b.c.length},MWn.Pb=function(){return Px(this.a<this.c.b.c.length),this.b=this.a++,xq(this.c.b,this.b)},MWn.Qb=function(){Mx(-1!=this.b),hrn(this.c,this.a=this.b),this.b=-1},MWn.a=0,MWn.b=-1,vX(YWn,"PriorityQueue/1",1277),wAn(230,1,{230:1},sbn,C4),MWn.a=0,MWn.b=0;var Oet,Aet,$et,Let=0;vX(YWn,"Random",230),wAn(27,1,fVn,w1,zU,CV),MWn.qd=function(){return this.a},MWn.rd=function(){return Dz(this),this.c},MWn.Nb=function(n){Dz(this),this.d.Nb(n)},MWn.sd=function(n){return ntn(this,n)},MWn.a=0,MWn.c=0,vX(YWn,"Spliterators/IteratorSpliterator",27),wAn(485,27,fVn,wS),vX(YWn,"SortedSet/1",485),wAn(602,1,nYn,Qb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/0methodref$accept$Type",602),wAn(603,1,nYn,Yb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/1methodref$accept$Type",603),wAn(604,1,wVn,Jb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/2methodref$accept$Type",604),wAn(605,1,wVn,Zb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/3methodref$accept$Type",605),wAn(617,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.d},MWn.rd=function(){return this.e},MWn.d=0,MWn.e=0,vX(YWn,"Spliterators/BaseSpliterator",617),wAn(721,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,182)?gE(this,BB(n,182)):gE(this,new Yb(n))},MWn.sd=function(n){return cL(n,182)?this.ye(BB(n,182)):this.ye(new Qb(n))},vX(YWn,"Spliterators/AbstractDoubleSpliterator",721),wAn(720,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,196)?gE(this,BB(n,196)):gE(this,new Zb(n))},MWn.sd=function(n){return cL(n,196)?this.ye(BB(n,196)):this.ye(new Jb(n))},vX(YWn,"Spliterators/AbstractIntSpliterator",720),wAn(540,617,fVn),vX(YWn,"Spliterators/AbstractSpliterator",540),wAn(692,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.b},MWn.rd=function(){return this.d-this.c},MWn.b=0,MWn.c=0,MWn.d=0,vX(YWn,"Spliterators/BaseArraySpliterator",692),wAn(947,692,fVn,BH),MWn.ze=function(n,t){cj(this,BB(n,38),t)},MWn.Nb=function(n){DX(this,n)},MWn.sd=function(n){return K6(this,n)},vX(YWn,"Spliterators/ArraySpliterator",947),wAn(693,692,fVn,_K),MWn.ze=function(n,t){aj(this,BB(n,182),t)},MWn.xe=function(n){DX(this,n)},MWn.Nb=function(n){cL(n,182)?DX(this,BB(n,182)):DX(this,new Yb(n))},MWn.ye=function(n){return K6(this,n)},MWn.sd=function(n){return cL(n,182)?K6(this,BB(n,182)):K6(this,new Qb(n))},vX(YWn,"Spliterators/DoubleArraySpliterator",693),wAn(1968,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return 16448},MWn.rd=function(){return 0},vX(YWn,"Spliterators/EmptySpliterator",1968),wAn(946,1968,fVn,z),MWn.xe=function(n){Bf(n)},MWn.Nb=function(n){cL(n,196)?Bf(BB(n,196)):Bf(new Zb(n))},MWn.ye=function(n){return bS(n)},MWn.sd=function(n){return cL(n,196)?bS(BB(n,196)):bS(new Jb(n))},vX(YWn,"Spliterators/EmptySpliterator/OfInt",946),wAn(580,52,fYn,_v),MWn.Vc=function(n,t){Kz(n,this.a.c.length+1),kG(this.a,n,t)},MWn.Fc=function(n){return WB(this.a,n)},MWn.Wc=function(n,t){return Kz(n,this.a.c.length+1),ohn(this.a,n,t)},MWn.Gc=function(n){return gun(this.a,n)},MWn.$b=function(){this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Jc=function(n){Otn(this.a,n)},MWn.Xb=function(n){return Kz(n,this.a.c.length),xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return new Wb(this.a)},MWn.$c=function(n){return Kz(n,this.a.c.length),s6(this.a,n)},MWn.Ud=function(n,t){h1(this.a,n,t)},MWn._c=function(n,t){return Kz(n,this.a.c.length),c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.ad=function(n){m$(this.a,n)},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.Ib=function(){return LMn(this.a)},vX(YWn,"Vector",580),wAn(809,580,fYn,om),vX(YWn,"Stack",809),wAn(206,1,{206:1},$an),MWn.Ib=function(){return W0(this)},vX(YWn,"StringJoiner",206),wAn(544,1992,{3:1,83:1,171:1,161:1},WT,Wz),MWn.$b=function(){my(this)},MWn.vc=function(){return new xN(this)},MWn.zc=function(n,t){return Mon(this,n,t)},MWn.Bc=function(n){return $J(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"TreeMap",544),wAn(390,1,QWn,BR),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return mx(this)},MWn.Ob=function(){return aS(this.a)},MWn.Qb=function(){e_(this)},vX(YWn,"TreeMap/EntryIterator",390),wAn(435,739,tVn,xN),MWn.$b=function(){my(this.a)},vX(YWn,"TreeMap/EntrySet",435),wAn(436,383,{484:1,383:1,42:1,436:1},H8),MWn.b=!1;var Net,xet,Det,Ret,Ket=vX(YWn,"TreeMap/Node",436);wAn(621,1,{},q),MWn.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(YWn,"TreeMap/State",621),wAn(297,22,lYn,gS),MWn.Ae=function(){return!1},MWn.Be=function(){return!1};var _et,Fet=Ben(YWn,"TreeMap/SubMapType",297,Unt,J2,h_);wAn(1112,297,lYn,LA),MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/1",1112,Fet,null,null),wAn(1113,297,lYn,A$),MWn.Ae=function(){return!0},MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/2",1113,Fet,null,null),wAn(1114,297,lYn,NA),MWn.Ae=function(){return!0},Ben(YWn,"TreeMap/SubMapType/3",1114,Fet,null,null),wAn(208,nVn,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},zv,dE),MWn.Nc=function(){return new wS(this)},MWn.Fc=function(n){return ZU(this,n)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(new _b(this.a).a).b))},MWn.Mc=function(n){return MN(this,n)},MWn.gc=function(){return this.a.c};var Bet=vX(YWn,"TreeSet",208);wAn(966,1,{},rw),MWn.Ce=function(n,t){return DD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$0$Type",966),wAn(967,1,{},cw),MWn.Ce=function(n,t){return RD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$1$Type",967),wAn(846,1,{},G),MWn.Kb=function(n){return n},vX(bYn,"Function/lambda$0$Type",846),wAn(431,1,DVn,aw),MWn.Mb=function(n){return!this.a.Mb(n)},vX(bYn,"Predicate/lambda$2$Type",431),wAn(572,1,{572:1});var Het,qet,Get=vX(wYn,"Handler",572);wAn(2007,1,KWn),MWn.ne=function(){return"DUMMY"},MWn.Ib=function(){return this.ne()},vX(wYn,"Level",2007),wAn(1621,2007,KWn,U),MWn.ne=function(){return"INFO"},vX(wYn,"Level/LevelInfo",1621),wAn(1640,1,{},Kv),vX(wYn,"LogManager",1640),wAn(1780,1,KWn,i_),MWn.b=null,vX(wYn,"LogRecord",1780),wAn(512,1,{512:1},y5),MWn.e=!1;var zet,Uet,Xet,Wet=!1,Vet=!1,Qet=!1,Yet=!1,Jet=!1;vX(wYn,"Logger",512),wAn(819,572,{572:1},X),vX(wYn,"SimpleConsoleLogHandler",819),wAn(132,22,{3:1,35:1,22:1,132:1},pS);var Zet,nit=Ben(pYn,"Collector/Characteristics",132,Unt,p1,f_);wAn(744,1,{},jU),vX(pYn,"CollectorImpl",744),wAn(1060,1,{},W),MWn.Ce=function(n,t){return Ofn(BB(n,206),BB(t,206))},vX(pYn,"Collectors/10methodref$merge$Type",1060),wAn(1061,1,{},V),MWn.Kb=function(n){return W0(BB(n,206))},vX(pYn,"Collectors/11methodref$toString$Type",1061),wAn(1062,1,{},uw),MWn.Kb=function(n){return hN(),!!TO(n)},vX(pYn,"Collectors/12methodref$test$Type",1062),wAn(251,1,{},B),MWn.Od=function(n,t){BB(n,14).Fc(t)},vX(pYn,"Collectors/20methodref$add$Type",251),wAn(253,1,{},H),MWn.Ee=function(){return new Np},vX(pYn,"Collectors/21methodref$ctor$Type",253),wAn(346,1,{},Q),MWn.Ee=function(){return new Rv},vX(pYn,"Collectors/23methodref$ctor$Type",346),wAn(347,1,{},Y),MWn.Od=function(n,t){TU(BB(n,53),t)},vX(pYn,"Collectors/24methodref$add$Type",347),wAn(1055,1,{},J),MWn.Ce=function(n,t){return ZT(BB(n,15),BB(t,14))},vX(pYn,"Collectors/4methodref$addAll$Type",1055),wAn(1059,1,{},Z),MWn.Od=function(n,t){b6(BB(n,206),BB(t,475))},vX(pYn,"Collectors/9methodref$add$Type",1059),wAn(1058,1,{},YB),MWn.Ee=function(){return new $an(this.a,this.b,this.c)},vX(pYn,"Collectors/lambda$15$Type",1058),wAn(1063,1,{},nn),MWn.Ee=function(){var n;return Jgn(n=new v4,(hN(),!1),new Np),Jgn(n,!0,new Np),n},vX(pYn,"Collectors/lambda$22$Type",1063),wAn(1064,1,{},ow),MWn.Ee=function(){return Pun(Gk(Ant,1),HWn,1,5,[this.a])},vX(pYn,"Collectors/lambda$25$Type",1064),wAn(1065,1,{},sw),MWn.Od=function(n,t){Bq(this.a,een(n))},vX(pYn,"Collectors/lambda$26$Type",1065),wAn(1066,1,{},hw),MWn.Ce=function(n,t){return _z(this.a,een(n),een(t))},vX(pYn,"Collectors/lambda$27$Type",1066),wAn(1067,1,{},tn),MWn.Kb=function(n){return een(n)[0]},vX(pYn,"Collectors/lambda$28$Type",1067),wAn(713,1,{},en),MWn.Ce=function(n,t){return Hq(n,t)},vX(pYn,"Collectors/lambda$4$Type",713),wAn(252,1,{},rn),MWn.Ce=function(n,t){return GT(BB(n,14),BB(t,14))},vX(pYn,"Collectors/lambda$42$Type",252),wAn(348,1,{},cn),MWn.Ce=function(n,t){return zT(BB(n,53),BB(t,53))},vX(pYn,"Collectors/lambda$50$Type",348),wAn(349,1,{},an),MWn.Kb=function(n){return BB(n,53)},vX(pYn,"Collectors/lambda$51$Type",349),wAn(1054,1,{},fw),MWn.Od=function(n,t){bsn(this.a,BB(n,83),t)},vX(pYn,"Collectors/lambda$7$Type",1054),wAn(1056,1,{},un),MWn.Ce=function(n,t){return pun(BB(n,83),BB(t,83),new J)},vX(pYn,"Collectors/lambda$8$Type",1056),wAn(1057,1,{},lw),MWn.Kb=function(n){return mbn(this.a,BB(n,83))},vX(pYn,"Collectors/lambda$9$Type",1057),wAn(539,1,{}),MWn.He=function(){jW(this)},MWn.d=!1,vX(pYn,"TerminatableStream",539),wAn(812,539,vYn,AD),MWn.He=function(){jW(this)},vX(pYn,"DoubleStreamImpl",812),wAn(1784,721,fVn,ZB),MWn.ye=function(n){return pmn(this,BB(n,182))},MWn.a=null,vX(pYn,"DoubleStreamImpl/2",1784),wAn(1785,1,nYn,bw),MWn.we=function(n){HA(this.a,n)},vX(pYn,"DoubleStreamImpl/2/lambda$0$Type",1785),wAn(1782,1,nYn,ww),MWn.we=function(n){BA(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$0$Type",1782),wAn(1783,1,nYn,dw),MWn.we=function(n){hdn(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$2$Type",1783),wAn(1358,720,fVn,m5),MWn.ye=function(n){return k2(this,BB(n,196))},MWn.a=0,MWn.b=0,MWn.c=0,vX(pYn,"IntStream/5",1358),wAn(787,539,vYn,$D),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),this.a},vX(pYn,"IntStreamImpl",787),wAn(788,539,vYn,VT),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),IL(),$et},vX(pYn,"IntStreamImpl/Empty",788),wAn(1463,1,wVn,gw),MWn.ud=function(n){ran(this.a,n)},vX(pYn,"IntStreamImpl/lambda$4$Type",1463);var tit,eit=bq(pYn,"Stream");wAn(30,539,{525:1,670:1,833:1},Rq),MWn.He=function(){jW(this)},vX(pYn,"StreamImpl",30),wAn(845,1,{},on),MWn.ld=function(n){return lH(n)},vX(pYn,"StreamImpl/0methodref$lambda$2$Type",845),wAn(1084,540,fVn,KK),MWn.sd=function(n){for(;$9(this);){if(this.a.sd(n))return!0;jW(this.b),this.b=null,this.a=null}return!1},vX(pYn,"StreamImpl/1",1084),wAn(1085,1,lVn,pw),MWn.td=function(n){iH(this.a,BB(n,833))},vX(pYn,"StreamImpl/1/lambda$0$Type",1085),wAn(1086,1,DVn,vw),MWn.Mb=function(n){return TU(this.a,n)},vX(pYn,"StreamImpl/1methodref$add$Type",1086),wAn(1087,540,fVn,vQ),MWn.sd=function(n){var t;return this.a||(t=new Np,this.b.a.Nb(new mw(t)),SQ(),m$(t,this.c),this.a=new w1(t,16)),ntn(this.a,n)},MWn.a=null,vX(pYn,"StreamImpl/5",1087),wAn(1088,1,lVn,mw),MWn.td=function(n){WB(this.a,n)},vX(pYn,"StreamImpl/5/2methodref$add$Type",1088),wAn(722,540,fVn,Q9),MWn.sd=function(n){for(this.b=!1;!this.b&&this.c.sd(new AS(this,n)););return this.b},MWn.b=!1,vX(pYn,"StreamImpl/FilterSpliterator",722),wAn(1079,1,lVn,AS),MWn.td=function(n){Rz(this.a,this.b,n)},vX(pYn,"StreamImpl/FilterSpliterator/lambda$0$Type",1079),wAn(1075,721,fVn,E6),MWn.ye=function(n){return jK(this,BB(n,182))},vX(pYn,"StreamImpl/MapToDoubleSpliterator",1075),wAn(1078,1,lVn,$S),MWn.td=function(n){jS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1078),wAn(1074,720,fVn,T6),MWn.ye=function(n){return EK(this,BB(n,196))},vX(pYn,"StreamImpl/MapToIntSpliterator",1074),wAn(1077,1,lVn,LS),MWn.td=function(n){kS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1077),wAn(719,540,fVn,M6),MWn.sd=function(n){return TK(this,n)},vX(pYn,"StreamImpl/MapToObjSpliterator",719),wAn(1076,1,lVn,NS),MWn.td=function(n){ES(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1076),wAn(618,1,lVn,sn),MWn.td=function(n){Il(this,n)},vX(pYn,"StreamImpl/ValueConsumer",618),wAn(1080,1,lVn,hn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$0$Type",1080),wAn(1081,1,lVn,fn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$1$Type",1081),wAn(1082,1,{},yw),MWn.Ce=function(n,t){return F_(this.a,n,t)},vX(pYn,"StreamImpl/lambda$4$Type",1082),wAn(1083,1,lVn,IS),MWn.td=function(n){ER(this.b,this.a,n)},vX(pYn,"StreamImpl/lambda$5$Type",1083),wAn(1089,1,lVn,kw),MWn.td=function(n){Hon(this.a,BB(n,365))},vX(pYn,"TerminatableStream/lambda$0$Type",1089),wAn(2041,1,{}),wAn(1914,1,{},ln),vX("javaemul.internal","ConsoleLogger",1914),wAn(2038,1,{});var iit,rit,cit=0,ait=0;wAn(1768,1,lVn,bn),MWn.td=function(n){BB(n,308)},vX(TYn,"BowyerWatsonTriangulation/lambda$0$Type",1768),wAn(1769,1,lVn,jw),MWn.td=function(n){Frn(this.a,BB(n,308).e)},vX(TYn,"BowyerWatsonTriangulation/lambda$1$Type",1769),wAn(1770,1,lVn,wn),MWn.td=function(n){BB(n,168)},vX(TYn,"BowyerWatsonTriangulation/lambda$2$Type",1770),wAn(1765,1,MYn,Ew),MWn.ue=function(n,t){return q3(this.a,BB(n,168),BB(t,168))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(TYn,"NaiveMinST/lambda$0$Type",1765),wAn(499,1,{},Tw),vX(TYn,"NodeMicroLayout",499),wAn(168,1,{168:1},xS),MWn.Fb=function(n){var t;return!!cL(n,168)&&(t=BB(n,168),cV(this.a,t.a)&&cV(this.b,t.b)||cV(this.a,t.b)&&cV(this.b,t.a))},MWn.Hb=function(){return KA(this.a)+KA(this.b)};var uit=vX(TYn,"TEdge",168);wAn(308,1,{308:1},ZFn),MWn.Fb=function(n){var t;return!!cL(n,308)&&K7(this,(t=BB(n,308)).a)&&K7(this,t.b)&&K7(this,t.c)},MWn.Hb=function(){return KA(this.a)+KA(this.b)+KA(this.c)},vX(TYn,"TTriangle",308),wAn(221,1,{221:1},C$),vX(TYn,"Tree",221),wAn(1254,1,{},IZ),vX(SYn,"Scanline",1254);var oit=bq(SYn,PYn);wAn(1692,1,{},ltn),vX(CYn,"CGraph",1692),wAn(307,1,{307:1},cZ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.g=0,MWn.i=0,MWn.k=KQn,vX(CYn,"CGroup",307),wAn(815,1,{},Xv),vX(CYn,"CGroup/CGroupBuilder",815),wAn(57,1,{57:1},AR),MWn.Ib=function(){return this.j?SD(this.j.Kb(this)):(ED(bit),bit.o+"@"+(PN(this)>>>0).toString(16))},MWn.f=0,MWn.i=KQn;var sit,hit,fit,lit,bit=vX(CYn,"CNode",57);wAn(814,1,{},Wv),vX(CYn,"CNode/CNodeBuilder",814),wAn(1525,1,{},dn),MWn.Oe=function(n,t){return 0},MWn.Pe=function(n,t){return 0},vX(CYn,OYn,1525),wAn(1790,1,{},gn),MWn.Le=function(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),57),h=e.Math.min(h,t.a.j.d.c+t.b.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),307)).k=h,0==a.g&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),307)).j.d.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),57),g=a.k+f.b.a,!Ghn(n,a,n.d)||f.d.c<g?f.i=g:f.i=f.d.c;for(c-=a.j.i,a.b+=c,n.d==(Ffn(),FPt)||n.d==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),d=dA(n.d)?n.g.Oe(f,o):n.g.Pe(f,o),o.a.k=e.Math.max(o.a.k,f.i+f.d.b+d-o.b.a),cY(n,o,n.d)&&(o.a.k=e.Math.max(o.a.k,o.d.c-o.b.a)),--o.a.g,0==o.a.g&&DH(w,o.a)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),57)).d.c=t.i},vX(CYn,"LongestPathCompaction",1790),wAn(1690,1,{},yOn),MWn.e=!1;var wit,dit,git=vX(CYn,xYn,1690);wAn(1691,1,lVn,Mw),MWn.td=function(n){iun(this.a,BB(n,46))},vX(CYn,DYn,1691),wAn(1791,1,{},pn),MWn.Me=function(n){var t,e,i,r,c,a;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(e=BB(n0(i),57),c=new Wb(n.a.b);c.a<c.c.c.length;)e!=(r=BB(n0(c),57))&&(e.a&&e.a==r.a||(a=dA(n.d)?n.g.Pe(e,r):n.g.Oe(e,r),(r.d.c>e.d.c||e.d.c==r.d.c&&e.d.b<r.d.b)&&Rdn(r.d.d+r.d.a+a,e.d.d)&&Kdn(r.d.d,e.d.d+e.d.a+a)&&e.c.Fc(r)))},vX(CYn,"QuadraticConstraintCalculation",1791),wAn(522,1,{522:1},Dp),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(CYn,RYn,522),wAn(803,1,{},RG),MWn.Me=function(n){this.c=n,pCn(this,new yn)},vX(CYn,KYn,803),wAn(1718,1,{679:1},fY),MWn.Ke=function(n){_Pn(this,BB(n,464))},vX(CYn,_Yn,1718),wAn(1719,1,MYn,vn),MWn.ue=function(n,t){return uQ(BB(n,57),BB(t,57))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(CYn,FYn,1719),wAn(464,1,{464:1},OS),MWn.a=!1,vX(CYn,BYn,464),wAn(1720,1,MYn,mn),MWn.ue=function(n,t){return Jkn(BB(n,464),BB(t,464))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(CYn,HYn,1720),wAn(1721,1,qYn,yn),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(CYn,"ScanlineConstraintCalculator/lambda$1$Type",1721),wAn(428,22,{3:1,35:1,22:1,428:1},FS);var pit,vit,mit,yit=Ben(GYn,"HighLevelSortingCriterion",428,Unt,rJ,l_);wAn(427,22,{3:1,35:1,22:1,427:1},BS);var kit,jit,Eit,Tit,Mit,Sit,Pit,Cit,Iit,Oit,Ait,$it,Lit,Nit,xit,Dit,Rit,Kit=Ben(GYn,"LowLevelSortingCriterion",427,Unt,cJ,b_),_it=bq(zYn,"ILayoutMetaDataProvider");wAn(853,1,QYn,Gh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,UYn),YYn),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),Cit),(PPn(),gMt)),Bit),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,XYn),YYn),"Polyomino Secondary Sorting Criterion"),"Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion."),Sit),gMt),Kit),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,WYn),YYn),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),Tit),gMt),yit),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,VYn),YYn),"Fill Polyominoes"),"Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area."),(hN(),!0)),wMt),ktt),nbn(hMt))))},vX(GYn,"PolyominoOptions",853),wAn(250,22,{3:1,35:1,22:1,250:1},HS);var Fit,Bit=Ben(GYn,"TraversalStrategy",250,Unt,Tin,w_);wAn(213,1,{213:1},kn),MWn.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},MWn.a=1,MWn.b=0,MWn.c=0,MWn.f=!1,MWn.g=0;var Hit=vX(JYn,"NEdge",213);wAn(176,1,{},Hv),vX(JYn,"NEdge/NEdgeBuilder",176),wAn(653,1,{},Fv),vX(JYn,"NGraph",653),wAn(121,1,{121:1},k6),MWn.c=-1,MWn.d=0,MWn.e=0,MWn.i=-1,MWn.j=!1;var qit=vX(JYn,"NNode",121);wAn(795,1,JQn,Bv),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Vc=function(n,t){++this.b,kG(this.a,n,t)},MWn.Fc=function(n){return RN(this,n)},MWn.Wc=function(n,t){return++this.b,ohn(this.a,n,t)},MWn.Gc=function(n){return++this.b,gun(this.a,n)},MWn.$b=function(){++this.b,this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Xb=function(n){return xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return L9(new Wb(this.a))},MWn.Yc=function(){throw Hp(new pv)},MWn.Zc=function(n){throw Hp(new pv)},MWn.$c=function(n){return++this.b,s6(this.a,n)},MWn.Mc=function(n){return KN(this,n)},MWn._c=function(n,t){return++this.b,c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.b=0,vX(JYn,"NNode/ChangeAwareArrayList",795),wAn(269,1,{},qv),vX(JYn,"NNode/NNodeBuilder",269),wAn(1630,1,{},jn),MWn.a=!1,MWn.f=DWn,MWn.j=0,vX(JYn,"NetworkSimplex",1630),wAn(1294,1,lVn,Sw),MWn.td=function(n){qzn(this.a,BB(n,680),!0,!1)},vX(nJn,"NodeLabelAndSizeCalculator/lambda$0$Type",1294),wAn(558,1,{},Pw),MWn.b=!0,MWn.c=!0,MWn.d=!0,MWn.e=!0,vX(nJn,"NodeMarginCalculator",558),wAn(212,1,{212:1}),MWn.j=!1,MWn.k=!1;var Git,zit,Uit,Xit=vX(tJn,"Cell",212);wAn(124,212,{124:1,212:1},FR),MWn.Re=function(){return XH(this)},MWn.Se=function(){var n;return n=this.n,this.a.a+n.b+n.c},vX(tJn,"AtomicCell",124),wAn(232,22,{3:1,35:1,22:1,232:1},qS);var Wit,Vit=Ben(tJn,"ContainerArea",232,Unt,v1,d_);wAn(326,212,iJn),vX(tJn,"ContainerCell",326),wAn(1473,326,iJn,Hwn),MWn.Re=function(){var n;return n=0,this.e?this.b?n=this.b.b:this.a[1][1]&&(n=this.a[1][1].Re()):n=Ybn(this,Umn(this,!0)),n>0?n+this.n.d+this.n.a:0},MWn.Se=function(){var n,t,i,r,c;if(c=0,this.e)this.b?c=this.b.a:this.a[1][1]&&(c=this.a[1][1].Se());else if(this.g)c=Ybn(this,Okn(this,null,!0));else for(Dtn(),i=0,r=(t=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)n=t[i],c=e.Math.max(c,Ybn(this,Okn(this,n,!0)));return c>0?c+this.n.b+this.n.c:0},MWn.Te=function(){var n,t,e,i,r;if(this.g)for(n=Okn(this,null,!1),Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n);else for(Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n=Okn(this,t,!1))},MWn.Ue=function(){var n,t,i,r;t=this.i,n=this.n,r=Umn(this,!1),Q5(this,(Dtn(),Git),t.d+n.d,r),Q5(this,Uit,t.d+t.a-n.a-r[2],r),i=t.a-n.d-n.a,r[0]>0&&(r[0]+=this.d,i-=r[0]),r[2]>0&&(r[2]+=this.d,i-=r[2]),this.c.a=e.Math.max(0,i),this.c.d=t.d+n.d+(this.c.a-i)/2,r[1]=e.Math.max(r[1],i),Q5(this,zit,t.d+n.d+r[0]-(r[1]-i)/2,r)},MWn.b=null,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=!1;var Qit,Yit,Jit,Zit=0,nrt=0;vX(tJn,"GridContainerCell",1473),wAn(461,22,{3:1,35:1,22:1,461:1},GS);var trt,ert=Ben(tJn,"HorizontalLabelAlignment",461,Unt,m1,g_);wAn(306,212,{212:1,306:1},yJ,wtn,KY),MWn.Re=function(){return WH(this)},MWn.Se=function(){return VH(this)},MWn.a=0,MWn.c=!1;var irt,rrt,crt,art=vX(tJn,"LabelCell",306);wAn(244,326,{212:1,326:1,244:1},Ign),MWn.Re=function(){return MIn(this)},MWn.Se=function(){return SIn(this)},MWn.Te=function(){_Fn(this)},MWn.Ue=function(){GFn(this)},MWn.b=0,MWn.c=0,MWn.d=!1,vX(tJn,"StripContainerCell",244),wAn(1626,1,DVn,En),MWn.Mb=function(n){return Qy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$0$Type",1626),wAn(1627,1,{},Tn),MWn.Fe=function(n){return BB(n,212).Se()},vX(tJn,"StripContainerCell/lambda$1$Type",1627),wAn(1628,1,DVn,Mn),MWn.Mb=function(n){return Yy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$2$Type",1628),wAn(1629,1,{},Sn),MWn.Fe=function(n){return BB(n,212).Re()},vX(tJn,"StripContainerCell/lambda$3$Type",1629),wAn(462,22,{3:1,35:1,22:1,462:1},zS);var urt,ort,srt,hrt,frt,lrt,brt,wrt,drt,grt,prt,vrt,mrt,yrt,krt,jrt,Ert,Trt,Mrt,Srt,Prt,Crt,Irt,Ort=Ben(tJn,"VerticalLabelAlignment",462,Unt,y1,p_);wAn(789,1,{},eUn),MWn.c=0,MWn.d=0,MWn.k=0,MWn.s=0,MWn.t=0,MWn.v=!1,MWn.w=0,MWn.D=!1,vX(sJn,"NodeContext",789),wAn(1471,1,MYn,Pn),MWn.ue=function(n,t){return YO(BB(n,61),BB(t,61))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/0methodref$comparePortSides$Type",1471),wAn(1472,1,MYn,Cn),MWn.ue=function(n,t){return UTn(BB(n,111),BB(t,111))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/1methodref$comparePortContexts$Type",1472),wAn(159,22,{3:1,35:1,22:1,159:1},ocn);var Art,$rt,Lrt,Nrt,xrt,Drt,Rrt,Krt=Ben(sJn,"NodeLabelLocation",159,Unt,tpn,v_);wAn(111,1,{111:1},MOn),MWn.a=!1,vX(sJn,"PortContext",111),wAn(1476,1,lVn,In),MWn.td=function(n){CE(BB(n,306))},vX(lJn,bJn,1476),wAn(1477,1,DVn,On),MWn.Mb=function(n){return!!BB(n,111).c},vX(lJn,wJn,1477),wAn(1478,1,lVn,An),MWn.td=function(n){CE(BB(n,111).c)},vX(lJn,"LabelPlacer/lambda$2$Type",1478),wAn(1475,1,lVn,Ln),MWn.td=function(n){qD(),Yp(BB(n,111))},vX(lJn,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),wAn(790,1,lVn,$_),MWn.td=function(n){RM(this.b,this.c,this.a,BB(n,181))},MWn.a=!1,MWn.c=!1,vX(lJn,"NodeLabelCellCreator/lambda$0$Type",790),wAn(1474,1,lVn,Cw),MWn.td=function(n){Iv(this.a,BB(n,181))},vX(lJn,"PortContextCreator/lambda$0$Type",1474),wAn(1829,1,{},Nn),vX(gJn,"GreedyRectangleStripOverlapRemover",1829),wAn(1830,1,MYn,$n),MWn.ue=function(n,t){return FN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),wAn(1786,1,{},Zv),MWn.a=5,MWn.e=0,vX(gJn,"RectangleStripOverlapRemover",1786),wAn(1787,1,MYn,Dn),MWn.ue=function(n,t){return BN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),wAn(1789,1,MYn,Rn),MWn.ue=function(n,t){return JU(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),wAn(406,22,{3:1,35:1,22:1,406:1},US);var _rt,Frt,Brt,Hrt,qrt,Grt=Ben(gJn,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Unt,Y2,m_);wAn(222,1,{222:1},xG),vX(gJn,"RectangleStripOverlapRemover/RectangleNode",222),wAn(1788,1,lVn,Iw),MWn.td=function(n){Cmn(this.a,BB(n,222))},vX(gJn,"RectangleStripOverlapRemover/lambda$1$Type",1788),wAn(1304,1,MYn,Kn),MWn.ue=function(n,t){return zHn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),wAn(1307,1,{},_n),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),wAn(1308,1,DVn,Fn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),wAn(1309,1,DVn,Bn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),wAn(1302,1,MYn,Hn),MWn.ue=function(n,t){return WRn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),wAn(1305,1,{},xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),wAn(767,1,MYn,qn),MWn.ue=function(n,t){return Uan(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionsComparator",767),wAn(1300,1,MYn,Gn),MWn.ue=function(n,t){return Qin(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparator",1300),wAn(1301,1,MYn,zn),MWn.ue=function(n,t){return avn(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),wAn(1303,1,MYn,Un),MWn.ue=function(n,t){return BKn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),wAn(1306,1,{},Xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),wAn(777,1,{},DS),MWn.Ce=function(n,t){return O2(this,BB(n,46),BB(t,167))},vX(vJn,"SuccessorCombination",777),wAn(644,1,{},Wn),MWn.Ce=function(n,t){var e;return XIn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorJitter",644),wAn(643,1,{},Vn),MWn.Ce=function(n,t){var e;return bxn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorLineByLine",643),wAn(568,1,{},Qn),MWn.Ce=function(n,t){var e;return f$n((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorManhattan",568),wAn(1356,1,{},Yn),MWn.Ce=function(n,t){var e;return jNn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorMaxNormWindingInMathPosSense",1356),wAn(400,1,{},Ow),MWn.Ce=function(n,t){return BU(this,n,t)},MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=!1,vX(vJn,"SuccessorQuadrantsGeneric",400),wAn(1357,1,{},Jn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),wAn(323,22,{3:1,35:1,22:1,323:1},_S),MWn.a=!1;var zrt,Urt=Ben(EJn,TJn,323,Unt,n3,y_);wAn(1298,1,{}),MWn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=iln(0),r=0;r<this.o;r++)e+=""+n.a,n=iln(lR(n.a));for(e+="\n",n=iln(0),c=0;c<this.p;c++){for(e+=""+n.a,n=iln(lR(n.a)),i=0;i<this.o;i++)0==Vhn(t=trn(this,i,c),0)?e+="_":0==Vhn(t,1)?e+="X":e+="0";e+="\n"}return fx(e,0,e.length-1)},MWn.o=0,MWn.p=0,vX(EJn,"TwoBitGrid",1298),wAn(321,1298,{321:1},qwn),MWn.j=0,MWn.k=0,vX(EJn,"PlanarGrid",321),wAn(167,321,{321:1,167:1}),MWn.g=0,MWn.i=0,vX(EJn,"Polyomino",167);var Xrt=bq(IJn,OJn);wAn(134,1,AJn,Zn),MWn.Ye=function(n,t){return son(this,n,t)},MWn.Ve=function(){return Gq(this)},MWn.We=function(n){return mMn(this,n)},MWn.Xe=function(n){return Lx(this,n)},vX(IJn,"MapPropertyHolder",134),wAn(1299,134,AJn,yxn),vX(EJn,"Polyominoes",1299);var Wrt,Vrt,Qrt,Yrt,Jrt,Zrt,nct,tct,ect=!1;wAn(1766,1,lVn,nt),MWn.td=function(n){uqn(BB(n,221))},vX($Jn,"DepthFirstCompaction/0methodref$compactTree$Type",1766),wAn(810,1,lVn,Aw),MWn.td=function(n){KW(this.a,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$1$Type",810),wAn(1767,1,lVn,N_),MWn.td=function(n){dgn(this.a,this.b,this.c,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$2$Type",1767),wAn(65,1,{65:1},AZ),vX($Jn,"Node",65),wAn(1250,1,{},I$),vX($Jn,"ScanlineOverlapCheck",1250),wAn(1251,1,{679:1},hY),MWn.Ke=function(n){GD(this,BB(n,440))},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler",1251),wAn(1252,1,MYn,tt),MWn.ue=function(n,t){return xln(BB(n,65),BB(t,65))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1252),wAn(440,1,{440:1},RS),MWn.a=!1,vX($Jn,"ScanlineOverlapCheck/Timestamp",440),wAn(1253,1,MYn,et),MWn.ue=function(n,t){return Zkn(BB(n,440),BB(t,440))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/lambda$0$Type",1253),wAn(550,1,{},it),vX(LJn,"SVGImage",550),wAn(324,1,{324:1},x_),MWn.Ib=function(){return"("+this.a+FWn+this.b+FWn+this.c+")"},vX(LJn,"UniqueTriple",324),wAn(209,1,NJn),vX(xJn,"AbstractLayoutProvider",209),wAn(1132,209,NJn,rt),MWn.Ze=function(n,t){var e,i,r;OTn(t,DJn,1),this.a=Gy(MD(ZAn(n,(Epn(),Ect)))),P8(n,bct)&&(i=SD(ZAn(n,bct)),(e=XRn(cin(),i))&&BB(sJ(e.f),209).Ze(n,mcn(t,1))),r=new s4(this.a),this.b=Rzn(r,n),0===BB(ZAn(n,(Gsn(),oct)),481).g?(BOn(new ct,this.b),Ypn(n,gct,mMn(this.b,gct))):$T(),Uzn(r),Ypn(n,dct,this.b),HSn(t)},MWn.a=0,vX(RJn,"DisCoLayoutProvider",1132),wAn(1244,1,{},ct),MWn.c=!1,MWn.e=0,MWn.f=0,vX(RJn,"DisCoPolyominoCompactor",1244),wAn(561,1,{561:1},hG),MWn.b=!0,vX(KJn,"DCComponent",561),wAn(394,22,{3:1,35:1,22:1,394:1},KS),MWn.a=!1;var ict,rct,cct=Ben(KJn,"DCDirection",394,Unt,Z2,k_);wAn(266,134,{3:1,266:1,94:1,134:1},EAn),vX(KJn,"DCElement",266),wAn(395,1,{395:1},Imn),MWn.c=0,vX(KJn,"DCExtension",395),wAn(755,134,AJn,_j),vX(KJn,"DCGraph",755),wAn(481,22,{3:1,35:1,22:1,481:1},Ix);var act,uct,oct,sct,hct,fct,lct,bct,wct,dct,gct,pct,vct,mct,yct,kct,jct,Ect,Tct,Mct,Sct,Pct=Ben(_Jn,FJn,481,Unt,RV,j_);wAn(854,1,QYn,Hh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,BJn),zJn),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),sct),(PPn(),gMt)),Pct),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,HJn),zJn),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),yMt),Qtt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,qJn),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),mMt),Ant),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,GJn),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),mMt),Ant),nbn(hMt)))),BBn((new qh,n))},vX(_Jn,"DisCoMetaDataProvider",854),wAn(998,1,QYn,qh),MWn.Qe=function(n){BBn(n)},vX(_Jn,"DisCoOptions",998),wAn(999,1,{},at),MWn.$e=function(){return new rt},MWn._e=function(n){},vX(_Jn,"DisCoOptions/DiscoFactory",999),wAn(562,167,{321:1,167:1,562:1},Q$n),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX("org.eclipse.elk.alg.disco.structures","DCPolyomino",562),wAn(1268,1,DVn,ut),MWn.Mb=function(n){return TO(n)},vX(YJn,"ElkGraphComponentsProcessor/lambda$0$Type",1268),wAn(1269,1,{},ot),MWn.Kb=function(n){return MQ(),PMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$1$Type",1269),wAn(1270,1,DVn,st),MWn.Mb=function(n){return qH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$2$Type",1270),wAn(1271,1,{},ht),MWn.Kb=function(n){return MQ(),OMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$3$Type",1271),wAn(1272,1,DVn,ft),MWn.Mb=function(n){return GH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$4$Type",1272),wAn(1273,1,DVn,$w),MWn.Mb=function(n){return MJ(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$5$Type",1273),wAn(1274,1,{},Lw),MWn.Kb=function(n){return KX(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$6$Type",1274),wAn(1241,1,{},s4),MWn.a=0,vX(YJn,"ElkGraphTransformer",1241),wAn(1242,1,{},lt),MWn.Od=function(n,t){tOn(this,BB(n,160),BB(t,266))},vX(YJn,"ElkGraphTransformer/OffsetApplier",1242),wAn(1243,1,lVn,Nw),MWn.td=function(n){TL(this,BB(n,8))},vX(YJn,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1243),wAn(753,1,{},bt),vX(eZn,iZn,753),wAn(1232,1,MYn,wt),MWn.ue=function(n,t){return CIn(BB(n,231),BB(t,231))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(eZn,rZn,1232),wAn(740,209,NJn,Gv),MWn.Ze=function(n,t){vLn(this,n,t)},vX(eZn,"ForceLayoutProvider",740),wAn(357,134,{3:1,357:1,94:1,134:1}),vX(cZn,"FParticle",357),wAn(559,357,{3:1,559:1,357:1,94:1,134:1},hX),MWn.Ib=function(){var n;return this.a?(n=E7(this.a.a,this,0))>=0?"b"+n+"["+u5(this.a)+"]":"b["+u5(this.a)+"]":"b_"+PN(this)},vX(cZn,"FBendpoint",559),wAn(282,134,{3:1,282:1,94:1,134:1},IR),MWn.Ib=function(){return u5(this)},vX(cZn,"FEdge",282),wAn(231,134,{3:1,231:1,94:1,134:1},y6);var Cct,Ict,Oct,Act,$ct,Lct,Nct,xct,Dct,Rct,Kct=vX(cZn,"FGraph",231);wAn(447,357,{3:1,447:1,357:1,94:1,134:1},m4),MWn.Ib=function(){return null==this.b||0==this.b.length?"l["+u5(this.a)+"]":"l_"+this.b},vX(cZn,"FLabel",447),wAn(144,357,{3:1,144:1,357:1,94:1,134:1},qX),MWn.Ib=function(){return p0(this)},MWn.b=0,vX(cZn,"FNode",144),wAn(2003,1,{}),MWn.bf=function(n){sFn(this,n)},MWn.cf=function(){qmn(this)},MWn.d=0,vX(uZn,"AbstractForceModel",2003),wAn(631,2003,{631:1},Lan),MWn.af=function(n,t){var i,r,c,a;return tIn(this.f,n,t),c=XR(B$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-lW(n.e)/2-lW(t.e)/2),kL(c,((i=qon(this.e,n,t))>0?-_U(r,this.c)*i:xx(r,this.b)*BB(mMn(n,(fRn(),Zct)),19).a)/a),c},MWn.bf=function(n){sFn(this,n),this.a=BB(mMn(n,(fRn(),qct)),19).a,this.c=Gy(MD(mMn(n,cat))),this.b=Gy(MD(mMn(n,tat)))},MWn.df=function(n){return n<this.a},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"EadesModel",631),wAn(632,2003,{632:1},fH),MWn.af=function(n,t){var i,r,c,a,u;return tIn(this.f,n,t),c=XR(B$(t.d),n.d),u=e.Math.sqrt(c.a*c.a+c.b*c.b),a=Nx(r=e.Math.max(0,u-lW(n.e)/2-lW(t.e)/2),this.a)*BB(mMn(n,(fRn(),Zct)),19).a,(i=qon(this.e,n,t))>0&&(a-=Sy(r,this.a)*i),kL(c,a*this.b/u),c},MWn.bf=function(n){var t,i,r,c,a,u,o;for(sFn(this,n),this.b=Gy(MD(mMn(n,(fRn(),aat)))),this.c=this.b/BB(mMn(n,qct),19).a,r=n.e.c.length,a=0,c=0,o=new Wb(n.e);o.a<o.c.c.length;)a+=(u=BB(n0(o),144)).e.a,c+=u.e.b;t=a*c,i=Gy(MD(mMn(n,cat)))*fJn,this.a=e.Math.sqrt(t/(2*r))*i},MWn.cf=function(){qmn(this),this.b-=this.c},MWn.df=function(n){return this.b>0},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"FruchtermanReingoldModel",632),wAn(849,1,QYn,zh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,oZn),""),"Force Model"),"Determines the model for force calculation."),Oct),(PPn(),gMt)),$at),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,sZn),""),"Iterations"),"The number of iterations on the force model."),iln(300)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,hZn),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,fZn),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),lZn),dMt),Ptt),nbn(hMt)))),a2(n,fZn,oZn,xct),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,bZn),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dMt),Ptt),nbn(hMt)))),a2(n,bZn,oZn,$ct),pUn((new Uh,n))},vX(wZn,"ForceMetaDataProvider",849),wAn(424,22,{3:1,35:1,22:1,424:1},XS);var _ct,Fct,Bct,Hct,qct,Gct,zct,Uct,Xct,Wct,Vct,Qct,Yct,Jct,Zct,nat,tat,eat,iat,rat,cat,aat,uat,oat,sat,hat,fat,lat,bat,wat,dat,gat,pat,vat,mat,yat,kat,jat,Eat,Tat,Mat,Sat,Pat,Cat,Iat,Oat,Aat,$at=Ben(wZn,"ForceModelStrategy",424,Unt,aJ,E_);wAn(988,1,QYn,Uh),MWn.Qe=function(n){pUn(n)},vX(wZn,"ForceOptions",988),wAn(989,1,{},dt),MWn.$e=function(){return new Gv},MWn._e=function(n){},vX(wZn,"ForceOptions/ForceFactory",989),wAn(850,1,QYn,Xh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,NZn),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(hN(),!1)),(PPn(),wMt)),ktt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,xZn),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,DZn),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),bat),gMt),Hat),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,RZn),""),"Stress Epsilon"),"Termination criterion for the iterative process."),lZn),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,KZn),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),iln(DWn)),vMt),Att),nbn(hMt)))),UGn((new Wh,n))},vX(wZn,"StressMetaDataProvider",850),wAn(992,1,QYn,Wh),MWn.Qe=function(n){UGn(n)},vX(wZn,"StressOptions",992),wAn(993,1,{},gt),MWn.$e=function(){return new OR},MWn._e=function(n){},vX(wZn,"StressOptions/StressFactory",993),wAn(1128,209,NJn,OR),MWn.Ze=function(n,t){var e,i,r,c;for(OTn(t,FZn,1),qy(TD(ZAn(n,(rkn(),kat))))?qy(TD(ZAn(n,Pat)))||jJ(new Tw((GM(),new Dy(n)))):vLn(new Gv,n,mcn(t,1)),i=fon(n),c=(e=HFn(this.a,i)).Kc();c.Ob();)(r=BB(c.Pb(),231)).e.c.length<=1||(HHn(this.b,r),i$n(this.b),Otn(r.d,new pt));SUn(i=GUn(e)),HSn(t)},vX(HZn,"StressLayoutProvider",1128),wAn(1129,1,lVn,pt),MWn.td=function(n){_Bn(BB(n,447))},vX(HZn,"StressLayoutProvider/lambda$0$Type",1129),wAn(990,1,{},Tv),MWn.c=0,MWn.e=0,MWn.g=0,vX(HZn,"StressMajorization",990),wAn(379,22,{3:1,35:1,22:1,379:1},WS);var Lat,Nat,xat,Dat,Rat,Kat,_at,Fat,Bat,Hat=Ben(HZn,"StressMajorization/Dimension",379,Unt,j1,T_);wAn(991,1,MYn,xw),MWn.ue=function(n,t){return SK(this.a,BB(n,144),BB(t,144))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(HZn,"StressMajorization/lambda$0$Type",991),wAn(1229,1,{},D0),vX(GZn,"ElkLayered",1229),wAn(1230,1,lVn,vt),MWn.td=function(n){RIn(BB(n,37))},vX(GZn,"ElkLayered/lambda$0$Type",1230),wAn(1231,1,lVn,Dw),MWn.td=function(n){PK(this.a,BB(n,37))},vX(GZn,"ElkLayered/lambda$1$Type",1231),wAn(1263,1,{},$$),vX(GZn,"GraphConfigurator",1263),wAn(759,1,lVn,Rw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$0$Type",759),wAn(760,1,{},mt),MWn.Kb=function(n){return tjn(),new Rq(null,new w1(BB(n,29).a,16))},vX(GZn,"GraphConfigurator/lambda$1$Type",760),wAn(761,1,lVn,Kw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$2$Type",761),wAn(1127,209,NJn,Uv),MWn.Ze=function(n,t){var e;e=SBn(new tm,n),GI(ZAn(n,(HXn(),sgt)))===GI((ufn(),pCt))?rwn(this.a,e,t):wOn(this.a,e,t),gUn(new Qh,e)},vX(GZn,"LayeredLayoutProvider",1127),wAn(356,22,{3:1,35:1,22:1,356:1},VS);var qat,Gat,zat,Uat=Ben(GZn,"LayeredPhases",356,Unt,s5,M_);wAn(1651,1,{},vin),MWn.i=0,vX(zZn,"ComponentsToCGraphTransformer",1651),wAn(1652,1,{},yt),MWn.ef=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(zZn,"ComponentsToCGraphTransformer/1",1652),wAn(81,1,{81:1}),MWn.i=0,MWn.k=!0,MWn.o=KQn;var Xat,Wat,Vat,Qat=vX(UZn,"CNode",81);wAn(460,81,{460:1,81:1},NN,Sgn),MWn.Ib=function(){return""},vX(zZn,"ComponentsToCGraphTransformer/CRectNode",460),wAn(1623,1,{},kt),vX(zZn,"OneDimensionalComponentsCompaction",1623),wAn(1624,1,{},jt),MWn.Kb=function(n){return xZ(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),wAn(1625,1,{},Et),MWn.Kb=function(n){return Ewn(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),wAn(1654,1,{},BX),vX(UZn,"CGraph",1654),wAn(189,1,{189:1},Pgn),MWn.b=0,MWn.c=0,MWn.e=0,MWn.g=!0,MWn.i=KQn,vX(UZn,"CGroup",189),wAn(1653,1,{},Pt),MWn.ef=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(UZn,OYn,1653),wAn(1655,1,{},sOn),MWn.d=!1;var Yat=vX(UZn,xYn,1655);wAn(1656,1,{},Ct),MWn.Kb=function(n){return kM(),hN(),0!=BB(BB(n,46).a,81).d.e},MWn.Fb=function(n){return this===n},vX(UZn,DYn,1656),wAn(823,1,{},Sq),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(UZn,RYn,823),wAn(1825,1,{},DG),vX(XZn,KYn,1825);var Jat=bq(WZn,PYn);wAn(1826,1,{369:1},lY),MWn.Ke=function(n){Gxn(this,BB(n,466))},vX(XZn,_Yn,1826),wAn(1827,1,MYn,It),MWn.ue=function(n,t){return oQ(BB(n,81),BB(t,81))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,FYn,1827),wAn(466,1,{466:1},fP),MWn.a=!1,vX(XZn,BYn,466),wAn(1828,1,MYn,Ot),MWn.ue=function(n,t){return njn(BB(n,466),BB(t,466))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,HYn,1828),wAn(140,1,{140:1},dP,mH),MWn.Fb=function(n){var t;return null!=n&&iut==tsn(n)&&(t=BB(n,140),cV(this.c,t.c)&&cV(this.d,t.d))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d]))},MWn.Ib=function(){return"("+this.c+FWn+this.d+(this.a?"cx":"")+this.b+")"},MWn.a=!0,MWn.c=0,MWn.d=0;var Zat,nut,tut,eut,iut=vX(WZn,"Point",140);wAn(405,22,{3:1,35:1,22:1,405:1},QS);var rut,cut,aut,uut,out,sut,hut,fut,lut,but,wut,dut=Ben(WZn,"Point/Quadrant",405,Unt,t3,S_);wAn(1642,1,{},Vv),MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,MWn.f=null,vX(WZn,"RectilinearConvexHull",1642),wAn(574,1,{369:1},Tpn),MWn.Ke=function(n){_9(this,BB(n,140))},MWn.b=0,vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler",574),wAn(1644,1,MYn,Mt),MWn.ue=function(n,t){return DV(MD(n),MD(t))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),wAn(1643,1,{369:1},ftn),MWn.Ke=function(n){PNn(this,BB(n,140))},MWn.a=0,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(WZn,"RectilinearConvexHull/RectangleEventHandler",1643),wAn(1645,1,MYn,St),MWn.ue=function(n,t){return u0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$0$Type",1645),wAn(1646,1,MYn,Tt),MWn.ue=function(n,t){return o0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$1$Type",1646),wAn(1647,1,MYn,At),MWn.ue=function(n,t){return h0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$2$Type",1647),wAn(1648,1,MYn,$t),MWn.ue=function(n,t){return s0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$3$Type",1648),wAn(1649,1,MYn,Lt),MWn.ue=function(n,t){return jMn(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$4$Type",1649),wAn(1650,1,{},OZ),vX(WZn,"Scanline",1650),wAn(2005,1,{}),vX(VZn,"AbstractGraphPlacer",2005),wAn(325,1,{325:1},Xx),MWn.mf=function(n){return!!this.nf(n)&&(JIn(this.b,BB(mMn(n,(hWn(),Xft)),21),n),!0)},MWn.nf=function(n){var t,e,i;for(t=BB(mMn(n,(hWn(),Xft)),21),i=BB(h6(fut,t),21).Kc();i.Ob();)if(e=BB(i.Pb(),21),!BB(h6(this.b,e),15).dc())return!1;return!0},vX(VZn,"ComponentGroup",325),wAn(765,2005,{},Qv),MWn.of=function(n){var t;for(t=new Wb(this.a);t.a<t.c.c.length;)if(BB(n0(t),325).mf(n))return;WB(this.a,new Xx(n))},MWn.lf=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)i=BB(r.Pb(),37),this.of(i);for(w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;)h=TXn(u=BB(n0(s),325),c),w9(TX(u.b),w.a,w.b),w.a+=h.a,w.b+=h.b;if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GI(mMn(a,Zdt))===GI((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(e=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),e.e);UR(kO(t.f),e.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupGraphPlacer",765),wAn(1293,765,{},hm),MWn.of=function(n){pfn(this,n)},MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)pfn(this,BB(r.Pb(),37));for(v=new Gj,p=new Gj,d=new Gj,w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;){if(u=BB(n0(s),325),dA(BB(mMn(t,(sWn(),bSt)),103))){for(d.a=v.a,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),sIt))){d.a=p.a;break}}else if(gA(BB(mMn(t,bSt),103)))for(d.b=v.b,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),CIt))){d.b=p.b;break}if(h=TXn(BB(u,570),c),w9(TX(u.b),d.a,d.b),dA(BB(mMn(t,bSt),103))){for(p.a=d.a+h.a,w.a=e.Math.max(w.a,p.a),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),SIt))){v.a=d.a+h.a;break}p.b=d.b+h.b,d.b=p.b,w.b=e.Math.max(w.b,d.b)}else if(gA(BB(mMn(t,bSt),103))){for(p.b=d.b+h.b,w.b=e.Math.max(w.b,p.b),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),oIt))){v.b=d.b+h.b;break}p.a=d.a+h.a,d.a=p.a,w.a=e.Math.max(w.a,d.a)}}if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GI(mMn(a,Zdt))===GI((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(i=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),i.e);UR(kO(t.f),i.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupModelOrderGraphPlacer",1293),wAn(423,22,{3:1,35:1,22:1,423:1},YS);var gut,put,vut,mut=Ben(VZn,"ComponentOrderingStrategy",423,Unt,k1,P_);wAn(650,1,{},Nt),vX(VZn,"ComponentsCompactor",650),wAn(1468,12,QQn,v5),MWn.Fc=function(n){return Yjn(this,BB(n,140))},vX(VZn,"ComponentsCompactor/Hullpoints",1468),wAn(1465,1,{841:1},hvn),MWn.a=!1,vX(VZn,"ComponentsCompactor/InternalComponent",1465),wAn(1464,1,pVn,Yv),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},vX(VZn,"ComponentsCompactor/InternalConnectedComponents",1464),wAn(1467,1,{594:1},dOn),MWn.hf=function(){return null},MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalExternalExtension",1467),wAn(1466,1,{594:1},nm),MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.hf=function(){return this.c},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalUnionExternalExtension",1466),wAn(1470,1,{},Qxn),vX(VZn,"ComponentsCompactor/OuterSegments",1470),wAn(1469,1,{},Jv),vX(VZn,"ComponentsCompactor/Segments",1469),wAn(1264,1,{},bY),vX(VZn,iZn,1264),wAn(1265,1,MYn,xt),MWn.ue=function(n,t){return b0(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"ComponentsProcessor/lambda$0$Type",1265),wAn(570,325,{325:1,570:1},p5),MWn.mf=function(n){return dsn(this,n)},MWn.nf=function(n){return bNn(this,n)},vX(VZn,"ModelOrderComponentGroup",570),wAn(1291,2005,{},Dt),MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;if(1!=n.gc()){if(n.dc())return t.a.c=x8(Ant,HWn,1,0,5,1),t.f.a=0,void(t.f.b=0);if(GI(mMn(t,(HXn(),Cdt)))===GI((Bfn(),wut))){for(s=n.Kc();s.Ob();){for(p=0,d=new Wb((u=BB(s.Pb(),37)).a);d.a<d.c.c.length;)w=BB(n0(d),10),p+=BB(mMn(w,hpt),19).a;u.p=p}SQ(),n.ad(new Rt)}for(a=BB(n.Xb(0),37),t.a.c=x8(Ant,HWn,1,0,5,1),qan(t,a),b=0,y=0,h=n.Kc();h.Ob();)v=(u=BB(h.Pb(),37)).f,b=e.Math.max(b,v.a),y+=v.a*v.b;for(b=e.Math.max(b,e.Math.sqrt(y)*Gy(MD(mMn(t,Edt)))),k=0,j=0,l=0,i=c=Gy(MD(mMn(t,mpt))),o=n.Kc();o.Ob();)k+(v=(u=BB(o.Pb(),37)).f).a>b&&(k=0,j+=l+c,l=0),ZRn(u,k+(g=u.c).a,j+g.b),kO(g),i=e.Math.max(i,k+v.a),l=e.Math.max(l,v.b),k+=v.a+c;if(t.f.a=i,t.f.b=j+l,qy(TD(mMn(a,Mdt)))){for(KXn(r=new Nt,n,c),f=n.Kc();f.Ob();)UR(kO(BB(f.Pb(),37).c),r.e);UR(kO(t.f),r.a)}d9(t,n)}else(m=BB(n.Xb(0),37))!=t&&(t.a.c=x8(Ant,HWn,1,0,5,1),$Kn(t,m,0,0),qan(t,m),kQ(t.d,m.d),t.f.a=m.f.a,t.f.b=m.f.b)},vX(VZn,"SimpleRowGraphPlacer",1291),wAn(1292,1,MYn,Rt),MWn.ue=function(n,t){return zan(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"SimpleRowGraphPlacer/1",1292),wAn(1262,1,qYn,Kt),MWn.Lb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},vX(ZZn,"CompoundGraphPostprocessor/1",1262),wAn(1261,1,n1n,em),MWn.pf=function(n,t){mvn(this,BB(n,37),t)},vX(ZZn,"CompoundGraphPreprocessor",1261),wAn(441,1,{441:1},zfn),MWn.c=!1,vX(ZZn,"CompoundGraphPreprocessor/ExternalPort",441),wAn(243,1,{243:1},L_),MWn.Ib=function(){return dx(this.c)+":"+OIn(this.b)},vX(ZZn,"CrossHierarchyEdge",243),wAn(763,1,MYn,_w),MWn.ue=function(n,t){return Vyn(this,BB(n,243),BB(t,243))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(ZZn,"CrossHierarchyEdgeComparator",763),wAn(299,134,{3:1,299:1,94:1,134:1}),MWn.p=0,vX(t1n,"LGraphElement",299),wAn(17,299,{3:1,17:1,299:1,94:1,134:1},wY),MWn.Ib=function(){return OIn(this)};var yut=vX(t1n,"LEdge",17);wAn(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},min),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.b)},MWn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+LMn(this.a):0==this.a.c.length?"G-layered"+LMn(this.b):"G[layerless"+LMn(this.a)+", layers"+LMn(this.b)+"]"};var kut,jut=vX(t1n,"LGraph",37);wAn(657,1,{}),MWn.qf=function(){return this.e.n},MWn.We=function(n){return mMn(this.e,n)},MWn.rf=function(){return this.e.o},MWn.sf=function(){return this.e.p},MWn.Xe=function(n){return Lx(this.e,n)},MWn.tf=function(n){this.e.n.a=n.a,this.e.n.b=n.b},MWn.uf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},MWn.vf=function(n){this.e.p=n},vX(t1n,"LGraphAdapters/AbstractLShapeAdapter",657),wAn(577,1,{839:1},Fw),MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(this.a.b.c.length),t=new Wb(this.a.b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.b=null,vX(t1n,"LGraphAdapters/LEdgeAdapter",577),wAn(656,1,{},HV),MWn.xf=function(){var n,t,e,i,r;if(!this.b)for(this.b=new Np,e=new Wb(this.a.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),this.c.Mb(i)&&(WB(this.b,new __(this,i,this.e)),this.d)){if(Lx(i,(hWn(),Klt)))for(t=BB(mMn(i,Klt),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1));if(Lx(i,Dft))for(t=BB(mMn(i,Dft),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1))}return this.b},MWn.qf=function(){throw Hp(new tk(i1n))},MWn.We=function(n){return mMn(this.a,n)},MWn.rf=function(){return this.a.f},MWn.sf=function(){return this.a.p},MWn.Xe=function(n){return Lx(this.a,n)},MWn.tf=function(n){throw Hp(new tk(i1n))},MWn.uf=function(n){this.a.f.a=n.a,this.a.f.b=n.b},MWn.vf=function(n){this.a.p=n},MWn.b=null,MWn.d=!1,MWn.e=!1,vX(t1n,"LGraphAdapters/LGraphAdapter",656),wAn(576,657,{181:1},Bw),vX(t1n,"LGraphAdapters/LLabelAdapter",576),wAn(575,657,{680:1},__),MWn.yf=function(){return this.b},MWn.zf=function(){return SQ(),SQ(),set},MWn.wf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.e,10).b.c.length),t=new Wb(BB(this.e,10).b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.a,new Bw(n));return this.a},MWn.Af=function(){var n;return new HR((n=BB(this.e,10).d).d,n.c,n.a,n.b)},MWn.Bf=function(){return SQ(),SQ(),set},MWn.Cf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.e,10).j.c.length),t=new Wb(BB(this.e,10).j);t.a<t.c.c.length;)n=BB(n0(t),11),WB(this.c,new gP(n,this.d));return this.c},MWn.Df=function(){return qy(TD(mMn(BB(this.e,10),(hWn(),_ft))))},MWn.Ef=function(n){BB(this.e,10).d.b=n.b,BB(this.e,10).d.d=n.d,BB(this.e,10).d.c=n.c,BB(this.e,10).d.a=n.a},MWn.Ff=function(n){BB(this.e,10).f.b=n.b,BB(this.e,10).f.d=n.d,BB(this.e,10).f.c=n.c,BB(this.e,10).f.a=n.a},MWn.Gf=function(){Ntn(this,(gM(),kut))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LNodeAdapter",575),wAn(1722,657,{838:1},gP),MWn.zf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Iut))return SQ(),SQ(),set;if(!this.a){for(this.a=new Np,e=new Wb(BB(this.e,11).e);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.a,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(fbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.a,new Fw(n))}return this.a},MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(BB(this.e,11).f.c.length),t=new Wb(BB(this.e,11).f);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.Bf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Iut))return SQ(),SQ(),set;if(!this.c){for(this.c=new Np,e=new Wb(BB(this.e,11).g);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.c,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(lbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.c,new Fw(n))}return this.c},MWn.Hf=function(){return BB(this.e,11).j},MWn.If=function(){return qy(TD(mMn(BB(this.e,11),(hWn(),elt))))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LPortAdapter",1722),wAn(1723,1,MYn,_t),MWn.ue=function(n,t){return WDn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t1n,"LGraphAdapters/PortComparator",1723),wAn(804,1,DVn,Ft),MWn.Mb=function(n){return BB(n,10),gM(),!0},vX(t1n,"LGraphAdapters/lambda$0$Type",804),wAn(392,299,{3:1,299:1,392:1,94:1,134:1}),vX(t1n,"LShape",392),wAn(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},qj,O$),MWn.Ib=function(){var n;return null==(n=YH(this))?"label":"l_"+n},vX(t1n,"LLabel",70),wAn(207,1,{3:1,4:1,207:1,414:1}),MWn.Fb=function(n){var t;return!!cL(n,207)&&(t=BB(n,207),this.d==t.d&&this.a==t.a&&this.b==t.b&&this.c==t.c)},MWn.Hb=function(){var n,t;return n=VO(this.b)<<16,n|=VO(this.a)&QVn,t=VO(this.c)<<16,n^(t|=VO(this.d)&QVn)},MWn.Jf=function(n){var t,e,i,r,c,a,u,o,s;for(r=0;r<n.length&&Dhn((b1(r,n.length),n.charCodeAt(r)),o1n);)++r;for(t=n.length;t>0&&Dhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(r<t){o=kKn(n.substr(r,t-r),",|;");try{for(a=0,u=(c=o).length;a<u;++a){if(2!=(i=kKn(c[a],"=")).length)throw Hp(new _y("Expecting a list of key-value pairs."));e=RMn(i[0]),s=bSn(RMn(i[1])),mK(e,"top")?this.d=s:mK(e,"left")?this.b=s:mK(e,"bottom")?this.a=s:mK(e,"right")&&(this.c=s)}}catch(h){throw cL(h=lun(h),127)?Hp(new _y(h1n+h)):Hp(h)}}},MWn.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"Spacing",207),wAn(142,207,l1n,lm,lA,HR,A_);var Eut=vX(f1n,"ElkMargin",142);wAn(651,142,l1n,fm),vX(t1n,"LMargin",651),wAn(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},$vn),MWn.Ib=function(){return $pn(this)},MWn.i=!1;var Tut,Mut,Sut,Put,Cut,Iut,Out=vX(t1n,"LNode",10);wAn(267,22,{3:1,35:1,22:1,267:1},JS);var Aut,$ut=Ben(t1n,"LNode/NodeType",267,Unt,u9,I_);wAn(116,207,b1n,bm,WA,O_);var Lut,Nut,xut,Dut,Rut,Kut,_ut=vX(f1n,"ElkPadding",116);wAn(764,116,b1n,wm),vX(t1n,"LPadding",764),wAn(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},CSn),MWn.Ib=function(){var n,t,e;return oO(((n=new Ck).a+="p_",n),pyn(this)),this.i&&oO(uO((n.a+="[",n),this.i),"]"),1==this.e.c.length&&0==this.g.c.length&&BB(xq(this.e,0),17).c!=this&&(t=BB(xq(this.e,0),17).c,oO((n.a+=" << ",n),pyn(t)),oO(uO((n.a+="[",n),t.i),"]")),0==this.e.c.length&&1==this.g.c.length&&BB(xq(this.g,0),17).d!=this&&(e=BB(xq(this.g,0),17).d,oO((n.a+=" >> ",n),pyn(e)),oO(uO((n.a+="[",n),e.i),"]")),n.a},MWn.c=!0,MWn.d=!1;var Fut,But,Hut,qut,Gut=vX(t1n,"LPort",11);wAn(397,1,pVn,Hw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new qw(new Wb(this.a.e))},vX(t1n,"LPort/1",397),wAn(1290,1,QWn,qw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).c},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/1/1",1290),wAn(359,1,pVn,Gw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new zw(new Wb(this.a.g))},vX(t1n,"LPort/2",359),wAn(762,1,QWn,zw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).d},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/2/1",762),wAn(1283,1,pVn,hP),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new m6(this)},vX(t1n,"LPort/CombineIter",1283),wAn(201,1,QWn,m6),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){uE()},MWn.Ob=function(){return zN(this)},MWn.Pb=function(){return y$(this.a)?n0(this.a):n0(this.b)},vX(t1n,"LPort/CombineIter/1",201),wAn(1285,1,qYn,Bt),MWn.Lb=function(n){return Az(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).e.c.length},vX(t1n,"LPort/lambda$0$Type",1285),wAn(1284,1,qYn,Ht),MWn.Lb=function(n){return $z(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).g.c.length},vX(t1n,"LPort/lambda$1$Type",1284),wAn(1286,1,qYn,qt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),sIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),sIt)},vX(t1n,"LPort/lambda$2$Type",1286),wAn(1287,1,qYn,Gt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),oIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),oIt)},vX(t1n,"LPort/lambda$3$Type",1287),wAn(1288,1,qYn,zt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),SIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),SIt)},vX(t1n,"LPort/lambda$4$Type",1288),wAn(1289,1,qYn,Ut),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),CIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),CIt)},vX(t1n,"LPort/lambda$5$Type",1289),wAn(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},HX),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},MWn.Ib=function(){return"L_"+E7(this.b.b,this,0)+LMn(this.a)},vX(t1n,"Layer",29),wAn(1342,1,{},tm),vX(d1n,g1n,1342),wAn(1346,1,{},Xt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),wAn(1349,1,{},Wt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),wAn(1343,1,lVn,Uw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,p1n,1343),wAn(1344,1,lVn,Xw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,v1n,1344),wAn(1345,1,{},Vt),MWn.Kb=function(n){return new Rq(null,new w1(pV(BB(n,79)),16))},vX(d1n,m1n,1345),wAn(1347,1,DVn,Ww),MWn.Mb=function(n){return _A(this.a,BB(n,33))},vX(d1n,y1n,1347),wAn(1348,1,{},Qt),MWn.Kb=function(n){return new Rq(null,new w1(vV(BB(n,79)),16))},vX(d1n,"ElkGraphImporter/lambda$5$Type",1348),wAn(1350,1,DVn,Vw),MWn.Mb=function(n){return FA(this.a,BB(n,33))},vX(d1n,"ElkGraphImporter/lambda$7$Type",1350),wAn(1351,1,DVn,Yt),MWn.Mb=function(n){return AQ(BB(n,79))},vX(d1n,"ElkGraphImporter/lambda$8$Type",1351),wAn(1278,1,{},Qh),vX(d1n,"ElkGraphLayoutTransferrer",1278),wAn(1279,1,DVn,Qw),MWn.Mb=function(n){return JR(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),wAn(1280,1,lVn,Yw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),wAn(1281,1,DVn,Jw),MWn.Mb=function(n){return UD(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),wAn(1282,1,lVn,Zw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),wAn(1485,1,n1n,Jt),MWn.pf=function(n,t){Vrn(BB(n,37),t)},vX(j1n,"CommentNodeMarginCalculator",1485),wAn(1486,1,{},Zt),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"CommentNodeMarginCalculator/lambda$0$Type",1486),wAn(1487,1,lVn,ne),MWn.td=function(n){tHn(BB(n,10))},vX(j1n,"CommentNodeMarginCalculator/lambda$1$Type",1487),wAn(1488,1,n1n,te),MWn.pf=function(n,t){aDn(BB(n,37),t)},vX(j1n,"CommentPostprocessor",1488),wAn(1489,1,n1n,ee),MWn.pf=function(n,t){uUn(BB(n,37),t)},vX(j1n,"CommentPreprocessor",1489),wAn(1490,1,n1n,ie),MWn.pf=function(n,t){jLn(BB(n,37),t)},vX(j1n,"ConstraintsPostprocessor",1490),wAn(1491,1,n1n,re),MWn.pf=function(n,t){can(BB(n,37),t)},vX(j1n,"EdgeAndLayerConstraintEdgeReverser",1491),wAn(1492,1,n1n,ce),MWn.pf=function(n,t){Gwn(BB(n,37),t)},vX(j1n,"EndLabelPostprocessor",1492),wAn(1493,1,{},ae),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPostprocessor/lambda$0$Type",1493),wAn(1494,1,DVn,ue),MWn.Mb=function(n){return MY(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$1$Type",1494),wAn(1495,1,lVn,oe),MWn.td=function(n){ejn(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$2$Type",1495),wAn(1496,1,n1n,se),MWn.pf=function(n,t){ZPn(BB(n,37),t)},vX(j1n,"EndLabelPreprocessor",1496),wAn(1497,1,{},he),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPreprocessor/lambda$0$Type",1497),wAn(1498,1,lVn,D_),MWn.td=function(n){KM(this.a,this.b,this.c,BB(n,10))},MWn.a=0,MWn.b=0,MWn.c=!1,vX(j1n,"EndLabelPreprocessor/lambda$1$Type",1498),wAn(1499,1,DVn,fe),MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),XPt))},vX(j1n,"EndLabelPreprocessor/lambda$2$Type",1499),wAn(1500,1,lVn,nd),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$3$Type",1500),wAn(1501,1,DVn,le),MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),UPt))},vX(j1n,"EndLabelPreprocessor/lambda$4$Type",1501),wAn(1502,1,lVn,td),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$5$Type",1502),wAn(1551,1,n1n,Vh),MWn.pf=function(n,t){Cln(BB(n,37),t)},vX(j1n,"EndLabelSorter",1551),wAn(1552,1,MYn,be),MWn.ue=function(n,t){return Hgn(BB(n,456),BB(t,456))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"EndLabelSorter/1",1552),wAn(456,1,{456:1},TQ),vX(j1n,"EndLabelSorter/LabelGroup",456),wAn(1553,1,{},we),MWn.Kb=function(n){return EM(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelSorter/lambda$0$Type",1553),wAn(1554,1,DVn,de),MWn.Mb=function(n){return EM(),BB(n,10).k==(uSn(),Cut)},vX(j1n,"EndLabelSorter/lambda$1$Type",1554),wAn(1555,1,lVn,ge),MWn.td=function(n){oSn(BB(n,10))},vX(j1n,"EndLabelSorter/lambda$2$Type",1555),wAn(1556,1,DVn,pe),MWn.Mb=function(n){return EM(),GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),UPt))},vX(j1n,"EndLabelSorter/lambda$3$Type",1556),wAn(1557,1,DVn,ve),MWn.Mb=function(n){return EM(),GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),XPt))},vX(j1n,"EndLabelSorter/lambda$4$Type",1557),wAn(1503,1,n1n,me),MWn.pf=function(n,t){IHn(this,BB(n,37))},MWn.b=0,MWn.c=0,vX(j1n,"FinalSplineBendpointsCalculator",1503),wAn(1504,1,{},ye),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),wAn(1505,1,{},ke),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),wAn(1506,1,DVn,je),MWn.Mb=function(n){return!b5(BB(n,17))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),wAn(1507,1,DVn,Ee),MWn.Mb=function(n){return Lx(BB(n,17),(hWn(),Nlt))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),wAn(1508,1,lVn,ed),MWn.td=function(n){zKn(this.a,BB(n,128))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),wAn(1509,1,lVn,Te),MWn.td=function(n){JPn(BB(n,17).a)},vX(j1n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),wAn(792,1,n1n,id),MWn.pf=function(n,t){Vqn(this,BB(n,37),t)},vX(j1n,"GraphTransformer",792),wAn(511,22,{3:1,35:1,22:1,511:1},ZS);var zut,Uut,Xut,Wut=Ben(j1n,"GraphTransformer/Mode",511,Unt,uJ,tB);wAn(1510,1,n1n,Me),MWn.pf=function(n,t){exn(BB(n,37),t)},vX(j1n,"HierarchicalNodeResizingProcessor",1510),wAn(1511,1,n1n,Se),MWn.pf=function(n,t){lrn(BB(n,37),t)},vX(j1n,"HierarchicalPortConstraintProcessor",1511),wAn(1512,1,MYn,Pe),MWn.ue=function(n,t){return Ipn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),wAn(1513,1,n1n,Ce),MWn.pf=function(n,t){jBn(BB(n,37),t)},vX(j1n,"HierarchicalPortDummySizeProcessor",1513),wAn(1514,1,n1n,Ie),MWn.pf=function(n,t){JDn(this,BB(n,37),t)},MWn.a=0,vX(j1n,"HierarchicalPortOrthogonalEdgeRouter",1514),wAn(1515,1,MYn,Oe),MWn.ue=function(n,t){return _N(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),wAn(1516,1,MYn,Ae),MWn.ue=function(n,t){return P9(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),wAn(1517,1,n1n,$e),MWn.pf=function(n,t){EMn(BB(n,37),t)},vX(j1n,"HierarchicalPortPositionProcessor",1517),wAn(1518,1,n1n,Yh),MWn.pf=function(n,t){rXn(this,BB(n,37))},MWn.a=0,MWn.c=0,vX(j1n,"HighDegreeNodeLayeringProcessor",1518),wAn(571,1,{571:1},Le),MWn.b=-1,MWn.d=-1,vX(j1n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),wAn(1519,1,{},Ne),MWn.Kb=function(n){return q_(),fbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),wAn(1520,1,{},xe),MWn.Kb=function(n){return q_(),lbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),wAn(1526,1,n1n,De),MWn.pf=function(n,t){dFn(this,BB(n,37),t)},vX(j1n,"HyperedgeDummyMerger",1526),wAn(793,1,{},R_),MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(j1n,"HyperedgeDummyMerger/MergeState",793),wAn(1527,1,{},Re),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"HyperedgeDummyMerger/lambda$0$Type",1527),wAn(1528,1,{},Ke),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,10).j,16))},vX(j1n,"HyperedgeDummyMerger/lambda$1$Type",1528),wAn(1529,1,lVn,_e),MWn.td=function(n){BB(n,11).p=-1},vX(j1n,"HyperedgeDummyMerger/lambda$2$Type",1529),wAn(1530,1,n1n,Fe),MWn.pf=function(n,t){bFn(BB(n,37),t)},vX(j1n,"HypernodesProcessor",1530),wAn(1531,1,n1n,Be),MWn.pf=function(n,t){wFn(BB(n,37),t)},vX(j1n,"InLayerConstraintProcessor",1531),wAn(1532,1,n1n,He),MWn.pf=function(n,t){Lcn(BB(n,37),t)},vX(j1n,"InnermostNodeMarginCalculator",1532),wAn(1533,1,n1n,qe),MWn.pf=function(n,t){Vzn(this,BB(n,37))},MWn.a=KQn,MWn.b=KQn,MWn.c=RQn,MWn.d=RQn;var Vut,Qut,Yut,Jut,Zut,not,tot,eot,iot,rot,cot,aot,uot,oot,sot,hot,fot,lot,bot,wot,dot,got,pot,vot,mot,yot,kot,jot,Eot,Tot,Mot,Sot,Pot,Cot,Iot,Oot,Aot,$ot,Lot,Not,xot,Dot,Rot,Kot,_ot,Fot,Bot,Hot,qot,Got,zot,Uot,Xot,Wot,Vot,Qot,Yot,Jot=vX(j1n,"InteractiveExternalPortPositioner",1533);wAn(1534,1,{},Ge),MWn.Kb=function(n){return BB(n,17).d.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),wAn(1535,1,{},rd),MWn.Kb=function(n){return qN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),wAn(1536,1,{},ze),MWn.Kb=function(n){return BB(n,17).c.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),wAn(1537,1,{},cd),MWn.Kb=function(n){return GN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),wAn(1538,1,{},ad),MWn.Kb=function(n){return WR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),wAn(1539,1,{},ud),MWn.Kb=function(n){return VR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),wAn(77,22,{3:1,35:1,22:1,77:1,234:1},nP),MWn.Kf=function(){switch(this.g){case 15:return new dc;case 22:return new gc;case 47:return new mc;case 28:case 35:return new ei;case 32:return new Jt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new id((Srn(),qut));case 0:return new id((Srn(),Hut));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new me;case 55:return new Me;case 13:return new Se;case 38:return new Ce;case 44:return new Ie;case 40:return new $e;case 9:return new Yh;case 49:return new ox;case 37:return new De;case 43:return new Fe;case 27:return new Be;case 30:return new He;case 3:return new qe;case 18:return new Xe;case 29:return new We;case 5:return new Jh;case 50:return new Ue;case 34:return new Zh;case 36:return new ii;case 52:return new Vh;case 11:return new ci;case 7:return new tf;case 39:return new ai;case 45:return new ui;case 16:return new oi;case 10:return new si;case 48:return new fi;case 21:return new li;case 23:return new Ny((oin(),Amt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new af;case 17:return new Pi;case 53:return new Ci;case 6:return new Bi;case 25:return new am;case 46:return new Ni;case 31:return new xR;case 14:return new Vi;case 26:return new Sc;case 20:return new nr;case 24:return new Ny((oin(),$mt));default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Zot,nst,tst,est,ist,rst,cst,ast,ust=Ben(j1n,S1n,77,Unt,ENn,nB);wAn(1540,1,n1n,Xe),MWn.pf=function(n,t){Jzn(BB(n,37),t)},vX(j1n,"InvertedPortProcessor",1540),wAn(1541,1,n1n,We),MWn.pf=function(n,t){LKn(BB(n,37),t)},vX(j1n,"LabelAndNodeSizeProcessor",1541),wAn(1542,1,DVn,Ve),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),wAn(1543,1,DVn,Qe),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Mut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),wAn(1544,1,lVn,K_),MWn.td=function(n){_M(this.b,this.a,this.c,BB(n,10))},MWn.a=!1,MWn.c=!1,vX(j1n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),wAn(1545,1,n1n,Jh),MWn.pf=function(n,t){fzn(BB(n,37),t)},vX(j1n,"LabelDummyInserter",1545),wAn(1546,1,qYn,Ye),MWn.Lb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),zPt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),zPt))},vX(j1n,"LabelDummyInserter/1",1546),wAn(1547,1,n1n,Ue),MWn.pf=function(n,t){Pqn(BB(n,37),t)},vX(j1n,"LabelDummyRemover",1547),wAn(1548,1,DVn,Je),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelDummyRemover/lambda$0$Type",1548),wAn(1359,1,n1n,Zh),MWn.pf=function(n,t){TGn(this,BB(n,37),t)},MWn.a=null,vX(j1n,"LabelDummySwitcher",1359),wAn(286,1,{286:1},cKn),MWn.c=0,MWn.d=null,MWn.f=0,vX(j1n,"LabelDummySwitcher/LabelDummyInfo",286),wAn(1360,1,{},Ze),MWn.Kb=function(n){return Irn(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"LabelDummySwitcher/lambda$0$Type",1360),wAn(1361,1,DVn,ni),MWn.Mb=function(n){return Irn(),BB(n,10).k==(uSn(),Sut)},vX(j1n,"LabelDummySwitcher/lambda$1$Type",1361),wAn(1362,1,{},hd),MWn.Kb=function(n){return XD(this.a,BB(n,10))},vX(j1n,"LabelDummySwitcher/lambda$2$Type",1362),wAn(1363,1,lVn,fd),MWn.td=function(n){YX(this.a,BB(n,286))},vX(j1n,"LabelDummySwitcher/lambda$3$Type",1363),wAn(1364,1,MYn,ti),MWn.ue=function(n,t){return Lz(BB(n,286),BB(t,286))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"LabelDummySwitcher/lambda$4$Type",1364),wAn(791,1,n1n,ei),MWn.pf=function(n,t){Y6(BB(n,37),t)},vX(j1n,"LabelManagementProcessor",791),wAn(1549,1,n1n,ii),MWn.pf=function(n,t){Nxn(BB(n,37),t)},vX(j1n,"LabelSideSelector",1549),wAn(1550,1,DVn,ri),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelSideSelector/lambda$0$Type",1550),wAn(1558,1,n1n,ci),MWn.pf=function(n,t){EBn(BB(n,37),t)},vX(j1n,"LayerConstraintPostprocessor",1558),wAn(1559,1,n1n,tf),MWn.pf=function(n,t){r$n(BB(n,37),t)},vX(j1n,"LayerConstraintPreprocessor",1559),wAn(360,22,{3:1,35:1,22:1,360:1},tP);var ost,sst,hst,fst,lst,bst,wst,dst,gst,pst=Ben(j1n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Unt,e3,z_);wAn(1560,1,n1n,ai),MWn.pf=function(n,t){Eqn(BB(n,37),t)},vX(j1n,"LayerSizeAndGraphHeightCalculator",1560),wAn(1561,1,n1n,ui),MWn.pf=function(n,t){ALn(BB(n,37),t)},vX(j1n,"LongEdgeJoiner",1561),wAn(1562,1,n1n,oi),MWn.pf=function(n,t){WHn(BB(n,37),t)},vX(j1n,"LongEdgeSplitter",1562),wAn(1563,1,n1n,si),MWn.pf=function(n,t){PGn(this,BB(n,37),t)},MWn.d=0,MWn.e=0,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,vX(j1n,"NodePromotion",1563),wAn(1564,1,{},hi),MWn.Kb=function(n){return BB(n,46),hN(),!0},MWn.Fb=function(n){return this===n},vX(j1n,"NodePromotion/lambda$0$Type",1564),wAn(1565,1,{},od),MWn.Kb=function(n){return aV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$1$Type",1565),wAn(1566,1,{},sd),MWn.Kb=function(n){return uV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$2$Type",1566),wAn(1567,1,n1n,fi),MWn.pf=function(n,t){XUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPostprocessor",1567),wAn(1568,1,n1n,li),MWn.pf=function(n,t){MUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPreprocessor",1568),wAn(1569,1,MYn,bi),MWn.ue=function(n,t){return Zan(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),wAn(1570,1,n1n,wi),MWn.pf=function(n,t){$_n(BB(n,37),t)},vX(j1n,"PartitionMidprocessor",1570),wAn(1571,1,DVn,di),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionMidprocessor/lambda$0$Type",1571),wAn(1572,1,lVn,ld),MWn.td=function(n){$Q(this.a,BB(n,10))},vX(j1n,"PartitionMidprocessor/lambda$1$Type",1572),wAn(1573,1,n1n,gi),MWn.pf=function(n,t){wNn(BB(n,37),t)},vX(j1n,"PartitionPostprocessor",1573),wAn(1574,1,n1n,pi),MWn.pf=function(n,t){NOn(BB(n,37),t)},vX(j1n,"PartitionPreprocessor",1574),wAn(1575,1,DVn,vi),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionPreprocessor/lambda$0$Type",1575),wAn(1576,1,{},mi),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"PartitionPreprocessor/lambda$1$Type",1576),wAn(1577,1,DVn,yi),MWn.Mb=function(n){return Lgn(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$2$Type",1577),wAn(1578,1,lVn,ki),MWn.td=function(n){Run(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$3$Type",1578),wAn(1579,1,n1n,af),MWn.pf=function(n,t){u_n(BB(n,37),t)},vX(j1n,"PortListSorter",1579),wAn(1580,1,{},ji),MWn.Kb=function(n){return zsn(),BB(n,11).e},vX(j1n,"PortListSorter/lambda$0$Type",1580),wAn(1581,1,{},Ei),MWn.Kb=function(n){return zsn(),BB(n,11).g},vX(j1n,"PortListSorter/lambda$1$Type",1581),wAn(1582,1,MYn,Ti),MWn.ue=function(n,t){return T4(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$2$Type",1582),wAn(1583,1,MYn,Mi),MWn.ue=function(n,t){return Oyn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$3$Type",1583),wAn(1584,1,MYn,Si),MWn.ue=function(n,t){return nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$4$Type",1584),wAn(1585,1,n1n,Pi),MWn.pf=function(n,t){WAn(BB(n,37),t)},vX(j1n,"PortSideProcessor",1585),wAn(1586,1,n1n,Ci),MWn.pf=function(n,t){IRn(BB(n,37),t)},vX(j1n,"ReversedEdgeRestorer",1586),wAn(1591,1,n1n,am),MWn.pf=function(n,t){Ymn(this,BB(n,37),t)},vX(j1n,"SelfLoopPortRestorer",1591),wAn(1592,1,{},Ii),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPortRestorer/lambda$0$Type",1592),wAn(1593,1,DVn,Oi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopPortRestorer/lambda$1$Type",1593),wAn(1594,1,DVn,Ai),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPortRestorer/lambda$2$Type",1594),wAn(1595,1,{},$i),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopPortRestorer/lambda$3$Type",1595),wAn(1596,1,lVn,bd),MWn.td=function(n){SSn(this.a,BB(n,403))},vX(j1n,"SelfLoopPortRestorer/lambda$4$Type",1596),wAn(794,1,lVn,Li),MWn.td=function(n){nPn(BB(n,101))},vX(j1n,"SelfLoopPortRestorer/lambda$5$Type",794),wAn(1597,1,n1n,Ni),MWn.pf=function(n,t){Lpn(BB(n,37),t)},vX(j1n,"SelfLoopPostProcessor",1597),wAn(1598,1,{},xi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPostProcessor/lambda$0$Type",1598),wAn(1599,1,DVn,Di),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopPostProcessor/lambda$1$Type",1599),wAn(1600,1,DVn,Ri),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPostProcessor/lambda$2$Type",1600),wAn(1601,1,lVn,Ki),MWn.td=function(n){Ljn(BB(n,10))},vX(j1n,"SelfLoopPostProcessor/lambda$3$Type",1601),wAn(1602,1,{},_i),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPostProcessor/lambda$4$Type",1602),wAn(1603,1,lVn,wd),MWn.td=function(n){a3(this.a,BB(n,409))},vX(j1n,"SelfLoopPostProcessor/lambda$5$Type",1603),wAn(1604,1,DVn,Fi),MWn.Mb=function(n){return!!BB(n,101).i},vX(j1n,"SelfLoopPostProcessor/lambda$6$Type",1604),wAn(1605,1,lVn,dd),MWn.td=function(n){Ty(this.a,BB(n,101))},vX(j1n,"SelfLoopPostProcessor/lambda$7$Type",1605),wAn(1587,1,n1n,Bi),MWn.pf=function(n,t){Z$n(BB(n,37),t)},vX(j1n,"SelfLoopPreProcessor",1587),wAn(1588,1,{},Hi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPreProcessor/lambda$0$Type",1588),wAn(1589,1,{},qi),MWn.Kb=function(n){return BB(n,409).a},vX(j1n,"SelfLoopPreProcessor/lambda$1$Type",1589),wAn(1590,1,lVn,Gi),MWn.td=function(n){q$(BB(n,17))},vX(j1n,"SelfLoopPreProcessor/lambda$2$Type",1590),wAn(1606,1,n1n,xR),MWn.pf=function(n,t){sSn(this,BB(n,37),t)},vX(j1n,"SelfLoopRouter",1606),wAn(1607,1,{},zi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopRouter/lambda$0$Type",1607),wAn(1608,1,DVn,Ui),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopRouter/lambda$1$Type",1608),wAn(1609,1,DVn,Xi),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopRouter/lambda$2$Type",1609),wAn(1610,1,{},Wi),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopRouter/lambda$3$Type",1610),wAn(1611,1,lVn,eP),MWn.td=function(n){QV(this.a,this.b,BB(n,403))},vX(j1n,"SelfLoopRouter/lambda$4$Type",1611),wAn(1612,1,n1n,Vi),MWn.pf=function(n,t){fxn(BB(n,37),t)},vX(j1n,"SemiInteractiveCrossMinProcessor",1612),wAn(1613,1,DVn,Qi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),wAn(1614,1,DVn,Yi),MWn.Mb=function(n){return Gq(BB(n,10))._b((HXn(),spt))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),wAn(1615,1,MYn,Ji),MWn.ue=function(n,t){return drn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),wAn(1616,1,{},Zi),MWn.Ce=function(n,t){return XQ(BB(n,10),BB(t,10))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),wAn(1618,1,n1n,nr),MWn.pf=function(n,t){MBn(BB(n,37),t)},vX(j1n,"SortByInputModelProcessor",1618),wAn(1619,1,DVn,tr),MWn.Mb=function(n){return 0!=BB(n,11).g.c.length},vX(j1n,"SortByInputModelProcessor/lambda$0$Type",1619),wAn(1620,1,lVn,gd),MWn.td=function(n){fPn(this.a,BB(n,11))},vX(j1n,"SortByInputModelProcessor/lambda$1$Type",1620),wAn(1693,803,{},grn),MWn.Me=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Np,JT(AV(new Rq(null,new w1(this.c.a.b,16)),new dr),new uP(this,t)),pCn(this,new rr),Otn(t,new cr),t.c=x8(Ant,HWn,1,0,5,1),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new ar),new vd(t)),pCn(this,new ur),Otn(t,new or),t.c=x8(Ant,HWn,1,0,5,1),e=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new md(this))),new sr),JT(new Rq(null,new w1(this.c.a.a,16)),new rP(e,t)),pCn(this,new fr),Otn(t,new er),t.c=x8(Ant,HWn,1,0,5,1);break;case 3:i=new Np,pCn(this,new ir),r=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new pd(this))),new hr),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new lr),new aP(r,i)),pCn(this,new br),Otn(i,new wr),i.c=x8(Ant,HWn,1,0,5,1);break;default:throw Hp(new kv)}},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation",1693),wAn(1694,1,qYn,ir),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),wAn(1695,1,{},pd),MWn.Fe=function(n){return GCn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),wAn(1703,1,RVn,iP),MWn.Vd=function(){Fkn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),wAn(1705,1,qYn,rr),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),wAn(1706,1,lVn,cr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),wAn(1707,1,DVn,ar),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),wAn(1709,1,lVn,vd),MWn.td=function(n){Ebn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),wAn(1708,1,RVn,lP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),wAn(1710,1,qYn,ur),MWn.Lb=function(n){return cL(BB(n,57).g,10)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),wAn(1711,1,lVn,or),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),wAn(1712,1,{},md),MWn.Fe=function(n){return zCn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),wAn(1713,1,{},sr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),wAn(1696,1,{},hr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),wAn(1715,1,lVn,rP),MWn.td=function(n){HG(this.a,this.b,BB(n,307))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),wAn(1714,1,RVn,cP),MWn.Vd=function(){VAn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),wAn(1716,1,qYn,fr),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),wAn(1717,1,lVn,er),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),wAn(1697,1,DVn,lr),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),wAn(1699,1,lVn,aP),MWn.td=function(n){qG(this.a,this.b,BB(n,57))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),wAn(1698,1,RVn,bP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),wAn(1700,1,qYn,br),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),wAn(1701,1,lVn,wr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),wAn(1702,1,DVn,dr),MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),wAn(1704,1,lVn,uP),MWn.td=function(n){Ttn(this.a,this.b,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),wAn(1521,1,n1n,ox),MWn.pf=function(n,t){cqn(this,BB(n,37),t)},vX(A1n,"HorizontalGraphCompactor",1521),wAn(1522,1,{},yd),MWn.Oe=function(n,t){var e,i;return Z7(n,t)?0:(e=f2(n),i=f2(t),e&&e.k==(uSn(),Mut)||i&&i.k==(uSn(),Mut)?0:UN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},MWn.Pe=function(n,t){var e,i;return Z7(n,t)?1:(e=f2(n),i=f2(t),XN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},vX(A1n,"HorizontalGraphCompactor/1",1522),wAn(1523,1,{},gr),MWn.Ne=function(n,t){return MM(),0==n.a.i},vX(A1n,"HorizontalGraphCompactor/lambda$0$Type",1523),wAn(1524,1,{},kd),MWn.Ne=function(n,t){return _Q(this.a,n,t)},vX(A1n,"HorizontalGraphCompactor/lambda$1$Type",1524),wAn(1664,1,{},I7),vX(A1n,"LGraphToCGraphTransformer",1664),wAn(1672,1,DVn,pr),MWn.Mb=function(n){return null!=n},vX(A1n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),wAn(1665,1,{},vr),MWn.Kb=function(n){return G_(),Bbn(mMn(BB(BB(n,57).g,10),(hWn(),dlt)))},vX(A1n,"LGraphToCGraphTransformer/lambda$0$Type",1665),wAn(1666,1,{},mr),MWn.Kb=function(n){return G_(),mfn(BB(BB(n,57).g,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$1$Type",1666),wAn(1675,1,DVn,yr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,10)},vX(A1n,"LGraphToCGraphTransformer/lambda$10$Type",1675),wAn(1676,1,lVn,kr),MWn.td=function(n){KQ(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$11$Type",1676),wAn(1677,1,DVn,jr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,145)},vX(A1n,"LGraphToCGraphTransformer/lambda$12$Type",1677),wAn(1681,1,lVn,Er),MWn.td=function(n){vfn(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$13$Type",1681),wAn(1678,1,lVn,jd),MWn.td=function(n){uA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$14$Type",1678),wAn(1679,1,lVn,Ed),MWn.td=function(n){sA(this.a,BB(n,110))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$15$Type",1679),wAn(1680,1,lVn,Td),MWn.td=function(n){oA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$16$Type",1680),wAn(1682,1,{},Tr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$17$Type",1682),wAn(1683,1,DVn,Mr),MWn.Mb=function(n){return G_(),b5(BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$18$Type",1683),wAn(1684,1,lVn,Md),MWn.td=function(n){Snn(this.a,BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$19$Type",1684),wAn(1668,1,lVn,Sd),MWn.td=function(n){l0(this.a,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$2$Type",1668),wAn(1685,1,{},Sr),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$20$Type",1685),wAn(1686,1,{},Pr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$21$Type",1686),wAn(1687,1,{},Cr),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$22$Type",1687),wAn(1688,1,DVn,Ir),MWn.Mb=function(n){return tx(BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$23$Type",1688),wAn(1689,1,lVn,Pd),MWn.td=function(n){PCn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$24$Type",1689),wAn(1667,1,lVn,oP),MWn.td=function(n){H3(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$3$Type",1667),wAn(1669,1,{},Or),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$4$Type",1669),wAn(1670,1,{},Ar),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$5$Type",1670),wAn(1671,1,{},$r),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$6$Type",1671),wAn(1673,1,lVn,Cd),MWn.td=function(n){KIn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$8$Type",1673),wAn(1674,1,lVn,sP),MWn.td=function(n){x$(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$9$Type",1674),wAn(1663,1,{},Lr),MWn.Le=function(n){var t,e,i,r,c;for(this.a=n,this.d=new Fv,this.c=x8(qit,HWn,121,this.a.a.a.c.length,0,1),this.b=0,e=new Wb(this.a.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).d=this.b,c=AN(oM(new qv,t),this.d),this.c[this.b]=c,++this.b;for(JGn(this),AUn(this),ZLn(this),WKn(B_(this.d),new Xm),r=new Wb(this.a.a.b);r.a<r.c.c.length;)(i=BB(n0(r),57)).d.c=this.c[i.a.d].e+i.b.a},MWn.b=0,vX(A1n,"NetworkSimplexCompaction",1663),wAn(145,1,{35:1,145:1},PBn),MWn.wd=function(n){return Lnn(this,BB(n,145))},MWn.Ib=function(){return mfn(this)},vX(A1n,"VerticalSegment",145),wAn(827,1,{},zEn),MWn.c=0,MWn.e=0,MWn.i=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter",827),wAn(663,1,{663:1},kcn),MWn.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},MWn.b=0,MWn.c=0,MWn.f=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",663),wAn(287,1,{35:1,287:1},Gx),MWn.wd=function(n){return aq(this,BB(n,287))},MWn.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},MWn.a=0,MWn.b=0,MWn.c=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",287),wAn(1929,1,{},ZSn),MWn.b=0,MWn.e=!1,vX($1n,"CrossingMatrixFiller",1929);var vst,mst,yst,kst,jst=bq(L1n,"IInitializable");wAn(1804,1,N1n,vP),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Lf=function(){return this.c!=(oin(),Amt)},MWn.Mf=function(){this.e=x8(ANt,hQn,25,this.d,15,1)},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Qf=function(n,t,e,i){++this.d},MWn.Rf=function(){return!0},MWn.Sf=function(n,t,e,i){return Yhn(this,n,t,e),Z4(this,t)},MWn.Tf=function(n,t){var e;return Yhn(this,n,e=hj(t,n.length),t),bon(this,e)},MWn.d=0,vX($1n,"GreedySwitchHeuristic",1804),wAn(1930,1,{},lG),MWn.b=0,MWn.d=0,vX($1n,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",1930),wAn(1917,1,{},uRn),MWn.a=!1,vX($1n,"SwitchDecider",1917),wAn(101,1,{101:1},pPn),MWn.a=null,MWn.c=null,MWn.i=null,vX(x1n,"SelfHyperLoop",101),wAn(1916,1,{},epn),MWn.c=0,MWn.e=0,vX(x1n,"SelfHyperLoopLabels",1916),wAn(411,22,{3:1,35:1,22:1,411:1},mP);var Est,Tst,Mst,Sst,Pst,Cst,Ist=Ben(x1n,"SelfHyperLoopLabels/Alignment",411,Unt,r3,U_);wAn(409,1,{409:1},j6),vX(x1n,"SelfLoopEdge",409),wAn(403,1,{403:1},Ogn),MWn.a=!1,vX(x1n,"SelfLoopHolder",403),wAn(1724,1,DVn,qr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopHolder/lambda$0$Type",1724),wAn(113,1,{113:1},ipn),MWn.a=!1,MWn.c=!1,vX(x1n,"SelfLoopPort",113),wAn(1792,1,DVn,Gr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopPort/lambda$0$Type",1792),wAn(363,22,{3:1,35:1,22:1,363:1},yP);var Ost,Ast,$st,Lst,Nst,xst,Dst,Rst,Kst=Ben(x1n,"SelfLoopType",363,Unt,x5,Y_);wAn(1732,1,{},uf),vX(D1n,"PortRestorer",1732),wAn(361,22,{3:1,35:1,22:1,361:1},kP);var _st,Fst,Bst,Hst,qst,Gst,zst,Ust,Xst,Wst=Ben(D1n,"PortRestorer/PortSideArea",361,Unt,P1,J_);wAn(1733,1,{},Wr),MWn.Kb=function(n){return _Mn(),BB(n,15).Oc()},vX(D1n,"PortRestorer/lambda$0$Type",1733),wAn(1734,1,lVn,Vr),MWn.td=function(n){_Mn(),BB(n,113).c=!1},vX(D1n,"PortRestorer/lambda$1$Type",1734),wAn(1743,1,DVn,Qr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),CIt)},vX(D1n,"PortRestorer/lambda$10$Type",1743),wAn(1744,1,{},Yr),MWn.Kb=function(n){return _Mn(),BB(n,113).d},vX(D1n,"PortRestorer/lambda$11$Type",1744),wAn(1745,1,lVn,Id),MWn.td=function(n){Nj(this.a,BB(n,11))},vX(D1n,"PortRestorer/lambda$12$Type",1745),wAn(1735,1,lVn,Od),MWn.td=function(n){Ax(this.a,BB(n,101))},vX(D1n,"PortRestorer/lambda$2$Type",1735),wAn(1736,1,MYn,Jr),MWn.ue=function(n,t){return oen(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortRestorer/lambda$3$Type",1736),wAn(1737,1,DVn,Zr),MWn.Mb=function(n){return _Mn(),BB(n,113).c},vX(D1n,"PortRestorer/lambda$4$Type",1737),wAn(1738,1,DVn,xr),MWn.Mb=function(n){return Acn(BB(n,11))},vX(D1n,"PortRestorer/lambda$5$Type",1738),wAn(1739,1,DVn,Nr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),sIt)},vX(D1n,"PortRestorer/lambda$6$Type",1739),wAn(1740,1,DVn,Dr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),oIt)},vX(D1n,"PortRestorer/lambda$7$Type",1740),wAn(1741,1,DVn,Rr),MWn.Mb=function(n){return c3(BB(n,11))},vX(D1n,"PortRestorer/lambda$8$Type",1741),wAn(1742,1,DVn,Kr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),SIt)},vX(D1n,"PortRestorer/lambda$9$Type",1742),wAn(270,22,{3:1,35:1,22:1,270:1},WV);var Vst,Qst,Yst,Jst,Zst,nht,tht,eht,iht=Ben(D1n,"PortSideAssigner/Target",270,Unt,Ftn,X_);wAn(1725,1,{},_r),MWn.Kb=function(n){return AV(new Rq(null,new w1(BB(n,101).j,16)),new Xr)},vX(D1n,"PortSideAssigner/lambda$1$Type",1725),wAn(1726,1,{},Fr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$2$Type",1726),wAn(1727,1,lVn,Br),MWn.td=function(n){qCn(BB(n,11),(kUn(),sIt))},vX(D1n,"PortSideAssigner/lambda$3$Type",1727),wAn(1728,1,{},Hr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$4$Type",1728),wAn(1729,1,lVn,Ad),MWn.td=function(n){tv(this.a,BB(n,11))},vX(D1n,"PortSideAssigner/lambda$5$Type",1729),wAn(1730,1,MYn,zr),MWn.ue=function(n,t){return MW(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$6$Type",1730),wAn(1731,1,MYn,Ur),MWn.ue=function(n,t){return oH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$7$Type",1731),wAn(805,1,DVn,Xr),MWn.Mb=function(n){return BB(n,113).c},vX(D1n,"PortSideAssigner/lambda$8$Type",805),wAn(2009,1,{}),vX(R1n,"AbstractSelfLoopRouter",2009),wAn(1750,1,MYn,nc),MWn.ue=function(n,t){return IK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,bJn,1750),wAn(1751,1,MYn,tc),MWn.ue=function(n,t){return CK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,wJn,1751),wAn(1793,2009,{},ec),MWn.Uf=function(n,t,e){return e},vX(R1n,"OrthogonalSelfLoopRouter",1793),wAn(1795,1,lVn,wP),MWn.td=function(n){pgn(this.b,this.a,BB(n,8))},vX(R1n,"OrthogonalSelfLoopRouter/lambda$0$Type",1795),wAn(1794,1793,{},ic),MWn.Uf=function(n,t,e){var i,r;return Kx(e,0,UR(B$((i=n.c.d).n),i.a)),DH(e,UR(B$((r=n.d.d).n),r.a)),E_n(e)},vX(R1n,"PolylineSelfLoopRouter",1794),wAn(1746,1,{},nf),MWn.a=null,vX(R1n,"RoutingDirector",1746),wAn(1747,1,MYn,rc),MWn.ue=function(n,t){return wH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingDirector/lambda$0$Type",1747),wAn(1748,1,{},cc),MWn.Kb=function(n){return SM(),BB(n,101).j},vX(R1n,"RoutingDirector/lambda$1$Type",1748),wAn(1749,1,lVn,ac),MWn.td=function(n){SM(),BB(n,15).ad(Qst)},vX(R1n,"RoutingDirector/lambda$2$Type",1749),wAn(1752,1,{},uc),vX(R1n,"RoutingSlotAssigner",1752),wAn(1753,1,DVn,$d),MWn.Mb=function(n){return CC(this.a,BB(n,101))},vX(R1n,"RoutingSlotAssigner/lambda$0$Type",1753),wAn(1754,1,MYn,Ld),MWn.ue=function(n,t){return Uq(this.a,BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingSlotAssigner/lambda$1$Type",1754),wAn(1796,1793,{},oc),MWn.Uf=function(n,t,e){var i,r,c,a;return i=Gy(MD(gpn(n.b.g.b,(HXn(),jpt)))),nLn(n,t,e,a=new Ux(Pun(Gk(PMt,1),sVn,8,0,[(c=n.c.d,UR(new wA(c.n),c.a))])),i),DH(a,UR(new wA((r=n.d.d).n),r.a)),Fvn(new oBn(a))},vX(R1n,"SplineSelfLoopRouter",1796),wAn(578,1,MYn,Grn,kH),MWn.ue=function(n,t){return fXn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderNodeComparator",578),wAn(1755,1,DVn,sc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$0$Type",1755),wAn(1756,1,{},hc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$1$Type",1756),wAn(1757,1,DVn,fc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$2$Type",1757),wAn(1758,1,{},lc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$3$Type",1758),wAn(1759,1,DVn,bc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$4$Type",1759),wAn(806,1,MYn,O7,pP),MWn.ue=function(n,t){return Nz(this,n,t)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderPortComparator",806),wAn(801,1,{},wc),MWn.Vf=function(n,t){var i,r,c,a;for(c=PSn(t),i=new Np,a=t.f/c,r=1;r<c;++r)WB(i,iln(dG(fan(e.Math.round(r*a)))));return i},MWn.Wf=function(){return!1},vX(_1n,"ARDCutIndexHeuristic",801),wAn(1479,1,n1n,dc),MWn.pf=function(n,t){oKn(BB(n,37),t)},vX(_1n,"BreakingPointInserter",1479),wAn(305,1,{305:1},v3),MWn.Ib=function(){var n;return(n=new Ck).a+="BPInfo[",n.a+="\n\tstart=",uO(n,this.i),n.a+="\n\tend=",uO(n,this.a),n.a+="\n\tnodeStartEdge=",uO(n,this.e),n.a+="\n\tstartEndEdge=",uO(n,this.j),n.a+="\n\toriginalEdge=",uO(n,this.f),n.a+="\n\tstartInLayerDummy=",uO(n,this.k),n.a+="\n\tstartInLayerEdge=",uO(n,this.n),n.a+="\n\tendInLayerDummy=",uO(n,this.b),n.a+="\n\tendInLayerEdge=",uO(n,this.c),n.a},vX(_1n,"BreakingPointInserter/BPInfo",305),wAn(652,1,{652:1},Hd),MWn.a=!1,MWn.b=0,MWn.c=0,vX(_1n,"BreakingPointInserter/Cut",652),wAn(1480,1,n1n,gc),MWn.pf=function(n,t){mLn(BB(n,37),t)},vX(_1n,"BreakingPointProcessor",1480),wAn(1481,1,DVn,pc),MWn.Mb=function(n){return Jnn(BB(n,10))},vX(_1n,"BreakingPointProcessor/0methodref$isEnd$Type",1481),wAn(1482,1,DVn,vc),MWn.Mb=function(n){return Znn(BB(n,10))},vX(_1n,"BreakingPointProcessor/1methodref$isStart$Type",1482),wAn(1483,1,n1n,mc),MWn.pf=function(n,t){rNn(this,BB(n,37),t)},vX(_1n,"BreakingPointRemover",1483),wAn(1484,1,lVn,yc),MWn.td=function(n){BB(n,128).k=!0},vX(_1n,"BreakingPointRemover/lambda$0$Type",1484),wAn(797,1,{},MAn),MWn.b=0,MWn.e=0,MWn.f=0,MWn.j=0,vX(_1n,"GraphStats",797),wAn(798,1,{},kc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/0methodref$max$Type",798),wAn(799,1,{},jc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/2methodref$max$Type",799),wAn(1660,1,{},Ec),MWn.Ce=function(n,t){return vB(MD(n),MD(t))},vX(_1n,"GraphStats/lambda$1$Type",1660),wAn(1661,1,{},Nd),MWn.Kb=function(n){return wpn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$2$Type",1661),wAn(1662,1,{},xd),MWn.Kb=function(n){return VLn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$6$Type",1662),wAn(800,1,{},Tc),MWn.Vf=function(n,t){return BB(mMn(n,(HXn(),_pt)),15)||(SQ(),SQ(),set)},MWn.Wf=function(){return!1},vX(_1n,"ICutIndexCalculator/ManualCutIndexCalculator",800),wAn(802,1,{},Mc),MWn.Vf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(null==t.n&&Dmn(t),k=t.n,null==t.d&&Dmn(t),s=t.d,(y=x8(xNt,qQn,25,k.length,15,1))[0]=k[0],v=k[0],h=1;h<k.length;h++)y[h]=y[h-1]+k[h],v+=k[h];for(c=PSn(t)-1,u=BB(mMn(n,(HXn(),Fpt)),19).a,r=KQn,i=new Np,b=e.Math.max(0,c-u);b<=e.Math.min(t.f-1,c+u);b++){if(g=v/(b+1),p=0,f=1,a=new Np,m=KQn,l=0,o=0,d=s[0],0==b)m=v,null==t.g&&(t.g=Xrn(t,new jc)),o=Gy(t.g);else{for(;f<t.f;)y[f-1]-p>=g&&(WB(a,iln(f)),m=e.Math.max(m,y[f-1]-l),o+=d,p+=y[f-1]-p,l=y[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;o+=d}(w=e.Math.min(1/m,1/t.b/o))>r&&(r=w,i=a)}return i},MWn.Wf=function(){return!1},vX(_1n,"MSDCutIndexHeuristic",802),wAn(1617,1,n1n,Sc),MWn.pf=function(n,t){bBn(BB(n,37),t)},vX(_1n,"SingleEdgeGraphWrapper",1617),wAn(227,22,{3:1,35:1,22:1,227:1},jP);var rht,cht,aht,uht=Ben(F1n,"CenterEdgeLabelPlacementStrategy",227,Unt,Z8,W_);wAn(422,22,{3:1,35:1,22:1,422:1},EP);var oht,sht,hht,fht,lht=Ben(F1n,"ConstraintCalculationStrategy",422,Unt,GY,V_);wAn(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},TP),MWn.Kf=function(){return sIn(this)},MWn.Xf=function(){return sIn(this)};var bht,wht,dht,ght,pht=Ben(F1n,"CrossingMinimizationStrategy",314,Unt,T1,Q_);wAn(337,22,{3:1,35:1,22:1,337:1},MP);var vht,mht,yht,kht,jht,Eht,Tht=Ben(F1n,"CuttingStrategy",337,Unt,M1,Z_);wAn(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},SP),MWn.Kf=function(){return RAn(this)},MWn.Xf=function(){return RAn(this)};var Mht,Sht,Pht,Cht=Ben(F1n,"CycleBreakingStrategy",335,Unt,L5,nF);wAn(419,22,{3:1,35:1,22:1,419:1},PP);var Iht,Oht,Aht,$ht,Lht=Ben(F1n,"DirectionCongruency",419,Unt,qY,tF);wAn(450,22,{3:1,35:1,22:1,450:1},CP);var Nht,xht,Dht,Rht,Kht,_ht,Fht,Bht=Ben(F1n,"EdgeConstraint",450,Unt,S1,eF);wAn(276,22,{3:1,35:1,22:1,276:1},IP);var Hht,qht,Ght,zht=Ben(F1n,"EdgeLabelSideSelection",276,Unt,i9,iF);wAn(479,22,{3:1,35:1,22:1,479:1},OP);var Uht,Xht,Wht,Vht,Qht,Yht,Jht,Zht=Ben(F1n,"EdgeStraighteningStrategy",479,Unt,HY,rF);wAn(274,22,{3:1,35:1,22:1,274:1},AP);var nft,tft,eft,ift,rft,cft,aft,uft=Ben(F1n,"FixedAlignment",274,Unt,t9,cF);wAn(275,22,{3:1,35:1,22:1,275:1},$P);var oft,sft,hft,fft,lft,bft,wft,dft,gft,pft,vft,mft=Ben(F1n,"GraphCompactionStrategy",275,Unt,n9,aF);wAn(256,22,{3:1,35:1,22:1,256:1},LP);var yft,kft,jft,Eft,Tft=Ben(F1n,"GraphProperties",256,Unt,bcn,uF);wAn(292,22,{3:1,35:1,22:1,292:1},NP);var Mft,Sft,Pft,Cft,Ift=Ben(F1n,"GreedySwitchType",292,Unt,I1,oF);wAn(303,22,{3:1,35:1,22:1,303:1},xP);var Oft,Aft,$ft,Lft=Ben(F1n,"InLayerConstraint",303,Unt,C1,sF);wAn(420,22,{3:1,35:1,22:1,420:1},DP);var Nft,xft,Dft,Rft,Kft,_ft,Fft,Bft,Hft,qft,Gft,zft,Uft,Xft,Wft,Vft,Qft,Yft,Jft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,ult,olt,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,vlt,mlt,ylt,klt,jlt,Elt,Tlt,Mlt,Slt,Plt,Clt,Ilt,Olt,Alt,$lt,Llt,Nlt,xlt,Dlt,Rlt,Klt,_lt,Flt,Blt,Hlt,qlt,Glt=Ben(F1n,"InteractiveReferencePoint",420,Unt,zY,hF);wAn(163,22,{3:1,35:1,22:1,163:1},BP);var zlt,Ult,Xlt,Wlt,Vlt,Qlt,Ylt,Jlt,Zlt,nbt,tbt,ebt,ibt,rbt,cbt,abt,ubt,obt,sbt,hbt,fbt,lbt,bbt,wbt,dbt,gbt,pbt,vbt,mbt,ybt,kbt,jbt,Ebt,Tbt,Mbt,Sbt,Pbt,Cbt,Ibt,Obt,Abt,$bt,Lbt,Nbt,xbt,Dbt,Rbt,Kbt,_bt,Fbt,Bbt,Hbt,qbt,Gbt,zbt,Ubt,Xbt,Wbt,Vbt,Qbt,Ybt,Jbt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,uwt,owt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,vwt,mwt,ywt,kwt,jwt,Ewt,Twt,Mwt,Swt,Pwt,Cwt,Iwt,Owt,Awt,$wt,Lwt,Nwt,xwt,Dwt,Rwt,Kwt,_wt,Fwt,Bwt,Hwt,qwt,Gwt,zwt,Uwt,Xwt,Wwt,Vwt,Qwt,Ywt,Jwt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt,udt,odt,sdt,hdt,fdt,ldt,bdt,wdt,ddt,gdt,pdt,vdt,mdt,ydt,kdt,jdt,Edt,Tdt,Mdt,Sdt,Pdt,Cdt,Idt,Odt,Adt,$dt,Ldt,Ndt,xdt,Ddt,Rdt,Kdt,_dt,Fdt,Bdt,Hdt,qdt,Gdt,zdt,Udt,Xdt,Wdt,Vdt,Qdt,Ydt,Jdt,Zdt,ngt,tgt,egt,igt,rgt,cgt,agt,ugt,ogt,sgt,hgt,fgt,lgt,bgt,wgt,dgt,ggt,pgt,vgt,mgt,ygt,kgt,jgt,Egt,Tgt,Mgt,Sgt,Pgt,Cgt,Igt,Ogt,Agt,$gt,Lgt,Ngt,xgt,Dgt,Rgt,Kgt,_gt,Fgt,Bgt,Hgt,qgt,Ggt,zgt,Ugt,Xgt,Wgt,Vgt,Qgt,Ygt,Jgt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,upt,opt,spt,hpt,fpt,lpt,bpt,wpt,dpt,gpt,ppt,vpt,mpt,ypt,kpt,jpt,Ept,Tpt,Mpt,Spt,Ppt,Cpt,Ipt,Opt,Apt,$pt,Lpt,Npt,xpt,Dpt,Rpt,Kpt,_pt,Fpt,Bpt,Hpt,qpt,Gpt,zpt,Upt,Xpt,Wpt,Vpt,Qpt,Ypt,Jpt,Zpt,nvt,tvt,evt,ivt=Ben(F1n,"LayerConstraint",163,Unt,D5,fF);wAn(848,1,QYn,hf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U1n),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),Pbt),(PPn(),gMt)),Lht),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X1n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W1n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Qbt),gMt),Glt),nbn(hMt)))),a2(n,W1n,e0n,Jbt),a2(n,W1n,l0n,Ybt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V1n),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Q1n),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Pj(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y1n),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),wMt),ktt),nbn(fMt)),Pun(Gk(Qtt,1),sVn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J1n),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),xwt),gMt),zvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Z1n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),iln(7)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n0n),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t0n),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e0n),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),Mbt),gMt),Cht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,i0n),f2n),"Node Layering Strategy"),"Strategy for node layering."),bwt),gMt),ovt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,r0n),f2n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),iwt),gMt),ivt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,c0n),f2n),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,a0n),f2n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u0n),l2n),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),iln(4)),vMt),Att),nbn(hMt)))),a2(n,u0n,i0n,awt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o0n),l2n),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),iln(2)),vMt),Att),nbn(hMt)))),a2(n,o0n,i0n,owt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s0n),b2n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),fwt),gMt),Dvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h0n),b2n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),iln(0)),vMt),Att),nbn(hMt)))),a2(n,h0n,s0n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f0n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),iln(DWn)),vMt),Att),nbn(hMt)))),a2(n,f0n,i0n,nwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l0n),w2n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),Ebt),gMt),pht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b0n),w2n),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,w0n),w2n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dMt),Ptt),nbn(hMt)))),a2(n,w0n,d2n,pbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,d0n),w2n),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),wMt),ktt),nbn(hMt)))),a2(n,d0n,l0n,kbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,g0n),w2n),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,p0n),w2n),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v0n),g2n),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),iln(40)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m0n),g2n),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),wbt),gMt),Ift),nbn(hMt)))),a2(n,m0n,l0n,dbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y0n),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),hbt),gMt),Ift),nbn(hMt)))),a2(n,y0n,l0n,fbt),a2(n,y0n,d2n,lbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,k0n),p2n),"Node Placement Strategy"),"Strategy for node placement."),Lwt),gMt),Avt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,j0n),p2n),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),wMt),ktt),nbn(hMt)))),a2(n,j0n,k0n,Ewt),a2(n,j0n,k0n,Twt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E0n),v2n),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),pwt),gMt),Zht),nbn(hMt)))),a2(n,E0n,k0n,vwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T0n),v2n),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),ywt),gMt),uft),nbn(hMt)))),a2(n,T0n,k0n,kwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M0n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dMt),Ptt),nbn(hMt)))),a2(n,M0n,k0n,Swt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,S0n),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),gMt),kvt),nbn(sMt)))),a2(n,S0n,k0n,Awt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P0n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),Iwt),gMt),kvt),nbn(hMt)))),a2(n,P0n,k0n,Owt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,C0n),m2n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),xbt),gMt),nmt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,I0n),m2n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Rbt),gMt),cmt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O0n),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),_bt),gMt),hmt),nbn(hMt)))),a2(n,O0n,y2n,Fbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,A0n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dMt),Ptt),nbn(hMt)))),a2(n,A0n,y2n,Hbt),a2(n,A0n,O0n,qbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,$0n),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),dMt),Ptt),nbn(hMt)))),a2(n,$0n,y2n,Lbt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,L0n),k2n),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,N0n),k2n),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,x0n),k2n),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,D0n),k2n),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,R0n),j2n),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,K0n),j2n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_0n),j2n),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F0n),E2n),DJn),"Tries to further compact components (disconnected sub-graphs)."),!1),wMt),ktt),nbn(hMt)))),a2(n,F0n,kZn,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B0n),T2n),"Post Compaction Strategy"),M2n),Ylt),gMt),mft),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H0n),T2n),"Post Compaction Constraint Calculation"),M2n),Vlt),gMt),lht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,q0n),S2n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,G0n),S2n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),iln(16)),vMt),Att),nbn(hMt)))),a2(n,G0n,q0n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z0n),S2n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),iln(5)),vMt),Att),nbn(hMt)))),a2(n,z0n,q0n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U0n),P2n),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),bdt),gMt),Smt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X0n),P2n),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),dMt),Ptt),nbn(hMt)))),a2(n,X0n,U0n,Uwt),a2(n,X0n,U0n,Xwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W0n),P2n),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),dMt),Ptt),nbn(hMt)))),a2(n,W0n,U0n,Vwt),a2(n,W0n,U0n,Qwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V0n),C2n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),idt),gMt),Tht),nbn(hMt)))),a2(n,V0n,U0n,rdt),a2(n,V0n,U0n,cdt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,Q0n),C2n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),mMt),Rnt),nbn(hMt)))),a2(n,Q0n,V0n,Jwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y0n),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),ndt),vMt),Att),nbn(hMt)))),a2(n,Y0n,V0n,tdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J0n),I2n),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),vdt),gMt),dmt),nbn(hMt)))),a2(n,J0n,U0n,mdt),a2(n,J0n,U0n,ydt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,Z0n),I2n),"Valid Indices for Wrapping"),null),mMt),Rnt),nbn(hMt)))),a2(n,Z0n,U0n,ddt),a2(n,Z0n,U0n,gdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n2n),O2n),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),wMt),ktt),nbn(hMt)))),a2(n,n2n,U0n,sdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t2n),O2n),"Distance Penalty When Improving Cuts"),null),2),dMt),Ptt),nbn(hMt)))),a2(n,t2n,U0n,udt),a2(n,t2n,n2n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e2n),O2n),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),wMt),ktt),nbn(hMt)))),a2(n,e2n,U0n,fdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,i2n),A2n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Abt),gMt),zht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,r2n),A2n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),Ibt),gMt),uht),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,c2n),$2n),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),abt),gMt),Fvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,a2n),$2n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u2n),$2n),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),Zlt),gMt),mut),nbn(hMt)))),a2(n,u2n,kZn,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o2n),$2n),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),ibt),gMt),wvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s2n),$2n),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),dMt),Ptt),nbn(hMt)))),a2(n,s2n,c2n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h2n),$2n),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),dMt),Ptt),nbn(hMt)))),a2(n,h2n,c2n,null),vWn((new bf,n))},vX(F1n,"LayeredMetaDataProvider",848),wAn(986,1,QYn,bf),MWn.Qe=function(n){vWn(n)},vX(F1n,"LayeredOptions",986),wAn(987,1,{},Cc),MWn.$e=function(){return new Uv},MWn._e=function(n){},vX(F1n,"LayeredOptions/LayeredFactory",987),wAn(1372,1,{}),MWn.a=0,vX(y3n,"ElkSpacings/AbstractSpacingsBuilder",1372),wAn(779,1372,{},uwn),vX(F1n,"LayeredSpacings/LayeredSpacingsBuilder",779),wAn(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},RP),MWn.Kf=function(){return rLn(this)},MWn.Xf=function(){return rLn(this)};var rvt,cvt,avt,uvt,ovt=Ben(F1n,"LayeringStrategy",313,Unt,e9,lF);wAn(378,22,{3:1,35:1,22:1,378:1},KP);var svt,hvt,fvt,lvt,bvt,wvt=Ben(F1n,"LongEdgeOrderingStrategy",378,Unt,E1,bF);wAn(197,22,{3:1,35:1,22:1,197:1},_P);var dvt,gvt,pvt,vvt,mvt,yvt,kvt=Ben(F1n,"NodeFlexibility",197,Unt,k3,wF);wAn(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},FP),MWn.Kf=function(){return DAn(this)},MWn.Xf=function(){return DAn(this)};var jvt,Evt,Tvt,Mvt,Svt,Pvt,Cvt,Ivt,Ovt,Avt=Ben(F1n,"NodePlacementStrategy",315,Unt,$5,yF);wAn(260,22,{3:1,35:1,22:1,260:1},HP);var $vt,Lvt,Nvt,xvt,Dvt=Ben(F1n,"NodePromotionStrategy",260,Unt,Btn,gF);wAn(339,22,{3:1,35:1,22:1,339:1},qP);var Rvt,Kvt,_vt,Fvt=Ben(F1n,"OrderingStrategy",339,Unt,A1,pF);wAn(421,22,{3:1,35:1,22:1,421:1},GP);var Bvt,Hvt,qvt,Gvt,zvt=Ben(F1n,"PortSortingStrategy",421,Unt,UY,vF);wAn(452,22,{3:1,35:1,22:1,452:1},zP);var Uvt,Xvt,Wvt,Vvt,Qvt=Ben(F1n,"PortType",452,Unt,O1,dF);wAn(375,22,{3:1,35:1,22:1,375:1},UP);var Yvt,Jvt,Zvt,nmt=Ben(F1n,"SelfLoopDistributionStrategy",375,Unt,$1,mF);wAn(376,22,{3:1,35:1,22:1,376:1},XP);var tmt,emt,imt,rmt,cmt=Ben(F1n,"SelfLoopOrderingStrategy",376,Unt,BY,kF);wAn(304,1,{304:1},sGn),vX(F1n,"Spacings",304),wAn(336,22,{3:1,35:1,22:1,336:1},WP);var amt,umt,omt,smt,hmt=Ben(F1n,"SplineRoutingMode",336,Unt,N1,jF);wAn(338,22,{3:1,35:1,22:1,338:1},VP);var fmt,lmt,bmt,wmt,dmt=Ben(F1n,"ValidifyStrategy",338,Unt,x1,EF);wAn(377,22,{3:1,35:1,22:1,377:1},QP);var gmt,pmt,vmt,mmt,ymt,kmt,jmt,Emt,Tmt,Mmt,Smt=Ben(F1n,"WrappingStrategy",377,Unt,L1,TF);wAn(1383,1,E3n,wf),MWn.Yf=function(n){return BB(n,37),pmt},MWn.pf=function(n,t){JHn(this,BB(n,37),t)},vX(T3n,"DepthFirstCycleBreaker",1383),wAn(782,1,E3n,KG),MWn.Yf=function(n){return BB(n,37),vmt},MWn.pf=function(n,t){UXn(this,BB(n,37),t)},MWn.Zf=function(n){return BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyCycleBreaker",782),wAn(1386,782,E3n,TI),MWn.Zf=function(n){var t,e,i,r;for(r=null,t=DWn,i=new Wb(n);i.a<i.c.c.length;)Lx(e=BB(n0(i),10),(hWn(),wlt))&&BB(mMn(e,wlt),19).a<t&&(t=BB(mMn(e,wlt),19).a,r=e);return r||BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyModelOrderCycleBreaker",1386),wAn(1384,1,E3n,rf),MWn.Yf=function(n){return BB(n,37),mmt},MWn.pf=function(n,t){Iqn(this,BB(n,37),t)},vX(T3n,"InteractiveCycleBreaker",1384),wAn(1385,1,E3n,cf),MWn.Yf=function(n){return BB(n,37),ymt},MWn.pf=function(n,t){Lqn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,vX(T3n,"ModelOrderCycleBreaker",1385),wAn(1389,1,E3n,$M),MWn.Yf=function(n){return BB(n,37),kmt},MWn.pf=function(n,t){JXn(this,BB(n,37),t)},vX(M3n,"CoffmanGrahamLayerer",1389),wAn(1390,1,MYn,Dd),MWn.ue=function(n,t){return BIn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1390),wAn(1391,1,MYn,Rd),MWn.ue=function(n,t){return zG(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/lambda$1$Type",1391),wAn(1392,1,E3n,Ic),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),kot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){EUn(this,BB(n,37),t)},vX(M3n,"InteractiveLayerer",1392),wAn(569,1,{569:1},im),MWn.a=0,MWn.c=0,vX(M3n,"InteractiveLayerer/LayerSpan",569),wAn(1388,1,E3n,ef),MWn.Yf=function(n){return BB(n,37),jmt},MWn.pf=function(n,t){qxn(this,BB(n,37),t)},vX(M3n,"LongestPathLayerer",1388),wAn(1395,1,E3n,sf),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){iXn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,MWn.d=0,vX(M3n,"MinWidthLayerer",1395),wAn(1396,1,MYn,Kd),MWn.ue=function(n,t){return dan(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"MinWidthLayerer/MinOutgoingEdgesComparator",1396),wAn(1387,1,E3n,of),MWn.Yf=function(n){return BB(n,37),Mmt},MWn.pf=function(n,t){mGn(this,BB(n,37),t)},vX(M3n,"NetworkSimplexLayerer",1387),wAn(1393,1,E3n,RR),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){$zn(this,BB(n,37),t)},MWn.d=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.s=0,MWn.t=0,MWn.u=0,vX(M3n,"StretchWidthLayerer",1393),wAn(1394,1,MYn,Oc),MWn.ue=function(n,t){return R6(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"StretchWidthLayerer/1",1394),wAn(402,1,S3n),MWn.Nf=function(n,t,e,i,r,c){},MWn._f=function(n,t,e){return r_n(this,n,t,e)},MWn.Mf=function(){this.g=x8(DNt,P3n,25,this.d,15,1),this.f=x8(DNt,P3n,25,this.d,15,1)},MWn.Of=function(n,t){this.e[n]=x8(ANt,hQn,25,t[n].length,15,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,this.e[n][t]=t},MWn.Qf=function(n,t,e,i){BB(xq(i[n][t].j,e),11).p=this.d++},MWn.b=0,MWn.c=0,MWn.d=0,vX(C3n,"AbstractBarycenterPortDistributor",402),wAn(1633,1,MYn,_d),MWn.ue=function(n,t){return qgn(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"AbstractBarycenterPortDistributor/lambda$0$Type",1633),wAn(817,1,N1n,G2),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Qf=function(n,t,e,i){},MWn.Lf=function(){return!1},MWn.Mf=function(){this.c=this.e.a,this.g=this.f.g},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Rf=function(){return!1},MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,BB(this,660)):(SQ(),m$(n,this.d)),Ban(this.e,n))},MWn.Sf=function(n,t,e,i){var r,c,a,u,o,s,h;for(t!=Jq(e,n.length)&&(c=n[t-(e?1:-1)],G6(this.f,c,e?(ain(),qvt):(ain(),Hvt))),r=n[t][0],h=!i||r.k==(uSn(),Mut),s=u6(n[t]),this.ag(s,h,!1,e),a=0,o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),n[t][a++]=u;return!1},MWn.Tf=function(n,t){var e,i,r,c,a;for(c=u6(n[a=Jq(t,n.length)]),this.ag(c,!1,!0,t),e=0,r=new Wb(c);r.a<r.c.c.length;)i=BB(n0(r),10),n[a][e++]=i;return!1},vX(C3n,"BarycenterHeuristic",817),wAn(658,1,{658:1},Bd),MWn.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},MWn.b=0,MWn.d=0,MWn.e=!1;var Pmt=vX(C3n,"BarycenterHeuristic/BarycenterState",658);wAn(1802,1,MYn,Fd),MWn.ue=function(n,t){return MEn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"BarycenterHeuristic/lambda$0$Type",1802),wAn(816,1,N1n,UEn),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){this.a[n]=x8(Pmt,{3:1,4:1,5:1,2018:1},658,t[n].length,0,1),this.b[n]=x8(Lmt,{3:1,4:1,5:1,2019:1},233,t[n].length,0,1)},MWn.Pf=function(n,t,e){Dgn(this,e[n][t],!0)},MWn.c=!1,vX(C3n,"ForsterConstraintResolver",816),wAn(233,1,{233:1},DY,uGn),MWn.Ib=function(){var n,t;for((t=new Ck).a+="[",n=0;n<this.d.length;n++)oO(t,$pn(this.d[n])),null!=lL(this.g,this.d[0]).a&&oO(oO((t.a+="<",t),ZI(lL(this.g,this.d[0]).a)),">"),n<this.d.length-1&&(t.a+=FWn);return(t.a+="]",t).a},MWn.a=0,MWn.c=0,MWn.f=0;var Cmt,Imt,Omt,Amt,$mt,Lmt=vX(C3n,"ForsterConstraintResolver/ConstraintGroup",233);wAn(1797,1,lVn,qd),MWn.td=function(n){Dgn(this.a,BB(n,10),!1)},vX(C3n,"ForsterConstraintResolver/lambda$0$Type",1797),wAn(214,1,{214:1,225:1},CGn),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Mf=function(){this.r=x8(ANt,hQn,25,this.n,15,1)},MWn.Pf=function(n,t,e){var i;(i=e[n][t].e)&&WB(this.b,i)},MWn.Qf=function(n,t,e,i){++this.n},MWn.Ib=function(){return izn(this.e,new Rv)},MWn.g=!1,MWn.i=!1,MWn.n=0,MWn.s=!1,vX(C3n,"GraphInfoHolder",214),wAn(1832,1,N1n,Pc),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Qf=function(n,t,e,i){},MWn._f=function(n,t,e){return e&&t>0?uZ(this.a,n[t-1],n[t]):!e&&t<n.length-1?uZ(this.a,n[t],n[t+1]):yrn(this.a,n[t],e?(kUn(),CIt):(kUn(),oIt)),bLn(this,n,t,e)},MWn.Mf=function(){this.d=x8(ANt,hQn,25,this.c,15,1),this.a=new QK(this.d)},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c+=i.j.c.length},MWn.c=0,vX(C3n,"GreedyPortDistributor",1832),wAn(1401,1,E3n,df),MWn.Yf=function(n){return Xhn(BB(n,37))},MWn.pf=function(n,t){XGn(BB(n,37),t)},vX(C3n,"InteractiveCrossingMinimizer",1401),wAn(1402,1,MYn,Gd),MWn.ue=function(n,t){return Hjn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"InteractiveCrossingMinimizer/1",1402),wAn(507,1,{507:1,123:1,51:1},Ny),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Imt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){P_n(this,BB(n,37),t)},MWn.e=0,vX(C3n,"LayerSweepCrossingMinimizer",507),wAn(1398,1,lVn,zd),MWn.td=function(n){wBn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1398),wAn(1399,1,lVn,Ud),MWn.td=function(n){Ohn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1399),wAn(1400,1,lVn,Xd),MWn.td=function(n){pFn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1400),wAn(454,22,{3:1,35:1,22:1,454:1},YP);var Nmt,xmt=Ben(C3n,"LayerSweepCrossingMinimizer/CrossMinType",454,Unt,D1,MF);wAn(1397,1,DVn,Ac),MWn.Mb=function(n){return _cn(),0==BB(n,29).a.c.length},vX(C3n,"LayerSweepCrossingMinimizer/lambda$0$Type",1397),wAn(1799,1,N1n,aZ),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){t[n][0].c.p=n,this.b[n]=x8(_mt,{3:1,4:1,5:1,1944:1},659,t[n].length,0,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,$X(this.b[n],t,new $c)},vX(C3n,"LayerSweepTypeDecider",1799),wAn(659,1,{659:1},$c),MWn.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0;var Dmt,Rmt,Kmt,_mt=vX(C3n,"LayerSweepTypeDecider/NodeInfo",659);wAn(1800,1,qYn,Lc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(C3n,"LayerSweepTypeDecider/lambda$0$Type",1800),wAn(1801,1,qYn,Nc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(C3n,"LayerSweepTypeDecider/lambda$1$Type",1801),wAn(1833,402,S3n,Dj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f;switch(s=this.g,e.g){case 1:for(i=0,r=0,o=new Wb(n.j);o.a<o.c.c.length;)0!=(a=BB(n0(o),11)).e.c.length&&(++i,a.j==(kUn(),sIt)&&++r);for(c=t+r,f=t+i,u=xwn(n,(ain(),Hvt)).Kc();u.Ob();)(a=BB(u.Pb(),11)).j==(kUn(),sIt)?(s[a.p]=c,--c):(s[a.p]=f,--f);return i;case 2:for(h=0,u=xwn(n,(ain(),qvt)).Kc();u.Ob();)++h,s[(a=BB(u.Pb(),11)).p]=t+h;return h;default:throw Hp(new wv)}},vX(C3n,"LayerTotalPortDistributor",1833),wAn(660,817,{660:1,225:1},prn),MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,this):(SQ(),m$(n,this.d)),qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),xdt)))||Ban(this.e,n))},vX(C3n,"ModelOrderBarycenterHeuristic",660),wAn(1803,1,MYn,Wd),MWn.ue=function(n,t){return KSn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),wAn(1403,1,E3n,jf),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Dmt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){mY((BB(n,37),t))},vX(C3n,"NoCrossingMinimizer",1403),wAn(796,402,S3n,Rj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Wb(n.j);h.a<h.c.c.length;)0!=(o=BB(n0(h),11)).e.c.length&&(++r,o.j==(kUn(),sIt)&&++c);for(a=t+c*(i=1/(r+1)),b=t+1-i,s=xwn(n,(ain(),Hvt)).Kc();s.Ob();)(o=BB(s.Pb(),11)).j==(kUn(),sIt)?(f[o.p]=a,a-=i):(f[o.p]=b,b-=i);break;case 2:for(u=0,h=new Wb(n.j);h.a<h.c.c.length;)0==(o=BB(n0(h),11)).g.c.length||++u;for(l=t+(i=1/(u+1)),s=xwn(n,(ain(),qvt)).Kc();s.Ob();)f[(o=BB(s.Pb(),11)).p]=l,l+=i;break;default:throw Hp(new _y("Port type is undefined"))}return 1},vX(C3n,"NodeRelativePortDistributor",796),wAn(807,1,{},Vz,HMn),vX(C3n,"SweepCopy",807),wAn(1798,1,N1n,wdn),MWn.Of=function(n,t){},MWn.Mf=function(){var n;n=x8(ANt,hQn,25,this.f,15,1),this.d=new eg(n),this.a=new QK(n)},MWn.Nf=function(n,t,e,i,r,c){var a;a=BB(xq(c[n][t].j,e),11),r.c==a&&r.c.i.c==r.d.i.c&&++this.e[n]},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c[n]=this.c[n]|i.k==(uSn(),Iut)},MWn.Qf=function(n,t,e,i){var r;(r=BB(xq(i[n][t].j,e),11)).p=this.f++,r.g.c.length+r.e.c.length>1&&(r.j==(kUn(),oIt)?this.b[n]=!0:r.j==CIt&&n>0&&(this.b[n-1]=!0))},MWn.f=0,vX(L1n,"AllCrossingsCounter",1798),wAn(587,1,{},mrn),MWn.b=0,MWn.d=0,vX(L1n,"BinaryIndexedTree",587),wAn(524,1,{},QK),vX(L1n,"CrossingsCounter",524),wAn(1906,1,MYn,Vd),MWn.ue=function(n,t){return Xq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$0$Type",1906),wAn(1907,1,MYn,Qd),MWn.ue=function(n,t){return Wq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$1$Type",1907),wAn(1908,1,MYn,Yd),MWn.ue=function(n,t){return Vq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$2$Type",1908),wAn(1909,1,MYn,Jd),MWn.ue=function(n,t){return Qq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$3$Type",1909),wAn(1910,1,lVn,Zd),MWn.td=function(n){p7(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$4$Type",1910),wAn(1911,1,DVn,ng),MWn.Mb=function(n){return yI(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$5$Type",1911),wAn(1912,1,lVn,tg),MWn.td=function(n){mI(this,n)},vX(L1n,"CrossingsCounter/lambda$6$Type",1912),wAn(1913,1,lVn,ZP),MWn.td=function(n){var t;hH(),d3(this.b,(t=this.a,BB(n,11),t))},vX(L1n,"CrossingsCounter/lambda$7$Type",1913),wAn(826,1,qYn,xc),MWn.Lb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},vX(L1n,"CrossingsCounter/lambda$8$Type",826),wAn(1905,1,{},eg),vX(L1n,"HyperedgeCrossingsCounter",1905),wAn(467,1,{35:1,467:1},DR),MWn.wd=function(n){return vgn(this,BB(n,467))},MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0;var Fmt=vX(L1n,"HyperedgeCrossingsCounter/Hyperedge",467);wAn(362,1,{35:1,362:1},qV),MWn.wd=function(n){return l$n(this,BB(n,362))},MWn.b=0,MWn.c=0;var Bmt,Hmt,qmt=vX(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner",362);wAn(523,22,{3:1,35:1,22:1,523:1},JP);var Gmt,zmt,Umt,Xmt,Wmt,Vmt=Ben(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Unt,XY,SF);wAn(1405,1,E3n,lf),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?zmt:null},MWn.pf=function(n,t){ljn(this,BB(n,37),t)},vX(I3n,"InteractiveNodePlacer",1405),wAn(1406,1,E3n,ff),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Umt:null},MWn.pf=function(n,t){jmn(this,BB(n,37),t)},vX(I3n,"LinearSegmentsNodePlacer",1406),wAn(257,1,{35:1,257:1},rm),MWn.wd=function(n){return uj(this,BB(n,257))},MWn.Fb=function(n){var t;return!!cL(n,257)&&(t=BB(n,257),this.b==t.b)},MWn.Hb=function(){return this.b},MWn.Ib=function(){return"ls"+LMn(this.e)},MWn.a=0,MWn.b=0,MWn.c=-1,MWn.d=-1,MWn.g=0;var Qmt,Ymt=vX(I3n,"LinearSegmentsNodePlacer/LinearSegment",257);wAn(1408,1,E3n,_G),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Qmt:null},MWn.pf=function(n,t){SXn(this,BB(n,37),t)},MWn.b=0,MWn.g=0,vX(I3n,"NetworkSimplexPlacer",1408),wAn(1427,1,MYn,Dc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"NetworkSimplexPlacer/0methodref$compare$Type",1427),wAn(1429,1,MYn,Rc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"NetworkSimplexPlacer/1methodref$compare$Type",1429),wAn(649,1,{649:1},nC);var Jmt=vX(I3n,"NetworkSimplexPlacer/EdgeRep",649);wAn(401,1,{401:1},GV),MWn.b=!1;var Zmt,nyt,tyt,eyt=vX(I3n,"NetworkSimplexPlacer/NodeRep",401);wAn(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},um),vX(I3n,"NetworkSimplexPlacer/Path",508),wAn(1409,1,{},Kc),MWn.Kb=function(n){return BB(n,17).d.i.k},vX(I3n,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),wAn(1410,1,DVn,_c),MWn.Mb=function(n){return BB(n,267)==(uSn(),Put)},vX(I3n,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),wAn(1411,1,{},Fc),MWn.Kb=function(n){return BB(n,17).d.i},vX(I3n,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),wAn(1412,1,DVn,ig),MWn.Mb=function(n){return HD(tdn(BB(n,10)))},vX(I3n,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),wAn(1413,1,DVn,Bc),MWn.Mb=function(n){return hq(BB(n,11))},vX(I3n,"NetworkSimplexPlacer/lambda$0$Type",1413),wAn(1414,1,lVn,tC),MWn.td=function(n){D$(this.a,this.b,BB(n,11))},vX(I3n,"NetworkSimplexPlacer/lambda$1$Type",1414),wAn(1423,1,lVn,rg),MWn.td=function(n){WCn(this.a,BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$10$Type",1423),wAn(1424,1,{},Hc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$11$Type",1424),wAn(1425,1,lVn,cg),MWn.td=function(n){BDn(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$12$Type",1425),wAn(1426,1,{},qc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(I3n,"NetworkSimplexPlacer/lambda$13$Type",1426),wAn(1428,1,{},Gc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(I3n,"NetworkSimplexPlacer/lambda$15$Type",1428),wAn(1430,1,DVn,zc),MWn.Mb=function(n){return BZ(),BB(n,401).c.k==(uSn(),Cut)},vX(I3n,"NetworkSimplexPlacer/lambda$17$Type",1430),wAn(1431,1,DVn,Uc),MWn.Mb=function(n){return BZ(),BB(n,401).c.j.c.length>1},vX(I3n,"NetworkSimplexPlacer/lambda$18$Type",1431),wAn(1432,1,lVn,zV),MWn.td=function(n){cwn(this.c,this.b,this.d,this.a,BB(n,401))},MWn.c=0,MWn.d=0,vX(I3n,"NetworkSimplexPlacer/lambda$19$Type",1432),wAn(1415,1,{},Xc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$2$Type",1415),wAn(1433,1,lVn,ag),MWn.td=function(n){N$(this.a,BB(n,11))},MWn.a=0,vX(I3n,"NetworkSimplexPlacer/lambda$20$Type",1433),wAn(1434,1,{},Wc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$21$Type",1434),wAn(1435,1,lVn,ug),MWn.td=function(n){dL(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$22$Type",1435),wAn(1436,1,DVn,Vc),MWn.Mb=function(n){return HD(n)},vX(I3n,"NetworkSimplexPlacer/lambda$23$Type",1436),wAn(1437,1,{},Qc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$24$Type",1437),wAn(1438,1,DVn,og),MWn.Mb=function(n){return EO(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$25$Type",1438),wAn(1439,1,lVn,eC),MWn.td=function(n){MPn(this.a,this.b,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$26$Type",1439),wAn(1440,1,DVn,Yc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$27$Type",1440),wAn(1441,1,DVn,Jc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$28$Type",1441),wAn(1442,1,{},sg),MWn.Ce=function(n,t){return sL(this.a,BB(n,29),BB(t,29))},vX(I3n,"NetworkSimplexPlacer/lambda$29$Type",1442),wAn(1416,1,{},Zc),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(I3n,"NetworkSimplexPlacer/lambda$3$Type",1416),wAn(1417,1,DVn,na),MWn.Mb=function(n){return BZ(),t2(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$4$Type",1417),wAn(1418,1,lVn,hg),MWn.td=function(n){iBn(this.a,BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$5$Type",1418),wAn(1419,1,{},ta),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$6$Type",1419),wAn(1420,1,DVn,ea),MWn.Mb=function(n){return BZ(),BB(n,10).k==(uSn(),Cut)},vX(I3n,"NetworkSimplexPlacer/lambda$7$Type",1420),wAn(1421,1,{},ia),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(hbn(BB(n,10)).a.Kc(),new h))))},vX(I3n,"NetworkSimplexPlacer/lambda$8$Type",1421),wAn(1422,1,DVn,ra),MWn.Mb=function(n){return BZ(),UH(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$9$Type",1422),wAn(1404,1,E3n,Cf),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Zmt:null},MWn.pf=function(n,t){kHn(BB(n,37),t)},vX(I3n,"SimpleNodePlacer",1404),wAn(180,1,{180:1},qKn),MWn.Ib=function(){var n;return n="",this.c==(gJ(),tyt)?n+=aJn:this.c==nyt&&(n+=cJn),this.o==(oZ(),ryt)?n+=pJn:this.o==cyt?n+="UP":n+="BALANCED",n},vX($3n,"BKAlignedLayout",180),wAn(516,22,{3:1,35:1,22:1,516:1},cC);var iyt,ryt,cyt,ayt=Ben($3n,"BKAlignedLayout/HDirection",516,Unt,VY,PF);wAn(515,22,{3:1,35:1,22:1,515:1},rC);var uyt,oyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,vyt,myt,yyt,kyt,jyt,Eyt,Tyt,Myt,Syt=Ben($3n,"BKAlignedLayout/VDirection",515,Unt,QY,CF);wAn(1634,1,{},iC),vX($3n,"BKAligner",1634),wAn(1637,1,{},Jyn),vX($3n,"BKCompactor",1637),wAn(654,1,{654:1},ca),MWn.a=0,vX($3n,"BKCompactor/ClassEdge",654),wAn(458,1,{458:1},cm),MWn.a=null,MWn.b=0,vX($3n,"BKCompactor/ClassNode",458),wAn(1407,1,E3n,jI),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?oyt:null},MWn.pf=function(n,t){rWn(this,BB(n,37),t)},MWn.d=!1,vX($3n,"BKNodePlacer",1407),wAn(1635,1,{},aa),MWn.d=0,vX($3n,"NeighborhoodInformation",1635),wAn(1636,1,MYn,fg),MWn.ue=function(n,t){return Mtn(this,BB(n,46),BB(t,46))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($3n,"NeighborhoodInformation/NeighborComparator",1636),wAn(808,1,{}),vX($3n,"ThresholdStrategy",808),wAn(1763,808,{},dm),MWn.bg=function(n,t,e){return this.a.o==(oZ(),cyt)?RQn:KQn},MWn.cg=function(){},vX($3n,"ThresholdStrategy/NullThresholdStrategy",1763),wAn(579,1,{579:1},aC),MWn.c=!1,MWn.d=!1,vX($3n,"ThresholdStrategy/Postprocessable",579),wAn(1764,808,{},gm),MWn.bg=function(n,t,e){var i,r,c;return r=t==e,i=this.a.a[e.p]==t,r||i?(c=n,this.a.c,gJ(),r&&(c=THn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=THn(this,e,!1)),c):n},MWn.cg=function(){for(var n,t,e;0!=this.d.b;)(t=cFn(this,e=BB(PJ(this.d),579))).a&&(n=t.a,(qy(this.a.f[this.a.g[e.b.p].p])||b5(n)||n.c.i.c!=n.d.i.c)&&(b$n(this,e)||rA(this.e,e)));for(;0!=this.e.a.c.length;)b$n(this,BB(thn(this.e),579))},vX($3n,"ThresholdStrategy/SimpleThresholdStrategy",1764),wAn(635,1,{635:1,246:1,234:1},ua),MWn.Kf=function(){return Tan(this)},MWn.Xf=function(){return Tan(this)},vX(L3n,"EdgeRouterFactory",635),wAn(1458,1,E3n,If),MWn.Yf=function(n){return Uxn(BB(n,37))},MWn.pf=function(n,t){DHn(BB(n,37),t)},vX(L3n,"OrthogonalEdgeRouter",1458),wAn(1451,1,E3n,EI),MWn.Yf=function(n){return Ejn(BB(n,37))},MWn.pf=function(n,t){OUn(this,BB(n,37),t)},vX(L3n,"PolylineEdgeRouter",1451),wAn(1452,1,qYn,oa),MWn.Lb=function(n){return Qan(BB(n,10))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return Qan(BB(n,10))},vX(L3n,"PolylineEdgeRouter/1",1452),wAn(1809,1,DVn,sa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$0$Type",1809),wAn(1810,1,{},ha),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$1$Type",1810),wAn(1811,1,DVn,fa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$2$Type",1811),wAn(1812,1,{},la),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$3$Type",1812),wAn(1813,1,{},ba),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$4$Type",1813),wAn(1814,1,{},wa),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$5$Type",1814),wAn(112,1,{35:1,112:1},Fan),MWn.wd=function(n){return oj(this,BB(n,112))},MWn.Fb=function(n){var t;return!!cL(n,112)&&(t=BB(n,112),this.g==t.g)},MWn.Hb=function(){return this.g},MWn.Ib=function(){var n,t,e,i;for(n=new lN("{"),i=new Wb(this.n);i.a<i.c.c.length;)null==(t=gyn((e=BB(n0(i),11)).i))&&(t="n"+AK(e.i)),n.a+=""+t,i.a<i.c.c.length&&(n.a+=",");return n.a+="}",n.a},MWn.a=0,MWn.b=0,MWn.c=NaN,MWn.d=0,MWn.g=0,MWn.i=0,MWn.o=0,MWn.s=NaN,vX(N3n,"HyperEdgeSegment",112),wAn(129,1,{129:1},zZ),MWn.Ib=function(){return this.a+"->"+this.b+" ("+wx(this.c)+")"},MWn.d=0,vX(N3n,"HyperEdgeSegmentDependency",129),wAn(520,22,{3:1,35:1,22:1,520:1},uC);var Pyt,Cyt,Iyt,Oyt,Ayt,$yt,Lyt,Nyt,xyt=Ben(N3n,"HyperEdgeSegmentDependency/DependencyType",520,Unt,WY,IF);wAn(1815,1,{},lg),vX(N3n,"HyperEdgeSegmentSplitter",1815),wAn(1816,1,{},zj),MWn.a=0,MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/AreaRating",1816),wAn(329,1,{329:1},kB),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"HyperEdgeSegmentSplitter/FreeArea",329),wAn(1817,1,MYn,ja),MWn.ue=function(n,t){return OK(BB(n,112),BB(t,112))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(N3n,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),wAn(1818,1,lVn,XV),MWn.td=function(n){n4(this.a,this.d,this.c,this.b,BB(n,112))},MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),wAn(1819,1,{},Ea),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),wAn(1820,1,{},Ta),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),wAn(1821,1,{},Ma),MWn.Fe=function(n){return Gy(MD(n))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),wAn(655,1,{},fX),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"OrthogonalRoutingGenerator",655),wAn(1638,1,{},Sa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$0$Type",1638),wAn(1639,1,{},Pa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$1$Type",1639),wAn(661,1,{}),vX(x3n,"BaseRoutingDirectionStrategy",661),wAn(1807,661,{},pm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xC(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xC(w,a=t+b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xC(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),SIt},MWn.gg=function(){return kUn(),sIt},vX(x3n,"NorthToSouthRoutingStrategy",1807),wAn(1808,661,{},vm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xC(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xC(w,a=t-b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xC(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),sIt},MWn.gg=function(){return kUn(),SIt},vX(x3n,"SouthToNorthRoutingStrategy",1808),wAn(1806,661,{},mm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).b,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(a=f,l),DH(u.a,r),F_n(this,u,c,r,!0),(b=n.r)&&(r=new xC(a,w=Gy(MD(Dpn(b.e,0)))),DH(u.a,r),F_n(this,u,c,r,!0),c=b,r=new xC(a=t+b.o*i,w),DH(u.a,r),F_n(this,u,c,r,!0)),r=new xC(a,g),DH(u.a,r),F_n(this,u,c,r,!0)))},MWn.eg=function(n){return n.i.n.b+n.n.b+n.a.b},MWn.fg=function(){return kUn(),oIt},MWn.gg=function(){return kUn(),CIt},vX(x3n,"WestToEastRoutingStrategy",1806),wAn(813,1,{},oBn),MWn.Ib=function(){return LMn(this.a)},MWn.b=0,MWn.c=!1,MWn.d=!1,MWn.f=0,vX(R3n,"NubSpline",813),wAn(407,1,{407:1},Exn,wJ),vX(R3n,"NubSpline/PolarCP",407),wAn(1453,1,E3n,hyn),MWn.Yf=function(n){return rTn(BB(n,37))},MWn.pf=function(n,t){cXn(this,BB(n,37),t)},vX(R3n,"SplineEdgeRouter",1453),wAn(268,1,{268:1},S6),MWn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},MWn.c=0,vX(R3n,"SplineEdgeRouter/Dependency",268),wAn(455,22,{3:1,35:1,22:1,455:1},oC);var Dyt,Ryt,Kyt,_yt,Fyt,Byt=Ben(R3n,"SplineEdgeRouter/SideToProcess",455,Unt,YY,OF);wAn(1454,1,DVn,ya),MWn.Mb=function(n){return gxn(),!BB(n,128).o},vX(R3n,"SplineEdgeRouter/lambda$0$Type",1454),wAn(1455,1,{},ma),MWn.Ge=function(n){return gxn(),BB(n,128).v+1},vX(R3n,"SplineEdgeRouter/lambda$1$Type",1455),wAn(1456,1,lVn,sC),MWn.td=function(n){iq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$2$Type",1456),wAn(1457,1,lVn,hC),MWn.td=function(n){rq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$3$Type",1457),wAn(128,1,{35:1,128:1},tCn,hqn),MWn.wd=function(n){return sj(this,BB(n,128))},MWn.b=0,MWn.e=!1,MWn.f=0,MWn.g=0,MWn.j=!1,MWn.k=!1,MWn.n=0,MWn.o=!1,MWn.p=!1,MWn.q=!1,MWn.s=0,MWn.u=0,MWn.v=0,MWn.F=0,vX(R3n,"SplineSegment",128),wAn(459,1,{459:1},ka),MWn.a=0,MWn.b=!1,MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=0,vX(R3n,"SplineSegment/EdgeInformation",459),wAn(1234,1,{},da),vX(H3n,iZn,1234),wAn(1235,1,MYn,ga),MWn.ue=function(n,t){return IIn(BB(n,135),BB(t,135))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H3n,rZn,1235),wAn(1233,1,{},AE),vX(H3n,"MrTree",1233),wAn(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},fC),MWn.Kf=function(){return AIn(this)},MWn.Xf=function(){return AIn(this)};var Hyt,qyt=Ben(H3n,"TreeLayoutPhases",393,Unt,j3,AF);wAn(1130,209,NJn,_R),MWn.Ze=function(n,t){var e,i,r,c,a,u;for(qy(TD(ZAn(n,(CAn(),Ckt))))||jJ(new Tw((GM(),new Dy(n)))),qan(a=new P6,n),hon(a,(qqn(),skt),n),v_n(n,a,u=new xp),W_n(n,a,u),c=a,i=new Wb(r=x_n(this.a,c));i.a<i.c.c.length;)e=BB(n0(i),135),WEn(this.b,e,mcn(t,1/r.c.length));Izn(c=tWn(r))},vX(H3n,"TreeLayoutProvider",1130),wAn(1847,1,pVn,pa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/1",1847),wAn(1848,1,pVn,va),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/2",1848),wAn(502,134,{3:1,502:1,94:1,134:1}),MWn.g=0,vX(q3n,"TGraphElement",502),wAn(188,502,{3:1,188:1,502:1,94:1,134:1},UQ),MWn.Ib=function(){return this.b&&this.c?g0(this.b)+"->"+g0(this.c):"e_"+nsn(this)},vX(q3n,"TEdge",188),wAn(135,134,{3:1,135:1,94:1,134:1},P6),MWn.Ib=function(){var n,t,e,i,r;for(r=null,i=spn(this.b,0);i.b!=i.d.c;)r+=(null==(e=BB(b3(i),86)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=spn(this.a,0);t.b!=t.d.c;)r+=((n=BB(b3(t),188)).b&&n.c?g0(n.b)+"->"+g0(n.c):"e_"+nsn(n))+"\n";return r};var Gyt=vX(q3n,"TGraph",135);wAn(633,502,{3:1,502:1,633:1,94:1,134:1}),vX(q3n,"TShape",633),wAn(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},csn),MWn.Ib=function(){return g0(this)};var zyt,Uyt,Xyt,Wyt,Vyt,Qyt,Yyt=vX(q3n,"TNode",86);wAn(255,1,pVn,bg),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new wg(spn(this.a.d,0))},vX(q3n,"TNode/2",255),wAn(358,1,QWn,wg),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(b3(this.a),188).c},MWn.Ob=function(){return EE(this.a)},MWn.Qb=function(){mtn(this.a)},vX(q3n,"TNode/2/1",358),wAn(1840,1,n1n,KR),MWn.pf=function(n,t){xFn(this,BB(n,135),t)},vX(G3n,"FanProcessor",1840),wAn(327,22,{3:1,35:1,22:1,327:1,234:1},lC),MWn.Kf=function(){switch(this.g){case 0:return new Qm;case 1:return new KR;case 2:return new Oa;case 3:return new Ca;case 4:return new $a;case 5:return new La;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Jyt,Zyt,nkt,tkt,ekt,ikt,rkt,ckt,akt,ukt,okt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,vkt,mkt,ykt,kkt,jkt,Ekt,Tkt,Mkt,Skt,Pkt,Ckt,Ikt,Okt,Akt,$kt,Lkt,Nkt,xkt,Dkt,Rkt,Kkt,_kt=Ben(G3n,S1n,327,Unt,r9,$F);wAn(1843,1,n1n,Ca),MWn.pf=function(n,t){u$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"LevelHeightProcessor",1843),wAn(1844,1,pVn,Ia),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"LevelHeightProcessor/1",1844),wAn(1841,1,n1n,Oa),MWn.pf=function(n,t){QPn(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NeighborsProcessor",1841),wAn(1842,1,pVn,Aa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"NeighborsProcessor/1",1842),wAn(1845,1,n1n,$a),MWn.pf=function(n,t){a$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NodePositionProcessor",1845),wAn(1839,1,n1n,Qm),MWn.pf=function(n,t){ZHn(this,BB(n,135))},vX(G3n,"RootProcessor",1839),wAn(1846,1,n1n,La),MWn.pf=function(n,t){dln(BB(n,135))},vX(G3n,"Untreeifyer",1846),wAn(851,1,QYn,Pf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X3n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),kkt),(PPn(),gMt)),qkt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W3n),""),"Search Order"),"Which search order to use when computing a spanning tree."),mkt),gMt),Jkt),nbn(hMt)))),KGn((new Sf,n))},vX(V3n,"MrTreeMetaDataProvider",851),wAn(994,1,QYn,Sf),MWn.Qe=function(n){KGn(n)},vX(V3n,"MrTreeOptions",994),wAn(995,1,{},Na),MWn.$e=function(){return new _R},MWn._e=function(n){},vX(V3n,"MrTreeOptions/MrtreeFactory",995),wAn(480,22,{3:1,35:1,22:1,480:1},bC);var Fkt,Bkt,Hkt,qkt=Ben(V3n,"OrderWeighting",480,Unt,ZY,LF);wAn(425,22,{3:1,35:1,22:1,425:1},wC);var Gkt,zkt,Ukt,Xkt,Wkt,Vkt,Qkt,Ykt,Jkt=Ben(V3n,"TreeifyingOrder",425,Unt,JY,xF);wAn(1459,1,E3n,pf),MWn.Yf=function(n){return BB(n,135),zkt},MWn.pf=function(n,t){ycn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),wAn(1460,1,E3n,vf),MWn.Yf=function(n){return BB(n,135),Ukt},MWn.pf=function(n,t){fCn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),wAn(1461,1,E3n,gf),MWn.Yf=function(n){return BB(n,135),Xkt},MWn.pf=function(n,t){nRn(this,BB(n,135),t)},MWn.a=0,vX("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),wAn(1462,1,E3n,mf),MWn.Yf=function(n){return BB(n,135),Wkt},MWn.pf=function(n,t){xkn(BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462),wAn(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},dC),MWn.Kf=function(){return bwn(this)},MWn.Xf=function(){return bwn(this)};var Zkt,njt,tjt,ejt,ijt=Ben(J3n,"RadialLayoutPhases",495,Unt,nJ,NF);wAn(1131,209,NJn,OE),MWn.Ze=function(n,t){var e,i,r;if(OTn(t,"Radial layout",ECn(this,n).c.length),qy(TD(ZAn(n,(Uyn(),Ajt))))||jJ(new Tw((GM(),new Dy(n)))),r=uTn(n),Ypn(n,(wD(),Vkt),r),!r)throw Hp(new _y("The given graph is not a tree!"));for(0==(e=Gy(MD(ZAn(n,Djt))))&&(e=fIn(n)),Ypn(n,Djt,e),i=new Wb(ECn(this,n));i.a<i.c.c.length;)BB(n0(i),51).pf(n,mcn(t,1));HSn(t)},vX(J3n,"RadialLayoutProvider",1131),wAn(549,1,MYn,IE),MWn.ue=function(n,t){return DRn(this.a,this.b,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=0,MWn.b=0,vX(J3n,"RadialUtil/lambda$0$Type",549),wAn(1375,1,n1n,Da),MWn.pf=function(n,t){dGn(BB(n,33),t)},vX(t4n,"CalculateGraphSize",1375),wAn(442,22,{3:1,35:1,22:1,442:1,234:1},gC),MWn.Kf=function(){switch(this.g){case 0:return new Ba;case 1:return new xa;case 2:return new Da;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var rjt,cjt,ajt,ujt=Ben(t4n,S1n,442,Unt,R1,DF);wAn(645,1,{}),MWn.e=1,MWn.g=0,vX(e4n,"AbstractRadiusExtensionCompaction",645),wAn(1772,645,{},gD),MWn.hg=function(n){var t,e,i,r,c,a,u,o,s;for(this.c=BB(ZAn(n,(wD(),Vkt)),33),eb(this,this.c),this.d=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(o=BB(ZAn(n,Mjt),19))&&tb(this,o.a),ib(this,(kW(u=MD(ZAn(n,(sWn(),LPt)))),u)),s=wDn(this.c),this.d&&this.d.lg(s),vKn(this,s),a=new Jy(Pun(Gk(UOt,1),i4n,33,0,[this.c])),e=0;e<2;e++)for(t=0;t<s.c.length;t++)r=new Jy(Pun(Gk(UOt,1),i4n,33,0,[(l1(t,s.c.length),BB(s.c[t],33))])),c=t<s.c.length-1?(l1(t+1,s.c.length),BB(s.c[t+1],33)):(l1(0,s.c.length),BB(s.c[0],33)),i=0==t?BB(xq(s,s.c.length-1),33):(l1(t-1,s.c.length),BB(s.c[t-1],33)),ZTn(this,(l1(t,s.c.length),BB(s.c[t],33),a),i,c,r)},vX(e4n,"AnnulusWedgeCompaction",1772),wAn(1374,1,n1n,xa),MWn.pf=function(n,t){bjn(BB(n,33),t)},vX(e4n,"GeneralCompactor",1374),wAn(1771,645,{},Ra),MWn.hg=function(n){var t,e,i,r;e=BB(ZAn(n,(wD(),Vkt)),33),this.f=e,this.b=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(r=BB(ZAn(n,Mjt),19))&&tb(this,r.a),ib(this,(kW(i=MD(ZAn(n,(sWn(),LPt)))),i)),t=wDn(e),this.b&&this.b.lg(t),vPn(this,t)},MWn.a=0,vX(e4n,"RadialCompaction",1771),wAn(1779,1,{},Ka),MWn.ig=function(n){var t,e,i,r,c,a;for(this.a=n,t=0,i=0,c=new Wb(a=wDn(n));c.a<c.c.c.length;)for(r=BB(n0(c),33),e=++i;e<a.c.length;e++)YFn(this,r,(l1(e,a.c.length),BB(a.c[e],33)))&&(t+=1);return t},vX(r4n,"CrossingMinimizationPosition",1779),wAn(1777,1,{},_a),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f,l,b,w,d;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),f=(o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+o.g/2,l=o.j+o.f/2,c=n.i+n.g/2,a=n.j+n.f/2,(b=new Gj).a=f-c,b.b=l-a,Ukn(u=new xC(b.a,b.b),n.g,n.f),b.a-=u.a,b.b-=u.b,c=f-b.a,a=l-b.b,Ukn(s=new xC(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,w=(f=c+b.a)-c,d=(l=a+b.b)-a,r+=e.Math.sqrt(w*w+d*d);return r},vX(r4n,"EdgeLengthOptimization",1777),wAn(1778,1,{},Fa),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),u=(a=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+a.g/2,o=a.j+a.f/2,c=BB(ZAn(a,(sWn(),gPt)),8),s=u-(n.i+c.a+n.g/2),f=o-(n.j+c.b+n.f),r+=e.Math.sqrt(s*s+f*f);return r},vX(r4n,"EdgeLengthPositionOptimization",1778),wAn(1373,645,n1n,Ba),MWn.pf=function(n,t){fLn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1373),wAn(426,22,{3:1,35:1,22:1,426:1},pC);var ojt,sjt,hjt,fjt,ljt=Ben(a4n,"AnnulusWedgeCriteria",426,Unt,tJ,RF);wAn(380,22,{3:1,35:1,22:1,380:1},vC);var bjt,wjt,djt,gjt,pjt,vjt,mjt,yjt,kjt,jjt,Ejt,Tjt,Mjt,Sjt,Pjt,Cjt,Ijt,Ojt,Ajt,$jt,Ljt,Njt,xjt,Djt,Rjt,Kjt,_jt,Fjt,Bjt,Hjt,qjt,Gjt=Ben(a4n,FJn,380,Unt,K1,KF);wAn(852,1,QYn,yf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u4n),""),"Order ID"),"The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly."),iln(0)),(PPn(),vMt)),Att),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o4n),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s4n),""),"Compaction"),"With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately."),gjt),gMt),Gjt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h4n),""),"Compaction Step Size"),"Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration."),iln(1)),vMt),Att),nbn(hMt)))),a2(n,h4n,s4n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f4n),""),"Sorter"),"Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates."),jjt),gMt),Yjt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l4n),""),"Annulus Wedge Criteria"),"Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals."),Tjt),gMt),ljt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b4n),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),vjt),gMt),Vjt),nbn(hMt)))),tUn((new kf,n))},vX(a4n,"RadialMetaDataProvider",852),wAn(996,1,QYn,kf),MWn.Qe=function(n){tUn(n)},vX(a4n,"RadialOptions",996),wAn(997,1,{},Ha),MWn.$e=function(){return new OE},MWn._e=function(n){},vX(a4n,"RadialOptions/RadialFactory",997),wAn(340,22,{3:1,35:1,22:1,340:1},mC);var zjt,Ujt,Xjt,Wjt,Vjt=Ben(a4n,"RadialTranslationStrategy",340,Unt,E3,_F);wAn(293,22,{3:1,35:1,22:1,293:1},yC);var Qjt,Yjt=Ben(a4n,"SortingStrategy",293,Unt,F1,FF);wAn(1449,1,E3n,qa),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){SLn(this,BB(n,33),t)},MWn.c=0,vX("org.eclipse.elk.alg.radial.p1position","EadesRadial",1449),wAn(1775,1,{},Ga),MWn.jg=function(n){return Upn(n)},vX(d4n,"AnnulusWedgeByLeafs",1775),wAn(1776,1,{},za),MWn.jg=function(n){return VEn(this,n)},vX(d4n,"AnnulusWedgeByNodeSpace",1776),wAn(1450,1,E3n,Ua),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){bEn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1450),wAn(811,1,{},Jm),MWn.kg=function(n){},MWn.lg=function(n){nv(this,n)},vX(g4n,"IDSorter",811),wAn(1774,1,MYn,Xa),MWn.ue=function(n,t){return Qrn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(g4n,"IDSorter/lambda$0$Type",1774),wAn(1773,1,{},Arn),MWn.kg=function(n){c2(this,n)},MWn.lg=function(n){n.dc()||(this.e||c2(this,nG(BB(n.Xb(0),33))),nv(this.e,n))},vX(g4n,"PolarCoordinateSorter",1773),wAn(1136,209,NJn,Wa),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;if(OTn(t,"Rectangle Packing",1),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),i=Gy(MD(ZAn(n,(W$n(),lEt)))),w=BB(ZAn(n,PEt),381),p=qy(TD(ZAn(n,yEt))),y=qy(TD(ZAn(n,SEt))),f=qy(TD(ZAn(n,gEt))),k=BB(ZAn(n,CEt),116),m=Gy(MD(ZAn(n,$Et))),r=qy(TD(ZAn(n,AEt))),l=qy(TD(ZAn(n,pEt))),g=qy(TD(ZAn(n,vEt))),T=Gy(MD(ZAn(n,LEt))),!n.a&&(n.a=new eU(UOt,n,10,11)),Trn(E=n.a),g){for(b=new Np,o=new AL(E);o.e!=o.i.gc();)P8(a=BB(kpn(o),33),dEt)&&(b.c[b.c.length]=a);for(s=new Wb(b);s.a<s.c.c.length;)snn(E,a=BB(n0(s),33));for(SQ(),m$(b,new Va),h=new Wb(b);h.a<h.c.c.length;)a=BB(n0(h),33),j=BB(ZAn(a,dEt),19).a,sln(E,j=e.Math.min(j,E.i),a);for(d=0,u=new AL(E);u.e!=u.i.gc();)Ypn(a=BB(kpn(u),33),wEt,iln(d)),++d}(v=XPn(n)).a-=k.b+k.c,v.b-=k.d+k.a,v.a,T<0||T<v.a?(c=OKn(new jB(i,w,p),E,m,k),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt))):c=new eq(i,T,0,(YLn(),_Et)),v.a+=k.b+k.c,v.b+=k.d+k.a,y||(Trn(E),c=kzn(new m3(i,f,l,r,m),E,e.Math.max(v.a,c.c),v,t,n,k)),pan(E,k),KUn(n,c.c+(k.b+k.c),c.b+(k.d+k.a),!1,!0),qy(TD(ZAn(n,MEt)))||jJ(new Tw((GM(),new Dy(n)))),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),HSn(t)},vX(y4n,"RectPackingLayoutProvider",1136),wAn(1137,1,MYn,Va),MWn.ue=function(n,t){return wsn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y4n,"RectPackingLayoutProvider/lambda$0$Type",1137),wAn(1256,1,{},jB),MWn.a=0,MWn.c=!1,vX(k4n,"AreaApproximation",1256);var Jjt,Zjt,nEt,tEt=bq(k4n,"BestCandidateFilter");wAn(638,1,{526:1},Qa),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=RQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.min(a,(u.c+(i.b+i.c))*(u.b+(i.d+i.a)));for(c=new Wb(n);c.a<c.c.c.length;)((r=BB(n0(c),220)).c+(i.b+i.c))*(r.b+(i.d+i.a))==a&&(s.c[s.c.length]=r);return s},vX(k4n,"AreaFilter",638),wAn(639,1,{526:1},Ya),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(o=new Np,s=RQn,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),220),s=e.Math.min(s,e.Math.abs((a.c+(i.b+i.c))/(a.b+(i.d+i.a))-t));for(c=new Wb(n);c.a<c.c.c.length;)r=BB(n0(c),220),e.Math.abs((r.c+(i.b+i.c))/(r.b+(i.d+i.a))-t)==s&&(o.c[o.c.length]=r);return o},vX(k4n,"AspectRatioFilter",639),wAn(637,1,{526:1},Ja),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=KQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.max(a,Yq(u.c+(i.b+i.c),u.b+(i.d+i.a),u.a));for(c=new Wb(n);c.a<c.c.c.length;)Yq((r=BB(n0(c),220)).c+(i.b+i.c),r.b+(i.d+i.a),r.a)==a&&(s.c[s.c.length]=r);return s},vX(k4n,"ScaleMeasureFilter",637),wAn(381,22,{3:1,35:1,22:1,381:1},kC);var eEt,iEt,rEt,cEt,aEt,uEt,oEt,sEt,hEt,fEt,lEt,bEt,wEt,dEt,gEt,pEt,vEt,mEt,yEt,kEt,jEt,EEt,TEt,MEt,SEt,PEt,CEt,IEt,OEt,AEt,$Et,LEt,NEt=Ben(j4n,"OptimizationGoal",381,Unt,_1,BF);wAn(856,1,QYn,Of),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E4n),""),"Optimization Goal"),"Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored."),sEt),(PPn(),gMt)),NEt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T4n),""),"Shift Last Placed."),"When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces."),(hN(),!0)),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M4n),""),"Current position of a node in the order of nodes"),"The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,S4n),""),"Desired index of node"),"The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P4n),""),"Only Area Approximation"),"If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,C4n),""),"Compact Rows"),"Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,I4n),""),"Fit Aspect Ratio"),"Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion."),!1),wMt),ktt),nbn(sMt)))),a2(n,I4n,A4n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O4n),""),"Target Width"),"Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding."),-1),dMt),Ptt),nbn(sMt)))),NXn((new Af,n))},vX(j4n,"RectPackingMetaDataProvider",856),wAn(1004,1,QYn,Af),MWn.Qe=function(n){NXn(n)},vX(j4n,"RectPackingOptions",1004),wAn(1005,1,{},Za),MWn.$e=function(){return new Wa},MWn._e=function(n){},vX(j4n,"RectPackingOptions/RectpackingFactory",1005),wAn(1257,1,{},m3),MWn.a=0,MWn.b=!1,MWn.c=0,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=0,vX("org.eclipse.elk.alg.rectpacking.seconditeration","RowFillingAndCompaction",1257),wAn(187,1,{187:1},asn),MWn.a=0,MWn.c=!1,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.k=!1,MWn.o=RQn,MWn.p=RQn,MWn.r=0,MWn.s=0,MWn.t=0,vX(L4n,"Block",187),wAn(211,1,{211:1},RJ),MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockRow",211),wAn(443,1,{443:1},KJ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockStack",443),wAn(220,1,{220:1},eq,awn),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0;var xEt,DEt,REt,KEt,_Et,FEt=vX(L4n,"DrawingData",220);wAn(355,22,{3:1,35:1,22:1,355:1},jC);var BEt,HEt,qEt,GEt,zEt=Ben(L4n,"DrawingDataDescriptor",355,Unt,N5,HF);wAn(200,1,{200:1},x0),MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0,vX(L4n,"RectRow",200),wAn(756,1,{},Ehn),MWn.j=0,vX(x4n,g1n,756),wAn(1245,1,{},nu),MWn.Je=function(n){return W8(n.a,n.b)},vX(x4n,p1n,1245),wAn(1246,1,{},dg),MWn.Je=function(n){return p6(this.a,n)},vX(x4n,v1n,1246),wAn(1247,1,{},gg),MWn.Je=function(n){return Opn(this.a,n)},vX(x4n,m1n,1247),wAn(1248,1,{},pg),MWn.Je=function(n){return uon(this.a,n)},vX(x4n,"ElkGraphImporter/lambda$3$Type",1248),wAn(1249,1,{},vg),MWn.Je=function(n){return iOn(this.a,n)},vX(x4n,y1n,1249),wAn(1133,209,NJn,$E),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h,f;for(P8(n,(MMn(),kTt))&&(f=SD(ZAn(n,(Bvn(),qTt))),(c=XRn(cin(),f))&&BB(sJ(c.f),209).Ze(n,mcn(t,1))),Ypn(n,gTt,($6(),ZEt)),Ypn(n,pTt,($Sn(),cTt)),Ypn(n,vTt,(Lun(),WTt)),a=BB(ZAn(n,(Bvn(),_Tt)),19).a,OTn(t,"Overlap removal",1),qy(TD(ZAn(n,KTt))),o=new mg(u=new Rv),e=GXn(i=new Ehn,n),s=!0,r=0;r<a&&s;){if(qy(TD(ZAn(n,FTt)))){if(u.a.$b(),HPn(new I$(o),e.i),0==u.a.gc())break;e.e=u}for(h2(this.b),CU(this.b,(Pbn(),HEt),(OM(),GTt)),CU(this.b,qEt,e.g),CU(this.b,GEt,(IM(),QEt)),this.a=$qn(this.b,e),h=new Wb(this.a);h.a<h.c.c.length;)BB(n0(h),51).pf(e,mcn(t,1));cjn(i,e),s=qy(TD(mMn(e,(Xcn(),Yrt)))),++r}DGn(i,e),HSn(t)},vX(x4n,"OverlapRemovalLayoutProvider",1133),wAn(1134,1,{},mg),vX(x4n,"OverlapRemovalLayoutProvider/lambda$0$Type",1134),wAn(437,22,{3:1,35:1,22:1,437:1},EC);var UEt,XEt,WEt=Ben(x4n,"SPOrEPhases",437,Unt,B1,qF);wAn(1255,1,{},LE),vX(x4n,"ShrinkTree",1255),wAn(1135,209,NJn,Zm),MWn.Ze=function(n,t){var e,i,r,c;P8(n,(MMn(),kTt))&&(c=SD(ZAn(n,kTt)),(r=XRn(cin(),c))&&BB(sJ(r.f),209).Ze(n,mcn(t,1))),e=GXn(i=new Ehn,n),$Ln(this.a,e,mcn(t,1)),DGn(i,e)},vX(x4n,"ShrinkTreeLayoutProvider",1135),wAn(300,134,{3:1,300:1,94:1,134:1},DJ),MWn.c=!1,vX("org.eclipse.elk.alg.spore.graph","Graph",300),wAn(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},LM),MWn.Kf=function(){return esn(this)},MWn.Xf=function(){return esn(this)};var VEt,QEt,YEt=Ben(D4n,FJn,482,Unt,KV,GF);wAn(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},vD),MWn.Kf=function(){return new ru},MWn.Xf=function(){return new ru};var JEt,ZEt,nTt,tTt=Ben(D4n,"OverlapRemovalStrategy",551,Unt,_V,zF);wAn(430,22,{3:1,35:1,22:1,430:1},TC);var eTt,iTt,rTt,cTt,aTt,uTt,oTt=Ben(D4n,"RootSelection",430,Unt,iJ,UF);wAn(316,22,{3:1,35:1,22:1,316:1},MC);var sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,vTt,mTt,yTt,kTt,jTt,ETt,TTt,MTt,STt,PTt,CTt,ITt,OTt,ATt,$Tt,LTt,NTt,xTt,DTt,RTt,KTt,_Tt,FTt,BTt,HTt,qTt,GTt,zTt=Ben(D4n,"SpanningTreeCostFunction",316,Unt,A5,XF);wAn(1002,1,QYn,Ef),MWn.Qe=function(n){yHn(n)},vX(D4n,"SporeCompactionOptions",1002),wAn(1003,1,{},tu),MWn.$e=function(){return new Zm},MWn._e=function(n){},vX(D4n,"SporeCompactionOptions/SporeCompactionFactory",1003),wAn(855,1,QYn,Tf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,K4n),""),"Underlying Layout Algorithm"),"A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,q4n),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),DTt),gMt),VTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_4n),W4n),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),NTt),gMt),YTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F4n),W4n),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),$Tt),gMt),zTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B4n),W4n),"Root node for spanning tree construction"),"The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen."),null),yMt),Qtt),nbn(hMt)))),a2(n,B4n,H4n,CTt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H4n),W4n),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),OTt),gMt),oTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,G4n),E2n),"Compaction Strategy"),"This option defines how the compaction is applied."),ETt),gMt),YEt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z4n),E2n),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U4n),V4n),"Upper limit for iterations of overlap removal"),null),iln(64)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X4n),V4n),"Whether to run a supplementary scanline overlap check."),null),!0),wMt),ktt),nbn(hMt)))),AKn((new Mf,n)),yHn((new Ef,n))},vX(D4n,"SporeMetaDataProvider",855),wAn(VVn,1,QYn,Mf),MWn.Qe=function(n){AKn(n)},vX(D4n,"SporeOverlapRemovalOptions",VVn),wAn(1001,1,{},eu),MWn.$e=function(){return new $E},MWn._e=function(n){},vX(D4n,"SporeOverlapRemovalOptions/SporeOverlapFactory",1001),wAn(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},XW),MWn.Kf=function(){return isn(this)},MWn.Xf=function(){return isn(this)};var UTt,XTt,WTt,VTt=Ben(D4n,"StructureExtractionStrategy",530,Unt,FV,WF);wAn(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},SC),MWn.Kf=function(){return wwn(this)},MWn.Xf=function(){return wwn(this)};var QTt,YTt=Ben(D4n,"TreeConstructionStrategy",429,Unt,eJ,VF);wAn(1443,1,E3n,iu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){Tjn(BB(n,300),t)},vX(Y4n,"DelaunayTriangulationPhase",1443),wAn(1444,1,lVn,yg),MWn.td=function(n){WB(this.a,BB(n,65).a)},vX(Y4n,"DelaunayTriangulationPhase/lambda$0$Type",1444),wAn(783,1,E3n,Vm),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){this.ng(BB(n,300),t)},MWn.ng=function(n,t){var e;OTn(t,"Minimum spanning tree construction",1),e=n.d?n.d.a:BB(xq(n.i,0),65).a,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,e,n.b)),n),HSn(t)},vX(J4n,"MinSTPhase",783),wAn(1446,783,E3n,ym),MWn.ng=function(n,t){var e,i;OTn(t,"Maximum spanning tree construction",1),e=new kg(n),i=n.d?n.d.c:BB(xq(n.i,0),65).c,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,i,e)),n),HSn(t)},vX(J4n,"MaxSTPhase",1446),wAn(1447,1,{},kg),MWn.Je=function(n){return IC(this.a,n)},vX(J4n,"MaxSTPhase/lambda$0$Type",1447),wAn(1445,1,lVn,jg),MWn.td=function(n){R$(this.a,BB(n,65))},vX(J4n,"MinSTPhase/lambda$0$Type",1445),wAn(785,1,E3n,ru),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){WTn(this,BB(n,300),t)},MWn.a=!1,vX(Z4n,"GrowTreePhase",785),wAn(786,1,lVn,EB),MWn.td=function(n){eun(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"GrowTreePhase/lambda$0$Type",786),wAn(1448,1,E3n,cu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){tmn(this,BB(n,300),t)},vX(Z4n,"ShrinkTreeCompactionPhase",1448),wAn(784,1,lVn,TB),MWn.td=function(n){lAn(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"ShrinkTreeCompactionPhase/lambda$0$Type",784);var JTt,ZTt,nMt=bq(y3n,"IGraphElementVisitor");wAn(860,1,{527:1},R0),MWn.og=function(n){var t;qan(t=hRn(this,n),BB(RX(this.b,n),94)),yLn(this,n,t)},vX(xJn,"LayoutConfigurator",860);var tMt,eMt,iMt,rMt=bq(xJn,"LayoutConfigurator/IPropertyHolderOptionFilter");wAn(932,1,{1933:1},au),MWn.pg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$0$Type",932),wAn(933,1,{1933:1},uu),MWn.pg=function(n,t){return SE(n,t)},vX(xJn,"LayoutConfigurator/lambda$1$Type",933),wAn(931,1,{831:1},ou),MWn.qg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$2$Type",931),wAn(934,1,DVn,LC),MWn.Mb=function(n){return YW(this.a,this.b,BB(n,1933))},vX(xJn,"LayoutConfigurator/lambda$3$Type",934),wAn(858,1,{},su),vX(xJn,"RecursiveGraphLayoutEngine",858),wAn(296,60,BVn,kv,rk),vX(xJn,"UnsupportedConfigurationException",296),wAn(453,60,BVn,ck),vX(xJn,"UnsupportedGraphException",453),wAn(754,1,{}),vX(y3n,"AbstractRandomListAccessor",754),wAn(500,754,{},CNn),MWn.rg=function(){return null},MWn.d=!0,MWn.e=!0,MWn.f=0,vX(t5n,"AlgorithmAssembler",500),wAn(1236,1,DVn,hu),MWn.Mb=function(n){return!!BB(n,123)},vX(t5n,"AlgorithmAssembler/lambda$0$Type",1236),wAn(1237,1,{},Eg),MWn.Kb=function(n){return bj(this.a,BB(n,123))},vX(t5n,"AlgorithmAssembler/lambda$1$Type",1237),wAn(1238,1,DVn,fu),MWn.Mb=function(n){return!!BB(n,80)},vX(t5n,"AlgorithmAssembler/lambda$2$Type",1238),wAn(1239,1,lVn,Tg),MWn.td=function(n){Jcn(this.a,BB(n,80))},vX(t5n,"AlgorithmAssembler/lambda$3$Type",1239),wAn(1240,1,lVn,NC),MWn.td=function(n){Dx(this.a,this.b,BB(n,234))},vX(t5n,"AlgorithmAssembler/lambda$4$Type",1240),wAn(1355,1,MYn,lu),MWn.ue=function(n,t){return FQ(BB(n,234),BB(t,234))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t5n,"EnumBasedFactoryComparator",1355),wAn(80,754,{80:1},B2),MWn.rg=function(){return new Rv},MWn.a=0,vX(t5n,"LayoutProcessorConfiguration",80),wAn(1013,1,{527:1},$f),MWn.og=function(n){nan(eMt,new Mg(n))},vX(zYn,"DeprecatedLayoutOptionReplacer",1013),wAn(1014,1,lVn,bu),MWn.td=function(n){N9(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1014),wAn(1015,1,lVn,wu),MWn.td=function(n){Twn(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1015),wAn(1016,1,{},Mg),MWn.Od=function(n,t){Rx(this.a,BB(n,146),BB(t,38))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1016),wAn(149,1,{686:1,149:1},MTn),MWn.Fb=function(n){return j5(this,n)},MWn.sg=function(){return this.b},MWn.tg=function(){return this.c},MWn.ne=function(){return this.e},MWn.Hb=function(){return vvn(this.c)},MWn.Ib=function(){return"Layout Algorithm: "+this.c};var cMt,aMt=vX(zYn,"LayoutAlgorithmData",149);wAn(263,1,{},du),vX(zYn,"LayoutAlgorithmData/Builder",263),wAn(1017,1,{527:1},gu),MWn.og=function(n){cL(n,239)&&!qy(TD(n.We((sWn(),zSt))))&&KFn(BB(n,33))},vX(zYn,"LayoutAlgorithmResolver",1017),wAn(229,1,{686:1,229:1},UZ),MWn.Fb=function(n){return!!cL(n,229)&&mK(this.b,BB(n,229).b)},MWn.sg=function(){return this.a},MWn.tg=function(){return this.b},MWn.ne=function(){return this.d},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return"Layout Type: "+this.b},vX(zYn,"LayoutCategoryData",229),wAn(344,1,{},pu),vX(zYn,"LayoutCategoryData/Builder",344),wAn(867,1,{},ORn),vX(zYn,"LayoutMetaDataService",867),wAn(868,1,{},UX),vX(zYn,"LayoutMetaDataService/Registry",868),wAn(478,1,{478:1},vu),vX(zYn,"LayoutMetaDataService/Registry/Triple",478),wAn(869,1,e5n,mu),MWn.ug=function(){return new Gj},vX(zYn,"LayoutMetaDataService/lambda$0$Type",869),wAn(870,1,i5n,yu),MWn.vg=function(n){return B$(BB(n,8))},vX(zYn,"LayoutMetaDataService/lambda$1$Type",870),wAn(879,1,e5n,ku),MWn.ug=function(){return new Np},vX(zYn,"LayoutMetaDataService/lambda$10$Type",879),wAn(880,1,i5n,ju),MWn.vg=function(n){return new t_(BB(n,12))},vX(zYn,"LayoutMetaDataService/lambda$11$Type",880),wAn(881,1,e5n,Eu),MWn.ug=function(){return new YT},vX(zYn,"LayoutMetaDataService/lambda$12$Type",881),wAn(882,1,i5n,Tu),MWn.vg=function(n){return zB(BB(n,68))},vX(zYn,"LayoutMetaDataService/lambda$13$Type",882),wAn(883,1,e5n,Mu),MWn.ug=function(){return new Rv},vX(zYn,"LayoutMetaDataService/lambda$14$Type",883),wAn(884,1,i5n,Su),MWn.vg=function(n){return JQ(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$15$Type",884),wAn(885,1,e5n,Pu),MWn.ug=function(){return new fA},vX(zYn,"LayoutMetaDataService/lambda$16$Type",885),wAn(886,1,i5n,Cu),MWn.vg=function(n){return S4(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$17$Type",886),wAn(887,1,e5n,Iu),MWn.ug=function(){return new zv},vX(zYn,"LayoutMetaDataService/lambda$18$Type",887),wAn(888,1,i5n,Ou),MWn.vg=function(n){return GB(BB(n,208))},vX(zYn,"LayoutMetaDataService/lambda$19$Type",888),wAn(871,1,e5n,Au),MWn.ug=function(){return new km},vX(zYn,"LayoutMetaDataService/lambda$2$Type",871),wAn(872,1,i5n,$u),MWn.vg=function(n){return new Kj(BB(n,74))},vX(zYn,"LayoutMetaDataService/lambda$3$Type",872),wAn(873,1,e5n,Lu),MWn.ug=function(){return new lm},vX(zYn,"LayoutMetaDataService/lambda$4$Type",873),wAn(874,1,i5n,Nu),MWn.vg=function(n){return new A_(BB(n,142))},vX(zYn,"LayoutMetaDataService/lambda$5$Type",874),wAn(875,1,e5n,Du),MWn.ug=function(){return new bm},vX(zYn,"LayoutMetaDataService/lambda$6$Type",875),wAn(876,1,i5n,Ru),MWn.vg=function(n){return new O_(BB(n,116))},vX(zYn,"LayoutMetaDataService/lambda$7$Type",876),wAn(877,1,e5n,Ku),MWn.ug=function(){return new Yu},vX(zYn,"LayoutMetaDataService/lambda$8$Type",877),wAn(878,1,i5n,_u),MWn.vg=function(n){return new rnn(BB(n,373))},vX(zYn,"LayoutMetaDataService/lambda$9$Type",878);var uMt,oMt,sMt,hMt,fMt,lMt=bq(IJn,"IProperty");wAn(23,1,{35:1,686:1,23:1,146:1},bPn),MWn.wd=function(n){return gL(this,BB(n,146))},MWn.Fb=function(n){return cL(n,23)?mK(this.f,BB(n,23).f):cL(n,146)&&mK(this.f,BB(n,146).tg())},MWn.wg=function(){var n;if(cL(this.b,4)){if(null==(n=Jdn(this.b)))throw Hp(new Fy(o5n+this.f+"'. Make sure it's type is registered with the "+(ED(bAt),bAt.k)+c5n));return n}return this.b},MWn.sg=function(){return this.d},MWn.tg=function(){return this.f},MWn.ne=function(){return this.i},MWn.Hb=function(){return vvn(this.f)},MWn.Ib=function(){return"Layout Option: "+this.f},vX(zYn,"LayoutOptionData",23),wAn(24,1,{},Fu),vX(zYn,"LayoutOptionData/Builder",24),wAn(175,22,{3:1,35:1,22:1,175:1},AC);var bMt,wMt,dMt,gMt,pMt,vMt,mMt,yMt,kMt,jMt=Ben(zYn,"LayoutOptionData/Target",175,Unt,O5,QF);wAn(277,22,{3:1,35:1,22:1,277:1},$C);var EMt,TMt,MMt,SMt=Ben(zYn,"LayoutOptionData/Type",277,Unt,_tn,YF);wAn(110,1,{110:1},bA,UV,gY),MWn.Fb=function(n){var t;return!(null==n||!cL(n,110))&&(t=BB(n,110),cV(this.c,t.c)&&cV(this.d,t.d)&&cV(this.b,t.b)&&cV(this.a,t.a))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d,this.b,this.a]))},MWn.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"ElkRectangle",110),wAn(8,1,{3:1,4:1,8:1,414:1},Gj,XZ,xC,wA),MWn.Fb=function(n){return nrn(this,n)},MWn.Hb=function(){return VO(this.a)+byn(VO(this.b))},MWn.Jf=function(n){var t,e,i;for(e=0;e<n.length&&xhn((b1(e,n.length),n.charCodeAt(e)),o1n);)++e;for(t=n.length;t>0&&xhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(e>=t)throw Hp(new _y("The given string does not contain any numbers."));if(2!=(i=kKn(n.substr(e,t-e),",|;|\r|\n")).length)throw Hp(new _y("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=bSn(RMn(i[0])),this.b=bSn(RMn(i[1]))}catch(r){throw cL(r=lun(r),127)?Hp(new _y(h1n+r)):Hp(r)}},MWn.Ib=function(){return"("+this.a+","+this.b+")"},MWn.a=0,MWn.b=0;var PMt=vX(f1n,"KVector",8);wAn(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},km,Kj,Ux),MWn.Pc=function(){return Vsn(this)},MWn.Jf=function(n){var t,e,i,r,c;e=kKn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),yQ(this);try{for(t=0,r=0,i=0,c=0;t<e.length;)null!=e[t]&&RMn(e[t]).length>0&&(r%2==0?i=bSn(e[t]):c=bSn(e[t]),r>0&&r%2!=0&&DH(this,new xC(i,c)),++r),++t}catch(a){throw cL(a=lun(a),127)?Hp(new _y("The given string does not match the expected format for vectors."+a)):Hp(a)}},MWn.Ib=function(){var n,t,e;for(n=new lN("("),t=spn(this,0);t.b!=t.d.c;)oO(n,(e=BB(b3(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var CMt,IMt,OMt,AMt,$Mt,LMt,NMt=vX(f1n,"KVectorChain",74);wAn(248,22,{3:1,35:1,22:1,248:1},DC);var xMt,DMt,RMt,KMt,_Mt,FMt,BMt,HMt,qMt,GMt,zMt,UMt,XMt,WMt,VMt,QMt,YMt,JMt,ZMt,nSt=Ben(h5n,"Alignment",248,Unt,J8,JF);wAn(979,1,QYn,Lf),MWn.Qe=function(n){G_n(n)},vX(h5n,"BoxLayouterOptions",979),wAn(980,1,{},xu),MWn.$e=function(){return new Gu},MWn._e=function(n){},vX(h5n,"BoxLayouterOptions/BoxFactory",980),wAn(291,22,{3:1,35:1,22:1,291:1},RC);var tSt,eSt,iSt,rSt,cSt,aSt,uSt,oSt,sSt,hSt,fSt,lSt,bSt,wSt,dSt,gSt,pSt,vSt,mSt,ySt,kSt,jSt,ESt,TSt,MSt,SSt,PSt,CSt,ISt,OSt,ASt,$St,LSt,NSt,xSt,DSt,RSt,KSt,_St,FSt,BSt,HSt,qSt,GSt,zSt,USt,XSt,WSt,VSt,QSt,YSt,JSt,ZSt,nPt,tPt,ePt,iPt,rPt,cPt,aPt,uPt,oPt,sPt,hPt,fPt,lPt,bPt,wPt,dPt,gPt,pPt,vPt,mPt,yPt,kPt,jPt,EPt,TPt,MPt,SPt,PPt,CPt,IPt,OPt,APt,$Pt,LPt,NPt,xPt,DPt,RPt,KPt,_Pt,FPt,BPt,HPt,qPt=Ben(h5n,"ContentAlignment",291,Unt,Y8,ZF);wAn(684,1,QYn,Nf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,w5n),""),"Layout Algorithm"),"Select a specific layout algorithm."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,d5n),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),mMt),aMt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W2n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),rSt),gMt),nSt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,VJn),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,g5n),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u3n),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),fSt),pMt),qPt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X2n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J2n),""),TJn),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),wSt),gMt),WPt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y2n),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),mSt),gMt),oCt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,A4n),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,d2n),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),TSt),gMt),SCt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,QJn),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),WSt),mMt),_ut),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,jZn),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m3n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,MZn),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,EZn),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),oPt),gMt),aIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,g3n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),mMt),PMt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,pZn),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),vMt),Att),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,yZn),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,kZn),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o3n),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),ASt),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f3n),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l3n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,p5n),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),mMt),KNt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,p3n),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),LSt),mMt),Eut),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z2n),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),wMt),ktt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v5n),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),dMt),Ptt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m5n),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y5n),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),iln(100)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,k5n),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,j5n),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),iln(4e3)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E5n),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),iln(400)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T5n),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M5n),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,S5n),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P5n),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b5n),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),oSt),gMt),cOt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,L2n),k2n),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,N2n),k2n),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,XJn),k2n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,x2n),k2n),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,mZn),k2n),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,D2n),k2n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,R2n),k2n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F2n),k2n),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,K2n),k2n),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_2n),k2n),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,vZn),k2n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B2n),k2n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H2n),k2n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,q2n),k2n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),mMt),hOt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v3n),k2n),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),DPt),mMt),Eut),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,d3n),A5n),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),vMt),Att),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),a2(n,d3n,w3n,JSt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,w3n),A5n),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),QSt),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Z2n),$5n),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),xSt),mMt),_ut),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,CZn),$5n),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),RSt),pMt),GCt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e3n),L5n),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),nPt),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,i3n),L5n),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,r3n),L5n),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,c3n),L5n),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,a3n),L5n),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,PZn),N5n),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),_St),pMt),YIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,SZn),N5n),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),GSt),pMt),iOt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,BZn),N5n),"Node Size Minimum"),"The minimal size to which a node can be reduced."),HSt),mMt),PMt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y2n),N5n),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s3n),A2n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),pSt),gMt),nCt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,TZn),A2n),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),wMt),ktt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,C5n),"font"),"Font Name"),"Font name used for a label."),yMt),Qtt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,I5n),"font"),"Font Size"),"Font size used for a label."),vMt),Att),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,b3n),x5n),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),mMt),PMt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,h3n),x5n),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),vMt),Att),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U2n),x5n),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),dPt),gMt),FIt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,G2n),x5n),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),dMt),Ptt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,IZn),D5n),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),lPt),pMt),IIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n3n),D5n),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t3n),D5n),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V2n),R5n),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Q2n),R5n),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wMt),ktt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,WJn),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),dMt),Ptt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O5n),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),kSt),gMt),yCt),nbn(uMt)))),xM(n,new UZ(yj(jj(kj(new pu,w1n),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.orthogonal"),"Orthogonal"),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.'))),xM(n,new UZ(yj(jj(kj(new pu,gZn),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),xM(n,new UZ(yj(jj(kj(new pu,Y3n),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),xM(n,new UZ(yj(jj(kj(new pu,w4n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),bKn((new xf,n)),G_n((new Lf,n)),RDn((new Df,n))},vX(h5n,"CoreOptions",684),wAn(103,22,{3:1,35:1,22:1,103:1},KC);var GPt,zPt,UPt,XPt,WPt=Ben(h5n,TJn,103,Unt,C5,eB);wAn(272,22,{3:1,35:1,22:1,272:1},_C);var VPt,QPt,YPt,JPt,ZPt,nCt=Ben(h5n,"EdgeLabelPlacement",272,Unt,q1,iB);wAn(218,22,{3:1,35:1,22:1,218:1},FC);var tCt,eCt,iCt,rCt,cCt,aCt,uCt,oCt=Ben(h5n,"EdgeRouting",218,Unt,S3,rB);wAn(312,22,{3:1,35:1,22:1,312:1},BC);var sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,vCt,mCt,yCt=Ben(h5n,"EdgeType",312,Unt,a9,cB);wAn(977,1,QYn,xf),MWn.Qe=function(n){bKn(n)},vX(h5n,"FixedLayouterOptions",977),wAn(978,1,{},Vu),MWn.$e=function(){return new Hu},MWn._e=function(n){},vX(h5n,"FixedLayouterOptions/FixedFactory",978),wAn(334,22,{3:1,35:1,22:1,334:1},HC);var kCt,jCt,ECt,TCt,MCt,SCt=Ben(h5n,"HierarchyHandling",334,Unt,H1,aB);wAn(285,22,{3:1,35:1,22:1,285:1},qC);var PCt,CCt,ICt,OCt,ACt,$Ct,LCt,NCt,xCt,DCt,RCt=Ben(h5n,"LabelSide",285,Unt,M3,uB);wAn(93,22,{3:1,35:1,22:1,93:1},GC);var KCt,_Ct,FCt,BCt,HCt,qCt,GCt=Ben(h5n,"NodeLabelPlacement",93,Unt,ken,oB);wAn(249,22,{3:1,35:1,22:1,249:1},zC);var zCt,UCt,XCt,WCt,VCt,QCt,YCt,JCt=Ben(h5n,"PortAlignment",249,Unt,I5,sB);wAn(98,22,{3:1,35:1,22:1,98:1},UC);var ZCt,nIt,tIt,eIt,iIt,rIt,cIt,aIt=Ben(h5n,"PortConstraints",98,Unt,S8,hB);wAn(273,22,{3:1,35:1,22:1,273:1},XC);var uIt,oIt,sIt,hIt,fIt,lIt,bIt,wIt,dIt,gIt,pIt,vIt,mIt,yIt,kIt,jIt,EIt,TIt,MIt,SIt,PIt,CIt,IIt=Ben(h5n,"PortLabelPlacement",273,Unt,c9,fB);wAn(61,22,{3:1,35:1,22:1,61:1},WC);var OIt,AIt,$It,LIt,NIt,xIt,DIt,RIt,KIt,_It,FIt=Ben(h5n,"PortSide",61,Unt,h5,wB);wAn(981,1,QYn,Df),MWn.Qe=function(n){RDn(n)},vX(h5n,"RandomLayouterOptions",981),wAn(982,1,{},Qu),MWn.$e=function(){return new no},MWn._e=function(n){},vX(h5n,"RandomLayouterOptions/RandomFactory",982),wAn(374,22,{3:1,35:1,22:1,374:1},VC);var BIt,HIt,qIt,GIt,zIt,UIt,XIt,WIt,VIt,QIt,YIt=Ben(h5n,"SizeConstraint",374,Unt,T3,lB);wAn(259,22,{3:1,35:1,22:1,259:1},QC);var JIt,ZIt,nOt,tOt,eOt,iOt=Ben(h5n,"SizeOptions",259,Unt,Ein,bB);wAn(370,1,{1949:1},Xm),MWn.b=!1,MWn.c=0,MWn.d=-1,MWn.e=null,MWn.f=null,MWn.g=-1,MWn.j=!1,MWn.k=!1,MWn.n=!1,MWn.o=0,MWn.q=0,MWn.r=0,vX(y3n,"BasicProgressMonitor",370),wAn(972,209,NJn,Gu),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h;OTn(t,"Box layout",2),r=zy(MD(ZAn(n,(SMn(),XMt)))),c=BB(ZAn(n,GMt),116),e=qy(TD(ZAn(n,_Mt))),i=qy(TD(ZAn(n,FMt))),0===BB(ZAn(n,RMt),311).g?(u=new t_((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),SQ(),m$(u,new Sg(i)),a=u,o=XPn(n),(null==(s=MD(ZAn(n,DMt)))||(kW(s),s<=0))&&(s=1.3),KUn(n,(h=HUn(a,r,c,o.a,o.b,e,(kW(s),s))).a,h.b,!1,!0)):kqn(n,r,c,e),HSn(t)},vX(y3n,"BoxLayoutProvider",972),wAn(973,1,MYn,Sg),MWn.ue=function(n,t){return hNn(this,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=!1,vX(y3n,"BoxLayoutProvider/1",973),wAn(157,1,{157:1},Gtn,zx),MWn.Ib=function(){return this.c?zRn(this.c):LMn(this.b)},vX(y3n,"BoxLayoutProvider/Group",157),wAn(311,22,{3:1,35:1,22:1,311:1},YC);var rOt,cOt=Ben(y3n,"BoxLayoutProvider/PackingMode",311,Unt,P3,dB);wAn(974,1,MYn,zu),MWn.ue=function(n,t){return DQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$0$Type",974),wAn(975,1,MYn,Uu),MWn.ue=function(n,t){return cQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$1$Type",975),wAn(976,1,MYn,Xu),MWn.ue=function(n,t){return aQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$2$Type",976),wAn(1365,1,{831:1},Wu),MWn.qg=function(n,t){return AM(),!cL(t,160)||SE((Nun(),BB(n,160)),t)},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),wAn(1366,1,lVn,Pg),MWn.td=function(n){Jsn(this.a,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),wAn(1367,1,lVn,qu),MWn.td=function(n){BB(n,94),AM()},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),wAn(1371,1,lVn,Cg),MWn.td=function(n){Orn(this.a,BB(n,94))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),wAn(1369,1,DVn,JC),MWn.Mb=function(n){return Von(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),wAn(1368,1,DVn,ZC),MWn.Mb=function(n){return $x(this.a,this.b,BB(n,831))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),wAn(1370,1,lVn,nI),MWn.td=function(n){Fz(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),wAn(935,1,{},Bu),MWn.Kb=function(n){return yA(n)},MWn.Fb=function(n){return this===n},vX(y3n,"ElkUtil/lambda$0$Type",935),wAn(936,1,lVn,tI),MWn.td=function(n){rOn(this.a,this.b,BB(n,79))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$1$Type",936),wAn(937,1,lVn,eI),MWn.td=function(n){Ey(this.a,this.b,BB(n,202))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$2$Type",937),wAn(938,1,lVn,iI),MWn.td=function(n){t$(this.a,this.b,BB(n,137))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$3$Type",938),wAn(939,1,lVn,Ig),MWn.td=function(n){cq(this.a,BB(n,469))},vX(y3n,"ElkUtil/lambda$4$Type",939),wAn(342,1,{35:1,342:1},$p),MWn.wd=function(n){return vL(this,BB(n,236))},MWn.Fb=function(n){var t;return!!cL(n,342)&&(t=BB(n,342),this.a==t.a)},MWn.Hb=function(){return CJ(this.a)},MWn.Ib=function(){return this.a+" (exclusive)"},MWn.a=0,vX(y3n,"ExclusiveBounds/ExclusiveLowerBound",342),wAn(1138,209,NJn,Hu),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(OTn(t,"Fixed Layout",1),a=BB(ZAn(n,(sWn(),vSt)),218),b=0,w=0,v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();){for(g=BB(kpn(v),33),(T=BB(ZAn(g,(Xsn(),gCt)),8))&&(SA(g,T.a,T.b),BB(ZAn(g,fCt),174).Hc((mdn(),DIt))&&(d=BB(ZAn(g,bCt),8)).a>0&&d.b>0&&KUn(g,d.a,d.b,!0,!0)),b=e.Math.max(b,g.i+g.g),w=e.Math.max(w,g.j+g.f),f=new AL((!g.n&&(g.n=new eU(zOt,g,1,7)),g.n));f.e!=f.i.gc();)o=BB(kpn(f),137),(T=BB(ZAn(o,gCt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,g.i+o.i+o.g),w=e.Math.max(w,g.j+o.j+o.f);for(k=new AL((!g.c&&(g.c=new eU(XOt,g,9,9)),g.c));k.e!=k.i.gc();)for(y=BB(kpn(k),118),(T=BB(ZAn(y,gCt),8))&&SA(y,T.a,T.b),j=g.i+y.i,E=g.j+y.j,b=e.Math.max(b,j+y.g),w=e.Math.max(w,E+y.f),s=new AL((!y.n&&(y.n=new eU(zOt,y,1,7)),y.n));s.e!=s.i.gc();)o=BB(kpn(s),137),(T=BB(ZAn(o,gCt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,j+o.i+o.g),w=e.Math.max(w,E+o.j+o.f);for(c=new oz(ZL(dLn(g).a.Kc(),new h));dAn(c);)l=_Un(i=BB(U5(c),79)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new oz(ZL(wLn(g).a.Kc(),new h));dAn(r);)JJ(PMn(i=BB(U5(r),79)))!=n&&(l=_Un(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(Mbn(),QPt))for(p=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new oz(ZL(dLn(g=BB(kpn(p),33)).a.Kc(),new h));dAn(r);)0==(u=rFn(i=BB(U5(r),79))).b?Ypn(i,OSt,null):Ypn(i,OSt,u);qy(TD(ZAn(n,(Xsn(),lCt))))||KUn(n,b+(m=BB(ZAn(n,wCt),116)).b+m.c,w+m.d+m.a,!0,!0),HSn(t)},vX(y3n,"FixedLayoutProvider",1138),wAn(373,134,{3:1,414:1,373:1,94:1,134:1},Yu,rnn),MWn.Jf=function(n){var t,e,i,r,c,a,u;if(n)try{for(a=kKn(n,";,;"),r=0,c=(i=a).length;r<c;++r){if(t=kKn(i[r],"\\:"),!(e=pGn(cin(),t[0])))throw Hp(new _y("Invalid option id: "+t[0]));if(null==(u=Zqn(e,t[1])))throw Hp(new _y("Invalid option value: "+t[1]));null==u?(!this.q&&(this.q=new xp),v6(this.q,e)):(!this.q&&(this.q=new xp),VW(this.q,e,u))}}catch(o){throw cL(o=lun(o),102)?Hp(new Fsn(o)):Hp(o)}},MWn.Ib=function(){return SD(P4($V((this.q?this.q:(SQ(),SQ(),het)).vc().Oc(),new Ju),x7(new YB,new Z,new W,new V,Pun(Gk(nit,1),$Vn,132,0,[]))))};var aOt,uOt,oOt,sOt,hOt=vX(y3n,"IndividualSpacings",373);wAn(971,1,{},Ju),MWn.Kb=function(n){return RQ(BB(n,42))},vX(y3n,"IndividualSpacings/lambda$0$Type",971),wAn(709,1,{},sG),MWn.c=0,vX(y3n,"InstancePool",709),wAn(1275,1,{},Zu),vX(y3n,"LoggedGraph",1275),wAn(396,22,{3:1,35:1,22:1,396:1},cI);var fOt,lOt,bOt,wOt=Ben(y3n,"LoggedGraph/Type",396,Unt,C3,gB);wAn(46,1,{20:1,46:1},rI),MWn.Jc=function(n){e5(this,n)},MWn.Fb=function(n){var t,e,i;return!!cL(n,46)&&(e=BB(n,46),t=null==this.a?null==e.a:Nfn(this.a,e.a),i=null==this.b?null==e.b:Nfn(this.b,e.b),t&&i)},MWn.Hb=function(){var n,t,e;return n=-65536&(t=null==this.a?0:nsn(this.a)),t&QVn^(-65536&(e=null==this.b?0:nsn(this.b)))>>16&QVn|n^(e&QVn)<<16},MWn.Kc=function(){return new Og(this)},MWn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+Bbn(this.b)+")":null==this.b?"pair("+Bbn(this.a)+",null)":"pair("+Bbn(this.a)+","+Bbn(this.b)+")"},vX(y3n,"Pair",46),wAn(983,1,QWn,Og),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},MWn.Pb=function(){if(!this.c&&!this.b&&null!=this.a.a)return this.b=!0,this.a.a;if(!this.c&&null!=this.a.b)return this.c=!0,this.a.b;throw Hp(new yv)},MWn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),Hp(new dv)},MWn.b=!1,MWn.c=!1,vX(y3n,"Pair/1",983),wAn(448,1,{448:1},VV),MWn.Fb=function(n){return cV(this.a,BB(n,448).a)&&cV(this.c,BB(n,448).c)&&cV(this.d,BB(n,448).d)&&cV(this.b,BB(n,448).b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.a,this.c,this.d,this.b]))},MWn.Ib=function(){return"("+this.a+FWn+this.c+FWn+this.d+FWn+this.b+")"},vX(y3n,"Quadruple",448),wAn(1126,209,NJn,no),MWn.Ze=function(n,t){var e;OTn(t,"Random Layout",1),0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i?(iUn(n,(e=BB(ZAn(n,(vdn(),NIt)),19))&&0!=e.a?new C4(e.a):new sbn,zy(MD(ZAn(n,AIt))),zy(MD(ZAn(n,xIt))),BB(ZAn(n,$It),116)),HSn(t)):HSn(t)},vX(y3n,"RandomLayoutProvider",1126),wAn(553,1,{}),MWn.qf=function(){return new xC(this.f.i,this.f.j)},MWn.We=function(n){return EY(n,(sWn(),aPt))?ZAn(this.f,bOt):ZAn(this.f,n)},MWn.rf=function(){return new xC(this.f.g,this.f.f)},MWn.sf=function(){return this.g},MWn.Xe=function(n){return P8(this.f,n)},MWn.tf=function(n){Pen(this.f,n.a),Cen(this.f,n.b)},MWn.uf=function(n){Sen(this.f,n.a),Men(this.f,n.b)},MWn.vf=function(n){this.g=n},MWn.g=0,vX(H5n,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),wAn(554,1,{839:1},Ag),MWn.wf=function(){var n,t;if(!this.b)for(this.b=C2(mV(this.a).i),t=new AL(mV(this.a));t.e!=t.i.gc();)n=BB(kpn(t),137),WB(this.b,new Ry(n));return this.b},MWn.b=null,vX(H5n,"ElkGraphAdapters/ElkEdgeAdapter",554),wAn(301,553,{},Dy),MWn.xf=function(){return eyn(this)},MWn.a=null,vX(H5n,"ElkGraphAdapters/ElkGraphAdapter",301),wAn(630,553,{181:1},Ry),vX(H5n,"ElkGraphAdapters/ElkLabelAdapter",630),wAn(629,553,{680:1},JN),MWn.wf=function(){return nyn(this)},MWn.Af=function(){var n;return!(n=BB(ZAn(this.f,(sWn(),$St)),142))&&(n=new lm),n},MWn.Cf=function(){return tyn(this)},MWn.Ef=function(n){var t;t=new A_(n),Ypn(this.f,(sWn(),$St),t)},MWn.Ff=function(n){Ypn(this.f,(sWn(),XSt),new O_(n))},MWn.yf=function(){return this.d},MWn.zf=function(){var n,t;if(!this.a)for(this.a=new Np,t=new oz(ZL(wLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=new Np,t=new oz(ZL(dLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.c,new Ag(n));return this.c},MWn.Df=function(){return 0!=YQ(BB(this.f,33)).i||qy(TD(BB(this.f,33).We((sWn(),SSt))))},MWn.Gf=function(){_7(this,(GM(),lOt))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(H5n,"ElkGraphAdapters/ElkNodeAdapter",629),wAn(1266,553,{838:1},op),MWn.wf=function(){return kyn(this)},MWn.zf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.f,118).xg().i),t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.f,118).yg().i),t=new AL(BB(this.f,118).yg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.c,new Ag(n));return this.c},MWn.Hf=function(){return BB(BB(this.f,118).We((sWn(),wPt)),61)},MWn.If=function(){var n,t,e,i,r,c,a;for(i=WJ(BB(this.f,118)),e=new AL(BB(this.f,118).yg());e.e!=e.i.gc();)for(a=new AL((!(n=BB(kpn(e),79)).c&&(n.c=new hK(KOt,n,5,8)),n.c));a.e!=a.i.gc();){if(Ctn(PTn(c=BB(kpn(a),82)),i))return!0;if(PTn(c)==i&&qy(TD(ZAn(n,(sWn(),PSt)))))return!0}for(t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)for(r=new AL((!(n=BB(kpn(t),79)).b&&(n.b=new hK(KOt,n,4,7)),n.b));r.e!=r.i.gc();)if(Ctn(PTn(BB(kpn(r),82)),i))return!0;return!1},MWn.a=null,MWn.b=null,MWn.c=null,vX(H5n,"ElkGraphAdapters/ElkPortAdapter",1266),wAn(1267,1,MYn,to),MWn.ue=function(n,t){return GRn(BB(n,118),BB(t,118))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H5n,"ElkGraphAdapters/PortComparator",1267);var dOt,gOt,pOt,vOt,mOt,yOt,kOt,jOt,EOt,TOt,MOt,SOt,POt,COt,IOt,OOt,AOt,$Ot,LOt=bq(q5n,"EObject"),NOt=bq(G5n,z5n),xOt=bq(G5n,U5n),DOt=bq(G5n,X5n),ROt=bq(G5n,"ElkShape"),KOt=bq(G5n,W5n),_Ot=bq(G5n,V5n),FOt=bq(G5n,Q5n),BOt=bq(q5n,Y5n),HOt=bq(q5n,"EFactory"),qOt=bq(q5n,J5n),GOt=bq(q5n,"EPackage"),zOt=bq(G5n,Z5n),UOt=bq(G5n,n6n),XOt=bq(G5n,t6n);wAn(90,1,e6n),MWn.Jg=function(){return this.Kg(),null},MWn.Kg=function(){return null},MWn.Lg=function(){return this.Kg(),!1},MWn.Mg=function(){return!1},MWn.Ng=function(n){ban(this,n)},vX(i6n,"BasicNotifierImpl",90),wAn(97,90,f6n),MWn.nh=function(){return mA(this)},MWn.Og=function(n,t){return n},MWn.Pg=function(){throw Hp(new pv)},MWn.Qg=function(n){var t;return t=Cvn(BB(itn(this.Tg(),this.Vg()),18)),this.eh().ih(this,t.n,t.f,n)},MWn.Rg=function(n,t){throw Hp(new pv)},MWn.Sg=function(n,t,e){return T_n(this,n,t,e)},MWn.Tg=function(){var n;return this.Pg()&&(n=this.Pg().ck())?n:this.zh()},MWn.Ug=function(){return cAn(this)},MWn.Vg=function(){throw Hp(new pv)},MWn.Wg=function(){var n,t;return!(t=this.ph().dk())&&this.Pg().ik((QM(),t=null==(n=lJ(qFn(this.Tg())))?N$t:new QN(this,n))),t},MWn.Xg=function(n,t){return n},MWn.Yg=function(n){return n.Gj()?n.aj():Awn(this.Tg(),n)},MWn.Zg=function(){var n;return(n=this.Pg())?n.fk():null},MWn.$g=function(){return this.Pg()?this.Pg().ck():null},MWn._g=function(n,t,e){return Zpn(this,n,t,e)},MWn.ah=function(n){return S9(this,n)},MWn.bh=function(n,t){return V5(this,n,t)},MWn.dh=function(){var n;return!!(n=this.Pg())&&n.gk()},MWn.eh=function(){throw Hp(new pv)},MWn.fh=function(){return Ydn(this)},MWn.gh=function(n,t,e,i){return Npn(this,n,t,i)},MWn.hh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Qj(this,this.yh(),t-this.Ah(),n,e)},MWn.ih=function(n,t,e,i){return oJ(this,n,t,i)},MWn.jh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Rj(this,this.yh(),t-this.Ah(),n,e)},MWn.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},MWn.lh=function(n){return vpn(this,n)},MWn.mh=function(n){return ZJ(this,n)},MWn.oh=function(n){return _qn(this,n)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return this.Pg()?this.Pg().ek():null},MWn.rh=function(){return Ydn(this)},MWn.sh=function(n,t){yCn(this,n,t)},MWn.th=function(n){this.ph().hk(n)},MWn.uh=function(n){this.ph().kk(n)},MWn.vh=function(n){this.ph().jk(n)},MWn.wh=function(n,t){var e,i,r,c;return(c=this.Zg())&&n&&(t=_pn(c.Vk(),this,t),c.Zk(this)),(i=this.eh())&&(0!=(gKn(this,this.eh(),this.Vg()).Bb&BQn)?(r=i.fh())&&(n?!c&&r.Zk(this):r.Yk(this)):(t=(e=this.Vg())>=0?this.Qg(t):this.eh().ih(this,-1-e,null,t),t=this.Sg(null,-1,t))),this.uh(n),t},MWn.xh=function(n){var t,e,i,r,c,a,u;if((c=Awn(e=this.Tg(),n))>=(t=this.Ah()))return BB(n,66).Nj().Uj(this,this.yh(),c-t);if(c<=-1){if(!(a=Fqn((IPn(),Z$t),e,n)))throw Hp(new _y(r6n+n.ne()+u6n));if(ZM(),BB(a,66).Oj()||(a=Z1(B7(Z$t,a))),r=BB((i=this.Yg(a))>=0?this._g(i,!0,!0):cOn(this,a,!0),153),(u=a.Zj())>1||-1==u)return BB(BB(r,215).hl(n,!1),76)}else if(n.$j())return BB((i=this.Yg(n))>=0?this._g(i,!1,!0):cOn(this,n,!1),76);return new II(this,n)},MWn.yh=function(){return Q7(this)},MWn.zh=function(){return(QX(),t$t).S},MWn.Ah=function(){return bX(this.zh())},MWn.Bh=function(n){mPn(this,n)},MWn.Ib=function(){return P$n(this)},vX(l6n,"BasicEObjectImpl",97),wAn(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),MWn.Ch=function(n){return Y7(this)[n]},MWn.Dh=function(n,t){$X(Y7(this),n,t)},MWn.Eh=function(n){$X(Y7(this),n,null)},MWn.Jg=function(){return BB(yan(this,4),126)},MWn.Kg=function(){throw Hp(new pv)},MWn.Lg=function(){return 0!=(4&this.Db)},MWn.Pg=function(){throw Hp(new pv)},MWn.Fh=function(n){hgn(this,2,n)},MWn.Rg=function(n,t){this.Db=t<<16|255&this.Db,this.Fh(n)},MWn.Tg=function(){return jY(this)},MWn.Vg=function(){return this.Db>>16},MWn.Wg=function(){var n;return QM(),null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?N$t:new QN(this,n)},MWn.Mg=function(){return 0==(1&this.Db)},MWn.Zg=function(){return BB(yan(this,128),1935)},MWn.$g=function(){return BB(yan(this,16),26)},MWn.dh=function(){return 0!=(32&this.Db)},MWn.eh=function(){return BB(yan(this,2),49)},MWn.kh=function(){return 0!=(64&this.Db)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return BB(yan(this,64),281)},MWn.th=function(n){hgn(this,16,n)},MWn.uh=function(n){hgn(this,128,n)},MWn.vh=function(n){hgn(this,64,n)},MWn.yh=function(){return fgn(this)},MWn.Db=0,vX(l6n,"MinimalEObjectImpl",114),wAn(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn.Fh=function(n){this.Cb=n},MWn.eh=function(){return this.Cb},vX(l6n,"MinimalEObjectImpl/Container",115),wAn(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Eyn(this,n,t,e)},MWn.jh=function(n,t,e){return eSn(this,n,t,e)},MWn.lh=function(n){return m0(this,n)},MWn.sh=function(n,t){rsn(this,n,t)},MWn.zh=function(){return CXn(),POt},MWn.Bh=function(n){zun(this,n)},MWn.Ve=function(){return lpn(this)},MWn.We=function(n){return ZAn(this,n)},MWn.Xe=function(n){return P8(this,n)},MWn.Ye=function(n,t){return Ypn(this,n,t)},vX(b6n,"EMapPropertyHolderImpl",1985),wAn(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ro),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void jen(this,Gy(MD(t)));case 1:return void Een(this,Gy(MD(t)))}yCn(this,n,t)},MWn.zh=function(){return CXn(),pOt},MWn.Bh=function(n){switch(n){case 0:return void jen(this,0);case 1:return void Een(this,0)}mPn(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (x: ",vE(n,this.a),n.a+=", y: ",vE(n,this.b),n.a+=")",n.a)},MWn.a=0,MWn.b=0,vX(b6n,"ElkBendPointImpl",567),wAn(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return _fn(this,n,t,e)},MWn.hh=function(n,t,e){return FTn(this,n,t,e)},MWn.jh=function(n,t,e){return run(this,n,t,e)},MWn.lh=function(n){return Ean(this,n)},MWn.sh=function(n,t){Gjn(this,n,t)},MWn.zh=function(){return CXn(),kOt},MWn.Bh=function(n){ofn(this,n)},MWn.zg=function(){return this.k},MWn.Ag=function(){return mV(this)},MWn.Ib=function(){return Yln(this)},MWn.k=null,vX(b6n,"ElkGraphElementImpl",723),wAn(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Rbn(this,n,t,e)},MWn.lh=function(n){return fwn(this,n)},MWn.sh=function(n,t){zjn(this,n,t)},MWn.zh=function(){return CXn(),SOt},MWn.Bh=function(n){Dwn(this,n)},MWn.Bg=function(){return this.f},MWn.Cg=function(){return this.g},MWn.Dg=function(){return this.i},MWn.Eg=function(){return this.j},MWn.Fg=function(n,t){MA(this,n,t)},MWn.Gg=function(n,t){SA(this,n,t)},MWn.Hg=function(n){Pen(this,n)},MWn.Ig=function(n){Cen(this,n)},MWn.Ib=function(){return mSn(this)},MWn.f=0,MWn.g=0,MWn.i=0,MWn.j=0,vX(b6n,"ElkShapeImpl",724),wAn(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){return djn(this,n,t,e)},MWn.jh=function(n,t,e){return gjn(this,n,t,e)},MWn.lh=function(n){return Gon(this,n)},MWn.sh=function(n,t){LAn(this,n,t)},MWn.zh=function(){return CXn(),vOt},MWn.Bh=function(n){xpn(this,n)},MWn.xg=function(){return!this.d&&(this.d=new hK(_Ot,this,8,5)),this.d},MWn.yg=function(){return!this.e&&(this.e=new hK(_Ot,this,7,4)),this.e},vX(b6n,"ElkConnectableShapeImpl",725),wAn(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},io),MWn.Qg=function(n){return Mkn(this,n)},MWn._g=function(n,t,e){switch(n){case 3:return XJ(this);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),this.a;case 7:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return hN(),!!nAn(this);case 9:return hN(),!!QIn(this);case 10:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return _fn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Mkn(this,e):this.Cb.ih(this,-1-i,null,e)),VD(this,BB(n,33),e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),Ywn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),Ywn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),Ywn(this.a,n,e)}return FTn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 3:return VD(this,null,e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),_pn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),_pn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),_pn(this.a,n,e)}return run(this,n,t,e)},MWn.lh=function(n){switch(n){case 3:return!!XJ(this);case 4:return!!this.b&&0!=this.b.i;case 5:return!!this.c&&0!=this.c.i;case 6:return!!this.a&&0!=this.a.i;case 7:return!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return nAn(this);case 9:return QIn(this);case 10:return!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return Ean(this,n)},MWn.sh=function(n,t){switch(n){case 3:return void HLn(this,BB(t,33));case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),sqn(this.b),!this.b&&(this.b=new hK(KOt,this,4,7)),void pX(this.b,BB(t,14));case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),sqn(this.c),!this.c&&(this.c=new hK(KOt,this,5,8)),void pX(this.c,BB(t,14));case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),sqn(this.a),!this.a&&(this.a=new eU(FOt,this,6,6)),void pX(this.a,BB(t,14))}Gjn(this,n,t)},MWn.zh=function(){return CXn(),mOt},MWn.Bh=function(n){switch(n){case 3:return void HLn(this,null);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),void sqn(this.b);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),void sqn(this.c);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),void sqn(this.a)}ofn(this,n)},MWn.Ib=function(){return lHn(this)},vX(b6n,"ElkEdgeImpl",352),wAn(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},co),MWn.Qg=function(n){return skn(this,n)},MWn._g=function(n,t,e){switch(n){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new $L(xOt,this,5)),this.a;case 6:return VJ(this);case 7:return t?Pvn(this):this.i;case 8:return t?Svn(this):this.f;case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),this.e;case 11:return this.d}return Eyn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?skn(this,e):this.Cb.ih(this,-1-i,null,e)),QD(this,BB(n,79),e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),Ywn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),Ywn(this.e,n,e)}return BB(itn(BB(yan(this,16),26)||(CXn(),yOt),t),66).Nj().Qj(this,fgn(this),t-bX((CXn(),yOt)),n,e)},MWn.jh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new $L(xOt,this,5)),_pn(this.a,n,e);case 6:return QD(this,null,e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),_pn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),_pn(this.e,n,e)}return eSn(this,n,t,e)},MWn.lh=function(n){switch(n){case 1:return 0!=this.j;case 2:return 0!=this.k;case 3:return 0!=this.b;case 4:return 0!=this.c;case 5:return!!this.a&&0!=this.a.i;case 6:return!!VJ(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&0!=this.g.i;case 10:return!!this.e&&0!=this.e.i;case 11:return null!=this.d}return m0(this,n)},MWn.sh=function(n,t){switch(n){case 1:return void Ien(this,Gy(MD(t)));case 2:return void Aen(this,Gy(MD(t)));case 3:return void Ten(this,Gy(MD(t)));case 4:return void Oen(this,Gy(MD(t)));case 5:return!this.a&&(this.a=new $L(xOt,this,5)),sqn(this.a),!this.a&&(this.a=new $L(xOt,this,5)),void pX(this.a,BB(t,14));case 6:return void FLn(this,BB(t,79));case 7:return void Nin(this,BB(t,82));case 8:return void Lin(this,BB(t,82));case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),sqn(this.g),!this.g&&(this.g=new hK(FOt,this,9,10)),void pX(this.g,BB(t,14));case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),sqn(this.e),!this.e&&(this.e=new hK(FOt,this,10,9)),void pX(this.e,BB(t,14));case 11:return void crn(this,SD(t))}rsn(this,n,t)},MWn.zh=function(){return CXn(),yOt},MWn.Bh=function(n){switch(n){case 1:return void Ien(this,0);case 2:return void Aen(this,0);case 3:return void Ten(this,0);case 4:return void Oen(this,0);case 5:return!this.a&&(this.a=new $L(xOt,this,5)),void sqn(this.a);case 6:return void FLn(this,null);case 7:return void Nin(this,null);case 8:return void Lin(this,null);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),void sqn(this.g);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),void sqn(this.e);case 11:return void crn(this,null)}zun(this,n)},MWn.Ib=function(){return ROn(this)},MWn.b=0,MWn.c=0,MWn.d=null,MWn.j=0,MWn.k=0,vX(b6n,"ElkEdgeSectionImpl",439),wAn(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn._g=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab):U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.oh=function(n){return hUn(this,n)},MWn.sh=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.uh=function(n){hgn(this,128,n)},MWn.zh=function(){return gWn(),b$t},MWn.Bh=function(n){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){this.Bb|=1},MWn.Hh=function(n){return N_n(this,n)},MWn.Bb=0,vX(l6n,"EModelElementImpl",150),wAn(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},Rf),MWn.Ih=function(n,t){return qGn(this,n,t)},MWn.Jh=function(n){var t,e,i,r;if(this.a!=Utn(n)||0!=(256&n.Bb))throw Hp(new _y(m6n+n.zb+g6n));for(e=kY(n);0!=a4(e.a).i;){if(iyn(t=BB(eGn(e,0,cL(r=BB(Wtn(a4(e.a),0),87).c,88)?BB(r,26):(gWn(),d$t)),26)))return BB(i=Utn(t).Nh().Jh(t),49).th(n),i;e=kY(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new fq(n):new jH(n)},MWn.Kh=function(n,t){return xXn(this,n,t)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.a}return U9(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t,e)},MWn.hh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 1:return this.a&&(e=BB(this.a,49).ih(this,4,GOt,e)),Jhn(this,BB(n,235),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 1:return Jhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return O3(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void xMn(this,BB(t,235))}Lbn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t)},MWn.zh=function(){return gWn(),h$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void xMn(this,null)}qfn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},vX(l6n,"EFactoryImpl",704),wAn(k6n,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},ao),MWn.Ih=function(n,t){switch(n.yj()){case 12:return BB(t,146).tg();case 13:return Bbn(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 4:return new uo;case 6:return new jm;case 7:return new Em;case 8:return new io;case 9:return new ro;case 10:return new co;case 11:return new so;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 13:case 12:return null;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(b6n,"ElkGraphFactoryImpl",k6n),wAn(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn.Wg=function(){var n;return null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?(QM(),QM(),N$t):new Wx(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.ne()}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),w$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.ne=function(){return this.zb},MWn.Lh=function(n){Nrn(this,n)},MWn.Ib=function(){return kfn(this)},MWn.zb=null,vX(l6n,"ENamedElementImpl",438),wAn(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},vY),MWn.Qg=function(n){return wkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb;case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?BB(this.Cb,235):null:QJ(this)}return U9(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 4:return this.sb&&(e=BB(this.sb,49).ih(this,1,HOt,e)),jfn(this,BB(n,471),e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),Ywn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),Ywn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?wkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 4:return jfn(this,null,e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),_pn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),_pn(this.vb,n,e);case 7:return T_n(this,null,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.yb;case 3:return null!=this.xb;case 4:return!!this.sb;case 5:return!!this.rb&&0!=this.rb.i;case 6:return!!this.vb&&0!=this.vb.i;case 7:return!!QJ(this)}return O3(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.oh=function(n){return LNn(this,n)||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Drn(this,SD(t));case 3:return void xrn(this,SD(t));case 4:return void iSn(this,BB(t,471));case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),sqn(this.rb),!this.rb&&(this.rb=new Jz(this,HAt,this)),void pX(this.rb,BB(t,14));case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),sqn(this.vb),!this.vb&&(this.vb=new eK(GOt,this,6,7)),void pX(this.vb,BB(t,14))}Lbn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t)},MWn.vh=function(n){var t,e;if(n&&this.rb)for(e=new AL(this.rb);e.e!=e.i.gc();)cL(t=kpn(e),351)&&(BB(t,351).w=null);hgn(this,64,n)},MWn.zh=function(){return gWn(),v$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Drn(this,null);case 3:return void xrn(this,null);case 4:return void iSn(this,null);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),void sqn(this.rb);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),void sqn(this.vb)}qfn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.Gh=function(){Tyn(this)},MWn.Mh=function(){return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb},MWn.Nh=function(){return this.sb},MWn.Oh=function(){return this.ub},MWn.Ph=function(){return this.xb},MWn.Qh=function(){return this.yb},MWn.Rh=function(n){this.ub=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?kfn(this):((n=new fN(kfn(this))).a+=" (nsURI: ",cO(n,this.yb),n.a+=", nsPrefix: ",cO(n,this.xb),n.a+=")",n.a)},MWn.xb=null,MWn.yb=null,vX(l6n,"EPackageImpl",179),wAn(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},sAn),MWn.q=!1,MWn.r=!1;var WOt=!1;vX(b6n,"ElkGraphPackageImpl",555),wAn(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},uo),MWn.Qg=function(n){return hkn(this,n)},MWn._g=function(n,t,e){switch(n){case 7:return YJ(this);case 8:return this.a}return Rbn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?hkn(this,e):this.Cb.ih(this,-1-i,null,e)),VG(this,BB(n,160),e)):FTn(this,n,t,e)},MWn.jh=function(n,t,e){return 7==t?VG(this,null,e):run(this,n,t,e)},MWn.lh=function(n){switch(n){case 7:return!!YJ(this);case 8:return!mK("",this.a)}return fwn(this,n)},MWn.sh=function(n,t){switch(n){case 7:return void INn(this,BB(t,160));case 8:return void xin(this,SD(t))}zjn(this,n,t)},MWn.zh=function(){return CXn(),jOt},MWn.Bh=function(n){switch(n){case 7:return void INn(this,null);case 8:return void xin(this,"")}Dwn(this,n)},MWn.Ib=function(){return cPn(this)},MWn.a="",vX(b6n,"ElkLabelImpl",354),wAn(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},jm),MWn.Qg=function(n){return Skn(this,n)},MWn._g=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a;case 11:return JJ(this);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),this.b;case 13:return hN(),!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),Ywn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),Ywn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?Skn(this,e):this.Cb.ih(this,-1-i,null,e)),zR(this,BB(n,33),e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),Ywn(this.b,n,e)}return djn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),_pn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),_pn(this.a,n,e);case 11:return zR(this,null,e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),_pn(this.b,n,e)}return gjn(this,n,t,e)},MWn.lh=function(n){switch(n){case 9:return!!this.c&&0!=this.c.i;case 10:return!!this.a&&0!=this.a.i;case 11:return!!JJ(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Gon(this,n)},MWn.sh=function(n,t){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),sqn(this.c),!this.c&&(this.c=new eU(XOt,this,9,9)),void pX(this.c,BB(t,14));case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),sqn(this.a),!this.a&&(this.a=new eU(UOt,this,10,11)),void pX(this.a,BB(t,14));case 11:return void nNn(this,BB(t,33));case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),sqn(this.b),!this.b&&(this.b=new eU(_Ot,this,12,3)),void pX(this.b,BB(t,14))}LAn(this,n,t)},MWn.zh=function(){return CXn(),EOt},MWn.Bh=function(n){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),void sqn(this.c);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),void sqn(this.a);case 11:return void nNn(this,null);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),void sqn(this.b)}xpn(this,n)},MWn.Ib=function(){return zRn(this)},vX(b6n,"ElkNodeImpl",239),wAn(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Em),MWn.Qg=function(n){return fkn(this,n)},MWn._g=function(n,t,e){return 9==n?WJ(this):Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?fkn(this,e):this.Cb.ih(this,-1-i,null,e)),YD(this,BB(n,33),e)):djn(this,n,t,e)},MWn.jh=function(n,t,e){return 9==t?YD(this,null,e):gjn(this,n,t,e)},MWn.lh=function(n){return 9==n?!!WJ(this):Gon(this,n)},MWn.sh=function(n,t){9!==n?LAn(this,n,t):BLn(this,BB(t,33))},MWn.zh=function(){return CXn(),TOt},MWn.Bh=function(n){9!==n?xpn(this,n):BLn(this,null)},MWn.Ib=function(){return URn(this)},vX(b6n,"ElkPortImpl",186);var VOt=bq(B6n,"BasicEMap/Entry");wAn(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},so),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){Din(this,BB(n,146))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void Din(this,BB(t,146));case 1:return void _in(this,t)}yCn(this,n,t)},MWn.zh=function(){return CXn(),MOt},MWn.Bh=function(n){switch(n){case 0:return void Din(this,null);case 1:return void _in(this,null)}mPn(this,n)},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=n?nsn(n):0),this.a},MWn.dd=function(){return this.c},MWn.Th=function(n){this.a=n},MWn.ed=function(n){var t;return t=this.c,_in(this,n),t},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):(oO(oO(oO(n=new Ck,this.b?this.b.tg():zWn),e1n),kN(this.c)),n.a)},MWn.a=-1,MWn.c=null;var QOt,YOt,JOt,ZOt,nAt,tAt,eAt,iAt,rAt=vX(b6n,"ElkPropertyToValueMapEntryImpl",1092);wAn(984,1,{},lo),vX(G6n,"JsonAdapter",984),wAn(210,60,BVn,ek),vX(G6n,"JsonImportException",210),wAn(857,1,{},dkn),vX(G6n,"JsonImporter",857),wAn(891,1,{},aI),vX(G6n,"JsonImporter/lambda$0$Type",891),wAn(892,1,{},uI),vX(G6n,"JsonImporter/lambda$1$Type",892),wAn(900,1,{},$g),vX(G6n,"JsonImporter/lambda$10$Type",900),wAn(902,1,{},oI),vX(G6n,"JsonImporter/lambda$11$Type",902),wAn(903,1,{},sI),vX(G6n,"JsonImporter/lambda$12$Type",903),wAn(909,1,{},fQ),vX(G6n,"JsonImporter/lambda$13$Type",909),wAn(908,1,{},hQ),vX(G6n,"JsonImporter/lambda$14$Type",908),wAn(904,1,{},hI),vX(G6n,"JsonImporter/lambda$15$Type",904),wAn(905,1,{},fI),vX(G6n,"JsonImporter/lambda$16$Type",905),wAn(906,1,{},lI),vX(G6n,"JsonImporter/lambda$17$Type",906),wAn(907,1,{},bI),vX(G6n,"JsonImporter/lambda$18$Type",907),wAn(912,1,{},Lg),vX(G6n,"JsonImporter/lambda$19$Type",912),wAn(893,1,{},Ng),vX(G6n,"JsonImporter/lambda$2$Type",893),wAn(910,1,{},xg),vX(G6n,"JsonImporter/lambda$20$Type",910),wAn(911,1,{},Dg),vX(G6n,"JsonImporter/lambda$21$Type",911),wAn(915,1,{},Rg),vX(G6n,"JsonImporter/lambda$22$Type",915),wAn(913,1,{},Kg),vX(G6n,"JsonImporter/lambda$23$Type",913),wAn(914,1,{},_g),vX(G6n,"JsonImporter/lambda$24$Type",914),wAn(917,1,{},Fg),vX(G6n,"JsonImporter/lambda$25$Type",917),wAn(916,1,{},Bg),vX(G6n,"JsonImporter/lambda$26$Type",916),wAn(918,1,lVn,wI),MWn.td=function(n){E9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$27$Type",918),wAn(919,1,lVn,dI),MWn.td=function(n){T9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$28$Type",919),wAn(920,1,{},gI),vX(G6n,"JsonImporter/lambda$29$Type",920),wAn(896,1,{},Hg),vX(G6n,"JsonImporter/lambda$3$Type",896),wAn(921,1,{},pI),vX(G6n,"JsonImporter/lambda$30$Type",921),wAn(922,1,{},qg),vX(G6n,"JsonImporter/lambda$31$Type",922),wAn(923,1,{},Gg),vX(G6n,"JsonImporter/lambda$32$Type",923),wAn(924,1,{},zg),vX(G6n,"JsonImporter/lambda$33$Type",924),wAn(925,1,{},Ug),vX(G6n,"JsonImporter/lambda$34$Type",925),wAn(859,1,{},Xg),vX(G6n,"JsonImporter/lambda$35$Type",859),wAn(929,1,{},MB),vX(G6n,"JsonImporter/lambda$36$Type",929),wAn(926,1,lVn,Wg),MWn.td=function(n){Y4(this.a,BB(n,469))},vX(G6n,"JsonImporter/lambda$37$Type",926),wAn(927,1,lVn,SI),MWn.td=function(n){lO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$38$Type",927),wAn(928,1,lVn,PI),MWn.td=function(n){bO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$39$Type",928),wAn(894,1,{},Vg),vX(G6n,"JsonImporter/lambda$4$Type",894),wAn(930,1,lVn,Qg),MWn.td=function(n){J4(this.a,BB(n,8))},vX(G6n,"JsonImporter/lambda$40$Type",930),wAn(895,1,{},Yg),vX(G6n,"JsonImporter/lambda$5$Type",895),wAn(899,1,{},Jg),vX(G6n,"JsonImporter/lambda$6$Type",899),wAn(897,1,{},Zg),vX(G6n,"JsonImporter/lambda$7$Type",897),wAn(898,1,{},np),vX(G6n,"JsonImporter/lambda$8$Type",898),wAn(901,1,{},tp),vX(G6n,"JsonImporter/lambda$9$Type",901),wAn(948,1,lVn,ep),MWn.td=function(n){nW(this.a,new GX(SD(n)))},vX(G6n,"JsonMetaDataConverter/lambda$0$Type",948),wAn(949,1,lVn,ip),MWn.td=function(n){_X(this.a,BB(n,237))},vX(G6n,"JsonMetaDataConverter/lambda$1$Type",949),wAn(950,1,lVn,rp),MWn.td=function(n){t1(this.a,BB(n,149))},vX(G6n,"JsonMetaDataConverter/lambda$2$Type",950),wAn(951,1,lVn,cp),MWn.td=function(n){FX(this.a,BB(n,175))},vX(G6n,"JsonMetaDataConverter/lambda$3$Type",951),wAn(237,22,{3:1,35:1,22:1,237:1},MI);var cAt,aAt=Ben(IJn,"GraphFeature",237,Unt,Ktn,pB);wAn(13,1,{35:1,146:1},up,iR,$O,XA),MWn.wd=function(n){return pL(this,BB(n,146))},MWn.Fb=function(n){return EY(this,n)},MWn.wg=function(){return mpn(this)},MWn.tg=function(){return this.b},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return this.b},vX(IJn,"Property",13),wAn(818,1,MYn,ap),MWn.ue=function(n,t){return _ln(this,BB(n,94),BB(t,94))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(IJn,"PropertyHolderComparator",818),wAn(695,1,QWn,sp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return A9(this)},MWn.Qb=function(){uE()},MWn.Ob=function(){return!!this.a},vX(c8n,"ElkGraphUtil/AncestorIterator",695);var uAt=bq(B6n,"EList");wAn(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),MWn.Vc=function(n,t){sln(this,n,t)},MWn.Fc=function(n){return f9(this,n)},MWn.Wc=function(n,t){return oon(this,n,t)},MWn.Gc=function(n){return pX(this,n)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.ai=function(){return!0},MWn.bi=function(n,t){},MWn.ci=function(){},MWn.di=function(n,t){L8(this,n,t)},MWn.ei=function(n,t,e){},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.Fb=function(n){return QDn(this,n)},MWn.Hb=function(){return Mun(this)},MWn.hi=function(){return!1},MWn.Kc=function(){return new AL(this)},MWn.Yc=function(){return new cx(this)},MWn.Zc=function(n){var t;if(t=this.gc(),n<0||n>t)throw Hp(new tK(n,t));return new GU(this,n)},MWn.ji=function(n,t){this.ii(n,this.Xc(t))},MWn.Mc=function(n){return snn(this,n)},MWn.li=function(n,t){return t},MWn._c=function(n,t){return ovn(this,n,t)},MWn.Ib=function(){return Jbn(this)},MWn.ni=function(){return!0},MWn.oi=function(n,t){return xsn(this,t)},vX(B6n,"AbstractEList",67),wAn(63,67,h8n,go,gtn,jcn),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Ifn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.$b=function(){a6(this)},MWn.Hc=function(n){return Sjn(this,n)},MWn.Xb=function(n){return Wtn(this,n)},MWn.qi=function(n){var t,e,i;++this.j,n>(e=null==this.g?0:this.g.length)&&(i=this.g,(t=e+(e/2|0)+4)<n&&(t=n),this.g=this.ri(t),null!=i&&aHn(i,0,this.g,0,this.i))},MWn.Xc=function(n){return Wyn(this,n)},MWn.dc=function(){return 0==this.i},MWn.ii=function(n,t){return YIn(this,n,t)},MWn.ri=function(n){return x8(Ant,HWn,1,n,5,1)},MWn.ki=function(n){return this.g[n]},MWn.$c=function(n){return Lyn(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.gc=function(){return this.i},MWn.Pc=function(){return N3(this)},MWn.Qc=function(n){return Qwn(this,n)},MWn.i=0;var oAt=vX(B6n,"BasicEList",63),sAt=bq(B6n,"TreeIterator");wAn(694,63,f8n),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return null!=this.g||this.c?null==this.g||0!=this.i&&BB(this.g[this.i-1],47).Ob():tZ(this)},MWn.Pb=function(){return aLn(this)},MWn.Qb=function(){if(!this.e)throw Hp(new Fy("There is no valid object to remove."));this.e.Qb()},MWn.c=!1,vX(B6n,"AbstractTreeIterator",694),wAn(685,694,f8n,OA),MWn.si=function(n){var t;return cL(t=BB(n,56).Wg().Kc(),279)&&BB(t,279).Nk(new bo),t},vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator",685),wAn(952,1,{},bo),vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",952);var hAt,fAt,lAt,bAt=vX(c8n,"ElkReflect",null);wAn(889,1,i5n,wo),MWn.vg=function(n){return hZ(),B6(BB(n,174))},vX(c8n,"ElkReflect/lambda$0$Type",889),bq(B6n,"ResourceLocator"),wAn(1051,1,{}),vX(B6n,"DelegatingResourceLocator",1051),wAn(1052,1051,{}),vX("org.eclipse.emf.common","EMFPlugin",1052);var wAt,dAt=bq(J8n,"Adapter"),gAt=bq(J8n,"Notification");wAn(1153,1,Z8n),MWn.ti=function(){return this.d},MWn.ui=function(n){},MWn.vi=function(n){this.d=n},MWn.wi=function(n){this.d==n&&(this.d=null)},MWn.d=null,vX(i6n,"AdapterImpl",1153),wAn(1995,67,n9n),MWn.Vh=function(n,t){return kwn(this,n,t)},MWn.Wh=function(n){var t,e,i;if(++this.j,n.dc())return!1;for(t=this.Vi(),i=n.Kc();i.Ob();)e=i.Pb(),this.Ii(this.oi(t,e)),++t;return!0},MWn.Xh=function(n,t){ZD(this,n,t)},MWn.Yh=function(n){eW(this,n)},MWn.Gi=function(){return this.Ji()},MWn.$b=function(){JD(this,this.Vi(),this.Wi())},MWn.Hc=function(n){return this.Li(n)},MWn.Ic=function(n){return this.Mi(n)},MWn.Hi=function(n,t){this.Si().jm()},MWn.Ii=function(n){this.Si().jm()},MWn.Ji=function(){return this.Si()},MWn.Ki=function(){this.Si().jm()},MWn.Li=function(n){return this.Si().jm()},MWn.Mi=function(n){return this.Si().jm()},MWn.Ni=function(n){return this.Si().jm()},MWn.Oi=function(n){return this.Si().jm()},MWn.Pi=function(){return this.Si().jm()},MWn.Qi=function(n){return this.Si().jm()},MWn.Ri=function(){return this.Si().jm()},MWn.Ti=function(n){return this.Si().jm()},MWn.Ui=function(n,t){return this.Si().jm()},MWn.Vi=function(){return this.Si().jm()},MWn.Wi=function(){return this.Si().jm()},MWn.Xi=function(n){return this.Si().jm()},MWn.Yi=function(){return this.Si().jm()},MWn.Fb=function(n){return this.Ni(n)},MWn.Xb=function(n){return this.li(n,this.Oi(n))},MWn.Hb=function(){return this.Pi()},MWn.Xc=function(n){return this.Qi(n)},MWn.dc=function(){return this.Ri()},MWn.ii=function(n,t){return AMn(this,n,t)},MWn.ki=function(n){return this.Oi(n)},MWn.$c=function(n){return wq(this,n)},MWn.Mc=function(n){var t;return(t=this.Xc(n))>=0&&(this.$c(t),!0)},MWn.mi=function(n,t){return this.Ui(n,this.oi(n,t))},MWn.gc=function(){return this.Vi()},MWn.Pc=function(){return this.Wi()},MWn.Qc=function(n){return this.Xi(n)},MWn.Ib=function(){return this.Yi()},vX(B6n,"DelegatingEList",1995),wAn(1996,1995,n9n),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){vqn(this)},MWn.Zi=function(n,t,e,i,r){return new NY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return!this.Ri()},MWn.ii=function(n,t){var e,i;return this.ej()?(i=this.fj(),e=AMn(this,n,t),this.$i(this.Zi(7,iln(t),e,n,i)),e):AMn(this,n,t)},MWn.$c=function(n){var t,e,i,r;return this.ej()?(e=null,i=this.fj(),t=this.Zi(4,r=wq(this,n),null,n,i),this.bj()&&r?(e=this.dj(r,e))?(e.Ei(t),e.Fi()):this.$i(t):e?(e.Ei(t),e.Fi()):this.$i(t),r):(r=wq(this,n),this.bj()&&r&&(e=this.dj(r,null))&&e.Fi(),r)},MWn.mi=function(n,t){return oFn(this,n,t)},vX(i6n,"DelegatingNotifyingListImpl",1996),wAn(143,1,t9n),MWn.Ei=function(n){return KEn(this,n)},MWn.Fi=function(){$7(this)},MWn.xi=function(){return this.d},MWn._i=function(){return null},MWn.gj=function(){return null},MWn.yi=function(n){return-1},MWn.zi=function(){return Rxn(this)},MWn.Ai=function(){return null},MWn.Bi=function(){return Kxn(this)},MWn.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},MWn.hj=function(){return!1},MWn.Di=function(n){var t,e,i,r,c,a,u,o;switch(this.d){case 1:case 2:switch(n.xi()){case 1:case 2:if(GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0}case 4:if(4===n.xi()&&GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null))return a=tGn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.Ci(),this.d=6,o=new gtn(2),c<=i?(f9(o,this.n),f9(o,n.Bi()),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=c,i+1])):(f9(o,n.Bi()),f9(o,this.n),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=i,c])),this.n=o,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.xi()&&GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null)){for(a=tGn(this),i=n.Ci(),u=BB(this.g,48),e=x8(ANt,hQn,25,u.length+1,15,1),t=0;t<u.length&&(r=u[t])<=i;)e[t++]=r,++i;for(BB(this.n,15).Vc(t,n.Bi()),e[t]=i;++t<e.length;)e[t]=u[t-1];return this.g=e,a||(this.o=-2-e[0]),!0}}return!1},MWn.Ib=function(){var n,t,e;switch((e=new fN(nE(this.gm)+"@"+(nsn(this)>>>0).toString(16))).a+=" (eventType: ",this.d){case 1:e.a+="SET";break;case 2:e.a+="UNSET";break;case 3:e.a+="ADD";break;case 5:e.a+="ADD_MANY";break;case 4:e.a+="REMOVE";break;case 6:e.a+="REMOVE_MANY";break;case 7:e.a+="MOVE";break;case 8:e.a+="REMOVING_ADAPTER";break;case 9:e.a+="RESOLVE";break;default:mE(e,this.d)}if(lKn(this)&&(e.a+=", touch: true"),e.a+=", position: ",mE(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",rO(e,this.Ai()),e.a+=", feature: ",rO(e,this._i()),e.a+=", oldValue: ",rO(e,Kxn(this)),e.a+=", newValue: ",6==this.d&&cL(this.g,48)){for(t=BB(this.g,48),e.a+="[",n=0;n<t.length;)e.a+=t[n],++n<t.length&&(e.a+=FWn);e.a+="]"}else rO(e,Rxn(this));return e.a+=", isTouch: ",yE(e,lKn(this)),e.a+=", wasSet: ",yE(e,tGn(this)),e.a+=")",e.a},MWn.d=0,MWn.e=0,MWn.f=0,MWn.j=0,MWn.k=0,MWn.o=0,MWn.p=0,vX(i6n,"NotificationImpl",143),wAn(1167,143,t9n,NY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"DelegatingNotifyingListImpl/1",1167),wAn(242,63,h8n,po,Fj),MWn.Fc=function(n){return Mwn(this,BB(n,366))},MWn.Ei=function(n){return Mwn(this,n)},MWn.Fi=function(){var n,t,e;for(n=0;n<this.i;++n)null!=(e=(t=BB(this.g[n],366)).Ai())&&-1!=t.xi()&&BB(e,92).Ng(t)},MWn.ri=function(n){return x8(gAt,HWn,366,n,0,1)},vX(i6n,"NotificationChainImpl",242),wAn(1378,90,e6n),MWn.Kg=function(){return this.e},MWn.Mg=function(){return 0!=(1&this.f)},MWn.f=1,vX(i6n,"NotifierImpl",1378),wAn(1993,63,h8n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){sqn(this)},MWn.Zi=function(n,t,e,i,r){return new xY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.ij=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return 0!=this.i},MWn.ii=function(n,t){return Iln(this,n,t)},MWn.$c=function(n){return fDn(this,n)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.jj=function(n,t){return t},MWn.kj=function(n,t){return t},MWn.lj=function(n,t,e){return e},vX(i6n,"NotifyingListImpl",1993),wAn(1166,143,t9n,xY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"NotifyingListImpl/1",1166),wAn(953,63,h8n,aR),MWn.Hc=function(n){return this.i>10?(this.b&&this.c.j==this.a||(this.b=new $q(this),this.a=this.j),FT(this.b,n)):Sjn(this,n)},MWn.ni=function(){return!0},MWn.a=0,vX(B6n,"AbstractEList/1",953),wAn(295,73,NQn,tK),vX(B6n,"AbstractEList/BasicIndexOutOfBoundsException",295),wAn(40,1,QWn,AL),MWn.Nb=function(n){fU(this,n)},MWn.mj=function(){if(this.i.j!=this.f)throw Hp(new vv)},MWn.nj=function(){return kpn(this)},MWn.Ob=function(){return this.e!=this.i.gc()},MWn.Pb=function(){return this.nj()},MWn.Qb=function(){Qjn(this)},MWn.e=0,MWn.f=0,MWn.g=-1,vX(B6n,"AbstractEList/EIterator",40),wAn(278,40,cVn,cx,GU),MWn.Qb=function(){Qjn(this)},MWn.Rb=function(n){odn(this,n)},MWn.oj=function(){var n;try{return n=this.d.Xb(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.pj=function(n){kmn(this,n)},MWn.Sb=function(){return 0!=this.e},MWn.Tb=function(){return this.e},MWn.Ub=function(){return this.oj()},MWn.Vb=function(){return this.e-1},MWn.Wb=function(n){this.pj(n)},vX(B6n,"AbstractEList/EListIterator",278),wAn(341,40,QWn,ax),MWn.nj=function(){return jpn(this)},MWn.Qb=function(){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEIterator",341),wAn(385,278,cVn,ux,RK),MWn.Rb=function(n){throw Hp(new pv)},MWn.nj=function(){var n;try{return n=this.c.ki(this.e),this.mj(),this.g=this.e++,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.oj=function(){var n;try{return n=this.c.ki(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEListIterator",385),wAn(1982,67,r9n),MWn.Vh=function(n,t){var e,i,r,c,a,u,o,s,h;if(0!=(i=t.gc())){for(e=Psn(this,(s=null==(o=BB(yan(this.a,4),126))?0:o.length)+i),(h=s-n)>0&&aHn(o,n,e,n+i,h),u=t.Kc(),c=0;c<i;++c)JA(e,n+c,xsn(this,a=u.Pb()));for(Fgn(this,e),r=0;r<i;++r)a=e[n],this.bi(n,a),++n;return!0}return++this.j,!1},MWn.Wh=function(n){var t,e,i,r,c,a,u,o,s;if(0!=(i=n.gc())){for(t=Psn(this,s=(o=null==(e=BB(yan(this.a,4),126))?0:e.length)+i),u=n.Kc(),c=o;c<s;++c)JA(t,c,xsn(this,a=u.Pb()));for(Fgn(this,t),r=o;r<s;++r)a=t[r],this.bi(r,a);return!0}return++this.j,!1},MWn.Xh=function(n,t){var e,i,r,c;e=Psn(this,(r=null==(i=BB(yan(this.a,4),126))?0:i.length)+1),c=xsn(this,t),n!=r&&aHn(i,n,e,n+1,r-n),$X(e,n,c),Fgn(this,e),this.bi(n,t)},MWn.Yh=function(n){var t,e,i;JA(t=Psn(this,(i=null==(e=BB(yan(this.a,4),126))?0:e.length)+1),i,xsn(this,n)),Fgn(this,t),this.bi(i,n)},MWn.Zh=function(){return new S5(this)},MWn.$h=function(){return new Yz(this)},MWn._h=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new BW(this,n)},MWn.$b=function(){var n,t;++this.j,t=null==(n=BB(yan(this.a,4),126))?0:n.length,Fgn(this,null),L8(this,t,n)},MWn.Hc=function(n){var t,e,i,r;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(i=0,r=(e=t).length;i<r;++i)if(Nfn(n,e[i]))return!0}else for(i=0,r=(e=t).length;i<r;++i)if(GI(e[i])===GI(n))return!0;return!1},MWn.Xb=function(n){var t,e;if(n>=(e=null==(t=BB(yan(this.a,4),126))?0:t.length))throw Hp(new tK(n,e));return t[n]},MWn.Xc=function(n){var t,e,i;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(e=0,i=t.length;e<i;++e)if(Nfn(n,t[e]))return e}else for(e=0,i=t.length;e<i;++e)if(GI(t[e])===GI(n))return e;return-1},MWn.dc=function(){return null==BB(yan(this.a,4),126)},MWn.Kc=function(){return new M5(this)},MWn.Yc=function(){return new Qz(this)},MWn.Zc=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new FW(this,n)},MWn.ii=function(n,t){var e,i,r;if(n>=(r=null==(e=$dn(this))?0:e.length))throw Hp(new Ay(u8n+n+o8n+r));if(t>=r)throw Hp(new Ay(s8n+t+o8n+r));return i=e[t],n!=t&&(n<t?aHn(e,n,e,n+1,t-n):aHn(e,t+1,e,t,n-t),$X(e,n,i),Fgn(this,e)),i},MWn.ki=function(n){return BB(yan(this.a,4),126)[n]},MWn.$c=function(n){return EOn(this,n)},MWn.mi=function(n,t){var e,i;return i=(e=$dn(this))[n],JA(e,n,xsn(this,t)),Fgn(this,e),i},MWn.gc=function(){var n;return null==(n=BB(yan(this.a,4),126))?0:n.length},MWn.Pc=function(){var n,t,e;return e=null==(n=BB(yan(this.a,4),126))?0:n.length,t=x8(dAt,i9n,415,e,0,1),e>0&&aHn(n,0,t,0,e),t},MWn.Qc=function(n){var t,e;return(e=null==(t=BB(yan(this.a,4),126))?0:t.length)>0&&(n.length<e&&(n=Den(tsn(n).c,e)),aHn(t,0,n,0,e)),n.length>e&&$X(n,e,null),n},vX(B6n,"ArrayDelegatingEList",1982),wAn(1038,40,QWn,M5),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EIterator",1038),wAn(706,278,cVn,Qz,FW),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},MWn.pj=function(n){kmn(this,n),this.a=BB(yan(this.b.a,4),126)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EListIterator",706),wAn(1039,341,QWn,S5),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEIterator",1039),wAn(707,385,cVn,Yz,BW),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEListIterator",707),wAn(606,295,NQn,LO),vX(B6n,"BasicEList/BasicIndexOutOfBoundsException",606),wAn(696,63,h8n,DI),MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.qi=function(n){throw Hp(new pv)},MWn.Kc=function(){return this.Zh()},MWn.Yc=function(){return this.$h()},MWn.Zc=function(n){return this._h(n)},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.$c=function(n){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},vX(B6n,"BasicEList/UnmodifiableEList",696),wAn(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),MWn.Vc=function(n,t){Q$(this,n,BB(t,42))},MWn.Fc=function(n){return aD(this,BB(n,42))},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return BB(Wtn(this.c,n),133)},MWn.ii=function(n,t){return BB(this.c.ii(n,t),42)},MWn.ji=function(n,t){Y$(this,n,BB(t,42))},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BB(this.c.$c(n),42)},MWn._c=function(n,t){return uX(this,n,BB(t,42))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Wc=function(n,t){return this.c.Wc(n,t)},MWn.Gc=function(n){return this.c.Gc(n)},MWn.$b=function(){this.c.$b()},MWn.Hc=function(n){return this.c.Hc(n)},MWn.Ic=function(n){return oun(this.c,n)},MWn.qj=function(){var n,t;if(null==this.d){for(this.d=x8(oAt,c9n,63,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)Ivn(this,BB(n.nj(),133));this.e=t}},MWn.Fb=function(n){return NK(this,n)},MWn.Hb=function(){return Mun(this.c)},MWn.Xc=function(n){return this.c.Xc(n)},MWn.rj=function(){this.c=new hp(this)},MWn.dc=function(){return 0==this.f},MWn.Kc=function(){return this.c.Kc()},MWn.Yc=function(){return this.c.Yc()},MWn.Zc=function(n){return this.c.Zc(n)},MWn.sj=function(){return A8(this)},MWn.tj=function(n,t,e){return new SB(n,t,e)},MWn.uj=function(){return new vo},MWn.Mc=function(n){return hin(this,n)},MWn.gc=function(){return this.f},MWn.bd=function(n,t){return new s1(this.c,n,t)},MWn.Pc=function(){return this.c.Pc()},MWn.Qc=function(n){return this.c.Qc(n)},MWn.Ib=function(){return Jbn(this.c)},MWn.e=0,MWn.f=0,vX(B6n,"BasicEMap",705),wAn(1033,63,h8n,hp),MWn.bi=function(n,t){Av(this,BB(t,133))},MWn.ei=function(n,t,e){var i;++(i=this,BB(t,133),i).a.e},MWn.fi=function(n,t){$v(this,BB(t,133))},MWn.gi=function(n,t,e){VN(this,BB(t,133),BB(e,133))},MWn.di=function(n,t){aan(this.a)},vX(B6n,"BasicEMap/1",1033),wAn(1034,63,h8n,vo),MWn.ri=function(n){return x8(vAt,a9n,612,n,0,1)},vX(B6n,"BasicEMap/2",1034),wAn(1035,nVn,tVn,fp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return rdn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Bj(this.a)},MWn.Mc=function(n){var t;return t=this.a.f,Wdn(this.a,n),this.a.f!=t},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/3",1035),wAn(1036,28,ZWn,lp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return YDn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Hj(this.a)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/4",1036),wAn(1037,nVn,tVn,bp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){var t,e,i,r,c,a,u,o,s;if(this.a.f>0&&cL(n,42)&&(this.a.qj(),r=null==(u=(o=BB(n,42)).cd())?0:nsn(u),c=eR(this.a,r),t=this.a.d[c]))for(e=BB(t.g,367),s=t.i,a=0;a<s;++a)if((i=e[a]).Sh()==r&&i.Fb(o))return!0;return!1},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new pQ(this.a)},MWn.Mc=function(n){return IAn(this,n)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/5",1037),wAn(613,1,QWn,pQ),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return-1!=this.b},MWn.Pb=function(){var n;if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.b)throw Hp(new yv);return this.d=this.a,this.e=this.b,ujn(this),n=BB(this.f.d[this.d].g[this.e],133),this.vj(n)},MWn.Qb=function(){if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.e)throw Hp(new dv);this.f.c.Mc(Wtn(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&-1!=this.b&&--this.b},MWn.vj=function(n){return n},MWn.a=0,MWn.b=-1,MWn.c=0,MWn.d=0,MWn.e=0,vX(B6n,"BasicEMap/BasicEMapIterator",613),wAn(1031,613,QWn,Bj),MWn.vj=function(n){return n.cd()},vX(B6n,"BasicEMap/BasicEMapKeyIterator",1031),wAn(1032,613,QWn,Hj),MWn.vj=function(n){return n.dd()},vX(B6n,"BasicEMap/BasicEMapValueIterator",1032),wAn(1030,1,JWn,wp),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.a.c.$b()},MWn._b=function(n){return BI(this,n)},MWn.uc=function(n){return YDn(this.a,n)},MWn.vc=function(){return I8(this.a)},MWn.Fb=function(n){return NK(this.a,n)},MWn.xc=function(n){return cdn(this.a,n)},MWn.Hb=function(){return Mun(this.a.c)},MWn.dc=function(){return 0==this.a.f},MWn.ec=function(){return O8(this.a)},MWn.zc=function(n,t){return vjn(this.a,n,t)},MWn.Bc=function(n){return Wdn(this.a,n)},MWn.gc=function(){return this.a.f},MWn.Ib=function(){return Jbn(this.a.c)},MWn.Cc=function(){return C8(this.a)},vX(B6n,"BasicEMap/DelegatingMap",1030),wAn(612,1,{42:1,133:1,612:1},SB),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),(null!=this.b?Nfn(this.b,t.cd()):GI(this.b)===GI(t.cd()))&&(null!=this.c?Nfn(this.c,t.dd()):GI(this.c)===GI(t.dd())))},MWn.Sh=function(){return this.a},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return this.a^(null==this.c?0:nsn(this.c))},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){throw Hp(new sv)},MWn.ed=function(n){var t;return t=this.c,this.c=n,t},MWn.Ib=function(){return this.b+"->"+this.c},MWn.a=0;var pAt,vAt=vX(B6n,"BasicEMap/EntryImpl",612);wAn(536,1,{},oo),vX(B6n,"BasicEMap/View",536),wAn(768,1,{}),MWn.Fb=function(n){return NAn((SQ(),set),n)},MWn.Hb=function(){return Fon((SQ(),set))},MWn.Ib=function(){return LMn((SQ(),set))},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList",768),wAn(1312,1,cVn,mo),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList/1",1312),wAn(1310,768,{20:1,14:1,15:1,58:1},Tm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},vX(B6n,"ECollections/EmptyUnmodifiableEList",1310),wAn(1311,768,{20:1,14:1,15:1,58:1,589:1},Mm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},MWn.sj=function(){return SQ(),SQ(),het},vX(B6n,"ECollections/EmptyUnmodifiableEMap",1311);var mAt,yAt=bq(B6n,"Enumerator");wAn(281,1,{281:1},rRn),MWn.Fb=function(n){var t;return this===n||!!cL(n,281)&&(t=BB(n,281),this.f==t.f&&vG(this.i,t.i)&&pG(this.a,0!=(256&this.f)?0!=(256&t.f)?t.a:null:0!=(256&t.f)?null:t.a)&&pG(this.d,t.d)&&pG(this.g,t.g)&&pG(this.e,t.e)&&Spn(this,t))},MWn.Hb=function(){return this.f},MWn.Ib=function(){return M_n(this)},MWn.f=0;var kAt,jAt,EAt,TAt=0,MAt=0,SAt=0,PAt=0,CAt=0,IAt=0,OAt=0,AAt=0,$At=0,LAt=0,NAt=0,xAt=0,DAt=0;vX(B6n,"URI",281),wAn(1091,43,tYn,Sm),MWn.zc=function(n,t){return BB(mZ(this,SD(n),BB(t,281)),281)},vX(B6n,"URI/URICache",1091),wAn(497,63,h8n,fo,rG),MWn.hi=function(){return!0},vX(B6n,"UniqueEList",497),wAn(581,60,BVn,L7),vX(B6n,"WrappedException",581);var RAt,KAt=bq(q5n,s9n),_At=bq(q5n,h9n),FAt=bq(q5n,f9n),BAt=bq(q5n,l9n),HAt=bq(q5n,b9n),qAt=bq(q5n,"EClass"),GAt=bq(q5n,"EDataType");wAn(1183,43,tYn,Pm),MWn.xc=function(n){return XI(n)?SJ(this,n):qI(AY(this.f,n))},vX(q5n,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var zAt,UAt,XAt=bq(q5n,"EEnum"),WAt=bq(q5n,w9n),VAt=bq(q5n,d9n),QAt=bq(q5n,g9n),YAt=bq(q5n,p9n),JAt=bq(q5n,v9n);wAn(1029,1,{},ho),MWn.Ib=function(){return"NIL"},vX(q5n,"EStructuralFeature/Internal/DynamicValueHolder/1",1029),wAn(1028,43,tYn,Cm),MWn.xc=function(n){return XI(n)?SJ(this,n):qI(AY(this.f,n))},vX(q5n,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var ZAt,n$t,t$t,e$t,i$t,r$t,c$t,a$t,u$t,o$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,v$t,m$t,y$t,k$t,j$t,E$t,T$t,M$t,S$t,P$t,C$t,I$t,O$t=bq(q5n,m9n),A$t=bq(q5n,"EValidator/PatternMatcher"),$$t=bq(y9n,"FeatureMap/Entry");wAn(535,1,{72:1},CI),MWn.ak=function(){return this.a},MWn.dd=function(){return this.b},vX(l6n,"BasicEObjectImpl/1",535),wAn(1027,1,k9n,II),MWn.Wj=function(n){return V5(this.a,this.b,n)},MWn.fj=function(){return ZJ(this.a,this.b)},MWn.Wb=function(n){NJ(this.a,this.b,n)},MWn.Xj=function(){PW(this.a,this.b)},vX(l6n,"BasicEObjectImpl/4",1027),wAn(1983,1,{108:1}),MWn.bk=function(n){this.e=0==n?M$t:x8(Ant,HWn,1,n,5,1)},MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.ck=function(){return this.c},MWn.dk=function(){throw Hp(new pv)},MWn.ek=function(){throw Hp(new pv)},MWn.fk=function(){return this.d},MWn.gk=function(){return null!=this.e},MWn.hk=function(n){this.c=n},MWn.ik=function(n){throw Hp(new pv)},MWn.jk=function(n){throw Hp(new pv)},MWn.kk=function(n){this.d=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),wAn(185,1983,{108:1},Kf),MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderImpl",185),wAn(506,97,f6n,yo),MWn.Kg=function(){return this.f},MWn.Pg=function(){return this.k},MWn.Rg=function(n,t){this.g=n,this.i=t},MWn.Tg=function(){return 0==(2&this.j)?this.zh():this.ph().ck()},MWn.Vg=function(){return this.i},MWn.Mg=function(){return 0!=(1&this.j)},MWn.eh=function(){return this.g},MWn.kh=function(){return 0!=(4&this.j)},MWn.ph=function(){return!this.k&&(this.k=new Kf),this.k},MWn.th=function(n){this.ph().hk(n),n?this.j|=2:this.j&=-3},MWn.vh=function(n){this.ph().jk(n),n?this.j|=4:this.j&=-5},MWn.zh=function(){return(QX(),t$t).S},MWn.i=0,MWn.j=1,vX(l6n,"EObjectImpl",506),wAn(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},jH),MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.Tg=function(){return this.d},MWn.Yg=function(n){return Awn(this.d,n)},MWn.$g=function(){return this.d},MWn.dh=function(){return null!=this.e},MWn.ph=function(){return!this.k&&(this.k=new ko),this.k},MWn.th=function(n){this.d=n},MWn.yh=function(){var n;return null==this.e&&(n=bX(this.d),this.e=0==n?S$t:x8(Ant,HWn,1,n,5,1)),this},MWn.Ah=function(){return 0},vX(l6n,"DynamicEObjectImpl",780),wAn(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},fq),MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.th=function(n){this.d=n,this.b=NNn(n,"key"),this.c=NNn(n,E6n)},MWn.Sh=function(){var n;return-1==this.a&&(n=J7(this,this.b),this.a=null==n?0:nsn(n)),this.a},MWn.cd=function(){return J7(this,this.b)},MWn.dd=function(){return J7(this,this.c)},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){NJ(this,this.b,n)},MWn.ed=function(n){var t;return t=J7(this,this.c),NJ(this,this.c,n),t},MWn.a=0,vX(l6n,"DynamicEObjectImpl/BasicEMapEntry",1376),wAn(1377,1,{108:1},ko),MWn.bk=function(n){throw Hp(new pv)},MWn.Ch=function(n){throw Hp(new pv)},MWn.Dh=function(n,t){throw Hp(new pv)},MWn.Eh=function(n){throw Hp(new pv)},MWn.ck=function(){throw Hp(new pv)},MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.fk=function(){return this.c},MWn.gk=function(){throw Hp(new pv)},MWn.hk=function(n){throw Hp(new pv)},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},MWn.kk=function(n){this.c=n},vX(l6n,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),wAn(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},jo),MWn.Qg=function(n){return bkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),this.b):(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),A8(this.b));case 3:return bZ(this);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),this.a;case 5:return!this.c&&(this.c=new RL(LOt,this,5)),this.c}return U9(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?bkn(this,e):this.Cb.ih(this,-1-i,null,e)),QG(this,BB(n,147),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),BK(this.b,n,e);case 3:return QG(this,null,e);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.d;case 2:return!!this.b&&0!=this.b.f;case 3:return!!bZ(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return O3(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void pq(this,SD(t));case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void tan(this.b,t);case 3:return void ONn(this,BB(t,147));case 4:return!this.a&&(this.a=new $L(LOt,this,4)),sqn(this.a),!this.a&&(this.a=new $L(LOt,this,4)),void pX(this.a,BB(t,14));case 5:return!this.c&&(this.c=new RL(LOt,this,5)),sqn(this.c),!this.c&&(this.c=new RL(LOt,this,5)),void pX(this.c,BB(t,14))}Lbn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t)},MWn.zh=function(){return gWn(),e$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Bin(this,null);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void this.b.c.$b();case 3:return void ONn(this,null);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),void sqn(this.a);case 5:return!this.c&&(this.c=new RL(LOt,this,5)),void sqn(this.c)}qfn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.Ib=function(){return Vfn(this)},MWn.d=null,vX(l6n,"EAnnotationImpl",510),wAn(151,705,j9n,y9),MWn.Xh=function(n,t){n$(this,n,BB(t,42))},MWn.lk=function(n,t){return FK(this,BB(n,42),t)},MWn.pi=function(n){return BB(BB(this.c,69).pi(n),133)},MWn.Zh=function(){return BB(this.c,69).Zh()},MWn.$h=function(){return BB(this.c,69).$h()},MWn._h=function(n){return BB(this.c,69)._h(n)},MWn.mk=function(n,t){return BK(this,n,t)},MWn.Wj=function(n){return BB(this.c,76).Wj(n)},MWn.rj=function(){},MWn.fj=function(){return BB(this.c,76).fj()},MWn.tj=function(n,t,e){var i;return(i=BB(Utn(this.b).Nh().Jh(this.b),133)).Th(n),i.Uh(t),i.ed(e),i},MWn.uj=function(){return new Ip(this)},MWn.Wb=function(n){tan(this,n)},MWn.Xj=function(){BB(this.c,76).Xj()},vX(y9n,"EcoreEMap",151),wAn(158,151,j9n,Jx),MWn.qj=function(){var n,t,e,i,r;if(null==this.d){for(r=x8(oAt,c9n,63,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=BB(e.nj(),133)).Sh()&DWn)%r.length])&&(n=r[i]=new Ip(this)),n.Fc(t);this.d=r}},vX(l6n,"EAnnotationImpl/1",158),wAn(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi())}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),E$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi())}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Ikn(this),this.Bb|=1},MWn.Yj=function(){return Ikn(this)},MWn.Zj=function(){return this.t},MWn.$j=function(){var n;return(n=this.t)>1||-1==n},MWn.hi=function(){return 0!=(512&this.Bb)},MWn.nk=function(n,t){return Pfn(this,n,t)},MWn.ok=function(n){Nen(this,n)},MWn.Ib=function(){return KOn(this)},MWn.s=0,MWn.t=1,vX(l6n,"ETypedElementImpl",284),wAn(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),MWn.Qg=function(n){return Nyn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?Nyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 17:return T_n(this,null,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),j$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.Gj=function(){return this.f},MWn.zj=function(){return qLn(this)},MWn.Hj=function(){return dZ(this)},MWn.Lj=function(){return null},MWn.pk=function(){return this.k},MWn.aj=function(){return this.n},MWn.Mj=function(){return oEn(this)},MWn.Nj=function(){var n,t,e,i,r,c,a,u,o;return this.p||((null==(e=dZ(this)).i&&qFn(e),e.i).length,(i=this.Lj())&&bX(dZ(i)),n=(a=(r=Ikn(this)).Bj())?0!=(1&a.i)?a==$Nt?ktt:a==ANt?Att:a==DNt?Ctt:a==xNt?Ptt:a==LNt?Rtt:a==RNt?_tt:a==NNt?Ttt:Stt:a:null,t=qLn(this),u=r.zj(),bbn(this),0!=(this.Bb&hVn)&&((c=mjn((IPn(),Z$t),e))&&c!=this||(c=Z1(B7(Z$t,this))))?this.p=new AI(this,c):this.$j()?this.rk()?i?0!=(this.Bb&T9n)?n?this.sk()?this.p=new lQ(47,n,this,i):this.p=new lQ(5,n,this,i):this.sk()?this.p=new w4(46,this,i):this.p=new w4(4,this,i):n?this.sk()?this.p=new lQ(49,n,this,i):this.p=new lQ(7,n,this,i):this.sk()?this.p=new w4(48,this,i):this.p=new w4(6,this,i):0!=(this.Bb&T9n)?n?n==Hnt?this.p=new PB(50,VOt,this):this.sk()?this.p=new PB(43,n,this):this.p=new PB(1,n,this):this.sk()?this.p=new RY(42,this):this.p=new RY(0,this):n?n==Hnt?this.p=new PB(41,VOt,this):this.sk()?this.p=new PB(45,n,this):this.p=new PB(3,n,this):this.sk()?this.p=new RY(44,this):this.p=new RY(2,this):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(512&this.Bb)?0!=(this.Bb&T9n)?this.p=n?new PB(9,n,this):new RY(8,this):this.p=n?new PB(11,n,this):new RY(10,this):0!=(this.Bb&T9n)?this.p=n?new PB(13,n,this):new RY(12,this):this.p=n?new PB(15,n,this):new RY(14,this):i?(o=i.t)>1||-1==o?this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(25,n,this,i):new w4(24,this,i):this.p=n?new lQ(27,n,this,i):new w4(26,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(29,n,this,i):new w4(28,this,i):this.p=n?new lQ(31,n,this,i):new w4(30,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(33,n,this,i):new w4(32,this,i):this.p=n?new lQ(35,n,this,i):new w4(34,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(37,n,this,i):new w4(36,this,i):this.p=n?new lQ(39,n,this,i):new w4(38,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new PB(17,n,this):new RY(16,this):this.p=n?new PB(19,n,this):new RY(18,this):0!=(this.Bb&T9n)?this.p=n?new PB(21,n,this):new RY(20,this):this.p=n?new PB(23,n,this):new RY(22,this):this.qk()?this.sk()?this.p=new CB(BB(r,26),this,i):this.p=new mJ(BB(r,26),this,i):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(this.Bb&T9n)?this.p=n?new nz(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new dQ(BB(r,148),t,u,this):this.p=n?new ZG(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new wQ(BB(r,148),t,u,this):this.rk()?i?0!=(this.Bb&T9n)?this.sk()?this.p=new NB(BB(r,26),this,i):this.p=new LB(BB(r,26),this,i):this.sk()?this.p=new $B(BB(r,26),this,i):this.p=new IB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.sk()?this.p=new eD(BB(r,26),this):this.p=new tD(BB(r,26),this):this.sk()?this.p=new nD(BB(r,26),this):this.p=new Zx(BB(r,26),this):this.sk()?i?0!=(this.Bb&T9n)?this.p=new xB(BB(r,26),this,i):this.p=new OB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new rD(BB(r,26),this):this.p=new iD(BB(r,26),this):i?0!=(this.Bb&T9n)?this.p=new DB(BB(r,26),this,i):this.p=new AB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new cD(BB(r,26),this):this.p=new cG(BB(r,26),this)),this.p},MWn.Ij=function(){return 0!=(this.Bb&k6n)},MWn.qk=function(){return!1},MWn.rk=function(){return!1},MWn.Jj=function(){return 0!=(this.Bb&hVn)},MWn.Oj=function(){return hnn(this)},MWn.sk=function(){return!1},MWn.Kj=function(){return 0!=(this.Bb&T9n)},MWn.tk=function(n){this.k=n},MWn.Lh=function(n){JZ(this,n)},MWn.Ib=function(){return ERn(this)},MWn.e=!1,MWn.n=0,vX(l6n,"EStructuralFeatureImpl",449),wAn(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},Om),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!NIn(this);case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return t?uun(this):x6(this)}return U9(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return NIn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!x6(this)}return O3(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Uj(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void Gln(this,qy(TD(t)))}Lbn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t)},MWn.zh=function(){return gWn(),i$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return this.b=0,void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return void Gln(this,!1)}qfn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.Gh=function(){uun(this),kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.$j=function(){return NIn(this)},MWn.nk=function(n,t){return this.b=0,this.a=null,Pfn(this,n,t)},MWn.ok=function(n){Uj(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (iD: ",yE(n,0!=(this.Bb&h6n)),n.a+=")",n.a)},MWn.b=0,vX(l6n,"EAttributeImpl",322),wAn(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),MWn.uk=function(n){return n.Tg()==this},MWn.Qg=function(n){return fyn(this,n)},MWn.Rg=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),c$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.yj=function(){var n;return-1==this.G&&(this.G=(n=Utn(this))?uvn(n.Mh(),this):-1),this.G},MWn.zj=function(){return null},MWn.Aj=function(){return Utn(this)},MWn.vk=function(){return this.v},MWn.Bj=function(){return iyn(this)},MWn.Cj=function(){return null!=this.D?this.D:this.B},MWn.Dj=function(){return this.F},MWn.wj=function(n){return SFn(this,n)},MWn.wk=function(n){this.v=n},MWn.xk=function(n){Urn(this,n)},MWn.yk=function(n){this.C=n},MWn.Lh=function(n){ZZ(this,n)},MWn.Ib=function(){return Cwn(this)},MWn.C=null,MWn.D=null,MWn.G=-1,vX(l6n,"EClassifierImpl",351),wAn(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},_f),MWn.uk=function(n){return QR(this,n.Tg())},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return null;case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return hN(),0!=(512&this.Bb);case 10:return kY(this);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),this.q;case 12:return YBn(this);case 13:return RBn(this);case 14:return RBn(this),this.r;case 15:return YBn(this),this.k;case 16:return WPn(this);case 17:return gBn(this);case 18:return qFn(this);case 19:return CLn(this);case 20:return YBn(this),this.o;case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),this.s;case 22:return a4(this);case 23:return HDn(this)}return U9(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),Ywn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),Ywn(this.s,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),_pn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),_pn(this.s,n,e);case 22:return _pn(a4(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0!=(256&this.Bb);case 9:return 0!=(512&this.Bb);case 10:return!(!this.u||0==a4(this.u.a).i||this.n&&Rvn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=YBn(this).i;case 13:return 0!=RBn(this).i;case 14:return RBn(this),0!=this.r.i;case 15:return YBn(this),0!=this.k.i;case 16:return 0!=WPn(this).i;case 17:return 0!=gBn(this).i;case 18:return 0!=qFn(this).i;case 19:return 0!=CLn(this).i;case 20:return YBn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&Rvn(this.n);case 23:return 0!=HDn(this).i}return O3(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.oh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:NNn(this,n))||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Jfn(this,qy(TD(t)));case 9:return void tln(this,qy(TD(t)));case 10:return vqn(kY(this)),void pX(kY(this),BB(t,14));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),sqn(this.q),!this.q&&(this.q=new eU(QAt,this,11,10)),void pX(this.q,BB(t,14));case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),sqn(this.s),!this.s&&(this.s=new eU(FAt,this,21,17)),void pX(this.s,BB(t,14));case 22:return sqn(a4(this)),void pX(a4(this),BB(t,14))}Lbn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t)},MWn.zh=function(){return gWn(),r$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Jfn(this,!1);case 9:return void tln(this,!1);case 10:return void(this.u&&vqn(this.u));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),void sqn(this.q);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),void sqn(this.s);case 22:return void(this.n&&sqn(this.n))}qfn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.Gh=function(){var n,t;if(YBn(this),RBn(this),WPn(this),gBn(this),qFn(this),CLn(this),HDn(this),a6(XB(P5(this))),this.s)for(n=0,t=this.s.i;n<t;++n)vx(Wtn(this.s,n));if(this.q)for(n=0,t=this.q.i;n<t;++n)vx(Wtn(this.q,n));Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.Ib=function(){return dEn(this)},MWn.k=null,MWn.r=null,vX(l6n,"EClassImpl",88),wAn(1994,1993,D9n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return LFn(this,this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.lk=function(n,t){return Ywn(this,n,t)},MWn.pi=function(n){return F9(this,n)},MWn.mk=function(n,t){return _pn(this,n,t)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"NotifyingInternalEListImpl",1994),wAn(622,1994,R9n),MWn.Hc=function(n){return bqn(this,n)},MWn.Zi=function(n,t,e,i,r){return yZ(this,n,t,e,i,r)},MWn.$i=function(n){Lv(this,n)},MWn.Wj=function(n){return this},MWn.ak=function(){return itn(this.e.Tg(),this.aj())},MWn._i=function(){return this.ak()},MWn.aj=function(){return Awn(this.e.Tg(),this.ak())},MWn.zk=function(){return BB(this.ak().Yj(),26).Bj()},MWn.Ak=function(){return Cvn(BB(this.ak(),18)).n},MWn.Ai=function(){return this.e},MWn.Bk=function(){return!0},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!1},MWn.Xc=function(n){return uvn(this,n)},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.e,this.Ak(),this.zk(),t):e.gh(this.e,Awn(e.Tg(),Cvn(BB(this.ak(),18))),null,t):e.gh(this.e,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.e,this.Ak(),this.zk(),t):e.ih(this.e,Awn(e.Tg(),Cvn(BB(this.ak(),18))),null,t):e.ih(this.e,-1-this.aj(),null,t)},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return x3(this.d,n)},MWn.ej=function(){return mA(this.e)},MWn.fj=function(){return 0!=this.i},MWn.ri=function(n){return Den(this.d,n)},MWn.li=function(n,t){return this.Fk()&&this.Ek()?GOn(this,n,BB(t,56)):t},MWn.Gk=function(n){return n.kh()?tfn(this.e,BB(n,49)):n},MWn.Wb=function(n){J$(this,n)},MWn.Pc=function(){return H9(this)},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.i-1;t>=0;--t)Wtn(this,t);return Qwn(this,n)},MWn.Xj=function(){sqn(this)},MWn.oi=function(n,t){return _en(this,n,t)},vX(y9n,"EcoreEList",622),wAn(496,622,R9n,yH),MWn.ai=function(){return!1},MWn.aj=function(){return this.c},MWn.bj=function(){return!1},MWn.Fk=function(){return!0},MWn.hi=function(){return!0},MWn.li=function(n,t){return t},MWn.ni=function(){return!1},MWn.c=0,vX(y9n,"EObjectEList",496),wAn(85,496,R9n,$L),MWn.bj=function(){return!0},MWn.Dk=function(){return!1},MWn.rk=function(){return!0},vX(y9n,"EObjectContainmentEList",85),wAn(545,85,R9n,LL),MWn.ci=function(){this.b=!0},MWn.fj=function(){return this.b},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.b,this.b=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.b=!1},MWn.b=!1,vX(y9n,"EObjectContainmentEList/Unsettable",545),wAn(1140,545,R9n,YG),MWn.ii=function(n,t){var e,i;return e=BB(Iln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),a$t),iln(t),cL(i=e.c,88)?BB(i,26):d$t,n)),e},MWn.jj=function(n,t){return Zwn(this,BB(n,87),t)},MWn.kj=function(n,t){return Jwn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return _jn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Rvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EClassImpl/1",1140),wAn(1154,1153,Z8n),MWn.ui=function(n){var t,e,i,r,c,a,u;if(8!=(e=n.xi())){if(0==(i=apn(n)))switch(e){case 1:case 9:null!=(u=n.Bi())&&(!(t=P5(BB(u,473))).c&&(t.c=new Bo),snn(t.c,n.Ai())),null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 3:null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 5:if(null!=(a=n.zi()))for(c=BB(a,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 4:null!=(u=n.Bi())&&0==(1&(r=BB(u,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()));break;case 6:if(null!=(u=n.Bi()))for(c=BB(u,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()))}this.Hk(i)}},MWn.Hk=function(n){dRn(this,n)},MWn.b=63,vX(l6n,"ESuperAdapter",1154),wAn(1155,1154,Z8n,dp),MWn.Hk=function(n){ACn(this,n)},vX(l6n,"EClassImpl/10",1155),wAn(1144,696,R9n),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Ifn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.lk=function(n,t){throw Hp(new pv)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.mk=function(n,t){throw Hp(new pv)},MWn.Wj=function(n){return this},MWn.fj=function(){return 0!=this.i},MWn.Wb=function(n){throw Hp(new pv)},MWn.Xj=function(){throw Hp(new pv)},vX(y9n,"EcoreEList/UnmodifiableEList",1144),wAn(319,1144,R9n,NO),MWn.ni=function(){return!1},vX(y9n,"EcoreEList/UnmodifiableEList/FastCompare",319),wAn(1147,319,R9n,don),MWn.Xc=function(n){var t,e;if(cL(n,170)&&-1!=(t=BB(n,170).aj()))for(e=this.i;t<e;++t)if(GI(this.g[t])===GI(n))return t;return-1},vX(l6n,"EClassImpl/1EAllStructuralFeaturesList",1147),wAn(1141,497,h8n,Eo),MWn.ri=function(n){return x8(VAt,B9n,87,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EGenericSuperTypeEList",1141),wAn(623,497,h8n,To),MWn.ri=function(n){return x8(FAt,N9n,170,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EStructuralFeatureUniqueEList",623),wAn(741,497,h8n,Mo),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1ReferenceList",741),wAn(1142,497,h8n,gp),MWn.bi=function(n,t){tz(this,BB(t,34))},MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/2",1142),wAn(1143,497,h8n,So),MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/3",1143),wAn(1145,319,R9n,EH),MWn.Fc=function(n){return mB(this,BB(n,34))},MWn.Yh=function(n){JE(this,BB(n,34))},vX(l6n,"EClassImpl/4",1145),wAn(1146,319,R9n,TH),MWn.Fc=function(n){return yB(this,BB(n,18))},MWn.Yh=function(n){ZE(this,BB(n,18))},vX(l6n,"EClassImpl/5",1146),wAn(1148,497,h8n,Po),MWn.ri=function(n){return x8(QAt,x9n,59,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/6",1148),wAn(1149,497,h8n,Co),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/7",1149),wAn(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1}),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return uFn(this,this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.lk=function(n,t){return wmn(this,n,t)},MWn.mk=function(n,t){return Fpn(this,n,t)},MWn.mi=function(n,t){return oFn(this,n,t)},MWn.pi=function(n){return this.Oi(n)},MWn.Zh=function(){return new ax(this)},MWn.Gi=function(){return this.Ji()},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"DelegatingNotifyingInternalEListImpl",1997),wAn(742,1997,H9n),MWn.ai=function(){var n;return cL(n=itn(jY(this.b),this.aj()).Yj(),148)&&!cL(n,457)&&0==(1&n.Bj().i)},MWn.Hc=function(n){var t,e,i,r,c,a,u;if(this.Fk()){if((u=this.Vi())>4){if(!this.wj(n))return!1;if(this.rk()){if(a=(t=(e=BB(n,49)).Ug())==this.b&&(this.Dk()?e.Og(e.Vg(),BB(itn(jY(this.b),this.aj()).Yj(),26).Bj())==Cvn(BB(itn(jY(this.b),this.aj()),18)).n:-1-e.Vg()==this.aj()),this.Ek()&&!a&&!t&&e.Zg())for(i=0;i<u;++i)if(GI(Gz(this,this.Oi(i)))===GI(n))return!0;return a}if(this.Dk()&&!this.Ck()){if(GI(r=BB(n,56).ah(Cvn(BB(itn(jY(this.b),this.aj()),18))))===GI(this.b))return!0;if(null==r||!BB(r,56).kh())return!1}}if(c=this.Li(n),this.Ek()&&!c)for(i=0;i<u;++i)if(GI(e=Gz(this,this.Oi(i)))===GI(n))return!0;return c}return this.Li(n)},MWn.Zi=function(n,t,e,i,r){return new N7(this.b,n,this.aj(),t,e,i,r)},MWn.$i=function(n){ban(this.b,n)},MWn.Wj=function(n){return this},MWn._i=function(){return itn(jY(this.b),this.aj())},MWn.aj=function(){return Awn(jY(this.b),itn(jY(this.b),this.aj()))},MWn.Ai=function(){return this.b},MWn.Bk=function(){return!!itn(jY(this.b),this.aj()).Yj().Bj()},MWn.bj=function(){var n;return!(!cL(n=itn(jY(this.b),this.aj()),99)||0==(BB(n,18).Bb&h6n)&&!Cvn(BB(n,18)))},MWn.Ck=function(){var n,t,e;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!(t=Cvn(BB(n,18)))&&((e=t.t)>1||-1==e)},MWn.Dk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!Cvn(BB(n,18))},MWn.Ek=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&BQn)},MWn.Xc=function(n){var t,e,i;if((e=this.Qi(n))>=0)return e;if(this.Fk())for(t=0,i=this.Vi();t<i;++t)if(GI(Gz(this,this.Oi(t)))===GI(n))return t;return-1},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.b,Cvn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.gh(this.b,Awn(e.Tg(),Cvn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.gh(this.b,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.b,Cvn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.ih(this.b,Awn(e.Tg(),Cvn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.ih(this.b,-1-this.aj(),null,t)},MWn.rk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&h6n)},MWn.Fk=function(){return cL(itn(jY(this.b),this.aj()).Yj(),88)},MWn.wj=function(n){return itn(jY(this.b),this.aj()).Yj().wj(n)},MWn.ej=function(){return mA(this.b)},MWn.fj=function(){return!this.Ri()},MWn.hi=function(){return itn(jY(this.b),this.aj()).hi()},MWn.li=function(n,t){return eGn(this,n,t)},MWn.Wb=function(n){vqn(this),pX(this,BB(n,15))},MWn.Pc=function(){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)eGn(this,n,this.Oi(n));return this.Wi()},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.Vi()-1;t>=0;--t)eGn(this,t,this.Oi(t));return this.Xi(n)},MWn.Xj=function(){vqn(this)},MWn.oi=function(n,t){return B9(this,n,t)},vX(y9n,"DelegatingEcoreEList",742),wAn(1150,742,H9n,uR),MWn.Hi=function(n,t){lD(this,n,BB(t,26))},MWn.Ii=function(n){e$(this,BB(n,26))},MWn.Oi=function(n){var t;return cL(t=BB(Wtn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ti=function(n){var t;return cL(t=BB(fDn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ui=function(n,t){return dmn(this,n,BB(t,26))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new pp(this)},MWn.Ki=function(){sqn(a4(this.a))},MWn.Li=function(n){return Ufn(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!Ufn(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==a4(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GI(t.Pb())!==GI(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e,i;for(t=1,n=new AL(a4(this.a));n.e!=n.i.gc();)t=31*t+((e=cL(i=BB(kpn(n),87).c,88)?BB(i,26):(gWn(),d$t))?PN(e):0);return t},MWn.Qi=function(n){var t,e,i,r;for(i=0,e=new AL(a4(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GI(n)===GI(cL(r=t.c,88)?BB(r,26):(gWn(),d$t)))return i;++i}return-1},MWn.Ri=function(){return 0==a4(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return a4(this.a).i},MWn.Wi=function(){var n,t,e,i,r,c;for(c=a4(this.a).i,r=x8(Ant,HWn,1,c,5,1),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),r[e++]=cL(i=n.c,88)?BB(i,26):(gWn(),d$t);return r},MWn.Xi=function(n){var t,e,i,r;for(r=a4(this.a).i,n.length<r&&(n=Den(tsn(n).c,r)),n.length>r&&$X(n,r,null),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)$X(n,e++,cL(i=BB(kpn(t),87).c,88)?BB(i,26):(gWn(),d$t));return n},MWn.Yi=function(){var n,t,e,i,r;for((r=new Sk).a+="[",n=a4(this.a),t=0,i=a4(this.a).i;t<i;)cO(r,kN(cL(e=BB(Wtn(n,t),87).c,88)?BB(e,26):(gWn(),d$t))),++t<i&&(r.a+=FWn);return r.a+="]",r.a},MWn.$i=function(n){},MWn.aj=function(){return 10},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,88)},MWn.fj=function(){return Q0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EClassImpl/8",1150),wAn(1151,1964,LVn,pp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return a4(this.a.a).i},vX(l6n,"EClassImpl/8/1",1151),wAn(1152,497,h8n,Io),MWn.ri=function(n){return x8(HAt,HWn,138,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/9",1152),wAn(1139,53,eYn,Im),vX(l6n,"EClassImpl/MyHashSet",1139),wAn(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},Ev),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),u$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.Fj=function(){var n,t;if(!this.c&&!(n=G$n(Utn(this))).dc())for(t=n.Kc();t.Ob();)N_n(this,SD(t.Pb()))&&Rln(this);return this.b},MWn.zj=function(){var n;if(!this.e){n=null;try{n=iyn(this)}catch(t){if(!cL(t=lun(t),102))throw Hp(t)}this.d=null,n&&0!=(1&n.i)&&(this.d=n==$Nt?(hN(),ptt):n==ANt?iln(0):n==DNt?new Nb(0):n==xNt?0:n==LNt?jgn(0):n==RNt?rln(0):n==NNt?Pnn(0):fun(0)),this.e=!0}return this.d},MWn.Ej=function(){return 0!=(256&this.Bb)},MWn.Ik=function(n){n&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},MWn.xk=function(n){Urn(this,n),this.Ik(n)},MWn.yk=function(n){this.C=n,this.e=!1},MWn.Ib=function(){var n;return 0!=(64&this.Db)?Cwn(this):((n=new fN(Cwn(this))).a+=" (serializable: ",yE(n,0!=(256&this.Bb)),n.a+=")",n.a)},MWn.c=!1,MWn.d=null,MWn.e=!1,vX(l6n,"EDataTypeImpl",566),wAn(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},Am),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return Qsn(this);case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),this.a}return U9(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),Ywn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return!!Qsn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)));case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),sqn(this.a),!this.a&&(this.a=new eU(WAt,this,9,5)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t)},MWn.zh=function(){return gWn(),o$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),void sqn(this.a)}qfn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.Gh=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n<t;++n)vx(Wtn(this.a,n));Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.zj=function(){return Qsn(this)},MWn.wj=function(n){return null!=n},MWn.Ik=function(n){},vX(l6n,"EEnumImpl",457),wAn(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},jv),MWn.ne=function(){return this.zb},MWn.Qg=function(n){return lkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return iln(this.d);case 3:return this.b?this.b:this.a;case 4:return null==(i=this.c)?this.zb:i;case 5:return this.Db>>16==5?BB(this.Cb,671):null}return U9(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?lkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 5:return T_n(this,null,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0!=this.d;case 3:return!!this.b;case 4:return null!=this.c;case 5:return!(this.Db>>16!=5||!BB(this.Cb,671))}return O3(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void $en(this,BB(t,19).a);case 3:return void gOn(this,BB(t,1940));case 4:return void Fin(this,SD(t))}Lbn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t)},MWn.zh=function(){return gWn(),s$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void $en(this,0);case 3:return void gOn(this,null);case 4:return void Fin(this,null)}qfn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},MWn.b=null,MWn.c=null,MWn.d=0,vX(l6n,"EEnumLiteralImpl",573);var L$t,N$t,x$t,D$t=bq(l6n,"EFactoryImpl/InternalEDateTimeFormat");wAn(489,1,{2015:1},vp),vX(l6n,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),wAn(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},Kp),MWn.Sg=function(n,t,e){var i;return e=T_n(this,n,t,e),this.e&&cL(n,170)&&(i=kLn(this,this.e))!=this.c&&(e=azn(this,i,e)),e},MWn._g=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new $L(VAt,this,1)),this.d;case 2:return t?lFn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?qvn(this):this.a}return U9(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return nfn(this,null,e);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),_pn(this.d,n,e);case 3:return Zhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),f$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),f$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.f;case 1:return!!this.d&&0!=this.d.i;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return O3(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void jEn(this,BB(t,87));case 1:return!this.d&&(this.d=new $L(VAt,this,1)),sqn(this.d),!this.d&&(this.d=new $L(VAt,this,1)),void pX(this.d,BB(t,14));case 3:return void kEn(this,BB(t,87));case 4:return void DMn(this,BB(t,836));case 5:return void cen(this,BB(t,138))}Lbn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t)},MWn.zh=function(){return gWn(),f$t},MWn.Bh=function(n){switch(n){case 0:return void jEn(this,null);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),void sqn(this.d);case 3:return void kEn(this,null);case 4:return void DMn(this,null);case 5:return void cen(this,null)}qfn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.Ib=function(){var n;return(n=new lN(P$n(this))).a+=" (expression: ",bHn(this,n),n.a+=")",n.a},vX(l6n,"EGenericTypeImpl",241),wAn(1969,1964,q9n),MWn.Xh=function(n,t){nR(this,n,t)},MWn.lk=function(n,t){return nR(this,this.gc(),n),t},MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return this.$h()},MWn.Gi=function(){return new Pp(this)},MWn.$h=function(){return this._h(0)},MWn._h=function(n){return this.Gi().Zc(n)},MWn.mk=function(n,t){return ywn(this,n,!0),t},MWn.ii=function(n,t){var e;return e=tkn(this,t),this.Zc(n).Rb(e),e},MWn.ji=function(n,t){ywn(this,t,!0),this.Zc(n).Rb(t)},vX(y9n,"AbstractSequentialInternalEList",1969),wAn(486,1969,q9n,QN),MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn.Gi=function(){return new DO(this.a,this.b)},MWn.$h=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn._h=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.dc=function(){var n,t,e,i,r,c;if(null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(c=this.a.bh(n,!1),ZM(),BB(n,66).Oj()){for(i=0,r=(t=BB(c,153)).gc();i<r;++i)if(wX(t.il(i))&&null!=t.jl(i))return!1}else if(n.$j()){if(!BB(c,14).dc())return!1}else if(null!=c)return!1;return!0},MWn.Kc=function(){return Ern(this)},MWn.Zc=function(n){var t,e;if(null==this.b){if(0!=n)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Lk()?this.Kk():this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.Jk=function(){return new YN(this.a,this.b)},MWn.Kk=function(){return new Vx(this.a,this.b)},MWn.Lk=function(){return!0},MWn.gc=function(){var n,t,e,i,r,c,a;if(r=0,null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(a=this.a.bh(n,!1),ZM(),BB(n,66).Oj())for(i=0,c=(t=BB(a,153)).gc();i<c;++i)wX(t.il(i))&&null!=t.jl(i)&&++r;else n.$j()?r+=BB(a,14).gc():null!=a&&++r;return r},MWn.Mk=function(){return!0},vX(y9n,"EContentsEList",486),wAn(1156,486,q9n,Wx),MWn.Jk=function(){return new Qx(this.a,this.b)},MWn.Kk=function(){return new Yx(this.a,this.b)},MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1",1156),wAn(279,1,G9n,YN),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Nk=function(n){if(0!=this.g||this.e)throw Hp(new Fy("Iterator already in use or already filtered"));this.e=n},MWn.Ob=function(){var n,t,e,i,r,c;switch(this.g){case 3:case 2:return!0;case 1:return!1;case-3:this.p?this.p.Pb():++this.n;default:if(this.k&&(this.p?kPn(this,this.p):pOn(this)))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0;for(;this.d<this.c.length;)if(t=this.c[this.d++],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.$h():this.k.Yc(),this.p?kPn(this,this.p):pOn(this))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=2,!0;return this.k=null,this.p=null,this.f=!1,this.g=1,!1}},MWn.Sb=function(){var n,t,e,i,r,c;switch(this.g){case-3:case-2:return!0;case-1:return!1;case 3:this.p?this.p.Ub():--this.n;default:if(this.k&&(this.p?jPn(this,this.p):wCn(this)))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0;for(;this.d>0;)if(t=this.c[--this.d],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?jPn(this,this.p):wCn(this))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=-2,!0;return this.k=null,this.p=null,this.g=-1,!1}},MWn.Pb=function(){return Man(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Lk=function(){return!1},MWn.Wb=function(n){throw Hp(new pv)},MWn.Mk=function(){return!0},MWn.a=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.n=0,MWn.o=0,vX(y9n,"EContentsEList/FeatureIteratorImpl",279),wAn(697,279,G9n,Vx),MWn.Lk=function(){return!0},vX(y9n,"EContentsEList/ResolvingFeatureIteratorImpl",697),wAn(1157,697,G9n,Yx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/1",1157),wAn(1158,279,G9n,Qx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/2",1158),wAn(36,143,t9n,f4,l4,nU,k9,N7,t6,Hen,S0,qen,P0,J5,C0,Uen,I0,Z5,O0,Gen,A0,tU,j9,GQ,zen,$0,n6,L0),MWn._i=function(){return h9(this)},MWn.gj=function(){var n;return(n=h9(this))?n.zj():null},MWn.yi=function(n){return-1==this.b&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,n)},MWn.Ai=function(){return this.c},MWn.hj=function(){var n;return!!(n=h9(this))&&n.Kj()},MWn.b=-1,vX(l6n,"ENotificationImpl",36),wAn(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},$m),MWn.Qg=function(n){return Pkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,26):null;case 11:return!this.d&&(this.d=new NL(O$t,this,11)),this.d;case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oR(this,this)),this.a;case 14:return H7(this)}return U9(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Pkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),Ywn(this.c,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e);case 11:return!this.d&&(this.d=new NL(O$t,this,11)),_pn(this.d,n,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),_pn(this.c,n,e);case 14:return _pn(H7(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,26));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==H7(this.a.a).i||this.b&&Kvn(this.b));case 14:return!!this.b&&Kvn(this.b)}return O3(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),sqn(this.d),!this.d&&(this.d=new NL(O$t,this,11)),void pX(this.d,BB(t,14));case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),sqn(this.c),!this.c&&(this.c=new eU(YAt,this,12,10)),void pX(this.c,BB(t,14));case 13:return!this.a&&(this.a=new oR(this,this)),vqn(this.a),!this.a&&(this.a=new oR(this,this)),void pX(this.a,BB(t,14));case 14:return sqn(H7(this)),void pX(H7(this),BB(t,14))}Lbn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t)},MWn.zh=function(){return gWn(),g$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),void sqn(this.d);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),void sqn(this.c);case 13:return void(this.a&&vqn(this.a));case 14:return void(this.b&&sqn(this.b))}qfn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.Gh=function(){var n,t;if(this.c)for(n=0,t=this.c.i;n<t;++n)vx(Wtn(this.c,n));Ikn(this),this.Bb|=1},vX(l6n,"EOperationImpl",399),wAn(505,742,H9n,oR),MWn.Hi=function(n,t){fD(this,n,BB(t,138))},MWn.Ii=function(n){i$(this,BB(n,138))},MWn.Oi=function(n){return BB(Wtn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ti=function(n){return BB(fDn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ui=function(n,t){return bgn(this,n,BB(t,138))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new mp(this)},MWn.Ki=function(){sqn(H7(this.a))},MWn.Li=function(n){return oln(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!oln(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==H7(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GI(t.Pb())!==GI(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e;for(t=1,n=new AL(H7(this.a));n.e!=n.i.gc();)t=31*t+((e=BB(kpn(n),87).c||(gWn(),l$t))?nsn(e):0);return t},MWn.Qi=function(n){var t,e,i;for(i=0,e=new AL(H7(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GI(n)===GI(t.c||(gWn(),l$t)))return i;++i}return-1},MWn.Ri=function(){return 0==H7(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return H7(this.a).i},MWn.Wi=function(){var n,t,e,i,r;for(r=H7(this.a).i,i=x8(Ant,HWn,1,r,5,1),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),i[e++]=n.c||(gWn(),l$t);return i},MWn.Xi=function(n){var t,e,i;for(i=H7(this.a).i,n.length<i&&(n=Den(tsn(n).c,i)),n.length>i&&$X(n,i,null),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)$X(n,e++,BB(kpn(t),87).c||(gWn(),l$t));return n},MWn.Yi=function(){var n,t,e,i;for((i=new Sk).a+="[",n=H7(this.a),t=0,e=H7(this.a).i;t<e;)cO(i,kN(BB(Wtn(n,t),87).c||(gWn(),l$t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a},MWn.$i=function(n){},MWn.aj=function(){return 13},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,138)},MWn.fj=function(){return V0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EOperationImpl/1",505),wAn(1340,1964,LVn,mp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return H7(this.a.a).i},vX(l6n,"EOperationImpl/1/1",1340),wAn(1341,545,R9n,JG),MWn.ii=function(n,t){var e;return e=BB(Iln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),p$t),iln(t),e.c||l$t,n)),e},MWn.jj=function(n,t){return Mfn(this,BB(n,87),t)},MWn.kj=function(n,t){return Sfn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return Wgn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Kvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EOperationImpl/2",1341),wAn(498,1,{1938:1,498:1},OI),vX(l6n,"EPackageImpl/1",498),wAn(16,85,R9n,eU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectContainmentWithInverseEList",16),wAn(353,16,R9n,eK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Resolving",353),wAn(298,353,R9n,Jz),MWn.ci=function(){this.a.tb=null},vX(l6n,"EPackageImpl/2",298),wAn(1228,1,{},Oo),vX(l6n,"EPackageImpl/3",1228),wAn(718,43,tYn,Nm),MWn._b=function(n){return XI(n)?eY(this,n):!!AY(this.f,n)},vX(l6n,"EPackageRegistryImpl",718),wAn(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},Lm),MWn.Qg=function(n){return Ckn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,59):null}return U9(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Ckn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,59))}return O3(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n))},MWn.zh=function(){return gWn(),m$t},vX(l6n,"EParameterImpl",509),wAn(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},pD),MWn._g=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(r=this.t)>1||-1==r;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return hN(),!(!(i=Cvn(this))||0==(i.Bb&h6n));case 20:return hN(),0!=(this.Bb&BQn);case 21:return t?Cvn(this):this.b;case 22:return t?Ion(this):K5(this);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),this.a}return U9(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t,e)},MWn.lh=function(n){var t,e;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(e=this.t)>1||-1==e;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!(t=Cvn(this))&&0!=(t.Bb&h6n);case 20:return 0==(this.Bb&BQn);case 21:return!!this.b;case 22:return!!K5(this);case 23:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void YZ(this,qy(TD(t)));case 20:return void Uln(this,qy(TD(t)));case 21:return void rrn(this,BB(t,18));case 23:return!this.a&&(this.a=new RL(BAt,this,23)),sqn(this.a),!this.a&&(this.a=new RL(BAt,this,23)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t)},MWn.zh=function(){return gWn(),y$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return zln(this,!1),void(cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),2));case 20:return void Uln(this,!0);case 21:return void rrn(this,null);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),void sqn(this.a)}qfn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.Gh=function(){Ion(this),kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.Lj=function(){return Cvn(this)},MWn.qk=function(){var n;return!!(n=Cvn(this))&&0!=(n.Bb&h6n)},MWn.rk=function(){return 0!=(this.Bb&h6n)},MWn.sk=function(){return 0!=(this.Bb&BQn)},MWn.nk=function(n,t){return this.c=null,Pfn(this,n,t)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (containment: ",yE(n,0!=(this.Bb&h6n)),n.a+=", resolveProxies: ",yE(n,0!=(this.Bb&BQn)),n.a+=")",n.a)},vX(l6n,"EReferenceImpl",99),wAn(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},Ao),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){vq(this,SD(n))},MWn.ed=function(n){return $H(this,SD(n))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return U9(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return O3(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void mq(this,SD(t));case 1:return void Kin(this,SD(t))}Lbn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t)},MWn.zh=function(){return gWn(),k$t},MWn.Bh=function(n){switch(n){case 0:return void Rin(this,null);case 1:return void Kin(this,null)}qfn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:vvn(n)),this.a},MWn.Th=function(n){this.a=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (key: ",cO(n,this.b),n.a+=", value: ",cO(n,this.c),n.a+=")",n.a)},MWn.a=-1,MWn.b=null,MWn.c=null;var R$t,K$t,_$t,F$t,B$t,H$t,q$t,G$t,z$t,U$t,X$t=vX(l6n,"EStringToStringMapEntryImpl",548),W$t=bq(y9n,"FeatureMap/Entry/Internal");wAn(565,1,z9n),MWn.Ok=function(n){return this.Pk(BB(n,49))},MWn.Pk=function(n){return this.Ok(n)},MWn.Fb=function(n){var t,e;return this===n||!!cL(n,72)&&(t=BB(n,72)).ak()==this.c&&(null==(e=this.dd())?null==t.dd():Nfn(e,t.dd()))},MWn.ak=function(){return this.c},MWn.Hb=function(){var n;return n=this.dd(),nsn(this.c)^(null==n?0:nsn(n))},MWn.Ib=function(){var n,t;return t=Utn((n=this.c).Hj()).Ph(),n.ne(),(null!=t&&0!=t.length?t+":"+n.ne():n.ne())+"="+this.dd()},vX(l6n,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),wAn(776,565,z9n,rR),MWn.Pk=function(n){return new rR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return Scn(this,n,this.a,t,e)},MWn.Rk=function(n,t,e){return Pcn(this,n,this.a,t,e)},vX(l6n,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),wAn(1314,1,{},AI),MWn.Pj=function(n,t,e,i,r){return BB(S9(n,this.b),215).nl(this.a).Wj(i)},MWn.Qj=function(n,t,e,i,r){return BB(S9(n,this.b),215).el(this.a,i,r)},MWn.Rj=function(n,t,e,i,r){return BB(S9(n,this.b),215).fl(this.a,i,r)},MWn.Sj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a).fj()},MWn.Tj=function(n,t,e,i){BB(S9(n,this.b),215).nl(this.a).Wb(i)},MWn.Uj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a)},MWn.Vj=function(n,t,e){BB(S9(n,this.b),215).nl(this.a).Xj()},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),wAn(89,1,{},PB,lQ,RY,w4),MWn.Pj=function(n,t,e,i,r){var c;if(null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),!r)switch(this.e){case 50:case 41:return BB(c,589).sj();case 40:return BB(c,215).kl()}return c},MWn.Qj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),BB(c,69).lk(i,r)},MWn.Rj=function(n,t,e,i,r){var c;return null!=(c=t.Ch(e))&&(r=BB(c,69).mk(i,r)),r},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&BB(i,76).fj()},MWn.Tj=function(n,t,e,i){var r;!(r=BB(t.Ch(e),76))&&t.Dh(e,r=iWn(this,n)),r.Wb(i)},MWn.Uj=function(n,t,e){var i;return null==(i=t.Ch(e))&&t.Dh(e,i=iWn(this,n)),cL(i,76)?BB(i,76):new Ep(BB(t.Ch(e),15))},MWn.Vj=function(n,t,e){var i;!(i=BB(t.Ch(e),76))&&t.Dh(e,i=iWn(this,n)),i.Xj()},MWn.b=0,MWn.e=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),wAn(504,1,{}),MWn.Qj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Rj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Uj=function(n,t,e){return new bQ(this,n,t,e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),wAn(1331,1,k9n,bQ),MWn.Wj=function(n){return this.a.Pj(this.c,this.d,this.b,n,!0)},MWn.fj=function(){return this.a.Sj(this.c,this.d,this.b)},MWn.Wb=function(n){this.a.Tj(this.c,this.d,this.b,n)},MWn.Xj=function(){this.a.Vj(this.c,this.d,this.b)},MWn.b=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),wAn(769,504,{},mJ),MWn.Pj=function(n,t,e,i,r){return gKn(n,n.eh(),n.Vg())==this.b?this.sk()&&i?cAn(n):n.eh():null},MWn.Qj=function(n,t,e,i,r){var c,a;return n.eh()&&(r=(c=n.Vg())>=0?n.Qg(r):n.eh().ih(n,-1-c,null,r)),a=Awn(n.Tg(),this.e),n.Sg(i,a,r)},MWn.Rj=function(n,t,e,i,r){var c;return c=Awn(n.Tg(),this.e),n.Sg(null,c,r)},MWn.Sj=function(n,t,e){var i;return i=Awn(n.Tg(),this.e),!!n.eh()&&n.Vg()==i},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));if(r=n.eh(),a=Awn(n.Tg(),this.e),GI(i)!==GI(r)||n.Vg()!=a&&null!=i){if(vkn(n,BB(i,56)))throw Hp(new _y(w6n+n.Ib()));o=null,r&&(o=(c=n.Vg())>=0?n.Qg(o):n.eh().ih(n,-1-c,null,o)),(u=BB(i,49))&&(o=u.gh(n,Awn(u.Tg(),this.b),null,o)),(o=n.Sg(u,a,o))&&o.Fi()}else n.Lg()&&n.Mg()&&ban(n,new nU(n,1,a,i,i))},MWn.Vj=function(n,t,e){var i,r,c;n.eh()?(c=(i=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-i,null,null),r=Awn(n.Tg(),this.e),(c=n.Sg(null,r,c))&&c.Fi()):n.Lg()&&n.Mg()&&ban(n,new tU(n,1,this.e,null,null))},MWn.sk=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),wAn(1315,769,{},CB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),wAn(563,504,{}),MWn.Pj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))?this.b:GI(c)===GI(R$t)?null:c},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&(GI(i)===GI(R$t)||!Nfn(i,this.b))},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=null==(c=t.Ch(e))?this.b:GI(c)===GI(R$t)?null:c,null==i?null!=this.c?(t.Dh(e,null),i=this.b):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Tk(n,1,this.e,r,i))):null==i?null!=this.c?t.Dh(e,null):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=null==(r=t.Ch(e))?this.b:GI(r)===GI(R$t)?null:r,t.Eh(e),ban(n,this.d.Tk(n,1,this.e,i,this.b))):t.Eh(e)},MWn.Sk=function(n){throw Hp(new bv)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),wAn(W9n,1,{},$o),MWn.Tk=function(n,t,e,i,r){return new tU(n,t,e,i,r)},MWn.Uk=function(n,t,e,i,r,c){return new GQ(n,t,e,i,r,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",W9n),wAn(1332,W9n,{},Lo),MWn.Tk=function(n,t,e,i,r){return new n6(n,t,e,qy(TD(i)),qy(TD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new L0(n,t,e,qy(TD(i)),qy(TD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),wAn(1333,W9n,{},No),MWn.Tk=function(n,t,e,i,r){return new Hen(n,t,e,BB(i,217).a,BB(r,217).a)},MWn.Uk=function(n,t,e,i,r,c){return new S0(n,t,e,BB(i,217).a,BB(r,217).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),wAn(1334,W9n,{},xo),MWn.Tk=function(n,t,e,i,r){return new qen(n,t,e,BB(i,172).a,BB(r,172).a)},MWn.Uk=function(n,t,e,i,r,c){return new P0(n,t,e,BB(i,172).a,BB(r,172).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),wAn(1335,W9n,{},Do),MWn.Tk=function(n,t,e,i,r){return new J5(n,t,e,Gy(MD(i)),Gy(MD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new C0(n,t,e,Gy(MD(i)),Gy(MD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),wAn(1336,W9n,{},Ro),MWn.Tk=function(n,t,e,i,r){return new Uen(n,t,e,BB(i,155).a,BB(r,155).a)},MWn.Uk=function(n,t,e,i,r,c){return new I0(n,t,e,BB(i,155).a,BB(r,155).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),wAn(1337,W9n,{},Ko),MWn.Tk=function(n,t,e,i,r){return new Z5(n,t,e,BB(i,19).a,BB(r,19).a)},MWn.Uk=function(n,t,e,i,r,c){return new O0(n,t,e,BB(i,19).a,BB(r,19).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),wAn(1338,W9n,{},_o),MWn.Tk=function(n,t,e,i,r){return new Gen(n,t,e,BB(i,162).a,BB(r,162).a)},MWn.Uk=function(n,t,e,i,r,c){return new A0(n,t,e,BB(i,162).a,BB(r,162).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),wAn(1339,W9n,{},Fo),MWn.Tk=function(n,t,e,i,r){return new zen(n,t,e,BB(i,184).a,BB(r,184).a)},MWn.Uk=function(n,t,e,i,r,c){return new $0(n,t,e,BB(i,184).a,BB(r,184).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),wAn(1317,563,{},wQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),wAn(1318,563,{},ZG),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),wAn(770,563,{}),MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=!0,null==(c=t.Ch(e))?(r=!1,c=this.b):GI(c)===GI(R$t)&&(c=null),null==i?null!=this.c?(t.Dh(e,null),i=this.b):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Uk(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.Dh(e,null):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=!0,null==(r=t.Ch(e))?(i=!1,r=this.b):GI(r)===GI(R$t)&&(r=null),t.Eh(e),ban(n,this.d.Uk(n,2,this.e,r,this.b,i))):t.Eh(e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),wAn(1319,770,{},dQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),wAn(1320,770,{},nz),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),wAn(398,504,{},cG),MWn.Pj=function(n,t,e,i,r){var c,a,u,o,s;if(s=t.Ch(e),this.Kj()&&GI(s)===GI(R$t))return null;if(this.sk()&&i&&null!=s){if((u=BB(s,49)).kh()&&u!=(o=tfn(n,u))){if(!SFn(this.a,o))throw Hp(new Ky(U9n+tsn(o)+X9n+this.a+"'"));t.Dh(e,s=o),this.rk()&&(c=BB(o,49),a=u.ih(n,this.b?Awn(u.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,null),!c.eh()&&(a=c.gh(n,this.b?Awn(c.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,a)),a&&a.Fi()),n.Lg()&&n.Mg()&&ban(n,new tU(n,9,this.e,u,o))}return s}return s},MWn.Qj=function(n,t,e,i,r){var c,a;return GI(a=t.Ch(e))===GI(R$t)&&(a=null),t.Dh(e,i),this.bj()?GI(a)!==GI(i)&&null!=a&&(r=(c=BB(a,49)).ih(n,Awn(c.Tg(),this.b),null,r)):this.rk()&&null!=a&&(r=BB(a,49).ih(n,-1-Awn(n.Tg(),this.e),null,r)),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),r.Ei(new tU(n,1,this.e,a,i))),r},MWn.Rj=function(n,t,e,i,r){var c;return GI(c=t.Ch(e))===GI(R$t)&&(c=null),t.Eh(e),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),this.Kj()?r.Ei(new tU(n,2,this.e,c,null)):r.Ei(new tU(n,1,this.e,c,null))),r},MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));u=null!=(o=t.Ch(e)),this.Kj()&&GI(o)===GI(R$t)&&(o=null),a=null,this.bj()?GI(o)!==GI(i)&&(null!=o&&(a=(r=BB(o,49)).ih(n,Awn(r.Tg(),this.b),null,a)),null!=i&&(a=(r=BB(i,49)).gh(n,Awn(r.Tg(),this.b),null,a))):this.rk()&&GI(o)!==GI(i)&&(null!=o&&(a=BB(o,49).ih(n,-1-Awn(n.Tg(),this.e),null,a)),null!=i&&(a=BB(i,49).gh(n,-1-Awn(n.Tg(),this.e),null,a))),null==i&&this.Kj()?t.Dh(e,R$t):t.Dh(e,i),n.Lg()&&n.Mg()?(c=new GQ(n,1,this.e,o,i,this.Kj()&&!u),a?(a.Ei(c),a.Fi()):ban(n,c)):a&&a.Fi()},MWn.Vj=function(n,t,e){var i,r,c,a,u;a=null!=(u=t.Ch(e)),this.Kj()&&GI(u)===GI(R$t)&&(u=null),c=null,null!=u&&(this.bj()?c=(i=BB(u,49)).ih(n,Awn(i.Tg(),this.b),null,c):this.rk()&&(c=BB(u,49).ih(n,-1-Awn(n.Tg(),this.e),null,c))),t.Eh(e),n.Lg()&&n.Mg()?(r=new GQ(n,this.Kj()?2:1,this.e,u,null,a),c?(c.Ei(r),c.Fi()):ban(n,r)):c&&c.Fi()},MWn.bj=function(){return!1},MWn.rk=function(){return!1},MWn.sk=function(){return!1},MWn.Kj=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),wAn(564,398,{},Zx),MWn.rk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),wAn(1323,564,{},nD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),wAn(772,564,{},tD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),wAn(1325,772,{},eD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),wAn(640,564,{},IB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),wAn(1324,640,{},$B),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),wAn(773,640,{},LB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),wAn(1326,773,{},NB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),wAn(641,398,{},iD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),wAn(1327,641,{},rD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),wAn(774,641,{},OB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),wAn(1328,774,{},xB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),wAn(1321,398,{},cD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),wAn(771,398,{},AB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),wAn(1322,771,{},DB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),wAn(775,565,z9n,aW),MWn.Pk=function(n){return new aW(this.a,this.c,n)},MWn.dd=function(){return this.b},MWn.Qk=function(n,t,e){return D8(this,n,this.b,e)},MWn.Rk=function(n,t,e){return R8(this,n,this.b,e)},vX(l6n,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),wAn(1329,1,k9n,Ep),MWn.Wj=function(n){return this.a},MWn.fj=function(){return cL(this.a,95)?BB(this.a,95).fj():!this.a.dc()},MWn.Wb=function(n){this.a.$b(),this.a.Gc(BB(n,15))},MWn.Xj=function(){cL(this.a,95)?BB(this.a,95).Xj():this.a.$b()},vX(l6n,"EStructuralFeatureImpl/SettingMany",1329),wAn(1330,565,z9n,g4),MWn.Ok=function(n){return new cR((Uqn(),FLt),this.b.Ih(this.a,n))},MWn.dd=function(){return null},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),wAn(642,565,z9n,cR),MWn.Ok=function(n){return new cR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),wAn(391,497,h8n,Bo),MWn.ri=function(n){return x8(qAt,HWn,26,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"ESuperAdapter/1",391),wAn(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},Ho),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new aG(this,VAt,this)),this.a}return U9(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),T$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),T$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return!this.a&&(this.a=new aG(this,VAt,this)),sqn(this.a),!this.a&&(this.a=new aG(this,VAt,this)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t)},MWn.zh=function(){return gWn(),T$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),void sqn(this.a)}qfn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},vX(l6n,"ETypeParameterImpl",444),wAn(445,85,R9n,aG),MWn.cj=function(n,t){return LTn(this,BB(n,87),t)},MWn.dj=function(n,t){return NTn(this,BB(n,87),t)},vX(l6n,"ETypeParameterImpl/1",445),wAn(634,43,tYn,xm),MWn.ec=function(){return new Tp(this)},vX(l6n,"ETypeParameterImpl/2",634),wAn(556,nVn,tVn,Tp),MWn.Fc=function(n){return YR(this,BB(n,87))},MWn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=BB(e.Pb(),87),null==VW(this.a,t,"")&&(i=!0);return i},MWn.$b=function(){$U(this.a)},MWn.Hc=function(n){return hU(this.a,n)},MWn.Kc=function(){return new Mp(new usn(new Pb(this.a).a))},MWn.Mc=function(n){return _6(this,n)},MWn.gc=function(){return NT(this.a)},vX(l6n,"ETypeParameterImpl/2/1",556),wAn(557,1,QWn,Mp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(ten(this.a).cd(),87)},MWn.Ob=function(){return this.a.b},MWn.Qb=function(){o9(this.a)},vX(l6n,"ETypeParameterImpl/2/1/1",557),wAn(1276,43,tYn,Dm),MWn._b=function(n){return XI(n)?eY(this,n):!!AY(this.f,n)},MWn.xc=function(n){var t;return cL(t=XI(n)?SJ(this,n):qI(AY(this.f,n)),837)?(t=BB(t,837)._j(),VW(this,BB(n,235),t),t):null!=t?t:null==n?(JM(),rLt):null},vX(l6n,"EValidatorRegistryImpl",1276),wAn(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},qo),MWn.Ih=function(n,t){switch(n.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return null==t?null:Bbn(t);case 25:return Xtn(t);case 27:return X9(t);case 28:return W9(t);case 29:return null==t?null:H$(IOt[0],BB(t,199));case 41:return null==t?"":nE(BB(t,290));case 42:return Bbn(t);case 50:return SD(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Om;case 1:return new jo;case 2:return new _f;case 4:return new Ev;case 5:return new Am;case 6:return new jv;case 7:return new Rf;case 10:return new yo;case 11:return new $m;case 12:return new vY;case 13:return new Lm;case 14:return new pD;case 17:return new Ao;case 18:return new Kp;case 19:return new Ho;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 20:return null==t?null:new wE(t);case 21:return null==t?null:new $A(t);case 23:case 22:return null==t?null:Zdn(t);case 26:case 24:return null==t?null:Pnn(l_n(t,-128,127)<<24>>24);case 25:return d$n(t);case 27:return Syn(t);case 28:return Pyn(t);case 29:return gMn(t);case 32:case 31:return null==t?null:bSn(t);case 38:case 37:return null==t?null:new Dv(t);case 40:case 39:return null==t?null:iln(l_n(t,_Vn,DWn));case 41:case 42:return null;case 44:case 43:return null==t?null:jgn(rUn(t));case 49:case 48:return null==t?null:rln(l_n(t,Q9n,32767)<<16>>16);case 50:return t;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(l6n,"EcoreFactoryImpl",1313),wAn(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},UW),MWn.gb=!1,MWn.hb=!1;var V$t,Q$t=!1;vX(l6n,"EcorePackageImpl",547),wAn(1184,1,{837:1},Go),MWn._j=function(){return sN(),cLt},vX(l6n,"EcorePackageImpl/1",1184),wAn(1193,1,s7n,zo),MWn.wj=function(n){return cL(n,147)},MWn.xj=function(n){return x8(BOt,HWn,147,n,0,1)},vX(l6n,"EcorePackageImpl/10",1193),wAn(1194,1,s7n,Uo),MWn.wj=function(n){return cL(n,191)},MWn.xj=function(n){return x8(qOt,HWn,191,n,0,1)},vX(l6n,"EcorePackageImpl/11",1194),wAn(1195,1,s7n,Xo),MWn.wj=function(n){return cL(n,56)},MWn.xj=function(n){return x8(LOt,HWn,56,n,0,1)},vX(l6n,"EcorePackageImpl/12",1195),wAn(1196,1,s7n,Wo),MWn.wj=function(n){return cL(n,399)},MWn.xj=function(n){return x8(QAt,x9n,59,n,0,1)},vX(l6n,"EcorePackageImpl/13",1196),wAn(1197,1,s7n,Vo),MWn.wj=function(n){return cL(n,235)},MWn.xj=function(n){return x8(GOt,HWn,235,n,0,1)},vX(l6n,"EcorePackageImpl/14",1197),wAn(1198,1,s7n,Qo),MWn.wj=function(n){return cL(n,509)},MWn.xj=function(n){return x8(YAt,HWn,2017,n,0,1)},vX(l6n,"EcorePackageImpl/15",1198),wAn(1199,1,s7n,Yo),MWn.wj=function(n){return cL(n,99)},MWn.xj=function(n){return x8(JAt,N9n,18,n,0,1)},vX(l6n,"EcorePackageImpl/16",1199),wAn(1200,1,s7n,Jo),MWn.wj=function(n){return cL(n,170)},MWn.xj=function(n){return x8(FAt,N9n,170,n,0,1)},vX(l6n,"EcorePackageImpl/17",1200),wAn(1201,1,s7n,Zo),MWn.wj=function(n){return cL(n,472)},MWn.xj=function(n){return x8(_At,HWn,472,n,0,1)},vX(l6n,"EcorePackageImpl/18",1201),wAn(1202,1,s7n,ns),MWn.wj=function(n){return cL(n,548)},MWn.xj=function(n){return x8(X$t,a9n,548,n,0,1)},vX(l6n,"EcorePackageImpl/19",1202),wAn(1185,1,s7n,ts),MWn.wj=function(n){return cL(n,322)},MWn.xj=function(n){return x8(BAt,N9n,34,n,0,1)},vX(l6n,"EcorePackageImpl/2",1185),wAn(1203,1,s7n,es),MWn.wj=function(n){return cL(n,241)},MWn.xj=function(n){return x8(VAt,B9n,87,n,0,1)},vX(l6n,"EcorePackageImpl/20",1203),wAn(1204,1,s7n,is),MWn.wj=function(n){return cL(n,444)},MWn.xj=function(n){return x8(O$t,HWn,836,n,0,1)},vX(l6n,"EcorePackageImpl/21",1204),wAn(1205,1,s7n,rs),MWn.wj=function(n){return zI(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(l6n,"EcorePackageImpl/22",1205),wAn(1206,1,s7n,cs),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(l6n,"EcorePackageImpl/23",1206),wAn(1207,1,s7n,as),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(l6n,"EcorePackageImpl/24",1207),wAn(1208,1,s7n,us),MWn.wj=function(n){return cL(n,172)},MWn.xj=function(n){return x8(Stt,sVn,172,n,0,1)},vX(l6n,"EcorePackageImpl/25",1208),wAn(1209,1,s7n,os),MWn.wj=function(n){return cL(n,199)},MWn.xj=function(n){return x8(mtt,sVn,199,n,0,1)},vX(l6n,"EcorePackageImpl/26",1209),wAn(1210,1,s7n,ss),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(_Nt,HWn,2110,n,0,1)},vX(l6n,"EcorePackageImpl/27",1210),wAn(1211,1,s7n,hs),MWn.wj=function(n){return UI(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(l6n,"EcorePackageImpl/28",1211),wAn(1212,1,s7n,fs),MWn.wj=function(n){return cL(n,58)},MWn.xj=function(n){return x8(uAt,nZn,58,n,0,1)},vX(l6n,"EcorePackageImpl/29",1212),wAn(1186,1,s7n,ls),MWn.wj=function(n){return cL(n,510)},MWn.xj=function(n){return x8(KAt,{3:1,4:1,5:1,1934:1},590,n,0,1)},vX(l6n,"EcorePackageImpl/3",1186),wAn(1213,1,s7n,bs),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(yAt,HWn,1940,n,0,1)},vX(l6n,"EcorePackageImpl/30",1213),wAn(1214,1,s7n,ws),MWn.wj=function(n){return cL(n,153)},MWn.xj=function(n){return x8(oLt,nZn,153,n,0,1)},vX(l6n,"EcorePackageImpl/31",1214),wAn(1215,1,s7n,ds),MWn.wj=function(n){return cL(n,72)},MWn.xj=function(n){return x8($$t,h7n,72,n,0,1)},vX(l6n,"EcorePackageImpl/32",1215),wAn(1216,1,s7n,gs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Ctt,sVn,155,n,0,1)},vX(l6n,"EcorePackageImpl/33",1216),wAn(1217,1,s7n,ps),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(l6n,"EcorePackageImpl/34",1217),wAn(1218,1,s7n,vs),MWn.wj=function(n){return cL(n,290)},MWn.xj=function(n){return x8($nt,HWn,290,n,0,1)},vX(l6n,"EcorePackageImpl/35",1218),wAn(1219,1,s7n,ms),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(l6n,"EcorePackageImpl/36",1219),wAn(1220,1,s7n,ys),MWn.wj=function(n){return cL(n,83)},MWn.xj=function(n){return x8(Nnt,HWn,83,n,0,1)},vX(l6n,"EcorePackageImpl/37",1220),wAn(1221,1,s7n,ks),MWn.wj=function(n){return cL(n,591)},MWn.xj=function(n){return x8(iLt,HWn,591,n,0,1)},vX(l6n,"EcorePackageImpl/38",1221),wAn(1222,1,s7n,js),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(FNt,HWn,2111,n,0,1)},vX(l6n,"EcorePackageImpl/39",1222),wAn(1187,1,s7n,Es),MWn.wj=function(n){return cL(n,88)},MWn.xj=function(n){return x8(qAt,HWn,26,n,0,1)},vX(l6n,"EcorePackageImpl/4",1187),wAn(1223,1,s7n,Ts),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(l6n,"EcorePackageImpl/40",1223),wAn(1224,1,s7n,Ms),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(l6n,"EcorePackageImpl/41",1224),wAn(1225,1,s7n,Ss),MWn.wj=function(n){return cL(n,588)},MWn.xj=function(n){return x8(sAt,HWn,588,n,0,1)},vX(l6n,"EcorePackageImpl/42",1225),wAn(1226,1,s7n,Ps),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(BNt,sVn,2112,n,0,1)},vX(l6n,"EcorePackageImpl/43",1226),wAn(1227,1,s7n,Cs),MWn.wj=function(n){return cL(n,42)},MWn.xj=function(n){return x8(Hnt,kVn,42,n,0,1)},vX(l6n,"EcorePackageImpl/44",1227),wAn(1188,1,s7n,Is),MWn.wj=function(n){return cL(n,138)},MWn.xj=function(n){return x8(HAt,HWn,138,n,0,1)},vX(l6n,"EcorePackageImpl/5",1188),wAn(1189,1,s7n,Os),MWn.wj=function(n){return cL(n,148)},MWn.xj=function(n){return x8(GAt,HWn,148,n,0,1)},vX(l6n,"EcorePackageImpl/6",1189),wAn(1190,1,s7n,As),MWn.wj=function(n){return cL(n,457)},MWn.xj=function(n){return x8(XAt,HWn,671,n,0,1)},vX(l6n,"EcorePackageImpl/7",1190),wAn(1191,1,s7n,$s),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(WAt,HWn,678,n,0,1)},vX(l6n,"EcorePackageImpl/8",1191),wAn(1192,1,s7n,Ls),MWn.wj=function(n){return cL(n,471)},MWn.xj=function(n){return x8(HOt,HWn,471,n,0,1)},vX(l6n,"EcorePackageImpl/9",1192),wAn(1025,1982,r9n,xy),MWn.bi=function(n,t){Afn(this,BB(t,415))},MWn.fi=function(n,t){eCn(this,n,BB(t,415))},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),wAn(1026,143,t9n,uW),MWn.Ai=function(){return this.a.a},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),wAn(1053,1052,{},o$),vX("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var Y$t,J$t,Z$t,nLt,tLt,eLt,iLt=bq(f7n,"Resource");wAn(781,1378,l7n),MWn.Yk=function(n){},MWn.Zk=function(n){},MWn.Vk=function(){return!this.a&&(this.a=new Sp(this)),this.a},MWn.Wk=function(n){var t,e,i,r,c;if((i=n.length)>0){if(b1(0,n.length),47==n.charCodeAt(0)){for(c=new J6(4),r=1,t=1;t<i;++t)b1(t,n.length),47==n.charCodeAt(t)&&(WB(c,r==t?"":n.substr(r,t-r)),r=t+1);return WB(c,n.substr(r)),ojn(this,c)}b1(i-1,n.length),63==n.charCodeAt(i-1)&&(e=MK(n,YTn(63),i-2))>0&&(n=n.substr(0,e))}return jIn(this,n)},MWn.Xk=function(){return this.c},MWn.Ib=function(){return nE(this.gm)+"@"+(nsn(this)>>>0).toString(16)+" uri='"+this.d+"'"},MWn.b=!1,vX(b7n,"ResourceImpl",781),wAn(1379,781,l7n,Cp),vX(b7n,"BinaryResourceImpl",1379),wAn(1169,694,f8n),MWn.si=function(n){return cL(n,56)?TY(this,BB(n,56)):cL(n,591)?new AL(BB(n,591).Vk()):GI(n)===GI(this.f)?BB(n,14).Kc():(dD(),pAt.a)},MWn.Ob=function(){return bOn(this)},MWn.a=!1,vX(y9n,"EcoreUtil/ContentTreeIterator",1169),wAn(1380,1169,f8n,rU),MWn.si=function(n){return GI(n)===GI(this.f)?BB(n,15).Kc():new F2(BB(n,56))},vX(b7n,"ResourceImpl/5",1380),wAn(648,1994,D9n,Sp),MWn.Hc=function(n){return this.i<=4?Sjn(this,n):cL(n,49)&&BB(n,49).Zg()==this.a},MWn.bi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},MWn.di=function(n,t){0==n?this.a.b||(this.a.b=!0):L8(this,n,t)},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.aj=function(){return 2},MWn.Ai=function(){return this.a},MWn.bj=function(){return!0},MWn.cj=function(n,t){return t=BB(n,49).wh(this.a,t)},MWn.dj=function(n,t){return BB(n,49).wh(null,t)},MWn.ej=function(){return!1},MWn.hi=function(){return!0},MWn.ri=function(n){return x8(LOt,HWn,56,n,0,1)},MWn.ni=function(){return!1},vX(b7n,"ResourceImpl/ContentsEList",648),wAn(957,1964,LVn,Pp),MWn.Zc=function(n){return this.a._h(n)},MWn.gc=function(){return this.a.gc()},vX(y9n,"AbstractSequentialInternalEList/1",957),wAn(624,1,{},SH),vX(y9n,"BasicExtendedMetaData",624),wAn(1160,1,{},$I),MWn.$k=function(){return null},MWn._k=function(){return-2==this.a&&ob(this,aMn(this.d,this.b)),this.a},MWn.al=function(){return null},MWn.bl=function(){return SQ(),SQ(),set},MWn.ne=function(){return this.c==C7n&&hb(this,Egn(this.d,this.b)),this.c},MWn.cl=function(){return 0},MWn.a=-2,MWn.c=C7n,vX(y9n,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),wAn(1161,1,{},_0),MWn.$k=function(){return this.a==(R5(),tLt)&&sb(this,vNn(this.f,this.b)),this.a},MWn._k=function(){return 0},MWn.al=function(){return this.c==(R5(),tLt)&&fb(this,mNn(this.f,this.b)),this.c},MWn.bl=function(){return!this.d&&lb(this,SKn(this.f,this.b)),this.d},MWn.ne=function(){return this.e==C7n&&bb(this,Egn(this.f,this.b)),this.e},MWn.cl=function(){return-2==this.g&&wb(this,YEn(this.f,this.b)),this.g},MWn.e=C7n,MWn.g=-2,vX(y9n,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),wAn(1159,1,{},RI),MWn.b=!1,MWn.c=!1,vX(y9n,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),wAn(1162,1,{},K0),MWn.c=-2,MWn.e=C7n,MWn.f=C7n,vX(y9n,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),wAn(585,622,R9n,MH),MWn.aj=function(){return this.c},MWn.Fk=function(){return!1},MWn.li=function(n,t){return t},MWn.c=0,vX(y9n,"EDataTypeEList",585);var rLt,cLt,aLt,uLt,oLt=bq(y9n,"FeatureMap");wAn(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},Ecn),MWn.Vc=function(n,t){lNn(this,n,BB(t,72))},MWn.Fc=function(n){return uLn(this,BB(n,72))},MWn.Yh=function(n){dX(this,BB(n,72))},MWn.cj=function(n,t){return HK(this,BB(n,72),t)},MWn.dj=function(n,t){return qK(this,BB(n,72),t)},MWn.ii=function(n,t){return a_n(this,n,t)},MWn.li=function(n,t){return hGn(this,n,BB(t,72))},MWn._c=function(n,t){return Pxn(this,n,BB(t,72))},MWn.jj=function(n,t){return GK(this,BB(n,72),t)},MWn.kj=function(n,t){return zK(this,BB(n,72),t)},MWn.lj=function(n,t,e){return gEn(this,BB(n,72),BB(t,72),e)},MWn.oi=function(n,t){return sTn(this,n,BB(t,72))},MWn.dl=function(n,t){return xKn(this,n,t)},MWn.Wc=function(n,t){var e,i,r,c,a,u,o,s,h;for(s=new gtn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=BB(r.Pb(),72)).ak(),$xn(this.e,c))(!c.hi()||!G3(this,c,i.dd())&&!Sjn(s,i))&&f9(s,i);else{for(h=axn(this.e.Tg(),c),e=BB(this.g,119),a=!0,u=0;u<this.i;++u)if(o=e[u],h.rl(o.ak())){BB(ovn(this,u,i),72),a=!1;break}a&&f9(s,i)}return oon(this,n,s)},MWn.Gc=function(n){var t,e,i,r,c,a,u,o,s;for(o=new gtn(n.gc()),i=n.Kc();i.Ob();)if(r=(e=BB(i.Pb(),72)).ak(),$xn(this.e,r))(!r.hi()||!G3(this,r,e.dd())&&!Sjn(o,e))&&f9(o,e);else{for(s=axn(this.e.Tg(),r),t=BB(this.g,119),c=!0,a=0;a<this.i;++a)if(u=t[a],s.rl(u.ak())){BB(ovn(this,a,e),72),c=!1;break}c&&f9(o,e)}return pX(this,o)},MWn.Wh=function(n){return this.j=-1,LFn(this,this.i,n)},MWn.el=function(n,t,e){return PRn(this,n,t,e)},MWn.mk=function(n,t){return TKn(this,n,t)},MWn.fl=function(n,t,e){return ZBn(this,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this,n,t)},MWn.il=function(n){return BB(Wtn(this,n),72).ak()},MWn.jl=function(n){return BB(Wtn(this,n),72).dd()},MWn.kl=function(){return this.b},MWn.bj=function(){return!0},MWn.ij=function(){return!0},MWn.ll=function(n){return!adn(this,n)},MWn.ri=function(n){return x8(W$t,h7n,332,n,0,1)},MWn.Gk=function(n){return hD(this,n)},MWn.Wb=function(n){tX(this,n)},MWn.ml=function(n,t){MHn(this,n,t)},MWn.nl=function(n){return zin(this,n)},MWn.ol=function(n){Kmn(this,n)},vX(y9n,"BasicFeatureMap",75),wAn(1851,1,cVn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{Axn(this.e,this.b,this.a,n),this.d=this.e.j,cvn(this)}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.Ob=function(){return Ksn(this)},MWn.Sb=function(){return _sn(this)},MWn.Pb=function(){return cvn(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(_sn(this))return mz(this),this.g=--this.a,this.Lk()&&(n=FIn(this.e,this.b,this.c,this.a,this.j),this.j=n),this.i=0,this.j;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){if(-1==this.g)throw Hp(new dv);mz(this);try{aPn(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(n){throw cL(n=lun(n),73)?Hp(new vv):Hp(n)}},MWn.Lk=function(){return!1},MWn.Wb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{XFn(this.e,this.b,this.g,n),this.d=this.e.j}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.a=0,MWn.c=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.i=0,vX(y9n,"FeatureMapUtil/BasicFeatureEIterator",1851),wAn(410,1851,cVn,Aan),MWn.pl=function(){var n,t,e;for(e=this.e.i,n=BB(this.e.g,119);this.c<e;){if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},MWn.ql=function(){var n,t;for(n=BB(this.e.g,119);--this.c>=0;)if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},vX(y9n,"BasicFeatureMap/FeatureEIterator",410),wAn(662,410,cVn,xO),MWn.Lk=function(){return!0},vX(y9n,"BasicFeatureMap/ResolvingFeatureEIterator",662),wAn(955,486,q9n,z$),MWn.Gi=function(){return this},vX(y9n,"EContentsEList/1",955),wAn(956,486,q9n,DO),MWn.Lk=function(){return!1},vX(y9n,"EContentsEList/2",956),wAn(954,279,G9n,U$),MWn.Nk=function(n){},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},vX(y9n,"EContentsEList/FeatureIteratorImpl/1",954),wAn(825,585,R9n,KL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EDataTypeEList/Unsettable",825),wAn(1849,585,R9n,_L),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList",1849),wAn(1850,825,R9n,FL),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList/Unsettable",1850),wAn(139,85,R9n,NL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Resolving",139),wAn(1163,545,R9n,xL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Unsettable/Resolving",1163),wAn(748,16,R9n,iK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectContainmentWithInverseEList/Unsettable",748),wAn(1173,748,R9n,rK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),wAn(743,496,R9n,DL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectEList/Unsettable",743),wAn(328,496,R9n,RL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList",328),wAn(1641,743,R9n,BL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList/Unsettable",1641),wAn(1381,1,{},Ns),vX(y9n,"EObjectValidator",1381),wAn(546,496,R9n,iU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.bj=function(){return!0},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectWithInverseEList",546),wAn(1176,546,R9n,cK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/ManyInverse",1176),wAn(625,546,R9n,aK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectWithInverseEList/Unsettable",625),wAn(1175,625,R9n,oK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),wAn(749,546,R9n,uK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList",749),wAn(31,749,R9n,hK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/ManyInverse",31),wAn(750,625,R9n,sK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable",750),wAn(1174,750,R9n,fK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),wAn(1164,622,R9n),MWn.ai=function(){return 0==(1792&this.b)},MWn.ci=function(){this.b|=1},MWn.Bk=function(){return 0!=(4&this.b)},MWn.bj=function(){return 0!=(40&this.b)},MWn.Ck=function(){return 0!=(16&this.b)},MWn.Dk=function(){return 0!=(8&this.b)},MWn.Ek=function(){return 0!=(this.b&M9n)},MWn.rk=function(){return 0!=(32&this.b)},MWn.Fk=function(){return 0!=(this.b&k6n)},MWn.wj=function(n){return this.d?x3(this.d,n):this.ak().Yj().wj(n)},MWn.fj=function(){return 0!=(2&this.b)?0!=(1&this.b):0!=this.i},MWn.hi=function(){return 0!=(128&this.b)},MWn.Xj=function(){var n;sqn(this),0!=(2&this.b)&&(mA(this.e)?(n=0!=(1&this.b),this.b&=-2,Lv(this,new t6(this.e,2,Awn(this.e.Tg(),this.ak()),n,!1))):this.b&=-2)},MWn.ni=function(){return 0==(1536&this.b)},MWn.b=0,vX(y9n,"EcoreEList/Generic",1164),wAn(1165,1164,R9n,zQ),MWn.ak=function(){return this.a},vX(y9n,"EcoreEList/Dynamic",1165),wAn(747,63,h8n,Ip),MWn.ri=function(n){return Den(this.a.a,n)},vX(y9n,"EcoreEMap/1",747),wAn(746,85,R9n,Zz),MWn.bi=function(n,t){Ivn(this.b,BB(t,133))},MWn.di=function(n,t){aan(this.b)},MWn.ei=function(n,t,e){var i;++(i=this.b,BB(t,133),i).e},MWn.fi=function(n,t){Oln(this.b,BB(t,133))},MWn.gi=function(n,t,e){Oln(this.b,BB(e,133)),GI(e)===GI(t)&&BB(e,133).Th(c$(BB(t,133).cd())),Ivn(this.b,BB(t,133))},vX(y9n,"EcoreEMap/DelegateEObjectContainmentEList",746),wAn(1171,151,j9n,yin),vX(y9n,"EcoreEMap/Unsettable",1171),wAn(1172,746,R9n,lK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),wAn(1168,228,tYn,lX),MWn.a=!1,MWn.b=!1,vX(y9n,"EcoreUtil/Copier",1168),wAn(745,1,QWn,F2),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return udn(this)},MWn.Pb=function(){var n;return udn(this),n=this.b,this.b=null,n},MWn.Qb=function(){this.a.Qb()},vX(y9n,"EcoreUtil/ProperContentIterator",745),wAn(1382,1381,{},Ff),vX(y9n,"EcoreValidator",1382),bq(y9n,"FeatureMapUtil/Validator"),wAn(1260,1,{1942:1},xs),MWn.rl=function(n){return!0},vX(y9n,"FeatureMapUtil/1",1260),wAn(757,1,{1942:1},cUn),MWn.rl=function(n){var t;return this.c==n||(null==(t=TD(RX(this.a,n)))?xRn(this,n)?(r6(this.a,n,(hN(),vtt)),!0):(r6(this.a,n,(hN(),ptt)),!1):t==(hN(),vtt))},MWn.e=!1,vX(y9n,"FeatureMapUtil/BasicValidator",757),wAn(758,43,tYn,X$),vX(y9n,"FeatureMapUtil/BasicValidator/Cache",758),wAn(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},xI),MWn.Vc=function(n,t){Axn(this.c,this.b,n,t)},MWn.Fc=function(n){return xKn(this.c,this.b,n)},MWn.Wc=function(n,t){return jHn(this.c,this.b,n,t)},MWn.Gc=function(n){return Z$(this,n)},MWn.Xh=function(n,t){htn(this.c,this.b,n,t)},MWn.lk=function(n,t){return PRn(this.c,this.b,n,t)},MWn.pi=function(n){return iHn(this.c,this.b,n,!1)},MWn.Zh=function(){return jA(this.c,this.b)},MWn.$h=function(){return EA(this.c,this.b)},MWn._h=function(n){return $8(this.c,this.b,n)},MWn.mk=function(n,t){return tR(this,n,t)},MWn.$b=function(){Nv(this)},MWn.Hc=function(n){return G3(this.c,this.b,n)},MWn.Ic=function(n){return Mcn(this.c,this.b,n)},MWn.Xb=function(n){return iHn(this.c,this.b,n,!0)},MWn.Wj=function(n){return this},MWn.Xc=function(n){return z3(this.c,this.b,n)},MWn.dc=function(){return HI(this)},MWn.fj=function(){return!adn(this.c,this.b)},MWn.Kc=function(){return cnn(this.c,this.b)},MWn.Yc=function(){return ann(this.c,this.b)},MWn.Zc=function(n){return lln(this.c,this.b,n)},MWn.ii=function(n,t){return mFn(this.c,this.b,n,t)},MWn.ji=function(n,t){Q6(this.c,this.b,n,t)},MWn.$c=function(n){return aPn(this.c,this.b,n)},MWn.Mc=function(n){return CKn(this.c,this.b,n)},MWn._c=function(n,t){return XFn(this.c,this.b,n,t)},MWn.Wb=function(n){AOn(this.c,this.b),Z$(this,BB(n,15))},MWn.gc=function(){return Kln(this.c,this.b)},MWn.Pc=function(){return G1(this.c,this.b)},MWn.Qc=function(n){return U3(this.c,this.b,n)},MWn.Ib=function(){var n,t;for((t=new Sk).a+="[",n=jA(this.c,this.b);Ksn(n);)cO(t,kN(cvn(n))),Ksn(n)&&(t.a+=FWn);return t.a+="]",t.a},MWn.Xj=function(){AOn(this.c,this.b)},vX(y9n,"FeatureMapUtil/FeatureEList",501),wAn(627,36,t9n,b4),MWn.yi=function(n){return eln(this,n)},MWn.Di=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0;break;case 3:if(3===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=5,f9(t=new gtn(2),this.g),f9(t,n.zi()),this.g=t,!0;break;case 5:if(3===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return BB(this.g,14).Fc(n.zi()),!0;break;case 4:switch(n.xi()){case 3:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=1,this.g=n.zi(),!0;break;case 4:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=6,f9(r=new gtn(2),this.n),f9(r,n.Bi()),this.n=r,i=Pun(Gk(ANt,1),hQn,25,15,[this.o,n.Ci()]),this.g=i,!0}break;case 6:if(4===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return BB(this.n,14).Fc(n.Bi()),aHn(i=BB(this.g,48),0,e=x8(ANt,hQn,25,i.length+1,15,1),0,i.length),e[i.length]=n.Ci(),this.g=e,!0}return!1},vX(y9n,"FeatureMapUtil/FeatureENotificationImpl",627),wAn(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},lq),MWn.dl=function(n,t){return xKn(this.c,n,t)},MWn.el=function(n,t,e){return PRn(this.c,n,t,e)},MWn.fl=function(n,t,e){return ZBn(this.c,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this.c,n,t)},MWn.il=function(n){return BB(iHn(this.c,this.b,n,!1),72).ak()},MWn.jl=function(n){return BB(iHn(this.c,this.b,n,!1),72).dd()},MWn.kl=function(){return this.a},MWn.ll=function(n){return!adn(this.c,n)},MWn.ml=function(n,t){MHn(this.c,n,t)},MWn.nl=function(n){return zin(this.c,n)},MWn.ol=function(n){Kmn(this.c,n)},vX(y9n,"FeatureMapUtil/FeatureFeatureMap",552),wAn(1259,1,k9n,KI),MWn.Wj=function(n){return iHn(this.b,this.a,-1,n)},MWn.fj=function(){return!adn(this.b,this.a)},MWn.Wb=function(n){MHn(this.b,this.a,n)},MWn.Xj=function(){AOn(this.b,this.a)},vX(y9n,"FeatureMapUtil/FeatureValue",1259);var sLt,hLt,fLt,lLt,bLt,wLt=bq(O7n,"AnyType");wAn(666,60,BVn,ik),vX(O7n,"InvalidDatatypeValueException",666);var dLt,gLt,pLt,vLt,mLt,yLt,kLt,jLt,ELt,TLt,MLt,SLt,PLt,CLt,ILt,OLt,ALt,$Lt,LLt,NLt,xLt,DLt,RLt,KLt,_Lt,FLt,BLt,HLt,qLt,GLt,zLt=bq(O7n,A7n),ULt=bq(O7n,$7n),XLt=bq(O7n,L7n);wAn(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},Rm),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b)}return U9(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new Ecn(this,0)),TKn(this.c,n,e);case 1:return(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),69)).mk(n,e);case 2:return!this.b&&(this.b=new Ecn(this,2)),TKn(this.b,n,e)}return BB(itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i}return O3(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t)}Lbn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),pLt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b)}qfn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.c),n.a+=", anyAttribute: ",rO(n,this.b),n.a+=")",n.a)},vX(N7n,"AnyTypeImpl",830),wAn(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},Rs),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return U9(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return O3(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return void kb(this,SD(t));case 1:return void jb(this,SD(t))}Lbn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),OLt},MWn.Bh=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}qfn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (data: ",cO(n,this.a),n.a+=", target: ",cO(n,this.b),n.a+=")",n.a)},MWn.a=null,MWn.b=null,vX(N7n,"ProcessingInstructionImpl",667),wAn(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},_m),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return this.a}return U9(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new Ecn(this,0)),null!=SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return null!=gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return!!this.a}return O3(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t);case 3:return void F0(this,SD(t));case 4:return void F0(this,pK(this.a,t));case 5:return void Eb(this,BB(t,148))}Lbn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),$Lt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),void MHn(this.c,(Uqn(),LLt),null);case 4:return void F0(this,pK(this.a,null));case 5:return void(this.a=null)}qfn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},vX(N7n,"SimpleAnyTypeImpl",668),wAn(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},Km),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new Ecn(this,0)),this.a):(!this.a&&(this.a=new Ecn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),this.b):(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),A8(this.b));case 2:return e?(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),this.c):(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),A8(this.c));case 3:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),DLt));case 4:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),RLt));case 5:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),_Lt));case 6:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),FLt))}return U9(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new Ecn(this,0)),TKn(this.a,n,e);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),BK(this.b,n,e);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),BK(this.c,n,e);case 5:return!this.a&&(this.a=new Ecn(this,0)),tR(n1(this.a,(Uqn(),_Lt)),n,e)}return BB(itn(0==(2&this.j)?(Uqn(),xLt):(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX((Uqn(),xLt)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.a&&0!=this.a.i;case 1:return!!this.b&&0!=this.b.f;case 2:return!!this.c&&0!=this.c.f;case 3:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),FLt)))}return O3(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void tX(this.a,t);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void tan(this.b,t);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void tan(this.c,t);case 3:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),DLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,DLt),BB(t,14));case 4:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),RLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,RLt),BB(t,14));case 5:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),_Lt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,_Lt),BB(t,14));case 6:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),FLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,FLt),BB(t,14))}Lbn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),xLt},MWn.Bh=function(n){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void sqn(this.a);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),FLt)))}qfn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.a),n.a+=")",n.a)},vX(N7n,"XMLTypeDocumentRootImpl",669),wAn(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},Ds),MWn.Ih=function(n,t){switch(n.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return null==t?null:Bbn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return SD(t);case 6:return mD(BB(t,190));case 12:case 47:case 49:case 11:return qGn(this,n,t);case 13:return null==t?null:GBn(BB(t,240));case 15:case 14:return null==t?null:RU(Gy(MD(t)));case 17:return EEn((Uqn(),t));case 18:return EEn(t);case 21:case 20:return null==t?null:KU(BB(t,155).a);case 27:return yD(BB(t,190));case 30:return _mn((Uqn(),BB(t,15)));case 31:return _mn(BB(t,15));case 40:return jD((Uqn(),t));case 42:return TEn((Uqn(),t));case 43:return TEn(t);case 59:case 48:return kD((Uqn(),t));default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Rm;case 1:return new Rs;case 2:return new _m;case 3:return new Km;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;switch(n.yj()){case 5:case 52:case 4:return t;case 6:return ypn(t);case 8:case 7:return null==t?null:_En(t);case 9:return null==t?null:Pnn(l_n((i=FBn(t,!0)).length>0&&(b1(0,i.length),43==i.charCodeAt(0))?i.substr(1):i,-128,127)<<24>>24);case 10:return null==t?null:Pnn(l_n((r=FBn(t,!0)).length>0&&(b1(0,r.length),43==r.charCodeAt(0))?r.substr(1):r,-128,127)<<24>>24);case 11:return SD(xXn(this,(Uqn(),kLt),t));case 12:return SD(xXn(this,(Uqn(),jLt),t));case 13:return null==t?null:new wE(FBn(t,!0));case 15:case 14:return gLn(t);case 16:return SD(xXn(this,(Uqn(),ELt),t));case 17:return Hdn((Uqn(),t));case 18:return Hdn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return FBn(t,!0);case 21:case 20:return ILn(t);case 22:return SD(xXn(this,(Uqn(),TLt),t));case 23:return SD(xXn(this,(Uqn(),MLt),t));case 24:return SD(xXn(this,(Uqn(),SLt),t));case 25:return SD(xXn(this,(Uqn(),PLt),t));case 26:return SD(xXn(this,(Uqn(),CLt),t));case 27:return Zgn(t);case 30:return qdn((Uqn(),t));case 31:return qdn(t);case 32:return null==t?null:iln(l_n((h=FBn(t,!0)).length>0&&(b1(0,h.length),43==h.charCodeAt(0))?h.substr(1):h,_Vn,DWn));case 33:return null==t?null:new $A((f=FBn(t,!0)).length>0&&(b1(0,f.length),43==f.charCodeAt(0))?f.substr(1):f);case 34:return null==t?null:iln(l_n((l=FBn(t,!0)).length>0&&(b1(0,l.length),43==l.charCodeAt(0))?l.substr(1):l,_Vn,DWn));case 36:return null==t?null:jgn(rUn((b=FBn(t,!0)).length>0&&(b1(0,b.length),43==b.charCodeAt(0))?b.substr(1):b));case 37:return null==t?null:jgn(rUn((w=FBn(t,!0)).length>0&&(b1(0,w.length),43==w.charCodeAt(0))?w.substr(1):w));case 40:return Vwn((Uqn(),t));case 42:return Gdn((Uqn(),t));case 43:return Gdn(t);case 44:return null==t?null:new $A((d=FBn(t,!0)).length>0&&(b1(0,d.length),43==d.charCodeAt(0))?d.substr(1):d);case 45:return null==t?null:new $A((g=FBn(t,!0)).length>0&&(b1(0,g.length),43==g.charCodeAt(0))?g.substr(1):g);case 46:return FBn(t,!1);case 47:return SD(xXn(this,(Uqn(),ILt),t));case 59:case 48:return Wwn((Uqn(),t));case 49:return SD(xXn(this,(Uqn(),ALt),t));case 50:return null==t?null:rln(l_n((p=FBn(t,!0)).length>0&&(b1(0,p.length),43==p.charCodeAt(0))?p.substr(1):p,Q9n,32767)<<16>>16);case 51:return null==t?null:rln(l_n((c=FBn(t,!0)).length>0&&(b1(0,c.length),43==c.charCodeAt(0))?c.substr(1):c,Q9n,32767)<<16>>16);case 53:return SD(xXn(this,(Uqn(),NLt),t));case 55:return null==t?null:rln(l_n((a=FBn(t,!0)).length>0&&(b1(0,a.length),43==a.charCodeAt(0))?a.substr(1):a,Q9n,32767)<<16>>16);case 56:return null==t?null:rln(l_n((u=FBn(t,!0)).length>0&&(b1(0,u.length),43==u.charCodeAt(0))?u.substr(1):u,Q9n,32767)<<16>>16);case 57:return null==t?null:jgn(rUn((o=FBn(t,!0)).length>0&&(b1(0,o.length),43==o.charCodeAt(0))?o.substr(1):o));case 58:return null==t?null:jgn(rUn((s=FBn(t,!0)).length>0&&(b1(0,s.length),43==s.charCodeAt(0))?s.substr(1):s));case 60:return null==t?null:iln(l_n((e=FBn(t,!0)).length>0&&(b1(0,e.length),43==e.charCodeAt(0))?e.substr(1):e,_Vn,DWn));case 61:return null==t?null:iln(l_n(FBn(t,!0),_Vn,DWn));default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(N7n,"XMLTypeFactoryImpl",1919),wAn(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},zW),MWn.N=!1,MWn.O=!1;var WLt,VLt,QLt,YLt,JLt,ZLt=!1;vX(N7n,"XMLTypePackageImpl",586),wAn(1852,1,{837:1},Ks),MWn._j=function(){return fFn(),TNt},vX(N7n,"XMLTypePackageImpl/1",1852),wAn(1861,1,s7n,_s),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/10",1861),wAn(1862,1,s7n,Fs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/11",1862),wAn(1863,1,s7n,Bs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/12",1863),wAn(1864,1,s7n,Hs),MWn.wj=function(n){return UI(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(N7n,"XMLTypePackageImpl/13",1864),wAn(1865,1,s7n,qs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/14",1865),wAn(1866,1,s7n,Gs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/15",1866),wAn(1867,1,s7n,zs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/16",1867),wAn(1868,1,s7n,Us),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/17",1868),wAn(1869,1,s7n,Xs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Ctt,sVn,155,n,0,1)},vX(N7n,"XMLTypePackageImpl/18",1869),wAn(1870,1,s7n,Ws),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/19",1870),wAn(1853,1,s7n,Vs),MWn.wj=function(n){return cL(n,843)},MWn.xj=function(n){return x8(wLt,HWn,843,n,0,1)},vX(N7n,"XMLTypePackageImpl/2",1853),wAn(1871,1,s7n,Qs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/20",1871),wAn(1872,1,s7n,Ys),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/21",1872),wAn(1873,1,s7n,Js),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/22",1873),wAn(1874,1,s7n,Zs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/23",1874),wAn(1875,1,s7n,nh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/24",1875),wAn(1876,1,s7n,th),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/25",1876),wAn(1877,1,s7n,eh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/26",1877),wAn(1878,1,s7n,ih),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/27",1878),wAn(1879,1,s7n,rh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/28",1879),wAn(1880,1,s7n,ch),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/29",1880),wAn(1854,1,s7n,ah),MWn.wj=function(n){return cL(n,667)},MWn.xj=function(n){return x8(zLt,HWn,2021,n,0,1)},vX(N7n,"XMLTypePackageImpl/3",1854),wAn(1881,1,s7n,uh),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/30",1881),wAn(1882,1,s7n,oh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/31",1882),wAn(1883,1,s7n,sh),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/32",1883),wAn(1884,1,s7n,hh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/33",1884),wAn(1885,1,s7n,fh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/34",1885),wAn(1886,1,s7n,lh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/35",1886),wAn(1887,1,s7n,bh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/36",1887),wAn(1888,1,s7n,wh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/37",1888),wAn(1889,1,s7n,dh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/38",1889),wAn(1890,1,s7n,gh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/39",1890),wAn(1855,1,s7n,ph),MWn.wj=function(n){return cL(n,668)},MWn.xj=function(n){return x8(ULt,HWn,2022,n,0,1)},vX(N7n,"XMLTypePackageImpl/4",1855),wAn(1891,1,s7n,vh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/40",1891),wAn(1892,1,s7n,mh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/41",1892),wAn(1893,1,s7n,yh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/42",1893),wAn(1894,1,s7n,kh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/43",1894),wAn(1895,1,s7n,jh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/44",1895),wAn(1896,1,s7n,Eh),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/45",1896),wAn(1897,1,s7n,Th),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/46",1897),wAn(1898,1,s7n,Mh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/47",1898),wAn(1899,1,s7n,Sh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/48",1899),wAn(sQn,1,s7n,Ph),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/49",sQn),wAn(1856,1,s7n,Ch),MWn.wj=function(n){return cL(n,669)},MWn.xj=function(n){return x8(XLt,HWn,2023,n,0,1)},vX(N7n,"XMLTypePackageImpl/5",1856),wAn(1901,1,s7n,Ih),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/50",1901),wAn(1902,1,s7n,Oh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/51",1902),wAn(1903,1,s7n,Ah),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/52",1903),wAn(1857,1,s7n,$h),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/6",1857),wAn(1858,1,s7n,Lh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/7",1858),wAn(1859,1,s7n,Nh),MWn.wj=function(n){return zI(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(N7n,"XMLTypePackageImpl/8",1859),wAn(1860,1,s7n,xh),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(N7n,"XMLTypePackageImpl/9",1860),wAn(50,60,BVn,ak),vX(ant,"RegEx/ParseException",50),wAn(820,1,{},Dh),MWn.sl=function(n){return n<this.j&&63==fV(this.i,n)},MWn.tl=function(){var n,t,e,i,r;if(10!=this.c)throw Hp(new ak(kWn((u$(),g8n))));switch(n=this.a){case 101:n=27;break;case 102:n=12;break;case 110:n=10;break;case 114:n=13;break;case 116:n=9;break;case 120:if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if(123==this.a){for(r=0,e=0;;){if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if((r=Gvn(this.a))<0)break;if(e>16*e)throw Hp(new ak(kWn((u$(),H8n))));e=16*e+r}if(125!=this.a)throw Hp(new ak(kWn((u$(),q8n))));if(e>unt)throw Hp(new ak(kWn((u$(),G8n))));n=e}else{if(r=0,0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(e=r,QXn(this),0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=e=16*e+r}break;case 117:if(i=0,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=t=16*t+i;break;case 118:if(QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if((t=16*t+i)>unt)throw Hp(new ak(kWn((u$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw Hp(new ak(kWn((u$(),z8n))))}return n},MWn.ul=function(n){var t;switch(n){case 100:t=32==(32&this.e)?ZUn("Nd",!0):(wWn(),uNt);break;case 68:t=32==(32&this.e)?ZUn("Nd",!1):(wWn(),lNt);break;case 119:t=32==(32&this.e)?ZUn("IsWord",!0):(wWn(),kNt);break;case 87:t=32==(32&this.e)?ZUn("IsWord",!1):(wWn(),wNt);break;case 115:t=32==(32&this.e)?ZUn("IsSpace",!0):(wWn(),gNt);break;case 83:t=32==(32&this.e)?ZUn("IsSpace",!1):(wWn(),bNt);break;default:throw Hp(new dy(ont+n.toString(16)))}return t},MWn.vl=function(n){var t,e,i,r,c,a,u,o,s,h,f;for(this.b=1,QXn(this),t=null,0==this.c&&94==this.a?(QXn(this),n?(wWn(),wWn(),s=new M0(5)):(wWn(),wWn(),Yxn(t=new M0(4),0,unt),s=new M0(4))):(wWn(),wWn(),s=new M0(4)),r=!0;1!=(f=this.c)&&(0!=f||93!=this.a||r);){if(r=!1,e=this.a,i=!1,10==f)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(s,this.ul(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.Ll(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=DIn(this,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(s,h),i=!0;break;default:e=this.tl()}else if(20==f){if((c=lx(this.i,58,this.d))<0)throw Hp(new ak(kWn((u$(),A8n))));if(a=!0,94==fV(this.i,this.d)&&(++this.d,a=!1),!(u=b9(fx(this.i,this.d,c),a,512==(512&this.e))))throw Hp(new ak(kWn((u$(),L8n))));if(sHn(s,u),i=!0,c+1>=this.j||93!=fV(this.i,c+1))throw Hp(new ak(kWn((u$(),A8n))));this.d=c+2}if(QXn(this),!i)if(0!=this.c||45!=this.a)Yxn(s,e,e);else{if(QXn(this),1==(f=this.c))throw Hp(new ak(kWn((u$(),$8n))));0==f&&93==this.a?(Yxn(s,e,e),Yxn(s,45,45)):(o=this.a,10==f&&(o=this.tl()),QXn(this),Yxn(s,e,o))}(this.e&k6n)==k6n&&0==this.c&&44==this.a&&QXn(this)}if(1==this.c)throw Hp(new ak(kWn((u$(),$8n))));return t&&(WGn(t,s),s=t),T$n(s),qHn(s),this.b=0,QXn(this),s},MWn.wl=function(){var n,t,e,i;for(e=this.vl(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw Hp(new ak(kWn((u$(),_8n))));if(QXn(this),9!=this.c)throw Hp(new ak(kWn((u$(),K8n))));if(t=this.vl(!1),4==i)sHn(e,t);else if(45==n)WGn(e,t);else{if(38!=n)throw Hp(new dy("ASSERT"));kGn(e,t)}}return QXn(this),e},MWn.xl=function(){var n,t;return n=this.a-48,wWn(),wWn(),t=new vJ(12,null,n),!this.g&&(this.g=new _v),Cv(this.g,new Op(n)),QXn(this),t},MWn.yl=function(){return QXn(this),wWn(),pNt},MWn.zl=function(){return QXn(this),wWn(),dNt},MWn.Al=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Bl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Cl=function(){return QXn(this),fsn()},MWn.Dl=function(){return QXn(this),wWn(),mNt},MWn.El=function(){return QXn(this),wWn(),jNt},MWn.Fl=function(){var n;if(this.d>=this.j||64!=(65504&(n=fV(this.i,this.d++))))throw Hp(new ak(kWn((u$(),S8n))));return QXn(this),wWn(),wWn(),new oG(0,n-64)},MWn.Gl=function(){return QXn(this),RFn()},MWn.Hl=function(){return QXn(this),wWn(),ENt},MWn.Il=function(){var n;return wWn(),wWn(),n=new oG(0,105),QXn(this),n},MWn.Jl=function(){return QXn(this),wWn(),yNt},MWn.Kl=function(){return QXn(this),wWn(),vNt},MWn.Ll=function(n,t){return this.tl()},MWn.Ml=function(){return QXn(this),wWn(),hNt},MWn.Nl=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw Hp(new ak(kWn((u$(),E8n))));if(i=-1,t=null,49<=(n=fV(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new _v),Cv(this.g,new Op(i)),++this.d,41!=fV(this.i,this.d))throw Hp(new ak(kWn((u$(),y8n))));++this.d}else switch(63==n&&--this.d,QXn(this),(t=OXn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));break;default:throw Hp(new ak(kWn((u$(),T8n))))}if(QXn(this),e=null,2==(r=Vdn(this)).e){if(2!=r.em())throw Hp(new ak(kWn((u$(),M8n))));e=r.am(1),r=r.am(0)}if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),wWn(),wWn(),new jnn(i,t,r,e)},MWn.Ol=function(){return QXn(this),wWn(),fNt},MWn.Pl=function(){var n;if(QXn(this),n=uU(24,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ql=function(){var n;if(QXn(this),n=uU(20,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Rl=function(){var n;if(QXn(this),n=uU(22,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Sl=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)n|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))));if(45==t){for(++this.d;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)e|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))))}if(58==t){if(++this.d,QXn(this),i=AX(Vdn(this),n,e),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));QXn(this)}else{if(41!=t)throw Hp(new ak(kWn((u$(),j8n))));++this.d,QXn(this),i=AX(Vdn(this),n,e)}return i},MWn.Tl=function(){var n;if(QXn(this),n=uU(21,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ul=function(){var n;if(QXn(this),n=uU(23,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Vl=function(){var n,t;if(QXn(this),n=this.f++,t=oU(Vdn(this),n),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),t},MWn.Wl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Xl=function(n){return QXn(this),5==this.c?(QXn(this),gG(n,(wWn(),wWn(),new h4(9,n)))):gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),t=new r$(2),5==this.c?(QXn(this),tqn(t,sNt),tqn(t,n)):(tqn(t,n),tqn(t,sNt)),t},MWn.Zl=function(n){return QXn(this),5==this.c?(QXn(this),wWn(),wWn(),new h4(9,n)):(wWn(),wWn(),new h4(3,n))},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=1,MWn.g=null,MWn.j=0,vX(ant,"RegEx/RegexParser",820),wAn(1824,820,{},Fm),MWn.sl=function(n){return!1},MWn.tl=function(){return qDn(this)},MWn.ul=function(n){return d_n(n)},MWn.vl=function(n){return ZXn(this)},MWn.wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.xl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.yl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.zl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Al=function(){return QXn(this),d_n(67)},MWn.Bl=function(){return QXn(this),d_n(73)},MWn.Cl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Dl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.El=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Fl=function(){return QXn(this),d_n(99)},MWn.Gl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Hl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Il=function(){return QXn(this),d_n(105)},MWn.Jl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Kl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ll=function(n,t){return sHn(n,d_n(t)),-1},MWn.Ml=function(){return QXn(this),wWn(),wWn(),new oG(0,94)},MWn.Nl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ol=function(){return QXn(this),wWn(),wWn(),new oG(0,36)},MWn.Pl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ql=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Rl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Sl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Tl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ul=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Vl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Xl=function(n){return QXn(this),gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),tqn(t=new r$(2),n),tqn(t,sNt),t},MWn.Zl=function(n){return QXn(this),wWn(),wWn(),new h4(3,n)};var nNt=null,tNt=null;vX(ant,"RegEx/ParserForXMLSchema",1824),wAn(117,1,ynt,Ap),MWn.$l=function(n){throw Hp(new dy("Not supported."))},MWn._l=function(){return-1},MWn.am=function(n){return null},MWn.bm=function(){return null},MWn.cm=function(n){},MWn.dm=function(n){},MWn.em=function(){return 0},MWn.Ib=function(){return this.fm(0)},MWn.fm=function(n){return 11==this.e?".":""},MWn.e=0;var eNt,iNt,rNt,cNt,aNt,uNt,oNt,sNt,hNt,fNt,lNt,bNt,wNt,dNt,gNt,pNt,vNt,mNt,yNt,kNt,jNt,ENt,TNt,MNt,SNt=null,PNt=null,CNt=null,INt=vX(ant,"RegEx/Token",117);wAn(136,117,{3:1,136:1,117:1},M0),MWn.fm=function(n){var t,e,i;if(4==this.e)if(this==oNt)e=".";else if(this==uNt)e="\\d";else if(this==kNt)e="\\w";else if(this==gNt)e="\\s";else{for((i=new Sk).a+="[",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}else if(this==lNt)e="\\D";else if(this==wNt)e="\\W";else if(this==bNt)e="\\S";else{for((i=new Sk).a+="[^",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}return e},MWn.a=!1,MWn.c=!1,vX(ant,"RegEx/RangeToken",136),wAn(584,1,{584:1},Op),MWn.a=0,vX(ant,"RegEx/RegexParser/ReferencePosition",584),wAn(583,1,{3:1,583:1},XE),MWn.Fb=function(n){var t;return null!=n&&!!cL(n,583)&&(t=BB(n,583),mK(this.b,t.b)&&this.a==t.a)},MWn.Hb=function(){return vvn(this.b+"/"+txn(this.a))},MWn.Ib=function(){return this.c.fm(this.a)},MWn.a=0,vX(ant,"RegEx/RegularExpression",583),wAn(223,117,ynt,oG),MWn._l=function(){return this.a},MWn.fm=function(n){var t,e;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:e="\\"+PR(this.a&QVn);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=this.a>=BQn?"\\v"+fx(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+PR(this.a&QVn)}break;case 8:e=this==hNt||this==fNt?""+PR(this.a&QVn):"\\"+PR(this.a&QVn);break;default:e=null}return e},MWn.a=0,vX(ant,"RegEx/Token/CharToken",223),wAn(309,117,ynt,h4),MWn.am=function(n){return this.a},MWn.cm=function(n){this.b=n},MWn.dm=function(n){this.c=n},MWn.em=function(){return 1},MWn.fm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.fm(n)+"*";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): CLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.fm(n)+"*?";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): NONGREEDYCLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}?"}return t},MWn.b=0,MWn.c=0,vX(ant,"RegEx/Token/ClosureToken",309),wAn(821,117,ynt,UU),MWn.am=function(n){return 0==n?this.a:this.b},MWn.em=function(){return 2},MWn.fm=function(n){return 3==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+":9==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+?":this.a.fm(n)+""+this.b.fm(n)},vX(ant,"RegEx/Token/ConcatToken",821),wAn(1822,117,ynt,jnn),MWn.am=function(n){if(0==n)return this.d;if(1==n)return this.b;throw Hp(new dy("Internal Error: "+n))},MWn.em=function(){return this.b?2:1},MWn.fm=function(n){var t;return t=this.c>0?"(?("+this.c+")":8==this.a.e?"(?("+this.a+")":"(?"+this.a,this.b?t+=this.d+"|"+this.b+")":t+=this.d+")",t},MWn.c=0,vX(ant,"RegEx/Token/ConditionToken",1822),wAn(1823,117,ynt,T0),MWn.am=function(n){return this.b},MWn.em=function(){return 1},MWn.fm=function(n){return"(?"+(0==this.a?"":txn(this.a))+(0==this.c?"":txn(this.c))+":"+this.b.fm(n)+")"},MWn.a=0,MWn.c=0,vX(ant,"RegEx/Token/ModifierToken",1823),wAn(822,117,ynt,cW),MWn.am=function(n){return this.a},MWn.em=function(){return 1},MWn.fm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.fm(n)+")":"("+this.a.fm(n)+")";break;case 20:t="(?="+this.a.fm(n)+")";break;case 21:t="(?!"+this.a.fm(n)+")";break;case 22:t="(?<="+this.a.fm(n)+")";break;case 23:t="(?<!"+this.a.fm(n)+")";break;case 24:t="(?>"+this.a.fm(n)+")"}return t},MWn.b=0,vX(ant,"RegEx/Token/ParenToken",822),wAn(521,117,{3:1,117:1,521:1},vJ),MWn.bm=function(){return this.b},MWn.fm=function(n){return 12==this.e?"\\"+this.a:iAn(this.b)},MWn.a=0,vX(ant,"RegEx/Token/StringToken",521),wAn(465,117,ynt,r$),MWn.$l=function(n){tqn(this,n)},MWn.am=function(n){return BB(bW(this.a,n),117)},MWn.em=function(){return this.a?this.a.a.c.length:0},MWn.fm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=BB(bW(this.a,0),117),r=3==(e=BB(bW(this.a,1),117)).e&&e.am(0)==t?t.fm(n)+"+":9==e.e&&e.am(0)==t?t.fm(n)+"+?":t.fm(n)+""+e.fm(n);else{for(c=new Sk,i=0;i<this.a.a.c.length;i++)cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r}if(2==this.a.a.c.length&&7==BB(bW(this.a,1),117).e)r=BB(bW(this.a,0),117).fm(n)+"?";else if(2==this.a.a.c.length&&7==BB(bW(this.a,0),117).e)r=BB(bW(this.a,1),117).fm(n)+"??";else{for(cO(c=new Sk,BB(bW(this.a,0),117).fm(n)),i=1;i<this.a.a.c.length;i++)c.a+="|",cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r},vX(ant,"RegEx/Token/UnionToken",465),wAn(518,1,{592:1},UE),MWn.Ib=function(){return this.a.b},vX(knt,"XMLTypeUtil/PatternMatcherImpl",518),wAn(1622,1381,{},Rh),vX(knt,"XMLTypeValidator",1622),wAn(264,1,pVn,hz),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return(this.b-this.a)*this.c<0?MNt:new XL(this)},MWn.a=0,MWn.b=0,MWn.c=0,vX(Ent,"ExclusiveRange",264),wAn(1068,1,cVn,Kh),MWn.Rb=function(n){BB(n,19),l$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return GE()},MWn.Ub=function(){return zE()},MWn.Wb=function(n){BB(n,19),w$()},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Tb=function(){return-1},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new tk(Snt))},vX(Ent,"ExclusiveRange/1",1068),wAn(254,1,cVn,XL),MWn.Rb=function(n){BB(n,19),b$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return Fhn(this)},MWn.Ub=function(){return O9(this)},MWn.Wb=function(n){BB(n,19),d$()},MWn.Ob=function(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Vb=function(){return this.b-1},MWn.Qb=function(){throw Hp(new tk(Snt))},MWn.a=0,MWn.b=0,vX(Ent,"ExclusiveRange/RangeIterator",254);var ONt=RW(P9n,"C"),ANt=RW(O9n,"I"),$Nt=RW($Wn,"Z"),LNt=RW(A9n,"J"),NNt=RW(S9n,"B"),xNt=RW(C9n,"D"),DNt=RW(I9n,"F"),RNt=RW($9n,"S"),KNt=bq("org.eclipse.elk.core.labels","ILabelManager"),_Nt=bq(B6n,"DiagnosticChain"),FNt=bq(f7n,"ResourceSet"),BNt=vX(B6n,"InvocationTargetException",null),HNt=(Dk(),f5),qNt=qNt=hEn;Zen(Qp),scn("permProps",[[[Pnt,Cnt],[Int,"gecko1_8"]],[[Pnt,Cnt],[Int,"ie10"]],[[Pnt,Cnt],[Int,"ie8"]],[[Pnt,Cnt],[Int,"ie9"]],[[Pnt,Cnt],[Int,"safari"]]]),qNt(null,"elk",null)}).call(this)}).call(this,void 0!==e.g?e.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(n,t,e){"use strict";function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function r(n,t){if(!n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?n:t}function c(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(n,t):n.__proto__=t)}var a=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e);var c=Object.assign({},t),a=!1;try{n.resolve("web-worker"),a=!0}catch(s){}if(t.workerUrl)if(a){var u=n("web-worker");c.workerFactory=function(n){return new u(n)}}else console.warn("Web worker requested but 'web-worker' package not installed. \nConsider installing the package or pass your own 'workerFactory' to ELK's constructor.\n... Falling back to non-web worker version.");if(!c.workerFactory){var o=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new o(n)}}return r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,c))}return c(e,t),e}(n("./elk-api.js").default);Object.defineProperty(t.exports,"__esModule",{value:!0}),t.exports=a,a.default=a},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(n,t,e){t.exports=Worker},{}]},{},[3])(3)},83209:(n,t,e)=>{"use strict";e.r(t),e.d(t,{diagram:()=>k});var i=e(74737),r=e(59373),c=e(43349),a=e(17295),u=e.n(a);e(30381),e(17967),e(27856),e(70277),e(45625),e(39354),e(91518);const o=new(u()),s={},h={};let f={};const l=(n,t,e)=>{const r={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 r.TD=r.TB,i.l.info("abc88",e,t,n),r[e][t][n]},b=(n,t,e)=>{if(i.l.info("getNextPort abc88",{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 r="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),r},w=function(n,t,e,c){i.l.info("abc78 edges = ",n);const a=c.insert("g").attr("class","edgeLabels");let u,o,s={},l=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,i.a)(n.defaultStyle);u=t.style,o=t.labelStyle}return n.forEach((function(t){var c="L-"+t.start+"-"+t.end;void 0===s[c]?(s[c]=0,i.l.info("abc78 new entry",c,s[c])):(s[c]++,i.l.info("abc78 new entry",c,s[c]));let w=c+"-"+s[c];i.l.info("abc78 new link id to be used is",c,w,s[c]);var d="LS-"+t.start,g="LE-"+t.end;const p={style:"",labelStyle:""};switch(p.minlen=t.length||1,"arrow_open"===t.type?p.arrowhead="none":p.arrowhead="normal",p.arrowTypeStart="arrow_open",p.arrowTypeEnd="arrow_open",t.type){case"double_arrow_cross":p.arrowTypeStart="arrow_cross";case"arrow_cross":p.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":p.arrowTypeStart="arrow_point";case"arrow_point":p.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":p.arrowTypeStart="arrow_circle";case"arrow_circle":p.arrowTypeEnd="arrow_circle"}let v="",m="";switch(t.stroke){case"normal":v="fill:none;",void 0!==u&&(v=u),void 0!==o&&(m=o),p.thickness="normal",p.pattern="solid";break;case"dotted":p.thickness="normal",p.pattern="dotted",p.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":p.thickness="thick",p.pattern="solid",p.style="stroke-width: 3.5px;fill:none;"}if(void 0!==t.style){const n=(0,i.a)(t.style);v=n.style,m=n.labelStyle}p.style=p.style+=v,p.labelStyle=p.labelStyle+=m,void 0!==t.interpolate?p.curve=(0,i.d)(t.interpolate,r.c_6):void 0!==n.defaultInterpolate?p.curve=(0,i.d)(n.defaultInterpolate,r.c_6):p.curve=(0,i.d)(h.curve,r.c_6),void 0===t.text?void 0!==t.style&&(p.arrowheadStyle="fill: #333"):(p.arrowheadStyle="fill: #333",p.labelpos="c"),p.labelType="text",p.label=t.text.replace(i.c.lineBreakRegex,"\n"),void 0===t.style&&(p.style=p.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),p.labelStyle=p.labelStyle.replace("color:","fill:"),p.id=w,p.classes="flowchart-link "+d+" "+g;const y=(0,i.f)(a,p),{source:k,target:j}=((n,t)=>{let e=n.start,i=n.end;const r=f[e],c=f[i];return r&&c?("diamond"===r.type&&(e=`${e}-${b(e,"out",t)}`),"diamond"===c.type&&(i=`${i}-${b(i,"in",t)}`),{source:e,target:i}):{source:e,target:i}})(t,l);i.l.debug("abc78 source and target",k,j),e.edges.push({id:"e"+t.start+t.end,sources:[k],targets:[j],labelEl:y,labels:[{width:p.width,height:p.height,orgWidth:p.width,orgHeight:p.height,text:p.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:p})})),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,c){const a=d(t.sources[0],t.targets[0],c),u=t.sections[0].startPoint,o=t.sections[0].endPoint,s=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+a.x,n.y+a.y])),h=[[u.x+a.x,u.y+a.y],...s,[o.x+a.x,o.y+a.y]],f=(0,r.jvg)().curve(r.c_6),l=n.insert("path").attr("d",f(h)).attr("class","path").attr("fill","none"),b=n.insert("g").attr("class","edgeLabel"),w=(0,r.Ys)(b.node().appendChild(t.labelEl)),g=w.node().firstChild.getBoundingClientRect();w.attr("width",g.width),w.attr("height",g.height),b.attr("transform",`translate(${t.labels[0].x+a.x}, ${t.labels[0].y+a.y})`),function(n,t,e,i){let r="";switch(i&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.arrowTypeStart){case"arrow_cross":n.attr("marker-start","url("+r+"#"+e+"-crossStart)");break;case"arrow_point":n.attr("marker-start","url("+r+"#"+e+"-pointStart)");break;case"arrow_barb":n.attr("marker-start","url("+r+"#"+e+"-barbStart)");break;case"arrow_circle":n.attr("marker-start","url("+r+"#"+e+"-circleStart)");break;case"aggregation":n.attr("marker-start","url("+r+"#"+e+"-aggregationStart)");break;case"extension":n.attr("marker-start","url("+r+"#"+e+"-extensionStart)");break;case"composition":n.attr("marker-start","url("+r+"#"+e+"-compositionStart)");break;case"dependency":n.attr("marker-start","url("+r+"#"+e+"-dependencyStart)");break;case"lollipop":n.attr("marker-start","url("+r+"#"+e+"-lollipopStart)")}switch(t.arrowTypeEnd){case"arrow_cross":n.attr("marker-end","url("+r+"#"+e+"-crossEnd)");break;case"arrow_point":n.attr("marker-end","url("+r+"#"+e+"-pointEnd)");break;case"arrow_barb":n.attr("marker-end","url("+r+"#"+e+"-barbEnd)");break;case"arrow_circle":n.attr("marker-end","url("+r+"#"+e+"-circleEnd)");break;case"aggregation":n.attr("marker-end","url("+r+"#"+e+"-aggregationEnd)");break;case"extension":n.attr("marker-end","url("+r+"#"+e+"-extensionEnd)");break;case"composition":n.attr("marker-end","url("+r+"#"+e+"-compositionEnd)");break;case"dependency":n.attr("marker-end","url("+r+"#"+e+"-dependencyEnd)");break;case"lollipop":n.attr("marker-end","url("+r+"#"+e+"-lollipopEnd)")}}(l,e,i.type,i.arrowMarkerAbsolute)},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)}))},v=(n,t,e,r,c,a,u)=>{e.forEach((function(e){if(e)if(f[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:u,width:e.width,height:e.height},"group"===e.type){const r=c.insert("g").attr("class","subgraph");r.insert("rect").attr("class","subgraph subgraph-lvl-"+u%5+" node").attr("x",e.x+n).attr("y",e.y+t).attr("width",e.width).attr("height",e.height);const a=r.insert("g").attr("class","label");a.attr("transform",`translate(${e.labels[0].x+n+e.x}, ${e.labels[0].y+t+e.y})`),a.node().appendChild(e.labelData.labelNode),i.l.info("Id (UGH)= ",e.type,e.labels)}else i.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&&v(n+e.x,t+e.y,e.children,r,c,a,u+1)}))},m={getClasses:function(n,t){i.l.info("Extracting classes"),t.db.clear("ver-2");try{return t.parse(n),t.db.getClasses()}catch(e){return{}}},draw:async function(n,t,e,a){var u;a.db.clear(),f={},a.db.setGen("gen-2"),a.parser.parse(n);const s=(0,r.Ys)("body").append("div").attr("style","height:400px").attr("id","cy");let h={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(i.l.info("Drawing flowchart using v3 renderer",o),a.db.getDirection()){case"BT":h.layoutOptions["elk.direction"]="UP";break;case"TB":h.layoutOptions["elk.direction"]="DOWN";break;case"LR":h.layoutOptions["elk.direction"]="RIGHT";break;case"RL":h.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:l,flowchart:b}=(0,i.g)();let d;"sandbox"===l&&(d=(0,r.Ys)("#i"+t));const m="sandbox"===l?(0,r.Ys)(d.nodes()[0].contentDocument.body):(0,r.Ys)("body"),y="sandbox"===l?d.nodes()[0].contentDocument:document,k=m.select(`[id="${t}"]`);(0,i.i)(k,["point","circle","cross"],a.type,a.arrowMarkerAbsolute);const j=a.db.getVertices();let E;const T=a.db.getSubGraphs();i.l.info("Subgraphs - ",T);for(let i=T.length-1;i>=0;i--)E=T[i],a.db.addVertex(E.id,E.title,"group",void 0,E.classes,E.dir);const M=k.insert("g").attr("class","subgraphs"),S=function(n){const t={parentById:{},childrenById:{}},e=n.getSubGraphs();return i.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}(a.db);h=function(n,t,e,r,a,u,o){const s=e.select(`[id="${t}"]`),h=s.insert("g").attr("class","nodes");return Object.keys(n).forEach((function(t){const e=n[t];let o="default";e.classes.length>0&&(o=e.classes.join(" "));const l=(0,i.a)(e.styles);let b,w=void 0!==e.text?e.text:e.id;const d={width:0,height:0};if((0,i.e)((0,i.g)().flowchart.htmlLabels)){const n={label:w.replace(/fa[blrs]?:fa-[\w-]+/g,(n=>`<i class='${n.replace(":"," ")}'></i>`))};b=(0,c.a)(s,n).node();const t=b.getBBox();d.width=t.width,d.height=t.height,d.labelNode=b,b.parentNode.removeChild(b)}else{const n=r.createElementNS("http://www.w3.org/2000/svg","text");n.setAttribute("style",l.labelStyle.replace("color:","fill:"));const t=w.split(i.c.lineBreakRegex);for(const i of t){const t=r.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=i,n.appendChild(t)}b=n;const e=b.getBBox();d.width=e.width,d.height=e.height,d.labelNode=b}const g=[{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 p=0,v="",m={};switch(e.type){case"round":p=5,v="rect";break;case"square":case"group":default:v="rect";break;case"diamond":v="question",m={portConstraints:"FIXED_SIDE"};break;case"hexagon":v="hexagon";break;case"odd":case"odd_right":v="rect_left_inv_arrow";break;case"lean_right":v="lean_right";break;case"lean_left":v="lean_left";break;case"trapezoid":v="trapezoid";break;case"inv_trapezoid":v="inv_trapezoid";break;case"circle":v="circle";break;case"ellipse":v="ellipse";break;case"stadium":v="stadium";break;case"subroutine":v="subroutine";break;case"cylinder":v="cylinder";break;case"doublecircle":v="doublecircle"}const y={labelStyle:l.labelStyle,shape:v,labelText:w,rx:p,ry:p,class:o,style:l.style,id:e.id,link:e.link,linkTarget:e.linkTarget,tooltip:a.db.getTooltip(e.id)||"",domId:a.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,i.g)().flowchart.padding};let k,j;"group"!==y.type&&(j=(0,i.b)(h,y,e.dir),k=j.node().getBBox());const E={id:e.id,ports:"diamond"===e.type?g:[],layoutOptions:m,labelText:w,labelData:d,domId:a.db.lookUpDomId(e.id),width:null==k?void 0:k.width,height:null==k?void 0:k.height,type:e.type,el:j,parent:u.parentById[e.id]};f[y.id]=E})),o}(j,t,m,y,a,S,h);const P=k.insert("g").attr("class","edges edgePath"),C=a.db.getEdges();h=w(C,a,h,k);Object.keys(f).forEach((n=>{const t=f[n];t.parent||h.children.push(t),void 0!==S.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(h.children,S),i.l.info("after layout",JSON.stringify(h,null,2));const I=await o.layout(h);v(0,0,I.children,k,M,a,0),i.l.info("after layout",I),null==(u=I.edges)||u.map((n=>{g(P,n,n.edgeData,a,S)})),(0,i.s)({},k,b.diagramPadding,b.useMaxWidth),s.remove()}},y=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.5;\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=>{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`,k={db:i.h,renderer:m,parser:i.p,styles:y}}}]); \ No newline at end of file diff --git a/docs/assets/js/32993410.ca14d499.js b/docs/assets/js/32993410.ca14d499.js new file mode 100644 index 000000000..b8f1e4585 --- /dev/null +++ b/docs/assets/js/32993410.ca14d499.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5510],{65216:e=>{e.exports=JSON.parse('{"title":"Examples","description":"Examples","slug":"/category/examples","permalink":"/docs/0.5.0/category/examples","navigation":{"previous":{"title":"Casper","permalink":"/docs/0.5.0/backends/casper"},"next":{"title":"odra-examples","permalink":"/docs/0.5.0/examples/odra-examples"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/33762072.8595d500.js b/docs/assets/js/33762072.8595d500.js new file mode 100644 index 000000000..df42d33b3 --- /dev/null +++ b/docs/assets/js/33762072.8595d500.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7669],{82154:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"0.3.1","label":"0.3.1","banner":"unmaintained","badge":true,"noIndex":false,"className":"docs-version-0.3.1","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Odra framework","href":"/docs/0.3.1/","docId":"intro"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs/0.3.1/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Flipper example","href":"/docs/0.3.1/getting-started/flipper","docId":"getting-started/flipper"}],"href":"/docs/0.3.1/category/getting-started"},{"type":"category","label":"Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Cargo Odra","href":"/docs/0.3.1/basics/cargo-odra","docId":"basics/cargo-odra"},{"type":"link","label":"Directory structure","href":"/docs/0.3.1/basics/directory-structure","docId":"basics/directory-structure"},{"type":"link","label":"Odra.toml","href":"/docs/0.3.1/basics/odra-toml","docId":"basics/odra-toml"},{"type":"link","label":"Flipper Internals","href":"/docs/0.3.1/basics/flipper-internals","docId":"basics/flipper-internals"},{"type":"link","label":"Storage interaction","href":"/docs/0.3.1/basics/storage-interaction","docId":"basics/storage-interaction"},{"type":"link","label":"Host Communication","href":"/docs/0.3.1/basics/communicating-with-host","docId":"basics/communicating-with-host"},{"type":"link","label":"Testing","href":"/docs/0.3.1/basics/testing","docId":"basics/testing"},{"type":"link","label":"Errors","href":"/docs/0.3.1/basics/errors","docId":"basics/errors"},{"type":"link","label":"Events","href":"/docs/0.3.1/basics/events","docId":"basics/events"},{"type":"link","label":"Cross calls","href":"/docs/0.3.1/basics/cross-calls","docId":"basics/cross-calls"},{"type":"link","label":"Modules","href":"/docs/0.3.1/basics/modules","docId":"basics/modules"},{"type":"link","label":"Native token","href":"/docs/0.3.1/basics/native-token","docId":"basics/native-token"}],"href":"/docs/0.3.1/category/basics"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Module Composer","href":"/docs/0.3.1/advanced/composer","docId":"advanced/composer"},{"type":"link","label":"Delegate","href":"/docs/0.3.1/advanced/delegate","docId":"advanced/delegate"},{"type":"link","label":"Advanced Storage Concepts","href":"/docs/0.3.1/advanced/advanced-storage","docId":"advanced/advanced-storage"},{"type":"link","label":"Attributes","href":"/docs/0.3.1/advanced/attributes","docId":"advanced/attributes"}],"href":"/docs/0.3.1/category/advanced"},{"type":"category","label":"Backends","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is a backend?","href":"/docs/0.3.1/backends/what-is-a-backend","docId":"backends/what-is-a-backend"},{"type":"link","label":"MockVM","href":"/docs/0.3.1/backends/mock-vm","docId":"backends/mock-vm"},{"type":"link","label":"Casper","href":"/docs/0.3.1/backends/casper","docId":"backends/casper"}],"href":"/docs/0.3.1/category/backends"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"odra-examples","href":"/docs/0.3.1/examples/odra-examples","docId":"examples/odra-examples"},{"type":"link","label":"Using odra-modules","href":"/docs/0.3.1/examples/using-odra-modules","docId":"examples/using-odra-modules"}],"href":"/docs/0.3.1/category/examples"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ownable","href":"/docs/0.3.1/tutorials/ownable","docId":"tutorials/ownable"},{"type":"link","label":"ERC-20","href":"/docs/0.3.1/tutorials/erc20","docId":"tutorials/erc20"},{"type":"link","label":"OwnedToken","href":"/docs/0.3.1/tutorials/owned-token","docId":"tutorials/owned-token"}],"href":"/docs/0.3.1/category/tutorials"}]},"docs":{"advanced/advanced-storage":{"id":"advanced/advanced-storage","title":"Advanced Storage Concepts","description":"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.","sidebar":"tutorialSidebar"},"advanced/attributes":{"id":"advanced/attributes","title":"Attributes","description":"Smart contract developers with Ethereum background are familiar with Solidity\'s concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.","sidebar":"tutorialSidebar"},"advanced/composer":{"id":"advanced/composer","title":"Module Composer","description":"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.","sidebar":"tutorialSidebar"},"advanced/delegate":{"id":"advanced/delegate","title":"Delegate","description":"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.","sidebar":"tutorialSidebar"},"backends/casper":{"id":"backends/casper","title":"Casper","description":"The Casper backend allows you to compile your contracts into WASM files which can be deployed","sidebar":"tutorialSidebar"},"backends/mock-vm":{"id":"backends/mock-vm","title":"MockVM","description":"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing","sidebar":"tutorialSidebar"},"backends/what-is-a-backend":{"id":"backends/what-is-a-backend","title":"What is a backend?","description":"You can think of a backend as a target platform for your smart contract.","sidebar":"tutorialSidebar"},"basics/cargo-odra":{"id":"basics/cargo-odra","title":"Cargo Odra","description":"A tool for managing Odra projects","sidebar":"tutorialSidebar"},"basics/communicating-with-host":{"id":"basics/communicating-with-host","title":"Host Communication","description":"How to get information from the Host","sidebar":"tutorialSidebar"},"basics/cross-calls":{"id":"basics/cross-calls","title":"Cross calls","description":"Contracts calling contracts","sidebar":"tutorialSidebar"},"basics/directory-structure":{"id":"basics/directory-structure","title":"Directory structure","description":"Files and folders in the Odra project","sidebar":"tutorialSidebar"},"basics/errors":{"id":"basics/errors","title":"Errors","description":"Causing and handling errors","sidebar":"tutorialSidebar"},"basics/events":{"id":"basics/events","title":"Events","description":"Creating and emitting Events","sidebar":"tutorialSidebar"},"basics/flipper-internals":{"id":"basics/flipper-internals","title":"Flipper Internals","description":"Detailed explanation of the Flipper contract","sidebar":"tutorialSidebar"},"basics/modules":{"id":"basics/modules","title":"Modules","description":"Divide your code into modules","sidebar":"tutorialSidebar"},"basics/native-token":{"id":"basics/native-token","title":"Native token","description":"How to deposit, withdraw and transfer","sidebar":"tutorialSidebar"},"basics/odra-toml":{"id":"basics/odra-toml","title":"Odra.toml","description":"Odra\'s configuration file","sidebar":"tutorialSidebar"},"basics/storage-interaction":{"id":"basics/storage-interaction","title":"Storage interaction","description":"How to write data into blockchain\'s storage","sidebar":"tutorialSidebar"},"basics/testing":{"id":"basics/testing","title":"Testing","description":"How to write tests in Odra","sidebar":"tutorialSidebar"},"examples/odra-examples":{"id":"examples/odra-examples","title":"odra-examples","description":"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.","sidebar":"tutorialSidebar"},"examples/using-odra-modules":{"id":"examples/using-odra-modules","title":"Using odra-modules","description":"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.","sidebar":"tutorialSidebar"},"getting-started/flipper":{"id":"getting-started/flipper","title":"Flipper example","description":"To quickly start working with Odra, take a look at the following code sample. If you followed the","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Hello fellow Odra user! This page will guide you through the installation process.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Odra framework","description":"Odra Docs","sidebar":"tutorialSidebar"},"tutorials/erc20":{"id":"tutorials/erc20","title":"ERC-20","description":"It\'s time for something that every smart contract developer has done at least once. Let\'s try to implement Erc20 standard. Of course, we are going to use the Odra Framework.","sidebar":"tutorialSidebar"},"tutorials/ownable":{"id":"tutorials/ownable","title":"Ownable","description":"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract\'s critical features.","sidebar":"tutorialSidebar"},"tutorials/owned-token":{"id":"tutorials/owned-token","title":"OwnedToken","description":"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/33e7c3de.003d7d55.js b/docs/assets/js/33e7c3de.003d7d55.js new file mode 100644 index 000000000..29aa42c9c --- /dev/null +++ b/docs/assets/js/33e7c3de.003d7d55.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3914],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(a),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,s=new Array(o);s[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var p=2;p<o;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},86747:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:3},s="Casper",i={unversionedId:"backends/casper",id:"version-0.7.0/backends/casper",title:"Casper",description:"The Casper backend allows you to compile your contracts into WASM files which can be deployed",source:"@site/versioned_docs/version-0.7.0/backends/03-casper.md",sourceDirName:"backends",slug:"/backends/casper",permalink:"/docs/backends/casper",draft:!1,tags:[],version:"0.7.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"MockVM",permalink:"/docs/backends/mock-vm"},next:{title:"Examples",permalink:"/docs/category/examples"}},l={},p=[{value:"Types",id:"types",level:2},{value:"Contract Env",id:"contract-env",level:2},{value:"Events",id:"events",level:3},{value:"Payable",id:"payable",level:3},{value:"Revert",id:"revert",level:3},{value:"Context",id:"context",level:3},{value:"Test Env",id:"test-env",level:2},{value:"Usage",id:"usage",level:2},{value:"Constructors",id:"constructors",level:2},{value:"WASM arguments",id:"wasm-arguments",level:3},{value:"Contract Deploys",id:"contract-deploys",level:2},{value:"Example: Deploy Counter",id:"example-deploy-counter",level:3},{value:"Example: Deploy ERC721",id:"example-deploy-erc721",level:3},{value:"Example: Deploy ERC1155",id:"example-deploy-erc1155",level:3},{value:"Sending CSPR to a contract",id:"sending-cspr-to-a-contract",level:2},{value:"Using proxy_caller.wasm",id:"using-proxy_callerwasm",level:3},{value:"Execution",id:"execution",level:2}],c={toc:p};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"casper"},"Casper"),(0,r.kt)("p",null,"The Casper backend allows you to compile your contracts into WASM files which can be deployed\nonto ",(0,r.kt)("a",{parentName:"p",href:"https://casper.network/"},"Casper Blockchain"),"\nand lets you to easily run them against ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-execution-engine"},"Casper's Execution Engine")," locally."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"A struct to be written into the storage must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait OdraType: \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("p",null,"The other exposed types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CallArgs")," - wraps around casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},(0,r.kt)("inlineCode",{parentName:"a"},"RuntimeArgs")),";"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," - U512 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"BlockTime")," - u64 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Address")," - an enum that encapsulates casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/account/struct.AccountHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"AccountHash"))," and ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/struct.ContractPackageHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ContractPackageHash")))),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances."),(0,r.kt)("h3",{id:"events"},"Events"),(0,r.kt)("p",null,"An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've\nalready learned from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/basics/events"},"events article"),", in Odra you emit an event, similarly, you would do it in ",(0,r.kt)("a",{parentName:"p",href:"https://docs.soliditylang.org/en/v0.8.15/contracts.html#example"},"Solidity"),"."),(0,r.kt)("p",null,"Under the hood, Odra integrates with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/make-software/casper-event-standard"},"Casper Event Standard")," and creates a few ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/struct.URef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"URef"),"s")," in the global state when a contract is being installed:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events")," - a dictionary that stores events' data."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_length")," - the evens count."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_ces_version")," - the version of ",(0,r.kt)("inlineCode",{parentName:"li"},"Casper Event Standard"),". "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_schema")," - a dictionary that stores event schemas.")),(0,r.kt)("p",null,"Besides that, all the events the contract emits are registered - events schemas are written to the storage under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__events_schema")," key."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Don't forget to expose events in the module using ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module(events = [...])]"),". ")),(0,r.kt)("p",null,"So, ",(0,r.kt)("inlineCode",{parentName:"p"},"Events")," are nothing different from any other data stored by a contract."),(0,r.kt)("p",null,"A struct to be an event must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"SerializableEvent")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait SerializableEvent: \n odra_types::event::OdraEvent + \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("h3",{id:"payable"},"Payable"),(0,r.kt)("p",null,"The first Odra idiom is a ",(0,r.kt)("inlineCode",{parentName:"p"},"Contract Main Purse"),". It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper ",(0,r.kt)("inlineCode",{parentName:"p"},"URef")," and a purse are created and stored under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse")," key."),(0,r.kt)("p",null,"Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo Purse"),". It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse."),(0,r.kt)("p",null,"Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable.\nIf under the way something goes wrong with the transfer, the contract reverts."),(0,r.kt)("p",null,"The transferred amount can be read inside the contract by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Odra expects the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," runtime argument to be attached to a contract call.\nIn case of its absence, the ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()")," returns zero.")),(0,r.kt)("h3",{id:"revert"},"Revert"),(0,r.kt)("p",null,"In Casper, we can stop the execution pretty straightforwardly - call the ",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::revert()"),".\nOdra adds an extra abstraction layer - in a contract ",(0,r.kt)("inlineCode",{parentName:"p"},"ExecutionError"),"s are defined, which ultimately are transformed into Casper's ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/enum.ApiError.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ApiError::User")),"."),(0,r.kt)("h3",{id:"context"},"Context"),(0,r.kt)("p",null,"Casper equips developers with very low-level tooling, which can be cumbersome for newcomers.\nIf you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_address()")," function takes the first element of the callstack (",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-contract/latest/casper_contract/contract_api/runtime/fn.get_call_stack.html"},(0,r.kt)("inlineCode",{parentName:"a"},"runtime::get_call_stack()")),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::caller()")," function takes the second element of the call stack (",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::get_call_stack()"),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"As mentioned in the ","[Payable]"," section, to store CSPR, each contract creates its purse. To read the contract balance, you call ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_balance"),", which checks the balance of the purse stored under ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse"),"."),(0,r.kt)("h2",{id:"test-env"},"Test Env"),(0,r.kt)("p",null,"Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Casper Execution Engine"),"."),(0,r.kt)("p",null,"In your test, you can freely switch execution context by setting as a caller (",(0,r.kt)("inlineCode",{parentName:"p"},"test_env::set_caller()"),") one of the 20 predefined accounts. Each account possesses the default amount of ",(0,r.kt)("inlineCode",{parentName:"p"},"Motes")," (100_000_000_000_000_000)."),(0,r.kt)("p",null,"The Test Env internally keeps track of the current ",(0,r.kt)("inlineCode",{parentName:"p"},"block time"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"error")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"attached value"),"."),(0,r.kt)("p",null,"Each test is executed on a fresh instance of the Test Env."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Name of the Casper backend in Odra is ",(0,r.kt)("inlineCode",{parentName:"p"},"casper"),", so to run the tests against it, simply pass it as a ",(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\nparameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"If you want to just generate a wasm file, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("h2",{id:"constructors"},"Constructors"),(0,r.kt)("p",null,"Let's define a basic Odra module that includes a constructor:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\nstruct Counter {\n value: Variable<u32>\n}\n\n#[odra::module]\nimpl Counter {\n #[odra(init)]\n pub initialize(&mut self, value: u32) {\n self.value.set(value);\n }\n}\n")),(0,r.kt)("p",null,"Read more about constructors ",(0,r.kt)("a",{parentName:"p",href:"/docs/advanced/attributes#init"},"here"),"."),(0,r.kt)("h3",{id:"wasm-arguments"},"WASM arguments"),(0,r.kt)("p",null,"When deploying a new contract you have to specify following arguments."),(0,r.kt)("p",null,"Required arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The key under which the package hash of the contract will be stored."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_allow_key_override")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true")," and the key specified in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," already exists, it will be overwritten."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_is_upgradable")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),", the contract will be deployed as upgradable.")),(0,r.kt)("p",null,"Optional arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_constructor")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. If the contract has the constructor entry point marked with ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]"),", this should be set to the constructor name."),(0,r.kt)("li",{parentName:"ul"},"constructor arguments that match entry point set in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_constructor"),".")),(0,r.kt)("h2",{id:"contract-deploys"},"Contract Deploys"),(0,r.kt)("h3",{id:"example-deploy-counter"},"Example: Deploy Counter"),(0,r.kt)("p",null,"To deploy your contract with a constructor using ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client"),", you need to pass the above arguments.\nAdditionally, you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," argument, which sets the arbitrary initial value for the counter."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 5000000000000 \\\n --session-path ./wasm/counter.wasm \\\n --session-arg "odra_cfg_package_hash_key_name:string:\'counter_package_hash\'" \\\n --session-arg "odra_cfg_allow_key_override:bool:\'true\'" \\\n --session-arg "odra_cfg_is_upgradable:bool:\'true\'" \\\n --session-arg "odra_cfg_constructor:string:\'initialize\'" \\\n --session-arg "value:u32:42" \n')),(0,r.kt)("p",null,"For a more in-depth tutorial, please refer to the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.casper.network/writing-contracts/"},"Casper's 'Writing On-Chain Code'"),"."),(0,r.kt)("h3",{id:"example-deploy-erc721"},"Example: Deploy ERC721"),(0,r.kt)("p",null,"Odra comes with a standard ERC721 token implementation.\nClone the main Odra repo and navigate to the ",(0,r.kt)("inlineCode",{parentName:"p"},"modules")," directory."),(0,r.kt)("p",null,"Firstly contract needs to be compiled."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper -c erc721_token\n")),(0,r.kt)("p",null,"It produces the ",(0,r.kt)("inlineCode",{parentName:"p"},"erc721_token.wasm")," file in the ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," directory."),(0,r.kt)("p",null,"Now it's time to deploy the contract."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 300000000000 \\\n --session-path ./wasm/erc721_token.wasm \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'my_nft'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'false'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"odra_cfg_constructor:string:'init'\" \\\n --session-arg \"name:string:'MyNFT'\" \\\n --session-arg \"symbol:string:'NFT'\" \\\n --session-arg \"base_uri:string:'https://example.com/'\"\n")),(0,r.kt)("p",null,"It's done.\nThe contract is deployed and ready to use.\nYour account is the owner of the contract and you can mint and burn tokens.\nFor more details see the code of the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.5.0/modules/src/erc721_token.rs"},"ERC721")," module."),(0,r.kt)("p",null,"To obtain the package hash of the contract search for ",(0,r.kt)("inlineCode",{parentName:"p"},"my_nft")," key\nin your account's named keys."),(0,r.kt)("h3",{id:"example-deploy-erc1155"},"Example: Deploy ERC1155"),(0,r.kt)("p",null,"The process is similar to the one described in the previous section."),(0,r.kt)("p",null,"Contract compilation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper -c erc1155_token\n")),(0,r.kt)("p",null,"Contract deployment:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 300000000000 \\\n --session-path ./wasm/erc1155_token.wasm \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'my_tokens'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'false'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"odra_cfg_constructor:string:'init'\" \\\n")),(0,r.kt)("p",null,"As previously, your account is the owner and can mint and burn tokens.\nFor more details see the code of the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.5.0/modules/src/erc1155_token.rs"},"ERC1155")," module."),(0,r.kt)("h2",{id:"sending-cspr-to-a-contract"},"Sending CSPR to a contract"),(0,r.kt)("p",null,"Defining payable entry points is described in ",(0,r.kt)("a",{parentName:"p",href:"/docs/basics/native-token"},"Native Token")," section."),(0,r.kt)("p",null,"What is happening under the hood is that Odra creates a new ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," argument for each payable\nentry point. The ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," needs to be top-upped with CSPR before calling the contract.\nWhen a contract adds CSPR to another contract call, Odra handles it for you.\nThe problem arises when you want to call an entry point and attach CSPR as an account.\nThe only way of doing that is by executing code in the sessions context, that\ntop-ups the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," and then calls the contract."),(0,r.kt)("p",null,"Odra provides a generic ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," that does exactly that.\nYou can build it by yourself from the main Odra repository, or use the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.4.0/odra-casper/livenet/resources/proxy_caller.wasm"},"proxy_caller.wasm"),"\nwe maintain."),(0,r.kt)("h3",{id:"using-proxy_callerwasm"},"Using proxy_caller.wasm"),(0,r.kt)("p",null,"To use the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," you need to attach the following arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"contract_package_hash")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"BytesArray(32)")," type. The package hash of the contract you want to call.\nResult of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," on ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/contracts/struct.ContractPackageHash.html"},"CasperPackageHash"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"entry_point")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The name of the entry point you want to call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"args")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bytes")," type. It is a serialized ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},"RuntimeArgs")," with the arguments you want to pass\nto the entry point. To be specific it is the result of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," method wrapped with ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/bytesrepr/struct.Bytes.html"},"Bytes")," type."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"attached_value"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<U512>")," type. The amount of CSPR you want to attach to the call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"amount"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"U512")," type. Should be the same value as ",(0,r.kt)("inlineCode",{parentName:"li"},"attached_value")," if not ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".\nIt is a special Casper argument that enables the access to account's main purse.")),(0,r.kt)("p",null,"Currently ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client")," doesn't allow building such arguments.\nYou have to build it using your SDK."),(0,r.kt)("h2",{id:"execution"},"Execution"),(0,r.kt)("p",null,"First thing Odra does with your code, is similar to the one used in ",(0,r.kt)("a",{parentName:"p",href:"/docs/backends/mock-vm"},"MockVM")," -\na list of entrypoints is generated, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[IR];\n id2[IR]--\x3eid3((WASM))\n id3((WASM))--\x3eid4[(Local Casper\\nExecution Engine)]\n id3((WASM))--\x3eid5[(Casper Network)]"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/34731735.d9ff4c00.js b/docs/assets/js/34731735.d9ff4c00.js new file mode 100644 index 000000000..0f622380e --- /dev/null +++ b/docs/assets/js/34731735.d9ff4c00.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5604],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),i=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=i(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,c=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=i(n),m=r,f=u["".concat(c,".").concat(m)]||u[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var i=2;i<s;i++)o[i]=n[i];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},70551:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:10,description:"Contracts calling contracts"},o="Cross calls",l={unversionedId:"basics/cross-calls",id:"basics/cross-calls",title:"Cross calls",description:"Contracts calling contracts",source:"@site/docs/basics/10-cross-calls.md",sourceDirName:"basics",slug:"/basics/cross-calls",permalink:"/docs/next/basics/cross-calls",draft:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Contracts calling contracts"},sidebar:"tutorialSidebar",previous:{title:"Events",permalink:"/docs/next/basics/events"},next:{title:"Modules",permalink:"/docs/next/basics/modules"}},c={},i=[{value:"Contract Ref",id:"contract-ref",level:2},{value:"Loading the contract",id:"loading-the-contract",level:3},{value:"Testing",id:"testing",level:2}],d={toc:i};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cross-calls"},"Cross calls"),(0,r.kt)("p",null,"To show how to handle calls between contracts, first, let's implement two of them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"use odra::prelude::*;\nuse odra::{Address, module::Module, UnwrapOrRevert, Var};\n\n#[odra::module]\npub struct CrossContract {\n pub math_engine: Var<Address>\n}\n\n#[odra::module]\nimpl CrossContract {\n pub fn init(&mut self, math_engine_address: Address) {\n self.math_engine.set(math_engine_address);\n }\n\n pub fn add_using_another(&self) -> u32 {\n let math_engine_address = self.math_engine.get().unwrap_or_revert(&self.env());\n MathEngineContractRef::new(self.env(), math_engine_address).add(3, 5)\n }\n}\n\n#[odra::module]\npub struct MathEngine;\n\n#[odra::module]\nimpl MathEngine {\n pub fn add(&self, n1: u32, n2: u32) -> u32 {\n n1 + n2\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract can add two numbers. ",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," takes an ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," in its init function and saves it in\nstorage for later use. If we deploy the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," first and take note of its address, we can then deploy\n",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," and use ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," to perform complicated calculations for us!"),(0,r.kt)("p",null,"To call the external contract, we use the ",(0,r.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}ContractRef")," that was created for us by Odra:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"MathEngineContractRef::new(self.env(), math_engine_address).add(3, 5)\n")),(0,r.kt)("h2",{id:"contract-ref"},"Contract Ref"),(0,r.kt)("p",null,"We mentioned ",(0,r.kt)("inlineCode",{parentName:"p"},"HostRef")," already in our ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/basics/testing"},"Testing")," article - a host side reference to already deployed contract."),(0,r.kt)("p",null,"In the module context we use a ",(0,r.kt)("inlineCode",{parentName:"p"},"ContractRef")," instead, to call other contracts."),(0,r.kt)("p",null,"Similarly to a ",(0,r.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}HostRef"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}ContractRef")," is generated automatically,\nby the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("p",null,"To get an instance of a contract reference, we the reference constructor function - ",(0,r.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}ContractRef::new(env: Rc<ContractEnv>, address: Address)"),", as shown above."),(0,r.kt)("p",null,"The reference implements all the public endpoints to the contract (those marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),"\nimpl), and the ",(0,r.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}ContractRef::address()")," function, which returns the address of the contract."),(0,r.kt)("h1",{id:"external-contracts"},"External Contracts"),(0,r.kt)("p",null,"Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI."),(0,r.kt)("p",null,"For that purpose, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra:external_contract]")," macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of."),(0,r.kt)("p",null,"Let's pretend the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," we defined is an external contract. There is a contract with ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function that adds two numbers somewhere."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"#[odra::external_contract]\npub trait Adder {\n fn add(&self, n1: u32, n2: u32) -> u32;\n}\n")),(0,r.kt)("p",null,"Analogously to modules, Odra creates the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderContractRef")," struct (and ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderHostRef")," to be used in tests, but do not implement the ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer")," trait). Having an address, in the module context we can call:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"AdderContractRef::new(self.env(), address).add(3, 5)\n")),(0,r.kt)("h3",{id:"loading-the-contract"},"Loading the contract"),(0,r.kt)("p",null,"Sometimes it is useful to load the deployed contract instead of deploying it by ourselves. This is especially useful when we want to test\nour contracts in ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/backends/livenet"},"Livenet")," backend. We can load the contract using ",(0,r.kt)("inlineCode",{parentName:"p"},"load")," method on the ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/bin/erc20_on_livenet.rs"',title:'"examples/bin/erc20_on_livenet.rs"'},'fn _load(env: &HostEnv) -> Erc20HostRef {\n let address = "hash-d26fcbd2106e37be975d2045c580334a6d7b9d0a241c2358a4db970dfd516945";\n let address = Address::from_str(address).unwrap();\n <Erc20HostRef as HostRefLoader>::load(env, address)\n}\n')),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Let's see how we can test our cross calls using this knowledge:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'}," use super::{CrossContractHostRef, CrossContractInitArgs, MathEngineHostRef};\n use odra::host::{Deployer, HostRef, NoArgs};\n\n#[test]\nfn test_cross_calls() {\n let test_env = odra_test::env();\n let math_engine_contract = MathEngineHostRef::deploy(&test_env, NoArgs);\n\n let init_args = CrossContractInitArgs {\n math_engine_address: *math_engine_contract.address()\n };\n let cross_contract = CrossContractHostRef::deploy(&test_env, init_args);\n\n assert_eq!(cross_contract.add_using_another(), 8);\n}\n")),(0,r.kt)("p",null,"Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function we want to use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"#[cfg(test)]\nmod tests {\n use crate::features::cross_calls::{Adder, AdderHostRef};\n use odra::{Address, host::{Deployer, HostRef, NoArgs}};\n \n #[test]\n fn test_ext() {\n let adder = AdderHostRef::new(test_env, get_adder_address()).add(3, 5)\n assert_eq!(adder.add(1, 2), 3);\n }\n\n fn get_adder_address() -> Address {\n let contract = MathEngineHostRef::deploy(&odra_test::env(), NoArgs);\n *contract.address()\n }\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/366.c9035d12.js b/docs/assets/js/366.c9035d12.js new file mode 100644 index 000000000..8bdddd3c3 --- /dev/null +++ b/docs/assets/js/366.c9035d12.js @@ -0,0 +1,42106 @@ +exports.id = 366; +exports.ids = [366]; +exports.modules = { + +/***/ 84182: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(82241)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_643__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_643__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_643__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_643__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_643__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_643__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_643__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_643__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_643__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_643__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_643__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_643__(__nested_webpack_require_643__.s = 7); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3185__) { + +"use strict"; + + +var FDLayoutConstants = __nested_webpack_require_3185__(0).FDLayoutConstants; + +function CoSEConstants() {} + +//CoSEConstants inherits static props in FDLayoutConstants +for (var prop in FDLayoutConstants) { + CoSEConstants[prop] = FDLayoutConstants[prop]; +} + +CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; +CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; +CoSEConstants.TILE = true; +CoSEConstants.TILING_PADDING_VERTICAL = 10; +CoSEConstants.TILING_PADDING_HORIZONTAL = 10; +CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout + +module.exports = CoSEConstants; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __nested_webpack_require_4002__) { + +"use strict"; + + +var FDLayoutEdge = __nested_webpack_require_4002__(0).FDLayoutEdge; + +function CoSEEdge(source, target, vEdge) { + FDLayoutEdge.call(this, source, target, vEdge); +} + +CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); +for (var prop in FDLayoutEdge) { + CoSEEdge[prop] = FDLayoutEdge[prop]; +} + +module.exports = CoSEEdge; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_4409__) { + +"use strict"; + + +var LGraph = __nested_webpack_require_4409__(0).LGraph; + +function CoSEGraph(parent, graphMgr, vGraph) { + LGraph.call(this, parent, graphMgr, vGraph); +} + +CoSEGraph.prototype = Object.create(LGraph.prototype); +for (var prop in LGraph) { + CoSEGraph[prop] = LGraph[prop]; +} + +module.exports = CoSEGraph; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __nested_webpack_require_4790__) { + +"use strict"; + + +var LGraphManager = __nested_webpack_require_4790__(0).LGraphManager; + +function CoSEGraphManager(layout) { + LGraphManager.call(this, layout); +} + +CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); +for (var prop in LGraphManager) { + CoSEGraphManager[prop] = LGraphManager[prop]; +} + +module.exports = CoSEGraphManager; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_5205__) { + +"use strict"; + + +var FDLayoutNode = __nested_webpack_require_5205__(0).FDLayoutNode; +var IMath = __nested_webpack_require_5205__(0).IMath; + +function CoSENode(gm, loc, size, vNode) { + FDLayoutNode.call(this, gm, loc, size, vNode); +} + +CoSENode.prototype = Object.create(FDLayoutNode.prototype); +for (var prop in FDLayoutNode) { + CoSENode[prop] = FDLayoutNode[prop]; +} + +CoSENode.prototype.move = function () { + var layout = this.graphManager.getLayout(); + this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; + this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; + + if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX); + } + + if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY); + } + + // a simple node, just move it + if (this.child == null) { + this.moveBy(this.displacementX, this.displacementY); + } + // an empty compound node, again just move it + else if (this.child.getNodes().length == 0) { + this.moveBy(this.displacementX, this.displacementY); + } + // non-empty compound node, propogate movement to children as well + else { + this.propogateDisplacementToChildren(this.displacementX, this.displacementY); + } + + layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); + + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + this.displacementX = 0; + this.displacementY = 0; +}; + +CoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) { + var nodes = this.getChild().getNodes(); + var node; + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + if (node.getChild() == null) { + node.moveBy(dX, dY); + node.displacementX += dX; + node.displacementY += dY; + } else { + node.propogateDisplacementToChildren(dX, dY); + } + } +}; + +CoSENode.prototype.setPred1 = function (pred1) { + this.pred1 = pred1; +}; + +CoSENode.prototype.getPred1 = function () { + return pred1; +}; + +CoSENode.prototype.getPred2 = function () { + return pred2; +}; + +CoSENode.prototype.setNext = function (next) { + this.next = next; +}; + +CoSENode.prototype.getNext = function () { + return next; +}; + +CoSENode.prototype.setProcessed = function (processed) { + this.processed = processed; +}; + +CoSENode.prototype.isProcessed = function () { + return processed; +}; + +module.exports = CoSENode; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_8085__) { + +"use strict"; + + +var FDLayout = __nested_webpack_require_8085__(0).FDLayout; +var CoSEGraphManager = __nested_webpack_require_8085__(4); +var CoSEGraph = __nested_webpack_require_8085__(3); +var CoSENode = __nested_webpack_require_8085__(5); +var CoSEEdge = __nested_webpack_require_8085__(2); +var CoSEConstants = __nested_webpack_require_8085__(1); +var FDLayoutConstants = __nested_webpack_require_8085__(0).FDLayoutConstants; +var LayoutConstants = __nested_webpack_require_8085__(0).LayoutConstants; +var Point = __nested_webpack_require_8085__(0).Point; +var PointD = __nested_webpack_require_8085__(0).PointD; +var Layout = __nested_webpack_require_8085__(0).Layout; +var Integer = __nested_webpack_require_8085__(0).Integer; +var IGeometry = __nested_webpack_require_8085__(0).IGeometry; +var LGraph = __nested_webpack_require_8085__(0).LGraph; +var Transform = __nested_webpack_require_8085__(0).Transform; + +function CoSELayout() { + FDLayout.call(this); + + this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled +} + +CoSELayout.prototype = Object.create(FDLayout.prototype); + +for (var prop in FDLayout) { + CoSELayout[prop] = FDLayout[prop]; +} + +CoSELayout.prototype.newGraphManager = function () { + var gm = new CoSEGraphManager(this); + this.graphManager = gm; + return gm; +}; + +CoSELayout.prototype.newGraph = function (vGraph) { + return new CoSEGraph(null, this.graphManager, vGraph); +}; + +CoSELayout.prototype.newNode = function (vNode) { + return new CoSENode(this.graphManager, vNode); +}; + +CoSELayout.prototype.newEdge = function (vEdge) { + return new CoSEEdge(null, null, vEdge); +}; + +CoSELayout.prototype.initParameters = function () { + FDLayout.prototype.initParameters.call(this, arguments); + if (!this.isSubLayout) { + if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { + this.idealEdgeLength = 10; + } else { + this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; + } + + this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + + // variables for tree reduction support + this.prunedNodesAll = []; + this.growTreeIterations = 0; + this.afterGrowthIterations = 0; + this.isTreeGrowing = false; + this.isGrowthFinished = false; + + // variables for cooling + this.coolingCycle = 0; + this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; + this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations; + this.coolingAdjuster = 1; + } +}; + +CoSELayout.prototype.layout = function () { + var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + if (createBendsAsNeeded) { + this.createBendpoints(); + this.graphManager.resetAllEdges(); + } + + this.level = 0; + return this.classicLayout(); +}; + +CoSELayout.prototype.classicLayout = function () { + this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); + this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); + this.calcNoOfChildrenForAllNodes(); + this.graphManager.calcLowestCommonAncestors(); + this.graphManager.calcInclusionTreeDepths(); + this.graphManager.getRoot().calcEstimatedSize(); + this.calcIdealEdgeLengths(); + + if (!this.incremental) { + var forest = this.getFlatForest(); + + // The graph associated with this layout is flat and a forest + if (forest.length > 0) { + this.positionNodesRadially(forest); + } + // The graph associated with this layout is not flat or a forest + else { + // Reduce the trees when incremental mode is not enabled and graph is not a forest + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.positionNodesRandomly(); + } + } else { + if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { + // Reduce the trees in incremental mode if only this constant is set to true + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + } + } + + this.initSpringEmbedder(); + this.runSpringEmbedder(); + + return true; +}; + +CoSELayout.prototype.tick = function () { + this.totalIterations++; + + if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.isConverged()) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + this.coolingCycle++; + + if (this.layoutQuality == 0) { + // quality - "draft" + this.coolingAdjuster = this.coolingCycle; + } else if (this.layoutQuality == 1) { + // quality - "default" + this.coolingAdjuster = this.coolingCycle / 3; + } + + // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3 + this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); + this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); + } + // Operations while tree is growing again + if (this.isTreeGrowing) { + if (this.growTreeIterations % 10 == 0) { + if (this.prunedNodesAll.length > 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + this.growTree(this.prunedNodesAll); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.graphManager.updateBounds(); + this.updateGrid(); + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + } else { + this.isTreeGrowing = false; + this.isGrowthFinished = true; + } + } + this.growTreeIterations++; + } + // Operations after growth is finished + if (this.isGrowthFinished) { + if (this.isConverged()) { + return true; + } + if (this.afterGrowthIterations % 10 == 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + } + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); + this.afterGrowthIterations++; + } + + var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; + var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; + + this.totalDisplacement = 0; + this.graphManager.updateBounds(); + this.calcSpringForces(); + this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); + this.calcGravitationalForces(); + this.moveNodes(); + this.animate(); + + return false; // Layout is not ended yet return false +}; + +CoSELayout.prototype.getPositionsData = function () { + var allNodes = this.graphManager.getAllNodes(); + var pData = {}; + for (var i = 0; i < allNodes.length; i++) { + var rect = allNodes[i].rect; + var id = allNodes[i].id; + pData[id] = { + id: id, + x: rect.getCenterX(), + y: rect.getCenterY(), + w: rect.width, + h: rect.height + }; + } + + return pData; +}; + +CoSELayout.prototype.runSpringEmbedder = function () { + this.initialAnimationPeriod = 25; + this.animationPeriod = this.initialAnimationPeriod; + var layoutEnded = false; + + // If aminate option is 'during' signal that layout is supposed to start iterating + if (FDLayoutConstants.ANIMATE === 'during') { + this.emit('layoutstarted'); + } else { + // If aminate option is 'during' tick() function will be called on index.js + while (!layoutEnded) { + layoutEnded = this.tick(); + } + + this.graphManager.updateBounds(); + } +}; + +CoSELayout.prototype.calculateNodesToApplyGravitationTo = function () { + var nodeList = []; + var graph; + + var graphs = this.graphManager.getGraphs(); + var size = graphs.length; + var i; + for (i = 0; i < size; i++) { + graph = graphs[i]; + + graph.updateConnected(); + + if (!graph.isConnected) { + nodeList = nodeList.concat(graph.getNodes()); + } + } + + return nodeList; +}; + +CoSELayout.prototype.createBendpoints = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + var visited = new Set(); + var i; + for (i = 0; i < edges.length; i++) { + var edge = edges[i]; + + if (!visited.has(edge)) { + var source = edge.getSource(); + var target = edge.getTarget(); + + if (source == target) { + edge.getBendpoints().push(new PointD()); + edge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(edge); + visited.add(edge); + } else { + var edgeList = []; + + edgeList = edgeList.concat(source.getEdgeListToNode(target)); + edgeList = edgeList.concat(target.getEdgeListToNode(source)); + + if (!visited.has(edgeList[0])) { + if (edgeList.length > 1) { + var k; + for (k = 0; k < edgeList.length; k++) { + var multiEdge = edgeList[k]; + multiEdge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(multiEdge); + } + } + edgeList.forEach(function (edge) { + visited.add(edge); + }); + } + } + } + + if (visited.size == edges.length) { + break; + } + } +}; + +CoSELayout.prototype.positionNodesRadially = function (forest) { + // We tile the trees to a grid row by row; first tree starts at (0,0) + var currentStartingPoint = new Point(0, 0); + var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); + var height = 0; + var currentY = 0; + var currentX = 0; + var point = new PointD(0, 0); + + for (var i = 0; i < forest.length; i++) { + if (i % numberOfColumns == 0) { + // Start of a new row, make the x coordinate 0, increment the + // y coordinate with the max height of the previous row + currentX = 0; + currentY = height; + + if (i != 0) { + currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; + } + + height = 0; + } + + var tree = forest[i]; + + // Find the center of the tree + var centerNode = Layout.findCenterOfTree(tree); + + // Set the staring point of the next tree + currentStartingPoint.x = currentX; + currentStartingPoint.y = currentY; + + // Do a radial layout starting with the center + point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); + + if (point.y > height) { + height = Math.floor(point.y); + } + + currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); + } + + this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2)); +}; + +CoSELayout.radialLayout = function (tree, centerNode, startingPoint) { + var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); + CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); + var bounds = LGraph.calculateBounds(tree); + + var transform = new Transform(); + transform.setDeviceOrgX(bounds.getMinX()); + transform.setDeviceOrgY(bounds.getMinY()); + transform.setWorldOrgX(startingPoint.x); + transform.setWorldOrgY(startingPoint.y); + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + node.transform(transform); + } + + var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY()); + + return transform.inverseTransformPoint(bottomRight); +}; + +CoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) { + // First, position this node by finding its angle. + var halfInterval = (endAngle - startAngle + 1) / 2; + + if (halfInterval < 0) { + halfInterval += 180; + } + + var nodeAngle = (halfInterval + startAngle) % 360; + var teta = nodeAngle * IGeometry.TWO_PI / 360; + + // Make polar to java cordinate conversion. + var cos_teta = Math.cos(teta); + var x_ = distance * Math.cos(teta); + var y_ = distance * Math.sin(teta); + + node.setCenter(x_, y_); + + // Traverse all neighbors of this node and recursively call this + // function. + var neighborEdges = []; + neighborEdges = neighborEdges.concat(node.getEdges()); + var childCount = neighborEdges.length; + + if (parentOfNode != null) { + childCount--; + } + + var branchCount = 0; + + var incEdgesCount = neighborEdges.length; + var startIndex; + + var edges = node.getEdgesBetween(parentOfNode); + + // If there are multiple edges, prune them until there remains only one + // edge. + while (edges.length > 1) { + //neighborEdges.remove(edges.remove(0)); + var temp = edges[0]; + edges.splice(0, 1); + var index = neighborEdges.indexOf(temp); + if (index >= 0) { + neighborEdges.splice(index, 1); + } + incEdgesCount--; + childCount--; + } + + if (parentOfNode != null) { + //assert edges.length == 1; + startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount; + } else { + startIndex = 0; + } + + var stepAngle = Math.abs(endAngle - startAngle) / childCount; + + for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) { + var currentNeighbor = neighborEdges[i].getOtherEnd(node); + + // Don't back traverse to root node in current tree. + if (currentNeighbor == parentOfNode) { + continue; + } + + var childStartAngle = (startAngle + branchCount * stepAngle) % 360; + var childEndAngle = (childStartAngle + stepAngle) % 360; + + CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation); + + branchCount++; + } +}; + +CoSELayout.maxDiagonalInTree = function (tree) { + var maxDiagonal = Integer.MIN_VALUE; + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + var diagonal = node.getDiagonal(); + + if (diagonal > maxDiagonal) { + maxDiagonal = diagonal; + } + } + + return maxDiagonal; +}; + +CoSELayout.prototype.calcRepulsionRange = function () { + // formula is 2 x (level + 1) x idealEdgeLength + return 2 * (this.level + 1) * this.idealEdgeLength; +}; + +// Tiling methods + +// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's +CoSELayout.prototype.groupZeroDegreeMembers = function () { + var self = this; + // array of [parent_id x oneDegreeNode_id] + var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members + this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled + this.idToDummyNode = {}; // A map of id to dummy node + + var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled + var allNodes = this.graphManager.getAllNodes(); + + // Fill zero degree list + for (var i = 0; i < allNodes.length; i++) { + var node = allNodes[i]; + var parent = node.getParent(); + // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list + if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) { + zeroDegree.push(node); + } + } + + // Create a map of parent node and its zero degree members + for (var i = 0; i < zeroDegree.length; i++) { + var node = zeroDegree[i]; // Zero degree node itself + var p_id = node.getParent().id; // Parent id + + if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; + + tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups + } + + // If there are at least two nodes at a level, create a dummy compound for them + Object.keys(tempMemberGroups).forEach(function (p_id) { + if (tempMemberGroups[p_id].length > 1) { + var dummyCompoundId = "DummyCompound_" + p_id; // The id of dummy compound which will be created soon + self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups + + var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound + + // Create a dummy compound with calculated id + var dummyCompound = new CoSENode(self.graphManager); + dummyCompound.id = dummyCompoundId; + dummyCompound.paddingLeft = parent.paddingLeft || 0; + dummyCompound.paddingRight = parent.paddingRight || 0; + dummyCompound.paddingBottom = parent.paddingBottom || 0; + dummyCompound.paddingTop = parent.paddingTop || 0; + + self.idToDummyNode[dummyCompoundId] = dummyCompound; + + var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound); + var parentGraph = parent.getChild(); + + // Add dummy compound to parent the graph + parentGraph.add(dummyCompound); + + // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent + for (var i = 0; i < tempMemberGroups[p_id].length; i++) { + var node = tempMemberGroups[p_id][i]; + + parentGraph.remove(node); + dummyParentGraph.add(node); + } + } + }); +}; + +CoSELayout.prototype.clearCompounds = function () { + var childGraphMap = {}; + var idToNode = {}; + + // Get compound ordering by finding the inner one first + this.performDFSOnCompounds(); + + for (var i = 0; i < this.compoundOrder.length; i++) { + + idToNode[this.compoundOrder[i].id] = this.compoundOrder[i]; + childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes()); + + // Remove children of compounds + this.graphManager.remove(this.compoundOrder[i].getChild()); + this.compoundOrder[i].child = null; + } + + this.graphManager.resetAllNodes(); + + // Tile the removed children + this.tileCompoundMembers(childGraphMap, idToNode); +}; + +CoSELayout.prototype.clearZeroDegreeMembers = function () { + var self = this; + var tiledZeroDegreePack = this.tiledZeroDegreePack = []; + + Object.keys(this.memberGroups).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound + + tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + // Set the width and height of the dummy compound as calculated + compoundNode.rect.width = tiledZeroDegreePack[id].width; + compoundNode.rect.height = tiledZeroDegreePack[id].height; + }); +}; + +CoSELayout.prototype.repopulateCompounds = function () { + for (var i = this.compoundOrder.length - 1; i >= 0; i--) { + var lCompoundNode = this.compoundOrder[i]; + var id = lCompoundNode.id; + var horizontalMargin = lCompoundNode.paddingLeft; + var verticalMargin = lCompoundNode.paddingTop; + + this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); + } +}; + +CoSELayout.prototype.repopulateZeroDegreeMembers = function () { + var self = this; + var tiledPack = this.tiledZeroDegreePack; + + Object.keys(tiledPack).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id + var horizontalMargin = compoundNode.paddingLeft; + var verticalMargin = compoundNode.paddingTop; + + // Adjust the positions of nodes wrt its compound + self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); + }); +}; + +CoSELayout.prototype.getToBeTiled = function (node) { + var id = node.id; + //firstly check the previous results + if (this.toBeTiled[id] != null) { + return this.toBeTiled[id]; + } + + //only compound nodes are to be tiled + var childGraph = node.getChild(); + if (childGraph == null) { + this.toBeTiled[id] = false; + return false; + } + + var children = childGraph.getNodes(); // Get the children nodes + + //a compound node is not to be tiled if all of its compound children are not to be tiled + for (var i = 0; i < children.length; i++) { + var theChild = children[i]; + + if (this.getNodeDegree(theChild) > 0) { + this.toBeTiled[id] = false; + return false; + } + + //pass the children not having the compound structure + if (theChild.getChild() == null) { + this.toBeTiled[theChild.id] = false; + continue; + } + + if (!this.getToBeTiled(theChild)) { + this.toBeTiled[id] = false; + return false; + } + } + this.toBeTiled[id] = true; + return true; +}; + +// Get degree of a node depending of its edges and independent of its children +CoSELayout.prototype.getNodeDegree = function (node) { + var id = node.id; + var edges = node.getEdges(); + var degree = 0; + + // For the edges connected + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + if (edge.getSource().id !== edge.getTarget().id) { + degree = degree + 1; + } + } + return degree; +}; + +// Get degree of a node with its children +CoSELayout.prototype.getNodeDegreeWithChildren = function (node) { + var degree = this.getNodeDegree(node); + if (node.getChild() == null) { + return degree; + } + var children = node.getChild().getNodes(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + degree += this.getNodeDegreeWithChildren(child); + } + return degree; +}; + +CoSELayout.prototype.performDFSOnCompounds = function () { + this.compoundOrder = []; + this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); +}; + +CoSELayout.prototype.fillCompexOrderByDFS = function (children) { + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.getChild() != null) { + this.fillCompexOrderByDFS(child.getChild().getNodes()); + } + if (this.getToBeTiled(child)) { + this.compoundOrder.push(child); + } + } +}; + +/** +* This method places each zero degree member wrt given (x,y) coordinates (top left). +*/ +CoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) { + x += compoundHorizontalMargin; + y += compoundVerticalMargin; + + var left = x; + + for (var i = 0; i < organization.rows.length; i++) { + var row = organization.rows[i]; + x = left; + var maxHeight = 0; + + for (var j = 0; j < row.length; j++) { + var lnode = row[j]; + + lnode.rect.x = x; // + lnode.rect.width / 2; + lnode.rect.y = y; // + lnode.rect.height / 2; + + x += lnode.rect.width + organization.horizontalPadding; + + if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; + } + + y += maxHeight + organization.verticalPadding; + } +}; + +CoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) { + var self = this; + this.tiledMemberPack = []; + + Object.keys(childGraphMap).forEach(function (id) { + // Get the compound node + var compoundNode = idToNode[id]; + + self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + compoundNode.rect.width = self.tiledMemberPack[id].width; + compoundNode.rect.height = self.tiledMemberPack[id].height; + }); +}; + +CoSELayout.prototype.tileNodes = function (nodes, minWidth) { + var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; + var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; + var organization = { + rows: [], + rowWidth: [], + rowHeight: [], + width: 0, + height: minWidth, // assume minHeight equals to minWidth + verticalPadding: verticalPadding, + horizontalPadding: horizontalPadding + }; + + // Sort the nodes in ascending order of their areas + nodes.sort(function (n1, n2) { + if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1; + if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1; + return 0; + }); + + // Create the organization -> tile members + for (var i = 0; i < nodes.length; i++) { + var lNode = nodes[i]; + + if (organization.rows.length == 0) { + this.insertNodeToRow(organization, lNode, 0, minWidth); + } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { + this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth); + } else { + this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); + } + + this.shiftToLastRow(organization); + } + + return organization; +}; + +CoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) { + var minCompoundSize = minWidth; + + // Add new row if needed + if (rowIndex == organization.rows.length) { + var secondDimension = []; + + organization.rows.push(secondDimension); + organization.rowWidth.push(minCompoundSize); + organization.rowHeight.push(0); + } + + // Update row width + var w = organization.rowWidth[rowIndex] + node.rect.width; + + if (organization.rows[rowIndex].length > 0) { + w += organization.horizontalPadding; + } + + organization.rowWidth[rowIndex] = w; + // Update compound width + if (organization.width < w) { + organization.width = w; + } + + // Update height + var h = node.rect.height; + if (rowIndex > 0) h += organization.verticalPadding; + + var extraHeight = 0; + if (h > organization.rowHeight[rowIndex]) { + extraHeight = organization.rowHeight[rowIndex]; + organization.rowHeight[rowIndex] = h; + extraHeight = organization.rowHeight[rowIndex] - extraHeight; + } + + organization.height += extraHeight; + + // Insert node + organization.rows[rowIndex].push(node); +}; + +//Scans the rows of an organization and returns the one with the min width +CoSELayout.prototype.getShortestRowIndex = function (organization) { + var r = -1; + var min = Number.MAX_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + if (organization.rowWidth[i] < min) { + r = i; + min = organization.rowWidth[i]; + } + } + return r; +}; + +//Scans the rows of an organization and returns the one with the max width +CoSELayout.prototype.getLongestRowIndex = function (organization) { + var r = -1; + var max = Number.MIN_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + + if (organization.rowWidth[i] > max) { + r = i; + max = organization.rowWidth[i]; + } + } + + return r; +}; + +/** +* This method checks whether adding extra width to the organization violates +* the aspect ratio(1) or not. +*/ +CoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) { + + var sri = this.getShortestRowIndex(organization); + + if (sri < 0) { + return true; + } + + var min = organization.rowWidth[sri]; + + if (min + organization.horizontalPadding + extraWidth <= organization.width) return true; + + var hDiff = 0; + + // Adding to an existing row + if (organization.rowHeight[sri] < extraHeight) { + if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; + } + + var add_to_row_ratio; + if (organization.width - min >= extraWidth + organization.horizontalPadding) { + add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding); + } else { + add_to_row_ratio = (organization.height + hDiff) / organization.width; + } + + // Adding a new row for this node + hDiff = extraHeight + organization.verticalPadding; + var add_new_row_ratio; + if (organization.width < extraWidth) { + add_new_row_ratio = (organization.height + hDiff) / extraWidth; + } else { + add_new_row_ratio = (organization.height + hDiff) / organization.width; + } + + if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; + + if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; + + return add_to_row_ratio < add_new_row_ratio; +}; + +//If moving the last node from the longest row and adding it to the last +//row makes the bounding box smaller, do it. +CoSELayout.prototype.shiftToLastRow = function (organization) { + var longest = this.getLongestRowIndex(organization); + var last = organization.rowWidth.length - 1; + var row = organization.rows[longest]; + var node = row[row.length - 1]; + + var diff = node.width + organization.horizontalPadding; + + // Check if there is enough space on the last row + if (organization.width - organization.rowWidth[last] > diff && longest != last) { + // Remove the last element of the longest row + row.splice(-1, 1); + + // Push it to the last row + organization.rows[last].push(node); + + organization.rowWidth[longest] = organization.rowWidth[longest] - diff; + organization.rowWidth[last] = organization.rowWidth[last] + diff; + organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; + + // Update heights of the organization + var maxHeight = Number.MIN_VALUE; + for (var i = 0; i < row.length; i++) { + if (row[i].height > maxHeight) maxHeight = row[i].height; + } + if (longest > 0) maxHeight += organization.verticalPadding; + + var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + + organization.rowHeight[longest] = maxHeight; + if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding; + + var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + organization.height += finalTotal - prevTotal; + + this.shiftToLastRow(organization); + } +}; + +CoSELayout.prototype.tilingPreLayout = function () { + if (CoSEConstants.TILE) { + // Find zero degree nodes and create a compound for each level + this.groupZeroDegreeMembers(); + // Tile and clear children of each compound + this.clearCompounds(); + // Separately tile and clear zero degree nodes for each level + this.clearZeroDegreeMembers(); + } +}; + +CoSELayout.prototype.tilingPostLayout = function () { + if (CoSEConstants.TILE) { + this.repopulateZeroDegreeMembers(); + this.repopulateCompounds(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: Tree Reduction methods +// ----------------------------------------------------------------------------- +// Reduce trees +CoSELayout.prototype.reduceTrees = function () { + var prunedNodesAll = []; + var containsLeaf = true; + var node; + + while (containsLeaf) { + var allNodes = this.graphManager.getAllNodes(); + var prunedNodesInStepTemp = []; + containsLeaf = false; + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) { + prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]); + containsLeaf = true; + } + } + if (containsLeaf == true) { + var prunedNodesInStep = []; + for (var j = 0; j < prunedNodesInStepTemp.length; j++) { + if (prunedNodesInStepTemp[j][0].getEdges().length == 1) { + prunedNodesInStep.push(prunedNodesInStepTemp[j]); + prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]); + } + } + prunedNodesAll.push(prunedNodesInStep); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); + } + } + this.prunedNodesAll = prunedNodesAll; +}; + +// Grow tree one step +CoSELayout.prototype.growTree = function (prunedNodesAll) { + var lengthOfPrunedNodesInStep = prunedNodesAll.length; + var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; + + var nodeData; + for (var i = 0; i < prunedNodesInStep.length; i++) { + nodeData = prunedNodesInStep[i]; + + this.findPlaceforPrunedNode(nodeData); + + nodeData[2].add(nodeData[0]); + nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target); + } + + prunedNodesAll.splice(prunedNodesAll.length - 1, 1); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); +}; + +// Find an appropriate position to replace pruned node, this method can be improved +CoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) { + + var gridForPrunedNode; + var nodeToConnect; + var prunedNode = nodeData[0]; + if (prunedNode == nodeData[1].source) { + nodeToConnect = nodeData[1].target; + } else { + nodeToConnect = nodeData[1].source; + } + var startGridX = nodeToConnect.startX; + var finishGridX = nodeToConnect.finishX; + var startGridY = nodeToConnect.startY; + var finishGridY = nodeToConnect.finishY; + + var upNodeCount = 0; + var downNodeCount = 0; + var rightNodeCount = 0; + var leftNodeCount = 0; + var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; + + if (startGridY > 0) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1; + } + } + if (finishGridX < this.grid.length - 1) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1; + } + } + if (finishGridY < this.grid[0].length - 1) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1; + } + } + if (startGridX > 0) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1; + } + } + var min = Integer.MAX_VALUE; + var minCount; + var minIndex; + for (var j = 0; j < controlRegions.length; j++) { + if (controlRegions[j] < min) { + min = controlRegions[j]; + minCount = 1; + minIndex = j; + } else if (controlRegions[j] == min) { + minCount++; + } + } + + if (minCount == 3 && min == 0) { + if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { + gridForPrunedNode = 1; + } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 0; + } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 3; + } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 2; + } + } else if (minCount == 2 && min == 0) { + var random = Math.floor(Math.random() * 2); + if (controlRegions[0] == 0 && controlRegions[1] == 0) { + ; + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 1; + } + } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 3; + } + } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 3; + } + } else { + if (random == 0) { + gridForPrunedNode = 2; + } else { + gridForPrunedNode = 3; + } + } + } else if (minCount == 4 && min == 0) { + var random = Math.floor(Math.random() * 4); + gridForPrunedNode = random; + } else { + gridForPrunedNode = minIndex; + } + + if (gridForPrunedNode == 0) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); + } else if (gridForPrunedNode == 1) { + prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } else if (gridForPrunedNode == 2) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); + } else { + prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } +}; + +module.exports = CoSELayout; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_45620__) { + +"use strict"; + + +var coseBase = {}; + +coseBase.layoutBase = __nested_webpack_require_45620__(0); +coseBase.CoSEConstants = __nested_webpack_require_45620__(1); +coseBase.CoSEEdge = __nested_webpack_require_45620__(2); +coseBase.CoSEGraph = __nested_webpack_require_45620__(3); +coseBase.CoSEGraphManager = __nested_webpack_require_45620__(4); +coseBase.CoSELayout = __nested_webpack_require_45620__(6); +coseBase.CoSENode = __nested_webpack_require_45620__(5); + +module.exports = coseBase; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 14607: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(84182)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_659__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_659__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_659__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_659__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_659__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_659__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_659__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_659__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_659__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_659__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_659__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_659__(__nested_webpack_require_659__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3201__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_3201__(0).layoutBase.LayoutConstants; +var FDLayoutConstants = __nested_webpack_require_3201__(0).layoutBase.FDLayoutConstants; +var CoSEConstants = __nested_webpack_require_3201__(0).CoSEConstants; +var CoSELayout = __nested_webpack_require_3201__(0).CoSELayout; +var CoSENode = __nested_webpack_require_3201__(0).CoSENode; +var PointD = __nested_webpack_require_3201__(0).layoutBase.PointD; +var DimensionD = __nested_webpack_require_3201__(0).layoutBase.DimensionD; + +var defaults = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // 'draft', 'default' or 'proof" + // - 'draft' fast cooling rate + // - 'default' moderate cooling rate + // - "proof" slow cooling rate + quality: 'default', + // include labels in node dimensions + nodeDimensionsIncludeLabels: false, + // number of ticks per frame; higher is faster but more jerky + refresh: 30, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 10, + // Whether to enable incremental mode + randomize: true, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: 4500, + // Ideal edge (non nested) length + idealEdgeLength: 50, + // Divisor to compute edge forces + edgeElasticity: 0.45, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 0.1, + // Gravity force (constant) + gravity: 0.25, + // Maximum number of iterations to perform + numIter: 2500, + // For enabling tiling + tile: true, + // Type of layout animation. The option set is {'during', 'end', false} + animate: 'end', + // Duration for animate:end + animationDuration: 500, + // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingVertical: 10, + // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingHorizontal: 10, + // Gravity range (constant) for compounds + gravityRangeCompound: 1.5, + // Gravity force (constant) for compounds + gravityCompound: 1.0, + // Gravity range (constant) + gravityRange: 3.8, + // Initial cooling factor for incremental layout + initialEnergyOnIncremental: 0.5 +}; + +function extend(defaults, options) { + var obj = {}; + + for (var i in defaults) { + obj[i] = defaults[i]; + } + + for (var i in options) { + obj[i] = options[i]; + } + + return obj; +}; + +function _CoSELayout(_options) { + this.options = extend(defaults, _options); + getUserOptions(this.options); +} + +var getUserOptions = function getUserOptions(options) { + if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion; + if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength; + if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity; + if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor; + if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity; + if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter; + if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange; + if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound; + if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound; + if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental; + + if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1; + + CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels; + CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize; + CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate; + CoSEConstants.TILE = options.tile; + CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical; + CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal; +}; + +_CoSELayout.prototype.run = function () { + var ready; + var frameId; + var options = this.options; + var idToLNode = this.idToLNode = {}; + var layout = this.layout = new CoSELayout(); + var self = this; + + self.stopped = false; + + this.cy = this.options.cy; + + this.cy.trigger({ type: 'layoutstart', layout: this }); + + var gm = layout.newGraphManager(); + this.gm = gm; + + var nodes = this.options.eles.nodes(); + var edges = this.options.eles.edges(); + + this.root = gm.addRoot(); + this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout); + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var sourceNode = this.idToLNode[edge.data("source")]; + var targetNode = this.idToLNode[edge.data("target")]; + if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { + var e1 = gm.add(layout.newEdge(), sourceNode, targetNode); + e1.id = edge.id(); + } + } + + var getPositions = function getPositions(ele, i) { + if (typeof ele === "number") { + ele = i; + } + var theId = ele.data('id'); + var lNode = self.idToLNode[theId]; + + return { + x: lNode.getRect().getCenterX(), + y: lNode.getRect().getCenterY() + }; + }; + + /* + * Reposition nodes in iterations animatedly + */ + var iterateAnimated = function iterateAnimated() { + // Thigs to perform after nodes are repositioned on screen + var afterReposition = function afterReposition() { + if (options.fit) { + options.cy.fit(options.eles, options.padding); + } + + if (!ready) { + ready = true; + self.cy.one('layoutready', options.ready); + self.cy.trigger({ type: 'layoutready', layout: self }); + } + }; + + var ticksPerFrame = self.options.refresh; + var isDone; + + for (var i = 0; i < ticksPerFrame && !isDone; i++) { + isDone = self.stopped || self.layout.tick(); + } + + // If layout is done + if (isDone) { + // If the layout is not a sublayout and it is successful perform post layout. + if (layout.checkLayoutSuccess() && !layout.isSubLayout) { + layout.doPostLayout(); + } + + // If layout has a tilingPostLayout function property call it. + if (layout.tilingPostLayout) { + layout.tilingPostLayout(); + } + + layout.isLayoutFinished = true; + + self.options.eles.nodes().positions(getPositions); + + afterReposition(); + + // trigger layoutstop when the layout stops (e.g. finishes) + self.cy.one('layoutstop', self.options.stop); + self.cy.trigger({ type: 'layoutstop', layout: self }); + + if (frameId) { + cancelAnimationFrame(frameId); + } + + ready = false; + return; + } + + var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling + + // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds) + // use position of their ancestors or dummy ancestors + options.eles.nodes().positions(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + // If ele is a compound node, then its position will be defined by its children + if (!ele.isParent()) { + var theId = ele.id(); + var pNode = animationData[theId]; + var temp = ele; + // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well) + while (pNode == null) { + pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')]; + animationData[theId] = pNode; + temp = temp.parent()[0]; + if (temp == undefined) { + break; + } + } + if (pNode != null) { + return { + x: pNode.x, + y: pNode.y + }; + } else { + return { + x: ele.position('x'), + y: ele.position('y') + }; + } + } + }); + + afterReposition(); + + frameId = requestAnimationFrame(iterateAnimated); + }; + + /* + * Listen 'layoutstarted' event and start animated iteration if animate option is 'during' + */ + layout.addListener('layoutstarted', function () { + if (self.options.animate === 'during') { + frameId = requestAnimationFrame(iterateAnimated); + } + }); + + layout.runLayout(); // Run cose layout + + /* + * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed) + */ + if (this.options.animate !== "during") { + self.options.eles.nodes().not(":parent").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter + ready = false; + } + + return this; // chaining +}; + +//Get the top most ones of a list of nodes +_CoSELayout.prototype.getTopMostNodes = function (nodes) { + var nodesMap = {}; + for (var i = 0; i < nodes.length; i++) { + nodesMap[nodes[i].id()] = true; + } + var roots = nodes.filter(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + var parent = ele.parent()[0]; + while (parent != null) { + if (nodesMap[parent.id()]) { + return false; + } + parent = parent.parent()[0]; + } + return true; + }); + + return roots; +}; + +_CoSELayout.prototype.processChildrenList = function (parent, children, layout) { + var size = children.length; + for (var i = 0; i < size; i++) { + var theChild = children[i]; + var children_of_children = theChild.children(); + var theNode; + + var dimensions = theChild.layoutDimensions({ + nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels + }); + + if (theChild.outerWidth() != null && theChild.outerHeight() != null) { + theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h)))); + } else { + theNode = parent.add(new CoSENode(this.graphManager)); + } + // Attach id to the layout node + theNode.id = theChild.data("id"); + // Attach the paddings of cy node to layout node + theNode.paddingLeft = parseInt(theChild.css('padding')); + theNode.paddingTop = parseInt(theChild.css('padding')); + theNode.paddingRight = parseInt(theChild.css('padding')); + theNode.paddingBottom = parseInt(theChild.css('padding')); + + //Attach the label properties to compound if labels will be included in node dimensions + if (this.options.nodeDimensionsIncludeLabels) { + if (theChild.isParent()) { + var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w; + var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h; + var labelPos = theChild.css("text-halign"); + theNode.labelWidth = labelWidth; + theNode.labelHeight = labelHeight; + theNode.labelPos = labelPos; + } + } + + // Map the layout node + this.idToLNode[theChild.data("id")] = theNode; + + if (isNaN(theNode.rect.x)) { + theNode.rect.x = 0; + } + + if (isNaN(theNode.rect.y)) { + theNode.rect.y = 0; + } + + if (children_of_children != null && children_of_children.length > 0) { + var theNewGraph; + theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode); + this.processChildrenList(theNewGraph, children_of_children, layout); + } + } +}; + +/** + * @brief : called on continuous layouts to stop them before they finish + */ +_CoSELayout.prototype.stop = function () { + this.stopped = true; + + return this; // chaining +}; + +var register = function register(cytoscape) { + // var Layout = getLayout( cytoscape ); + + cytoscape('layout', 'cose-bilkent', _CoSELayout); +}; + +// auto reg for globals +if (typeof cytoscape !== 'undefined') { + register(cytoscape); +} + +module.exports = register; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 59058: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +/** + * Copyright (c) 2016-2022, The Cytoscape Consortium. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the “Software”), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + + +var debounce = __webpack_require__(23279); +var Heap = __webpack_require__(54485); +var get = __webpack_require__(27361); +var set = __webpack_require__(36968); +var toPath = __webpack_require__(30084); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce); +var Heap__default = /*#__PURE__*/_interopDefaultLegacy(Heap); +var get__default = /*#__PURE__*/_interopDefaultLegacy(get); +var set__default = /*#__PURE__*/_interopDefaultLegacy(set); +var toPath__default = /*#__PURE__*/_interopDefaultLegacy(toPath); + +function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); +} + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); +} + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +var window$1 = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef + +var navigator = window$1 ? window$1.navigator : null; +window$1 ? window$1.document : null; + +var typeofstr = _typeof(''); + +var typeofobj = _typeof({}); + +var typeoffn = _typeof(function () {}); + +var typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement); + +var instanceStr = function instanceStr(obj) { + return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null; +}; + +var string = function string(obj) { + return obj != null && _typeof(obj) == typeofstr; +}; +var fn$6 = function fn(obj) { + return obj != null && _typeof(obj) === typeoffn; +}; +var array = function array(obj) { + return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array); +}; +var plainObject = function plainObject(obj) { + return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object; +}; +var object = function object(obj) { + return obj != null && _typeof(obj) === typeofobj; +}; +var number$1 = function number(obj) { + return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj); +}; +var integer = function integer(obj) { + return number$1(obj) && Math.floor(obj) === obj; +}; +var htmlElement = function htmlElement(obj) { + if ('undefined' === typeofhtmlele) { + return undefined; + } else { + return null != obj && obj instanceof HTMLElement; + } +}; +var elementOrCollection = function elementOrCollection(obj) { + return element(obj) || collection(obj); +}; +var element = function element(obj) { + return instanceStr(obj) === 'collection' && obj._private.single; +}; +var collection = function collection(obj) { + return instanceStr(obj) === 'collection' && !obj._private.single; +}; +var core = function core(obj) { + return instanceStr(obj) === 'core'; +}; +var stylesheet = function stylesheet(obj) { + return instanceStr(obj) === 'stylesheet'; +}; +var event = function event(obj) { + return instanceStr(obj) === 'event'; +}; +var emptyString = function emptyString(obj) { + if (obj === undefined || obj === null) { + // null is empty + return true; + } else if (obj === '' || obj.match(/^\s+$/)) { + return true; // empty string is empty + } + + return false; // otherwise, we don't know what we've got +}; +var domElement = function domElement(obj) { + if (typeof HTMLElement === 'undefined') { + return false; // we're not in a browser so it doesn't matter + } else { + return obj instanceof HTMLElement; + } +}; +var boundingBox = function boundingBox(obj) { + return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2); +}; +var promise = function promise(obj) { + return object(obj) && fn$6(obj.then); +}; +var ms = function ms() { + return navigator && navigator.userAgent.match(/msie|trident|edge/i); +}; // probably a better way to detect this... + +var memoize = function memoize(fn, keyFn) { + if (!keyFn) { + keyFn = function keyFn() { + if (arguments.length === 1) { + return arguments[0]; + } else if (arguments.length === 0) { + return 'undefined'; + } + + var args = []; + + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + + return args.join('$'); + }; + } + + var memoizedFn = function memoizedFn() { + var self = this; + var args = arguments; + var ret; + var k = keyFn.apply(self, args); + var cache = memoizedFn.cache; + + if (!(ret = cache[k])) { + ret = cache[k] = fn.apply(self, args); + } + + return ret; + }; + + memoizedFn.cache = {}; + return memoizedFn; +}; + +var camel2dash = memoize(function (str) { + return str.replace(/([A-Z])/g, function (v) { + return '-' + v.toLowerCase(); + }); +}); +var dash2camel = memoize(function (str) { + return str.replace(/(-\w)/g, function (v) { + return v[1].toUpperCase(); + }); +}); +var prependCamel = memoize(function (prefix, str) { + return prefix + str[0].toUpperCase() + str.substring(1); +}, function (prefix, str) { + return prefix + '$' + str; +}); +var capitalize = function capitalize(str) { + if (emptyString(str)) { + return str; + } + + return str.charAt(0).toUpperCase() + str.substring(1); +}; + +var number = '(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))'; +var rgba = 'rgb[a]?\\((' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)(?:\\s*,\\s*(' + number + '))?\\)'; +var rgbaNoBackRefs = 'rgb[a]?\\((?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)(?:\\s*,\\s*(?:' + number + '))?\\)'; +var hsla = 'hsl[a]?\\((' + number + ')\\s*,\\s*(' + number + '[%])\\s*,\\s*(' + number + '[%])(?:\\s*,\\s*(' + number + '))?\\)'; +var hslaNoBackRefs = 'hsl[a]?\\((?:' + number + ')\\s*,\\s*(?:' + number + '[%])\\s*,\\s*(?:' + number + '[%])(?:\\s*,\\s*(?:' + number + '))?\\)'; +var hex3 = '\\#[0-9a-fA-F]{3}'; +var hex6 = '\\#[0-9a-fA-F]{6}'; + +var ascending = function ascending(a, b) { + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } +}; +var descending = function descending(a, b) { + return -1 * ascending(a, b); +}; + +var extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) { + var args = arguments; + + for (var i = 1; i < args.length; i++) { + var obj = args[i]; + + if (obj == null) { + continue; + } + + var keys = Object.keys(obj); + + for (var j = 0; j < keys.length; j++) { + var k = keys[j]; + tgt[k] = obj[k]; + } + } + + return tgt; +}; + +var hex2tuple = function hex2tuple(hex) { + if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') { + return; + } + + var shortHex = hex.length === 4; + var r, g, b; + var base = 16; + + if (shortHex) { + r = parseInt(hex[1] + hex[1], base); + g = parseInt(hex[2] + hex[2], base); + b = parseInt(hex[3] + hex[3], base); + } else { + r = parseInt(hex[1] + hex[2], base); + g = parseInt(hex[3] + hex[4], base); + b = parseInt(hex[5] + hex[6], base); + } + + return [r, g, b]; +}; // get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0) + +var hsl2tuple = function hsl2tuple(hsl) { + var ret; + var h, s, l, a, r, g, b; + + function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; + } + + var m = new RegExp('^' + hsla + '$').exec(hsl); + + if (m) { + // get hue + h = parseInt(m[1]); + + if (h < 0) { + h = (360 - -1 * h % 360) % 360; + } else if (h > 360) { + h = h % 360; + } + + h /= 360; // normalise on [0, 1] + + s = parseFloat(m[2]); + + if (s < 0 || s > 100) { + return; + } // saturation is [0, 100] + + + s = s / 100; // normalise on [0, 1] + + l = parseFloat(m[3]); + + if (l < 0 || l > 100) { + return; + } // lightness is [0, 100] + + + l = l / 100; // normalise on [0, 1] + + a = m[4]; + + if (a !== undefined) { + a = parseFloat(a); + + if (a < 0 || a > 1) { + return; + } // alpha is [0, 1] + + } // now, convert to rgb + // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript + + + if (s === 0) { + r = g = b = Math.round(l * 255); // achromatic + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = Math.round(255 * hue2rgb(p, q, h + 1 / 3)); + g = Math.round(255 * hue2rgb(p, q, h)); + b = Math.round(255 * hue2rgb(p, q, h - 1 / 3)); + } + + ret = [r, g, b, a]; + } + + return ret; +}; // get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0) + +var rgb2tuple = function rgb2tuple(rgb) { + var ret; + var m = new RegExp('^' + rgba + '$').exec(rgb); + + if (m) { + ret = []; + var isPct = []; + + for (var i = 1; i <= 3; i++) { + var channel = m[i]; + + if (channel[channel.length - 1] === '%') { + isPct[i] = true; + } + + channel = parseFloat(channel); + + if (isPct[i]) { + channel = channel / 100 * 255; // normalise to [0, 255] + } + + if (channel < 0 || channel > 255) { + return; + } // invalid channel value + + + ret.push(Math.floor(channel)); + } + + var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3]; + var allArePct = isPct[1] && isPct[2] && isPct[3]; + + if (atLeastOneIsPct && !allArePct) { + return; + } // must all be percent values if one is + + + var alpha = m[4]; + + if (alpha !== undefined) { + alpha = parseFloat(alpha); + + if (alpha < 0 || alpha > 1) { + return; + } // invalid alpha value + + + ret.push(alpha); + } + } + + return ret; +}; +var colorname2tuple = function colorname2tuple(color) { + return colors[color.toLowerCase()]; +}; +var color2tuple = function color2tuple(color) { + return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color); +}; +var colors = { + // special colour names + transparent: [0, 0, 0, 0], + // NB alpha === 0 + // regular colours + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + grey: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] +}; + +var setMap = function setMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + + for (var i = 0; i < l; i++) { + var key = keys[i]; + + if (plainObject(key)) { + throw Error('Tried to set map with object key'); + } + + if (i < keys.length - 1) { + // extend the map if necessary + if (obj[key] == null) { + obj[key] = {}; + } + + obj = obj[key]; + } else { + // set the value + obj[key] = options.value; + } + } +}; // gets the value in a map even if it's not built in places + +var getMap = function getMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + + for (var i = 0; i < l; i++) { + var key = keys[i]; + + if (plainObject(key)) { + throw Error('Tried to get map with object key'); + } + + obj = obj[key]; + + if (obj == null) { + return obj; + } + } + + return obj; +}; // deletes the entry in the map + +var performance = window$1 ? window$1.performance : null; +var pnow = performance && performance.now ? function () { + return performance.now(); +} : function () { + return Date.now(); +}; + +var raf = function () { + if (window$1) { + if (window$1.requestAnimationFrame) { + return function (fn) { + window$1.requestAnimationFrame(fn); + }; + } else if (window$1.mozRequestAnimationFrame) { + return function (fn) { + window$1.mozRequestAnimationFrame(fn); + }; + } else if (window$1.webkitRequestAnimationFrame) { + return function (fn) { + window$1.webkitRequestAnimationFrame(fn); + }; + } else if (window$1.msRequestAnimationFrame) { + return function (fn) { + window$1.msRequestAnimationFrame(fn); + }; + } + } + + return function (fn) { + if (fn) { + setTimeout(function () { + fn(pnow()); + }, 1000 / 60); + } + }; +}(); + +var requestAnimationFrame = function requestAnimationFrame(fn) { + return raf(fn); +}; +var performanceNow = pnow; + +var DEFAULT_HASH_SEED = 9261; +var K = 65599; // 37 also works pretty well + +var DEFAULT_HASH_SEED_ALT = 5381; +var hashIterableInts = function hashIterableInts(iterator) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + var hash = seed; + var entry; + + for (;;) { + entry = iterator.next(); + + if (entry.done) { + break; + } + + hash = hash * K + entry.value | 0; + } + + return hash; +}; +var hashInt = function hashInt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + return seed * K + num | 0; +}; +var hashIntAlt = function hashIntAlt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT; + // djb2/string-hash + return (seed << 5) + seed + num | 0; +}; +var combineHashes = function combineHashes(hash1, hash2) { + return hash1 * 0x200000 + hash2; +}; +var combineHashesArray = function combineHashesArray(hashes) { + return hashes[0] * 0x200000 + hashes[1]; +}; +var hashArrays = function hashArrays(hashes1, hashes2) { + return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])]; +}; +var hashIntsArray = function hashIntsArray(ints, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = ints.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = ints[i++]; + } else { + entry.done = true; + } + + return entry; + } + }; + return hashIterableInts(iterator, seed); +}; +var hashString = function hashString(str, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = str.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = str.charCodeAt(i++); + } else { + entry.done = true; + } + + return entry; + } + }; + return hashIterableInts(iterator, seed); +}; +var hashStrings = function hashStrings() { + return hashStringsArray(arguments); +}; +var hashStringsArray = function hashStringsArray(strs) { + var hash; + + for (var i = 0; i < strs.length; i++) { + var str = strs[i]; + + if (i === 0) { + hash = hashString(str); + } else { + hash = hashString(str, hash); + } + } + + return hash; +}; + +/*global console */ +var warningsEnabled = true; +var warnSupported = console.warn != null; // eslint-disable-line no-console + +var traceSupported = console.trace != null; // eslint-disable-line no-console + +var MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; +var trueify = function trueify() { + return true; +}; +var falsify = function falsify() { + return false; +}; +var zeroify = function zeroify() { + return 0; +}; +var noop$1 = function noop() {}; +var error = function error(msg) { + throw new Error(msg); +}; +var warnings = function warnings(enabled) { + if (enabled !== undefined) { + warningsEnabled = !!enabled; + } else { + return warningsEnabled; + } +}; +var warn = function warn(msg) { + /* eslint-disable no-console */ + if (!warnings()) { + return; + } + + if (warnSupported) { + console.warn(msg); + } else { + console.log(msg); + + if (traceSupported) { + console.trace(); + } + } +}; +/* eslint-enable */ + +var clone = function clone(obj) { + return extend({}, obj); +}; // gets a shallow copy of the argument + +var copy = function copy(obj) { + if (obj == null) { + return obj; + } + + if (array(obj)) { + return obj.slice(); + } else if (plainObject(obj)) { + return clone(obj); + } else { + return obj; + } +}; +var copyArray = function copyArray(arr) { + return arr.slice(); +}; +var uuid = function uuid(a, b +/* placeholders */ +) { + for ( // loop :) + b = a = ''; // b - result , a - numeric letiable + a++ < 36; // + b += a * 51 & 52 // if "a" is not 9 or 14 or 19 or 24 + ? // return a random number or 4 + (a ^ 15 // if "a" is not 15 + ? // generate a random number from 0 to 15 + 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless "a" is 20, in which case a random number from 8 to 11 + : 4 // otherwise 4 + ).toString(16) : '-' // in other cases (if "a" is 9,14,19,24) insert "-" + ) { + } + + return b; +}; +var _staticEmptyObject = {}; +var staticEmptyObject = function staticEmptyObject() { + return _staticEmptyObject; +}; +var defaults$g = function defaults(_defaults) { + var keys = Object.keys(_defaults); + return function (opts) { + var filledOpts = {}; + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var optVal = opts == null ? undefined : opts[key]; + filledOpts[key] = optVal === undefined ? _defaults[key] : optVal; + } + + return filledOpts; + }; +}; +var removeFromArray = function removeFromArray(arr, ele, oneCopy) { + for (var i = arr.length - 1; i >= 0; i--) { + if (arr[i] === ele) { + arr.splice(i, 1); + + if (oneCopy) { + break; + } + } + } +}; +var clearArray = function clearArray(arr) { + arr.splice(0, arr.length); +}; +var push = function push(arr, otherArr) { + for (var i = 0; i < otherArr.length; i++) { + var el = otherArr[i]; + arr.push(el); + } +}; +var getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + return obj[propName]; +}; +var setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + obj[propName] = value; +}; + +/* global Map */ +var ObjectMap = /*#__PURE__*/function () { + function ObjectMap() { + _classCallCheck(this, ObjectMap); + + this._obj = {}; + } + + _createClass(ObjectMap, [{ + key: "set", + value: function set(key, val) { + this._obj[key] = val; + return this; + } + }, { + key: "delete", + value: function _delete(key) { + this._obj[key] = undefined; + return this; + } + }, { + key: "clear", + value: function clear() { + this._obj = {}; + } + }, { + key: "has", + value: function has(key) { + return this._obj[key] !== undefined; + } + }, { + key: "get", + value: function get(key) { + return this._obj[key]; + } + }]); + + return ObjectMap; +}(); + +var Map$1 = typeof Map !== 'undefined' ? Map : ObjectMap; + +/* global Set */ +var undef = "undefined" ; + +var ObjectSet = /*#__PURE__*/function () { + function ObjectSet(arrayOrObjectSet) { + _classCallCheck(this, ObjectSet); + + this._obj = Object.create(null); + this.size = 0; + + if (arrayOrObjectSet != null) { + var arr; + + if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) { + arr = arrayOrObjectSet.toArray(); + } else { + arr = arrayOrObjectSet; + } + + for (var i = 0; i < arr.length; i++) { + this.add(arr[i]); + } + } + } + + _createClass(ObjectSet, [{ + key: "instanceString", + value: function instanceString() { + return 'set'; + } + }, { + key: "add", + value: function add(val) { + var o = this._obj; + + if (o[val] !== 1) { + o[val] = 1; + this.size++; + } + } + }, { + key: "delete", + value: function _delete(val) { + var o = this._obj; + + if (o[val] === 1) { + o[val] = 0; + this.size--; + } + } + }, { + key: "clear", + value: function clear() { + this._obj = Object.create(null); + } + }, { + key: "has", + value: function has(val) { + return this._obj[val] === 1; + } + }, { + key: "toArray", + value: function toArray() { + var _this = this; + + return Object.keys(this._obj).filter(function (key) { + return _this.has(key); + }); + } + }, { + key: "forEach", + value: function forEach(callback, thisArg) { + return this.toArray().forEach(callback, thisArg); + } + }]); + + return ObjectSet; +}(); + +var Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet; + +var Element = function Element(cy, params) { + var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + if (cy === undefined || params === undefined || !core(cy)) { + error('An element must have a core reference and parameters set'); + return; + } + + var group = params.group; // try to automatically infer the group if unspecified + + if (group == null) { + if (params.data && params.data.source != null && params.data.target != null) { + group = 'edges'; + } else { + group = 'nodes'; + } + } // validate group + + + if (group !== 'nodes' && group !== 'edges') { + error('An element must be of type `nodes` or `edges`; you specified `' + group + '`'); + return; + } // make the element array-like, just like a collection + + + this.length = 1; + this[0] = this; // NOTE: when something is added here, add also to ele.json() + + var _p = this._private = { + cy: cy, + single: true, + // indicates this is an element + data: params.data || {}, + // data object + position: params.position || { + x: 0, + y: 0 + }, + // (x, y) position pair + autoWidth: undefined, + // width and height of nodes calculated by the renderer when set to special 'auto' value + autoHeight: undefined, + autoPadding: undefined, + compoundBoundsClean: false, + // whether the compound dimensions need to be recalculated the next time dimensions are read + listeners: [], + // array of bound listeners + group: group, + // string; 'nodes' or 'edges' + style: {}, + // properties as set by the style + rstyle: {}, + // properties for style sent from the renderer to the core + styleCxts: [], + // applied style contexts from the styler + styleKeys: {}, + // per-group keys of style property values + removed: true, + // whether it's inside the vis; true if removed (set true here since we call restore) + selected: params.selected ? true : false, + // whether it's selected + selectable: params.selectable === undefined ? true : params.selectable ? true : false, + // whether it's selectable + locked: params.locked ? true : false, + // whether the element is locked (cannot be moved) + grabbed: false, + // whether the element is grabbed by the mouse; renderer sets this privately + grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false, + // whether the element can be grabbed + pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false, + // whether the element has passthrough panning enabled + active: false, + // whether the element is active from user interaction + classes: new Set$1(), + // map ( className => true ) + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + rscratch: {}, + // object in which the renderer can store information + scratch: params.scratch || {}, + // scratch objects + edges: [], + // array of connected edges + children: [], + // array of children + parent: params.parent && params.parent.isNode() ? params.parent : null, + // parent ref + traversalCache: {}, + // cache of output of traversal functions + backgrounding: false, + // whether background images are loading + bbCache: null, + // cache of the current bounding box + bbCacheShift: { + x: 0, + y: 0 + }, + // shift applied to cached bb to be applied on next get + bodyBounds: null, + // bounds cache of element body, w/o overlay + overlayBounds: null, + // bounds cache of element body, including overlay + labelBounds: { + // bounds cache of labels + all: null, + source: null, + target: null, + main: null + }, + arrowBounds: { + // bounds cache of edge arrows + source: null, + target: null, + 'mid-source': null, + 'mid-target': null + } + }; + + if (_p.position.x == null) { + _p.position.x = 0; + } + + if (_p.position.y == null) { + _p.position.y = 0; + } // renderedPosition overrides if specified + + + if (params.renderedPosition) { + var rpos = params.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + _p.position = { + x: (rpos.x - pan.x) / zoom, + y: (rpos.y - pan.y) / zoom + }; + } + + var classes = []; + + if (array(params.classes)) { + classes = params.classes; + } else if (string(params.classes)) { + classes = params.classes.split(/\s+/); + } + + for (var i = 0, l = classes.length; i < l; i++) { + var cls = classes[i]; + + if (!cls || cls === '') { + continue; + } + + _p.classes.add(cls); + } + + this.createEmitter(); + var bypass = params.style || params.css; + + if (bypass) { + warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.'); + this.style(bypass); + } + + if (restore === undefined || restore) { + this.restore(); + } +}; + +var defineSearch = function defineSearch(params) { + params = { + bfs: params.bfs || !params.dfs, + dfs: params.dfs || !params.bfs + }; // from pseudocode on wikipedia + + return function searchFn(roots, fn, directed) { + var options; + + if (plainObject(roots) && !elementOrCollection(roots)) { + options = roots; + roots = options.roots || options.root; + fn = options.visit; + directed = options.directed; + } + + directed = arguments.length === 2 && !fn$6(fn) ? fn : directed; + fn = fn$6(fn) ? fn : function () {}; + var cy = this._private.cy; + var v = roots = string(roots) ? this.filter(roots) : roots; + var Q = []; + var connectedNodes = []; + var connectedBy = {}; + var id2depth = {}; + var V = {}; + var j = 0; + var found; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; // enqueue v + + + for (var i = 0; i < v.length; i++) { + var vi = v[i]; + var viId = vi.id(); + + if (vi.isNode()) { + Q.unshift(vi); + + if (params.bfs) { + V[viId] = true; + connectedNodes.push(vi); + } + + id2depth[viId] = 0; + } + } + + var _loop = function _loop() { + var v = params.bfs ? Q.shift() : Q.pop(); + var vId = v.id(); + + if (params.dfs) { + if (V[vId]) { + return "continue"; + } + + V[vId] = true; + connectedNodes.push(v); + } + + var depth = id2depth[vId]; + var prevEdge = connectedBy[vId]; + var src = prevEdge != null ? prevEdge.source() : null; + var tgt = prevEdge != null ? prevEdge.target() : null; + var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0]; + var ret = void 0; + ret = fn(v, prevEdge, prevNode, j++, depth); + + if (ret === true) { + found = v; + return "break"; + } + + if (ret === false) { + return "break"; + } + + var vwEdges = v.connectedEdges().filter(function (e) { + return (!directed || e.source().same(v)) && edges.has(e); + }); + + for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { + var e = vwEdges[_i2]; + var w = e.connectedNodes().filter(function (n) { + return !n.same(v) && nodes.has(n); + }); + var wId = w.id(); + + if (w.length !== 0 && !V[wId]) { + w = w[0]; + Q.push(w); + + if (params.bfs) { + V[wId] = true; + connectedNodes.push(w); + } + + connectedBy[wId] = e; + id2depth[wId] = id2depth[vId] + 1; + } + } + }; + + while (Q.length !== 0) { + var _ret = _loop(); + + if (_ret === "continue") continue; + if (_ret === "break") break; + } + + var connectedEles = cy.collection(); + + for (var _i = 0; _i < connectedNodes.length; _i++) { + var node = connectedNodes[_i]; + var edge = connectedBy[node.id()]; + + if (edge != null) { + connectedEles.push(edge); + } + + connectedEles.push(node); + } + + return { + path: cy.collection(connectedEles), + found: cy.collection(found) + }; + }; +}; // search, spanning trees, etc + + +var elesfn$v = { + breadthFirstSearch: defineSearch({ + bfs: true + }), + depthFirstSearch: defineSearch({ + dfs: true + }) +}; // nice, short mathematical alias + +elesfn$v.bfs = elesfn$v.breadthFirstSearch; +elesfn$v.dfs = elesfn$v.depthFirstSearch; + +var dijkstraDefaults = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false +}); +var elesfn$u = { + dijkstra: function dijkstra(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + weight: args[1], + directed: args[2] + }; + } + + var _dijkstraDefaults = dijkstraDefaults(options), + root = _dijkstraDefaults.root, + weight = _dijkstraDefaults.weight, + directed = _dijkstraDefaults.directed; + + var eles = this; + var weightFn = weight; + var source = string(root) ? this.filter(root)[0] : root[0]; + var dist = {}; + var prev = {}; + var knownDist = {}; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + edges.unmergeBy(function (ele) { + return ele.isLoop(); + }); + + var getDist = function getDist(node) { + return dist[node.id()]; + }; + + var setDist = function setDist(node, d) { + dist[node.id()] = d; + Q.updateItem(node); + }; + + var Q = new Heap__default["default"](function (a, b) { + return getDist(a) - getDist(b); + }); + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + dist[node.id()] = node.same(source) ? 0 : Infinity; + Q.push(node); + } + + var distBetween = function distBetween(u, v) { + var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges); + var smallestDistance = Infinity; + var smallestEdge; + + for (var _i = 0; _i < uvs.length; _i++) { + var edge = uvs[_i]; + + var _weight = weightFn(edge); + + if (_weight < smallestDistance || !smallestEdge) { + smallestDistance = _weight; + smallestEdge = edge; + } + } + + return { + edge: smallestEdge, + dist: smallestDistance + }; + }; + + while (Q.size() > 0) { + var u = Q.pop(); + var smalletsDist = getDist(u); + var uid = u.id(); + knownDist[uid] = smalletsDist; + + if (smalletsDist === Infinity) { + continue; + } + + var neighbors = u.neighborhood().intersect(nodes); + + for (var _i2 = 0; _i2 < neighbors.length; _i2++) { + var v = neighbors[_i2]; + var vid = v.id(); + var vDist = distBetween(u, v); + var alt = smalletsDist + vDist.dist; + + if (alt < getDist(v)) { + setDist(v, alt); + prev[vid] = { + node: u, + edge: vDist.edge + }; + } + } // for + + } // while + + + return { + distanceTo: function distanceTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + return knownDist[target.id()]; + }, + pathTo: function pathTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + var S = []; + var u = target; + var uid = u.id(); + + if (target.length > 0) { + S.unshift(target); + + while (prev[uid]) { + var p = prev[uid]; + S.unshift(p.edge); + S.unshift(p.node); + u = p.node; + uid = u.id(); + } + } + + return eles.spawn(S); + } + }; + } +}; + +var elesfn$t = { + // kruskal's algorithm (finds min spanning tree, assuming undirected graph) + // implemented from pseudocode from wikipedia + kruskal: function kruskal(weightFn) { + weightFn = weightFn || function (edge) { + return 1; + }; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var numNodes = nodes.length; + var forest = new Array(numNodes); + var A = nodes; // assumes byGroup() creates new collections that can be safely mutated + + var findSetIndex = function findSetIndex(ele) { + for (var i = 0; i < forest.length; i++) { + var eles = forest[i]; + + if (eles.has(ele)) { + return i; + } + } + }; // start with one forest per node + + + for (var i = 0; i < numNodes; i++) { + forest[i] = this.spawn(nodes[i]); + } + + var S = edges.sort(function (a, b) { + return weightFn(a) - weightFn(b); + }); + + for (var _i = 0; _i < S.length; _i++) { + var edge = S[_i]; + var u = edge.source()[0]; + var v = edge.target()[0]; + var setUIndex = findSetIndex(u); + var setVIndex = findSetIndex(v); + var setU = forest[setUIndex]; + var setV = forest[setVIndex]; + + if (setUIndex !== setVIndex) { + A.merge(edge); // combine forests for u and v + + setU.merge(setV); + forest.splice(setVIndex, 1); + } + } + + return A; + } +}; + +var aStarDefaults = defaults$g({ + root: null, + goal: null, + weight: function weight(edge) { + return 1; + }, + heuristic: function heuristic(edge) { + return 0; + }, + directed: false +}); +var elesfn$s = { + // Implemented from pseudocode from wikipedia + aStar: function aStar(options) { + var cy = this.cy(); + + var _aStarDefaults = aStarDefaults(options), + root = _aStarDefaults.root, + goal = _aStarDefaults.goal, + heuristic = _aStarDefaults.heuristic, + directed = _aStarDefaults.directed, + weight = _aStarDefaults.weight; + + root = cy.collection(root)[0]; + goal = cy.collection(goal)[0]; + var sid = root.id(); + var tid = goal.id(); + var gScore = {}; + var fScore = {}; + var closedSetIds = {}; + var openSet = new Heap__default["default"](function (a, b) { + return fScore[a.id()] - fScore[b.id()]; + }); + var openSetIds = new Set$1(); + var cameFrom = {}; + var cameFromEdge = {}; + + var addToOpenSet = function addToOpenSet(ele, id) { + openSet.push(ele); + openSetIds.add(id); + }; + + var cMin, cMinId; + + var popFromOpenSet = function popFromOpenSet() { + cMin = openSet.pop(); + cMinId = cMin.id(); + openSetIds["delete"](cMinId); + }; + + var isInOpenSet = function isInOpenSet(id) { + return openSetIds.has(id); + }; + + addToOpenSet(root, sid); + gScore[sid] = 0; + fScore[sid] = heuristic(root); // Counter + + var steps = 0; // Main loop + + while (openSet.size() > 0) { + popFromOpenSet(); + steps++; // If we've found our goal, then we are done + + if (cMinId === tid) { + var path = []; + var pathNode = goal; + var pathNodeId = tid; + var pathEdge = cameFromEdge[pathNodeId]; + + for (;;) { + path.unshift(pathNode); + + if (pathEdge != null) { + path.unshift(pathEdge); + } + + pathNode = cameFrom[pathNodeId]; + + if (pathNode == null) { + break; + } + + pathNodeId = pathNode.id(); + pathEdge = cameFromEdge[pathNodeId]; + } + + return { + found: true, + distance: gScore[cMinId], + path: this.spawn(path), + steps: steps + }; + } // Add cMin to processed nodes + + + closedSetIds[cMinId] = true; // Update scores for neighbors of cMin + // Take into account if graph is directed or not + + var vwEdges = cMin._private.edges; + + for (var i = 0; i < vwEdges.length; i++) { + var e = vwEdges[i]; // edge must be in set of calling eles + + if (!this.hasElementWithId(e.id())) { + continue; + } // cMin must be the source of edge if directed + + + if (directed && e.data('source') !== cMinId) { + continue; + } + + var wSrc = e.source(); + var wTgt = e.target(); + var w = wSrc.id() !== cMinId ? wSrc : wTgt; + var wid = w.id(); // node must be in set of calling eles + + if (!this.hasElementWithId(wid)) { + continue; + } // if node is in closedSet, ignore it + + + if (closedSetIds[wid]) { + continue; + } // New tentative score for node w + + + var tempScore = gScore[cMinId] + weight(e); // Update gScore for node w if: + // w not present in openSet + // OR + // tentative gScore is less than previous value + // w not in openSet + + if (!isInOpenSet(wid)) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + addToOpenSet(w, wid); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + continue; + } // w already in openSet, but with greater gScore + + + if (tempScore < gScore[wid]) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + } + } // End of neighbors update + + } // End of main loop + // If we've reached here, then we've not reached our goal + + + return { + found: false, + distance: undefined, + path: undefined, + steps: steps + }; + } +}; // elesfn + +var floydWarshallDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false +}); +var elesfn$r = { + // Implemented from pseudocode from wikipedia + floydWarshall: function floydWarshall(options) { + var cy = this.cy(); + + var _floydWarshallDefault = floydWarshallDefaults(options), + weight = _floydWarshallDefault.weight, + directed = _floydWarshallDefault.directed; + + var weightFn = weight; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var N = nodes.length; + var Nsq = N * N; + + var indexOf = function indexOf(node) { + return nodes.indexOf(node); + }; + + var atIndex = function atIndex(i) { + return nodes[i]; + }; // Initialize distance matrix + + + var dist = new Array(Nsq); + + for (var n = 0; n < Nsq; n++) { + var j = n % N; + var i = (n - j) / N; + + if (i === j) { + dist[n] = 0; + } else { + dist[n] = Infinity; + } + } // Initialize matrix used for path reconstruction + // Initialize distance matrix + + + var next = new Array(Nsq); + var edgeNext = new Array(Nsq); // Process edges + + for (var _i = 0; _i < edges.length; _i++) { + var edge = edges[_i]; + var src = edge.source()[0]; + var tgt = edge.target()[0]; + + if (src === tgt) { + continue; + } // exclude loops + + + var s = indexOf(src); + var t = indexOf(tgt); + var st = s * N + t; // source to target index + + var _weight = weightFn(edge); // Check if already process another edge between same 2 nodes + + + if (dist[st] > _weight) { + dist[st] = _weight; + next[st] = t; + edgeNext[st] = edge; + } // If undirected graph, process 'reversed' edge + + + if (!directed) { + var ts = t * N + s; // target to source index + + if (!directed && dist[ts] > _weight) { + dist[ts] = _weight; + next[ts] = s; + edgeNext[ts] = edge; + } + } + } // Main loop + + + for (var k = 0; k < N; k++) { + for (var _i2 = 0; _i2 < N; _i2++) { + var ik = _i2 * N + k; + + for (var _j = 0; _j < N; _j++) { + var ij = _i2 * N + _j; + var kj = k * N + _j; + + if (dist[ik] + dist[kj] < dist[ij]) { + dist[ij] = dist[ik] + dist[kj]; + next[ij] = next[ik]; + } + } + } + } + + var getArgEle = function getArgEle(ele) { + return (string(ele) ? cy.filter(ele) : ele)[0]; + }; + + var indexOfArgEle = function indexOfArgEle(ele) { + return indexOf(getArgEle(ele)); + }; + + var res = { + distance: function distance(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + return dist[i * N + j]; + }, + path: function path(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + var fromNode = atIndex(i); + + if (i === j) { + return fromNode.collection(); + } + + if (next[i * N + j] == null) { + return cy.collection(); + } + + var path = cy.collection(); + var prev = i; + var edge; + path.merge(fromNode); + + while (i !== j) { + prev = i; + i = next[i * N + j]; + edge = edgeNext[prev * N + i]; + path.merge(edge); + path.merge(atIndex(i)); + } + + return path; + } + }; + return res; + } // floydWarshall + +}; // elesfn + +var bellmanFordDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false, + root: null +}); +var elesfn$q = { + // Implemented from pseudocode from wikipedia + bellmanFord: function bellmanFord(options) { + var _this = this; + + var _bellmanFordDefaults = bellmanFordDefaults(options), + weight = _bellmanFordDefaults.weight, + directed = _bellmanFordDefaults.directed, + root = _bellmanFordDefaults.root; + + var weightFn = weight; + var eles = this; + var cy = this.cy(); + + var _this$byGroup = this.byGroup(), + edges = _this$byGroup.edges, + nodes = _this$byGroup.nodes; + + var numNodes = nodes.length; + var infoMap = new Map$1(); + var hasNegativeWeightCycle = false; + var negativeWeightCycles = []; + root = cy.collection(root)[0]; // in case selector passed + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numEdges = edges.length; + + var getInfo = function getInfo(node) { + var obj = infoMap.get(node.id()); + + if (!obj) { + obj = {}; + infoMap.set(node.id(), obj); + } + + return obj; + }; + + var getNodeFromTo = function getNodeFromTo(to) { + return (string(to) ? cy.$(to) : to)[0]; + }; + + var distanceTo = function distanceTo(to) { + return getInfo(getNodeFromTo(to)).dist; + }; + + var pathTo = function pathTo(to) { + var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root; + var end = getNodeFromTo(to); + var path = []; + var node = end; + + for (;;) { + if (node == null) { + return _this.spawn(); + } + + var _getInfo = getInfo(node), + edge = _getInfo.edge, + pred = _getInfo.pred; + + path.unshift(node[0]); + + if (node.same(thisStart) && path.length > 0) { + break; + } + + if (edge != null) { + path.unshift(edge); + } + + node = pred; + } + + return eles.spawn(path); + }; // Initializations { dist, pred, edge } + + + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; + var info = getInfo(node); + + if (node.same(root)) { + info.dist = 0; + } else { + info.dist = Infinity; + } + + info.pred = null; + info.edge = null; + } // Edges relaxation + + + var replacedEdge = false; + + var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) { + var dist = info1.dist + weight; + + if (dist < info2.dist && !edge.same(info1.edge)) { + info2.dist = dist; + info2.pred = node1; + info2.edge = edge; + replacedEdge = true; + } + }; + + for (var _i = 1; _i < numNodes; _i++) { + replacedEdge = false; + + for (var e = 0; e < numEdges; e++) { + var edge = edges[e]; + var src = edge.source(); + var tgt = edge.target(); + + var _weight = weightFn(edge); + + var srcInfo = getInfo(src); + var tgtInfo = getInfo(tgt); + checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); // If undirected graph, we need to take into account the 'reverse' edge + + if (!directed) { + checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight); + } + } + + if (!replacedEdge) { + break; + } + } + + if (replacedEdge) { + // Check for negative weight cycles + var negativeWeightCycleIds = []; + + for (var _e = 0; _e < numEdges; _e++) { + var _edge = edges[_e]; + + var _src = _edge.source(); + + var _tgt = _edge.target(); + + var _weight2 = weightFn(_edge); + + var srcDist = getInfo(_src).dist; + var tgtDist = getInfo(_tgt).dist; + + if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) { + if (!hasNegativeWeightCycle) { + warn('Graph contains a negative weight cycle for Bellman-Ford'); + hasNegativeWeightCycle = true; + } + + if (options.findNegativeWeightCycles !== false) { + var negativeNodes = []; + + if (srcDist + _weight2 < tgtDist) { + negativeNodes.push(_src); + } + + if (!directed && tgtDist + _weight2 < srcDist) { + negativeNodes.push(_tgt); + } + + var numNegativeNodes = negativeNodes.length; + + for (var n = 0; n < numNegativeNodes; n++) { + var start = negativeNodes[n]; + var cycle = [start]; + cycle.push(getInfo(start).edge); + var _node = getInfo(start).pred; + + while (cycle.indexOf(_node) === -1) { + cycle.push(_node); + cycle.push(getInfo(_node).edge); + _node = getInfo(_node).pred; + } + + cycle = cycle.slice(cycle.indexOf(_node)); + var smallestId = cycle[0].id(); + var smallestIndex = 0; + + for (var c = 2; c < cycle.length; c += 2) { + if (cycle[c].id() < smallestId) { + smallestId = cycle[c].id(); + smallestIndex = c; + } + } + + cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex)); + cycle.push(cycle[0]); + var cycleId = cycle.map(function (el) { + return el.id(); + }).join(","); + + if (negativeWeightCycleIds.indexOf(cycleId) === -1) { + negativeWeightCycles.push(eles.spawn(cycle)); + negativeWeightCycleIds.push(cycleId); + } + } + } else { + break; + } + } + } + } + + return { + distanceTo: distanceTo, + pathTo: pathTo, + hasNegativeWeightCycle: hasNegativeWeightCycle, + negativeWeightCycles: negativeWeightCycles + }; + } // bellmanFord + +}; // elesfn + +var sqrt2 = Math.sqrt(2); // Function which colapses 2 (meta) nodes into one +// Updates the remaining edge lists +// Receives as a paramater the edge which causes the collapse + +var collapse = function collapse(edgeIndex, nodeMap, remainingEdges) { + if (remainingEdges.length === 0) { + error("Karger-Stein must be run on a connected (sub)graph"); + } + + var edgeInfo = remainingEdges[edgeIndex]; + var sourceIn = edgeInfo[1]; + var targetIn = edgeInfo[2]; + var partition1 = nodeMap[sourceIn]; + var partition2 = nodeMap[targetIn]; + var newEdges = remainingEdges; // re-use array + // Delete all edges between partition1 and partition2 + + for (var i = newEdges.length - 1; i >= 0; i--) { + var edge = newEdges[i]; + var src = edge[1]; + var tgt = edge[2]; + + if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) { + newEdges.splice(i, 1); + } + } // All edges pointing to partition2 should now point to partition1 + + + for (var _i = 0; _i < newEdges.length; _i++) { + var _edge = newEdges[_i]; + + if (_edge[1] === partition2) { + // Check source + newEdges[_i] = _edge.slice(); // copy + + newEdges[_i][1] = partition1; + } else if (_edge[2] === partition2) { + // Check target + newEdges[_i] = _edge.slice(); // copy + + newEdges[_i][2] = partition1; + } + } // Move all nodes from partition2 to partition1 + + + for (var _i2 = 0; _i2 < nodeMap.length; _i2++) { + if (nodeMap[_i2] === partition2) { + nodeMap[_i2] = partition1; + } + } + + return newEdges; +}; // Contracts a graph until we reach a certain number of meta nodes + + +var contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) { + while (size > sizeLimit) { + // Choose an edge randomly + var edgeIndex = Math.floor(Math.random() * remainingEdges.length); // Collapse graph based on edge + + remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); + size--; + } + + return remainingEdges; +}; + +var elesfn$p = { + // Computes the minimum cut of an undirected graph + // Returns the correct answer with high probability + kargerStein: function kargerStein() { + var _this = this; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numNodes = nodes.length; + var numEdges = edges.length; + var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2)); + var stopSize = Math.floor(numNodes / sqrt2); + + if (numNodes < 2) { + error('At least 2 nodes are required for Karger-Stein algorithm'); + return undefined; + } // Now store edge destination as indexes + // Format for each edge (edge index, source node index, target node index) + + + var edgeIndexes = []; + + for (var i = 0; i < numEdges; i++) { + var e = edges[i]; + edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]); + } // We will store the best cut found here + + + var minCutSize = Infinity; + var minCutEdgeIndexes = []; + var minCutNodeMap = new Array(numNodes); // Initial meta node partition + + var metaNodeMap = new Array(numNodes); + var metaNodeMap2 = new Array(numNodes); + + var copyNodesMap = function copyNodesMap(from, to) { + for (var _i3 = 0; _i3 < numNodes; _i3++) { + to[_i3] = from[_i3]; + } + }; // Main loop + + + for (var iter = 0; iter <= numIter; iter++) { + // Reset meta node partition + for (var _i4 = 0; _i4 < numNodes; _i4++) { + metaNodeMap[_i4] = _i4; + } // Contract until stop point (stopSize nodes) + + + var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize); + var edgesState2 = edgesState.slice(); // copy + // Create a copy of the colapsed nodes state + + copyNodesMap(metaNodeMap, metaNodeMap2); // Run 2 iterations starting in the stop state + + var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2); + var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); // Is any of the 2 results the best cut so far? + + if (res1.length <= res2.length && res1.length < minCutSize) { + minCutSize = res1.length; + minCutEdgeIndexes = res1; + copyNodesMap(metaNodeMap, minCutNodeMap); + } else if (res2.length <= res1.length && res2.length < minCutSize) { + minCutSize = res2.length; + minCutEdgeIndexes = res2; + copyNodesMap(metaNodeMap2, minCutNodeMap); + } + } // end of main loop + // Construct result + + + var cut = this.spawn(minCutEdgeIndexes.map(function (e) { + return edges[e[0]]; + })); + var partition1 = this.spawn(); + var partition2 = this.spawn(); // traverse metaNodeMap for best cut + + var witnessNodePartition = minCutNodeMap[0]; + + for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) { + var partitionId = minCutNodeMap[_i5]; + var node = nodes[_i5]; + + if (partitionId === witnessNodePartition) { + partition1.merge(node); + } else { + partition2.merge(node); + } + } // construct components corresponding to each disjoint subset of nodes + + + var constructComponent = function constructComponent(subset) { + var component = _this.spawn(); + + subset.forEach(function (node) { + component.merge(node); + node.connectedEdges().forEach(function (edge) { + // ensure edge is within calling collection and edge is not in cut + if (_this.contains(edge) && !cut.contains(edge)) { + component.merge(edge); + } + }); + }); + return component; + }; + + var components = [constructComponent(partition1), constructComponent(partition2)]; + var ret = { + cut: cut, + components: components, + // n.b. partitions are included to be compatible with the old api spec + // (could be removed in a future major version) + partition1: partition1, + partition2: partition2 + }; + return ret; + } +}; // elesfn + +var copyPosition = function copyPosition(p) { + return { + x: p.x, + y: p.y + }; +}; +var modelToRenderedPosition = function modelToRenderedPosition(p, zoom, pan) { + return { + x: p.x * zoom + pan.x, + y: p.y * zoom + pan.y + }; +}; +var renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) { + return { + x: (p.x - pan.x) / zoom, + y: (p.y - pan.y) / zoom + }; +}; +var array2point = function array2point(arr) { + return { + x: arr[0], + y: arr[1] + }; +}; +var min = function min(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var min = Infinity; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + min = Math.min(val, min); + } + } + + return min; +}; +var max = function max(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var max = -Infinity; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + max = Math.max(val, max); + } + } + + return max; +}; +var mean = function mean(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var total = 0; + var n = 0; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + total += val; + n++; + } + } + + return total / n; +}; +var median = function median(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + + if (copy) { + arr = arr.slice(begin, end); + } else { + if (end < arr.length) { + arr.splice(end, arr.length - end); + } + + if (begin > 0) { + arr.splice(0, begin); + } + } // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start + + + var off = 0; // offset from non-finite values + + for (var i = arr.length - 1; i >= 0; i--) { + var v = arr[i]; + + if (includeHoles) { + if (!isFinite(v)) { + arr[i] = -Infinity; + off++; + } + } else { + // just remove it if we don't want to consider holes + arr.splice(i, 1); + } + } + + if (sort) { + arr.sort(function (a, b) { + return a - b; + }); // requires copy = true if you don't want to change the orig + } + + var len = arr.length; + var mid = Math.floor(len / 2); + + if (len % 2 !== 0) { + return arr[mid + 1 + off]; + } else { + return (arr[mid - 1 + off] + arr[mid + off]) / 2; + } +}; +var deg2rad = function deg2rad(deg) { + return Math.PI * deg / 180; +}; +var getAngleFromDisp = function getAngleFromDisp(dispX, dispY) { + return Math.atan2(dispY, dispX) - Math.PI / 2; +}; +var log2 = Math.log2 || function (n) { + return Math.log(n) / Math.log(2); +}; +var signum = function signum(x) { + if (x > 0) { + return 1; + } else if (x < 0) { + return -1; + } else { + return 0; + } +}; +var dist = function dist(p1, p2) { + return Math.sqrt(sqdist(p1, p2)); +}; +var sqdist = function sqdist(p1, p2) { + var dx = p2.x - p1.x; + var dy = p2.y - p1.y; + return dx * dx + dy * dy; +}; +var inPlaceSumNormalize = function inPlaceSumNormalize(v) { + var length = v.length; // First, get sum of all elements + + var total = 0; + + for (var i = 0; i < length; i++) { + total += v[i]; + } // Now, divide each by the sum of all elements + + + for (var _i = 0; _i < length; _i++) { + v[_i] = v[_i] / total; + } + + return v; +}; + +var qbezierAt = function qbezierAt(p0, p1, p2, t) { + return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2; +}; +var qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) { + return { + x: qbezierAt(p0.x, p1.x, p2.x, t), + y: qbezierAt(p0.y, p1.y, p2.y, t) + }; +}; +var lineAt = function lineAt(p0, p1, t, d) { + var vec = { + x: p1.x - p0.x, + y: p1.y - p0.y + }; + var vecDist = dist(p0, p1); + var normVec = { + x: vec.x / vecDist, + y: vec.y / vecDist + }; + t = t == null ? 0 : t; + d = d != null ? d : t * vecDist; + return { + x: p0.x + normVec.x * d, + y: p0.y + normVec.y * d + }; +}; +var bound = function bound(min, val, max) { + return Math.max(min, Math.min(max, val)); +}; // makes a full bb (x1, y1, x2, y2, w, h) from implicit params + +var makeBoundingBox = function makeBoundingBox(bb) { + if (bb == null) { + return { + x1: Infinity, + y1: Infinity, + x2: -Infinity, + y2: -Infinity, + w: 0, + h: 0 + }; + } else if (bb.x1 != null && bb.y1 != null) { + if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x2, + y2: bb.y2, + w: bb.x2 - bb.x1, + h: bb.y2 - bb.y1 + }; + } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x1 + bb.w, + y2: bb.y1 + bb.h, + w: bb.w, + h: bb.h + }; + } + } +}; +var copyBoundingBox = function copyBoundingBox(bb) { + return { + x1: bb.x1, + x2: bb.x2, + w: bb.w, + y1: bb.y1, + y2: bb.y2, + h: bb.h + }; +}; +var clearBoundingBox = function clearBoundingBox(bb) { + bb.x1 = Infinity; + bb.y1 = Infinity; + bb.x2 = -Infinity; + bb.y2 = -Infinity; + bb.w = 0; + bb.h = 0; +}; +var updateBoundingBox = function updateBoundingBox(bb1, bb2) { + // update bb1 with bb2 bounds + bb1.x1 = Math.min(bb1.x1, bb2.x1); + bb1.x2 = Math.max(bb1.x2, bb2.x2); + bb1.w = bb1.x2 - bb1.x1; + bb1.y1 = Math.min(bb1.y1, bb2.y1); + bb1.y2 = Math.max(bb1.y2, bb2.y2); + bb1.h = bb1.y2 - bb1.y1; +}; +var expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) { + bb.x1 = Math.min(bb.x1, x); + bb.x2 = Math.max(bb.x2, x); + bb.w = bb.x2 - bb.x1; + bb.y1 = Math.min(bb.y1, y); + bb.y2 = Math.max(bb.y2, y); + bb.h = bb.y2 - bb.y1; +}; +var expandBoundingBox = function expandBoundingBox(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + bb.x1 -= padding; + bb.x2 += padding; + bb.y1 -= padding; + bb.y2 += padding; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; +}; +var expandBoundingBoxSides = function expandBoundingBoxSides(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0]; + var top, right, bottom, left; + + if (padding.length === 1) { + top = right = bottom = left = padding[0]; + } else if (padding.length === 2) { + top = bottom = padding[0]; + left = right = padding[1]; + } else if (padding.length === 4) { + var _padding = _slicedToArray(padding, 4); + + top = _padding[0]; + right = _padding[1]; + bottom = _padding[2]; + left = _padding[3]; + } + + bb.x1 -= left; + bb.x2 += right; + bb.y1 -= top; + bb.y2 += bottom; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; +}; + +var assignBoundingBox = function assignBoundingBox(bb1, bb2) { + bb1.x1 = bb2.x1; + bb1.y1 = bb2.y1; + bb1.x2 = bb2.x2; + bb1.y2 = bb2.y2; + bb1.w = bb1.x2 - bb1.x1; + bb1.h = bb1.y2 - bb1.y1; +}; +var boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) { + // case: one bb to right of other + if (bb1.x1 > bb2.x2) { + return false; + } + + if (bb2.x1 > bb1.x2) { + return false; + } // case: one bb to left of other + + + if (bb1.x2 < bb2.x1) { + return false; + } + + if (bb2.x2 < bb1.x1) { + return false; + } // case: one bb above other + + + if (bb1.y2 < bb2.y1) { + return false; + } + + if (bb2.y2 < bb1.y1) { + return false; + } // case: one bb below other + + + if (bb1.y1 > bb2.y2) { + return false; + } + + if (bb2.y1 > bb1.y2) { + return false; + } // otherwise, must have some overlap + + + return true; +}; +var inBoundingBox = function inBoundingBox(bb, x, y) { + return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2; +}; +var pointInBoundingBox = function pointInBoundingBox(bb, pt) { + return inBoundingBox(bb, pt.x, pt.y); +}; +var boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) { + return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2); +}; +var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) { + var cornerRadius = getRoundRectangleRadius(width, height); + var halfWidth = width / 2; + var halfHeight = height / 2; // Check intersections with straight line segments + + var straightLineIntersections; // Top segment, left to right + + { + var topStartX = nodeX - halfWidth + cornerRadius - padding; + var topStartY = nodeY - halfHeight - padding; + var topEndX = nodeX + halfWidth - cornerRadius + padding; + var topEndY = topStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Right segment, top to bottom + + { + var rightStartX = nodeX + halfWidth + padding; + var rightStartY = nodeY - halfHeight + cornerRadius - padding; + var rightEndX = rightStartX; + var rightEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Bottom segment, left to right + + { + var bottomStartX = nodeX - halfWidth + cornerRadius - padding; + var bottomStartY = nodeY + halfHeight + padding; + var bottomEndX = nodeX + halfWidth - cornerRadius + padding; + var bottomEndY = bottomStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Left segment, top to bottom + + { + var leftStartX = nodeX - halfWidth - padding; + var leftStartY = nodeY - halfHeight + cornerRadius - padding; + var leftEndX = leftStartX; + var leftEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Check intersections with arc segments + + var arcIntersections; // Top Left + + { + var topLeftCenterX = nodeX - halfWidth + cornerRadius; + var topLeftCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Top Right + + { + var topRightCenterX = nodeX + halfWidth - cornerRadius; + var topRightCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Bottom Right + + { + var bottomRightCenterX = nodeX + halfWidth - cornerRadius; + var bottomRightCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Bottom Left + + { + var bottomLeftCenterX = nodeX - halfWidth + cornerRadius; + var bottomLeftCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + return []; // if nothing +}; +var inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) { + var t = tolerance; + var x1 = Math.min(lx1, lx2); + var x2 = Math.max(lx1, lx2); + var y1 = Math.min(ly1, ly2); + var y2 = Math.max(ly1, ly2); + return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t; +}; +var inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) { + var bb = { + x1: Math.min(x1, x3, x2) - tolerance, + x2: Math.max(x1, x3, x2) + tolerance, + y1: Math.min(y1, y3, y2) - tolerance, + y2: Math.max(y1, y3, y2) + tolerance + }; // if outside the rough bounding box for the bezier, then it can't be a hit + + if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) { + // console.log('bezier out of rough bb') + return false; + } else { + // console.log('do more expensive check'); + return true; + } +}; +var solveQuadratic = function solveQuadratic(a, b, c, val) { + c -= val; + var r = b * b - 4 * a * c; + + if (r < 0) { + return []; + } + + var sqrtR = Math.sqrt(r); + var denom = 2 * a; + var root1 = (-b + sqrtR) / denom; + var root2 = (-b - sqrtR) / denom; + return [root1, root2]; +}; +var solveCubic = function solveCubic(a, b, c, d, result) { + // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where + // r is the real component, i is the imaginary component + // An implementation of the Cardano method from the year 1545 + // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots + var epsilon = 0.00001; // avoid division by zero while keeping the overall expression close in value + + if (a === 0) { + a = epsilon; + } + + b /= a; + c /= a; + d /= a; + var discriminant, q, r, dum1, s, t, term1, r13; + q = (3.0 * c - b * b) / 9.0; + r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b)); + r /= 54.0; + discriminant = q * q * q + r * r; + result[1] = 0; + term1 = b / 3.0; + + if (discriminant > 0) { + s = r + Math.sqrt(discriminant); + s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0); + t = r - Math.sqrt(discriminant); + t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0); + result[0] = -term1 + s + t; + term1 += (s + t) / 2.0; + result[4] = result[2] = -term1; + term1 = Math.sqrt(3.0) * (-t + s) / 2; + result[3] = term1; + result[5] = -term1; + return; + } + + result[5] = result[3] = 0; + + if (discriminant === 0) { + r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0); + result[0] = -term1 + 2.0 * r13; + result[4] = result[2] = -(r13 + term1); + return; + } + + q = -q; + dum1 = q * q * q; + dum1 = Math.acos(r / Math.sqrt(dum1)); + r13 = 2.0 * Math.sqrt(q); + result[0] = -term1 + r13 * Math.cos(dum1 / 3.0); + result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0); + result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0); + return; +}; +var sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) { + // Find minimum distance by using the minimum of the distance + // function between the given point and the curve + // This gives the coefficients of the resulting cubic equation + // whose roots tell us where a possible minimum is + // (Coefficients are divided by 4) + var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3; + var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3; + var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y; + var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y; // debug("coefficients: " + a / a + ", " + b / a + ", " + c / a + ", " + d / a); + + var roots = []; // Use the cubic solving algorithm + + solveCubic(a, b, c, d, roots); + var zeroThreshold = 0.0000001; + var params = []; + + for (var index = 0; index < 6; index += 2) { + if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) { + params.push(roots[index]); + } + } + + params.push(1.0); + params.push(0.0); + var minDistanceSquared = -1; + var curX, curY, distSquared; + + for (var i = 0; i < params.length; i++) { + curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3; + curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3; + distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2); // debug('distance for param ' + params[i] + ": " + Math.sqrt(distSquared)); + + if (minDistanceSquared >= 0) { + if (distSquared < minDistanceSquared) { + minDistanceSquared = distSquared; + } + } else { + minDistanceSquared = distSquared; + } + } + + return minDistanceSquared; +}; +var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) { + var offset = [x - x1, y - y1]; + var line = [x2 - x1, y2 - y1]; + var lineSq = line[0] * line[0] + line[1] * line[1]; + var hypSq = offset[0] * offset[0] + offset[1] * offset[1]; + var dotProduct = offset[0] * line[0] + offset[1] * line[1]; + var adjSq = dotProduct * dotProduct / lineSq; + + if (dotProduct < 0) { + return hypSq; + } + + if (adjSq > lineSq) { + return (x - x2) * (x - x2) + (y - y2) * (y - y2); + } + + return hypSq - adjSq; +}; +var pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) { + var x1, y1, x2, y2; + var y3; // Intersect with vertical line through (x, y) + + var up = 0; // let down = 0; + + for (var i = 0; i < points.length / 2; i++) { + x1 = points[i * 2]; + y1 = points[i * 2 + 1]; + + if (i + 1 < points.length / 2) { + x2 = points[(i + 1) * 2]; + y2 = points[(i + 1) * 2 + 1]; + } else { + x2 = points[(i + 1 - points.length / 2) * 2]; + y2 = points[(i + 1 - points.length / 2) * 2 + 1]; + } + + if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) { + y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1; + + if (y3 > y) { + up++; + } // if( y3 < y ){ + // down++; + // } + + } else { + continue; + } + } + + if (up % 2 === 0) { + return false; + } else { + return true; + } +}; +var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) { + var transformedPoints = new Array(basePoints.length); // Gives negative angle + + var angle; + + if (direction[0] != null) { + angle = Math.atan(direction[1] / direction[0]); + + if (direction[0] < 0) { + angle = angle + Math.PI / 2; + } else { + angle = -angle - Math.PI / 2; + } + } else { + angle = direction; + } + + var cos = Math.cos(-angle); + var sin = Math.sin(-angle); // console.log("base: " + basePoints); + + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin); + transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin); + transformedPoints[i * 2] += centerX; + transformedPoints[i * 2 + 1] += centerY; + } + + var points; + + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + + return pointInsidePolygonPoints(x, y, points); +}; +var pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height) { + var cutPolygonPoints = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + var squaredCornerRadius = cornerRadius * cornerRadius; + + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + cutPolygonPoints[i * 4] = cp0x; + cutPolygonPoints[i * 4 + 1] = cp0y; + cutPolygonPoints[i * 4 + 2] = cp1x; + cutPolygonPoints[i * 4 + 3] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + var squaredDistance = Math.pow(cx - x, 2) + Math.pow(cy - y, 2); + + if (squaredDistance <= squaredCornerRadius) { + return true; + } + } + + return pointInsidePolygonPoints(x, y, cutPolygonPoints); +}; +var joinLines = function joinLines(lineSet) { + var vertices = new Array(lineSet.length / 2); + var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY; + var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY; + + for (var i = 0; i < lineSet.length / 4; i++) { + currentLineStartX = lineSet[i * 4]; + currentLineStartY = lineSet[i * 4 + 1]; + currentLineEndX = lineSet[i * 4 + 2]; + currentLineEndY = lineSet[i * 4 + 3]; + + if (i < lineSet.length / 4 - 1) { + nextLineStartX = lineSet[(i + 1) * 4]; + nextLineStartY = lineSet[(i + 1) * 4 + 1]; + nextLineEndX = lineSet[(i + 1) * 4 + 2]; + nextLineEndY = lineSet[(i + 1) * 4 + 3]; + } else { + nextLineStartX = lineSet[0]; + nextLineStartY = lineSet[1]; + nextLineEndX = lineSet[2]; + nextLineEndY = lineSet[3]; + } + + var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); + vertices[i * 2] = intersection[0]; + vertices[i * 2 + 1] = intersection[1]; + } + + return vertices; +}; +var expandPolygon = function expandPolygon(points, pad) { + var expandedLineSet = new Array(points.length * 2); + var currentPointX, currentPointY, nextPointX, nextPointY; + + for (var i = 0; i < points.length / 2; i++) { + currentPointX = points[i * 2]; + currentPointY = points[i * 2 + 1]; + + if (i < points.length / 2 - 1) { + nextPointX = points[(i + 1) * 2]; + nextPointY = points[(i + 1) * 2 + 1]; + } else { + nextPointX = points[0]; + nextPointY = points[1]; + } // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY] + // Assume CCW polygon winding + + + var offsetX = nextPointY - currentPointY; + var offsetY = -(nextPointX - currentPointX); // Normalize + + var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); + var normalizedOffsetX = offsetX / offsetLength; + var normalizedOffsetY = offsetY / offsetLength; + expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad; + expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad; + } + + return expandedLineSet; +}; +var intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) { + var dispX = centerX - x; + var dispY = centerY - y; + dispX /= ellipseWradius; + dispY /= ellipseHradius; + var len = Math.sqrt(dispX * dispX + dispY * dispY); + var newLength = len - 1; + + if (newLength < 0) { + return []; + } + + var lenProportion = newLength / len; + return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y]; +}; +var checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) { + x -= centerX; + y -= centerY; + x /= width / 2 + padding; + y /= height / 2 + padding; + return x * x + y * y <= 1; +}; // Returns intersections of increasing distance from line's start point + +var intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) { + // Calculate d, direction vector of line + var d = [x2 - x1, y2 - y1]; // Direction vector of line + + var f = [x1 - centerX, y1 - centerY]; + var a = d[0] * d[0] + d[1] * d[1]; + var b = 2 * (f[0] * d[0] + f[1] * d[1]); + var c = f[0] * f[0] + f[1] * f[1] - radius * radius; + var discriminant = b * b - 4 * a * c; + + if (discriminant < 0) { + return []; + } + + var t1 = (-b + Math.sqrt(discriminant)) / (2 * a); + var t2 = (-b - Math.sqrt(discriminant)) / (2 * a); + var tMin = Math.min(t1, t2); + var tMax = Math.max(t1, t2); + var inRangeParams = []; + + if (tMin >= 0 && tMin <= 1) { + inRangeParams.push(tMin); + } + + if (tMax >= 0 && tMax <= 1) { + inRangeParams.push(tMax); + } + + if (inRangeParams.length === 0) { + return []; + } + + var nearIntersectionX = inRangeParams[0] * d[0] + x1; + var nearIntersectionY = inRangeParams[0] * d[1] + y1; + + if (inRangeParams.length > 1) { + if (inRangeParams[0] == inRangeParams[1]) { + return [nearIntersectionX, nearIntersectionY]; + } else { + var farIntersectionX = inRangeParams[1] * d[0] + x1; + var farIntersectionY = inRangeParams[1] * d[1] + y1; + return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; + } + } else { + return [nearIntersectionX, nearIntersectionY]; + } +}; +var midOfThree = function midOfThree(a, b, c) { + if (b <= a && a <= c || c <= a && a <= b) { + return a; + } else if (a <= b && b <= c || c <= b && b <= a) { + return b; + } else { + return c; + } +}; // (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4) + +var finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) { + var dx13 = x1 - x3; + var dx21 = x2 - x1; + var dx43 = x4 - x3; + var dy13 = y1 - y3; + var dy21 = y2 - y1; + var dy43 = y4 - y3; + var ua_t = dx43 * dy13 - dy43 * dx13; + var ub_t = dx21 * dy13 - dy21 * dx13; + var u_b = dy43 * dx21 - dx43 * dy21; + + if (u_b !== 0) { + var ua = ua_t / u_b; + var ub = ub_t / u_b; + var flptThreshold = 0.001; + + var _min = 0 - flptThreshold; + + var _max = 1 + flptThreshold; + + if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) { + return [x1 + ua * dx21, y1 + ua * dy21]; + } else { + if (!infiniteLines) { + return []; + } else { + return [x1 + ua * dx21, y1 + ua * dy21]; + } + } + } else { + if (ua_t === 0 || ub_t === 0) { + // Parallel, coincident lines. Check if overlap + // Check endpoint of second line + if (midOfThree(x1, x2, x4) === x4) { + return [x4, y4]; + } // Check start point of second line + + + if (midOfThree(x1, x2, x3) === x3) { + return [x3, y3]; + } // Endpoint of first line + + + if (midOfThree(x3, x4, x2) === x2) { + return [x2, y2]; + } + + return []; + } else { + // Parallel, non-coincident + return []; + } + } +}; // math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding ) +// intersect a node polygon (pts transformed) +// +// math.polygonIntersectLine( x, y, basePoints, centerX, centerY ) +// intersect the points (no transform) + +var polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var transformedPoints = new Array(basePoints.length); + var doTransform = true; + + if (width == null) { + doTransform = false; + } + + var points; + + if (doTransform) { + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = basePoints[i * 2] * width + centerX; + transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY; + } + + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + } else { + points = basePoints; + } + + var currentX, currentY, nextX, nextY; + + for (var _i2 = 0; _i2 < points.length / 2; _i2++) { + currentX = points[_i2 * 2]; + currentY = points[_i2 * 2 + 1]; + + if (_i2 < points.length / 2 - 1) { + nextX = points[(_i2 + 1) * 2]; + nextY = points[(_i2 + 1) * 2 + 1]; + } else { + nextX = points[0]; + nextY = points[1]; + } + + intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + return intersections; +}; +var roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var lines = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + + if (i === 0) { + lines[basePoints.length - 2] = cp0x; + lines[basePoints.length - 1] = cp0y; + } else { + lines[i * 4 - 2] = cp0x; + lines[i * 4 - 1] = cp0y; + } + + lines[i * 4] = cp1x; + lines[i * 4 + 1] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + intersection = intersectLineCircle(x, y, centerX, centerY, cx, cy, cornerRadius); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + for (var _i3 = 0; _i3 < lines.length / 4; _i3++) { + intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[_i3 * 4], lines[_i3 * 4 + 1], lines[_i3 * 4 + 2], lines[_i3 * 4 + 3], false); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + if (intersections.length > 2) { + var lowestIntersection = [intersections[0], intersections[1]]; + var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2); + + for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) { + var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2); + + if (squaredDistance <= lowestSquaredDistance) { + lowestIntersection[0] = intersections[_i4 * 2]; + lowestIntersection[1] = intersections[_i4 * 2 + 1]; + lowestSquaredDistance = squaredDistance; + } + } + + return lowestIntersection; + } + + return intersections; +}; +var shortenIntersection = function shortenIntersection(intersection, offset, amount) { + var disp = [intersection[0] - offset[0], intersection[1] - offset[1]]; + var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]); + var lenRatio = (length - amount) / length; + + if (lenRatio < 0) { + lenRatio = 0.00001; + } + + return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]]; +}; +var generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) { + var points = generateUnitNgonPoints(sides, rotationRadians); + points = fitPolygonToSquare(points); + return points; +}; +var fitPolygonToSquare = function fitPolygonToSquare(points) { + var x, y; + var sides = points.length / 2; + var minX = Infinity, + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity; + + for (var i = 0; i < sides; i++) { + x = points[2 * i]; + y = points[2 * i + 1]; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } // stretch factors + + + var sx = 2 / (maxX - minX); + var sy = 2 / (maxY - minY); + + for (var _i5 = 0; _i5 < sides; _i5++) { + x = points[2 * _i5] = points[2 * _i5] * sx; + y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + + if (minY < -1) { + for (var _i6 = 0; _i6 < sides; _i6++) { + y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY); + } + } + + return points; +}; +var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) { + var increment = 1.0 / sides * 2 * Math.PI; + var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0; + startAngle += rotationRadians; + var points = new Array(sides * 2); + var currentAngle; + + for (var i = 0; i < sides; i++) { + currentAngle = i * increment + startAngle; + points[2 * i] = Math.cos(currentAngle); // x + + points[2 * i + 1] = Math.sin(-currentAngle); // y + } + + return points; +}; // Set the default radius, unless half of width or height is smaller than default + +var getRoundRectangleRadius = function getRoundRectangleRadius(width, height) { + return Math.min(width / 4, height / 4, 8); +}; // Set the default radius + +var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) { + return Math.min(width / 10, height / 10, 8); +}; +var getCutRectangleCornerLength = function getCutRectangleCornerLength() { + return 8; +}; +var bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) { + return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0]; +}; // get curve width, height, and control point position offsets as a percentage of node height / width + +var getBarrelCurveConstants = function getBarrelCurveConstants(width, height) { + return { + heightOffset: Math.min(15, 0.05 * height), + widthOffset: Math.min(100, 0.25 * width), + ctrlPtOffsetPct: 0.05 + }; +}; + +var pageRankDefaults = defaults$g({ + dampingFactor: 0.8, + precision: 0.000001, + iterations: 200, + weight: function weight(edge) { + return 1; + } +}); +var elesfn$o = { + pageRank: function pageRank(options) { + var _pageRankDefaults = pageRankDefaults(options), + dampingFactor = _pageRankDefaults.dampingFactor, + precision = _pageRankDefaults.precision, + iterations = _pageRankDefaults.iterations, + weight = _pageRankDefaults.weight; + + var cy = this._private.cy; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var numNodes = nodes.length; + var numNodesSqd = numNodes * numNodes; + var numEdges = edges.length; // Construct transposed adjacency matrix + // First lets have a zeroed matrix of the right size + // We'll also keep track of the sum of each column + + var matrix = new Array(numNodesSqd); + var columnSum = new Array(numNodes); + var additionalProb = (1 - dampingFactor) / numNodes; // Create null matrix + + for (var i = 0; i < numNodes; i++) { + for (var j = 0; j < numNodes; j++) { + var n = i * numNodes + j; + matrix[n] = 0; + } + + columnSum[i] = 0; + } // Now, process edges + + + for (var _i = 0; _i < numEdges; _i++) { + var edge = edges[_i]; + var srcId = edge.data('source'); + var tgtId = edge.data('target'); // Don't include loops in the matrix + + if (srcId === tgtId) { + continue; + } + + var s = nodes.indexOfId(srcId); + var t = nodes.indexOfId(tgtId); + var w = weight(edge); + + var _n = t * numNodes + s; // Update matrix + + + matrix[_n] += w; // Update column sum + + columnSum[s] += w; + } // Add additional probability based on damping factor + // Also, take into account columns that have sum = 0 + + + var p = 1.0 / numNodes + additionalProb; // Shorthand + // Traverse matrix, column by column + + for (var _j = 0; _j < numNodes; _j++) { + if (columnSum[_j] === 0) { + // No 'links' out from node jth, assume equal probability for each possible node + for (var _i2 = 0; _i2 < numNodes; _i2++) { + var _n2 = _i2 * numNodes + _j; + + matrix[_n2] = p; + } + } else { + // Node jth has outgoing link, compute normalized probabilities + for (var _i3 = 0; _i3 < numNodes; _i3++) { + var _n3 = _i3 * numNodes + _j; + + matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb; + } + } + } // Compute dominant eigenvector using power method + + + var eigenvector = new Array(numNodes); + var temp = new Array(numNodes); + var previous; // Start with a vector of all 1's + // Also, initialize a null vector which will be used as shorthand + + for (var _i4 = 0; _i4 < numNodes; _i4++) { + eigenvector[_i4] = 1; + } + + for (var iter = 0; iter < iterations; iter++) { + // Temp array with all 0's + for (var _i5 = 0; _i5 < numNodes; _i5++) { + temp[_i5] = 0; + } // Multiply matrix with previous result + + + for (var _i6 = 0; _i6 < numNodes; _i6++) { + for (var _j2 = 0; _j2 < numNodes; _j2++) { + var _n4 = _i6 * numNodes + _j2; + + temp[_i6] += matrix[_n4] * eigenvector[_j2]; + } + } + + inPlaceSumNormalize(temp); + previous = eigenvector; + eigenvector = temp; + temp = previous; + var diff = 0; // Compute difference (squared module) of both vectors + + for (var _i7 = 0; _i7 < numNodes; _i7++) { + var delta = previous[_i7] - eigenvector[_i7]; + diff += delta * delta; + } // If difference is less than the desired threshold, stop iterating + + + if (diff < precision) { + break; + } + } // Construct result + + + var res = { + rank: function rank(node) { + node = cy.collection(node)[0]; + return eigenvector[nodes.indexOf(node)]; + } + }; + return res; + } // pageRank + +}; // elesfn + +var defaults$f = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false, + alpha: 0 +}); +var elesfn$n = { + degreeCentralityNormalized: function degreeCentralityNormalized(options) { + options = defaults$f(options); + var cy = this.cy(); + var nodes = this.nodes(); + var numNodes = nodes.length; + + if (!options.directed) { + var degrees = {}; + var maxDegree = 0; + + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; // add current node to the current options object and call degreeCentrality + + options.root = node; + var currDegree = this.degreeCentrality(options); + + if (maxDegree < currDegree.degree) { + maxDegree = currDegree.degree; + } + + degrees[node.id()] = currDegree.degree; + } + + return { + degree: function degree(node) { + if (maxDegree === 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return degrees[node.id()] / maxDegree; + } + }; + } else { + var indegrees = {}; + var outdegrees = {}; + var maxIndegree = 0; + var maxOutdegree = 0; + + for (var _i = 0; _i < numNodes; _i++) { + var _node = nodes[_i]; + + var id = _node.id(); // add current node to the current options object and call degreeCentrality + + + options.root = _node; + + var _currDegree = this.degreeCentrality(options); + + if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; + if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; + indegrees[id] = _currDegree.indegree; + outdegrees[id] = _currDegree.outdegree; + } + + return { + indegree: function indegree(node) { + if (maxIndegree == 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return indegrees[node.id()] / maxIndegree; + }, + outdegree: function outdegree(node) { + if (maxOutdegree === 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return outdegrees[node.id()] / maxOutdegree; + } + }; + } + }, + // degreeCentralityNormalized + // Implemented from the algorithm in Opsahl's paper + // "Node centrality in weighted networks: Generalizing degree and shortest paths" + // check the heading 2 "Degree" + degreeCentrality: function degreeCentrality(options) { + options = defaults$f(options); + var cy = this.cy(); + var callingEles = this; + var _options = options, + root = _options.root, + weight = _options.weight, + directed = _options.directed, + alpha = _options.alpha; + root = cy.collection(root)[0]; + + if (!directed) { + var connEdges = root.connectedEdges().intersection(callingEles); + var k = connEdges.length; + var s = 0; // Now, sum edge weights + + for (var i = 0; i < connEdges.length; i++) { + s += weight(connEdges[i]); + } + + return { + degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha) + }; + } else { + var edges = root.connectedEdges(); + var incoming = edges.filter(function (edge) { + return edge.target().same(root) && callingEles.has(edge); + }); + var outgoing = edges.filter(function (edge) { + return edge.source().same(root) && callingEles.has(edge); + }); + var k_in = incoming.length; + var k_out = outgoing.length; + var s_in = 0; + var s_out = 0; // Now, sum incoming edge weights + + for (var _i2 = 0; _i2 < incoming.length; _i2++) { + s_in += weight(incoming[_i2]); + } // Now, sum outgoing edge weights + + + for (var _i3 = 0; _i3 < outgoing.length; _i3++) { + s_out += weight(outgoing[_i3]); + } + + return { + indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha), + outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha) + }; + } + } // degreeCentrality + +}; // elesfn +// nice, short mathematical alias + +elesfn$n.dc = elesfn$n.degreeCentrality; +elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; + +var defaults$e = defaults$g({ + harmonic: true, + weight: function weight() { + return 1; + }, + directed: false, + root: null +}); +var elesfn$m = { + closenessCentralityNormalized: function closenessCentralityNormalized(options) { + var _defaults = defaults$e(options), + harmonic = _defaults.harmonic, + weight = _defaults.weight, + directed = _defaults.directed; + + var cy = this.cy(); + var closenesses = {}; + var maxCloseness = 0; + var nodes = this.nodes(); + var fw = this.floydWarshall({ + weight: weight, + directed: directed + }); // Compute closeness for every node and find the maximum closeness + + for (var i = 0; i < nodes.length; i++) { + var currCloseness = 0; + var node_i = nodes[i]; + + for (var j = 0; j < nodes.length; j++) { + if (i !== j) { + var d = fw.distance(node_i, nodes[j]); + + if (harmonic) { + currCloseness += 1 / d; + } else { + currCloseness += d; + } + } + } + + if (!harmonic) { + currCloseness = 1 / currCloseness; + } + + if (maxCloseness < currCloseness) { + maxCloseness = currCloseness; + } + + closenesses[node_i.id()] = currCloseness; + } + + return { + closeness: function closeness(node) { + if (maxCloseness == 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node)[0].id(); + } else { + // from is a node + node = node.id(); + } + + return closenesses[node] / maxCloseness; + } + }; + }, + // Implemented from pseudocode from wikipedia + closenessCentrality: function closenessCentrality(options) { + var _defaults2 = defaults$e(options), + root = _defaults2.root, + weight = _defaults2.weight, + directed = _defaults2.directed, + harmonic = _defaults2.harmonic; + + root = this.filter(root)[0]; // we need distance from this node to every other node + + var dijkstra = this.dijkstra({ + root: root, + weight: weight, + directed: directed + }); + var totalDistance = 0; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + + if (!n.same(root)) { + var d = dijkstra.distanceTo(n); + + if (harmonic) { + totalDistance += 1 / d; + } else { + totalDistance += d; + } + } + } + + return harmonic ? totalDistance : 1 / totalDistance; + } // closenessCentrality + +}; // elesfn +// nice, short mathematical alias + +elesfn$m.cc = elesfn$m.closenessCentrality; +elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; + +var defaults$d = defaults$g({ + weight: null, + directed: false +}); +var elesfn$l = { + // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes + betweennessCentrality: function betweennessCentrality(options) { + var _defaults = defaults$d(options), + directed = _defaults.directed, + weight = _defaults.weight; + + var weighted = weight != null; + var cy = this.cy(); // starting + + var V = this.nodes(); + var A = {}; + var _C = {}; + var max = 0; + var C = { + set: function set(key, val) { + _C[key] = val; + + if (val > max) { + max = val; + } + }, + get: function get(key) { + return _C[key]; + } + }; // A contains the neighborhoods of every node + + for (var i = 0; i < V.length; i++) { + var v = V[i]; + var vid = v.id(); + + if (directed) { + A[vid] = v.outgoers().nodes(); // get outgoers of every node + } else { + A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node + } + + C.set(vid, 0); + } + + var _loop = function _loop(s) { + var sid = V[s].id(); + var S = []; // stack + + var P = {}; + var g = {}; + var d = {}; + var Q = new Heap__default["default"](function (a, b) { + return d[a] - d[b]; + }); // queue + // init dictionaries + + for (var _i = 0; _i < V.length; _i++) { + var _vid = V[_i].id(); + + P[_vid] = []; + g[_vid] = 0; + d[_vid] = Infinity; + } + + g[sid] = 1; // sigma + + d[sid] = 0; // distance to s + + Q.push(sid); + + while (!Q.empty()) { + var _v = Q.pop(); + + S.push(_v); + + if (weighted) { + for (var j = 0; j < A[_v].length; j++) { + var w = A[_v][j]; + var vEle = cy.getElementById(_v); + var edge = void 0; + + if (vEle.edgesTo(w).length > 0) { + edge = vEle.edgesTo(w)[0]; + } else { + edge = w.edgesTo(vEle)[0]; + } + + var edgeWeight = weight(edge); + w = w.id(); + + if (d[w] > d[_v] + edgeWeight) { + d[w] = d[_v] + edgeWeight; + + if (Q.nodes.indexOf(w) < 0) { + //if w is not in Q + Q.push(w); + } else { + // update position if w is in Q + Q.updateItem(w); + } + + g[w] = 0; + P[w] = []; + } + + if (d[w] == d[_v] + edgeWeight) { + g[w] = g[w] + g[_v]; + P[w].push(_v); + } + } + } else { + for (var _j = 0; _j < A[_v].length; _j++) { + var _w = A[_v][_j].id(); + + if (d[_w] == Infinity) { + Q.push(_w); + d[_w] = d[_v] + 1; + } + + if (d[_w] == d[_v] + 1) { + g[_w] = g[_w] + g[_v]; + + P[_w].push(_v); + } + } + } + } + + var e = {}; + + for (var _i2 = 0; _i2 < V.length; _i2++) { + e[V[_i2].id()] = 0; + } + + while (S.length > 0) { + var _w2 = S.pop(); + + for (var _j2 = 0; _j2 < P[_w2].length; _j2++) { + var _v2 = P[_w2][_j2]; + e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]); + } + + if (_w2 != V[s].id()) { + C.set(_w2, C.get(_w2) + e[_w2]); + } + } + }; + + for (var s = 0; s < V.length; s++) { + _loop(s); + } + + var ret = { + betweenness: function betweenness(node) { + var id = cy.collection(node).id(); + return C.get(id); + }, + betweennessNormalized: function betweennessNormalized(node) { + if (max == 0) { + return 0; + } + + var id = cy.collection(node).id(); + return C.get(id) / max; + } + }; // alias + + ret.betweennessNormalised = ret.betweennessNormalized; + return ret; + } // betweennessCentrality + +}; // elesfn +// nice, short mathematical alias + +elesfn$l.bc = elesfn$l.betweennessCentrality; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 +/* eslint-disable no-unused-vars */ + +var defaults$c = defaults$g({ + expandFactor: 2, + // affects time of computation and cluster granularity to some extent: M * M + inflateFactor: 2, + // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j) + multFactor: 1, + // optional self loops for each node. Use a neutral value to improve cluster computations. + maxIterations: 20, + // maximum number of iterations of the MCL algorithm in a single run + attributes: [// attributes/features used to group nodes, ie. similarity values between nodes + function (edge) { + return 1; + }] +}); +/* eslint-enable */ + +var setOptions$3 = function setOptions(options) { + return defaults$c(options); +}; +/* eslint-enable */ + + +var getSimilarity$1 = function getSimilarity(edge, attributes) { + var total = 0; + + for (var i = 0; i < attributes.length; i++) { + total += attributes[i](edge); + } + + return total; +}; + +var addLoops = function addLoops(M, n, val) { + for (var i = 0; i < n; i++) { + M[i * n + i] = val; + } +}; + +var normalize = function normalize(M, n) { + var sum; + + for (var col = 0; col < n; col++) { + sum = 0; + + for (var row = 0; row < n; row++) { + sum += M[row * n + col]; + } + + for (var _row = 0; _row < n; _row++) { + M[_row * n + col] = M[_row * n + col] / sum; + } + } +}; // TODO: blocked matrix multiplication? + + +var mmult = function mmult(A, B, n) { + var C = new Array(n * n); + + for (var i = 0; i < n; i++) { + for (var j = 0; j < n; j++) { + C[i * n + j] = 0; + } + + for (var k = 0; k < n; k++) { + for (var _j = 0; _j < n; _j++) { + C[i * n + _j] += A[i * n + k] * B[k * n + _j]; + } + } + } + + return C; +}; + +var expand = function expand(M, n, expandFactor +/** power **/ +) { + var _M = M.slice(0); + + for (var p = 1; p < expandFactor; p++) { + M = mmult(M, _M, n); + } + + return M; +}; + +var inflate = function inflate(M, n, inflateFactor +/** r **/ +) { + var _M = new Array(n * n); // M(i,j) ^ inflatePower + + + for (var i = 0; i < n * n; i++) { + _M[i] = Math.pow(M[i], inflateFactor); + } + + normalize(_M, n); + return _M; +}; + +var hasConverged = function hasConverged(M, _M, n2, roundFactor) { + // Check that both matrices have the same elements (i,j) + for (var i = 0; i < n2; i++) { + var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places + + var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); + + if (v1 !== v2) { + return false; + } + } + + return true; +}; + +var assign$2 = function assign(M, n, nodes, cy) { + var clusters = []; + + for (var i = 0; i < n; i++) { + var cluster = []; + + for (var j = 0; j < n; j++) { + // Row-wise attractors and elements that they attract belong in same cluster + if (Math.round(M[i * n + j] * 1000) / 1000 > 0) { + cluster.push(nodes[j]); + } + } + + if (cluster.length !== 0) { + clusters.push(cy.collection(cluster)); + } + } + + return clusters; +}; + +var isDuplicate = function isDuplicate(c1, c2) { + for (var i = 0; i < c1.length; i++) { + if (!c2[i] || c1[i].id() !== c2[i].id()) { + return false; + } + } + + return true; +}; + +var removeDuplicates = function removeDuplicates(clusters) { + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j < clusters.length; j++) { + if (i != j && isDuplicate(clusters[i], clusters[j])) { + clusters.splice(j, 1); + } + } + } + + return clusters; +}; + +var markovClustering = function markovClustering(options) { + var nodes = this.nodes(); + var edges = this.edges(); + var cy = this.cy(); // Set parameters of algorithm: + + var opts = setOptions$3(options); // Map each node to its position in node array + + var id2position = {}; + + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } // Generate stochastic matrix M from input graph G (should be symmetric/undirected) + + + var n = nodes.length, + n2 = n * n; + + var M = new Array(n2), + _M; + + for (var _i = 0; _i < n2; _i++) { + M[_i] = 0; + } + + for (var e = 0; e < edges.length; e++) { + var edge = edges[e]; + var _i2 = id2position[edge.source().id()]; + var j = id2position[edge.target().id()]; + var sim = getSimilarity$1(edge, opts.attributes); + M[_i2 * n + j] += sim; // G should be symmetric and undirected + + M[j * n + _i2] += sim; + } // Begin Markov cluster algorithm + // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal + + + addLoops(M, n, opts.multFactor); // Step 2: M = normalize( M ); + + normalize(M, n); + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; // Step 3: + + _M = expand(M, n, opts.expandFactor); // Step 4: + + M = inflate(_M, n, opts.inflateFactor); // Step 5: check to see if ~steady state has been reached + + if (!hasConverged(M, _M, n2, 4)) { + isStillMoving = true; + } + + iterations++; + } // Build clusters from matrix + + + var clusters = assign$2(M, n, nodes, cy); // Remove duplicate clusters due to symmetry of graph and M matrix + + clusters = removeDuplicates(clusters); + return clusters; +}; + +var markovClustering$1 = { + markovClustering: markovClustering, + mcl: markovClustering +}; + +// Common distance metrics for clustering algorithms + +var identity = function identity(x) { + return x; +}; + +var absDiff = function absDiff(p, q) { + return Math.abs(q - p); +}; + +var addAbsDiff = function addAbsDiff(total, p, q) { + return total + absDiff(p, q); +}; + +var addSquaredDiff = function addSquaredDiff(total, p, q) { + return total + Math.pow(q - p, 2); +}; + +var sqrt = function sqrt(x) { + return Math.sqrt(x); +}; + +var maxAbsDiff = function maxAbsDiff(currentMax, p, q) { + return Math.max(currentMax, absDiff(p, q)); +}; + +var getDistance = function getDistance(length, getP, getQ, init, visit) { + var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity; + var ret = init; + var p, q; + + for (var dim = 0; dim < length; dim++) { + p = getP(dim); + q = getQ(dim); + ret = visit(ret, p, q); + } + + return post(ret); +}; + +var distances = { + euclidean: function euclidean(length, getP, getQ) { + if (length >= 2) { + return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt); + } else { + // for single attr case, more efficient to avoid sqrt + return getDistance(length, getP, getQ, 0, addAbsDiff); + } + }, + squaredEuclidean: function squaredEuclidean(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addSquaredDiff); + }, + manhattan: function manhattan(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addAbsDiff); + }, + max: function max(length, getP, getQ) { + return getDistance(length, getP, getQ, -Infinity, maxAbsDiff); + } +}; // in case the user accidentally doesn't use camel case + +distances['squared-euclidean'] = distances['squaredEuclidean']; +distances['squaredeuclidean'] = distances['squaredEuclidean']; +function clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) { + var impl; + + if (fn$6(method)) { + impl = method; + } else { + impl = distances[method] || distances.euclidean; + } + + if (length === 0 && fn$6(method)) { + return impl(nodeP, nodeQ); + } else { + return impl(length, getP, getQ, nodeP, nodeQ); + } +} + +var defaults$b = defaults$g({ + k: 2, + m: 2, + sensitivityThreshold: 0.0001, + distance: 'euclidean', + maxIterations: 10, + attributes: [], + testMode: false, + testCentroids: null +}); + +var setOptions$2 = function setOptions(options) { + return defaults$b(options); +}; +/* eslint-enable */ + + +var getDist = function getDist(type, node, centroid, attributes, mode) { + var noNodeP = mode !== 'kMedoids'; + var getP = noNodeP ? function (i) { + return centroid[i]; + } : function (i) { + return attributes[i](centroid); + }; + + var getQ = function getQ(i) { + return attributes[i](node); + }; + + var nodeP = centroid; + var nodeQ = node; + return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ); +}; + +var randomCentroids = function randomCentroids(nodes, k, attributes) { + var ndim = attributes.length; + var min = new Array(ndim); + var max = new Array(ndim); + var centroids = new Array(k); + var centroid = null; // Find min, max values for each attribute dimension + + for (var i = 0; i < ndim; i++) { + min[i] = nodes.min(attributes[i]).value; + max[i] = nodes.max(attributes[i]).value; + } // Build k centroids, each represented as an n-dim feature vector + + + for (var c = 0; c < k; c++) { + centroid = []; + + for (var _i = 0; _i < ndim; _i++) { + centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value + } + + centroids[c] = centroid; + } + + return centroids; +}; + +var classify = function classify(node, centroids, distance, attributes, type) { + var min = Infinity; + var index = 0; + + for (var i = 0; i < centroids.length; i++) { + var dist = getDist(distance, node, centroids[i], attributes, type); + + if (dist < min) { + min = dist; + index = i; + } + } + + return index; +}; + +var buildCluster = function buildCluster(centroid, nodes, assignment) { + var cluster = []; + var node = null; + + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + + if (assignment[node.id()] === centroid) { + //console.log("Node " + node.id() + " is associated with medoid #: " + m); + cluster.push(node); + } + } + + return cluster; +}; + +var haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) { + return Math.abs(v2 - v1) <= sensitivityThreshold; +}; + +var haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) { + for (var i = 0; i < v1.length; i++) { + for (var j = 0; j < v1[i].length; j++) { + var diff = Math.abs(v1[i][j] - v2[i][j]); + + if (diff > sensitivityThreshold) { + return false; + } + } + } + + return true; +}; + +var seenBefore = function seenBefore(node, medoids, n) { + for (var i = 0; i < n; i++) { + if (node === medoids[i]) return true; + } + + return false; +}; + +var randomMedoids = function randomMedoids(nodes, k) { + var medoids = new Array(k); // For small data sets, the probability of medoid conflict is greater, + // so we need to check to see if we've already seen or chose this node before. + + if (nodes.length < 50) { + // Randomly select k medoids from the n nodes + for (var i = 0; i < k; i++) { + var node = nodes[Math.floor(Math.random() * nodes.length)]; // If we've already chosen this node to be a medoid, don't choose it again (for small data sets). + // Instead choose a different random node. + + while (seenBefore(node, medoids, i)) { + node = nodes[Math.floor(Math.random() * nodes.length)]; + } + + medoids[i] = node; + } + } else { + // Relatively large data set, so pretty safe to not check and just select random nodes + for (var _i2 = 0; _i2 < k; _i2++) { + medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)]; + } + } + + return medoids; +}; + +var findCost = function findCost(potentialNewMedoid, cluster, attributes) { + var cost = 0; + + for (var n = 0; n < cluster.length; n++) { + cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids'); + } + + return cost; +}; + +var kMeans = function kMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; // Set parameters of algorithm: # of clusters, distance metric, etc. + + var opts = setOptions$2(options); // Begin k-means algorithm + + var clusters = new Array(opts.k); + var assignment = {}; + var centroids; // Step 1: Initialize centroid positions + + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') { + // TODO: implement a seeded random number generator. + opts.testCentroids; + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } else if (_typeof(opts.testCentroids) === 'object') { + centroids = opts.testCentroids; + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest centroid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster # + + assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans'); + } // Step 3: For each of the k clusters, update its centroid + + + isStillMoving = false; + + for (var c = 0; c < opts.k; c++) { + // Get all nodes that belong to this cluster + var cluster = buildCluster(c, nodes, assignment); + + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } // Update centroids by calculating avg of all nodes within the cluster. + + + var ndim = opts.attributes.length; + var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ] + + var newCentroid = new Array(ndim); + var sum = new Array(ndim); + + for (var d = 0; d < ndim; d++) { + sum[d] = 0.0; + + for (var i = 0; i < cluster.length; i++) { + node = cluster[i]; + sum[d] += opts.attributes[d](node); + } + + newCentroid[d] = sum[d] / cluster.length; // Check to see if algorithm has converged, i.e. when centroids no longer change + + if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) { + isStillMoving = true; + } + } + + centroids[c] = newCentroid; + clusters[c] = cy.collection(cluster); + } + + iterations++; + } + + return clusters; +}; + +var kMedoids = function kMedoids(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; + var opts = setOptions$2(options); // Begin k-medoids algorithm + + var clusters = new Array(opts.k); + var medoids; + var assignment = {}; + var curCost; + var minCosts = new Array(opts.k); // minimum cost configuration for each cluster + // Step 1: Initialize k medoids + + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') { + medoids = opts.testCentroids; + } else { + medoids = randomMedoids(nodes, opts.k); + } + } else { + medoids = randomMedoids(nodes, opts.k); + } + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest medoid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster # + + assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids'); + } + + isStillMoving = false; // Step 3: For each medoid m, and for each node assciated with mediod m, + // select the node with the lowest configuration cost as new medoid. + + for (var m = 0; m < medoids.length; m++) { + // Get all nodes that belong to this medoid + var cluster = buildCluster(m, nodes, assignment); + + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } + + minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost + // Select different medoid if its configuration has the lowest cost + + for (var _n = 0; _n < cluster.length; _n++) { + curCost = findCost(cluster[_n], cluster, opts.attributes); + + if (curCost < minCosts[m]) { + minCosts[m] = curCost; + medoids[m] = cluster[_n]; + isStillMoving = true; + } + } + + clusters[m] = cy.collection(cluster); + } + + iterations++; + } + + return clusters; +}; + +var updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) { + var numerator, denominator; + + for (var n = 0; n < nodes.length; n++) { + for (var c = 0; c < centroids.length; c++) { + weight[n][c] = Math.pow(U[n][c], opts.m); + } + } + + for (var _c = 0; _c < centroids.length; _c++) { + for (var dim = 0; dim < opts.attributes.length; dim++) { + numerator = 0; + denominator = 0; + + for (var _n2 = 0; _n2 < nodes.length; _n2++) { + numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]); + denominator += weight[_n2][_c]; + } + + centroids[_c][dim] = numerator / denominator; + } + } +}; + +var updateMembership = function updateMembership(U, _U, centroids, nodes, opts) { + // Save previous step + for (var i = 0; i < U.length; i++) { + _U[i] = U[i].slice(); + } + + var sum, numerator, denominator; + var pow = 2 / (opts.m - 1); + + for (var c = 0; c < centroids.length; c++) { + for (var n = 0; n < nodes.length; n++) { + sum = 0; + + for (var k = 0; k < centroids.length; k++) { + // against all other centroids + numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans'); + denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans'); + sum += Math.pow(numerator / denominator, pow); + } + + U[n][c] = 1 / sum; + } + } +}; + +var assign$1 = function assign(nodes, U, opts, cy) { + var clusters = new Array(opts.k); + + for (var c = 0; c < clusters.length; c++) { + clusters[c] = []; + } + + var max; + var index; + + for (var n = 0; n < U.length; n++) { + // for each node (U is N x C matrix) + max = -Infinity; + index = -1; // Determine which cluster the node is most likely to belong in + + for (var _c2 = 0; _c2 < U[0].length; _c2++) { + if (U[n][_c2] > max) { + max = U[n][_c2]; + index = _c2; + } + } + + clusters[index].push(nodes[n]); + } // Turn every array into a collection of nodes + + + for (var _c3 = 0; _c3 < clusters.length; _c3++) { + clusters[_c3] = cy.collection(clusters[_c3]); + } + + return clusters; +}; + +var fuzzyCMeans = function fuzzyCMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions$2(options); // Begin fuzzy c-means algorithm + + var clusters; + var centroids; + var U; + + var _U; + + var weight; // Step 1: Initialize letiables. + + _U = new Array(nodes.length); + + for (var i = 0; i < nodes.length; i++) { + // N x C matrix + _U[i] = new Array(opts.k); + } + + U = new Array(nodes.length); + + for (var _i3 = 0; _i3 < nodes.length; _i3++) { + // N x C matrix + U[_i3] = new Array(opts.k); + } + + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var total = 0; + + for (var j = 0; j < opts.k; j++) { + U[_i4][j] = Math.random(); + total += U[_i4][j]; + } + + for (var _j = 0; _j < opts.k; _j++) { + U[_i4][_j] = U[_i4][_j] / total; + } + } + + centroids = new Array(opts.k); + + for (var _i5 = 0; _i5 < opts.k; _i5++) { + centroids[_i5] = new Array(opts.attributes.length); + } + + weight = new Array(nodes.length); + + for (var _i6 = 0; _i6 < nodes.length; _i6++) { + // N x C matrix + weight[_i6] = new Array(opts.k); + } // end init FCM + + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; // Step 2: Calculate the centroids for each step. + + updateCentroids(centroids, nodes, U, weight, opts); // Step 3: Update the partition matrix U. + + updateMembership(U, _U, centroids, nodes, opts); // Step 4: Check for convergence. + + if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) { + isStillMoving = true; + } + + iterations++; + } // Assign nodes to clusters with highest probability. + + + clusters = assign$1(nodes, U, opts, cy); + return { + clusters: clusters, + degreeOfMembership: U + }; +}; + +var kClustering = { + kMeans: kMeans, + kMedoids: kMedoids, + fuzzyCMeans: fuzzyCMeans, + fcm: fuzzyCMeans +}; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 +var defaults$a = defaults$g({ + distance: 'euclidean', + // distance metric to compare nodes + linkage: 'min', + // linkage criterion : how to determine the distance between clusters of nodes + mode: 'threshold', + // mode:'threshold' => clusters must be threshold distance apart + threshold: Infinity, + // the distance threshold + // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters + addDendrogram: false, + // whether to add the dendrogram to the graph for viz + dendrogramDepth: 0, + // depth at which dendrogram branches are merged into the returned clusters + attributes: [] // array of attr functions + +}); +var linkageAliases = { + 'single': 'min', + 'complete': 'max' +}; + +var setOptions$1 = function setOptions(options) { + var opts = defaults$a(options); + var preferredAlias = linkageAliases[opts.linkage]; + + if (preferredAlias != null) { + opts.linkage = preferredAlias; + } + + return opts; +}; + +var mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) { + // Find two closest clusters from cached mins + var minKey = 0; + var min = Infinity; + var dist; + var attrs = opts.attributes; + + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; + + for (var i = 0; i < clusters.length; i++) { + var key = clusters[i].key; + var _dist = dists[key][mins[key]]; + + if (_dist < min) { + minKey = key; + min = _dist; + } + } + + if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) { + return false; + } + + var c1 = index[minKey]; + var c2 = index[mins[minKey]]; + var merged; // Merge two closest clusters + + if (opts.mode === 'dendrogram') { + merged = { + left: c1, + right: c2, + key: c1.key + }; + } else { + merged = { + value: c1.value.concat(c2.value), + key: c1.key + }; + } + + clusters[c1.index] = merged; + clusters.splice(c2.index, 1); + index[c1.key] = merged; // Update distances with new merged cluster + + for (var _i = 0; _i < clusters.length; _i++) { + var cur = clusters[_i]; + + if (c1.key === cur.key) { + dist = Infinity; + } else if (opts.linkage === 'min') { + dist = dists[c1.key][cur.key]; + + if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'max') { + dist = dists[c1.key][cur.key]; + + if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'mean') { + dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size); + } else { + if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]); + } + + dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric + } // Update cached mins + + + for (var _i2 = 0; _i2 < clusters.length; _i2++) { + var key1 = clusters[_i2].key; + + if (mins[key1] === c1.key || mins[key1] === c2.key) { + var _min = key1; + + for (var j = 0; j < clusters.length; j++) { + var key2 = clusters[j].key; + + if (dists[key1][key2] < dists[key1][_min]) { + _min = key2; + } + } + + mins[key1] = _min; + } + + clusters[_i2].index = _i2; + } // Clean up meta data used for clustering + + + c1.key = c2.key = c1.index = c2.index = null; + return true; +}; + +var getAllChildren = function getAllChildren(root, arr, cy) { + if (!root) return; + + if (root.value) { + arr.push(root.value); + } else { + if (root.left) getAllChildren(root.left, arr); + if (root.right) getAllChildren(root.right, arr); + } +}; + +var buildDendrogram = function buildDendrogram(root, cy) { + if (!root) return ''; + + if (root.left && root.right) { + var leftStr = buildDendrogram(root.left, cy); + var rightStr = buildDendrogram(root.right, cy); + var node = cy.add({ + group: 'nodes', + data: { + id: leftStr + ',' + rightStr + } + }); + cy.add({ + group: 'edges', + data: { + source: leftStr, + target: node.id() + } + }); + cy.add({ + group: 'edges', + data: { + source: rightStr, + target: node.id() + } + }); + return node.id(); + } else if (root.value) { + return root.value.id(); + } +}; + +var buildClustersFromTree = function buildClustersFromTree(root, k, cy) { + if (!root) return []; + var left = [], + right = [], + leaves = []; + + if (k === 0) { + // don't cut tree, simply return all nodes as 1 single cluster + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + leaves = left.concat(right); + return [cy.collection(leaves)]; + } else if (k === 1) { + // cut at root + if (root.value) { + // leaf node + return [cy.collection(root.value)]; + } else { + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + return [cy.collection(left), cy.collection(right)]; + } + } else { + if (root.value) { + return [cy.collection(root.value)]; + } else { + if (root.left) left = buildClustersFromTree(root.left, k - 1, cy); + if (root.right) right = buildClustersFromTree(root.right, k - 1, cy); + return left.concat(right); + } + } +}; +/* eslint-enable */ + + +var hierarchicalClustering = function hierarchicalClustering(options) { + var cy = this.cy(); + var nodes = this.nodes(); // Set parameters of algorithm: linkage type, distance metric, etc. + + var opts = setOptions$1(options); + var attrs = opts.attributes; + + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; // Begin hierarchical algorithm + + + var clusters = []; + var dists = []; // distances between each pair of clusters + + var mins = []; // closest cluster for each cluster + + var index = []; // hash of all clusters by key + // In agglomerative (bottom-up) clustering, each node starts as its own cluster + + for (var n = 0; n < nodes.length; n++) { + var cluster = { + value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]], + key: n, + index: n + }; + clusters[n] = cluster; + index[n] = cluster; + dists[n] = []; + mins[n] = 0; + } // Calculate the distance between each pair of clusters + + + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j <= i; j++) { + var dist = void 0; + + if (opts.mode === 'dendrogram') { + // modes store cluster values differently + dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value); + } else { + dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]); + } + + dists[i][j] = dist; + dists[j][i] = dist; + + if (dist < dists[i][mins[i]]) { + mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j + } + } + } // Find the closest pair of clusters and merge them into a single cluster. + // Update distances between new cluster and each of the old clusters, and loop until threshold reached. + + + var merged = mergeClosest(clusters, index, dists, mins, opts); + + while (merged) { + merged = mergeClosest(clusters, index, dists, mins, opts); + } + + var retClusters; // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges + // in addition to returning the clusters. + + if (opts.mode === 'dendrogram') { + retClusters = buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy); + if (opts.addDendrogram) buildDendrogram(clusters[0], cy); + } else { + // Regular mode simply returns the clusters + retClusters = new Array(clusters.length); + clusters.forEach(function (cluster, i) { + // Clean up meta data used for clustering + cluster.key = cluster.index = null; + retClusters[i] = cy.collection(cluster.value); + }); + } + + return retClusters; +}; + +var hierarchicalClustering$1 = { + hierarchicalClustering: hierarchicalClustering, + hca: hierarchicalClustering +}; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 +var defaults$9 = defaults$g({ + distance: 'euclidean', + // distance metric to compare attributes between two nodes + preference: 'median', + // suitability of a data point to serve as an exemplar + damping: 0.8, + // damping factor between [0.5, 1) + maxIterations: 1000, + // max number of iterations to run + minIterations: 100, + // min number of iterations to run in order for clustering to stop + attributes: [// functions to quantify the similarity between any two points + // e.g. node => node.data('weight') + ] +}); + +var setOptions = function setOptions(options) { + var dmp = options.damping; + var pref = options.preference; + + if (!(0.5 <= dmp && dmp < 1)) { + error("Damping must range on [0.5, 1). Got: ".concat(dmp)); + } + + var validPrefs = ['median', 'mean', 'min', 'max']; + + if (!(validPrefs.some(function (v) { + return v === pref; + }) || number$1(pref))) { + error("Preference must be one of [".concat(validPrefs.map(function (p) { + return "'".concat(p, "'"); + }).join(', '), "] or a number. Got: ").concat(pref)); + } + + return defaults$9(options); +}; +/* eslint-enable */ + + +var getSimilarity = function getSimilarity(type, n1, n2, attributes) { + var attr = function attr(n, i) { + return attributes[i](n); + }; // nb negative because similarity should have an inverse relationship to distance + + + return -clusteringDistance(type, attributes.length, function (i) { + return attr(n1, i); + }, function (i) { + return attr(n2, i); + }, n1, n2); +}; + +var getPreference = function getPreference(S, preference) { + // larger preference = greater # of clusters + var p = null; + + if (preference === 'median') { + p = median(S); + } else if (preference === 'mean') { + p = mean(S); + } else if (preference === 'min') { + p = min(S); + } else if (preference === 'max') { + p = max(S); + } else { + // Custom preference number, as set by user + p = preference; + } + + return p; +}; + +var findExemplars = function findExemplars(n, R, A) { + var indices = []; + + for (var i = 0; i < n; i++) { + if (R[i * n + i] + A[i * n + i] > 0) { + indices.push(i); + } + } + + return indices; +}; + +var assignClusters = function assignClusters(n, S, exemplars) { + var clusters = []; + + for (var i = 0; i < n; i++) { + var index = -1; + var max = -Infinity; + + for (var ei = 0; ei < exemplars.length; ei++) { + var e = exemplars[ei]; + + if (S[i * n + e] > max) { + index = e; + max = S[i * n + e]; + } + } + + if (index > 0) { + clusters.push(index); + } + } + + for (var _ei = 0; _ei < exemplars.length; _ei++) { + clusters[exemplars[_ei]] = exemplars[_ei]; + } + + return clusters; +}; + +var assign = function assign(n, S, exemplars) { + var clusters = assignClusters(n, S, exemplars); + + for (var ei = 0; ei < exemplars.length; ei++) { + var ii = []; + + for (var c = 0; c < clusters.length; c++) { + if (clusters[c] === exemplars[ei]) { + ii.push(c); + } + } + + var maxI = -1; + var maxSum = -Infinity; + + for (var i = 0; i < ii.length; i++) { + var sum = 0; + + for (var j = 0; j < ii.length; j++) { + sum += S[ii[j] * n + ii[i]]; + } + + if (sum > maxSum) { + maxI = i; + maxSum = sum; + } + } + + exemplars[ei] = ii[maxI]; + } + + clusters = assignClusters(n, S, exemplars); + return clusters; +}; + +var affinityPropagation = function affinityPropagation(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions(options); // Map each node to its position in node array + + var id2position = {}; + + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } // Begin affinity propagation algorithm + + + var n; // number of data points + + var n2; // size of matrices + + var S; // similarity matrix (1D array) + + var p; // preference/suitability of a data point to serve as an exemplar + + var R; // responsibility matrix (1D array) + + var A; // availability matrix (1D array) + + n = nodes.length; + n2 = n * n; // Initialize and build S similarity matrix + + S = new Array(n2); + + for (var _i = 0; _i < n2; _i++) { + S[_i] = -Infinity; // for cases where two data points shouldn't be linked together + } + + for (var _i2 = 0; _i2 < n; _i2++) { + for (var j = 0; j < n; j++) { + if (_i2 !== j) { + S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes); + } + } + } // Place preferences on the diagonal of S + + + p = getPreference(S, opts.preference); + + for (var _i3 = 0; _i3 < n; _i3++) { + S[_i3 * n + _i3] = p; + } // Initialize R responsibility matrix + + + R = new Array(n2); + + for (var _i4 = 0; _i4 < n2; _i4++) { + R[_i4] = 0.0; + } // Initialize A availability matrix + + + A = new Array(n2); + + for (var _i5 = 0; _i5 < n2; _i5++) { + A[_i5] = 0.0; + } + + var old = new Array(n); + var Rp = new Array(n); + var se = new Array(n); + + for (var _i6 = 0; _i6 < n; _i6++) { + old[_i6] = 0.0; + Rp[_i6] = 0.0; + se[_i6] = 0; + } + + var e = new Array(n * opts.minIterations); + + for (var _i7 = 0; _i7 < e.length; _i7++) { + e[_i7] = 0; + } + + var iter; + + for (iter = 0; iter < opts.maxIterations; iter++) { + // main algorithmic loop + // Update R responsibility matrix + for (var _i8 = 0; _i8 < n; _i8++) { + var max = -Infinity, + max2 = -Infinity, + maxI = -1, + AS = 0.0; + + for (var _j = 0; _j < n; _j++) { + old[_j] = R[_i8 * n + _j]; + AS = A[_i8 * n + _j] + S[_i8 * n + _j]; + + if (AS >= max) { + max2 = max; + max = AS; + maxI = _j; + } else if (AS > max2) { + max2 = AS; + } + } + + for (var _j2 = 0; _j2 < n; _j2++) { + R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2]; + } + + R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI]; + } // Update A availability matrix + + + for (var _i9 = 0; _i9 < n; _i9++) { + var sum = 0; + + for (var _j3 = 0; _j3 < n; _j3++) { + old[_j3] = A[_j3 * n + _i9]; + Rp[_j3] = Math.max(0, R[_j3 * n + _i9]); + sum += Rp[_j3]; + } + + sum -= Rp[_i9]; + Rp[_i9] = R[_i9 * n + _i9]; + sum += Rp[_i9]; + + for (var _j4 = 0; _j4 < n; _j4++) { + A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4]; + } + + A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9]; + } // Check for convergence + + + var K = 0; + + for (var _i10 = 0; _i10 < n; _i10++) { + var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0; + e[iter % opts.minIterations * n + _i10] = E; + K += E; + } + + if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { + var _sum = 0; + + for (var _i11 = 0; _i11 < n; _i11++) { + se[_i11] = 0; + + for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { + se[_i11] += e[_j5 * n + _i11]; + } + + if (se[_i11] === 0 || se[_i11] === opts.minIterations) { + _sum++; + } + } + + if (_sum === n) { + // then we have convergence + break; + } + } + } // Identify exemplars (cluster centers) + + + var exemplarsIndices = findExemplars(n, R, A); // Assign nodes to clusters + + var clusterIndices = assign(n, S, exemplarsIndices); + var clusters = {}; + + for (var c = 0; c < exemplarsIndices.length; c++) { + clusters[exemplarsIndices[c]] = []; + } + + for (var _i12 = 0; _i12 < nodes.length; _i12++) { + var pos = id2position[nodes[_i12].id()]; + + var clusterIndex = clusterIndices[pos]; + + if (clusterIndex != null) { + // the node may have not been assigned a cluster if no valid attributes were specified + clusters[clusterIndex].push(nodes[_i12]); + } + } + + var retClusters = new Array(exemplarsIndices.length); + + for (var _c = 0; _c < exemplarsIndices.length; _c++) { + retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]); + } + + return retClusters; +}; + +var affinityPropagation$1 = { + affinityPropagation: affinityPropagation, + ap: affinityPropagation +}; + +var hierholzerDefaults = defaults$g({ + root: undefined, + directed: false +}); +var elesfn$k = { + hierholzer: function hierholzer(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + directed: args[1] + }; + } + + var _hierholzerDefaults = hierholzerDefaults(options), + root = _hierholzerDefaults.root, + directed = _hierholzerDefaults.directed; + + var eles = this; + var dflag = false; + var oddIn; + var oddOut; + var startVertex; + if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id(); + var nodes = {}; + var edges = {}; + + if (directed) { + eles.forEach(function (ele) { + var id = ele.id(); + + if (ele.isNode()) { + var ind = ele.indegree(true); + var outd = ele.outdegree(true); + var d1 = ind - outd; + var d2 = outd - ind; + + if (d1 == 1) { + if (oddIn) dflag = true;else oddIn = id; + } else if (d2 == 1) { + if (oddOut) dflag = true;else oddOut = id; + } else if (d2 > 1 || d1 > 1) { + dflag = true; + } + + nodes[id] = []; + ele.outgoers().forEach(function (e) { + if (e.isEdge()) nodes[id].push(e.id()); + }); + } else { + edges[id] = [undefined, ele.target().id()]; + } + }); + } else { + eles.forEach(function (ele) { + var id = ele.id(); + + if (ele.isNode()) { + var d = ele.degree(true); + + if (d % 2) { + if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true; + } + + nodes[id] = []; + ele.connectedEdges().forEach(function (e) { + return nodes[id].push(e.id()); + }); + } else { + edges[id] = [ele.source().id(), ele.target().id()]; + } + }); + } + + var result = { + found: false, + trail: undefined + }; + if (dflag) return result;else if (oddOut && oddIn) { + if (directed) { + if (startVertex && oddOut != startVertex) { + return result; + } + + startVertex = oddOut; + } else { + if (startVertex && oddOut != startVertex && oddIn != startVertex) { + return result; + } else if (!startVertex) { + startVertex = oddOut; + } + } + } else { + if (!startVertex) startVertex = eles[0].id(); + } + + var walk = function walk(v) { + var currentNode = v; + var subtour = [v]; + var adj, adjTail, adjHead; + + while (nodes[currentNode].length) { + adj = nodes[currentNode].shift(); + adjTail = edges[adj][0]; + adjHead = edges[adj][1]; + + if (currentNode != adjHead) { + nodes[adjHead] = nodes[adjHead].filter(function (e) { + return e != adj; + }); + currentNode = adjHead; + } else if (!directed && currentNode != adjTail) { + nodes[adjTail] = nodes[adjTail].filter(function (e) { + return e != adj; + }); + currentNode = adjTail; + } + + subtour.unshift(adj); + subtour.unshift(currentNode); + } + + return subtour; + }; + + var trail = []; + var subtour = []; + subtour = walk(startVertex); + + while (subtour.length != 1) { + if (nodes[subtour[0]].length == 0) { + trail.unshift(eles.getElementById(subtour.shift())); + trail.unshift(eles.getElementById(subtour.shift())); + } else { + subtour = walk(subtour.shift()).concat(subtour); + } + } + + trail.unshift(eles.getElementById(subtour.shift())); // final node + + for (var d in nodes) { + if (nodes[d].length) { + return result; + } + } + + result.found = true; + result.trail = this.spawn(trail, true); + return result; + } +}; + +var hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() { + var eles = this; + var nodes = {}; + var id = 0; + var edgeCount = 0; + var components = []; + var stack = []; + var visitedEdges = {}; + + var buildComponent = function buildComponent(x, y) { + var i = stack.length - 1; + var cutset = []; + var component = eles.spawn(); + + while (stack[i].x != x || stack[i].y != y) { + cutset.push(stack.pop().edge); + i--; + } + + cutset.push(stack.pop().edge); + cutset.forEach(function (edge) { + var connectedNodes = edge.connectedNodes().intersection(eles); + component.merge(edge); + connectedNodes.forEach(function (node) { + var nodeId = node.id(); + var connectedEdges = node.connectedEdges().intersection(eles); + component.merge(node); + + if (!nodes[nodeId].cutVertex) { + component.merge(connectedEdges); + } else { + component.merge(connectedEdges.filter(function (edge) { + return edge.isLoop(); + })); + } + }); + }); + components.push(component); + }; + + var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) { + if (root === parent) edgeCount += 1; + nodes[currentNode] = { + id: id, + low: id++, + cutVertex: false + }; + var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles); + + if (edges.size() === 0) { + components.push(eles.spawn(eles.getElementById(currentNode))); + } else { + var sourceId, targetId, otherNodeId, edgeId; + edges.forEach(function (edge) { + sourceId = edge.source().id(); + targetId = edge.target().id(); + otherNodeId = sourceId === currentNode ? targetId : sourceId; + + if (otherNodeId !== parent) { + edgeId = edge.id(); + + if (!visitedEdges[edgeId]) { + visitedEdges[edgeId] = true; + stack.push({ + x: currentNode, + y: otherNodeId, + edge: edge + }); + } + + if (!(otherNodeId in nodes)) { + biconnectedSearch(root, otherNodeId, currentNode); + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low); + + if (nodes[currentNode].id <= nodes[otherNodeId].low) { + nodes[currentNode].cutVertex = true; + buildComponent(currentNode, otherNodeId); + } + } else { + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id); + } + } + }); + } + }; + + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + + if (!(nodeId in nodes)) { + edgeCount = 0; + biconnectedSearch(nodeId, nodeId); + nodes[nodeId].cutVertex = edgeCount > 1; + } + } + }); + var cutVertices = Object.keys(nodes).filter(function (id) { + return nodes[id].cutVertex; + }).map(function (id) { + return eles.getElementById(id); + }); + return { + cut: eles.spawn(cutVertices), + components: components + }; +}; + +var hopcroftTarjanBiconnected$1 = { + hopcroftTarjanBiconnected: hopcroftTarjanBiconnected, + htbc: hopcroftTarjanBiconnected, + htb: hopcroftTarjanBiconnected, + hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected +}; + +var tarjanStronglyConnected = function tarjanStronglyConnected() { + var eles = this; + var nodes = {}; + var index = 0; + var components = []; + var stack = []; + var cut = eles.spawn(eles); + + var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) { + stack.push(sourceNodeId); + nodes[sourceNodeId] = { + index: index, + low: index++, + explored: false + }; + var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles); + connectedEdges.forEach(function (edge) { + var targetNodeId = edge.target().id(); + + if (targetNodeId !== sourceNodeId) { + if (!(targetNodeId in nodes)) { + stronglyConnectedSearch(targetNodeId); + } + + if (!nodes[targetNodeId].explored) { + nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low); + } + } + }); + + if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) { + var componentNodes = eles.spawn(); + + for (;;) { + var nodeId = stack.pop(); + componentNodes.merge(eles.getElementById(nodeId)); + nodes[nodeId].low = nodes[sourceNodeId].index; + nodes[nodeId].explored = true; + + if (nodeId === sourceNodeId) { + break; + } + } + + var componentEdges = componentNodes.edgesWith(componentNodes); + var component = componentNodes.merge(componentEdges); + components.push(component); + cut = cut.difference(component); + } + }; + + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + + if (!(nodeId in nodes)) { + stronglyConnectedSearch(nodeId); + } + } + }); + return { + cut: cut, + components: components + }; +}; + +var tarjanStronglyConnected$1 = { + tarjanStronglyConnected: tarjanStronglyConnected, + tsc: tarjanStronglyConnected, + tscc: tarjanStronglyConnected, + tarjanStronglyConnectedComponents: tarjanStronglyConnected +}; + +var elesfn$j = {}; +[elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) { + extend(elesfn$j, props); +}); + +/*! +Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable +Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) +Licensed under The MIT License (http://opensource.org/licenses/MIT) +*/ + +/* promise states [Promises/A+ 2.1] */ +var STATE_PENDING = 0; +/* [Promises/A+ 2.1.1] */ + +var STATE_FULFILLED = 1; +/* [Promises/A+ 2.1.2] */ + +var STATE_REJECTED = 2; +/* [Promises/A+ 2.1.3] */ + +/* promise object constructor */ + +var api = function api(executor) { + /* optionally support non-constructor/plain-function call */ + if (!(this instanceof api)) return new api(executor); + /* initialize object */ + + this.id = 'Thenable/1.0.7'; + this.state = STATE_PENDING; + /* initial state */ + + this.fulfillValue = undefined; + /* initial value */ + + /* [Promises/A+ 1.3, 2.1.2.2] */ + + this.rejectReason = undefined; + /* initial reason */ + + /* [Promises/A+ 1.5, 2.1.3.2] */ + + this.onFulfilled = []; + /* initial handlers */ + + this.onRejected = []; + /* initial handlers */ + + /* provide optional information-hiding proxy */ + + this.proxy = { + then: this.then.bind(this) + }; + /* support optional executor function */ + + if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); +}; +/* promise API methods */ + + +api.prototype = { + /* promise resolving methods */ + fulfill: function fulfill(value) { + return deliver(this, STATE_FULFILLED, 'fulfillValue', value); + }, + reject: function reject(value) { + return deliver(this, STATE_REJECTED, 'rejectReason', value); + }, + + /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */ + then: function then(onFulfilled, onRejected) { + var curr = this; + var next = new api(); + /* [Promises/A+ 2.2.7] */ + + curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); + /* [Promises/A+ 2.2.2/2.2.6] */ + + curr.onRejected.push(resolver(onRejected, next, 'reject')); + /* [Promises/A+ 2.2.3/2.2.6] */ + + execute(curr); + return next.proxy; + /* [Promises/A+ 2.2.7, 3.3] */ + } +}; +/* deliver an action */ + +var deliver = function deliver(curr, state, name, value) { + if (curr.state === STATE_PENDING) { + curr.state = state; + /* [Promises/A+ 2.1.2.1, 2.1.3.1] */ + + curr[name] = value; + /* [Promises/A+ 2.1.2.2, 2.1.3.2] */ + + execute(curr); + } + + return curr; +}; +/* execute all handlers */ + + +var execute = function execute(curr) { + if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason); +}; +/* execute particular set of handlers */ + + +var execute_handlers = function execute_handlers(curr, name, value) { + /* global setImmediate: true */ + + /* global setTimeout: true */ + + /* short-circuit processing */ + if (curr[name].length === 0) return; + /* iterate over all handlers, exactly once */ + + var handlers = curr[name]; + curr[name] = []; + /* [Promises/A+ 2.2.2.3, 2.2.3.3] */ + + var func = function func() { + for (var i = 0; i < handlers.length; i++) { + handlers[i](value); + } + /* [Promises/A+ 2.2.5] */ + + }; + /* execute procedure asynchronously */ + + /* [Promises/A+ 2.2.4, 3.1] */ + + + if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0); +}; +/* generate a resolver function */ + + +var resolver = function resolver(cb, next, method) { + return function (value) { + if (typeof cb !== 'function') + /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */ + next[method].call(next, value); + /* [Promises/A+ 2.2.7.3, 2.2.7.4] */ + else { + var result; + + try { + result = cb(value); + } + /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ + catch (e) { + next.reject(e); + /* [Promises/A+ 2.2.7.2] */ + + return; + } + + resolve(next, result); + /* [Promises/A+ 2.2.7.1] */ + } + }; +}; +/* "Promise Resolution Procedure" */ + +/* [Promises/A+ 2.3] */ + + +var resolve = function resolve(promise, x) { + /* sanity check arguments */ + + /* [Promises/A+ 2.3.1] */ + if (promise === x || promise.proxy === x) { + promise.reject(new TypeError('cannot resolve promise with itself')); + return; + } + /* surgically check for a "then" method + (mainly to just call the "getter" of "then" only once) */ + + + var then; + + if (_typeof(x) === 'object' && x !== null || typeof x === 'function') { + try { + then = x.then; + } + /* [Promises/A+ 2.3.3.1, 3.5] */ + catch (e) { + promise.reject(e); + /* [Promises/A+ 2.3.3.2] */ + + return; + } + } + /* handle own Thenables [Promises/A+ 2.3.2] + and similar "thenables" [Promises/A+ 2.3.3] */ + + + if (typeof then === 'function') { + var resolved = false; + + try { + /* call retrieved "then" method */ + + /* [Promises/A+ 2.3.3.3] */ + then.call(x, + /* resolvePromise */ + + /* [Promises/A+ 2.3.3.3.1] */ + function (y) { + if (resolved) return; + resolved = true; + /* [Promises/A+ 2.3.3.3.3] */ + + if (y === x) + /* [Promises/A+ 3.6] */ + promise.reject(new TypeError('circular thenable chain'));else resolve(promise, y); + }, + /* rejectPromise */ + + /* [Promises/A+ 2.3.3.3.2] */ + function (r) { + if (resolved) return; + resolved = true; + /* [Promises/A+ 2.3.3.3.3] */ + + promise.reject(r); + }); + } catch (e) { + if (!resolved) + /* [Promises/A+ 2.3.3.3.3] */ + promise.reject(e); + /* [Promises/A+ 2.3.3.3.4] */ + } + + return; + } + /* handle other values */ + + + promise.fulfill(x); + /* [Promises/A+ 2.3.4, 2.3.3.4] */ +}; // so we always have Promise.all() + + +api.all = function (ps) { + return new api(function (resolveAll, rejectAll) { + var vals = new Array(ps.length); + var doneCount = 0; + + var fulfill = function fulfill(i, val) { + vals[i] = val; + doneCount++; + + if (doneCount === ps.length) { + resolveAll(vals); + } + }; + + for (var i = 0; i < ps.length; i++) { + (function (i) { + var p = ps[i]; + var isPromise = p != null && p.then != null; + + if (isPromise) { + p.then(function (val) { + fulfill(i, val); + }, function (err) { + rejectAll(err); + }); + } else { + var val = p; + fulfill(i, val); + } + })(i); + } + }); +}; + +api.resolve = function (val) { + return new api(function (resolve, reject) { + resolve(val); + }); +}; + +api.reject = function (val) { + return new api(function (resolve, reject) { + reject(val); + }); +}; + +var Promise$1 = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef + +var Animation = function Animation(target, opts, opts2) { + var isCore = core(target); + var isEle = !isCore; + + var _p = this._private = extend({ + duration: 1000 + }, opts, opts2); + + _p.target = target; + _p.style = _p.style || _p.css; + _p.started = false; + _p.playing = false; + _p.hooked = false; + _p.applying = false; + _p.progress = 0; + _p.completes = []; + _p.frames = []; + + if (_p.complete && fn$6(_p.complete)) { + _p.completes.push(_p.complete); + } + + if (isEle) { + var pos = target.position(); + _p.startPosition = _p.startPosition || { + x: pos.x, + y: pos.y + }; + _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); + } + + if (isCore) { + var pan = target.pan(); + _p.startPan = { + x: pan.x, + y: pan.y + }; + _p.startZoom = target.zoom(); + } // for future timeline/animations impl + + + this.length = 1; + this[0] = this; +}; + +var anifn = Animation.prototype; +extend(anifn, { + instanceString: function instanceString() { + return 'animation'; + }, + hook: function hook() { + var _p = this._private; + + if (!_p.hooked) { + // add to target's animation queue + var q; + var tAni = _p.target._private.animation; + + if (_p.queue) { + q = tAni.queue; + } else { + q = tAni.current; + } + + q.push(this); // add to the animation loop pool + + if (elementOrCollection(_p.target)) { + _p.target.cy().addToAnimationPool(_p.target); + } + + _p.hooked = true; + } + + return this; + }, + play: function play() { + var _p = this._private; // autorewind + + if (_p.progress === 1) { + _p.progress = 0; + } + + _p.playing = true; + _p.started = false; // needs to be started by animation loop + + _p.stopped = false; + this.hook(); // the animation loop will start the animation... + + return this; + }, + playing: function playing() { + return this._private.playing; + }, + apply: function apply() { + var _p = this._private; + _p.applying = true; + _p.started = false; // needs to be started by animation loop + + _p.stopped = false; + this.hook(); // the animation loop will apply the animation at this progress + + return this; + }, + applying: function applying() { + return this._private.applying; + }, + pause: function pause() { + var _p = this._private; + _p.playing = false; + _p.started = false; + return this; + }, + stop: function stop() { + var _p = this._private; + _p.playing = false; + _p.started = false; + _p.stopped = true; // to be removed from animation queues + + return this; + }, + rewind: function rewind() { + return this.progress(0); + }, + fastforward: function fastforward() { + return this.progress(1); + }, + time: function time(t) { + var _p = this._private; + + if (t === undefined) { + return _p.progress * _p.duration; + } else { + return this.progress(t / _p.duration); + } + }, + progress: function progress(p) { + var _p = this._private; + var wasPlaying = _p.playing; + + if (p === undefined) { + return _p.progress; + } else { + if (wasPlaying) { + this.pause(); + } + + _p.progress = p; + _p.started = false; + + if (wasPlaying) { + this.play(); + } + } + + return this; + }, + completed: function completed() { + return this._private.progress === 1; + }, + reverse: function reverse() { + var _p = this._private; + var wasPlaying = _p.playing; + + if (wasPlaying) { + this.pause(); + } + + _p.progress = 1 - _p.progress; + _p.started = false; + + var swap = function swap(a, b) { + var _pa = _p[a]; + + if (_pa == null) { + return; + } + + _p[a] = _p[b]; + _p[b] = _pa; + }; + + swap('zoom', 'startZoom'); + swap('pan', 'startPan'); + swap('position', 'startPosition'); // swap styles + + if (_p.style) { + for (var i = 0; i < _p.style.length; i++) { + var prop = _p.style[i]; + var name = prop.name; + var startStyleProp = _p.startStyle[name]; + _p.startStyle[name] = prop; + _p.style[i] = startStyleProp; + } + } + + if (wasPlaying) { + this.play(); + } + + return this; + }, + promise: function promise(type) { + var _p = this._private; + var arr; + + switch (type) { + case 'frame': + arr = _p.frames; + break; + + default: + case 'complete': + case 'completed': + arr = _p.completes; + } + + return new Promise$1(function (resolve, reject) { + arr.push(function () { + resolve(); + }); + }); + } +}); +anifn.complete = anifn.completed; +anifn.run = anifn.play; +anifn.running = anifn.playing; + +var define$3 = { + animated: function animated() { + return function animatedImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return false; + } + + var ele = all[0]; + + if (ele) { + return ele._private.animation.current.length > 0; + } + }; + }, + // animated + clearQueue: function clearQueue() { + return function clearQueueImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + ele._private.animation.queue = []; + } + + return this; + }; + }, + // clearQueue + delay: function delay() { + return function delayImpl(time, complete) { + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + return this.animate({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + delayAnimation: function delayAnimation() { + return function delayAnimationImpl(time, complete) { + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + return this.animation({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + animation: function animation() { + return function animationImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + var isCore = !selfIsArrayLike; + var isEles = !isCore; + + if (!cy.styleEnabled()) { + return this; + } + + var style = cy.style(); + properties = extend({}, properties, params); + var propertiesEmpty = Object.keys(properties).length === 0; + + if (propertiesEmpty) { + return new Animation(all[0], properties); // nothing to animate + } + + if (properties.duration === undefined) { + properties.duration = 400; + } + + switch (properties.duration) { + case 'slow': + properties.duration = 600; + break; + + case 'fast': + properties.duration = 200; + break; + } + + if (isEles) { + properties.style = style.getPropsList(properties.style || properties.css); + properties.css = undefined; + } + + if (isEles && properties.renderedPosition != null) { + var rpos = properties.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + properties.position = renderedToModelPosition(rpos, zoom, pan); + } // override pan w/ panBy if set + + + if (isCore && properties.panBy != null) { + var panBy = properties.panBy; + var cyPan = cy.pan(); + properties.pan = { + x: cyPan.x + panBy.x, + y: cyPan.y + panBy.y + }; + } // override pan w/ center if set + + + var center = properties.center || properties.centre; + + if (isCore && center != null) { + var centerPan = cy.getCenterPan(center.eles, properties.zoom); + + if (centerPan != null) { + properties.pan = centerPan; + } + } // override pan & zoom w/ fit if set + + + if (isCore && properties.fit != null) { + var fit = properties.fit; + var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding); + + if (fitVp != null) { + properties.pan = fitVp.pan; + properties.zoom = fitVp.zoom; + } + } // override zoom (& potentially pan) w/ zoom obj if set + + + if (isCore && plainObject(properties.zoom)) { + var vp = cy.getZoomedViewport(properties.zoom); + + if (vp != null) { + if (vp.zoomed) { + properties.zoom = vp.zoom; + } + + if (vp.panned) { + properties.pan = vp.pan; + } + } else { + properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed + } + } + + return new Animation(all[0], properties); + }; + }, + // animate + animate: function animate() { + return function animateImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + if (params) { + properties = extend({}, properties, params); + } // manually hook and run the animation + + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var queue = ele.animated() && (properties.queue === undefined || properties.queue); + var ani = ele.animation(properties, queue ? { + queue: true + } : undefined); + ani.play(); + } + + return this; // chaining + }; + }, + // animate + stop: function stop() { + return function stopImpl(clearQueue, jumpToEnd) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var _p = ele._private; + var anis = _p.animation.current; + + for (var j = 0; j < anis.length; j++) { + var ani = anis[j]; + var ani_p = ani._private; + + if (jumpToEnd) { + // next iteration of the animation loop, the animation + // will go straight to the end and be removed + ani_p.duration = 0; + } + } // clear the queue of future animations + + + if (clearQueue) { + _p.animation.queue = []; + } + + if (!jumpToEnd) { + _p.animation.current = []; + } + } // we have to notify (the animation loop doesn't do it for us on `stop`) + + + cy.notify('draw'); + return this; + }; + } // stop + +}; // define + +var define$2 = { + // access data field + data: function data(params) { + var defaults = { + field: 'data', + bindingEvent: 'data', + allowBinding: false, + allowSetting: false, + allowGetting: false, + settingEvent: 'data', + settingTriggersEvent: false, + triggerFnName: 'trigger', + immutableKeys: {}, + // key => true if immutable + updateStyle: false, + beforeGet: function beforeGet(self) {}, + beforeSet: function beforeSet(self, obj) {}, + onSet: function onSet(self) {}, + canSet: function canSet(self) { + return true; + } + }; + params = extend({}, defaults, params); + return function dataImpl(name, value) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var single = selfIsArrayLike ? self[0] : self; // .data('foo', ...) + + if (string(name)) { + // set or get property + var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot + + var path = isPathLike && toPath__default["default"](name); // .data('foo') + + if (p.allowGetting && value === undefined) { + // get + var ret; + + if (single) { + p.beforeGet(single); // check if it's path and a field with the same name doesn't exist + + if (path && single._private[p.field][name] === undefined) { + ret = get__default["default"](single._private[p.field], path); + } else { + ret = single._private[p.field][name]; + } + } + + return ret; // .data('foo', 'bar') + } else if (p.allowSetting && value !== undefined) { + // set + var valid = !p.immutableKeys[name]; + + if (valid) { + var change = _defineProperty({}, name, value); + + p.beforeSet(self, change); + + for (var i = 0, l = all.length; i < l; i++) { + var ele = all[i]; + + if (p.canSet(ele)) { + if (path && single._private[p.field][name] === undefined) { + set__default["default"](ele._private[p.field], path, value); + } else { + ele._private[p.field][name] = value; + } + } + } // update mappers if asked + + + if (p.updateStyle) { + self.updateStyle(); + } // call onSet callback + + + p.onSet(self); + + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } + } + } // .data({ 'foo': 'bar' }) + + } else if (p.allowSetting && plainObject(name)) { + // extend + var obj = name; + var k, v; + var keys = Object.keys(obj); + p.beforeSet(self, obj); + + for (var _i = 0; _i < keys.length; _i++) { + k = keys[_i]; + v = obj[k]; + + var _valid = !p.immutableKeys[k]; + + if (_valid) { + for (var j = 0; j < all.length; j++) { + var _ele = all[j]; + + if (p.canSet(_ele)) { + _ele._private[p.field][k] = v; + } + } + } + } // update mappers if asked + + + if (p.updateStyle) { + self.updateStyle(); + } // call onSet callback + + + p.onSet(self); + + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } // .data(function(){ ... }) + + } else if (p.allowBinding && fn$6(name)) { + // bind to event + var fn = name; + self.on(p.bindingEvent, fn); // .data() + } else if (p.allowGetting && name === undefined) { + // get whole object + var _ret; + + if (single) { + p.beforeGet(single); + _ret = single._private[p.field]; + } + + return _ret; + } + + return self; // maintain chainability + }; // function + }, + // data + // remove data field + removeData: function removeData(params) { + var defaults = { + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: false, + immutableKeys: {} // key => true if immutable + + }; + params = extend({}, defaults, params); + return function removeDataImpl(names) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + // .removeData('foo bar') + + if (string(names)) { + // then get the list of keys, and delete them + var keys = names.split(/\s+/); + var l = keys.length; + + for (var i = 0; i < l; i++) { + // delete each non-empty key + var key = keys[i]; + + if (emptyString(key)) { + continue; + } + + var valid = !p.immutableKeys[key]; // not valid if immutable + + if (valid) { + for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) { + all[i_a]._private[p.field][key] = undefined; + } + } + } + + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } // .removeData() + + } else if (names === undefined) { + // then delete all keys + for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) { + var _privateFields = all[_i_a]._private[p.field]; + + var _keys = Object.keys(_privateFields); + + for (var _i2 = 0; _i2 < _keys.length; _i2++) { + var _key = _keys[_i2]; + var validKeyToDelete = !p.immutableKeys[_key]; + + if (validKeyToDelete) { + _privateFields[_key] = undefined; + } + } + } + + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } + } + + return self; // maintain chaining + }; // function + } // removeData + +}; // define + +var define$1 = { + eventAliasesOn: function eventAliasesOn(proto) { + var p = proto; + p.addListener = p.listen = p.bind = p.on; + p.unlisten = p.unbind = p.off = p.removeListener; + p.trigger = p.emit; // this is just a wrapper alias of .on() + + p.pon = p.promiseOn = function (events, selector) { + var self = this; + var args = Array.prototype.slice.call(arguments, 0); + return new Promise$1(function (resolve, reject) { + var callback = function callback(e) { + self.off.apply(self, offArgs); + resolve(e); + }; + + var onArgs = args.concat([callback]); + var offArgs = onArgs.concat([]); + self.on.apply(self, onArgs); + }); + }; + } +}; // define + +// use this module to cherry pick functions into your prototype +var define = {}; +[define$3, define$2, define$1].forEach(function (m) { + extend(define, m); +}); + +var elesfn$i = { + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop() +}; + +var elesfn$h = { + classes: function classes(_classes) { + var self = this; + + if (_classes === undefined) { + var ret = []; + + self[0]._private.classes.forEach(function (cls) { + return ret.push(cls); + }); + + return ret; + } else if (!array(_classes)) { + // extract classes from string + _classes = (_classes || '').match(/\S+/g) || []; + } + + var changed = []; + var classesSet = new Set$1(_classes); // check and update each ele + + for (var j = 0; j < self.length; j++) { + var ele = self[j]; + var _p = ele._private; + var eleClasses = _p.classes; + var changedEle = false; // check if ele has all of the passed classes + + for (var i = 0; i < _classes.length; i++) { + var cls = _classes[i]; + var eleHasClass = eleClasses.has(cls); + + if (!eleHasClass) { + changedEle = true; + break; + } + } // check if ele has classes outside of those passed + + + if (!changedEle) { + changedEle = eleClasses.size !== _classes.length; + } + + if (changedEle) { + _p.classes = classesSet; + changed.push(ele); + } + } // trigger update style on those eles that had class changes + + + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + + return self; + }, + addClass: function addClass(classes) { + return this.toggleClass(classes, true); + }, + hasClass: function hasClass(className) { + var ele = this[0]; + return ele != null && ele._private.classes.has(className); + }, + toggleClass: function toggleClass(classes, toggle) { + if (!array(classes)) { + // extract classes from string + classes = classes.match(/\S+/g) || []; + } + + var self = this; + var toggleUndefd = toggle === undefined; + var changed = []; // eles who had classes changed + + for (var i = 0, il = self.length; i < il; i++) { + var ele = self[i]; + var eleClasses = ele._private.classes; + var changedEle = false; + + for (var j = 0; j < classes.length; j++) { + var cls = classes[j]; + var hasClass = eleClasses.has(cls); + var changedNow = false; + + if (toggle || toggleUndefd && !hasClass) { + eleClasses.add(cls); + changedNow = true; + } else if (!toggle || toggleUndefd && hasClass) { + eleClasses["delete"](cls); + changedNow = true; + } + + if (!changedEle && changedNow) { + changed.push(ele); + changedEle = true; + } + } // for j classes + + } // for i eles + // trigger update style on those eles that had class changes + + + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + + return self; + }, + removeClass: function removeClass(classes) { + return this.toggleClass(classes, false); + }, + flashClass: function flashClass(classes, duration) { + var self = this; + + if (duration == null) { + duration = 250; + } else if (duration === 0) { + return self; // nothing to do really + } + + self.addClass(classes); + setTimeout(function () { + self.removeClass(classes); + }, duration); + return self; + } +}; +elesfn$h.className = elesfn$h.classNames = elesfn$h.classes; + +var tokens = { + metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', + // chars we need to escape in let names, etc + comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', + // binary comparison op (used in data selectors) + boolOp: '\\?|\\!|\\^', + // boolean (unary) operators (used in data selectors) + string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", + // string literals (used in data selectors) -- doublequotes | singlequotes + number: number, + // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123 + meta: 'degree|indegree|outdegree', + // allowed metadata fields (i.e. allowed functions to use from Collection) + separator: '\\s*,\\s*', + // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass + descendant: '\\s+', + child: '\\s+>\\s+', + subject: '\\$', + group: 'node|edge|\\*', + directedEdge: '\\s+->\\s+', + undirectedEdge: '\\s+<->\\s+' +}; +tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods + +tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name + +tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number + +tokens.id = tokens.variable; // an element id (follows variable conventions) + +(function () { + var ops, op, i; // add @ variants to comparatorOp + + ops = tokens.comparatorOp.split('|'); + + for (i = 0; i < ops.length; i++) { + op = ops[i]; + tokens.comparatorOp += '|@' + op; + } // add ! variants to comparatorOp + + + ops = tokens.comparatorOp.split('|'); + + for (i = 0; i < ops.length; i++) { + op = ops[i]; + + if (op.indexOf('!') >= 0) { + continue; + } // skip ops that explicitly contain ! + + + if (op === '=') { + continue; + } // skip = b/c != is explicitly defined + + + tokens.comparatorOp += '|\\!' + op; + } +})(); + +/** + * Make a new query object + * + * @prop type {Type} The type enum (int) of the query + * @prop checks List of checks to make against an ele to test for a match + */ +var newQuery = function newQuery() { + return { + checks: [] + }; +}; + +/** + * A check type enum-like object. Uses integer values for fast match() lookup. + * The ordering does not matter as long as the ints are unique. + */ +var Type = { + /** E.g. node */ + GROUP: 0, + + /** A collection of elements */ + COLLECTION: 1, + + /** A filter(ele) function */ + FILTER: 2, + + /** E.g. [foo > 1] */ + DATA_COMPARE: 3, + + /** E.g. [foo] */ + DATA_EXIST: 4, + + /** E.g. [?foo] */ + DATA_BOOL: 5, + + /** E.g. [[degree > 2]] */ + META_COMPARE: 6, + + /** E.g. :selected */ + STATE: 7, + + /** E.g. #foo */ + ID: 8, + + /** E.g. .foo */ + CLASS: 9, + + /** E.g. #foo <-> #bar */ + UNDIRECTED_EDGE: 10, + + /** E.g. #foo -> #bar */ + DIRECTED_EDGE: 11, + + /** E.g. $#foo -> #bar */ + NODE_SOURCE: 12, + + /** E.g. #foo -> $#bar */ + NODE_TARGET: 13, + + /** E.g. $#foo <-> #bar */ + NODE_NEIGHBOR: 14, + + /** E.g. #foo > #bar */ + CHILD: 15, + + /** E.g. #foo #bar */ + DESCENDANT: 16, + + /** E.g. $#foo > #bar */ + PARENT: 17, + + /** E.g. $#foo #bar */ + ANCESTOR: 18, + + /** E.g. #foo > $bar > #baz */ + COMPOUND_SPLIT: 19, + + /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */ + TRUE: 20 +}; + +var stateSelectors = [{ + selector: ':selected', + matches: function matches(ele) { + return ele.selected(); + } +}, { + selector: ':unselected', + matches: function matches(ele) { + return !ele.selected(); + } +}, { + selector: ':selectable', + matches: function matches(ele) { + return ele.selectable(); + } +}, { + selector: ':unselectable', + matches: function matches(ele) { + return !ele.selectable(); + } +}, { + selector: ':locked', + matches: function matches(ele) { + return ele.locked(); + } +}, { + selector: ':unlocked', + matches: function matches(ele) { + return !ele.locked(); + } +}, { + selector: ':visible', + matches: function matches(ele) { + return ele.visible(); + } +}, { + selector: ':hidden', + matches: function matches(ele) { + return !ele.visible(); + } +}, { + selector: ':transparent', + matches: function matches(ele) { + return ele.transparent(); + } +}, { + selector: ':grabbed', + matches: function matches(ele) { + return ele.grabbed(); + } +}, { + selector: ':free', + matches: function matches(ele) { + return !ele.grabbed(); + } +}, { + selector: ':removed', + matches: function matches(ele) { + return ele.removed(); + } +}, { + selector: ':inside', + matches: function matches(ele) { + return !ele.removed(); + } +}, { + selector: ':grabbable', + matches: function matches(ele) { + return ele.grabbable(); + } +}, { + selector: ':ungrabbable', + matches: function matches(ele) { + return !ele.grabbable(); + } +}, { + selector: ':animated', + matches: function matches(ele) { + return ele.animated(); + } +}, { + selector: ':unanimated', + matches: function matches(ele) { + return !ele.animated(); + } +}, { + selector: ':parent', + matches: function matches(ele) { + return ele.isParent(); + } +}, { + selector: ':childless', + matches: function matches(ele) { + return ele.isChildless(); + } +}, { + selector: ':child', + matches: function matches(ele) { + return ele.isChild(); + } +}, { + selector: ':orphan', + matches: function matches(ele) { + return ele.isOrphan(); + } +}, { + selector: ':nonorphan', + matches: function matches(ele) { + return ele.isChild(); + } +}, { + selector: ':compound', + matches: function matches(ele) { + if (ele.isNode()) { + return ele.isParent(); + } else { + return ele.source().isParent() || ele.target().isParent(); + } + } +}, { + selector: ':loop', + matches: function matches(ele) { + return ele.isLoop(); + } +}, { + selector: ':simple', + matches: function matches(ele) { + return ele.isSimple(); + } +}, { + selector: ':active', + matches: function matches(ele) { + return ele.active(); + } +}, { + selector: ':inactive', + matches: function matches(ele) { + return !ele.active(); + } +}, { + selector: ':backgrounding', + matches: function matches(ele) { + return ele.backgrounding(); + } +}, { + selector: ':nonbackgrounding', + matches: function matches(ele) { + return !ele.backgrounding(); + } +}].sort(function (a, b) { + // n.b. selectors that are starting substrings of others must have the longer ones first + return descending(a.selector, b.selector); +}); + +var lookup = function () { + var selToFn = {}; + var s; + + for (var i = 0; i < stateSelectors.length; i++) { + s = stateSelectors[i]; + selToFn[s.selector] = s.matches; + } + + return selToFn; +}(); + +var stateSelectorMatches = function stateSelectorMatches(sel, ele) { + return lookup[sel](ele); +}; +var stateSelectorRegex = '(' + stateSelectors.map(function (s) { + return s.selector; +}).join('|') + ')'; + +// so that values get compared properly in Selector.filter() + +var cleanMetaChars = function cleanMetaChars(str) { + return str.replace(new RegExp('\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) { + return $1; + }); +}; + +var replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) { + selector[selector.length - 1] = replacementQuery; +}; // NOTE: add new expression syntax here to have it recognised by the parser; +// - a query contains all adjacent (i.e. no separator in between) expressions; +// - the current query is stored in selector[i] +// - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward + + +var exprs = [{ + name: 'group', + // just used for identifying when debugging + query: true, + regex: '(' + tokens.group + ')', + populate: function populate(selector, query, _ref) { + var _ref2 = _slicedToArray(_ref, 1), + group = _ref2[0]; + + query.checks.push({ + type: Type.GROUP, + value: group === '*' ? group : group + 's' + }); + } +}, { + name: 'state', + query: true, + regex: stateSelectorRegex, + populate: function populate(selector, query, _ref3) { + var _ref4 = _slicedToArray(_ref3, 1), + state = _ref4[0]; + + query.checks.push({ + type: Type.STATE, + value: state + }); + } +}, { + name: 'id', + query: true, + regex: '\\#(' + tokens.id + ')', + populate: function populate(selector, query, _ref5) { + var _ref6 = _slicedToArray(_ref5, 1), + id = _ref6[0]; + + query.checks.push({ + type: Type.ID, + value: cleanMetaChars(id) + }); + } +}, { + name: 'className', + query: true, + regex: '\\.(' + tokens.className + ')', + populate: function populate(selector, query, _ref7) { + var _ref8 = _slicedToArray(_ref7, 1), + className = _ref8[0]; + + query.checks.push({ + type: Type.CLASS, + value: cleanMetaChars(className) + }); + } +}, { + name: 'dataExists', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref9) { + var _ref10 = _slicedToArray(_ref9, 1), + variable = _ref10[0]; + + query.checks.push({ + type: Type.DATA_EXIST, + field: cleanMetaChars(variable) + }); + } +}, { + name: 'dataCompare', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.value + ')\\s*\\]', + populate: function populate(selector, query, _ref11) { + var _ref12 = _slicedToArray(_ref11, 3), + variable = _ref12[0], + comparatorOp = _ref12[1], + value = _ref12[2]; + + var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null; + + if (valueIsString) { + value = value.substring(1, value.length - 1); + } else { + value = parseFloat(value); + } + + query.checks.push({ + type: Type.DATA_COMPARE, + field: cleanMetaChars(variable), + operator: comparatorOp, + value: value + }); + } +}, { + name: 'dataBool', + query: true, + regex: '\\[\\s*(' + tokens.boolOp + ')\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref13) { + var _ref14 = _slicedToArray(_ref13, 2), + boolOp = _ref14[0], + variable = _ref14[1]; + + query.checks.push({ + type: Type.DATA_BOOL, + field: cleanMetaChars(variable), + operator: boolOp + }); + } +}, { + name: 'metaCompare', + query: true, + regex: '\\[\\[\\s*(' + tokens.meta + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.number + ')\\s*\\]\\]', + populate: function populate(selector, query, _ref15) { + var _ref16 = _slicedToArray(_ref15, 3), + meta = _ref16[0], + comparatorOp = _ref16[1], + number = _ref16[2]; + + query.checks.push({ + type: Type.META_COMPARE, + field: cleanMetaChars(meta), + operator: comparatorOp, + value: parseFloat(number) + }); + } +}, { + name: 'nextQuery', + separator: true, + regex: tokens.separator, + populate: function populate(selector, query) { + var currentSubject = selector.currentSubject; + var edgeCount = selector.edgeCount; + var compoundCount = selector.compoundCount; + var lastQ = selector[selector.length - 1]; + + if (currentSubject != null) { + lastQ.subject = currentSubject; + selector.currentSubject = null; + } + + lastQ.edgeCount = edgeCount; + lastQ.compoundCount = compoundCount; + selector.edgeCount = 0; + selector.compoundCount = 0; // go on to next query + + var nextQuery = selector[selector.length++] = newQuery(); + return nextQuery; // this is the new query to be filled by the following exprs + } +}, { + name: 'directedEdge', + separator: true, + regex: tokens.directedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.DIRECTED_EDGE, + source: source, + target: target + }); // the query in the selector should be the edge rather than the source + + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; // we're now populating the target query with expressions that follow + + return target; + } else { + // source/target + var srcTgtQ = newQuery(); + var _source = query; + + var _target = newQuery(); + + srcTgtQ.checks.push({ + type: Type.NODE_SOURCE, + source: _source, + target: _target + }); // the query in the selector should be the neighbourhood rather than the node + + replaceLastQuery(selector, query, srcTgtQ); + selector.edgeCount++; + return _target; // now populating the target with the following expressions + } + } +}, { + name: 'undirectedEdge', + separator: true, + regex: tokens.undirectedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.UNDIRECTED_EDGE, + nodes: [source, target] + }); // the query in the selector should be the edge rather than the source + + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; // we're now populating the target query with expressions that follow + + return target; + } else { + // neighbourhood + var nhoodQ = newQuery(); + var node = query; + var neighbor = newQuery(); + nhoodQ.checks.push({ + type: Type.NODE_NEIGHBOR, + node: node, + neighbor: neighbor + }); // the query in the selector should be the neighbourhood rather than the node + + replaceLastQuery(selector, query, nhoodQ); + return neighbor; // now populating the neighbor with following expressions + } + } +}, { + name: 'child', + separator: true, + regex: tokens.child, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: child query + var parentChildQuery = newQuery(); + var child = newQuery(); + var parent = selector[selector.length - 1]; + parentChildQuery.checks.push({ + type: Type.CHILD, + parent: parent, + child: child + }); // the query in the selector should be the '>' itself + + replaceLastQuery(selector, query, parentChildQuery); + selector.compoundCount++; // we're now populating the child query with expressions that follow + + return child; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + + var _child = newQuery(); + + var _parent = newQuery(); // set up the root compound q + + + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); // populate the subject and replace the q at the old spot (within left) with TRUE + + subject.checks = query.checks; // take the checks from the left + + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + // set up the right q + + _parent.checks.push({ + type: Type.TRUE + }); // parent implicitly refs the subject + + + right.checks.push({ + type: Type.PARENT, + // type is swapped on right side queries + parent: _parent, + child: _child // empty for now + + }); + replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query` + + selector.currentSubject = subject; + selector.compoundCount++; + return _child; // now populating the right side's child + } else { + // parent query + // info for parent query + var _parent2 = newQuery(); + + var _child2 = newQuery(); + + var pcQChecks = [{ + type: Type.PARENT, + parent: _parent2, + child: _child2 + }]; // the parent-child query takes the place of the query previously being populated + + _parent2.checks = query.checks; // the previous query contains the checks for the parent + + query.checks = pcQChecks; // pc query takes over + + selector.compoundCount++; + return _child2; // we're now populating the child + } + } +}, { + name: 'descendant', + separator: true, + regex: tokens.descendant, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: descendant query + var ancChQuery = newQuery(); + var descendant = newQuery(); + var ancestor = selector[selector.length - 1]; + ancChQuery.checks.push({ + type: Type.DESCENDANT, + ancestor: ancestor, + descendant: descendant + }); // the query in the selector should be the '>' itself + + replaceLastQuery(selector, query, ancChQuery); + selector.compoundCount++; // we're now populating the descendant query with expressions that follow + + return descendant; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + + var _descendant = newQuery(); + + var _ancestor = newQuery(); // set up the root compound q + + + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); // populate the subject and replace the q at the old spot (within left) with TRUE + + subject.checks = query.checks; // take the checks from the left + + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + // set up the right q + + _ancestor.checks.push({ + type: Type.TRUE + }); // ancestor implicitly refs the subject + + + right.checks.push({ + type: Type.ANCESTOR, + // type is swapped on right side queries + ancestor: _ancestor, + descendant: _descendant // empty for now + + }); + replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query` + + selector.currentSubject = subject; + selector.compoundCount++; + return _descendant; // now populating the right side's descendant + } else { + // ancestor query + // info for parent query + var _ancestor2 = newQuery(); + + var _descendant2 = newQuery(); + + var adQChecks = [{ + type: Type.ANCESTOR, + ancestor: _ancestor2, + descendant: _descendant2 + }]; // the parent-child query takes the place of the query previously being populated + + _ancestor2.checks = query.checks; // the previous query contains the checks for the parent + + query.checks = adQChecks; // pc query takes over + + selector.compoundCount++; + return _descendant2; // we're now populating the child + } + } +}, { + name: 'subject', + modifier: true, + regex: tokens.subject, + populate: function populate(selector, query) { + if (selector.currentSubject != null && selector.currentSubject !== query) { + warn('Redefinition of subject in selector `' + selector.toString() + '`'); + return false; + } + + selector.currentSubject = query; + var topQ = selector[selector.length - 1]; + var topChk = topQ.checks[0]; + var topType = topChk == null ? null : topChk.type; + + if (topType === Type.DIRECTED_EDGE) { + // directed edge with subject on the target + // change to target node check + topChk.type = Type.NODE_TARGET; + } else if (topType === Type.UNDIRECTED_EDGE) { + // undirected edge with subject on the second node + // change to neighbor check + topChk.type = Type.NODE_NEIGHBOR; + topChk.node = topChk.nodes[1]; // second node is subject + + topChk.neighbor = topChk.nodes[0]; // clean up unused fields for new type + + topChk.nodes = null; + } + } +}]; +exprs.forEach(function (e) { + return e.regexObj = new RegExp('^' + e.regex); +}); + +/** + * Of all the expressions, find the first match in the remaining text. + * @param {string} remaining The remaining text to parse + * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }` + */ + +var consumeExpr = function consumeExpr(remaining) { + var expr; + var match; + var name; + + for (var j = 0; j < exprs.length; j++) { + var e = exprs[j]; + var n = e.name; + var m = remaining.match(e.regexObj); + + if (m != null) { + match = m; + expr = e; + name = n; + var consumed = m[0]; + remaining = remaining.substring(consumed.length); + break; // we've consumed one expr, so we can return now + } + } + + return { + expr: expr, + match: match, + name: name, + remaining: remaining + }; +}; +/** + * Consume all the leading whitespace + * @param {string} remaining The text to consume + * @returns The text with the leading whitespace removed + */ + + +var consumeWhitespace = function consumeWhitespace(remaining) { + var match = remaining.match(/^\s+/); + + if (match) { + var consumed = match[0]; + remaining = remaining.substring(consumed.length); + } + + return remaining; +}; +/** + * Parse the string and store the parsed representation in the Selector. + * @param {string} selector The selector string + * @returns `true` if the selector was successfully parsed, `false` otherwise + */ + + +var parse = function parse(selector) { + var self = this; + var remaining = self.inputText = selector; + var currentQuery = self[0] = newQuery(); + self.length = 1; + remaining = consumeWhitespace(remaining); // get rid of leading whitespace + + for (;;) { + var exprInfo = consumeExpr(remaining); + + if (exprInfo.expr == null) { + warn('The selector `' + selector + '`is invalid'); + return false; + } else { + var args = exprInfo.match.slice(1); // let the token populate the selector object in currentQuery + + var ret = exprInfo.expr.populate(self, currentQuery, args); + + if (ret === false) { + return false; // exit if population failed + } else if (ret != null) { + currentQuery = ret; // change the current query to be filled if the expr specifies + } + } + + remaining = exprInfo.remaining; // we're done when there's nothing left to parse + + if (remaining.match(/^\s*$/)) { + break; + } + } + + var lastQ = self[self.length - 1]; + + if (self.currentSubject != null) { + lastQ.subject = self.currentSubject; + } + + lastQ.edgeCount = self.edgeCount; + lastQ.compoundCount = self.compoundCount; + + for (var i = 0; i < self.length; i++) { + var q = self[i]; // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations + + if (q.compoundCount > 0 && q.edgeCount > 0) { + warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector'); + return false; + } + + if (q.edgeCount > 1) { + warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors'); + return false; + } else if (q.edgeCount === 1) { + warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.'); + } + } + + return true; // success +}; +/** + * Get the selector represented as a string. This value uses default formatting, + * so things like spacing may differ from the input text passed to the constructor. + * @returns {string} The selector string + */ + + +var toString = function toString() { + if (this.toStringCache != null) { + return this.toStringCache; + } + + var clean = function clean(obj) { + if (obj == null) { + return ''; + } else { + return obj; + } + }; + + var cleanVal = function cleanVal(val) { + if (string(val)) { + return '"' + val + '"'; + } else { + return clean(val); + } + }; + + var space = function space(val) { + return ' ' + val + ' '; + }; + + var checkToString = function checkToString(check, subject) { + var type = check.type, + value = check.value; + + switch (type) { + case Type.GROUP: + { + var group = clean(value); + return group.substring(0, group.length - 1); + } + + case Type.DATA_COMPARE: + { + var field = check.field, + operator = check.operator; + return '[' + field + space(clean(operator)) + cleanVal(value) + ']'; + } + + case Type.DATA_BOOL: + { + var _operator = check.operator, + _field = check.field; + return '[' + clean(_operator) + _field + ']'; + } + + case Type.DATA_EXIST: + { + var _field2 = check.field; + return '[' + _field2 + ']'; + } + + case Type.META_COMPARE: + { + var _operator2 = check.operator, + _field3 = check.field; + return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]'; + } + + case Type.STATE: + { + return value; + } + + case Type.ID: + { + return '#' + value; + } + + case Type.CLASS: + { + return '.' + value; + } + + case Type.PARENT: + case Type.CHILD: + { + return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject); + } + + case Type.ANCESTOR: + case Type.DESCENDANT: + { + return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject); + } + + case Type.COMPOUND_SPLIT: + { + var lhs = queryToString(check.left, subject); + var sub = queryToString(check.subject, subject); + var rhs = queryToString(check.right, subject); + return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs; + } + + case Type.TRUE: + { + return ''; + } + } + }; + + var queryToString = function queryToString(query, subject) { + return query.checks.reduce(function (str, chk, i) { + return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject); + }, ''); + }; + + var str = ''; + + for (var i = 0; i < this.length; i++) { + var query = this[i]; + str += queryToString(query, query.subject); + + if (this.length > 1 && i < this.length - 1) { + str += ', '; + } + } + + this.toStringCache = str; + return str; +}; +var parse$1 = { + parse: parse, + toString: toString +}; + +var valCmp = function valCmp(fieldVal, operator, value) { + var matches; + var isFieldStr = string(fieldVal); + var isFieldNum = number$1(fieldVal); + var isValStr = string(value); + var fieldStr, valStr; + var caseInsensitive = false; + var notExpr = false; + var isIneqCmp = false; + + if (operator.indexOf('!') >= 0) { + operator = operator.replace('!', ''); + notExpr = true; + } + + if (operator.indexOf('@') >= 0) { + operator = operator.replace('@', ''); + caseInsensitive = true; + } + + if (isFieldStr || isValStr || caseInsensitive) { + fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal; + valStr = '' + value; + } // if we're doing a case insensitive comparison, then we're using a STRING comparison + // even if we're comparing numbers + + + if (caseInsensitive) { + fieldVal = fieldStr = fieldStr.toLowerCase(); + value = valStr = valStr.toLowerCase(); + } + + switch (operator) { + case '*=': + matches = fieldStr.indexOf(valStr) >= 0; + break; + + case '$=': + matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0; + break; + + case '^=': + matches = fieldStr.indexOf(valStr) === 0; + break; + + case '=': + matches = fieldVal === value; + break; + + case '>': + isIneqCmp = true; + matches = fieldVal > value; + break; + + case '>=': + isIneqCmp = true; + matches = fieldVal >= value; + break; + + case '<': + isIneqCmp = true; + matches = fieldVal < value; + break; + + case '<=': + isIneqCmp = true; + matches = fieldVal <= value; + break; + + default: + matches = false; + break; + } // apply the not op, but null vals for inequalities should always stay non-matching + + + if (notExpr && (fieldVal != null || !isIneqCmp)) { + matches = !matches; + } + + return matches; +}; +var boolCmp = function boolCmp(fieldVal, operator) { + switch (operator) { + case '?': + return fieldVal ? true : false; + + case '!': + return fieldVal ? false : true; + + case '^': + return fieldVal === undefined; + } +}; +var existCmp = function existCmp(fieldVal) { + return fieldVal !== undefined; +}; +var data$1 = function data(ele, field) { + return ele.data(field); +}; +var meta = function meta(ele, field) { + return ele[field](); +}; + +/** A lookup of `match(check, ele)` functions by `Type` int */ + +var match = []; +/** + * Returns whether the query matches for the element + * @param query The `{ type, value, ... }` query object + * @param ele The element to compare against +*/ + +var matches$1 = function matches(query, ele) { + return query.checks.every(function (chk) { + return match[chk.type](chk, ele); + }); +}; + +match[Type.GROUP] = function (check, ele) { + var group = check.value; + return group === '*' || group === ele.group(); +}; + +match[Type.STATE] = function (check, ele) { + var stateSelector = check.value; + return stateSelectorMatches(stateSelector, ele); +}; + +match[Type.ID] = function (check, ele) { + var id = check.value; + return ele.id() === id; +}; + +match[Type.CLASS] = function (check, ele) { + var cls = check.value; + return ele.hasClass(cls); +}; + +match[Type.META_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(meta(ele, field), operator, value); +}; + +match[Type.DATA_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(data$1(ele, field), operator, value); +}; + +match[Type.DATA_BOOL] = function (check, ele) { + var field = check.field, + operator = check.operator; + return boolCmp(data$1(ele, field), operator); +}; + +match[Type.DATA_EXIST] = function (check, ele) { + var field = check.field; + check.operator; + return existCmp(data$1(ele, field)); +}; + +match[Type.UNDIRECTED_EDGE] = function (check, ele) { + var qA = check.nodes[0]; + var qB = check.nodes[1]; + var src = ele.source(); + var tgt = ele.target(); + return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt); +}; + +match[Type.NODE_NEIGHBOR] = function (check, ele) { + return matches$1(check.node, ele) && ele.neighborhood().some(function (n) { + return n.isNode() && matches$1(check.neighbor, n); + }); +}; + +match[Type.DIRECTED_EDGE] = function (check, ele) { + return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); +}; + +match[Type.NODE_SOURCE] = function (check, ele) { + return matches$1(check.source, ele) && ele.outgoers().some(function (n) { + return n.isNode() && matches$1(check.target, n); + }); +}; + +match[Type.NODE_TARGET] = function (check, ele) { + return matches$1(check.target, ele) && ele.incomers().some(function (n) { + return n.isNode() && matches$1(check.source, n); + }); +}; + +match[Type.CHILD] = function (check, ele) { + return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); +}; + +match[Type.PARENT] = function (check, ele) { + return matches$1(check.parent, ele) && ele.children().some(function (c) { + return matches$1(check.child, c); + }); +}; + +match[Type.DESCENDANT] = function (check, ele) { + return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) { + return matches$1(check.ancestor, a); + }); +}; + +match[Type.ANCESTOR] = function (check, ele) { + return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) { + return matches$1(check.descendant, d); + }); +}; + +match[Type.COMPOUND_SPLIT] = function (check, ele) { + return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); +}; + +match[Type.TRUE] = function () { + return true; +}; + +match[Type.COLLECTION] = function (check, ele) { + var collection = check.value; + return collection.has(ele); +}; + +match[Type.FILTER] = function (check, ele) { + var filter = check.value; + return filter(ele); +}; + +var filter = function filter(collection) { + var self = this; // for 1 id #foo queries, just get the element + + if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) { + return collection.getElementById(self[0].checks[0].value).collection(); + } + + var selectorFunction = function selectorFunction(element) { + for (var j = 0; j < self.length; j++) { + var query = self[j]; + + if (matches$1(query, element)) { + return true; + } + } + + return false; + }; + + if (self.text() == null) { + selectorFunction = function selectorFunction() { + return true; + }; + } + + return collection.filter(selectorFunction); +}; // filter +// does selector match a single element? + + +var matches = function matches(ele) { + var self = this; + + for (var j = 0; j < self.length; j++) { + var query = self[j]; + + if (matches$1(query, ele)) { + return true; + } + } + + return false; +}; // matches + + +var matching = { + matches: matches, + filter: filter +}; + +var Selector = function Selector(selector) { + this.inputText = selector; + this.currentSubject = null; + this.compoundCount = 0; + this.edgeCount = 0; + this.length = 0; + + if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { + this.addQuery({ + checks: [{ + type: Type.COLLECTION, + value: selector.collection() + }] + }); + } else if (fn$6(selector)) { + this.addQuery({ + checks: [{ + type: Type.FILTER, + value: selector + }] + }); + } else if (string(selector)) { + if (!this.parse(selector)) { + this.invalid = true; + } + } else { + error('A selector must be created from a string; found '); + } +}; + +var selfn = Selector.prototype; +[parse$1, matching].forEach(function (p) { + return extend(selfn, p); +}); + +selfn.text = function () { + return this.inputText; +}; + +selfn.size = function () { + return this.length; +}; + +selfn.eq = function (i) { + return this[i]; +}; + +selfn.sameText = function (otherSel) { + return !this.invalid && !otherSel.invalid && this.text() === otherSel.text(); +}; + +selfn.addQuery = function (q) { + this[this.length++] = q; +}; + +selfn.selector = selfn.toString; + +var elesfn$g = { + allAre: function allAre(selector) { + var selObj = new Selector(selector); + return this.every(function (ele) { + return selObj.matches(ele); + }); + }, + is: function is(selector) { + var selObj = new Selector(selector); + return this.some(function (ele) { + return selObj.matches(ele); + }); + }, + some: function some(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + + if (ret) { + return true; + } + } + + return false; + }, + every: function every(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + + if (!ret) { + return false; + } + } + + return true; + }, + same: function same(collection) { + // cheap collection ref check + if (this === collection) { + return true; + } + + collection = this.cy().collection(collection); + var thisLength = this.length; + var collectionLength = collection.length; // cheap length check + + if (thisLength !== collectionLength) { + return false; + } // cheap element ref check + + + if (thisLength === 1) { + return this[0] === collection[0]; + } + + return this.every(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + anySame: function anySame(collection) { + collection = this.cy().collection(collection); + return this.some(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + allAreNeighbors: function allAreNeighbors(collection) { + collection = this.cy().collection(collection); + var nhood = this.neighborhood(); + return collection.every(function (ele) { + return nhood.hasElementWithId(ele.id()); + }); + }, + contains: function contains(collection) { + collection = this.cy().collection(collection); + var self = this; + return collection.every(function (ele) { + return self.hasElementWithId(ele.id()); + }); + } +}; +elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors; +elesfn$g.has = elesfn$g.contains; +elesfn$g.equal = elesfn$g.equals = elesfn$g.same; + +var cache = function cache(fn, name) { + return function traversalCache(arg1, arg2, arg3, arg4) { + var selectorOrEles = arg1; + var eles = this; + var key; + + if (selectorOrEles == null) { + key = ''; + } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) { + key = selectorOrEles.id(); + } + + if (eles.length === 1 && key) { + var _p = eles[0]._private; + var tch = _p.traversalCache = _p.traversalCache || {}; + var ch = tch[name] = tch[name] || []; + var hash = hashString(key); + var cacheHit = ch[hash]; + + if (cacheHit) { + return cacheHit; + } else { + return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4); + } + } else { + return fn.call(eles, arg1, arg2, arg3, arg4); + } + }; +}; + +var elesfn$f = { + parent: function parent(selector) { + var parents = []; // optimisation for single ele call + + if (this.length === 1) { + var parent = this[0]._private.parent; + + if (parent) { + return parent; + } + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _parent = ele._private.parent; + + if (_parent) { + parents.push(_parent); + } + } + + return this.spawn(parents, true).filter(selector); + }, + parents: function parents(selector) { + var parents = []; + var eles = this.parent(); + + while (eles.nonempty()) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + parents.push(ele); + } + + eles = eles.parent(); + } + + return this.spawn(parents, true).filter(selector); + }, + commonAncestors: function commonAncestors(selector) { + var ancestors; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var parents = ele.parents(); + ancestors = ancestors || parents; + ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set + } + + return ancestors.filter(selector); + }, + orphans: function orphans(selector) { + return this.stdFilter(function (ele) { + return ele.isOrphan(); + }).filter(selector); + }, + nonorphans: function nonorphans(selector) { + return this.stdFilter(function (ele) { + return ele.isChild(); + }).filter(selector); + }, + children: cache(function (selector) { + var children = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var eleChildren = ele._private.children; + + for (var j = 0; j < eleChildren.length; j++) { + children.push(eleChildren[j]); + } + } + + return this.spawn(children, true).filter(selector); + }, 'children'), + siblings: function siblings(selector) { + return this.parent().children().not(this).filter(selector); + }, + isParent: function isParent() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.children.length !== 0; + } + }, + isChildless: function isChildless() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.children.length === 0; + } + }, + isChild: function isChild() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.parent != null; + } + }, + isOrphan: function isOrphan() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.parent == null; + } + }, + descendants: function descendants(selector) { + var elements = []; + + function add(eles) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + elements.push(ele); + + if (ele.children().nonempty()) { + add(ele.children()); + } + } + } + + add(this.children()); + return this.spawn(elements, true).filter(selector); + } +}; + +function forEachCompound(eles, fn, includeSelf, recursiveStep) { + var q = []; + var did = new Set$1(); + var cy = eles.cy(); + var hasCompounds = cy.hasCompoundNodes(); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (includeSelf) { + q.push(ele); + } else if (hasCompounds) { + recursiveStep(q, did, ele); + } + } + + while (q.length > 0) { + var _ele = q.shift(); + + fn(_ele); + did.add(_ele.id()); + + if (hasCompounds) { + recursiveStep(q, did, _ele); + } + } + + return eles; +} + +function addChildren(q, did, ele) { + if (ele.isParent()) { + var children = ele._private.children; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (!did.has(child.id())) { + q.push(child); + } + } + } +} // very efficient version of eles.add( eles.descendants() ).forEach() +// for internal use + + +elesfn$f.forEachDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addChildren); +}; + +function addParent(q, did, ele) { + if (ele.isChild()) { + var parent = ele._private.parent; + + if (!did.has(parent.id())) { + q.push(parent); + } + } +} + +elesfn$f.forEachUp = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParent); +}; + +function addParentAndChildren(q, did, ele) { + addParent(q, did, ele); + addChildren(q, did, ele); +} + +elesfn$f.forEachUpAndDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParentAndChildren); +}; // aliases + + +elesfn$f.ancestors = elesfn$f.parents; + +var fn$5, elesfn$e; +fn$5 = elesfn$e = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + rscratch: define.data({ + field: 'rscratch', + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: true + }), + removeRscratch: define.removeData({ + field: 'rscratch', + triggerEvent: false + }), + id: function id() { + var ele = this[0]; + + if (ele) { + return ele._private.data.id; + } + } +}; // aliases + +fn$5.attr = fn$5.data; +fn$5.removeAttr = fn$5.removeData; +var data = elesfn$e; + +var elesfn$d = {}; + +function defineDegreeFunction(callback) { + return function (includeLoops) { + var self = this; + + if (includeLoops === undefined) { + includeLoops = true; + } + + if (self.length === 0) { + return; + } + + if (self.isNode() && !self.removed()) { + var degree = 0; + var node = self[0]; + var connectedEdges = node._private.edges; + + for (var i = 0; i < connectedEdges.length; i++) { + var edge = connectedEdges[i]; + + if (!includeLoops && edge.isLoop()) { + continue; + } + + degree += callback(node, edge); + } + + return degree; + } else { + return; + } + }; +} + +extend(elesfn$d, { + degree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(edge.target())) { + return 2; + } else { + return 1; + } + }), + indegree: defineDegreeFunction(function (node, edge) { + if (edge.target().same(node)) { + return 1; + } else { + return 0; + } + }), + outdegree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(node)) { + return 1; + } else { + return 0; + } + }) +}); + +function defineDegreeBoundsFunction(degreeFn, callback) { + return function (includeLoops) { + var ret; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + var ele = nodes[i]; + var degree = ele[degreeFn](includeLoops); + + if (degree !== undefined && (ret === undefined || callback(degree, ret))) { + ret = degree; + } + } + + return ret; + }; +} + +extend(elesfn$d, { + minDegree: defineDegreeBoundsFunction('degree', function (degree, min) { + return degree < min; + }), + maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) { + return degree > max; + }), + minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) { + return degree < min; + }), + maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) { + return degree > max; + }), + minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) { + return degree < min; + }), + maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) { + return degree > max; + }) +}); +extend(elesfn$d, { + totalDegree: function totalDegree(includeLoops) { + var total = 0; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + total += nodes[i].degree(includeLoops); + } + + return total; + } +}); + +var fn$4, elesfn$c; + +var beforePositionSet = function beforePositionSet(eles, newPos, silent) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.locked()) { + var oldPos = ele._private.position; + var delta = { + x: newPos.x != null ? newPos.x - oldPos.x : 0, + y: newPos.y != null ? newPos.y - oldPos.y : 0 + }; + + if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) { + ele.children().shift(delta, silent); + } + + ele.dirtyBoundingBoxCache(); + } + } +}; + +var positionDef = { + field: 'position', + bindingEvent: 'position', + allowBinding: true, + allowSetting: true, + settingEvent: 'position', + settingTriggersEvent: true, + triggerFnName: 'emitAndNotify', + allowGetting: true, + validKeys: ['x', 'y'], + beforeGet: function beforeGet(ele) { + ele.updateCompoundBounds(); + }, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, false); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + }, + canSet: function canSet(ele) { + return !ele.locked(); + } +}; +fn$4 = elesfn$c = { + position: define.data(positionDef), + // position but no notification to renderer + silentPosition: define.data(extend({}, positionDef, { + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: false, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, true); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + } + })), + positions: function positions(pos, silent) { + if (plainObject(pos)) { + if (silent) { + this.silentPosition(pos); + } else { + this.position(pos); + } + } else if (fn$6(pos)) { + var _fn = pos; + var cy = this.cy(); + cy.startBatch(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + var _pos = void 0; + + if (_pos = _fn(ele, i)) { + if (silent) { + ele.silentPosition(_pos); + } else { + ele.position(_pos); + } + } + } + + cy.endBatch(); + } + + return this; // chaining + }, + silentPositions: function silentPositions(pos) { + return this.positions(pos, true); + }, + shift: function shift(dim, val, silent) { + var delta; + + if (plainObject(dim)) { + delta = { + x: number$1(dim.x) ? dim.x : 0, + y: number$1(dim.y) ? dim.y : 0 + }; + silent = val; + } else if (string(dim) && number$1(val)) { + delta = { + x: 0, + y: 0 + }; + delta[dim] = val; + } + + if (delta != null) { + var cy = this.cy(); + cy.startBatch(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; // exclude any node that is a descendant of the calling collection + + if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) { + continue; + } + + var pos = ele.position(); + var newPos = { + x: pos.x + delta.x, + y: pos.y + delta.y + }; + + if (silent) { + ele.silentPosition(newPos); + } else { + ele.position(newPos); + } + } + + cy.endBatch(); + } + + return this; + }, + silentShift: function silentShift(dim, val) { + if (plainObject(dim)) { + this.shift(dim, true); + } else if (string(dim) && number$1(val)) { + this.shift(dim, val, true); + } + + return this; + }, + // get/set the rendered (i.e. on screen) positon of the element + renderedPosition: function renderedPosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var rpos = plainObject(dim) ? dim : undefined; + var setting = rpos !== undefined || val !== undefined && string(dim); + + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele = this[i]; + + if (val !== undefined) { + // set one dimension + _ele.position(dim, (val - pan[dim]) / zoom); + } else if (rpos !== undefined) { + // set whole position + _ele.position(renderedToModelPosition(rpos, zoom, pan)); + } + } + } else { + // getting + var pos = ele.position(); + rpos = modelToRenderedPosition(pos, zoom, pan); + + if (dim === undefined) { + // then return the whole rendered position + return rpos; + } else { + // then return the specified dimension + return rpos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + }, + // get/set the position relative to the parent + relativePosition: function relativePosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var ppos = plainObject(dim) ? dim : undefined; + var setting = ppos !== undefined || val !== undefined && string(dim); + var hasCompoundNodes = cy.hasCompoundNodes(); + + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele2 = this[i]; + var parent = hasCompoundNodes ? _ele2.parent() : null; + var hasParent = parent && parent.length > 0; + var relativeToParent = hasParent; + + if (hasParent) { + parent = parent[0]; + } + + var origin = relativeToParent ? parent.position() : { + x: 0, + y: 0 + }; + + if (val !== undefined) { + // set one dimension + _ele2.position(dim, val + origin[dim]); + } else if (ppos !== undefined) { + // set whole position + _ele2.position({ + x: ppos.x + origin.x, + y: ppos.y + origin.y + }); + } + } + } else { + // getting + var pos = ele.position(); + + var _parent = hasCompoundNodes ? ele.parent() : null; + + var _hasParent = _parent && _parent.length > 0; + + var _relativeToParent = _hasParent; + + if (_hasParent) { + _parent = _parent[0]; + } + + var _origin = _relativeToParent ? _parent.position() : { + x: 0, + y: 0 + }; + + ppos = { + x: pos.x - _origin.x, + y: pos.y - _origin.y + }; + + if (dim === undefined) { + // then return the whole rendered position + return ppos; + } else { + // then return the specified dimension + return ppos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + } +}; // aliases + +fn$4.modelPosition = fn$4.point = fn$4.position; +fn$4.modelPositions = fn$4.points = fn$4.positions; +fn$4.renderedPoint = fn$4.renderedPosition; +fn$4.relativePoint = fn$4.relativePosition; +var position = elesfn$c; + +var fn$3, elesfn$b; +fn$3 = elesfn$b = {}; + +elesfn$b.renderedBoundingBox = function (options) { + var bb = this.boundingBox(options); + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var x1 = bb.x1 * zoom + pan.x; + var x2 = bb.x2 * zoom + pan.x; + var y1 = bb.y1 * zoom + pan.y; + var y2 = bb.y2 * zoom + pan.y; + return { + x1: x1, + x2: x2, + y1: y1, + y2: y2, + w: x2 - x1, + h: y2 - y1 + }; +}; + +elesfn$b.dirtyCompoundBoundsCache = function () { + var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); + + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } + + this.forEachUp(function (ele) { + if (ele.isParent()) { + var _p = ele._private; + _p.compoundBoundsClean = false; + _p.bbCache = null; + + if (!silent) { + ele.emitAndNotify('bounds'); + } + } + }); + return this; +}; + +elesfn$b.updateCompoundBounds = function () { + var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); // not possible to do on non-compound graphs or with the style disabled + + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } // save cycles when batching -- but bounds will be stale (or not exist yet) + + + if (!force && cy.batching()) { + return this; + } + + function update(parent) { + if (!parent.isParent()) { + return; + } + + var _p = parent._private; + var children = parent.children(); + var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include'; + var min = { + width: { + val: parent.pstyle('min-width').pfValue, + left: parent.pstyle('min-width-bias-left'), + right: parent.pstyle('min-width-bias-right') + }, + height: { + val: parent.pstyle('min-height').pfValue, + top: parent.pstyle('min-height-bias-top'), + bottom: parent.pstyle('min-height-bias-bottom') + } + }; + var bb = children.boundingBox({ + includeLabels: includeLabels, + includeOverlays: false, + // updating the compound bounds happens outside of the regular + // cache cycle (i.e. before fired events) + useCache: false + }); + var pos = _p.position; // if children take up zero area then keep position and fall back on stylesheet w/h + + if (bb.w === 0 || bb.h === 0) { + bb = { + w: parent.pstyle('width').pfValue, + h: parent.pstyle('height').pfValue + }; + bb.x1 = pos.x - bb.w / 2; + bb.x2 = pos.x + bb.w / 2; + bb.y1 = pos.y - bb.h / 2; + bb.y2 = pos.y + bb.h / 2; + } + + function computeBiasValues(propDiff, propBias, propBiasComplement) { + var biasDiff = 0; + var biasComplementDiff = 0; + var biasTotal = propBias + propBiasComplement; + + if (propDiff > 0 && biasTotal > 0) { + biasDiff = propBias / biasTotal * propDiff; + biasComplementDiff = propBiasComplement / biasTotal * propDiff; + } + + return { + biasDiff: biasDiff, + biasComplementDiff: biasComplementDiff + }; + } + + function computePaddingValues(width, height, paddingObject, relativeTo) { + // Assuming percentage is number from 0 to 1 + if (paddingObject.units === '%') { + switch (relativeTo) { + case 'width': + return width > 0 ? paddingObject.pfValue * width : 0; + + case 'height': + return height > 0 ? paddingObject.pfValue * height : 0; + + case 'average': + return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0; + + case 'min': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0; + + case 'max': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0; + + default: + return 0; + } + } else if (paddingObject.units === 'px') { + return paddingObject.pfValue; + } else { + return 0; + } + } + + var leftVal = min.width.left.value; + + if (min.width.left.units === 'px' && min.width.val > 0) { + leftVal = leftVal * 100 / min.width.val; + } + + var rightVal = min.width.right.value; + + if (min.width.right.units === 'px' && min.width.val > 0) { + rightVal = rightVal * 100 / min.width.val; + } + + var topVal = min.height.top.value; + + if (min.height.top.units === 'px' && min.height.val > 0) { + topVal = topVal * 100 / min.height.val; + } + + var bottomVal = min.height.bottom.value; + + if (min.height.bottom.units === 'px' && min.height.val > 0) { + bottomVal = bottomVal * 100 / min.height.val; + } + + var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal); + var diffLeft = widthBiasDiffs.biasDiff; + var diffRight = widthBiasDiffs.biasComplementDiff; + var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal); + var diffTop = heightBiasDiffs.biasDiff; + var diffBottom = heightBiasDiffs.biasComplementDiff; + _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value); + _p.autoWidth = Math.max(bb.w, min.width.val); + pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; + _p.autoHeight = Math.max(bb.h, min.height.val); + pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2; + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + + if (!_p.compoundBoundsClean || force) { + update(ele); + + if (!cy.batching()) { + _p.compoundBoundsClean = true; + } + } + } + + return this; +}; + +var noninf = function noninf(x) { + if (x === Infinity || x === -Infinity) { + return 0; + } + + return x; +}; + +var updateBounds = function updateBounds(b, x1, y1, x2, y2) { + // don't update with zero area boxes + if (x2 - x1 === 0 || y2 - y1 === 0) { + return; + } // don't update with null dim + + + if (x1 == null || y1 == null || x2 == null || y2 == null) { + return; + } + + b.x1 = x1 < b.x1 ? x1 : b.x1; + b.x2 = x2 > b.x2 ? x2 : b.x2; + b.y1 = y1 < b.y1 ? y1 : b.y1; + b.y2 = y2 > b.y2 ? y2 : b.y2; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; +}; + +var updateBoundsFromBox = function updateBoundsFromBox(b, b2) { + if (b2 == null) { + return b; + } + + return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2); +}; + +var prefixedProperty = function prefixedProperty(obj, field, prefix) { + return getPrefixedProperty(obj, field, prefix); +}; + +var updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + + var _p = ele._private; + var rstyle = _p.rstyle; + var halfArW = rstyle.arrowWidth / 2; + var arrowType = ele.pstyle(prefix + '-arrow-shape').value; + var x; + var y; + + if (arrowType !== 'none') { + if (prefix === 'source') { + x = rstyle.srcX; + y = rstyle.srcY; + } else if (prefix === 'target') { + x = rstyle.tgtX; + y = rstyle.tgtY; + } else { + x = rstyle.midX; + y = rstyle.midY; + } // always store the individual arrow bounds + + + var bbs = _p.arrowBounds = _p.arrowBounds || {}; + var bb = bbs[prefix] = bbs[prefix] || {}; + bb.x1 = x - halfArW; + bb.y1 = y - halfArW; + bb.x2 = x + halfArW; + bb.y2 = y + halfArW; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + expandBoundingBox(bb, 1); + updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2); + } +}; + +var updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + + var prefixDash; + + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + + var _p = ele._private; + var rstyle = _p.rstyle; + var label = ele.pstyle(prefixDash + 'label').strValue; + + if (label) { + var halign = ele.pstyle('text-halign'); + var valign = ele.pstyle('text-valign'); + var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix); + var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix); + var labelX = prefixedProperty(rstyle, 'labelX', prefix); + var labelY = prefixedProperty(rstyle, 'labelY', prefix); + var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var rotation = ele.pstyle(prefixDash + 'text-rotation'); + var outlineWidth = ele.pstyle('text-outline-width').pfValue; + var borderWidth = ele.pstyle('text-border-width').pfValue; + var halfBorderWidth = borderWidth / 2; + var padding = ele.pstyle('text-background-padding').pfValue; + var marginOfError = 2; // expand to work around browser dimension inaccuracies + + var lh = labelHeight; + var lw = labelWidth; + var lw_2 = lw / 2; + var lh_2 = lh / 2; + var lx1, lx2, ly1, ly2; + + if (isEdge) { + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + } else { + switch (halign.value) { + case 'left': + lx1 = labelX - lw; + lx2 = labelX; + break; + + case 'center': + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + break; + + case 'right': + lx1 = labelX; + lx2 = labelX + lw; + break; + } + + switch (valign.value) { + case 'top': + ly1 = labelY - lh; + ly2 = labelY; + break; + + case 'center': + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + break; + + case 'bottom': + ly1 = labelY; + ly2 = labelY + lh; + break; + } + } // shift by margin and expand by outline and border + + + lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; + ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; // always store the unrotated label bounds separately + + var bbPrefix = prefix || 'main'; + var bbs = _p.labelBounds; + var bb = bbs[bbPrefix] = bbs[bbPrefix] || {}; + bb.x1 = lx1; + bb.y1 = ly1; + bb.x2 = lx2; + bb.y2 = ly2; + bb.w = lx2 - lx1; + bb.h = ly2 - ly1; + var isAutorotate = isEdge && rotation.strValue === 'autorotate'; + var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0; + + if (isAutorotate || isPfValue) { + var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue; + var cos = Math.cos(theta); + var sin = Math.sin(theta); // rotation point (default value for center-center) + + var xo = (lx1 + lx2) / 2; + var yo = (ly1 + ly2) / 2; + + if (!isEdge) { + switch (halign.value) { + case 'left': + xo = lx2; + break; + + case 'right': + xo = lx1; + break; + } + + switch (valign.value) { + case 'top': + yo = ly2; + break; + + case 'bottom': + yo = ly1; + break; + } + } + + var rotate = function rotate(x, y) { + x = x - xo; + y = y - yo; + return { + x: x * cos - y * sin + xo, + y: x * sin + y * cos + yo + }; + }; + + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + } + + var bbPrefixRot = bbPrefix + 'Rot'; + var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {}; + bbRot.x1 = lx1; + bbRot.y1 = ly1; + bbRot.x2 = lx2; + bbRot.y2 = ly2; + bbRot.w = lx2 - lx1; + bbRot.h = ly2 - ly1; + updateBounds(bounds, lx1, ly1, lx2, ly2); + updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); + } + + return bounds; +}; // get the bounding box of the elements (in raw model position) + + +var boundingBoxImpl = function boundingBoxImpl(ele, options) { + var cy = ele._private.cy; + var styleEnabled = cy.styleEnabled(); + var headless = cy.headless(); + var bounds = makeBoundingBox(); + var _p = ele._private; + var isNode = ele.isNode(); + var isEdge = ele.isEdge(); + var ex1, ex2, ey1, ey2; // extrema of body / lines + + var x, y; // node pos + + var rstyle = _p.rstyle; + var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0]; // must use `display` prop only, as reading `compound.width()` causes recursion + // (other factors like width values will be considered later in this function anyway) + + var isDisplayed = function isDisplayed(ele) { + return ele.pstyle('display').value !== 'none'; + }; + + var displayed = !styleEnabled || isDisplayed(ele) // must take into account connected nodes b/c of implicit edge hiding on display:none node + && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target())); + + if (displayed) { + // displayed suffices, since we will find zero area eles anyway + var overlayOpacity = 0; + var overlayPadding = 0; + + if (styleEnabled && options.includeOverlays) { + overlayOpacity = ele.pstyle('overlay-opacity').value; + + if (overlayOpacity !== 0) { + overlayPadding = ele.pstyle('overlay-padding').value; + } + } + + var underlayOpacity = 0; + var underlayPadding = 0; + + if (styleEnabled && options.includeUnderlays) { + underlayOpacity = ele.pstyle('underlay-opacity').value; + + if (underlayOpacity !== 0) { + underlayPadding = ele.pstyle('underlay-padding').value; + } + } + + var padding = Math.max(overlayPadding, underlayPadding); + var w = 0; + var wHalf = 0; + + if (styleEnabled) { + w = ele.pstyle('width').pfValue; + wHalf = w / 2; + } + + if (isNode && options.includeNodes) { + var pos = ele.position(); + x = pos.x; + y = pos.y; + + var _w = ele.outerWidth(); + + var halfW = _w / 2; + var h = ele.outerHeight(); + var halfH = h / 2; // handle node dimensions + ///////////////////////// + + ex1 = x - halfW; + ex2 = x + halfW; + ey1 = y - halfH; + ey2 = y + halfH; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } else if (isEdge && options.includeEdges) { + if (styleEnabled && !headless) { + var curveStyle = ele.pstyle('curve-style').strValue; // handle edge dimensions (rough box estimate) + ////////////////////////////////////////////// + + ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY); + ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); // take into account edge width + + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); // precise edges + //////////////// + + if (curveStyle === 'haystack') { + var hpts = rstyle.haystackPts; + + if (hpts && hpts.length === 2) { + ex1 = hpts[0].x; + ey1 = hpts[0].y; + ex2 = hpts[1].x; + ey2 = hpts[1].y; + + if (ex1 > ex2) { + var temp = ex1; + ex1 = ex2; + ex2 = temp; + } + + if (ey1 > ey2) { + var _temp = ey1; + ey1 = ey2; + ey2 = _temp; + } + + updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf); + } + } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'taxi') { + var pts; + + switch (curveStyle) { + case 'bezier': + case 'unbundled-bezier': + pts = rstyle.bezierPts; + break; + + case 'segments': + case 'taxi': + pts = rstyle.linePts; + break; + } + + if (pts != null) { + for (var j = 0; j < pts.length; j++) { + var pt = pts[j]; + ex1 = pt.x - wHalf; + ex2 = pt.x + wHalf; + ey1 = pt.y - wHalf; + ey2 = pt.y + wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } + } + } // bezier-like or segment-like edge + + } else { + // headless or style disabled + // fallback on source and target positions + ////////////////////////////////////////// + var n1 = ele.source(); + var n1pos = n1.position(); + var n2 = ele.target(); + var n2pos = n2.position(); + ex1 = n1pos.x; + ex2 = n2pos.x; + ey1 = n1pos.y; + ey2 = n2pos.y; + + if (ex1 > ex2) { + var _temp2 = ex1; + ex1 = ex2; + ex2 = _temp2; + } + + if (ey1 > ey2) { + var _temp3 = ey1; + ey1 = ey2; + ey2 = _temp3; + } // take into account edge width + + + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } // headless or style disabled + + } // edges + // handle edge arrow size + ///////////////////////// + + + if (styleEnabled && options.includeEdges && isEdge) { + updateBoundsFromArrow(bounds, ele, 'mid-source'); + updateBoundsFromArrow(bounds, ele, 'mid-target'); + updateBoundsFromArrow(bounds, ele, 'source'); + updateBoundsFromArrow(bounds, ele, 'target'); + } // ghost + //////// + + + if (styleEnabled) { + var ghost = ele.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = ele.pstyle('ghost-offset-x').pfValue; + var gy = ele.pstyle('ghost-offset-y').pfValue; + updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy); + } + } // always store the body bounds separately from the labels + + + var bbBody = _p.bodyBounds = _p.bodyBounds || {}; + assignBoundingBox(bbBody, bounds); + expandBoundingBoxSides(bbBody, manualExpansion); + expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies + // overlay + ////////// + + if (styleEnabled) { + ex1 = bounds.x1; + ex2 = bounds.x2; + ey1 = bounds.y1; + ey2 = bounds.y2; + updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding); + } // always store the body bounds separately from the labels + + + var bbOverlay = _p.overlayBounds = _p.overlayBounds || {}; + assignBoundingBox(bbOverlay, bounds); + expandBoundingBoxSides(bbOverlay, manualExpansion); + expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies + // handle label dimensions + ////////////////////////// + + var bbLabels = _p.labelBounds = _p.labelBounds || {}; + + if (bbLabels.all != null) { + clearBoundingBox(bbLabels.all); + } else { + bbLabels.all = makeBoundingBox(); + } + + if (styleEnabled && options.includeLabels) { + if (options.includeMainLabels) { + updateBoundsFromLabel(bounds, ele, null); + } + + if (isEdge) { + if (options.includeSourceLabels) { + updateBoundsFromLabel(bounds, ele, 'source'); + } + + if (options.includeTargetLabels) { + updateBoundsFromLabel(bounds, ele, 'target'); + } + } + } // style enabled for labels + + } // if displayed + + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + + if (bounds.w > 0 && bounds.h > 0 && displayed) { + expandBoundingBoxSides(bounds, manualExpansion); // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides + + expandBoundingBox(bounds, 1); + } + + return bounds; +}; + +var getKey = function getKey(opts) { + var i = 0; + + var tf = function tf(val) { + return (val ? 1 : 0) << i++; + }; + + var key = 0; + key += tf(opts.incudeNodes); + key += tf(opts.includeEdges); + key += tf(opts.includeLabels); + key += tf(opts.includeMainLabels); + key += tf(opts.includeSourceLabels); + key += tf(opts.includeTargetLabels); + key += tf(opts.includeOverlays); + return key; +}; + +var getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) { + if (ele.isEdge()) { + var p1 = ele.source().position(); + var p2 = ele.target().position(); + + var r = function r(x) { + return Math.round(x); + }; + + return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]); + } else { + return 0; + } +}; + +var cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) { + var _p = ele._private; + var bb; + var isEdge = ele.isEdge(); + var key = opts == null ? defBbOptsKey : getKey(opts); + var usingDefOpts = key === defBbOptsKey; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame; + + var isDirty = function isDirty(ele) { + return ele._private.bbCache == null || ele._private.styleDirty; + }; + + var needRecalc = !useCache || isDirty(ele) || isEdge && isDirty(ele.source()) || isDirty(ele.target()); + + if (needRecalc) { + if (!isPosKeySame) { + ele.recalculateRenderedStyle(useCache); + } + + bb = boundingBoxImpl(ele, defBbOpts); + _p.bbCache = bb; + _p.bbCachePosKey = currPosKey; + } else { + bb = _p.bbCache; + } // not using def opts => need to build up bb from combination of sub bbs + + + if (!usingDefOpts) { + var isNode = ele.isNode(); + bb = makeBoundingBox(); + + if (opts.includeNodes && isNode || opts.includeEdges && !isNode) { + if (opts.includeOverlays) { + updateBoundsFromBox(bb, _p.overlayBounds); + } else { + updateBoundsFromBox(bb, _p.bodyBounds); + } + } + + if (opts.includeLabels) { + if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) { + updateBoundsFromBox(bb, _p.labelBounds.all); + } else { + if (opts.includeMainLabels) { + updateBoundsFromBox(bb, _p.labelBounds.mainRot); + } + + if (opts.includeSourceLabels) { + updateBoundsFromBox(bb, _p.labelBounds.sourceRot); + } + + if (opts.includeTargetLabels) { + updateBoundsFromBox(bb, _p.labelBounds.targetRot); + } + } + } + + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } + + return bb; +}; + +var defBbOpts = { + includeNodes: true, + includeEdges: true, + includeLabels: true, + includeMainLabels: true, + includeSourceLabels: true, + includeTargetLabels: true, + includeOverlays: true, + includeUnderlays: true, + useCache: true +}; +var defBbOptsKey = getKey(defBbOpts); +var filledBbOpts = defaults$g(defBbOpts); + +elesfn$b.boundingBox = function (options) { + var bounds; // the main usecase is ele.boundingBox() for a single element with no/def options + // specified s.t. the cache is used, so check for this case to make it faster by + // avoiding the overhead of the rest of the function + + if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) { + if (options === undefined) { + options = defBbOpts; + } else { + options = filledBbOpts(options); + } + + bounds = cachedBoundingBoxImpl(this[0], options); + } else { + bounds = makeBoundingBox(); + options = options || defBbOpts; + var opts = filledBbOpts(options); + var eles = this; + var cy = eles.cy(); + var styleEnabled = cy.styleEnabled(); + + if (styleEnabled) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame && !_p.styleDirty; + ele.recalculateRenderedStyle(useCache); + } + } + + this.updateCompoundBounds(!options.useCache); + + for (var _i = 0; _i < eles.length; _i++) { + var _ele = eles[_i]; + updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts)); + } + } + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + return bounds; +}; + +elesfn$b.dirtyBoundingBoxCache = function () { + for (var i = 0; i < this.length; i++) { + var _p = this[i]._private; + _p.bbCache = null; + _p.bbCachePosKey = null; + _p.bodyBounds = null; + _p.overlayBounds = null; + _p.labelBounds.all = null; + _p.labelBounds.source = null; + _p.labelBounds.target = null; + _p.labelBounds.main = null; + _p.labelBounds.sourceRot = null; + _p.labelBounds.targetRot = null; + _p.labelBounds.mainRot = null; + _p.arrowBounds.source = null; + _p.arrowBounds.target = null; + _p.arrowBounds['mid-source'] = null; + _p.arrowBounds['mid-target'] = null; + } + + this.emitAndNotify('bounds'); + return this; +}; // private helper to get bounding box for custom node positions +// - good for perf in certain cases but currently requires dirtying the rendered style +// - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer... +// - try to use for only things like discrete layouts where the node position would change anyway + + +elesfn$b.boundingBoxAt = function (fn) { + var nodes = this.nodes(); + var cy = this.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + var parents = cy.collection(); + + if (hasCompoundNodes) { + parents = nodes.filter(function (node) { + return node.isParent(); + }); + nodes = nodes.not(parents); + } + + if (plainObject(fn)) { + var obj = fn; + + fn = function fn() { + return obj; + }; + } + + var storeOldPos = function storeOldPos(node, i) { + return node._private.bbAtOldPos = fn(node, i); + }; + + var getOldPos = function getOldPos(node) { + return node._private.bbAtOldPos; + }; + + cy.startBatch(); + nodes.forEach(storeOldPos).silentPositions(fn); + + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + var bb = copyBoundingBox(this.boundingBox({ + useCache: false + })); + nodes.silentPositions(getOldPos); + + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + cy.endBatch(); + return bb; +}; + +fn$3.boundingbox = fn$3.bb = fn$3.boundingBox; +fn$3.renderedBoundingbox = fn$3.renderedBoundingBox; +var bounds = elesfn$b; + +var fn$2, elesfn$a; +fn$2 = elesfn$a = {}; + +var defineDimFns = function defineDimFns(opts) { + opts.uppercaseName = capitalize(opts.name); + opts.autoName = 'auto' + opts.uppercaseName; + opts.labelName = 'label' + opts.uppercaseName; + opts.outerName = 'outer' + opts.uppercaseName; + opts.uppercaseOuterName = capitalize(opts.outerName); + + fn$2[opts.name] = function dimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + + if (ele) { + if (styleEnabled) { + if (ele.isParent()) { + ele.updateCompoundBounds(); + return _p[opts.autoName] || 0; + } + + var d = ele.pstyle(opts.name); + + switch (d.strValue) { + case 'label': + ele.recalculateRenderedStyle(); + return _p.rstyle[opts.labelName] || 0; + + default: + return d.pfValue; + } + } else { + return 1; + } + } + }; + + fn$2['outer' + opts.uppercaseName] = function outerDimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + + if (ele) { + if (styleEnabled) { + var dim = ele[opts.name](); + var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side + + var padding = 2 * ele.padding(); + return dim + border + padding; + } else { + return 1; + } + } + }; + + fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() { + var ele = this[0]; + + if (ele) { + var d = ele[opts.name](); + return d * this.cy().zoom(); + } + }; + + fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() { + var ele = this[0]; + + if (ele) { + var od = ele[opts.outerName](); + return od * this.cy().zoom(); + } + }; +}; + +defineDimFns({ + name: 'width' +}); +defineDimFns({ + name: 'height' +}); + +elesfn$a.padding = function () { + var ele = this[0]; + var _p = ele._private; + + if (ele.isParent()) { + ele.updateCompoundBounds(); + + if (_p.autoPadding !== undefined) { + return _p.autoPadding; + } else { + return ele.pstyle('padding').pfValue; + } + } else { + return ele.pstyle('padding').pfValue; + } +}; + +elesfn$a.paddedHeight = function () { + var ele = this[0]; + return ele.height() + 2 * ele.padding(); +}; + +elesfn$a.paddedWidth = function () { + var ele = this[0]; + return ele.width() + 2 * ele.padding(); +}; + +var widthHeight = elesfn$a; + +var ifEdge = function ifEdge(ele, getValue) { + if (ele.isEdge()) { + return getValue(ele); + } +}; + +var ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) { + if (ele.isEdge()) { + var cy = ele.cy(); + return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan()); + } +}; + +var ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) { + if (ele.isEdge()) { + var cy = ele.cy(); + var pan = cy.pan(); + var zoom = cy.zoom(); + return getPoints(ele).map(function (p) { + return modelToRenderedPosition(p, zoom, pan); + }); + } +}; + +var controlPoints = function controlPoints(ele) { + return ele.renderer().getControlPoints(ele); +}; + +var segmentPoints = function segmentPoints(ele) { + return ele.renderer().getSegmentPoints(ele); +}; + +var sourceEndpoint = function sourceEndpoint(ele) { + return ele.renderer().getSourceEndpoint(ele); +}; + +var targetEndpoint = function targetEndpoint(ele) { + return ele.renderer().getTargetEndpoint(ele); +}; + +var midpoint = function midpoint(ele) { + return ele.renderer().getEdgeMidpoint(ele); +}; + +var pts = { + controlPoints: { + get: controlPoints, + mult: true + }, + segmentPoints: { + get: segmentPoints, + mult: true + }, + sourceEndpoint: { + get: sourceEndpoint + }, + targetEndpoint: { + get: targetEndpoint + }, + midpoint: { + get: midpoint + } +}; + +var renderedName = function renderedName(name) { + return 'rendered' + name[0].toUpperCase() + name.substr(1); +}; + +var edgePoints = Object.keys(pts).reduce(function (obj, name) { + var spec = pts[name]; + var rName = renderedName(name); + + obj[name] = function () { + return ifEdge(this, spec.get); + }; + + if (spec.mult) { + obj[rName] = function () { + return ifEdgeRenderedPositions(this, spec.get); + }; + } else { + obj[rName] = function () { + return ifEdgeRenderedPosition(this, spec.get); + }; + } + + return obj; +}, {}); + +var dimensions = extend({}, position, bounds, widthHeight, edgePoints); + +/*! +Event object based on jQuery events, MIT license + +https://jquery.org/license/ +https://tldrlegal.com/license/mit-license +https://github.com/jquery/jquery/blob/master/src/event.js +*/ +var Event = function Event(src, props) { + this.recycle(src, props); +}; + +function returnFalse() { + return false; +} + +function returnTrue() { + return true; +} // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + + +Event.prototype = { + instanceString: function instanceString() { + return 'event'; + }, + recycle: function recycle(src, props) { + this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse; + + if (src != null && src.preventDefault) { + // Browser Event object + this.type = src.type; // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + + this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse; + } else if (src != null && src.type) { + // Plain object containing all event details + props = src; + } else { + // Event string + this.type = src; + } // Put explicitly provided properties onto the event object + + + if (props != null) { + // more efficient to manually copy fields we use + this.originalEvent = props.originalEvent; + this.type = props.type != null ? props.type : this.type; + this.cy = props.cy; + this.target = props.target; + this.position = props.position; + this.renderedPosition = props.renderedPosition; + this.namespace = props.namespace; + this.layout = props.layout; + } + + if (this.cy != null && this.position != null && this.renderedPosition == null) { + // create a rendered position based on the passed position + var pos = this.position; + var zoom = this.cy.zoom(); + var pan = this.cy.pan(); + this.renderedPosition = { + x: pos.x * zoom + pan.x, + y: pos.y * zoom + pan.y + }; + } // Create a timestamp if incoming event doesn't have one + + + this.timeStamp = src && src.timeStamp || Date.now(); + }, + preventDefault: function preventDefault() { + this.isDefaultPrevented = returnTrue; + var e = this.originalEvent; + + if (!e) { + return; + } // if preventDefault exists run it on the original event + + + if (e.preventDefault) { + e.preventDefault(); + } + }, + stopPropagation: function stopPropagation() { + this.isPropagationStopped = returnTrue; + var e = this.originalEvent; + + if (!e) { + return; + } // if stopPropagation exists run it on the original event + + + if (e.stopPropagation) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function stopImmediatePropagation() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +var eventRegex = /^([^.]+)(\.(?:[^.]+))?$/; // regex for matching event strings (e.g. "click.namespace") + +var universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally + +var defaults$8 = { + qualifierCompare: function qualifierCompare(q1, q2) { + return q1 === q2; + }, + eventMatches: function + /*context, listener, eventObj*/ + eventMatches() { + return true; + }, + addEventFields: function + /*context, evt*/ + addEventFields() {}, + callbackContext: function callbackContext(context + /*, listener, eventObj*/ + ) { + return context; + }, + beforeEmit: function + /* context, listener, eventObj */ + beforeEmit() {}, + afterEmit: function + /* context, listener, eventObj */ + afterEmit() {}, + bubble: function + /*context*/ + bubble() { + return false; + }, + parent: function + /*context*/ + parent() { + return null; + }, + context: null +}; +var defaultsKeys = Object.keys(defaults$8); +var emptyOpts = {}; + +function Emitter() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts; + var context = arguments.length > 1 ? arguments[1] : undefined; + + // micro-optimisation vs Object.assign() -- reduces Element instantiation time + for (var i = 0; i < defaultsKeys.length; i++) { + var key = defaultsKeys[i]; + this[key] = opts[key] || defaults$8[key]; + } + + this.context = context || this.context; + this.listeners = []; + this.emitting = 0; +} + +var p = Emitter.prototype; + +var forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) { + if (fn$6(qualifier)) { + callback = qualifier; + qualifier = null; + } + + if (confOverrides) { + if (conf == null) { + conf = confOverrides; + } else { + conf = extend({}, conf, confOverrides); + } + } + + var eventList = array(events) ? events : events.split(/\s+/); + + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + + if (emptyString(evt)) { + continue; + } + + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var ret = handler(self, evt, type, namespace, qualifier, callback, conf); + + if (ret === false) { + break; + } // allow exiting early + + } + } +}; + +var makeEventObj = function makeEventObj(self, obj) { + self.addEventFields(self.context, obj); + return new Event(obj.type, obj); +}; + +var forEachEventObj = function forEachEventObj(self, handler, events) { + if (event(events)) { + handler(self, events); + return; + } else if (plainObject(events)) { + handler(self, makeEventObj(self, events)); + return; + } + + var eventList = array(events) ? events : events.split(/\s+/); + + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + + if (emptyString(evt)) { + continue; + } + + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var eventObj = makeEventObj(self, { + type: type, + namespace: namespace, + target: self.context + }); + handler(self, eventObj); + } + } +}; + +p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) { + forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) { + if (fn$6(callback)) { + self.listeners.push({ + event: event, + // full event string + callback: callback, + // callback to run + type: type, + // the event type (e.g. 'click') + namespace: namespace, + // the event namespace (e.g. ".foo") + qualifier: qualifier, + // a restriction on whether to match this emitter + conf: conf // additional configuration + + }); + } + }, events, qualifier, callback, conf, confOverrides); + return this; +}; + +p.one = function (events, qualifier, callback, conf) { + return this.on(events, qualifier, callback, conf, { + one: true + }); +}; + +p.removeListener = p.off = function (events, qualifier, callback, conf) { + var _this = this; + + if (this.emitting !== 0) { + this.listeners = copyArray(this.listeners); + } + + var listeners = this.listeners; + + var _loop = function _loop(i) { + var listener = listeners[i]; + forEachEvent(_this, function (self, event, type, namespace, qualifier, callback + /*, conf*/ + ) { + if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) { + listeners.splice(i, 1); + return false; + } + }, events, qualifier, callback, conf); + }; + + for (var i = listeners.length - 1; i >= 0; i--) { + _loop(i); + } + + return this; +}; + +p.removeAllListeners = function () { + return this.removeListener('*'); +}; + +p.emit = p.trigger = function (events, extraParams, manualCallback) { + var listeners = this.listeners; + var numListenersBeforeEmit = listeners.length; + this.emitting++; + + if (!array(extraParams)) { + extraParams = [extraParams]; + } + + forEachEventObj(this, function (self, eventObj) { + if (manualCallback != null) { + listeners = [{ + event: eventObj.event, + type: eventObj.type, + namespace: eventObj.namespace, + callback: manualCallback + }]; + numListenersBeforeEmit = listeners.length; + } + + var _loop2 = function _loop2(i) { + var listener = listeners[i]; + + if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) { + var args = [eventObj]; + + if (extraParams != null) { + push(args, extraParams); + } + + self.beforeEmit(self.context, listener, eventObj); + + if (listener.conf && listener.conf.one) { + self.listeners = self.listeners.filter(function (l) { + return l !== listener; + }); + } + + var context = self.callbackContext(self.context, listener, eventObj); + var ret = listener.callback.apply(context, args); + self.afterEmit(self.context, listener, eventObj); + + if (ret === false) { + eventObj.stopPropagation(); + eventObj.preventDefault(); + } + } // if listener matches + + }; + + for (var i = 0; i < numListenersBeforeEmit; i++) { + _loop2(i); + } // for listener + + + if (self.bubble(self.context) && !eventObj.isPropagationStopped()) { + self.parent(self.context).emit(eventObj, extraParams); + } + }, events); + this.emitting--; + return this; +}; + +var emitterOptions$1 = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(ele, listener, eventObj) { + var selector = listener.qualifier; + + if (selector != null) { + return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + + return true; + }, + addEventFields: function addEventFields(ele, evt) { + evt.cy = ele.cy(); + evt.target = ele; + }, + callbackContext: function callbackContext(ele, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : ele; + }, + beforeEmit: function beforeEmit(context, listener + /*, eventObj*/ + ) { + if (listener.conf && listener.conf.once) { + listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); + } + }, + bubble: function bubble() { + return true; + }, + parent: function parent(ele) { + return ele.isChild() ? ele.parent() : ele.cy(); + } +}; + +var argSelector$1 = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } +}; + +var elesfn$9 = { + createEmitter: function createEmitter() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions$1, ele); + } + } + + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback); + } + + return this; + }, + removeListener: function removeListener(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeListener(events, argSel, callback); + } + + return this; + }, + removeAllListeners: function removeAllListeners() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeAllListeners(); + } + + return this; + }, + one: function one(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().one(events, argSel, callback); + } + + return this; + }, + once: function once(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback, { + once: true, + onceCollection: this + }); + } + }, + emit: function emit(events, extraParams) { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().emit(events, extraParams); + } + + return this; + }, + emitAndNotify: function emitAndNotify(event, extraParams) { + // for internal use only + if (this.length === 0) { + return; + } // empty collections don't need to notify anything + // notify renderer + + + this.cy().notify(event, this); + this.emit(event, extraParams); + return this; + } +}; +define.eventAliasesOn(elesfn$9); + +var elesfn$8 = { + nodes: function nodes(selector) { + return this.filter(function (ele) { + return ele.isNode(); + }).filter(selector); + }, + edges: function edges(selector) { + return this.filter(function (ele) { + return ele.isEdge(); + }).filter(selector); + }, + // internal helper to get nodes and edges as separate collections with single iteration over elements + byGroup: function byGroup() { + var nodes = this.spawn(); + var edges = this.spawn(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + if (ele.isNode()) { + nodes.push(ele); + } else { + edges.push(ele); + } + } + + return { + nodes: nodes, + edges: edges + }; + }, + filter: function filter(_filter, thisArg) { + if (_filter === undefined) { + // check this first b/c it's the most common/performant case + return this; + } else if (string(_filter) || elementOrCollection(_filter)) { + return new Selector(_filter).filter(this); + } else if (fn$6(_filter)) { + var filterEles = this.spawn(); + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles); + + if (include) { + filterEles.push(ele); + } + } + + return filterEles; + } + + return this.spawn(); // if not handled by above, give 'em an empty collection + }, + not: function not(toRemove) { + if (!toRemove) { + return this; + } else { + if (string(toRemove)) { + toRemove = this.filter(toRemove); + } + + var elements = this.spawn(); + + for (var i = 0; i < this.length; i++) { + var element = this[i]; + var remove = toRemove.has(element); + + if (!remove) { + elements.push(element); + } + } + + return elements; + } + }, + absoluteComplement: function absoluteComplement() { + var cy = this.cy(); + return cy.mutableElements().not(this); + }, + intersect: function intersect(other) { + // if a selector is specified, then filter by it instead + if (string(other)) { + var selector = other; + return this.filter(selector); + } + + var elements = this.spawn(); + var col1 = this; + var col2 = other; + var col1Smaller = this.length < other.length; + var colS = col1Smaller ? col1 : col2; + var colL = col1Smaller ? col2 : col1; + + for (var i = 0; i < colS.length; i++) { + var ele = colS[i]; + + if (colL.has(ele)) { + elements.push(ele); + } + } + + return elements; + }, + xor: function xor(other) { + var cy = this._private.cy; + + if (string(other)) { + other = cy.$(other); + } + + var elements = this.spawn(); + var col1 = this; + var col2 = other; + + var add = function add(col, other) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + + if (!inOther) { + elements.push(ele); + } + } + }; + + add(col1, col2); + add(col2, col1); + return elements; + }, + diff: function diff(other) { + var cy = this._private.cy; + + if (string(other)) { + other = cy.$(other); + } + + var left = this.spawn(); + var right = this.spawn(); + var both = this.spawn(); + var col1 = this; + var col2 = other; + + var add = function add(col, other, retEles) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + + if (inOther) { + both.merge(ele); + } else { + retEles.push(ele); + } + } + }; + + add(col1, col2, left); + add(col2, col1, right); + return { + left: left, + right: right, + both: both + }; + }, + add: function add(toAdd) { + var cy = this._private.cy; + + if (!toAdd) { + return this; + } + + if (string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + + var elements = this.spawnSelf(); + + for (var i = 0; i < toAdd.length; i++) { + var ele = toAdd[i]; + var add = !this.has(ele); + + if (add) { + elements.push(ele); + } + } + + return elements; + }, + // in place merge on calling collection + merge: function merge(toAdd) { + var _p = this._private; + var cy = _p.cy; + + if (!toAdd) { + return this; + } + + if (toAdd && string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + + var map = _p.map; + + for (var i = 0; i < toAdd.length; i++) { + var toAddEle = toAdd[i]; + var id = toAddEle._private.data.id; + var add = !map.has(id); + + if (add) { + var index = this.length++; + this[index] = toAddEle; + map.set(id, { + ele: toAddEle, + index: index + }); + } + } + + return this; // chaining + }, + unmergeAt: function unmergeAt(i) { + var ele = this[i]; + var id = ele.id(); + var _p = this._private; + var map = _p.map; // remove ele + + this[i] = undefined; + map["delete"](id); + var unmergedLastEle = i === this.length - 1; // replace empty spot with last ele in collection + + if (this.length > 1 && !unmergedLastEle) { + var lastEleI = this.length - 1; + var lastEle = this[lastEleI]; + var lastEleId = lastEle._private.data.id; + this[lastEleI] = undefined; + this[i] = lastEle; + map.set(lastEleId, { + ele: lastEle, + index: i + }); + } // the collection is now 1 ele smaller + + + this.length--; + return this; + }, + // remove single ele in place in calling collection + unmergeOne: function unmergeOne(ele) { + ele = ele[0]; + var _p = this._private; + var id = ele._private.data.id; + var map = _p.map; + var entry = map.get(id); + + if (!entry) { + return this; // no need to remove + } + + var i = entry.index; + this.unmergeAt(i); + return this; + }, + // remove eles in place on calling collection + unmerge: function unmerge(toRemove) { + var cy = this._private.cy; + + if (!toRemove) { + return this; + } + + if (toRemove && string(toRemove)) { + var selector = toRemove; + toRemove = cy.mutableElements().filter(selector); + } + + for (var i = 0; i < toRemove.length; i++) { + this.unmergeOne(toRemove[i]); + } + + return this; // chaining + }, + unmergeBy: function unmergeBy(toRmFn) { + for (var i = this.length - 1; i >= 0; i--) { + var ele = this[i]; + + if (toRmFn(ele)) { + this.unmergeAt(i); + } + } + + return this; + }, + map: function map(mapFn, thisArg) { + var arr = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles); + arr.push(ret); + } + + return arr; + }, + reduce: function reduce(fn, initialValue) { + var val = initialValue; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + val = fn(val, eles[i], i, eles); + } + + return val; + }, + max: function max(valFn, thisArg) { + var max = -Infinity; + var maxEle; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + + if (val > max) { + max = val; + maxEle = ele; + } + } + + return { + value: max, + ele: maxEle + }; + }, + min: function min(valFn, thisArg) { + var min = Infinity; + var minEle; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + + if (val < min) { + min = val; + minEle = ele; + } + } + + return { + value: min, + ele: minEle + }; + } +}; // aliases + +var fn$1 = elesfn$8; +fn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add; +fn$1['\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not; +fn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect; +fn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor; +fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter; +fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement; + +var elesfn$7 = { + isNode: function isNode() { + return this.group() === 'nodes'; + }, + isEdge: function isEdge() { + return this.group() === 'edges'; + }, + isLoop: function isLoop() { + return this.isEdge() && this.source()[0] === this.target()[0]; + }, + isSimple: function isSimple() { + return this.isEdge() && this.source()[0] !== this.target()[0]; + }, + group: function group() { + var ele = this[0]; + + if (ele) { + return ele._private.group; + } + } +}; + +/** + * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges), + * and z-index (low to high). These styles affect how this applies: + * + * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the + * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from + * root to leaves of the compound graph. The last drawn is `top`. + * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes. + * `manual` ignores this convention and draws based on the `z-index` value setting. + * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher + * `z-index` will be drawn on top of an element with a lower `z-index`. + */ + +var zIndexSort = function zIndexSort(a, b) { + var cy = a.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + + function getDepth(ele) { + var style = ele.pstyle('z-compound-depth'); + + if (style.value === 'auto') { + return hasCompoundNodes ? ele.zDepth() : 0; + } else if (style.value === 'bottom') { + return -1; + } else if (style.value === 'top') { + return MAX_INT$1; + } // 'orphan' + + + return 0; + } + + var depthDiff = getDepth(a) - getDepth(b); + + if (depthDiff !== 0) { + return depthDiff; + } + + function getEleDepth(ele) { + var style = ele.pstyle('z-index-compare'); + + if (style.value === 'auto') { + return ele.isNode() ? 1 : 0; + } // 'manual' + + + return 0; + } + + var eleDiff = getEleDepth(a) - getEleDepth(b); + + if (eleDiff !== 0) { + return eleDiff; + } + + var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value; + + if (zDiff !== 0) { + return zDiff; + } // compare indices in the core (order added to graph w/ last on top) + + + return a.poolIndex() - b.poolIndex(); +}; + +var elesfn$6 = { + forEach: function forEach(fn, thisArg) { + if (fn$6(fn)) { + var N = this.length; + + for (var i = 0; i < N; i++) { + var ele = this[i]; + var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this); + + if (ret === false) { + break; + } // exit each early on return false + + } + } + + return this; + }, + toArray: function toArray() { + var array = []; + + for (var i = 0; i < this.length; i++) { + array.push(this[i]); + } + + return array; + }, + slice: function slice(start, end) { + var array = []; + var thisSize = this.length; + + if (end == null) { + end = thisSize; + } + + if (start == null) { + start = 0; + } + + if (start < 0) { + start = thisSize + start; + } + + if (end < 0) { + end = thisSize + end; + } + + for (var i = start; i >= 0 && i < end && i < thisSize; i++) { + array.push(this[i]); + } + + return this.spawn(array); + }, + size: function size() { + return this.length; + }, + eq: function eq(i) { + return this[i] || this.spawn(); + }, + first: function first() { + return this[0] || this.spawn(); + }, + last: function last() { + return this[this.length - 1] || this.spawn(); + }, + empty: function empty() { + return this.length === 0; + }, + nonempty: function nonempty() { + return !this.empty(); + }, + sort: function sort(sortFn) { + if (!fn$6(sortFn)) { + return this; + } + + var sorted = this.toArray().sort(sortFn); + return this.spawn(sorted); + }, + sortByZIndex: function sortByZIndex() { + return this.sort(zIndexSort); + }, + zDepth: function zDepth() { + var ele = this[0]; + + if (!ele) { + return undefined; + } // let cy = ele.cy(); + + + var _p = ele._private; + var group = _p.group; + + if (group === 'nodes') { + var depth = _p.data.parent ? ele.parents().size() : 0; + + if (!ele.isParent()) { + return MAX_INT$1 - 1; // childless nodes always on top + } + + return depth; + } else { + var src = _p.source; + var tgt = _p.target; + var srcDepth = src.zDepth(); + var tgtDepth = tgt.zDepth(); + return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent + } + } +}; +elesfn$6.each = elesfn$6.forEach; + +var defineSymbolIterator = function defineSymbolIterator() { + var typeofUndef = "undefined" ; + var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; // eslint-disable-line no-undef + + if (isIteratorSupported) { + elesfn$6[Symbol.iterator] = function () { + var _this = this; + + // eslint-disable-line no-undef + var entry = { + value: undefined, + done: false + }; + var i = 0; + var length = this.length; + return _defineProperty({ + next: function next() { + if (i < length) { + entry.value = _this[i++]; + } else { + entry.value = undefined; + entry.done = true; + } + + return entry; + } + }, Symbol.iterator, function () { + // eslint-disable-line no-undef + return this; + }); + }; + } +}; + +defineSymbolIterator(); + +var getLayoutDimensionOptions = defaults$g({ + nodeDimensionsIncludeLabels: false +}); +var elesfn$5 = { + // Calculates and returns node dimensions { x, y } based on options given + layoutDimensions: function layoutDimensions(options) { + options = getLayoutDimensionOptions(options); + var dims; + + if (!this.takesUpSpace()) { + dims = { + w: 0, + h: 0 + }; + } else if (options.nodeDimensionsIncludeLabels) { + var bbDim = this.boundingBox(); + dims = { + w: bbDim.w, + h: bbDim.h + }; + } else { + dims = { + w: this.outerWidth(), + h: this.outerHeight() + }; + } // sanitise the dimensions for external layouts (avoid division by zero) + + + if (dims.w === 0 || dims.h === 0) { + dims.w = dims.h = 1; + } + + return dims; + }, + // using standard layout options, apply position function (w/ or w/o animation) + layoutPositions: function layoutPositions(layout, options, fn) { + var nodes = this.nodes().filter(function (n) { + return !n.isParent(); + }); + var cy = this.cy(); + var layoutEles = options.eles; // nodes & edges + + var getMemoizeKey = function getMemoizeKey(node) { + return node.id(); + }; + + var fnMem = memoize(fn, getMemoizeKey); // memoized version of position function + + layout.emit({ + type: 'layoutstart', + layout: layout + }); + layout.animations = []; + + var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) { + var center = { + x: nodesBb.x1 + nodesBb.w / 2, + y: nodesBb.y1 + nodesBb.h / 2 + }; + var spacingVector = { + // scale from center of bounding box (not necessarily 0,0) + x: (pos.x - center.x) * spacing, + y: (pos.y - center.y) * spacing + }; + return { + x: center.x + spacingVector.x, + y: center.y + spacingVector.y + }; + }; + + var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1; + + var spacingBb = function spacingBb() { + if (!useSpacingFactor) { + return null; + } + + var bb = makeBoundingBox(); + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = fnMem(node, i); + expandBoundingBoxByPoint(bb, pos.x, pos.y); + } + + return bb; + }; + + var bb = spacingBb(); + var getFinalPos = memoize(function (node, i) { + var newPos = fnMem(node, i); + + if (useSpacingFactor) { + var spacing = Math.abs(options.spacingFactor); + newPos = calculateSpacing(spacing, bb, newPos); + } + + if (options.transform != null) { + newPos = options.transform(node, newPos); + } + + return newPos; + }, getMemoizeKey); + + if (options.animate) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var newPos = getFinalPos(node, i); + var animateNode = options.animateFilter == null || options.animateFilter(node, i); + + if (animateNode) { + var ani = node.animation({ + position: newPos, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(ani); + } else { + node.position(newPos); + } + } + + if (options.fit) { + var fitAni = cy.animation({ + fit: { + boundingBox: layoutEles.boundingBoxAt(getFinalPos), + padding: options.padding + }, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(fitAni); + } else if (options.zoom !== undefined && options.pan !== undefined) { + var zoomPanAni = cy.animation({ + zoom: options.zoom, + pan: options.pan, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(zoomPanAni); + } + + layout.animations.forEach(function (ani) { + return ani.play(); + }); + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + Promise$1.all(layout.animations.map(function (ani) { + return ani.promise(); + })).then(function () { + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + }); + } else { + nodes.positions(getFinalPos); + + if (options.fit) { + cy.fit(options.eles, options.padding); + } + + if (options.zoom != null) { + cy.zoom(options.zoom); + } + + if (options.pan) { + cy.pan(options.pan); + } + + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } + + return this; // chaining + }, + layout: function layout(options) { + var cy = this.cy(); + return cy.makeLayout(extend({}, options, { + eles: this + })); + } +}; // aliases: + +elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout; + +function styleCache(key, fn, ele) { + var _p = ele._private; + var cache = _p.styleCache = _p.styleCache || []; + var val; + + if ((val = cache[key]) != null) { + return val; + } else { + val = cache[key] = fn(ele); + return val; + } +} + +function cacheStyleFunction(key, fn) { + key = hashString(key); + return function cachedStyleFunction(ele) { + return styleCache(key, fn, ele); + }; +} + +function cachePrototypeStyleFunction(key, fn) { + key = hashString(key); + + var selfFn = function selfFn(ele) { + return fn.call(ele); + }; + + return function cachedPrototypeStyleFunction() { + var ele = this[0]; + + if (ele) { + return styleCache(key, selfFn, ele); + } + }; +} + +var elesfn$4 = { + recalculateRenderedStyle: function recalculateRenderedStyle(useCache) { + var cy = this.cy(); + var renderer = cy.renderer(); + var styleEnabled = cy.styleEnabled(); + + if (renderer && styleEnabled) { + renderer.recalculateRenderedStyle(this, useCache); + } + + return this; + }, + dirtyStyleCache: function dirtyStyleCache() { + var cy = this.cy(); + + var dirty = function dirty(ele) { + return ele._private.styleCache = null; + }; + + if (cy.hasCompoundNodes()) { + var eles; + eles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + eles.merge(eles.connectedEdges()); + eles.forEach(dirty); + } else { + this.forEach(function (ele) { + dirty(ele); + ele.connectedEdges().forEach(dirty); + }); + } + + return this; + }, + // fully updates (recalculates) the style for the elements + updateStyle: function updateStyle(notifyRenderer) { + var cy = this._private.cy; + + if (!cy.styleEnabled()) { + return this; + } + + if (cy.batching()) { + var bEles = cy._private.batchStyleEles; + bEles.merge(this); + return this; // chaining and exit early when batching + } + + var hasCompounds = cy.hasCompoundNodes(); + var updatedEles = this; + notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false; + + if (hasCompounds) { + // then add everything up and down for compound selector checks + updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + } // let changedEles = style.apply( updatedEles ); + + + var changedEles = updatedEles; + + if (notifyRenderer) { + changedEles.emitAndNotify('style'); // let renderer know we changed style + } else { + changedEles.emit('style'); // just fire the event + } + + updatedEles.forEach(function (ele) { + return ele._private.styleDirty = true; + }); + return this; // chaining + }, + // private: clears dirty flag and recalculates style + cleanStyle: function cleanStyle() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return; + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + if (ele._private.styleDirty) { + // n.b. this flag should be set before apply() to avoid potential infinite recursion + ele._private.styleDirty = false; + cy.style().apply(ele); + } + } + }, + // get the internal parsed style object for the specified property + parsedStyle: function parsedStyle(property) { + var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var ele = this[0]; + var cy = ele.cy(); + + if (!cy.styleEnabled()) { + return; + } + + if (ele) { + this.cleanStyle(); + var overriddenStyle = ele._private.style[property]; + + if (overriddenStyle != null) { + return overriddenStyle; + } else if (includeNonDefault) { + return cy.style().getDefaultProperty(property); + } else { + return null; + } + } + }, + numericStyle: function numericStyle(property) { + var ele = this[0]; + + if (!ele.cy().styleEnabled()) { + return; + } + + if (ele) { + var pstyle = ele.pstyle(property); + return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value; + } + }, + numericStyleUnits: function numericStyleUnits(property) { + var ele = this[0]; + + if (!ele.cy().styleEnabled()) { + return; + } + + if (ele) { + return ele.pstyle(property).units; + } + }, + // get the specified css property as a rendered value (i.e. on-screen value) + // or get the whole rendered style if no property specified (NB doesn't allow setting) + renderedStyle: function renderedStyle(property) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var ele = this[0]; + + if (ele) { + return cy.style().getRenderedStyle(ele, property); + } + }, + // read the calculated css style of the element or override the style (via a bypass) + style: function style(name, value) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var updateTransitions = false; + var style = cy.style(); + + if (plainObject(name)) { + // then extend the bypass + var props = name; + style.applyBypass(this, props, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } else if (string(name)) { + if (value === undefined) { + // then get the property from the style + var ele = this[0]; + + if (ele) { + return style.getStylePropertyValue(ele, name); + } else { + // empty collection => can't get any value + return; + } + } else { + // then set the bypass with the property value + style.applyBypass(this, name, value, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } + } else if (name === undefined) { + var _ele = this[0]; + + if (_ele) { + return style.getRawStyle(_ele); + } else { + // empty collection => can't get any value + return; + } + } + + return this; // chaining + }, + removeStyle: function removeStyle(names) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var updateTransitions = false; + var style = cy.style(); + var eles = this; + + if (names === undefined) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + style.removeAllBypasses(ele, updateTransitions); + } + } else { + names = names.split(/\s+/); + + for (var _i = 0; _i < eles.length; _i++) { + var _ele2 = eles[_i]; + style.removeBypasses(_ele2, names, updateTransitions); + } + } + + this.emitAndNotify('style'); // let the renderer know we've updated style + + return this; // chaining + }, + show: function show() { + this.css('display', 'element'); + return this; // chaining + }, + hide: function hide() { + this.css('display', 'none'); + return this; // chaining + }, + effectiveOpacity: function effectiveOpacity() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return 1; + } + + var hasCompoundNodes = cy.hasCompoundNodes(); + var ele = this[0]; + + if (ele) { + var _p = ele._private; + var parentOpacity = ele.pstyle('opacity').value; + + if (!hasCompoundNodes) { + return parentOpacity; + } + + var parents = !_p.data.parent ? null : ele.parents(); + + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + var opacity = parent.pstyle('opacity').value; + parentOpacity = opacity * parentOpacity; + } + } + + return parentOpacity; + } + }, + transparent: function transparent() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return false; + } + + var ele = this[0]; + var hasCompoundNodes = ele.cy().hasCompoundNodes(); + + if (ele) { + if (!hasCompoundNodes) { + return ele.pstyle('opacity').value === 0; + } else { + return ele.effectiveOpacity() === 0; + } + } + }, + backgrounding: function backgrounding() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return false; + } + + var ele = this[0]; + return ele._private.backgrounding ? true : false; + } +}; + +function checkCompound(ele, parentOk) { + var _p = ele._private; + var parents = _p.data.parent ? ele.parents() : null; + + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + + if (!parentOk(parent)) { + return false; + } + } + } + + return true; +} + +function defineDerivedStateFunction(specs) { + var ok = specs.ok; + var edgeOkViaNode = specs.edgeOkViaNode || specs.ok; + var parentOk = specs.parentOk || specs.ok; + return function () { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return true; + } + + var ele = this[0]; + var hasCompoundNodes = cy.hasCompoundNodes(); + + if (ele) { + var _p = ele._private; + + if (!ok(ele)) { + return false; + } + + if (ele.isNode()) { + return !hasCompoundNodes || checkCompound(ele, parentOk); + } else { + var src = _p.source; + var tgt = _p.target; + return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode))); + } + } + }; +} + +var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) { + return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); +}); +elesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({ + ok: eleTakesUpSpace +})); +var eleInteractive = cacheStyleFunction('eleInteractive', function (ele) { + return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele); +}); +var parentInteractive = cacheStyleFunction('parentInteractive', function (parent) { + return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent); +}); +elesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({ + ok: eleInteractive, + parentOk: parentInteractive, + edgeOkViaNode: eleTakesUpSpace +})); + +elesfn$4.noninteractive = function () { + var ele = this[0]; + + if (ele) { + return !ele.interactive(); + } +}; + +var eleVisible = cacheStyleFunction('eleVisible', function (ele) { + return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele); +}); +var edgeVisibleViaNode = eleTakesUpSpace; +elesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({ + ok: eleVisible, + edgeOkViaNode: edgeVisibleViaNode +})); + +elesfn$4.hidden = function () { + var ele = this[0]; + + if (ele) { + return !ele.visible(); + } +}; + +elesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () { + if (!this.cy().styleEnabled()) { + return false; + } + + return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace(); +}); +elesfn$4.bypass = elesfn$4.css = elesfn$4.style; +elesfn$4.renderedCss = elesfn$4.renderedStyle; +elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle; +elesfn$4.pstyle = elesfn$4.parsedStyle; + +var elesfn$3 = {}; + +function defineSwitchFunction(params) { + return function () { + var args = arguments; + var changedEles = []; // e.g. cy.nodes().select( data, handler ) + + if (args.length === 2) { + var data = args[0]; + var handler = args[1]; + this.on(params.event, data, handler); + } // e.g. cy.nodes().select( handler ) + else if (args.length === 1 && fn$6(args[0])) { + var _handler = args[0]; + this.on(params.event, _handler); + } // e.g. cy.nodes().select() + // e.g. (private) cy.nodes().select(['tapselect']) + else if (args.length === 0 || args.length === 1 && array(args[0])) { + var addlEvents = args.length === 1 ? args[0] : null; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var able = !params.ableField || ele._private[params.ableField]; + var changed = ele._private[params.field] != params.value; + + if (params.overrideAble) { + var overrideAble = params.overrideAble(ele); + + if (overrideAble !== undefined) { + able = overrideAble; + + if (!overrideAble) { + return this; + } // to save cycles assume not able for all on override + + } + } + + if (able) { + ele._private[params.field] = params.value; + + if (changed) { + changedEles.push(ele); + } + } + } + + var changedColl = this.spawn(changedEles); + changedColl.updateStyle(); // change of state => possible change of style + + changedColl.emit(params.event); + + if (addlEvents) { + changedColl.emit(addlEvents); + } + } + + return this; + }; +} + +function defineSwitchSet(params) { + elesfn$3[params.field] = function () { + var ele = this[0]; + + if (ele) { + if (params.overrideField) { + var val = params.overrideField(ele); + + if (val !== undefined) { + return val; + } + } + + return ele._private[params.field]; + } + }; + + elesfn$3[params.on] = defineSwitchFunction({ + event: params.on, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: true + }); + elesfn$3[params.off] = defineSwitchFunction({ + event: params.off, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: false + }); +} + +defineSwitchSet({ + field: 'locked', + overrideField: function overrideField(ele) { + return ele.cy().autolock() ? true : undefined; + }, + on: 'lock', + off: 'unlock' +}); +defineSwitchSet({ + field: 'grabbable', + overrideField: function overrideField(ele) { + return ele.cy().autoungrabify() || ele.pannable() ? false : undefined; + }, + on: 'grabify', + off: 'ungrabify' +}); +defineSwitchSet({ + field: 'selected', + ableField: 'selectable', + overrideAble: function overrideAble(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'select', + off: 'unselect' +}); +defineSwitchSet({ + field: 'selectable', + overrideField: function overrideField(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'selectify', + off: 'unselectify' +}); +elesfn$3.deselect = elesfn$3.unselect; + +elesfn$3.grabbed = function () { + var ele = this[0]; + + if (ele) { + return ele._private.grabbed; + } +}; + +defineSwitchSet({ + field: 'active', + on: 'activate', + off: 'unactivate' +}); +defineSwitchSet({ + field: 'pannable', + on: 'panify', + off: 'unpanify' +}); + +elesfn$3.inactive = function () { + var ele = this[0]; + + if (ele) { + return !ele._private.active; + } +}; + +var elesfn$2 = {}; // DAG functions +//////////////// + +var defineDagExtremity = function defineDagExtremity(params) { + return function dagExtremityImpl(selector) { + var eles = this; + var ret = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + var disqualified = false; + var edges = ele.connectedEdges(); + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + + if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) { + disqualified = true; + break; + } + } + + if (!disqualified) { + ret.push(ele); + } + } + + return this.spawn(ret, true).filter(selector); + }; +}; + +var defineDagOneHop = function defineDagOneHop(params) { + return function (selector) { + var eles = this; + var oEles = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + var edges = ele.connectedEdges(); + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + + if (params.outgoing && src === ele) { + oEles.push(edge); + oEles.push(tgt); + } else if (params.incoming && tgt === ele) { + oEles.push(edge); + oEles.push(src); + } + } + } + + return this.spawn(oEles, true).filter(selector); + }; +}; + +var defineDagAllHops = function defineDagAllHops(params) { + return function (selector) { + var eles = this; + var sEles = []; + var sElesIds = {}; + + for (;;) { + var next = params.outgoing ? eles.outgoers() : eles.incomers(); + + if (next.length === 0) { + break; + } // done if none left + + + var newNext = false; + + for (var i = 0; i < next.length; i++) { + var n = next[i]; + var nid = n.id(); + + if (!sElesIds[nid]) { + sElesIds[nid] = true; + sEles.push(n); + newNext = true; + } + } + + if (!newNext) { + break; + } // done if touched all outgoers already + + + eles = next; + } + + return this.spawn(sEles, true).filter(selector); + }; +}; + +elesfn$2.clearTraversalCache = function () { + for (var i = 0; i < this.length; i++) { + this[i]._private.traversalCache = null; + } +}; + +extend(elesfn$2, { + // get the root nodes in the DAG + roots: defineDagExtremity({ + noIncomingEdges: true + }), + // get the leaf nodes in the DAG + leaves: defineDagExtremity({ + noOutgoingEdges: true + }), + // normally called children in graph theory + // these nodes =edges=> outgoing nodes + outgoers: cache(defineDagOneHop({ + outgoing: true + }), 'outgoers'), + // aka DAG descendants + successors: defineDagAllHops({ + outgoing: true + }), + // normally called parents in graph theory + // these nodes <=edges= incoming nodes + incomers: cache(defineDagOneHop({ + incoming: true + }), 'incomers'), + // aka DAG ancestors + predecessors: defineDagAllHops({ + incoming: true + }) +}); // Neighbourhood functions +////////////////////////// + +extend(elesfn$2, { + neighborhood: cache(function (selector) { + var elements = []; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + // for all nodes + var node = nodes[i]; + var connectedEdges = node.connectedEdges(); // for each connected edge, add the edge and the other node + + for (var j = 0; j < connectedEdges.length; j++) { + var edge = connectedEdges[j]; + var src = edge.source(); + var tgt = edge.target(); + var otherNode = node === src ? tgt : src; // need check in case of loop + + if (otherNode.length > 0) { + elements.push(otherNode[0]); // add node 1 hop away + } // add connected edge + + + elements.push(edge[0]); + } + } + + return this.spawn(elements, true).filter(selector); + }, 'neighborhood'), + closedNeighborhood: function closedNeighborhood(selector) { + return this.neighborhood().add(this).filter(selector); + }, + openNeighborhood: function openNeighborhood(selector) { + return this.neighborhood(selector); + } +}); // aliases + +elesfn$2.neighbourhood = elesfn$2.neighborhood; +elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; +elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; // Edge functions +///////////////// + +extend(elesfn$2, { + source: cache(function sourceImpl(selector) { + var ele = this[0]; + var src; + + if (ele) { + src = ele._private.source || ele.cy().collection(); + } + + return src && selector ? src.filter(selector) : src; + }, 'source'), + target: cache(function targetImpl(selector) { + var ele = this[0]; + var tgt; + + if (ele) { + tgt = ele._private.target || ele.cy().collection(); + } + + return tgt && selector ? tgt.filter(selector) : tgt; + }, 'target'), + sources: defineSourceFunction({ + attr: 'source' + }), + targets: defineSourceFunction({ + attr: 'target' + }) +}); + +function defineSourceFunction(params) { + return function sourceImpl(selector) { + var sources = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var src = ele._private[params.attr]; + + if (src) { + sources.push(src); + } + } + + return this.spawn(sources, true).filter(selector); + }; +} + +extend(elesfn$2, { + edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'), + edgesTo: cache(defineEdgesWithFunction({ + thisIsSrc: true + }), 'edgesTo') +}); + +function defineEdgesWithFunction(params) { + return function edgesWithImpl(otherNodes) { + var elements = []; + var cy = this._private.cy; + var p = params || {}; // get elements if a selector is specified + + if (string(otherNodes)) { + otherNodes = cy.$(otherNodes); + } + + for (var h = 0; h < otherNodes.length; h++) { + var edges = otherNodes[h]._private.edges; + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var edgeData = edge._private.data; + var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target); + var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target); + var edgeConnectsThisAndOther = thisToOther || otherToThis; + + if (!edgeConnectsThisAndOther) { + continue; + } + + if (p.thisIsSrc || p.thisIsTgt) { + if (p.thisIsSrc && !thisToOther) { + continue; + } + + if (p.thisIsTgt && !otherToThis) { + continue; + } + } + + elements.push(edge); + } + } + + return this.spawn(elements, true); + }; +} + +extend(elesfn$2, { + connectedEdges: cache(function (selector) { + var retEles = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var node = eles[i]; + + if (!node.isNode()) { + continue; + } + + var edges = node._private.edges; + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + retEles.push(edge); + } + } + + return this.spawn(retEles, true).filter(selector); + }, 'connectedEdges'), + connectedNodes: cache(function (selector) { + var retEles = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var edge = eles[i]; + + if (!edge.isEdge()) { + continue; + } + + retEles.push(edge.source()[0]); + retEles.push(edge.target()[0]); + } + + return this.spawn(retEles, true).filter(selector); + }, 'connectedNodes'), + parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'), + codirectedEdges: cache(defineParallelEdgesFunction({ + codirected: true + }), 'codirectedEdges') +}); + +function defineParallelEdgesFunction(params) { + var defaults = { + codirected: false + }; + params = extend({}, defaults, params); + return function parallelEdgesImpl(selector) { + // micro-optimised for renderer + var elements = []; + var edges = this.edges(); + var p = params; // look at all the edges in the collection + + for (var i = 0; i < edges.length; i++) { + var edge1 = edges[i]; + var edge1_p = edge1._private; + var src1 = edge1_p.source; + var srcid1 = src1._private.data.id; + var tgtid1 = edge1_p.data.target; + var srcEdges1 = src1._private.edges; // look at edges connected to the src node of this edge + + for (var j = 0; j < srcEdges1.length; j++) { + var edge2 = srcEdges1[j]; + var edge2data = edge2._private.data; + var tgtid2 = edge2data.target; + var srcid2 = edge2data.source; + var codirected = tgtid2 === tgtid1 && srcid2 === srcid1; + var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2; + + if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) { + elements.push(edge2); + } + } + } + + return this.spawn(elements, true).filter(selector); + }; +} // Misc functions +///////////////// + + +extend(elesfn$2, { + components: function components(root) { + var self = this; + var cy = self.cy(); + var visited = cy.collection(); + var unvisited = root == null ? self.nodes() : root.nodes(); + var components = []; + + if (root != null && unvisited.empty()) { + // root may contain only edges + unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides + } + + var visitInComponent = function visitInComponent(node, component) { + visited.merge(node); + unvisited.unmerge(node); + component.merge(node); + }; + + if (unvisited.empty()) { + return self.spawn(); + } + + var _loop = function _loop() { + // each iteration yields a component + var cmpt = cy.collection(); + components.push(cmpt); + var root = unvisited[0]; + visitInComponent(root, cmpt); + self.bfs({ + directed: false, + roots: root, + visit: function visit(v) { + return visitInComponent(v, cmpt); + } + }); + cmpt.forEach(function (node) { + node.connectedEdges().forEach(function (e) { + // connectedEdges() usually cached + if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) { + // has() is cheap + cmpt.merge(e); // forEach() only considers nodes -- sets N at call time + } + }); + }); + }; + + do { + _loop(); + } while (unvisited.length > 0); + + return components; + }, + component: function component() { + var ele = this[0]; + return ele.cy().mutableElements().components(ele)[0]; + } +}); +elesfn$2.componentsOf = elesfn$2.components; + +var Collection = function Collection(cy, elements) { + var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + if (cy === undefined) { + error('A collection must have a reference to the core'); + return; + } + + var map = new Map$1(); + var createdElements = false; + + if (!elements) { + elements = []; + } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) { + createdElements = true; // make elements from json and restore all at once later + + var eles = []; + var elesIds = new Set$1(); + + for (var i = 0, l = elements.length; i < l; i++) { + var json = elements[i]; + + if (json.data == null) { + json.data = {}; + } + + var _data = json.data; // make sure newly created elements have valid ids + + if (_data.id == null) { + _data.id = uuid(); + } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) { + continue; // can't create element if prior id already exists + } + + var ele = new Element(cy, json, false); + eles.push(ele); + elesIds.add(_data.id); + } + + elements = eles; + } + + this.length = 0; + + for (var _i = 0, _l = elements.length; _i < _l; _i++) { + var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements + + if (element$1 == null) { + continue; + } + + var id = element$1._private.data.id; + + if (!unique || !map.has(id)) { + if (unique) { + map.set(id, { + index: this.length, + ele: element$1 + }); + } + + this[this.length] = element$1; + this.length++; + } + } + + this._private = { + eles: this, + cy: cy, + + get map() { + if (this.lazyMap == null) { + this.rebuildMap(); + } + + return this.lazyMap; + }, + + set map(m) { + this.lazyMap = m; + }, + + rebuildMap: function rebuildMap() { + var m = this.lazyMap = new Map$1(); + var eles = this.eles; + + for (var _i2 = 0; _i2 < eles.length; _i2++) { + var _ele = eles[_i2]; + m.set(_ele.id(), { + index: _i2, + ele: _ele + }); + } + } + }; + + if (unique) { + this._private.map = map; + } // restore the elements if we created them from json + + + if (createdElements && !removed) { + this.restore(); + } +}; // Functions +//////////////////////////////////////////////////////////////////////////////////////////////////// +// keep the prototypes in sync (an element has the same functions as a collection) +// and use elefn and elesfn as shorthands to the prototypes + + +var elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype); + +elesfn$1.instanceString = function () { + return 'collection'; +}; + +elesfn$1.spawn = function (eles, unique) { + return new Collection(this.cy(), eles, unique); +}; + +elesfn$1.spawnSelf = function () { + return this.spawn(this); +}; + +elesfn$1.cy = function () { + return this._private.cy; +}; + +elesfn$1.renderer = function () { + return this._private.cy.renderer(); +}; + +elesfn$1.element = function () { + return this[0]; +}; + +elesfn$1.collection = function () { + if (collection(this)) { + return this; + } else { + // an element + return new Collection(this._private.cy, [this]); + } +}; + +elesfn$1.unique = function () { + return new Collection(this._private.cy, this, true); +}; + +elesfn$1.hasElementWithId = function (id) { + id = '' + id; // id must be string + + return this._private.map.has(id); +}; + +elesfn$1.getElementById = function (id) { + id = '' + id; // id must be string + + var cy = this._private.cy; + + var entry = this._private.map.get(id); + + return entry ? entry.ele : new Collection(cy); // get ele or empty collection +}; + +elesfn$1.$id = elesfn$1.getElementById; + +elesfn$1.poolIndex = function () { + var cy = this._private.cy; + var eles = cy._private.elements; + var id = this[0]._private.data.id; + return eles._private.map.get(id).index; +}; + +elesfn$1.indexOf = function (ele) { + var id = ele[0]._private.data.id; + return this._private.map.get(id).index; +}; + +elesfn$1.indexOfId = function (id) { + id = '' + id; // id must be string + + return this._private.map.get(id).index; +}; + +elesfn$1.json = function (obj) { + var ele = this.element(); + var cy = this.cy(); + + if (ele == null && obj) { + return this; + } // can't set to no eles + + + if (ele == null) { + return undefined; + } // can't get from no eles + + + var p = ele._private; + + if (plainObject(obj)) { + // set + cy.startBatch(); + + if (obj.data) { + ele.data(obj.data); + var _data2 = p.data; + + if (ele.isEdge()) { + // source and target are immutable via data() + var move = false; + var spec = {}; + var src = obj.data.source; + var tgt = obj.data.target; + + if (src != null && src != _data2.source) { + spec.source = '' + src; // id must be string + + move = true; + } + + if (tgt != null && tgt != _data2.target) { + spec.target = '' + tgt; // id must be string + + move = true; + } + + if (move) { + ele = ele.move(spec); + } + } else { + // parent is immutable via data() + var newParentValSpecd = ('parent' in obj.data); + var parent = obj.data.parent; + + if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) { + if (parent === undefined) { + // can't set undefined imperatively, so use null + parent = null; + } + + if (parent != null) { + parent = '' + parent; // id must be string + } + + ele = ele.move({ + parent: parent + }); + } + } + } + + if (obj.position) { + ele.position(obj.position); + } // ignore group -- immutable + + + var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) { + var obj_k = obj[k]; + + if (obj_k != null && obj_k !== p[k]) { + if (obj_k) { + ele[trueFnName](); + } else { + ele[falseFnName](); + } + } + }; + + checkSwitch('removed', 'remove', 'restore'); + checkSwitch('selected', 'select', 'unselect'); + checkSwitch('selectable', 'selectify', 'unselectify'); + checkSwitch('locked', 'lock', 'unlock'); + checkSwitch('grabbable', 'grabify', 'ungrabify'); + checkSwitch('pannable', 'panify', 'unpanify'); + + if (obj.classes != null) { + ele.classes(obj.classes); + } + + cy.endBatch(); + return this; + } else if (obj === undefined) { + // get + var json = { + data: copy(p.data), + position: copy(p.position), + group: p.group, + removed: p.removed, + selected: p.selected, + selectable: p.selectable, + locked: p.locked, + grabbable: p.grabbable, + pannable: p.pannable, + classes: null + }; + json.classes = ''; + var i = 0; + p.classes.forEach(function (cls) { + return json.classes += i++ === 0 ? cls : ' ' + cls; + }); + return json; + } +}; + +elesfn$1.jsons = function () { + var jsons = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + jsons.push(json); + } + + return jsons; +}; + +elesfn$1.clone = function () { + var cy = this.cy(); + var elesArr = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + var clone = new Element(cy, json, false); // NB no restore + + elesArr.push(clone); + } + + return new Collection(cy, elesArr); +}; + +elesfn$1.copy = elesfn$1.clone; + +elesfn$1.restore = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var cy = self.cy(); + var cy_p = cy._private; // create arrays of nodes and edges, since we need to + // restore the nodes first + + var nodes = []; + var edges = []; + var elements; + + for (var _i3 = 0, l = self.length; _i3 < l; _i3++) { + var ele = self[_i3]; + + if (addToPool && !ele.removed()) { + // don't need to handle this ele + continue; + } // keep nodes first in the array and edges after + + + if (ele.isNode()) { + // put to front of array if node + nodes.push(ele); + } else { + // put to end of array if edge + edges.push(ele); + } + } + + elements = nodes.concat(edges); + var i; + + var removeFromElements = function removeFromElements() { + elements.splice(i, 1); + i--; + }; // now, restore each element + + + for (i = 0; i < elements.length; i++) { + var _ele2 = elements[i]; + var _private = _ele2._private; + var _data3 = _private.data; // the traversal cache should start fresh when ele is added + + _ele2.clearTraversalCache(); // set id and validate + + + if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) { + _data3.id = uuid(); + } else if (number$1(_data3.id)) { + _data3.id = '' + _data3.id; // now it's a string + } else if (emptyString(_data3.id) || !string(_data3.id)) { + error('Can not create element with invalid string ID `' + _data3.id + '`'); // can't create element if it has empty string as id or non-string id + + removeFromElements(); + continue; + } else if (cy.hasElementWithId(_data3.id)) { + error('Can not create second element with ID `' + _data3.id + '`'); // can't create element if one already has that id + + removeFromElements(); + continue; + } + + var id = _data3.id; // id is finalised, now let's keep a ref + + if (_ele2.isNode()) { + // extra checks for nodes + var pos = _private.position; // make sure the nodes have a defined position + + if (pos.x == null) { + pos.x = 0; + } + + if (pos.y == null) { + pos.y = 0; + } + } + + if (_ele2.isEdge()) { + // extra checks for edges + var edge = _ele2; + var fields = ['source', 'target']; + var fieldsLength = fields.length; + var badSourceOrTarget = false; + + for (var j = 0; j < fieldsLength; j++) { + var field = fields[j]; + var val = _data3[field]; + + if (number$1(val)) { + val = _data3[field] = '' + _data3[field]; // now string + } + + if (val == null || val === '') { + // can't create if source or target is not defined properly + error('Can not create edge `' + id + '` with unspecified ' + field); + badSourceOrTarget = true; + } else if (!cy.hasElementWithId(val)) { + // can't create edge if one of its nodes doesn't exist + error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`'); + badSourceOrTarget = true; + } + } + + if (badSourceOrTarget) { + removeFromElements(); + continue; + } // can't create this + + + var src = cy.getElementById(_data3.source); + var tgt = cy.getElementById(_data3.target); // only one edge in node if loop + + if (src.same(tgt)) { + src._private.edges.push(edge); + } else { + src._private.edges.push(edge); + + tgt._private.edges.push(edge); + } + + edge._private.source = src; + edge._private.target = tgt; + } // if is edge + // create mock ids / indexes maps for element so it can be used like collections + + + _private.map = new Map$1(); + + _private.map.set(id, { + ele: _ele2, + index: 0 + }); + + _private.removed = false; + + if (addToPool) { + cy.addToPool(_ele2); + } + } // for each element + // do compound node sanity checks + + + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + // each node + var node = nodes[_i4]; + var _data4 = node._private.data; + + if (number$1(_data4.parent)) { + // then automake string + _data4.parent = '' + _data4.parent; + } + + var parentId = _data4.parent; + var specifiedParent = parentId != null; + + if (specifiedParent || node._private.parent) { + var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId); + + if (parent.empty()) { + // non-existant parent; just remove it + _data4.parent = undefined; + } else if (parent[0].removed()) { + warn('Node added with missing parent, reference to parent removed'); + _data4.parent = undefined; + node._private.parent = null; + } else { + var selfAsParent = false; + var ancestor = parent; + + while (!ancestor.empty()) { + if (node.same(ancestor)) { + // mark self as parent and remove from data + selfAsParent = true; + _data4.parent = undefined; // remove parent reference + // exit or we loop forever + + break; + } + + ancestor = ancestor.parent(); + } + + if (!selfAsParent) { + // connect with children + parent[0]._private.children.push(node); + + node._private.parent = parent[0]; // let the core know we have a compound graph + + cy_p.hasCompoundNodes = true; + } + } // else + + } // if specified parent + + } // for each node + + + if (elements.length > 0) { + var restored = elements.length === self.length ? self : new Collection(cy, elements); + + for (var _i5 = 0; _i5 < restored.length; _i5++) { + var _ele3 = restored[_i5]; + + if (_ele3.isNode()) { + continue; + } // adding an edge invalidates the traversal caches for the parallel edges + + + _ele3.parallelEdges().clearTraversalCache(); // adding an edge invalidates the traversal cache for the connected nodes + + + _ele3.source().clearTraversalCache(); + + _ele3.target().clearTraversalCache(); + } + + var toUpdateStyle; + + if (cy_p.hasCompoundNodes) { + toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent()); + } else { + toUpdateStyle = restored; + } + + toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer); + + if (notifyRenderer) { + restored.emitAndNotify('add'); + } else if (addToPool) { + restored.emit('add'); + } + } + + return self; // chainability +}; + +elesfn$1.removed = function () { + var ele = this[0]; + return ele && ele._private.removed; +}; + +elesfn$1.inside = function () { + var ele = this[0]; + return ele && !ele._private.removed; +}; + +elesfn$1.remove = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var elesToRemove = []; + var elesToRemoveIds = {}; + var cy = self._private.cy; // add connected edges + + function addConnectedEdges(node) { + var edges = node._private.edges; + + for (var i = 0; i < edges.length; i++) { + add(edges[i]); + } + } // add descendant nodes + + + function addChildren(node) { + var children = node._private.children; + + for (var i = 0; i < children.length; i++) { + add(children[i]); + } + } + + function add(ele) { + var alreadyAdded = elesToRemoveIds[ele.id()]; + + if (removeFromPool && ele.removed() || alreadyAdded) { + return; + } else { + elesToRemoveIds[ele.id()] = true; + } + + if (ele.isNode()) { + elesToRemove.push(ele); // nodes are removed last + + addConnectedEdges(ele); + addChildren(ele); + } else { + elesToRemove.unshift(ele); // edges are removed first + } + } // make the list of elements to remove + // (may be removing more than specified due to connected edges etc) + + + for (var i = 0, l = self.length; i < l; i++) { + var ele = self[i]; + add(ele); + } + + function removeEdgeRef(node, edge) { + var connectedEdges = node._private.edges; + removeFromArray(connectedEdges, edge); // removing an edges invalidates the traversal cache for its nodes + + node.clearTraversalCache(); + } + + function removeParallelRef(pllEdge) { + // removing an edge invalidates the traversal caches for the parallel edges + pllEdge.clearTraversalCache(); + } + + var alteredParents = []; + alteredParents.ids = {}; + + function removeChildRef(parent, ele) { + ele = ele[0]; + parent = parent[0]; + var children = parent._private.children; + var pid = parent.id(); + removeFromArray(children, ele); // remove parent => child ref + + ele._private.parent = null; // remove child => parent ref + + if (!alteredParents.ids[pid]) { + alteredParents.ids[pid] = true; + alteredParents.push(parent); + } + } + + self.dirtyCompoundBoundsCache(); + + if (removeFromPool) { + cy.removeFromPool(elesToRemove); // remove from core pool + } + + for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) { + var _ele4 = elesToRemove[_i6]; + + if (_ele4.isEdge()) { + // remove references to this edge in its connected nodes + var src = _ele4.source()[0]; + + var tgt = _ele4.target()[0]; + + removeEdgeRef(src, _ele4); + removeEdgeRef(tgt, _ele4); + + var pllEdges = _ele4.parallelEdges(); + + for (var j = 0; j < pllEdges.length; j++) { + var pllEdge = pllEdges[j]; + removeParallelRef(pllEdge); + + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + } + } else { + // remove reference to parent + var parent = _ele4.parent(); + + if (parent.length !== 0) { + removeChildRef(parent, _ele4); + } + } + + if (removeFromPool) { + // mark as removed + _ele4._private.removed = true; + } + } // check to see if we have a compound graph or not + + + var elesStillInside = cy._private.elements; + cy._private.hasCompoundNodes = false; + + for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) { + var _ele5 = elesStillInside[_i7]; + + if (_ele5.isParent()) { + cy._private.hasCompoundNodes = true; + break; + } + } + + var removedElements = new Collection(this.cy(), elesToRemove); + + if (removedElements.size() > 0) { + // must manually notify since trigger won't do this automatically once removed + if (notifyRenderer) { + removedElements.emitAndNotify('remove'); + } else if (removeFromPool) { + removedElements.emit('remove'); + } + } // the parents who were modified by the removal need their style updated + + + for (var _i8 = 0; _i8 < alteredParents.length; _i8++) { + var _ele6 = alteredParents[_i8]; + + if (!removeFromPool || !_ele6.removed()) { + _ele6.updateStyle(); + } + } + + return removedElements; +}; + +elesfn$1.move = function (struct) { + var cy = this._private.cy; + var eles = this; // just clean up refs, caches, etc. in the same way as when removing and then restoring + // (our calls to remove/restore do not remove from the graph or make events) + + var notifyRenderer = false; + var modifyPool = false; + + var toString = function toString(id) { + return id == null ? id : '' + id; + }; // id must be string + + + if (struct.source !== undefined || struct.target !== undefined) { + var srcId = toString(struct.source); + var tgtId = toString(struct.target); + var srcExists = srcId != null && cy.hasElementWithId(srcId); + var tgtExists = tgtId != null && cy.hasElementWithId(tgtId); + + if (srcExists || tgtExists) { + cy.batch(function () { + // avoid duplicate style updates + eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + + eles.emitAndNotify('moveout'); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data5 = ele._private.data; + + if (ele.isEdge()) { + if (srcExists) { + _data5.source = srcId; + } + + if (tgtExists) { + _data5.target = tgtId; + } + } + } + + eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + eles.emitAndNotify('move'); + } + } else if (struct.parent !== undefined) { + // move node to new parent + var parentId = toString(struct.parent); + var parentExists = parentId === null || cy.hasElementWithId(parentId); + + if (parentExists) { + var pidToAssign = parentId === null ? undefined : parentId; + cy.batch(function () { + // avoid duplicate style updates + var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + + updated.emitAndNotify('moveout'); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data6 = ele._private.data; + + if (ele.isNode()) { + _data6.parent = pidToAssign; + } + } + + updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + eles.emitAndNotify('move'); + } + } + + return this; +}; + +[elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) { + extend(elesfn$1, props); +}); + +var corefn$9 = { + add: function add(opts) { + var elements; + var cy = this; // add the elements + + if (elementOrCollection(opts)) { + var eles = opts; + + if (eles._private.cy === cy) { + // same instance => just restore + elements = eles.restore(); + } else { + // otherwise, copy from json + var jsons = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + jsons.push(ele.json()); + } + + elements = new Collection(cy, jsons); + } + } // specify an array of options + else if (array(opts)) { + var _jsons = opts; + elements = new Collection(cy, _jsons); + } // specify via opts.nodes and opts.edges + else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) { + var elesByGroup = opts; + var _jsons2 = []; + var grs = ['nodes', 'edges']; + + for (var _i = 0, il = grs.length; _i < il; _i++) { + var group = grs[_i]; + var elesArray = elesByGroup[group]; + + if (array(elesArray)) { + for (var j = 0, jl = elesArray.length; j < jl; j++) { + var json = extend({ + group: group + }, elesArray[j]); + + _jsons2.push(json); + } + } + } + + elements = new Collection(cy, _jsons2); + } // specify options for one element + else { + var _json = opts; + elements = new Element(cy, _json).collection(); + } + + return elements; + }, + remove: function remove(collection) { + if (elementOrCollection(collection)) ; else if (string(collection)) { + var selector = collection; + collection = this.$(selector); + } + + return collection.remove(); + } +}; + +/* global Float32Array */ + +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ +function generateCubicBezier(mX1, mY1, mX2, mY2) { + var NEWTON_ITERATIONS = 4, + NEWTON_MIN_SLOPE = 0.001, + SUBDIVISION_PRECISION = 0.0000001, + SUBDIVISION_MAX_ITERATIONS = 10, + kSplineTableSize = 11, + kSampleStepSize = 1.0 / (kSplineTableSize - 1.0), + float32ArraySupported = typeof Float32Array !== 'undefined'; + /* Must contain four arguments. */ + + if (arguments.length !== 4) { + return false; + } + /* Arguments must be numbers. */ + + + for (var i = 0; i < 4; ++i) { + if (typeof arguments[i] !== "number" || isNaN(arguments[i]) || !isFinite(arguments[i])) { + return false; + } + } + /* X values must be in the [0, 1] range. */ + + + mX1 = Math.min(mX1, 1); + mX2 = Math.min(mX2, 1); + mX1 = Math.max(mX1, 0); + mX2 = Math.max(mX2, 0); + var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + + function A(aA1, aA2) { + return 1.0 - 3.0 * aA2 + 3.0 * aA1; + } + + function B(aA1, aA2) { + return 3.0 * aA2 - 6.0 * aA1; + } + + function C(aA1) { + return 3.0 * aA1; + } + + function calcBezier(aT, aA1, aA2) { + return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; + } + + function getSlope(aT, aA1, aA2) { + return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); + } + + function newtonRaphsonIterate(aX, aGuessT) { + for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + + if (currentSlope === 0.0) { + return aGuessT; + } + + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + + return aGuessT; + } + + function calcSampleValues() { + for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) { + mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2); + } + } + + function binarySubdivide(aX, aA, aB) { + var currentX, + currentT, + i = 0; + + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + + return currentT; + } + + function getTForX(aX) { + var intervalStart = 0.0, + currentSample = 1, + lastSample = kSplineTableSize - 1; + + for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + + --currentSample; + var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), + guessForT = intervalStart + dist * kSampleStepSize, + initialSlope = getSlope(guessForT, mX1, mX2); + + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize); + } + } + + var _precomputed = false; + + function precompute() { + _precomputed = true; + + if (mX1 !== mY1 || mX2 !== mY2) { + calcSampleValues(); + } + } + + var f = function f(aX) { + if (!_precomputed) { + precompute(); + } + + if (mX1 === mY1 && mX2 === mY2) { + return aX; + } + + if (aX === 0) { + return 0; + } + + if (aX === 1) { + return 1; + } + + return calcBezier(getTForX(aX), mY1, mY2); + }; + + f.getControlPoints = function () { + return [{ + x: mX1, + y: mY1 + }, { + x: mX2, + y: mY2 + }]; + }; + + var str = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; + + f.toString = function () { + return str; + }; + + return f; +} + +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + +/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass + then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */ +var generateSpringRK4 = function () { + function springAccelerationForState(state) { + return -state.tension * state.x - state.friction * state.v; + } + + function springEvaluateStateWithDerivative(initialState, dt, derivative) { + var state = { + x: initialState.x + derivative.dx * dt, + v: initialState.v + derivative.dv * dt, + tension: initialState.tension, + friction: initialState.friction + }; + return { + dx: state.v, + dv: springAccelerationForState(state) + }; + } + + function springIntegrateState(state, dt) { + var a = { + dx: state.v, + dv: springAccelerationForState(state) + }, + b = springEvaluateStateWithDerivative(state, dt * 0.5, a), + c = springEvaluateStateWithDerivative(state, dt * 0.5, b), + d = springEvaluateStateWithDerivative(state, dt, c), + dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx), + dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv); + state.x = state.x + dxdt * dt; + state.v = state.v + dvdt * dt; + return state; + } + + return function springRK4Factory(tension, friction, duration) { + var initState = { + x: -1, + v: 0, + tension: null, + friction: null + }, + path = [0], + time_lapsed = 0, + tolerance = 1 / 10000, + DT = 16 / 1000, + have_duration, + dt, + last_state; + tension = parseFloat(tension) || 500; + friction = parseFloat(friction) || 20; + duration = duration || null; + initState.tension = tension; + initState.friction = friction; + have_duration = duration !== null; + /* Calculate the actual time it takes for this animation to complete with the provided conditions. */ + + if (have_duration) { + /* Run the simulation without a duration. */ + time_lapsed = springRK4Factory(tension, friction); + /* Compute the adjusted time delta. */ + + dt = time_lapsed / duration * DT; + } else { + dt = DT; + } + + for (;;) { + /* Next/step function .*/ + last_state = springIntegrateState(last_state || initState, dt); + /* Store the position. */ + + path.push(1 + last_state.x); + time_lapsed += 16; + /* If the change threshold is reached, break. */ + + if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) { + break; + } + } + /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the + computed path and returns a snapshot of the position according to a given percentComplete. */ + + + return !have_duration ? time_lapsed : function (percentComplete) { + return path[percentComplete * (path.length - 1) | 0]; + }; + }; +}(); + +var cubicBezier = function cubicBezier(t1, p1, t2, p2) { + var bezier = generateCubicBezier(t1, p1, t2, p2); + return function (start, end, percent) { + return start + (end - start) * bezier(percent); + }; +}; + +var easings = { + 'linear': function linear(start, end, percent) { + return start + (end - start) * percent; + }, + // default easings + 'ease': cubicBezier(0.25, 0.1, 0.25, 1), + 'ease-in': cubicBezier(0.42, 0, 1, 1), + 'ease-out': cubicBezier(0, 0, 0.58, 1), + 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), + // sine + 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715), + 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1), + 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95), + // quad + 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53), + 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94), + 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955), + // cubic + 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19), + 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1), + 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1), + // quart + 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22), + 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1), + 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1), + // quint + 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06), + 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1), + 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1), + // expo + 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035), + 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1), + 'ease-in-out-expo': cubicBezier(1, 0, 0, 1), + // circ + 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335), + 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1), + 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86), + // user param easings... + 'spring': function spring(tension, friction, duration) { + if (duration === 0) { + // can't get a spring w/ duration 0 + return easings.linear; // duration 0 => jump to end so impl doesn't matter + } + + var spring = generateSpringRK4(tension, friction, duration); + return function (start, end, percent) { + return start + (end - start) * spring(percent); + }; + }, + 'cubic-bezier': cubicBezier +}; + +function getEasedValue(type, start, end, percent, easingFn) { + if (percent === 1) { + return end; + } + + if (start === end) { + return end; + } + + var val = easingFn(start, end, percent); + + if (type == null) { + return val; + } + + if (type.roundValue || type.color) { + val = Math.round(val); + } + + if (type.min !== undefined) { + val = Math.max(val, type.min); + } + + if (type.max !== undefined) { + val = Math.min(val, type.max); + } + + return val; +} + +function getValue(prop, spec) { + if (prop.pfValue != null || prop.value != null) { + if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) { + return prop.pfValue; + } else { + return prop.value; + } + } else { + return prop; + } +} + +function ease(startProp, endProp, percent, easingFn, propSpec) { + var type = propSpec != null ? propSpec.type : null; + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + var start = getValue(startProp, propSpec); + var end = getValue(endProp, propSpec); + + if (number$1(start) && number$1(end)) { + return getEasedValue(type, start, end, percent, easingFn); + } else if (array(start) && array(end)) { + var easedArr = []; + + for (var i = 0; i < end.length; i++) { + var si = start[i]; + var ei = end[i]; + + if (si != null && ei != null) { + var val = getEasedValue(type, si, ei, percent, easingFn); + easedArr.push(val); + } else { + easedArr.push(ei); + } + } + + return easedArr; + } + + return undefined; +} + +function step$1(self, ani, now, isCore) { + var isEles = !isCore; + var _p = self._private; + var ani_p = ani._private; + var pEasing = ani_p.easing; + var startTime = ani_p.startTime; + var cy = isCore ? self : self.cy(); + var style = cy.style(); + + if (!ani_p.easingImpl) { + if (pEasing == null) { + // use default + ani_p.easingImpl = easings['linear']; + } else { + // then define w/ name + var easingVals; + + if (string(pEasing)) { + var easingProp = style.parse('transition-timing-function', pEasing); + easingVals = easingProp.value; + } else { + // then assume preparsed array + easingVals = pEasing; + } + + var name, args; + + if (string(easingVals)) { + name = easingVals; + args = []; + } else { + name = easingVals[1]; + args = easingVals.slice(2).map(function (n) { + return +n; + }); + } + + if (args.length > 0) { + // create with args + if (name === 'spring') { + args.push(ani_p.duration); // need duration to generate spring + } + + ani_p.easingImpl = easings[name].apply(null, args); + } else { + // static impl by name + ani_p.easingImpl = easings[name]; + } + } + } + + var easing = ani_p.easingImpl; + var percent; + + if (ani_p.duration === 0) { + percent = 1; + } else { + percent = (now - startTime) / ani_p.duration; + } + + if (ani_p.applying) { + percent = ani_p.progress; + } + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + if (ani_p.delay == null) { + // then update + var startPos = ani_p.startPosition; + var endPos = ani_p.position; + + if (endPos && isEles && !self.locked()) { + var newPos = {}; + + if (valid(startPos.x, endPos.x)) { + newPos.x = ease(startPos.x, endPos.x, percent, easing); + } + + if (valid(startPos.y, endPos.y)) { + newPos.y = ease(startPos.y, endPos.y, percent, easing); + } + + self.position(newPos); + } + + var startPan = ani_p.startPan; + var endPan = ani_p.pan; + var pan = _p.pan; + var animatingPan = endPan != null && isCore; + + if (animatingPan) { + if (valid(startPan.x, endPan.x)) { + pan.x = ease(startPan.x, endPan.x, percent, easing); + } + + if (valid(startPan.y, endPan.y)) { + pan.y = ease(startPan.y, endPan.y, percent, easing); + } + + self.emit('pan'); + } + + var startZoom = ani_p.startZoom; + var endZoom = ani_p.zoom; + var animatingZoom = endZoom != null && isCore; + + if (animatingZoom) { + if (valid(startZoom, endZoom)) { + _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom); + } + + self.emit('zoom'); + } + + if (animatingPan || animatingZoom) { + self.emit('viewport'); + } + + var props = ani_p.style; + + if (props && props.length > 0 && isEles) { + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var _name = prop.name; + var end = prop; + var start = ani_p.startStyle[_name]; + var propSpec = style.properties[start.name]; + var easedVal = ease(start, end, percent, easing, propSpec); + style.overrideBypass(self, _name, easedVal); + } // for props + + + self.emit('style'); + } // if + + } + + ani_p.progress = percent; + return percent; +} + +function valid(start, end) { + if (start == null || end == null) { + return false; + } + + if (number$1(start) && number$1(end)) { + return true; + } else if (start && end) { + return true; + } + + return false; +} + +function startAnimation(self, ani, now, isCore) { + var ani_p = ani._private; + ani_p.started = true; + ani_p.startTime = now - ani_p.progress * ani_p.duration; +} + +function stepAll(now, cy) { + var eles = cy._private.aniEles; + var doneEles = []; + + function stepOne(ele, isCore) { + var _p = ele._private; + var current = _p.animation.current; + var queue = _p.animation.queue; + var ranAnis = false; // if nothing currently animating, get something from the queue + + if (current.length === 0) { + var next = queue.shift(); + + if (next) { + current.push(next); + } + } + + var callbacks = function callbacks(_callbacks) { + for (var j = _callbacks.length - 1; j >= 0; j--) { + var cb = _callbacks[j]; + cb(); + } + + _callbacks.splice(0, _callbacks.length); + }; // step and remove if done + + + for (var i = current.length - 1; i >= 0; i--) { + var ani = current[i]; + var ani_p = ani._private; + + if (ani_p.stopped) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.frames); + continue; + } + + if (!ani_p.playing && !ani_p.applying) { + continue; + } // an apply() while playing shouldn't do anything + + + if (ani_p.playing && ani_p.applying) { + ani_p.applying = false; + } + + if (!ani_p.started) { + startAnimation(ele, ani, now); + } + + step$1(ele, ani, now, isCore); + + if (ani_p.applying) { + ani_p.applying = false; + } + + callbacks(ani_p.frames); + + if (ani_p.step != null) { + ani_p.step(now); + } + + if (ani.completed()) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.completes); + } + + ranAnis = true; + } + + if (!isCore && current.length === 0 && queue.length === 0) { + doneEles.push(ele); + } + + return ranAnis; + } // stepElement + // handle all eles + + + var ranEleAni = false; + + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + var handledThisEle = stepOne(ele); + ranEleAni = ranEleAni || handledThisEle; + } // each element + + + var ranCoreAni = stepOne(cy, true); // notify renderer + + if (ranEleAni || ranCoreAni) { + if (eles.length > 0) { + cy.notify('draw', eles); + } else { + cy.notify('draw'); + } + } // remove elements from list of currently animating if its queues are empty + + + eles.unmerge(doneEles); + cy.emit('step'); +} // stepAll + +var corefn$8 = { + // pull in animation functions + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop(), + addToAnimationPool: function addToAnimationPool(eles) { + var cy = this; + + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + + + cy._private.aniEles.merge(eles); + }, + stopAnimationLoop: function stopAnimationLoop() { + this._private.animationsRunning = false; + }, + startAnimationLoop: function startAnimationLoop() { + var cy = this; + cy._private.animationsRunning = true; + + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + // NB the animation loop will exec in headless environments if style enabled + // and explicit cy.destroy() is necessary to stop the loop + + + function headlessStep() { + if (!cy._private.animationsRunning) { + return; + } + + requestAnimationFrame(function animationStep(now) { + stepAll(now, cy); + headlessStep(); + }); + } + + var renderer = cy.renderer(); + + if (renderer && renderer.beforeRender) { + // let the renderer schedule animations + renderer.beforeRender(function rendererAnimationStep(willDraw, now) { + stepAll(now, cy); + }, renderer.beforeRenderPriorities.animations); + } else { + // manage the animation loop ourselves + headlessStep(); // first call + } + } +}; + +var emitterOptions = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(cy, listener, eventObj) { + var selector = listener.qualifier; + + if (selector != null) { + return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + + return true; + }, + addEventFields: function addEventFields(cy, evt) { + evt.cy = cy; + evt.target = cy; + }, + callbackContext: function callbackContext(cy, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : cy; + } +}; + +var argSelector = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } +}; + +var elesfn = { + createEmitter: function createEmitter() { + var _p = this._private; + + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions, this); + } + + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + this.emitter().on(events, argSelector(selector), callback); + return this; + }, + removeListener: function removeListener(events, selector, callback) { + this.emitter().removeListener(events, argSelector(selector), callback); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + one: function one(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + once: function once(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + emit: function emit(events, extraParams) { + this.emitter().emit(events, extraParams); + return this; + }, + emitAndNotify: function emitAndNotify(event, eles) { + this.emit(event); + this.notify(event, eles); + return this; + } +}; +define.eventAliasesOn(elesfn); + +var corefn$7 = { + png: function png(options) { + var renderer = this._private.renderer; + options = options || {}; + return renderer.png(options); + }, + jpg: function jpg(options) { + var renderer = this._private.renderer; + options = options || {}; + options.bg = options.bg || '#fff'; + return renderer.jpg(options); + } +}; +corefn$7.jpeg = corefn$7.jpg; + +var corefn$6 = { + layout: function layout(options) { + var cy = this; + + if (options == null) { + error('Layout options must be specified to make a layout'); + return; + } + + if (options.name == null) { + error('A `name` must be specified to make a layout'); + return; + } + + var name = options.name; + var Layout = cy.extension('layout', name); + + if (Layout == null) { + error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?'); + return; + } + + var eles; + + if (string(options.eles)) { + eles = cy.$(options.eles); + } else { + eles = options.eles != null ? options.eles : cy.$(); + } + + var layout = new Layout(extend({}, options, { + cy: cy, + eles: eles + })); + return layout; + } +}; +corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout; + +var corefn$5 = { + notify: function notify(eventName, eventEles) { + var _p = this._private; + + if (this.batching()) { + _p.batchNotifications = _p.batchNotifications || {}; + var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection(); + + if (eventEles != null) { + eles.merge(eventEles); + } + + return; // notifications are disabled during batching + } + + if (!_p.notificationsEnabled) { + return; + } // exit on disabled + + + var renderer = this.renderer(); // exit if destroy() called on core or renderer in between frames #1499 #1528 + + if (this.destroyed() || !renderer) { + return; + } + + renderer.notify(eventName, eventEles); + }, + notifications: function notifications(bool) { + var p = this._private; + + if (bool === undefined) { + return p.notificationsEnabled; + } else { + p.notificationsEnabled = bool ? true : false; + } + + return this; + }, + noNotifications: function noNotifications(callback) { + this.notifications(false); + callback(); + this.notifications(true); + }, + batching: function batching() { + return this._private.batchCount > 0; + }, + startBatch: function startBatch() { + var _p = this._private; + + if (_p.batchCount == null) { + _p.batchCount = 0; + } + + if (_p.batchCount === 0) { + _p.batchStyleEles = this.collection(); + _p.batchNotifications = {}; + } + + _p.batchCount++; + return this; + }, + endBatch: function endBatch() { + var _p = this._private; + + if (_p.batchCount === 0) { + return this; + } + + _p.batchCount--; + + if (_p.batchCount === 0) { + // update style for dirty eles + _p.batchStyleEles.updateStyle(); + + var renderer = this.renderer(); // notify the renderer of queued eles and event types + + Object.keys(_p.batchNotifications).forEach(function (eventName) { + var eles = _p.batchNotifications[eventName]; + + if (eles.empty()) { + renderer.notify(eventName); + } else { + renderer.notify(eventName, eles); + } + }); + } + + return this; + }, + batch: function batch(callback) { + this.startBatch(); + callback(); + this.endBatch(); + return this; + }, + // for backwards compatibility + batchData: function batchData(map) { + var cy = this; + return this.batch(function () { + var ids = Object.keys(map); + + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var data = map[id]; + var ele = cy.getElementById(id); + ele.data(data); + } + }); + } +}; + +var rendererDefaults = defaults$g({ + hideEdgesOnViewport: false, + textureOnViewport: false, + motionBlur: false, + motionBlurOpacity: 0.05, + pixelRatio: undefined, + desktopTapThreshold: 4, + touchTapThreshold: 8, + wheelSensitivity: 1, + debug: false, + showFps: false +}); +var corefn$4 = { + renderTo: function renderTo(context, zoom, pan, pxRatio) { + var r = this._private.renderer; + r.renderTo(context, zoom, pan, pxRatio); + return this; + }, + renderer: function renderer() { + return this._private.renderer; + }, + forceRender: function forceRender() { + this.notify('draw'); + return this; + }, + resize: function resize() { + this.invalidateSize(); + this.emitAndNotify('resize'); + return this; + }, + initRenderer: function initRenderer(options) { + var cy = this; + var RendererProto = cy.extension('renderer', options.name); + + if (RendererProto == null) { + error("Can not initialise: No such renderer `".concat(options.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); + return; + } + + if (options.wheelSensitivity !== undefined) { + warn("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine."); + } + + var rOpts = rendererDefaults(options); + rOpts.cy = cy; + cy._private.renderer = new RendererProto(rOpts); + this.notify('init'); + }, + destroyRenderer: function destroyRenderer() { + var cy = this; + cy.notify('destroy'); // destroy the renderer + + var domEle = cy.container(); + + if (domEle) { + domEle._cyreg = null; + + while (domEle.childNodes.length > 0) { + domEle.removeChild(domEle.childNodes[0]); + } + } + + cy._private.renderer = null; // to be extra safe, remove the ref + + cy.mutableElements().forEach(function (ele) { + var _p = ele._private; + _p.rscratch = {}; + _p.rstyle = {}; + _p.animation.current = []; + _p.animation.queue = []; + }); + }, + onRender: function onRender(fn) { + return this.on('render', fn); + }, + offRender: function offRender(fn) { + return this.off('render', fn); + } +}; +corefn$4.invalidateDimensions = corefn$4.resize; + +var corefn$3 = { + // get a collection + // - empty collection on no args + // - collection of elements in the graph on selector arg + // - guarantee a returned collection when elements or collection specified + collection: function collection(eles, opts) { + if (string(eles)) { + return this.$(eles); + } else if (elementOrCollection(eles)) { + return eles.collection(); + } else if (array(eles)) { + if (!opts) { + opts = {}; + } + + return new Collection(this, eles, opts.unique, opts.removed); + } + + return new Collection(this); + }, + nodes: function nodes(selector) { + var nodes = this.$(function (ele) { + return ele.isNode(); + }); + + if (selector) { + return nodes.filter(selector); + } + + return nodes; + }, + edges: function edges(selector) { + var edges = this.$(function (ele) { + return ele.isEdge(); + }); + + if (selector) { + return edges.filter(selector); + } + + return edges; + }, + // search the graph like jQuery + $: function $(selector) { + var eles = this._private.elements; + + if (selector) { + return eles.filter(selector); + } else { + return eles.spawnSelf(); + } + }, + mutableElements: function mutableElements() { + return this._private.elements; + } +}; // aliases + +corefn$3.elements = corefn$3.filter = corefn$3.$; + +var styfn$8 = {}; // keys for style blocks, e.g. ttfftt + +var TRUE = 't'; +var FALSE = 'f'; // (potentially expensive calculation) +// apply the style to the element based on +// - its bypass +// - what selectors match it + +styfn$8.apply = function (eles) { + var self = this; + var _p = self._private; + var cy = _p.cy; + var updatedEles = cy.collection(); + + for (var ie = 0; ie < eles.length; ie++) { + var ele = eles[ie]; + var cxtMeta = self.getContextMeta(ele); + + if (cxtMeta.empty) { + continue; + } + + var cxtStyle = self.getContextStyle(cxtMeta); + var app = self.applyContextStyle(cxtMeta, cxtStyle, ele); + + if (ele._private.appliedInitStyle) { + self.updateTransitions(ele, app.diffProps); + } else { + ele._private.appliedInitStyle = true; + } + + var hintsDiff = self.updateStyleHints(ele); + + if (hintsDiff) { + updatedEles.push(ele); + } + } // for elements + + + return updatedEles; +}; + +styfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) { + var self = this; + var cache = self._private.propDiffs = self._private.propDiffs || {}; + var dualCxtKey = oldCxtKey + '-' + newCxtKey; + var cachedVal = cache[dualCxtKey]; + + if (cachedVal) { + return cachedVal; + } + + var diffProps = []; + var addedProp = {}; + + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var oldHasCxt = oldCxtKey[i] === TRUE; + var newHasCxt = newCxtKey[i] === TRUE; + var cxtHasDiffed = oldHasCxt !== newHasCxt; + var cxtHasMappedProps = cxt.mappedProperties.length > 0; + + if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) { + var props = void 0; + + if (cxtHasDiffed && cxtHasMappedProps) { + props = cxt.properties; // suffices b/c mappedProperties is a subset of properties + } else if (cxtHasDiffed) { + props = cxt.properties; // need to check them all + } else if (cxtHasMappedProps) { + props = cxt.mappedProperties; // only need to check mapped + } + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + var name = prop.name; // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter + // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result + // is cached) + + var laterCxtOverrides = false; + + for (var k = i + 1; k < self.length; k++) { + var laterCxt = self[k]; + var hasLaterCxt = newCxtKey[k] === TRUE; + + if (!hasLaterCxt) { + continue; + } // can't override unless the context is active + + + laterCxtOverrides = laterCxt.properties[prop.name] != null; + + if (laterCxtOverrides) { + break; + } // exit early as long as one later context overrides + + } + + if (!addedProp[name] && !laterCxtOverrides) { + addedProp[name] = true; + diffProps.push(name); + } + } // for props + + } // if + + } // for contexts + + + cache[dualCxtKey] = diffProps; + return diffProps; +}; + +styfn$8.getContextMeta = function (ele) { + var self = this; + var cxtKey = ''; + var diffProps; + var prevKey = ele._private.styleCxtKey || ''; // get the cxt key + + for (var i = 0; i < self.length; i++) { + var context = self[i]; + var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core' + + if (contextSelectorMatches) { + cxtKey += TRUE; + } else { + cxtKey += FALSE; + } + } // for context + + + diffProps = self.getPropertiesDiff(prevKey, cxtKey); + ele._private.styleCxtKey = cxtKey; + return { + key: cxtKey, + diffPropNames: diffProps, + empty: diffProps.length === 0 + }; +}; // gets a computed ele style object based on matched contexts + + +styfn$8.getContextStyle = function (cxtMeta) { + var cxtKey = cxtMeta.key; + var self = this; + var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; // if already computed style, returned cached copy + + if (cxtStyles[cxtKey]) { + return cxtStyles[cxtKey]; + } + + var style = { + _private: { + key: cxtKey + } + }; + + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var hasCxt = cxtKey[i] === TRUE; + + if (!hasCxt) { + continue; + } + + for (var j = 0; j < cxt.properties.length; j++) { + var prop = cxt.properties[j]; + style[prop.name] = prop; + } + } + + cxtStyles[cxtKey] = style; + return style; +}; + +styfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) { + var self = this; + var diffProps = cxtMeta.diffPropNames; + var retDiffProps = {}; + var types = self.types; + + for (var i = 0; i < diffProps.length; i++) { + var diffPropName = diffProps[i]; + var cxtProp = cxtStyle[diffPropName]; + var eleProp = ele.pstyle(diffPropName); + + if (!cxtProp) { + // no context prop means delete + if (!eleProp) { + continue; // no existing prop means nothing needs to be removed + // nb affects initial application on mapped values like control-point-distances + } else if (eleProp.bypass) { + cxtProp = { + name: diffPropName, + deleteBypassed: true + }; + } else { + cxtProp = { + name: diffPropName, + "delete": true + }; + } + } // save cycles when the context prop doesn't need to be applied + + + if (eleProp === cxtProp) { + continue; + } // save cycles when a mapped context prop doesn't need to be applied + + + if (cxtProp.mapped === types.fn // context prop is function mapper + && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one) + && eleProp.mapping != null // ele prop is a concrete value from from a mapper + && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper + ) { + // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet) + var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy + + var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss + + if (fnValue === mapping.prevFnValue) { + continue; + } + } + + var retDiffProp = retDiffProps[diffPropName] = { + prev: eleProp + }; + self.applyParsedProperty(ele, cxtProp); + retDiffProp.next = ele.pstyle(diffPropName); + + if (retDiffProp.next && retDiffProp.next.bypass) { + retDiffProp.next = retDiffProp.next.bypassed; + } + } + + return { + diffProps: retDiffProps + }; +}; + +styfn$8.updateStyleHints = function (ele) { + var _p = ele._private; + var self = this; + var propNames = self.propertyGroupNames; + var propGrKeys = self.propertyGroupKeys; + + var propHash = function propHash(ele, propNames, seedKey) { + return self.getPropertiesHash(ele, propNames, seedKey); + }; + + var oldStyleKey = _p.styleKey; + + if (ele.removed()) { + return false; + } + + var isNode = _p.group === 'nodes'; // get the style key hashes per prop group + // but lazily -- only use non-default prop values to reduce the number of hashes + // + + var overriddenStyles = ele._private.style; + propNames = Object.keys(overriddenStyles); + + for (var i = 0; i < propGrKeys.length; i++) { + var grKey = propGrKeys[i]; + _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + } + + var updateGrKey1 = function updateGrKey1(val, grKey) { + return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]); + }; + + var updateGrKey2 = function updateGrKey2(val, grKey) { + return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]); + }; + + var updateGrKey = function updateGrKey(val, grKey) { + updateGrKey1(val, grKey); + updateGrKey2(val, grKey); + }; + + var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) { + for (var j = 0; j < strVal.length; j++) { + var ch = strVal.charCodeAt(j); + updateGrKey1(ch, grKey); + updateGrKey2(ch, grKey); + } + }; // - hashing works on 32 bit ints b/c we use bitwise ops + // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function) + // - raise up small numbers so more significant digits are seen by hashing + // - make small numbers larger than a normal value to avoid collisions + // - works in practice and it's relatively cheap + + + var N = 2000000000; + + var cleanNum = function cleanNum(val) { + return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val; + }; + + for (var _i = 0; _i < propNames.length; _i++) { + var name = propNames[_i]; + var parsedProp = overriddenStyles[name]; + + if (parsedProp == null) { + continue; + } + + var propInfo = this.properties[name]; + var type = propInfo.type; + var _grKey = propInfo.groupKey; + var normalizedNumberVal = void 0; + + if (propInfo.hashOverride != null) { + normalizedNumberVal = propInfo.hashOverride(ele, parsedProp); + } else if (parsedProp.pfValue != null) { + normalizedNumberVal = parsedProp.pfValue; + } // might not be a number if it allows enums + + + var numberVal = propInfo.enums == null ? parsedProp.value : null; + var haveNormNum = normalizedNumberVal != null; + var haveUnitedNum = numberVal != null; + var haveNum = haveNormNum || haveUnitedNum; + var units = parsedProp.units; // numbers are cheaper to hash than strings + // 1 hash op vs n hash ops (for length n string) + + if (type.number && haveNum && !type.multiple) { + var v = haveNormNum ? normalizedNumberVal : numberVal; + updateGrKey(cleanNum(v), _grKey); + + if (!haveNormNum && units != null) { + updateGrKeyWStr(units, _grKey); + } + } else { + updateGrKeyWStr(parsedProp.strValue, _grKey); + } + } // overall style key + // + + + var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + + for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) { + var _grKey2 = propGrKeys[_i2]; + var grHash = _p.styleKeys[_grKey2]; + hash[0] = hashInt(grHash[0], hash[0]); + hash[1] = hashIntAlt(grHash[1], hash[1]); + } + + _p.styleKey = combineHashes(hash[0], hash[1]); // label dims + // + + var sk = _p.styleKeys; + _p.labelDimsKey = combineHashesArray(sk.labelDimensions); + var labelKeys = propHash(ele, ['label'], sk.labelDimensions); + _p.labelKey = combineHashesArray(labelKeys); + _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys)); + + if (!isNode) { + var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions); + _p.sourceLabelKey = combineHashesArray(sourceLabelKeys); + _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys)); + var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions); + _p.targetLabelKey = combineHashesArray(targetLabelKeys); + _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); + } // node + // + + + if (isNode) { + var _p$styleKeys = _p.styleKeys, + nodeBody = _p$styleKeys.nodeBody, + nodeBorder = _p$styleKeys.nodeBorder, + backgroundImage = _p$styleKeys.backgroundImage, + compound = _p$styleKeys.compound, + pie = _p$styleKeys.pie; + var nodeKeys = [nodeBody, nodeBorder, backgroundImage, compound, pie].filter(function (k) { + return k != null; + }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]); + _p.nodeKey = combineHashesArray(nodeKeys); + _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT; + } + + return oldStyleKey !== _p.styleKey; +}; + +styfn$8.clearStyleHints = function (ele) { + var _p = ele._private; + _p.styleCxtKey = ''; + _p.styleKeys = {}; + _p.styleKey = null; + _p.labelKey = null; + _p.labelStyleKey = null; + _p.sourceLabelKey = null; + _p.sourceLabelStyleKey = null; + _p.targetLabelKey = null; + _p.targetLabelStyleKey = null; + _p.nodeKey = null; + _p.hasPie = null; +}; // apply a property to the style (for internal use) +// returns whether application was successful +// +// now, this function flattens the property, and here's how: +// +// for parsedProp:{ bypass: true, deleteBypass: true } +// no property is generated, instead the bypass property in the +// element's style is replaced by what's pointed to by the `bypassed` +// field in the bypass property (i.e. restoring the property the +// bypass was overriding) +// +// for parsedProp:{ mapped: truthy } +// the generated flattenedProp:{ mapping: prop } +// +// for parsedProp:{ bypass: true } +// the generated flattenedProp:{ bypassed: parsedProp } + + +styfn$8.applyParsedProperty = function (ele, parsedProp) { + var self = this; + var prop = parsedProp; + var style = ele._private.style; + var flatProp; + var types = self.types; + var type = self.properties[prop.name].type; + var propIsBypass = prop.bypass; + var origProp = style[prop.name]; + var origPropIsBypass = origProp && origProp.bypass; + var _p = ele._private; + var flatPropMapping = 'mapping'; + + var getVal = function getVal(p) { + if (p == null) { + return null; + } else if (p.pfValue != null) { + return p.pfValue; + } else { + return p.value; + } + }; + + var checkTriggers = function checkTriggers() { + var fromVal = getVal(origProp); + var toVal = getVal(prop); + self.checkTriggers(ele, prop.name, fromVal, toVal); + }; + + if (prop && prop.name.substr(0, 3) === 'pie') { + warn('The pie style properties are deprecated. Create charts using background images instead.'); + } // edge sanity checks to prevent the client from making serious mistakes + + + if (parsedProp.name === 'curve-style' && ele.isEdge() && ( // loops must be bundled beziers + parsedProp.value !== 'bezier' && ele.isLoop() || // edges connected to compound nodes can not be haystacks + parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) { + prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass); + } + + if (prop["delete"]) { + // delete the property and use the default value on falsey value + style[prop.name] = undefined; + checkTriggers(); + return true; + } + + if (prop.deleteBypassed) { + // delete the property that the + if (!origProp) { + checkTriggers(); + return true; // can't delete if no prop + } else if (origProp.bypass) { + // delete bypassed + origProp.bypassed = undefined; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypassed + } + } // check if we need to delete the current bypass + + + if (prop.deleteBypass) { + // then this property is just here to indicate we need to delete + if (!origProp) { + checkTriggers(); + return true; // property is already not defined + } else if (origProp.bypass) { + // then replace the bypass property with the original + // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary) + style[prop.name] = origProp.bypassed; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypass + } + } + + var printMappingErr = function printMappingErr() { + warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined'); + }; // put the property in the style objects + + + switch (prop.mapped) { + // flatten the property if mapped + case types.mapData: + { + // flatten the field (e.g. data.foo.bar) + var fields = prop.field.split('.'); + var fieldVal = _p.data; + + for (var i = 0; i < fields.length && fieldVal; i++) { + var field = fields[i]; + fieldVal = fieldVal[field]; + } + + if (fieldVal == null) { + printMappingErr(); + return false; + } + + var percent; + + if (!number$1(fieldVal)) { + // then don't apply and fall back on the existing style + warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)'); + return false; + } else { + var fieldWidth = prop.fieldMax - prop.fieldMin; + + if (fieldWidth === 0) { + // safety check -- not strictly necessary as no props of zero range should be passed here + percent = 0; + } else { + percent = (fieldVal - prop.fieldMin) / fieldWidth; + } + } // make sure to bound percent value + + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + if (type.color) { + var r1 = prop.valueMin[0]; + var r2 = prop.valueMax[0]; + var g1 = prop.valueMin[1]; + var g2 = prop.valueMax[1]; + var b1 = prop.valueMin[2]; + var b2 = prop.valueMax[2]; + var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3]; + var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3]; + var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)]; + flatProp = { + // colours are simple, so just create the flat property instead of expensive string parsing + bypass: prop.bypass, + // we're a bypass if the mapping property is a bypass + name: prop.name, + value: clr, + strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')' + }; + } else if (type.number) { + var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent; + flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping); + } else { + return false; // can only map to colours and numbers + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply the property and fall back on the existing style + printMappingErr(); + return false; + } + + flatProp.mapping = prop; // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + // direct mapping + + case types.data: + { + // flatten the field (e.g. data.foo.bar) + var _fields = prop.field.split('.'); + + var _fieldVal = _p.data; + + for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) { + var _field = _fields[_i3]; + _fieldVal = _fieldVal[_field]; + } + + if (_fieldVal != null) { + flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping); + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply and fall back on the existing style + printMappingErr(); + return false; + } + + flatProp.mapping = prop; // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + case types.fn: + { + var fn = prop.value; + var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function + + prop.prevFnValue = fnRetVal; + + if (fnRetVal == null) { + warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)'); + return false; + } + + flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping); + + if (!flatProp) { + warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)'); + return false; + } + + flatProp.mapping = copy(prop); // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + case undefined: + break; + // just set the property + + default: + return false; + // not a valid mapping + } // if the property is a bypass property, then link the resultant property to the original one + + + if (propIsBypass) { + if (origPropIsBypass) { + // then this bypass overrides the existing one + prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass + } else { + // then link the orig prop to the new bypass + prop.bypassed = origProp; + } + + style[prop.name] = prop; // and set + } else { + // prop is not bypass + if (origPropIsBypass) { + // then keep the orig prop (since it's a bypass) and link to the new prop + origProp.bypassed = prop; + } else { + // then just replace the old prop with the new one + style[prop.name] = prop; + } + } + + checkTriggers(); + return true; +}; + +styfn$8.cleanElements = function (eles, keepBypasses) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + this.clearStyleHints(ele); + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); + + if (!keepBypasses) { + ele._private.style = {}; + } else { + var style = ele._private.style; + var propNames = Object.keys(style); + + for (var j = 0; j < propNames.length; j++) { + var propName = propNames[j]; + var eleProp = style[propName]; + + if (eleProp != null) { + if (eleProp.bypass) { + eleProp.bypassed = null; + } else { + style[propName] = null; + } + } + } + } + } +}; // updates the visual style for all elements (useful for manual style modification after init) + + +styfn$8.update = function () { + var cy = this._private.cy; + var eles = cy.mutableElements(); + eles.updateStyle(); +}; // diffProps : { name => { prev, next } } + + +styfn$8.updateTransitions = function (ele, diffProps) { + var self = this; + var _p = ele._private; + var props = ele.pstyle('transition-property').value; + var duration = ele.pstyle('transition-duration').pfValue; + var delay = ele.pstyle('transition-delay').pfValue; + + if (props.length > 0 && duration > 0) { + var style = {}; // build up the style to animate towards + + var anyPrev = false; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var styProp = ele.pstyle(prop); + var diffProp = diffProps[prop]; + + if (!diffProp) { + continue; + } + + var prevProp = diffProp.prev; + var fromProp = prevProp; + var toProp = diffProp.next != null ? diffProp.next : styProp; + var diff = false; + var initVal = void 0; + var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity) + + if (!fromProp) { + continue; + } // consider px values + + + if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) { + diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy + + initVal = fromProp.pfValue + initDt * diff; // consider numerical values + } else if (number$1(fromProp.value) && number$1(toProp.value)) { + diff = toProp.value - fromProp.value; // nonzero is truthy + + initVal = fromProp.value + initDt * diff; // consider colour values + } else if (array(fromProp.value) && array(toProp.value)) { + diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2]; + initVal = fromProp.strValue; + } // the previous value is good for an animation only if it's different + + + if (diff) { + style[prop] = toProp.strValue; // to val + + this.applyBypass(ele, prop, initVal); // from val + + anyPrev = true; + } + } // end if props allow ani + // can't transition if there's nothing previous to transition from + + + if (!anyPrev) { + return; + } + + _p.transitioning = true; + new Promise$1(function (resolve) { + if (delay > 0) { + ele.delayAnimation(delay).play().promise().then(resolve); + } else { + resolve(); + } + }).then(function () { + return ele.animation({ + style: style, + duration: duration, + easing: ele.pstyle('transition-timing-function').value, + queue: false + }).play().promise(); + }).then(function () { + // if( !isBypass ){ + self.removeBypasses(ele, props); + ele.emitAndNotify('style'); // } + + _p.transitioning = false; + }); + } else if (_p.transitioning) { + this.removeBypasses(ele, props); + ele.emitAndNotify('style'); + _p.transitioning = false; + } +}; + +styfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) { + var prop = this.properties[name]; + var triggerCheck = getTrigger(prop); + + if (triggerCheck != null && triggerCheck(fromValue, toValue)) { + onTrigger(prop); + } +}; + +styfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) { + var _this = this; + + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersZOrder; + }, function () { + _this._private.cy.notify('zorder', ele); + }); +}; + +styfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) { + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersBounds; + }, function (prop) { + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); // if the prop change makes the bb of pll bezier edges invalid, + // then dirty the pll edge bb cache as well + + if ( // only for beziers -- so performance of other edges isn't affected + prop.triggersBoundsOfParallelBeziers && (name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier') || name === 'display' && (fromValue === 'none' || toValue === 'none'))) { + ele.parallelEdges().forEach(function (pllEdge) { + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + }); + } + }); +}; + +styfn$8.checkTriggers = function (ele, name, fromValue, toValue) { + ele.dirtyStyleCache(); + this.checkZOrderTrigger(ele, name, fromValue, toValue); + this.checkBoundsTrigger(ele, name, fromValue, toValue); +}; + +var styfn$7 = {}; // bypasses are applied to an existing style on an element, and just tacked on temporarily +// returns true iff application was successful for at least 1 specified property + +styfn$7.applyBypass = function (eles, name, value, updateTransitions) { + var self = this; + var props = []; + var isBypass = true; // put all the properties (can specify one or many) in an array after parsing them + + if (name === '*' || name === '**') { + // apply to all property names + if (value !== undefined) { + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var _name = prop.name; + var parsedProp = this.parse(_name, value, true); + + if (parsedProp) { + props.push(parsedProp); + } + } + } + } else if (string(name)) { + // then parse the single property + var _parsedProp = this.parse(name, value, true); + + if (_parsedProp) { + props.push(_parsedProp); + } + } else if (plainObject(name)) { + // then parse each property + var specifiedProps = name; + updateTransitions = value; + var names = Object.keys(specifiedProps); + + for (var _i = 0; _i < names.length; _i++) { + var _name2 = names[_i]; + var _value = specifiedProps[_name2]; + + if (_value === undefined) { + // try camel case name too + _value = specifiedProps[dash2camel(_name2)]; + } + + if (_value !== undefined) { + var _parsedProp2 = this.parse(_name2, _value, true); + + if (_parsedProp2) { + props.push(_parsedProp2); + } + } + } + } else { + // can't do anything without well defined properties + return false; + } // we've failed if there are no valid properties + + + if (props.length === 0) { + return false; + } // now, apply the bypass properties on the elements + + + var ret = false; // return true if at least one succesful bypass applied + + for (var _i2 = 0; _i2 < eles.length; _i2++) { + // for each ele + var ele = eles[_i2]; + var diffProps = {}; + var diffProp = void 0; + + for (var j = 0; j < props.length; j++) { + // for each prop + var _prop = props[j]; + + if (updateTransitions) { + var prevProp = ele.pstyle(_prop.name); + diffProp = diffProps[_prop.name] = { + prev: prevProp + }; + } + + ret = this.applyParsedProperty(ele, copy(_prop)) || ret; + + if (updateTransitions) { + diffProp.next = ele.pstyle(_prop.name); + } + } // for props + + + if (ret) { + this.updateStyleHints(ele); + } + + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + + return ret; +}; // only useful in specific cases like animation + + +styfn$7.overrideBypass = function (eles, name, value) { + name = camel2dash(name); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var prop = ele._private.style[name]; + var type = this.properties[name].type; + var isColor = type.color; + var isMulti = type.mutiple; + var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value; + + if (!prop || !prop.bypass) { + // need a bypass if one doesn't exist + this.applyBypass(ele, name, value); + } else { + prop.value = value; + + if (prop.pfValue != null) { + prop.pfValue = value; + } + + if (isColor) { + prop.strValue = 'rgb(' + value.join(',') + ')'; + } else if (isMulti) { + prop.strValue = value.join(' '); + } else { + prop.strValue = '' + value; + } + + this.updateStyleHints(ele); + } + + this.checkTriggers(ele, name, oldValue, value); + } +}; + +styfn$7.removeAllBypasses = function (eles, updateTransitions) { + return this.removeBypasses(eles, this.propertyNames, updateTransitions); +}; + +styfn$7.removeBypasses = function (eles, props, updateTransitions) { + var isBypass = true; + + for (var j = 0; j < eles.length; j++) { + var ele = eles[j]; + var diffProps = {}; + + for (var i = 0; i < props.length; i++) { + var name = props[i]; + var prop = this.properties[name]; + var prevProp = ele.pstyle(prop.name); + + if (!prevProp || !prevProp.bypass) { + // if a bypass doesn't exist for the prop, nothing needs to be removed + continue; + } + + var value = ''; // empty => remove bypass + + var parsedProp = this.parse(name, value, true); + var diffProp = diffProps[prop.name] = { + prev: prevProp + }; + this.applyParsedProperty(ele, parsedProp); + diffProp.next = ele.pstyle(prop.name); + } // for props + + + this.updateStyleHints(ele); + + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + +}; + +var styfn$6 = {}; // gets what an em size corresponds to in pixels relative to a dom element + +styfn$6.getEmSizeInPixels = function () { + var px = this.containerCss('font-size'); + + if (px != null) { + return parseFloat(px); + } else { + return 1; // for headless + } +}; // gets css property from the core container + + +styfn$6.containerCss = function (propName) { + var cy = this._private.cy; + var domElement = cy.container(); + + if (window$1 && domElement && window$1.getComputedStyle) { + return window$1.getComputedStyle(domElement).getPropertyValue(propName); + } +}; + +var styfn$5 = {}; // gets the rendered style for an element + +styfn$5.getRenderedStyle = function (ele, prop) { + if (prop) { + return this.getStylePropertyValue(ele, prop, true); + } else { + return this.getRawStyle(ele, true); + } +}; // gets the raw style for an element + + +styfn$5.getRawStyle = function (ele, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var rstyle = {}; + + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal); + + if (val != null) { + rstyle[prop.name] = val; + rstyle[dash2camel(prop.name)] = val; + } + } + + return rstyle; + } +}; + +styfn$5.getIndexedStyle = function (ele, property, subproperty, index) { + var pstyle = ele.pstyle(property)[subproperty][index]; + return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0]; +}; + +styfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var prop = self.properties[propName]; + + if (prop.alias) { + prop = prop.pointsTo; + } + + var type = prop.type; + var styleProp = ele.pstyle(prop.name); + + if (styleProp) { + var value = styleProp.value, + units = styleProp.units, + strValue = styleProp.strValue; + + if (isRenderedVal && type.number && value != null && number$1(value)) { + var zoom = ele.cy().zoom(); + + var getRenderedValue = function getRenderedValue(val) { + return val * zoom; + }; + + var getValueStringWithUnits = function getValueStringWithUnits(val, units) { + return getRenderedValue(val) + units; + }; + + var isArrayValue = array(value); + var haveUnits = isArrayValue ? units.every(function (u) { + return u != null; + }) : units != null; + + if (haveUnits) { + if (isArrayValue) { + return value.map(function (v, i) { + return getValueStringWithUnits(v, units[i]); + }).join(' '); + } else { + return getValueStringWithUnits(value, units); + } + } else { + if (isArrayValue) { + return value.map(function (v) { + return string(v) ? v : '' + getRenderedValue(v); + }).join(' '); + } else { + return '' + getRenderedValue(value); + } + } + } else if (strValue != null) { + return strValue; + } + } + + return null; + } +}; + +styfn$5.getAnimationStartStyle = function (ele, aniProps) { + var rstyle = {}; + + for (var i = 0; i < aniProps.length; i++) { + var aniProp = aniProps[i]; + var name = aniProp.name; + var styleProp = ele.pstyle(name); + + if (styleProp !== undefined) { + // then make a prop of it + if (plainObject(styleProp)) { + styleProp = this.parse(name, styleProp.strValue); + } else { + styleProp = this.parse(name, styleProp); + } + } + + if (styleProp) { + rstyle[name] = styleProp; + } + } + + return rstyle; +}; + +styfn$5.getPropsList = function (propsObj) { + var self = this; + var rstyle = []; + var style = propsObj; + var props = self.properties; + + if (style) { + var names = Object.keys(style); + + for (var i = 0; i < names.length; i++) { + var name = names[i]; + var val = style[name]; + var prop = props[name] || props[camel2dash(name)]; + var styleProp = this.parse(prop.name, val); + + if (styleProp) { + rstyle.push(styleProp); + } + } + } + + return rstyle; +}; + +styfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) { + var hash = seed.slice(); + var name, val, strVal, chVal; + var i, j; + + for (i = 0; i < propNames.length; i++) { + name = propNames[i]; + val = ele.pstyle(name, false); + + if (val == null) { + continue; + } else if (val.pfValue != null) { + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } else { + strVal = val.strValue; + + for (j = 0; j < strVal.length; j++) { + chVal = strVal.charCodeAt(j); + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } + } + } + + return hash; +}; + +styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash; + +var styfn$4 = {}; + +styfn$4.appendFromJson = function (json) { + var style = this; + + for (var i = 0; i < json.length; i++) { + var context = json[i]; + var selector = context.selector; + var props = context.style || context.css; + var names = Object.keys(props); + style.selector(selector); // apply selector + + for (var j = 0; j < names.length; j++) { + var name = names[j]; + var value = props[name]; + style.css(name, value); // apply property + } + } + + return style; +}; // accessible cy.style() function + + +styfn$4.fromJson = function (json) { + var style = this; + style.resetToDefault(); + style.appendFromJson(json); + return style; +}; // get json from cy.style() api + + +styfn$4.json = function () { + var json = []; + + for (var i = this.defaultLength; i < this.length; i++) { + var cxt = this[i]; + var selector = cxt.selector; + var props = cxt.properties; + var css = {}; + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + css[prop.name] = prop.strValue; + } + + json.push({ + selector: !selector ? 'core' : selector.toString(), + style: css + }); + } + + return json; +}; + +var styfn$3 = {}; + +styfn$3.appendFromString = function (string) { + var self = this; + var style = this; + var remaining = '' + string; + var selAndBlockStr; + var blockRem; + var propAndValStr; // remove comments from the style string + + remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, ''); + + function removeSelAndBlockFromRemaining() { + // remove the parsed selector and block from the remaining text to parse + if (remaining.length > selAndBlockStr.length) { + remaining = remaining.substr(selAndBlockStr.length); + } else { + remaining = ''; + } + } + + function removePropAndValFromRem() { + // remove the parsed property and value from the remaining block text to parse + if (blockRem.length > propAndValStr.length) { + blockRem = blockRem.substr(propAndValStr.length); + } else { + blockRem = ''; + } + } + + for (;;) { + var nothingLeftToParse = remaining.match(/^\s*$/); + + if (nothingLeftToParse) { + break; + } + + var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); + + if (!selAndBlock) { + warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining); + break; + } + + selAndBlockStr = selAndBlock[0]; // parse the selector + + var selectorStr = selAndBlock[1]; + + if (selectorStr !== 'core') { + var selector = new Selector(selectorStr); + + if (selector.invalid) { + warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr); // skip this selector and block + + removeSelAndBlockFromRemaining(); + continue; + } + } // parse the block of properties and values + + + var blockStr = selAndBlock[2]; + var invalidBlock = false; + blockRem = blockStr; + var props = []; + + for (;;) { + var _nothingLeftToParse = blockRem.match(/^\s*$/); + + if (_nothingLeftToParse) { + break; + } + + var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/); + + if (!propAndVal) { + warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr); + invalidBlock = true; + break; + } + + propAndValStr = propAndVal[0]; + var propStr = propAndVal[1]; + var valStr = propAndVal[2]; + var prop = self.properties[propStr]; + + if (!prop) { + warn('Skipping property: Invalid property name in: ' + propAndValStr); // skip this property in the block + + removePropAndValFromRem(); + continue; + } + + var parsedProp = style.parse(propStr, valStr); + + if (!parsedProp) { + warn('Skipping property: Invalid property definition in: ' + propAndValStr); // skip this property in the block + + removePropAndValFromRem(); + continue; + } + + props.push({ + name: propStr, + val: valStr + }); + removePropAndValFromRem(); + } + + if (invalidBlock) { + removeSelAndBlockFromRemaining(); + break; + } // put the parsed block in the style + + + style.selector(selectorStr); + + for (var i = 0; i < props.length; i++) { + var _prop = props[i]; + style.css(_prop.name, _prop.val); + } + + removeSelAndBlockFromRemaining(); + } + + return style; +}; + +styfn$3.fromString = function (string) { + var style = this; + style.resetToDefault(); + style.appendFromString(string); + return style; +}; + +var styfn$2 = {}; + +(function () { + var number$1 = number; + var rgba = rgbaNoBackRefs; + var hsla = hslaNoBackRefs; + var hex3$1 = hex3; + var hex6$1 = hex6; + + var data = function data(prefix) { + return '^' + prefix + '\\s*\\(\\s*([\\w\\.]+)\\s*\\)$'; + }; + + var mapData = function mapData(prefix) { + var mapArg = number$1 + '|\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1; + return '^' + prefix + '\\s*\\(([\\w\\.]+)\\s*\\,\\s*(' + number$1 + ')\\s*\\,\\s*(' + number$1 + ')\\s*,\\s*(' + mapArg + ')\\s*\\,\\s*(' + mapArg + ')\\)$'; + }; + + var urlRegexes = ['^url\\s*\\(\\s*[\'"]?(.+?)[\'"]?\\s*\\)$', '^(none)$', '^(.+)$']; // each visual style property has a type and needs to be validated according to it + + styfn$2.types = { + time: { + number: true, + min: 0, + units: 's|ms', + implicitUnits: 'ms' + }, + percent: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%' + }, + percentages: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%', + multiple: true + }, + zeroOneNumber: { + number: true, + min: 0, + max: 1, + unitless: true + }, + zeroOneNumbers: { + number: true, + min: 0, + max: 1, + unitless: true, + multiple: true + }, + nOneOneNumber: { + number: true, + min: -1, + max: 1, + unitless: true + }, + nonNegativeInt: { + number: true, + min: 0, + integer: true, + unitless: true + }, + position: { + enums: ['parent', 'origin'] + }, + nodeSize: { + number: true, + min: 0, + enums: ['label'] + }, + number: { + number: true, + unitless: true + }, + numbers: { + number: true, + unitless: true, + multiple: true + }, + positiveNumber: { + number: true, + unitless: true, + min: 0, + strictMin: true + }, + size: { + number: true, + min: 0 + }, + bidirectionalSize: { + number: true + }, + // allows negative + bidirectionalSizeMaybePercent: { + number: true, + allowPercent: true + }, + // allows negative + bidirectionalSizes: { + number: true, + multiple: true + }, + // allows negative + sizeMaybePercent: { + number: true, + min: 0, + allowPercent: true + }, + axisDirection: { + enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto'] + }, + paddingRelativeTo: { + enums: ['width', 'height', 'average', 'min', 'max'] + }, + bgWH: { + number: true, + min: 0, + allowPercent: true, + enums: ['auto'], + multiple: true + }, + bgPos: { + number: true, + allowPercent: true, + multiple: true + }, + bgRelativeTo: { + enums: ['inner', 'include-padding'], + multiple: true + }, + bgRepeat: { + enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'], + multiple: true + }, + bgFit: { + enums: ['none', 'contain', 'cover'], + multiple: true + }, + bgCrossOrigin: { + enums: ['anonymous', 'use-credentials'], + multiple: true + }, + bgClip: { + enums: ['none', 'node'], + multiple: true + }, + bgContainment: { + enums: ['inside', 'over'], + multiple: true + }, + color: { + color: true + }, + colors: { + color: true, + multiple: true + }, + fill: { + enums: ['solid', 'linear-gradient', 'radial-gradient'] + }, + bool: { + enums: ['yes', 'no'] + }, + bools: { + enums: ['yes', 'no'], + multiple: true + }, + lineStyle: { + enums: ['solid', 'dotted', 'dashed'] + }, + lineCap: { + enums: ['butt', 'round', 'square'] + }, + borderStyle: { + enums: ['solid', 'dotted', 'dashed', 'double'] + }, + curveStyle: { + enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi'] + }, + fontFamily: { + regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' + }, + fontStyle: { + enums: ['italic', 'normal', 'oblique'] + }, + fontWeight: { + enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900] + }, + textDecoration: { + enums: ['none', 'underline', 'overline', 'line-through'] + }, + textTransform: { + enums: ['none', 'uppercase', 'lowercase'] + }, + textWrap: { + enums: ['none', 'wrap', 'ellipsis'] + }, + textOverflowWrap: { + enums: ['whitespace', 'anywhere'] + }, + textBackgroundShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle'] + }, + nodeShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'polygon'] + }, + overlayShape: { + enums: ['roundrectangle', 'round-rectangle', 'ellipse'] + }, + compoundIncludeLabels: { + enums: ['include', 'exclude'] + }, + arrowShape: { + enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none'] + }, + arrowFill: { + enums: ['filled', 'hollow'] + }, + display: { + enums: ['element', 'none'] + }, + visibility: { + enums: ['hidden', 'visible'] + }, + zCompoundDepth: { + enums: ['bottom', 'orphan', 'auto', 'top'] + }, + zIndexCompare: { + enums: ['auto', 'manual'] + }, + valign: { + enums: ['top', 'center', 'bottom'] + }, + halign: { + enums: ['left', 'center', 'right'] + }, + justification: { + enums: ['left', 'center', 'right', 'auto'] + }, + text: { + string: true + }, + data: { + mapping: true, + regex: data('data') + }, + layoutData: { + mapping: true, + regex: data('layoutData') + }, + scratch: { + mapping: true, + regex: data('scratch') + }, + mapData: { + mapping: true, + regex: mapData('mapData') + }, + mapLayoutData: { + mapping: true, + regex: mapData('mapLayoutData') + }, + mapScratch: { + mapping: true, + regex: mapData('mapScratch') + }, + fn: { + mapping: true, + fn: true + }, + url: { + regexes: urlRegexes, + singleRegexMatchValue: true + }, + urls: { + regexes: urlRegexes, + singleRegexMatchValue: true, + multiple: true + }, + propList: { + propList: true + }, + angle: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad' + }, + textRotation: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad', + enums: ['none', 'autorotate'] + }, + polygonPointList: { + number: true, + multiple: true, + evenMultiple: true, + min: -1, + max: 1, + unitless: true + }, + edgeDistances: { + enums: ['intersection', 'node-position'] + }, + edgeEndpoint: { + number: true, + multiple: true, + units: '%|px|em|deg|rad', + implicitUnits: 'px', + enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'], + singleEnum: true, + validate: function validate(valArr, unitsArr) { + switch (valArr.length) { + case 2: + // can be % or px only + return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad'; + + case 1: + // can be enum, deg, or rad only + return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad'; + + default: + return false; + } + } + }, + easing: { + regexes: ['^(spring)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$', '^(cubic-bezier)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$'], + enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ'] + }, + gradientDirection: { + enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order + ] + }, + boundsExpansion: { + number: true, + multiple: true, + min: 0, + validate: function validate(valArr) { + var length = valArr.length; + return length === 1 || length === 2 || length === 4; + } + } + }; + var diff = { + zeroNonZero: function zeroNonZero(val1, val2) { + if ((val1 == null || val2 == null) && val1 !== val2) { + return true; // null cases could represent any value + } + + if (val1 == 0 && val2 != 0) { + return true; + } else if (val1 != 0 && val2 == 0) { + return true; + } else { + return false; + } + }, + any: function any(val1, val2) { + return val1 != val2; + }, + emptyNonEmpty: function emptyNonEmpty(str1, str2) { + var empty1 = emptyString(str1); + var empty2 = emptyString(str2); + return empty1 && !empty2 || !empty1 && empty2; + } + }; // define visual style properties + // + // - n.b. adding a new group of props may require updates to updateStyleHints() + // - adding new props to an existing group gets handled automatically + + var t = styfn$2.types; + var mainLabel = [{ + name: 'label', + type: t.text, + triggersBounds: diff.any, + triggersZOrder: diff.emptyNonEmpty + }, { + name: 'text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }]; + var sourceLabel = [{ + name: 'source-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'source-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'source-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var targetLabel = [{ + name: 'target-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'target-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'target-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var labelDimensions = [{ + name: 'font-family', + type: t.fontFamily, + triggersBounds: diff.any + }, { + name: 'font-style', + type: t.fontStyle, + triggersBounds: diff.any + }, { + name: 'font-weight', + type: t.fontWeight, + triggersBounds: diff.any + }, { + name: 'font-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-transform', + type: t.textTransform, + triggersBounds: diff.any + }, { + name: 'text-wrap', + type: t.textWrap, + triggersBounds: diff.any + }, { + name: 'text-overflow-wrap', + type: t.textOverflowWrap, + triggersBounds: diff.any + }, { + name: 'text-max-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-outline-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'line-height', + type: t.positiveNumber, + triggersBounds: diff.any + }]; + var commonLabel = [{ + name: 'text-valign', + type: t.valign, + triggersBounds: diff.any + }, { + name: 'text-halign', + type: t.halign, + triggersBounds: diff.any + }, { + name: 'color', + type: t.color + }, { + name: 'text-outline-color', + type: t.color + }, { + name: 'text-outline-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-color', + type: t.color + }, { + name: 'text-background-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-opacity', + type: t.zeroOneNumber + }, { + name: 'text-border-color', + type: t.color + }, { + name: 'text-border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-style', + type: t.borderStyle, + triggersBounds: diff.any + }, { + name: 'text-background-shape', + type: t.textBackgroundShape, + triggersBounds: diff.any + }, { + name: 'text-justification', + type: t.justification + }]; + var behavior = [{ + name: 'events', + type: t.bool + }, { + name: 'text-events', + type: t.bool + }]; + var visibility = [{ + name: 'display', + type: t.display, + triggersZOrder: diff.any, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'visibility', + type: t.visibility, + triggersZOrder: diff.any + }, { + name: 'opacity', + type: t.zeroOneNumber, + triggersZOrder: diff.zeroNonZero + }, { + name: 'text-opacity', + type: t.zeroOneNumber + }, { + name: 'min-zoomed-font-size', + type: t.size + }, { + name: 'z-compound-depth', + type: t.zCompoundDepth, + triggersZOrder: diff.any + }, { + name: 'z-index-compare', + type: t.zIndexCompare, + triggersZOrder: diff.any + }, { + name: 'z-index', + type: t.nonNegativeInt, + triggersZOrder: diff.any + }]; + var overlay = [{ + name: 'overlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'overlay-color', + type: t.color + }, { + name: 'overlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'overlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var underlay = [{ + name: 'underlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'underlay-color', + type: t.color + }, { + name: 'underlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'underlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var transition = [{ + name: 'transition-property', + type: t.propList + }, { + name: 'transition-duration', + type: t.time + }, { + name: 'transition-delay', + type: t.time + }, { + name: 'transition-timing-function', + type: t.easing + }]; + + var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) { + if (parsedProp.value === 'label') { + return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway) + } else { + return parsedProp.pfValue; + } + }; + + var nodeBody = [{ + name: 'height', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'width', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'shape', + type: t.nodeShape, + triggersBounds: diff.any + }, { + name: 'shape-polygon-points', + type: t.polygonPointList, + triggersBounds: diff.any + }, { + name: 'background-color', + type: t.color + }, { + name: 'background-fill', + type: t.fill + }, { + name: 'background-opacity', + type: t.zeroOneNumber + }, { + name: 'background-blacken', + type: t.nOneOneNumber + }, { + name: 'background-gradient-stop-colors', + type: t.colors + }, { + name: 'background-gradient-stop-positions', + type: t.percentages + }, { + name: 'background-gradient-direction', + type: t.gradientDirection + }, { + name: 'padding', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'padding-relative-to', + type: t.paddingRelativeTo, + triggersBounds: diff.any + }, { + name: 'bounds-expansion', + type: t.boundsExpansion, + triggersBounds: diff.any + }]; + var nodeBorder = [{ + name: 'border-color', + type: t.color + }, { + name: 'border-opacity', + type: t.zeroOneNumber + }, { + name: 'border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'border-style', + type: t.borderStyle + }]; + var backgroundImage = [{ + name: 'background-image', + type: t.urls + }, { + name: 'background-image-crossorigin', + type: t.bgCrossOrigin + }, { + name: 'background-image-opacity', + type: t.zeroOneNumbers + }, { + name: 'background-image-containment', + type: t.bgContainment + }, { + name: 'background-image-smoothing', + type: t.bools + }, { + name: 'background-position-x', + type: t.bgPos + }, { + name: 'background-position-y', + type: t.bgPos + }, { + name: 'background-width-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-height-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-repeat', + type: t.bgRepeat + }, { + name: 'background-fit', + type: t.bgFit + }, { + name: 'background-clip', + type: t.bgClip + }, { + name: 'background-width', + type: t.bgWH + }, { + name: 'background-height', + type: t.bgWH + }, { + name: 'background-offset-x', + type: t.bgPos + }, { + name: 'background-offset-y', + type: t.bgPos + }]; + var compound = [{ + name: 'position', + type: t.position, + triggersBounds: diff.any + }, { + name: 'compound-sizing-wrt-labels', + type: t.compoundIncludeLabels, + triggersBounds: diff.any + }, { + name: 'min-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-width-bias-left', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-width-bias-right', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-height-bias-top', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height-bias-bottom', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }]; + var edgeLine = [{ + name: 'line-style', + type: t.lineStyle + }, { + name: 'line-color', + type: t.color + }, { + name: 'line-fill', + type: t.fill + }, { + name: 'line-cap', + type: t.lineCap + }, { + name: 'line-opacity', + type: t.zeroOneNumber + }, { + name: 'line-dash-pattern', + type: t.numbers + }, { + name: 'line-dash-offset', + type: t.number + }, { + name: 'line-gradient-stop-colors', + type: t.colors + }, { + name: 'line-gradient-stop-positions', + type: t.percentages + }, { + name: 'curve-style', + type: t.curveStyle, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'haystack-radius', + type: t.zeroOneNumber, + triggersBounds: diff.any + }, { + name: 'source-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'target-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'control-point-step-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'control-point-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'control-point-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'segment-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'segment-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'taxi-turn', + type: t.bidirectionalSizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'taxi-turn-min-distance', + type: t.size, + triggersBounds: diff.any + }, { + name: 'taxi-direction', + type: t.axisDirection, + triggersBounds: diff.any + }, { + name: 'edge-distances', + type: t.edgeDistances, + triggersBounds: diff.any + }, { + name: 'arrow-scale', + type: t.positiveNumber, + triggersBounds: diff.any + }, { + name: 'loop-direction', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'loop-sweep', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'source-distance-from-node', + type: t.size, + triggersBounds: diff.any + }, { + name: 'target-distance-from-node', + type: t.size, + triggersBounds: diff.any + }]; + var ghost = [{ + name: 'ghost', + type: t.bool, + triggersBounds: diff.any + }, { + name: 'ghost-offset-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-offset-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-opacity', + type: t.zeroOneNumber + }]; + var core = [{ + name: 'selection-box-color', + type: t.color + }, { + name: 'selection-box-opacity', + type: t.zeroOneNumber + }, { + name: 'selection-box-border-color', + type: t.color + }, { + name: 'selection-box-border-width', + type: t.size + }, { + name: 'active-bg-color', + type: t.color + }, { + name: 'active-bg-opacity', + type: t.zeroOneNumber + }, { + name: 'active-bg-size', + type: t.size + }, { + name: 'outside-texture-bg-color', + type: t.color + }, { + name: 'outside-texture-bg-opacity', + type: t.zeroOneNumber + }]; // pie backgrounds for nodes + + var pie = []; + styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use) + + pie.push({ + name: 'pie-size', + type: t.sizeMaybePercent + }); + + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + pie.push({ + name: 'pie-' + i + '-background-color', + type: t.color + }); + pie.push({ + name: 'pie-' + i + '-background-size', + type: t.percent + }); + pie.push({ + name: 'pie-' + i + '-background-opacity', + type: t.zeroOneNumber + }); + } // edge arrows + + + var edgeArrow = []; + var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target']; + [{ + name: 'arrow-shape', + type: t.arrowShape, + triggersBounds: diff.any + }, { + name: 'arrow-color', + type: t.color + }, { + name: 'arrow-fill', + type: t.arrowFill + }].forEach(function (prop) { + arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var type = prop.type, + triggersBounds = prop.triggersBounds; + edgeArrow.push({ + name: name, + type: type, + triggersBounds: triggersBounds + }); + }); + }, {}); + var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, backgroundImage, pie, compound, edgeLine, edgeArrow, core); + var propGroups = styfn$2.propertyGroups = { + // common to all eles + behavior: behavior, + transition: transition, + visibility: visibility, + overlay: overlay, + underlay: underlay, + ghost: ghost, + // labels + commonLabel: commonLabel, + labelDimensions: labelDimensions, + mainLabel: mainLabel, + sourceLabel: sourceLabel, + targetLabel: targetLabel, + // node props + nodeBody: nodeBody, + nodeBorder: nodeBorder, + backgroundImage: backgroundImage, + pie: pie, + compound: compound, + // edge props + edgeLine: edgeLine, + edgeArrow: edgeArrow, + core: core + }; + var propGroupNames = styfn$2.propertyGroupNames = {}; + var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups); + propGroupKeys.forEach(function (key) { + propGroupNames[key] = propGroups[key].map(function (prop) { + return prop.name; + }); + propGroups[key].forEach(function (prop) { + return prop.groupKey = key; + }); + }); // define aliases + + var aliases = styfn$2.aliases = [{ + name: 'content', + pointsTo: 'label' + }, { + name: 'control-point-distance', + pointsTo: 'control-point-distances' + }, { + name: 'control-point-weight', + pointsTo: 'control-point-weights' + }, { + name: 'edge-text-rotation', + pointsTo: 'text-rotation' + }, { + name: 'padding-left', + pointsTo: 'padding' + }, { + name: 'padding-right', + pointsTo: 'padding' + }, { + name: 'padding-top', + pointsTo: 'padding' + }, { + name: 'padding-bottom', + pointsTo: 'padding' + }]; // list of property names + + styfn$2.propertyNames = props.map(function (p) { + return p.name; + }); // allow access of properties by name ( e.g. style.properties.height ) + + for (var _i = 0; _i < props.length; _i++) { + var prop = props[_i]; + props[prop.name] = prop; // allow lookup by name + } // map aliases + + + for (var _i2 = 0; _i2 < aliases.length; _i2++) { + var alias = aliases[_i2]; + var pointsToProp = props[alias.pointsTo]; + var aliasProp = { + name: alias.name, + alias: true, + pointsTo: pointsToProp + }; // add alias prop for parsing + + props.push(aliasProp); + props[alias.name] = aliasProp; // allow lookup by name + } +})(); + +styfn$2.getDefaultProperty = function (name) { + return this.getDefaultProperties()[name]; +}; + +styfn$2.getDefaultProperties = function () { + var _p = this._private; + + if (_p.defaultProperties != null) { + return _p.defaultProperties; + } + + var rawProps = extend({ + // core props + 'selection-box-color': '#ddd', + 'selection-box-opacity': 0.65, + 'selection-box-border-color': '#aaa', + 'selection-box-border-width': 1, + 'active-bg-color': 'black', + 'active-bg-opacity': 0.15, + 'active-bg-size': 30, + 'outside-texture-bg-color': '#000', + 'outside-texture-bg-opacity': 0.125, + // common node/edge props + 'events': 'yes', + 'text-events': 'no', + 'text-valign': 'top', + 'text-halign': 'center', + 'text-justification': 'auto', + 'line-height': 1, + 'color': '#000', + 'text-outline-color': '#000', + 'text-outline-width': 0, + 'text-outline-opacity': 1, + 'text-opacity': 1, + 'text-decoration': 'none', + 'text-transform': 'none', + 'text-wrap': 'none', + 'text-overflow-wrap': 'whitespace', + 'text-max-width': 9999, + 'text-background-color': '#000', + 'text-background-opacity': 0, + 'text-background-shape': 'rectangle', + 'text-background-padding': 0, + 'text-border-opacity': 0, + 'text-border-width': 0, + 'text-border-style': 'solid', + 'text-border-color': '#000', + 'font-family': 'Helvetica Neue, Helvetica, sans-serif', + 'font-style': 'normal', + 'font-weight': 'normal', + 'font-size': 16, + 'min-zoomed-font-size': 0, + 'text-rotation': 'none', + 'source-text-rotation': 'none', + 'target-text-rotation': 'none', + 'visibility': 'visible', + 'display': 'element', + 'opacity': 1, + 'z-compound-depth': 'auto', + 'z-index-compare': 'auto', + 'z-index': 0, + 'label': '', + 'text-margin-x': 0, + 'text-margin-y': 0, + 'source-label': '', + 'source-text-offset': 0, + 'source-text-margin-x': 0, + 'source-text-margin-y': 0, + 'target-label': '', + 'target-text-offset': 0, + 'target-text-margin-x': 0, + 'target-text-margin-y': 0, + 'overlay-opacity': 0, + 'overlay-color': '#000', + 'overlay-padding': 10, + 'overlay-shape': 'round-rectangle', + 'underlay-opacity': 0, + 'underlay-color': '#000', + 'underlay-padding': 10, + 'underlay-shape': 'round-rectangle', + 'transition-property': 'none', + 'transition-duration': 0, + 'transition-delay': 0, + 'transition-timing-function': 'linear', + // node props + 'background-blacken': 0, + 'background-color': '#999', + 'background-fill': 'solid', + 'background-opacity': 1, + 'background-image': 'none', + 'background-image-crossorigin': 'anonymous', + 'background-image-opacity': 1, + 'background-image-containment': 'inside', + 'background-image-smoothing': 'yes', + 'background-position-x': '50%', + 'background-position-y': '50%', + 'background-offset-x': 0, + 'background-offset-y': 0, + 'background-width-relative-to': 'include-padding', + 'background-height-relative-to': 'include-padding', + 'background-repeat': 'no-repeat', + 'background-fit': 'none', + 'background-clip': 'node', + 'background-width': 'auto', + 'background-height': 'auto', + 'border-color': '#000', + 'border-opacity': 1, + 'border-width': 0, + 'border-style': 'solid', + 'height': 30, + 'width': 30, + 'shape': 'ellipse', + 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1', + 'bounds-expansion': 0, + // node gradient + 'background-gradient-direction': 'to-bottom', + 'background-gradient-stop-colors': '#999', + 'background-gradient-stop-positions': '0%', + // ghost props + 'ghost': 'no', + 'ghost-offset-y': 0, + 'ghost-offset-x': 0, + 'ghost-opacity': 0, + // compound props + 'padding': 0, + 'padding-relative-to': 'width', + 'position': 'origin', + 'compound-sizing-wrt-labels': 'include', + 'min-width': 0, + 'min-width-bias-left': 0, + 'min-width-bias-right': 0, + 'min-height': 0, + 'min-height-bias-top': 0, + 'min-height-bias-bottom': 0 + }, { + // node pie bg + 'pie-size': '100%' + }, [{ + name: 'pie-{{i}}-background-color', + value: 'black' + }, { + name: 'pie-{{i}}-background-size', + value: '0%' + }, { + name: 'pie-{{i}}-background-opacity', + value: 1 + }].reduce(function (css, prop) { + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + var name = prop.name.replace('{{i}}', i); + var val = prop.value; + css[name] = val; + } + + return css; + }, {}), { + // edge props + 'line-style': 'solid', + 'line-color': '#999', + 'line-fill': 'solid', + 'line-cap': 'butt', + 'line-opacity': 1, + 'line-gradient-stop-colors': '#999', + 'line-gradient-stop-positions': '0%', + 'control-point-step-size': 40, + 'control-point-weights': 0.5, + 'segment-weights': 0.5, + 'segment-distances': 20, + 'taxi-turn': '50%', + 'taxi-turn-min-distance': 10, + 'taxi-direction': 'auto', + 'edge-distances': 'intersection', + 'curve-style': 'haystack', + 'haystack-radius': 0, + 'arrow-scale': 1, + 'loop-direction': '-45deg', + 'loop-sweep': '-90deg', + 'source-distance-from-node': 0, + 'target-distance-from-node': 0, + 'source-endpoint': 'outside-to-node', + 'target-endpoint': 'outside-to-node', + 'line-dash-pattern': [6, 3], + 'line-dash-offset': 0 + }, [{ + name: 'arrow-shape', + value: 'none' + }, { + name: 'arrow-color', + value: '#999' + }, { + name: 'arrow-fill', + value: 'filled' + }].reduce(function (css, prop) { + styfn$2.arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var val = prop.value; + css[name] = val; + }); + return css; + }, {})); + var parsedProps = {}; + + for (var i = 0; i < this.properties.length; i++) { + var prop = this.properties[i]; + + if (prop.pointsTo) { + continue; + } + + var name = prop.name; + var val = rawProps[name]; + var parsedProp = this.parse(name, val); + parsedProps[name] = parsedProp; + } + + _p.defaultProperties = parsedProps; + return _p.defaultProperties; +}; + +styfn$2.addDefaultStylesheet = function () { + this.selector(':parent').css({ + 'shape': 'rectangle', + 'padding': 10, + 'background-color': '#eee', + 'border-color': '#ccc', + 'border-width': 1 + }).selector('edge').css({ + 'width': 3 + }).selector(':loop').css({ + 'curve-style': 'bezier' + }).selector('edge:compound').css({ + 'curve-style': 'bezier', + 'source-endpoint': 'outside-to-line', + 'target-endpoint': 'outside-to-line' + }).selector(':selected').css({ + 'background-color': '#0169D9', + 'line-color': '#0169D9', + 'source-arrow-color': '#0169D9', + 'target-arrow-color': '#0169D9', + 'mid-source-arrow-color': '#0169D9', + 'mid-target-arrow-color': '#0169D9' + }).selector(':parent:selected').css({ + 'background-color': '#CCE1F9', + 'border-color': '#aec8e5' + }).selector(':active').css({ + 'overlay-color': 'black', + 'overlay-padding': 10, + 'overlay-opacity': 0.25 + }); + this.defaultLength = this.length; +}; + +var styfn$1 = {}; // a caching layer for property parsing + +styfn$1.parse = function (name, value, propIsBypass, propIsFlat) { + var self = this; // function values can't be cached in all cases, and there isn't much benefit of caching them anyway + + if (fn$6(value)) { + return self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } + + var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat; + var bypassKey = propIsBypass ? 't' : 'f'; + var valueKey = '' + value; + var argHash = hashStrings(name, valueKey, bypassKey, flatKey); + var propCache = self.propCache = self.propCache || []; + var ret; + + if (!(ret = propCache[argHash])) { + ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden + // - mappings can't be shared b/c mappings are per-element + + + if (propIsBypass || propIsFlat === 'mapping') { + // need a copy since props are mutated later in their lifecycles + ret = copy(ret); + + if (ret) { + ret.value = copy(ret.value); // because it could be an array, e.g. colour + } + } + + return ret; +}; + +styfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) { + var prop = this.parseImpl(name, value, propIsBypass, propIsFlat); + + if (!prop && value != null) { + warn("The style property `".concat(name, ": ").concat(value, "` is invalid")); + } + + if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') { + warn('The style value of `label` is deprecated for `' + prop.name + '`'); + } + + return prop; +}; // parse a property; return null on invalid; return parsed property otherwise +// fields : +// - name : the name of the property +// - value : the parsed, native-typed value of the property +// - strValue : a string value that represents the property value in valid css +// - bypass : true iff the property is a bypass property + + +styfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) { + var self = this; + name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName') + + var property = self.properties[name]; + var passedValue = value; + var types = self.types; + + if (!property) { + return null; + } // return null on property of unknown name + + + if (value === undefined) { + return null; + } // can't assign undefined + // the property may be an alias + + + if (property.alias) { + property = property.pointsTo; + name = property.name; + } + + var valueIsString = string(value); + + if (valueIsString) { + // trim the value to make parsing easier + value = value.trim(); + } + + var type = property.type; + + if (!type) { + return null; + } // no type, no luck + // check if bypass is null or empty string (i.e. indication to delete bypass property) + + + if (propIsBypass && (value === '' || value === null)) { + return { + name: name, + value: value, + bypass: true, + deleteBypass: true + }; + } // check if value is a function used as a mapper + + + if (fn$6(value)) { + return { + name: name, + value: value, + strValue: 'fn', + mapped: types.fn, + bypass: propIsBypass + }; + } // check if value is mapped + + + var data, mapData; + + if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + + var mapped = types.data; + return { + name: name, + value: data, + strValue: '' + value, + mapped: mapped, + field: data[1], + bypass: propIsBypass + }; + } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + + if (type.multiple) { + return false; + } // impossible to map to num + + + var _mapped = types.mapData; // we can map only if the type is a colour or a number + + if (!(type.color || type.number)) { + return false; + } + + var valueMin = this.parse(name, mapData[4]); // parse to validate + + if (!valueMin || valueMin.mapped) { + return false; + } // can't be invalid or mapped + + + var valueMax = this.parse(name, mapData[5]); // parse to validate + + if (!valueMax || valueMax.mapped) { + return false; + } // can't be invalid or mapped + // check if valueMin and valueMax are the same + + + if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) { + warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`'); + return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range + } else if (type.color) { + var c1 = valueMin.value; + var c2 = valueMax.value; + var same = c1[0] === c2[0] // red + && c1[1] === c2[1] // green + && c1[2] === c2[2] // blue + && ( // optional alpha + c1[3] === c2[3] // same alpha outright + || (c1[3] == null || c1[3] === 1 // full opacity for colour 1? + ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2? + ); + + if (same) { + return false; + } // can't make a mapper without a range + + } + + return { + name: name, + value: mapData, + strValue: '' + value, + mapped: _mapped, + field: mapData[1], + fieldMin: parseFloat(mapData[2]), + // min & max are numeric + fieldMax: parseFloat(mapData[3]), + valueMin: valueMin.value, + valueMax: valueMax.value, + bypass: propIsBypass + }; + } + + if (type.multiple && propIsFlat !== 'multiple') { + var vals; + + if (valueIsString) { + vals = value.split(/\s+/); + } else if (array(value)) { + vals = value; + } else { + vals = [value]; + } + + if (type.evenMultiple && vals.length % 2 !== 0) { + return null; + } + + var valArr = []; + var unitsArr = []; + var pfValArr = []; + var strVal = ''; + var hasEnum = false; + + for (var i = 0; i < vals.length; i++) { + var p = self.parse(name, vals[i], propIsBypass, 'multiple'); + hasEnum = hasEnum || string(p.value); + valArr.push(p.value); + pfValArr.push(p.pfValue != null ? p.pfValue : p.value); + unitsArr.push(p.units); + strVal += (i > 0 ? ' ' : '') + p.strValue; + } + + if (type.validate && !type.validate(valArr, unitsArr)) { + return null; + } + + if (type.singleEnum && hasEnum) { + if (valArr.length === 1 && string(valArr[0])) { + return { + name: name, + value: valArr[0], + strValue: valArr[0], + bypass: propIsBypass + }; + } else { + return null; + } + } + + return { + name: name, + value: valArr, + pfValue: pfValArr, + strValue: strVal, + bypass: propIsBypass, + units: unitsArr + }; + } // several types also allow enums + + + var checkEnums = function checkEnums() { + for (var _i = 0; _i < type.enums.length; _i++) { + var en = type.enums[_i]; + + if (en === value) { + return { + name: name, + value: value, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + + return null; + }; // check the type and return the appropriate object + + + if (type.number) { + var units; + var implicitUnits = 'px'; // not set => px + + if (type.units) { + // use specified units if set + units = type.units; + } + + if (type.implicitUnits) { + implicitUnits = type.implicitUnits; + } + + if (!type.unitless) { + if (valueIsString) { + var unitsRegex = 'px|em' + (type.allowPercent ? '|\\%' : ''); + + if (units) { + unitsRegex = units; + } // only allow explicit units if so set + + + var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$'); + + if (match) { + value = match[1]; + units = match[2] || implicitUnits; + } + } else if (!units || type.implicitUnits) { + units = implicitUnits; // implicitly px if unspecified + } + } + + value = parseFloat(value); // if not a number and enums not allowed, then the value is invalid + + if (isNaN(value) && type.enums === undefined) { + return null; + } // check if this number type also accepts special keywords in place of numbers + // (i.e. `left`, `auto`, etc) + + + if (isNaN(value) && type.enums !== undefined) { + value = passedValue; + return checkEnums(); + } // check if value must be an integer + + + if (type.integer && !integer(value)) { + return null; + } // check value is within range + + + if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) { + return null; + } + + var ret = { + name: name, + value: value, + strValue: '' + value + (units ? units : ''), + units: units, + bypass: propIsBypass + }; // normalise value in pixels + + if (type.unitless || units !== 'px' && units !== 'em') { + ret.pfValue = value; + } else { + ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value; + } // normalise value in ms + + + if (units === 'ms' || units === 's') { + ret.pfValue = units === 'ms' ? value : 1000 * value; + } // normalise value in rad + + + if (units === 'deg' || units === 'rad') { + ret.pfValue = units === 'rad' ? value : deg2rad(value); + } // normalize value in % + + + if (units === '%') { + ret.pfValue = value / 100; + } + + return ret; + } else if (type.propList) { + var props = []; + var propsStr = '' + value; + + if (propsStr === 'none') ; else { + // go over each prop + var propsSplit = propsStr.split(/\s*,\s*|\s+/); + + for (var _i2 = 0; _i2 < propsSplit.length; _i2++) { + var propName = propsSplit[_i2].trim(); + + if (self.properties[propName]) { + props.push(propName); + } else { + warn('`' + propName + '` is not a valid property name'); + } + } + + if (props.length === 0) { + return null; + } + } + + return { + name: name, + value: props, + strValue: props.length === 0 ? 'none' : props.join(' '), + bypass: propIsBypass + }; + } else if (type.color) { + var tuple = color2tuple(value); + + if (!tuple) { + return null; + } + + return { + name: name, + value: tuple, + pfValue: tuple, + strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')', + // n.b. no spaces b/c of multiple support + bypass: propIsBypass + }; + } else if (type.regex || type.regexes) { + // first check enums + if (type.enums) { + var enumProp = checkEnums(); + + if (enumProp) { + return enumProp; + } + } + + var regexes = type.regexes ? type.regexes : [type.regex]; + + for (var _i3 = 0; _i3 < regexes.length; _i3++) { + var regex = new RegExp(regexes[_i3]); // make a regex from the type string + + var m = regex.exec(value); + + if (m) { + // regex matches + return { + name: name, + value: type.singleRegexMatchValue ? m[1] : m, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + + return null; // didn't match any + } else if (type.string) { + // just return + return { + name: name, + value: '' + value, + strValue: '' + value, + bypass: propIsBypass + }; + } else if (type.enums) { + // check enums last because it's a combo type in others + return checkEnums(); + } else { + return null; // not a type we can handle + } +}; + +var Style = function Style(cy) { + if (!(this instanceof Style)) { + return new Style(cy); + } + + if (!core(cy)) { + error('A style must have a core reference'); + return; + } + + this._private = { + cy: cy, + coreStyle: {} + }; + this.length = 0; + this.resetToDefault(); +}; + +var styfn = Style.prototype; + +styfn.instanceString = function () { + return 'style'; +}; // remove all contexts + + +styfn.clear = function () { + var _p = this._private; + var cy = _p.cy; + var eles = cy.elements(); + + for (var i = 0; i < this.length; i++) { + this[i] = undefined; + } + + this.length = 0; + _p.contextStyles = {}; + _p.propDiffs = {}; + this.cleanElements(eles, true); + eles.forEach(function (ele) { + var ele_p = ele[0]._private; + ele_p.styleDirty = true; + ele_p.appliedInitStyle = false; + }); + return this; // chaining +}; + +styfn.resetToDefault = function () { + this.clear(); + this.addDefaultStylesheet(); + return this; +}; // builds a style object for the 'core' selector + + +styfn.core = function (propName) { + return this._private.coreStyle[propName] || this.getDefaultProperty(propName); +}; // create a new context from the specified selector string and switch to that context + + +styfn.selector = function (selectorStr) { + // 'core' is a special case and does not need a selector + var selector = selectorStr === 'core' ? null : new Selector(selectorStr); + var i = this.length++; // new context means new index + + this[i] = { + selector: selector, + properties: [], + mappedProperties: [], + index: i + }; + return this; // chaining +}; // add one or many css rules to the current context + + +styfn.css = function () { + var self = this; + var args = arguments; + + if (args.length === 1) { + var map = args[0]; + + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var mapVal = map[prop.name]; + + if (mapVal === undefined) { + mapVal = map[dash2camel(prop.name)]; + } + + if (mapVal !== undefined) { + this.cssRule(prop.name, mapVal); + } + } + } else if (args.length === 2) { + this.cssRule(args[0], args[1]); + } // do nothing if args are invalid + + + return this; // chaining +}; + +styfn.style = styfn.css; // add a single css rule to the current context + +styfn.cssRule = function (name, value) { + // name-value pair + var property = this.parse(name, value); // add property to current context if valid + + if (property) { + var i = this.length - 1; + this[i].properties.push(property); + this[i].properties[property.name] = property; // allow access by name as well + + if (property.name.match(/pie-(\d+)-background-size/) && property.value) { + this._private.hasPie = true; + } + + if (property.mapped) { + this[i].mappedProperties.push(property); + } // add to core style if necessary + + + var currentSelectorIsCore = !this[i].selector; + + if (currentSelectorIsCore) { + this._private.coreStyle[property.name] = property; + } + } + + return this; // chaining +}; + +styfn.append = function (style) { + if (stylesheet(style)) { + style.appendToStyle(this); + } else if (array(style)) { + this.appendFromJson(style); + } else if (string(style)) { + this.appendFromString(style); + } // you probably wouldn't want to append a Style, since you'd duplicate the default parts + + + return this; +}; // static function + + +Style.fromJson = function (cy, json) { + var style = new Style(cy); + style.fromJson(json); + return style; +}; + +Style.fromString = function (cy, string) { + return new Style(cy).fromString(string); +}; + +[styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) { + extend(styfn, props); +}); +Style.types = styfn.types; +Style.properties = styfn.properties; +Style.propertyGroups = styfn.propertyGroups; +Style.propertyGroupNames = styfn.propertyGroupNames; +Style.propertyGroupKeys = styfn.propertyGroupKeys; + +var corefn$2 = { + style: function style(newStyle) { + if (newStyle) { + var s = this.setStyle(newStyle); + s.update(); + } + + return this._private.style; + }, + setStyle: function setStyle(style) { + var _p = this._private; + + if (stylesheet(style)) { + _p.style = style.generateStyle(this); + } else if (array(style)) { + _p.style = Style.fromJson(this, style); + } else if (string(style)) { + _p.style = Style.fromString(this, style); + } else { + _p.style = Style(this); + } + + return _p.style; + }, + // e.g. cy.data() changed => recalc ele mappers + updateStyle: function updateStyle() { + this.mutableElements().updateStyle(); // just send to all eles + } +}; + +var defaultSelectionType = 'single'; +var corefn$1 = { + autolock: function autolock(bool) { + if (bool !== undefined) { + this._private.autolock = bool ? true : false; + } else { + return this._private.autolock; + } + + return this; // chaining + }, + autoungrabify: function autoungrabify(bool) { + if (bool !== undefined) { + this._private.autoungrabify = bool ? true : false; + } else { + return this._private.autoungrabify; + } + + return this; // chaining + }, + autounselectify: function autounselectify(bool) { + if (bool !== undefined) { + this._private.autounselectify = bool ? true : false; + } else { + return this._private.autounselectify; + } + + return this; // chaining + }, + selectionType: function selectionType(selType) { + var _p = this._private; + + if (_p.selectionType == null) { + _p.selectionType = defaultSelectionType; + } + + if (selType !== undefined) { + if (selType === 'additive' || selType === 'single') { + _p.selectionType = selType; + } + } else { + return _p.selectionType; + } + + return this; + }, + panningEnabled: function panningEnabled(bool) { + if (bool !== undefined) { + this._private.panningEnabled = bool ? true : false; + } else { + return this._private.panningEnabled; + } + + return this; // chaining + }, + userPanningEnabled: function userPanningEnabled(bool) { + if (bool !== undefined) { + this._private.userPanningEnabled = bool ? true : false; + } else { + return this._private.userPanningEnabled; + } + + return this; // chaining + }, + zoomingEnabled: function zoomingEnabled(bool) { + if (bool !== undefined) { + this._private.zoomingEnabled = bool ? true : false; + } else { + return this._private.zoomingEnabled; + } + + return this; // chaining + }, + userZoomingEnabled: function userZoomingEnabled(bool) { + if (bool !== undefined) { + this._private.userZoomingEnabled = bool ? true : false; + } else { + return this._private.userZoomingEnabled; + } + + return this; // chaining + }, + boxSelectionEnabled: function boxSelectionEnabled(bool) { + if (bool !== undefined) { + this._private.boxSelectionEnabled = bool ? true : false; + } else { + return this._private.boxSelectionEnabled; + } + + return this; // chaining + }, + pan: function pan() { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + + switch (args.length) { + case 0: + // .pan() + return pan; + + case 1: + if (string(args[0])) { + // .pan('x') + dim = args[0]; + return pan[dim]; + } else if (plainObject(args[0])) { + // .pan({ x: 0, y: 100 }) + if (!this._private.panningEnabled) { + return this; + } + + dims = args[0]; + x = dims.x; + y = dims.y; + + if (number$1(x)) { + pan.x = x; + } + + if (number$1(y)) { + pan.y = y; + } + + this.emit('pan viewport'); + } + + break; + + case 2: + // .pan('x', 100) + if (!this._private.panningEnabled) { + return this; + } + + dim = args[0]; + val = args[1]; + + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] = val; + } + + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + panBy: function panBy(arg0, arg1) { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + + if (!this._private.panningEnabled) { + return this; + } + + switch (args.length) { + case 1: + if (plainObject(arg0)) { + // .panBy({ x: 0, y: 100 }) + dims = args[0]; + x = dims.x; + y = dims.y; + + if (number$1(x)) { + pan.x += x; + } + + if (number$1(y)) { + pan.y += y; + } + + this.emit('pan viewport'); + } + + break; + + case 2: + // .panBy('x', 100) + dim = arg0; + val = arg1; + + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] += val; + } + + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + fit: function fit(elements, padding) { + var viewportState = this.getFitViewport(elements, padding); + + if (viewportState) { + var _p = this._private; + _p.zoom = viewportState.zoom; + _p.pan = viewportState.pan; + this.emit('pan zoom viewport'); + this.notify('viewport'); + } + + return this; // chaining + }, + getFitViewport: function getFitViewport(elements, padding) { + if (number$1(elements) && padding === undefined) { + // elements is optional + padding = elements; + elements = undefined; + } + + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return; + } + + var bb; + + if (string(elements)) { + var sel = elements; + elements = this.$(sel); + } else if (boundingBox(elements)) { + // assume bb + var bbe = elements; + bb = { + x1: bbe.x1, + y1: bbe.y1, + x2: bbe.x2, + y2: bbe.y2 + }; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + + if (elementOrCollection(elements) && elements.empty()) { + return; + } // can't fit to nothing + + + bb = bb || elements.boundingBox(); + var w = this.width(); + var h = this.height(); + var zoom; + padding = number$1(padding) ? padding : 0; + + if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { + zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h); // crop zoom + + zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom; + zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom; + var pan = { + // now pan to middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return { + zoom: zoom, + pan: pan + }; + } + + return; + }, + zoomRange: function zoomRange(min, max) { + var _p = this._private; + + if (max == null) { + var opts = min; + min = opts.min; + max = opts.max; + } + + if (number$1(min) && number$1(max) && min <= max) { + _p.minZoom = min; + _p.maxZoom = max; + } else if (number$1(min) && max === undefined && min <= _p.maxZoom) { + _p.minZoom = min; + } else if (number$1(max) && min === undefined && max >= _p.minZoom) { + _p.maxZoom = max; + } + + return this; + }, + minZoom: function minZoom(zoom) { + if (zoom === undefined) { + return this._private.minZoom; + } else { + return this.zoomRange({ + min: zoom + }); + } + }, + maxZoom: function maxZoom(zoom) { + if (zoom === undefined) { + return this._private.maxZoom; + } else { + return this.zoomRange({ + max: zoom + }); + } + }, + getZoomedViewport: function getZoomedViewport(params) { + var _p = this._private; + var currentPan = _p.pan; + var currentZoom = _p.zoom; + var pos; // in rendered px + + var zoom; + var bail = false; + + if (!_p.zoomingEnabled) { + // zooming disabled + bail = true; + } + + if (number$1(params)) { + // then set the zoom + zoom = params; + } else if (plainObject(params)) { + // then zoom about a point + zoom = params.level; + + if (params.position != null) { + pos = modelToRenderedPosition(params.position, currentZoom, currentPan); + } else if (params.renderedPosition != null) { + pos = params.renderedPosition; + } + + if (pos != null && !_p.panningEnabled) { + // panning disabled + bail = true; + } + } // crop zoom + + + zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom; + zoom = zoom < _p.minZoom ? _p.minZoom : zoom; // can't zoom with invalid params + + if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) { + return null; + } + + if (pos != null) { + // set zoom about position + var pan1 = currentPan; + var zoom1 = currentZoom; + var zoom2 = zoom; + var pan2 = { + x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x, + y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y + }; + return { + zoomed: true, + panned: true, + zoom: zoom2, + pan: pan2 + }; + } else { + // just set the zoom + return { + zoomed: true, + panned: false, + zoom: zoom, + pan: currentPan + }; + } + }, + zoom: function zoom(params) { + if (params === undefined) { + // get + return this._private.zoom; + } else { + // set + var vp = this.getZoomedViewport(params); + var _p = this._private; + + if (vp == null || !vp.zoomed) { + return this; + } + + _p.zoom = vp.zoom; + + if (vp.panned) { + _p.pan.x = vp.pan.x; + _p.pan.y = vp.pan.y; + } + + this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport'); + this.notify('viewport'); + return this; // chaining + } + }, + viewport: function viewport(opts) { + var _p = this._private; + var zoomDefd = true; + var panDefd = true; + var events = []; // to trigger + + var zoomFailed = false; + var panFailed = false; + + if (!opts) { + return this; + } + + if (!number$1(opts.zoom)) { + zoomDefd = false; + } + + if (!plainObject(opts.pan)) { + panDefd = false; + } + + if (!zoomDefd && !panDefd) { + return this; + } + + if (zoomDefd) { + var z = opts.zoom; + + if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) { + zoomFailed = true; + } else { + _p.zoom = z; + events.push('zoom'); + } + } + + if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) { + var p = opts.pan; + + if (number$1(p.x)) { + _p.pan.x = p.x; + panFailed = false; + } + + if (number$1(p.y)) { + _p.pan.y = p.y; + panFailed = false; + } + + if (!panFailed) { + events.push('pan'); + } + } + + if (events.length > 0) { + events.push('viewport'); + this.emit(events.join(' ')); + this.notify('viewport'); + } + + return this; // chaining + }, + center: function center(elements) { + var pan = this.getCenterPan(elements); + + if (pan) { + this._private.pan = pan; + this.emit('pan viewport'); + this.notify('viewport'); + } + + return this; // chaining + }, + getCenterPan: function getCenterPan(elements, zoom) { + if (!this._private.panningEnabled) { + return; + } + + if (string(elements)) { + var selector = elements; + elements = this.mutableElements().filter(selector); + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + + if (elements.length === 0) { + return; + } // can't centre pan to nothing + + + var bb = elements.boundingBox(); + var w = this.width(); + var h = this.height(); + zoom = zoom === undefined ? this._private.zoom : zoom; + var pan = { + // middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return pan; + }, + reset: function reset() { + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return this; + } + + this.viewport({ + pan: { + x: 0, + y: 0 + }, + zoom: 1 + }); + return this; // chaining + }, + invalidateSize: function invalidateSize() { + this._private.sizeCache = null; + }, + size: function size() { + var _p = this._private; + var container = _p.container; + return _p.sizeCache = _p.sizeCache || (container ? function () { + var style = window$1.getComputedStyle(container); + + var val = function val(name) { + return parseFloat(style.getPropertyValue(name)); + }; + + return { + width: container.clientWidth - val('padding-left') - val('padding-right'), + height: container.clientHeight - val('padding-top') - val('padding-bottom') + }; + }() : { + // fallback if no container (not 0 b/c can be used for dividing etc) + width: 1, + height: 1 + }); + }, + width: function width() { + return this.size().width; + }, + height: function height() { + return this.size().height; + }, + extent: function extent() { + var pan = this._private.pan; + var zoom = this._private.zoom; + var rb = this.renderedExtent(); + var b = { + x1: (rb.x1 - pan.x) / zoom, + x2: (rb.x2 - pan.x) / zoom, + y1: (rb.y1 - pan.y) / zoom, + y2: (rb.y2 - pan.y) / zoom + }; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + return b; + }, + renderedExtent: function renderedExtent() { + var width = this.width(); + var height = this.height(); + return { + x1: 0, + y1: 0, + x2: width, + y2: height, + w: width, + h: height + }; + }, + multiClickDebounceTime: function multiClickDebounceTime(_int) { + if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime; + return this; // chaining + } +}; // aliases + +corefn$1.centre = corefn$1.center; // backwards compatibility + +corefn$1.autolockNodes = corefn$1.autolock; +corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; + +var fn = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }) +}; // aliases + +fn.attr = fn.data; +fn.removeAttr = fn.removeData; + +var Core = function Core(opts) { + var cy = this; + opts = extend({}, opts); + var container = opts.container; // allow for passing a wrapped jquery object + // e.g. cytoscape({ container: $('#cy') }) + + if (container && !htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + + var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery + + reg = reg || {}; + + if (reg && reg.cy) { + reg.cy.destroy(); + reg = {}; // old instance => replace reg completely + } + + var readies = reg.readies = reg.readies || []; + + if (container) { + container._cyreg = reg; + } // make sure container assoc'd reg points to this cy + + + reg.cy = cy; + var head = window$1 !== undefined && container !== undefined && !opts.headless; + var options = opts; + options.layout = extend({ + name: head ? 'grid' : 'null' + }, options.layout); + options.renderer = extend({ + name: head ? 'canvas' : 'null' + }, options.renderer); + + var defVal = function defVal(def, val, altVal) { + if (val !== undefined) { + return val; + } else if (altVal !== undefined) { + return altVal; + } else { + return def; + } + }; + + var _p = this._private = { + container: container, + // html dom ele container + ready: false, + // whether ready has been triggered + options: options, + // cached options + elements: new Collection(this), + // elements in the graph + listeners: [], + // list of listeners + aniEles: new Collection(this), + // elements being animated + data: options.data || {}, + // data for the core + scratch: {}, + // scratch object for core + layout: null, + renderer: null, + destroyed: false, + // whether destroy was called + notificationsEnabled: true, + // whether notifications are sent to the renderer + minZoom: 1e-50, + maxZoom: 1e50, + zoomingEnabled: defVal(true, options.zoomingEnabled), + userZoomingEnabled: defVal(true, options.userZoomingEnabled), + panningEnabled: defVal(true, options.panningEnabled), + userPanningEnabled: defVal(true, options.userPanningEnabled), + boxSelectionEnabled: defVal(true, options.boxSelectionEnabled), + autolock: defVal(false, options.autolock, options.autolockNodes), + autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes), + autounselectify: defVal(false, options.autounselectify), + styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled, + zoom: number$1(options.zoom) ? options.zoom : 1, + pan: { + x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0, + y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0 + }, + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + hasCompoundNodes: false, + multiClickDebounceTime: defVal(250, options.multiClickDebounceTime) + }; + + this.createEmitter(); // set selection type + + this.selectionType(options.selectionType); // init zoom bounds + + this.zoomRange({ + min: options.minZoom, + max: options.maxZoom + }); + + var loadExtData = function loadExtData(extData, next) { + var anyIsPromise = extData.some(promise); + + if (anyIsPromise) { + return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init + } else { + next(extData); // exec synchronously for convenience + } + }; // start with the default stylesheet so we have something before loading an external stylesheet + + + if (_p.styleEnabled) { + cy.setStyle([]); + } // create the renderer + + + var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options + + cy.initRenderer(rendererOptions); + + var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) { + cy.notifications(false); // remove old elements + + var oldEles = cy.mutableElements(); + + if (oldEles.length > 0) { + oldEles.remove(); + } + + if (elements != null) { + if (plainObject(elements) || array(elements)) { + cy.add(elements); + } + } + + cy.one('layoutready', function (e) { + cy.notifications(true); + cy.emit(e); // we missed this event by turning notifications off, so pass it on + + cy.one('load', onload); + cy.emitAndNotify('load'); + }).one('layoutstop', function () { + cy.one('done', ondone); + cy.emit('done'); + }); + var layoutOpts = extend({}, cy._private.options.layout); + layoutOpts.eles = cy.elements(); + cy.layout(layoutOpts).run(); + }; + + loadExtData([options.style, options.elements], function (thens) { + var initStyle = thens[0]; + var initEles = thens[1]; // init style + + if (_p.styleEnabled) { + cy.style().append(initStyle); + } // initial load + + + setElesAndLayout(initEles, function () { + // onready + cy.startAnimationLoop(); + _p.ready = true; // if a ready callback is specified as an option, the bind it + + if (fn$6(options.ready)) { + cy.on('ready', options.ready); + } // bind all the ready handlers registered before creating this instance + + + for (var i = 0; i < readies.length; i++) { + var fn = readies[i]; + cy.on('ready', fn); + } + + if (reg) { + reg.readies = []; + } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc + + + cy.emit('ready'); + }, options.done); + }); +}; + +var corefn = Core.prototype; // short alias + +extend(corefn, { + instanceString: function instanceString() { + return 'core'; + }, + isReady: function isReady() { + return this._private.ready; + }, + destroyed: function destroyed() { + return this._private.destroyed; + }, + ready: function ready(fn) { + if (this.isReady()) { + this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event + } else { + this.on('ready', fn); + } + + return this; + }, + destroy: function destroy() { + var cy = this; + if (cy.destroyed()) return; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + this.emit('destroy'); + cy._private.destroyed = true; + return cy; + }, + hasElementWithId: function hasElementWithId(id) { + return this._private.elements.hasElementWithId(id); + }, + getElementById: function getElementById(id) { + return this._private.elements.getElementById(id); + }, + hasCompoundNodes: function hasCompoundNodes() { + return this._private.hasCompoundNodes; + }, + headless: function headless() { + return this._private.renderer.isHeadless(); + }, + styleEnabled: function styleEnabled() { + return this._private.styleEnabled; + }, + addToPool: function addToPool(eles) { + this._private.elements.merge(eles); + + return this; // chaining + }, + removeFromPool: function removeFromPool(eles) { + this._private.elements.unmerge(eles); + + return this; + }, + container: function container() { + return this._private.container || null; + }, + mount: function mount(container) { + if (container == null) { + return; + } + + var cy = this; + var _p = cy._private; + var options = _p.options; + + if (!htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + + cy.stopAnimationLoop(); + cy.destroyRenderer(); + _p.container = container; + _p.styleEnabled = true; + cy.invalidateSize(); + cy.initRenderer(extend({}, options, options.renderer, { + // allow custom renderer name to be re-used, otherwise use canvas + name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name + })); + cy.startAnimationLoop(); + cy.style(options.style); + cy.emit('mount'); + return cy; + }, + unmount: function unmount() { + var cy = this; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + cy.initRenderer({ + name: 'null' + }); + cy.emit('unmount'); + return cy; + }, + options: function options() { + return copy(this._private.options); + }, + json: function json(obj) { + var cy = this; + var _p = cy._private; + var eles = cy.mutableElements(); + + var getFreshRef = function getFreshRef(ele) { + return cy.getElementById(ele.id()); + }; + + if (plainObject(obj)) { + // set + cy.startBatch(); + + if (obj.elements) { + var idInJson = {}; + + var updateEles = function updateEles(jsons, gr) { + var toAdd = []; + var toMod = []; + + for (var i = 0; i < jsons.length; i++) { + var json = jsons[i]; + + if (!json.data.id) { + warn('cy.json() cannot handle elements without an ID attribute'); + continue; + } + + var id = '' + json.data.id; // id must be string + + var ele = cy.getElementById(id); + idInJson[id] = true; + + if (ele.length !== 0) { + // existing element should be updated + toMod.push({ + ele: ele, + json: json + }); + } else { + // otherwise should be added + if (gr) { + json.group = gr; + toAdd.push(json); + } else { + toAdd.push(json); + } + } + } + + cy.add(toAdd); + + for (var _i = 0; _i < toMod.length; _i++) { + var _toMod$_i = toMod[_i], + _ele = _toMod$_i.ele, + _json = _toMod$_i.json; + + _ele.json(_json); + } + }; + + if (array(obj.elements)) { + // elements: [] + updateEles(obj.elements); + } else { + // elements: { nodes: [], edges: [] } + var grs = ['nodes', 'edges']; + + for (var i = 0; i < grs.length; i++) { + var gr = grs[i]; + var elements = obj.elements[gr]; + + if (array(elements)) { + updateEles(elements, gr); + } + } + } + + var parentsToRemove = cy.collection(); + eles.filter(function (ele) { + return !idInJson[ele.id()]; + }).forEach(function (ele) { + if (ele.isParent()) { + parentsToRemove.merge(ele); + } else { + ele.remove(); + } + }); // so that children are not removed w/parent + + parentsToRemove.forEach(function (ele) { + return ele.children().move({ + parent: null + }); + }); // intermediate parents may be moved by prior line, so make sure we remove by fresh refs + + parentsToRemove.forEach(function (ele) { + return getFreshRef(ele).remove(); + }); + } + + if (obj.style) { + cy.style(obj.style); + } + + if (obj.zoom != null && obj.zoom !== _p.zoom) { + cy.zoom(obj.zoom); + } + + if (obj.pan) { + if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) { + cy.pan(obj.pan); + } + } + + if (obj.data) { + cy.data(obj.data); + } + + var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime']; + + for (var _i2 = 0; _i2 < fields.length; _i2++) { + var f = fields[_i2]; + + if (obj[f] != null) { + cy[f](obj[f]); + } + } + + cy.endBatch(); + return this; // chaining + } else { + // get + var flat = !!obj; + var json = {}; + + if (flat) { + json.elements = this.elements().map(function (ele) { + return ele.json(); + }); + } else { + json.elements = {}; + eles.forEach(function (ele) { + var group = ele.group(); + + if (!json.elements[group]) { + json.elements[group] = []; + } + + json.elements[group].push(ele.json()); + }); + } + + if (this._private.styleEnabled) { + json.style = cy.style().json(); + } + + json.data = copy(cy.data()); + var options = _p.options; + json.zoomingEnabled = _p.zoomingEnabled; + json.userZoomingEnabled = _p.userZoomingEnabled; + json.zoom = _p.zoom; + json.minZoom = _p.minZoom; + json.maxZoom = _p.maxZoom; + json.panningEnabled = _p.panningEnabled; + json.userPanningEnabled = _p.userPanningEnabled; + json.pan = copy(_p.pan); + json.boxSelectionEnabled = _p.boxSelectionEnabled; + json.renderer = copy(options.renderer); + json.hideEdgesOnViewport = options.hideEdgesOnViewport; + json.textureOnViewport = options.textureOnViewport; + json.wheelSensitivity = options.wheelSensitivity; + json.motionBlur = options.motionBlur; + json.multiClickDebounceTime = options.multiClickDebounceTime; + return json; + } + } +}); +corefn.$id = corefn.getElementById; +[corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) { + extend(corefn, props); +}); + +/* eslint-disable no-unused-vars */ + +var defaults$7 = { + fit: true, + // whether to fit the viewport to the graph + directed: false, + // whether the tree is directed downwards (or edges can point in any direction if false) + padding: 30, + // padding on fit + circle: false, + // put depths in concentric circles if true, put depths top down if false + grid: false, + // whether to create an even grid into which the DAG is placed (circle:false only) + spacingFactor: 1.75, + // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + roots: undefined, + // the roots of the trees + maximal: false, + // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only) + depthSort: undefined, + // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled, + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + +}; +/* eslint-enable */ + +var getInfo = function getInfo(ele) { + return ele.scratch('breadthfirst'); +}; + +var setInfo = function setInfo(ele, obj) { + return ele.scratch('breadthfirst', obj); +}; + +function BreadthFirstLayout(options) { + this.options = extend({}, defaults$7, options); +} + +BreadthFirstLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().filter(function (n) { + return !n.isParent(); + }); + var graph = eles; + var directed = options.directed; + var maximal = options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var roots; + + if (elementOrCollection(options.roots)) { + roots = options.roots; + } else if (array(options.roots)) { + var rootsArray = []; + + for (var i = 0; i < options.roots.length; i++) { + var id = options.roots[i]; + var ele = cy.getElementById(id); + rootsArray.push(ele); + } + + roots = cy.collection(rootsArray); + } else if (string(options.roots)) { + roots = cy.$(options.roots); + } else { + if (directed) { + roots = nodes.roots(); + } else { + var components = eles.components(); + roots = cy.collection(); + + var _loop = function _loop(_i) { + var comp = components[_i]; + var maxDegree = comp.maxDegree(false); + var compRoots = comp.filter(function (ele) { + return ele.degree(false) === maxDegree; + }); + roots = roots.add(compRoots); + }; + + for (var _i = 0; _i < components.length; _i++) { + _loop(_i); + } + } + } + + var depths = []; + var foundByBfs = {}; + + var addToDepth = function addToDepth(ele, d) { + if (depths[d] == null) { + depths[d] = []; + } + + var i = depths[d].length; + depths[d].push(ele); + setInfo(ele, { + index: i, + depth: d + }); + }; + + var changeDepth = function changeDepth(ele, newDepth) { + var _getInfo = getInfo(ele), + depth = _getInfo.depth, + index = _getInfo.index; + + depths[depth][index] = null; + addToDepth(ele, newDepth); + }; // find the depths of the nodes + + + graph.bfs({ + roots: roots, + directed: options.directed, + visit: function visit(node, edge, pNode, i, depth) { + var ele = node[0]; + var id = ele.id(); + addToDepth(ele, depth); + foundByBfs[id] = true; + } + }); // check for nodes not found by bfs + + var orphanNodes = []; + + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + + if (foundByBfs[_ele.id()]) { + continue; + } else { + orphanNodes.push(_ele); + } + } // assign the nodes a depth and index + + + var assignDepthsAt = function assignDepthsAt(i) { + var eles = depths[i]; + + for (var j = 0; j < eles.length; j++) { + var _ele2 = eles[j]; + + if (_ele2 == null) { + eles.splice(j, 1); + j--; + continue; + } + + setInfo(_ele2, { + depth: i, + index: j + }); + } + }; + + var assignDepths = function assignDepths() { + for (var _i3 = 0; _i3 < depths.length; _i3++) { + assignDepthsAt(_i3); + } + }; + + var adjustMaximally = function adjustMaximally(ele, shifted) { + var eInfo = getInfo(ele); + var incomers = ele.incomers().filter(function (el) { + return el.isNode() && eles.has(el); + }); + var maxDepth = -1; + var id = ele.id(); + + for (var k = 0; k < incomers.length; k++) { + var incmr = incomers[k]; + var iInfo = getInfo(incmr); + maxDepth = Math.max(maxDepth, iInfo.depth); + } + + if (eInfo.depth <= maxDepth) { + if (shifted[id]) { + return null; + } + + changeDepth(ele, maxDepth + 1); + shifted[id] = true; + return true; + } + + return false; + }; // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1) + + + if (directed && maximal) { + var Q = []; + var shifted = {}; + + var enqueue = function enqueue(n) { + return Q.push(n); + }; + + var dequeue = function dequeue() { + return Q.shift(); + }; + + nodes.forEach(function (n) { + return Q.push(n); + }); + + while (Q.length > 0) { + var _ele3 = dequeue(); + + var didShift = adjustMaximally(_ele3, shifted); + + if (didShift) { + _ele3.outgoers().filter(function (el) { + return el.isNode() && eles.has(el); + }).forEach(enqueue); + } else if (didShift === null) { + warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.'); + break; // exit on failure + } + } + } + + assignDepths(); // clear holes + // find min distance we need to leave between nodes + + var minDistance = 0; + + if (options.avoidOverlap) { + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var n = nodes[_i4]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + } // get the weighted percent for an element based on its connectivity to other levels + + + var cachedWeightedPercent = {}; + + var getWeightedPercent = function getWeightedPercent(ele) { + if (cachedWeightedPercent[ele.id()]) { + return cachedWeightedPercent[ele.id()]; + } + + var eleDepth = getInfo(ele).depth; + var neighbors = ele.neighborhood(); + var percent = 0; + var samples = 0; + + for (var _i5 = 0; _i5 < neighbors.length; _i5++) { + var neighbor = neighbors[_i5]; + + if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) { + continue; + } + + var bf = getInfo(neighbor); + + if (bf == null) { + continue; + } + + var index = bf.index; + var depth = bf.depth; // unassigned neighbours shouldn't affect the ordering + + if (index == null || depth == null) { + continue; + } + + var nDepth = depths[depth].length; + + if (depth < eleDepth) { + // only get influenced by elements above + percent += index / nDepth; + samples++; + } + } + + samples = Math.max(1, samples); + percent = percent / samples; + + if (samples === 0) { + // put lone nodes at the start + percent = 0; + } + + cachedWeightedPercent[ele.id()] = percent; + return percent; + }; // rearrange the indices in each depth level based on connectivity + + + var sortFn = function sortFn(a, b) { + var apct = getWeightedPercent(a); + var bpct = getWeightedPercent(b); + var diff = apct - bpct; + + if (diff === 0) { + return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons + } else { + return diff; + } + }; + + if (options.depthSort !== undefined) { + sortFn = options.depthSort; + } // sort each level to make connected nodes closer + + + for (var _i6 = 0; _i6 < depths.length; _i6++) { + depths[_i6].sort(sortFn); + + assignDepthsAt(_i6); + } // assign orphan nodes to a new top-level depth + + + var orphanDepth = []; + + for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) { + orphanDepth.push(orphanNodes[_i7]); + } + + depths.unshift(orphanDepth); + assignDepths(); + var biggestDepthSize = 0; + + for (var _i8 = 0; _i8 < depths.length; _i8++) { + biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); + } + + var center = { + x: bb.x1 + bb.w / 2, + y: bb.x1 + bb.h / 2 + }; + var maxDepthSize = depths.reduce(function (max, eles) { + return Math.max(max, eles.length); + }, 0); + + var getPosition = function getPosition(ele) { + var _getInfo2 = getInfo(ele), + depth = _getInfo2.depth, + index = _getInfo2.index; + + var depthSize = depths[depth].length; + var distanceX = Math.max(bb.w / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance); + var distanceY = Math.max(bb.h / (depths.length + 1), minDistance); + var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length); + radiusStepSize = Math.max(radiusStepSize, minDistance); + + if (!options.circle) { + var epos = { + x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX, + y: (depth + 1) * distanceY + }; + return epos; + } else { + var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0); + var theta = 2 * Math.PI / depths[depth].length * index; + + if (depth === 0 && depths[0].length === 1) { + radius = 1; + } + + return { + x: center.x + radius * Math.cos(theta), + y: center.y + radius * Math.sin(theta) + }; + } + }; + + eles.nodes().layoutPositions(this, options, getPosition); + return this; // chaining +}; + +var defaults$6 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox and radius if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + radius: undefined, + // the radius of the circle + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + +}; + +function CircleLayout(options) { + this.options = extend({}, defaults$6, options); +} + +CircleLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var nodes = eles.nodes().not(':parent'); + + if (options.sort) { + nodes = nodes.sort(options.sort); + } + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep; + var dTheta = sweep / Math.max(1, nodes.length - 1); + var r; + var minDistance = 0; + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + + if (number$1(options.radius)) { + r = options.radius; + } else if (nodes.length <= 1) { + r = 0; + } else { + r = Math.min(bb.h, bb.w) / 2 - minDistance; + } // calculate the radius + + + if (nodes.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + minDistance *= 1.75; // just to have some nice spacing + + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + + var getPos = function getPos(ele, i) { + var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1); + var rx = r * Math.cos(theta); + var ry = r * Math.sin(theta); + var pos = { + x: center.x + rx, + y: center.y + ry + }; + return pos; + }; + + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining +}; + +var defaults$5 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + equidistant: false, + // whether levels have an equal radial distance betwen them, may cause bounding box overflow + minNodeSpacing: 10, + // min spacing between outside of nodes (used for radius adjustment) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + height: undefined, + // height of layout area (overrides container height) + width: undefined, + // width of layout area (overrides container width) + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + concentric: function concentric(node) { + // returns numeric value for each node, placing higher nodes in levels towards the centre + return node.degree(); + }, + levelWidth: function levelWidth(nodes) { + // the variation of concentric values in each level + return nodes.maxDegree() / 4; + }, + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + +}; + +function ConcentricLayout(options) { + this.options = extend({}, defaults$5, options); +} + +ConcentricLayout.prototype.run = function () { + var params = this.options; + var options = params; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var nodeValues = []; // { node, value } + + var maxNodeSize = 0; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var value = void 0; // calculate the node value + + value = options.concentric(node); + nodeValues.push({ + value: value, + node: node + }); // for style mapping + + node._private.scratch.concentric = value; + } // in case we used the `concentric` in style + + + nodes.updateStyle(); // calculate max size now based on potentially updated mappers + + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + + var nbb = _node.layoutDimensions(options); + + maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); + } // sort node values in descreasing order + + + nodeValues.sort(function (a, b) { + return b.value - a.value; + }); + var levelWidth = options.levelWidth(nodes); // put the values into levels + + var levels = [[]]; + var currentLevel = levels[0]; + + for (var _i2 = 0; _i2 < nodeValues.length; _i2++) { + var val = nodeValues[_i2]; + + if (currentLevel.length > 0) { + var diff = Math.abs(currentLevel[0].value - val.value); + + if (diff >= levelWidth) { + currentLevel = []; + levels.push(currentLevel); + } + } + + currentLevel.push(val); + } // create positions from levels + + + var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes + + if (!options.avoidOverlap) { + // then strictly constrain to bb + var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; + var maxR = Math.min(bb.w, bb.h) / 2 - minDist; + var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0); + minDist = Math.min(minDist, rStep); + } // find the metrics for each level + + + var r = 0; + + for (var _i3 = 0; _i3 < levels.length; _i3++) { + var level = levels[_i3]; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep; + var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); // calculate the radius + + if (level.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + + level.r = r; + r += minDist; + } + + if (options.equidistant) { + var rDeltaMax = 0; + var _r = 0; + + for (var _i4 = 0; _i4 < levels.length; _i4++) { + var _level = levels[_i4]; + var rDelta = _level.r - _r; + rDeltaMax = Math.max(rDeltaMax, rDelta); + } + + _r = 0; + + for (var _i5 = 0; _i5 < levels.length; _i5++) { + var _level2 = levels[_i5]; + + if (_i5 === 0) { + _r = _level2.r; + } + + _level2.r = _r; + _r += rDeltaMax; + } + } // calculate the node positions + + + var pos = {}; // id => position + + for (var _i6 = 0; _i6 < levels.length; _i6++) { + var _level3 = levels[_i6]; + var _dTheta = _level3.dTheta; + var _r2 = _level3.r; + + for (var j = 0; j < _level3.length; j++) { + var _val = _level3[j]; + var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j; + var p = { + x: center.x + _r2 * Math.cos(theta), + y: center.y + _r2 * Math.sin(theta) + }; + pos[_val.node.id()] = p; + } + } // position the nodes + + + eles.nodes().layoutPositions(this, options, function (ele) { + var id = ele.id(); + return pos[id]; + }); + return this; // chaining +}; + +/* +The CoSE layout was written by Gerardo Huck. +https://www.linkedin.com/in/gerardohuck/ + +Based on the following article: +http://dl.acm.org/citation.cfm?id=1498047 + +Modifications tracked on Github. +*/ +var DEBUG; +/** + * @brief : default layout options + */ + +var defaults$4 = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // Whether to animate while running the layout + // true : Animate continuously as the layout is running + // false : Just show the end result + // 'end' : Animate with the end result, from the initial positions to the end positions + animate: true, + // Easing of the animation for animate:'end' + animationEasing: undefined, + // The duration of the animation for animate:'end' + animationDuration: undefined, + // A function that determines whether the node should be animated + // All nodes animated by default on animate enabled + // Non-animated nodes are positioned immediately when the layout starts + animateFilter: function animateFilter(node, i) { + return true; + }, + // The layout animates only after this many milliseconds for animate:true + // (prevents flashing on fast runs) + animationThreshold: 250, + // Number of iterations between consecutive screen positions update + refresh: 20, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 30, + // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + boundingBox: undefined, + // Excludes the label when calculating node bounding boxes for the layout algorithm + nodeDimensionsIncludeLabels: false, + // Randomize the initial positions of the nodes (true) or use existing positions (false) + randomize: false, + // Extra spacing between components in non-compound graphs + componentSpacing: 40, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: function nodeRepulsion(node) { + return 2048; + }, + // Node repulsion (overlapping) multiplier + nodeOverlap: 4, + // Ideal edge (non nested) length + idealEdgeLength: function idealEdgeLength(edge) { + return 32; + }, + // Divisor to compute edge forces + edgeElasticity: function edgeElasticity(edge) { + return 32; + }, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 1.2, + // Gravity force (constant) + gravity: 1, + // Maximum number of iterations to perform + numIter: 1000, + // Initial temperature (maximum node displacement) + initialTemp: 1000, + // Cooling factor (how the temperature is reduced between consecutive iterations + coolingFactor: 0.99, + // Lower temperature threshold (below this point the layout will end) + minTemp: 1.0 +}; +/** + * @brief : constructor + * @arg options : object containing layout options + */ + +function CoseLayout(options) { + this.options = extend({}, defaults$4, options); + this.options.layout = this; +} +/** + * @brief : runs the layout + */ + + +CoseLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var layout = this; + layout.stopped = false; + + if (options.animate === true || options.animate === false) { + layout.emit({ + type: 'layoutstart', + layout: layout + }); + } // Set DEBUG - Global variable + + + if (true === options.debug) { + DEBUG = true; + } else { + DEBUG = false; + } // Initialize layout info + + + var layoutInfo = createLayoutInfo(cy, layout, options); // Show LayoutInfo contents if debugging + + if (DEBUG) { + printLayoutInfo(layoutInfo); + } // If required, randomize node positions + + + if (options.randomize) { + randomizePositions(layoutInfo); + } + + var startTime = performanceNow(); + + var refresh = function refresh() { + refreshPositions(layoutInfo, cy, options); // Fit the graph if necessary + + if (true === options.fit) { + cy.fit(options.padding); + } + }; + + var mainLoop = function mainLoop(i) { + if (layout.stopped || i >= options.numIter) { + // logDebug("Layout manually stopped. Stopping computation in step " + i); + return false; + } // Do one step in the phisical simulation + + + step(layoutInfo, options); // Update temperature + + layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; // logDebug("New temperature: " + layoutInfo.temperature); + + if (layoutInfo.temperature < options.minTemp) { + // logDebug("Temperature drop below minimum threshold. Stopping computation in step " + i); + return false; + } + + return true; + }; + + var done = function done() { + if (options.animate === true || options.animate === false) { + refresh(); // Layout has finished + + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } else { + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.layoutPositions(layout, options, getScaledPos); + } + }; + + var i = 0; + var loopRet = true; + + if (options.animate === true) { + var frame = function frame() { + var f = 0; + + while (loopRet && f < options.refresh) { + loopRet = mainLoop(i); + i++; + f++; + } + + if (!loopRet) { + // it's done + separateComponents(layoutInfo, options); + done(); + } else { + var now = performanceNow(); + + if (now - startTime >= options.animationThreshold) { + refresh(); + } + + requestAnimationFrame(frame); + } + }; + + frame(); + } else { + while (loopRet) { + loopRet = mainLoop(i); + i++; + } + + separateComponents(layoutInfo, options); + done(); + } + + return this; // chaining +}; +/** + * @brief : called on continuous layouts to stop them before they finish + */ + + +CoseLayout.prototype.stop = function () { + this.stopped = true; + + if (this.thread) { + this.thread.stop(); + } + + this.emit('layoutstop'); + return this; // chaining +}; + +CoseLayout.prototype.destroy = function () { + if (this.thread) { + this.thread.stop(); + } + + return this; // chaining +}; +/** + * @brief : Creates an object which is contains all the data + * used in the layout process + * @arg cy : cytoscape.js object + * @return : layoutInfo object initialized + */ + + +var createLayoutInfo = function createLayoutInfo(cy, layout, options) { + // Shortcut + var edges = options.eles.edges(); + var nodes = options.eles.nodes(); + var layoutInfo = { + isCompound: cy.hasCompoundNodes(), + layoutNodes: [], + idToIndex: {}, + nodeSize: nodes.size(), + graphSet: [], + indexToGraph: [], + layoutEdges: [], + edgeSize: edges.size(), + temperature: options.initialTemp, + clientWidth: cy.width(), + clientHeight: cy.width(), + boundingBox: makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }) + }; + var components = options.eles.components(); + var id2cmptId = {}; + + for (var i = 0; i < components.length; i++) { + var component = components[i]; + + for (var j = 0; j < component.length; j++) { + var node = component[j]; + id2cmptId[node.id()] = i; + } + } // Iterate over all nodes, creating layout nodes + + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var tempNode = {}; + tempNode.isLocked = n.locked(); + tempNode.id = n.data('id'); + tempNode.parentId = n.data('parent'); + tempNode.cmptId = id2cmptId[n.id()]; + tempNode.children = []; + tempNode.positionX = n.position('x'); + tempNode.positionY = n.position('y'); + tempNode.offsetX = 0; + tempNode.offsetY = 0; + tempNode.height = nbb.w; + tempNode.width = nbb.h; + tempNode.maxX = tempNode.positionX + tempNode.width / 2; + tempNode.minX = tempNode.positionX - tempNode.width / 2; + tempNode.maxY = tempNode.positionY + tempNode.height / 2; + tempNode.minY = tempNode.positionY - tempNode.height / 2; + tempNode.padLeft = parseFloat(n.style('padding')); + tempNode.padRight = parseFloat(n.style('padding')); + tempNode.padTop = parseFloat(n.style('padding')); + tempNode.padBottom = parseFloat(n.style('padding')); // forces + + tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion; // Add new node + + layoutInfo.layoutNodes.push(tempNode); // Add entry to id-index map + + layoutInfo.idToIndex[tempNode.id] = i; + } // Inline implementation of a queue, used for traversing the graph in BFS order + + + var queue = []; + var start = 0; // Points to the start the queue + + var end = -1; // Points to the end of the queue + + var tempGraph = []; // Second pass to add child information and + // initialize queue for hierarchical traversal + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + var p_id = n.parentId; // Check if node n has a parent node + + if (null != p_id) { + // Add node Id to parent's list of children + layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id); + } else { + // If a node doesn't have a parent, then it's in the root graph + queue[++end] = n.id; + tempGraph.push(n.id); + } + } // Add root graph to graphSet + + + layoutInfo.graphSet.push(tempGraph); // Traverse the graph, level by level, + + while (start <= end) { + // Get the node to visit and remove it from queue + var node_id = queue[start++]; + var node_ix = layoutInfo.idToIndex[node_id]; + var node = layoutInfo.layoutNodes[node_ix]; + var children = node.children; + + if (children.length > 0) { + // Add children nodes as a new graph to graph set + layoutInfo.graphSet.push(children); // Add children to que queue to be visited + + for (var i = 0; i < children.length; i++) { + queue[++end] = children[i]; + } + } + } // Create indexToGraph map + + + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + + for (var j = 0; j < graph.length; j++) { + var index = layoutInfo.idToIndex[graph[j]]; + layoutInfo.indexToGraph[index] = i; + } + } // Iterate over all edges, creating Layout Edges + + + for (var i = 0; i < layoutInfo.edgeSize; i++) { + var e = edges[i]; + var tempEdge = {}; + tempEdge.id = e.data('id'); + tempEdge.sourceId = e.data('source'); + tempEdge.targetId = e.data('target'); // Compute ideal length + + var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength; + var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity; // Check if it's an inter graph edge + + var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId]; + var targetIx = layoutInfo.idToIndex[tempEdge.targetId]; + var sourceGraph = layoutInfo.indexToGraph[sourceIx]; + var targetGraph = layoutInfo.indexToGraph[targetIx]; + + if (sourceGraph != targetGraph) { + // Find lowest common graph ancestor + var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); // Compute sum of node depths, relative to lca graph + + var lcaGraph = layoutInfo.graphSet[lca]; + var depth = 0; // Source depth + + var tempNode = layoutInfo.layoutNodes[sourceIx]; + + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } // Target depth + + + tempNode = layoutInfo.layoutNodes[targetIx]; + + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId + + // ". Index: " + lca + " Contents: " + lcaGraph.toString() + + // ". Depth: " + depth); + // Update idealLength + + + idealLength *= depth * options.nestingFactor; + } + + tempEdge.idealLength = idealLength; + tempEdge.elasticity = elasticity; + layoutInfo.layoutEdges.push(tempEdge); + } // Finally, return layoutInfo object + + + return layoutInfo; +}; +/** + * @brief : This function finds the index of the lowest common + * graph ancestor between 2 nodes in the subtree + * (from the graph hierarchy induced tree) whose + * root is graphIx + * + * @arg node1: node1's ID + * @arg node2: node2's ID + * @arg layoutInfo: layoutInfo object + * + */ + + +var findLCA = function findLCA(node1, node2, layoutInfo) { + // Find their common ancester, starting from the root graph + var res = findLCA_aux(node1, node2, 0, layoutInfo); + + if (2 > res.count) { + // If aux function couldn't find the common ancester, + // then it is the root graph + return 0; + } else { + return res.graph; + } +}; +/** + * @brief : Auxiliary function used for LCA computation + * + * @arg node1 : node1's ID + * @arg node2 : node2's ID + * @arg graphIx : subgraph index + * @arg layoutInfo : layoutInfo object + * + * @return : object of the form {count: X, graph: Y}, where: + * X is the number of ancesters (max: 2) found in + * graphIx (and it's subgraphs), + * Y is the graph index of the lowest graph containing + * all X nodes + */ + + +var findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) { + var graph = layoutInfo.graphSet[graphIx]; // If both nodes belongs to graphIx + + if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) { + return { + count: 2, + graph: graphIx + }; + } // Make recursive calls for all subgraphs + + + var c = 0; + + for (var i = 0; i < graph.length; i++) { + var nodeId = graph[i]; + var nodeIx = layoutInfo.idToIndex[nodeId]; + var children = layoutInfo.layoutNodes[nodeIx].children; // If the node has no child, skip it + + if (0 === children.length) { + continue; + } + + var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]]; + var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo); + + if (0 === result.count) { + // Neither node1 nor node2 are present in this subgraph + continue; + } else if (1 === result.count) { + // One of (node1, node2) is present in this subgraph + c++; + + if (2 === c) { + // We've already found both nodes, no need to keep searching + break; + } + } else { + // Both nodes are present in this subgraph + return result; + } + } + + return { + count: c, + graph: graphIx + }; +}; +/** + * @brief: printsLayoutInfo into js console + * Only used for debbuging + */ + + +var printLayoutInfo; +/** + * @brief : Randomizes the position of all nodes + */ + + +var randomizePositions = function randomizePositions(layoutInfo, cy) { + var width = layoutInfo.clientWidth; + var height = layoutInfo.clientHeight; + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; // No need to randomize compound nodes or locked nodes + + if (0 === n.children.length && !n.isLocked) { + n.positionX = Math.random() * width; + n.positionY = Math.random() * height; + } + } +}; + +var getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) { + var bb = layoutInfo.boundingBox; + var coseBB = { + x1: Infinity, + x2: -Infinity, + y1: Infinity, + y2: -Infinity + }; + + if (options.boundingBox) { + nodes.forEach(function (node) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]]; + coseBB.x1 = Math.min(coseBB.x1, lnode.positionX); + coseBB.x2 = Math.max(coseBB.x2, lnode.positionX); + coseBB.y1 = Math.min(coseBB.y1, lnode.positionY); + coseBB.y2 = Math.max(coseBB.y2, lnode.positionY); + }); + coseBB.w = coseBB.x2 - coseBB.x1; + coseBB.h = coseBB.y2 - coseBB.y1; + } + + return function (ele, i) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]]; + + if (options.boundingBox) { + // then add extra bounding box constraint + var pctX = (lnode.positionX - coseBB.x1) / coseBB.w; + var pctY = (lnode.positionY - coseBB.y1) / coseBB.h; + return { + x: bb.x1 + pctX * bb.w, + y: bb.y1 + pctY * bb.h + }; + } else { + return { + x: lnode.positionX, + y: lnode.positionY + }; + } + }; +}; +/** + * @brief : Updates the positions of nodes in the network + * @arg layoutInfo : LayoutInfo object + * @arg cy : Cytoscape object + * @arg options : Layout options + */ + + +var refreshPositions = function refreshPositions(layoutInfo, cy, options) { + // var s = 'Refreshing positions'; + // logDebug(s); + var layout = options.layout; + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.positions(getScaledPos); // Trigger layoutReady only on first call + + if (true !== layoutInfo.ready) { + // s = 'Triggering layoutready'; + // logDebug(s); + layoutInfo.ready = true; + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: this + }); + } +}; +/** + * @brief : Logs a debug message in JS console, if DEBUG is ON + */ +// var logDebug = function(text) { +// if (DEBUG) { +// console.debug(text); +// } +// }; + +/** + * @brief : Performs one iteration of the physical simulation + * @arg layoutInfo : LayoutInfo object already initialized + * @arg cy : Cytoscape object + * @arg options : Layout options + */ + + +var step = function step(layoutInfo, options, _step) { + // var s = "\n\n###############################"; + // s += "\nSTEP: " + step; + // s += "\n###############################\n"; + // logDebug(s); + // Calculate node repulsions + calculateNodeForces(layoutInfo, options); // Calculate edge forces + + calculateEdgeForces(layoutInfo); // Calculate gravity forces + + calculateGravityForces(layoutInfo, options); // Propagate forces from parent to child + + propagateForces(layoutInfo); // Update positions based on calculated forces + + updatePositions(layoutInfo); +}; +/** + * @brief : Computes the node repulsion forces + */ + + +var calculateNodeForces = function calculateNodeForces(layoutInfo, options) { + // Go through each of the graphs in graphSet + // Nodes only repel each other if they belong to the same graph + // var s = 'calculateNodeForces'; + // logDebug(s); + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; // s = "Set: " + graph.toString(); + // logDebug(s); + // Now get all the pairs of nodes + // Only get each pair once, (A, B) = (B, A) + + for (var j = 0; j < numNodes; j++) { + var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; + + for (var k = j + 1; k < numNodes; k++) { + var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]]; + nodeRepulsion(node1, node2, layoutInfo, options); + } + } + } +}; + +var randomDistance = function randomDistance(max) { + return -max + 2 * max * Math.random(); +}; +/** + * @brief : Compute the node repulsion forces between a pair of nodes + */ + + +var nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) { + // var s = "Node repulsion. Node1: " + node1.id + " Node2: " + node2.id; + var cmptId1 = node1.cmptId; + var cmptId2 = node2.cmptId; + + if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) { + return; + } // Get direction of line connecting both node centers + + + var directionX = node2.positionX - node1.positionX; + var directionY = node2.positionY - node1.positionY; + var maxRandDist = 1; // s += "\ndirectionX: " + directionX + ", directionY: " + directionY; + // If both centers are the same, apply a random force + + if (0 === directionX && 0 === directionY) { + directionX = randomDistance(maxRandDist); + directionY = randomDistance(maxRandDist); + } + + var overlap = nodesOverlap(node1, node2, directionX, directionY); + + if (overlap > 0) { + // s += "\nNodes DO overlap."; + // s += "\nOverlap: " + overlap; + // If nodes overlap, repulsion force is proportional + // to the overlap + var force = options.nodeOverlap * overlap; // Compute the module and components of the force vector + + var distance = Math.sqrt(directionX * directionX + directionY * directionY); // s += "\nDistance: " + distance; + + var forceX = force * directionX / distance; + var forceY = force * directionY / distance; + } else { + // s += "\nNodes do NOT overlap."; + // If there's no overlap, force is inversely proportional + // to squared distance + // Get clipping points for both nodes + var point1 = findClippingPoint(node1, directionX, directionY); + var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY); // Use clipping points to compute distance + + var distanceX = point2.x - point1.x; + var distanceY = point2.y - point1.y; + var distanceSqr = distanceX * distanceX + distanceY * distanceY; + var distance = Math.sqrt(distanceSqr); // s += "\nDistance: " + distance; + // Compute the module and components of the force vector + + var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; + var forceX = force * distanceX / distance; + var forceY = force * distanceY / distance; + } // Apply force + + + if (!node1.isLocked) { + node1.offsetX -= forceX; + node1.offsetY -= forceY; + } + + if (!node2.isLocked) { + node2.offsetX += forceX; + node2.offsetY += forceY; + } // s += "\nForceX: " + forceX + " ForceY: " + forceY; + // logDebug(s); + + + return; +}; +/** + * @brief : Determines whether two nodes overlap or not + * @return : Amount of overlapping (0 => no overlap) + */ + + +var nodesOverlap = function nodesOverlap(node1, node2, dX, dY) { + if (dX > 0) { + var overlapX = node1.maxX - node2.minX; + } else { + var overlapX = node2.maxX - node1.minX; + } + + if (dY > 0) { + var overlapY = node1.maxY - node2.minY; + } else { + var overlapY = node2.maxY - node1.minY; + } + + if (overlapX >= 0 && overlapY >= 0) { + return Math.sqrt(overlapX * overlapX + overlapY * overlapY); + } else { + return 0; + } +}; +/** + * @brief : Finds the point in which an edge (direction dX, dY) intersects + * the rectangular bounding box of it's source/target node + */ + + +var findClippingPoint = function findClippingPoint(node, dX, dY) { + // Shorcuts + var X = node.positionX; + var Y = node.positionY; + var H = node.height || 1; + var W = node.width || 1; + var dirSlope = dY / dX; + var nodeSlope = H / W; // var s = 'Computing clipping point of node ' + node.id + + // " . Height: " + H + ", Width: " + W + + // "\nDirection " + dX + ", " + dY; + // + // Compute intersection + + var res = {}; // Case: Vertical direction (up) + + if (0 === dX && 0 < dY) { + res.x = X; // s += "\nUp direction"; + + res.y = Y + H / 2; + return res; + } // Case: Vertical direction (down) + + + if (0 === dX && 0 > dY) { + res.x = X; + res.y = Y + H / 2; // s += "\nDown direction"; + + return res; + } // Case: Intersects the right border + + + if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X + W / 2; + res.y = Y + W * dY / 2 / dX; // s += "\nRightborder"; + + return res; + } // Case: Intersects the left border + + + if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X - W / 2; + res.y = Y - W * dY / 2 / dX; // s += "\nLeftborder"; + + return res; + } // Case: Intersects the top border + + + if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X + H * dX / 2 / dY; + res.y = Y + H / 2; // s += "\nTop border"; + + return res; + } // Case: Intersects the bottom border + + + if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X - H * dX / 2 / dY; + res.y = Y - H / 2; // s += "\nBottom border"; + + return res; + } // s += "\nClipping point found at " + res.x + ", " + res.y; + // logDebug(s); + + + return res; +}; +/** + * @brief : Calculates all edge forces + */ + + +var calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) { + // Iterate over all edges + for (var i = 0; i < layoutInfo.edgeSize; i++) { + // Get edge, source & target nodes + var edge = layoutInfo.layoutEdges[i]; + var sourceIx = layoutInfo.idToIndex[edge.sourceId]; + var source = layoutInfo.layoutNodes[sourceIx]; + var targetIx = layoutInfo.idToIndex[edge.targetId]; + var target = layoutInfo.layoutNodes[targetIx]; // Get direction of line connecting both node centers + + var directionX = target.positionX - source.positionX; + var directionY = target.positionY - source.positionY; // If both centers are the same, do nothing. + // A random force has already been applied as node repulsion + + if (0 === directionX && 0 === directionY) { + continue; + } // Get clipping points for both nodes + + + var point1 = findClippingPoint(source, directionX, directionY); + var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY); + var lx = point2.x - point1.x; + var ly = point2.y - point1.y; + var l = Math.sqrt(lx * lx + ly * ly); + var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity; + + if (0 !== l) { + var forceX = force * lx / l; + var forceY = force * ly / l; + } else { + var forceX = 0; + var forceY = 0; + } // Add this force to target and source nodes + + + if (!source.isLocked) { + source.offsetX += forceX; + source.offsetY += forceY; + } + + if (!target.isLocked) { + target.offsetX -= forceX; + target.offsetY -= forceY; + } // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id; + // s += "\nDistance: " + l + " Force: (" + forceX + ", " + forceY + ")"; + // logDebug(s); + + } +}; +/** + * @brief : Computes gravity forces for all nodes + */ + + +var calculateGravityForces = function calculateGravityForces(layoutInfo, options) { + if (options.gravity === 0) { + return; + } + + var distThreshold = 1; // var s = 'calculateGravityForces'; + // logDebug(s); + + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; // s = "Set: " + graph.toString(); + // logDebug(s); + // Compute graph center + + if (0 === i) { + var centerX = layoutInfo.clientHeight / 2; + var centerY = layoutInfo.clientWidth / 2; + } else { + // Get Parent node for this graph, and use its position as center + var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]]; + var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; + var centerX = parent.positionX; + var centerY = parent.positionY; + } // s = "Center found at: " + centerX + ", " + centerY; + // logDebug(s); + // Apply force to all nodes in graph + + + for (var j = 0; j < numNodes; j++) { + var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; // s = "Node: " + node.id; + + if (node.isLocked) { + continue; + } + + var dx = centerX - node.positionX; + var dy = centerY - node.positionY; + var d = Math.sqrt(dx * dx + dy * dy); + + if (d > distThreshold) { + var fx = options.gravity * dx / d; + var fy = options.gravity * dy / d; + node.offsetX += fx; + node.offsetY += fy; // s += ": Applied force: " + fx + ", " + fy; + } // logDebug(s); + + } + } +}; +/** + * @brief : This function propagates the existing offsets from + * parent nodes to its descendents. + * @arg layoutInfo : layoutInfo Object + * @arg cy : cytoscape Object + * @arg options : Layout options + */ + + +var propagateForces = function propagateForces(layoutInfo, options) { + // Inline implementation of a queue, used for traversing the graph in BFS order + var queue = []; + var start = 0; // Points to the start the queue + + var end = -1; // Points to the end of the queue + // logDebug('propagateForces'); + // Start by visiting the nodes in the root graph + + queue.push.apply(queue, layoutInfo.graphSet[0]); + end += layoutInfo.graphSet[0].length; // Traverse the graph, level by level, + + while (start <= end) { + // Get the node to visit and remove it from queue + var nodeId = queue[start++]; + var nodeIndex = layoutInfo.idToIndex[nodeId]; + var node = layoutInfo.layoutNodes[nodeIndex]; + var children = node.children; // We only need to process the node if it's compound + + if (0 < children.length && !node.isLocked) { + var offX = node.offsetX; + var offY = node.offsetY; // var s = "Propagating offset from parent node : " + node.id + + // ". OffsetX: " + offX + ". OffsetY: " + offY; + // s += "\n Children: " + children.toString(); + // logDebug(s); + + for (var i = 0; i < children.length; i++) { + var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; // Propagate offset + + childNode.offsetX += offX; + childNode.offsetY += offY; // Add children to queue to be visited + + queue[++end] = children[i]; + } // Reset parent offsets + + + node.offsetX = 0; + node.offsetY = 0; + } + } +}; +/** + * @brief : Updates the layout model positions, based on + * the accumulated forces + */ + + +var updatePositions = function updatePositions(layoutInfo, options) { + // var s = 'Updating positions'; + // logDebug(s); + // Reset boundaries for compound nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length) { + // logDebug("Resetting boundaries of compound node: " + n.id); + n.maxX = undefined; + n.minX = undefined; + n.maxY = undefined; + n.minY = undefined; + } + } + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length || n.isLocked) { + // No need to set compound or locked node position + // logDebug("Skipping position update of node: " + n.id); + continue; + } // s = "Node: " + n.id + " Previous position: (" + + // n.positionX + ", " + n.positionY + ")."; + // Limit displacement in order to improve stability + + + var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature); + n.positionX += tempForce.x; + n.positionY += tempForce.y; + n.offsetX = 0; + n.offsetY = 0; + n.minX = n.positionX - n.width; + n.maxX = n.positionX + n.width; + n.minY = n.positionY - n.height; + n.maxY = n.positionY + n.height; // s += " New Position: (" + n.positionX + ", " + n.positionY + ")."; + // logDebug(s); + // Update ancestry boudaries + + updateAncestryBoundaries(n, layoutInfo); + } // Update size, position of compund nodes + + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length && !n.isLocked) { + n.positionX = (n.maxX + n.minX) / 2; + n.positionY = (n.maxY + n.minY) / 2; + n.width = n.maxX - n.minX; + n.height = n.maxY - n.minY; // s = "Updating position, size of compound node " + n.id; + // s += "\nPositionX: " + n.positionX + ", PositionY: " + n.positionY; + // s += "\nWidth: " + n.width + ", Height: " + n.height; + // logDebug(s); + } + } +}; +/** + * @brief : Limits a force (forceX, forceY) to be not + * greater (in modulo) than max. + 8 Preserves force direction. + */ + + +var limitForce = function limitForce(forceX, forceY, max) { + // var s = "Limiting force: (" + forceX + ", " + forceY + "). Max: " + max; + var force = Math.sqrt(forceX * forceX + forceY * forceY); + + if (force > max) { + var res = { + x: max * forceX / force, + y: max * forceY / force + }; + } else { + var res = { + x: forceX, + y: forceY + }; + } // s += ".\nResult: (" + res.x + ", " + res.y + ")"; + // logDebug(s); + + + return res; +}; +/** + * @brief : Function used for keeping track of compound node + * sizes, since they should bound all their subnodes. + */ + + +var updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) { + // var s = "Propagating new position/size of node " + node.id; + var parentId = node.parentId; + + if (null == parentId) { + // If there's no parent, we are done + // s += ". No parent node."; + // logDebug(s); + return; + } // Get Parent Node + + + var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; + var flag = false; // MaxX + + if (null == p.maxX || node.maxX + p.padRight > p.maxX) { + p.maxX = node.maxX + p.padRight; + flag = true; // s += "\nNew maxX for parent node " + p.id + ": " + p.maxX; + } // MinX + + + if (null == p.minX || node.minX - p.padLeft < p.minX) { + p.minX = node.minX - p.padLeft; + flag = true; // s += "\nNew minX for parent node " + p.id + ": " + p.minX; + } // MaxY + + + if (null == p.maxY || node.maxY + p.padBottom > p.maxY) { + p.maxY = node.maxY + p.padBottom; + flag = true; // s += "\nNew maxY for parent node " + p.id + ": " + p.maxY; + } // MinY + + + if (null == p.minY || node.minY - p.padTop < p.minY) { + p.minY = node.minY - p.padTop; + flag = true; // s += "\nNew minY for parent node " + p.id + ": " + p.minY; + } // If updated boundaries, propagate changes upward + + + if (flag) { + // logDebug(s); + return updateAncestryBoundaries(p, layoutInfo); + } // s += ". No changes in boundaries/position of parent node " + p.id; + // logDebug(s); + + + return; +}; + +var separateComponents = function separateComponents(layoutInfo, options) { + var nodes = layoutInfo.layoutNodes; + var components = []; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var cid = node.cmptId; + var component = components[cid] = components[cid] || []; + component.push(node); + } + + var totalA = 0; + + for (var i = 0; i < components.length; i++) { + var c = components[i]; + + if (!c) { + continue; + } + + c.x1 = Infinity; + c.x2 = -Infinity; + c.y1 = Infinity; + c.y2 = -Infinity; + + for (var j = 0; j < c.length; j++) { + var n = c[j]; + c.x1 = Math.min(c.x1, n.positionX - n.width / 2); + c.x2 = Math.max(c.x2, n.positionX + n.width / 2); + c.y1 = Math.min(c.y1, n.positionY - n.height / 2); + c.y2 = Math.max(c.y2, n.positionY + n.height / 2); + } + + c.w = c.x2 - c.x1; + c.h = c.y2 - c.y1; + totalA += c.w * c.h; + } + + components.sort(function (c1, c2) { + return c2.w * c2.h - c1.w * c1.h; + }); + var x = 0; + var y = 0; + var usedW = 0; + var rowH = 0; + var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight; + + for (var i = 0; i < components.length; i++) { + var c = components[i]; + + if (!c) { + continue; + } + + for (var j = 0; j < c.length; j++) { + var n = c[j]; + + if (!n.isLocked) { + n.positionX += x - c.x1; + n.positionY += y - c.y1; + } + } + + x += c.w + options.componentSpacing; + usedW += c.w + options.componentSpacing; + rowH = Math.max(rowH, c.h); + + if (usedW > maxRowW) { + y += rowH + options.componentSpacing; + x = 0; + usedW = 0; + rowH = 0; + } + } +}; + +var defaults$3 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // padding used on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + avoidOverlapPadding: 10, + // extra spacing around nodes when avoidOverlap: true + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + condense: false, + // uses all available space on false, uses minimal space on true + rows: undefined, + // force num of rows in the grid + cols: undefined, + // force num of columns in the grid + position: function position(node) {}, + // returns { row, col } for element + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + +}; + +function GridLayout(options) { + this.options = extend({}, defaults$3, options); +} + +GridLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + + if (options.sort) { + nodes = nodes.sort(options.sort); + } + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + + if (bb.h === 0 || bb.w === 0) { + eles.nodes().layoutPositions(this, options, function (ele) { + return { + x: bb.x1, + y: bb.y1 + }; + }); + } else { + // width/height * splits^2 = cells where splits is number of times to split width + var cells = nodes.size(); + var splits = Math.sqrt(cells * bb.h / bb.w); + var rows = Math.round(splits); + var cols = Math.round(bb.w / bb.h * splits); + + var small = function small(val) { + if (val == null) { + return Math.min(rows, cols); + } else { + var min = Math.min(rows, cols); + + if (min == rows) { + rows = val; + } else { + cols = val; + } + } + }; + + var large = function large(val) { + if (val == null) { + return Math.max(rows, cols); + } else { + var max = Math.max(rows, cols); + + if (max == rows) { + rows = val; + } else { + cols = val; + } + } + }; + + var oRows = options.rows; + var oCols = options.cols != null ? options.cols : options.columns; // if rows or columns were set in options, use those values + + if (oRows != null && oCols != null) { + rows = oRows; + cols = oCols; + } else if (oRows != null && oCols == null) { + rows = oRows; + cols = Math.ceil(cells / rows); + } else if (oRows == null && oCols != null) { + cols = oCols; + rows = Math.ceil(cells / cols); + } // otherwise use the automatic values and adjust accordingly + // if rounding was up, see if we can reduce rows or columns + else if (cols * rows > cells) { + var sm = small(); + var lg = large(); // reducing the small side takes away the most cells, so try it first + + if ((sm - 1) * lg >= cells) { + small(sm - 1); + } else if ((lg - 1) * sm >= cells) { + large(lg - 1); + } + } else { + // if rounding was too low, add rows or columns + while (cols * rows < cells) { + var _sm = small(); + + var _lg = large(); // try to add to larger side first (adds less in multiplication) + + + if ((_lg + 1) * _sm >= cells) { + large(_lg + 1); + } else { + small(_sm + 1); + } + } + } + + var cellWidth = bb.w / cols; + var cellHeight = bb.h / rows; + + if (options.condense) { + cellWidth = 0; + cellHeight = 0; + } + + if (options.avoidOverlap) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = node._private.position; + + if (pos.x == null || pos.y == null) { + // for bb + pos.x = 0; + pos.y = 0; + } + + var nbb = node.layoutDimensions(options); + var p = options.avoidOverlapPadding; + var w = nbb.w + p; + var h = nbb.h + p; + cellWidth = Math.max(cellWidth, w); + cellHeight = Math.max(cellHeight, h); + } + } + + var cellUsed = {}; // e.g. 'c-0-2' => true + + var used = function used(row, col) { + return cellUsed['c-' + row + '-' + col] ? true : false; + }; + + var use = function use(row, col) { + cellUsed['c-' + row + '-' + col] = true; + }; // to keep track of current cell position + + + var row = 0; + var col = 0; + + var moveToNextCell = function moveToNextCell() { + col++; + + if (col >= cols) { + col = 0; + row++; + } + }; // get a cache of all the manual positions + + + var id2manPos = {}; + + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + var rcPos = options.position(_node); + + if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) { + // must have at least row or col def'd + var _pos = { + row: rcPos.row, + col: rcPos.col + }; + + if (_pos.col === undefined) { + // find unused col + _pos.col = 0; + + while (used(_pos.row, _pos.col)) { + _pos.col++; + } + } else if (_pos.row === undefined) { + // find unused row + _pos.row = 0; + + while (used(_pos.row, _pos.col)) { + _pos.row++; + } + } + + id2manPos[_node.id()] = _pos; + use(_pos.row, _pos.col); + } + } + + var getPos = function getPos(element, i) { + var x, y; + + if (element.locked() || element.isParent()) { + return false; + } // see if we have a manual position set + + + var rcPos = id2manPos[element.id()]; + + if (rcPos) { + x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1; + y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1; + } else { + // otherwise set automatically + while (used(row, col)) { + moveToNextCell(); + } + + x = col * cellWidth + cellWidth / 2 + bb.x1; + y = row * cellHeight + cellHeight / 2 + bb.y1; + use(row, col); + moveToNextCell(); + } + + return { + x: x, + y: y + }; + }; + + nodes.layoutPositions(this, options, getPos); + } + + return this; // chaining +}; + +var defaults$2 = { + ready: function ready() {}, + // on layoutready + stop: function stop() {} // on layoutstop + +}; // constructor +// options : object containing layout options + +function NullLayout(options) { + this.options = extend({}, defaults$2, options); +} // runs the layout + + +NullLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; // elements to consider in the layout + + var layout = this; // cy is automatically populated for us in the constructor + // (disable eslint for next line as this serves as example layout code to external developers) + // eslint-disable-next-line no-unused-vars + + options.cy; + layout.emit('layoutstart'); // puts all nodes at (0, 0) + // n.b. most layouts would use layoutPositions(), instead of positions() and manual events + + eles.nodes().positions(function () { + return { + x: 0, + y: 0 + }; + }); // trigger layoutready when each node has had its position set at least once + + layout.one('layoutready', options.ready); + layout.emit('layoutready'); // trigger layoutstop when the layout stops (e.g. finishes) + + layout.one('layoutstop', options.stop); + layout.emit('layoutstop'); + return this; // chaining +}; // called on continuous layouts to stop them before they finish + + +NullLayout.prototype.stop = function () { + return this; // chaining +}; + +var defaults$1 = { + positions: undefined, + // map of (node id) => (position obj); or function(node){ return somPos; } + zoom: undefined, + // the zoom level to set (prob want fit = false if set) + pan: undefined, + // the pan level to set (prob want fit = false if set) + fit: true, + // whether to fit to viewport + padding: 30, + // padding on fit + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + +}; + +function PresetLayout(options) { + this.options = extend({}, defaults$1, options); +} + +PresetLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; + var nodes = eles.nodes(); + var posIsFn = fn$6(options.positions); + + function getPosition(node) { + if (options.positions == null) { + return copyPosition(node.position()); + } + + if (posIsFn) { + return options.positions(node); + } + + var pos = options.positions[node._private.data.id]; + + if (pos == null) { + return null; + } + + return pos; + } + + nodes.layoutPositions(this, options, function (node, i) { + var position = getPosition(node); + + if (node.locked() || position == null) { + return false; + } + + return position; + }); + return this; // chaining +}; + +var defaults = { + fit: true, + // whether to fit to viewport + padding: 30, + // fit padding + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + +}; + +function RandomLayout(options) { + this.options = extend({}, defaults, options); +} + +RandomLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var eles = options.eles; + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + + var getPos = function getPos(node, i) { + return { + x: bb.x1 + Math.round(Math.random() * bb.w), + y: bb.y1 + Math.round(Math.random() * bb.h) + }; + }; + + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining +}; + +var layout = [{ + name: 'breadthfirst', + impl: BreadthFirstLayout +}, { + name: 'circle', + impl: CircleLayout +}, { + name: 'concentric', + impl: ConcentricLayout +}, { + name: 'cose', + impl: CoseLayout +}, { + name: 'grid', + impl: GridLayout +}, { + name: 'null', + impl: NullLayout +}, { + name: 'preset', + impl: PresetLayout +}, { + name: 'random', + impl: RandomLayout +}]; + +function NullRenderer(options) { + this.options = options; + this.notifications = 0; // for testing +} + +var noop = function noop() {}; + +var throwImgErr = function throwImgErr() { + throw new Error('A headless instance can not render images'); +}; + +NullRenderer.prototype = { + recalculateRenderedStyle: noop, + notify: function notify() { + this.notifications++; + }, + init: noop, + isHeadless: function isHeadless() { + return true; + }, + png: throwImgErr, + jpg: throwImgErr +}; + +var BRp$f = {}; +BRp$f.arrowShapeWidth = 0.3; + +BRp$f.registerArrowShapes = function () { + var arrowShapes = this.arrowShapes = {}; + var renderer = this; // Contract for arrow shapes: + // 0, 0 is arrow tip + // (0, 1) is direction towards node + // (1, 0) is right + // + // functional api: + // collide: check x, y in shape + // roughCollide: called before collide, no false negatives + // draw: draw + // spacing: dist(arrowTip, nodeBoundary) + // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip + + var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) { + var x1 = translation.x - size / 2 - padding; + var x2 = translation.x + size / 2 + padding; + var y1 = translation.y - size / 2 - padding; + var y2 = translation.y + size / 2 + padding; + var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2; + return inside; + }; + + var transform = function transform(x, y, size, angle, translation) { + var xRotated = x * Math.cos(angle) - y * Math.sin(angle); + var yRotated = x * Math.sin(angle) + y * Math.cos(angle); + var xScaled = xRotated * size; + var yScaled = yRotated * size; + var xTranslated = xScaled + translation.x; + var yTranslated = yScaled + translation.y; + return { + x: xTranslated, + y: yTranslated + }; + }; + + var transformPoints = function transformPoints(pts, size, angle, translation) { + var retPts = []; + + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push(transform(x, y, size, angle, translation)); + } + + return retPts; + }; + + var pointsToArr = function pointsToArr(pts) { + var ret = []; + + for (var i = 0; i < pts.length; i++) { + var p = pts[i]; + ret.push(p.x, p.y); + } + + return ret; + }; + + var standardGap = function standardGap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2; + }; + + var defineArrowShape = function defineArrowShape(name, defn) { + if (string(defn)) { + defn = arrowShapes[defn]; + } + + arrowShapes[name] = extend({ + name: name, + points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3], + collide: function collide(x, y, size, angle, translation, padding) { + var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, points); + return inside; + }, + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation) { + var points = transformPoints(this.points, size, angle, translation); + renderer.arrowShapeImpl('polygon')(context, points); + }, + spacing: function spacing(edge) { + return 0; + }, + gap: standardGap + }, defn); + }; + + defineArrowShape('none', { + collide: falsify, + roughCollide: falsify, + draw: noop$1, + spacing: zeroify, + gap: zeroify + }); + defineArrowShape('triangle', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3] + }); + defineArrowShape('arrow', 'triangle'); + defineArrowShape('triangle-backcurve', { + points: arrowShapes['triangle'].points, + controlPoint: [0, -0.15], + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation, edgeWidth) { + var ptsTrans = transformPoints(this.points, size, angle, translation); + var ctrlPt = this.controlPoint; + var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans); + }, + gap: function gap(edge) { + return standardGap(edge) * 0.8; + } + }); + defineArrowShape('triangle-tee', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var teePts = transformPoints(this.pointsTee, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, teePts); + } + }); + defineArrowShape('circle-triangle', { + radius: 0.15, + pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + return pointInsidePolygonPoints(x, y, triPts) || circleInside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.pointsTr, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('triangle-cross', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + baseCrossLinePts: [-0.15, -0.4, // first half of the rectangle + -0.15, -0.4, 0.15, -0.4, // second half of the rectangle + 0.15, -0.4], + crossLinePts: function crossLinePts(size, edgeWidth) { + // shift points so that the distance between the cross points matches edge width + var p = this.baseCrossLinePts.slice(); + var shiftFactor = edgeWidth / size; + var y0 = 3; + var y1 = 5; + p[y0] = p[y0] - shiftFactor; + p[y1] = p[y1] - shiftFactor; + return p; + }, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts); + } + }); + defineArrowShape('vee', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15], + gap: function gap(edge) { + return standardGap(edge) * 0.525; + } + }); + defineArrowShape('circle', { + radius: 0.15, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('tee', { + points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0], + spacing: function spacing(edge) { + return 1; + }, + gap: function gap(edge) { + return 1; + } + }); + defineArrowShape('square', { + points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3] + }); + defineArrowShape('diamond', { + points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0], + gap: function gap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + defineArrowShape('chevron', { + points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15], + gap: function gap(edge) { + return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); +}; + +var BRp$e = {}; // Project mouse + +BRp$e.projectIntoViewport = function (clientX, clientY) { + var cy = this.cy; + var offsets = this.findContainerClientCoords(); + var offsetLeft = offsets[0]; + var offsetTop = offsets[1]; + var scale = offsets[4]; + var pan = cy.pan(); + var zoom = cy.zoom(); + var x = ((clientX - offsetLeft) / scale - pan.x) / zoom; + var y = ((clientY - offsetTop) / scale - pan.y) / zoom; + return [x, y]; +}; + +BRp$e.findContainerClientCoords = function () { + if (this.containerBB) { + return this.containerBB; + } + + var container = this.container; + var rect = container.getBoundingClientRect(); + var style = window$1.getComputedStyle(container); + + var styleValue = function styleValue(name) { + return parseFloat(style.getPropertyValue(name)); + }; + + var padding = { + left: styleValue('padding-left'), + right: styleValue('padding-right'), + top: styleValue('padding-top'), + bottom: styleValue('padding-bottom') + }; + var border = { + left: styleValue('border-left-width'), + right: styleValue('border-right-width'), + top: styleValue('border-top-width'), + bottom: styleValue('border-bottom-width') + }; + var clientWidth = container.clientWidth; + var clientHeight = container.clientHeight; + var paddingHor = padding.left + padding.right; + var paddingVer = padding.top + padding.bottom; + var borderHor = border.left + border.right; + var scale = rect.width / (clientWidth + borderHor); + var unscaledW = clientWidth - paddingHor; + var unscaledH = clientHeight - paddingVer; + var left = rect.left + padding.left + border.left; + var top = rect.top + padding.top + border.top; + return this.containerBB = [left, top, unscaledW, unscaledH, scale]; +}; + +BRp$e.invalidateContainerClientCoordsCache = function () { + this.containerBB = null; +}; + +BRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) { + return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0]; +}; + +BRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) { + var self = this; + var r = this; + var eles = r.getCachedZSortedEles(); + var near = []; // 1 node max, 1 edge max + + var zoom = r.cy.zoom(); + var hasCompounds = r.cy.hasCompoundNodes(); + var edgeThreshold = (isTouch ? 24 : 8) / zoom; + var nodeThreshold = (isTouch ? 8 : 2) / zoom; + var labelThreshold = (isTouch ? 8 : 2) / zoom; + var minSqDist = Infinity; + var nearEdge; + var nearNode; + + if (interactiveElementsOnly) { + eles = eles.interactive; + } + + function addEle(ele, sqDist) { + if (ele.isNode()) { + if (nearNode) { + return; // can't replace node + } else { + nearNode = ele; + near.push(ele); + } + } + + if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) { + if (nearEdge) { + // then replace existing edge + // can replace only if same z-index + if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) { + for (var i = 0; i < near.length; i++) { + if (near[i].isEdge()) { + near[i] = ele; + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + break; + } + } + } + } else { + near.push(ele); + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + } + } + } + + function checkNode(node) { + var width = node.outerWidth() + 2 * nodeThreshold; + var height = node.outerHeight() + 2 * nodeThreshold; + var hw = width / 2; + var hh = height / 2; + var pos = node.position(); + + if (pos.x - hw <= x && x <= pos.x + hw // bb check x + && pos.y - hh <= y && y <= pos.y + hh // bb check y + ) { + var shape = r.nodeShapes[self.getNodeShape(node)]; + + if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y)) { + addEle(node, 0); + return true; + } + } + } + + function checkEdge(edge) { + var _p = edge._private; + var rs = _p.rscratch; + var styleWidth = edge.pstyle('width').pfValue; + var scale = edge.pstyle('arrow-scale').value; + var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre + + var widthSq = width * width; + var width2 = width * 2; + var src = _p.source; + var tgt = _p.target; + var sqDist; + + if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') { + var pts = rs.allpts; + + for (var i = 0; i + 3 < pts.length; i += 2) { + if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) { + addEle(edge, sqDist); + return true; + } + } + } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + var pts = rs.allpts; + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) { + addEle(edge, sqDist); + return true; + } + } + } // if we're close to the edge but didn't hit it, maybe we hit its arrows + + + var src = src || _p.source; + var tgt = tgt || _p.target; + var arSize = self.getArrowWidth(styleWidth, scale); + var arrows = [{ + name: 'source', + x: rs.arrowStartX, + y: rs.arrowStartY, + angle: rs.srcArrowAngle + }, { + name: 'target', + x: rs.arrowEndX, + y: rs.arrowEndY, + angle: rs.tgtArrowAngle + }, { + name: 'mid-source', + x: rs.midX, + y: rs.midY, + angle: rs.midsrcArrowAngle + }, { + name: 'mid-target', + x: rs.midX, + y: rs.midY, + angle: rs.midtgtArrowAngle + }]; + + for (var i = 0; i < arrows.length; i++) { + var ar = arrows[i]; + var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value]; + var edgeWidth = edge.pstyle('width').pfValue; + + if (shape.roughCollide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold)) { + addEle(edge); + return true; + } + } // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence) + + + if (hasCompounds && near.length > 0) { + checkNode(src); + checkNode(tgt); + } + } + + function preprop(obj, name, pre) { + return getPrefixedProperty(obj, name, pre); + } + + function checkLabel(ele, prefix) { + var _p = ele._private; + var th = labelThreshold; + var prefixDash; + + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + + ele.boundingBox(); + var bb = _p.labelBounds[prefix || 'main']; + var text = ele.pstyle(prefixDash + 'label').value; + var eventsEnabled = ele.pstyle('text-events').strValue === 'yes'; + + if (!eventsEnabled || !text) { + return; + } + + var lx = preprop(_p.rscratch, 'labelX', prefix); + var ly = preprop(_p.rscratch, 'labelY', prefix); + var theta = preprop(_p.rscratch, 'labelAngle', prefix); + var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin + + var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly) + + var ly1 = bb.y1 - th - oy; + var ly2 = bb.y2 + th - oy; + + if (theta) { + var cos = Math.cos(theta); + var sin = Math.sin(theta); + + var rotate = function rotate(x, y) { + x = x - lx; + y = y - ly; + return { + x: x * cos - y * sin + lx, + y: x * sin + y * cos + ly + }; + }; + + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + var points = [// with the margin added after the rotation is applied + px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy]; + + if (pointInsidePolygonPoints(x, y, points)) { + addEle(ele); + return true; + } + } else { + // do a cheaper bb check + if (inBoundingBox(bb, x, y)) { + addEle(ele); + return true; + } + } + } + + for (var i = eles.length - 1; i >= 0; i--) { + // reverse order for precedence + var ele = eles[i]; + + if (ele.isNode()) { + checkNode(ele) || checkLabel(ele); + } else { + // then edge + checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target'); + } + } + + return near; +}; // 'Give me everything from this box' + + +BRp$e.getAllInBox = function (x1, y1, x2, y2) { + var eles = this.getCachedZSortedEles().interactive; + var box = []; + var x1c = Math.min(x1, x2); + var x2c = Math.max(x1, x2); + var y1c = Math.min(y1, y2); + var y2c = Math.max(y1, y2); + x1 = x1c; + x2 = x2c; + y1 = y1c; + y2 = y2c; + var boxBb = makeBoundingBox({ + x1: x1, + y1: y1, + x2: x2, + y2: y2 + }); + + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + + if (ele.isNode()) { + var node = ele; + var nodeBb = node.boundingBox({ + includeNodes: true, + includeEdges: false, + includeLabels: false + }); + + if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { + box.push(node); + } + } else { + var edge = ele; + var _p = edge._private; + var rs = _p.rscratch; + + if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) { + continue; + } + + if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) { + continue; + } + + if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') { + var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; + var allInside = true; + + for (var i = 0; i < pts.length; i++) { + if (!pointInBoundingBox(boxBb, pts[i])) { + allInside = false; + break; + } + } + + if (allInside) { + box.push(edge); + } + } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') { + box.push(edge); + } + } + } + + return box; +}; + +var BRp$d = {}; + +BRp$d.calculateArrowAngles = function (edge) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + var isBezier = rs.edgeType === 'bezier'; + var isMultibezier = rs.edgeType === 'multibezier'; + var isSegments = rs.edgeType === 'segments'; + var isCompound = rs.edgeType === 'compound'; + var isSelf = rs.edgeType === 'self'; // Displacement gives direction for arrowhead orientation + + var dispX, dispY; + var startX, startY, endX, endY, midX, midY; + + if (isHaystack) { + startX = rs.haystackPts[0]; + startY = rs.haystackPts[1]; + endX = rs.haystackPts[2]; + endY = rs.haystackPts[3]; + } else { + startX = rs.arrowStartX; + startY = rs.arrowStartY; + endX = rs.arrowEndX; + endY = rs.arrowEndY; + } + + midX = rs.midX; + midY = rs.midY; // source + // + + if (isSegments) { + dispX = startX - rs.segpts[0]; + dispY = startY - rs.segpts[1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1); + var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1); + dispX = startX - bX; + dispY = startY - bY; + } else { + dispX = startX - midX; + dispY = startY - midY; + } + + rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); // mid target + // + + var midX = rs.midX; + var midY = rs.midY; + + if (isHaystack) { + midX = (startX + endX) / 2; + midY = (startY + endY) / 2; + } + + dispX = endX - startX; + dispY = endY - startY; + + if (isSegments) { + var pts = rs.allpts; + + if (pts.length / 2 % 2 === 0) { + var i2 = pts.length / 2; + var i1 = i2 - 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } else { + var i2 = pts.length / 2 - 1; + var i1 = i2 - 2; + var i3 = i2 + 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } + } else if (isMultibezier || isCompound || isSelf) { + var pts = rs.allpts; + var cpts = rs.ctrlpts; + var bp0x, bp0y; + var bp1x, bp1y; + + if (cpts.length / 2 % 2 === 0) { + var p0 = pts.length / 2 - 1; // startpt + + var ic = p0 + 2; + var p1 = ic + 2; + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001); + } else { + var ic = pts.length / 2 - 1; // ctrpt + + var p0 = ic - 2; // startpt + + var p1 = ic + 2; // endpt + + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5); + } + + dispX = bp1x - bp0x; + dispY = bp1y - bp0y; + } + + rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY); + rs.midDispX = dispX; + rs.midDispY = dispY; // mid source + // + + dispX *= -1; + dispY *= -1; + + if (isSegments) { + var pts = rs.allpts; + + if (pts.length / 2 % 2 === 0) ; else { + var i2 = pts.length / 2 - 1; + var i3 = i2 + 2; + dispX = -(pts[i3] - pts[i2]); + dispY = -(pts[i3 + 1] - pts[i2 + 1]); + } + } + + rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); // target + // + + if (isSegments) { + dispX = endX - rs.segpts[rs.segpts.length - 2]; + dispY = endY - rs.segpts[rs.segpts.length - 1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var l = pts.length; + var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9); + var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9); + dispX = endX - bX; + dispY = endY - bY; + } else { + dispX = endX - midX; + dispY = endY - midY; + } + + rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY); +}; + +BRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) { + var cache = this.arrowWidthCache = this.arrowWidthCache || {}; + var cachedVal = cache[edgeWidth + ', ' + scale]; + + if (cachedVal) { + return cachedVal; + } + + cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale; + cache[edgeWidth + ', ' + scale] = cachedVal; + return cachedVal; +}; + +var BRp$c = {}; + +BRp$c.findHaystackPoints = function (edges) { + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var rs = _p.rscratch; + + if (!rs.haystack) { + var angle = Math.random() * 2 * Math.PI; + rs.source = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + angle = Math.random() * 2 * Math.PI; + rs.target = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + } + + var src = _p.source; + var tgt = _p.target; + var srcPos = src.position(); + var tgtPos = tgt.position(); + var srcW = src.width(); + var tgtW = tgt.width(); + var srcH = src.height(); + var tgtH = tgt.height(); + var radius = edge.pstyle('haystack-radius').value; + var halfRadius = radius / 2; // b/c have to half width/height + + rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y]; + rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2; + rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; // always override as haystack in case set to different type previously + + rs.edgeType = 'haystack'; + rs.haystack = true; + this.storeEdgeProjections(edge); + this.calculateArrowAngles(edge); + this.recalculateEdgeLabelProjections(edge); + this.calculateLabelAngles(edge); + } +}; + +BRp$c.findSegmentsPoints = function (edge, pairInfo) { + // Segments (multiple straight lines) + var rs = edge._private.rscratch; + var posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts, + vectorNormInverse = pairInfo.vectorNormInverse; + var edgeDistances = edge.pstyle('edge-distances').value; + var segmentWs = edge.pstyle('segment-weights'); + var segmentDs = edge.pstyle('segment-distances'); + var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); + rs.edgeType = 'segments'; + rs.segpts = []; + + for (var s = 0; s < segmentsN; s++) { + var w = segmentWs.pfValue[s]; + var d = segmentDs.pfValue[s]; + var w1 = 1 - w; + var w2 = w; + var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d); + } +}; + +BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Self-edge + var rs = edge._private.rscratch; + var dirCounts = pairInfo.dirCounts, + srcPos = pairInfo.srcPos; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var loopDir = edge.pstyle('loop-direction').pfValue; + var loopSwp = edge.pstyle('loop-sweep').pfValue; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + rs.edgeType = 'self'; + var j = i; + var loopDist = stepSize; + + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + + var loopAngle = loopDir - Math.PI / 2; + var outAngle = loopAngle - loopSwp / 2; + var inAngle = loopAngle + loopSwp / 2; // increase by step size for overlapping loops, keyed on direction and sweep values + + var dc = String(loopDir + '_' + loopSwp); + j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc]; + rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)]; +}; + +BRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Compound edge + var rs = edge._private.rscratch; + rs.edgeType = 'compound'; + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var j = i; + var loopDist = stepSize; + + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + + var loopW = 50; + var loopaPos = { + x: srcPos.x - srcW / 2, + y: srcPos.y - srcH / 2 + }; + var loopbPos = { + x: tgtPos.x - tgtW / 2, + y: tgtPos.y - tgtH / 2 + }; + var loopPos = { + x: Math.min(loopaPos.x, loopbPos.x), + y: Math.min(loopaPos.y, loopbPos.y) + }; // avoids cases with impossible beziers + + var minCompoundStretch = 0.5; + var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01)); + var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01)); + rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y]; +}; + +BRp$c.findStraightEdgePoints = function (edge) { + // Straight edge within bundle + edge._private.rscratch.edgeType = 'straight'; +}; + +BRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) { + var rs = edge._private.rscratch; + var vectorNormInverse = pairInfo.vectorNormInverse, + posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts; + var edgeDistances = edge.pstyle('edge-distances').value; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptWs = edge.pstyle('control-point-weights'); + var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1; + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var ctrlptWeight = ctrlptWs.value[0]; // (Multi)bezier + + var multi = edgeIsUnbundled; + rs.edgeType = multi ? 'multibezier' : 'bezier'; + rs.ctrlpts = []; + + for (var b = 0; b < bezierN; b++) { + var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1); + var manctrlptDist = void 0; + var sign = signum(normctrlptDist); + + if (multi) { + ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size + + ctrlptWeight = ctrlptWs.value[b]; + } + + if (edgeIsUnbundled) { + // multi or single unbundled + manctrlptDist = ctrlptDist; + } else { + manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined; + } + + var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist; + var w1 = 1 - ctrlptWeight; + var w2 = ctrlptWeight; + var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint); + } +}; + +BRp$c.findTaxiPoints = function (edge, pairInfo) { + // Taxicab geometry with two turns maximum + var rs = edge._private.rscratch; + rs.edgeType = 'segments'; + var VERTICAL = 'vertical'; + var HORIZONTAL = 'horizontal'; + var LEFTWARD = 'leftward'; + var RIGHTWARD = 'rightward'; + var DOWNWARD = 'downward'; + var UPWARD = 'upward'; + var AUTO = 'auto'; + var posPts = pairInfo.posPts, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var edgeDistances = edge.pstyle('edge-distances').value; + var dIncludesNodeBody = edgeDistances !== 'node-position'; + var taxiDir = edge.pstyle('taxi-direction').value; + var rawTaxiDir = taxiDir; // unprocessed value + + var taxiTurn = edge.pstyle('taxi-turn'); + var turnIsPercent = taxiTurn.units === '%'; + var taxiTurnPfVal = taxiTurn.pfValue; + var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side + + var minD = edge.pstyle('taxi-turn-min-distance').pfValue; + var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0; + var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0; + var pdx = posPts.x2 - posPts.x1; + var pdy = posPts.y2 - posPts.y1; // take away the effective w/h from the magnitude of the delta value + + var subDWH = function subDWH(dxy, dwh) { + if (dxy > 0) { + return Math.max(dxy - dwh, 0); + } else { + return Math.min(dxy + dwh, 0); + } + }; + + var dx = subDWH(pdx, dw); + var dy = subDWH(pdy, dh); + var isExplicitDir = false; + + if (rawTaxiDir === AUTO) { + taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL; + } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) { + taxiDir = VERTICAL; + isExplicitDir = true; + } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) { + taxiDir = HORIZONTAL; + isExplicitDir = true; + } + + var isVert = taxiDir === VERTICAL; + var l = isVert ? dy : dx; + var pl = isVert ? pdy : pdx; + var sgnL = signum(pl); + var forcedDir = false; + + if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction + && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) { + sgnL *= -1; + l = sgnL * Math.abs(l); + forcedDir = true; + } + + var d; + + if (turnIsPercent) { + var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; + d = p * l; + } else { + var k = taxiTurnPfVal < 0 ? l : 0; + d = k + taxiTurnPfVal * sgnL; + } + + var getIsTooClose = function getIsTooClose(d) { + return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l); + }; + + var isTooCloseSrc = getIsTooClose(d); + var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d)); + var isTooClose = isTooCloseSrc || isTooCloseTgt; + + if (isTooClose && !forcedDir) { + // non-ideal routing + if (isVert) { + // vertical fallbacks + var lShapeInsideSrc = Math.abs(pl) <= srcH / 2; + var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2; + + if (lShapeInsideSrc) { + // horizontal Z-shape (direction not respected) + var x = (posPts.x1 + posPts.x2) / 2; + var y1 = posPts.y1, + y2 = posPts.y2; + rs.segpts = [x, y1, x, y2]; + } else if (lShapeInsideTgt) { + // vertical Z-shape (distance not respected) + var y = (posPts.y1 + posPts.y2) / 2; + var x1 = posPts.x1, + x2 = posPts.x2; + rs.segpts = [x1, y, x2, y]; + } else { + // L-shape fallback (turn distance not respected, but works well with tree siblings) + rs.segpts = [posPts.x1, posPts.y2]; + } + } else { + // horizontal fallbacks + var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2; + + var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2; + + if (_lShapeInsideSrc) { + // vertical Z-shape (direction not respected) + var _y = (posPts.y1 + posPts.y2) / 2; + + var _x = posPts.x1, + _x2 = posPts.x2; + rs.segpts = [_x, _y, _x2, _y]; + } else if (_lShapeInsideTgt) { + // horizontal Z-shape (turn distance not respected) + var _x3 = (posPts.x1 + posPts.x2) / 2; + + var _y2 = posPts.y1, + _y3 = posPts.y2; + rs.segpts = [_x3, _y2, _x3, _y3]; + } else { + // L-shape (turn distance not respected, but works well for tree siblings) + rs.segpts = [posPts.x2, posPts.y1]; + } + } + } else { + // ideal routing + if (isVert) { + var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); + + var _x4 = posPts.x1, + _x5 = posPts.x2; + rs.segpts = [_x4, _y4, _x5, _y4]; + } else { + // horizontal + var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0); + + var _y5 = posPts.y1, + _y6 = posPts.y2; + rs.segpts = [_x6, _y5, _x6, _y6]; + } + } +}; + +BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) { + var rs = edge._private.rscratch; // can only correct beziers for now... + + if (rs.edgeType === 'bezier') { + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH, + srcShape = pairInfo.srcShape, + tgtShape = pairInfo.tgtShape; + var badStart = !number$1(rs.startX) || !number$1(rs.startY); + var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY); + var badEnd = !number$1(rs.endX) || !number$1(rs.endY); + var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY); + var minCpADistFactor = 3; + var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + var minCpADist = minCpADistFactor * arrowW; + var startACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.startX, + y: rs.startY + }); + var closeStartACp = startACpDist < minCpADist; + var endACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.endX, + y: rs.endY + }); + var closeEndACp = endACpDist < minCpADist; + var overlapping = false; + + if (badStart || badAStart || closeStartACp) { + overlapping = true; // project control point along line from src centre to outside the src shape + // (otherwise intersection will yield nothing) + + var cpD = { + // delta + x: rs.ctrlpts[0] - srcPos.x, + y: rs.ctrlpts[1] - srcPos.y + }; + var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line + + var cpM = { + // normalised delta + x: cpD.x / cpL, + y: cpD.y / cpL + }; + var radius = Math.max(srcW, srcH); + var cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + cpM.x * 2 * radius, + y: rs.ctrlpts[1] + cpM.y * 2 * radius + }; + var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0); + + if (closeStartACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); + } else { + rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist; + rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist; + } + } + + if (badEnd || badAEnd || closeEndACp) { + overlapping = true; // project control point along line from tgt centre to outside the tgt shape + // (otherwise intersection will yield nothing) + + var _cpD = { + // delta + x: rs.ctrlpts[0] - tgtPos.x, + y: rs.ctrlpts[1] - tgtPos.y + }; + + var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line + + + var _cpM = { + // normalised delta + x: _cpD.x / _cpL, + y: _cpD.y / _cpL + }; + + var _radius = Math.max(srcW, srcH); + + var _cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + _cpM.x * 2 * _radius, + y: rs.ctrlpts[1] + _cpM.y * 2 * _radius + }; + var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0); + + if (closeEndACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); + } else { + rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist; + rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist; + } + } + + if (overlapping) { + // recalc endpts + this.findEndpoints(edge); + } + } +}; + +BRp$c.storeAllpts = function (edge) { + var rs = edge._private.rscratch; + + if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + + for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) { + // ctrl pt itself + rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]); // the midpt between ctrlpts as intermediate destination pts + + if (b + 3 < rs.ctrlpts.length) { + rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2); + } + } + + rs.allpts.push(rs.endX, rs.endY); + var m, mt; + + if (rs.ctrlpts.length / 2 % 2 === 0) { + m = rs.allpts.length / 2 - 1; + rs.midX = rs.allpts[m]; + rs.midY = rs.allpts[m + 1]; + } else { + m = rs.allpts.length / 2 - 3; + mt = 0.5; + rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt); + rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt); + } + } else if (rs.edgeType === 'straight') { + // need to calc these after endpts + rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; // default midpt for labels etc + + rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4; + rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4; + } else if (rs.edgeType === 'segments') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + rs.allpts.push.apply(rs.allpts, rs.segpts); + rs.allpts.push(rs.endX, rs.endY); + + if (rs.segpts.length % 4 === 0) { + var i2 = rs.segpts.length / 2; + var i1 = i2 - 2; + rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2; + rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2; + } else { + var _i = rs.segpts.length / 2 - 1; + + rs.midX = rs.segpts[_i]; + rs.midY = rs.segpts[_i + 1]; + } + } +}; + +BRp$c.checkForInvalidEdgeWarning = function (edge) { + var rs = edge[0]._private.rscratch; + + if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) { + rs.loggedErr = false; + } else { + if (!rs.loggedErr) { + rs.loggedErr = true; + warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.'); + } + } +}; + +BRp$c.findEdgeControlPoints = function (edges) { + var _this = this; + + if (!edges || edges.length === 0) { + return; + } + + var r = this; + var cy = r.cy; + var hasCompounds = cy.hasCompoundNodes(); + var hashTable = { + map: new Map$1(), + get: function get(pairId) { + var map2 = this.map.get(pairId[0]); + + if (map2 != null) { + return map2.get(pairId[1]); + } else { + return null; + } + }, + set: function set(pairId, val) { + var map2 = this.map.get(pairId[0]); + + if (map2 == null) { + map2 = new Map$1(); + this.map.set(pairId[0], map2); + } + + map2.set(pairId[1], val); + } + }; + var pairIds = []; + var haystackEdges = []; // create a table of edge (src, tgt) => list of edges between them + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var curveStyle = edge.pstyle('curve-style').value; // ignore edges who are not to be displayed + // they shouldn't take up space + + if (edge.removed() || !edge.takesUpSpace()) { + continue; + } + + if (curveStyle === 'haystack') { + haystackEdges.push(edge); + continue; + } + + var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle === 'taxi'; + var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier'; + var src = _p.source; + var tgt = _p.target; + var srcIndex = src.poolIndex(); + var tgtIndex = tgt.poolIndex(); + var pairId = [srcIndex, tgtIndex].sort(); + var tableEntry = hashTable.get(pairId); + + if (tableEntry == null) { + tableEntry = { + eles: [] + }; + hashTable.set(pairId, tableEntry); + pairIds.push(pairId); + } + + tableEntry.eles.push(edge); + + if (edgeIsUnbundled) { + tableEntry.hasUnbundled = true; + } + + if (edgeIsBezier) { + tableEntry.hasBezier = true; + } + } // for each pair (src, tgt), create the ctrl pts + // Nested for loop is OK; total number of iterations for both loops = edgeCount + + + var _loop = function _loop(p) { + var pairId = pairIds[p]; + var pairInfo = hashTable.get(pairId); + var swappedpairInfo = void 0; + + if (!pairInfo.hasUnbundled) { + var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) { + return e.isBundledBezier(); + }); + clearArray(pairInfo.eles); + pllEdges.forEach(function (edge) { + return pairInfo.eles.push(edge); + }); // for each pair id, the edges should be sorted by index + + pairInfo.eles.sort(function (edge1, edge2) { + return edge1.poolIndex() - edge2.poolIndex(); + }); + } + + var firstEdge = pairInfo.eles[0]; + var src = firstEdge.source(); + var tgt = firstEdge.target(); // make sure src/tgt distinction is consistent w.r.t. pairId + + if (src.poolIndex() > tgt.poolIndex()) { + var temp = src; + src = tgt; + tgt = temp; + } + + var srcPos = pairInfo.srcPos = src.position(); + var tgtPos = pairInfo.tgtPos = tgt.position(); + var srcW = pairInfo.srcW = src.outerWidth(); + var srcH = pairInfo.srcH = src.outerHeight(); + var tgtW = pairInfo.tgtW = tgt.outerWidth(); + var tgtH = pairInfo.tgtH = tgt.outerHeight(); + + var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)]; + + var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)]; + + pairInfo.dirCounts = { + 'north': 0, + 'west': 0, + 'south': 0, + 'east': 0, + 'northwest': 0, + 'southwest': 0, + 'northeast': 0, + 'southeast': 0 + }; + + for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) { + var _edge = pairInfo.eles[_i2]; + var rs = _edge[0]._private.rscratch; + + var _curveStyle = _edge.pstyle('curve-style').value; + + var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle === 'segments' || _curveStyle === 'taxi'; // whether the normalised pair order is the reverse of the edge's src-tgt order + + + var edgeIsSwapped = !src.same(_edge.source()); + + if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) { + pairInfo.calculatedIntersection = true; // pt outside src shape to calc distance/displacement from src to tgt + + var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0); + var srcIntn = pairInfo.srcIntn = srcOutside; // pt outside tgt shape to calc distance/displacement from src to tgt + + var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0); + var tgtIntn = pairInfo.tgtIntn = tgtOutside; + var intersectionPts = pairInfo.intersectionPts = { + x1: srcOutside[0], + x2: tgtOutside[0], + y1: srcOutside[1], + y2: tgtOutside[1] + }; + var posPts = pairInfo.posPts = { + x1: srcPos.x, + x2: tgtPos.x, + y1: srcPos.y, + y2: tgtPos.y + }; + var dy = tgtOutside[1] - srcOutside[1]; + var dx = tgtOutside[0] - srcOutside[0]; + var l = Math.sqrt(dx * dx + dy * dy); + var vector = pairInfo.vector = { + x: dx, + y: dy + }; + var vectorNorm = pairInfo.vectorNorm = { + x: vector.x / l, + y: vector.y / l + }; + var vectorNormInverse = { + x: -vectorNorm.y, + y: vectorNorm.x + }; // if node shapes overlap, then no ctrl pts to draw + + pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y); + pairInfo.vectorNormInverse = vectorNormInverse; + swappedpairInfo = { + nodesOverlap: pairInfo.nodesOverlap, + dirCounts: pairInfo.dirCounts, + calculatedIntersection: true, + hasBezier: pairInfo.hasBezier, + hasUnbundled: pairInfo.hasUnbundled, + eles: pairInfo.eles, + srcPos: tgtPos, + tgtPos: srcPos, + srcW: tgtW, + srcH: tgtH, + tgtW: srcW, + tgtH: srcH, + srcIntn: tgtIntn, + tgtIntn: srcIntn, + srcShape: tgtShape, + tgtShape: srcShape, + posPts: { + x1: posPts.x2, + y1: posPts.y2, + x2: posPts.x1, + y2: posPts.y1 + }, + intersectionPts: { + x1: intersectionPts.x2, + y1: intersectionPts.y2, + x2: intersectionPts.x1, + y2: intersectionPts.y1 + }, + vector: { + x: -vector.x, + y: -vector.y + }, + vectorNorm: { + x: -vectorNorm.x, + y: -vectorNorm.y + }, + vectorNormInverse: { + x: -vectorNormInverse.x, + y: -vectorNormInverse.y + } + }; + } + + var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; + rs.nodesOverlap = passedPairInfo.nodesOverlap; + rs.srcIntn = passedPairInfo.srcIntn; + rs.tgtIntn = passedPairInfo.tgtIntn; + + if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) { + _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (src === tgt) { + _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (_curveStyle === 'segments') { + _this.findSegmentsPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'taxi') { + _this.findTaxiPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) { + _this.findStraightEdgePoints(_edge); + } else { + _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped); + } + + _this.findEndpoints(_edge); + + _this.tryToCorrectInvalidPoints(_edge, passedPairInfo); + + _this.checkForInvalidEdgeWarning(_edge); + + _this.storeAllpts(_edge); + + _this.storeEdgeProjections(_edge); + + _this.calculateArrowAngles(_edge); + + _this.recalculateEdgeLabelProjections(_edge); + + _this.calculateLabelAngles(_edge); + } // for pair edges + + }; + + for (var p = 0; p < pairIds.length; p++) { + _loop(p); + } // for pair ids + // haystacks avoid the expense of pairInfo stuff (intersections etc.) + + + this.findHaystackPoints(haystackEdges); +}; + +function getPts(pts) { + var retPts = []; + + if (pts == null) { + return; + } + + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push({ + x: x, + y: y + }); + } + + return retPts; +} + +BRp$c.getSegmentPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + + if (type === 'segments') { + this.recalculateRenderedStyle(edge); + return getPts(rs.segpts); + } +}; + +BRp$c.getControlPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + + if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') { + this.recalculateRenderedStyle(edge); + return getPts(rs.ctrlpts); + } +}; + +BRp$c.getEdgeMidpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + return { + x: rs.midX, + y: rs.midY + }; +}; + +var BRp$b = {}; + +BRp$b.manualEndptToPx = function (node, prop) { + var r = this; + var npos = node.position(); + var w = node.outerWidth(); + var h = node.outerHeight(); + + if (prop.value.length === 2) { + var p = [prop.pfValue[0], prop.pfValue[1]]; + + if (prop.units[0] === '%') { + p[0] = p[0] * w; + } + + if (prop.units[1] === '%') { + p[1] = p[1] * h; + } + + p[0] += npos.x; + p[1] += npos.y; + return p; + } else { + var angle = prop.pfValue[0]; + angle = -Math.PI / 2 + angle; // start at 12 o'clock + + var l = 2 * Math.max(w, h); + var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l]; + return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0); + } +}; + +BRp$b.findEndpoints = function (edge) { + var r = this; + var intersect; + var source = edge.source()[0]; + var target = edge.target()[0]; + var srcPos = source.position(); + var tgtPos = target.position(); + var tgtArShape = edge.pstyle('target-arrow-shape').value; + var srcArShape = edge.pstyle('source-arrow-shape').value; + var tgtDist = edge.pstyle('target-distance-from-node').pfValue; + var srcDist = edge.pstyle('source-distance-from-node').pfValue; + var curveStyle = edge.pstyle('curve-style').value; + var rs = edge._private.rscratch; + var et = rs.edgeType; + var taxi = curveStyle === 'taxi'; + var self = et === 'self' || et === 'compound'; + var bezier = et === 'bezier' || et === 'multibezier' || self; + var multi = et !== 'bezier'; + var lines = et === 'straight' || et === 'segments'; + var segments = et === 'segments'; + var hasEndpts = bezier || multi || lines; + var overrideEndpts = self || taxi; + var srcManEndpt = edge.pstyle('source-endpoint'); + var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value; + var tgtManEndpt = edge.pstyle('target-endpoint'); + var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value; + rs.srcManEndpt = srcManEndpt; + rs.tgtManEndpt = tgtManEndpt; + var p1; // last known point of edge on target side + + var p2; // last known point of edge on source side + + var p1_i; // point to intersect with target shape + + var p2_i; // point to intersect with source shape + + if (bezier) { + var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]]; + var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart; + p1 = cpEnd; + p2 = cpStart; + } else if (lines) { + var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2); + var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2); + p1 = tgtArrowFromPt; + p2 = srcArrowFromPt; + } + + if (tgtManEndptVal === 'inside-to-node') { + intersect = [tgtPos.x, tgtPos.y]; + } else if (tgtManEndpt.units) { + intersect = this.manualEndptToPx(target, tgtManEndpt); + } else if (tgtManEndptVal === 'outside-to-line') { + intersect = rs.tgtIntn; // use cached value from ctrlpt calc + } else { + if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') { + p1_i = p1; + } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') { + p1_i = [srcPos.x, srcPos.y]; + } + + intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0); + + if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') { + var trs = target._private.rscratch; + var lw = trs.labelWidth; + var lh = trs.labelHeight; + var lx = trs.labelX; + var ly = trs.labelY; + var lw2 = lw / 2; + var lh2 = lh / 2; + var va = target.pstyle('text-valign').value; + + if (va === 'top') { + ly -= lh2; + } else if (va === 'bottom') { + ly += lh2; + } + + var ha = target.pstyle('text-halign').value; + + if (ha === 'left') { + lx -= lw2; + } else if (ha === 'right') { + lx += lw2; + } + + var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y); + + if (labelIntersect.length > 0) { + var refPt = srcPos; + var intSqdist = sqdist(refPt, array2point(intersect)); + var labIntSqdist = sqdist(refPt, array2point(labelIntersect)); + var minSqDist = intSqdist; + + if (labIntSqdist < intSqdist) { + intersect = labelIntersect; + minSqDist = labIntSqdist; + } + + if (labelIntersect.length > 2) { + var labInt2SqDist = sqdist(refPt, { + x: labelIntersect[2], + y: labelIntersect[3] + }); + + if (labInt2SqDist < minSqDist) { + intersect = [labelIntersect[2], labelIntersect[3]]; + } + } + } + } + } + + var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist); + var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist); + rs.endX = edgeEnd[0]; + rs.endY = edgeEnd[1]; + rs.arrowEndX = arrowEnd[0]; + rs.arrowEndY = arrowEnd[1]; + + if (srcManEndptVal === 'inside-to-node') { + intersect = [srcPos.x, srcPos.y]; + } else if (srcManEndpt.units) { + intersect = this.manualEndptToPx(source, srcManEndpt); + } else if (srcManEndptVal === 'outside-to-line') { + intersect = rs.srcIntn; // use cached value from ctrlpt calc + } else { + if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') { + p2_i = p2; + } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') { + p2_i = [tgtPos.x, tgtPos.y]; + } + + intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0); + + if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') { + var srs = source._private.rscratch; + var _lw = srs.labelWidth; + var _lh = srs.labelHeight; + var _lx = srs.labelX; + var _ly = srs.labelY; + + var _lw2 = _lw / 2; + + var _lh2 = _lh / 2; + + var _va = source.pstyle('text-valign').value; + + if (_va === 'top') { + _ly -= _lh2; + } else if (_va === 'bottom') { + _ly += _lh2; + } + + var _ha = source.pstyle('text-halign').value; + + if (_ha === 'left') { + _lx -= _lw2; + } else if (_ha === 'right') { + _lx += _lw2; + } + + var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y); + + if (_labelIntersect.length > 0) { + var _refPt = tgtPos; + + var _intSqdist = sqdist(_refPt, array2point(intersect)); + + var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect)); + + var _minSqDist = _intSqdist; + + if (_labIntSqdist < _intSqdist) { + intersect = [_labelIntersect[0], _labelIntersect[1]]; + _minSqDist = _labIntSqdist; + } + + if (_labelIntersect.length > 2) { + var _labInt2SqDist = sqdist(_refPt, { + x: _labelIntersect[2], + y: _labelIntersect[3] + }); + + if (_labInt2SqDist < _minSqDist) { + intersect = [_labelIntersect[2], _labelIntersect[3]]; + } + } + } + } + } + + var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist); + var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist); + rs.startX = edgeStart[0]; + rs.startY = edgeStart[1]; + rs.arrowStartX = arrowStart[0]; + rs.arrowStartY = arrowStart[1]; + + if (hasEndpts) { + if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) { + rs.badLine = true; + } else { + rs.badLine = false; + } + } +}; + +BRp$b.getSourceEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[0], + y: rs.haystackPts[1] + }; + + default: + return { + x: rs.arrowStartX, + y: rs.arrowStartY + }; + } +}; + +BRp$b.getTargetEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[2], + y: rs.haystackPts[3] + }; + + default: + return { + x: rs.arrowEndX, + y: rs.arrowEndY + }; + } +}; + +var BRp$a = {}; + +function pushBezierPts(r, edge, pts) { + var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) { + return qbezierAt(p1, p2, p3, t); + }; + + var _p = edge._private; + var bpts = _p.rstyle.bezierPts; + + for (var i = 0; i < r.bezierProjPcts.length; i++) { + var p = r.bezierProjPcts[i]; + bpts.push({ + x: qbezierAt$1(pts[0], pts[2], pts[4], p), + y: qbezierAt$1(pts[1], pts[3], pts[5], p) + }); + } +} + +BRp$a.storeEdgeProjections = function (edge) { + var _p = edge._private; + var rs = _p.rscratch; + var et = rs.edgeType; // clear the cached points state + + _p.rstyle.bezierPts = null; + _p.rstyle.linePts = null; + _p.rstyle.haystackPts = null; + + if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') { + _p.rstyle.bezierPts = []; + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + pushBezierPts(this, edge, rs.allpts.slice(i, i + 6)); + } + } else if (et === 'segments') { + var lpts = _p.rstyle.linePts = []; + + for (var i = 0; i + 1 < rs.allpts.length; i += 2) { + lpts.push({ + x: rs.allpts[i], + y: rs.allpts[i + 1] + }); + } + } else if (et === 'haystack') { + var hpts = rs.haystackPts; + _p.rstyle.haystackPts = [{ + x: hpts[0], + y: hpts[1] + }, { + x: hpts[2], + y: hpts[3] + }]; + } + + _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; +}; + +BRp$a.recalculateEdgeProjections = function (edges) { + this.findEdgeControlPoints(edges); +}; + +/* global document */ + +var BRp$9 = {}; + +BRp$9.recalculateNodeLabelProjection = function (node) { + var content = node.pstyle('label').strValue; + + if (emptyString(content)) { + return; + } + + var textX, textY; + var _p = node._private; + var nodeWidth = node.width(); + var nodeHeight = node.height(); + var padding = node.padding(); + var nodePos = node.position(); + var textHalign = node.pstyle('text-halign').strValue; + var textValign = node.pstyle('text-valign').strValue; + var rs = _p.rscratch; + var rstyle = _p.rstyle; + + switch (textHalign) { + case 'left': + textX = nodePos.x - nodeWidth / 2 - padding; + break; + + case 'right': + textX = nodePos.x + nodeWidth / 2 + padding; + break; + + default: + // e.g. center + textX = nodePos.x; + } + + switch (textValign) { + case 'top': + textY = nodePos.y - nodeHeight / 2 - padding; + break; + + case 'bottom': + textY = nodePos.y + nodeHeight / 2 + padding; + break; + + default: + // e.g. middle + textY = nodePos.y; + } + + rs.labelX = textX; + rs.labelY = textY; + rstyle.labelX = textX; + rstyle.labelY = textY; + this.calculateLabelAngles(node); + this.applyLabelDimensions(node); +}; + +var lineAngleFromDelta = function lineAngleFromDelta(dx, dy) { + var angle = Math.atan(dy / dx); + + if (dx === 0 && angle < 0) { + angle = angle * -1; + } + + return angle; +}; + +var lineAngle = function lineAngle(p0, p1) { + var dx = p1.x - p0.x; + var dy = p1.y - p0.y; + return lineAngleFromDelta(dx, dy); +}; + +var bezierAngle = function bezierAngle(p0, p1, p2, t) { + var t0 = bound(0, t - 0.001, 1); + var t1 = bound(0, t + 0.001, 1); + var lp0 = qbezierPtAt(p0, p1, p2, t0); + var lp1 = qbezierPtAt(p0, p1, p2, t1); + return lineAngle(lp0, lp1); +}; + +BRp$9.recalculateEdgeLabelProjections = function (edge) { + var p; + var _p = edge._private; + var rs = _p.rscratch; + var r = this; + var content = { + mid: edge.pstyle('label').strValue, + source: edge.pstyle('source-label').strValue, + target: edge.pstyle('target-label').strValue + }; + + if (content.mid || content.source || content.target) ; else { + return; // no labels => no calcs + } // add center point to style so bounding box calculations can use it + // + + + p = { + x: rs.midX, + y: rs.midY + }; + + var setRs = function setRs(propName, prefix, value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + setPrefixedProperty(_p.rstyle, propName, prefix, value); + }; + + setRs('labelX', null, p.x); + setRs('labelY', null, p.y); + var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY); + setRs('labelAutoAngle', null, midAngle); + + var createControlPointInfo = function createControlPointInfo() { + if (createControlPointInfo.cache) { + return createControlPointInfo.cache; + } // use cache so only 1x per edge + + + var ctrlpts = []; // store each ctrlpt info init + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + var p0 = { + x: rs.allpts[i], + y: rs.allpts[i + 1] + }; + var p1 = { + x: rs.allpts[i + 2], + y: rs.allpts[i + 3] + }; // ctrlpt + + var p2 = { + x: rs.allpts[i + 4], + y: rs.allpts[i + 5] + }; + ctrlpts.push({ + p0: p0, + p1: p1, + p2: p2, + startDist: 0, + length: 0, + segments: [] + }); + } + + var bpts = _p.rstyle.bezierPts; + var nProjs = r.bezierProjPcts.length; + + function addSegment(cp, p0, p1, t0, t1) { + var length = dist(p0, p1); + var prevSegment = cp.segments[cp.segments.length - 1]; + var segment = { + p0: p0, + p1: p1, + t0: t0, + t1: t1, + startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0, + length: length + }; + cp.segments.push(segment); + cp.length += length; + } // update each ctrlpt with segment info + + + for (var _i = 0; _i < ctrlpts.length; _i++) { + var cp = ctrlpts[_i]; + var prevCp = ctrlpts[_i - 1]; + + if (prevCp) { + cp.startDist = prevCp.startDist + prevCp.length; + } + + addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first + + for (var j = 0; j < nProjs - 1; j++) { + addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]); + } + + addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last + } + + return createControlPointInfo.cache = ctrlpts; + }; + + var calculateEndProjection = function calculateEndProjection(prefix) { + var angle; + var isSrc = prefix === 'source'; + + if (!content[prefix]) { + return; + } + + var offset = edge.pstyle(prefix + '-text-offset').pfValue; + + switch (rs.edgeType) { + case 'self': + case 'compound': + case 'bezier': + case 'multibezier': + { + var cps = createControlPointInfo(); + var selected; + var startDist = 0; + var totalDist = 0; // find the segment we're on + + for (var i = 0; i < cps.length; i++) { + var _cp = cps[isSrc ? i : cps.length - 1 - i]; + + for (var j = 0; j < _cp.segments.length; j++) { + var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j]; + var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1; + startDist = totalDist; + totalDist += _seg.length; + + if (totalDist >= offset || lastSeg) { + selected = { + cp: _cp, + segment: _seg + }; + break; + } + } + + if (selected) { + break; + } + } + + var cp = selected.cp; + var seg = selected.segment; + var tSegment = (offset - startDist) / seg.length; + var segDt = seg.t1 - seg.t0; + var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment; + t = bound(0, t, 1); + p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t); + angle = bezierAngle(cp.p0, cp.p1, cp.p2, t); + break; + } + + case 'straight': + case 'segments': + case 'haystack': + { + var d = 0, + di, + d0; + var p0, p1; + var l = rs.allpts.length; + + for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) { + if (isSrc) { + p0 = { + x: rs.allpts[_i2], + y: rs.allpts[_i2 + 1] + }; + p1 = { + x: rs.allpts[_i2 + 2], + y: rs.allpts[_i2 + 3] + }; + } else { + p0 = { + x: rs.allpts[l - 2 - _i2], + y: rs.allpts[l - 1 - _i2] + }; + p1 = { + x: rs.allpts[l - 4 - _i2], + y: rs.allpts[l - 3 - _i2] + }; + } + + di = dist(p0, p1); + d0 = d; + d += di; + + if (d >= offset) { + break; + } + } + + var pD = offset - d0; + + var _t = pD / di; + + _t = bound(0, _t, 1); + p = lineAt(p0, p1, _t); + angle = lineAngle(p0, p1); + break; + } + } + + setRs('labelX', prefix, p.x); + setRs('labelY', prefix, p.y); + setRs('labelAutoAngle', prefix, angle); + }; + + calculateEndProjection('source'); + calculateEndProjection('target'); + this.applyLabelDimensions(edge); +}; + +BRp$9.applyLabelDimensions = function (ele) { + this.applyPrefixedLabelDimensions(ele); + + if (ele.isEdge()) { + this.applyPrefixedLabelDimensions(ele, 'source'); + this.applyPrefixedLabelDimensions(ele, 'target'); + } +}; + +BRp$9.applyPrefixedLabelDimensions = function (ele, prefix) { + var _p = ele._private; + var text = this.getLabelText(ele, prefix); + var labelDims = this.calculateLabelDimensions(ele, text); + var lineHeight = ele.pstyle('line-height').pfValue; + var textWrap = ele.pstyle('text-wrap').strValue; + var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || []; + var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1); + var normPerLineHeight = labelDims.height / numLines; + var labelLineHeight = normPerLineHeight * lineHeight; + var width = labelDims.width; + var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight; + setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight); +}; + +BRp$9.getLabelText = function (ele, prefix) { + var _p = ele._private; + var pfd = prefix ? prefix + '-' : ''; + var text = ele.pstyle(pfd + 'label').strValue; + var textTransform = ele.pstyle('text-transform').value; + + var rscratch = function rscratch(propName, value) { + if (value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + return value; + } else { + return getPrefixedProperty(_p.rscratch, propName, prefix); + } + }; // for empty text, skip all processing + + + if (!text) { + return ''; + } + + if (textTransform == 'none') ; else if (textTransform == 'uppercase') { + text = text.toUpperCase(); + } else if (textTransform == 'lowercase') { + text = text.toLowerCase(); + } + + var wrapStyle = ele.pstyle('text-wrap').value; + + if (wrapStyle === 'wrap') { + var labelKey = rscratch('labelKey'); // save recalc if the label is the same as before + + if (labelKey != null && rscratch('labelWrapKey') === labelKey) { + return rscratch('labelWrapCachedText'); + } + + var zwsp = "\u200B"; + var lines = text.split('\n'); + var maxW = ele.pstyle('text-max-width').pfValue; + var overflow = ele.pstyle('text-overflow-wrap').value; + var overflowAny = overflow === 'anywhere'; + var wrappedLines = []; + var wordsRegex = /[\s\u200b]+/; + var wordSeparator = overflowAny ? '' : ' '; + + for (var l = 0; l < lines.length; l++) { + var line = lines[l]; + var lineDims = this.calculateLabelDimensions(ele, line); + var lineW = lineDims.width; + + if (overflowAny) { + var processedLine = line.split('').join(zwsp); + line = processedLine; + } + + if (lineW > maxW) { + // line is too long + var words = line.split(wordsRegex); + var subline = ''; + + for (var w = 0; w < words.length; w++) { + var word = words[w]; + var testLine = subline.length === 0 ? word : subline + wordSeparator + word; + var testDims = this.calculateLabelDimensions(ele, testLine); + var testW = testDims.width; + + if (testW <= maxW) { + // word fits on current line + subline += word + wordSeparator; + } else { + // word starts new line + if (subline) { + wrappedLines.push(subline); + } + + subline = word + wordSeparator; + } + } // if there's remaining text, put it in a wrapped line + + + if (!subline.match(/^[\s\u200b]+$/)) { + wrappedLines.push(subline); + } + } else { + // line is already short enough + wrappedLines.push(line); + } + } // for + + + rscratch('labelWrapCachedLines', wrappedLines); + text = rscratch('labelWrapCachedText', wrappedLines.join('\n')); + rscratch('labelWrapKey', labelKey); + } else if (wrapStyle === 'ellipsis') { + var _maxW = ele.pstyle('text-max-width').pfValue; + var ellipsized = ''; + var ellipsis = "\u2026"; + var incLastCh = false; + + if (this.calculateLabelDimensions(ele, text).width < _maxW) { + // the label already fits + return text; + } + + for (var i = 0; i < text.length; i++) { + var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width; + + if (widthWithNextCh > _maxW) { + break; + } + + ellipsized += text[i]; + + if (i === text.length - 1) { + incLastCh = true; + } + } + + if (!incLastCh) { + ellipsized += ellipsis; + } + + return ellipsized; + } // if ellipsize + + + return text; +}; + +BRp$9.getLabelJustification = function (ele) { + var justification = ele.pstyle('text-justification').strValue; + var textHalign = ele.pstyle('text-halign').strValue; + + if (justification === 'auto') { + if (ele.isNode()) { + switch (textHalign) { + case 'left': + return 'right'; + + case 'right': + return 'left'; + + default: + return 'center'; + } + } else { + return 'center'; + } + } else { + return justification; + } +}; + +BRp$9.calculateLabelDimensions = function (ele, text) { + var r = this; + var cacheKey = hashString(text, ele._private.labelDimsKey); + var cache = r.labelDimCache || (r.labelDimCache = []); + var existingVal = cache[cacheKey]; + + if (existingVal != null) { + return existingVal; + } + + var padding = 0; // add padding around text dims, as the measurement isn't that accurate + + var fStyle = ele.pstyle('font-style').strValue; + var size = ele.pstyle('font-size').pfValue; + var family = ele.pstyle('font-family').strValue; + var weight = ele.pstyle('font-weight').strValue; + var canvas = this.labelCalcCanvas; + var c2d = this.labelCalcCanvasContext; + + if (!canvas) { + canvas = this.labelCalcCanvas = document.createElement('canvas'); + c2d = this.labelCalcCanvasContext = canvas.getContext('2d'); + var ds = canvas.style; + ds.position = 'absolute'; + ds.left = '-9999px'; + ds.top = '-9999px'; + ds.zIndex = '-1'; + ds.visibility = 'hidden'; + ds.pointerEvents = 'none'; + } + + c2d.font = "".concat(fStyle, " ").concat(weight, " ").concat(size, "px ").concat(family); + var width = 0; + var height = 0; + var lines = text.split('\n'); + + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var metrics = c2d.measureText(line); + var w = Math.ceil(metrics.width); + var h = size; + width = Math.max(w, width); + height += h; + } + + width += padding; + height += padding; + return cache[cacheKey] = { + width: width, + height: height + }; +}; + +BRp$9.calculateLabelAngle = function (ele, prefix) { + var _p = ele._private; + var rs = _p.rscratch; + var isEdge = ele.isEdge(); + var prefixDash = prefix ? prefix + '-' : ''; + var rot = ele.pstyle(prefixDash + 'text-rotation'); + var rotStr = rot.strValue; + + if (rotStr === 'none') { + return 0; + } else if (isEdge && rotStr === 'autorotate') { + return rs.labelAutoAngle; + } else if (rotStr === 'autorotate') { + return 0; + } else { + return rot.pfValue; + } +}; + +BRp$9.calculateLabelAngles = function (ele) { + var r = this; + var isEdge = ele.isEdge(); + var _p = ele._private; + var rs = _p.rscratch; + rs.labelAngle = r.calculateLabelAngle(ele); + + if (isEdge) { + rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source'); + rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target'); + } +}; + +var BRp$8 = {}; +var TOO_SMALL_CUT_RECT = 28; +var warnedCutRect = false; + +BRp$8.getNodeShape = function (node) { + var r = this; + var shape = node.pstyle('shape').value; + + if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) { + if (!warnedCutRect) { + warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead'); + warnedCutRect = true; + } + + return 'rectangle'; + } + + if (node.isParent()) { + if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') { + return shape; + } else { + return 'rectangle'; + } + } + + if (shape === 'polygon') { + var points = node.pstyle('shape-polygon-points').value; + return r.nodeShapes.makePolygon(points).name; + } + + return shape; +}; + +var BRp$7 = {}; + +BRp$7.registerCalculationListeners = function () { + var cy = this.cy; + var elesToUpdate = cy.collection(); + var r = this; + + var enqueue = function enqueue(eles) { + var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + elesToUpdate.merge(eles); + + if (dirtyStyleCaches) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; + rstyle.clean = false; + rstyle.cleanConnected = false; + } + } + }; + + r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) { + var ele = e.target; + enqueue(ele); + }).on('style.* background.*', function onDirtyStyle(e) { + var ele = e.target; + enqueue(ele, false); + }); + + var updateEleCalcs = function updateEleCalcs(willDraw) { + if (willDraw) { + var fns = r.onUpdateEleCalcsFns; // because we need to have up-to-date style (e.g. stylesheet mappers) + // before calculating rendered style (and pstyle might not be called yet) + + elesToUpdate.cleanStyle(); + + for (var i = 0; i < elesToUpdate.length; i++) { + var ele = elesToUpdate[i]; + var rstyle = ele._private.rstyle; + + if (ele.isNode() && !rstyle.cleanConnected) { + enqueue(ele.connectedEdges()); + rstyle.cleanConnected = true; + } + } + + if (fns) { + for (var _i = 0; _i < fns.length; _i++) { + var fn = fns[_i]; + fn(willDraw, elesToUpdate); + } + } + + r.recalculateRenderedStyle(elesToUpdate); + elesToUpdate = cy.collection(); + } + }; + + r.flushRenderedStyleQueue = function () { + updateEleCalcs(true); + }; + + r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs); +}; + +BRp$7.onUpdateEleCalcs = function (fn) { + var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []; + fns.push(fn); +}; + +BRp$7.recalculateRenderedStyle = function (eles, useCache) { + var isCleanConnected = function isCleanConnected(ele) { + return ele._private.rstyle.cleanConnected; + }; + + var edges = []; + var nodes = []; // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox() + + if (this.destroyed) { + return; + } // use cache by default for perf + + + if (useCache === undefined) { + useCache = true; + } + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; // an edge may be implicitly dirty b/c of one of its connected nodes + // (and a request for recalc may come in between frames) + + if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) { + rstyle.clean = false; + } // only update if dirty and in graph + + + if (useCache && rstyle.clean || ele.removed()) { + continue; + } // only update if not display: none + + + if (ele.pstyle('display').value === 'none') { + continue; + } + + if (_p.group === 'nodes') { + nodes.push(ele); + } else { + // edges + edges.push(ele); + } + + rstyle.clean = true; + } // update node data from projections + + + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + var _p2 = _ele._private; + var _rstyle = _p2.rstyle; + + var pos = _ele.position(); + + this.recalculateNodeLabelProjection(_ele); + _rstyle.nodeX = pos.x; + _rstyle.nodeY = pos.y; + _rstyle.nodeW = _ele.pstyle('width').pfValue; + _rstyle.nodeH = _ele.pstyle('height').pfValue; + } + + this.recalculateEdgeProjections(edges); // update edge data from projections + + for (var _i3 = 0; _i3 < edges.length; _i3++) { + var _ele2 = edges[_i3]; + var _p3 = _ele2._private; + var _rstyle2 = _p3.rstyle; + var rs = _p3.rscratch; // update rstyle positions + + _rstyle2.srcX = rs.arrowStartX; + _rstyle2.srcY = rs.arrowStartY; + _rstyle2.tgtX = rs.arrowEndX; + _rstyle2.tgtY = rs.arrowEndY; + _rstyle2.midX = rs.midX; + _rstyle2.midY = rs.midY; + _rstyle2.labelAngle = rs.labelAngle; + _rstyle2.sourceLabelAngle = rs.sourceLabelAngle; + _rstyle2.targetLabelAngle = rs.targetLabelAngle; + } +}; + +var BRp$6 = {}; + +BRp$6.updateCachedGrabbedEles = function () { + var eles = this.cachedZSortedEles; + + if (!eles) { + // just let this be recalculated on the next z sort tick + return; + } + + eles.drag = []; + eles.nondrag = []; + var grabTargets = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + + if (ele.grabbed() && !ele.isParent()) { + grabTargets.push(ele); + } else if (rs.inDragLayer) { + eles.drag.push(ele); + } else { + eles.nondrag.push(ele); + } + } // put the grab target nodes last so it's on top of its neighbourhood + + + for (var i = 0; i < grabTargets.length; i++) { + var ele = grabTargets[i]; + eles.drag.push(ele); + } +}; + +BRp$6.invalidateCachedZSortedEles = function () { + this.cachedZSortedEles = null; +}; + +BRp$6.getCachedZSortedEles = function (forceRecalc) { + if (forceRecalc || !this.cachedZSortedEles) { + var eles = this.cy.mutableElements().toArray(); + eles.sort(zIndexSort); + eles.interactive = eles.filter(function (ele) { + return ele.interactive(); + }); + this.cachedZSortedEles = eles; + this.updateCachedGrabbedEles(); + } else { + eles = this.cachedZSortedEles; + } + + return eles; +}; + +var BRp$5 = {}; +[BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) { + extend(BRp$5, props); +}); + +var BRp$4 = {}; + +BRp$4.getCachedImage = function (url, crossOrigin, onLoad) { + var r = this; + var imageCache = r.imageCache = r.imageCache || {}; + var cache = imageCache[url]; + + if (cache) { + if (!cache.image.complete) { + cache.image.addEventListener('load', onLoad); + } + + return cache.image; + } else { + cache = imageCache[url] = imageCache[url] || {}; + var image = cache.image = new Image(); // eslint-disable-line no-undef + + image.addEventListener('load', onLoad); + image.addEventListener('error', function () { + image.error = true; + }); // #1582 safari doesn't load data uris with crossOrigin properly + // https://bugs.webkit.org/show_bug.cgi?id=123978 + + var dataUriPrefix = 'data:'; + var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix; + + if (!isDataUri) { + image.crossOrigin = crossOrigin; // prevent tainted canvas + } + + image.src = url; + return image; + } +}; + +var BRp$3 = {}; +/* global document, window, ResizeObserver, MutationObserver */ + +BRp$3.registerBinding = function (target, event, handler, useCapture) { + // eslint-disable-line no-unused-vars + var args = Array.prototype.slice.apply(arguments, [1]); // copy + + var b = this.binder(target); + return b.on.apply(b, args); +}; + +BRp$3.binder = function (tgt) { + var r = this; + var tgtIsDom = tgt === window || tgt === document || tgt === document.body || domElement(tgt); + + if (r.supportsPassiveEvents == null) { + // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + var supportsPassive = false; + + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + supportsPassive = true; + return true; + } + }); + window.addEventListener('test', null, opts); + } catch (err) {// not supported + } + + r.supportsPassiveEvents = supportsPassive; + } + + var on = function on(event, handler, useCapture) { + var args = Array.prototype.slice.call(arguments); + + if (tgtIsDom && r.supportsPassiveEvents) { + // replace useCapture w/ opts obj + args[2] = { + capture: useCapture != null ? useCapture : false, + passive: false, + once: false + }; + } + + r.bindings.push({ + target: tgt, + args: args + }); + (tgt.addEventListener || tgt.on).apply(tgt, args); + return this; + }; + + return { + on: on, + addEventListener: on, + addListener: on, + bind: on + }; +}; + +BRp$3.nodeIsDraggable = function (node) { + return node && node.isNode() && !node.locked() && node.grabbable(); +}; + +BRp$3.nodeIsGrabbable = function (node) { + return this.nodeIsDraggable(node) && node.interactive(); +}; + +BRp$3.load = function () { + var r = this; + + var isSelected = function isSelected(ele) { + return ele.selected(); + }; + + var triggerEvents = function triggerEvents(target, names, e, position) { + if (target == null) { + target = r.cy; + } + + for (var i = 0; i < names.length; i++) { + var name = names[i]; + target.emit({ + originalEvent: e, + type: name, + position: position + }); + } + }; + + var isMultSelKeyDown = function isMultSelKeyDown(e) { + return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey + }; + + var allowPanningPassthrough = function allowPanningPassthrough(down, downs) { + var allowPassthrough = true; + + if (r.cy.hasCompoundNodes() && down && down.pannable()) { + // a grabbable compound node below the ele => no passthrough panning + for (var i = 0; downs && i < downs.length; i++) { + var down = downs[i]; //if any parent node in event hierarchy isn't pannable, reject passthrough + + if (down.isNode() && down.isParent() && !down.pannable()) { + allowPassthrough = false; + break; + } + } + } else { + allowPassthrough = true; + } + + return allowPassthrough; + }; + + var setGrabbed = function setGrabbed(ele) { + ele[0]._private.grabbed = true; + }; + + var setFreed = function setFreed(ele) { + ele[0]._private.grabbed = false; + }; + + var setInDragLayer = function setInDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = true; + }; + + var setOutDragLayer = function setOutDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = false; + }; + + var setGrabTarget = function setGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = true; + }; + + var removeGrabTarget = function removeGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = false; + }; + + var addToDragList = function addToDragList(ele, opts) { + var list = opts.addToList; + var listHasEle = list.has(ele); + + if (!listHasEle && ele.grabbable() && !ele.locked()) { + list.merge(ele); + setGrabbed(ele); + } + }; // helper function to determine which child nodes and inner edges + // of a compound node to be dragged as well as the grabbed and selected nodes + + + var addDescendantsToDrag = function addDescendantsToDrag(node, opts) { + if (!node.cy().hasCompoundNodes()) { + return; + } + + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + + var innerNodes = node.descendants(); + + if (opts.inDragLayer) { + innerNodes.forEach(setInDragLayer); + innerNodes.connectedEdges().forEach(setInDragLayer); + } + + if (opts.addToList) { + addToDragList(innerNodes, opts); + } + }; // adds the given nodes and its neighbourhood to the drag layer + + + var addNodesToDrag = function addNodesToDrag(nodes, opts) { + opts = opts || {}; + var hasCompoundNodes = nodes.cy().hasCompoundNodes(); + + if (opts.inDragLayer) { + nodes.forEach(setInDragLayer); + nodes.neighborhood().stdFilter(function (ele) { + return !hasCompoundNodes || ele.isEdge(); + }).forEach(setInDragLayer); + } + + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + + addDescendantsToDrag(nodes, opts); // always add to drag + // also add nodes and edges related to the topmost ancestor + + updateAncestorsInDragLayer(nodes, { + inDragLayer: opts.inDragLayer + }); + r.updateCachedGrabbedEles(); + }; + + var addNodeToDrag = addNodesToDrag; + + var freeDraggedElements = function freeDraggedElements(grabbedEles) { + if (!grabbedEles) { + return; + } // just go over all elements rather than doing a bunch of (possibly expensive) traversals + + + r.getCachedZSortedEles().forEach(function (ele) { + setFreed(ele); + setOutDragLayer(ele); + removeGrabTarget(ele); + }); + r.updateCachedGrabbedEles(); + }; // helper function to determine which ancestor nodes and edges should go + // to the drag layer (or should be removed from drag layer). + + + var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) { + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + + if (!node.cy().hasCompoundNodes()) { + return; + } // find top-level parent + + + var parent = node.ancestors().orphans(); // no parent node: no nodes to add to the drag layer + + if (parent.same(node)) { + return; + } + + var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants()); + var edges = nodes.connectedEdges(); + + if (opts.inDragLayer) { + edges.forEach(setInDragLayer); + nodes.forEach(setInDragLayer); + } + + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + }; + + var blurActiveDomElement = function blurActiveDomElement() { + if (document.activeElement != null && document.activeElement.blur != null) { + document.activeElement.blur(); + } + }; + + var haveMutationsApi = typeof MutationObserver !== 'undefined'; + var haveResizeObserverApi = typeof ResizeObserver !== 'undefined'; // watch for when the cy container is removed from the dom + + if (haveMutationsApi) { + r.removeObserver = new MutationObserver(function (mutns) { + // eslint-disable-line no-undef + for (var i = 0; i < mutns.length; i++) { + var mutn = mutns[i]; + var rNodes = mutn.removedNodes; + + if (rNodes) { + for (var j = 0; j < rNodes.length; j++) { + var rNode = rNodes[j]; + + if (rNode === r.container) { + r.destroy(); + break; + } + } + } + } + }); + + if (r.container.parentNode) { + r.removeObserver.observe(r.container.parentNode, { + childList: true + }); + } + } else { + r.registerBinding(r.container, 'DOMNodeRemoved', function (e) { + // eslint-disable-line no-unused-vars + r.destroy(); + }); + } + + var onResize = debounce__default["default"](function () { + r.cy.resize(); + }, 100); + + if (haveMutationsApi) { + r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef + + r.styleObserver.observe(r.container, { + attributes: true + }); + } // auto resize + + + r.registerBinding(window, 'resize', onResize); // eslint-disable-line no-undef + + if (haveResizeObserverApi) { + r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef + + r.resizeObserver.observe(r.container); + } + + var forEachUp = function forEachUp(domEle, fn) { + while (domEle != null) { + fn(domEle); + domEle = domEle.parentNode; + } + }; + + var invalidateCoords = function invalidateCoords() { + r.invalidateContainerClientCoordsCache(); + }; + + forEachUp(r.container, function (domEle) { + r.registerBinding(domEle, 'transitionend', invalidateCoords); + r.registerBinding(domEle, 'animationend', invalidateCoords); + r.registerBinding(domEle, 'scroll', invalidateCoords); + }); // stop right click menu from appearing on cy + + r.registerBinding(r.container, 'contextmenu', function (e) { + e.preventDefault(); + }); + + var inBoxSelection = function inBoxSelection() { + return r.selection[4] !== 0; + }; + + var eventInContainer = function eventInContainer(e) { + // save cycles if mouse events aren't to be captured + var containerPageCoords = r.findContainerClientCoords(); + var x = containerPageCoords[0]; + var y = containerPageCoords[1]; + var width = containerPageCoords[2]; + var height = containerPageCoords[3]; + var positions = e.touches ? e.touches : [e]; + var atLeastOnePosInside = false; + + for (var i = 0; i < positions.length; i++) { + var p = positions[i]; + + if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) { + atLeastOnePosInside = true; + break; + } + } + + if (!atLeastOnePosInside) { + return false; + } + + var container = r.container; + var target = e.target; + var tParent = target.parentNode; + var containerIsTarget = false; + + while (tParent) { + if (tParent === container) { + containerIsTarget = true; + break; + } + + tParent = tParent.parentNode; + } + + if (!containerIsTarget) { + return false; + } // if target is outisde cy container, then this event is not for us + + + return true; + }; // Primary key + + + r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) { + if (!eventInContainer(e)) { + return; + } + + e.preventDefault(); + blurActiveDomElement(); + r.hoverData.capture = true; + r.hoverData.which = e.which; + var cy = r.cy; + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var select = r.selection; + var nears = r.findNearestElements(pos[0], pos[1], true, false); + var near = nears[0]; + var draggedElements = r.dragData.possibleDragElements; + r.hoverData.mdownPos = pos; + r.hoverData.mdownGPos = gpos; + + var checkForTaphold = function checkForTaphold() { + r.hoverData.tapholdCancelled = false; + clearTimeout(r.hoverData.tapholdTimeout); + r.hoverData.tapholdTimeout = setTimeout(function () { + if (r.hoverData.tapholdCancelled) { + return; + } else { + var ele = r.hoverData.down; + + if (ele) { + ele.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } else { + cy.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + }, r.tapholdDuration); + }; // Right click button + + + if (e.which == 3) { + r.hoverData.cxtStarted = true; + var cxtEvt = { + originalEvent: e, + type: 'cxttapstart', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (near) { + near.activate(); + near.emit(cxtEvt); + r.hoverData.down = near; + } else { + cy.emit(cxtEvt); + } + + r.hoverData.downTime = new Date().getTime(); + r.hoverData.cxtDragged = false; // Primary button + } else if (e.which == 1) { + if (near) { + near.activate(); + } // Element dragging + + + { + // If something is under the cursor and it is draggable, prepare to grab it + if (near != null) { + if (r.nodeIsGrabbable(near)) { + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: pos[0], + y: pos[1] + } + }; + }; + + var triggerGrab = function triggerGrab(ele) { + ele.emit(makeEvent('grab')); + }; + + setGrabTarget(near); + + if (!near.selected()) { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + addNodeToDrag(near, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')).emit(makeEvent('grab')); + } else { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + var selectedNodes = cy.$(function (ele) { + return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')); + selectedNodes.forEach(triggerGrab); + } + + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + } + + r.hoverData.down = near; + r.hoverData.downs = nears; + r.hoverData.downTime = new Date().getTime(); + } + triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, { + x: pos[0], + y: pos[1] + }); + + if (near == null) { + select[4] = 1; + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } else if (near.pannable()) { + select[4] = 1; // for future pan + } + + checkForTaphold(); + } // Initialize selection box coordinates + + + select[0] = select[2] = pos[0]; + select[1] = select[3] = pos[1]; + }, false); + r.registerBinding(window, 'mousemove', function mousemoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + + if (!capture && !eventInContainer(e)) { + return; + } + + var preventDefault = false; + var cy = r.cy; + var zoom = cy.zoom(); + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var mdownPos = r.hoverData.mdownPos; + var mdownGPos = r.hoverData.mdownGPos; + var select = r.selection; + var near = null; + + if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) { + near = r.findNearestElement(pos[0], pos[1], true, false); + } + + var last = r.hoverData.last; + var down = r.hoverData.down; + var disp = [pos[0] - select[2], pos[1] - select[3]]; + var draggedElements = r.dragData.possibleDragElements; + var isOverThresholdDrag; + + if (mdownGPos) { + var dx = gpos[0] - mdownGPos[0]; + var dx2 = dx * dx; + var dy = gpos[1] - mdownGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2; + } + + var multSelKeyDown = isMultSelKeyDown(e); + + if (isOverThresholdDrag) { + r.hoverData.tapholdCancelled = true; + } + + var updateDragDelta = function updateDragDelta() { + var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || []; + + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + }; + + preventDefault = true; + triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, { + x: pos[0], + y: pos[1] + }); + + var goIntoBoxMode = function goIntoBoxMode() { + r.data.bgActivePosistion = undefined; + + if (!r.hoverData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: pos[0], + y: pos[1] + } + }); + } + + select[4] = 1; + r.hoverData.selecting = true; + r.redrawHint('select', true); + r.redraw(); + }; // trigger context drag if rmouse down + + + if (r.hoverData.which === 3) { + // but only if over threshold + if (isOverThresholdDrag) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + r.hoverData.cxtDragged = true; + + if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) { + if (r.hoverData.cxtOver) { + r.hoverData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: pos[0], + y: pos[1] + } + }); + } + + r.hoverData.cxtOver = near; + + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + } // Check if we are drag panning the entire graph + + } else if (r.hoverData.dragging) { + preventDefault = true; + + if (cy.panningEnabled() && cy.userPanningEnabled()) { + var deltaP; + + if (r.hoverData.justStartedPan) { + var mdPos = r.hoverData.mdownPos; + deltaP = { + x: (pos[0] - mdPos[0]) * zoom, + y: (pos[1] - mdPos[1]) * zoom + }; + r.hoverData.justStartedPan = false; + } else { + deltaP = { + x: disp[0] * zoom, + y: disp[1] * zoom + }; + } + + cy.panBy(deltaP); + cy.emit('dragpan'); + r.hoverData.dragged = true; + } // Needs reproject due to pan changing viewport + + + pos = r.projectIntoViewport(e.clientX, e.clientY); // Checks primary button down & out of time & mouse not moved much + } else if (select[4] == 1 && (down == null || down.pannable())) { + if (isOverThresholdDrag) { + if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) { + goIntoBoxMode(); + } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs); + + if (allowPassthrough) { + r.hoverData.dragging = true; + r.hoverData.justStartedPan = true; + select[4] = 0; + r.data.bgActivePosistion = array2point(mdownPos); + r.redrawHint('select', true); + r.redraw(); + } + } + + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + } + } else { + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + + if ((!down || !down.grabbed()) && near != last) { + if (last) { + triggerEvents(last, ['mouseout', 'tapdragout'], e, { + x: pos[0], + y: pos[1] + }); + } + + if (near) { + triggerEvents(near, ['mouseover', 'tapdragover'], e, { + x: pos[0], + y: pos[1] + }); + } + + r.hoverData.last = near; + } + + if (down) { + if (isOverThresholdDrag) { + // then we can take action + if (cy.boxSelectionEnabled() && multSelKeyDown) { + // then selection overrides + if (down && down.grabbed()) { + freeDraggedElements(draggedElements); + down.emit('freeon'); + draggedElements.emit('free'); + + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + + goIntoBoxMode(); + } else if (down && down.grabbed() && r.nodeIsDraggable(down)) { + // drag node + var justStartedDrag = !r.dragData.didDrag; + + if (justStartedDrag) { + r.redrawHint('eles', true); + } + + r.dragData.didDrag = true; // indicate that we actually did drag the node + // now, add the elements to the drag layer if not done already + + if (!r.hoverData.draggingEles) { + addNodesToDrag(draggedElements, { + inDragLayer: true + }); + } + + var totalShift = { + x: 0, + y: 0 + }; + + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + + if (justStartedDrag) { + var dragDelta = r.hoverData.dragDelta; + + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + + r.hoverData.draggingEles = true; + draggedElements.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + r.redraw(); + } + } else { + // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant + updateDragDelta(); + } + } // prevent the dragging from triggering text selection on the page + + + preventDefault = true; + } + + select[2] = pos[0]; + select[3] = pos[1]; + + if (preventDefault) { + if (e.stopPropagation) e.stopPropagation(); + if (e.preventDefault) e.preventDefault(); + return false; + } + }, false); + var clickTimeout, didDoubleClick, prevClickTimeStamp; + r.registerBinding(window, 'mouseup', function mouseupHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + + if (!capture) { + return; + } + + r.hoverData.capture = false; + var cy = r.cy; + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var select = r.selection; + var near = r.findNearestElement(pos[0], pos[1], true, false); + var draggedElements = r.dragData.possibleDragElements; + var down = r.hoverData.down; + var multSelKeyDown = isMultSelKeyDown(e); + + if (r.data.bgActivePosistion) { + r.redrawHint('select', true); + r.redraw(); + } + + r.hoverData.tapholdCancelled = true; + r.data.bgActivePosistion = undefined; // not active bg now + + if (down) { + down.unactivate(); + } + + if (r.hoverData.which === 3) { + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + if (!r.hoverData.cxtDragged) { + var cxtTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtTap); + } else { + cy.emit(cxtTap); + } + } + + r.hoverData.cxtDragged = false; + r.hoverData.which = null; + } else if (r.hoverData.which === 1) { + triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, { + x: pos[0], + y: pos[1] + }); + + if (!r.dragData.didDrag && // didn't move a node around + !r.hoverData.dragged && // didn't pan + !r.hoverData.selecting && // not box selection + !r.hoverData.isOverThresholdDrag // didn't move too much + ) { + triggerEvents(down, ["click", "tap", "vclick"], e, { + x: pos[0], + y: pos[1] + }); + didDoubleClick = false; + + if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { + clickTimeout && clearTimeout(clickTimeout); + didDoubleClick = true; + prevClickTimeStamp = null; + triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e, { + x: pos[0], + y: pos[1] + }); + } else { + clickTimeout = setTimeout(function () { + if (didDoubleClick) return; + triggerEvents(down, ["oneclick", "onetap", "voneclick"], e, { + x: pos[0], + y: pos[1] + }); + }, cy.multiClickDebounceTime()); + prevClickTimeStamp = e.timeStamp; + } + } // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something + + + if (down == null // not mousedown on node + && !r.dragData.didDrag // didn't move the node around + && !r.hoverData.selecting // not box selection + && !r.hoverData.dragged // didn't pan + && !isMultSelKeyDown(e)) { + cy.$(isSelected).unselect(['tapunselect']); + + if (draggedElements.length > 0) { + r.redrawHint('eles', true); + } + + r.dragData.possibleDragElements = draggedElements = cy.collection(); + } // Single selection + + + if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) { + if (near != null && near._private.selectable) { + if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) { + if (near.selected()) { + near.unselect(['tapunselect']); + } else { + near.select(['tapselect']); + } + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(near).unselect(['tapunselect']); + near.select(['tapselect']); + } + } + + r.redrawHint('eles', true); + } + } + + if (r.hoverData.selecting) { + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + r.redrawHint('select', true); + + if (box.length > 0) { + r.redrawHint('eles', true); + } + + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: pos[0], + y: pos[1] + } + }); + + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + + if (cy.selectionType() === 'additive') { + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(box).unselect(); + } + + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } // always need redraw in case eles unselectable + + + r.redraw(); + } // Cancel drag pan + + + if (r.hoverData.dragging) { + r.hoverData.dragging = false; + r.redrawHint('select', true); + r.redrawHint('eles', true); + r.redraw(); + } + + if (!select[4]) { + r.redrawHint('drag', true); + r.redrawHint('eles', true); + var downWasGrabbed = down && down.grabbed(); + freeDraggedElements(draggedElements); + + if (downWasGrabbed) { + down.emit('freeon'); + draggedElements.emit('free'); + + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + } + } // else not right mouse + + + select[4] = 0; + r.hoverData.down = null; + r.hoverData.cxtStarted = false; + r.hoverData.draggingEles = false; + r.hoverData.selecting = false; + r.hoverData.isOverThresholdDrag = false; + r.dragData.didDrag = false; + r.hoverData.dragged = false; + r.hoverData.dragDelta = []; + r.hoverData.mdownPos = null; + r.hoverData.mdownGPos = null; + }, false); + + var wheelHandler = function wheelHandler(e) { + if (r.scrollingPage) { + return; + } // while scrolling, ignore wheel-to-zoom + + + var cy = r.cy; + var zoom = cy.zoom(); + var pan = cy.pan(); + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y]; + + if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) { + // if pan dragging or cxt dragging, wheel movements make no zoom + e.preventDefault(); + return; + } + + if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) { + e.preventDefault(); + r.data.wheelZooming = true; + clearTimeout(r.data.wheelTimeout); + r.data.wheelTimeout = setTimeout(function () { + r.data.wheelZooming = false; + r.redrawHint('eles', true); + r.redraw(); + }, 150); + var diff; + + if (e.deltaY != null) { + diff = e.deltaY / -250; + } else if (e.wheelDeltaY != null) { + diff = e.wheelDeltaY / 1000; + } else { + diff = e.wheelDelta / 1000; + } + + diff = diff * r.wheelSensitivity; + var needsWheelFix = e.deltaMode === 1; + + if (needsWheelFix) { + // fixes slow wheel events on ff/linux and ff/windows + diff *= 33; + } + + var newZoom = cy.zoom() * Math.pow(10, diff); + + if (e.type === 'gesturechange') { + newZoom = r.gestureStartZoom * e.scale; + } + + cy.zoom({ + level: newZoom, + renderedPosition: { + x: rpos[0], + y: rpos[1] + } + }); + cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom'); + } + }; // Functions to help with whether mouse wheel should trigger zooming + // -- + + + r.registerBinding(r.container, 'wheel', wheelHandler, true); // disable nonstandard wheel events + // r.registerBinding(r.container, 'mousewheel', wheelHandler, true); + // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true); + // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox + + r.registerBinding(window, 'scroll', function scrollHandler(e) { + // eslint-disable-line no-unused-vars + r.scrollingPage = true; + clearTimeout(r.scrollingPageTimeout); + r.scrollingPageTimeout = setTimeout(function () { + r.scrollingPage = false; + }, 250); + }, true); // desktop safari pinch to zoom start + + r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) { + r.gestureStartZoom = r.cy.zoom(); + + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + e.preventDefault(); + } + }, true); + r.registerBinding(r.container, 'gesturechange', function (e) { + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + wheelHandler(e); + } + }, true); // Functions to help with handling mouseout/mouseover on the Cytoscape container + // Handle mouseout on Cytoscape container + + r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseout', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseover', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom + + var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom + + var center1, modelCenter1; // center point on start pinch to zoom + + var offsetLeft, offsetTop; + var containerWidth, containerHeight; + var twoFingersStartInside; + + var distance = function distance(x1, y1, x2, y2) { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + }; + + var distanceSq = function distanceSq(x1, y1, x2, y2) { + return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); + }; + + var touchstartHandler; + r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) { + r.hasTouchStarted = true; + + if (!eventInContainer(e)) { + return; + } + + blurActiveDomElement(); + r.touchData.capture = true; + r.data.bgActivePosistion = undefined; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } // record starting points for pinch-to-zoom + + + if (e.touches[1]) { + r.touchData.singleTouchMoved = true; + freeDraggedElements(r.dragData.touchDragEles); + var offsets = r.findContainerClientCoords(); + offsetLeft = offsets[0]; + offsetTop = offsets[1]; + containerWidth = offsets[2]; + containerHeight = offsets[3]; + f1x1 = e.touches[0].clientX - offsetLeft; + f1y1 = e.touches[0].clientY - offsetTop; + f2x1 = e.touches[1].clientX - offsetLeft; + f2y1 = e.touches[1].clientY - offsetTop; + twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight; + var pan = cy.pan(); + var zoom = cy.zoom(); + distance1 = distance(f1x1, f1y1, f2x1, f2y1); + distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1); + center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2]; + modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom]; // consider context tap + + var cxtDistThreshold = 200; + var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold; + + if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) { + var near1 = r.findNearestElement(now[0], now[1], true, true); + var near2 = r.findNearestElement(now[2], now[3], true, true); + + if (near1 && near1.isNode()) { + near1.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near1; + } else if (near2 && near2.isNode()) { + near2.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near2; + } else { + cy.emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxt = true; + r.touchData.cxtDragged = false; + r.data.bgActivePosistion = undefined; + r.redraw(); + return; + } + } + + if (e.touches[2]) { + // ignore + // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...) + if (cy.boxSelectionEnabled()) { + e.preventDefault(); + } + } else if (e.touches[1]) ; else if (e.touches[0]) { + var nears = r.findNearestElements(now[0], now[1], true, true); + var near = nears[0]; + + if (near != null) { + near.activate(); + r.touchData.start = near; + r.touchData.starts = nears; + + if (r.nodeIsGrabbable(near)) { + var draggedEles = r.dragData.touchDragEles = cy.collection(); + var selectedNodes = null; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + + if (near.selected()) { + // reset drag elements, since near will be added again + selectedNodes = cy.$(function (ele) { + return ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedEles + }); + } else { + addNodeToDrag(near, { + addToList: draggedEles + }); + } + + setGrabTarget(near); + + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: now[0], + y: now[1] + } + }; + }; + + near.emit(makeEvent('grabon')); + + if (selectedNodes) { + selectedNodes.forEach(function (n) { + n.emit(makeEvent('grab')); + }); + } else { + near.emit(makeEvent('grab')); + } + } + } + + triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, { + x: now[0], + y: now[1] + }); + + if (near == null) { + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } // Tap, taphold + // ----- + + + r.touchData.singleTouchMoved = false; + r.touchData.singleTouchStartTime = +new Date(); + clearTimeout(r.touchData.tapholdTimeout); + r.touchData.tapholdTimeout = setTimeout(function () { + if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect + && !r.touchData.selecting // box selection shouldn't allow taphold through + ) { + triggerEvents(r.touchData.start, ['taphold'], e, { + x: now[0], + y: now[1] + }); + } + }, r.tapholdDuration); + } + + if (e.touches.length >= 1) { + var sPos = r.touchData.startPosition = []; + + for (var i = 0; i < now.length; i++) { + sPos[i] = earlier[i] = now[i]; + } + + var touch0 = e.touches[0]; + r.touchData.startGPosition = [touch0.clientX, touch0.clientY]; + } + }, false); + var touchmoveHandler; + r.registerBinding(window, 'touchmove', touchmoveHandler = function touchmoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.touchData.capture; + + if (!capture && !eventInContainer(e)) { + return; + } + + var select = r.selection; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + var zoom = cy.zoom(); + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + var startGPos = r.touchData.startGPosition; + var isOverThresholdDrag; + + if (capture && e.touches[0] && startGPos) { + var disp = []; + + for (var j = 0; j < now.length; j++) { + disp[j] = now[j] - earlier[j]; + } + + var dx = e.touches[0].clientX - startGPos[0]; + var dx2 = dx * dx; + var dy = e.touches[0].clientY - startGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + isOverThresholdDrag = dist2 >= r.touchTapThreshold2; + } // context swipe cancelling + + + if (capture && r.touchData.cxt) { + e.preventDefault(); + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 ); + + var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2); + var factorSq = distance2Sq / distance1Sq; + var distThreshold = 150; + var distThresholdSq = distThreshold * distThreshold; + var factorThreshold = 1.5; + var factorThresholdSq = factorThreshold * factorThreshold; // cancel ctx gestures if the distance b/t the fingers increases + + if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) { + r.touchData.cxt = false; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + + if (r.touchData.start) { + r.touchData.start.unactivate().emit(cxtEvt); + r.touchData.start = null; + } else { + cy.emit(cxtEvt); + } + } + } // context swipe + + + if (capture && r.touchData.cxt) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: now[0], + y: now[1] + } + }; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + + if (r.touchData.start) { + r.touchData.start.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxtDragged = true; + var near = r.findNearestElement(now[0], now[1], true, true); + + if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) { + if (r.touchData.cxtOver) { + r.touchData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + + r.touchData.cxtOver = near; + + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } // box selection + + } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) { + e.preventDefault(); + r.data.bgActivePosistion = undefined; + this.lastThreeTouch = +new Date(); + + if (!r.touchData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: now[0], + y: now[1] + } + }); + } + + r.touchData.selecting = true; + r.touchData.didSelect = true; + select[4] = 1; + + if (!select || select.length === 0 || select[0] === undefined) { + select[0] = (now[0] + now[2] + now[4]) / 3; + select[1] = (now[1] + now[3] + now[5]) / 3; + select[2] = (now[0] + now[2] + now[4]) / 3 + 1; + select[3] = (now[1] + now[3] + now[5]) / 3 + 1; + } else { + select[2] = (now[0] + now[2] + now[4]) / 3; + select[3] = (now[1] + now[3] + now[5]) / 3; + } + + r.redrawHint('select', true); + r.redraw(); // pinch to zoom + } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom + && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) { + // two fingers => pinch to zoom + e.preventDefault(); + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + + if (draggedEles) { + r.redrawHint('drag', true); + + for (var i = 0; i < draggedEles.length; i++) { + var de_p = draggedEles[i]._private; + de_p.grabbed = false; + de_p.rscratch.inDragLayer = false; + } + } + + var _start = r.touchData.start; // (x2, y2) for fingers 1 and 2 + + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; + var distance2 = distance(f1x2, f1y2, f2x2, f2y2); // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 ); + // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq ); + + var factor = distance2 / distance1; + + if (twoFingersStartInside) { + // delta finger1 + var df1x = f1x2 - f1x1; + var df1y = f1y2 - f1y1; // delta finger 2 + + var df2x = f2x2 - f2x1; + var df2y = f2y2 - f2y1; // translation is the normalised vector of the two fingers movement + // i.e. so pinching cancels out and moving together pans + + var tx = (df1x + df2x) / 2; + var ty = (df1y + df2y) / 2; // now calculate the zoom + + var zoom1 = cy.zoom(); + var zoom2 = zoom1 * factor; + var pan1 = cy.pan(); // the model center point converted to the current rendered pos + + var ctrx = modelCenter1[0] * zoom1 + pan1.x; + var ctry = modelCenter1[1] * zoom1 + pan1.y; + var pan2 = { + x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx, + y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry + }; // remove dragged eles + + if (_start && _start.active()) { + var draggedEles = r.dragData.touchDragEles; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + + _start.unactivate().emit('freeon'); + + draggedEles.emit('free'); + + if (r.dragData.didDrag) { + _start.emit('dragfreeon'); + + draggedEles.emit('dragfree'); + } + } + + cy.viewport({ + zoom: zoom2, + pan: pan2, + cancelOnFailedZoom: true + }); + cy.emit('pinchzoom'); + distance1 = distance2; + f1x1 = f1x2; + f1y1 = f1y2; + f2x1 = f2x2; + f2y1 = f2y2; + r.pinching = true; + } // Re-project + + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning + ) { + var start = r.touchData.start; + var last = r.touchData.last; + var near; + + if (!r.hoverData.draggingEles && !r.swipePanning) { + near = r.findNearestElement(now[0], now[1], true, true); + } + + if (capture && start != null) { + e.preventDefault(); + } // dragging nodes + + + if (capture && start != null && r.nodeIsDraggable(start)) { + if (isOverThresholdDrag) { + // then dragging can happen + var draggedEles = r.dragData.touchDragEles; + var justStartedDrag = !r.dragData.didDrag; + + if (justStartedDrag) { + addNodesToDrag(draggedEles, { + inDragLayer: true + }); + } + + r.dragData.didDrag = true; + var totalShift = { + x: 0, + y: 0 + }; + + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + + if (justStartedDrag) { + r.redrawHint('eles', true); + var dragDelta = r.touchData.dragDelta; + + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + + r.hoverData.draggingEles = true; + draggedEles.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + + if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) { + r.redrawHint('eles', true); + } + + r.redraw(); + } else { + // otherise keep track of drag delta for later + var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || []; + + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + } + } // touchmove + + + { + triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, { + x: now[0], + y: now[1] + }); + + if ((!start || !start.grabbed()) && near != last) { + if (last) { + last.emit({ + originalEvent: e, + type: 'tapdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + + if (near) { + near.emit({ + originalEvent: e, + type: 'tapdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } + + r.touchData.last = near; + } // check to cancel taphold + + if (capture) { + for (var i = 0; i < now.length; i++) { + if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) { + r.touchData.singleTouchMoved = true; + } + } + } // panning + + + if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts); + + if (allowPassthrough) { + e.preventDefault(); + + if (!r.data.bgActivePosistion) { + r.data.bgActivePosistion = array2point(r.touchData.startPosition); + } + + if (r.swipePanning) { + cy.panBy({ + x: disp[0] * zoom, + y: disp[1] * zoom + }); + cy.emit('dragpan'); + } else if (isOverThresholdDrag) { + r.swipePanning = true; + cy.panBy({ + x: dx * zoom, + y: dy * zoom + }); + cy.emit('dragpan'); + + if (start) { + start.unactivate(); + r.redrawHint('select', true); + r.touchData.start = null; + } + } + } // Re-project + + + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + } + + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning + + + if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + r.redraw(); + } + }, false); + var touchcancelHandler; + r.registerBinding(window, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + r.touchData.capture = false; + + if (start) { + start.unactivate(); + } + }); + var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp; + r.registerBinding(window, 'touchend', touchendHandler = function touchendHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + var capture = r.touchData.capture; + + if (capture) { + if (e.touches.length === 0) { + r.touchData.capture = false; + } + + e.preventDefault(); + } else { + return; + } + + var select = r.selection; + r.swipePanning = false; + r.hoverData.draggingEles = false; + var cy = r.cy; + var zoom = cy.zoom(); + var now = r.touchData.now; + var earlier = r.touchData.earlier; + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + if (start) { + start.unactivate(); + } + + var ctxTapend; + + if (r.touchData.cxt) { + ctxTapend = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + + if (start) { + start.emit(ctxTapend); + } else { + cy.emit(ctxTapend); + } + + if (!r.touchData.cxtDragged) { + var ctxTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: now[0], + y: now[1] + } + }; + + if (start) { + start.emit(ctxTap); + } else { + cy.emit(ctxTap); + } + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxt = false; + r.touchData.start = null; + r.redraw(); + return; + } // no more box selection if we don't have three fingers + + + if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) { + r.touchData.selecting = false; + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + select[0] = undefined; + select[1] = undefined; + select[2] = undefined; + select[3] = undefined; + select[4] = 0; + r.redrawHint('select', true); + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: now[0], + y: now[1] + } + }); + + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + + if (box.nonempty()) { + r.redrawHint('eles', true); + } + + r.redraw(); + } + + if (start != null) { + start.unactivate(); + } + + if (e.touches[2]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + + if (start != null) { + var startWasGrabbed = start._private.grabbed; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + + if (startWasGrabbed) { + start.emit('freeon'); + draggedEles.emit('free'); + + if (r.dragData.didDrag) { + start.emit('dragfreeon'); + draggedEles.emit('dragfree'); + } + } + + triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + start.unactivate(); + r.touchData.start = null; + } else { + var near = r.findNearestElement(now[0], now[1], true, true); + triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + } + + var dx = r.touchData.startPosition[0] - now[0]; + var dx2 = dx * dx; + var dy = r.touchData.startPosition[1] - now[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + var rdist2 = dist2 * zoom * zoom; // Tap event, roughly same as mouse click event for touch + + if (!r.touchData.singleTouchMoved) { + if (!start) { + cy.$(':selected').unselect(['tapunselect']); + } + + triggerEvents(start, ['tap', 'vclick'], e, { + x: now[0], + y: now[1] + }); + didDoubleTouch = false; + + if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { + touchTimeout && clearTimeout(touchTimeout); + didDoubleTouch = true; + prevTouchTimeStamp = null; + triggerEvents(start, ['dbltap', 'vdblclick'], e, { + x: now[0], + y: now[1] + }); + } else { + touchTimeout = setTimeout(function () { + if (didDoubleTouch) return; + triggerEvents(start, ['onetap', 'voneclick'], e, { + x: now[0], + y: now[1] + }); + }, cy.multiClickDebounceTime()); + prevTouchTimeStamp = e.timeStamp; + } + } // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance + + + if (start != null && !r.dragData.didDrag // didn't drag nodes around + && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection + ) { + if (cy.selectionType() === 'single') { + cy.$(isSelected).unmerge(start).unselect(['tapunselect']); + start.select(['tapselect']); + } else { + if (start.selected()) { + start.unselect(['tapunselect']); + } else { + start.select(['tapselect']); + } + } + + r.redrawHint('eles', true); + } + + r.touchData.singleTouchMoved = true; + } + + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } + + r.dragData.didDrag = false; // reset for next touchstart + + if (e.touches.length === 0) { + r.touchData.dragDelta = []; + r.touchData.startPosition = null; + r.touchData.startGPosition = null; + r.touchData.didSelect = false; + } + + if (e.touches.length < 2) { + if (e.touches.length === 1) { + // the old start global pos'n may not be the same finger that remains + r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY]; + } + + r.pinching = false; + r.redrawHint('eles', true); + r.redraw(); + } //r.redraw(); + + }, false); // fallback compatibility layer for ms pointer events + + if (typeof TouchEvent === 'undefined') { + var pointers = []; + + var makeTouch = function makeTouch(e) { + return { + clientX: e.clientX, + clientY: e.clientY, + force: 1, + identifier: e.pointerId, + pageX: e.pageX, + pageY: e.pageY, + radiusX: e.width / 2, + radiusY: e.height / 2, + screenX: e.screenX, + screenY: e.screenY, + target: e.target + }; + }; + + var makePointer = function makePointer(e) { + return { + event: e, + touch: makeTouch(e) + }; + }; + + var addPointer = function addPointer(e) { + pointers.push(makePointer(e)); + }; + + var removePointer = function removePointer(e) { + for (var i = 0; i < pointers.length; i++) { + var p = pointers[i]; + + if (p.event.pointerId === e.pointerId) { + pointers.splice(i, 1); + return; + } + } + }; + + var updatePointer = function updatePointer(e) { + var p = pointers.filter(function (p) { + return p.event.pointerId === e.pointerId; + })[0]; + p.event = e; + p.touch = makeTouch(e); + }; + + var addTouchesToEvent = function addTouchesToEvent(e) { + e.touches = pointers.map(function (p) { + return p.touch; + }); + }; + + var pointerIsMouse = function pointerIsMouse(e) { + return e.pointerType === 'mouse' || e.pointerType === 4; + }; + + r.registerBinding(r.container, 'pointerdown', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + e.preventDefault(); + addPointer(e); + addTouchesToEvent(e); + touchstartHandler(e); + }); + r.registerBinding(r.container, 'pointerup', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + removePointer(e); + addTouchesToEvent(e); + touchendHandler(e); + }); + r.registerBinding(r.container, 'pointercancel', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + removePointer(e); + addTouchesToEvent(e); + touchcancelHandler(e); + }); + r.registerBinding(r.container, 'pointermove', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + e.preventDefault(); + updatePointer(e); + addTouchesToEvent(e); + touchmoveHandler(e); + }); + } +}; + +var BRp$2 = {}; + +BRp$2.generatePolygon = function (name, points) { + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: points, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding); + } + }; +}; + +BRp$2.generateEllipse = function () { + return this.nodeShapes['ellipse'] = { + renderer: this, + name: 'ellipse', + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return checkInEllipse(x, y, width, height, centerX, centerY, padding); + } + }; +}; + +BRp$2.generateRoundPolygon = function (name, points) { + // Pre-compute control points + // Since these points depend on the radius length (which in turns depend on the width/height of the node) we will only pre-compute + // the unit vectors. + // For simplicity the layout will be: + // [ p0, UnitVectorP0P1, p1, UniVectorP1P2, ..., pn, UnitVectorPnP0 ] + var allPoints = new Array(points.length * 2); + + for (var i = 0; i < points.length / 2; i++) { + var sourceIndex = i * 2; + var destIndex = void 0; + + if (i < points.length / 2 - 1) { + destIndex = (i + 1) * 2; + } else { + destIndex = 0; + } + + allPoints[i * 4] = points[sourceIndex]; + allPoints[i * 4 + 1] = points[sourceIndex + 1]; + var xDest = points[destIndex] - points[sourceIndex]; + var yDest = points[destIndex + 1] - points[sourceIndex + 1]; + var norm = Math.sqrt(xDest * xDest + yDest * yDest); + allPoints[i * 4 + 2] = xDest / norm; + allPoints[i * 4 + 3] = yDest / norm; + } + + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: allPoints, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height); + } + }; +}; + +BRp$2.generateRoundRectangle = function () { + return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = { + renderer: this, + name: 'round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = cornerRadius * 2; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } // Check top left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } // Check top right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } // Check bottom right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } // Check bottom left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + return false; + } + }; +}; + +BRp$2.generateCutRectangle = function () { + return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = { + renderer: this, + name: 'cut-rectangle', + cornerLength: getCutRectangleCornerLength(), + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY) { + var cl = this.cornerLength; + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; // points are in clockwise order, inner (imaginary) triangle pt on [4, 5] + + return { + topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl], + topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl], + bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl], + bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl] + }; + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * this.cornerLength, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * this.cornerLength, height, [0, -1], padding)) { + return true; + } + + var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY); + return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft); + } + }; +}; + +BRp$2.generateBarrel = function () { + return this.nodeShapes['barrel'] = { + renderer: this, + name: 'barrel', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + // use two fixed t values for the bezier curve approximation + var t0 = 0.15; + var t1 = 0.5; + var t2 = 0.85; + var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + + var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) { + // approximate curve pts based on the two t values + var m0 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t0); + var m1 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t1); + var m2 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t2); + return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]]; + }; + + var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) { + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; + var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width; // points are in clockwise order, inner (imaginary) control pt on [4, 5] + + var pts = { + topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin], + topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset], + bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd], + bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset] + }; + pts.topLeft.isTop = true; + pts.topRight.isTop = true; + pts.bottomLeft.isBottom = true; + pts.bottomRight.isBottom = true; + return pts; + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) { + return true; + } + + var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY); + + var getCurveT = function getCurveT(x, y, curvePts) { + var x0 = curvePts[4]; + var x1 = curvePts[2]; + var x2 = curvePts[0]; + var y0 = curvePts[5]; // var y1 = curvePts[ 3 ]; + + var y2 = curvePts[1]; + var xMin = Math.min(x0, x2); + var xMax = Math.max(x0, x2); + var yMin = Math.min(y0, y2); + var yMax = Math.max(y0, y2); + + if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) { + var coeff = bezierPtsToQuadCoeff(x0, x1, x2); + var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x); + var validRoots = roots.filter(function (r) { + return 0 <= r && r <= 1; + }); + + if (validRoots.length > 0) { + return validRoots[0]; + } + } + + return null; + }; + + var curveRegions = Object.keys(barrelCurvePts); + + for (var i = 0; i < curveRegions.length; i++) { + var corner = curveRegions[i]; + var cornerPts = barrelCurvePts[corner]; + var t = getCurveT(x, y, cornerPts); + + if (t == null) { + continue; + } + + var y0 = cornerPts[5]; + var y1 = cornerPts[3]; + var y2 = cornerPts[1]; + var bezY = qbezierAt(y0, y1, y2, t); + + if (cornerPts.isTop && bezY <= y) { + return true; + } + + if (cornerPts.isBottom && y <= bezY) { + return true; + } + } + + return false; + } + }; +}; + +BRp$2.generateBottomRoundrectangle = function () { + return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = { + renderer: this, + name: 'bottom-round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var topStartX = nodeX - (width / 2 + padding); + var topStartY = nodeY - (height / 2 + padding); + var topEndY = topStartY; + var topEndX = nodeX + (width / 2 + padding); + var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + + if (topIntersections.length > 0) { + return topIntersections; + } + + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = 2 * cornerRadius; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } // check non-rounded top side + + + var outerWidth = width / 2 + 2 * padding; + var outerHeight = height / 2 + 2 * padding; + var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; + + if (pointInsidePolygonPoints(x, y, points)) { + return true; + } // Check bottom right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } // Check bottom left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + return false; + } + }; +}; + +BRp$2.registerNodeShapes = function () { + var nodeShapes = this.nodeShapes = {}; + var renderer = this; + this.generateEllipse(); + this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0)); + nodeShapes['square'] = nodeShapes['rectangle']; + this.generateRoundRectangle(); + this.generateCutRectangle(); + this.generateBarrel(); + this.generateBottomRoundrectangle(); + { + var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0]; + this.generatePolygon('diamond', diamondPoints); + this.generateRoundPolygon('round-diamond', diamondPoints); + } + this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0)); + this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0)); + var star5Points = new Array(20); + { + var outerPoints = generateUnitNgonPoints(5, 0); + var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); // Outer radius is 1; inner radius of star is smaller + + var innerRadius = 0.5 * (3 - Math.sqrt(5)); + innerRadius *= 1.57; + + for (var i = 0; i < innerPoints.length / 2; i++) { + innerPoints[i * 2] *= innerRadius; + innerPoints[i * 2 + 1] *= innerRadius; + } + + for (var i = 0; i < 20 / 4; i++) { + star5Points[i * 4] = outerPoints[i * 2]; + star5Points[i * 4 + 1] = outerPoints[i * 2 + 1]; + star5Points[i * 4 + 2] = innerPoints[i * 2]; + star5Points[i * 4 + 3] = innerPoints[i * 2 + 1]; + } + } + star5Points = fitPolygonToSquare(star5Points); + this.generatePolygon('star', star5Points); + this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]); + this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]); + this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]); + { + var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1]; + this.generatePolygon('tag', tagPoints); + this.generateRoundPolygon('round-tag', tagPoints); + } + + nodeShapes.makePolygon = function (points) { + // use caching on user-specified polygons so they are as fast as native shapes + var key = points.join('$'); + var name = 'polygon-' + key; + var shape; + + if (shape = this[name]) { + // got cached shape + return shape; + } // create and cache new shape + + + return renderer.generatePolygon(name, points); + }; +}; + +var BRp$1 = {}; + +BRp$1.timeToRender = function () { + return this.redrawTotalTime / this.redrawCount; +}; + +BRp$1.redraw = function (options) { + options = options || staticEmptyObject(); + var r = this; + + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = 0; + } + + if (r.lastRedrawTime === undefined) { + r.lastRedrawTime = 0; + } + + if (r.lastDrawTime === undefined) { + r.lastDrawTime = 0; + } + + r.requestedFrame = true; + r.renderOptions = options; +}; + +BRp$1.beforeRender = function (fn, priority) { + // the renderer can't add tick callbacks when destroyed + if (this.destroyed) { + return; + } + + if (priority == null) { + error('Priority is not optional for beforeRender'); + } + + var cbs = this.beforeRenderCallbacks; + cbs.push({ + fn: fn, + priority: priority + }); // higher priority callbacks executed first + + cbs.sort(function (a, b) { + return b.priority - a.priority; + }); +}; + +var beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) { + var cbs = r.beforeRenderCallbacks; + + for (var i = 0; i < cbs.length; i++) { + cbs[i].fn(willDraw, startTime); + } +}; + +BRp$1.startRenderLoop = function () { + var r = this; + var cy = r.cy; + + if (r.renderLoopStarted) { + return; + } else { + r.renderLoopStarted = true; + } + + var renderFn = function renderFn(requestTime) { + if (r.destroyed) { + return; + } + + if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) { + beforeRenderCallbacks(r, true, requestTime); + var startTime = performanceNow(); + r.render(r.renderOptions); + var endTime = r.lastDrawTime = performanceNow(); + + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = endTime - startTime; + } + + if (r.redrawCount === undefined) { + r.redrawCount = 0; + } + + r.redrawCount++; + + if (r.redrawTotalTime === undefined) { + r.redrawTotalTime = 0; + } + + var duration = endTime - startTime; + r.redrawTotalTime += duration; + r.lastRedrawTime = duration; // use a weighted average with a bias from the previous average so we don't spike so easily + + r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2; + r.requestedFrame = false; + } else { + beforeRenderCallbacks(r, false, requestTime); + } + + r.skipFrame = false; + requestAnimationFrame(renderFn); + }; + + requestAnimationFrame(renderFn); +}; + +var BaseRenderer = function BaseRenderer(options) { + this.init(options); +}; + +var BR = BaseRenderer; +var BRp = BR.prototype; +BRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl']; + +BRp.init = function (options) { + var r = this; + r.options = options; + r.cy = options.cy; + var ctr = r.container = options.cy.container(); // prepend a stylesheet in the head such that + + if (window$1) { + var document = window$1.document; + var head = document.head; + var stylesheetId = '__________cytoscape_stylesheet'; + var className = '__________cytoscape_container'; + var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null; + + if (ctr.className.indexOf(className) < 0) { + ctr.className = (ctr.className || '') + ' ' + className; + } + + if (!stylesheetAlreadyExists) { + var stylesheet = document.createElement('style'); + stylesheet.id = stylesheetId; + stylesheet.innerHTML = '.' + className + ' { position: relative; }'; + head.insertBefore(stylesheet, head.children[0]); // first so lowest priority + } + + var computedStyle = window$1.getComputedStyle(ctr); + var position = computedStyle.getPropertyValue('position'); + + if (position === 'static') { + warn('A Cytoscape container has style position:static and so can not use UI extensions properly'); + } + } + + r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag + + r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; //--Pointer-related data + + r.hoverData = { + down: null, + last: null, + downTime: null, + triggerMode: null, + dragging: false, + initialPan: [null, null], + capture: false + }; + r.dragData = { + possibleDragElements: [] + }; + r.touchData = { + start: null, + capture: false, + // These 3 fields related to tap, taphold events + startPosition: [null, null, null, null, null, null], + singleTouchStartTime: null, + singleTouchMoved: true, + now: [null, null, null, null, null, null], + earlier: [null, null, null, null, null, null] + }; + r.redraws = 0; + r.showFps = options.showFps; + r.debug = options.debug; + r.hideEdgesOnViewport = options.hideEdgesOnViewport; + r.textureOnViewport = options.textureOnViewport; + r.wheelSensitivity = options.wheelSensitivity; + r.motionBlurEnabled = options.motionBlur; // on by default + + r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null; + r.motionBlur = options.motionBlur; // for initial kick off + + r.motionBlurOpacity = options.motionBlurOpacity; + r.motionBlurTransparency = 1 - r.motionBlurOpacity; + r.motionBlurPxRatio = 1; + r.mbPxRBlurry = 1; //0.8; + + r.minMbLowQualFrames = 4; + r.fullQualityMb = false; + r.clearedForMotionBlur = []; + r.desktopTapThreshold = options.desktopTapThreshold; + r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold; + r.touchTapThreshold = options.touchTapThreshold; + r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold; + r.tapholdDuration = 500; + r.bindings = []; + r.beforeRenderCallbacks = []; + r.beforeRenderPriorities = { + // higher priority execs before lower one + animations: 400, + eleCalcs: 300, + eleTxrDeq: 200, + lyrTxrDeq: 150, + lyrTxrSkip: 100 + }; + r.registerNodeShapes(); + r.registerArrowShapes(); + r.registerCalculationListeners(); +}; + +BRp.notify = function (eventName, eles) { + var r = this; + var cy = r.cy; // the renderer can't be notified after it's destroyed + + if (this.destroyed) { + return; + } + + if (eventName === 'init') { + r.load(); + return; + } + + if (eventName === 'destroy') { + r.destroy(); + return; + } + + if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') { + r.invalidateCachedZSortedEles(); + } + + if (eventName === 'viewport') { + r.redrawHint('select', true); + } + + if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + } + + r.redrawHint('eles', true); + r.redrawHint('drag', true); + this.startRenderLoop(); + this.redraw(); +}; + +BRp.destroy = function () { + var r = this; + r.destroyed = true; + r.cy.stopAnimationLoop(); + + for (var i = 0; i < r.bindings.length; i++) { + var binding = r.bindings[i]; + var b = binding; + var tgt = b.target; + (tgt.off || tgt.removeEventListener).apply(tgt, b.args); + } + + r.bindings = []; + r.beforeRenderCallbacks = []; + r.onUpdateEleCalcsFns = []; + + if (r.removeObserver) { + r.removeObserver.disconnect(); + } + + if (r.styleObserver) { + r.styleObserver.disconnect(); + } + + if (r.resizeObserver) { + r.resizeObserver.disconnect(); + } + + if (r.labelCalcDiv) { + try { + document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef + } catch (e) {// ie10 issue #1014 + } + } +}; + +BRp.isHeadless = function () { + return false; +}; + +[BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) { + extend(BRp, props); +}); + +var fullFpsTime = 1000 / 60; // assume 60 frames per second + +var defs = { + setupDequeueing: function setupDequeueing(opts) { + return function setupDequeueingImpl() { + var self = this; + var r = this.renderer; + + if (self.dequeueingSetup) { + return; + } else { + self.dequeueingSetup = true; + } + + var queueRedraw = debounce__default["default"](function () { + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, opts.deqRedrawThreshold); + + var dequeue = function dequeue(willDraw, frameStartTime) { + var startTime = performanceNow(); + var avgRenderTime = r.averageRedrawTime; + var renderTime = r.lastRedrawTime; + var deqd = []; + var extent = r.cy.extent(); + var pixelRatio = r.getPixelRatio(); // if we aren't in a tick that causes a draw, then the rendered style + // queue won't automatically be flushed before dequeueing starts + + if (!willDraw) { + r.flushRenderedStyleQueue(); + } + + while (true) { + // eslint-disable-line no-constant-condition + var now = performanceNow(); + var duration = now - startTime; + var frameDuration = now - frameStartTime; + + if (renderTime < fullFpsTime) { + // if we're rendering faster than the ideal fps, then do dequeueing + // during all of the remaining frame time + var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); + + if (frameDuration >= opts.deqFastCost * timeAvailable) { + break; + } + } else { + if (willDraw) { + if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) { + break; + } + } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) { + break; + } + } + + var thisDeqd = opts.deq(self, pixelRatio, extent); + + if (thisDeqd.length > 0) { + for (var i = 0; i < thisDeqd.length; i++) { + deqd.push(thisDeqd[i]); + } + } else { + break; + } + } // callbacks on dequeue + + + if (deqd.length > 0) { + opts.onDeqd(self, deqd); + + if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) { + queueRedraw(); + } + } + }; + + var priority = opts.priority || noop$1; + r.beforeRender(dequeue, priority(self)); + }; + } +}; + +// Uses keys so elements may share the same cache. + +var ElementTextureCacheLookup = /*#__PURE__*/function () { + function ElementTextureCacheLookup(getKey) { + var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify; + + _classCallCheck(this, ElementTextureCacheLookup); + + this.idsByKey = new Map$1(); + this.keyForId = new Map$1(); + this.cachesByLvl = new Map$1(); + this.lvls = []; + this.getKey = getKey; + this.doesEleInvalidateKey = doesEleInvalidateKey; + } + + _createClass(ElementTextureCacheLookup, [{ + key: "getIdsFor", + value: function getIdsFor(key) { + if (key == null) { + error("Can not get id list for null key"); + } + + var idsByKey = this.idsByKey; + var ids = this.idsByKey.get(key); + + if (!ids) { + ids = new Set$1(); + idsByKey.set(key, ids); + } + + return ids; + } + }, { + key: "addIdForKey", + value: function addIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key).add(id); + } + } + }, { + key: "deleteIdForKey", + value: function deleteIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key)["delete"](id); + } + } + }, { + key: "getNumberOfIdsForKey", + value: function getNumberOfIdsForKey(key) { + if (key == null) { + return 0; + } else { + return this.getIdsFor(key).size; + } + } + }, { + key: "updateKeyMappingFor", + value: function updateKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var currKey = this.getKey(ele); + this.deleteIdForKey(prevKey, id); + this.addIdForKey(currKey, id); + this.keyForId.set(id, currKey); + } + }, { + key: "deleteKeyMappingFor", + value: function deleteKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + this.deleteIdForKey(prevKey, id); + this.keyForId["delete"](id); + } + }, { + key: "keyHasChangedFor", + value: function keyHasChangedFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var newKey = this.getKey(ele); + return prevKey !== newKey; + } + }, { + key: "isInvalid", + value: function isInvalid(ele) { + return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele); + } + }, { + key: "getCachesAt", + value: function getCachesAt(lvl) { + var cachesByLvl = this.cachesByLvl, + lvls = this.lvls; + var caches = cachesByLvl.get(lvl); + + if (!caches) { + caches = new Map$1(); + cachesByLvl.set(lvl, caches); + lvls.push(lvl); + } + + return caches; + } + }, { + key: "getCache", + value: function getCache(key, lvl) { + return this.getCachesAt(lvl).get(key); + } + }, { + key: "get", + value: function get(ele, lvl) { + var key = this.getKey(ele); + var cache = this.getCache(key, lvl); // getting for an element may need to add to the id list b/c eles can share keys + + if (cache != null) { + this.updateKeyMappingFor(ele); + } + + return cache; + } + }, { + key: "getForCachedKey", + value: function getForCachedKey(ele, lvl) { + var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key + + var cache = this.getCache(key, lvl); + return cache; + } + }, { + key: "hasCache", + value: function hasCache(key, lvl) { + return this.getCachesAt(lvl).has(key); + } + }, { + key: "has", + value: function has(ele, lvl) { + var key = this.getKey(ele); + return this.hasCache(key, lvl); + } + }, { + key: "setCache", + value: function setCache(key, lvl, cache) { + cache.key = key; + this.getCachesAt(lvl).set(key, cache); + } + }, { + key: "set", + value: function set(ele, lvl, cache) { + var key = this.getKey(ele); + this.setCache(key, lvl, cache); + this.updateKeyMappingFor(ele); + } + }, { + key: "deleteCache", + value: function deleteCache(key, lvl) { + this.getCachesAt(lvl)["delete"](key); + } + }, { + key: "delete", + value: function _delete(ele, lvl) { + var key = this.getKey(ele); + this.deleteCache(key, lvl); + } + }, { + key: "invalidateKey", + value: function invalidateKey(key) { + var _this = this; + + this.lvls.forEach(function (lvl) { + return _this.deleteCache(key, lvl); + }); + } // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key) + + }, { + key: "invalidate", + value: function invalidate(ele) { + var id = ele.id(); + var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key) + + this.deleteKeyMappingFor(ele); + var entireKeyInvalidated = this.doesEleInvalidateKey(ele); + + if (entireKeyInvalidated) { + // clear mapping for current key + this.invalidateKey(key); + } + + return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; + } + }]); + + return ElementTextureCacheLookup; +}(); + +var minTxrH = 25; // the size of the texture cache for small height eles (special case) + +var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up + +var minLvl$1 = -4; // when scaling smaller than that we don't need to re-render + +var maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful) + +var maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used + +var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps + +var defTxrWidth = 1024; // default/minimum texture width + +var maxTxrW = 1024; // the maximum width of a texture + +var maxTxrH = 1024; // the maximum height of a texture + +var minUtility = 0.2; // if usage of texture is less than this, it is retired + +var maxFullness = 0.8; // fullness of texture after which queue removal is checked + +var maxFullnessChecks = 10; // dequeued after this many checks + +var deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame + +var deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time + +var deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing + +var deqFastCost$1 = 0.9; // % of frame time to be used when >60fps + +var deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile + +var maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch + +var getTxrReasons = { + dequeue: 'dequeue', + downscale: 'downscale', + highQuality: 'highQuality' +}; +var initDefaults = defaults$g({ + getKey: null, + doesEleInvalidateKey: falsify, + drawElement: null, + getBoundingBox: null, + getRotationPoint: null, + getRotationOffset: null, + isVisible: trueify, + allowEdgeTxrCaching: true, + allowParentTxrCaching: true +}); + +var ElementTextureCache = function ElementTextureCache(renderer, initOptions) { + var self = this; + self.renderer = renderer; + self.onDequeues = []; + var opts = initDefaults(initOptions); + extend(self, opts); + self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey); + self.setupDequeueing(); +}; + +var ETCp = ElementTextureCache.prototype; +ETCp.reasons = getTxrReasons; // the list of textures in which new subtextures for elements can be placed + +ETCp.getTextureQueue = function (txrH) { + var self = this; + self.eleImgCaches = self.eleImgCaches || {}; + return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || []; +}; // the list of usused textures which can be recycled (in use in texture queue) + + +ETCp.getRetiredTextureQueue = function (txrH) { + var self = this; + var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {}; + var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || []; + return rtxtrQ; +}; // queue of element draw requests at different scale levels + + +ETCp.getElementQueue = function () { + var self = this; + var q = self.eleCacheQueue = self.eleCacheQueue || new Heap__default["default"](function (a, b) { + return b.reqs - a.reqs; + }); + return q; +}; // queue of element draw requests at different scale levels (element id lookup) + + +ETCp.getElementKeyToQueue = function () { + var self = this; + var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {}; + return k2q; +}; + +ETCp.getElement = function (ele, bb, pxRatio, lvl, reason) { + var self = this; + var r = this.renderer; + var zoom = r.cy.zoom(); + var lookup = this.lookup; + + if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) { + return null; + } + + if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) { + return null; + } + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + } + + if (lvl < minLvl$1) { + lvl = minLvl$1; + } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) { + return null; + } + + var scale = Math.pow(2, lvl); + var eleScaledH = bb.h * scale; + var eleScaledW = bb.w * scale; + var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale); + + if (!this.isVisible(ele, scaledLabelShown)) { + return null; + } + + var eleCache = lookup.get(ele, lvl); // if this get was on an unused/invalidated cache, then restore the texture usage metric + + if (eleCache && eleCache.invalidated) { + eleCache.invalidated = false; + eleCache.texture.invalidatedWidth -= eleCache.width; + } + + if (eleCache) { + return eleCache; + } + + var txrH; // which texture height this ele belongs to + + if (eleScaledH <= minTxrH) { + txrH = minTxrH; + } else if (eleScaledH <= txrStepH) { + txrH = txrStepH; + } else { + txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH; + } + + if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) { + return null; // caching large elements is not efficient + } + + var txrQ = self.getTextureQueue(txrH); // first try the second last one in case it has space at the end + + var txr = txrQ[txrQ.length - 2]; + + var addNewTxr = function addNewTxr() { + return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW); + }; // try the last one if there is no second last one + + + if (!txr) { + txr = txrQ[txrQ.length - 1]; + } // if the last one doesn't exist, we need a first one + + + if (!txr) { + txr = addNewTxr(); + } // if there's no room in the current texture, we need a new one + + + if (txr.width - txr.usedWidth < eleScaledW) { + txr = addNewTxr(); + } + + var scalableFrom = function scalableFrom(otherCache) { + return otherCache && otherCache.scaledLabelShown === scaledLabelShown; + }; + + var deqing = reason && reason === getTxrReasons.dequeue; + var highQualityReq = reason && reason === getTxrReasons.highQuality; + var downscaleReq = reason && reason === getTxrReasons.downscale; + var higherCache; // the nearest cache with a higher level + + for (var l = lvl + 1; l <= maxLvl$1; l++) { + var c = lookup.get(ele, l); + + if (c) { + higherCache = c; + break; + } + } + + var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null; + + var downscale = function downscale() { + txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH); + }; // reset ele area in texture + + + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH); + + if (scalableFrom(oneUpCache)) { + // then we can relatively cheaply rescale the existing image w/o rerendering + downscale(); + } else if (scalableFrom(higherCache)) { + // then use the higher cache for now and queue the next level down + // to cheaply scale towards the smaller level + if (highQualityReq) { + for (var _l = higherCache.level; _l > lvl; _l--) { + oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale); + } + + downscale(); + } else { + self.queueElement(ele, higherCache.level - 1); + return higherCache; + } + } else { + var lowerCache; // the nearest cache with a lower level + + if (!deqing && !highQualityReq && !downscaleReq) { + for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) { + var _c = lookup.get(ele, _l2); + + if (_c) { + lowerCache = _c; + break; + } + } + } + + if (scalableFrom(lowerCache)) { + // then use the lower quality cache for now and queue the better one for later + self.queueElement(ele, lvl); + return lowerCache; + } + + txr.context.translate(txr.usedWidth, 0); + txr.context.scale(scale, scale); + this.drawElement(txr.context, ele, bb, scaledLabelShown, false); + txr.context.scale(1 / scale, 1 / scale); + txr.context.translate(-txr.usedWidth, 0); + } + + eleCache = { + x: txr.usedWidth, + texture: txr, + level: lvl, + scale: scale, + width: eleScaledW, + height: eleScaledH, + scaledLabelShown: scaledLabelShown + }; + txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing); + txr.eleCaches.push(eleCache); + lookup.set(ele, lvl, eleCache); + self.checkTextureFullness(txr); + return eleCache; +}; + +ETCp.invalidateElements = function (eles) { + for (var i = 0; i < eles.length; i++) { + this.invalidateElement(eles[i]); + } +}; + +ETCp.invalidateElement = function (ele) { + var self = this; + var lookup = self.lookup; + var caches = []; + var invalid = lookup.isInvalid(ele); + + if (!invalid) { + return; // override the invalidation request if the element key has not changed + } + + for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) { + var cache = lookup.getForCachedKey(ele, lvl); + + if (cache) { + caches.push(cache); + } + } + + var noOtherElesUseCache = lookup.invalidate(ele); + + if (noOtherElesUseCache) { + for (var i = 0; i < caches.length; i++) { + var _cache = caches[i]; + var txr = _cache.texture; // remove space from the texture it belongs to + + txr.invalidatedWidth += _cache.width; // mark the cache as invalidated + + _cache.invalidated = true; // retire the texture if its utility is low + + self.checkTextureUtility(txr); + } + } // remove from queue since the old req was for the old state + + + self.removeFromQueue(ele); +}; + +ETCp.checkTextureUtility = function (txr) { + // invalidate all entries in the cache if the cache size is small + if (txr.invalidatedWidth >= minUtility * txr.width) { + this.retireTexture(txr); + } +}; + +ETCp.checkTextureFullness = function (txr) { + // if texture has been mostly filled and passed over several times, remove + // it from the queue so we don't need to waste time looking at it to put new things + var self = this; + var txrQ = self.getTextureQueue(txr.height); + + if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) { + removeFromArray(txrQ, txr); + } else { + txr.fullnessChecks++; + } +}; + +ETCp.retireTexture = function (txr) { + var self = this; + var txrH = txr.height; + var txrQ = self.getTextureQueue(txrH); + var lookup = this.lookup; // retire the texture from the active / searchable queue: + + removeFromArray(txrQ, txr); + txr.retired = true; // remove the refs from the eles to the caches: + + var eleCaches = txr.eleCaches; + + for (var i = 0; i < eleCaches.length; i++) { + var eleCache = eleCaches[i]; + lookup.deleteCache(eleCache.key, eleCache.level); + } + + clearArray(eleCaches); // add the texture to a retired queue so it can be recycled in future: + + var rtxtrQ = self.getRetiredTextureQueue(txrH); + rtxtrQ.push(txr); +}; + +ETCp.addTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var txr = {}; + txrQ.push(txr); + txr.eleCaches = []; + txr.height = txrH; + txr.width = Math.max(defTxrWidth, minW); + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height); + txr.context = txr.canvas.getContext('2d'); + return txr; +}; + +ETCp.recycleTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var rtxtrQ = self.getRetiredTextureQueue(txrH); + + for (var i = 0; i < rtxtrQ.length; i++) { + var txr = rtxtrQ[i]; + + if (txr.width >= minW) { + txr.retired = false; + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + clearArray(txr.eleCaches); + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(0, 0, txr.width, txr.height); + removeFromArray(rtxtrQ, txr); + txrQ.push(txr); + return txr; + } + } +}; + +ETCp.queueElement = function (ele, lvl) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var existingReq = k2q[key]; + + if (existingReq) { + // use the max lvl b/c in between lvls are cheap to make + existingReq.level = Math.max(existingReq.level, lvl); + existingReq.eles.merge(ele); + existingReq.reqs++; + q.updateItem(existingReq); + } else { + var req = { + eles: ele.spawn().merge(ele), + level: lvl, + reqs: 1, + key: key + }; + q.push(req); + k2q[key] = req; + } +}; + +ETCp.dequeue = function (pxRatio +/*, extent*/ +) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var dequeued = []; + var lookup = self.lookup; + + for (var i = 0; i < maxDeqSize$1; i++) { + if (q.size() > 0) { + var req = q.pop(); + var key = req.key; + var ele = req.eles[0]; // all eles have the same key + + var cacheExists = lookup.hasCache(ele, req.level); // clear out the key to req lookup + + k2q[key] = null; // dequeueing isn't necessary with an existing cache + + if (cacheExists) { + continue; + } + + dequeued.push(req); + var bb = self.getBoundingBox(ele); + self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue); + } else { + break; + } + } + + return dequeued; +}; + +ETCp.removeFromQueue = function (ele) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var req = k2q[key]; + + if (req != null) { + if (req.eles.length === 1) { + // remove if last ele in the req + // bring to front of queue + req.reqs = MAX_INT$1; + q.updateItem(req); + q.pop(); // remove from queue + + k2q[key] = null; // remove from lookup map + } else { + // otherwise just remove ele from req + req.eles.unmerge(ele); + } + } +}; + +ETCp.onDequeue = function (fn) { + this.onDequeues.push(fn); +}; + +ETCp.offDequeue = function (fn) { + removeFromArray(this.onDequeues, fn); +}; + +ETCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold$1, + deqCost: deqCost$1, + deqAvgCost: deqAvgCost$1, + deqNoDrawCost: deqNoDrawCost$1, + deqFastCost: deqFastCost$1, + deq: function deq(self, pxRatio, extent) { + return self.dequeue(pxRatio, extent); + }, + onDeqd: function onDeqd(self, deqd) { + for (var i = 0; i < self.onDequeues.length; i++) { + var fn = self.onDequeues[i]; + fn(deqd); + } + }, + shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) { + for (var i = 0; i < deqd.length; i++) { + var eles = deqd[i].eles; + + for (var j = 0; j < eles.length; j++) { + var bb = eles[j].boundingBox(); + + if (boundingBoxesIntersect(bb, extent)) { + return true; + } + } + } + + return false; + }, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.eleTxrDeq; + } +}); + +var defNumLayers = 1; // default number of layers to use + +var minLvl = -4; // when scaling smaller than that we don't need to re-render + +var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful) + +var maxZoom = 3.99; // beyond this zoom level, layered textures are not used + +var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile + +var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates + +var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame + +var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time + +var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing + +var deqFastCost = 0.9; // % of frame time to be used when >60fps + +var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch + +var invalidThreshold = 250; // time threshold for disabling b/c of invalidations + +var maxLayerArea = 4000 * 4000; // layers can't be bigger than this + +var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm) +// var log = function(){ console.log.apply( console, arguments ); }; + +var LayeredTextureCache = function LayeredTextureCache(renderer) { + var self = this; + var r = self.renderer = renderer; + var cy = r.cy; + self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ] + + self.firstGet = true; + self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; + self.skipping = false; + self.eleTxrDeqs = cy.collection(); + self.scheduleElementRefinement = debounce__default["default"](function () { + self.refineElementTextures(self.eleTxrDeqs); + self.eleTxrDeqs.unmerge(self.eleTxrDeqs); + }, refineEleDebounceTime); + r.beforeRender(function (willDraw, now) { + if (now - self.lastInvalidationTime <= invalidThreshold) { + self.skipping = true; + } else { + self.skipping = false; + } + }, r.beforeRenderPriorities.lyrTxrSkip); + + var qSort = function qSort(a, b) { + return b.reqs - a.reqs; + }; + + self.layersQueue = new Heap__default["default"](qSort); + self.setupDequeueing(); +}; + +var LTCp = LayeredTextureCache.prototype; +var layerIdPool = 0; +var MAX_INT = Math.pow(2, 53) - 1; + +LTCp.makeLayer = function (bb, lvl) { + var scale = Math.pow(2, lvl); + var w = Math.ceil(bb.w * scale); + var h = Math.ceil(bb.h * scale); + var canvas = this.renderer.makeOffscreenCanvas(w, h); + var layer = { + id: layerIdPool = ++layerIdPool % MAX_INT, + bb: bb, + level: lvl, + width: w, + height: h, + canvas: canvas, + context: canvas.getContext('2d'), + eles: [], + elesQueue: [], + reqs: 0 + }; // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level); + + var cxt = layer.context; + var dx = -layer.bb.x1; + var dy = -layer.bb.y1; // do the transform on creation to save cycles (it's the same for all eles) + + cxt.scale(scale, scale); + cxt.translate(dx, dy); + return layer; +}; + +LTCp.getLayers = function (eles, pxRatio, lvl) { + var self = this; + var r = self.renderer; + var cy = r.cy; + var zoom = cy.zoom(); + var firstGet = self.firstGet; + self.firstGet = false; // log('--\nget layers with %s eles', eles.length); + //log eles.map(function(ele){ return ele.id() }) ); + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + + if (lvl < minLvl) { + lvl = minLvl; + } else if (zoom >= maxZoom || lvl > maxLvl) { + return null; + } + } + + self.validateLayersElesOrdering(lvl, eles); + var layersByLvl = self.layersByLevel; + var scale = Math.pow(2, lvl); + var layers = layersByLvl[lvl] = layersByLvl[lvl] || []; + var bb; + var lvlComplete = self.levelIsComplete(lvl, eles); + var tmpLayers; + + var checkTempLevels = function checkTempLevels() { + var canUseAsTmpLvl = function canUseAsTmpLvl(l) { + self.validateLayersElesOrdering(l, eles); + + if (self.levelIsComplete(l, eles)) { + tmpLayers = layersByLvl[l]; + return true; + } + }; + + var checkLvls = function checkLvls(dir) { + if (tmpLayers) { + return; + } + + for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) { + if (canUseAsTmpLvl(l)) { + break; + } + } + }; + + checkLvls(+1); + checkLvls(-1); // remove the invalid layers; they will be replaced as needed later in this function + + for (var i = layers.length - 1; i >= 0; i--) { + var layer = layers[i]; + + if (layer.invalid) { + removeFromArray(layers, layer); + } + } + }; + + if (!lvlComplete) { + // if the current level is incomplete, then use the closest, best quality layerset temporarily + // and later queue the current layerset so we can get the proper quality level soon + checkTempLevels(); + } else { + // log('level complete, using existing layers\n--'); + return layers; + } + + var getBb = function getBb() { + if (!bb) { + bb = makeBoundingBox(); + + for (var i = 0; i < eles.length; i++) { + updateBoundingBox(bb, eles[i].boundingBox()); + } + } + + return bb; + }; + + var makeLayer = function makeLayer(opts) { + opts = opts || {}; + var after = opts.after; + getBb(); + var area = bb.w * scale * (bb.h * scale); + + if (area > maxLayerArea) { + return null; + } + + var layer = self.makeLayer(bb, lvl); + + if (after != null) { + var index = layers.indexOf(after) + 1; + layers.splice(index, 0, layer); + } else if (opts.insert === undefined || opts.insert) { + // no after specified => first layer made so put at start + layers.unshift(layer); + } // if( tmpLayers ){ + //self.queueLayer( layer ); + // } + + + return layer; + }; + + if (self.skipping && !firstGet) { + // log('skip layers'); + return null; + } // log('do layers'); + + + var layer = null; + var maxElesPerLayer = eles.length / defNumLayers; + var allowLazyQueueing = !firstGet; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; // log('look at ele', ele.id()); + + var existingLayer = caches[lvl]; + + if (existingLayer) { + // reuse layer for later eles + // log('reuse layer for', ele.id()); + layer = existingLayer; + continue; + } + + if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) { + // log('make new layer for ele %s', ele.id()); + layer = makeLayer({ + insert: true, + after: layer + }); // if now layer can be built then we can't use layers at this level + + if (!layer) { + return null; + } // log('new layer with id %s', layer.id); + + } + + if (tmpLayers || allowLazyQueueing) { + // log('queue ele %s in layer %s', ele.id(), layer.id); + self.queueLayer(layer, ele); + } else { + // log('draw ele %s in layer %s', ele.id(), layer.id); + self.drawEleInLayer(layer, ele, lvl, pxRatio); + } + + layer.eles.push(ele); + caches[lvl] = layer; + } // log('--'); + + + if (tmpLayers) { + // then we only queued the current layerset and can't draw it yet + return tmpLayers; + } + + if (allowLazyQueueing) { + // log('lazy queue level', lvl); + return null; + } + + return layers; +}; // a layer may want to use an ele cache of a higher level to avoid blurriness +// so the layer level might not equal the ele level + + +LTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) { + return lvl; +}; + +LTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) { + var self = this; + var r = this.renderer; + var context = layer.context; + var bb = ele.boundingBox(); + + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + + lvl = self.getEleLevelForLayerLevel(lvl, pxRatio); + + { + r.setImgSmoothing(context, false); + } + + { + r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs); + } + + { + r.setImgSmoothing(context, true); + } +}; + +LTCp.levelIsComplete = function (lvl, eles) { + var self = this; + var layers = self.layersByLevel[lvl]; + + if (!layers || layers.length === 0) { + return false; + } + + var numElesInLayers = 0; + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; // if there are any eles needed to be drawn yet, the level is not complete + + if (layer.reqs > 0) { + return false; + } // if the layer is invalid, the level is not complete + + + if (layer.invalid) { + return false; + } + + numElesInLayers += layer.eles.length; + } // we should have exactly the number of eles passed in to be complete + + + if (numElesInLayers !== eles.length) { + return false; + } + + return true; +}; + +LTCp.validateLayersElesOrdering = function (lvl, eles) { + var layers = this.layersByLevel[lvl]; + + if (!layers) { + return; + } // if in a layer the eles are not in the same order, then the layer is invalid + // (i.e. there is an ele in between the eles in the layer) + + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var offset = -1; // find the offset + + for (var j = 0; j < eles.length; j++) { + if (layer.eles[0] === eles[j]) { + offset = j; + break; + } + } + + if (offset < 0) { + // then the layer has nonexistant elements and is invalid + this.invalidateLayer(layer); + continue; + } // the eles in the layer must be in the same continuous order, else the layer is invalid + + + var o = offset; + + for (var j = 0; j < layer.eles.length; j++) { + if (layer.eles[j] !== eles[o + j]) { + // log('invalidate based on ordering', layer.id); + this.invalidateLayer(layer); + break; + } + } + } +}; + +LTCp.updateElementsInLayers = function (eles, update) { + var self = this; + var isEles = element(eles[0]); // collect udpated elements (cascaded from the layers) and update each + // layer itself along the way + + for (var i = 0; i < eles.length; i++) { + var req = isEles ? null : eles[i]; + var ele = isEles ? eles[i] : eles[i].ele; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; + + for (var l = minLvl; l <= maxLvl; l++) { + var layer = caches[l]; + + if (!layer) { + continue; + } // if update is a request from the ele cache, then it affects only + // the matching level + + + if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) { + continue; + } + + update(layer, ele, req); + } + } +}; + +LTCp.haveLayers = function () { + var self = this; + var haveLayers = false; + + for (var l = minLvl; l <= maxLvl; l++) { + var layers = self.layersByLevel[l]; + + if (layers && layers.length > 0) { + haveLayers = true; + break; + } + } + + return haveLayers; +}; + +LTCp.invalidateElements = function (eles) { + var self = this; + + if (eles.length === 0) { + return; + } + + self.lastInvalidationTime = performanceNow(); // log('update invalidate layer time from eles'); + + if (eles.length === 0 || !self.haveLayers()) { + return; + } + + self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) { + self.invalidateLayer(layer); + }); +}; + +LTCp.invalidateLayer = function (layer) { + // log('update invalidate layer time'); + this.lastInvalidationTime = performanceNow(); + + if (layer.invalid) { + return; + } // save cycles + + + var lvl = layer.level; + var eles = layer.eles; + var layers = this.layersByLevel[lvl]; // log('invalidate layer', layer.id ); + + removeFromArray(layers, layer); // layer.eles = []; + + layer.elesQueue = []; + layer.invalid = true; + + if (layer.replacement) { + layer.replacement.invalid = true; + } + + for (var i = 0; i < eles.length; i++) { + var caches = eles[i]._private.rscratch.imgLayerCaches; + + if (caches) { + caches[lvl] = null; + } + } +}; + +LTCp.refineElementTextures = function (eles) { + var self = this; // log('refine', eles.length); + + self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) { + var rLyr = layer.replacement; + + if (!rLyr) { + rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level); + rLyr.replaces = layer; + rLyr.eles = layer.eles; // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level); + } + + if (!rLyr.reqs) { + for (var i = 0; i < rLyr.eles.length; i++) { + self.queueLayer(rLyr, rLyr.eles[i]); + } // log('queue replacement layer refinement', rLyr.id); + + } + }); +}; + +LTCp.enqueueElementRefinement = function (ele) { + + this.eleTxrDeqs.merge(ele); + this.scheduleElementRefinement(); +}; + +LTCp.queueLayer = function (layer, ele) { + var self = this; + var q = self.layersQueue; + var elesQ = layer.elesQueue; + var hasId = elesQ.hasId = elesQ.hasId || {}; // if a layer is going to be replaced, queuing is a waste of time + + if (layer.replacement) { + return; + } + + if (ele) { + if (hasId[ele.id()]) { + return; + } + + elesQ.push(ele); + hasId[ele.id()] = true; + } + + if (layer.reqs) { + layer.reqs++; + q.updateItem(layer); + } else { + layer.reqs = 1; + q.push(layer); + } +}; + +LTCp.dequeue = function (pxRatio) { + var self = this; + var q = self.layersQueue; + var deqd = []; + var eleDeqs = 0; + + while (eleDeqs < maxDeqSize) { + if (q.size() === 0) { + break; + } + + var layer = q.peek(); // if a layer has been or will be replaced, then don't waste time with it + + if (layer.replacement) { + // log('layer %s in queue skipped b/c it already has a replacement', layer.id); + q.pop(); + continue; + } // if this is a replacement layer that has been superceded, then forget it + + + if (layer.replaces && layer !== layer.replaces.replacement) { + // log('layer is no longer the most uptodate replacement; dequeued', layer.id) + q.pop(); + continue; + } + + if (layer.invalid) { + // log('replacement layer %s is invalid; dequeued', layer.id); + q.pop(); + continue; + } + + var ele = layer.elesQueue.shift(); + + if (ele) { + // log('dequeue layer %s', layer.id); + self.drawEleInLayer(layer, ele, layer.level, pxRatio); + eleDeqs++; + } + + if (deqd.length === 0) { + // we need only one entry in deqd to queue redrawing etc + deqd.push(true); + } // if the layer has all its eles done, then remove from the queue + + + if (layer.elesQueue.length === 0) { + q.pop(); + layer.reqs = 0; // log('dequeue of layer %s complete', layer.id); + // when a replacement layer is dequeued, it replaces the old layer in the level + + if (layer.replaces) { + self.applyLayerReplacement(layer); + } + + self.requestRedraw(); + } + } + + return deqd; +}; + +LTCp.applyLayerReplacement = function (layer) { + var self = this; + var layersInLevel = self.layersByLevel[layer.level]; + var replaced = layer.replaces; + var index = layersInLevel.indexOf(replaced); // if the replaced layer is not in the active list for the level, then replacing + // refs would be a mistake (i.e. overwriting the true active layer) + + if (index < 0 || replaced.invalid) { + // log('replacement layer would have no effect', layer.id); + return; + } + + layersInLevel[index] = layer; // replace level ref + // replace refs in eles + + for (var i = 0; i < layer.eles.length; i++) { + var _p = layer.eles[i]._private; + var cache = _p.imgLayerCaches = _p.imgLayerCaches || {}; + + if (cache) { + cache[layer.level] = layer; + } + } // log('apply replacement layer %s over %s', layer.id, replaced.id); + + + self.requestRedraw(); +}; + +LTCp.requestRedraw = debounce__default["default"](function () { + var r = this.renderer; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); +}, 100); +LTCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold, + deqCost: deqCost, + deqAvgCost: deqAvgCost, + deqNoDrawCost: deqNoDrawCost, + deqFastCost: deqFastCost, + deq: function deq(self, pxRatio) { + return self.dequeue(pxRatio); + }, + onDeqd: noop$1, + shouldRedraw: trueify, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.lyrTxrDeq; + } +}); + +var CRp$a = {}; +var impl; + +function polygon(context, points) { + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + context.lineTo(pt.x, pt.y); + } +} + +function triangleBackcurve(context, points, controlPoint) { + var firstPt; + + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + + if (i === 0) { + firstPt = pt; + } + + context.lineTo(pt.x, pt.y); + } + + context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y); +} + +function triangleTee(context, trianglePoints, teePoints) { + if (context.beginPath) { + context.beginPath(); + } + + var triPts = trianglePoints; + + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + + var teePts = teePoints; + var firstTeePt = teePoints[0]; + context.moveTo(firstTeePt.x, firstTeePt.y); + + for (var i = 1; i < teePts.length; i++) { + var pt = teePts[i]; + context.lineTo(pt.x, pt.y); + } + + if (context.closePath) { + context.closePath(); + } +} + +function circleTriangle(context, trianglePoints, rx, ry, r) { + if (context.beginPath) { + context.beginPath(); + } + + context.arc(rx, ry, r, 0, Math.PI * 2, false); + var triPts = trianglePoints; + var firstTrPt = triPts[0]; + context.moveTo(firstTrPt.x, firstTrPt.y); + + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + + if (context.closePath) { + context.closePath(); + } +} + +function circle(context, rx, ry, r) { + context.arc(rx, ry, r, 0, Math.PI * 2, false); +} + +CRp$a.arrowShapeImpl = function (name) { + return (impl || (impl = { + 'polygon': polygon, + 'triangle-backcurve': triangleBackcurve, + 'triangle-tee': triangleTee, + 'circle-triangle': circleTriangle, + 'triangle-cross': triangleTee, + 'circle': circle + }))[name]; +}; + +var CRp$9 = {}; + +CRp$9.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) { + var r = this; + + if (ele.isNode()) { + r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } else { + r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } +}; + +CRp$9.drawElementOverlay = function (context, ele) { + var r = this; + + if (ele.isNode()) { + r.drawNodeOverlay(context, ele); + } else { + r.drawEdgeOverlay(context, ele); + } +}; + +CRp$9.drawElementUnderlay = function (context, ele) { + var r = this; + + if (ele.isNode()) { + r.drawNodeUnderlay(context, ele); + } else { + r.drawEdgeUnderlay(context, ele); + } +}; + +CRp$9.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) { + var r = this; + var bb = eleTxrCache.getBoundingBox(ele); + + if (bb.w === 0 || bb.h === 0) { + return; + } // ignore zero size case + + + var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason); + + if (eleCache != null) { + var opacity = getOpacity(r, ele); + + if (opacity === 0) { + return; + } + + var theta = getRotation(r, ele); + var x1 = bb.x1, + y1 = bb.y1, + w = bb.w, + h = bb.h; + var x, y, sx, sy, smooth; + + if (theta !== 0) { + var rotPt = eleTxrCache.getRotationPoint(ele); + sx = rotPt.x; + sy = rotPt.y; + context.translate(sx, sy); + context.rotate(theta); + smooth = r.getImgSmoothing(context); + + if (!smooth) { + r.setImgSmoothing(context, true); + } + + var off = eleTxrCache.getRotationOffset(ele); + x = off.x; + y = off.y; + } else { + x = x1; + y = y1; + } + + var oldGlobalAlpha; + + if (opacity !== 1) { + oldGlobalAlpha = context.globalAlpha; + context.globalAlpha = oldGlobalAlpha * opacity; + } + + context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h); + + if (opacity !== 1) { + context.globalAlpha = oldGlobalAlpha; + } + + if (theta !== 0) { + context.rotate(-theta); + context.translate(-sx, -sy); + + if (!smooth) { + r.setImgSmoothing(context, false); + } + } + } else { + eleTxrCache.drawElement(context, ele); // direct draw fallback + } +}; + +var getZeroRotation = function getZeroRotation() { + return 0; +}; + +var getLabelRotation = function getLabelRotation(r, ele) { + return r.getTextAngle(ele, null); +}; + +var getSourceLabelRotation = function getSourceLabelRotation(r, ele) { + return r.getTextAngle(ele, 'source'); +}; + +var getTargetLabelRotation = function getTargetLabelRotation(r, ele) { + return r.getTextAngle(ele, 'target'); +}; + +var getOpacity = function getOpacity(r, ele) { + return ele.effectiveOpacity(); +}; + +var getTextOpacity = function getTextOpacity(e, ele) { + return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity(); +}; + +CRp$9.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) { + var r = this; + var _r$data = r.data, + eleTxrCache = _r$data.eleTxrCache, + lblTxrCache = _r$data.lblTxrCache, + slbTxrCache = _r$data.slbTxrCache, + tlbTxrCache = _r$data.tlbTxrCache; + var bb = ele.boundingBox(); + var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null; + + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + + if (!extent || boundingBoxesIntersect(bb, extent)) { + var isEdge = ele.isEdge(); + + var badLine = ele.element()._private.rscratch.badLine; + + r.drawElementUnderlay(context, ele); + r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity); + + if (!isEdge || !badLine) { + r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity); + } + + if (isEdge && !badLine) { + r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity); + r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity); + } + + r.drawElementOverlay(context, ele); + } +}; + +CRp$9.drawElements = function (context, eles) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawElement(context, ele); + } +}; + +CRp$9.drawCachedElements = function (context, eles, pxRatio, extent) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawCachedElement(context, ele, pxRatio, extent); + } +}; + +CRp$9.drawCachedNodes = function (context, eles, pxRatio, extent) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + r.drawCachedElement(context, ele, pxRatio, extent); + } +}; + +CRp$9.drawLayeredElements = function (context, eles, pxRatio, extent) { + var r = this; + var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio); + + if (layers) { + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var bb = layer.bb; + + if (bb.w === 0 || bb.h === 0) { + continue; + } + + context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h); + } + } else { + // fall back on plain caching if no layers + r.drawCachedElements(context, eles, pxRatio, extent); + } +}; + +/* global Path2D */ +var CRp$8 = {}; + +CRp$8.drawEdge = function (context, edge, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var rs = edge._private.rscratch; + + if (shouldDrawOpacity && !edge.visible()) { + return; + } // if bezier ctrl pts can not be calculated, then die + + + if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { + // isNaN in case edge is impossible and browser bugs (e.g. safari) + return; + } + + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1; + var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1; + var curveStyle = edge.pstyle('curve-style').value; + var lineStyle = edge.pstyle('line-style').value; + var edgeWidth = edge.pstyle('width').pfValue; + var lineCap = edge.pstyle('line-cap').value; + var effectiveLineOpacity = opacity * lineOpacity; // separate arrow opacity would require arrow-opacity property + + var effectiveArrowOpacity = opacity * lineOpacity; + + var drawLine = function drawLine() { + var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity; + + if (curveStyle === 'straight-triangle') { + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgeTrianglePath(edge, context, rs.allpts); + } else { + context.lineWidth = edgeWidth; + context.lineCap = lineCap; + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgePath(edge, context, rs.allpts, lineStyle); + context.lineCap = 'butt'; // reset for other drawing functions + } + }; + + var drawOverlay = function drawOverlay() { + if (!shouldDrawOverlay) { + return; + } + + r.drawEdgeOverlay(context, edge); + }; + + var drawUnderlay = function drawUnderlay() { + if (!shouldDrawOverlay) { + return; + } + + r.drawEdgeUnderlay(context, edge); + }; + + var drawArrows = function drawArrows() { + var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity; + r.drawArrowheads(context, edge, arrowOpacity); + }; + + var drawText = function drawText() { + r.drawElementText(context, edge, null, drawLabel); + }; + + context.lineJoin = 'round'; + var ghost = edge.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = edge.pstyle('ghost-offset-x').pfValue; + var gy = edge.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = edge.pstyle('ghost-opacity').value; + var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity; + context.translate(gx, gy); + drawLine(effectiveGhostOpacity); + drawArrows(effectiveGhostOpacity); + context.translate(-gx, -gy); + } + + drawUnderlay(); + drawLine(); + drawArrows(); + drawOverlay(); + drawText(); + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; + +var drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + + return function (context, edge) { + if (!edge.visible()) { + return; + } + + var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + + if (opacity === 0) { + return; + } + + var r = this; + var usePaths = r.usePaths(); + var rs = edge._private.rscratch; + var padding = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var width = 2 * padding; + var color = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value; + context.lineWidth = width; + + if (rs.edgeType === 'self' && !usePaths) { + context.lineCap = 'butt'; + } else { + context.lineCap = 'round'; + } + + r.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + r.drawEdgePath(edge, context, rs.allpts, 'solid'); + }; +}; + +CRp$8.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay'); +CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay'); + +CRp$8.drawEdgePath = function (edge, context, pts, type) { + var rs = edge._private.rscratch; + var canvasCxt = context; + var path; + var pathCacheHit = false; + var usePaths = this.usePaths(); + var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue; + var lineDashOffset = edge.pstyle('line-dash-offset').pfValue; + + if (usePaths) { + var pathCacheKey = pts.join('$'); + var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey; + + if (keyMatches) { + path = context = rs.pathCache; + pathCacheHit = true; + } else { + path = context = new Path2D(); + rs.pathCacheKey = pathCacheKey; + rs.pathCache = path; + } + } + + if (canvasCxt.setLineDash) { + // for very outofdate browsers + switch (type) { + case 'dotted': + canvasCxt.setLineDash([1, 1]); + break; + + case 'dashed': + canvasCxt.setLineDash(lineDashPattern); + canvasCxt.lineDashOffset = lineDashOffset; + break; + + case 'solid': + canvasCxt.setLineDash([]); + break; + } + } + + if (!pathCacheHit && !rs.badLine) { + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(pts[0], pts[1]); + + switch (rs.edgeType) { + case 'bezier': + case 'self': + case 'compound': + case 'multibezier': + for (var i = 2; i + 3 < pts.length; i += 4) { + context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]); + } + + break; + + case 'straight': + case 'segments': + case 'haystack': + for (var _i = 2; _i + 1 < pts.length; _i += 2) { + context.lineTo(pts[_i], pts[_i + 1]); + } + + break; + } + } + + context = canvasCxt; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } // reset any line dashes + + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } +}; + +CRp$8.drawEdgeTrianglePath = function (edge, context, pts) { + // use line stroke style for triangle fill style + context.fillStyle = context.strokeStyle; + var edgeWidth = edge.pstyle('width').pfValue; + + for (var i = 0; i + 1 < pts.length; i += 2) { + var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]]; + var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]); + var normal = [vector[1] / length, -vector[0] / length]; + var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2]; + context.beginPath(); + context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]); + context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]); + context.lineTo(pts[i + 2], pts[i + 3]); + context.closePath(); + context.fill(); + } +}; + +CRp$8.drawArrowheads = function (context, edge, opacity) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + + if (!isHaystack) { + this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity); + } + + this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity); + this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity); + + if (!isHaystack) { + this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity); + } +}; + +CRp$8.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) { + if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) { + return; + } + + var self = this; + var arrowShape = edge.pstyle(prefix + '-arrow-shape').value; + + if (arrowShape === 'none') { + return; + } + + var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled'; + var arrowFill = edge.pstyle(prefix + '-arrow-fill').value; + var edgeWidth = edge.pstyle('width').pfValue; + var edgeOpacity = edge.pstyle('opacity').value; + + if (opacity === undefined) { + opacity = edgeOpacity; + } + + var gco = context.globalCompositeOperation; + + if (opacity !== 1 || arrowFill === 'hollow') { + // then extra clear is needed + context.globalCompositeOperation = 'destination-out'; + self.colorFillStyle(context, 255, 255, 255, 1); + self.colorStrokeStyle(context, 255, 255, 255, 1); + self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, x, y, angle); + context.globalCompositeOperation = gco; + } // otherwise, the opaque arrow clears it for free :) + + + var color = edge.pstyle(prefix + '-arrow-color').value; + self.colorFillStyle(context, color[0], color[1], color[2], opacity); + self.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, x, y, angle); +}; + +CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, x, y, angle) { + var r = this; + var usePaths = this.usePaths() && shape !== 'triangle-cross'; + var pathCacheHit = false; + var path; + var canvasContext = context; + var translation = { + x: x, + y: y + }; + var scale = edge.pstyle('arrow-scale').value; + var size = this.getArrowWidth(edgeWidth, scale); + var shapeImpl = r.arrowShapes[shape]; + + if (usePaths) { + var cache = r.arrowPathCache = r.arrowPathCache || []; + var key = hashString(shape); + var cachedPath = cache[key]; + + if (cachedPath != null) { + path = context = cachedPath; + pathCacheHit = true; + } else { + path = context = new Path2D(); + cache[key] = path; + } + } + + if (!pathCacheHit) { + if (context.beginPath) { + context.beginPath(); + } + + if (usePaths) { + // store in the path cache with values easily manipulated later + shapeImpl.draw(context, 1, 0, { + x: 0, + y: 0 + }, 1); + } else { + shapeImpl.draw(context, size, angle, translation, edgeWidth); + } + + if (context.closePath) { + context.closePath(); + } + } + + context = canvasContext; + + if (usePaths) { + // set transform to arrow position/orientation + context.translate(x, y); + context.rotate(angle); + context.scale(size, size); + } + + if (fill === 'filled' || fill === 'both') { + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + + if (fill === 'hollow' || fill === 'both') { + context.lineWidth = (shapeImpl.matchEdgeWidth ? edgeWidth : 1) / (usePaths ? size : 1); + context.lineJoin = 'miter'; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + } + + if (usePaths) { + // reset transform by applying inverse + context.scale(1 / size, 1 / size); + context.rotate(-angle); + context.translate(-x, -y); + } +}; + +var CRp$7 = {}; + +CRp$7.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) { + // detect problematic cases for old browsers with bad images (cheaper than try-catch) + if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) { + return; + } + + try { + context.drawImage(img, ix, iy, iw, ih, x, y, w, h); + } catch (e) { + warn(e); + } +}; + +CRp$7.drawInscribedImage = function (context, img, node, index, nodeOpacity) { + var r = this; + var pos = node.position(); + var nodeX = pos.x; + var nodeY = pos.y; + var styleObj = node.cy().style(); + var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj); + var fit = getIndexedStyle(node, 'background-fit', 'value', index); + var repeat = getIndexedStyle(node, 'background-repeat', 'value', index); + var nodeW = node.width(); + var nodeH = node.height(); + var paddingX2 = node.padding() * 2; + var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var rs = node._private.rscratch; + var clip = getIndexedStyle(node, 'background-clip', 'value', index); + var shouldClip = clip === 'node'; + var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity; + var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index); + var imgW = img.width || img.cachedW; + var imgH = img.height || img.cachedH; // workaround for broken browsers like ie + + if (null == imgW || null == imgH) { + document.body.appendChild(img); // eslint-disable-line no-undef + + imgW = img.cachedW = img.width || img.offsetWidth; + imgH = img.cachedH = img.height || img.offsetHeight; + document.body.removeChild(img); // eslint-disable-line no-undef + } + + var w = imgW; + var h = imgH; + + if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-width', 'units', index) === '%') { + w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW; + } else { + w = getIndexedStyle(node, 'background-width', 'pfValue', index); + } + } + + if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-height', 'units', index) === '%') { + h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH; + } else { + h = getIndexedStyle(node, 'background-height', 'pfValue', index); + } + } + + if (w === 0 || h === 0) { + return; // no point in drawing empty image (and chrome is broken in this case) + } + + if (fit === 'contain') { + var scale = Math.min(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } else if (fit === 'cover') { + var scale = Math.max(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } + + var x = nodeX - nodeTW / 2; // left + + var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index); + var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index); + + if (posXUnits === '%') { + x += (nodeTW - w) * posXPfVal; + } else { + x += posXPfVal; + } + + var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index); + var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index); + + if (offXUnits === '%') { + x += (nodeTW - w) * offXPfVal; + } else { + x += offXPfVal; + } + + var y = nodeY - nodeTH / 2; // top + + var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index); + var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index); + + if (posYUnits === '%') { + y += (nodeTH - h) * posYPfVal; + } else { + y += posYPfVal; + } + + var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index); + var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index); + + if (offYUnits === '%') { + y += (nodeTH - h) * offYPfVal; + } else { + y += offYPfVal; + } + + if (rs.pathCache) { + x -= nodeX; + y -= nodeY; + nodeX = 0; + nodeY = 0; + } + + var gAlpha = context.globalAlpha; + context.globalAlpha = imgOpacity; + var smoothingEnabled = r.getImgSmoothing(context); + var isSmoothingSwitched = false; + + if (smooth === 'no' && smoothingEnabled) { + r.setImgSmoothing(context, false); + isSmoothingSwitched = true; + } else if (smooth === 'yes' && !smoothingEnabled) { + r.setImgSmoothing(context, true); + isSmoothingSwitched = true; + } + + if (repeat === 'no-repeat') { + if (shouldClip) { + context.save(); + + if (rs.pathCache) { + context.clip(rs.pathCache); + } else { + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.clip(); + } + } + + r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h); + + if (shouldClip) { + context.restore(); + } + } else { + var pattern = context.createPattern(img, repeat); + context.fillStyle = pattern; + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.translate(x, y); + context.fill(); + context.translate(-x, -y); + } + + context.globalAlpha = gAlpha; + + if (isSmoothingSwitched) { + r.setImgSmoothing(context, smoothingEnabled); + } +}; + +var CRp$6 = {}; + +CRp$6.eleTextBiggerThanMin = function (ele, scale) { + if (!scale) { + var zoom = ele.cy().zoom(); + var pxRatio = this.getPixelRatio(); + var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level + + scale = Math.pow(2, lvl); + } + + var computedSize = ele.pstyle('font-size').pfValue * scale; + var minSize = ele.pstyle('min-zoomed-font-size').pfValue; + + if (computedSize < minSize) { + return false; + } + + return true; +}; + +CRp$6.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) { + var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + + if (force == null) { + if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) { + return; + } + } else if (force === false) { + return; + } + + if (ele.isNode()) { + var label = ele.pstyle('label'); + + if (!label || !label.value) { + return; + } + + var justification = r.getLabelJustification(ele); + context.textAlign = justification; + context.textBaseline = 'bottom'; + } else { + var badLine = ele.element()._private.rscratch.badLine; + + var _label = ele.pstyle('label'); + + var srcLabel = ele.pstyle('source-label'); + var tgtLabel = ele.pstyle('target-label'); + + if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) { + return; + } + + context.textAlign = 'center'; + context.textBaseline = 'bottom'; + } + + var applyRotation = !shiftToOriginWithBb; + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + if (prefix == null) { + r.drawText(context, ele, null, applyRotation, useEleOpacity); + + if (ele.isEdge()) { + r.drawText(context, ele, 'source', applyRotation, useEleOpacity); + r.drawText(context, ele, 'target', applyRotation, useEleOpacity); + } + } else { + r.drawText(context, ele, prefix, applyRotation, useEleOpacity); + } + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; + +CRp$6.getFontCache = function (context) { + var cache; + this.fontCaches = this.fontCaches || []; + + for (var i = 0; i < this.fontCaches.length; i++) { + cache = this.fontCaches[i]; + + if (cache.context === context) { + return cache; + } + } + + cache = { + context: context + }; + this.fontCaches.push(cache); + return cache; +}; // set up canvas context with font +// returns transformed text string + + +CRp$6.setupTextStyle = function (context, ele) { + var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + // Font style + var labelStyle = ele.pstyle('font-style').strValue; + var labelSize = ele.pstyle('font-size').pfValue + 'px'; + var labelFamily = ele.pstyle('font-family').strValue; + var labelWeight = ele.pstyle('font-weight').strValue; + var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1; + var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity; + var color = ele.pstyle('color').value; + var outlineColor = ele.pstyle('text-outline-color').value; + context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily; + context.lineJoin = 'round'; // so text outlines aren't jagged + + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); +}; // TODO ensure re-used + + +function roundRect(ctx, x, y, width, height) { + var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5; + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + ctx.fill(); +} + +CRp$6.getTextAngle = function (ele, prefix) { + var theta; + var _p = ele._private; + var rscratch = _p.rscratch; + var pdash = prefix ? prefix + '-' : ''; + var rotation = ele.pstyle(pdash + 'text-rotation'); + var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix); + + if (rotation.strValue === 'autorotate') { + theta = ele.isEdge() ? textAngle : 0; + } else if (rotation.strValue === 'none') { + theta = 0; + } else { + theta = rotation.pfValue; + } + + return theta; +}; + +CRp$6.drawText = function (context, ele, prefix) { + var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var _p = ele._private; + var rscratch = _p.rscratch; + var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1; + + if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) { + return; + } // use 'main' as an alias for the main label (i.e. null prefix) + + + if (prefix === 'main') { + prefix = null; + } + + var textX = getPrefixedProperty(rscratch, 'labelX', prefix); + var textY = getPrefixedProperty(rscratch, 'labelY', prefix); + var orgTextX, orgTextY; // used for rotation + + var text = this.getLabelText(ele, prefix); + + if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) { + this.setupTextStyle(context, ele, useEleOpacity); + var pdash = prefix ? prefix + '-' : ''; + var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix); + var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix); + var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var halign = ele.pstyle('text-halign').value; + var valign = ele.pstyle('text-valign').value; + + if (isEdge) { + halign = 'center'; + valign = 'center'; + } + + textX += marginX; + textY += marginY; + var theta; + + if (!applyRotation) { + theta = 0; + } else { + theta = this.getTextAngle(ele, prefix); + } + + if (theta !== 0) { + orgTextX = textX; + orgTextY = textY; + context.translate(orgTextX, orgTextY); + context.rotate(theta); + textX = 0; + textY = 0; + } + + switch (valign) { + case 'top': + break; + + case 'center': + textY += textH / 2; + break; + + case 'bottom': + textY += textH; + break; + } + + var backgroundOpacity = ele.pstyle('text-background-opacity').value; + var borderOpacity = ele.pstyle('text-border-opacity').value; + var textBorderWidth = ele.pstyle('text-border-width').pfValue; + var backgroundPadding = ele.pstyle('text-background-padding').pfValue; + + if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) { + var bgX = textX - backgroundPadding; + + switch (halign) { + case 'left': + bgX -= textW; + break; + + case 'center': + bgX -= textW / 2; + break; + } + + var bgY = textY - textH - backgroundPadding; + var bgW = textW + 2 * backgroundPadding; + var bgH = textH + 2 * backgroundPadding; + + if (backgroundOpacity > 0) { + var textFill = context.fillStyle; + var textBackgroundColor = ele.pstyle('text-background-color').value; + context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')'; + var styleShape = ele.pstyle('text-background-shape').strValue; + + if (styleShape.indexOf('round') === 0) { + roundRect(context, bgX, bgY, bgW, bgH, 2); + } else { + context.fillRect(bgX, bgY, bgW, bgH); + } + + context.fillStyle = textFill; + } + + if (textBorderWidth > 0 && borderOpacity > 0) { + var textStroke = context.strokeStyle; + var textLineWidth = context.lineWidth; + var textBorderColor = ele.pstyle('text-border-color').value; + var textBorderStyle = ele.pstyle('text-border-style').value; + context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')'; + context.lineWidth = textBorderWidth; + + if (context.setLineDash) { + // for very outofdate browsers + switch (textBorderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + + case 'dashed': + context.setLineDash([4, 2]); + break; + + case 'double': + context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders + + context.setLineDash([]); + break; + + case 'solid': + context.setLineDash([]); + break; + } + } + + context.strokeRect(bgX, bgY, bgW, bgH); + + if (textBorderStyle === 'double') { + var whiteWidth = textBorderWidth / 2; + context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2); + } + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + + context.lineWidth = textLineWidth; + context.strokeStyle = textStroke; + } + } + + var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle + + if (lineWidth > 0) { + context.lineWidth = lineWidth; + } + + if (ele.pstyle('text-wrap').value === 'wrap') { + var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix); + var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix); + var halfTextW = textW / 2; + var justification = this.getLabelJustification(ele); + + if (justification === 'auto') ; else if (halign === 'left') { + // auto justification : right + if (justification === 'left') { + textX += -textW; + } else if (justification === 'center') { + textX += -halfTextW; + } // else same as auto + + } else if (halign === 'center') { + // auto justfication : center + if (justification === 'left') { + textX += -halfTextW; + } else if (justification === 'right') { + textX += halfTextW; + } // else same as auto + + } else if (halign === 'right') { + // auto justification : left + if (justification === 'center') { + textX += halfTextW; + } else if (justification === 'right') { + textX += textW; + } // else same as auto + + } + + switch (valign) { + case 'top': + textY -= (lines.length - 1) * lineHeight; + break; + + case 'center': + case 'bottom': + textY -= (lines.length - 1) * lineHeight; + break; + } + + for (var l = 0; l < lines.length; l++) { + if (lineWidth > 0) { + context.strokeText(lines[l], textX, textY); + } + + context.fillText(lines[l], textX, textY); + textY += lineHeight; + } + } else { + if (lineWidth > 0) { + context.strokeText(text, textX, textY); + } + + context.fillText(text, textX, textY); + } + + if (theta !== 0) { + context.rotate(-theta); + context.translate(-orgTextX, -orgTextY); + } + } +}; + +/* global Path2D */ +var CRp$5 = {}; + +CRp$5.drawNode = function (context, node, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var nodeWidth, nodeHeight; + var _p = node._private; + var rs = _p.rscratch; + var pos = node.position(); + + if (!number$1(pos.x) || !number$1(pos.y)) { + return; // can't draw node with undefined position + } + + if (shouldDrawOpacity && !node.visible()) { + return; + } + + var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1; + var usePaths = r.usePaths(); + var path; + var pathCacheHit = false; + var padding = node.padding(); + nodeWidth = node.width() + 2 * padding; + nodeHeight = node.height() + 2 * padding; // + // setup shift + + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } // + // load bg image + + + var bgImgProp = node.pstyle('background-image'); + var urls = bgImgProp.value; + var urlDefined = new Array(urls.length); + var image = new Array(urls.length); + var numImages = 0; + + for (var i = 0; i < urls.length; i++) { + var url = urls[i]; + var defd = urlDefined[i] = url != null && url !== 'none'; + + if (defd) { + var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i); + numImages++; // get image, and if not loaded then ask to redraw when later loaded + + image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () { + _p.backgroundTimestamp = Date.now(); + node.emitAndNotify('background'); + }); + } + } // + // setup styles + + + var darkness = node.pstyle('background-blacken').value; + var borderWidth = node.pstyle('border-width').pfValue; + var bgOpacity = node.pstyle('background-opacity').value * eleOpacity; + var borderColor = node.pstyle('border-color').value; + var borderStyle = node.pstyle('border-style').value; + var borderOpacity = node.pstyle('border-opacity').value * eleOpacity; + context.lineJoin = 'miter'; // so borders are square with the node shape + + var setupShapeColor = function setupShapeColor() { + var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity; + r.eleFillStyle(context, node, bgOpy); + }; + + var setupBorderColor = function setupBorderColor() { + var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity; + r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy); + }; // + // setup shape + + + var styleShape = node.pstyle('shape').strValue; + var shapePts = node.pstyle('shape-polygon-points').pfValue; + + if (usePaths) { + context.translate(pos.x, pos.y); + var pathCache = r.nodePathCache = r.nodePathCache || []; + var key = hashStrings(styleShape === 'polygon' ? styleShape + ',' + shapePts.join(',') : styleShape, '' + nodeHeight, '' + nodeWidth); + var cachedPath = pathCache[key]; + + if (cachedPath != null) { + path = cachedPath; + pathCacheHit = true; + rs.pathCache = path; + } else { + path = new Path2D(); + pathCache[key] = rs.pathCache = path; + } + } + + var drawShape = function drawShape() { + if (!pathCacheHit) { + var npos = pos; + + if (usePaths) { + npos = { + x: 0, + y: 0 + }; + } + + r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight); + } + + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + }; + + var drawImages = function drawImages() { + var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var prevBging = _p.backgrounding; + var totalCompleted = 0; + + for (var _i = 0; _i < image.length; _i++) { + var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i); + + if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') { + totalCompleted++; + continue; + } + + if (urlDefined[_i] && image[_i].complete && !image[_i].error) { + totalCompleted++; + r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity); + } + } + + _p.backgrounding = !(totalCompleted === numImages); + + if (prevBging !== _p.backgrounding) { + // update style b/c :backgrounding state changed + node.updateStyle(false); + } + }; + + var drawPie = function drawPie() { + var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity; + + if (r.hasPie(node)) { + r.drawPie(context, node, pieOpacity); // redraw/restore path if steps after pie need it + + if (redrawShape) { + if (!usePaths) { + r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight); + } + } + } + }; + + var darken = function darken() { + var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity; + var c = darkness > 0 ? 0 : 255; + + if (darkness !== 0) { + r.colorFillStyle(context, c, c, c, opacity); + + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + }; + + var drawBorder = function drawBorder() { + if (borderWidth > 0) { + context.lineWidth = borderWidth; + context.lineCap = 'butt'; + + if (context.setLineDash) { + // for very outofdate browsers + switch (borderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + + case 'dashed': + context.setLineDash([4, 2]); + break; + + case 'solid': + case 'double': + context.setLineDash([]); + break; + } + } + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + if (borderStyle === 'double') { + context.lineWidth = borderWidth / 3; + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + context.globalCompositeOperation = gco; + } // reset in case we changed the border style + + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + } + }; + + var drawOverlay = function drawOverlay() { + if (shouldDrawOverlay) { + r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + + var drawUnderlay = function drawUnderlay() { + if (shouldDrawOverlay) { + r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + + var drawText = function drawText() { + r.drawElementText(context, node, null, drawLabel); + }; + + var ghost = node.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = node.pstyle('ghost-offset-x').pfValue; + var gy = node.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = node.pstyle('ghost-opacity').value; + var effGhostOpacity = ghostOpacity * eleOpacity; + context.translate(gx, gy); + setupShapeColor(ghostOpacity * bgOpacity); + drawShape(); + drawImages(effGhostOpacity, true); + setupBorderColor(ghostOpacity * borderOpacity); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(effGhostOpacity, false); + darken(effGhostOpacity); + context.translate(-gx, -gy); + } + + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + + drawUnderlay(); + + if (usePaths) { + context.translate(pos.x, pos.y); + } + + setupShapeColor(); + drawShape(); + drawImages(eleOpacity, true); + setupBorderColor(); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(eleOpacity, false); + darken(); + + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + + drawText(); + drawOverlay(); // + // clean up shift + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; + +var drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + + return function (context, node, pos, nodeWidth, nodeHeight) { + var r = this; + + if (!node.visible()) { + return; + } + + var padding = node.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var opacity = node.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + var color = node.pstyle("".concat(overlayOrUnderlay, "-color")).value; + var shape = node.pstyle("".concat(overlayOrUnderlay, "-shape")).value; + + if (opacity > 0) { + pos = pos || node.position(); + + if (nodeWidth == null || nodeHeight == null) { + var _padding = node.padding(); + + nodeWidth = node.width() + 2 * _padding; + nodeHeight = node.height() + 2 * _padding; + } + + r.colorFillStyle(context, color[0], color[1], color[2], opacity); + r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2); + context.fill(); + } + }; +}; + +CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay'); +CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); // does the node have at least one pie piece? + +CRp$5.hasPie = function (node) { + node = node[0]; // ensure ele ref + + return node._private.hasPie; +}; + +CRp$5.drawPie = function (context, node, nodeOpacity, pos) { + node = node[0]; // ensure ele ref + + pos = pos || node.position(); + var cyStyle = node.cy().style(); + var pieSize = node.pstyle('pie-size'); + var x = pos.x; + var y = pos.y; + var nodeW = node.width(); + var nodeH = node.height(); + var radius = Math.min(nodeW, nodeH) / 2; // must fit in node + + var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1] + + var usePaths = this.usePaths(); + + if (usePaths) { + x = 0; + y = 0; + } + + if (pieSize.units === '%') { + radius = radius * pieSize.pfValue; + } else if (pieSize.pfValue !== undefined) { + radius = pieSize.pfValue / 2; + } + + for (var i = 1; i <= cyStyle.pieBackgroundN; i++) { + // 1..N + var size = node.pstyle('pie-' + i + '-background-size').value; + var color = node.pstyle('pie-' + i + '-background-color').value; + var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity; + var percent = size / 100; // map integer range [0, 100] to [0, 1] + // percent can't push beyond 1 + + if (percent + lastPercent > 1) { + percent = 1 - lastPercent; + } + + var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise + + var angleDelta = 2 * Math.PI * percent; + var angleEnd = angleStart + angleDelta; // ignore if + // - zero size + // - we're already beyond the full circle + // - adding the current slice would go beyond the full circle + + if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) { + continue; + } + + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, angleStart, angleEnd); + context.closePath(); + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + context.fill(); + lastPercent += percent; + } +}; + +var CRp$4 = {}; +var motionBlurDelay = 100; // var isFirefox = typeof InstallTrigger !== 'undefined'; + +CRp$4.getPixelRatio = function () { + var context = this.data.contexts[0]; + + if (this.forcedPixelRatio != null) { + return this.forcedPixelRatio; + } + + var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef +}; + +CRp$4.paintCache = function (context) { + var caches = this.paintCaches = this.paintCaches || []; + var needToCreateCache = true; + var cache; + + for (var i = 0; i < caches.length; i++) { + cache = caches[i]; + + if (cache.context === context) { + needToCreateCache = false; + break; + } + } + + if (needToCreateCache) { + cache = { + context: context + }; + caches.push(cache); + } + + return cache; +}; + +CRp$4.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) { + var gradientStyle; + var usePaths = this.usePaths(); + var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value, + positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue; + + if (fill === 'radial-gradient') { + if (ele.isEdge()) { + var start = ele.sourceEndpoint(), + end = ele.targetEndpoint(), + mid = ele.midpoint(); + var d1 = dist(start, mid); + var d2 = dist(end, mid); + gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2)); + } else { + var pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + width = ele.paddedWidth(), + height = ele.paddedHeight(); + gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height)); + } + } else { + if (ele.isEdge()) { + var _start = ele.sourceEndpoint(), + _end = ele.targetEndpoint(); + + gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y); + } else { + var _pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + _width = ele.paddedWidth(), + _height = ele.paddedHeight(), + halfWidth = _width / 2, + halfHeight = _height / 2; + + var direction = ele.pstyle('background-gradient-direction').value; + + switch (direction) { + case 'to-bottom': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight); + break; + + case 'to-top': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight); + break; + + case 'to-left': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y); + break; + + case 'to-right': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y); + break; + + case 'to-bottom-right': + case 'to-right-bottom': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight); + break; + + case 'to-top-right': + case 'to-right-top': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight); + break; + + case 'to-bottom-left': + case 'to-left-bottom': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight); + break; + + case 'to-top-left': + case 'to-left-top': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight); + break; + } + } + } + + if (!gradientStyle) return null; // invalid gradient style + + var hasPositions = positions.length === colors.length; + var length = colors.length; + + for (var i = 0; i < length; i++) { + gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')'); + } + + return gradientStyle; +}; + +CRp$4.gradientFillStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity); + if (!gradientStyle) return null; // error + + context.fillStyle = gradientStyle; +}; + +CRp$4.colorFillStyle = function (context, r, g, b, a) { + context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching + // var cache = this.paintCache(context); + // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // if( cache.fillStyle !== fillStyle ){ + // context.fillStyle = cache.fillStyle = fillStyle; + // } +}; + +CRp$4.eleFillStyle = function (context, ele, opacity) { + var backgroundFill = ele.pstyle('background-fill').value; + + if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') { + this.gradientFillStyle(context, ele, backgroundFill, opacity); + } else { + var backgroundColor = ele.pstyle('background-color').value; + this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity); + } +}; + +CRp$4.gradientStrokeStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity); + if (!gradientStyle) return null; // error + + context.strokeStyle = gradientStyle; +}; + +CRp$4.colorStrokeStyle = function (context, r, g, b, a) { + context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching + // var cache = this.paintCache(context); + // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // if( cache.strokeStyle !== strokeStyle ){ + // context.strokeStyle = cache.strokeStyle = strokeStyle; + // } +}; + +CRp$4.eleStrokeStyle = function (context, ele, opacity) { + var lineFill = ele.pstyle('line-fill').value; + + if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') { + this.gradientStrokeStyle(context, ele, lineFill, opacity); + } else { + var lineColor = ele.pstyle('line-color').value; + this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity); + } +}; // Resize canvas + + +CRp$4.matchCanvasSize = function (container) { + var r = this; + var data = r.data; + var bb = r.findContainerClientCoords(); + var width = bb[2]; + var height = bb[3]; + var pixelRatio = r.getPixelRatio(); + var mbPxRatio = r.motionBlurPxRatio; + + if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) { + pixelRatio = mbPxRatio; + } + + var canvasWidth = width * pixelRatio; + var canvasHeight = height * pixelRatio; + var canvas; + + if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) { + return; // save cycles if same + } + + r.fontCaches = null; // resizing resets the style + + var canvasContainer = data.canvasContainer; + canvasContainer.style.width = width + 'px'; + canvasContainer.style.height = height + 'px'; + + for (var i = 0; i < r.CANVAS_LAYERS; i++) { + canvas = data.canvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + for (var i = 0; i < r.BUFFER_COUNT; i++) { + canvas = data.bufferCanvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + r.textureMult = 1; + + if (pixelRatio <= 1) { + canvas = data.bufferCanvases[r.TEXTURE_BUFFER]; + r.textureMult = 2; + canvas.width = canvasWidth * r.textureMult; + canvas.height = canvasHeight * r.textureMult; + } + + r.canvasWidth = canvasWidth; + r.canvasHeight = canvasHeight; +}; + +CRp$4.renderTo = function (cxt, zoom, pan, pxRatio) { + this.render({ + forcedContext: cxt, + forcedZoom: zoom, + forcedPan: pan, + drawAllLayers: true, + forcedPxRatio: pxRatio + }); +}; + +CRp$4.render = function (options) { + options = options || staticEmptyObject(); + var forcedContext = options.forcedContext; + var drawAllLayers = options.drawAllLayers; + var drawOnlyNodeLayer = options.drawOnlyNodeLayer; + var forcedZoom = options.forcedZoom; + var forcedPan = options.forcedPan; + var r = this; + var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio; + var cy = r.cy; + var data = r.data; + var needDraw = data.canvasNeedsRedraw; + var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming); + var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur; + var mbPxRatio = r.motionBlurPxRatio; + var hasCompoundNodes = cy.hasCompoundNodes(); + var inNodeDragGesture = r.hoverData.draggingEles; + var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false; + motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection; + var motionBlurFadeEffect = motionBlur; + + if (!forcedContext) { + if (r.prevPxRatio !== pixelRatio) { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + + r.prevPxRatio = pixelRatio; + } + + if (!forcedContext && r.motionBlurTimeout) { + clearTimeout(r.motionBlurTimeout); + } + + if (motionBlur) { + if (r.mbFrames == null) { + r.mbFrames = 0; + } + + r.mbFrames++; + + if (r.mbFrames < 3) { + // need several frames before even high quality motionblur + motionBlurFadeEffect = false; + } // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing) + + + if (r.mbFrames > r.minMbLowQualFrames) { + //r.fullQualityMb = false; + r.motionBlurPxRatio = r.mbPxRBlurry; + } + } + + if (r.clearingMotionBlur) { + r.motionBlurPxRatio = 1; + } // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame + // because a rogue async texture frame would clear needDraw + + + if (r.textureDrawLastFrame && !textureDraw) { + needDraw[r.NODE] = true; + needDraw[r.SELECT_BOX] = true; + } + + var style = cy.style(); + var zoom = cy.zoom(); + var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom; + var pan = cy.pan(); + var effectivePan = { + x: pan.x, + y: pan.y + }; + var vp = { + zoom: zoom, + pan: { + x: pan.x, + y: pan.y + } + }; + var prevVp = r.prevViewport; + var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed) + + if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) { + r.motionBlurPxRatio = 1; + } + + if (forcedPan) { + effectivePan = forcedPan; + } // apply pixel ratio + + + effectiveZoom *= pixelRatio; + effectivePan.x *= pixelRatio; + effectivePan.y *= pixelRatio; + var eles = r.getCachedZSortedEles(); + + function mbclear(context, x, y, w, h) { + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency); + context.fillRect(x, y, w, h); + context.globalCompositeOperation = gco; + } + + function setContextTransform(context, clear) { + var ePan, eZoom, w, h; + + if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) { + ePan = { + x: pan.x * mbPxRatio, + y: pan.y * mbPxRatio + }; + eZoom = zoom * mbPxRatio; + w = r.canvasWidth * mbPxRatio; + h = r.canvasHeight * mbPxRatio; + } else { + ePan = effectivePan; + eZoom = effectiveZoom; + w = r.canvasWidth; + h = r.canvasHeight; + } + + context.setTransform(1, 0, 0, 1, 0, 0); + + if (clear === 'motionBlur') { + mbclear(context, 0, 0, w, h); + } else if (!forcedContext && (clear === undefined || clear)) { + context.clearRect(0, 0, w, h); + } + + if (!drawAllLayers) { + context.translate(ePan.x, ePan.y); + context.scale(eZoom, eZoom); + } + + if (forcedPan) { + context.translate(forcedPan.x, forcedPan.y); + } + + if (forcedZoom) { + context.scale(forcedZoom, forcedZoom); + } + } + + if (!textureDraw) { + r.textureDrawLastFrame = false; + } + + if (textureDraw) { + r.textureDrawLastFrame = true; + + if (!r.textureCache) { + r.textureCache = {}; + r.textureCache.bb = cy.mutableElements().boundingBox(); + r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER]; + var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER]; + cxt.setTransform(1, 0, 0, 1, 0, 0); + cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult); + r.render({ + forcedContext: cxt, + drawOnlyNodeLayer: true, + forcedPxRatio: pixelRatio * r.textureMult + }); + var vp = r.textureCache.viewport = { + zoom: cy.zoom(), + pan: cy.pan(), + width: r.canvasWidth, + height: r.canvasHeight + }; + vp.mpan = { + x: (0 - vp.pan.x) / vp.zoom, + y: (0 - vp.pan.y) / vp.zoom + }; + } + + needDraw[r.DRAG] = false; + needDraw[r.NODE] = false; + var context = data.contexts[r.NODE]; + var texture = r.textureCache.texture; + var vp = r.textureCache.viewport; + context.setTransform(1, 0, 0, 1, 0, 0); + + if (motionBlur) { + mbclear(context, 0, 0, vp.width, vp.height); + } else { + context.clearRect(0, 0, vp.width, vp.height); + } + + var outsideBgColor = style.core('outside-texture-bg-color').value; + var outsideBgOpacity = style.core('outside-texture-bg-opacity').value; + r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity); + context.fillRect(0, 0, vp.width, vp.height); + var zoom = cy.zoom(); + setContextTransform(context, false); + context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + } else if (r.textureOnViewport && !forcedContext) { + // clear the cache since we don't need it + r.textureCache = null; + } + + var extent = cy.extent(); + var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated(); + var hideEdges = r.hideEdgesOnViewport && vpManip; + var needMbClear = []; + needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur; + + if (needMbClear[r.NODE]) { + r.clearedForMotionBlur[r.NODE] = true; + } + + needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur; + + if (needMbClear[r.DRAG]) { + r.clearedForMotionBlur[r.DRAG] = true; + } + + if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) { + var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]); + var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined; + setContextTransform(context, clear); + + if (hideEdges) { + r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent); + } else { + r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent); + } + + if (r.debug) { + r.drawDebugPoints(context, eles.nondrag); + } + + if (!drawAllLayers && !motionBlur) { + needDraw[r.NODE] = false; + } + } + + if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) { + var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]); + setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined); + + if (hideEdges) { + r.drawCachedNodes(context, eles.drag, pixelRatio, extent); + } else { + r.drawCachedElements(context, eles.drag, pixelRatio, extent); + } + + if (r.debug) { + r.drawDebugPoints(context, eles.drag); + } + + if (!drawAllLayers && !motionBlur) { + needDraw[r.DRAG] = false; + } + } + + if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) { + var context = forcedContext || data.contexts[r.SELECT_BOX]; + setContextTransform(context); + + if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) { + var zoom = r.cy.zoom(); + var borderWidth = style.core('selection-box-border-width').value / zoom; + context.lineWidth = borderWidth; + context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + + if (borderWidth > 0) { + context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + } + } + + if (data.bgActivePosistion && !r.hoverData.selecting) { + var zoom = r.cy.zoom(); + var pos = data.bgActivePosistion; + context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')'; + context.beginPath(); + context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI); + context.fill(); + } + + var timeToRender = r.lastRedrawTime; + + if (r.showFps && timeToRender) { + timeToRender = Math.round(timeToRender); + var fps = Math.round(1000 / timeToRender); + context.setTransform(1, 0, 0, 1, 0, 0); + context.fillStyle = 'rgba(255, 0, 0, 0.75)'; + context.strokeStyle = 'rgba(255, 0, 0, 0.75)'; + context.lineWidth = 1; + context.fillText('1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20); + var maxFps = 60; + context.strokeRect(0, 30, 250, 20); + context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20); + } + + if (!drawAllLayers) { + needDraw[r.SELECT_BOX] = false; + } + } // motionblur: blit rendered blurry frames + + + if (motionBlur && mbPxRatio !== 1) { + var cxtNode = data.contexts[r.NODE]; + var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE]; + var cxtDrag = data.contexts[r.DRAG]; + var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]; + + var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) { + cxt.setTransform(1, 0, 0, 1, 0, 0); + + if (needClear || !motionBlurFadeEffect) { + cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight); + } else { + mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight); + } + + var pxr = mbPxRatio; + cxt.drawImage(txt, // img + 0, 0, // sx, sy + r.canvasWidth * pxr, r.canvasHeight * pxr, // sw, sh + 0, 0, // x, y + r.canvasWidth, r.canvasHeight // w, h + ); + }; + + if (needDraw[r.NODE] || needMbClear[r.NODE]) { + drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]); + needDraw[r.NODE] = false; + } + + if (needDraw[r.DRAG] || needMbClear[r.DRAG]) { + drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]); + needDraw[r.DRAG] = false; + } + } + + r.prevViewport = vp; + + if (r.clearingMotionBlur) { + r.clearingMotionBlur = false; + r.motionBlurCleared = true; + r.motionBlur = true; + } + + if (motionBlur) { + r.motionBlurTimeout = setTimeout(function () { + r.motionBlurTimeout = null; + r.clearedForMotionBlur[r.NODE] = false; + r.clearedForMotionBlur[r.DRAG] = false; + r.motionBlur = false; + r.clearingMotionBlur = !textureDraw; + r.mbFrames = 0; + needDraw[r.NODE] = true; + needDraw[r.DRAG] = true; + r.redraw(); + }, motionBlurDelay); + } + + if (!forcedContext) { + cy.emit('render'); + } +}; + +var CRp$3 = {}; // @O Polygon drawing + +CRp$3.drawPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(x + halfW * points[0], y + halfH * points[1]); + + for (var i = 1; i < points.length / 2; i++) { + context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]); + } + + context.closePath(); +}; + +CRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } + + for (var _i = 0; _i < points.length / 4; _i++) { + var sourceUv = void 0, + destUv = void 0; + + if (_i === 0) { + sourceUv = points.length - 2; + } else { + sourceUv = _i * 4 - 2; + } + + destUv = _i * 4 + 2; + var px = x + halfW * points[_i * 4]; + var py = y + halfH * points[_i * 4 + 1]; + var cosTheta = -points[sourceUv] * points[destUv] - points[sourceUv + 1] * points[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * points[sourceUv]; + var cp0y = py - offset * points[sourceUv + 1]; + var cp1x = px + offset * points[destUv]; + var cp1y = py + offset * points[destUv + 1]; + + if (_i === 0) { + context.moveTo(cp0x, cp0y); + } else { + context.lineTo(cp0x, cp0y); + } + + context.arcTo(px, py, cp1x, cp1y, cornerRadius); + } + + context.closePath(); +}; // Round rectangle drawing + + +CRp$3.drawRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } // Start at top middle + + + context.moveTo(x, y - halfHeight); // Arc from middle top to right side + + context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius); // Arc from right side to bottom + + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); // Arc from bottom to left side + + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); // Arc from left side to topBorder + + context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius); // Join line + + context.lineTo(x, y - halfHeight); + context.closePath(); +}; + +CRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } // Start at top middle + + + context.moveTo(x, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight); + context.lineTo(x + halfWidth, y); + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); + context.lineTo(x - halfWidth, y - halfHeight); + context.lineTo(x, y - halfHeight); + context.closePath(); +}; + +CRp$3.drawCutRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerLength = getCutRectangleCornerLength(); + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(x - halfWidth + cornerLength, y - halfHeight); + context.lineTo(x + halfWidth - cornerLength, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight + cornerLength); + context.lineTo(x + halfWidth, y + halfHeight - cornerLength); + context.lineTo(x + halfWidth - cornerLength, y + halfHeight); + context.lineTo(x - halfWidth + cornerLength, y + halfHeight); + context.lineTo(x - halfWidth, y + halfHeight - cornerLength); + context.lineTo(x - halfWidth, y - halfHeight + cornerLength); + context.closePath(); +}; + +CRp$3.drawBarrelPath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var xBegin = x - halfWidth; + var xEnd = x + halfWidth; + var yBegin = y - halfHeight; + var yEnd = y + halfHeight; + var barrelCurveConstants = getBarrelCurveConstants(width, height); + var wOffset = barrelCurveConstants.widthOffset; + var hOffset = barrelCurveConstants.heightOffset; + var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset; + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(xBegin, yBegin + hOffset); + context.lineTo(xBegin, yEnd - hOffset); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd); + context.lineTo(xEnd - wOffset, yEnd); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset); + context.lineTo(xEnd, yBegin + hOffset); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin); + context.lineTo(xBegin + wOffset, yBegin); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset); + context.closePath(); +}; + +var sin0 = Math.sin(0); +var cos0 = Math.cos(0); +var sin = {}; +var cos = {}; +var ellipseStepSize = Math.PI / 40; + +for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + sin[i] = Math.sin(i); + cos[i] = Math.cos(i); +} + +CRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) { + if (context.beginPath) { + context.beginPath(); + } + + if (context.ellipse) { + context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + var xPos, yPos; + var rw = width / 2; + var rh = height / 2; + + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0; + yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0; + + if (i === 0) { + context.moveTo(xPos, yPos); + } else { + context.lineTo(xPos, yPos); + } + } + } + + context.closePath(); +}; + +/* global atob, ArrayBuffer, Uint8Array, Blob */ +var CRp$2 = {}; + +CRp$2.createBuffer = function (w, h) { + var buffer = document.createElement('canvas'); // eslint-disable-line no-undef + + buffer.width = w; + buffer.height = h; + return [buffer, buffer.getContext('2d')]; +}; + +CRp$2.bufferCanvasImage = function (options) { + var cy = this.cy; + var eles = cy.mutableElements(); + var bb = eles.boundingBox(); + var ctrRect = this.findContainerClientCoords(); + var width = options.full ? Math.ceil(bb.w) : ctrRect[2]; + var height = options.full ? Math.ceil(bb.h) : ctrRect[3]; + var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight); + var pxRatio = this.getPixelRatio(); + var scale = 1; + + if (options.scale !== undefined) { + width *= options.scale; + height *= options.scale; + scale = options.scale; + } else if (specdMaxDims) { + var maxScaleW = Infinity; + var maxScaleH = Infinity; + + if (number$1(options.maxWidth)) { + maxScaleW = scale * options.maxWidth / width; + } + + if (number$1(options.maxHeight)) { + maxScaleH = scale * options.maxHeight / height; + } + + scale = Math.min(maxScaleW, maxScaleH); + width *= scale; + height *= scale; + } + + if (!specdMaxDims) { + width *= pxRatio; + height *= pxRatio; + scale *= pxRatio; + } + + var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef + + buffCanvas.width = width; + buffCanvas.height = height; + buffCanvas.style.width = width + 'px'; + buffCanvas.style.height = height + 'px'; + var buffCxt = buffCanvas.getContext('2d'); // Rasterize the layers, but only if container has nonzero size + + if (width > 0 && height > 0) { + buffCxt.clearRect(0, 0, width, height); + buffCxt.globalCompositeOperation = 'source-over'; + var zsortedEles = this.getCachedZSortedEles(); + + if (options.full) { + // draw the full bounds of the graph + buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(bb.x1 * scale, bb.y1 * scale); + } else { + // draw the current view + var pan = cy.pan(); + var translation = { + x: pan.x * scale, + y: pan.y * scale + }; + scale *= cy.zoom(); + buffCxt.translate(translation.x, translation.y); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(-translation.x, -translation.y); + } // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs + + + if (options.bg) { + buffCxt.globalCompositeOperation = 'destination-over'; + buffCxt.fillStyle = options.bg; + buffCxt.rect(0, 0, width, height); + buffCxt.fill(); + } + } + + return buffCanvas; +}; + +function b64ToBlob(b64, mimeType) { + var bytes = atob(b64); + var buff = new ArrayBuffer(bytes.length); + var buffUint8 = new Uint8Array(buff); + + for (var i = 0; i < bytes.length; i++) { + buffUint8[i] = bytes.charCodeAt(i); + } + + return new Blob([buff], { + type: mimeType + }); +} + +function b64UriToB64(b64uri) { + var i = b64uri.indexOf(','); + return b64uri.substr(i + 1); +} + +function output(options, canvas, mimeType) { + var getB64Uri = function getB64Uri() { + return canvas.toDataURL(mimeType, options.quality); + }; + + switch (options.output) { + case 'blob-promise': + return new Promise$1(function (resolve, reject) { + try { + canvas.toBlob(function (blob) { + if (blob != null) { + resolve(blob); + } else { + reject(new Error('`canvas.toBlob()` sent a null value in its callback')); + } + }, mimeType, options.quality); + } catch (err) { + reject(err); + } + }); + + case 'blob': + return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); + + case 'base64': + return b64UriToB64(getB64Uri()); + + case 'base64uri': + default: + return getB64Uri(); + } +} + +CRp$2.png = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/png'); +}; + +CRp$2.jpg = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/jpeg'); +}; + +var CRp$1 = {}; + +CRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points) { + switch (name) { + case 'ellipse': + return this.drawEllipsePath(context, centerX, centerY, width, height); + + case 'polygon': + return this.drawPolygonPath(context, centerX, centerY, width, height, points); + + case 'round-polygon': + return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points); + + case 'roundrectangle': + case 'round-rectangle': + return this.drawRoundRectanglePath(context, centerX, centerY, width, height); + + case 'cutrectangle': + case 'cut-rectangle': + return this.drawCutRectanglePath(context, centerX, centerY, width, height); + + case 'bottomroundrectangle': + case 'bottom-round-rectangle': + return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height); + + case 'barrel': + return this.drawBarrelPath(context, centerX, centerY, width, height); + } +}; + +var CR = CanvasRenderer; +var CRp = CanvasRenderer.prototype; +CRp.CANVAS_LAYERS = 3; // + +CRp.SELECT_BOX = 0; +CRp.DRAG = 1; +CRp.NODE = 2; +CRp.BUFFER_COUNT = 3; // + +CRp.TEXTURE_BUFFER = 0; +CRp.MOTIONBLUR_BUFFER_NODE = 1; +CRp.MOTIONBLUR_BUFFER_DRAG = 2; + +function CanvasRenderer(options) { + var r = this; + r.data = { + canvases: new Array(CRp.CANVAS_LAYERS), + contexts: new Array(CRp.CANVAS_LAYERS), + canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS), + bufferCanvases: new Array(CRp.BUFFER_COUNT), + bufferContexts: new Array(CRp.CANVAS_LAYERS) + }; + var tapHlOffAttr = '-webkit-tap-highlight-color'; + var tapHlOffStyle = 'rgba(0,0,0,0)'; + r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef + + var containerStyle = r.data.canvasContainer.style; + r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle; + containerStyle.position = 'relative'; + containerStyle.zIndex = '0'; + containerStyle.overflow = 'hidden'; + var container = options.cy.container(); + container.appendChild(r.data.canvasContainer); + container.style[tapHlOffAttr] = tapHlOffStyle; + var styleMap = { + '-webkit-user-select': 'none', + '-moz-user-select': '-moz-none', + 'user-select': 'none', + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', + 'outline-style': 'none' + }; + + if (ms()) { + styleMap['-ms-touch-action'] = 'none'; + styleMap['touch-action'] = 'none'; + } + + for (var i = 0; i < CRp.CANVAS_LAYERS; i++) { + var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + + r.data.contexts[i] = canvas.getContext('2d'); + Object.keys(styleMap).forEach(function (k) { + canvas.style[k] = styleMap[k]; + }); + canvas.style.position = 'absolute'; + canvas.setAttribute('data-id', 'layer' + i); + canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i); + r.data.canvasContainer.appendChild(canvas); + r.data.canvasNeedsRedraw[i] = false; + } + + r.data.topCanvas = r.data.canvases[0]; + r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node'); + r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox'); + r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag'); + + for (var i = 0; i < CRp.BUFFER_COUNT; i++) { + r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + + r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d'); + r.data.bufferCanvases[i].style.position = 'absolute'; + r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i); + r.data.bufferCanvases[i].style.zIndex = String(-i - 1); + r.data.bufferCanvases[i].style.visibility = 'hidden'; //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]); + } + + r.pathsEnabled = true; + var emptyBb = makeBoundingBox(); + + var getBoxCenter = function getBoxCenter(bb) { + return { + x: (bb.x1 + bb.x2) / 2, + y: (bb.y1 + bb.y2) / 2 + }; + }; + + var getCenterOffset = function getCenterOffset(bb) { + return { + x: -bb.w / 2, + y: -bb.h / 2 + }; + }; + + var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) { + var _p = ele[0]._private; + var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp; + return !same; + }; + + var getStyleKey = function getStyleKey(ele) { + return ele[0]._private.nodeKey; + }; + + var getLabelKey = function getLabelKey(ele) { + return ele[0]._private.labelStyleKey; + }; + + var getSourceLabelKey = function getSourceLabelKey(ele) { + return ele[0]._private.sourceLabelStyleKey; + }; + + var getTargetLabelKey = function getTargetLabelKey(ele) { + return ele[0]._private.targetLabelStyleKey; + }; + + var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElement(context, ele, bb, false, false, useEleOpacity); + }; + + var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity); + }; + + var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity); + }; + + var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity); + }; + + var getElementBox = function getElementBox(ele) { + ele.boundingBox(); + return ele[0]._private.bodyBounds; + }; + + var getLabelBox = function getLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.main || emptyBb; + }; + + var getSourceLabelBox = function getSourceLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.source || emptyBb; + }; + + var getTargetLabelBox = function getTargetLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.target || emptyBb; + }; + + var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) { + return scaledLabelShown; + }; + + var getElementRotationPoint = function getElementRotationPoint(ele) { + return getBoxCenter(getElementBox(ele)); + }; + + var addTextMargin = function addTextMargin(prefix, pt, ele) { + var pre = prefix ? prefix + '-' : ''; + return { + x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue, + y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue + }; + }; + + var getRsPt = function getRsPt(ele, x, y) { + var rs = ele[0]._private.rscratch; + return { + x: rs[x], + y: rs[y] + }; + }; + + var getLabelRotationPoint = function getLabelRotationPoint(ele) { + return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele); + }; + + var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) { + return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele); + }; + + var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) { + return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele); + }; + + var getElementRotationOffset = function getElementRotationOffset(ele) { + return getCenterOffset(getElementBox(ele)); + }; + + var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) { + return getCenterOffset(getSourceLabelBox(ele)); + }; + + var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) { + return getCenterOffset(getTargetLabelBox(ele)); + }; + + var getLabelRotationOffset = function getLabelRotationOffset(ele) { + var bb = getLabelBox(ele); + var p = getCenterOffset(getLabelBox(ele)); + + if (ele.isNode()) { + switch (ele.pstyle('text-halign').value) { + case 'left': + p.x = -bb.w; + break; + + case 'right': + p.x = 0; + break; + } + + switch (ele.pstyle('text-valign').value) { + case 'top': + p.y = -bb.h; + break; + + case 'bottom': + p.y = 0; + break; + } + } + + return p; + }; + + var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, { + getKey: getStyleKey, + doesEleInvalidateKey: backgroundTimestampHasChanged, + drawElement: drawElement, + getBoundingBox: getElementBox, + getRotationPoint: getElementRotationPoint, + getRotationOffset: getElementRotationOffset, + allowEdgeTxrCaching: false, + allowParentTxrCaching: false + }); + var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, { + getKey: getLabelKey, + drawElement: drawLabel, + getBoundingBox: getLabelBox, + getRotationPoint: getLabelRotationPoint, + getRotationOffset: getLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, { + getKey: getSourceLabelKey, + drawElement: drawSourceLabel, + getBoundingBox: getSourceLabelBox, + getRotationPoint: getSourceLabelRotationPoint, + getRotationOffset: getSourceLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, { + getKey: getTargetLabelKey, + drawElement: drawTargetLabel, + getBoundingBox: getTargetLabelBox, + getRotationPoint: getTargetLabelRotationPoint, + getRotationOffset: getTargetLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r); + r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) { + // each cache should check for sub-key diff to see that the update affects that cache particularly + eleTxrCache.invalidateElements(eles); + lblTxrCache.invalidateElements(eles); + slbTxrCache.invalidateElements(eles); + tlbTxrCache.invalidateElements(eles); // any change invalidates the layers + + lyrTxrCache.invalidateElements(eles); // update the old bg timestamp so diffs can be done in the ele txr caches + + for (var _i = 0; _i < eles.length; _i++) { + var _p = eles[_i]._private; + _p.oldBackgroundTimestamp = _p.backgroundTimestamp; + } + }); + + var refineInLayers = function refineInLayers(reqs) { + for (var i = 0; i < reqs.length; i++) { + lyrTxrCache.enqueueElementRefinement(reqs[i].ele); + } + }; + + eleTxrCache.onDequeue(refineInLayers); + lblTxrCache.onDequeue(refineInLayers); + slbTxrCache.onDequeue(refineInLayers); + tlbTxrCache.onDequeue(refineInLayers); +} + +CRp.redrawHint = function (group, bool) { + var r = this; + + switch (group) { + case 'eles': + r.data.canvasNeedsRedraw[CRp.NODE] = bool; + break; + + case 'drag': + r.data.canvasNeedsRedraw[CRp.DRAG] = bool; + break; + + case 'select': + r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool; + break; + } +}; // whether to use Path2D caching for drawing + + +var pathsImpld = typeof Path2D !== 'undefined'; + +CRp.path2dEnabled = function (on) { + if (on === undefined) { + return this.pathsEnabled; + } + + this.pathsEnabled = on ? true : false; +}; + +CRp.usePaths = function () { + return pathsImpld && this.pathsEnabled; +}; + +CRp.setImgSmoothing = function (context, bool) { + if (context.imageSmoothingEnabled != null) { + context.imageSmoothingEnabled = bool; + } else { + context.webkitImageSmoothingEnabled = bool; + context.mozImageSmoothingEnabled = bool; + context.msImageSmoothingEnabled = bool; + } +}; + +CRp.getImgSmoothing = function (context) { + if (context.imageSmoothingEnabled != null) { + return context.imageSmoothingEnabled; + } else { + return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled; + } +}; + +CRp.makeOffscreenCanvas = function (width, height) { + var canvas; + + if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== ("undefined" )) { + canvas = new OffscreenCanvas(width, height); + } else { + canvas = document.createElement('canvas'); // eslint-disable-line no-undef + + canvas.width = width; + canvas.height = height; + } + + return canvas; +}; + +[CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) { + extend(CRp, props); +}); + +var renderer = [{ + name: 'null', + impl: NullRenderer +}, { + name: 'base', + impl: BR +}, { + name: 'canvas', + impl: CR +}]; + +var incExts = [{ + type: 'layout', + extensions: layout +}, { + type: 'renderer', + extensions: renderer +}]; + +var extensions = {}; // registered modules for extensions, indexed by name + +var modules = {}; + +function setExtension(type, name, registrant) { + var ext = registrant; + + var overrideErr = function overrideErr(field) { + warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden'); + }; + + if (type === 'core') { + if (Core.prototype[name]) { + return overrideErr(name); + } else { + Core.prototype[name] = registrant; + } + } else if (type === 'collection') { + if (Collection.prototype[name]) { + return overrideErr(name); + } else { + Collection.prototype[name] = registrant; + } + } else if (type === 'layout') { + // fill in missing layout functions in the prototype + var Layout = function Layout(options) { + this.options = options; + registrant.call(this, options); // make sure layout has _private for use w/ std apis like .on() + + if (!plainObject(this._private)) { + this._private = {}; + } + + this._private.cy = options.cy; + this._private.listeners = []; + this.createEmitter(); + }; + + var layoutProto = Layout.prototype = Object.create(registrant.prototype); + var optLayoutFns = []; + + for (var i = 0; i < optLayoutFns.length; i++) { + var fnName = optLayoutFns[i]; + + layoutProto[fnName] = layoutProto[fnName] || function () { + return this; + }; + } // either .start() or .run() is defined, so autogen the other + + + if (layoutProto.start && !layoutProto.run) { + layoutProto.run = function () { + this.start(); + return this; + }; + } else if (!layoutProto.start && layoutProto.run) { + layoutProto.start = function () { + this.run(); + return this; + }; + } + + var regStop = registrant.prototype.stop; + + layoutProto.stop = function () { + var opts = this.options; + + if (opts && opts.animate) { + var anis = this.animations; + + if (anis) { + for (var _i = 0; _i < anis.length; _i++) { + anis[_i].stop(); + } + } + } + + if (regStop) { + regStop.call(this); + } else { + this.emit('layoutstop'); + } + + return this; + }; + + if (!layoutProto.destroy) { + layoutProto.destroy = function () { + return this; + }; + } + + layoutProto.cy = function () { + return this._private.cy; + }; + + var getCy = function getCy(layout) { + return layout._private.cy; + }; + + var emitterOpts = { + addEventFields: function addEventFields(layout, evt) { + evt.layout = layout; + evt.cy = getCy(layout); + evt.target = layout; + }, + bubble: function bubble() { + return true; + }, + parent: function parent(layout) { + return getCy(layout); + } + }; + extend(layoutProto, { + createEmitter: function createEmitter() { + this._private.emitter = new Emitter(emitterOpts, this); + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(evt, cb) { + this.emitter().on(evt, cb); + return this; + }, + one: function one(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + once: function once(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + removeListener: function removeListener(evt, cb) { + this.emitter().removeListener(evt, cb); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + emit: function emit(evt, params) { + this.emitter().emit(evt, params); + return this; + } + }); + define.eventAliasesOn(layoutProto); + ext = Layout; // replace with our wrapped layout + } else if (type === 'renderer' && name !== 'null' && name !== 'base') { + // user registered renderers inherit from base + var BaseRenderer = getExtension('renderer', 'base'); + var bProto = BaseRenderer.prototype; + var RegistrantRenderer = registrant; + var rProto = registrant.prototype; + + var Renderer = function Renderer() { + BaseRenderer.apply(this, arguments); + RegistrantRenderer.apply(this, arguments); + }; + + var proto = Renderer.prototype; + + for (var pName in bProto) { + var pVal = bProto[pName]; + var existsInR = rProto[pName] != null; + + if (existsInR) { + return overrideErr(pName); + } + + proto[pName] = pVal; // take impl from base + } + + for (var _pName in rProto) { + proto[_pName] = rProto[_pName]; // take impl from registrant + } + + bProto.clientFunctions.forEach(function (name) { + proto[name] = proto[name] || function () { + error('Renderer does not implement `renderer.' + name + '()` on its prototype'); + }; + }); + ext = Renderer; + } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') { + // to avoid potential prototype pollution + return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions'); + } + + return setMap({ + map: extensions, + keys: [type, name], + value: ext + }); +} + +function getExtension(type, name) { + return getMap({ + map: extensions, + keys: [type, name] + }); +} + +function setModule(type, name, moduleType, moduleName, registrant) { + return setMap({ + map: modules, + keys: [type, name, moduleType, moduleName], + value: registrant + }); +} + +function getModule(type, name, moduleType, moduleName) { + return getMap({ + map: modules, + keys: [type, name, moduleType, moduleName] + }); +} + +var extension = function extension() { + // e.g. extension('renderer', 'svg') + if (arguments.length === 2) { + return getExtension.apply(null, arguments); + } // e.g. extension('renderer', 'svg', { ... }) + else if (arguments.length === 3) { + return setExtension.apply(null, arguments); + } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') + else if (arguments.length === 4) { + return getModule.apply(null, arguments); + } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... }) + else if (arguments.length === 5) { + return setModule.apply(null, arguments); + } else { + error('Invalid extension access syntax'); + } +}; // allows a core instance to access extensions internally + + +Core.prototype.extension = extension; // included extensions + +incExts.forEach(function (group) { + group.extensions.forEach(function (ext) { + setExtension(group.type, ext.name, ext.impl); + }); +}); + +// (useful for init) + +var Stylesheet = function Stylesheet() { + if (!(this instanceof Stylesheet)) { + return new Stylesheet(); + } + + this.length = 0; +}; + +var sheetfn = Stylesheet.prototype; + +sheetfn.instanceString = function () { + return 'stylesheet'; +}; // just store the selector to be parsed later + + +sheetfn.selector = function (selector) { + var i = this.length++; + this[i] = { + selector: selector, + properties: [] + }; + return this; // chaining +}; // just store the property to be parsed later + + +sheetfn.css = function (name, value) { + var i = this.length - 1; + + if (string(name)) { + this[i].properties.push({ + name: name, + value: value + }); + } else if (plainObject(name)) { + var map = name; + var propNames = Object.keys(map); + + for (var j = 0; j < propNames.length; j++) { + var key = propNames[j]; + var mapVal = map[key]; + + if (mapVal == null) { + continue; + } + + var prop = Style.properties[key] || Style.properties[dash2camel(key)]; + + if (prop == null) { + continue; + } + + var _name = prop.name; + var _value = mapVal; + this[i].properties.push({ + name: _name, + value: _value + }); + } + } + + return this; // chaining +}; + +sheetfn.style = sheetfn.css; // generate a real style object from the dummy stylesheet + +sheetfn.generateStyle = function (cy) { + var style = new Style(cy); + return this.appendToStyle(style); +}; // append a dummy stylesheet object on a real style object + + +sheetfn.appendToStyle = function (style) { + for (var i = 0; i < this.length; i++) { + var context = this[i]; + var selector = context.selector; + var props = context.properties; + style.selector(selector); // apply selector + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + style.css(prop.name, prop.value); // apply property + } + } + + return style; +}; + +var version = "3.23.0"; + +var cytoscape = function cytoscape(options) { + // if no options specified, use default + if (options === undefined) { + options = {}; + } // create instance + + + if (plainObject(options)) { + return new Core(options); + } // allow for registration of extensions + else if (string(options)) { + return extension.apply(extension, arguments); + } +}; // e.g. cytoscape.use( require('cytoscape-foo'), bar ) + + +cytoscape.use = function (ext) { + var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext + + args.unshift(cytoscape); // cytoscape is first arg to ext + + ext.apply(null, args); + return this; +}; + +cytoscape.warnings = function (bool) { + return warnings(bool); +}; // replaced by build system + + +cytoscape.version = version; // expose public apis (mostly for extensions) + +cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet; + +module.exports = cytoscape; + + +/***/ }), + +/***/ 54485: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(22894); + + +/***/ }), + +/***/ 22894: +/***/ (function(module, exports) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Generated by CoffeeScript 1.8.0 +(function() { + var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup; + + floor = Math.floor, min = Math.min; + + + /* + Default comparison function to be used + */ + + defaultCmp = function(x, y) { + if (x < y) { + return -1; + } + if (x > y) { + return 1; + } + return 0; + }; + + + /* + Insert item x in list a, and keep it sorted assuming a is sorted. + + If x is already in a, insert it to the right of the rightmost x. + + Optional args lo (default 0) and hi (default a.length) bound the slice + of a to be searched. + */ + + insort = function(a, x, lo, hi, cmp) { + var mid; + if (lo == null) { + lo = 0; + } + if (cmp == null) { + cmp = defaultCmp; + } + if (lo < 0) { + throw new Error('lo must be non-negative'); + } + if (hi == null) { + hi = a.length; + } + while (lo < hi) { + mid = floor((lo + hi) / 2); + if (cmp(x, a[mid]) < 0) { + hi = mid; + } else { + lo = mid + 1; + } + } + return ([].splice.apply(a, [lo, lo - lo].concat(x)), x); + }; + + + /* + Push item onto heap, maintaining the heap invariant. + */ + + heappush = function(array, item, cmp) { + if (cmp == null) { + cmp = defaultCmp; + } + array.push(item); + return _siftdown(array, 0, array.length - 1, cmp); + }; + + + /* + Pop the smallest item off the heap, maintaining the heap invariant. + */ + + heappop = function(array, cmp) { + var lastelt, returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + lastelt = array.pop(); + if (array.length) { + returnitem = array[0]; + array[0] = lastelt; + _siftup(array, 0, cmp); + } else { + returnitem = lastelt; + } + return returnitem; + }; + + + /* + Pop and return the current smallest value, and add the new item. + + This is more efficient than heappop() followed by heappush(), and can be + more appropriate when using a fixed size heap. Note that the value + returned may be larger than item! That constrains reasonable use of + this routine unless written as part of a conditional replacement: + if item > array[0] + item = heapreplace(array, item) + */ + + heapreplace = function(array, item, cmp) { + var returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + returnitem = array[0]; + array[0] = item; + _siftup(array, 0, cmp); + return returnitem; + }; + + + /* + Fast version of a heappush followed by a heappop. + */ + + heappushpop = function(array, item, cmp) { + var _ref; + if (cmp == null) { + cmp = defaultCmp; + } + if (array.length && cmp(array[0], item) < 0) { + _ref = [array[0], item], item = _ref[0], array[0] = _ref[1]; + _siftup(array, 0, cmp); + } + return item; + }; + + + /* + Transform list into a heap, in-place, in O(array.length) time. + */ + + heapify = function(array, cmp) { + var i, _i, _j, _len, _ref, _ref1, _results, _results1; + if (cmp == null) { + cmp = defaultCmp; + } + _ref1 = (function() { + _results1 = []; + for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); } + return _results1; + }).apply(this).reverse(); + _results = []; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + i = _ref1[_i]; + _results.push(_siftup(array, i, cmp)); + } + return _results; + }; + + + /* + Update the position of the given item in the heap. + This function should be called every time the item is being modified. + */ + + updateItem = function(array, item, cmp) { + var pos; + if (cmp == null) { + cmp = defaultCmp; + } + pos = array.indexOf(item); + if (pos === -1) { + return; + } + _siftdown(array, 0, pos, cmp); + return _siftup(array, pos, cmp); + }; + + + /* + Find the n largest elements in a dataset. + */ + + nlargest = function(array, n, cmp) { + var elem, result, _i, _len, _ref; + if (cmp == null) { + cmp = defaultCmp; + } + result = array.slice(0, n); + if (!result.length) { + return result; + } + heapify(result, cmp); + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + heappushpop(result, elem, cmp); + } + return result.sort(cmp).reverse(); + }; + + + /* + Find the n smallest elements in a dataset. + */ + + nsmallest = function(array, n, cmp) { + var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results; + if (cmp == null) { + cmp = defaultCmp; + } + if (n * 10 <= array.length) { + result = array.slice(0, n).sort(cmp); + if (!result.length) { + return result; + } + los = result[result.length - 1]; + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + if (cmp(elem, los) < 0) { + insort(result, elem, 0, null, cmp); + result.pop(); + los = result[result.length - 1]; + } + } + return result; + } + heapify(array, cmp); + _results = []; + for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) { + _results.push(heappop(array, cmp)); + } + return _results; + }; + + _siftdown = function(array, startpos, pos, cmp) { + var newitem, parent, parentpos; + if (cmp == null) { + cmp = defaultCmp; + } + newitem = array[pos]; + while (pos > startpos) { + parentpos = (pos - 1) >> 1; + parent = array[parentpos]; + if (cmp(newitem, parent) < 0) { + array[pos] = parent; + pos = parentpos; + continue; + } + break; + } + return array[pos] = newitem; + }; + + _siftup = function(array, pos, cmp) { + var childpos, endpos, newitem, rightpos, startpos; + if (cmp == null) { + cmp = defaultCmp; + } + endpos = array.length; + startpos = pos; + newitem = array[pos]; + childpos = 2 * pos + 1; + while (childpos < endpos) { + rightpos = childpos + 1; + if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) { + childpos = rightpos; + } + array[pos] = array[childpos]; + pos = childpos; + childpos = 2 * pos + 1; + } + array[pos] = newitem; + return _siftdown(array, startpos, pos, cmp); + }; + + Heap = (function() { + Heap.push = heappush; + + Heap.pop = heappop; + + Heap.replace = heapreplace; + + Heap.pushpop = heappushpop; + + Heap.heapify = heapify; + + Heap.updateItem = updateItem; + + Heap.nlargest = nlargest; + + Heap.nsmallest = nsmallest; + + function Heap(cmp) { + this.cmp = cmp != null ? cmp : defaultCmp; + this.nodes = []; + } + + Heap.prototype.push = function(x) { + return heappush(this.nodes, x, this.cmp); + }; + + Heap.prototype.pop = function() { + return heappop(this.nodes, this.cmp); + }; + + Heap.prototype.peek = function() { + return this.nodes[0]; + }; + + Heap.prototype.contains = function(x) { + return this.nodes.indexOf(x) !== -1; + }; + + Heap.prototype.replace = function(x) { + return heapreplace(this.nodes, x, this.cmp); + }; + + Heap.prototype.pushpop = function(x) { + return heappushpop(this.nodes, x, this.cmp); + }; + + Heap.prototype.heapify = function() { + return heapify(this.nodes, this.cmp); + }; + + Heap.prototype.updateItem = function(x) { + return updateItem(this.nodes, x, this.cmp); + }; + + Heap.prototype.clear = function() { + return this.nodes = []; + }; + + Heap.prototype.empty = function() { + return this.nodes.length === 0; + }; + + Heap.prototype.size = function() { + return this.nodes.length; + }; + + Heap.prototype.clone = function() { + var heap; + heap = new Heap(); + heap.nodes = this.nodes.slice(0); + return heap; + }; + + Heap.prototype.toArray = function() { + return this.nodes.slice(0); + }; + + Heap.prototype.insert = Heap.prototype.push; + + Heap.prototype.top = Heap.prototype.peek; + + Heap.prototype.front = Heap.prototype.peek; + + Heap.prototype.has = Heap.prototype.contains; + + Heap.prototype.copy = Heap.prototype.clone; + + return Heap; + + })(); + + (function(root, factory) { + if (true) { + return !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} + })(this, function() { + return Heap; + }); + +}).call(this); + + +/***/ }), + +/***/ 82241: +/***/ (function(module) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(); + else {} +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_543__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_543__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_543__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_543__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_543__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_543__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_543__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_543__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_543__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_543__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_543__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_543__(__nested_webpack_require_543__.s = 26); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LayoutConstants() {} + +/** + * Layout Quality: 0:draft, 1:default, 2:proof + */ +LayoutConstants.QUALITY = 1; + +/** + * Default parameters + */ +LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; +LayoutConstants.DEFAULT_INCREMENTAL = false; +LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; +LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; +LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; +LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; + +// ----------------------------------------------------------------------------- +// Section: General other constants +// ----------------------------------------------------------------------------- +/* + * Margins of a graph to be applied on bouding rectangle of its contents. We + * assume margins on all four sides to be uniform. + */ +LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; + +/* + * Whether to consider labels in node dimensions or not + */ +LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_SIZE = 40; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; + +/* + * Empty compound node size. When a compound node is empty, its both + * dimensions should be of this value. + */ +LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; + +/* + * Minimum length that an edge should take during layout + */ +LayoutConstants.MIN_EDGE_LENGTH = 1; + +/* + * World boundaries that layout operates on + */ +LayoutConstants.WORLD_BOUNDARY = 1000000; + +/* + * World boundaries that random positioning can be performed with + */ +LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000; + +/* + * Coordinates of the world center + */ +LayoutConstants.WORLD_CENTER_X = 1200; +LayoutConstants.WORLD_CENTER_Y = 900; + +module.exports = LayoutConstants; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_4947__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_4947__(2); +var IGeometry = __nested_webpack_require_4947__(8); +var IMath = __nested_webpack_require_4947__(9); + +function LEdge(source, target, vEdge) { + LGraphObject.call(this, vEdge); + + this.isOverlapingSourceAndTarget = false; + this.vGraphObject = vEdge; + this.bendpoints = []; + this.source = source; + this.target = target; +} + +LEdge.prototype = Object.create(LGraphObject.prototype); + +for (var prop in LGraphObject) { + LEdge[prop] = LGraphObject[prop]; +} + +LEdge.prototype.getSource = function () { + return this.source; +}; + +LEdge.prototype.getTarget = function () { + return this.target; +}; + +LEdge.prototype.isInterGraph = function () { + return this.isInterGraph; +}; + +LEdge.prototype.getLength = function () { + return this.length; +}; + +LEdge.prototype.isOverlapingSourceAndTarget = function () { + return this.isOverlapingSourceAndTarget; +}; + +LEdge.prototype.getBendpoints = function () { + return this.bendpoints; +}; + +LEdge.prototype.getLca = function () { + return this.lca; +}; + +LEdge.prototype.getSourceInLca = function () { + return this.sourceInLca; +}; + +LEdge.prototype.getTargetInLca = function () { + return this.targetInLca; +}; + +LEdge.prototype.getOtherEnd = function (node) { + if (this.source === node) { + return this.target; + } else if (this.target === node) { + return this.source; + } else { + throw "Node is not incident with this edge"; + } +}; + +LEdge.prototype.getOtherEndInGraph = function (node, graph) { + var otherEnd = this.getOtherEnd(node); + var root = graph.getGraphManager().getRoot(); + + while (true) { + if (otherEnd.getOwner() == graph) { + return otherEnd; + } + + if (otherEnd.getOwner() == root) { + break; + } + + otherEnd = otherEnd.getOwner().getParent(); + } + + return null; +}; + +LEdge.prototype.updateLength = function () { + var clipPointCoordinates = new Array(4); + + this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); + + if (!this.isOverlapingSourceAndTarget) { + this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; + this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); + } +}; + +LEdge.prototype.updateLengthSimple = function () { + this.lengthX = this.target.getCenterX() - this.source.getCenterX(); + this.lengthY = this.target.getCenterY() - this.source.getCenterY(); + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); +}; + +module.exports = LEdge; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LGraphObject(vGraphObject) { + this.vGraphObject = vGraphObject; +} + +module.exports = LGraphObject; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_8167__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_8167__(2); +var Integer = __nested_webpack_require_8167__(10); +var RectangleD = __nested_webpack_require_8167__(13); +var LayoutConstants = __nested_webpack_require_8167__(0); +var RandomSeed = __nested_webpack_require_8167__(16); +var PointD = __nested_webpack_require_8167__(4); + +function LNode(gm, loc, size, vNode) { + //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode) + if (size == null && vNode == null) { + vNode = loc; + } + + LGraphObject.call(this, vNode); + + //Alternative constructor 2 : LNode(Layout layout, Object vNode) + if (gm.graphManager != null) gm = gm.graphManager; + + this.estimatedSize = Integer.MIN_VALUE; + this.inclusionTreeDepth = Integer.MAX_VALUE; + this.vGraphObject = vNode; + this.edges = []; + this.graphManager = gm; + + if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD(); +} + +LNode.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LNode[prop] = LGraphObject[prop]; +} + +LNode.prototype.getEdges = function () { + return this.edges; +}; + +LNode.prototype.getChild = function () { + return this.child; +}; + +LNode.prototype.getOwner = function () { + // if (this.owner != null) { + // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) { + // throw "assert failed"; + // } + // } + + return this.owner; +}; + +LNode.prototype.getWidth = function () { + return this.rect.width; +}; + +LNode.prototype.setWidth = function (width) { + this.rect.width = width; +}; + +LNode.prototype.getHeight = function () { + return this.rect.height; +}; + +LNode.prototype.setHeight = function (height) { + this.rect.height = height; +}; + +LNode.prototype.getCenterX = function () { + return this.rect.x + this.rect.width / 2; +}; + +LNode.prototype.getCenterY = function () { + return this.rect.y + this.rect.height / 2; +}; + +LNode.prototype.getCenter = function () { + return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); +}; + +LNode.prototype.getLocation = function () { + return new PointD(this.rect.x, this.rect.y); +}; + +LNode.prototype.getRect = function () { + return this.rect; +}; + +LNode.prototype.getDiagonal = function () { + return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); +}; + +/** + * This method returns half the diagonal length of this node. + */ +LNode.prototype.getHalfTheDiagonal = function () { + return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; +}; + +LNode.prototype.setRect = function (upperLeft, dimension) { + this.rect.x = upperLeft.x; + this.rect.y = upperLeft.y; + this.rect.width = dimension.width; + this.rect.height = dimension.height; +}; + +LNode.prototype.setCenter = function (cx, cy) { + this.rect.x = cx - this.rect.width / 2; + this.rect.y = cy - this.rect.height / 2; +}; + +LNode.prototype.setLocation = function (x, y) { + this.rect.x = x; + this.rect.y = y; +}; + +LNode.prototype.moveBy = function (dx, dy) { + this.rect.x += dx; + this.rect.y += dy; +}; + +LNode.prototype.getEdgeListToNode = function (to) { + var edgeList = []; + var edge; + var self = this; + + self.edges.forEach(function (edge) { + + if (edge.target == to) { + if (edge.source != self) throw "Incorrect edge source!"; + + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getEdgesBetween = function (other) { + var edgeList = []; + var edge; + + var self = this; + self.edges.forEach(function (edge) { + + if (!(edge.source == self || edge.target == self)) throw "Incorrect edge source and/or target"; + + if (edge.target == other || edge.source == other) { + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getNeighborsList = function () { + var neighbors = new Set(); + + var self = this; + self.edges.forEach(function (edge) { + + if (edge.source == self) { + neighbors.add(edge.target); + } else { + if (edge.target != self) { + throw "Incorrect incidency!"; + } + + neighbors.add(edge.source); + } + }); + + return neighbors; +}; + +LNode.prototype.withChildren = function () { + var withNeighborsList = new Set(); + var childNode; + var children; + + withNeighborsList.add(this); + + if (this.child != null) { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + children = childNode.withChildren(); + children.forEach(function (node) { + withNeighborsList.add(node); + }); + } + } + + return withNeighborsList; +}; + +LNode.prototype.getNoOfChildren = function () { + var noOfChildren = 0; + var childNode; + + if (this.child == null) { + noOfChildren = 1; + } else { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + + noOfChildren += childNode.getNoOfChildren(); + } + } + + if (noOfChildren == 0) { + noOfChildren = 1; + } + return noOfChildren; +}; + +LNode.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LNode.prototype.calcEstimatedSize = function () { + if (this.child == null) { + return this.estimatedSize = (this.rect.width + this.rect.height) / 2; + } else { + this.estimatedSize = this.child.calcEstimatedSize(); + this.rect.width = this.estimatedSize; + this.rect.height = this.estimatedSize; + + return this.estimatedSize; + } +}; + +LNode.prototype.scatter = function () { + var randomCenterX; + var randomCenterY; + + var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; + + var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; + + this.rect.x = randomCenterX; + this.rect.y = randomCenterY; +}; + +LNode.prototype.updateBounds = function () { + if (this.getChild() == null) { + throw "assert failed"; + } + if (this.getChild().getNodes().length != 0) { + // wrap the children nodes by re-arranging the boundaries + var childGraph = this.getChild(); + childGraph.updateBounds(true); + + this.rect.x = childGraph.getLeft(); + this.rect.y = childGraph.getTop(); + + this.setWidth(childGraph.getRight() - childGraph.getLeft()); + this.setHeight(childGraph.getBottom() - childGraph.getTop()); + + // Update compound bounds considering its label properties + if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { + + var width = childGraph.getRight() - childGraph.getLeft(); + var height = childGraph.getBottom() - childGraph.getTop(); + + if (this.labelWidth > width) { + this.rect.x -= (this.labelWidth - width) / 2; + this.setWidth(this.labelWidth); + } + + if (this.labelHeight > height) { + if (this.labelPos == "center") { + this.rect.y -= (this.labelHeight - height) / 2; + } else if (this.labelPos == "top") { + this.rect.y -= this.labelHeight - height; + } + this.setHeight(this.labelHeight); + } + } + } +}; + +LNode.prototype.getInclusionTreeDepth = function () { + if (this.inclusionTreeDepth == Integer.MAX_VALUE) { + throw "assert failed"; + } + return this.inclusionTreeDepth; +}; + +LNode.prototype.transform = function (trans) { + var left = this.rect.x; + + if (left > LayoutConstants.WORLD_BOUNDARY) { + left = LayoutConstants.WORLD_BOUNDARY; + } else if (left < -LayoutConstants.WORLD_BOUNDARY) { + left = -LayoutConstants.WORLD_BOUNDARY; + } + + var top = this.rect.y; + + if (top > LayoutConstants.WORLD_BOUNDARY) { + top = LayoutConstants.WORLD_BOUNDARY; + } else if (top < -LayoutConstants.WORLD_BOUNDARY) { + top = -LayoutConstants.WORLD_BOUNDARY; + } + + var leftTop = new PointD(left, top); + var vLeftTop = trans.inverseTransformPoint(leftTop); + + this.setLocation(vLeftTop.x, vLeftTop.y); +}; + +LNode.prototype.getLeft = function () { + return this.rect.x; +}; + +LNode.prototype.getRight = function () { + return this.rect.x + this.rect.width; +}; + +LNode.prototype.getTop = function () { + return this.rect.y; +}; + +LNode.prototype.getBottom = function () { + return this.rect.y + this.rect.height; +}; + +LNode.prototype.getParent = function () { + if (this.owner == null) { + return null; + } + + return this.owner.getParent(); +}; + +module.exports = LNode; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function PointD(x, y) { + if (x == null && y == null) { + this.x = 0; + this.y = 0; + } else { + this.x = x; + this.y = y; + } +} + +PointD.prototype.getX = function () { + return this.x; +}; + +PointD.prototype.getY = function () { + return this.y; +}; + +PointD.prototype.setX = function (x) { + this.x = x; +}; + +PointD.prototype.setY = function (y) { + this.y = y; +}; + +PointD.prototype.getDifference = function (pt) { + return new DimensionD(this.x - pt.x, this.y - pt.y); +}; + +PointD.prototype.getCopy = function () { + return new PointD(this.x, this.y); +}; + +PointD.prototype.translate = function (dim) { + this.x += dim.width; + this.y += dim.height; + return this; +}; + +module.exports = PointD; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_17549__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_17549__(2); +var Integer = __nested_webpack_require_17549__(10); +var LayoutConstants = __nested_webpack_require_17549__(0); +var LGraphManager = __nested_webpack_require_17549__(6); +var LNode = __nested_webpack_require_17549__(3); +var LEdge = __nested_webpack_require_17549__(1); +var RectangleD = __nested_webpack_require_17549__(13); +var Point = __nested_webpack_require_17549__(12); +var LinkedList = __nested_webpack_require_17549__(11); + +function LGraph(parent, obj2, vGraph) { + LGraphObject.call(this, vGraph); + this.estimatedSize = Integer.MIN_VALUE; + this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; + this.edges = []; + this.nodes = []; + this.isConnected = false; + this.parent = parent; + + if (obj2 != null && obj2 instanceof LGraphManager) { + this.graphManager = obj2; + } else if (obj2 != null && obj2 instanceof Layout) { + this.graphManager = obj2.graphManager; + } +} + +LGraph.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LGraph[prop] = LGraphObject[prop]; +} + +LGraph.prototype.getNodes = function () { + return this.nodes; +}; + +LGraph.prototype.getEdges = function () { + return this.edges; +}; + +LGraph.prototype.getGraphManager = function () { + return this.graphManager; +}; + +LGraph.prototype.getParent = function () { + return this.parent; +}; + +LGraph.prototype.getLeft = function () { + return this.left; +}; + +LGraph.prototype.getRight = function () { + return this.right; +}; + +LGraph.prototype.getTop = function () { + return this.top; +}; + +LGraph.prototype.getBottom = function () { + return this.bottom; +}; + +LGraph.prototype.isConnected = function () { + return this.isConnected; +}; + +LGraph.prototype.add = function (obj1, sourceNode, targetNode) { + if (sourceNode == null && targetNode == null) { + var newNode = obj1; + if (this.graphManager == null) { + throw "Graph has no graph mgr!"; + } + if (this.getNodes().indexOf(newNode) > -1) { + throw "Node already in graph!"; + } + newNode.owner = this; + this.getNodes().push(newNode); + + return newNode; + } else { + var newEdge = obj1; + if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { + throw "Source or target not in graph!"; + } + + if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { + throw "Both owners must be this graph!"; + } + + if (sourceNode.owner != targetNode.owner) { + return null; + } + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // set as intra-graph edge + newEdge.isInterGraph = false; + + // add to graph edge list + this.getEdges().push(newEdge); + + // add to incidency lists + sourceNode.edges.push(newEdge); + + if (targetNode != sourceNode) { + targetNode.edges.push(newEdge); + } + + return newEdge; + } +}; + +LGraph.prototype.remove = function (obj) { + var node = obj; + if (obj instanceof LNode) { + if (node == null) { + throw "Node is null!"; + } + if (!(node.owner != null && node.owner == this)) { + throw "Owner graph is invalid!"; + } + if (this.graphManager == null) { + throw "Owner graph manager is invalid!"; + } + // remove incident edges first (make a copy to do it safely) + var edgesToBeRemoved = node.edges.slice(); + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + + if (edge.isInterGraph) { + this.graphManager.remove(edge); + } else { + edge.source.owner.remove(edge); + } + } + + // now the node itself + var index = this.nodes.indexOf(node); + if (index == -1) { + throw "Node not in owner node list!"; + } + + this.nodes.splice(index, 1); + } else if (obj instanceof LEdge) { + var edge = obj; + if (edge == null) { + throw "Edge is null!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { + throw "Source and/or target owner is invalid!"; + } + + var sourceIndex = edge.source.edges.indexOf(edge); + var targetIndex = edge.target.edges.indexOf(edge); + if (!(sourceIndex > -1 && targetIndex > -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + edge.source.edges.splice(sourceIndex, 1); + + if (edge.target != edge.source) { + edge.target.edges.splice(targetIndex, 1); + } + + var index = edge.source.owner.getEdges().indexOf(edge); + if (index == -1) { + throw "Not in owner's edge list!"; + } + + edge.source.owner.getEdges().splice(index, 1); + } +}; + +LGraph.prototype.updateLeftTop = function () { + var top = Integer.MAX_VALUE; + var left = Integer.MAX_VALUE; + var nodeTop; + var nodeLeft; + var margin; + + var nodes = this.getNodes(); + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeTop = lNode.getTop(); + nodeLeft = lNode.getLeft(); + + if (top > nodeTop) { + top = nodeTop; + } + + if (left > nodeLeft) { + left = nodeLeft; + } + } + + // Do we have any nodes in this graph? + if (top == Integer.MAX_VALUE) { + return null; + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = left - margin; + this.top = top - margin; + + // Apply the margins and return the result + return new Point(this.left, this.top); +}; + +LGraph.prototype.updateBounds = function (recursive) { + // calculate bounds + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + var margin; + + var nodes = this.nodes; + var s = nodes.length; + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + + if (recursive && lNode.child != null) { + lNode.updateBounds(); + } + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + if (left == Integer.MAX_VALUE) { + this.left = this.parent.getLeft(); + this.right = this.parent.getRight(); + this.top = this.parent.getTop(); + this.bottom = this.parent.getBottom(); + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = boundingRect.x - margin; + this.right = boundingRect.x + boundingRect.width + margin; + this.top = boundingRect.y - margin; + this.bottom = boundingRect.y + boundingRect.height + margin; +}; + +LGraph.calculateBounds = function (nodes) { + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + + return boundingRect; +}; + +LGraph.prototype.getInclusionTreeDepth = function () { + if (this == this.graphManager.getRoot()) { + return 1; + } else { + return this.parent.getInclusionTreeDepth(); + } +}; + +LGraph.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LGraph.prototype.calcEstimatedSize = function () { + var size = 0; + var nodes = this.nodes; + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + size += lNode.calcEstimatedSize(); + } + + if (size == 0) { + this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; + } else { + this.estimatedSize = size / Math.sqrt(this.nodes.length); + } + + return this.estimatedSize; +}; + +LGraph.prototype.updateConnected = function () { + var self = this; + if (this.nodes.length == 0) { + this.isConnected = true; + return; + } + + var queue = new LinkedList(); + var visited = new Set(); + var currentNode = this.nodes[0]; + var neighborEdges; + var currentNeighbor; + var childrenOfNode = currentNode.withChildren(); + childrenOfNode.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + + while (queue.length !== 0) { + currentNode = queue.shift(); + + // Traverse all neighbors of this node + neighborEdges = currentNode.getEdges(); + var size = neighborEdges.length; + for (var i = 0; i < size; i++) { + var neighborEdge = neighborEdges[i]; + currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); + + // Add unvisited neighbors to the list to visit + if (currentNeighbor != null && !visited.has(currentNeighbor)) { + var childrenOfNeighbor = currentNeighbor.withChildren(); + + childrenOfNeighbor.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + } + } + } + + this.isConnected = false; + + if (visited.size >= this.nodes.length) { + var noOfVisitedInThisGraph = 0; + + visited.forEach(function (visitedNode) { + if (visitedNode.owner == self) { + noOfVisitedInThisGraph++; + } + }); + + if (noOfVisitedInThisGraph == this.nodes.length) { + this.isConnected = true; + } + } +}; + +module.exports = LGraph; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_27617__) { + +"use strict"; + + +var LGraph; +var LEdge = __nested_webpack_require_27617__(1); + +function LGraphManager(layout) { + LGraph = __nested_webpack_require_27617__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now. + this.layout = layout; + + this.graphs = []; + this.edges = []; +} + +LGraphManager.prototype.addRoot = function () { + var ngraph = this.layout.newGraph(); + var nnode = this.layout.newNode(null); + var root = this.add(ngraph, nnode); + this.setRootGraph(root); + return this.rootGraph; +}; + +LGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) { + //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge + if (newEdge == null && sourceNode == null && targetNode == null) { + if (newGraph == null) { + throw "Graph is null!"; + } + if (parentNode == null) { + throw "Parent node is null!"; + } + if (this.graphs.indexOf(newGraph) > -1) { + throw "Graph already in this graph mgr!"; + } + + this.graphs.push(newGraph); + + if (newGraph.parent != null) { + throw "Already has a parent!"; + } + if (parentNode.child != null) { + throw "Already has a child!"; + } + + newGraph.parent = parentNode; + parentNode.child = newGraph; + + return newGraph; + } else { + //change the order of the parameters + targetNode = newEdge; + sourceNode = parentNode; + newEdge = newGraph; + var sourceGraph = sourceNode.getOwner(); + var targetGraph = targetNode.getOwner(); + + if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { + throw "Source not in this graph mgr!"; + } + if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { + throw "Target not in this graph mgr!"; + } + + if (sourceGraph == targetGraph) { + newEdge.isInterGraph = false; + return sourceGraph.add(newEdge, sourceNode, targetNode); + } else { + newEdge.isInterGraph = true; + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // add edge to inter-graph edge list + if (this.edges.indexOf(newEdge) > -1) { + throw "Edge already in inter-graph edge list!"; + } + + this.edges.push(newEdge); + + // add edge to source and target incidency lists + if (!(newEdge.source != null && newEdge.target != null)) { + throw "Edge source and/or target is null!"; + } + + if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { + throw "Edge already in source and/or target incidency list!"; + } + + newEdge.source.edges.push(newEdge); + newEdge.target.edges.push(newEdge); + + return newEdge; + } + } +}; + +LGraphManager.prototype.remove = function (lObj) { + if (lObj instanceof LGraph) { + var graph = lObj; + if (graph.getGraphManager() != this) { + throw "Graph not in this graph mgr"; + } + if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { + throw "Invalid parent node!"; + } + + // first the edges (make a copy to do it safely) + var edgesToBeRemoved = []; + + edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); + + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + graph.remove(edge); + } + + // then the nodes (make a copy to do it safely) + var nodesToBeRemoved = []; + + nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); + + var node; + s = nodesToBeRemoved.length; + for (var i = 0; i < s; i++) { + node = nodesToBeRemoved[i]; + graph.remove(node); + } + + // check if graph is the root + if (graph == this.rootGraph) { + this.setRootGraph(null); + } + + // now remove the graph itself + var index = this.graphs.indexOf(graph); + this.graphs.splice(index, 1); + + // also reset the parent of the graph + graph.parent = null; + } else if (lObj instanceof LEdge) { + edge = lObj; + if (edge == null) { + throw "Edge is null!"; + } + if (!edge.isInterGraph) { + throw "Not an inter-graph edge!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + + // remove edge from source and target nodes' incidency lists + + if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + var index = edge.source.edges.indexOf(edge); + edge.source.edges.splice(index, 1); + index = edge.target.edges.indexOf(edge); + edge.target.edges.splice(index, 1); + + // remove edge from owner graph manager's inter-graph edge list + + if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { + throw "Edge owner graph or owner graph manager is null!"; + } + if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { + throw "Not in owner graph manager's edge list!"; + } + + var index = edge.source.owner.getGraphManager().edges.indexOf(edge); + edge.source.owner.getGraphManager().edges.splice(index, 1); + } +}; + +LGraphManager.prototype.updateBounds = function () { + this.rootGraph.updateBounds(true); +}; + +LGraphManager.prototype.getGraphs = function () { + return this.graphs; +}; + +LGraphManager.prototype.getAllNodes = function () { + if (this.allNodes == null) { + var nodeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < s; i++) { + nodeList = nodeList.concat(graphs[i].getNodes()); + } + this.allNodes = nodeList; + } + return this.allNodes; +}; + +LGraphManager.prototype.resetAllNodes = function () { + this.allNodes = null; +}; + +LGraphManager.prototype.resetAllEdges = function () { + this.allEdges = null; +}; + +LGraphManager.prototype.resetAllNodesToApplyGravitation = function () { + this.allNodesToApplyGravitation = null; +}; + +LGraphManager.prototype.getAllEdges = function () { + if (this.allEdges == null) { + var edgeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < graphs.length; i++) { + edgeList = edgeList.concat(graphs[i].getEdges()); + } + + edgeList = edgeList.concat(this.edges); + + this.allEdges = edgeList; + } + return this.allEdges; +}; + +LGraphManager.prototype.getAllNodesToApplyGravitation = function () { + return this.allNodesToApplyGravitation; +}; + +LGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) { + if (this.allNodesToApplyGravitation != null) { + throw "assert failed"; + } + + this.allNodesToApplyGravitation = nodeList; +}; + +LGraphManager.prototype.getRoot = function () { + return this.rootGraph; +}; + +LGraphManager.prototype.setRootGraph = function (graph) { + if (graph.getGraphManager() != this) { + throw "Root not in this graph mgr!"; + } + + this.rootGraph = graph; + // root graph must have a root node associated with it for convenience + if (graph.parent == null) { + graph.parent = this.layout.newNode("Root node"); + } +}; + +LGraphManager.prototype.getLayout = function () { + return this.layout; +}; + +LGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) { + if (!(firstNode != null && secondNode != null)) { + throw "assert failed"; + } + + if (firstNode == secondNode) { + return true; + } + // Is second node an ancestor of the first one? + var ownerGraph = firstNode.getOwner(); + var parentNode; + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == secondNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + // Is first node an ancestor of the second one? + ownerGraph = secondNode.getOwner(); + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == firstNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + + return false; +}; + +LGraphManager.prototype.calcLowestCommonAncestors = function () { + var edge; + var sourceNode; + var targetNode; + var sourceAncestorGraph; + var targetAncestorGraph; + + var edges = this.getAllEdges(); + var s = edges.length; + for (var i = 0; i < s; i++) { + edge = edges[i]; + + sourceNode = edge.source; + targetNode = edge.target; + edge.lca = null; + edge.sourceInLca = sourceNode; + edge.targetInLca = targetNode; + + if (sourceNode == targetNode) { + edge.lca = sourceNode.getOwner(); + continue; + } + + sourceAncestorGraph = sourceNode.getOwner(); + + while (edge.lca == null) { + edge.targetInLca = targetNode; + targetAncestorGraph = targetNode.getOwner(); + + while (edge.lca == null) { + if (targetAncestorGraph == sourceAncestorGraph) { + edge.lca = targetAncestorGraph; + break; + } + + if (targetAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca != null) { + throw "assert failed"; + } + edge.targetInLca = targetAncestorGraph.getParent(); + targetAncestorGraph = edge.targetInLca.getOwner(); + } + + if (sourceAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca == null) { + edge.sourceInLca = sourceAncestorGraph.getParent(); + sourceAncestorGraph = edge.sourceInLca.getOwner(); + } + } + + if (edge.lca == null) { + throw "assert failed"; + } + } +}; + +LGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) { + if (firstNode == secondNode) { + return firstNode.getOwner(); + } + var firstOwnerGraph = firstNode.getOwner(); + + do { + if (firstOwnerGraph == null) { + break; + } + var secondOwnerGraph = secondNode.getOwner(); + + do { + if (secondOwnerGraph == null) { + break; + } + + if (secondOwnerGraph == firstOwnerGraph) { + return secondOwnerGraph; + } + secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); + } while (true); + + firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); + } while (true); + + return firstOwnerGraph; +}; + +LGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) { + if (graph == null && depth == null) { + graph = this.rootGraph; + depth = 1; + } + var node; + + var nodes = graph.getNodes(); + var s = nodes.length; + for (var i = 0; i < s; i++) { + node = nodes[i]; + node.inclusionTreeDepth = depth; + + if (node.child != null) { + this.calcInclusionTreeDepths(node.child, depth + 1); + } + } +}; + +LGraphManager.prototype.includesInvalidEdge = function () { + var edge; + + var s = this.edges.length; + for (var i = 0; i < s; i++) { + edge = this.edges[i]; + + if (this.isOneAncestorOfOther(edge.source, edge.target)) { + return true; + } + } + return false; +}; + +module.exports = LGraphManager; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_38707__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_38707__(0); + +function FDLayoutConstants() {} + +//FDLayoutConstants inherits static props in LayoutConstants +for (var prop in LayoutConstants) { + FDLayoutConstants[prop] = LayoutConstants[prop]; +} + +FDLayoutConstants.MAX_ITERATIONS = 2500; + +FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; +FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; +FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0; +FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0; +FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; +FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; +FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; +FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; +FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; +FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000; +FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000; +FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0; +FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; +FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0; +FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; +FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; +FDLayoutConstants.MIN_EDGE_LENGTH = 1; +FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; + +module.exports = FDLayoutConstants; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __nested_webpack_require_40298__) { + +"use strict"; + + +/** + * This class maintains a list of static geometry related utility methods. + * + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var Point = __nested_webpack_require_40298__(12); + +function IGeometry() {} + +/** + * This method calculates *half* the amount in x and y directions of the two + * input rectangles needed to separate them keeping their respective + * positioning, and returns the result in the input array. An input + * separation buffer added to the amount in both directions. We assume that + * the two rectangles do intersect. + */ +IGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) { + if (!rectA.intersects(rectB)) { + throw "assert failed"; + } + + var directions = new Array(2); + + this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); + + overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); + overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); + + // update the overlapping amounts for the following cases: + if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { + /* Case x.1: + * + * rectA + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectB + */ + overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); + } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { + /* Case x.2: + * + * rectB + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectA + */ + overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); + } + if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { + /* Case y.1: + * ________ rectA + * | + * | + * ______|____ rectB + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); + } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { + /* Case y.2: + * ________ rectB + * | + * | + * ______|____ rectA + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); + } + + // find slope of the line passes two centers + var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); + // if centers are overlapped + if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { + // assume the slope is 1 (45 degree) + slope = 1.0; + } + + var moveByY = slope * overlapAmount[0]; + var moveByX = overlapAmount[1] / slope; + if (overlapAmount[0] < moveByX) { + moveByX = overlapAmount[0]; + } else { + moveByY = overlapAmount[1]; + } + // return half the amount so that if each rectangle is moved by these + // amounts in opposite directions, overlap will be resolved + overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); + overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); +}; + +/** + * This method decides the separation direction of overlapping nodes + * + * if directions[0] = -1, then rectA goes left + * if directions[0] = 1, then rectA goes right + * if directions[1] = -1, then rectA goes up + * if directions[1] = 1, then rectA goes down + */ +IGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) { + if (rectA.getCenterX() < rectB.getCenterX()) { + directions[0] = -1; + } else { + directions[0] = 1; + } + + if (rectA.getCenterY() < rectB.getCenterY()) { + directions[1] = -1; + } else { + directions[1] = 1; + } +}; + +/** + * This method calculates the intersection (clipping) points of the two + * input rectangles with line segment defined by the centers of these two + * rectangles. The clipping points are saved in the input double array and + * whether or not the two rectangles overlap is returned. + */ +IGeometry.getIntersection2 = function (rectA, rectB, result) { + //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB + var p1x = rectA.getCenterX(); + var p1y = rectA.getCenterY(); + var p2x = rectB.getCenterX(); + var p2y = rectB.getCenterY(); + + //if two rectangles intersect, then clipping points are centers + if (rectA.intersects(rectB)) { + result[0] = p1x; + result[1] = p1y; + result[2] = p2x; + result[3] = p2y; + return true; + } + //variables for rectA + var topLeftAx = rectA.getX(); + var topLeftAy = rectA.getY(); + var topRightAx = rectA.getRight(); + var bottomLeftAx = rectA.getX(); + var bottomLeftAy = rectA.getBottom(); + var bottomRightAx = rectA.getRight(); + var halfWidthA = rectA.getWidthHalf(); + var halfHeightA = rectA.getHeightHalf(); + //variables for rectB + var topLeftBx = rectB.getX(); + var topLeftBy = rectB.getY(); + var topRightBx = rectB.getRight(); + var bottomLeftBx = rectB.getX(); + var bottomLeftBy = rectB.getBottom(); + var bottomRightBx = rectB.getRight(); + var halfWidthB = rectB.getWidthHalf(); + var halfHeightB = rectB.getHeightHalf(); + + //flag whether clipping points are found + var clipPointAFound = false; + var clipPointBFound = false; + + // line is vertical + if (p1x === p2x) { + if (p1y > p2y) { + result[0] = p1x; + result[1] = topLeftAy; + result[2] = p2x; + result[3] = bottomLeftBy; + return false; + } else if (p1y < p2y) { + result[0] = p1x; + result[1] = bottomLeftAy; + result[2] = p2x; + result[3] = topLeftBy; + return false; + } else { + //not line, return null; + } + } + // line is horizontal + else if (p1y === p2y) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = p1y; + result[2] = topRightBx; + result[3] = p2y; + return false; + } else if (p1x < p2x) { + result[0] = topRightAx; + result[1] = p1y; + result[2] = topLeftBx; + result[3] = p2y; + return false; + } else { + //not valid line, return null; + } + } else { + //slopes of rectA's and rectB's diagonals + var slopeA = rectA.height / rectA.width; + var slopeB = rectB.height / rectB.width; + + //slope of line between center of rectA and center of rectB + var slopePrime = (p2y - p1y) / (p2x - p1x); + var cardinalDirectionA = void 0; + var cardinalDirectionB = void 0; + var tempPointAx = void 0; + var tempPointAy = void 0; + var tempPointBx = void 0; + var tempPointBy = void 0; + + //determine whether clipping point is the corner of nodeA + if (-slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = bottomLeftAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } else { + result[0] = topRightAx; + result[1] = topLeftAy; + clipPointAFound = true; + } + } else if (slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = topLeftAy; + clipPointAFound = true; + } else { + result[0] = bottomRightAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } + } + + //determine whether clipping point is the corner of nodeB + if (-slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = bottomLeftBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } else { + result[2] = topRightBx; + result[3] = topLeftBy; + clipPointBFound = true; + } + } else if (slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = topLeftBx; + result[3] = topLeftBy; + clipPointBFound = true; + } else { + result[2] = bottomRightBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } + } + + //if both clipping points are corners + if (clipPointAFound && clipPointBFound) { + return false; + } + + //determine Cardinal Direction of rectangles + if (p1x > p2x) { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); + } else { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); + } + } else { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); + } else { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); + } + } + //calculate clipping Point if it is not found before + if (!clipPointAFound) { + switch (cardinalDirectionA) { + case 1: + tempPointAy = topLeftAy; + tempPointAx = p1x + -halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 2: + tempPointAx = bottomRightAx; + tempPointAy = p1y + halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 3: + tempPointAy = bottomLeftAy; + tempPointAx = p1x + halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 4: + tempPointAx = bottomLeftAx; + tempPointAy = p1y + -halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + } + } + if (!clipPointBFound) { + switch (cardinalDirectionB) { + case 1: + tempPointBy = topLeftBy; + tempPointBx = p2x + -halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 2: + tempPointBx = bottomRightBx; + tempPointBy = p2y + halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 3: + tempPointBy = bottomLeftBy; + tempPointBx = p2x + halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 4: + tempPointBx = bottomLeftBx; + tempPointBy = p2y + -halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + } + } + } + return false; +}; + +/** + * This method returns in which cardinal direction does input point stays + * 1: North + * 2: East + * 3: South + * 4: West + */ +IGeometry.getCardinalDirection = function (slope, slopePrime, line) { + if (slope > slopePrime) { + return line; + } else { + return 1 + line % 4; + } +}; + +/** + * This method calculates the intersection of the two lines defined by + * point pairs (s1,s2) and (f1,f2). + */ +IGeometry.getIntersection = function (s1, s2, f1, f2) { + if (f2 == null) { + return this.getIntersection2(s1, s2, f1); + } + + var x1 = s1.x; + var y1 = s1.y; + var x2 = s2.x; + var y2 = s2.y; + var x3 = f1.x; + var y3 = f1.y; + var x4 = f2.x; + var y4 = f2.y; + var x = void 0, + y = void 0; // intersection point + var a1 = void 0, + a2 = void 0, + b1 = void 0, + b2 = void 0, + c1 = void 0, + c2 = void 0; // coefficients of line eqns. + var denom = void 0; + + a1 = y2 - y1; + b1 = x1 - x2; + c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 } + + a2 = y4 - y3; + b2 = x3 - x4; + c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 } + + denom = a1 * b2 - a2 * b1; + + if (denom === 0) { + return null; + } + + x = (b1 * c2 - b2 * c1) / denom; + y = (a2 * c1 - a1 * c2) / denom; + + return new Point(x, y); +}; + +/** + * This method finds and returns the angle of the vector from the + x-axis + * in clockwise direction (compatible w/ Java coordinate system!). + */ +IGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) { + var C_angle = void 0; + + if (Cx !== Nx) { + C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); + + if (Nx < Cx) { + C_angle += Math.PI; + } else if (Ny < Cy) { + C_angle += this.TWO_PI; + } + } else if (Ny < Cy) { + C_angle = this.ONE_AND_HALF_PI; // 270 degrees + } else { + C_angle = this.HALF_PI; // 90 degrees + } + + return C_angle; +}; + +/** + * This method checks whether the given two line segments (one with point + * p1 and p2, the other with point p3 and p4) intersect at a point other + * than these points. + */ +IGeometry.doIntersect = function (p1, p2, p3, p4) { + var a = p1.x; + var b = p1.y; + var c = p2.x; + var d = p2.y; + var p = p3.x; + var q = p3.y; + var r = p4.x; + var s = p4.y; + var det = (c - a) * (s - q) - (r - p) * (d - b); + + if (det === 0) { + return false; + } else { + var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det; + var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det; + return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1; + } +}; + +// ----------------------------------------------------------------------------- +// Section: Class Constants +// ----------------------------------------------------------------------------- +/** + * Some useful pre-calculated constants + */ +IGeometry.HALF_PI = 0.5 * Math.PI; +IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; +IGeometry.TWO_PI = 2.0 * Math.PI; +IGeometry.THREE_PI = 3.0 * Math.PI; + +module.exports = IGeometry; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function IMath() {} + +/** + * This method returns the sign of the input value. + */ +IMath.sign = function (value) { + if (value > 0) { + return 1; + } else if (value < 0) { + return -1; + } else { + return 0; + } +}; + +IMath.floor = function (value) { + return value < 0 ? Math.ceil(value) : Math.floor(value); +}; + +IMath.ceil = function (value) { + return value < 0 ? Math.floor(value) : Math.ceil(value); +}; + +module.exports = IMath; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Integer() {} + +Integer.MAX_VALUE = 2147483647; +Integer.MIN_VALUE = -2147483648; + +module.exports = Integer; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var nodeFrom = function nodeFrom(value) { + return { value: value, next: null, prev: null }; +}; + +var add = function add(prev, node, next, list) { + if (prev !== null) { + prev.next = node; + } else { + list.head = node; + } + + if (next !== null) { + next.prev = node; + } else { + list.tail = node; + } + + node.prev = prev; + node.next = next; + + list.length++; + + return node; +}; + +var _remove = function _remove(node, list) { + var prev = node.prev, + next = node.next; + + + if (prev !== null) { + prev.next = next; + } else { + list.head = next; + } + + if (next !== null) { + next.prev = prev; + } else { + list.tail = prev; + } + + node.prev = node.next = null; + + list.length--; + + return node; +}; + +var LinkedList = function () { + function LinkedList(vals) { + var _this = this; + + _classCallCheck(this, LinkedList); + + this.length = 0; + this.head = null; + this.tail = null; + + if (vals != null) { + vals.forEach(function (v) { + return _this.push(v); + }); + } + } + + _createClass(LinkedList, [{ + key: "size", + value: function size() { + return this.length; + } + }, { + key: "insertBefore", + value: function insertBefore(val, otherNode) { + return add(otherNode.prev, nodeFrom(val), otherNode, this); + } + }, { + key: "insertAfter", + value: function insertAfter(val, otherNode) { + return add(otherNode, nodeFrom(val), otherNode.next, this); + } + }, { + key: "insertNodeBefore", + value: function insertNodeBefore(newNode, otherNode) { + return add(otherNode.prev, newNode, otherNode, this); + } + }, { + key: "insertNodeAfter", + value: function insertNodeAfter(newNode, otherNode) { + return add(otherNode, newNode, otherNode.next, this); + } + }, { + key: "push", + value: function push(val) { + return add(this.tail, nodeFrom(val), null, this); + } + }, { + key: "unshift", + value: function unshift(val) { + return add(null, nodeFrom(val), this.head, this); + } + }, { + key: "remove", + value: function remove(node) { + return _remove(node, this); + } + }, { + key: "pop", + value: function pop() { + return _remove(this.tail, this).value; + } + }, { + key: "popNode", + value: function popNode() { + return _remove(this.tail, this); + } + }, { + key: "shift", + value: function shift() { + return _remove(this.head, this).value; + } + }, { + key: "shiftNode", + value: function shiftNode() { + return _remove(this.head, this); + } + }, { + key: "get_object_at", + value: function get_object_at(index) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + return current.value; + } + } + }, { + key: "set_object_at", + value: function set_object_at(index, value) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + current.value = value; + } + } + }]); + + return LinkedList; +}(); + +module.exports = LinkedList; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* + *This class is the javascript implementation of the Point.java class in jdk + */ +function Point(x, y, p) { + this.x = null; + this.y = null; + if (x == null && y == null && p == null) { + this.x = 0; + this.y = 0; + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + this.x = x; + this.y = y; + } else if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.x = p.x; + this.y = p.y; + } +} + +Point.prototype.getX = function () { + return this.x; +}; + +Point.prototype.getY = function () { + return this.y; +}; + +Point.prototype.getLocation = function () { + return new Point(this.x, this.y); +}; + +Point.prototype.setLocation = function (x, y, p) { + if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.setLocation(p.x, p.y); + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + //if both parameters are integer just move (x,y) location + if (parseInt(x) == x && parseInt(y) == y) { + this.move(x, y); + } else { + this.x = Math.floor(x + 0.5); + this.y = Math.floor(y + 0.5); + } + } +}; + +Point.prototype.move = function (x, y) { + this.x = x; + this.y = y; +}; + +Point.prototype.translate = function (dx, dy) { + this.x += dx; + this.y += dy; +}; + +Point.prototype.equals = function (obj) { + if (obj.constructor.name == "Point") { + var pt = obj; + return this.x == pt.x && this.y == pt.y; + } + return this == obj; +}; + +Point.prototype.toString = function () { + return new Point().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; +}; + +module.exports = Point; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RectangleD(x, y, width, height) { + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + + if (x != null && y != null && width != null && height != null) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } +} + +RectangleD.prototype.getX = function () { + return this.x; +}; + +RectangleD.prototype.setX = function (x) { + this.x = x; +}; + +RectangleD.prototype.getY = function () { + return this.y; +}; + +RectangleD.prototype.setY = function (y) { + this.y = y; +}; + +RectangleD.prototype.getWidth = function () { + return this.width; +}; + +RectangleD.prototype.setWidth = function (width) { + this.width = width; +}; + +RectangleD.prototype.getHeight = function () { + return this.height; +}; + +RectangleD.prototype.setHeight = function (height) { + this.height = height; +}; + +RectangleD.prototype.getRight = function () { + return this.x + this.width; +}; + +RectangleD.prototype.getBottom = function () { + return this.y + this.height; +}; + +RectangleD.prototype.intersects = function (a) { + if (this.getRight() < a.x) { + return false; + } + + if (this.getBottom() < a.y) { + return false; + } + + if (a.getRight() < this.x) { + return false; + } + + if (a.getBottom() < this.y) { + return false; + } + + return true; +}; + +RectangleD.prototype.getCenterX = function () { + return this.x + this.width / 2; +}; + +RectangleD.prototype.getMinX = function () { + return this.getX(); +}; + +RectangleD.prototype.getMaxX = function () { + return this.getX() + this.width; +}; + +RectangleD.prototype.getCenterY = function () { + return this.y + this.height / 2; +}; + +RectangleD.prototype.getMinY = function () { + return this.getY(); +}; + +RectangleD.prototype.getMaxY = function () { + return this.getY() + this.height; +}; + +RectangleD.prototype.getWidthHalf = function () { + return this.width / 2; +}; + +RectangleD.prototype.getHeightHalf = function () { + return this.height / 2; +}; + +module.exports = RectangleD; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function UniqueIDGeneretor() {} + +UniqueIDGeneretor.lastID = 0; + +UniqueIDGeneretor.createID = function (obj) { + if (UniqueIDGeneretor.isPrimitive(obj)) { + return obj; + } + if (obj.uniqueID != null) { + return obj.uniqueID; + } + obj.uniqueID = UniqueIDGeneretor.getString(); + UniqueIDGeneretor.lastID++; + return obj.uniqueID; +}; + +UniqueIDGeneretor.getString = function (id) { + if (id == null) id = UniqueIDGeneretor.lastID; + return "Object#" + id + ""; +}; + +UniqueIDGeneretor.isPrimitive = function (arg) { + var type = typeof arg === "undefined" ? "undefined" : _typeof(arg); + return arg == null || type != "object" && type != "function"; +}; + +module.exports = UniqueIDGeneretor; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __nested_webpack_require_64072__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var LayoutConstants = __nested_webpack_require_64072__(0); +var LGraphManager = __nested_webpack_require_64072__(6); +var LNode = __nested_webpack_require_64072__(3); +var LEdge = __nested_webpack_require_64072__(1); +var LGraph = __nested_webpack_require_64072__(5); +var PointD = __nested_webpack_require_64072__(4); +var Transform = __nested_webpack_require_64072__(17); +var Emitter = __nested_webpack_require_64072__(27); + +function Layout(isRemoteUse) { + Emitter.call(this); + + //Layout Quality: 0:draft, 1:default, 2:proof + this.layoutQuality = LayoutConstants.QUALITY; + //Whether layout should create bendpoints as needed or not + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + //Whether layout should be incremental or not + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + //Whether we animate from before to after layout node positions + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + //Whether we animate the layout process or not + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + //Number iterations that should be done between two successive animations + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + /** + * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When + * they are, both spring and repulsion forces between two leaf nodes can be + * calculated without the expensive clipping point calculations, resulting + * in major speed-up. + */ + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + /** + * This is used for creation of bendpoints by using dummy nodes and edges. + * Maps an LEdge to its dummy bendpoint path. + */ + this.edgeToDummyNodes = new Map(); + this.graphManager = new LGraphManager(this); + this.isLayoutFinished = false; + this.isSubLayout = false; + this.isRemoteUse = false; + + if (isRemoteUse != null) { + this.isRemoteUse = isRemoteUse; + } +} + +Layout.RANDOM_SEED = 1; + +Layout.prototype = Object.create(Emitter.prototype); + +Layout.prototype.getGraphManager = function () { + return this.graphManager; +}; + +Layout.prototype.getAllNodes = function () { + return this.graphManager.getAllNodes(); +}; + +Layout.prototype.getAllEdges = function () { + return this.graphManager.getAllEdges(); +}; + +Layout.prototype.getAllNodesToApplyGravitation = function () { + return this.graphManager.getAllNodesToApplyGravitation(); +}; + +Layout.prototype.newGraphManager = function () { + var gm = new LGraphManager(this); + this.graphManager = gm; + return gm; +}; + +Layout.prototype.newGraph = function (vGraph) { + return new LGraph(null, this.graphManager, vGraph); +}; + +Layout.prototype.newNode = function (vNode) { + return new LNode(this.graphManager, vNode); +}; + +Layout.prototype.newEdge = function (vEdge) { + return new LEdge(null, null, vEdge); +}; + +Layout.prototype.checkLayoutSuccess = function () { + return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); +}; + +Layout.prototype.runLayout = function () { + this.isLayoutFinished = false; + + if (this.tilingPreLayout) { + this.tilingPreLayout(); + } + + this.initParameters(); + var isLayoutSuccessfull; + + if (this.checkLayoutSuccess()) { + isLayoutSuccessfull = false; + } else { + isLayoutSuccessfull = this.layout(); + } + + if (LayoutConstants.ANIMATE === 'during') { + // If this is a 'during' layout animation. Layout is not finished yet. + // We need to perform these in index.js when layout is really finished. + return false; + } + + if (isLayoutSuccessfull) { + if (!this.isSubLayout) { + this.doPostLayout(); + } + } + + if (this.tilingPostLayout) { + this.tilingPostLayout(); + } + + this.isLayoutFinished = true; + + return isLayoutSuccessfull; +}; + +/** + * This method performs the operations required after layout. + */ +Layout.prototype.doPostLayout = function () { + //assert !isSubLayout : "Should not be called on sub-layout!"; + // Propagate geometric changes to v-level objects + if (!this.incremental) { + this.transform(); + } + this.update(); +}; + +/** + * This method updates the geometry of the target graph according to + * calculated layout. + */ +Layout.prototype.update2 = function () { + // update bend points + if (this.createBendsAsNeeded) { + this.createBendpointsFromDummyNodes(); + + // reset all edges, since the topology has changed + this.graphManager.resetAllEdges(); + } + + // perform edge, node and root updates if layout is not called + // remotely + if (!this.isRemoteUse) { + // update all edges + var edge; + var allEdges = this.graphManager.getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + // this.update(edge); + } + + // recursively update nodes + var node; + var nodes = this.graphManager.getRoot().getNodes(); + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + // this.update(node); + } + + // update root graph + this.update(this.graphManager.getRoot()); + } +}; + +Layout.prototype.update = function (obj) { + if (obj == null) { + this.update2(); + } else if (obj instanceof LNode) { + var node = obj; + if (node.getChild() != null) { + // since node is compound, recursively update child nodes + var nodes = node.getChild().getNodes(); + for (var i = 0; i < nodes.length; i++) { + update(nodes[i]); + } + } + + // if the l-level node is associated with a v-level graph object, + // then it is assumed that the v-level node implements the + // interface Updatable. + if (node.vGraphObject != null) { + // cast to Updatable without any type check + var vNode = node.vGraphObject; + + // call the update method of the interface + vNode.update(node); + } + } else if (obj instanceof LEdge) { + var edge = obj; + // if the l-level edge is associated with a v-level graph object, + // then it is assumed that the v-level edge implements the + // interface Updatable. + + if (edge.vGraphObject != null) { + // cast to Updatable without any type check + var vEdge = edge.vGraphObject; + + // call the update method of the interface + vEdge.update(edge); + } + } else if (obj instanceof LGraph) { + var graph = obj; + // if the l-level graph is associated with a v-level graph object, + // then it is assumed that the v-level object implements the + // interface Updatable. + + if (graph.vGraphObject != null) { + // cast to Updatable without any type check + var vGraph = graph.vGraphObject; + + // call the update method of the interface + vGraph.update(graph); + } + } +}; + +/** + * This method is used to set all layout parameters to default values + * determined at compile time. + */ +Layout.prototype.initParameters = function () { + if (!this.isSubLayout) { + this.layoutQuality = LayoutConstants.QUALITY; + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + } + + if (this.animationDuringLayout) { + this.animationOnLayout = false; + } +}; + +Layout.prototype.transform = function (newLeftTop) { + if (newLeftTop == undefined) { + this.transform(new PointD(0, 0)); + } else { + // create a transformation object (from Eclipse to layout). When an + // inverse transform is applied, we get upper-left coordinate of the + // drawing or the root graph at given input coordinate (some margins + // already included in calculation of left-top). + + var trans = new Transform(); + var leftTop = this.graphManager.getRoot().updateLeftTop(); + + if (leftTop != null) { + trans.setWorldOrgX(newLeftTop.x); + trans.setWorldOrgY(newLeftTop.y); + + trans.setDeviceOrgX(leftTop.x); + trans.setDeviceOrgY(leftTop.y); + + var nodes = this.getAllNodes(); + var node; + + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + node.transform(trans); + } + } + } +}; + +Layout.prototype.positionNodesRandomly = function (graph) { + + if (graph == undefined) { + //assert !this.incremental; + this.positionNodesRandomly(this.getGraphManager().getRoot()); + this.getGraphManager().getRoot().updateBounds(true); + } else { + var lNode; + var childGraph; + + var nodes = graph.getNodes(); + for (var i = 0; i < nodes.length; i++) { + lNode = nodes[i]; + childGraph = lNode.getChild(); + + if (childGraph == null) { + lNode.scatter(); + } else if (childGraph.getNodes().length == 0) { + lNode.scatter(); + } else { + this.positionNodesRandomly(childGraph); + lNode.updateBounds(); + } + } + } +}; + +/** + * This method returns a list of trees where each tree is represented as a + * list of l-nodes. The method returns a list of size 0 when: + * - The graph is not flat or + * - One of the component(s) of the graph is not a tree. + */ +Layout.prototype.getFlatForest = function () { + var flatForest = []; + var isForest = true; + + // Quick reference for all nodes in the graph manager associated with + // this layout. The list should not be changed. + var allNodes = this.graphManager.getRoot().getNodes(); + + // First be sure that the graph is flat + var isFlat = true; + + for (var i = 0; i < allNodes.length; i++) { + if (allNodes[i].getChild() != null) { + isFlat = false; + } + } + + // Return empty forest if the graph is not flat. + if (!isFlat) { + return flatForest; + } + + // Run BFS for each component of the graph. + + var visited = new Set(); + var toBeVisited = []; + var parents = new Map(); + var unProcessedNodes = []; + + unProcessedNodes = unProcessedNodes.concat(allNodes); + + // Each iteration of this loop finds a component of the graph and + // decides whether it is a tree or not. If it is a tree, adds it to the + // forest and continued with the next component. + + while (unProcessedNodes.length > 0 && isForest) { + toBeVisited.push(unProcessedNodes[0]); + + // Start the BFS. Each iteration of this loop visits a node in a + // BFS manner. + while (toBeVisited.length > 0 && isForest) { + //pool operation + var currentNode = toBeVisited[0]; + toBeVisited.splice(0, 1); + visited.add(currentNode); + + // Traverse all neighbors of this node + var neighborEdges = currentNode.getEdges(); + + for (var i = 0; i < neighborEdges.length; i++) { + var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode); + + // If BFS is not growing from this neighbor. + if (parents.get(currentNode) != currentNeighbor) { + // We haven't previously visited this neighbor. + if (!visited.has(currentNeighbor)) { + toBeVisited.push(currentNeighbor); + parents.set(currentNeighbor, currentNode); + } + // Since we have previously visited this neighbor and + // this neighbor is not parent of currentNode, given + // graph contains a component that is not tree, hence + // it is not a forest. + else { + isForest = false; + break; + } + } + } + } + + // The graph contains a component that is not a tree. Empty + // previously found trees. The method will end. + if (!isForest) { + flatForest = []; + } + // Save currently visited nodes as a tree in our forest. Reset + // visited and parents lists. Continue with the next component of + // the graph, if any. + else { + var temp = [].concat(_toConsumableArray(visited)); + flatForest.push(temp); + //flatForest = flatForest.concat(temp); + //unProcessedNodes.removeAll(visited); + for (var i = 0; i < temp.length; i++) { + var value = temp[i]; + var index = unProcessedNodes.indexOf(value); + if (index > -1) { + unProcessedNodes.splice(index, 1); + } + } + visited = new Set(); + parents = new Map(); + } + } + + return flatForest; +}; + +/** + * This method creates dummy nodes (an l-level node with minimal dimensions) + * for the given edge (one per bendpoint). The existing l-level structure + * is updated accordingly. + */ +Layout.prototype.createDummyNodesForBendpoints = function (edge) { + var dummyNodes = []; + var prev = edge.source; + + var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); + + for (var i = 0; i < edge.bendpoints.length; i++) { + // create new dummy node + var dummyNode = this.newNode(null); + dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); + + graph.add(dummyNode); + + // create new dummy edge between prev and dummy node + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, dummyNode); + + dummyNodes.add(dummyNode); + prev = dummyNode; + } + + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, edge.target); + + this.edgeToDummyNodes.set(edge, dummyNodes); + + // remove real edge from graph manager if it is inter-graph + if (edge.isInterGraph()) { + this.graphManager.remove(edge); + } + // else, remove the edge from the current graph + else { + graph.remove(edge); + } + + return dummyNodes; +}; + +/** + * This method creates bendpoints for edges from the dummy nodes + * at l-level. + */ +Layout.prototype.createBendpointsFromDummyNodes = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges); + + for (var k = 0; k < edges.length; k++) { + var lEdge = edges[k]; + + if (lEdge.bendpoints.length > 0) { + var path = this.edgeToDummyNodes.get(lEdge); + + for (var i = 0; i < path.length; i++) { + var dummyNode = path[i]; + var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); + + // update bendpoint's location according to dummy node + var ebp = lEdge.bendpoints.get(i); + ebp.x = p.x; + ebp.y = p.y; + + // remove the dummy node, dummy edges incident with this + // dummy node is also removed (within the remove method) + dummyNode.getOwner().remove(dummyNode); + } + + // add the real edge to graph + this.graphManager.add(lEdge, lEdge.source, lEdge.target); + } + } +}; + +Layout.transform = function (sliderValue, defaultValue, minDiv, maxMul) { + if (minDiv != undefined && maxMul != undefined) { + var value = defaultValue; + + if (sliderValue <= 50) { + var minValue = defaultValue / minDiv; + value -= (defaultValue - minValue) / 50 * (50 - sliderValue); + } else { + var maxValue = defaultValue * maxMul; + value += (maxValue - defaultValue) / 50 * (sliderValue - 50); + } + + return value; + } else { + var a, b; + + if (sliderValue <= 50) { + a = 9.0 * defaultValue / 500.0; + b = defaultValue / 10.0; + } else { + a = 9.0 * defaultValue / 50.0; + b = -8 * defaultValue; + } + + return a * sliderValue + b; + } +}; + +/** + * This method finds and returns the center of the given nodes, assuming + * that the given nodes form a tree in themselves. + */ +Layout.findCenterOfTree = function (nodes) { + var list = []; + list = list.concat(nodes); + + var removedNodes = []; + var remainingDegrees = new Map(); + var foundCenter = false; + var centerNode = null; + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + var degree = node.getNeighborsList().size; + remainingDegrees.set(node, node.getNeighborsList().size); + + if (degree == 1) { + removedNodes.push(node); + } + } + + var tempList = []; + tempList = tempList.concat(removedNodes); + + while (!foundCenter) { + var tempList2 = []; + tempList2 = tempList2.concat(tempList); + tempList = []; + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + + var index = list.indexOf(node); + if (index >= 0) { + list.splice(index, 1); + } + + var neighbours = node.getNeighborsList(); + + neighbours.forEach(function (neighbour) { + if (removedNodes.indexOf(neighbour) < 0) { + var otherDegree = remainingDegrees.get(neighbour); + var newDegree = otherDegree - 1; + + if (newDegree == 1) { + tempList.push(neighbour); + } + + remainingDegrees.set(neighbour, newDegree); + } + }); + } + + removedNodes = removedNodes.concat(tempList); + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + } + + return centerNode; +}; + +/** + * During the coarsening process, this layout may be referenced by two graph managers + * this setter function grants access to change the currently being used graph manager + */ +Layout.prototype.setGraphManager = function (gm) { + this.graphManager = gm; +}; + +module.exports = Layout; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RandomSeed() {} +// adapted from: https://stackoverflow.com/a/19303725 +RandomSeed.seed = 1; +RandomSeed.x = 0; + +RandomSeed.nextDouble = function () { + RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000; + return RandomSeed.x - Math.floor(RandomSeed.x); +}; + +module.exports = RandomSeed; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __nested_webpack_require_81860__) { + +"use strict"; + + +var PointD = __nested_webpack_require_81860__(4); + +function Transform(x, y) { + this.lworldOrgX = 0.0; + this.lworldOrgY = 0.0; + this.ldeviceOrgX = 0.0; + this.ldeviceOrgY = 0.0; + this.lworldExtX = 1.0; + this.lworldExtY = 1.0; + this.ldeviceExtX = 1.0; + this.ldeviceExtY = 1.0; +} + +Transform.prototype.getWorldOrgX = function () { + return this.lworldOrgX; +}; + +Transform.prototype.setWorldOrgX = function (wox) { + this.lworldOrgX = wox; +}; + +Transform.prototype.getWorldOrgY = function () { + return this.lworldOrgY; +}; + +Transform.prototype.setWorldOrgY = function (woy) { + this.lworldOrgY = woy; +}; + +Transform.prototype.getWorldExtX = function () { + return this.lworldExtX; +}; + +Transform.prototype.setWorldExtX = function (wex) { + this.lworldExtX = wex; +}; + +Transform.prototype.getWorldExtY = function () { + return this.lworldExtY; +}; + +Transform.prototype.setWorldExtY = function (wey) { + this.lworldExtY = wey; +}; + +/* Device related */ + +Transform.prototype.getDeviceOrgX = function () { + return this.ldeviceOrgX; +}; + +Transform.prototype.setDeviceOrgX = function (dox) { + this.ldeviceOrgX = dox; +}; + +Transform.prototype.getDeviceOrgY = function () { + return this.ldeviceOrgY; +}; + +Transform.prototype.setDeviceOrgY = function (doy) { + this.ldeviceOrgY = doy; +}; + +Transform.prototype.getDeviceExtX = function () { + return this.ldeviceExtX; +}; + +Transform.prototype.setDeviceExtX = function (dex) { + this.ldeviceExtX = dex; +}; + +Transform.prototype.getDeviceExtY = function () { + return this.ldeviceExtY; +}; + +Transform.prototype.setDeviceExtY = function (dey) { + this.ldeviceExtY = dey; +}; + +Transform.prototype.transformX = function (x) { + var xDevice = 0.0; + var worldExtX = this.lworldExtX; + if (worldExtX != 0.0) { + xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX; + } + + return xDevice; +}; + +Transform.prototype.transformY = function (y) { + var yDevice = 0.0; + var worldExtY = this.lworldExtY; + if (worldExtY != 0.0) { + yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY; + } + + return yDevice; +}; + +Transform.prototype.inverseTransformX = function (x) { + var xWorld = 0.0; + var deviceExtX = this.ldeviceExtX; + if (deviceExtX != 0.0) { + xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; + } + + return xWorld; +}; + +Transform.prototype.inverseTransformY = function (y) { + var yWorld = 0.0; + var deviceExtY = this.ldeviceExtY; + if (deviceExtY != 0.0) { + yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; + } + return yWorld; +}; + +Transform.prototype.inverseTransformPoint = function (inPoint) { + var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); + return outPoint; +}; + +module.exports = Transform; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __nested_webpack_require_84747__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var Layout = __nested_webpack_require_84747__(15); +var FDLayoutConstants = __nested_webpack_require_84747__(7); +var LayoutConstants = __nested_webpack_require_84747__(0); +var IGeometry = __nested_webpack_require_84747__(8); +var IMath = __nested_webpack_require_84747__(9); + +function FDLayout() { + Layout.call(this); + + this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.totalDisplacement = 0.0; + this.oldTotalDisplacement = 0.0; + this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; +} + +FDLayout.prototype = Object.create(Layout.prototype); + +for (var prop in Layout) { + FDLayout[prop] = Layout[prop]; +} + +FDLayout.prototype.initParameters = function () { + Layout.prototype.initParameters.call(this, arguments); + + this.totalIterations = 0; + this.notAnimatedIterations = 0; + + this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; + + this.grid = []; +}; + +FDLayout.prototype.calcIdealEdgeLengths = function () { + var edge; + var lcaDepth; + var source; + var target; + var sizeOfSourceInLca; + var sizeOfTargetInLca; + + var allEdges = this.getGraphManager().getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + + edge.idealLength = this.idealEdgeLength; + + if (edge.isInterGraph) { + source = edge.getSource(); + target = edge.getTarget(); + + sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); + sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); + + if (this.useSmartIdealEdgeLengthCalculation) { + edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; + } + + lcaDepth = edge.getLca().getInclusionTreeDepth(); + + edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); + } + } +}; + +FDLayout.prototype.initSpringEmbedder = function () { + + var s = this.getAllNodes().length; + if (this.incremental) { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; + } else { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } else { + this.coolingFactor = 1.0; + } + this.initialCoolingFactor = this.coolingFactor; + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; + } + + this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); + + this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; + + this.repulsionRange = this.calcRepulsionRange(); +}; + +FDLayout.prototype.calcSpringForces = function () { + var lEdges = this.getAllEdges(); + var edge; + + for (var i = 0; i < lEdges.length; i++) { + edge = lEdges[i]; + + this.calcSpringForce(edge, edge.idealLength); + } +}; + +FDLayout.prototype.calcRepulsionForces = function () { + var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var i, j; + var nodeA, nodeB; + var lNodes = this.getAllNodes(); + var processedNodeSet; + + if (this.useFRGridVariant) { + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { + this.updateGrid(); + } + + processedNodeSet = new Set(); + + // calculate repulsion forces between each nodes and its surrounding + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); + processedNodeSet.add(nodeA); + } + } else { + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + + for (j = i + 1; j < lNodes.length; j++) { + nodeB = lNodes[j]; + + // If both nodes are not members of the same graph, skip. + if (nodeA.getOwner() != nodeB.getOwner()) { + continue; + } + + this.calcRepulsionForce(nodeA, nodeB); + } + } + } +}; + +FDLayout.prototype.calcGravitationalForces = function () { + var node; + var lNodes = this.getAllNodesToApplyGravitation(); + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + this.calcGravitationalForce(node); + } +}; + +FDLayout.prototype.moveNodes = function () { + var lNodes = this.getAllNodes(); + var node; + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + node.move(); + } +}; + +FDLayout.prototype.calcSpringForce = function (edge, idealLength) { + var sourceNode = edge.getSource(); + var targetNode = edge.getTarget(); + + var length; + var springForce; + var springForceX; + var springForceY; + + // Update edge length + if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { + edge.updateLengthSimple(); + } else { + edge.updateLength(); + + if (edge.isOverlapingSourceAndTarget) { + return; + } + } + + length = edge.getLength(); + + if (length == 0) return; + + // Calculate spring forces + springForce = this.springConstant * (length - idealLength); + + // Project force onto x and y axes + springForceX = springForce * (edge.lengthX / length); + springForceY = springForce * (edge.lengthY / length); + + // Apply forces on the end nodes + sourceNode.springForceX += springForceX; + sourceNode.springForceY += springForceY; + targetNode.springForceX -= springForceX; + targetNode.springForceY -= springForceY; +}; + +FDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) { + var rectA = nodeA.getRect(); + var rectB = nodeB.getRect(); + var overlapAmount = new Array(2); + var clipPoints = new Array(4); + var distanceX; + var distanceY; + var distanceSquared; + var distance; + var repulsionForce; + var repulsionForceX; + var repulsionForceY; + + if (rectA.intersects(rectB)) // two nodes overlap + { + // calculate separation amount in x and y directions + IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0); + + repulsionForceX = 2 * overlapAmount[0]; + repulsionForceY = 2 * overlapAmount[1]; + + var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); + + // Apply forces on the two nodes + nodeA.repulsionForceX -= childrenConstant * repulsionForceX; + nodeA.repulsionForceY -= childrenConstant * repulsionForceY; + nodeB.repulsionForceX += childrenConstant * repulsionForceX; + nodeB.repulsionForceY += childrenConstant * repulsionForceY; + } else // no overlap + { + // calculate distance + + if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers + { + distanceX = rectB.getCenterX() - rectA.getCenterX(); + distanceY = rectB.getCenterY() - rectA.getCenterY(); + } else // use clipping points + { + IGeometry.getIntersection(rectA, rectB, clipPoints); + + distanceX = clipPoints[2] - clipPoints[0]; + distanceY = clipPoints[3] - clipPoints[1]; + } + + // No repulsion range. FR grid variant should take care of this. + if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + distanceSquared = distanceX * distanceX + distanceY * distanceY; + distance = Math.sqrt(distanceSquared); + + repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; + + // Project force onto x and y axes + repulsionForceX = repulsionForce * distanceX / distance; + repulsionForceY = repulsionForce * distanceY / distance; + + // Apply forces on the two nodes + nodeA.repulsionForceX -= repulsionForceX; + nodeA.repulsionForceY -= repulsionForceY; + nodeB.repulsionForceX += repulsionForceX; + nodeB.repulsionForceY += repulsionForceY; + } +}; + +FDLayout.prototype.calcGravitationalForce = function (node) { + var ownerGraph; + var ownerCenterX; + var ownerCenterY; + var distanceX; + var distanceY; + var absDistanceX; + var absDistanceY; + var estimatedSize; + ownerGraph = node.getOwner(); + + ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; + ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; + distanceX = node.getCenterX() - ownerCenterX; + distanceY = node.getCenterY() - ownerCenterY; + absDistanceX = Math.abs(distanceX) + node.getWidth() / 2; + absDistanceY = Math.abs(distanceY) + node.getHeight() / 2; + + if (node.getOwner() == this.graphManager.getRoot()) // in the root graph + { + estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX; + node.gravitationForceY = -this.gravityConstant * distanceY; + } + } else // inside a compound + { + estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; + node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; + } + } +}; + +FDLayout.prototype.isConverged = function () { + var converged; + var oscilating = false; + + if (this.totalIterations > this.maxIterations / 3) { + oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; + } + + converged = this.totalDisplacement < this.totalDisplacementThreshold; + + this.oldTotalDisplacement = this.totalDisplacement; + + return converged || oscilating; +}; + +FDLayout.prototype.animate = function () { + if (this.animationDuringLayout && !this.isSubLayout) { + if (this.notAnimatedIterations == this.animationPeriod) { + this.update(); + this.notAnimatedIterations = 0; + } else { + this.notAnimatedIterations++; + } + } +}; + +//This method calculates the number of children (weight) for all nodes +FDLayout.prototype.calcNoOfChildrenForAllNodes = function () { + var node; + var allNodes = this.graphManager.getAllNodes(); + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + node.noOfChildren = node.getNoOfChildren(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: FR-Grid Variant Repulsion Force Calculation +// ----------------------------------------------------------------------------- + +FDLayout.prototype.calcGrid = function (graph) { + + var sizeX = 0; + var sizeY = 0; + + sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); + sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); + + var grid = new Array(sizeX); + + for (var i = 0; i < sizeX; i++) { + grid[i] = new Array(sizeY); + } + + for (var i = 0; i < sizeX; i++) { + for (var j = 0; j < sizeY; j++) { + grid[i][j] = new Array(); + } + } + + return grid; +}; + +FDLayout.prototype.addNodeToGrid = function (v, left, top) { + + var startX = 0; + var finishX = 0; + var startY = 0; + var finishY = 0; + + startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange)); + finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange)); + startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange)); + finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange)); + + for (var i = startX; i <= finishX; i++) { + for (var j = startY; j <= finishY; j++) { + this.grid[i][j].push(v); + v.setGridCoordinates(startX, finishX, startY, finishY); + } + } +}; + +FDLayout.prototype.updateGrid = function () { + var i; + var nodeA; + var lNodes = this.getAllNodes(); + + this.grid = this.calcGrid(this.graphManager.getRoot()); + + // put all nodes to proper grid cells + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); + } +}; + +FDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { + + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { + var surrounding = new Set(); + nodeA.surrounding = new Array(); + var nodeB; + var grid = this.grid; + + for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) { + for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) { + if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) { + for (var k = 0; k < grid[i][j].length; k++) { + nodeB = grid[i][j][k]; + + // If both nodes are not members of the same graph, + // or both nodes are the same, skip. + if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { + continue; + } + + // check if the repulsion force between + // nodeA and nodeB has already been calculated + if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { + var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); + var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); + + // if the distance between nodeA and nodeB + // is less then calculation range + if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { + //then add nodeB to surrounding of nodeA + surrounding.add(nodeB); + } + } + } + } + } + } + + nodeA.surrounding = [].concat(_toConsumableArray(surrounding)); + } + for (i = 0; i < nodeA.surrounding.length; i++) { + this.calcRepulsionForce(nodeA, nodeA.surrounding[i]); + } +}; + +FDLayout.prototype.calcRepulsionRange = function () { + return 0.0; +}; + +module.exports = FDLayout; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __nested_webpack_require_100902__) { + +"use strict"; + + +var LEdge = __nested_webpack_require_100902__(1); +var FDLayoutConstants = __nested_webpack_require_100902__(7); + +function FDLayoutEdge(source, target, vEdge) { + LEdge.call(this, source, target, vEdge); + this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +} + +FDLayoutEdge.prototype = Object.create(LEdge.prototype); + +for (var prop in LEdge) { + FDLayoutEdge[prop] = LEdge[prop]; +} + +module.exports = FDLayoutEdge; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __nested_webpack_require_101387__) { + +"use strict"; + + +var LNode = __nested_webpack_require_101387__(3); + +function FDLayoutNode(gm, loc, size, vNode) { + // alternative constructor is handled inside LNode + LNode.call(this, gm, loc, size, vNode); + //Spring, repulsion and gravitational forces acting on this node + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + //Amount by which this node is to be moved in this iteration + this.displacementX = 0; + this.displacementY = 0; + + //Start and finish grid coordinates that this node is fallen into + this.startX = 0; + this.finishX = 0; + this.startY = 0; + this.finishY = 0; + + //Geometric neighbors of this node + this.surrounding = []; +} + +FDLayoutNode.prototype = Object.create(LNode.prototype); + +for (var prop in LNode) { + FDLayoutNode[prop] = LNode[prop]; +} + +FDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) { + this.startX = _startX; + this.finishX = _finishX; + this.startY = _startY; + this.finishY = _finishY; +}; + +module.exports = FDLayoutNode; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function DimensionD(width, height) { + this.width = 0; + this.height = 0; + if (width !== null && height !== null) { + this.height = height; + this.width = width; + } +} + +DimensionD.prototype.getWidth = function () { + return this.width; +}; + +DimensionD.prototype.setWidth = function (width) { + this.width = width; +}; + +DimensionD.prototype.getHeight = function () { + return this.height; +}; + +DimensionD.prototype.setHeight = function (height) { + this.height = height; +}; + +module.exports = DimensionD; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __nested_webpack_require_103173__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103173__(14); + +function HashMap() { + this.map = {}; + this.keys = []; +} + +HashMap.prototype.put = function (key, value) { + var theId = UniqueIDGeneretor.createID(key); + if (!this.contains(theId)) { + this.map[theId] = value; + this.keys.push(key); + } +}; + +HashMap.prototype.contains = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[key] != null; +}; + +HashMap.prototype.get = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[theId]; +}; + +HashMap.prototype.keySet = function () { + return this.keys; +}; + +module.exports = HashMap; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __nested_webpack_require_103901__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103901__(14); + +function HashSet() { + this.set = {}; +} +; + +HashSet.prototype.add = function (obj) { + var theId = UniqueIDGeneretor.createID(obj); + if (!this.contains(theId)) this.set[theId] = obj; +}; + +HashSet.prototype.remove = function (obj) { + delete this.set[UniqueIDGeneretor.createID(obj)]; +}; + +HashSet.prototype.clear = function () { + this.set = {}; +}; + +HashSet.prototype.contains = function (obj) { + return this.set[UniqueIDGeneretor.createID(obj)] == obj; +}; + +HashSet.prototype.isEmpty = function () { + return this.size() === 0; +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +//concats this.set to the given list +HashSet.prototype.addAllTo = function (list) { + var keys = Object.keys(this.set); + var length = keys.length; + for (var i = 0; i < length; i++) { + list.push(this.set[keys[i]]); + } +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +HashSet.prototype.addAll = function (list) { + var s = list.length; + for (var i = 0; i < s; i++) { + var v = list[i]; + this.add(v); + } +}; + +module.exports = HashSet; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __nested_webpack_require_105138__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * A classic Quicksort algorithm with Hoare's partition + * - Works also on LinkedList objects + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var LinkedList = __nested_webpack_require_105138__(11); + +var Quicksort = function () { + function Quicksort(A, compareFunction) { + _classCallCheck(this, Quicksort); + + if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction; + + var length = void 0; + if (A instanceof LinkedList) length = A.size();else length = A.length; + + this._quicksort(A, 0, length - 1); + } + + _createClass(Quicksort, [{ + key: '_quicksort', + value: function _quicksort(A, p, r) { + if (p < r) { + var q = this._partition(A, p, r); + this._quicksort(A, p, q); + this._quicksort(A, q + 1, r); + } + } + }, { + key: '_partition', + value: function _partition(A, p, r) { + var x = this._get(A, p); + var i = p; + var j = r; + while (true) { + while (this.compareFunction(x, this._get(A, j))) { + j--; + }while (this.compareFunction(this._get(A, i), x)) { + i++; + }if (i < j) { + this._swap(A, i, j); + i++; + j--; + } else return j; + } + } + }, { + key: '_get', + value: function _get(object, index) { + if (object instanceof LinkedList) return object.get_object_at(index);else return object[index]; + } + }, { + key: '_set', + value: function _set(object, index, value) { + if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value; + } + }, { + key: '_swap', + value: function _swap(A, i, j) { + var temp = this._get(A, i); + this._set(A, i, this._get(A, j)); + this._set(A, j, temp); + } + }, { + key: '_defaultCompareFunction', + value: function _defaultCompareFunction(a, b) { + return b > a; + } + }]); + + return Quicksort; +}(); + +module.exports = Quicksort; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string + * sequences by S.B.Needleman and C.D.Wunsch (1970). + * + * Aside from the inputs, you can assign the scores for, + * - Match: The two characters at the current index are same. + * - Mismatch: The two characters at the current index are different. + * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string. + */ + +var NeedlemanWunsch = function () { + function NeedlemanWunsch(sequence1, sequence2) { + var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; + var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + + _classCallCheck(this, NeedlemanWunsch); + + this.sequence1 = sequence1; + this.sequence2 = sequence2; + this.match_score = match_score; + this.mismatch_penalty = mismatch_penalty; + this.gap_penalty = gap_penalty; + + // Just the remove redundancy + this.iMax = sequence1.length + 1; + this.jMax = sequence2.length + 1; + + // Grid matrix of scores + this.grid = new Array(this.iMax); + for (var i = 0; i < this.iMax; i++) { + this.grid[i] = new Array(this.jMax); + + for (var j = 0; j < this.jMax; j++) { + this.grid[i][j] = 0; + } + } + + // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions) + this.tracebackGrid = new Array(this.iMax); + for (var _i = 0; _i < this.iMax; _i++) { + this.tracebackGrid[_i] = new Array(this.jMax); + + for (var _j = 0; _j < this.jMax; _j++) { + this.tracebackGrid[_i][_j] = [null, null, null]; + } + } + + // The aligned sequences (return multiple possibilities) + this.alignments = []; + + // Final alignment score + this.score = -1; + + // Calculate scores and tracebacks + this.computeGrids(); + } + + _createClass(NeedlemanWunsch, [{ + key: "getScore", + value: function getScore() { + return this.score; + } + }, { + key: "getAlignments", + value: function getAlignments() { + return this.alignments; + } + + // Main dynamic programming procedure + + }, { + key: "computeGrids", + value: function computeGrids() { + // Fill in the first row + for (var j = 1; j < this.jMax; j++) { + this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty; + this.tracebackGrid[0][j] = [false, false, true]; + } + + // Fill in the first column + for (var i = 1; i < this.iMax; i++) { + this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty; + this.tracebackGrid[i][0] = [false, true, false]; + } + + // Fill the rest of the grid + for (var _i2 = 1; _i2 < this.iMax; _i2++) { + for (var _j2 = 1; _j2 < this.jMax; _j2++) { + // Find the max score(s) among [`Diag`, `Up`, `Left`] + var diag = void 0; + if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; + + var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; + var left = this.grid[_i2][_j2 - 1] + this.gap_penalty; + + // If there exists multiple max values, capture them for multiple paths + var maxOf = [diag, up, left]; + var indices = this.arrayAllMaxIndexes(maxOf); + + // Update Grids + this.grid[_i2][_j2] = maxOf[indices[0]]; + this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; + } + } + + // Update alignment score + this.score = this.grid[this.iMax - 1][this.jMax - 1]; + } + + // Gets all possible valid sequence combinations + + }, { + key: "alignmentTraceback", + value: function alignmentTraceback() { + var inProcessAlignments = []; + + inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], + seq1: "", + seq2: "" + }); + + while (inProcessAlignments[0]) { + var current = inProcessAlignments[0]; + var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; + + if (directions[0]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + if (directions[1]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: '-' + current.seq2 + }); + } + if (directions[2]) { + inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], + seq1: '-' + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + + if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, + sequence2: current.seq2 + }); + + inProcessAlignments.shift(); + } + + return this.alignments; + } + + // Helper Functions + + }, { + key: "getAllIndexes", + value: function getAllIndexes(arr, val) { + var indexes = [], + i = -1; + while ((i = arr.indexOf(val, i + 1)) !== -1) { + indexes.push(i); + } + return indexes; + } + }, { + key: "arrayAllMaxIndexes", + value: function arrayAllMaxIndexes(array) { + return this.getAllIndexes(array, Math.max.apply(null, array)); + } + }]); + + return NeedlemanWunsch; +}(); + +module.exports = NeedlemanWunsch; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __nested_webpack_require_115611__) { + +"use strict"; + + +var layoutBase = function layoutBase() { + return; +}; + +layoutBase.FDLayout = __nested_webpack_require_115611__(18); +layoutBase.FDLayoutConstants = __nested_webpack_require_115611__(7); +layoutBase.FDLayoutEdge = __nested_webpack_require_115611__(19); +layoutBase.FDLayoutNode = __nested_webpack_require_115611__(20); +layoutBase.DimensionD = __nested_webpack_require_115611__(21); +layoutBase.HashMap = __nested_webpack_require_115611__(22); +layoutBase.HashSet = __nested_webpack_require_115611__(23); +layoutBase.IGeometry = __nested_webpack_require_115611__(8); +layoutBase.IMath = __nested_webpack_require_115611__(9); +layoutBase.Integer = __nested_webpack_require_115611__(10); +layoutBase.Point = __nested_webpack_require_115611__(12); +layoutBase.PointD = __nested_webpack_require_115611__(4); +layoutBase.RandomSeed = __nested_webpack_require_115611__(16); +layoutBase.RectangleD = __nested_webpack_require_115611__(13); +layoutBase.Transform = __nested_webpack_require_115611__(17); +layoutBase.UniqueIDGeneretor = __nested_webpack_require_115611__(14); +layoutBase.Quicksort = __nested_webpack_require_115611__(24); +layoutBase.LinkedList = __nested_webpack_require_115611__(11); +layoutBase.LGraphObject = __nested_webpack_require_115611__(2); +layoutBase.LGraph = __nested_webpack_require_115611__(5); +layoutBase.LEdge = __nested_webpack_require_115611__(1); +layoutBase.LGraphManager = __nested_webpack_require_115611__(6); +layoutBase.LNode = __nested_webpack_require_115611__(3); +layoutBase.Layout = __nested_webpack_require_115611__(15); +layoutBase.LayoutConstants = __nested_webpack_require_115611__(0); +layoutBase.NeedlemanWunsch = __nested_webpack_require_115611__(25); + +module.exports = layoutBase; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Emitter() { + this.listeners = []; +} + +var p = Emitter.prototype; + +p.addListener = function (event, callback) { + this.listeners.push({ + event: event, + callback: callback + }); +}; + +p.removeListener = function (event, callback) { + for (var i = this.listeners.length; i >= 0; i--) { + var l = this.listeners[i]; + + if (l.event === event && l.callback === callback) { + this.listeners.splice(i, 1); + } + } +}; + +p.emit = function (event, data) { + for (var i = 0; i < this.listeners.length; i++) { + var l = this.listeners[i]; + + if (event === l.event) { + l.callback(data); + } + } +}; + +module.exports = Emitter; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 1989: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var hashClear = __webpack_require__(51789), + hashDelete = __webpack_require__(80401), + hashGet = __webpack_require__(57667), + hashHas = __webpack_require__(21327), + hashSet = __webpack_require__(81866); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; + + +/***/ }), + +/***/ 38407: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var listCacheClear = __webpack_require__(27040), + listCacheDelete = __webpack_require__(14125), + listCacheGet = __webpack_require__(82117), + listCacheHas = __webpack_require__(67518), + listCacheSet = __webpack_require__(54705); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; + + +/***/ }), + +/***/ 57071: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getNative = __webpack_require__(10852), + root = __webpack_require__(55639); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; + + +/***/ }), + +/***/ 83369: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var mapCacheClear = __webpack_require__(24785), + mapCacheDelete = __webpack_require__(11285), + mapCacheGet = __webpack_require__(96000), + mapCacheHas = __webpack_require__(49916), + mapCacheSet = __webpack_require__(95265); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; + + +/***/ }), + +/***/ 62705: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(55639); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), + +/***/ 29932: +/***/ ((module) => { + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; + + +/***/ }), + +/***/ 34865: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseAssignValue = __webpack_require__(89465), + eq = __webpack_require__(77813); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; + + +/***/ }), + +/***/ 18470: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var eq = __webpack_require__(77813); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; + + +/***/ }), + +/***/ 89465: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var defineProperty = __webpack_require__(38777); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; + + +/***/ }), + +/***/ 97786: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var castPath = __webpack_require__(71811), + toKey = __webpack_require__(40327); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; + + +/***/ }), + +/***/ 44239: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(62705), + getRawTag = __webpack_require__(89607), + objectToString = __webpack_require__(2333); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), + +/***/ 28458: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isFunction = __webpack_require__(23560), + isMasked = __webpack_require__(15346), + isObject = __webpack_require__(13218), + toSource = __webpack_require__(80346); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; + + +/***/ }), + +/***/ 10611: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assignValue = __webpack_require__(34865), + castPath = __webpack_require__(71811), + isIndex = __webpack_require__(65776), + isObject = __webpack_require__(13218), + toKey = __webpack_require__(40327); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; + + +/***/ }), + +/***/ 80531: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(62705), + arrayMap = __webpack_require__(29932), + isArray = __webpack_require__(1469), + isSymbol = __webpack_require__(33448); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; + + +/***/ }), + +/***/ 27561: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var trimmedEndIndex = __webpack_require__(67990); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +module.exports = baseTrim; + + +/***/ }), + +/***/ 71811: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isArray = __webpack_require__(1469), + isKey = __webpack_require__(15403), + stringToPath = __webpack_require__(55514), + toString = __webpack_require__(79833); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; + + +/***/ }), + +/***/ 278: +/***/ ((module) => { + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; + + +/***/ }), + +/***/ 14429: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(55639); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; + + +/***/ }), + +/***/ 38777: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getNative = __webpack_require__(10852); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; + + +/***/ }), + +/***/ 31957: +/***/ ((module) => { + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; + + +/***/ }), + +/***/ 45050: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isKeyable = __webpack_require__(37019); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +module.exports = getMapData; + + +/***/ }), + +/***/ 10852: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseIsNative = __webpack_require__(28458), + getValue = __webpack_require__(47801); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; + + +/***/ }), + +/***/ 89607: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(62705); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; + + +/***/ }), + +/***/ 47801: +/***/ ((module) => { + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +module.exports = getValue; + + +/***/ }), + +/***/ 51789: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var nativeCreate = __webpack_require__(94536); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; + + +/***/ }), + +/***/ 80401: +/***/ ((module) => { + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; + + +/***/ }), + +/***/ 57667: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var nativeCreate = __webpack_require__(94536); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; + + +/***/ }), + +/***/ 21327: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var nativeCreate = __webpack_require__(94536); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; + + +/***/ }), + +/***/ 81866: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var nativeCreate = __webpack_require__(94536); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +module.exports = hashSet; + + +/***/ }), + +/***/ 65776: +/***/ ((module) => { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; + + +/***/ }), + +/***/ 15403: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isArray = __webpack_require__(1469), + isSymbol = __webpack_require__(33448); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; + + +/***/ }), + +/***/ 37019: +/***/ ((module) => { + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +module.exports = isKeyable; + + +/***/ }), + +/***/ 15346: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var coreJsData = __webpack_require__(14429); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; + + +/***/ }), + +/***/ 27040: +/***/ ((module) => { + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; + + +/***/ }), + +/***/ 14125: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assocIndexOf = __webpack_require__(18470); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +module.exports = listCacheDelete; + + +/***/ }), + +/***/ 82117: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assocIndexOf = __webpack_require__(18470); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; + + +/***/ }), + +/***/ 67518: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assocIndexOf = __webpack_require__(18470); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; + + +/***/ }), + +/***/ 54705: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assocIndexOf = __webpack_require__(18470); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; + + +/***/ }), + +/***/ 24785: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Hash = __webpack_require__(1989), + ListCache = __webpack_require__(38407), + Map = __webpack_require__(57071); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +module.exports = mapCacheClear; + + +/***/ }), + +/***/ 11285: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getMapData = __webpack_require__(45050); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; + + +/***/ }), + +/***/ 96000: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getMapData = __webpack_require__(45050); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; + + +/***/ }), + +/***/ 49916: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getMapData = __webpack_require__(45050); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; + + +/***/ }), + +/***/ 95265: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getMapData = __webpack_require__(45050); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +module.exports = mapCacheSet; + + +/***/ }), + +/***/ 24523: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var memoize = __webpack_require__(88306); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; + + +/***/ }), + +/***/ 94536: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getNative = __webpack_require__(10852); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; + + +/***/ }), + +/***/ 2333: +/***/ ((module) => { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; + + +/***/ }), + +/***/ 55639: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var freeGlobal = __webpack_require__(31957); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; + + +/***/ }), + +/***/ 55514: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var memoizeCapped = __webpack_require__(24523); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + + +/***/ }), + +/***/ 40327: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isSymbol = __webpack_require__(33448); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; + + +/***/ }), + +/***/ 80346: +/***/ ((module) => { + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; + + +/***/ }), + +/***/ 67990: +/***/ ((module) => { + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +module.exports = trimmedEndIndex; + + +/***/ }), + +/***/ 23279: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isObject = __webpack_require__(13218), + now = __webpack_require__(7771), + toNumber = __webpack_require__(14841); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; + + +/***/ }), + +/***/ 77813: +/***/ ((module) => { + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; + + +/***/ }), + +/***/ 27361: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseGet = __webpack_require__(97786); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + + +/***/ }), + +/***/ 1469: +/***/ ((module) => { + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; + + +/***/ }), + +/***/ 23560: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseGetTag = __webpack_require__(44239), + isObject = __webpack_require__(13218); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; + + +/***/ }), + +/***/ 13218: +/***/ ((module) => { + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + + +/***/ }), + +/***/ 37005: +/***/ ((module) => { + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; + + +/***/ }), + +/***/ 33448: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseGetTag = __webpack_require__(44239), + isObjectLike = __webpack_require__(37005); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), + +/***/ 88306: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var MapCache = __webpack_require__(83369); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = MapCache; + +module.exports = memoize; + + +/***/ }), + +/***/ 7771: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(55639); + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return root.Date.now(); +}; + +module.exports = now; + + +/***/ }), + +/***/ 36968: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseSet = __webpack_require__(10611); + +/** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); +} + +module.exports = set; + + +/***/ }), + +/***/ 14841: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseTrim = __webpack_require__(27561), + isObject = __webpack_require__(13218), + isSymbol = __webpack_require__(33448); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = toNumber; + + +/***/ }), + +/***/ 30084: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var arrayMap = __webpack_require__(29932), + copyArray = __webpack_require__(278), + isArray = __webpack_require__(1469), + isSymbol = __webpack_require__(33448), + stringToPath = __webpack_require__(55514), + toKey = __webpack_require__(40327), + toString = __webpack_require__(79833); + +/** + * Converts `value` to a property path array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {*} value The value to convert. + * @returns {Array} Returns the new property path array. + * @example + * + * _.toPath('a.b.c'); + * // => ['a', 'b', 'c'] + * + * _.toPath('a[0].b.c'); + * // => ['a', '0', 'b', 'c'] + */ +function toPath(value) { + if (isArray(value)) { + return arrayMap(value, toKey); + } + return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); +} + +module.exports = toPath; + + +/***/ }), + +/***/ 79833: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseToString = __webpack_require__(80531); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +module.exports = toString; + + +/***/ }), + +/***/ 12366: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(99794); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var cytoscape__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59058); +/* harmony import */ var cytoscape__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cytoscape__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14607); +/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(7201); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(30381); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20683); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(70277); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(39354); +/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(91518); + + + + + + + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" }, + productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 6: + case 7: + return yy; + case 8: + yy.getLogger().trace("Stop NL "); + break; + case 9: + yy.getLogger().trace("Stop EOF "); + break; + case 11: + yy.getLogger().trace("Stop NL2 "); + break; + case 12: + yy.getLogger().trace("Stop EOF2 "); + break; + case 15: + yy.getLogger().info("Node: ", $$[$0].id); + yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 16: + yy.getLogger().trace("Icon: ", $$[$0]); + yy.decorateNode({ icon: $$[$0] }); + break; + case 17: + case 21: + yy.decorateNode({ class: $$[$0] }); + break; + case 18: + yy.getLogger().trace("SPACELIST"); + break; + case 19: + yy.getLogger().trace("Node: ", $$[$0].id); + yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 20: + yy.decorateNode({ icon: $$[$0] }); + break; + case 25: + yy.getLogger().trace("node found ..", $$[$0 - 2]); + this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + case 26: + this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; + break; + case 27: + yy.getLogger().trace("node found ..", $$[$0 - 3]); + this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($V7, [2, 3]), { 1: [2, 2] }, o($V7, [2, 4]), o($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o($Vb, [2, 18]), o($Vb, [2, 19]), o($Vb, [2, 20]), o($Vb, [2, 21]), o($Vb, [2, 23]), o($Vb, [2, 24]), o($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o($Vf, [2, 8]), o($Vf, [2, 9]), o($Vf, [2, 10]), o($Vb, [2, 15]), o($Vb, [2, 16]), o($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o($Vf, [2, 11]), o($Vf, [2, 12]), { 21: [1, 37] }, o($Vb, [2, 25]), o($Vb, [2, 27])], + defaultActions: { 2: [2, 1], 6: [2, 2] }, + parseError: function parseError2(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError2(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + more: function() { + this._more = true; + return this; + }, + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + less: function(n) { + this.unput(this.match.slice(n)); + }, + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + pushState: function pushState(condition) { + this.begin(condition); + }, + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + yy.getLogger().trace("Found comment", yy_.yytext); + break; + case 1: + return 8; + case 2: + this.begin("CLASS"); + break; + case 3: + this.popState(); + return 16; + case 4: + this.popState(); + break; + case 5: + yy.getLogger().trace("Begin icon"); + this.begin("ICON"); + break; + case 6: + yy.getLogger().trace("SPACELINE"); + return 6; + case 7: + return 7; + case 8: + return 15; + case 9: + yy.getLogger().trace("end icon"); + this.popState(); + break; + case 10: + yy.getLogger().trace("Exploding node"); + this.begin("NODE"); + return 19; + case 11: + yy.getLogger().trace("Cloud"); + this.begin("NODE"); + return 19; + case 12: + yy.getLogger().trace("Explosion Bang"); + this.begin("NODE"); + return 19; + case 13: + yy.getLogger().trace("Cloud Bang"); + this.begin("NODE"); + return 19; + case 14: + this.begin("NODE"); + return 19; + case 15: + this.begin("NODE"); + return 19; + case 16: + this.begin("NODE"); + return 19; + case 17: + this.begin("NODE"); + return 19; + case 18: + return 13; + case 19: + return 22; + case 20: + return 11; + case 21: + yy.getLogger().trace("Starting NSTR"); + this.begin("NSTR"); + break; + case 22: + yy.getLogger().trace("description:", yy_.yytext); + return "NODE_DESCR"; + case 23: + this.popState(); + break; + case 24: + this.popState(); + yy.getLogger().trace("node end ))"); + return "NODE_DEND"; + case 25: + this.popState(); + yy.getLogger().trace("node end )"); + return "NODE_DEND"; + case 26: + this.popState(); + yy.getLogger().trace("node end ...", yy_.yytext); + return "NODE_DEND"; + case 27: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 28: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 29: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 30: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 31: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 32: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + case 33: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + } + }, + rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\-\)\{\}]+)/i, /^(?:$)/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], + conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR": { "rules": [22, 23], "inclusive": false }, "NODE": { "rules": [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const mindmapParser = parser; +const sanitizeText = (text) => (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.n)(text, (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.g)()); +let nodes = []; +let cnt = 0; +let elements = {}; +const clear = () => { + nodes = []; + cnt = 0; + elements = {}; +}; +const getParent = function(level) { + for (let i = nodes.length - 1; i >= 0; i--) { + if (nodes[i].level < level) { + return nodes[i]; + } + } + return null; +}; +const getMindmap = () => { + return nodes.length > 0 ? nodes[0] : null; +}; +const addNode = (level, id, descr, type) => { + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.l.info("addNode", level, id, descr, type); + const conf = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.g)(); + const node = { + id: cnt++, + nodeId: sanitizeText(id), + level, + descr: sanitizeText(descr), + type, + children: [], + width: (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.g)().mindmap.maxNodeWidth + }; + switch (node.type) { + case nodeType.ROUNDED_RECT: + node.padding = 2 * conf.mindmap.padding; + break; + case nodeType.RECT: + node.padding = 2 * conf.mindmap.padding; + break; + case nodeType.HEXAGON: + node.padding = 2 * conf.mindmap.padding; + break; + default: + node.padding = conf.mindmap.padding; + } + const parent = getParent(level); + if (parent) { + parent.children.push(node); + nodes.push(node); + } else { + if (nodes.length === 0) { + nodes.push(node); + } else { + let error = new Error( + 'There can be only one root. No parent could be found for ("' + node.descr + '")' + ); + error.hash = { + text: "branch " + name, + token: "branch " + name, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"checkout ' + name + '"'] + }; + throw error; + } + } +}; +const nodeType = { + DEFAULT: 0, + NO_BORDER: 0, + ROUNDED_RECT: 1, + RECT: 2, + CIRCLE: 3, + CLOUD: 4, + BANG: 5, + HEXAGON: 6 +}; +const getType = (startStr, endStr) => { + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.l.debug("In get type", startStr, endStr); + switch (startStr) { + case "[": + return nodeType.RECT; + case "(": + return endStr === ")" ? nodeType.ROUNDED_RECT : nodeType.CLOUD; + case "((": + return nodeType.CIRCLE; + case ")": + return nodeType.CLOUD; + case "))": + return nodeType.BANG; + case "{{": + return nodeType.HEXAGON; + default: + return nodeType.DEFAULT; + } +}; +const setElementForId = (id, element) => { + elements[id] = element; +}; +const decorateNode = (decoration) => { + const node = nodes[nodes.length - 1]; + if (decoration && decoration.icon) { + node.icon = sanitizeText(decoration.icon); + } + if (decoration && decoration.class) { + node.class = sanitizeText(decoration.class); + } +}; +const type2Str = (type) => { + switch (type) { + case nodeType.DEFAULT: + return "no-border"; + case nodeType.RECT: + return "rect"; + case nodeType.ROUNDED_RECT: + return "rounded-rect"; + case nodeType.CIRCLE: + return "circle"; + case nodeType.CLOUD: + return "cloud"; + case nodeType.BANG: + return "bang"; + case nodeType.HEXAGON: + return "hexgon"; + default: + return "no-border"; + } +}; +let parseError; +const setErrorHandler = (handler) => { + parseError = handler; +}; +const getLogger = () => _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.l; +const getNodeById = (id) => nodes[id]; +const getElementById = (id) => elements[id]; +const mindmapDb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + sanitizeText, + clear, + getMindmap, + addNode, + nodeType, + getType, + setElementForId, + decorateNode, + type2Str, + get parseError() { + return parseError; + }, + setErrorHandler, + getLogger, + getNodeById, + getElementById +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +function wrap(text, width) { + text.each(function() { + var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this), words = text2.text().split(/(\s+|<br>)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); + for (let j = 0; j < words.length; j++) { + word = words[words.length - 1 - j]; + line.push(word); + tspan.text(line.join(" ").trim()); + if (tspan.node().getComputedTextLength() > width || word === "<br>") { + line.pop(); + tspan.text(line.join(" ").trim()); + if (word === "<br>") { + line = [""]; + } else { + line = [word]; + } + tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); + } + } + }); +} +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const rectBkg = function(elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("width", node.width); +}; +const cloudBkg = function(elem, node) { + const w = node.width; + const h = node.height; + const r1 = 0.15 * w; + const r2 = 0.25 * w; + const r3 = 0.35 * w; + const r4 = 0.2 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1} + a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1} + a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2} + + a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35} + a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65} + + a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15} + a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0} + a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15} + + a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35} + a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65} + + H0 V0 Z` + ); +}; +const bangBkg = function(elem, node) { + const w = node.width; + const h = node.height; + const r = 0.15 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1} + + a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34} + a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33} + + a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15} + + a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34} + a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33} + + H0 V0 Z` + ); +}; +const circleBkg = function(elem, node) { + elem.append("circle").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("r", node.width / 2); +}; +function insertPolygonShape(parent, w, h, points, node) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + (node.width - w) / 2 + ", " + h + ")"); +} +const hexagonBkg = function(elem, node) { + const h = node.height; + const f = 4; + const m = h / f; + const w = node.width - node.padding + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + insertPolygonShape(elem, w, h, points, node); +}; +const roundedRectBkg = function(elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("rx", node.padding).attr("ry", node.padding).attr("width", node.width); +}; +const drawNode = function(elem, node, fullSection, conf) { + const section = fullSection % (MAX_SECTIONS - 1); + const nodeElem = elem.append("g"); + node.section = section; + let sectionClass = "section-" + section; + if (section < 0) { + sectionClass += " section-root"; + } + nodeElem.attr("class", (node.class ? node.class + " " : "") + "mindmap-node " + sectionClass); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.width = bbox.width + 2 * node.padding; + if (node.icon) { + if (node.type === nodeType.CIRCLE) { + node.height += 50; + node.width += 50; + const icon = nodeElem.append("foreignObject").attr("height", "50px").attr("width", node.width).attr("style", "text-align: center;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + node.width / 2 + ", " + (node.height / 2 - 1.5 * node.padding) + ")" + ); + } else { + node.width += 50; + const orgHeight = node.height; + node.height = Math.max(orgHeight, 60); + const heightDiff = Math.abs(node.height - orgHeight); + const icon = nodeElem.append("foreignObject").attr("width", "60px").attr("height", node.height).attr("style", "text-align: center;margin-top:" + heightDiff / 2 + "px;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + (25 + node.width / 2) + ", " + (heightDiff / 2 + node.padding / 2) + ")" + ); + } + } else { + textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + } + switch (node.type) { + case nodeType.DEFAULT: + defaultBkg(bkgElem, node, section); + break; + case nodeType.ROUNDED_RECT: + roundedRectBkg(bkgElem, node); + break; + case nodeType.RECT: + rectBkg(bkgElem, node); + break; + case nodeType.CIRCLE: + bkgElem.attr("transform", "translate(" + node.width / 2 + ", " + +node.height / 2 + ")"); + circleBkg(bkgElem, node); + break; + case nodeType.CLOUD: + cloudBkg(bkgElem, node); + break; + case nodeType.BANG: + bangBkg(bkgElem, node); + break; + case nodeType.HEXAGON: + hexagonBkg(bkgElem, node); + break; + } + setElementForId(node.id, nodeElem); + return node.height; +}; +const drawEdge = function drawEdge2(edgesElem, mindmap, parent, depth, fullSection) { + const section = fullSection % (MAX_SECTIONS - 1); + const sx = parent.x + parent.width / 2; + const sy = parent.y + parent.height / 2; + const ex = mindmap.x + mindmap.width / 2; + const ey = mindmap.y + mindmap.height / 2; + const mx = ex > sx ? sx + Math.abs(sx - ex) / 2 : sx - Math.abs(sx - ex) / 2; + const my = ey > sy ? sy + Math.abs(sy - ey) / 2 : sy - Math.abs(sy - ey) / 2; + const qx = ex > sx ? Math.abs(sx - mx) / 2 + sx : -Math.abs(sx - mx) / 2 + sx; + const qy = ey > sy ? Math.abs(sy - my) / 2 + sy : -Math.abs(sy - my) / 2 + sy; + edgesElem.append("path").attr( + "d", + parent.direction === "TB" || parent.direction === "BT" ? `M${sx},${sy} Q${sx},${qy} ${mx},${my} T${ex},${ey}` : `M${sx},${sy} Q${qx},${sy} ${mx},${my} T${ex},${ey}` + ).attr("class", "edge section-edge-" + section + " edge-depth-" + depth); +}; +const positionNode = function(node) { + const nodeElem = getElementById(node.id); + const x = node.x || 0; + const y = node.y || 0; + nodeElem.attr("transform", "translate(" + x + "," + y + ")"); +}; +const svgDraw = { drawNode, positionNode, drawEdge }; +cytoscape__WEBPACK_IMPORTED_MODULE_1___default().use((cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2___default())); +function drawNodes(svg, mindmap, section, conf) { + svgDraw.drawNode(svg, mindmap, section, conf); + if (mindmap.children) { + mindmap.children.forEach((child, index) => { + drawNodes(svg, child, section < 0 ? index : section, conf); + }); + } +} +function drawEdges(edgesEl, cy) { + cy.edges().map((edge, id) => { + const data = edge.data(); + if (edge[0]._private.bodyBounds) { + const bounds = edge[0]._private.rscratch; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.l.trace("Edge: ", id, data); + edgesEl.insert("path").attr( + "d", + `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} ` + ).attr("class", "edge section-edge-" + data.section + " edge-depth-" + data.depth); + } + }); +} +function addNodes(mindmap, cy, conf, level) { + cy.add({ + group: "nodes", + data: { + id: mindmap.id, + labelText: mindmap.descr, + height: mindmap.height, + width: mindmap.width, + level, + nodeId: mindmap.id, + padding: mindmap.padding, + type: mindmap.type + }, + position: { + x: mindmap.x, + y: mindmap.y + } + }); + if (mindmap.children) { + mindmap.children.forEach((child) => { + addNodes(child, cy, conf, level + 1); + cy.add({ + group: "edges", + data: { + id: `${mindmap.id}_${child.id}`, + source: mindmap.id, + target: child.id, + depth: level, + section: child.section + } + }); + }); + } +} +function layoutMindmap(node, conf) { + return new Promise((resolve) => { + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("id", "cy").attr("style", "display:none"); + const cy = cytoscape__WEBPACK_IMPORTED_MODULE_1___default()({ + container: document.getElementById("cy"), + style: [ + { + selector: "edge", + style: { + "curve-style": "bezier" + } + } + ] + }); + renderEl.remove(); + addNodes(node, cy, conf, 0); + cy.nodes().forEach(function(n) { + n.layoutDimensions = () => { + const data = n.data(); + return { w: data.width, h: data.height }; + }; + }); + cy.layout({ + name: "cose-bilkent", + quality: "proof", + styleEnabled: false, + animate: false + }).run(); + cy.ready((e) => { + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.l.info("Ready", e); + resolve(cy); + }); + }); +} +function positionNodes(cy) { + cy.nodes().map((node, id) => { + const data = node.data(); + data.x = node.position().x; + data.y = node.position().y; + svgDraw.positionNode(data); + const el = getElementById(data.nodeId); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.l.info("Id:", id, "Position: (", node.position().x, ", ", node.position().y, ")", data); + el.attr( + "transform", + `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})` + ); + el.attr("attr", `apa-${id})`); + }); +} +const draw = async (text, id, version, diagObj) => { + const conf = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.g)(); + diagObj.db.clear(); + diagObj.parser.parse(text); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.l.debug("Renering info diagram\n" + text); + const securityLevel = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const mm = diagObj.db.getMindmap(); + const edgesElem = svg.append("g"); + edgesElem.attr("class", "mindmap-edges"); + const nodesElem = svg.append("g"); + nodesElem.attr("class", "mindmap-nodes"); + drawNodes(nodesElem, mm, -1, conf); + const cy = await layoutMindmap(mm, conf); + drawEdges(edgesElem, cy); + positionNodes(cy); + (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_10__.s)(void 0, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); +}; +const mindmapRenderer = { + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} polygon, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } +`; +const mindmapStyles = getStyles; +const diagram = { + db: mindmapDb, + renderer: mindmapRenderer, + parser: mindmapParser, + styles: mindmapStyles +}; + +//# sourceMappingURL=diagram-definition.2c0ce47b.js.map + + +/***/ }), + +/***/ 91619: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ is_dark) +}); + +// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(61691); +// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(71610); +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/luminance.js +/* IMPORT */ + + +/* MAIN */ +//SOURCE: https://planetcalc.com/7779 +const luminance = (color) => { + const { r, g, b } = dist_color/* default.parse */.Z.parse(color); + const luminance = .2126 * utils/* default.channel.toLinear */.Z.channel.toLinear(r) + .7152 * utils/* default.channel.toLinear */.Z.channel.toLinear(g) + .0722 * utils/* default.channel.toLinear */.Z.channel.toLinear(b); + return utils/* default.lang.round */.Z.lang.round(luminance); +}; +/* EXPORT */ +/* harmony default export */ const methods_luminance = (luminance); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_light.js +/* IMPORT */ + +/* MAIN */ +const isLight = (color) => { + return methods_luminance(color) >= .5; +}; +/* EXPORT */ +/* harmony default export */ const is_light = (isLight); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_dark.js +/* IMPORT */ + +/* MAIN */ +const isDark = (color) => { + return !is_light(color); +}; +/* EXPORT */ +/* harmony default export */ const is_dark = (isDark); + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/docs/assets/js/367de8e8.63c096d4.js b/docs/assets/js/367de8e8.63c096d4.js new file mode 100644 index 000000000..b9d8c4542 --- /dev/null +++ b/docs/assets/js/367de8e8.63c096d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6527],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},75572:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},l="Flipper example",i={unversionedId:"getting-started/flipper",id:"version-0.6.0/getting-started/flipper",title:"Flipper example",description:"To quickly start working with Odra, take a look at the following code sample. If you followed the",source:"@site/versioned_docs/version-0.6.0/getting-started/flipper.md",sourceDirName:"getting-started",slug:"/getting-started/flipper",permalink:"/docs/0.6.0/getting-started/flipper",draft:!1,tags:[],version:"0.6.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/docs/0.6.0/getting-started/installation"},next:{title:"Basics",permalink:"/docs/0.6.0/category/basics"}},s={},p=[{value:"Let's flip",id:"lets-flip",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-example"},"Flipper example"),(0,a.kt)("p",null,"To quickly start working with Odra, take a look at the following code sample. If you followed the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.6.0/getting-started/installation"},"Installation")," tutorial, you should have this file already at ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),"."),(0,a.kt)("p",null,"For further explanation of how this code works, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/flipper-internals"},"Flipper Internals"),"."),(0,a.kt)("h2",{id:"lets-flip"},"Let's flip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs" showLineNumbers',title:'"flipper.rs"',showLineNumbers:!0},"use odra::Variable;\n\n/// A module definition. Each module struct consists Variables and Mappings\n/// or/and another modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value, \n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n\n/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n /// Retrieves value from the storage. \n /// If the value has never been set, the default value is returned.\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n\n #[test]\n fn test_two_flippers() {\n let mut contract1 = FlipperDeployer::initial_settings();\n let contract2 = FlipperDeployer::initial_settings();\n assert!(!contract1.get());\n assert!(!contract2.get());\n contract1.flip();\n assert!(contract1.get());\n assert!(!contract2.get());\n }\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next category of articles, we will go through basic concepts of Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3701fb97.ba7e2e61.js b/docs/assets/js/3701fb97.ba7e2e61.js new file mode 100644 index 000000000..7072b0628 --- /dev/null +++ b/docs/assets/js/3701fb97.ba7e2e61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2253],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,f=u["".concat(i,".").concat(m)]||u[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var c=2;c<s;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},21439:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:10,description:"Contracts calling contracts"},o="Cross calls",l={unversionedId:"basics/cross-calls",id:"version-0.3.1/basics/cross-calls",title:"Cross calls",description:"Contracts calling contracts",source:"@site/versioned_docs/version-0.3.1/basics/10-cross-calls.md",sourceDirName:"basics",slug:"/basics/cross-calls",permalink:"/docs/0.3.1/basics/cross-calls",draft:!1,tags:[],version:"0.3.1",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Contracts calling contracts"},sidebar:"tutorialSidebar",previous:{title:"Events",permalink:"/docs/0.3.1/basics/events"},next:{title:"Modules",permalink:"/docs/0.3.1/basics/modules"}},i={},c=[{value:"Contract Ref",id:"contract-ref",level:2},{value:"Testing",id:"testing",level:2}],d={toc:c};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cross-calls"},"Cross calls"),(0,r.kt)("p",null,"To show how to handle calls between contracts, first, let's implement two of them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"use odra::Variable;\nuse odra::types::{Address};\n\n#[odra::module]\npub struct CrossContract {\n pub math_engine: Variable<Address>,\n}\n\n#[odra::module]\nimpl CrossContract {\n #[odra(init)]\n pub fn init(&mut self, math_engine_address: Address) {\n self.math_engine.set(math_engine_address);\n }\n\n pub fn add_using_another(&self) -> u32 {\n let math_engine_address = self.math_engine.get().unwrap();\n MathEngineRef::at(math_engine_address).add(3, 5)\n }\n}\n\n#[odra::module]\npub struct MathEngine {\n}\n\n#[odra::module]\nimpl MathEngine {\n pub fn add(&self, n1: u32, n2: u32) -> u32 {\n n1 + n2\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract can add two numbers. ",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," takes an ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," in its init function and saves it in\nstorage for later use. If we deploy the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," first and take note of its address, we can then deploy\n",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," and use ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," to perform complicated calculations for us!"),(0,r.kt)("p",null,"To call the external contract, we use the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," that was created for us by Odra:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"MathEngineRef::at(math_engine_address).add(3, 5)\n")),(0,r.kt)("h2",{id:"contract-ref"},"Contract Ref"),(0,r.kt)("p",null,"We mentioned ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," already in our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.1/basics/testing"},"Testing")," article.\nIt is a reference to already deployed - running contract.\nHere we are going to take a deeper look at it."),(0,r.kt)("p",null,"Similarly to a ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," is generated automatically, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nTo get an instance of a reference, we can either deploy a contract (using ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),") or by building it\ndirectly, using ",(0,r.kt)("inlineCode",{parentName:"p"},"::at(address: Address)")," method, as shown above.\nThe reference implements all the public endpoints to the contract (those marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),"\nimpl), alongside couple methods:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"at(Address) -> Self")," - points the reference to an Address"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"address() -> Address")," - returns the Address the reference is currently pointing at"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"with_tokens(Amount) -> Self")," - attaches Amount of native tokens to the next call")),(0,r.kt)("h1",{id:"external-contracts"},"External Contracts"),(0,r.kt)("p",null,"Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI."),(0,r.kt)("p",null,"For that purpose, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra:external_contract]")," macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of."),(0,r.kt)("p",null,"Let's pretend the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," we defined is an external contract. There is a contract with ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function that adds two numbers somewhere."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"#[odra::external_contract]\npub trait Adder {\n fn add(&self, n1: u32, n2: u32) -> u32;\n}\n")),(0,r.kt)("p",null,"Analogously to modules, Odra creates the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderRef")," struct (but do not create the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderDeployer"),"). Having an address we can call:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"AdderRef::at(address).add(3, 5)\n")),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Let's see how we can test our cross calls using this knowledge:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"use super::{CrossContractDeployer, MathEngineDeployer};\n\n#[test]\nfn test_cross_calls() {\n let math_engine_contract = MathEngineDeployer::default();\n let cross_contract = CrossContractDeployer::init(math_engine_contract.address());\n\n assert_eq!(cross_contract.add_using_another(), 8);\n}\n")),(0,r.kt)("p",null,"Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function we want to use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"#[cfg(test)]\nmod tests {\n use odra::types::Address;\n use crate::docs::cross_calls::{Adder, AdderRef};\n \n #[test]\n fn test_ext() {\n let adder = AdderRef::at(get_adder_address());\n\n assert_eq!(adder.add(1, 2), 3);\n }\n\n fn get_adder_address() -> Address {\n let contract = MathEngineDeployer::default();\n contract.address()\n }\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3721b008.94406143.js b/docs/assets/js/3721b008.94406143.js new file mode 100644 index 000000000..b48acc5c7 --- /dev/null +++ b/docs/assets/js/3721b008.94406143.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5151],{3905:(e,r,n)=>{n.d(r,{Zo:()=>u,kt:()=>m});var t=n(67294);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?o(Object(n),!0).forEach((function(r){a(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,a=function(e,r){if(null==e)return{};var n,t,a={},o=Object.keys(e);for(t=0;t<o.length;t++)n=o[t],r.indexOf(n)>=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)n=o[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=t.createContext({}),c=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},u=function(e){var r=c(e.components);return t.createElement(l.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,f=d["".concat(l,".").concat(m)]||d[m]||p[m]||o;return n?t.createElement(f,s(s({ref:r},u),{},{components:n})):t.createElement(f,s({ref:r},u))}));function m(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return t.createElement.apply(null,s)}return t.createElement.apply(null,n)}d.displayName="MDXCreateElement"},87454:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var t=n(87462),a=(n(67294),n(3905));const o={sidebar_position:8,description:"Causing and handling errors"},s="Errors",i={unversionedId:"basics/errors",id:"version-0.5.0/basics/errors",title:"Errors",description:"Causing and handling errors",source:"@site/versioned_docs/version-0.5.0/basics/08-errors.md",sourceDirName:"basics",slug:"/basics/errors",permalink:"/docs/0.5.0/basics/errors",draft:!1,tags:[],version:"0.5.0",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"Causing and handling errors"},sidebar:"tutorialSidebar",previous:{title:"Testing",permalink:"/docs/0.5.0/basics/testing"},next:{title:"Events",permalink:"/docs/0.5.0/basics/events"}},l={},c=[{value:"Testing errors",id:"testing-errors",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function p(e){let{components:r,...n}=e;return(0,a.kt)("wrapper",(0,t.Z)({},u,n,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"errors"},"Errors"),(0,a.kt)("p",null,"Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the\nfollowing example of a simple owned contract:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"use odra::{execution_error, Variable, UnwrapOrRevert};\nuse odra::types::Address;\n\n#[odra::module]\npub struct OwnedContract {\n name: Variable<String>,\n owner: Variable<Address>,\n}\n\nexecution_error! {\n pub enum Error {\n OwnerNotSet => 1,\n NotAnOwner => 2,\n }\n}\n\n\n#[odra::module]\nimpl OwnedContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.owner.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn owner(&self) -> Address {\n self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n }\n\n pub fn change_name(&mut self, name: String) {\n let caller = odra::contract_env::caller();\n if caller != self.owner() {\n odra::contract_env::revert(Error::NotAnOwner)\n }\n\n self.name.set(name);\n }\n}\n")),(0,a.kt)("p",null,"Firstly, we are using ",(0,a.kt)("inlineCode",{parentName:"p"},"execution_error!")," macro to define our own set of Errors that our contract will\nthrow. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use\n",(0,a.kt)("inlineCode",{parentName:"p"},"unwrap_or_revert_with")," and pass an error as an argument:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n")),(0,a.kt)("p",null,"You and the users of your contract will be thankful for a meaningful error message!"),(0,a.kt)("p",null,"You can also throw the error directly, by using ",(0,a.kt)("inlineCode",{parentName:"p"},"revert"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"odra::contract_env::revert(Error::NotAnOwner)\n")),(0,a.kt)("h2",{id:"testing-errors"},"Testing errors"),(0,a.kt)("p",null,"Okay, but how about testing it? We've already mentioned a function - ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_exception"),". This is how you will\nuse it:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},'use super::{OwnedContractDeployer, OwnedContractRef};\nuse super::Error;\n\n#[test]\nfn test_owner_error() {\n let owner = odra::test_env::get_account(0);\n let not_an_owner = odra::test_env::get_account(1);\n\n odra::test_env::set_caller(owner);\n let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());\n\n odra::test_env::set_caller(not_an_owner);\n odra::test_env::assert_exception(Error::NotAnOwner, || {\n owned_contract.change_name("NewName".to_string());\n })\n}\n')),(0,a.kt)("p",null,"In the example above, because we are calling the ",(0,a.kt)("inlineCode",{parentName:"p"},"change_name"),' method as an address which is not an "owner",\nwe are expecting that "NotAnOwner" error will be thrown.'),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Here we are creating another reference to the already deployed contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"OwnedContractRef::at()")," and passing to it\nits Address. Note that ",(0,a.kt)("inlineCode",{parentName:"p"},"OwnedContractDeployer::init()")," returns the same type.")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will learn how to emit and test events using Odra."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/383c9ad7.d6dc0d8d.js b/docs/assets/js/383c9ad7.d6dc0d8d.js new file mode 100644 index 000000000..1c2c3da0c --- /dev/null +++ b/docs/assets/js/383c9ad7.d6dc0d8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6491],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?l(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):l(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)t=l[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)t=l[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=d(t),m=r,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||l;return t?a.createElement(f,o(o({ref:n},u),{},{components:t})):a.createElement(f,o({ref:n},u))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=t.length,o=new Array(l);o[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var d=2;d<l;d++)o[d]=t[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}p.displayName="MDXCreateElement"},62030:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const l={},o="Delegate",i={unversionedId:"advanced/delegate",id:"advanced/delegate",title:"Delegate",description:"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.",source:"@site/docs/advanced/01-delegate.md",sourceDirName:"advanced",slug:"/advanced/delegate",permalink:"/docs/next/advanced/delegate",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced",permalink:"/docs/next/category/advanced"},next:{title:"Advanced Storage Concepts",permalink:"/docs/next/advanced/advanced-storage"}},s={},d=[{value:"Overview",id:"overview",level:2},{value:"Code Examples",id:"code-examples",level:2}],u={toc:d};function c(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"delegate"},"Delegate"),(0,r.kt)("p",null,"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module."),(0,r.kt)("p",null,"The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"To utilize the delegate feature in your contract, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro, your parent module remains clean and easy to understand."),(0,r.kt)("p",null,"You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself."),(0,r.kt)("h2",{id:"code-examples"},"Code Examples"),(0,r.kt)("p",null,"Consider the following basic example for better understanding:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use crate::{erc20::Erc20, ownable::Ownable};\nuse odra::{\n Address, casper_types::U256,\n module::{Module, SubModule}\n};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: SubModule<Ownable>,\n erc20: SubModule<Erc20>\n}\n\n#[odra::module]\nimpl OwnedToken {\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {\n let deployer = self.env().caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);\n pub fn approve(&mut self, spender: Address, amount: U256);\n pub fn name(&self) -> String;\n pub fn symbol(&self) -> String;\n pub fn decimals(&self) -> u8;\n pub fn total_supply(&self) -> U256;\n pub fn balance_of(&self, owner: Address) -> U256;\n pub fn allowance(&self, owner: Address, spender: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n pub fn change_ownership(&mut self, new_owner: Address);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(self.env().caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedToken")," contract includes two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),". We delegate various functions from both modules using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro. As a result, the contract retains its succinctness without compromising on functionality."),(0,r.kt)("p",null,"The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities."),(0,r.kt)("p",null,"Let's take a look at another example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};\nuse odra::{\n Address, casper_types::U256, \n module::{Module, SubModule}\n};\n\n#[odra::module]\npub struct DeFiPlatform {\n ownable: SubModule<Ownable>,\n erc20: SubModule<Erc20>,\n exchange: SubModule<Exchange>\n}\n\n#[odra::module]\nimpl DeFiPlatform {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {\n let deployer = self.env().caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n self.exchange.init(exchange_rate);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn balance_of(&self, owner: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n }\n\n to self.exchange {\n pub fn swap(&mut self, sender: Address, recipient: Address);\n pub fn set_exchange_rate(&mut self, new_rate: u64);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(self.env().caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"In this ",(0,r.kt)("inlineCode",{parentName:"p"},"DeFiPlatform")," contract, we include ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"Exchange")," modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure."),(0,r.kt)("p",null,"Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/39d2189a.957a72d4.js b/docs/assets/js/39d2189a.957a72d4.js new file mode 100644 index 000000000..054fd997c --- /dev/null +++ b/docs/assets/js/39d2189a.957a72d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6262],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},80158:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const i={sidebar_position:4,description:"Detailed explanation of the Flipper contract"},o="Flipper Internals",l={unversionedId:"basics/flipper-internals",id:"version-0.4.0/basics/flipper-internals",title:"Flipper Internals",description:"Detailed explanation of the Flipper contract",source:"@site/versioned_docs/version-0.4.0/basics/04-flipper-internals.md",sourceDirName:"basics",slug:"/basics/flipper-internals",permalink:"/docs/0.4.0/basics/flipper-internals",draft:!1,tags:[],version:"0.4.0",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Detailed explanation of the Flipper contract"},sidebar:"tutorialSidebar",previous:{title:"Odra.toml",permalink:"/docs/0.4.0/basics/odra-toml"},next:{title:"Storage interaction",permalink:"/docs/0.4.0/basics/storage-interaction"}},s={},p=[{value:"Header",id:"header",level:2},{value:"Struct",id:"struct",level:2},{value:"Impl",id:"impl",level:2},{value:"Tests",id:"tests",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-internals"},"Flipper Internals"),(0,a.kt)("p",null,"In this article, we take a deep dive into the code shown in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.4.0/getting-started/flipper"},"Flipper example"),", where we will explain in more detail all\nthe Odra-specific sections of the code."),(0,a.kt)("h2",{id:"header"},"Header"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"use odra::Variable;\n")),(0,a.kt)("p",null,"Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation\nthat can be reused between targets. In the above case, we're importing ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable"),", which is responsible\nfor storing simple values on the blockchain's storage."),(0,a.kt)("h2",{id:"struct"},"Struct"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// A module definition. Each module struct consists of Variables and Mappings\n/// or/and other modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value,\n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n")),(0,a.kt)("p",null,"In Odra, all contracts are also modules, which can be reused between contracts. That's why we need\nto mark the struct with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. In the struct definition itself, we state all\nthe fields of the contract. Those fields can be regular Rust data types, however - those will not\nbe persisted on the blockchain. They can also be Odra modules - defined in your project or coming\nfrom Odra itself. Finally, to make the data persistent on the blockchain, you can use something like\n",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>")," showed above. To learn more about storage interaction, take a look at the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/storage-interaction"},"next article"),"."),(0,a.kt)("h2",{id:"impl"},"Impl"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n ...\n")),(0,a.kt)("p",null,"Similarly to the struct, we mark the ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. Odra will take all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from this section and create contract endpoints from them. So, if you wish to have\nfunctions that are not available for calling outside the contract, do not make them public. Alternatively,\nyou can create a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section without the macro - all functions defined there, even marked\nwith ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," will be not callable."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," macro marks the constructor of the contract. This function will be limited to only\nto a single call, all further calls to it will result in an error."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'}," ...\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n ...\n")),(0,a.kt)("p",null,"The endpoints above show you how to interact with the simplest type of storage - ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>"),". The data\nsaved there using ",(0,a.kt)("inlineCode",{parentName:"p"},"set")," function will be persisted in the blockchain."),(0,a.kt)("h2",{id:"tests"},"Tests"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n ...\n")),(0,a.kt)("p",null,"You can write tests in any way you prefer and know in Rust. In the example above we are deploying the\ncontract using ",(0,a.kt)("inlineCode",{parentName:"p"},"FlipperDeployer")," - a piece of code generated automatically thanks to the macros.\nThe contract will be deployed on the VM you chose while running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now let's take a look at the different types of storage that Odra provides and how to use them."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3ac77d2e.8a10319f.js b/docs/assets/js/3ac77d2e.8a10319f.js new file mode 100644 index 000000000..5550c3c32 --- /dev/null +++ b/docs/assets/js/3ac77d2e.8a10319f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4627],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=a,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},8985:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:3,description:"Odra's configuration file"},i="Odra.toml",l={unversionedId:"basics/odra-toml",id:"version-0.4.0/basics/odra-toml",title:"Odra.toml",description:"Odra's configuration file",source:"@site/versioned_docs/version-0.4.0/basics/03-odra-toml.md",sourceDirName:"basics",slug:"/basics/odra-toml",permalink:"/docs/0.4.0/basics/odra-toml",draft:!1,tags:[],version:"0.4.0",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"Odra's configuration file"},sidebar:"tutorialSidebar",previous:{title:"Directory structure",permalink:"/docs/0.4.0/basics/directory-structure"},next:{title:"Flipper Internals",permalink:"/docs/0.4.0/basics/flipper-internals"}},c={},s=[{value:"Adding a new contract manually",id:"adding-a-new-contract-manually",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"As mentioned in the previous article, ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," is a file that contains information about all the contracts\nthat Odra will build. Let's take a look at the file structure again:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," will be used as a name for the contract - the generated wasm file will be in the above case named\n",(0,a.kt)("inlineCode",{parentName:"p"},"flipper.wasm"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) is used by the builder to locate the exact struct where\nthe contract is defined."),(0,a.kt)("h2",{id:"adding-a-new-contract-manually"},"Adding a new contract manually"),(0,a.kt)("p",null,"Besides using the ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command, you can add a new contract to be compiled by hand.\nTo do this, add another ",(0,a.kt)("inlineCode",{parentName:"p"},"[[contracts]]")," element, name it and make sure that the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," is set correctly."),(0,a.kt)("p",null,"For example, if you want to create a new contract called ",(0,a.kt)("inlineCode",{parentName:"p"},"counter"),", your ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file should finally\nlook like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n\n[[contracts]]\nname = "counter"\nfqn = "sample::Counter"\n')),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous\n",(0,a.kt)("inlineCode",{parentName:"p"},"Flipper")," contract."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3bb5653d.9326908b.js b/docs/assets/js/3bb5653d.9326908b.js new file mode 100644 index 000000000..85440a60e --- /dev/null +++ b/docs/assets/js/3bb5653d.9326908b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9167],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(a),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||s;return a?n.createElement(f,i(i({ref:t},u),{},{components:a})):n.createElement(f,i({ref:t},u))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var p=2;p<s;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},47844:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const s={sidebar_position:5,description:"How to write data into blockchain's storage"},i="Storage interaction",o={unversionedId:"basics/storage-interaction",id:"version-0.5.0/basics/storage-interaction",title:"Storage interaction",description:"How to write data into blockchain's storage",source:"@site/versioned_docs/version-0.5.0/basics/05-storage-interaction.md",sourceDirName:"basics",slug:"/basics/storage-interaction",permalink:"/docs/0.5.0/basics/storage-interaction",draft:!1,tags:[],version:"0.5.0",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"How to write data into blockchain's storage"},sidebar:"tutorialSidebar",previous:{title:"Flipper Internals",permalink:"/docs/0.5.0/basics/flipper-internals"},next:{title:"Host Communication",permalink:"/docs/0.5.0/basics/communicating-with-host"}},l={},p=[{value:"Variable",id:"variable",level:2},{value:"Mapping",id:"mapping",level:2},{value:"List",id:"list",level:2},{value:"Custom Types",id:"custom-types",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-interaction"},"Storage interaction"),(0,r.kt)("p",null,"The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go\nthrough all of them and explain their pros and cons."),(0,r.kt)("h2",{id:"variable"},"Variable"),(0,r.kt)("p",null,"The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your\nvariable in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),' type. Let\'s look at a "real world" example of a contract that represents a dog:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"#[odra::module]\npub struct DogContract {\n barks: Variable<bool>,\n weight: Variable<u32>,\n name: Variable<String>,\n walks: Variable<Vec<u32>>,\n}\n")),(0,r.kt)("p",null,"You can see the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," wrapping the data. Even complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," can be wrapped (with some caveats)!"),(0,r.kt)("p",null,"Let's make this contract usable, by providing a constructor and some getter functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"use odra::Variable;\n\n#[odra::module]\nimpl DogContract {\n #[odra(init)]\n pub fn init(&mut self, barks: bool, weight: u32, name: String) {\n self.barks.set(barks);\n self.weight.set(weight);\n self.name.set(name);\n self.walks.set(Vec::<u32>::default());\n }\n\n pub fn barks(&self) -> bool {\n self.barks.get_or_default()\n }\n\n pub fn weight(&self) -> u32 {\n self.weight.get_or_default()\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.len() as u32\n }\n\n pub fn walks_total_length(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.iter().sum()\n }\n}\n")),(0,r.kt)("p",null,"As you can see, you can access the data, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"get_or_default")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"...\nself.barks.get_or_default()\n...\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Keep in mind that using ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," will result in an Option that you'll need to unwrap - the variable\ndoesn't have to be initialized!")),(0,r.kt)("p",null,"To modify the data, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"set()")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"self.barks.set(barks);\n")),(0,r.kt)("p",null,"A Variable is easy to use and efficient for simple data types. One of its downsides is that it\nserializes the data as a whole, so when you're using complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap"),",\neach time you ",(0,r.kt)("inlineCode",{parentName:"p"},"get")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," the whole data is read and written to the blockchain storage."),(0,r.kt)("p",null,"In the example above, if we want to see how many walks our dog had, we would use the function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"pub fn walks_amount(&self) -> usize {\n let walks = self.walks.get_or_default();\n walks.len()\n}\n")),(0,r.kt)("p",null,"But to do so, we need to extract the whole serialized vector from the storage, which would inefficient,\nespecially for larger sets of data."),(0,r.kt)("p",null,"To tackle this issue following two types were created."),(0,r.kt)("h2",{id:"mapping"},"Mapping"),(0,r.kt)("p",null,"The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to\npass two values - the key type and the value type. Let's look at the variation of the Dog contract, that\nuses Mapping to store information about our dog's friends and how many times they visited:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"use odra::{Mapping, Variable};\n\n#[odra::module]\npub struct DogContract2 {\n name: Variable<String>,\n friends: Mapping<String, u32>,\n}\n")),(0,r.kt)("p",null,"In the example above, our key is a String (it is a name of the friend) and we are storing u32 values\n(amount of visits). To read and write values from and into a Mapping we use a similar approach\nto the one shown in the Variables section with one difference - we need to pass a key:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"pub fn visit(&mut self, friend_name: String) {\n let visits = self.visits(friend_name.clone());\n self.friends.set(&friend_name, visits + 1);\n}\n\npub fn visits(&self, friend_name: String) -> u32 {\n self.friends.get_or_default(&friend_name)\n}\n")),(0,r.kt)("p",null,"The biggest improvement over a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," is that we can model functionality of a ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap")," using ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nThe amount of data written to and read from the storage is minimal. However, we cannot iterate over ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nWe could implement such behavior by using a numeric type key and saving the length of the set in a\nseparate variable. Thankfully Odra comes with a prepared solution - the ",(0,r.kt)("inlineCode",{parentName:"p"},"List")," type."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with\na Variable working together:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="core/src/list.rs"',title:'"core/src/list.rs"'},"use odra::{Variable, List};\n\npub struct List<T> {\n values: Mapping<u32, T>,\n index: Variable<u32>\n}\n"))),(0,r.kt)("h2",{id:"list"},"List"),(0,r.kt)("p",null,"Going back to our DogContract example - let's revisit the walk case. This time, instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),",\nwe'll use the list:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"#[odra::module]\npub struct DogContract3 {\n name: Variable<String>,\n walks: List<u32>,\n}\n")),(0,r.kt)("p",null,"As you can see, the notation is very similar to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),". To understand the usage, take a look\nat the reimplementation of the functions with an additional function that takes our dog for a walk\n(it writes the data to the storage):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"#[odra::module]\nimpl DogContract3 {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n self.walks.len()\n }\n\n pub fn walks_total_length(&self) -> u32 {\n self.walks.iter().sum()\n }\n\n pub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n }\n}\n")),(0,r.kt)("p",null,"Now, we can know how many walks our dog had without loading the whole vector from the storage.\nWe need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all\nthe cases for you."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All of the above examples, alongside the tests, are available in the odra repository in the ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/docs/")," folder.")),(0,r.kt)("h2",{id:"custom-types"},"Custom Types"),(0,r.kt)("p",null,"By default you can store only built-in types like numbers, Options, Results, Strings, Vectors."),(0,r.kt)("p",null,"Implementing custom types is straightforward, your type must derive from ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType"),": "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Address, OdraType};\n\n#[derive(OdraType)]\npub struct Dog {\n pub name: String,\n pub age: u8,\n pub owner: Option<Address>\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Each field of your struct must be an OdraType.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next article, we'll see how to query the host for information about the world and our contract."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3c817d4f.a554124e.js b/docs/assets/js/3c817d4f.a554124e.js new file mode 100644 index 000000000..e76eff130 --- /dev/null +++ b/docs/assets/js/3c817d4f.a554124e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2801],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(r),f=o,d=u["".concat(p,".").concat(f)]||u[f]||m[f]||a;return r?n.createElement(d,i(i({ref:t},l),{},{components:r})):n.createElement(d,i({ref:t},l))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},82285:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=r(87462),o=(r(67294),r(3905));const a={slug:"odra-cosmwasm",title:"Odra + CosmWasm",authors:["kpob"],image:"https://github.com/odradev.png"},i=void 0,s={permalink:"/blog/odra-cosmwasm",source:"@site/blog/2023-02-15-odra-cosmos.md",title:"Odra + CosmWasm",description:"In November 2022 we released the first version of the Odra Framework. It's time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm.",date:"2023-02-15T00:00:00.000Z",formattedDate:"February 15, 2023",tags:[],readingTime:5.96,hasTruncateMarker:!0,authors:[{name:"Krzysztof Pobiar\u017cyn",title:"Lead Developer",url:"https://github.com/kpob",key:"kpob"}],frontMatter:{slug:"odra-cosmwasm",title:"Odra + CosmWasm",authors:["kpob"],image:"https://github.com/odradev.png"},prevItem:{title:"OpenAI writes ERC20 in Odra",permalink:"/blog/2023-02-27-openai-writes-erc20-in-odra"},nextItem:{title:"EVM at Risc0",permalink:"/blog/evm-at-risc0"}},p={authorsImageUrls:[void 0]},c=[],l={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In November 2022 we released ",(0,o.kt)("a",{parentName:"p",href:"/blog/release-020"},"the first version")," of the Odra Framework. It's time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3cb0761e.24178130.js b/docs/assets/js/3cb0761e.24178130.js new file mode 100644 index 000000000..68e722586 --- /dev/null +++ b/docs/assets/js/3cb0761e.24178130.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5108],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,b=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(b,i(i({ref:t},d),{},{components:r})):n.createElement(b,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},24992:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:2,description:"Files and folders in the Odra project"},i="Directory structure",l={unversionedId:"basics/directory-structure",id:"basics/directory-structure",title:"Directory structure",description:"Files and folders in the Odra project",source:"@site/docs/basics/02-directory-structure.md",sourceDirName:"basics",slug:"/basics/directory-structure",permalink:"/docs/next/basics/directory-structure",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Files and folders in the Odra project"},sidebar:"tutorialSidebar",previous:{title:"Cargo Odra",permalink:"/docs/next/basics/cargo-odra"},next:{title:"Odra.toml",permalink:"/docs/next/basics/odra-toml"}},s={},c=[{value:"Cargo.toml",id:"cargotoml",level:2},{value:"Odra.toml",id:"odratoml",level:2},{value:"src/",id:"src",level:2},{value:"bin/",id:"bin",level:2},{value:"target/",id:"target",level:2},{value:"wasm/",id:"wasm",level:2}],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"directory-structure"},"Directory structure"),(0,a.kt)("p",null,"After creating a new project using Odra and running the tests, you will be presented with the\nfollowing files and directories:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 CHANGELOG.md\n\u251c\u2500\u2500 Odra.toml\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 rust-toolchain\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 flipper.rs\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 bin/\n| |\u2500\u2500 build_contract.rs\n| \u2514\u2500\u2500 build_schema.rs\n\u251c\u2500\u2500 target/\n\u2514\u2500\u2500 wasm/\n")),(0,a.kt)("h2",{id:"cargotoml"},"Cargo.toml"),(0,a.kt)("p",null,"Let's first take a look at ",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "sample"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = "0.8.0"\n\n[dev-dependencies]\nodra-test = "0.8.0"\n\n[[bin]]\nname = "sample_build_contract"\npath = "bin/build_contract.rs"\ntest = false\n\n[[bin]]\nname = "sample_build_schema"\npath = "bin/build_schema.rs"\ntest = false\n\n[profile.release]\ncodegen-units = 1\nlto = true\n\n[profile.dev.package."*"]\nopt-level = 3\n')),(0,a.kt)("p",null,"By default, your project will use the latest odra version available at crates.io. For testing purposes, ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-test")," is also\nadded as a dev dependency."),(0,a.kt)("h2",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"This is the file that holds information about contracts that will be generated when running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"As we can see, we have a single contract, its ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) corresponds to\nthe contract is located in ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),".\nMore contracts can be added here by hand, or by using ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command."),(0,a.kt)("h2",{id:"src"},"src/"),(0,a.kt)("p",null,"This is the folder where your smart contract files live."),(0,a.kt)("h2",{id:"bin"},"bin/"),(0,a.kt)("p",null,"This is the folder where scripts that will be used to generate code or schemas live.\nYou don't need to modify those files, they are generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra new")," command and\nare used by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra schema")," commands."),(0,a.kt)("h2",{id:"target"},"target/"),(0,a.kt)("p",null,"Files generated by cargo during the build process are put here."),(0,a.kt)("h2",{id:"wasm"},"wasm/"),(0,a.kt)("p",null,"WASM files generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," are put here. You can grab those WASM files\nand deploy them on the blockchain."),(0,a.kt)("h1",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now, let's take a look at one of the files mentioned above in more detail,\nnamely the ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3e9ef03c.e119ce44.js b/docs/assets/js/3e9ef03c.e119ce44.js new file mode 100644 index 000000000..5b66a409b --- /dev/null +++ b/docs/assets/js/3e9ef03c.e119ce44.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2717],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),f=a,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},69455:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:1},i="What is a backend?",c={unversionedId:"backends/what-is-a-backend",id:"version-0.2.0/backends/what-is-a-backend",title:"What is a backend?",description:"You can think of a backend as a target platform for your smart contract.",source:"@site/versioned_docs/version-0.2.0/backends/01-what-is-a-backend.md",sourceDirName:"backends",slug:"/backends/what-is-a-backend",permalink:"/docs/0.2.0/backends/what-is-a-backend",draft:!1,tags:[],version:"0.2.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Backends",permalink:"/docs/0.2.0/category/backends"},next:{title:"MockVM",permalink:"/docs/0.2.0/backends/mock-vm"}},s={},l=[{value:"Contract Env",id:"contract-env",level:2},{value:"Test Env",id:"test-env",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-a-backend"},"What is a backend?"),(0,a.kt)("p",null,"You can think of a backend as a target platform for your smart contract.\nThis can be a piece of code allowing you to quickly check your code - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/backends/mock-vm"},"MockVM"),",\nor a complete virtual machine, spinning up a blockchain for you - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/backends/casper"},"CasperVM"),"."),(0,a.kt)("p",null,"Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env."),(0,a.kt)("h2",{id:"contract-env"},"Contract Env"),(0,a.kt)("p",null,"The Contract Env is a simple interface that each backend needs to implement,\nexposing features of the blockchain from the perspective of the contract."),(0,a.kt)("p",null,"It gives Odra a set of functions, which allows implementing more complex concepts -\nfor example, to implement ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/basics/storage-interaction"},"Mapping"),",\nOdra requires some kind of storage integration.\nThe exact implementation of those functions is a responsibility of a backend,\nmaking Odra and its user free to implement the contract logic,\ninstead of messing with the blockchain internals."),(0,a.kt)("p",null,"Other functions from Contract Env include handling transfers, addresses, block time, errors and events."),(0,a.kt)("h2",{id:"test-env"},"Test Env"),(0,a.kt)("p",null,"Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with\nthe backend from the outside world - really useful for implementing tests."),(0,a.kt)("p",null,"This ranges from interacting with the blockchain - like deploying and calling the contracts,\nto the more test-oriented - handling errors, forwarding the block time, etc."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will take a look at backends Odra implements in more detail."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3edee900.7b2c1fbe.js b/docs/assets/js/3edee900.7b2c1fbe.js new file mode 100644 index 000000000..b0772fba7 --- /dev/null +++ b/docs/assets/js/3edee900.7b2c1fbe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6010],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||s;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,i=new Array(s);i[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var p=2;p<s;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},69042:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:5,description:"How to write data into blockchain's storage"},i="Storage interaction",o={unversionedId:"basics/storage-interaction",id:"version-0.3.1/basics/storage-interaction",title:"Storage interaction",description:"How to write data into blockchain's storage",source:"@site/versioned_docs/version-0.3.1/basics/05-storage-interaction.md",sourceDirName:"basics",slug:"/basics/storage-interaction",permalink:"/docs/0.3.1/basics/storage-interaction",draft:!1,tags:[],version:"0.3.1",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"How to write data into blockchain's storage"},sidebar:"tutorialSidebar",previous:{title:"Flipper Internals",permalink:"/docs/0.3.1/basics/flipper-internals"},next:{title:"Host Communication",permalink:"/docs/0.3.1/basics/communicating-with-host"}},l={},p=[{value:"Variable",id:"variable",level:2},{value:"Mapping",id:"mapping",level:2},{value:"List",id:"list",level:2},{value:"Custom Types",id:"custom-types",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-interaction"},"Storage interaction"),(0,r.kt)("p",null,"The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go\nthrough all of them and explain their pros and cons."),(0,r.kt)("h2",{id:"variable"},"Variable"),(0,r.kt)("p",null,"The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your\nvariable in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),' type. Let\'s look at a "real world" example of a contract that represents a dog:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"#[odra::module]\npub struct DogContract {\n barks: Variable<bool>,\n weight: Variable<u32>,\n name: Variable<String>,\n walks: Variable<Vec<u32>>,\n}\n")),(0,r.kt)("p",null,"You can see the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," wrapping the data. Even complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," can be wrapped (with some caveats)!"),(0,r.kt)("p",null,"Let's make this contract usable, by providing a constructor and some getter functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"use odra::Variable;\n\n#[odra::module]\nimpl DogContract {\n #[odra(init)]\n pub fn init(&mut self, barks: bool, weight: u32, name: String) {\n self.barks.set(barks);\n self.weight.set(weight);\n self.name.set(name);\n self.walks.set(Vec::<u32>::default());\n }\n\n pub fn barks(&self) -> bool {\n self.barks.get_or_default()\n }\n\n pub fn weight(&self) -> u32 {\n self.weight.get_or_default()\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.len() as u32\n }\n\n pub fn walks_total_length(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.iter().sum()\n }\n}\n")),(0,r.kt)("p",null,"As you can see, you can access the data, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"get_or_default")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"...\nself.barks.get_or_default()\n...\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Keep in mind that using ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," will result in an Option that you'll need to unwrap - the variable\ndoesn't have to be initialized!")),(0,r.kt)("p",null,"To modify the data, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"set()")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"self.barks.set(barks);\n")),(0,r.kt)("p",null,"A Variable is easy to use and efficient for simple data types. One of its downsides is that it\nserializes the data as a whole, so when you're using complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap"),",\neach time you ",(0,r.kt)("inlineCode",{parentName:"p"},"get")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," the whole data is read and written to the blockchain storage."),(0,r.kt)("p",null,"In the example above, if we want to see how many walks our dog had, we would use the function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"pub fn walks_amount(&self) -> usize {\n let walks = self.walks.get_or_default();\n walks.len()\n}\n")),(0,r.kt)("p",null,"But to do so, we need to extract the whole serialized vector from the storage, which would inefficient,\nespecially for larger sets of data."),(0,r.kt)("p",null,"To tackle this issue following two types were created."),(0,r.kt)("h2",{id:"mapping"},"Mapping"),(0,r.kt)("p",null,"The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to\npass two values - the key type and the value type. Let's look at the variation of the Dog contract, that\nuses Mapping to store information about our dog's friends and how many times they visited:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/mapping.rs"',title:'"examples/src/docs/mapping.rs"'},"use odra::{Mapping, Variable};\n\n#[odra::module]\npub struct DogContract2 {\n name: Variable<String>,\n friends: Mapping<String, u32>,\n}\n")),(0,r.kt)("p",null,"In the example above, our key is a String (it is a name of the friend) and we are storing u32 values\n(amount of visits). To read and write values from and into a Mapping we use a similar approach\nto the one shown in the Variables section with one difference - we need to pass a key:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/mapping.rs"',title:'"examples/src/docs/mapping.rs"'},"pub fn visit(&mut self, friend_name: String) {\n let visits = self.visits(friend_name.clone());\n self.friends.set(&friend_name, visits + 1);\n}\n\npub fn visits(&self, friend_name: String) -> u32 {\n self.friends.get_or_default(&friend_name)\n}\n")),(0,r.kt)("p",null,"The biggest improvement over a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," is that we can model functionality of a ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap")," using ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nThe amount of data written to and read from the storage is minimal. However, we cannot iterate over ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nWe could implement such behavior by using a numeric type key and saving the length of the set in a\nseparate variable. Thankfully Odra comes with a prepared solution - the ",(0,r.kt)("inlineCode",{parentName:"p"},"List")," type."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with\na Variable working together:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="core/src/list.rs"',title:'"core/src/list.rs"'},"use odra::{Variable, List};\n\npub struct List<T> {\n values: Mapping<u32, T>,\n index: Variable<u32>\n}\n"))),(0,r.kt)("h2",{id:"list"},"List"),(0,r.kt)("p",null,"Going back to our DogContract example - let's revisit the walk case. This time, instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),",\nwe'll use the list:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"#[odra::module]\npub struct DogContract3 {\n name: Variable<String>,\n walks: List<u32>,\n}\n")),(0,r.kt)("p",null,"As you can see, the notation is very similar to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),". To understand the usage, take a look\nat the reimplementation of the functions with an additional function that takes our dog for a walk\n(it writes the data to the storage):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"#[odra::module]\nimpl DogContract3 {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n self.walks.len()\n }\n\n pub fn walks_total_length(&self) -> u32 {\n self.walks.iter().sum()\n }\n\n pub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n }\n}\n")),(0,r.kt)("p",null,"Now, we can know how many walks our dog had without loading the whole vector from the storage.\nWe need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all\nthe cases for you."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All of the above examples, alongside the tests, are available in the odra repository in the ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/docs/")," folder.")),(0,r.kt)("h2",{id:"custom-types"},"Custom Types"),(0,r.kt)("p",null,"By default you can store only built-in types like numbers, Options, Results, Strings, Vectors."),(0,r.kt)("p",null,"Implementing custom types is straightforward, your type must derive from ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType"),": "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Address, OdraType};\n\n#[derive(OdraType)]\npub struct Dog {\n pub name: String,\n pub age: u8,\n pub owner: Option<Address>\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Each field of your struct must be an OdraType.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next article, we'll see how to query the host for information about the world and our contract."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3eed3f1a.a7629729.js b/docs/assets/js/3eed3f1a.a7629729.js new file mode 100644 index 000000000..523ce34f2 --- /dev/null +++ b/docs/assets/js/3eed3f1a.a7629729.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3362],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=a,h=p["".concat(l,".").concat(m)]||p[m]||d[m]||o;return n?r.createElement(h,s(s({ref:t},u),{},{components:n})):r.createElement(h,s({ref:t},u))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},33984:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:7,description:"How to write tests in Odra"},s="Testing",i={unversionedId:"basics/testing",id:"version-0.7.0/basics/testing",title:"Testing",description:"How to write tests in Odra",source:"@site/versioned_docs/version-0.7.0/basics/07-testing.md",sourceDirName:"basics",slug:"/basics/testing",permalink:"/docs/basics/testing",draft:!1,tags:[],version:"0.7.0",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"How to write tests in Odra"},sidebar:"tutorialSidebar",previous:{title:"Host Communication",permalink:"/docs/basics/communicating-with-host"},next:{title:"Errors",permalink:"/docs/basics/errors"}},l={},c=[{value:"Test env",id:"test-env",level:2},{value:"Deployer",id:"deployer",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write\nregular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the\nprevious article:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},'use odra::{Variable, List};\n\n#[cfg(test)]\nmod tests {\n use super::DogContract3Deployer;\n\n #[test]\n fn init_test() {\n let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n assert_eq!(dog_contract.walks_amount(), 0);\n assert_eq!(dog_contract.walks_total_length(), 0);\n dog_contract.walk_the_dog(5);\n dog_contract.walk_the_dog(10);\n assert_eq!(dog_contract.walks_amount(), 2);\n assert_eq!(dog_contract.walks_total_length(), 15);\n }\n}\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(module)]")," macro created a Deployer code for us, which will deploy the contract on the\nVM:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},'let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n')),(0,a.kt)("p",null,"From now on, we can use ",(0,a.kt)("inlineCode",{parentName:"p"},"dog_contract")," to interact with our deployed contract - in particular, all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from the impl section that was annotated with a macro are available to us:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"// Impl\npub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n}\n\n...\n\n// Test\ndog_contract.walk_the_dog(5);\n")),(0,a.kt)("h2",{id:"test-env"},"Test env"),(0,a.kt)("p",null,"Odra gives us some additional functions that we can use to communicate with the host (outside the contract context)\nand to configure how the contracts are deployed and called. Let's revisit the example from the previous\narticle about host communication and implement the tests that prove it works:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/testing.rs"',title:'"examples/src/features/testing.rs"'},'#[cfg(test)]\nmod tests {\n use super::TestingContractDeployer;\n\n #[test]\n fn test_env() {\n let testing_contract = TestingContractDeployer::init("MyContract".to_string());\n let creator = testing_contract.created_by();\n odra::test_env::set_caller(odra::test_env::get_account(1));\n let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());\n let creator2 = testing_contract2.created_by();\n assert!(creator != creator2);\n }\n}\n')),(0,a.kt)("p",null,"In the code above, we are deploying two instances of the same contract, but we're using ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::test_env::set_caller"),"\nto change the caller - so the Address which is deploying the contract. This changes the result of the ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::contract_env::caller()"),"\nthe function we are calling inside the contract."),(0,a.kt)("p",null,"Each test env comes with a set of functions that will let you write better tests:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn set_caller(address: Address)")," - you've seen it in action just now"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn token_balance(address: Address) -> Balance")," - it returns the balance of the account associated with the given address"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn advance_block_time_by(seconds: BlockTime)")," - it increases the current value of block_time"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_account(n: usize) -> Address")," - it returns an nth address that was prepared for you by Odra in advance;\nby default, you start with the 0th account"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn assert_exception<F, E>(err: E, block: F)")," - it executes the ",(0,a.kt)("inlineCode",{parentName:"li"},"block")," code and expects ",(0,a.kt)("inlineCode",{parentName:"li"},"err")," to happen"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError>")," - returns\nthe event emitted by the contract")),(0,a.kt)("p",null,"Again, we'll see those used in the next articles."),(0,a.kt)("h2",{id:"deployer"},"Deployer"),(0,a.kt)("p",null,"You may be wondering what is the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractDeployer")," and where did it come from.\nIt is a piece of code generated automatically for you, thanks to the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nIf you used the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," on one of the methods, it will be the constructor of your contract.\nOdra will make sure that it is called only once, so you can use it to initialize your data structures etc."),(0,a.kt)("p",null,"If you do not provide the init method, you can deploy the contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"::default()")," method.\nIn the end, you will get a ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," instance (in our case the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractRef"),") which reimplements all\nthe methods you defined in the contract, but executes them on a blockchain!"),(0,a.kt)("p",null,"To learn more about the ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," contract, visit the ",(0,a.kt)("a",{parentName:"p",href:"/docs/basics/cross-calls"},"Cross calls")," article."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We take a look at how Odra handles errors!"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/3f00e816.24822ebf.js b/docs/assets/js/3f00e816.24822ebf.js new file mode 100644 index 000000000..d8681a164 --- /dev/null +++ b/docs/assets/js/3f00e816.24822ebf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3227],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return t?r.createElement(f,l(l({ref:n},d),{},{components:t})):r.createElement(f,l({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u<a;u++)l[u]=t[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},90744:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:3},l="OwnedToken",i={unversionedId:"tutorials/owned-token",id:"version-0.6.0/tutorials/owned-token",title:"OwnedToken",description:"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.",source:"@site/versioned_docs/version-0.6.0/tutorials/owned-token.md",sourceDirName:"tutorials",slug:"/tutorials/owned-token",permalink:"/docs/0.6.0/tutorials/owned-token",draft:!1,tags:[],version:"0.6.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"ERC-20",permalink:"/docs/0.6.0/tutorials/erc20"}},s={},u=[{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:3},{value:"Delegation",id:"delegation",level:3},{value:"Summary",id:"summary",level:2}],d={toc:u};function c(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ownedtoken"},"OwnedToken"),(0,o.kt)("p",null,"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"What should our module be capable of?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Conform the Erc20 interface."),(0,o.kt)("li",{parentName:"ol"},"Allow minting tokens but only the module owner."),(0,o.kt)("li",{parentName:"ol"},"The current owner should be able to designate a new owner.")),(0,o.kt)("h3",{id:"module-definition"},"Module definition"),(0,o.kt)("p",null,"Let's define a module called ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedToken")," that is a composition of ",(0,o.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Erc20")," modules."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n")),(0,o.kt)("p",null,"As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!"),(0,o.kt)("h3",{id:"delegation"},"Delegation"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use odra::types::{Address, Balance}\n\n...\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n self.erc20.approve(spender, amount);\n }\n\n pub fn get_owner(&self) -> Address {\n self.ownable.get_owner()\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ownable.change_ownership(new_owner);\n }\n\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.ownable.ensure_ownership(&contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,o.kt)("p",null,"Easy. However, there are a few worth mentioning subtleness:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L11")," - A constructor is a great place to init both modules at once. "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L14-L16")," - Most of the entrypoints do not need any modification, so we simply delegates them to the ",(0,o.kt)("inlineCode",{parentName:"li"},"erc20")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L52")," - The same we do with the ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L58-L61")," - Minting should not be unconditional, we need some control over it. First, using ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," we make sure the ",(0,o.kt)("inlineCode",{parentName:"li"},"caller")," really is the owner.")),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/41445f6c.c688fb67.js b/docs/assets/js/41445f6c.c688fb67.js new file mode 100644 index 000000000..b2bb0a34b --- /dev/null +++ b/docs/assets/js/41445f6c.c688fb67.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8784],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,f=u["".concat(i,".").concat(m)]||u[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var c=2;c<s;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},90347:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:10,description:"Contracts calling contracts"},o="Cross calls",l={unversionedId:"basics/cross-calls",id:"version-0.6.0/basics/cross-calls",title:"Cross calls",description:"Contracts calling contracts",source:"@site/versioned_docs/version-0.6.0/basics/10-cross-calls.md",sourceDirName:"basics",slug:"/basics/cross-calls",permalink:"/docs/0.6.0/basics/cross-calls",draft:!1,tags:[],version:"0.6.0",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Contracts calling contracts"},sidebar:"tutorialSidebar",previous:{title:"Events",permalink:"/docs/0.6.0/basics/events"},next:{title:"Modules",permalink:"/docs/0.6.0/basics/modules"}},i={},c=[{value:"Contract Ref",id:"contract-ref",level:2},{value:"Testing",id:"testing",level:2}],d={toc:c};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cross-calls"},"Cross calls"),(0,r.kt)("p",null,"To show how to handle calls between contracts, first, let's implement two of them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"use odra::Variable;\nuse odra::types::{Address};\n\n#[odra::module]\npub struct CrossContract {\n pub math_engine: Variable<Address>,\n}\n\n#[odra::module]\nimpl CrossContract {\n #[odra(init)]\n pub fn init(&mut self, math_engine_address: Address) {\n self.math_engine.set(math_engine_address);\n }\n\n pub fn add_using_another(&self) -> u32 {\n let math_engine_address = self.math_engine.get().unwrap();\n MathEngineRef::at(math_engine_address).add(3, 5)\n }\n}\n\n#[odra::module]\npub struct MathEngine {\n}\n\n#[odra::module]\nimpl MathEngine {\n pub fn add(&self, n1: u32, n2: u32) -> u32 {\n n1 + n2\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract can add two numbers. ",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," takes an ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," in its init function and saves it in\nstorage for later use. If we deploy the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," first and take note of its address, we can then deploy\n",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," and use ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," to perform complicated calculations for us!"),(0,r.kt)("p",null,"To call the external contract, we use the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," that was created for us by Odra:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"MathEngineRef::at(math_engine_address).add(3, 5)\n")),(0,r.kt)("h2",{id:"contract-ref"},"Contract Ref"),(0,r.kt)("p",null,"We mentioned ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," already in our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/testing"},"Testing")," article.\nIt is a reference to already deployed - running contract.\nHere we are going to take a deeper look at it."),(0,r.kt)("p",null,"Similarly to a ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," is generated automatically, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nTo get an instance of a reference, we can either deploy a contract (using ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),") or by building it\ndirectly, using ",(0,r.kt)("inlineCode",{parentName:"p"},"::at(address: Address)")," method, as shown above.\nThe reference implements all the public endpoints to the contract (those marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),"\nimpl), alongside couple methods:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"at(Address) -> Self")," - points the reference to an Address"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"address() -> Address")," - returns the Address the reference is currently pointing at"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"with_tokens(Amount) -> Self")," - attaches Amount of native tokens to the next call")),(0,r.kt)("h1",{id:"external-contracts"},"External Contracts"),(0,r.kt)("p",null,"Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI."),(0,r.kt)("p",null,"For that purpose, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra:external_contract]")," macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of."),(0,r.kt)("p",null,"Let's pretend the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," we defined is an external contract. There is a contract with ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function that adds two numbers somewhere."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"#[odra::external_contract]\npub trait Adder {\n fn add(&self, n1: u32, n2: u32) -> u32;\n}\n")),(0,r.kt)("p",null,"Analogously to modules, Odra creates the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderRef")," struct (but do not create the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderDeployer"),"). Having an address we can call:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"AdderRef::at(address).add(3, 5)\n")),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Let's see how we can test our cross calls using this knowledge:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"use super::{CrossContractDeployer, MathEngineDeployer};\n\n#[test]\nfn test_cross_calls() {\n let math_engine_contract = MathEngineDeployer::default();\n let cross_contract = CrossContractDeployer::init(math_engine_contract.address());\n\n assert_eq!(cross_contract.add_using_another(), 8);\n}\n")),(0,r.kt)("p",null,"Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function we want to use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"#[cfg(test)]\nmod tests {\n use odra::types::Address;\n use crate::features::cross_calls::{Adder, AdderRef};\n \n #[test]\n fn test_ext() {\n let adder = AdderRef::at(get_adder_address());\n\n assert_eq!(adder.add(1, 2), 3);\n }\n\n fn get_adder_address() -> Address {\n let contract = MathEngineDeployer::default();\n contract.address()\n }\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/4279e616.c84971cf.js b/docs/assets/js/4279e616.c84971cf.js new file mode 100644 index 000000000..40669381a --- /dev/null +++ b/docs/assets/js/4279e616.c84971cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2890],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},82177:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},i="Odra framework",s={unversionedId:"intro",id:"version-0.5.0/intro",title:"Odra framework",description:"Odra Docs",source:"@site/versioned_docs/version-0.5.0/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/0.5.0/",draft:!1,tags:[],version:"0.5.0",sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},sidebar:"tutorialSidebar",next:{title:"Getting started",permalink:"/docs/0.5.0/category/getting-started"}},c={image:r(76054).Z},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"odra-framework"},"Odra framework"),(0,o.kt)("p",null,"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean,\npragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract\ndevelopment, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open\nsource."),(0,o.kt)("p",null,"Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains."),(0,o.kt)("p",null,"A smart contract written using Odra can be executed on all integrated systems. We can do it\nby abstracting over core concepts that all the above systems are built around. These are type system,\nstorage, entry points, execution context, and testing environment. We believe it will bring standardization\nto the development of Rust-based smart contracts and enable code reusability we have not yet seen in this\necosystem."),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.5.0/getting-started/installation"},"Installation")," and our ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.5.0/getting-started/flipper"},"Flipper example"),"\nto find out how to start your new project with Odra."))}d.isMDXComponent=!0},76054:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/42eeae87.096ead6a.js b/docs/assets/js/42eeae87.096ead6a.js new file mode 100644 index 000000000..18e6c0b70 --- /dev/null +++ b/docs/assets/js/42eeae87.096ead6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5866],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=o,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||s;return n?r.createElement(f,a(a({ref:t},c),{},{components:n})):r.createElement(f,a({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,a=new Array(s);a[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var u=2;u<s;u++)a[u]=n[u];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},83948:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var r=n(87462),o=(n(67294),n(3905));const s={sidebar_position:11,description:"Divide your code into modules"},a="Modules",i={unversionedId:"basics/modules",id:"version-0.7.0/basics/modules",title:"Modules",description:"Divide your code into modules",source:"@site/versioned_docs/version-0.7.0/basics/11-modules.md",sourceDirName:"basics",slug:"/basics/modules",permalink:"/docs/basics/modules",draft:!1,tags:[],version:"0.7.0",sidebarPosition:11,frontMatter:{sidebar_position:11,description:"Divide your code into modules"},sidebar:"tutorialSidebar",previous:{title:"Cross calls",permalink:"/docs/basics/cross-calls"},next:{title:"Native token",permalink:"/docs/basics/native-token"}},l={},u=[{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:u};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you\nwrite is also a module, thanks to a macro ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),'. This means that we can easily rewrite our math\nexample from the previous article, to use a single contract, but still separate our "math" code:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/modules.rs"',title:'"examples/src/features/modules.rs"'},"use crate::features::cross_calls::MathEngine;\n\n#[odra::module]\npub struct ModulesContract {\n pub math_engine: MathEngine,\n}\n\n#[odra::module]\nimpl ModulesContract {\n pub fn add_using_module(&self) -> u32 {\n self.math_engine.add(3, 5)\n }\n}\n")),(0,o.kt)("p",null,"Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as\na module!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"As we don't need to hold addresses, the test is really simple:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/modules.rs"',title:'"examples/src/features/modules.rs"'},"use super::ModulesContractDeployer;\n\n#[test]\nfn test_modules() {\n let modules_contract = ModulesContractDeployer::default();\n assert_eq!(modules_contract.add_using_module(), 8);\n}\n")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will see how to handle native token transfers."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/42fe661b.47c7f34d.js b/docs/assets/js/42fe661b.47c7f34d.js new file mode 100644 index 000000000..f37acb39a --- /dev/null +++ b/docs/assets/js/42fe661b.47c7f34d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[800],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=a,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},96841:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:3,description:"Odra's configuration file"},i="Odra.toml",l={unversionedId:"basics/odra-toml",id:"version-0.5.0/basics/odra-toml",title:"Odra.toml",description:"Odra's configuration file",source:"@site/versioned_docs/version-0.5.0/basics/03-odra-toml.md",sourceDirName:"basics",slug:"/basics/odra-toml",permalink:"/docs/0.5.0/basics/odra-toml",draft:!1,tags:[],version:"0.5.0",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"Odra's configuration file"},sidebar:"tutorialSidebar",previous:{title:"Directory structure",permalink:"/docs/0.5.0/basics/directory-structure"},next:{title:"Flipper Internals",permalink:"/docs/0.5.0/basics/flipper-internals"}},c={},s=[{value:"Adding a new contract manually",id:"adding-a-new-contract-manually",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"As mentioned in the previous article, ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," is a file that contains information about all the contracts\nthat Odra will build. Let's take a look at the file structure again:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," will be used as a name for the contract - the generated wasm file will be in the above case named\n",(0,a.kt)("inlineCode",{parentName:"p"},"flipper.wasm"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) is used by the builder to locate the exact struct where\nthe contract is defined."),(0,a.kt)("h2",{id:"adding-a-new-contract-manually"},"Adding a new contract manually"),(0,a.kt)("p",null,"Besides using the ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command, you can add a new contract to be compiled by hand.\nTo do this, add another ",(0,a.kt)("inlineCode",{parentName:"p"},"[[contracts]]")," element, name it and make sure that the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," is set correctly."),(0,a.kt)("p",null,"For example, if you want to create a new contract called ",(0,a.kt)("inlineCode",{parentName:"p"},"counter"),", your ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file should finally\nlook like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n\n[[contracts]]\nname = "counter"\nfqn = "sample::Counter"\n')),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous\n",(0,a.kt)("inlineCode",{parentName:"p"},"Flipper")," contract."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/43e47b8e.118fb83f.js b/docs/assets/js/43e47b8e.118fb83f.js new file mode 100644 index 000000000..87ccc34f8 --- /dev/null +++ b/docs/assets/js/43e47b8e.118fb83f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9108],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),h=a,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(k,i(i({ref:t},d),{},{components:n})):r.createElement(k,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},10195:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},i="MockVM",c={unversionedId:"backends/mock-vm",id:"version-0.4.0/backends/mock-vm",title:"MockVM",description:"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing",source:"@site/versioned_docs/version-0.4.0/backends/02-mock-vm.md",sourceDirName:"backends",slug:"/backends/mock-vm",permalink:"/docs/0.4.0/backends/mock-vm",draft:!1,tags:[],version:"0.4.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What is a backend?",permalink:"/docs/0.4.0/backends/what-is-a-backend"},next:{title:"Casper",permalink:"/docs/0.4.0/backends/casper"}},s={},l=[{value:"Usage",id:"usage",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Execution",id:"execution",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mockvm"},"MockVM"),(0,a.kt)("p",null,"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing\nthe code written in Odra without compiling the contract to the target architecture and spinning up the\nblockchain."),(0,a.kt)("p",null,"Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler."),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The MockVM is the default backend for Odra framework, so each time you run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,a.kt)("p",null,"You are running your code against it."),(0,a.kt)("h2",{id:"architecture"},"Architecture"),(0,a.kt)("p",null,"MockVM consists of two main parts: the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," and the ",(0,a.kt)("inlineCode",{parentName:"p"},"State"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," is just a list of contracts deployed onto the MockVM, identified by an ",(0,a.kt)("inlineCode",{parentName:"p"},"Address"),".\nEach time we call the contract, we call its instance stored in the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register"),"."),(0,a.kt)("p",null,"Contracts and Test Env functions can modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"State")," of the MockVM."),(0,a.kt)("p",null,'Contrary to the "real" backend, which holds the whole history of the blockchain,\nthe MockVM ',(0,a.kt)("inlineCode",{parentName:"p"},"State")," holds only the current state of the MockVM.\nThanks to this and the fact that we do not need the blockchain itself,\nMockVM starts instantly and runs the tests in the native speed."),(0,a.kt)("h2",{id:"execution"},"Execution"),(0,a.kt)("p",null,"When the MockVM backend is enabled, the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro is responsible for converting\nyour ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions into a list of Entrypoints, which are put into a Contract Container.\nWhen the contract is deployed, its Container registered into a Registry under an address.\nDuring the contract call, MockVM finds an Entrypoint and executes the code."),(0,a.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[Contract Container];\n id2[Contract Container]--\x3eid3((Contract Registry))\n id3((Contract Registry))--\x3eid4[(MockVM Execution)]"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/448060b1.1769ff8c.js b/docs/assets/js/448060b1.1769ff8c.js new file mode 100644 index 000000000..d85adb0ce --- /dev/null +++ b/docs/assets/js/448060b1.1769ff8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2081],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},18382:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},l="Flipper example",i={unversionedId:"getting-started/flipper",id:"version-0.4.0/getting-started/flipper",title:"Flipper example",description:"To quickly start working with Odra, take a look at the following code sample. If you followed the",source:"@site/versioned_docs/version-0.4.0/getting-started/flipper.md",sourceDirName:"getting-started",slug:"/getting-started/flipper",permalink:"/docs/0.4.0/getting-started/flipper",draft:!1,tags:[],version:"0.4.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/docs/0.4.0/getting-started/installation"},next:{title:"Basics",permalink:"/docs/0.4.0/category/basics"}},s={},p=[{value:"Let's flip",id:"lets-flip",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-example"},"Flipper example"),(0,a.kt)("p",null,"To quickly start working with Odra, take a look at the following code sample. If you followed the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.4.0/getting-started/installation"},"Installation")," tutorial, you should have this file already at ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),"."),(0,a.kt)("p",null,"For further explanation of how this code works, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/flipper-internals"},"Flipper Internals"),"."),(0,a.kt)("h2",{id:"lets-flip"},"Let's flip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs" showLineNumbers',title:'"flipper.rs"',showLineNumbers:!0},"use odra::Variable;\n\n/// A module definition. Each module struct consists Variables and Mappings\n/// or/and another modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value, \n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n\n/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n /// Retrieves value from the storage. \n /// If the value has never been set, the default value is returned.\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n\n #[test]\n fn test_two_flippers() {\n let mut contract1 = FlipperDeployer::initial_settings();\n let contract2 = FlipperDeployer::initial_settings();\n assert!(!contract1.get());\n assert!(!contract2.get());\n contract1.flip();\n assert!(contract1.get());\n assert!(!contract2.get());\n }\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next category of articles, we will go through basic concepts of Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/45990ab7.325a3e5a.js b/docs/assets/js/45990ab7.325a3e5a.js new file mode 100644 index 000000000..e4ce2a68f --- /dev/null +++ b/docs/assets/js/45990ab7.325a3e5a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8088],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),c=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||s;return a?n.createElement(h,o(o({ref:t},p),{},{components:a})):n.createElement(h,o({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,o=new Array(s);o[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var c=2;c<s;c++)o[c]=a[c];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},90119:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const s={sidebar_position:3},o="Casper",i={unversionedId:"backends/casper",id:"version-0.3.1/backends/casper",title:"Casper",description:"The Casper backend allows you to compile your contracts into WASM files which can be deployed",source:"@site/versioned_docs/version-0.3.1/backends/03-casper.md",sourceDirName:"backends",slug:"/backends/casper",permalink:"/docs/0.3.1/backends/casper",draft:!1,tags:[],version:"0.3.1",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"MockVM",permalink:"/docs/0.3.1/backends/mock-vm"},next:{title:"Examples",permalink:"/docs/0.3.1/category/examples"}},l={},c=[{value:"Types",id:"types",level:2},{value:"Contract Env",id:"contract-env",level:2},{value:"Events",id:"events",level:3},{value:"Payable",id:"payable",level:3},{value:"Revert",id:"revert",level:3},{value:"Context",id:"context",level:3},{value:"Test Env",id:"test-env",level:2},{value:"Usage",id:"usage",level:2},{value:"Constructors",id:"constructors",level:2},{value:"Execution",id:"execution",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"casper"},"Casper"),(0,r.kt)("p",null,"The Casper backend allows you to compile your contracts into WASM files which can be deployed\nonto ",(0,r.kt)("a",{parentName:"p",href:"https://casper.network/"},"Casper Blockchain"),"\nand lets you to easily run them against ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-execution-engine"},"Casper's Execution Engine")," locally."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"A struct to be written into the storage must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait OdraType: \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("p",null,"The other exposed types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CallArgs")," - wraps around casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},(0,r.kt)("inlineCode",{parentName:"a"},"RuntimeArgs")),";"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," - U512 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"BlockTime")," - u64 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Address")," - an enum that encapsulates casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/account/struct.AccountHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"AccountHash"))," and ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/struct.ContractPackageHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ContractPackageHash")))),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances."),(0,r.kt)("h3",{id:"events"},"Events"),(0,r.kt)("p",null,"An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've\nalready learned from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.1/basics/events"},"events article"),", in Odra you emit an event, similarly, you would do it in ",(0,r.kt)("a",{parentName:"p",href:"https://docs.soliditylang.org/en/v0.8.15/contracts.html#example"},"Solidity"),"."),(0,r.kt)("p",null,"Under the hood, Odra integrates with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/make-software/casper-event-standard"},"Casper Event Standard")," and creates a few ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/struct.URef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"URef"),"s")," in the global state when a contract is being installed:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events")," - a dictionary that stores events' data."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_length")," - the evens count."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_ces_version")," - the version of ",(0,r.kt)("inlineCode",{parentName:"li"},"Casper Event Standard"),". "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_schema")," - a dictionary that stores event schemas.")),(0,r.kt)("p",null,"Besides that, all the events the contract emits are registered - events schemas are written to the storage under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__events_schema")," key."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Don't forget to expose events in the module using ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module(events = [...])]"),". ")),(0,r.kt)("p",null,"So, ",(0,r.kt)("inlineCode",{parentName:"p"},"Events")," are nothing different from any other data stored by a contract."),(0,r.kt)("p",null,"A struct to be an event must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"SerializableEvent")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait SerializableEvent: \n odra_types::event::OdraEvent + \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("h3",{id:"payable"},"Payable"),(0,r.kt)("p",null,"The first Odra idiom is a ",(0,r.kt)("inlineCode",{parentName:"p"},"Contract Main Purse"),". It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper ",(0,r.kt)("inlineCode",{parentName:"p"},"URef")," and a purse are created and stored under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse")," key."),(0,r.kt)("p",null,"Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo Purse"),". It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse."),(0,r.kt)("p",null,"Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable.\nIf under the way something goes wrong with the transfer, the contract reverts."),(0,r.kt)("p",null,"The transferred amount can be read inside the contract by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Odra expects the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," runtime argument to be attached to a contract call.")),(0,r.kt)("h3",{id:"revert"},"Revert"),(0,r.kt)("p",null,"In Casper, we can stop the execution pretty straightforwardly - call the ",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::revert()"),".\nOdra adds an extra abstraction layer - in a contract ",(0,r.kt)("inlineCode",{parentName:"p"},"ExecutionError"),"s are defined, which ultimately are transformed into Casper's ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/enum.ApiError.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ApiError::User")),"."),(0,r.kt)("h3",{id:"context"},"Context"),(0,r.kt)("p",null,"Casper equips developers with very low-level tooling, which can be cumbersome for newcomers.\nIf you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_address()")," function takes the first element of the callstack (",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-contract/latest/casper_contract/contract_api/runtime/fn.get_call_stack.html"},(0,r.kt)("inlineCode",{parentName:"a"},"runtime::get_call_stack()")),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::caller()")," function takes the second element of the call stack (",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::get_call_stack()"),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"As mentioned in the ","[Payable]"," section, to store CSPR, each contract creates its purse. To read the contract balance, you call ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_balance"),", which checks the balance of the purse stored under ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse"),"."),(0,r.kt)("h2",{id:"test-env"},"Test Env"),(0,r.kt)("p",null,"Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Casper Execution Engine"),"."),(0,r.kt)("p",null,"In your test, you can freely switch execution context by setting as a caller (",(0,r.kt)("inlineCode",{parentName:"p"},"test_env::set_caller()"),") one of the 20 predefined accounts. Each account possesses the default amount of ",(0,r.kt)("inlineCode",{parentName:"p"},"Motes")," (100_000_000_000_000_000)."),(0,r.kt)("p",null,"The Test Env internally keeps track of the current ",(0,r.kt)("inlineCode",{parentName:"p"},"block time"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"error")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"attached value"),"."),(0,r.kt)("p",null,"Each test is executed on a fresh instance of the Test Env."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Name of the Casper backend in Odra is ",(0,r.kt)("inlineCode",{parentName:"p"},"casper"),", so to run the tests against it, simply pass it as a ",(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\nparameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"If you want to just generate a wasm file, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("h2",{id:"constructors"},"Constructors"),(0,r.kt)("p",null,"Let's define a basic Odra module that includes a constructor:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\nstruct Counter {\n value: Variable<u32>\n}\n\n#[odra::module]\nimpl Counter {\n #[odra(init)]\n pub initialize(&mut self, value: u32) {\n self.value.set(value);\n }\n}\n")),(0,r.kt)("p",null,"Read more about constructors ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.1/advanced/attributes#init"},"here"),"."),(0,r.kt)("p",null,"To deploy your contract with a constructor using ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client"),", you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"constructor")," argument with a value of ",(0,r.kt)("inlineCode",{parentName:"p"},"initialize")," - this represents the name of the constructor function. Additionally, you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," argument, which sets the arbitrary initial value for the counter."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 5000000000000 \\\n --session-path ./wasm/counter.wasm \\\n --session-arg "constructor:string:\'initialize\'" \\\n --session-arg "value:u32:42" \n')),(0,r.kt)("p",null,"For a more in-depth tutorial, please refer to the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.casper.network/writing-contracts/"},"Casper's 'Writing On-Chain Code'"),"."),(0,r.kt)("h2",{id:"execution"},"Execution"),(0,r.kt)("p",null,"First thing Odra does with your code, is similar to the one used in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.1/backends/mock-vm"},"MockVM")," -\na list of entrypoints is generated, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[IR];\n id2[IR]--\x3eid3((WASM))\n id3((WASM))--\x3eid4[(Local Casper\\nExecution Engine)]\n id3((WASM))--\x3eid5[(Casper Network)]"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/473b33d6.267b74de.js b/docs/assets/js/473b33d6.267b74de.js new file mode 100644 index 000000000..09d376884 --- /dev/null +++ b/docs/assets/js/473b33d6.267b74de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4050],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),h=a,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(k,i(i({ref:t},d),{},{components:n})):r.createElement(k,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},48265:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},i="MockVM",c={unversionedId:"backends/mock-vm",id:"version-0.6.0/backends/mock-vm",title:"MockVM",description:"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing",source:"@site/versioned_docs/version-0.6.0/backends/02-mock-vm.md",sourceDirName:"backends",slug:"/backends/mock-vm",permalink:"/docs/0.6.0/backends/mock-vm",draft:!1,tags:[],version:"0.6.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What is a backend?",permalink:"/docs/0.6.0/backends/what-is-a-backend"},next:{title:"Casper",permalink:"/docs/0.6.0/backends/casper"}},s={},l=[{value:"Usage",id:"usage",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Execution",id:"execution",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mockvm"},"MockVM"),(0,a.kt)("p",null,"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing\nthe code written in Odra without compiling the contract to the target architecture and spinning up the\nblockchain."),(0,a.kt)("p",null,"Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler."),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The MockVM is the default backend for Odra framework, so each time you run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,a.kt)("p",null,"You are running your code against it."),(0,a.kt)("h2",{id:"architecture"},"Architecture"),(0,a.kt)("p",null,"MockVM consists of two main parts: the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," and the ",(0,a.kt)("inlineCode",{parentName:"p"},"State"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," is just a list of contracts deployed onto the MockVM, identified by an ",(0,a.kt)("inlineCode",{parentName:"p"},"Address"),".\nEach time we call the contract, we call its instance stored in the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register"),"."),(0,a.kt)("p",null,"Contracts and Test Env functions can modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"State")," of the MockVM."),(0,a.kt)("p",null,'Contrary to the "real" backend, which holds the whole history of the blockchain,\nthe MockVM ',(0,a.kt)("inlineCode",{parentName:"p"},"State")," holds only the current state of the MockVM.\nThanks to this and the fact that we do not need the blockchain itself,\nMockVM starts instantly and runs the tests in the native speed."),(0,a.kt)("h2",{id:"execution"},"Execution"),(0,a.kt)("p",null,"When the MockVM backend is enabled, the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro is responsible for converting\nyour ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions into a list of Entrypoints, which are put into a Contract Container.\nWhen the contract is deployed, its Container registered into a Registry under an address.\nDuring the contract call, MockVM finds an Entrypoint and executes the code."),(0,a.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[Contract Container];\n id2[Contract Container]--\x3eid3((Contract Registry))\n id3((Contract Registry))--\x3eid4[(MockVM Execution)]"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/48d43fc1.909d4d76.js b/docs/assets/js/48d43fc1.909d4d76.js new file mode 100644 index 000000000..852c100c9 --- /dev/null +++ b/docs/assets/js/48d43fc1.909d4d76.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6611],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=a,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(h,i(i({ref:t},c),{},{components:n})):r.createElement(h,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p<o;p++)i[p]=n[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},85279:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:4,description:"Detailed explanation of the Flipper contract"},i="Flipper Internals",l={unversionedId:"basics/flipper-internals",id:"basics/flipper-internals",title:"Flipper Internals",description:"Detailed explanation of the Flipper contract",source:"@site/docs/basics/04-flipper-internals.md",sourceDirName:"basics",slug:"/basics/flipper-internals",permalink:"/docs/next/basics/flipper-internals",draft:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Detailed explanation of the Flipper contract"},sidebar:"tutorialSidebar",previous:{title:"Odra.toml",permalink:"/docs/next/basics/odra-toml"},next:{title:"Storage interaction",permalink:"/docs/next/basics/storage-interaction"}},s={},p=[{value:"Header",id:"header",level:2},{value:"Struct",id:"struct",level:2},{value:"Impl",id:"impl",level:2},{value:"Tests",id:"tests",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-internals"},"Flipper Internals"),(0,a.kt)("p",null,"In this article, we take a deep dive into the code shown in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/next/getting-started/flipper"},"Flipper example"),", where we will explain in more detail all\nthe Odra-specific sections of the code."),(0,a.kt)("h2",{id:"header"},"Header"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"use odra::Var;\n")),(0,a.kt)("p",null,"Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation\nthat can be reused between targets. In the above case, we're importing ",(0,a.kt)("inlineCode",{parentName:"p"},"Var"),", which is responsible\nfor storing simple values on the blockchain's storage."),(0,a.kt)("h2",{id:"struct"},"Struct"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// A module definition. Each module struct consists of Vars and Mappings\n/// or/and other modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value,\n /// it's a proxy that writes/reads value to/from the host.\n value: Var<bool>,\n}\n")),(0,a.kt)("p",null,"In Odra, all contracts are also modules, which can be reused between contracts. That's why we need\nto mark the struct with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. In the struct definition itself, we state all\nthe fields of the contract. Those fields can be regular Rust data types, however - those will not\nbe persisted on the blockchain. They can also be Odra modules - defined in your project or coming\nfrom Odra itself. Finally, to make the data persistent on the blockchain, you can use something like\n",(0,a.kt)("inlineCode",{parentName:"p"},"Var<T>")," showed above. To learn more about storage interaction, take a look at the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/next/basics/storage-interaction"},"next article"),"."),(0,a.kt)("h2",{id:"impl"},"Impl"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n pub fn init(&mut self) {\n self.value.set(false);\n }\n ...\n")),(0,a.kt)("p",null,"Similarly to the struct, we mark the ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. Odra will take all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from this section and create contract endpoints from them. So, if you wish to have\nfunctions that are not available for calling outside the contract, do not make them public. Alternatively,\nyou can create a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section without the macro - all functions defined there, even marked\nwith ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," will be not callable."),(0,a.kt)("p",null,"The function named ",(0,a.kt)("inlineCode",{parentName:"p"},"init")," is the constructor of the contract. This function will be limited to only\nto a single call, all further calls to it will result in an error. The ",(0,a.kt)("inlineCode",{parentName:"p"},"init")," function is optional,\nif your contract does not need any initialization, you can skip it."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'}," ...\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n ...\n")),(0,a.kt)("p",null,"The endpoints above show you how to interact with the simplest type of storage - ",(0,a.kt)("inlineCode",{parentName:"p"},"Var<T>"),". The data\nsaved there using ",(0,a.kt)("inlineCode",{parentName:"p"},"set")," function will be persisted in the blockchain."),(0,a.kt)("h2",{id:"tests"},"Tests"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperHostRef;\n use odra::host::{Deployer, NoArgs};\n\n #[test]\n fn flipping() {\n let env = odra_test::env();\n // To test a module we need to deploy it. Autogenerated `FlipperHostRef`\n // implements `Deployer` trait, so we can use it to deploy the module.\n let mut contract = FlipperHostRef::deploy(&env, NoArgs);\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n ...\n")),(0,a.kt)("p",null,"You can write tests in any way you prefer and know in Rust. In the example above we are deploying the\ncontract using ",(0,a.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/host/trait.Deployer.html#tymethod.deploy"},(0,a.kt)("inlineCode",{parentName:"a"},"Deployer::deploy"))," function called on ",(0,a.kt)("inlineCode",{parentName:"p"},"FlipperHostRef")," - a piece of code generated\nby the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),". Because the module implements the constructor but does not accept any arguments,\nas the second argument of the deploy function, we pass ",(0,a.kt)("inlineCode",{parentName:"p"},"NoArgs")," - one of the implementations of\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/host/trait.InitArgs.html"},(0,a.kt)("inlineCode",{parentName:"a"},"InitArgs"))," trait provided with the framework. "),(0,a.kt)("p",null,"The contract will be deployed on the VM you chose while running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now let's take a look at the different types of storage that Odra provides and how to use them."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/496b44fb.03522ed5.js b/docs/assets/js/496b44fb.03522ed5.js new file mode 100644 index 000000000..8e5cb3d57 --- /dev/null +++ b/docs/assets/js/496b44fb.03522ed5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4266],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return t?r.createElement(f,l(l({ref:n},d),{},{components:t})):r.createElement(f,l({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u<a;u++)l[u]=t[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},45352:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:3},l="OwnedToken",i={unversionedId:"tutorials/owned-token",id:"version-0.4.0/tutorials/owned-token",title:"OwnedToken",description:"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.",source:"@site/versioned_docs/version-0.4.0/tutorials/owned-token.md",sourceDirName:"tutorials",slug:"/tutorials/owned-token",permalink:"/docs/0.4.0/tutorials/owned-token",draft:!1,tags:[],version:"0.4.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"ERC-20",permalink:"/docs/0.4.0/tutorials/erc20"}},s={},u=[{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:3},{value:"Delegation",id:"delegation",level:3},{value:"Summary",id:"summary",level:2}],d={toc:u};function c(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ownedtoken"},"OwnedToken"),(0,o.kt)("p",null,"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"What should our module be capable of?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Conform the Erc20 interface."),(0,o.kt)("li",{parentName:"ol"},"Allow minting tokens but only the module owner."),(0,o.kt)("li",{parentName:"ol"},"The current owner should be able to designate a new owner.")),(0,o.kt)("h3",{id:"module-definition"},"Module definition"),(0,o.kt)("p",null,"Let's define a module called ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedToken")," that is a composition of ",(0,o.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Erc20")," modules."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n")),(0,o.kt)("p",null,"As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!"),(0,o.kt)("h3",{id:"delegation"},"Delegation"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use odra::types::{Address, Balance}\n\n...\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n self.erc20.approve(spender, amount);\n }\n\n pub fn get_owner(&self) -> Address {\n self.ownable.get_owner()\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ownable.change_ownership(new_owner);\n }\n\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.ownable.ensure_ownership(&contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,o.kt)("p",null,"Easy. However, there are a few worth mentioning subtleness:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L11")," - A constructor is a great place to init both modules at once. "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L14-L16")," - Most of the entrypoints do not need any modification, so we simply delegates them to the ",(0,o.kt)("inlineCode",{parentName:"li"},"erc20")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L52")," - The same we do with the ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L58-L61")," - Minting should not be unconditional, we need some control over it. First, using ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," we make sure the ",(0,o.kt)("inlineCode",{parentName:"li"},"caller")," really is the owner.")),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/4972.ddc2c974.js b/docs/assets/js/4972.ddc2c974.js new file mode 100644 index 000000000..acd9914e1 --- /dev/null +++ b/docs/assets/js/4972.ddc2c974.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4972],{4972:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(67294),l=a(95999),o=a(1944),r=a(16963);function i(){return n.createElement(n.Fragment,null,n.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),n.createElement(r.Z,null,n.createElement("main",{className:"container margin-vert--xl"},n.createElement("div",{className:"row"},n.createElement("div",{className:"col col--6 col--offset-3"},n.createElement("h1",{className:"hero__title"},n.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),n.createElement("p",null,n.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),n.createElement("p",null,n.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/docs/assets/js/4a070847.6f83ba1e.js b/docs/assets/js/4a070847.6f83ba1e.js new file mode 100644 index 000000000..5447ffc33 --- /dev/null +++ b/docs/assets/js/4a070847.6f83ba1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[357],{36834:e=>{e.exports=JSON.parse('{"title":"Examples","description":"Examples","slug":"/category/examples","permalink":"/docs/category/examples","navigation":{"previous":{"title":"Casper","permalink":"/docs/backends/casper"},"next":{"title":"odra-examples","permalink":"/docs/examples/odra-examples"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/4cd738bd.815dbdce.js b/docs/assets/js/4cd738bd.815dbdce.js new file mode 100644 index 000000000..1cabb9ca9 --- /dev/null +++ b/docs/assets/js/4cd738bd.815dbdce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8322],{84876:e=>{e.exports=JSON.parse('{"title":"Tutorials","description":"The theory is good, but the practice is even better. Let\'s go through a few examples summing up all the Odra concepts.","slug":"/category/tutorials","permalink":"/docs/category/tutorials","navigation":{"previous":{"title":"Using odra-modules","permalink":"/docs/examples/using-odra-modules"},"next":{"title":"Ownable","permalink":"/docs/tutorials/ownable"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/4da81bc4.8394f24c.js b/docs/assets/js/4da81bc4.8394f24c.js new file mode 100644 index 000000000..6a50f0084 --- /dev/null +++ b/docs/assets/js/4da81bc4.8394f24c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[663],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>c});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),m=u(t),c=r,w=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?a.createElement(w,o(o({ref:n},d),{},{components:t})):a.createElement(w,o({ref:n},d))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},52506:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=t(87462),r=(t(67294),t(3905));const i={sidebar_position:1},o="Ownable",l={unversionedId:"tutorials/ownable",id:"version-0.6.0/tutorials/ownable",title:"Ownable",description:"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.",source:"@site/versioned_docs/version-0.6.0/tutorials/ownable.md",sourceDirName:"tutorials",slug:"/tutorials/ownable",permalink:"/docs/0.6.0/tutorials/ownable",draft:!1,tags:[],version:"0.6.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Tutorials",permalink:"/docs/0.6.0/category/tutorials"},next:{title:"ERC-20",permalink:"/docs/0.6.0/tutorials/erc20"}},s={},u=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Define a module",id:"define-a-module",level:3},{value:"Init the module",id:"init-the-module",level:3},{value:"Features implementation",id:"features-implementation",level:3},{value:"Test",id:"test",level:3},{value:"Summary",id:"summary",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:u};function p(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features."),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"storing a single value,"),(0,r.kt)("li",{parentName:"ul"},"defining constructors,"),(0,r.kt)("li",{parentName:"ul"},"error handling,"),(0,r.kt)("li",{parentName:"ul"},"defining and emitting ",(0,r.kt)("inlineCode",{parentName:"li"},"events"),"."),(0,r.kt)("li",{parentName:"ul"},"registering a contact in a test environment,"),(0,r.kt)("li",{parentName:"ul"},"interactions with the test environment,"),(0,r.kt)("li",{parentName:"ul"},"assertions (value, events, errors assertions).")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Before we write any code, we define functionalities we would like to implement."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Module has an initializer that should be called once. "),(0,r.kt)("li",{parentName:"ol"},"Only the current owner can set a new owner."),(0,r.kt)("li",{parentName:"ol"},"Read the current owner."),(0,r.kt)("li",{parentName:"ol"},"A function that fails if called by a non-owner account.")),(0,r.kt)("h3",{id:"define-a-module"},"Define a module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{types::Address, Variable};\n\n#[odra::module]\npub struct Ownable {\n owner: Variable<Address>\n}\n")),(0,r.kt)("p",null,"That was easy, but it is crucial to understand the basic before we move on."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3")," - Firstly, we need create a struct called ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," and apply ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]")," to it above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),".")),(0,r.kt)("h3",{id:"init-the-module"},"Init the module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{\n execution_error, contract_env, Event, types::{Address, event::OdraEvent}\n};\n...\n\n#[odra::module]\nimpl Ownable {\n #[odra(init)]\n pub fn init(&mut self, owner: &Address) {\n if self.owner.get().is_some() {\n contract_env::revert(Error::OwnerIsAlreadyInitialized)\n }\n\n self.owner.set(*owner);\n \n OwnershipChanged {\n prev_owner: None,\n new_owner: *owner\n }\n .emit();\n }\n}\n\nexecution_error! {\n pub enum Error {\n OwnerIsNotInitialized => 1,\n }\n}\n\n#[derive(Event, Debug, PartialEq, Eq)]\npub struct OwnershipChanged {\n pub prev_owner: Option<Address>,\n pub new_owner: Address\n}\n")),(0,r.kt)("p",null,"Ok, we have done a couple of things, let's analyze them one by one:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," should be an odra module, so add ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function is marked as ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]")," making it a constructor. It matters if we would like to deploy the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," module as a standalone contract."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum. Notice that the ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum is defined inside the ",(0,r.kt)("inlineCode",{parentName:"li"},"execution_error")," macro. It generates, among others, the required ",(0,r.kt)("inlineCode",{parentName:"li"},"Into<ExecutionError>")," binding."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L9-L11")," - If the owner has been set already, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::revert()")," function. As an argument we pass ",(0,r.kt)("inlineCode",{parentName:"li"},"Error::OwnerIsNotInitialized"),". "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13")," - Then we write the owner passed as an argument to the storage. To do so we call the ",(0,r.kt)("inlineCode",{parentName:"li"},"set()")," on ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29-L33")," - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::Event"),". We highly recommend to derive ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PartialEq")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Eq")," for testing purpose."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Finally, we create the ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged")," struct and call ",(0,r.kt)("inlineCode",{parentName:"li"},"emit()")," function on it (import ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::types::event::OdraEvent")," trait). Hence we set the first owner, we set the ",(0,r.kt)("inlineCode",{parentName:"li"},"prev_owner")," value to ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".")),(0,r.kt)("h3",{id:"features-implementation"},"Features implementation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Ownable {\n ...\n\n pub fn ensure_ownership(&self, address: &Address) {\n if Some(address) != self.owner.get().as_ref() {\n contract_env::revert(Error::NotOwner)\n }\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ensure_ownership(&contract_env::caller());\n let current_owner = self.get_owner();\n self.owner.set(*new_owner);\n OwnershipChanged {\n prev_owner: Some(current_owner),\n new_owner: *new_owner\n }\n .emit();\n }\n\n pub fn get_owner(&self) -> Address {\n match self.owner.get() {\n Some(owner) => owner,\n None => contract_env::revert(Error::OwnerIsNotInitialized)\n }\n }\n}\n\nexecution_error! {\n pub enum Error {\n NotOwner => 1,\n OwnerIsAlreadyInitialized => 2,\n OwnerIsNotInitialized => 3,\n }\n}\n")),(0,r.kt)("p",null,"The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5,L32")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()")," is reads the current owner, and reverts if is does not match the input ",(0,r.kt)("inlineCode",{parentName:"li"},"Address"),". Also we need to update our ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum adding a new variant ",(0,r.kt)("inlineCode",{parentName:"li"},"NotOwner"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - The function defined above can be reused in ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()")," implementation. We pass to it the current caller, using the ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::caller()")," function. The we update the state, and emit ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L22,L34")," - Lastly, a getter function. As the ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable")," ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returns an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option"),", we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," variant ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnerIsNotInitialized"),".")),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[cfg(test)]\nmod tests {\n use super::*;\n use odra::{assert_events, test_env};\n\n fn setup() -> (Address, OwnableRef) {\n let owner = test_env::get_account(0);\n let ownable = OwnableDeployer::init(owner);\n (owner, ownable)\n }\n\n #[test]\n fn initialization_works() {\n let (owner, ownable) = setup();\n assert_eq!(ownable.get_owner(), owner);\n \n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n );\n }\n\n #[test]\n fn owner_can_change_ownership() {\n let (owner, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n \n test_env::set_caller(owner);\n ownable.change_ownership(&new_owner);\n assert_eq!(ownable.get_owner(), new_owner);\n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: Some(owner),\n new_owner\n }\n );\n }\n\n #[test]\n fn non_owner_cannot_change_ownership() {\n let (_, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n ownable.change_ownership(&new_owner);\n \n test_env::assert_exception(Error::NotOwner, || {\n ownable.change_ownership(&new_owner);\n });\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - Each test case starts with the same initialization process, so for convenience, we defined the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we call as the first statement in each test. Take a look at the signature ",(0,r.kt)("inlineCode",{parentName:"li"},"fn setup() -> (Address, OwnableRef)"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableRef")," is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"get_owner()"),", but not ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which is a constructor."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Now, the module needs an owner, the easiest way is to take one from the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env"),". We choose the address of first account (which is the default one)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L8")," - Odra created for us ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableDeployer")," struct which implements all constructor functions. In this case there is just one function - ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which corresponds the function we have implemented in the module."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - It is time to define the first test. As you see, it is a regular rust test."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L14-15")," - Using the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may have noticed, we use here the term ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," interchangeably with ",(0,r.kt)("inlineCode",{parentName:"p"},"contract"),". The reason is once we deploy our module onto a virtual blockchain it may be considered a contract."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L17-23")," - On the contract, only the ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events"),". As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30")," - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the ",(0,r.kt)("inlineCode",{parentName:"li"},"test env")," predefines 20 accounts."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L32")," - As mentioned, the default is the 0-th account, if you want to change the executor call the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::set_caller()")," function. ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The caller switch applies only the next contract interaction, the second call will be done as the default account."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L49-55")," - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::assert_exception()")," with the error you expect and a failing block of code.")),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next tutorial we will implement a ERC20 standard."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/4e50b37d.c19de7e6.js b/docs/assets/js/4e50b37d.c19de7e6.js new file mode 100644 index 000000000..1a0874fcd --- /dev/null +++ b/docs/assets/js/4e50b37d.c19de7e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1588],{64570:e=>{e.exports=JSON.parse('{"title":"Basics","description":"Basic concepts of Odra Framework","slug":"/category/basics","permalink":"/docs/0.4.0/category/basics","navigation":{"previous":{"title":"Flipper example","permalink":"/docs/0.4.0/getting-started/flipper"},"next":{"title":"Cargo Odra","permalink":"/docs/0.4.0/basics/cargo-odra"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/4f40819b.a65210d5.js b/docs/assets/js/4f40819b.a65210d5.js new file mode 100644 index 000000000..5c4a0baf1 --- /dev/null +++ b/docs/assets/js/4f40819b.a65210d5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[874],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,v=d["".concat(l,".").concat(m)]||d[m]||u[m]||s;return n?r.createElement(v,o(o({ref:t},p),{},{components:n})):r.createElement(v,o({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,o=new Array(s);o[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var c=2;c<s;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},74645:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const s={sidebar_position:9,description:"Creating and emitting Events"},o="Events",i={unversionedId:"basics/events",id:"version-0.5.0/basics/events",title:"Events",description:"Creating and emitting Events",source:"@site/versioned_docs/version-0.5.0/basics/09-events.md",sourceDirName:"basics",slug:"/basics/events",permalink:"/docs/0.5.0/basics/events",draft:!1,tags:[],version:"0.5.0",sidebarPosition:9,frontMatter:{sidebar_position:9,description:"Creating and emitting Events"},sidebar:"tutorialSidebar",previous:{title:"Errors",permalink:"/docs/0.5.0/basics/errors"},next:{title:"Cross calls",permalink:"/docs/0.5.0/basics/cross-calls"}},l={},c=[{value:"Testing events",id:"testing-events",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Different blockchains implement events in different ways. Odra lets you forget about it by introducing\nOdra Events. Take a look:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"use odra::{Event, contract_env};\nuse odra::types::{Address, BlockTime, event::OdraEvent};\n\n#[odra::module(events = [PartyStarted])]\npub struct PartyContract {\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n\n#[odra::module]\nimpl PartyContract {\n #[odra(init)]\n pub fn init(&self) {\n PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n }.emit();\n }\n}\n")),(0,a.kt)("p",null,"We defined a new contract, which emits an event called ",(0,a.kt)("inlineCode",{parentName:"p"},"PartyStarted")," when the contract is deployed.\nTo define an event, we derive an ",(0,a.kt)("inlineCode",{parentName:"p"},"Event")," macro like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n")),(0,a.kt)("p",null,"Among other things, it adds an ",(0,a.kt)("inlineCode",{parentName:"p"},"emit()")," function to the struct, which allows you to emit the event simply\nas that:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n}.emit();\n")),(0,a.kt)("p",null,"Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an ",(0,a.kt)("inlineCode",{parentName:"p"},"events")," attribute to the struct's ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. "),(0,a.kt)("p",null,"The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module."),(0,a.kt)("h2",{id:"testing-events"},"Testing events"),(0,a.kt)("p",null,"Odra's ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a handy macro ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_events!")," which lets you easily test the events that a given contract has emitted:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"use odra::{assert_events, test_env};\nuse crate::features::events::PartyStarted;\nuse super::PartyContractDeployer;\n\n#[test]\nfn test_party() {\n let party_contract = PartyContractDeployer::init();\n assert_events!(\n party_contract,\n PartyStarted {\n caller: test_env::get_account(0),\n block_time: 0,\n }\n );\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn how to call other contracts from the contract context."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/509c4227.47019aec.js b/docs/assets/js/509c4227.47019aec.js new file mode 100644 index 000000000..60db8b518 --- /dev/null +++ b/docs/assets/js/509c4227.47019aec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[723],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},61505:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,description:"How to get information from the Host"},i="Host Communication",s={unversionedId:"basics/communicating-with-host",id:"version-0.3.0/basics/communicating-with-host",title:"Host Communication",description:"How to get information from the Host",source:"@site/versioned_docs/version-0.3.0/basics/06-communicating-with-host.md",sourceDirName:"basics",slug:"/basics/communicating-with-host",permalink:"/docs/0.3.0/basics/communicating-with-host",draft:!1,tags:[],version:"0.3.0",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"How to get information from the Host"},sidebar:"defaultSidebar",previous:{title:"Storage interaction",permalink:"/docs/0.3.0/basics/storage-interaction"},next:{title:"Testing",permalink:"/docs/0.3.0/basics/testing"}},c={},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"host-communication"},"Host Communication"),(0,o.kt)("p",null,"One of the things that your contract will probably do is to query the host for some information -\nwhat is the current time? Who called me? Following example shows how to do this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/host.rs"',title:'"examples/src/docs/host.rs"'},"use odra::Variable;\nuse odra::types::{BlockTime, Address};\n\n#[odra::module]\npub struct HostContract {\n name: Variable<String>,\n created_at: Variable<BlockTime>,\n created_by: Variable<Address>,\n}\n\n#[odra::module]\nimpl HostContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.created_at.set(odra::contract_env::get_block_time());\n self.created_by.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n}\n")),(0,o.kt)("p",null,"As you can see, we are calling functions from ",(0,o.kt)("inlineCode",{parentName:"p"},"odra::contract_env"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"get_block_time()")," will return\nthe current block time wrapped in Odra type ",(0,o.kt)("inlineCode",{parentName:"p"},"BlockTime"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"caller()")," will return an Odra ",(0,o.kt)("inlineCode",{parentName:"p"},"Address")," of\na caller (this can be an external caller or another contract)."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will learn more functions that Odra exposes from host and types it uses in further articles.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"In the next article, we'll dive into testing your contracts with Odra, so you can check that the code\nwe presented in fact works!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/51bf83ad.aa19762a.js b/docs/assets/js/51bf83ad.aa19762a.js new file mode 100644 index 000000000..5147526a2 --- /dev/null +++ b/docs/assets/js/51bf83ad.aa19762a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7127],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>c});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),m=u(t),c=r,w=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?a.createElement(w,o(o({ref:n},d),{},{components:t})):a.createElement(w,o({ref:n},d))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},21740:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=t(87462),r=(t(67294),t(3905));const i={sidebar_position:1},o="Ownable",l={unversionedId:"tutorials/ownable",id:"version-0.4.0/tutorials/ownable",title:"Ownable",description:"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.",source:"@site/versioned_docs/version-0.4.0/tutorials/ownable.md",sourceDirName:"tutorials",slug:"/tutorials/ownable",permalink:"/docs/0.4.0/tutorials/ownable",draft:!1,tags:[],version:"0.4.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Tutorials",permalink:"/docs/0.4.0/category/tutorials"},next:{title:"ERC-20",permalink:"/docs/0.4.0/tutorials/erc20"}},s={},u=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Define a module",id:"define-a-module",level:3},{value:"Init the module",id:"init-the-module",level:3},{value:"Features implementation",id:"features-implementation",level:3},{value:"Test",id:"test",level:3},{value:"Summary",id:"summary",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:u};function p(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features."),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"storing a single value,"),(0,r.kt)("li",{parentName:"ul"},"defining constructors,"),(0,r.kt)("li",{parentName:"ul"},"error handling,"),(0,r.kt)("li",{parentName:"ul"},"defining and emitting ",(0,r.kt)("inlineCode",{parentName:"li"},"events"),"."),(0,r.kt)("li",{parentName:"ul"},"registering a contact in a test environment,"),(0,r.kt)("li",{parentName:"ul"},"interactions with the test environment,"),(0,r.kt)("li",{parentName:"ul"},"assertions (value, events, errors assertions).")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Before we write any code, we define functionalities we would like to implement."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Module has an initializer that should be called once. "),(0,r.kt)("li",{parentName:"ol"},"Only the current owner can set a new owner."),(0,r.kt)("li",{parentName:"ol"},"Read the current owner."),(0,r.kt)("li",{parentName:"ol"},"A function that fails if called by a non-owner account.")),(0,r.kt)("h3",{id:"define-a-module"},"Define a module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{types::Address, Variable};\n\n#[odra::module]\npub struct Ownable {\n owner: Variable<Address>\n}\n")),(0,r.kt)("p",null,"That was easy, but it is crucial to understand the basic before we move on."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3")," - Firstly, we need create a struct called ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," and apply ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]")," to it above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),".")),(0,r.kt)("h3",{id:"init-the-module"},"Init the module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{\n execution_error, contract_env, Event, types::{Address, event::OdraEvent}\n};\n...\n\n#[odra::module]\nimpl Ownable {\n #[odra(init)]\n pub fn init(&mut self, owner: &Address) {\n if self.owner.get().is_some() {\n contract_env::revert(Error::OwnerIsAlreadyInitialized)\n }\n\n self.owner.set(*owner);\n \n OwnershipChanged {\n prev_owner: None,\n new_owner: *owner\n }\n .emit();\n }\n}\n\nexecution_error! {\n pub enum Error {\n OwnerIsNotInitialized => 1,\n }\n}\n\n#[derive(Event, Debug, PartialEq, Eq)]\npub struct OwnershipChanged {\n pub prev_owner: Option<Address>,\n pub new_owner: Address\n}\n")),(0,r.kt)("p",null,"Ok, we have done a couple of things, let's analyze them one by one:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," should be an odra module, so add ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function is marked as ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]")," making it a constructor. It matters if we would like to deploy the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," module as a standalone contract."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum. Notice that the ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum is defined inside the ",(0,r.kt)("inlineCode",{parentName:"li"},"execution_error")," macro. It generates, among others, the required ",(0,r.kt)("inlineCode",{parentName:"li"},"Into<ExecutionError>")," binding."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L9-L11")," - If the owner has been set already, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::revert()")," function. As an argument we pass ",(0,r.kt)("inlineCode",{parentName:"li"},"Error::OwnerIsNotInitialized"),". "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13")," - Then we write the owner passed as an argument to the storage. To do so we call the ",(0,r.kt)("inlineCode",{parentName:"li"},"set()")," on ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29-L33")," - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::Event"),". We highly recommend to derive ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PartialEq")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Eq")," for testing purpose."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Finally, we create the ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged")," struct and call ",(0,r.kt)("inlineCode",{parentName:"li"},"emit()")," function on it (import ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::types::event::OdraEvent")," trait). Hence we set the first owner, we set the ",(0,r.kt)("inlineCode",{parentName:"li"},"prev_owner")," value to ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".")),(0,r.kt)("h3",{id:"features-implementation"},"Features implementation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Ownable {\n ...\n\n pub fn ensure_ownership(&self, address: &Address) {\n if Some(address) != self.owner.get().as_ref() {\n contract_env::revert(Error::NotOwner)\n }\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ensure_ownership(&contract_env::caller());\n let current_owner = self.get_owner();\n self.owner.set(*new_owner);\n OwnershipChanged {\n prev_owner: Some(current_owner),\n new_owner: *new_owner\n }\n .emit();\n }\n\n pub fn get_owner(&self) -> Address {\n match self.owner.get() {\n Some(owner) => owner,\n None => contract_env::revert(Error::OwnerIsNotInitialized)\n }\n }\n}\n\nexecution_error! {\n pub enum Error {\n NotOwner => 1,\n OwnerIsAlreadyInitialized => 2,\n OwnerIsNotInitialized => 3,\n }\n}\n")),(0,r.kt)("p",null,"The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5,L32")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()")," is reads the current owner, and reverts if is does not match the input ",(0,r.kt)("inlineCode",{parentName:"li"},"Address"),". Also we need to update our ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum adding a new variant ",(0,r.kt)("inlineCode",{parentName:"li"},"NotOwner"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - The function defined above can be reused in ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()")," implementation. We pass to it the current caller, using the ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::caller()")," function. The we update the state, and emit ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L22,L34")," - Lastly, a getter function. As the ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable")," ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returns an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option"),", we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," variant ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnerIsNotInitialized"),".")),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[cfg(test)]\nmod tests {\n use super::*;\n use odra::{assert_events, test_env};\n\n fn setup() -> (Address, OwnableRef) {\n let owner = test_env::get_account(0);\n let ownable = OwnableDeployer::init(owner);\n (owner, ownable)\n }\n\n #[test]\n fn initialization_works() {\n let (owner, ownable) = setup();\n assert_eq!(ownable.get_owner(), owner);\n \n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n );\n }\n\n #[test]\n fn owner_can_change_ownership() {\n let (owner, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n \n test_env::set_caller(owner);\n ownable.change_ownership(&new_owner);\n assert_eq!(ownable.get_owner(), new_owner);\n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: Some(owner),\n new_owner\n }\n );\n }\n\n #[test]\n fn non_owner_cannot_change_ownership() {\n let (_, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n ownable.change_ownership(&new_owner);\n \n test_env::assert_exception(Error::NotOwner, || {\n ownable.change_ownership(&new_owner);\n });\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - Each test case starts with the same initialization process, so for convenience, we defined the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we call as the first statement in each test. Take a look at the signature ",(0,r.kt)("inlineCode",{parentName:"li"},"fn setup() -> (Address, OwnableRef)"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableRef")," is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"get_owner()"),", but not ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which is a constructor."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Now, the module needs an owner, the easiest way is to take one from the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env"),". We choose the address of first account (which is the default one)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L8")," - Odra created for us ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableDeployer")," struct which implements all constructor functions. In this case there is just one function - ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which corresponds the function we have implemented in the module."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - It is time to define the first test. As you see, it is a regular rust test."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L14-15")," - Using the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may have noticed, we use here the term ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," interchangeably with ",(0,r.kt)("inlineCode",{parentName:"p"},"contract"),". The reason is once we deploy our module onto a virtual blockchain it may be considered a contract."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L17-23")," - On the contract, only the ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events"),". As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30")," - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the ",(0,r.kt)("inlineCode",{parentName:"li"},"test env")," predefines 20 accounts."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L32")," - As mentioned, the default is the 0-th account, if you want to change the executor call the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::set_caller()")," function. ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The caller switch applies only the next contract interaction, the second call will be done as the default account."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L49-55")," - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::assert_exception()")," with the error you expect and a failing block of code.")),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next tutorial we will implement a ERC20 standard."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/53726ad7.c28cc51c.js b/docs/assets/js/53726ad7.c28cc51c.js new file mode 100644 index 000000000..a65e7af92 --- /dev/null +++ b/docs/assets/js/53726ad7.c28cc51c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2288],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=o,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||s;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,a=new Array(s);a[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var c=2;c<s;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},11661:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(87462),o=(n(67294),n(3905));const s={sidebar_position:11,description:"Divide your code into modules"},a="Modules",i={unversionedId:"basics/modules",id:"version-0.3.0/basics/modules",title:"Modules",description:"Divide your code into modules",source:"@site/versioned_docs/version-0.3.0/basics/11-modules.md",sourceDirName:"basics",slug:"/basics/modules",permalink:"/docs/0.3.0/basics/modules",draft:!1,tags:[],version:"0.3.0",sidebarPosition:11,frontMatter:{sidebar_position:11,description:"Divide your code into modules"},sidebar:"defaultSidebar",previous:{title:"Cross calls",permalink:"/docs/0.3.0/basics/cross-calls"},next:{title:"Native token",permalink:"/docs/0.3.0/basics/native-token"}},l={},c=[{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you\nwrite is also a module, thanks to a macro ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),'. This means that we can easily rewrite our math\nexample from the previous article, to use a single contract, but still separate our "math" code:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/modules.rs"',title:'"examples/src/docs/modules.rs"'},"use crate::docs::cross_calls::MathEngine;\n\n#[odra::module]\npub struct ModulesContract {\n pub math_engine: MathEngine,\n}\n\n#[odra::module]\nimpl ModulesContract {\n pub fn add_using_module(&self) -> u32 {\n self.math_engine.add(3, 5)\n }\n}\n")),(0,o.kt)("p",null,"Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as\na module!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"As we don't need to hold addresses, the test is really simple:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/modules.rs"',title:'"examples/src/docs/modules.rs"'},"use super::ModulesContractDeployer;\n\n#[test]\nfn test_modules() {\n let modules_contract = ModulesContractDeployer::default();\n assert_eq!(modules_contract.add_using_module(), 8);\n}\n")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will see how to handle native token transfers."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/54dbc4b0.b3687542.js b/docs/assets/js/54dbc4b0.b3687542.js new file mode 100644 index 000000000..43ac75363 --- /dev/null +++ b/docs/assets/js/54dbc4b0.b3687542.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9186],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},36170:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},i="Odra framework",s={unversionedId:"intro",id:"version-0.6.0/intro",title:"Odra framework",description:"Odra Docs",source:"@site/versioned_docs/version-0.6.0/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/0.6.0/",draft:!1,tags:[],version:"0.6.0",sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},sidebar:"tutorialSidebar",next:{title:"Getting started",permalink:"/docs/0.6.0/category/getting-started"}},c={image:r(20764).Z},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"odra-framework"},"Odra framework"),(0,o.kt)("p",null,"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean,\npragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract\ndevelopment, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open\nsource."),(0,o.kt)("p",null,"Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains."),(0,o.kt)("p",null,"A smart contract written using Odra can be executed on all integrated systems. We can do it\nby abstracting over core concepts that all the above systems are built around. These are type system,\nstorage, entry points, execution context, and testing environment. We believe it will bring standardization\nto the development of Rust-based smart contracts and enable code reusability we have not yet seen in this\necosystem."),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.6.0/getting-started/installation"},"Installation")," and our ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.6.0/getting-started/flipper"},"Flipper example"),"\nto find out how to start your new project with Odra."))}d.isMDXComponent=!0},20764:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/54f44165.28fecf6a.js b/docs/assets/js/54f44165.28fecf6a.js new file mode 100644 index 000000000..72cde2cca --- /dev/null +++ b/docs/assets/js/54f44165.28fecf6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[152],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(n),g=r,m=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return n?a.createElement(m,l(l({ref:t},c),{},{components:n})):a.createElement(m,l({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},60681:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:1},l="Installation",i={unversionedId:"getting-started/installation",id:"getting-started/installation",title:"Installation",description:"Hello fellow Odra user! This page will guide you through the installation process.",source:"@site/docs/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/next/getting-started/installation",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Getting started",permalink:"/docs/next/category/getting-started"},next:{title:"Flipper example",permalink:"/docs/next/getting-started/flipper"}},s={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Cargo Odra",id:"installing-cargo-odra",level:2},{value:"Creating a new Odra project",id:"creating-a-new-odra-project",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"installation"},"Installation"),(0,r.kt)("p",null,"Hello fellow Odra user! This page will guide you through the installation process."),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"To start working with Odra, you need to have the following installed on your machine:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Rust toolchain installed (see ",(0,r.kt)("a",{parentName:"li",href:"https://rustup.rs/"},"rustup.rs"),")"),(0,r.kt)("li",{parentName:"ul"},"wasmstrip tool installed (see ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/WebAssembly/wabt"},"wabt"),")")),(0,r.kt)("p",null,"We do not provide exact commands for installing these tools, as they are different for different operating systems.\nPlease refer to the documentation of the tools themselves."),(0,r.kt)("p",null,"With Rust toolchain ready, you can add a new target:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"rustup target add wasm32-unknown-unknown\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"wasm32-unknown-unknown")," is a target that will be used by Odra to compile your smart contracts to WASM files.")),(0,r.kt)("h2",{id:"installing-cargo-odra"},"Installing Cargo Odra"),(0,r.kt)("p",null,"Cargo Odra is a helpful tool that will help you to build and test your smart contracts.\nIt is not required to use Odra, but the documentation will assume that you have it installed."),(0,r.kt)("p",null,"To install it, simply execute the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo install cargo-odra --locked\n")),(0,r.kt)("p",null,"To check if it was installed correctly and see available commands, type:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra --help\n")),(0,r.kt)("p",null,"If everything went fine, we can proceed to the next step."),(0,r.kt)("h2",{id:"creating-a-new-odra-project"},"Creating a new Odra project"),(0,r.kt)("p",null,"To create a new project, simply execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project && cd my_project\n")),(0,r.kt)("p",null,"This will create a new folder called ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project")," and initialize Odra there. Cargo Odra\nwill create a sample contract for you in ",(0,r.kt)("inlineCode",{parentName:"p"},"src")," directory. You can run the tests of this contract\nby executing:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"This will run tests using Odra's internal OdraVM. You can run those tests against a real backend, let's use CasperVM:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Congratulations!")," Now you are ready to create contracts using Odra framework! If you had any problems during\nthe installation process, feel free to ask for help on our ",(0,r.kt)("a",{parentName:"p",href:"https://discord.com/invite/Mm5ABc9P8k"},"Discord"),"."),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"If you want to see the code that you just tested, continue to the description of ",(0,r.kt)("a",{parentName:"p",href:"flipper"},"Flipper example"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/55362a87.fd0666c9.js b/docs/assets/js/55362a87.fd0666c9.js new file mode 100644 index 000000000..74d046925 --- /dev/null +++ b/docs/assets/js/55362a87.fd0666c9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9616],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>c});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),m=u(t),c=r,w=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?a.createElement(w,o(o({ref:n},d),{},{components:t})):a.createElement(w,o({ref:n},d))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},41096:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=t(87462),r=(t(67294),t(3905));const i={sidebar_position:1},o="Ownable",l={unversionedId:"tutorials/ownable",id:"version-0.3.0/tutorials/ownable",title:"Ownable",description:"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.",source:"@site/versioned_docs/version-0.3.0/tutorials/ownable.md",sourceDirName:"tutorials",slug:"/tutorials/ownable",permalink:"/docs/0.3.0/tutorials/ownable",draft:!1,tags:[],version:"0.3.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Tutorials",permalink:"/docs/0.3.0/category/tutorials"},next:{title:"ERC-20",permalink:"/docs/0.3.0/tutorials/erc20"}},s={},u=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Define a module",id:"define-a-module",level:3},{value:"Init the module",id:"init-the-module",level:3},{value:"Features implementation",id:"features-implementation",level:3},{value:"Test",id:"test",level:3},{value:"Summary",id:"summary",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:u};function p(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features."),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"storing a single value,"),(0,r.kt)("li",{parentName:"ul"},"defining constructors,"),(0,r.kt)("li",{parentName:"ul"},"error handling,"),(0,r.kt)("li",{parentName:"ul"},"defining and emitting ",(0,r.kt)("inlineCode",{parentName:"li"},"events"),"."),(0,r.kt)("li",{parentName:"ul"},"registering a contact in a test environment,"),(0,r.kt)("li",{parentName:"ul"},"interactions with the test environment,"),(0,r.kt)("li",{parentName:"ul"},"assertions (value, events, errors assertions).")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Before we write any code, we define functionalities we would like to implement."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Module has an initializer that should be called once. "),(0,r.kt)("li",{parentName:"ol"},"Only the current owner can set a new owner."),(0,r.kt)("li",{parentName:"ol"},"Read the current owner."),(0,r.kt)("li",{parentName:"ol"},"A function that fails if called by a non-owner account.")),(0,r.kt)("h3",{id:"define-a-module"},"Define a module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{types::Address, Variable};\n\n#[odra::module]\npub struct Ownable {\n owner: Variable<Address>\n}\n")),(0,r.kt)("p",null,"That was easy, but it is crucial to understand the basic before we move on."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3")," - Firstly, we need create a struct called ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," and apply ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]")," to it above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),".")),(0,r.kt)("h3",{id:"init-the-module"},"Init the module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{\n execution_error, contract_env, Event, types::{Address, event::OdraEvent}\n};\n...\n\n#[odra::module]\nimpl Ownable {\n #[odra(init)]\n pub fn init(&mut self, owner: &Address) {\n if self.owner.get().is_some() {\n contract_env::revert(Error::OwnerIsAlreadyInitialized)\n }\n\n self.owner.set(*owner);\n \n OwnershipChanged {\n prev_owner: None,\n new_owner: *owner\n }\n .emit();\n }\n}\n\nexecution_error! {\n pub enum Error {\n OwnerIsNotInitialized => 1,\n }\n}\n\n#[derive(Event, Debug, PartialEq, Eq)]\npub struct OwnershipChanged {\n pub prev_owner: Option<Address>,\n pub new_owner: Address\n}\n")),(0,r.kt)("p",null,"Ok, we have done a couple of things, let's analyze them one by one:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," should be an odra module, so add ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function is marked as ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]")," making it a constructor. It matters if we would like to deploy the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," module as a standalone contract."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum. Notice that the ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum is defined inside the ",(0,r.kt)("inlineCode",{parentName:"li"},"execution_error")," macro. It generates, among others, the required ",(0,r.kt)("inlineCode",{parentName:"li"},"Into<ExecutionError>")," binding."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L9-L11")," - If the owner has been set already, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::revert()")," function. As an argument we pass ",(0,r.kt)("inlineCode",{parentName:"li"},"Error::OwnerIsNotInitialized"),". "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13")," - Then we write the owner passed as an argument to the storage. To do so we call the ",(0,r.kt)("inlineCode",{parentName:"li"},"set()")," on ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29-L33")," - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::Event"),". We highly recommend to derive ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PartialEq")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Eq")," for testing purpose."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Finally, we create the ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged")," struct and call ",(0,r.kt)("inlineCode",{parentName:"li"},"emit()")," function on it (import ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::types::event::OdraEvent")," trait). Hence we set the first owner, we set the ",(0,r.kt)("inlineCode",{parentName:"li"},"prev_owner")," value to ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".")),(0,r.kt)("h3",{id:"features-implementation"},"Features implementation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Ownable {\n ...\n\n pub fn ensure_ownership(&self, address: &Address) {\n if Some(address) != self.owner.get().as_ref() {\n contract_env::revert(Error::NotOwner)\n }\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ensure_ownership(&contract_env::caller());\n let current_owner = self.get_owner();\n self.owner.set(*new_owner);\n OwnershipChanged {\n prev_owner: Some(current_owner),\n new_owner: *new_owner\n }\n .emit();\n }\n\n pub fn get_owner(&self) -> Address {\n match self.owner.get() {\n Some(owner) => owner,\n None => contract_env::revert(Error::OwnerIsNotInitialized)\n }\n }\n}\n\nexecution_error! {\n pub enum Error {\n NotOwner => 1,\n OwnerIsAlreadyInitialized => 2,\n OwnerIsNotInitialized => 3,\n }\n}\n")),(0,r.kt)("p",null,"The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5,L32")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()")," is reads the current owner, and reverts if is does not match the input ",(0,r.kt)("inlineCode",{parentName:"li"},"Address"),". Also we need to update our ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum adding a new variant ",(0,r.kt)("inlineCode",{parentName:"li"},"NotOwner"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - The function defined above can be reused in ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()")," implementation. We pass to it the current caller, using the ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::caller()")," function. The we update the state, and emit ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L22,L34")," - Lastly, a getter function. As the ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable")," ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returns an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option"),", we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," variant ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnerIsNotInitialized"),".")),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[cfg(test)]\nmod tests {\n use super::*;\n use odra::{assert_events, test_env};\n\n fn setup() -> (Address, OwnableRef) {\n let owner = test_env::get_account(0);\n let ownable = OwnableDeployer::init(owner);\n (owner, ownable)\n }\n\n #[test]\n fn initialization_works() {\n let (owner, ownable) = setup();\n assert_eq!(ownable.get_owner(), owner);\n \n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n );\n }\n\n #[test]\n fn owner_can_change_ownership() {\n let (owner, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n \n test_env::set_caller(owner);\n ownable.change_ownership(&new_owner);\n assert_eq!(ownable.get_owner(), new_owner);\n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: Some(owner),\n new_owner\n }\n );\n }\n\n #[test]\n fn non_owner_cannot_change_ownership() {\n let (_, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n ownable.change_ownership(&new_owner);\n \n test_env::assert_exception(Error::NotOwner, || {\n ownable.change_ownership(&new_owner);\n });\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - Each test case starts with the same initialization process, so for convenience, we defined the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we call as the first statement in each test. Take a look at the signature ",(0,r.kt)("inlineCode",{parentName:"li"},"fn setup() -> (Address, OwnableRef)"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableRef")," is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"get_owner()"),", but not ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which is a constructor."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Now, the module needs an owner, the easiest way is to take one from the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env"),". We choose the address of first account (which is the default one)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L8")," - Odra created for us ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableDeployer")," struct which implements all constructor functions. In this case there is just one function - ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which corresponds the function we have implemented in the module."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - It is time to define the first test. As you see, it is a regular rust test."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L14-15")," - Using the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may have noticed, we use here the term ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," interchangeably with ",(0,r.kt)("inlineCode",{parentName:"p"},"contract"),". The reason is once we deploy our module onto a virtual blockchain it may be considered a contract."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L17-23")," - On the contract, only the ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events"),". As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30")," - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the ",(0,r.kt)("inlineCode",{parentName:"li"},"test env")," predefines 20 accounts."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L32")," - As mentioned, the default is the 0-th account, if you want to change the executor call the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::set_caller()")," function. ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The caller switch applies only the next contract interaction, the second call will be done as the default account."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L49-55")," - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::assert_exception()")," with the error you expect and a failing block of code.")),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next tutorial we will implement a ERC20 standard."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/558ac3fc.007facc4.js b/docs/assets/js/558ac3fc.007facc4.js new file mode 100644 index 000000000..3fb6a7f98 --- /dev/null +++ b/docs/assets/js/558ac3fc.007facc4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9654],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,c=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=l(n),g=a,f=d["".concat(c,".").concat(g)]||d[g]||p[g]||s;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,i=new Array(s);i[0]=d;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o.mdxType="string"==typeof e?e:a,i[1]=o;for(var l=2;l<s;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},85403:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const s={},i="Signatures",o={unversionedId:"advanced/signatures",id:"version-0.5.0/advanced/signatures",title:"Signatures",description:"As each backend can use a different scheme for generating key pairs,",source:"@site/versioned_docs/version-0.5.0/advanced/05-signatures.md",sourceDirName:"advanced",slug:"/advanced/signatures",permalink:"/docs/0.5.0/advanced/signatures",draft:!1,tags:[],version:"0.5.0",sidebarPosition:5,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Attributes",permalink:"/docs/0.5.0/advanced/attributes"},next:{title:"Backends",permalink:"/docs/0.5.0/category/backends"}},c={},l=[{value:"Signature verification",id:"signature-verification",level:2},{value:"Testing",id:"testing",level:2},{value:"ECRecover",id:"ecrecover",level:2}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"signatures"},"Signatures"),(0,a.kt)("p",null,"As each backend can use a different scheme for generating key pairs,\nOdra Framework provides a generic function for signature verification inside the contract context.\nThanks to this, you can write your code once, without worrying about underlying cryptography."),(0,a.kt)("h2",{id:"signature-verification"},"Signature verification"),(0,a.kt)("p",null,"Signature verification is conducted by a function in ",(0,a.kt)("inlineCode",{parentName:"p"},"contract_env"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn verify_signature(message: &Bytes, signature: &Bytes, public_key: &PublicKey) -> bool;\n")),(0,a.kt)("p",null,"Here's the simplest example of this function used in a contract:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},"#[odra::module]\nimpl SignatureVerifier {\n pub fn verify_signature(\n &self,\n message: &Bytes,\n signature: &Bytes,\n public_key: &PublicKey\n ) -> bool {\n contract_env::verify_signature(message, signature, public_key)\n }\n}\n")),(0,a.kt)("h2",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Besides the above function in the contract context, Odra provides corresponding functions in the ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn sign_message(message: &Bytes, address: &Address) -> Bytes;\n\npub fn public_key(address: &Address) -> PublicKey;\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"sign_message")," will return a signed message. The signing itself will be performed using a private key\nof an account behind the ",(0,a.kt)("inlineCode",{parentName:"p"},"address"),"."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"public_key")," returns the PublicKey of an ",(0,a.kt)("inlineCode",{parentName:"p"},"address")," account."),(0,a.kt)("p",null,"Thanks to those, you can write generic tests, that will work with all backends, despite differences\nin signature schemes they use."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},'#[test]\nfn signature_verification_works() {\n let message = "Message to be signed";\n let message_bytes = &Bytes::from(message.as_bytes().to_vec());\n let account = test_env::get_account(0);\n\n let signature = test_env::sign_message(message_bytes, &account);\n\n let public_key = test_env::public_key(&account);\n\n let signature_verifier = SignatureVerifierDeployer::default();\n assert!(signature_verifier.verify_signature(message_bytes, &signature, &public_key));\n}\n')),(0,a.kt)("p",null,"If you want, you can also test signatures that were created outside Odra.\nHowever, you will need to prepare separate tests for each backend:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},'/// The following test checks that the signature verification works with the signature produced\n/// by the casper wallet.\n#[test]\n#[cfg(feature = "casper")]\nfn verify_signature_casper_wallet() {\n use odra::casper::casper_types::bytesrepr::FromBytes;\n // Casper Wallet for the message "Ahoj przygodo!" signed using SECP256K1 key\n // produces the following signature:\n // 1e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa\n // Casper Wallet adds "Casper Message:\\n" prefix to the message:\n let message = "Casper Message:\\nAhoj przygodo!";\n let message_bytes = &Bytes::from(message.as_bytes().to_vec());\n\n // Depending on the type of the key, we need to prefix the signature with a tag:\n // 0x01 for ED25519\n // 0x02 for SECP256K1\n let signature_hex = "021e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa";\n let signature: [u8; 65] = hex::decode(signature_hex).unwrap().try_into().unwrap();\n let signature_bytes = &Bytes::from(signature.to_vec());\n\n // Similar to the above, the public key is tagged:\n let public_key_hex = "02036d9b880e44254afaf34330e57703a63aec53b5918d4470059b67a4a906350105";\n let public_key_decoded = hex::decode(public_key_hex).unwrap();\n let (public_key, _) = odra::casper::casper_types::crypto::PublicKey::from_bytes(\n public_key_decoded.as_slice()\n )\n .unwrap();\n\n let signature_verifier = SignatureVerifierDeployer::default();\n assert!(signature_verifier.verify_signature(message_bytes, signature_bytes, &public_key));\n}\n')),(0,a.kt)("h2",{id:"ecrecover"},"ECRecover"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra-proposal#odra-standard-library"},"Odra Standard Library"),"\npart of the original Odra Proposal mentioned ECRecover as one of the functions that will be\nimplemented by the Odra Framework. We decided to add signatures verification instead."),(0,a.kt)("p",null,"The reasoning behind this decision is that the ECRecover works only with one type of signature.\nOdra tries to be backend-agnostic, which implies that it should also be signature-type-agnostic.\nThis was possible to achieve when implementing generic signature verification, but not with ECRecover."),(0,a.kt)("p",null,"In short, the implementation of ECRecover would not depend on the backend, pushing it into some kind of\nutils library, and those already exist, for example in\n",(0,a.kt)("a",{parentName:"p",href:"https://docs.rs/solana-program/latest/solana_program/secp256k1_recover/index.html#"},"solana_program"),"\ncrate."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/56296f23.e1d2def4.js b/docs/assets/js/56296f23.e1d2def4.js new file mode 100644 index 000000000..704ba9d78 --- /dev/null +++ b/docs/assets/js/56296f23.e1d2def4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1577],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=n.createContext({}),u=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=u(e.components);return n.createElement(i.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=u(a),m=r,h=p["".concat(i,".").concat(m)]||p[m]||c[m]||o;return a?n.createElement(h,l(l({ref:t},d),{},{components:a})):n.createElement(h,l({ref:t},d))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=p;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,l[1]=s;for(var u=2;u<o;u++)l[u]=a[u];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}p.displayName="MDXCreateElement"},87983:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=a(87462),r=(a(67294),a(3905));const o={},l="Module Composer",s={unversionedId:"advanced/composer",id:"version-0.4.0/advanced/composer",title:"Module Composer",description:"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.",source:"@site/versioned_docs/version-0.4.0/advanced/01-composer.md",sourceDirName:"advanced",slug:"/advanced/composer",permalink:"/docs/0.4.0/advanced/composer",draft:!1,tags:[],version:"0.4.0",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced",permalink:"/docs/0.4.0/category/advanced"},next:{title:"Delegate",permalink:"/docs/0.4.0/advanced/delegate"}},i={},u=[{value:"Conceptual Overview",id:"conceptual-overview",level:2},{value:"Usage",id:"usage",level:2},{value:"Conclusion",id:"conclusion",level:2}],d={toc:u};function c(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"module-composer"},"Module Composer"),(0,r.kt)("p",null,"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples."),(0,r.kt)("h2",{id:"conceptual-overview"},"Conceptual Overview"),(0,r.kt)("p",null,"By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n value: Variable<u8>, // the default namespace would be "contract_value"\n module: Module\n}\n\n#[odra::module]\nstruct Module {\n secret: Variable<String> // the default namespace would be "contract_module_secret"\n}\n')),(0,r.kt)("p",null,"While this isolation often proves useful, there are scenarios where shared storage is beneficial. Here, the Module Composer comes in."),(0,r.kt)("p",null,"Additionally, the Module Composer shortens the storage key - a handy side effect of shared storage. "),(0,r.kt)("p",null,"For each module, Odra generates a corresponding Composer struct (e.g., ",(0,r.kt)("inlineCode",{parentName:"p"},"MyContractComposer")," for ",(0,r.kt)("inlineCode",{parentName:"p"},"MyContract")," module), which aids in manual module composition."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"By default, the #","[odra::module]"," macro generates an implementation of the odra::Instance trait, prefixing the storage key of child modules with the parent namespace. To disable this behavior, pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"skip_instance")," argument to the #","[odra::module]"," macro."),(0,r.kt)("p",null,"Let's write a simple code example. The example provided below introduces some additional complexity by featuring deeper module nesting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::{Instance, Variable, Composer};\n\n#[odra::module]\npub struct SharedStorage {\n pub value: Variable<String>\n}\n\n#[odra::module]\npub struct MyStorage {\n pub shared: SharedStorage,\n pub version: Variable<u8>\n}\n\n#[odra::module]\npub struct MoreStorage {\n pub my_storage: MyStorage,\n pub extra: Variable<u32>\n}\n\n#[odra::module(skip_instance)]\npub struct ComplexContract {\n pub shared: SharedStorage,\n pub more_storage: MoreStorage\n}\n\n#[odra::module]\nimpl ComplexContract {\n #[odra(init)]\n pub fn init(&mut self, version: u8, value: String, extra: u32) {\n self.more_storage.my_storage.version.set(version);\n self.shared.value.set(value);\n self.more_storage.extra.set(extra);\n }\n\n pub fn get_value(&self) -> String {\n self.shared.value.get_or_default()\n }\n\n pub fn get_value_via_storage(&self) -> String {\n self.more_storage.my_storage.shared.value.get_or_default()\n }\n\n pub fn get_extra_value(&self) -> u32 {\n self.more_storage.extra.get_or_default()\n }\n}\n\nimpl Instance for ComplexContract {\n fn instance(namespace: &str) -> Self {\n let value = Composer::new(namespace, "v").compose();\n let shared = SharedStorageComposer::new(namespace, "shared")\n .with_value(&value)\n .compose();\n let my_storage = MyStorageComposer::new(namespace, "my_storage")\n .with_shared(&shared)\n .compose();\n let more_storage = MoreStorageComposer::new(namespace, "more_storage")\n .with_my_storage(&my_storage)\n .compose();\n Self { shared, more_storage }\n }\n}\n\n#[cfg(test)]\nmod test {\n use crate::composer::ComplexContractDeployer;\n\n #[test]\n fn t() {\n let shared_value = "shared_value".to_string();\n let extra_value: u32 = 314;\n let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);\n\n assert_eq!(token.get_value(), shared_value);\n assert_eq!(token.get_value_via_storage(), shared_value);\n assert_eq!(token.get_extra_value(), extra_value);\n }\n}\n')),(0,r.kt)("p",null,"In this example, we've introduced a new module, ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", which nests ",(0,r.kt)("inlineCode",{parentName:"p"},"MyStorage")," and includes an extra value. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ComplexContract")," contains ",(0,r.kt)("inlineCode",{parentName:"p"},"SharedStorage")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels."),(0,r.kt)("p",null,"If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"On the contract level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_shared_value"),"."),(0,r.kt)("li",{parentName:"ol"},"On the ",(0,r.kt)("inlineCode",{parentName:"li"},"MyStorage")," module level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_more_storage_shared_value"),".")),(0,r.kt)("p",null,"This example showcases how you can effectively use the Module Composer feature to build intricate and efficient smart contracts."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"To customize the storage building block, you can use ",(0,r.kt)("inlineCode",{parentName:"p"},"Composer")," which API matches to modules composers API.")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"The Module Composer in Odra provides developers with a high level of flexibility and control over module behavior in their smart contracts. This guide, complete with a practical example, should give you a good understanding of the feature. Embrace the power of the Module Composer and unleash the full potential of your smart contracts!"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/575b7125.8675e1af.js b/docs/assets/js/575b7125.8675e1af.js new file mode 100644 index 000000000..97a3ba4f5 --- /dev/null +++ b/docs/assets/js/575b7125.8675e1af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[992],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>g});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),c=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},l=function(e){var n=c(e.components);return a.createElement(p.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(t),g=r,m=u["".concat(p,".").concat(g)]||u[g]||d[g]||i;return t?a.createElement(m,o(o({ref:n},l),{},{components:t})):a.createElement(m,o({ref:n},l))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var c=2;c<i;c++)o[c]=t[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}u.displayName="MDXCreateElement"},37990:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=t(87462),r=(t(67294),t(3905));const i={},o="Advanced Storage Concepts",s={unversionedId:"advanced/advanced-storage",id:"version-0.7.0/advanced/advanced-storage",title:"Advanced Storage Concepts",description:"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.",source:"@site/versioned_docs/version-0.7.0/advanced/03-advanced-storage.md",sourceDirName:"advanced",slug:"/advanced/advanced-storage",permalink:"/docs/advanced/advanced-storage",draft:!1,tags:[],version:"0.7.0",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Delegate",permalink:"/docs/advanced/delegate"},next:{title:"Attributes",permalink:"/docs/advanced/attributes"}},p={},c=[{value:"Recap and Basic Concepts",id:"recap-and-basic-concepts",level:2},{value:"Advanced Storage Concepts",id:"advanced-storage-concepts-1",level:2},{value:"Sequence",id:"sequence",level:3},{value:"Advanced Mapping",id:"advanced-mapping",level:3},{value:"AdvancedStorage Contract",id:"advancedstorage-contract",level:2},{value:"Conclusion",id:"conclusion",level:2}],l={toc:c};function d(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"advanced-storage-concepts"},"Advanced Storage Concepts"),(0,r.kt)("p",null,"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Sequence")," modules, which are key components of the advanced storage interaction in Odra."),(0,r.kt)("h2",{id:"recap-and-basic-concepts"},"Recap and Basic Concepts"),(0,r.kt)("p",null,"Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),". These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Variable"),": A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Mapping"),": Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"List"),": Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over."),(0,r.kt)("p",null,"If you need a refresher on these topics, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"/docs/basics/storage-interaction"},"guide")," on basic storage in Odra."),(0,r.kt)("h2",{id:"advanced-storage-concepts-1"},"Advanced Storage Concepts"),(0,r.kt)("h3",{id:"sequence"},"Sequence"),(0,r.kt)("p",null,"The Sequence in Odra is a basic module that holds a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," which keeps track of the current value. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub struct Sequence<T>\nwhere\n T: Num + One + OdraType\n{\n value: Variable<T>\n}\n")),(0,r.kt)("p",null,"The Sequence module provides functions ",(0,r.kt)("inlineCode",{parentName:"p"},"get_current_value")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"next_value")," to get the current value and increment the value respectively."),(0,r.kt)("h3",{id:"advanced-mapping"},"Advanced Mapping"),(0,r.kt)("p",null,"In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility."),(0,r.kt)("p",null,"Let's consider the following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"use odra::{map, types::U256, Mapping, UnwrapOrRevert};\n\nuse crate::owned_token::OwnedToken;\n\n#[odra::module]\npub struct NestedMapping {\n strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,\n tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>\n}\n\n#[odra::module]\nimpl NestedMapping {\n\n ...\n\n pub fn set_token(\n &mut self,\n key1: String,\n key2: u32,\n key3: String,\n token_name: String,\n decimals: u8,\n symbol: String,\n initial_supply: &U256\n ) {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .init(token_name, symbol, decimals, initial_supply);\n }\n\n pub fn get_string_api(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> String {\n let mapping = self.strings.get_instance(&key1).get_instance(&key2);\n mapping.get(&key3).unwrap_or_revert()\n }\n\n pub fn total_supply(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> U256 {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .total_supply()\n }\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers. "),(0,r.kt)("p",{parentName:"admonition"},"Instead of using the ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," function, call ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()"),", which sets the correct namespace for nested modules.")),(0,r.kt)("p",null,"If the terminal value is deeply nested, a long chain of ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()")," calls is required."),(0,r.kt)("p",null,"To keep the codebase consistent, a ",(0,r.kt)("inlineCode",{parentName:"p"},"map!")," macro can be used:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"...\n\npub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {\n map!(self.strings[key1][key2][key3] = value);\n}\n\npub fn get_string_macro(\n &self, \n key1: String, \n key2: u32, \n key3: String\n) -> String {\n map!(self.strings[key1][key2][key3])\n}\n\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The terminal value must not be an Odra Module.")),(0,r.kt)("h2",{id:"advancedstorage-contract"},"AdvancedStorage Contract"),(0,r.kt)("p",null,"The given code snippet showcases the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdvancedStorage")," contract that incorporates these storage concepts."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Sequence, Mapping};\nuse crate::modules::Token;\n\n#[odra::module]\npub struct AdvancedStorage {\n my_sequence: Sequence<u32>,\n my_mapping: Mapping<String, Mapping<String, Token>>,\n}\n\nimpl AdvancedStorage {\n pub fn get_sequence_current_value(&self) -> u32 {\n self.my_sequence.get_current_value()\n }\n\n pub fn next_sequence_value(&mut self) -> u32 {\n self.my_sequence.next_value()\n }\n\n pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.set(&inner_key, value);\n }\n\n pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.get(&inner_key)\n }\n}\n")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/57648d1e.ad598a74.js b/docs/assets/js/57648d1e.ad598a74.js new file mode 100644 index 000000000..0cb35cacc --- /dev/null +++ b/docs/assets/js/57648d1e.ad598a74.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8181],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=s(n),m=r,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},63279:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(87462),r=(n(67294),n(3905));const o={},i="Attributes",l={unversionedId:"advanced/attributes",id:"version-0.3.1/advanced/attributes",title:"Attributes",description:"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.",source:"@site/versioned_docs/version-0.3.1/advanced/04-attributes.md",sourceDirName:"advanced",slug:"/advanced/attributes",permalink:"/docs/0.3.1/advanced/attributes",draft:!1,tags:[],version:"0.3.1",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced Storage Concepts",permalink:"/docs/0.3.1/advanced/advanced-storage"},next:{title:"Backends",permalink:"/docs/0.3.1/category/backends"}},c={},s=[{value:"Init",id:"init",level:2},{value:"Example",id:"example",level:3},{value:"Payable",id:"payable",level:2},{value:"Example",id:"example-1",level:3},{value:"Non Reentrant",id:"non-reentrant",level:2},{value:"Mixing attributes",id:"mixing-attributes",level:2}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"attributes"},"Attributes"),(0,r.kt)("p",null,"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution."),(0,r.kt)("p",null,"Odra defines a few attributes that can be applied to functions to equip them with superpowers."),(0,r.kt)("h2",{id:"init"},"Init"),(0,r.kt)("p",null,"If your contract needs initial setup, adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed."),(0,r.kt)("p",null,"It's important to note that a constructor function should not be invoked in any other context."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/erc20.rs",title:"examples/erc20.rs"},"#[odra(init)]\npub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n}\n")),(0,r.kt)("h2",{id:"payable"},"Payable"),(0,r.kt)("p",null,"When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," attribute can send and take money in the form of native tokens. "),(0,r.kt)("h3",{id:"example-1"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/tlw.rs",title:"examples/tlw.rs"},"#[odra(payable)]\npub fn deposit(&mut self) {\n // Extract values\n let caller: Address = contract_env::caller();\n let amount: Balance = contract_env::attached_value();\n let current_block_time: BlockTime = contract_env::get_block_time();\n\n // Multiple lock check\n if self.balances.get(&caller).is_some() {\n contract_env::revert(Error::CannotLockTwice)\n }\n\n // Update state, emit event\n self.balances.set(&caller, amount);\n self.lock_expiration_map\n .set(&caller, current_block_time + self.lock_duration());\n Deposit {\n address: caller,\n amount\n }\n .emit();\n}\n")),(0,r.kt)("p",null,"If you try to send tokens to a non-payable function, the transaction will be automatically rejected."),(0,r.kt)("h2",{id:"non-reentrant"},"Non Reentrant"),(0,r.kt)("p",null,"Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds. "),(0,r.kt)("p",null,"To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts. "),(0,r.kt)("p",null,"They can also use reentrancy guards to block recursive calls to sensitive functions."),(0,r.kt)("p",null,"In Odra you can just apply the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(non_reentrant)]")," attribute to your function."),(0,r.kt)("h2",{id:"mixing-attributes"},"Mixing attributes"),(0,r.kt)("p",null,"A function can accept more than one attribute. The only exclusion is a constructor cannot be payable.\nTo apply multiple attributes, you can write:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable, non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"or "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"In both cases attributes order does not matter."),(0,r.kt)("p",null,"However, a constructor cannot be payable, so the below code would not compile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(init)]\nfn initialize() {\n // your logic...\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/57bc1a35.9b29e434.js b/docs/assets/js/57bc1a35.9b29e434.js new file mode 100644 index 000000000..ff42c4c49 --- /dev/null +++ b/docs/assets/js/57bc1a35.9b29e434.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3394],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),d=i,g=p["".concat(l,".").concat(d)]||p[d]||m[d]||o;return n?r.createElement(g,a(a({ref:t},c),{},{components:n})):r.createElement(g,a({ref:t},c))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=p;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,a[1]=s;for(var u=2;u<o;u++)a[u]=n[u];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},10349:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(87462),i=(n(67294),n(3905));const o={sidebar_position:1,description:"Migration guide to v0.8.0"},a="Migration guide to v0.8.0",s={unversionedId:"migrations/to-0.8.0",id:"migrations/to-0.8.0",title:"Migration guide to v0.8.0",description:"Migration guide to v0.8.0",source:"@site/docs/migrations/to-0.8.0.md",sourceDirName:"migrations",slug:"/migrations/to-0.8.0",permalink:"/docs/next/migrations/to-0.8.0",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"Migration guide to v0.8.0"},sidebar:"tutorialSidebar",previous:{title:"Migrations",permalink:"/docs/next/category/migrations"}},l={},u=[{value:"1. <strong>Introduction:</strong>",id:"1-introduction",level:3},{value:"2. <strong>Prerequisites:</strong>",id:"2-prerequisites",level:3},{value:"3. <strong>Overview of Breaking Changes:</strong>",id:"3-overview-of-breaking-changes",level:3},{value:"4. <strong>Migration Steps:</strong>",id:"4-migration-steps",level:3},{value:"5. <strong>Code Examples:</strong>",id:"5-code-examples",level:3},{value:"6. <strong>Testing and Validation:</strong>",id:"6-testing-and-validation",level:3},{value:"7. <strong>Common Issues and Troubleshooting:</strong>",id:"7-common-issues-and-troubleshooting",level:3},{value:"8. <strong>Rollback Plan:</strong>",id:"8-rollback-plan",level:3},{value:"9. <strong>Documentation Updates:</strong>",id:"9-documentation-updates",level:3},{value:"10. <strong>Community Support:</strong>",id:"10-community-support",level:3},{value:"11. <strong>Conclusion:</strong>",id:"11-conclusion",level:3},{value:"12. <strong>Version Compatibility Table:</strong>",id:"12-version-compatibility-table",level:3},{value:"13. <strong>FAQ Section:</strong>",id:"13-faq-section",level:3},{value:"14. <strong>Glossary:</strong>",id:"14-glossary",level:3},{value:"15. <strong>Appendix:</strong>",id:"15-appendix",level:3}],c={toc:u};function m(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"migration-guide-to-v080"},"Migration guide to v0.8.0"),(0,i.kt)("h3",{id:"1-introduction"},"1. ",(0,i.kt)("strong",{parentName:"h3"},"Introduction:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Briefly introduce the migration guide."),(0,i.kt)("li",{parentName:"ul"},"Explain the reasons for the breaking changes, emphasizing any improvements or new features.")),(0,i.kt)("h3",{id:"2-prerequisites"},"2. ",(0,i.kt)("strong",{parentName:"h3"},"Prerequisites:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"List the prerequisites users need before attempting the migration."),(0,i.kt)("li",{parentName:"ul"},"Include information on the minimum version requirements for the new smart contract framework.")),(0,i.kt)("h3",{id:"3-overview-of-breaking-changes"},"3. ",(0,i.kt)("strong",{parentName:"h3"},"Overview of Breaking Changes:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Clearly enumerate the breaking changes that users will encounter."),(0,i.kt)("li",{parentName:"ul"},"Provide a high-level explanation for each change."),(0,i.kt)("li",{parentName:"ul"},"Include links to more detailed sections for each breaking change.")),(0,i.kt)("h3",{id:"4-migration-steps"},"4. ",(0,i.kt)("strong",{parentName:"h3"},"Migration Steps:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Outline step-by-step instructions for the migration process."),(0,i.kt)("li",{parentName:"ul"},"Use clear and concise language to guide users through each step."),(0,i.kt)("li",{parentName:"ul"},"Include code snippets and examples to illustrate the migration steps."),(0,i.kt)("li",{parentName:"ul"},"Highlight any potential pitfalls or common issues users might face.")),(0,i.kt)("h3",{id:"5-code-examples"},"5. ",(0,i.kt)("strong",{parentName:"h3"},"Code Examples:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Provide before-and-after code examples for the most common scenarios affected by the breaking changes."),(0,i.kt)("li",{parentName:"ul"},"Include annotations and comments to explain the modifications made in the code."),(0,i.kt)("li",{parentName:"ul"},"Consider creating a side-by-side comparison for easier understanding.")),(0,i.kt)("h3",{id:"6-testing-and-validation"},"6. ",(0,i.kt)("strong",{parentName:"h3"},"Testing and Validation:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Emphasize the importance of thorough testing after the migration."),(0,i.kt)("li",{parentName:"ul"},"Provide a testing checklist or guide to help users validate their migrated code."),(0,i.kt)("li",{parentName:"ul"},"Recommend specific testing tools or frameworks if applicable.")),(0,i.kt)("h3",{id:"7-common-issues-and-troubleshooting"},"7. ",(0,i.kt)("strong",{parentName:"h3"},"Common Issues and Troubleshooting:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Create a section addressing common issues users might face during the migration."),(0,i.kt)("li",{parentName:"ul"},"Offer troubleshooting tips and solutions for each issue."),(0,i.kt)("li",{parentName:"ul"},"Encourage users to check this section if they encounter problems.")),(0,i.kt)("h3",{id:"8-rollback-plan"},"8. ",(0,i.kt)("strong",{parentName:"h3"},"Rollback Plan:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Discuss the possibility of rolling back to the previous version in case the migration fails."),(0,i.kt)("li",{parentName:"ul"},"Provide instructions on how to revert changes if necessary."),(0,i.kt)("li",{parentName:"ul"},"Include a checklist or steps for a smooth rollback process.")),(0,i.kt)("h3",{id:"9-documentation-updates"},"9. ",(0,i.kt)("strong",{parentName:"h3"},"Documentation Updates:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Mention any updates to the official documentation that accompany the breaking changes."),(0,i.kt)("li",{parentName:"ul"},"Provide links to relevant sections of the updated documentation.")),(0,i.kt)("h3",{id:"10-community-support"},"10. ",(0,i.kt)("strong",{parentName:"h3"},"Community Support:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Encourage users to seek help from the community or support channels."),(0,i.kt)("li",{parentName:"ul"},"Provide links to forums, chat rooms, or any dedicated support resources.")),(0,i.kt)("h3",{id:"11-conclusion"},"11. ",(0,i.kt)("strong",{parentName:"h3"},"Conclusion:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Summarize the key points of the migration guide."),(0,i.kt)("li",{parentName:"ul"},"Express gratitude for users' cooperation and understanding during the transition.")),(0,i.kt)("h3",{id:"12-version-compatibility-table"},"12. ",(0,i.kt)("strong",{parentName:"h3"},"Version Compatibility Table:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Include a table showing the compatibility between different versions of the smart contract framework."),(0,i.kt)("li",{parentName:"ul"},"Clearly indicate which versions are affected by the breaking changes.")),(0,i.kt)("h3",{id:"13-faq-section"},"13. ",(0,i.kt)("strong",{parentName:"h3"},"FAQ Section:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Anticipate common questions users might have and address them in a FAQ section."),(0,i.kt)("li",{parentName:"ul"},"Include questions related to the migration process, compatibility, and common issues.")),(0,i.kt)("h3",{id:"14-glossary"},"14. ",(0,i.kt)("strong",{parentName:"h3"},"Glossary:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Include a glossary of terms related to the migration guide to help users understand specific terminology.")),(0,i.kt)("h3",{id:"15-appendix"},"15. ",(0,i.kt)("strong",{parentName:"h3"},"Appendix:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Add any additional information that doesn't fit into the main sections but might be useful for users.")),(0,i.kt)("p",null,"Remember to make the documentation easily navigable with clear headings, subheadings, and a table of contents. Test the documentation with a sample user to ensure clarity and effectiveness. Lastly, keep the documentation updated as the framework evolves."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5825ca57.5247cfeb.js b/docs/assets/js/5825ca57.5247cfeb.js new file mode 100644 index 000000000..f1090fb74 --- /dev/null +++ b/docs/assets/js/5825ca57.5247cfeb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7199],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(f,s(s({ref:n},c),{},{components:t})):a.createElement(f,s({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,s=new Array(o);s[0]=d;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,s[1]=l;for(var p=2;p<o;p++)s[p]=t[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,t)}d.displayName="MDXCreateElement"},68526:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:3},s="ERC-20",l={unversionedId:"tutorials/erc20",id:"version-0.3.0/tutorials/erc20",title:"ERC-20",description:"It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.",source:"@site/versioned_docs/version-0.3.0/tutorials/erc20.md",sourceDirName:"tutorials",slug:"/tutorials/erc20",permalink:"/docs/0.3.0/tutorials/erc20",draft:!1,tags:[],version:"0.3.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"Ownable",permalink:"/docs/0.3.0/tutorials/ownable"},next:{title:"OwnedToken",permalink:"/docs/0.3.0/tutorials/owned-token"}},i={},p=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:2},{value:"Metadata",id:"metadata",level:3},{value:"Core",id:"core",level:3},{value:"Test",id:"test",level:3},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"erc-20"},"ERC-20"),(0,r.kt)("p",null,"It's time for something that every smart contract developer has done at least once. Let's try to implement ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"Erc20")," standard. Of course, we are going to use the Odra Framework. "),(0,r.kt)("p",null,"The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value. "),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"advanced storage - key-value pairs, "),(0,r.kt)("li",{parentName:"ul"},"Odra types like ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),", "),(0,r.kt)("li",{parentName:"ul"},"advanced events assertion.")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Our module has a pretty complex storage layout in comparison to the previous example."),(0,r.kt)("p",null,"We need to store the following data:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Immutable metadata - name, symbol and decimals."),(0,r.kt)("li",{parentName:"ol"},"Total supply."),(0,r.kt)("li",{parentName:"ol"},"Users' balances."),(0,r.kt)("li",{parentName:"ol"},"Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.")),(0,r.kt)("h2",{id:"module-definition"},"Module definition"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module(events = [Transfer, Approval])]\npub struct Erc20 {\n decimals: Variable<u8>,\n symbol: Variable<String>,\n name: Variable<String>,\n total_supply: Variable<Balance>,\n balances: Mapping<Address, Balance>,\n allowances: Mapping<Address, Mapping<Address, Balance>>\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - For the first time, we need to store key-value pairs. In order to do that, we use ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),". The name is taken after Solidity's native type ",(0,r.kt)("inlineCode",{parentName:"li"},"mapping"),". You may notice the ",(0,r.kt)("inlineCode",{parentName:"li"},"balances")," property maps ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),". If you deal with addresses or you operate on tokens, you should always choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," over ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Odra allows nested ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),"s, what we utilize to store allowances.")),(0,r.kt)("h3",{id:"metadata"},"Metadata"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Erc20 {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn symbol(&self) -> String {\n self.symbol.get_or_default()\n }\n\n pub fn decimals(&self) -> u8 {\n self.decimals.get_or_default()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.total_supply.get_or_default()\n }\n}\n\nimpl Erc20 {\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.balances.add(address, *amount);\n self.total_supply.add(amount);\n Transfer {\n from: None,\n to: Some(*address),\n amount: *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Transfer {\n pub from: Option<Address>,\n pub to: Option<Address>,\n pub amount: Balance\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L1")," - The first ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," block, marked as a module, contains functions defined in the ERC-20 standard."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3-L10")," - A constructor sets the token metadata and mints the initial supply."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12-L14")," - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," example, we used the ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returning an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<T>"),". If the type implements ",(0,r.kt)("inlineCode",{parentName:"li"},"Default")," trait, you can call ",(0,r.kt)("inlineCode",{parentName:"li"},"get_or_default()")," function and the contract does not fail even if the value is not initialized."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29")," - The second ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," is not an odra module, in other words these function will not be a part of contract's ABI."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30-L39")," - Mint function is public, so like in a regular rust code will be accessible from the outside. ",(0,r.kt)("inlineCode",{parentName:"li"},"mint()")," use notation ",(0,r.kt)("inlineCode",{parentName:"li"},"self.balances.add(&address, amount);"),", which it is syntactic sugar for:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"let current_balance = self.balances.get(&address).unwrap_or_default();\nlet new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();\nself.balances.set(&address, new_balance);\n")),(0,r.kt)("h3",{id:"core"},"Core"),(0,r.kt)("p",null,"For the sake of completeness, let's implement the remaining functionalities like ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_from"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"approve"),". They are not introducing any new concepts, so we leave them without additional remarks."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs",title:"erc20.rs"},"#[odra::module]\nimpl Erc20 {\n ...\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n let caller = contract_env::caller();\n self.raw_transfer(&caller, recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let spender = contract_env::caller();\n self.spend_allowance(owner, &spender, amount);\n self.raw_transfer(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n let owner = contract_env::caller();\n self.allowances.get_instance(&owner).set(spender, *amount);\n Approval {\n owner,\n spender: *spender,\n value: *amount\n }\n .emit();\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.balances.get_or_default(&address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.allowances.get_instance(owner).get_or_default(spender)\n }\n}\n\nimpl Erc20 {\n ...\n\n fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let owner_balance = self.balances.get_or_default(&owner);\n if *amount > owner_balance {\n contract_env::revert(Error::InsufficientBalance)\n }\n self.balances.set(owner, owner_balance - *amount);\n self.balances.add(recipient, *amount);\n Transfer {\n from: Some(*owner),\n to: Some(*recipient),\n amount: *amount\n }\n .emit();\n }\n\n fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {\n let allowance = self.allowances.get_instance(owner).get_or_default(spender);\n if allowance < *amount {\n contract_env::revert(Error::InsufficientAllowance)\n }\n let new_allowance = allowance - *amount;\n self.allowances\n .get_instance(owner)\n .set(spender, new_allowance);\n Approval {\n owner: *owner,\n spender: *spender,\n value: allowance - *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Approval {\n pub owner: Address,\n pub spender: Address,\n pub value: U256\n}\n\nexecution_error! {\n pub enum Error {\n InsufficientBalance => 1,\n InsufficientAllowance => 2,\n }\n}\n")),(0,r.kt)("p",null,"Now, compare the code we have written, with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"},"Open Zeppelin code"),". Out of 10, how Solidity-ish is our implementation?"),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},'#[cfg(test)]\npub mod tests {\n use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};\n use odra::{assert_events, test_env, types::U256};\n\n pub const NAME: &str = "Plascoin";\n pub const SYMBOL: &str = "PLS";\n pub const DECIMALS: u8 = 10;\n pub const INITIAL_SUPPLY: u32 = 10_000;\n\n pub fn setup() -> Erc20Ref {\n Erc20Deployer::init(\n String::from(NAME),\n String::from(SYMBOL),\n DECIMALS,\n INITIAL_SUPPLY.into()\n )\n }\n\n #[test]\n fn initialization() {\n let erc20 = setup();\n\n assert_eq!(&erc20.symbol(), SYMBOL);\n assert_eq!(&erc20.name(), NAME);\n assert_eq!(erc20.decimals(), DECIMALS);\n assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());\n assert_events!(\n erc20,\n Transfer {\n from: None,\n to: Some(test_env::get_account(0)),\n amount: INITIAL_SUPPLY.into()\n }\n );\n }\n\n #[test]\n fn transfer_works() {\n let mut erc20 = setup();\n let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n erc20.transfer(&recipient, &amount);\n\n assert_eq!(\n erc20.balance_of(&sender),\n U256::from(INITIAL_SUPPLY) - amount\n );\n assert_eq!(erc20.balance_of(&recipient), amount);\n assert_events!(\n erc20,\n Transfer {\n from: Some(sender),\n to: Some(recipient),\n amount\n }\n );\n }\n\n #[test]\n fn transfer_error() {\n let mut erc20 = setup();\n let recipient = test_env::get_account(1);\n let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);\n\n test_env::assert_exception(Error::InsufficientBalance, || {\n erc20.transfer(&recipient, &amount)\n });\n }\n\n #[test]\n fn transfer_from_and_approval_work() {\n let mut erc20 = setup();\n let (owner, recipient, spender) = (\n test_env::get_account(0),\n test_env::get_account(1),\n test_env::get_account(2)\n );\n let approved_amount = 3_000.into();\n let transfer_amount = 1_000.into();\n\n // Owner approves Spender.\n erc20.approve(&spender, &approved_amount);\n\n // Allowance was recorded.\n assert_eq!(erc20.allowance(&owner, &spender), approved_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount\n }\n );\n\n // Spender transfers tokens from Owner to Recipient.\n test_env::set_caller(spender);\n erc20.transfer_from(&owner, &recipient, &transfer_amount);\n\n // Tokens are transferred and allowance decremented.\n assert_eq!(\n erc20.balance_of(&owner),\n U256::from(INITIAL_SUPPLY) - transfer_amount\n );\n assert_eq!(erc20.balance_of(&recipient), transfer_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount - transfer_amount\n },\n Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount: transfer_amount\n }\n );\n \n assert_events!(erc20, Approval, Transfer);\n }\n\n #[test]\n fn transfer_from_error() {\n let mut erc20 = setup();\n let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n test_env::set_caller(spender);\n test_env::assert_exception(Error::InsufficientAllowance, || {\n erc20.transfer_from(&owner, &spender, &amount)\n });\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L111-123")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events!()")," macro accepts multiple events. You must pass them in the order they were emitted. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L125")," - Alternatively, if you don't want to check the entire event, you may assert only its type.")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"You can not mix both approaches, you pass full events or types only.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"Having two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", let's combine them, and create an ERC-20 on steroids."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/58abd590.4ec338a7.js b/docs/assets/js/58abd590.4ec338a7.js new file mode 100644 index 000000000..6697a6342 --- /dev/null +++ b/docs/assets/js/58abd590.4ec338a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7457],{76045:e=>{e.exports=JSON.parse('{"title":"Basics","description":"Basic concepts of Odra Framework","slug":"/category/basics","permalink":"/docs/category/basics","navigation":{"previous":{"title":"Flipper example","permalink":"/docs/getting-started/flipper"},"next":{"title":"Cargo Odra","permalink":"/docs/basics/cargo-odra"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/58f10d9f.42367a11.js b/docs/assets/js/58f10d9f.42367a11.js new file mode 100644 index 000000000..b38e14e66 --- /dev/null +++ b/docs/assets/js/58f10d9f.42367a11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2493],{99005:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"0.6.0","label":"0.6.0","banner":"unmaintained","badge":true,"noIndex":false,"className":"docs-version-0.6.0","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Odra framework","href":"/docs/0.6.0/","docId":"intro"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs/0.6.0/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Flipper example","href":"/docs/0.6.0/getting-started/flipper","docId":"getting-started/flipper"}],"href":"/docs/0.6.0/category/getting-started"},{"type":"category","label":"Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Cargo Odra","href":"/docs/0.6.0/basics/cargo-odra","docId":"basics/cargo-odra"},{"type":"link","label":"Directory structure","href":"/docs/0.6.0/basics/directory-structure","docId":"basics/directory-structure"},{"type":"link","label":"Odra.toml","href":"/docs/0.6.0/basics/odra-toml","docId":"basics/odra-toml"},{"type":"link","label":"Flipper Internals","href":"/docs/0.6.0/basics/flipper-internals","docId":"basics/flipper-internals"},{"type":"link","label":"Storage interaction","href":"/docs/0.6.0/basics/storage-interaction","docId":"basics/storage-interaction"},{"type":"link","label":"Host Communication","href":"/docs/0.6.0/basics/communicating-with-host","docId":"basics/communicating-with-host"},{"type":"link","label":"Testing","href":"/docs/0.6.0/basics/testing","docId":"basics/testing"},{"type":"link","label":"Errors","href":"/docs/0.6.0/basics/errors","docId":"basics/errors"},{"type":"link","label":"Events","href":"/docs/0.6.0/basics/events","docId":"basics/events"},{"type":"link","label":"Cross calls","href":"/docs/0.6.0/basics/cross-calls","docId":"basics/cross-calls"},{"type":"link","label":"Modules","href":"/docs/0.6.0/basics/modules","docId":"basics/modules"},{"type":"link","label":"Native token","href":"/docs/0.6.0/basics/native-token","docId":"basics/native-token"}],"href":"/docs/0.6.0/category/basics"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Module reusing","href":"/docs/0.6.0/advanced/using","docId":"advanced/using"},{"type":"link","label":"Delegate","href":"/docs/0.6.0/advanced/delegate","docId":"advanced/delegate"},{"type":"link","label":"Advanced Storage Concepts","href":"/docs/0.6.0/advanced/advanced-storage","docId":"advanced/advanced-storage"},{"type":"link","label":"Attributes","href":"/docs/0.6.0/advanced/attributes","docId":"advanced/attributes"},{"type":"link","label":"Signatures","href":"/docs/0.6.0/advanced/signatures","docId":"advanced/signatures"}],"href":"/docs/0.6.0/category/advanced"},{"type":"category","label":"Backends","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is a backend?","href":"/docs/0.6.0/backends/what-is-a-backend","docId":"backends/what-is-a-backend"},{"type":"link","label":"MockVM","href":"/docs/0.6.0/backends/mock-vm","docId":"backends/mock-vm"},{"type":"link","label":"Casper","href":"/docs/0.6.0/backends/casper","docId":"backends/casper"}],"href":"/docs/0.6.0/category/backends"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"odra-examples","href":"/docs/0.6.0/examples/odra-examples","docId":"examples/odra-examples"},{"type":"link","label":"Using odra-modules","href":"/docs/0.6.0/examples/using-odra-modules","docId":"examples/using-odra-modules"}],"href":"/docs/0.6.0/category/examples"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ownable","href":"/docs/0.6.0/tutorials/ownable","docId":"tutorials/ownable"},{"type":"link","label":"ERC-20","href":"/docs/0.6.0/tutorials/erc20","docId":"tutorials/erc20"},{"type":"link","label":"OwnedToken","href":"/docs/0.6.0/tutorials/owned-token","docId":"tutorials/owned-token"}],"href":"/docs/0.6.0/category/tutorials"}]},"docs":{"advanced/advanced-storage":{"id":"advanced/advanced-storage","title":"Advanced Storage Concepts","description":"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.","sidebar":"tutorialSidebar"},"advanced/attributes":{"id":"advanced/attributes","title":"Attributes","description":"Smart contract developers with Ethereum background are familiar with Solidity\'s concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.","sidebar":"tutorialSidebar"},"advanced/delegate":{"id":"advanced/delegate","title":"Delegate","description":"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.","sidebar":"tutorialSidebar"},"advanced/signatures":{"id":"advanced/signatures","title":"Signatures","description":"As each backend can use a different scheme for generating key pairs,","sidebar":"tutorialSidebar"},"advanced/using":{"id":"advanced/using","title":"Module reusing","description":"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.","sidebar":"tutorialSidebar"},"backends/casper":{"id":"backends/casper","title":"Casper","description":"The Casper backend allows you to compile your contracts into WASM files which can be deployed","sidebar":"tutorialSidebar"},"backends/mock-vm":{"id":"backends/mock-vm","title":"MockVM","description":"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing","sidebar":"tutorialSidebar"},"backends/what-is-a-backend":{"id":"backends/what-is-a-backend","title":"What is a backend?","description":"You can think of a backend as a target platform for your smart contract.","sidebar":"tutorialSidebar"},"basics/cargo-odra":{"id":"basics/cargo-odra","title":"Cargo Odra","description":"A tool for managing Odra projects","sidebar":"tutorialSidebar"},"basics/communicating-with-host":{"id":"basics/communicating-with-host","title":"Host Communication","description":"How to get information from the Host","sidebar":"tutorialSidebar"},"basics/cross-calls":{"id":"basics/cross-calls","title":"Cross calls","description":"Contracts calling contracts","sidebar":"tutorialSidebar"},"basics/directory-structure":{"id":"basics/directory-structure","title":"Directory structure","description":"Files and folders in the Odra project","sidebar":"tutorialSidebar"},"basics/errors":{"id":"basics/errors","title":"Errors","description":"Causing and handling errors","sidebar":"tutorialSidebar"},"basics/events":{"id":"basics/events","title":"Events","description":"Creating and emitting Events","sidebar":"tutorialSidebar"},"basics/flipper-internals":{"id":"basics/flipper-internals","title":"Flipper Internals","description":"Detailed explanation of the Flipper contract","sidebar":"tutorialSidebar"},"basics/modules":{"id":"basics/modules","title":"Modules","description":"Divide your code into modules","sidebar":"tutorialSidebar"},"basics/native-token":{"id":"basics/native-token","title":"Native token","description":"How to deposit, withdraw and transfer","sidebar":"tutorialSidebar"},"basics/odra-toml":{"id":"basics/odra-toml","title":"Odra.toml","description":"Odra\'s configuration file","sidebar":"tutorialSidebar"},"basics/storage-interaction":{"id":"basics/storage-interaction","title":"Storage interaction","description":"How to write data into blockchain\'s storage","sidebar":"tutorialSidebar"},"basics/testing":{"id":"basics/testing","title":"Testing","description":"How to write tests in Odra","sidebar":"tutorialSidebar"},"examples/odra-examples":{"id":"examples/odra-examples","title":"odra-examples","description":"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.","sidebar":"tutorialSidebar"},"examples/using-odra-modules":{"id":"examples/using-odra-modules","title":"Using odra-modules","description":"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.","sidebar":"tutorialSidebar"},"getting-started/flipper":{"id":"getting-started/flipper","title":"Flipper example","description":"To quickly start working with Odra, take a look at the following code sample. If you followed the","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Hello fellow Odra user! This page will guide you through the installation process.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Odra framework","description":"Odra Docs","sidebar":"tutorialSidebar"},"tutorials/erc20":{"id":"tutorials/erc20","title":"ERC-20","description":"It\'s time for something that every smart contract developer has done at least once. Let\'s try to implement Erc20 standard. Of course, we are going to use the Odra Framework.","sidebar":"tutorialSidebar"},"tutorials/ownable":{"id":"tutorials/ownable","title":"Ownable","description":"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract\'s critical features.","sidebar":"tutorialSidebar"},"tutorials/owned-token":{"id":"tutorials/owned-token","title":"OwnedToken","description":"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/599e53c2.4696106f.js b/docs/assets/js/599e53c2.4696106f.js new file mode 100644 index 000000000..7ff9ea94b --- /dev/null +++ b/docs/assets/js/599e53c2.4696106f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2411],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),m=l(r),f=o,d=m["".concat(s,".").concat(f)]||m[f]||u[f]||a;return r?n.createElement(d,i(i({ref:t},p),{},{components:r})):n.createElement(d,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},60007:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={slug:"evm-at-risc0",title:"EVM at Risc0",authors:["zie1ony"],image:"https://github.com/odradev.png"},i=void 0,c={permalink:"/blog/evm-at-risc0",source:"@site/blog/2023-02-13-evm-at-risc0.md",title:"EVM at Risc0",description:"Let's run Solidity code inside SputnikVM inside Risc0.",date:"2023-02-13T00:00:00.000Z",formattedDate:"February 13, 2023",tags:[],readingTime:3.97,hasTruncateMarker:!0,authors:[{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"evm-at-risc0",title:"EVM at Risc0",authors:["zie1ony"],image:"https://github.com/odradev.png"},prevItem:{title:"Odra + CosmWasm",permalink:"/blog/odra-cosmwasm"},nextItem:{title:"Zero Knowledge on Casper",permalink:"/blog/casper-zk-risc0"}},s={authorsImageUrls:[void 0]},l=[],p={toc:l};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Let's run Solidity code inside ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/rust-blockchain/evm/"},"SputnikVM")," inside ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/risc0/risc0"},"Risc0"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5a816386.79ee88a2.js b/docs/assets/js/5a816386.79ee88a2.js new file mode 100644 index 000000000..cae39b4aa --- /dev/null +++ b/docs/assets/js/5a816386.79ee88a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1390],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=o,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||s;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,a=new Array(s);a[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var c=2;c<s;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},55551:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(87462),o=(n(67294),n(3905));const s={sidebar_position:11,description:"Divide your code into modules"},a="Modules",i={unversionedId:"basics/modules",id:"version-0.3.1/basics/modules",title:"Modules",description:"Divide your code into modules",source:"@site/versioned_docs/version-0.3.1/basics/11-modules.md",sourceDirName:"basics",slug:"/basics/modules",permalink:"/docs/0.3.1/basics/modules",draft:!1,tags:[],version:"0.3.1",sidebarPosition:11,frontMatter:{sidebar_position:11,description:"Divide your code into modules"},sidebar:"tutorialSidebar",previous:{title:"Cross calls",permalink:"/docs/0.3.1/basics/cross-calls"},next:{title:"Native token",permalink:"/docs/0.3.1/basics/native-token"}},l={},c=[{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you\nwrite is also a module, thanks to a macro ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),'. This means that we can easily rewrite our math\nexample from the previous article, to use a single contract, but still separate our "math" code:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/modules.rs"',title:'"examples/src/docs/modules.rs"'},"use crate::docs::cross_calls::MathEngine;\n\n#[odra::module]\npub struct ModulesContract {\n pub math_engine: MathEngine,\n}\n\n#[odra::module]\nimpl ModulesContract {\n pub fn add_using_module(&self) -> u32 {\n self.math_engine.add(3, 5)\n }\n}\n")),(0,o.kt)("p",null,"Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as\na module!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"As we don't need to hold addresses, the test is really simple:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/modules.rs"',title:'"examples/src/docs/modules.rs"'},"use super::ModulesContractDeployer;\n\n#[test]\nfn test_modules() {\n let modules_contract = ModulesContractDeployer::default();\n assert_eq!(modules_contract.add_using_module(), 8);\n}\n")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will see how to handle native token transfers."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5aa50e24.08f3271d.js b/docs/assets/js/5aa50e24.08f3271d.js new file mode 100644 index 000000000..7dbf23ed1 --- /dev/null +++ b/docs/assets/js/5aa50e24.08f3271d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2944],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);function r(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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),d=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=d(e.components);return a.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=d(n),m=r,y=c["".concat(l,".").concat(m)]||c[m]||u[m]||i;return n?a.createElement(y,o(o({ref:t},p),{},{components:n})):a.createElement(y,o({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var d=2;d<i;d++)o[d]=n[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},67927:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var a=n(87462),r=(n(67294),n(3905));const i={},o="Storage Layout",s={unversionedId:"advanced/storage-layout",id:"advanced/storage-layout",title:"Storage Layout",description:"Odra's innovative modular design necessitates a unique storage layout. This",source:"@site/docs/advanced/04-storage-layout.md",sourceDirName:"advanced",slug:"/advanced/storage-layout",permalink:"/docs/next/advanced/storage-layout",draft:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Attributes",permalink:"/docs/next/advanced/attributes"},next:{title:"Backends",permalink:"/docs/next/category/backends"}},l={},d=[{value:"Casper VM Perspective",id:"casper-vm-perspective",level:2},{value:"Odra Perspective",id:"odra-perspective",level:2},{value:"Key generation.",id:"key-generation",level:2},{value:"Value serialization",id:"value-serialization",level:2}],p={toc:d};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-layout"},"Storage Layout"),(0,r.kt)("p",null,"Odra's innovative modular design necessitates a unique storage layout. This\narticle explains step-by-step Odra's storage layout."),(0,r.kt)("h2",{id:"casper-vm-perspective"},"Casper VM Perspective"),(0,r.kt)("p",null,"The Casper Execution Engine (VM) enables the storage of data in named keys or\ndictionaries. However, a smart contract has a limited number of named keys,\nmaking it unsuitable for storing substantial data volumes. Odra resolves this\nissue by storing all user-generated data in a dictionary called ",(0,r.kt)("inlineCode",{parentName:"p"},"state"),". This\ndictionary operates as a key-value store, where keys are strings with a maximum\nlength of 64 characters, and values are arbitrary byte arrays."),(0,r.kt)("p",null,"Here is an example of what the interface for reading and writing data could look\nlike:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait CasperStorage {\n fn read(key: &str) -> Option<Vec<u8>>;\n fn write(key: &str, value: Vec<u8>);\n}\n")),(0,r.kt)("h2",{id:"odra-perspective"},"Odra Perspective"),(0,r.kt)("p",null,"Odra was conceived with modularity and code reusability in mind. Additionally,\nwe aimed to streamline storage definition through the struct object. Consider\nthis straightforward storage definition:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\npub struct Token {\n name: Var<String>,\n balances: Mapping<Address, U256>\n}\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Token")," structure contains two fields: ",(0,r.kt)("inlineCode",{parentName:"p"},"name")," of type ",(0,r.kt)("inlineCode",{parentName:"p"},"String")," and\n",(0,r.kt)("inlineCode",{parentName:"p"},"balances"),", which functions as a key-value store with ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," as keys and\n",(0,r.kt)("inlineCode",{parentName:"p"},"U256")," as values."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Token")," module can be reused in another module, as demonstrated in a more\ncomplex example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\npub struct Loans {\n lenders: SubModule<Token>,\n borrowers: SubModule<Token>,\n}\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Loans")," module has two fields: ",(0,r.kt)("inlineCode",{parentName:"p"},"lenders")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"borrowers"),", both of which have\nthe same storage layout as defined by the ",(0,r.kt)("inlineCode",{parentName:"p"},"Token")," module. Odra guarantees that\n",(0,r.kt)("inlineCode",{parentName:"p"},"lenders")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"borrowers")," are stored under distinct keys within the storage\ndictionary."),(0,r.kt)("p",null,"Both ",(0,r.kt)("inlineCode",{parentName:"p"},"Token")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Loans")," serve as examples to show how Odra's storage layout\noperates."),(0,r.kt)("h2",{id:"key-generation"},"Key generation."),(0,r.kt)("p",null,"Every element of a module (",(0,r.kt)("inlineCode",{parentName:"p"},"struct"),") with N elements is associated with an index\nranging from 0 to N-1, represented as a u8 with a maximum of 256 elements. If an\nelement of a module is another module (",(0,r.kt)("inlineCode",{parentName:"p"},"SubModule<...>"),"), the associated index\nserves as a prefix for the indexes of the inner module."),(0,r.kt)("p",null,"While this may initially appear complex, it is easily understood through an\nexample. In the example, indexes are presented as bytes, reflecting the actual\nimplementation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"Loans {\n lenders: Token { // prefix: 0x0000\n name: 0, // key: 0x0000_0000\n balances: 1 // key: 0x0000_0001\n },\n borrowers: Token { // prefix: 0x0001\n name: 0, // key: 0x0001_0000\n balances: 1 // key: 0x0001_0001\n }\n}\n")),(0,r.kt)("p",null,"Additionally, it's worth mentioning how ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),"'s keys are used in the\n",(0,r.kt)("inlineCode",{parentName:"p"},"storage"),". They are simply concatenated with the index of the module, as\ndemonstrated in the example."),(0,r.kt)("p",null,"For instance, triggering ",(0,r.kt)("inlineCode",{parentName:"p"},"borrowers.balances.get(0x1234abcd)")," would result in a\nkey:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"0x0001_0001_1234_abcd\n")),(0,r.kt)("p",null,"Finally, the key must be hashed to fit within the 64-character limit and then\nencoded in hexadecimal format."),(0,r.kt)("h2",{id:"value-serialization"},"Value serialization"),(0,r.kt)("p",null,"Before being stored in the storage, each value is serialized into bytes using\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"CLType")," serialization method and subsequently encapsulated with Casper's\n",(0,r.kt)("inlineCode",{parentName:"p"},"Bytes")," types."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5ad2f7ef.55c21b01.js b/docs/assets/js/5ad2f7ef.55c21b01.js new file mode 100644 index 000000000..3f4bf78c5 --- /dev/null +++ b/docs/assets/js/5ad2f7ef.55c21b01.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3814],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(a),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,s=new Array(o);s[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var p=2;p<o;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},76602:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:3},s="Casper",i={unversionedId:"backends/casper",id:"version-0.6.0/backends/casper",title:"Casper",description:"The Casper backend allows you to compile your contracts into WASM files which can be deployed",source:"@site/versioned_docs/version-0.6.0/backends/03-casper.md",sourceDirName:"backends",slug:"/backends/casper",permalink:"/docs/0.6.0/backends/casper",draft:!1,tags:[],version:"0.6.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"MockVM",permalink:"/docs/0.6.0/backends/mock-vm"},next:{title:"Examples",permalink:"/docs/0.6.0/category/examples"}},l={},p=[{value:"Types",id:"types",level:2},{value:"Contract Env",id:"contract-env",level:2},{value:"Events",id:"events",level:3},{value:"Payable",id:"payable",level:3},{value:"Revert",id:"revert",level:3},{value:"Context",id:"context",level:3},{value:"Test Env",id:"test-env",level:2},{value:"Usage",id:"usage",level:2},{value:"Constructors",id:"constructors",level:2},{value:"WASM arguments",id:"wasm-arguments",level:3},{value:"Contract Deploys",id:"contract-deploys",level:2},{value:"Example: Deploy Counter",id:"example-deploy-counter",level:3},{value:"Example: Deploy ERC721",id:"example-deploy-erc721",level:3},{value:"Example: Deploy ERC1155",id:"example-deploy-erc1155",level:3},{value:"Sending CSPR to a contract",id:"sending-cspr-to-a-contract",level:2},{value:"Using proxy_caller.wasm",id:"using-proxy_callerwasm",level:3},{value:"Execution",id:"execution",level:2}],c={toc:p};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"casper"},"Casper"),(0,r.kt)("p",null,"The Casper backend allows you to compile your contracts into WASM files which can be deployed\nonto ",(0,r.kt)("a",{parentName:"p",href:"https://casper.network/"},"Casper Blockchain"),"\nand lets you to easily run them against ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-execution-engine"},"Casper's Execution Engine")," locally."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"A struct to be written into the storage must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait OdraType: \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("p",null,"The other exposed types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CallArgs")," - wraps around casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},(0,r.kt)("inlineCode",{parentName:"a"},"RuntimeArgs")),";"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," - U512 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"BlockTime")," - u64 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Address")," - an enum that encapsulates casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/account/struct.AccountHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"AccountHash"))," and ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/struct.ContractPackageHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ContractPackageHash")))),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances."),(0,r.kt)("h3",{id:"events"},"Events"),(0,r.kt)("p",null,"An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've\nalready learned from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/events"},"events article"),", in Odra you emit an event, similarly, you would do it in ",(0,r.kt)("a",{parentName:"p",href:"https://docs.soliditylang.org/en/v0.8.15/contracts.html#example"},"Solidity"),"."),(0,r.kt)("p",null,"Under the hood, Odra integrates with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/make-software/casper-event-standard"},"Casper Event Standard")," and creates a few ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/struct.URef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"URef"),"s")," in the global state when a contract is being installed:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events")," - a dictionary that stores events' data."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_length")," - the evens count."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_ces_version")," - the version of ",(0,r.kt)("inlineCode",{parentName:"li"},"Casper Event Standard"),". "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_schema")," - a dictionary that stores event schemas.")),(0,r.kt)("p",null,"Besides that, all the events the contract emits are registered - events schemas are written to the storage under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__events_schema")," key."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Don't forget to expose events in the module using ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module(events = [...])]"),". ")),(0,r.kt)("p",null,"So, ",(0,r.kt)("inlineCode",{parentName:"p"},"Events")," are nothing different from any other data stored by a contract."),(0,r.kt)("p",null,"A struct to be an event must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"SerializableEvent")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait SerializableEvent: \n odra_types::event::OdraEvent + \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("h3",{id:"payable"},"Payable"),(0,r.kt)("p",null,"The first Odra idiom is a ",(0,r.kt)("inlineCode",{parentName:"p"},"Contract Main Purse"),". It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper ",(0,r.kt)("inlineCode",{parentName:"p"},"URef")," and a purse are created and stored under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse")," key."),(0,r.kt)("p",null,"Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo Purse"),". It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse."),(0,r.kt)("p",null,"Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable.\nIf under the way something goes wrong with the transfer, the contract reverts."),(0,r.kt)("p",null,"The transferred amount can be read inside the contract by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Odra expects the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," runtime argument to be attached to a contract call.\nIn case of its absence, the ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()")," returns zero.")),(0,r.kt)("h3",{id:"revert"},"Revert"),(0,r.kt)("p",null,"In Casper, we can stop the execution pretty straightforwardly - call the ",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::revert()"),".\nOdra adds an extra abstraction layer - in a contract ",(0,r.kt)("inlineCode",{parentName:"p"},"ExecutionError"),"s are defined, which ultimately are transformed into Casper's ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/enum.ApiError.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ApiError::User")),"."),(0,r.kt)("h3",{id:"context"},"Context"),(0,r.kt)("p",null,"Casper equips developers with very low-level tooling, which can be cumbersome for newcomers.\nIf you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_address()")," function takes the first element of the callstack (",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-contract/latest/casper_contract/contract_api/runtime/fn.get_call_stack.html"},(0,r.kt)("inlineCode",{parentName:"a"},"runtime::get_call_stack()")),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::caller()")," function takes the second element of the call stack (",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::get_call_stack()"),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"As mentioned in the ","[Payable]"," section, to store CSPR, each contract creates its purse. To read the contract balance, you call ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_balance"),", which checks the balance of the purse stored under ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse"),"."),(0,r.kt)("h2",{id:"test-env"},"Test Env"),(0,r.kt)("p",null,"Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Casper Execution Engine"),"."),(0,r.kt)("p",null,"In your test, you can freely switch execution context by setting as a caller (",(0,r.kt)("inlineCode",{parentName:"p"},"test_env::set_caller()"),") one of the 20 predefined accounts. Each account possesses the default amount of ",(0,r.kt)("inlineCode",{parentName:"p"},"Motes")," (100_000_000_000_000_000)."),(0,r.kt)("p",null,"The Test Env internally keeps track of the current ",(0,r.kt)("inlineCode",{parentName:"p"},"block time"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"error")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"attached value"),"."),(0,r.kt)("p",null,"Each test is executed on a fresh instance of the Test Env."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Name of the Casper backend in Odra is ",(0,r.kt)("inlineCode",{parentName:"p"},"casper"),", so to run the tests against it, simply pass it as a ",(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\nparameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"If you want to just generate a wasm file, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("h2",{id:"constructors"},"Constructors"),(0,r.kt)("p",null,"Let's define a basic Odra module that includes a constructor:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\nstruct Counter {\n value: Variable<u32>\n}\n\n#[odra::module]\nimpl Counter {\n #[odra(init)]\n pub initialize(&mut self, value: u32) {\n self.value.set(value);\n }\n}\n")),(0,r.kt)("p",null,"Read more about constructors ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/advanced/attributes#init"},"here"),"."),(0,r.kt)("h3",{id:"wasm-arguments"},"WASM arguments"),(0,r.kt)("p",null,"When deploying a new contract you have to specify following arguments."),(0,r.kt)("p",null,"Required arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The key under which the package hash of the contract will be stored."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_allow_key_override")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true")," and the key specified in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," already exists, it will be overwritten."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_is_upgradable")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),", the contract will be deployed as upgradable.")),(0,r.kt)("p",null,"Optional arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_constructor")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. If the contract has the constructor entry point marked with ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]"),", this should be set to the constructor name."),(0,r.kt)("li",{parentName:"ul"},"constructor arguments that match entry point set in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_constructor"),".")),(0,r.kt)("h2",{id:"contract-deploys"},"Contract Deploys"),(0,r.kt)("h3",{id:"example-deploy-counter"},"Example: Deploy Counter"),(0,r.kt)("p",null,"To deploy your contract with a constructor using ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client"),", you need to pass the above arguments.\nAdditionally, you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," argument, which sets the arbitrary initial value for the counter."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 5000000000000 \\\n --session-path ./wasm/counter.wasm \\\n --session-arg "odra_cfg_package_hash_key_name:string:\'counter_package_hash\'" \\\n --session-arg "odra_cfg_allow_key_override:bool:\'true\'" \\\n --session-arg "odra_cfg_is_upgradable:bool:\'true\'" \\\n --session-arg "odra_cfg_constructor:string:\'initialize\'" \\\n --session-arg "value:u32:42" \n')),(0,r.kt)("p",null,"For a more in-depth tutorial, please refer to the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.casper.network/writing-contracts/"},"Casper's 'Writing On-Chain Code'"),"."),(0,r.kt)("h3",{id:"example-deploy-erc721"},"Example: Deploy ERC721"),(0,r.kt)("p",null,"Odra comes with a standard ERC721 token implementation.\nClone the main Odra repo and navigate to the ",(0,r.kt)("inlineCode",{parentName:"p"},"modules")," directory."),(0,r.kt)("p",null,"Firstly contract needs to be compiled."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper -c erc721_token\n")),(0,r.kt)("p",null,"It produces the ",(0,r.kt)("inlineCode",{parentName:"p"},"erc721_token.wasm")," file in the ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," directory."),(0,r.kt)("p",null,"Now it's time to deploy the contract."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 300000000000 \\\n --session-path ./wasm/erc721_token.wasm \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'my_nft'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'false'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"odra_cfg_constructor:string:'init'\" \\\n --session-arg \"name:string:'MyNFT'\" \\\n --session-arg \"symbol:string:'NFT'\" \\\n --session-arg \"base_uri:string:'https://example.com/'\"\n")),(0,r.kt)("p",null,"It's done.\nThe contract is deployed and ready to use.\nYour account is the owner of the contract and you can mint and burn tokens.\nFor more details see the code of the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.5.0/modules/src/erc721_token.rs"},"ERC721")," module."),(0,r.kt)("p",null,"To obtain the package hash of the contract search for ",(0,r.kt)("inlineCode",{parentName:"p"},"my_nft")," key\nin your account's named keys."),(0,r.kt)("h3",{id:"example-deploy-erc1155"},"Example: Deploy ERC1155"),(0,r.kt)("p",null,"The process is similar to the one described in the previous section."),(0,r.kt)("p",null,"Contract compilation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper -c erc1155_token\n")),(0,r.kt)("p",null,"Contract deployment:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 300000000000 \\\n --session-path ./wasm/erc1155_token.wasm \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'my_tokens'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'false'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"odra_cfg_constructor:string:'init'\" \\\n")),(0,r.kt)("p",null,"As previously, your account is the owner and can mint and burn tokens.\nFor more details see the code of the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.5.0/modules/src/erc1155_token.rs"},"ERC1155")," module."),(0,r.kt)("h2",{id:"sending-cspr-to-a-contract"},"Sending CSPR to a contract"),(0,r.kt)("p",null,"Defining payable entry points is described in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/native-token"},"Native Token")," section."),(0,r.kt)("p",null,"What is happening under the hood is that Odra creates a new ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," argument for each payable\nentry point. The ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," needs to be top-upped with CSPR before calling the contract.\nWhen a contract adds CSPR to another contract call, Odra handles it for you.\nThe problem arises when you want to call an entry point and attach CSPR as an account.\nThe only way of doing that is by executing code in the sessions context, that\ntop-ups the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," and then calls the contract."),(0,r.kt)("p",null,"Odra provides a generic ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," that does exactly that.\nYou can build it by yourself from the main Odra repository, or use the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.4.0/odra-casper/livenet/resources/proxy_caller.wasm"},"proxy_caller.wasm"),"\nwe maintain."),(0,r.kt)("h3",{id:"using-proxy_callerwasm"},"Using proxy_caller.wasm"),(0,r.kt)("p",null,"To use the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," you need to attach the following arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"contract_package_hash")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"BytesArray(32)")," type. The package hash of the contract you want to call.\nResult of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," on ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/contracts/struct.ContractPackageHash.html"},"CasperPackageHash"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"entry_point")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The name of the entry point you want to call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"args")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bytes")," type. It is a serialized ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},"RuntimeArgs")," with the arguments you want to pass\nto the entry point. To be specific it is the result of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," method wrapped with ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/bytesrepr/struct.Bytes.html"},"Bytes")," type."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"attached_value"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<U512>")," type. The amount of CSPR you want to attach to the call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"amount"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"U512")," type. Should be the same value as ",(0,r.kt)("inlineCode",{parentName:"li"},"attached_value")," if not ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".\nIt is a special Casper argument that enables the access to account's main purse.")),(0,r.kt)("p",null,"Currently ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client")," doesn't allow building such arguments.\nYou have to build it using your SDK."),(0,r.kt)("h2",{id:"execution"},"Execution"),(0,r.kt)("p",null,"First thing Odra does with your code, is similar to the one used in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/backends/mock-vm"},"MockVM")," -\na list of entrypoints is generated, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[IR];\n id2[IR]--\x3eid3((WASM))\n id3((WASM))--\x3eid4[(Local Casper\\nExecution Engine)]\n id3((WASM))--\x3eid5[(Casper Network)]"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5b4d97e3.0c110946.js b/docs/assets/js/5b4d97e3.0c110946.js new file mode 100644 index 000000000..35f6de17a --- /dev/null +++ b/docs/assets/js/5b4d97e3.0c110946.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5057],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>c});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),m=u(t),c=r,w=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?a.createElement(w,o(o({ref:n},d),{},{components:t})):a.createElement(w,o({ref:n},d))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},35061:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=t(87462),r=(t(67294),t(3905));const i={sidebar_position:1},o="Ownable",l={unversionedId:"tutorials/ownable",id:"version-0.7.0/tutorials/ownable",title:"Ownable",description:"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.",source:"@site/versioned_docs/version-0.7.0/tutorials/ownable.md",sourceDirName:"tutorials",slug:"/tutorials/ownable",permalink:"/docs/tutorials/ownable",draft:!1,tags:[],version:"0.7.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Tutorials",permalink:"/docs/category/tutorials"},next:{title:"ERC-20",permalink:"/docs/tutorials/erc20"}},s={},u=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Define a module",id:"define-a-module",level:3},{value:"Init the module",id:"init-the-module",level:3},{value:"Features implementation",id:"features-implementation",level:3},{value:"Test",id:"test",level:3},{value:"Summary",id:"summary",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:u};function p(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features."),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"storing a single value,"),(0,r.kt)("li",{parentName:"ul"},"defining constructors,"),(0,r.kt)("li",{parentName:"ul"},"error handling,"),(0,r.kt)("li",{parentName:"ul"},"defining and emitting ",(0,r.kt)("inlineCode",{parentName:"li"},"events"),"."),(0,r.kt)("li",{parentName:"ul"},"registering a contact in a test environment,"),(0,r.kt)("li",{parentName:"ul"},"interactions with the test environment,"),(0,r.kt)("li",{parentName:"ul"},"assertions (value, events, errors assertions).")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Before we write any code, we define functionalities we would like to implement."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Module has an initializer that should be called once. "),(0,r.kt)("li",{parentName:"ol"},"Only the current owner can set a new owner."),(0,r.kt)("li",{parentName:"ol"},"Read the current owner."),(0,r.kt)("li",{parentName:"ol"},"A function that fails if called by a non-owner account.")),(0,r.kt)("h3",{id:"define-a-module"},"Define a module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{types::Address, Variable};\n\n#[odra::module]\npub struct Ownable {\n owner: Variable<Address>\n}\n")),(0,r.kt)("p",null,"That was easy, but it is crucial to understand the basic before we move on."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3")," - Firstly, we need create a struct called ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," and apply ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]")," to it above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),".")),(0,r.kt)("h3",{id:"init-the-module"},"Init the module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{\n execution_error, contract_env, Event, types::{Address, event::OdraEvent}\n};\n...\n\n#[odra::module]\nimpl Ownable {\n #[odra(init)]\n pub fn init(&mut self, owner: &Address) {\n if self.owner.get().is_some() {\n contract_env::revert(Error::OwnerIsAlreadyInitialized)\n }\n\n self.owner.set(*owner);\n \n OwnershipChanged {\n prev_owner: None,\n new_owner: *owner\n }\n .emit();\n }\n}\n\nexecution_error! {\n pub enum Error {\n OwnerIsNotInitialized => 1,\n }\n}\n\n#[derive(Event, Debug, PartialEq, Eq)]\npub struct OwnershipChanged {\n pub prev_owner: Option<Address>,\n pub new_owner: Address\n}\n")),(0,r.kt)("p",null,"Ok, we have done a couple of things, let's analyze them one by one:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," should be an odra module, so add ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function is marked as ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]")," making it a constructor. It matters if we would like to deploy the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," module as a standalone contract."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum. Notice that the ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum is defined inside the ",(0,r.kt)("inlineCode",{parentName:"li"},"execution_error")," macro. It generates, among others, the required ",(0,r.kt)("inlineCode",{parentName:"li"},"Into<ExecutionError>")," binding."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L9-L11")," - If the owner has been set already, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::revert()")," function. As an argument we pass ",(0,r.kt)("inlineCode",{parentName:"li"},"Error::OwnerIsNotInitialized"),". "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13")," - Then we write the owner passed as an argument to the storage. To do so we call the ",(0,r.kt)("inlineCode",{parentName:"li"},"set()")," on ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29-L33")," - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::Event"),". We highly recommend to derive ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PartialEq")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Eq")," for testing purpose."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Finally, we create the ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged")," struct and call ",(0,r.kt)("inlineCode",{parentName:"li"},"emit()")," function on it (import ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::types::event::OdraEvent")," trait). Hence we set the first owner, we set the ",(0,r.kt)("inlineCode",{parentName:"li"},"prev_owner")," value to ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".")),(0,r.kt)("h3",{id:"features-implementation"},"Features implementation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Ownable {\n ...\n\n pub fn ensure_ownership(&self, address: &Address) {\n if Some(address) != self.owner.get().as_ref() {\n contract_env::revert(Error::NotOwner)\n }\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ensure_ownership(&contract_env::caller());\n let current_owner = self.get_owner();\n self.owner.set(*new_owner);\n OwnershipChanged {\n prev_owner: Some(current_owner),\n new_owner: *new_owner\n }\n .emit();\n }\n\n pub fn get_owner(&self) -> Address {\n match self.owner.get() {\n Some(owner) => owner,\n None => contract_env::revert(Error::OwnerIsNotInitialized)\n }\n }\n}\n\nexecution_error! {\n pub enum Error {\n NotOwner => 1,\n OwnerIsAlreadyInitialized => 2,\n OwnerIsNotInitialized => 3,\n }\n}\n")),(0,r.kt)("p",null,"The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5,L32")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()")," is reads the current owner, and reverts if is does not match the input ",(0,r.kt)("inlineCode",{parentName:"li"},"Address"),". Also we need to update our ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum adding a new variant ",(0,r.kt)("inlineCode",{parentName:"li"},"NotOwner"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - The function defined above can be reused in ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()")," implementation. We pass to it the current caller, using the ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::caller()")," function. The we update the state, and emit ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L22,L34")," - Lastly, a getter function. As the ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable")," ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returns an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option"),", we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," variant ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnerIsNotInitialized"),".")),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[cfg(test)]\nmod tests {\n use super::*;\n use odra::{assert_events, test_env};\n\n fn setup() -> (Address, OwnableRef) {\n let owner = test_env::get_account(0);\n let ownable = OwnableDeployer::init(owner);\n (owner, ownable)\n }\n\n #[test]\n fn initialization_works() {\n let (owner, ownable) = setup();\n assert_eq!(ownable.get_owner(), owner);\n \n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n );\n }\n\n #[test]\n fn owner_can_change_ownership() {\n let (owner, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n \n test_env::set_caller(owner);\n ownable.change_ownership(&new_owner);\n assert_eq!(ownable.get_owner(), new_owner);\n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: Some(owner),\n new_owner\n }\n );\n }\n\n #[test]\n fn non_owner_cannot_change_ownership() {\n let (_, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n ownable.change_ownership(&new_owner);\n \n test_env::assert_exception(Error::NotOwner, || {\n ownable.change_ownership(&new_owner);\n });\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - Each test case starts with the same initialization process, so for convenience, we defined the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we call as the first statement in each test. Take a look at the signature ",(0,r.kt)("inlineCode",{parentName:"li"},"fn setup() -> (Address, OwnableRef)"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableRef")," is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"get_owner()"),", but not ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which is a constructor."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Now, the module needs an owner, the easiest way is to take one from the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env"),". We choose the address of first account (which is the default one)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L8")," - Odra created for us ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableDeployer")," struct which implements all constructor functions. In this case there is just one function - ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which corresponds the function we have implemented in the module."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - It is time to define the first test. As you see, it is a regular rust test."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L14-15")," - Using the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may have noticed, we use here the term ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," interchangeably with ",(0,r.kt)("inlineCode",{parentName:"p"},"contract"),". The reason is once we deploy our module onto a virtual blockchain it may be considered a contract."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L17-23")," - On the contract, only the ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events"),". As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30")," - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the ",(0,r.kt)("inlineCode",{parentName:"li"},"test env")," predefines 20 accounts."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L32")," - As mentioned, the default is the 0-th account, if you want to change the executor call the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::set_caller()")," function. ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The caller switch applies only the next contract interaction, the second call will be done as the default account."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L49-55")," - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::assert_exception()")," with the error you expect and a failing block of code.")),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next tutorial we will implement a ERC20 standard."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5bcb7a16.b39fe9ec.js b/docs/assets/js/5bcb7a16.b39fe9ec.js new file mode 100644 index 000000000..924e17ad6 --- /dev/null +++ b/docs/assets/js/5bcb7a16.b39fe9ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2098],{66904:e=>{e.exports=JSON.parse('{"title":"Advanced","description":"Advanced concepts of Odra Framework","slug":"/category/advanced","permalink":"/docs/0.3.0/category/advanced","navigation":{"previous":{"title":"Native token","permalink":"/docs/0.3.0/basics/native-token"},"next":{"title":"Module Composer","permalink":"/docs/0.3.0/advanced/composer"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/5be2abc9.f73320be.js b/docs/assets/js/5be2abc9.f73320be.js new file mode 100644 index 000000000..e87696e02 --- /dev/null +++ b/docs/assets/js/5be2abc9.f73320be.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9737],{95650:e=>{e.exports=JSON.parse('{"title":"Basics","description":"Basic concepts of Odra Framework","slug":"/category/basics","permalink":"/docs/0.2.0/category/basics","navigation":{"previous":{"title":"Flipper example","permalink":"/docs/0.2.0/getting-started/flipper"},"next":{"title":"Cargo Odra","permalink":"/docs/0.2.0/basics/cargo-odra"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/5bf6529c.a6bc321b.js b/docs/assets/js/5bf6529c.a6bc321b.js new file mode 100644 index 000000000..7eeaaefd1 --- /dev/null +++ b/docs/assets/js/5bf6529c.a6bc321b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5113],{50520:e=>{e.exports=JSON.parse('{"title":"Advanced","description":"Advanced concepts of Odra Framework","slug":"/category/advanced","permalink":"/docs/0.4.0/category/advanced","navigation":{"previous":{"title":"Native token","permalink":"/docs/0.4.0/basics/native-token"},"next":{"title":"Module Composer","permalink":"/docs/0.4.0/advanced/composer"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/5bff39d6.e237ef14.js b/docs/assets/js/5bff39d6.e237ef14.js new file mode 100644 index 000000000..ce7cdbb31 --- /dev/null +++ b/docs/assets/js/5bff39d6.e237ef14.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5753],{86871:e=>{e.exports=JSON.parse('{"title":"Basics","description":"Basic concepts of Odra Framework","slug":"/category/basics","permalink":"/docs/0.3.0/category/basics","navigation":{"previous":{"title":"Flipper example","permalink":"/docs/0.3.0/getting-started/flipper"},"next":{"title":"Cargo Odra","permalink":"/docs/0.3.0/basics/cargo-odra"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/5c4991bb.a02d70ad.js b/docs/assets/js/5c4991bb.a02d70ad.js new file mode 100644 index 000000000..fc741ecd2 --- /dev/null +++ b/docs/assets/js/5c4991bb.a02d70ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4189],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},p),{},{components:a})):n.createElement(g,i({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=a[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},57890:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1,description:"A tool for managing Odra projects"},i="Cargo Odra",l={unversionedId:"basics/cargo-odra",id:"version-0.3.1/basics/cargo-odra",title:"Cargo Odra",description:"A tool for managing Odra projects",source:"@site/versioned_docs/version-0.3.1/basics/01-cargo-odra.md",sourceDirName:"basics",slug:"/basics/cargo-odra",permalink:"/docs/0.3.1/basics/cargo-odra",draft:!1,tags:[],version:"0.3.1",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"A tool for managing Odra projects"},sidebar:"tutorialSidebar",previous:{title:"Basics",permalink:"/docs/0.3.1/category/basics"},next:{title:"Directory structure",permalink:"/docs/0.3.1/basics/directory-structure"}},s={},c=[{value:"Managing projects",id:"managing-projects",level:2},{value:"Generating code",id:"generating-code",level:2},{value:"Testing",id:"testing",level:2},{value:"Building code",id:"building-code",level:2},{value:"Updating dependencies",id:"updating-dependencies",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cargo-odra"},"Cargo Odra"),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.1/getting-started/installation"},"Installation")," tutorial properly,\nyou should already be set up with the Cargo Odra tool. It is an executable that will help you with\nmanaging your smart contracts project, testing and running them on multiple backends (blockchains)."),(0,r.kt)("p",null,"Let's take a look at all the possibilities that Cargo Odra gives you."),(0,r.kt)("h2",{id:"managing-projects"},"Managing projects"),(0,r.kt)("p",null,"Two commands will help you create a new project. The first one is ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra new"),".\nYou need to pass one parameter, namely ",(0,r.kt)("inlineCode",{parentName:"p"},"--name {PROJECT_NAME}"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project\n")),(0,r.kt)("p",null,"This will create a new project in the ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project")," folder and name it ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project"),". You can see it\nfor yourself, for example by taking a look into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file created in your project's folder:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n')),(0,r.kt)("p",null,"The project is created using the template located in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra's main repository"),".\nBy default it uses ",(0,r.kt)("inlineCode",{parentName:"p"},"full")," template, if you want, you can use minimalistic ",(0,r.kt)("inlineCode",{parentName:"p"},"blank")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -t blank --name my-project\n")),(0,r.kt)("p",null,"By default, the latest release of Odra will be used for the template and as a dependency.\nYou can pass a source of Odra you want to use, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"-s")," parameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -n my-project -s ../odra # will use local folder of odra\ncargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release\ncargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io\n")),(0,r.kt)("p",null,"The second way of creating a project is by using ",(0,r.kt)("inlineCode",{parentName:"p"},"init")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra init --name my-project\n")),(0,r.kt)("p",null,"It works in the same way as ",(0,r.kt)("inlineCode",{parentName:"p"},"new"),", but instead of creating a new folder, it will create a project\nin the current, empty directory."),(0,r.kt)("h2",{id:"generating-code"},"Generating code"),(0,r.kt)("p",null,"If you want to quickly create a new contract code, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"generate")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra generate -c counter \n")),(0,r.kt)("p",null,"This will create a new file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/counter.rs")," with sample code, add appropriate ",(0,r.kt)("inlineCode",{parentName:"p"},"use")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mod")," sections\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"src/lib.rs")," and update the ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file accordingly. To learn more about ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file,\nvisit ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.1/basics/odra-toml"},"Odra.toml"),"."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Most used command during the development of your project should be this one:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"It will run your tests against Odra's MockVM. It is substantially faster than virtual machines\nprovided by blockchains developers and implements all the features Odra uses."),(0,r.kt)("p",null,'When you want to run tests against a "real" VM, just provide the name of the backend using ',(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\noption:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files,\nspin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat.\nKeep in mind that this is a lot slower than MockVM and you cannot use the debugger.\nThis is why MockVM was created and should be your first choice when developing contracts.\nOf course, testing all of your code against a blockchain VM is a must in the end."),(0,r.kt)("p",null,"If you want to run only some of the tests, you can pass arguments to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo test")," command\n(which is run in the background obviously):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- this-will-be-passed-to-cargo-test\n")),(0,r.kt)("p",null,"If you want to run tests which names contain the word ",(0,r.kt)("inlineCode",{parentName:"p"},"two"),", you can execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- two\n")),(0,r.kt)("p",null,"Of course, you can do the same when using the backend:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper -- two\n")),(0,r.kt)("h2",{id:"building-code"},"Building code"),(0,r.kt)("p",null,"You can also build the code itself and generate the output contracts without running the tests.\nTo do so, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("p",null,"Where ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," is the name of the backend we are using in this example. If the build process\nfinishes successfully, wasm files will be located in ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," folder."),(0,r.kt)("h2",{id:"updating-dependencies"},"Updating dependencies"),(0,r.kt)("p",null,"You will learn later, that the project using Odra contains more than one Rust project - your own and\none or more builders. To run ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo update")," on all of them at once instead of traversing all the folders\nyou can use this command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra update\n")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next section, we will take a look at all the files and directories that ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," created\nfor us and explain their purpose."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5c77c5fd.3835990b.js b/docs/assets/js/5c77c5fd.3835990b.js new file mode 100644 index 000000000..d1335311a --- /dev/null +++ b/docs/assets/js/5c77c5fd.3835990b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2007],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?n(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,o,a=function(e,r){if(null==e)return{};var t,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},c=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return t?o.createElement(f,l(l({ref:r},c),{},{components:t})):o.createElement(f,l({ref:r},c))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,l=new Array(n);l[0]=u;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<n;p++)l[p]=t[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},23022:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var o=t(87462),a=(t(67294),t(3905));const n={sidebar_position:1},l="odra-examples",i={unversionedId:"examples/odra-examples",id:"version-0.4.0/examples/odra-examples",title:"odra-examples",description:"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.",source:"@site/versioned_docs/version-0.4.0/examples/odra-examples.md",sourceDirName:"examples",slug:"/examples/odra-examples",permalink:"/docs/0.4.0/examples/odra-examples",draft:!1,tags:[],version:"0.4.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Examples",permalink:"/docs/0.4.0/category/examples"},next:{title:"Using odra-modules",permalink:"/docs/0.4.0/examples/using-odra-modules"}},s={},p=[{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odra-examples"},"odra-examples"),(0,a.kt)("p",null,"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the ",(0,a.kt)("inlineCode",{parentName:"p"},"examples")," in the Odra main repository."),(0,a.kt)("p",null,'The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.'),(0,a.kt)("p",null,"Don't worry if you find learning solely by reading the code challenging. Go to the ",(0,a.kt)("a",{parentName:"p",href:"../category/tutorials/"},"Tutorial")," section, where we will review it together. We will break the code into pieces, leaving no space for further questions."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn about reusable Odra components encapsulated in ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5ca766f6.166e12ee.js b/docs/assets/js/5ca766f6.166e12ee.js new file mode 100644 index 000000000..434b7043d --- /dev/null +++ b/docs/assets/js/5ca766f6.166e12ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3538],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(n),d=o,f=m["".concat(c,".").concat(d)]||m[d]||p[d]||a;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},91669:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,description:"How to get information from the Host"},i="Host Communication",s={unversionedId:"basics/communicating-with-host",id:"version-0.6.0/basics/communicating-with-host",title:"Host Communication",description:"How to get information from the Host",source:"@site/versioned_docs/version-0.6.0/basics/06-communicating-with-host.md",sourceDirName:"basics",slug:"/basics/communicating-with-host",permalink:"/docs/0.6.0/basics/communicating-with-host",draft:!1,tags:[],version:"0.6.0",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"How to get information from the Host"},sidebar:"tutorialSidebar",previous:{title:"Storage interaction",permalink:"/docs/0.6.0/basics/storage-interaction"},next:{title:"Testing",permalink:"/docs/0.6.0/basics/testing"}},c={},l=[{value:"What's next",id:"whats-next",level:2}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"host-communication"},"Host Communication"),(0,o.kt)("p",null,"One of the things that your contract will probably do is to query the host for some information -\nwhat is the current time? Who called me? Following example shows how to do this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/host_functions.rs"',title:'"examples/src/features/host_functions.rs"'},"use odra::Variable;\nuse odra::types::{BlockTime, Address};\n\n#[odra::module]\npub struct HostContract {\n name: Variable<String>,\n created_at: Variable<BlockTime>,\n created_by: Variable<Address>,\n}\n\n#[odra::module]\nimpl HostContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.created_at.set(odra::contract_env::get_block_time());\n self.created_by.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n}\n")),(0,o.kt)("p",null,"As you can see, we are calling functions from ",(0,o.kt)("inlineCode",{parentName:"p"},"odra::contract_env"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"get_block_time()")," will return\nthe current block time wrapped in Odra type ",(0,o.kt)("inlineCode",{parentName:"p"},"BlockTime"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"caller()")," will return an Odra ",(0,o.kt)("inlineCode",{parentName:"p"},"Address")," of\na caller (this can be an external caller or another contract)."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will learn more functions that Odra exposes from host and types it uses in further articles.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"In the next article, we'll dive into testing your contracts with Odra, so you can check that the code\nwe presented in fact works!"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/5f012ce0.66530f3f.js b/docs/assets/js/5f012ce0.66530f3f.js new file mode 100644 index 000000000..4817cd3b8 --- /dev/null +++ b/docs/assets/js/5f012ce0.66530f3f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2945],{47805:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"0.3.0","label":"0.3.0","banner":"unmaintained","badge":true,"noIndex":false,"className":"docs-version-0.3.0","isLast":false,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Odra framework","href":"/docs/0.3.0/","docId":"intro"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs/0.3.0/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Flipper example","href":"/docs/0.3.0/getting-started/flipper","docId":"getting-started/flipper"}],"href":"/docs/0.3.0/category/getting-started"},{"type":"category","label":"Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Cargo Odra","href":"/docs/0.3.0/basics/cargo-odra","docId":"basics/cargo-odra"},{"type":"link","label":"Directory structure","href":"/docs/0.3.0/basics/directory-structure","docId":"basics/directory-structure"},{"type":"link","label":"Odra.toml","href":"/docs/0.3.0/basics/odra-toml","docId":"basics/odra-toml"},{"type":"link","label":"Flipper Internals","href":"/docs/0.3.0/basics/flipper-internals","docId":"basics/flipper-internals"},{"type":"link","label":"Storage interaction","href":"/docs/0.3.0/basics/storage-interaction","docId":"basics/storage-interaction"},{"type":"link","label":"Host Communication","href":"/docs/0.3.0/basics/communicating-with-host","docId":"basics/communicating-with-host"},{"type":"link","label":"Testing","href":"/docs/0.3.0/basics/testing","docId":"basics/testing"},{"type":"link","label":"Errors","href":"/docs/0.3.0/basics/errors","docId":"basics/errors"},{"type":"link","label":"Events","href":"/docs/0.3.0/basics/events","docId":"basics/events"},{"type":"link","label":"Cross calls","href":"/docs/0.3.0/basics/cross-calls","docId":"basics/cross-calls"},{"type":"link","label":"Modules","href":"/docs/0.3.0/basics/modules","docId":"basics/modules"},{"type":"link","label":"Native token","href":"/docs/0.3.0/basics/native-token","docId":"basics/native-token"}],"href":"/docs/0.3.0/category/basics"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Module Composer","href":"/docs/0.3.0/advanced/composer","docId":"advanced/composer"},{"type":"link","label":"Delegate","href":"/docs/0.3.0/advanced/delegate","docId":"advanced/delegate"},{"type":"link","label":"Advanced Storage Concepts","href":"/docs/0.3.0/advanced/advanced-storage","docId":"advanced/advanced-storage"},{"type":"link","label":"Attributes","href":"/docs/0.3.0/advanced/attributes","docId":"advanced/attributes"}],"href":"/docs/0.3.0/category/advanced"},{"type":"category","label":"Backends","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is a backend?","href":"/docs/0.3.0/backends/what-is-a-backend","docId":"backends/what-is-a-backend"},{"type":"link","label":"MockVM","href":"/docs/0.3.0/backends/mock-vm","docId":"backends/mock-vm"},{"type":"link","label":"Casper","href":"/docs/0.3.0/backends/casper","docId":"backends/casper"}],"href":"/docs/0.3.0/category/backends"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"odra-examples","href":"/docs/0.3.0/examples/odra-examples","docId":"examples/odra-examples"},{"type":"link","label":"Using odra-modules","href":"/docs/0.3.0/examples/using-odra-modules","docId":"examples/using-odra-modules"}],"href":"/docs/0.3.0/category/examples"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ownable","href":"/docs/0.3.0/tutorials/ownable","docId":"tutorials/ownable"},{"type":"link","label":"ERC-20","href":"/docs/0.3.0/tutorials/erc20","docId":"tutorials/erc20"},{"type":"link","label":"OwnedToken","href":"/docs/0.3.0/tutorials/owned-token","docId":"tutorials/owned-token"}],"href":"/docs/0.3.0/category/tutorials"}]},"docs":{"advanced/advanced-storage":{"id":"advanced/advanced-storage","title":"Advanced Storage Concepts","description":"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.","sidebar":"defaultSidebar"},"advanced/attributes":{"id":"advanced/attributes","title":"Attributes","description":"Smart contract developers with Ethereum background are familiar with Solidity\'s concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.","sidebar":"defaultSidebar"},"advanced/composer":{"id":"advanced/composer","title":"Module Composer","description":"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.","sidebar":"defaultSidebar"},"advanced/delegate":{"id":"advanced/delegate","title":"Delegate","description":"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.","sidebar":"defaultSidebar"},"backends/casper":{"id":"backends/casper","title":"Casper","description":"The Casper backend allows you to compile your contracts into WASM files which can be deployed","sidebar":"defaultSidebar"},"backends/mock-vm":{"id":"backends/mock-vm","title":"MockVM","description":"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing","sidebar":"defaultSidebar"},"backends/what-is-a-backend":{"id":"backends/what-is-a-backend","title":"What is a backend?","description":"You can think of a backend as a target platform for your smart contract.","sidebar":"defaultSidebar"},"basics/cargo-odra":{"id":"basics/cargo-odra","title":"Cargo Odra","description":"A tool for managing Odra projects","sidebar":"defaultSidebar"},"basics/communicating-with-host":{"id":"basics/communicating-with-host","title":"Host Communication","description":"How to get information from the Host","sidebar":"defaultSidebar"},"basics/cross-calls":{"id":"basics/cross-calls","title":"Cross calls","description":"Contracts calling contracts","sidebar":"defaultSidebar"},"basics/directory-structure":{"id":"basics/directory-structure","title":"Directory structure","description":"Files and folders in the Odra project","sidebar":"defaultSidebar"},"basics/errors":{"id":"basics/errors","title":"Errors","description":"Causing and handling errors","sidebar":"defaultSidebar"},"basics/events":{"id":"basics/events","title":"Events","description":"Creating and emitting Events","sidebar":"defaultSidebar"},"basics/flipper-internals":{"id":"basics/flipper-internals","title":"Flipper Internals","description":"Detailed explanation of the Flipper contract","sidebar":"defaultSidebar"},"basics/modules":{"id":"basics/modules","title":"Modules","description":"Divide your code into modules","sidebar":"defaultSidebar"},"basics/native-token":{"id":"basics/native-token","title":"Native token","description":"How to deposit, withdraw and transfer","sidebar":"defaultSidebar"},"basics/odra-toml":{"id":"basics/odra-toml","title":"Odra.toml","description":"Odra\'s configuration file","sidebar":"defaultSidebar"},"basics/storage-interaction":{"id":"basics/storage-interaction","title":"Storage interaction","description":"How to write data into blockchain\'s storage","sidebar":"defaultSidebar"},"basics/testing":{"id":"basics/testing","title":"Testing","description":"How to write tests in Odra","sidebar":"defaultSidebar"},"examples/odra-examples":{"id":"examples/odra-examples","title":"odra-examples","description":"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.","sidebar":"defaultSidebar"},"examples/using-odra-modules":{"id":"examples/using-odra-modules","title":"Using odra-modules","description":"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.","sidebar":"defaultSidebar"},"getting-started/flipper":{"id":"getting-started/flipper","title":"Flipper example","description":"To quickly start working with Odra, take a look at the following code sample. If you followed the","sidebar":"defaultSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Hello fellow Odra user! This page will guide you through the installation process.","sidebar":"defaultSidebar"},"intro":{"id":"intro","title":"Odra framework","description":"Odra Docs","sidebar":"defaultSidebar"},"tutorials/erc20":{"id":"tutorials/erc20","title":"ERC-20","description":"It\'s time for something that every smart contract developer has done at least once. Let\'s try to implement Erc20 standard. Of course, we are going to use the Odra Framework.","sidebar":"defaultSidebar"},"tutorials/ownable":{"id":"tutorials/ownable","title":"Ownable","description":"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract\'s critical features.","sidebar":"defaultSidebar"},"tutorials/owned-token":{"id":"tutorials/owned-token","title":"OwnedToken","description":"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/5f13c361.8e08356b.js b/docs/assets/js/5f13c361.8e08356b.js new file mode 100644 index 000000000..05b711ef2 --- /dev/null +++ b/docs/assets/js/5f13c361.8e08356b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9820],{77715:e=>{e.exports=JSON.parse('{"title":"Tutorials","description":"The theory is good, but the practice is even better. Let\'s go through a few examples summing up all the Odra concepts.","slug":"/category/tutorials","permalink":"/docs/0.4.0/category/tutorials","navigation":{"previous":{"title":"Using odra-modules","permalink":"/docs/0.4.0/examples/using-odra-modules"},"next":{"title":"Ownable","permalink":"/docs/0.4.0/tutorials/ownable"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/5f2971ba.76428dc4.js b/docs/assets/js/5f2971ba.76428dc4.js new file mode 100644 index 000000000..214da43f3 --- /dev/null +++ b/docs/assets/js/5f2971ba.76428dc4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3633],{3905:(e,r,n)=>{n.d(r,{Zo:()=>p,kt:()=>m});var t=n(67294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?a(Object(n),!0).forEach((function(r){o(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,o=function(e,r){if(null==e)return{};var n,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=t.createContext({}),c=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},p=function(e){var r=c(e.components);return t.createElement(l.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=o,w=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return n?t.createElement(w,s(s({ref:r},p),{},{components:n})):t.createElement(w,s({ref:r},p))}));function m(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,s[1]=i;for(var c=2;c<a;c++)s[c]=n[c];return t.createElement.apply(null,s)}return t.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1164:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=n(87462),o=(n(67294),n(3905));const a={sidebar_position:8,description:"Causing and handling errors"},s="Errors",i={unversionedId:"basics/errors",id:"version-0.2.0/basics/errors",title:"Errors",description:"Causing and handling errors",source:"@site/versioned_docs/version-0.2.0/basics/08-errors.md",sourceDirName:"basics",slug:"/basics/errors",permalink:"/docs/0.2.0/basics/errors",draft:!1,tags:[],version:"0.2.0",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"Causing and handling errors"},sidebar:"defaultSidebar",previous:{title:"Testing",permalink:"/docs/0.2.0/basics/testing"},next:{title:"Events",permalink:"/docs/0.2.0/basics/events"}},l={},c=[{value:"Testing errors",id:"testing-errors",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:r,...n}=e;return(0,o.kt)("wrapper",(0,t.Z)({},p,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"errors"},"Errors"),(0,o.kt)("p",null,"Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the\nfollowing example of a simple owned contract:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"use odra::{execution_error, Variable, UnwrapOrRevert};\nuse odra::types::Address;\n\n#[odra::module]\npub struct OwnedContract {\n name: Variable<String>,\n owner: Variable<Address>,\n}\n\nexecution_error! {\n pub enum Error {\n OwnerNotSet => 1,\n NotAnOwner => 2,\n }\n}\n\n\n#[odra::module]\nimpl OwnedContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.owner.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn owner(&self) -> Address {\n self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n }\n\n pub fn change_name(&mut self, name: String) {\n let caller = odra::contract_env::caller();\n if caller != self.owner() {\n odra::contract_env::revert(Error::NotAnOwner)\n }\n\n self.name.set(name);\n }\n}\n")),(0,o.kt)("p",null,"Firstly, we are using ",(0,o.kt)("inlineCode",{parentName:"p"},"execution_error!")," macro to define our own set of Errors that our contract will\nthrow. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use\n",(0,o.kt)("inlineCode",{parentName:"p"},"unwrap_or_revert_with")," and pass an error as an argument:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n")),(0,o.kt)("p",null,"You and the users of your contract will be thankful for a meaningful error message!"),(0,o.kt)("p",null,"You can also throw the error directly, by using ",(0,o.kt)("inlineCode",{parentName:"p"},"revert"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"odra::contract_env::revert(Error::NotAnOwner)\n")),(0,o.kt)("h2",{id:"testing-errors"},"Testing errors"),(0,o.kt)("p",null,"Okay, but how about testing it? We've already mentioned a function - ",(0,o.kt)("inlineCode",{parentName:"p"},"assert_exception"),". This is how you will\nuse it:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},'use super::{OwnedContractDeployer, OwnedContractRef};\nuse super::Error;\n\n#[test]\nfn test_owner_error() {\n let owner = odra::test_env::get_account(0);\n let not_an_owner = odra::test_env::get_account(1);\n\n odra::test_env::set_caller(owner);\n let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());\n\n odra::test_env::set_caller(not_an_owner);\n odra::test_env::assert_exception(Error::NotAnOwner, || {\n let mut owned_contract = OwnedContractRef::at(owned_contract.address());\n owned_contract.change_name("NewName".to_string());\n })\n}\n')),(0,o.kt)("p",null,"In the example above, because we are calling the ",(0,o.kt)("inlineCode",{parentName:"p"},"change_name"),' method as an address which is not an "owner",\nwe are expecting that "NotAnOwner" error will be thrown.'),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Here we are creating another reference to the already deployed contract using ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedContractRef::at()")," and passing to it\nits Address. Note that ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedContractDeployer::init()")," returns the same type.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will learn how to emit and test events using Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/60d35280.be2bbe36.js b/docs/assets/js/60d35280.be2bbe36.js new file mode 100644 index 000000000..10cb95437 --- /dev/null +++ b/docs/assets/js/60d35280.be2bbe36.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8733],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=a,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},23694:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:3,description:"Odra's configuration file"},i="Odra.toml",l={unversionedId:"basics/odra-toml",id:"basics/odra-toml",title:"Odra.toml",description:"Odra's configuration file",source:"@site/docs/basics/03-odra-toml.md",sourceDirName:"basics",slug:"/basics/odra-toml",permalink:"/docs/next/basics/odra-toml",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"Odra's configuration file"},sidebar:"tutorialSidebar",previous:{title:"Directory structure",permalink:"/docs/next/basics/directory-structure"},next:{title:"Flipper Internals",permalink:"/docs/next/basics/flipper-internals"}},c={},s=[{value:"Adding a new contract manually",id:"adding-a-new-contract-manually",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"As mentioned in the previous article, ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," is a file that contains information about all the contracts\nthat Odra will build. Let's take a look at the file structure again:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) is used by the building tools to locate and build the contract.\nThe last segment of the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," will be used as the name for your contract - the generated wasm file will\nbe in the above case named ",(0,a.kt)("inlineCode",{parentName:"p"},"flipper.wasm"),"."),(0,a.kt)("h2",{id:"adding-a-new-contract-manually"},"Adding a new contract manually"),(0,a.kt)("p",null,"Besides using the ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command, you can add a new contract to be compiled by hand.\nTo do this, add another ",(0,a.kt)("inlineCode",{parentName:"p"},"[[contracts]]")," element, name it and make sure that the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," is set correctly."),(0,a.kt)("p",null,"For example, if you want to create a new contract called ",(0,a.kt)("inlineCode",{parentName:"p"},"counter"),", your ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file should finally\nlook like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nfqn = "sample::Flipper"\n\n[[contracts]]\nfqn = "sample::Counter"\n')),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous\n",(0,a.kt)("inlineCode",{parentName:"p"},"Flipper")," contract."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/60dd6115.411922ef.js b/docs/assets/js/60dd6115.411922ef.js new file mode 100644 index 000000000..caad29ae7 --- /dev/null +++ b/docs/assets/js/60dd6115.411922ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3069],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,f=u["".concat(i,".").concat(m)]||u[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var c=2;c<s;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},21229:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:10,description:"Contracts calling contracts"},o="Cross calls",l={unversionedId:"basics/cross-calls",id:"version-0.5.0/basics/cross-calls",title:"Cross calls",description:"Contracts calling contracts",source:"@site/versioned_docs/version-0.5.0/basics/10-cross-calls.md",sourceDirName:"basics",slug:"/basics/cross-calls",permalink:"/docs/0.5.0/basics/cross-calls",draft:!1,tags:[],version:"0.5.0",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Contracts calling contracts"},sidebar:"tutorialSidebar",previous:{title:"Events",permalink:"/docs/0.5.0/basics/events"},next:{title:"Modules",permalink:"/docs/0.5.0/basics/modules"}},i={},c=[{value:"Contract Ref",id:"contract-ref",level:2},{value:"Testing",id:"testing",level:2}],d={toc:c};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cross-calls"},"Cross calls"),(0,r.kt)("p",null,"To show how to handle calls between contracts, first, let's implement two of them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"use odra::Variable;\nuse odra::types::{Address};\n\n#[odra::module]\npub struct CrossContract {\n pub math_engine: Variable<Address>,\n}\n\n#[odra::module]\nimpl CrossContract {\n #[odra(init)]\n pub fn init(&mut self, math_engine_address: Address) {\n self.math_engine.set(math_engine_address);\n }\n\n pub fn add_using_another(&self) -> u32 {\n let math_engine_address = self.math_engine.get().unwrap();\n MathEngineRef::at(math_engine_address).add(3, 5)\n }\n}\n\n#[odra::module]\npub struct MathEngine {\n}\n\n#[odra::module]\nimpl MathEngine {\n pub fn add(&self, n1: u32, n2: u32) -> u32 {\n n1 + n2\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract can add two numbers. ",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," takes an ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," in its init function and saves it in\nstorage for later use. If we deploy the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," first and take note of its address, we can then deploy\n",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," and use ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," to perform complicated calculations for us!"),(0,r.kt)("p",null,"To call the external contract, we use the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," that was created for us by Odra:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"MathEngineRef::at(math_engine_address).add(3, 5)\n")),(0,r.kt)("h2",{id:"contract-ref"},"Contract Ref"),(0,r.kt)("p",null,"We mentioned ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," already in our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/testing"},"Testing")," article.\nIt is a reference to already deployed - running contract.\nHere we are going to take a deeper look at it."),(0,r.kt)("p",null,"Similarly to a ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," is generated automatically, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nTo get an instance of a reference, we can either deploy a contract (using ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),") or by building it\ndirectly, using ",(0,r.kt)("inlineCode",{parentName:"p"},"::at(address: Address)")," method, as shown above.\nThe reference implements all the public endpoints to the contract (those marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),"\nimpl), alongside couple methods:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"at(Address) -> Self")," - points the reference to an Address"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"address() -> Address")," - returns the Address the reference is currently pointing at"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"with_tokens(Amount) -> Self")," - attaches Amount of native tokens to the next call")),(0,r.kt)("h1",{id:"external-contracts"},"External Contracts"),(0,r.kt)("p",null,"Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI."),(0,r.kt)("p",null,"For that purpose, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra:external_contract]")," macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of."),(0,r.kt)("p",null,"Let's pretend the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," we defined is an external contract. There is a contract with ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function that adds two numbers somewhere."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"#[odra::external_contract]\npub trait Adder {\n fn add(&self, n1: u32, n2: u32) -> u32;\n}\n")),(0,r.kt)("p",null,"Analogously to modules, Odra creates the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderRef")," struct (but do not create the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderDeployer"),"). Having an address we can call:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"AdderRef::at(address).add(3, 5)\n")),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Let's see how we can test our cross calls using this knowledge:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"use super::{CrossContractDeployer, MathEngineDeployer};\n\n#[test]\nfn test_cross_calls() {\n let math_engine_contract = MathEngineDeployer::default();\n let cross_contract = CrossContractDeployer::init(math_engine_contract.address());\n\n assert_eq!(cross_contract.add_using_another(), 8);\n}\n")),(0,r.kt)("p",null,"Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function we want to use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"#[cfg(test)]\nmod tests {\n use odra::types::Address;\n use crate::features::cross_calls::{Adder, AdderRef};\n \n #[test]\n fn test_ext() {\n let adder = AdderRef::at(get_adder_address());\n\n assert_eq!(adder.add(1, 2), 3);\n }\n\n fn get_adder_address() -> Address {\n let contract = MathEngineDeployer::default();\n contract.address()\n }\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/615e12e7.0ccd2410.js b/docs/assets/js/615e12e7.0ccd2410.js new file mode 100644 index 000000000..bebf6530c --- /dev/null +++ b/docs/assets/js/615e12e7.0ccd2410.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3472],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var c=a.createContext({}),l=function(e){var n=a.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=l(e.components);return a.createElement(c.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(t),m=r,g=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return t?a.createElement(g,i(i({ref:n},p),{},{components:t})):a.createElement(g,i({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=u;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var l=2;l<o;l++)i[l]=t[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}u.displayName="MDXCreateElement"},84147:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=t(87462),r=(t(67294),t(3905));const o={},i="Advanced Storage Concepts",s={unversionedId:"advanced/advanced-storage",id:"advanced/advanced-storage",title:"Advanced Storage Concepts",description:"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.",source:"@site/docs/advanced/02-advanced-storage.md",sourceDirName:"advanced",slug:"/advanced/advanced-storage",permalink:"/docs/next/advanced/advanced-storage",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Delegate",permalink:"/docs/next/advanced/delegate"},next:{title:"Attributes",permalink:"/docs/next/advanced/attributes"}},c={},l=[{value:"Recap and Basic Concepts",id:"recap-and-basic-concepts",level:2},{value:"Advanced Storage Concepts",id:"advanced-storage-concepts-1",level:2},{value:"Sequence",id:"sequence",level:3},{value:"Advanced Mapping",id:"advanced-mapping",level:3},{value:"AdvancedStorage Contract",id:"advancedstorage-contract",level:2},{value:"Conclusion",id:"conclusion",level:2}],p={toc:l};function d(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"advanced-storage-concepts"},"Advanced Storage Concepts"),(0,r.kt)("p",null,"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Sequence")," modules, which are key components of the advanced storage interaction in Odra."),(0,r.kt)("h2",{id:"recap-and-basic-concepts"},"Recap and Basic Concepts"),(0,r.kt)("p",null,"Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including ",(0,r.kt)("inlineCode",{parentName:"p"},"Var"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),". These types enable contracts to store and retrieve data in a structured manner. The Var type is used to store a single value, while the List and Mapping types store collections of values."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Var"),": A Var in Odra is a fundamental building block used for storing single values. Each Var is uniquely identified by its name in the contract."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Mapping"),": Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"List"),": Built on top of the Var and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over."),(0,r.kt)("p",null,"If you need a refresher on these topics, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/basics/storage-interaction"},"guide")," on basic storage in Odra."),(0,r.kt)("h2",{id:"advanced-storage-concepts-1"},"Advanced Storage Concepts"),(0,r.kt)("h3",{id:"sequence"},"Sequence"),(0,r.kt)("p",null,"The Sequence in Odra is a basic module that holds a ",(0,r.kt)("inlineCode",{parentName:"p"},"Var")," which keeps track of the current value. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub struct Sequence<T>\nwhere\n T: Num + One + OdraType\n{\n value: Var<T>\n}\n")),(0,r.kt)("p",null,"The Sequence module provides functions ",(0,r.kt)("inlineCode",{parentName:"p"},"get_current_value")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"next_value")," to get the current value and increment the value respectively."),(0,r.kt)("h3",{id:"advanced-mapping"},"Advanced Mapping"),(0,r.kt)("p",null,"In Odra, a ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," is a key-value storage system where the key is associated with a value.\nIn previous examples, the value of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," typically comprised a standard serializable type (such as number, string, or bool) or a custom type derived from ",(0,r.kt)("inlineCode",{parentName:"p"},"odra::OdraType"),"."),(0,r.kt)("p",null,"However, there are more advanced scenarios where the value of the Mapping represents a module itself. This approach is beneficial when managing a collection of modules, each maintaining its unique state."),(0,r.kt)("p",null,"Let's consider the following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"use odra::{map, types::U256, Mapping, UnwrapOrRevert};\n\nuse crate::owned_token::OwnedToken;\n\n#[odra::module]\npub struct Mappings {\n strings: Mapping<(String, u32, String), String>,\n tokens: Mapping<String, OwnedToken>\n}\n\n#[odra::module]\nimpl Mappings {\n\n ...\n\n pub fn total_supply(&mut self, token_name: String) -> U256 {\n self.tokens.module(&token_name).total_supply()\n }\n\n pub fn get_string_api(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> String {\n let opt_string = self.strings.get(&(key1, key2, key3));\n opt_string.unwrap_or_revert(&self.env())\n }\n}\n")),(0,r.kt)("p",null,"As you can see, a ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," key can consist of a tuple of values, not limited to a single value."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Accessing Odra modules differs from accessing regular values such as strings or numbers."),(0,r.kt)("p",{parentName:"admonition"},"Firstly, within a ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", you don't encapsulate the module with ",(0,r.kt)("inlineCode",{parentName:"p"},"Submodule"),"."),(0,r.kt)("p",{parentName:"admonition"},"Secondly, rather than utilizing the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping::get()")," function, call ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping::module()"),", which returns ",(0,r.kt)("inlineCode",{parentName:"p"},"SubModule<T>")," and sets the appropriate namespace for nested modules.")),(0,r.kt)("h2",{id:"advancedstorage-contract"},"AdvancedStorage Contract"),(0,r.kt)("p",null,"The given code snippet showcases the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdvancedStorage")," contract that incorporates these storage concepts."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Address, casper_types::U512, Sequence, Mapping};\nuse crate::modules::Token;\n\n#[odra::module]\npub struct AdvancedStorage {\n counter: Sequence<u32>,\n tokens: Mapping<(String, String), Token>>,\n}\n\nimpl AdvancedStorage {\n pub fn current_value(&self) -> u32 {\n self.counter.get_current_value()\n }\n\n pub fn increment_and_get(&mut self) -> u32 {\n self.counter.next_value()\n }\n\n pub fn balance_of(&mut self, token_name: String, creator: String, address: Address) -> U512 {\n let token = self.tokens.module(&(token_name, creator));\n token.balance_of(&address)\n }\n\n pub fn mint(&self, outer_token_namekey: String, creator: String, amount: U512, to: Address) {\n let mut token = self.tokens.module(&(token_name, creator));\n token.mint(amount, to);\n }\n}\n")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Advanced storage features in Odra offer robust options for managing contract state. Two key takeaways from this document are:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Odra offers a Sequence module, enabling contracts to store and increment a single value."),(0,r.kt)("li",{parentName:"ol"},"Mappings support composite keys expressed as tuples and can store modules as values.")),(0,r.kt)("p",null,"Understanding these concepts can help developers design and implement more efficient and flexible smart contracts."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/6289863c.3acee235.js b/docs/assets/js/6289863c.3acee235.js new file mode 100644 index 000000000..50fbc7302 --- /dev/null +++ b/docs/assets/js/6289863c.3acee235.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4733],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},31050:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const i={sidebar_position:4,description:"Detailed explanation of the Flipper contract"},o="Flipper Internals",l={unversionedId:"basics/flipper-internals",id:"version-0.3.0/basics/flipper-internals",title:"Flipper Internals",description:"Detailed explanation of the Flipper contract",source:"@site/versioned_docs/version-0.3.0/basics/04-flipper-internals.md",sourceDirName:"basics",slug:"/basics/flipper-internals",permalink:"/docs/0.3.0/basics/flipper-internals",draft:!1,tags:[],version:"0.3.0",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Detailed explanation of the Flipper contract"},sidebar:"defaultSidebar",previous:{title:"Odra.toml",permalink:"/docs/0.3.0/basics/odra-toml"},next:{title:"Storage interaction",permalink:"/docs/0.3.0/basics/storage-interaction"}},s={},p=[{value:"Header",id:"header",level:2},{value:"Struct",id:"struct",level:2},{value:"Impl",id:"impl",level:2},{value:"Tests",id:"tests",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-internals"},"Flipper Internals"),(0,a.kt)("p",null,"In this article, we take a deep dive into the code shown in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.0/getting-started/flipper"},"Flipper example"),", where we will explain in more detail all\nthe Odra-specific sections of the code."),(0,a.kt)("h2",{id:"header"},"Header"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"use odra::Variable;\n")),(0,a.kt)("p",null,"Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation\nthat can be reused between targets. In the above case, we're importing ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable"),", which is responsible\nfor storing simple values on the blockchain's storage."),(0,a.kt)("h2",{id:"struct"},"Struct"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// A module definition. Each module struct consists of Variables and Mappings\n/// or/and other modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value,\n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n")),(0,a.kt)("p",null,"In Odra, all contracts are also modules, which can be reused between contracts. That's why we need\nto mark the struct with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. In the struct definition itself, we state all\nthe fields of the contract. Those fields can be regular Rust data types, however - those will not\nbe persisted on the blockchain. They can also be Odra modules - defined in your project or coming\nfrom Odra itself. Finally, to make the data persistent on the blockchain, you can use something like\n",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>")," showed above. To learn more about storage interaction, take a look at the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.0/basics/storage-interaction"},"next article"),"."),(0,a.kt)("h2",{id:"impl"},"Impl"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n ...\n")),(0,a.kt)("p",null,"Similarly to the struct, we mark the ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. Odra will take all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from this section and create contract endpoints from them. So, if you wish to have\nfunctions that are not available for calling outside the contract, do not make them public. Alternatively,\nyou can create a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section without the macro - all functions defined there, even marked\nwith ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," will be not callable."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," macro marks the constructor of the contract. This function will be limited to only\nto a single call, all further calls to it will result in an error."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'}," ...\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n ...\n")),(0,a.kt)("p",null,"The endpoints above show you how to interact with the simplest type of storage - ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>"),". The data\nsaved there using ",(0,a.kt)("inlineCode",{parentName:"p"},"set")," function will be persisted in the blockchain."),(0,a.kt)("h2",{id:"tests"},"Tests"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n ...\n")),(0,a.kt)("p",null,"You can write tests in any way you prefer and know in Rust. In the example above we are deploying the\ncontract using ",(0,a.kt)("inlineCode",{parentName:"p"},"FlipperDeployer")," - a piece of code generated automatically thanks to the macros.\nThe contract will be deployed on the VM you chose while running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now let's take a look at the different types of storage that Odra provides and how to use them."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/632b087e.4eec3cd6.js b/docs/assets/js/632b087e.4eec3cd6.js new file mode 100644 index 000000000..a7a5e0557 --- /dev/null +++ b/docs/assets/js/632b087e.4eec3cd6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6499],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},67033:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:2,description:"Files and folders in the Odra project"},i="Directory structure",l={unversionedId:"basics/directory-structure",id:"version-0.5.0/basics/directory-structure",title:"Directory structure",description:"Files and folders in the Odra project",source:"@site/versioned_docs/version-0.5.0/basics/02-directory-structure.md",sourceDirName:"basics",slug:"/basics/directory-structure",permalink:"/docs/0.5.0/basics/directory-structure",draft:!1,tags:[],version:"0.5.0",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Files and folders in the Odra project"},sidebar:"tutorialSidebar",previous:{title:"Cargo Odra",permalink:"/docs/0.5.0/basics/cargo-odra"},next:{title:"Odra.toml",permalink:"/docs/0.5.0/basics/odra-toml"}},s={},c=[{value:"Cargo.toml",id:"cargotoml",level:2},{value:"Odra.toml",id:"odratoml",level:2},{value:".builder_* folders",id:"builder_-folders",level:2},{value:"src/",id:"src",level:2},{value:"target/",id:"target",level:2},{value:"wasm/",id:"wasm",level:2}],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"directory-structure"},"Directory structure"),(0,a.kt)("p",null,"After creating a new project using Odra and running the tests, you will be presented with the\nfollowing files and directories:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 CHANGELOG.md\n\u251c\u2500\u2500 Odra.toml\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 .builder_casper/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 flipper.rs\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 target/\n\u2514\u2500\u2500 wasm/\n")),(0,a.kt)("h2",{id:"cargotoml"},"Cargo.toml"),(0,a.kt)("p",null,"Let's first take a look at ",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "sample"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,a.kt)("p",null,"By default, your project will use the latest odra version available at crates.io. We are using two features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/mock-vm")," - it is responsible for running tests on Odra's MockVM"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/casper")," - backend implementation of Casper blockchain\nMore backends will be released as features that will be possible to enable here.")),(0,a.kt)("h2",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"This is the file that holds information about contracts that will be generated when running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"As we can see, we have a single contract, its ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) corresponds to\nthe contract is located in ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),".\nMore contracts can be added here by hand, or by using ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command."),(0,a.kt)("h2",{id:"builder_-folders"},".builder_* folders"),(0,a.kt)("p",null,"Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary\nfor building wasm files and running them against blockchain VMs. As it is not necessary to modify\nfiles in those folders in any way, by default they are hidden (hence the ",(0,a.kt)("inlineCode",{parentName:"p"},".")," at the beginning of the\nfolder name)."),(0,a.kt)("h2",{id:"src"},"src/"),(0,a.kt)("p",null,"This is the folder where your smart contract files live."),(0,a.kt)("h2",{id:"target"},"target/"),(0,a.kt)("p",null,"Files generated by cargo during the build process are put here."),(0,a.kt)("h2",{id:"wasm"},"wasm/"),(0,a.kt)("p",null,"WASM files generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," are put here. You can grab those WASM files\nand deploy them on the blockchain of your choosing."),(0,a.kt)("h1",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now, let's take a look at one of the files mentioned above in more detail,\nnamely the ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/64fba0bc.a26b8b88.js b/docs/assets/js/64fba0bc.a26b8b88.js new file mode 100644 index 000000000..16768f2aa --- /dev/null +++ b/docs/assets/js/64fba0bc.a26b8b88.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4500],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>m});var r=t(67294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?s(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,r,a=function(e,n){if(null==e)return{};var t,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i=r.createContext({}),c=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=c(e.components);return r.createElement(i.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,s=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(t),m=a,f=p["".concat(i,".").concat(m)]||p[m]||d[m]||s;return t?r.createElement(f,o(o({ref:n},u),{},{components:t})):r.createElement(f,o({ref:n},u))}));function m(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var s=t.length,o=new Array(s);o[0]=p;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var c=2;c<s;c++)o[c]=t[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},53101:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var r=t(87462),a=(t(67294),t(3905));const s={sidebar_position:3},o="ERC-20",l={unversionedId:"tutorials/erc20",id:"tutorials/erc20",title:"ERC-20",description:"It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.",source:"@site/docs/tutorials/erc20.md",sourceDirName:"tutorials",slug:"/tutorials/erc20",permalink:"/docs/next/tutorials/erc20",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Ownable",permalink:"/docs/next/tutorials/ownable"},next:{title:"OwnedToken",permalink:"/docs/next/tutorials/owned-token"}},i={},c=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:2},{value:"Metadata",id:"metadata",level:3},{value:"Core",id:"core",level:3},{value:"Test",id:"test",level:3},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function d(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"erc-20"},"ERC-20"),(0,a.kt)("p",null,"It's time for something that every smart contract developer has done at least once. Let's try to implement ",(0,a.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"Erc20")," standard. Of course, we are going to use the Odra Framework. "),(0,a.kt)("p",null,"The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token shares attributes that make it indistinguishable from another token of the same type and value."),(0,a.kt)("h2",{id:"framework-features"},"Framework features"),(0,a.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Advanced storage using key-value pairs,"),(0,a.kt)("li",{parentName:"ul"},"Odra types such as ",(0,a.kt)("inlineCode",{parentName:"li"},"Address"),","),(0,a.kt)("li",{parentName:"ul"},"Advanced event assertion.")),(0,a.kt)("h2",{id:"code"},"Code"),(0,a.kt)("p",null,"Our module features a considerably more complex storage layout compared to the previous example. "),(0,a.kt)("p",null,"It is designed to store the following data:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Immutable metadata - name, symbol, and decimals."),(0,a.kt)("li",{parentName:"ol"},"Total supply."),(0,a.kt)("li",{parentName:"ol"},"Balances of individual users."),(0,a.kt)("li",{parentName:"ol"},"Allowances, essentially indicating who is permitted to spend tokens on behalf of another user.")),(0,a.kt)("h2",{id:"module-definition"},"Module definition"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},"#[odra::module(events = [Transfer, Approval])]\npub struct Erc20 {\n decimals: Var<u8>,\n symbol: Var<String>,\n name: Var<String>,\n total_supply: Var<U256>,\n balances: Mapping<Address, U256>,\n allowances: Mapping<(Address, Address), U256>\n}\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L7")," - For the first time, we need to store key-value pairs. In order to do that, we use ",(0,a.kt)("inlineCode",{parentName:"li"},"Mapping"),". The name is taken after Solidity's native type ",(0,a.kt)("inlineCode",{parentName:"li"},"mapping"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L8")," - Odra does not allows nested ",(0,a.kt)("inlineCode",{parentName:"li"},"Mapping"),"s as Solidity does. Instead, you can create a compound key using a tuple of keys.")),(0,a.kt)("h3",{id:"metadata"},"Metadata"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},"#[odra::module]\nimpl Erc20 {\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {\n let caller = self.env().caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn symbol(&self) -> String {\n self.symbol.get_or_default()\n }\n\n pub fn decimals(&self) -> u8 {\n self.decimals.get_or_default()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.total_supply.get_or_default()\n }\n}\n\nimpl Erc20 {\n pub fn mint(&mut self, address: &Address, amount: &U256) {\n self.balances.add(address, *amount);\n self.total_supply.add(amount);\n \n self.env().emit_event(Transfer {\n from: None,\n to: Some(*address),\n amount: *amount\n });\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Transfer {\n pub from: Option<Address>,\n pub to: Option<Address>,\n pub amount: U256\n}\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L1")," - The first ",(0,a.kt)("inlineCode",{parentName:"li"},"impl")," block, marked as a module, contains functions defined in the ERC-20 standard."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L3-L9")," - A constructor sets the token metadata and mints the initial supply."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L11-L13")," - Getter functions are straightforward, but there is one worth-mentioning subtlety. In the ",(0,a.kt)("inlineCode",{parentName:"li"},"Ownable")," example, we used the ",(0,a.kt)("inlineCode",{parentName:"li"},"get()")," function returning an ",(0,a.kt)("inlineCode",{parentName:"li"},"Option<T>"),". If the type implements the ",(0,a.kt)("inlineCode",{parentName:"li"},"Default")," trait, you can call the ",(0,a.kt)("inlineCode",{parentName:"li"},"get_or_default()")," function, and the contract does not fail even if the value is not initialized."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L28")," - The second ",(0,a.kt)("inlineCode",{parentName:"li"},"impl")," is not an Odra module; in other words, these functions will not be part of the contract's ABI."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L29-L39")," - The ",(0,a.kt)("inlineCode",{parentName:"li"},"mint")," function is public, so, like in regular Rust code, it will be accessible from the outside. ",(0,a.kt)("inlineCode",{parentName:"li"},"mint()")," uses the notation ",(0,a.kt)("inlineCode",{parentName:"li"},"self.balances.add(&address, amount);"),", which is syntactic sugar for:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"let current_balance = self.balances.get(&address).unwrap_or_default();\nlet new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();\nself.balances.set(&address, new_balance);\n")),(0,a.kt)("h3",{id:"core"},"Core"),(0,a.kt)("p",null,"To ensure comprehensive functionality, let's implement the remaining features such as ",(0,a.kt)("inlineCode",{parentName:"p"},"transfer"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"transfer_from"),", and ",(0,a.kt)("inlineCode",{parentName:"p"},"approve"),". Since they do not introduce any new concepts, we will present them without additional remarks."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers title=erc20.rs",showLineNumbers:!0,title:"erc20.rs"},"#[odra::module]\nimpl Erc20 {\n ...\n pub fn transfer(&mut self, recipient: &Address, amount: &U256) {\n let caller = self.env().caller();\n self.raw_transfer(&caller, recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &U256) {\n let spender = self.env().caller();\n self.spend_allowance(owner, &spender, amount);\n self.raw_transfer(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &U256) {\n let owner = self.env().caller();\n self.allowances.get_instance(&owner).set(spender, *amount);\n Approval {\n owner,\n spender: *spender,\n value: *amount\n }\n .emit();\n }\n\n pub fn balance_of(&self, address: &Address) -> U256 {\n self.balances.get_or_default(&address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> U256 {\n self.allowances.get_instance(owner).get_or_default(spender)\n }\n}\n\nimpl Erc20 {\n ...\n\n fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &U256) {\n let owner_balance = self.balances.get_or_default(&owner);\n if *amount > owner_balance {\n self.env().revert(Error::InsufficientBalance)\n }\n self.balances.set(owner, owner_balance - *amount);\n self.balances.add(recipient, *amount);\n Transfer {\n from: Some(*owner),\n to: Some(*recipient),\n amount: *amount\n }\n .emit();\n }\n\n fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &U256) {\n let allowance = self.allowances.get_instance(owner).get_or_default(spender);\n if allowance < *amount {\n self.env().revert(Error::InsufficientAllowance)\n }\n let new_allowance = allowance - *amount;\n self.allowances\n .get_instance(owner)\n .set(spender, new_allowance);\n Approval {\n owner: *owner,\n spender: *spender,\n value: allowance - *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Approval {\n pub owner: Address,\n pub spender: Address,\n pub value: U256\n}\n\n#[derive(OdraError)]\npub enum Error {\n InsufficientBalance = 1,\n InsufficientAllowance = 2,\n}\n")),(0,a.kt)("p",null,"Now, compare the code we have written, with ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"},"Open Zeppelin code"),". Out of 10, how Solidity-ish is our implementation?"),(0,a.kt)("h3",{id:"test"},"Test"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},'#[cfg(test)]\npub mod tests {\n use super::{\n errors::Error,\n events::{Approval, Transfer},\n Erc20Deployer, Erc20HostRef\n };\n use odra::prelude::*;\n use odra::{casper_types::U256, HostEnv};\n\n const NAME: &str = "Plascoin";\n const SYMBOL: &str = "PLS";\n const DECIMALS: u8 = 10;\n const INITIAL_SUPPLY: u32 = 10_000;\n\n fn setup() -> (HostEnv, Erc20HostRef) {\n let env = odra_test::env();\n (\n env.clone(),\n Erc20Deployer::init(\n &env,\n SYMBOL.to_string(),\n NAME.to_string(),\n DECIMALS,\n Some(INITIAL_SUPPLY.into())\n )\n )\n }\n\n #[test]\n fn initialization() {\n // When deploy a contract with the initial supply.\n let (env, erc20) = setup();\n\n // Then the contract has the metadata set.\n assert_eq!(erc20.symbol(), SYMBOL.to_string());\n assert_eq!(erc20.name(), NAME.to_string());\n assert_eq!(erc20.decimals(), DECIMALS);\n\n // Then the total supply is updated.\n assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());\n\n // Then a Transfer event was emitted.\n assert!(env.emitted_event(\n erc20.address(),\n &Transfer {\n from: None,\n to: Some(env.get_account(0)),\n amount: INITIAL_SUPPLY.into()\n }\n ));\n }\n\n #[test]\n fn transfer_works() {\n // Given a new contract.\n let (env, mut erc20) = setup();\n\n // When transfer tokens to a recipient.\n let sender = env.get_account(0);\n let recipient = env.get_account(1);\n let amount = 1_000.into();\n erc20.transfer(recipient, amount);\n\n // Then the sender balance is deducted.\n assert_eq!(\n erc20.balance_of(sender),\n U256::from(INITIAL_SUPPLY) - amount\n );\n\n // Then the recipient balance is updated.\n assert_eq!(erc20.balance_of(recipient), amount);\n\n // Then Transfer event was emitted.\n assert!(env.emitted_event(\n erc20.address(),\n &Transfer {\n from: Some(sender),\n to: Some(recipient),\n amount\n }\n ));\n }\n\n #[test]\n fn transfer_error() {\n // Given a new contract.\n let (env, mut erc20) = setup();\n\n // When the transfer amount exceeds the sender balance.\n let recipient = env.get_account(1);\n let amount = U256::from(INITIAL_SUPPLY) + U256::one();\n\n // Then an error occurs.\n assert!(erc20.try_transfer(recipient, amount).is_err());\n }\n\n #[test]\n fn transfer_from_and_approval_work() {\n let (env, mut erc20) = setup();\n\n let (owner, recipient, spender) =\n (env.get_account(0), env.get_account(1), env.get_account(2));\n let approved_amount = 3_000.into();\n let transfer_amount = 1_000.into();\n\n assert_eq!(erc20.balance_of(owner), U256::from(INITIAL_SUPPLY));\n\n // Owner approves Spender.\n erc20.approve(spender, approved_amount);\n\n // Allowance was recorded.\n assert_eq!(erc20.allowance(owner, spender), approved_amount);\n assert!(env.emitted_event(\n erc20.address(),\n &Approval {\n owner,\n spender,\n value: approved_amount\n }\n ));\n\n // Spender transfers tokens from Owner to Recipient.\n env.set_caller(spender);\n erc20.transfer_from(owner, recipient, transfer_amount);\n\n // Tokens are transferred and allowance decremented.\n assert_eq!(\n erc20.balance_of(owner),\n U256::from(INITIAL_SUPPLY) - transfer_amount\n );\n assert_eq!(erc20.balance_of(recipient), transfer_amount);\n assert!(env.emitted_event(\n erc20.address(),\n &Approval {\n owner,\n spender,\n value: approved_amount - transfer_amount\n }\n ));\n assert!(env.emitted_event(\n erc20.address(),\n &Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount: transfer_amount\n }\n ));\n // assert!(env.emitted(erc20.address(), "Transfer"));\n }\n\n #[test]\n fn transfer_from_error() {\n // Given a new instance.\n let (env, mut erc20) = setup();\n\n // When the spender\'s allowance is zero.\n let (owner, spender, recipient) =\n (env.get_account(0), env.get_account(1), env.get_account(2));\n let amount = 1_000.into();\n env.set_caller(spender);\n\n // Then transfer fails.\n assert_eq!(\n erc20.try_transfer_from(owner, recipient, amount),\n Err(Error::InsufficientAllowance.into())\n );\n }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"L149")," - Alternatively, if you don't want to check the entire event, you may assert only its type.")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Having two modules: ",(0,a.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"Erc20"),", let's combine them, and create an ERC-20 on steroids."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/659ab8cb.3935a46f.js b/docs/assets/js/659ab8cb.3935a46f.js new file mode 100644 index 000000000..38288f966 --- /dev/null +++ b/docs/assets/js/659ab8cb.3935a46f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7922],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?n(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,o,a=function(e,r){if(null==e)return{};var t,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},c=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return t?o.createElement(f,l(l({ref:r},c),{},{components:t})):o.createElement(f,l({ref:r},c))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,l=new Array(n);l[0]=u;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<n;p++)l[p]=t[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},91724:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var o=t(87462),a=(t(67294),t(3905));const n={sidebar_position:1},l="odra-examples",i={unversionedId:"examples/odra-examples",id:"examples/odra-examples",title:"odra-examples",description:"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the [Odra main repository].",source:"@site/docs/examples/odra-examples.md",sourceDirName:"examples",slug:"/examples/odra-examples",permalink:"/docs/next/examples/odra-examples",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Examples",permalink:"/docs/next/category/examples"},next:{title:"Using odra-modules",permalink:"/docs/next/examples/using-odra-modules"}},s={},p=[{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odra-examples"},"odra-examples"),(0,a.kt)("p",null,"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the ",(0,a.kt)("inlineCode",{parentName:"p"},"examples")," in the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra main repository"),"."),(0,a.kt)("p",null,'The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.'),(0,a.kt)("p",null,"Don't worry if you find learning solely by reading the code challenging. Go to the ",(0,a.kt)("a",{parentName:"p",href:"../category/tutorials/"},"Tutorial")," section, where we will review it together. We will break the code into pieces, leaving no space for further questions."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn about reusable Odra components encapsulated in ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/65ab6b77.f56eaadf.js b/docs/assets/js/65ab6b77.f56eaadf.js new file mode 100644 index 000000000..1e81935be --- /dev/null +++ b/docs/assets/js/65ab6b77.f56eaadf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2540],{47143:t=>{t.exports=JSON.parse('{"title":"Getting started","description":"5 minutes to learn the most important Odra concepts.","slug":"/category/getting-started","permalink":"/docs/0.3.0/category/getting-started","navigation":{"previous":{"title":"Odra framework","permalink":"/docs/0.3.0/"},"next":{"title":"Installation","permalink":"/docs/0.3.0/getting-started/installation"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/6617ee69.997746c7.js b/docs/assets/js/6617ee69.997746c7.js new file mode 100644 index 000000000..eeed3f284 --- /dev/null +++ b/docs/assets/js/6617ee69.997746c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[366],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,c=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=l(n),g=a,f=d["".concat(c,".").concat(g)]||d[g]||p[g]||s;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,i=new Array(s);i[0]=d;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o.mdxType="string"==typeof e?e:a,i[1]=o;for(var l=2;l<s;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},9555:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const s={},i="Signatures",o={unversionedId:"advanced/signatures",id:"version-0.7.0/advanced/signatures",title:"Signatures",description:"As each backend can use a different scheme for generating key pairs,",source:"@site/versioned_docs/version-0.7.0/advanced/05-signatures.md",sourceDirName:"advanced",slug:"/advanced/signatures",permalink:"/docs/advanced/signatures",draft:!1,tags:[],version:"0.7.0",sidebarPosition:5,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Attributes",permalink:"/docs/advanced/attributes"},next:{title:"Backends",permalink:"/docs/category/backends"}},c={},l=[{value:"Signature verification",id:"signature-verification",level:2},{value:"Testing",id:"testing",level:2},{value:"ECRecover",id:"ecrecover",level:2}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"signatures"},"Signatures"),(0,a.kt)("p",null,"As each backend can use a different scheme for generating key pairs,\nOdra Framework provides a generic function for signature verification inside the contract context.\nThanks to this, you can write your code once, without worrying about underlying cryptography."),(0,a.kt)("h2",{id:"signature-verification"},"Signature verification"),(0,a.kt)("p",null,"Signature verification is conducted by a function in ",(0,a.kt)("inlineCode",{parentName:"p"},"contract_env"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn verify_signature(message: &Bytes, signature: &Bytes, public_key: &PublicKey) -> bool;\n")),(0,a.kt)("p",null,"Here's the simplest example of this function used in a contract:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},"#[odra::module]\nimpl SignatureVerifier {\n pub fn verify_signature(\n &self,\n message: &Bytes,\n signature: &Bytes,\n public_key: &PublicKey\n ) -> bool {\n contract_env::verify_signature(message, signature, public_key)\n }\n}\n")),(0,a.kt)("h2",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Besides the above function in the contract context, Odra provides corresponding functions in the ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn sign_message(message: &Bytes, address: &Address) -> Bytes;\n\npub fn public_key(address: &Address) -> PublicKey;\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"sign_message")," will return a signed message. The signing itself will be performed using a private key\nof an account behind the ",(0,a.kt)("inlineCode",{parentName:"p"},"address"),"."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"public_key")," returns the PublicKey of an ",(0,a.kt)("inlineCode",{parentName:"p"},"address")," account."),(0,a.kt)("p",null,"Thanks to those, you can write generic tests, that will work with all backends, despite differences\nin signature schemes they use."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},'#[test]\nfn signature_verification_works() {\n let message = "Message to be signed";\n let message_bytes = &Bytes::from(message.as_bytes().to_vec());\n let account = test_env::get_account(0);\n\n let signature = test_env::sign_message(message_bytes, &account);\n\n let public_key = test_env::public_key(&account);\n\n let signature_verifier = SignatureVerifierDeployer::default();\n assert!(signature_verifier.verify_signature(message_bytes, &signature, &public_key));\n}\n')),(0,a.kt)("p",null,"If you want, you can also test signatures that were created outside Odra.\nHowever, you will need to prepare separate tests for each backend:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/features/signature_verifier.rs",title:"examples/src/features/signature_verifier.rs"},'/// The following test checks that the signature verification works with the signature produced\n/// by the casper wallet.\n#[test]\n#[cfg(feature = "casper")]\nfn verify_signature_casper_wallet() {\n use odra::casper::casper_types::bytesrepr::FromBytes;\n // Casper Wallet for the message "Ahoj przygodo!" signed using SECP256K1 key\n // produces the following signature:\n // 1e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa\n // Casper Wallet adds "Casper Message:\\n" prefix to the message:\n let message = "Casper Message:\\nAhoj przygodo!";\n let message_bytes = &Bytes::from(message.as_bytes().to_vec());\n\n // Depending on the type of the key, we need to prefix the signature with a tag:\n // 0x01 for ED25519\n // 0x02 for SECP256K1\n let signature_hex = "021e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa";\n let signature: [u8; 65] = hex::decode(signature_hex).unwrap().try_into().unwrap();\n let signature_bytes = &Bytes::from(signature.to_vec());\n\n // Similar to the above, the public key is tagged:\n let public_key_hex = "02036d9b880e44254afaf34330e57703a63aec53b5918d4470059b67a4a906350105";\n let public_key_decoded = hex::decode(public_key_hex).unwrap();\n let (public_key, _) = odra::casper::casper_types::crypto::PublicKey::from_bytes(\n public_key_decoded.as_slice()\n )\n .unwrap();\n\n let signature_verifier = SignatureVerifierDeployer::default();\n assert!(signature_verifier.verify_signature(message_bytes, signature_bytes, &public_key));\n}\n')),(0,a.kt)("h2",{id:"ecrecover"},"ECRecover"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra-proposal#odra-standard-library"},"Odra Standard Library"),"\npart of the original Odra Proposal mentioned ECRecover as one of the functions that will be\nimplemented by the Odra Framework. We decided to add signatures verification instead."),(0,a.kt)("p",null,"The reasoning behind this decision is that the ECRecover works only with one type of signature.\nOdra tries to be backend-agnostic, which implies that it should also be signature-type-agnostic.\nThis was possible to achieve when implementing generic signature verification, but not with ECRecover."),(0,a.kt)("p",null,"In short, the implementation of ECRecover would not depend on the backend, pushing it into some kind of\nutils library, and those already exist, for example in\n",(0,a.kt)("a",{parentName:"p",href:"https://docs.rs/solana-program/latest/solana_program/secp256k1_recover/index.html#"},"solana_program"),"\ncrate."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/6640477e.44c4cde8.js b/docs/assets/js/6640477e.44c4cde8.js new file mode 100644 index 000000000..9c18eea9a --- /dev/null +++ b/docs/assets/js/6640477e.44c4cde8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7552],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>u});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),h=c(n),u=o,m=h["".concat(s,".").concat(u)]||h[u]||p[u]||r;return n?a.createElement(m,i(i({ref:t},d),{},{components:n})):a.createElement(m,i({ref:t},d))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<r;c++)i[c]=n[c];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}h.displayName="MDXCreateElement"},81313:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var a=n(87462),o=(n(67294),n(3905));const r={sidebar_position:3},i="Livenet",l={unversionedId:"backends/livenet",id:"backends/livenet",title:"Livenet",description:"The Livenet backend let us deploy and test the contracts on the real blockchain. It can be a local",source:"@site/docs/backends/04-livenet.md",sourceDirName:"backends",slug:"/backends/livenet",permalink:"/docs/next/backends/livenet",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Casper",permalink:"/docs/next/backends/casper"},next:{title:"Examples",permalink:"/docs/next/category/examples"}},s={},c=[{value:"Setup",id:"setup",level:2},{value:"Usage",id:"usage",level:2},{value:"How Livenet backend works",id:"how-livenet-backend-works",level:2},{value:"Multiple enviroments",id:"multiple-enviroments",level:2}],d={toc:c};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"livenet"},"Livenet"),(0,o.kt)("p",null,"The Livenet backend let us deploy and test the contracts on the real blockchain. It can be a local\ntest node, a testnet or even the mainnet. It is possible and even recommended using the Livenet backend\nto handle the deployment of your contracts to the real blockchain."),(0,o.kt)("p",null,"Furthermore, it is implemented in a similarly to Casper or OdraVM,\nhowever, it uses a real blockchain to deploy contracts and store the state.\nThis lets us use Odra to deploy and test contracts on a real blockchain, but\non the other hand, it comes with some limitations on what can be done in the tests."),(0,o.kt)("p",null,"The main differences between Livenet and e.g. CasperVM backend are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Real CSPR tokens are used to deploy and call contracts. This also means that we need to\npay for each contract deployment and each contract call. Of course, we can use the ",(0,o.kt)("a",{parentName:"li",href:"https://testnet.cspr.live/tools/faucet"},"faucet"),"\nto get some tokens for testing purposes, but we still need to specify the amount needed\nfor each action."),(0,o.kt)("li",{parentName:"ul"},"The contract state is stored on the real blockchain, so we can't just reset the state -\nwe can redeploy the contract, but we can't remove the old one."),(0,o.kt)("li",{parentName:"ul"},"Because of the above, we can load the existing contracts and use them in the tests."),(0,o.kt)("li",{parentName:"ul"},"We have no control over the block time. This means that for example, ",(0,o.kt)("inlineCode",{parentName:"li"},"advance_block_time")," function\nis implemented by waiting for the real time to pass.")),(0,o.kt)("p",null,"This is also a cause for the fact that the Livenet backend cannot be (yet) used for running\nthe regular Odra tests. Instead, we can create integration tests or binaries which will\nuse a slightly different workflow to test the contracts."),(0,o.kt)("h2",{id:"setup"},"Setup"),(0,o.kt)("p",null,"To use Livenet backend, we need to provide Odra with some information - the network address, our private\nkey and the name of the chain we want to use. Optionally, we can add multiple private keys to use\nmore than one account in our tests. Those values are passed using environment variables. We can use .env\nfile to store them - let's take a look at an example .env file, created from the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.8.0/examples/.env.sample"},".env.sample")," file from\nexamples folder:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-env"},"# Path to the secret key of the account that will be used\n# to deploy the contracts.\n# We're using .keys folder so we don't accidentally commit\n# the secret key to the repository.\nODRA_CASPER_LIVENET_SECRET_KEY_PATH=.keys/secret_key.pem\n\n# RPC address of the node that will be used to deploy the contracts.\nODRA_CASPER_LIVENET_NODE_ADDRESS=localhost:7777\n\n# Chain name of the network. Known values:\n# - integration-test\nODRA_CASPER_LIVENET_CHAIN_NAME=integration-test\n\n# Paths to the secret keys of the additional accounts.\n# Main secret key will be 0th account.\nODRA_CASPER_LIVENET_KEY_1=.keys/secret_key_1.pem\nODRA_CASPER_LIVENET_KEY_2=.keys/secret_key_2.pem\n")),(0,o.kt)("p",null,"With the proper value in place, we can write our tests or deploy scenarios. In the examples, we can find\na simple binary that deploys a contract and calls it. The test is located in the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.8.0/examples/bin/erc20_on_livenet.rs"},"erc20_on_livenet.rs")," file.\nLet's go through the code:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'fn main() {\n // Similar to the OdraVM backend, we need to initialize\n // the environment:\n let env = odra_casper_livenet_env::env();\n\n // Most of the for the host env works the same as in the\n // OdraVM backend.\n let owner = env.caller();\n // Addresses are the real addresses on the blockchain,\n // so we need to provide them\n // if we did not import their secret keys.\n let recipient = \n "hash-2c4a6ce0da5d175e9638ec0830e01dd6cf5f4b1fbb0724f7d2d9de12b1e0f840";\n let recipient = Address::from_str(recipient).unwrap();\n\n // Arguments for the contract init method.\n let name = String::from("Plascoin");\n let symbol = String::from("PLS");\n let decimals = 10u8;\n let initial_supply: U256 = U256::from(10_000);\n \n // The main difference between other backends - we need to specify\n // the gas limit for each action.\n // The limit will be used for every consecutive action\n // until we change it.\n env.set_gas(100_000_000_000u64);\n \n // Deploy the contract. The API is the same as in the OdraVM backend.\n let init_args = Erc20InitArgs {\n name,\n symbol,\n decimals,\n initial_supply: Some(initial_supply)\n };\n let mut token = Erc20HostRef::deploy(env, init_args);\n \n // We can now use the contract as we would in the OdraVM backend.\n println!("Token address: {}", token.address().to_string());\n\n // Uncomment to load existing contract.\n // let address = "hash-d26fcbd2106e37be975d2045c580334a6d7b9d0a241c2358a4db970dfd516945";\n // let address = Address::from_str(address).unwrap();\n // We use the Livenet-specific `load` method to load the contract\n // that is already deployed.\n // let mut token = Erc20Deployer::load(env, address);\n\n // Non-mutable calls are free! Neat, huh? More on that later.\n println!("Token name: {}", token.name());\n\n // The next call is mutable, but the cost is lower that the deployment,\n // so we change the amount of gas\n env.set_gas(3_000_000_000u64);\n token.transfer(recipient, U256::from(1000));\n\n println!("Owner\'s balance: {:?}", token.balance_of(owner));\n println!("Recipient\'s balance: {:?}", token.balance_of(recipient));\n}\n')),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The above example is a rust binary, not a test. Note that it is also added as a section of the\n",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-toml"},'[bin]\nname = "erc20_on_livenet"\npath = "src/bin/erc20_on_livenet.rs"\nrequired-features = ["livenet"]\ntest = false\n'))),(0,o.kt)("h2",{id:"usage"},"Usage"),(0,o.kt)("p",null,"To run the above code, we simply need to run the binary with the ",(0,o.kt)("inlineCode",{parentName:"p"},"livenet")," feature enabled:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cargo run --bin erc20_on_livenet --features=livenet\n")),(0,o.kt)("p",null,"A part of a sample output should look like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'...\n\ud83d\udc81 INFO : Calling "hash-d26fcbd210..." with entrypoint "transfer".\n\ud83d\ude44 WAIT : Waiting 15s for "65b1a5d21...".\n\ud83d\ude44 WAIT : Waiting 15s for "65b1a5d21...".\n\ud83d\udc81 INFO : Deploy "65b1a5d21..." successfully executed.\nOwner\'s balance: 4004\nRecipient\'s balance: 4000\n')),(0,o.kt)("p",null,"Those logs are a result of the last 4 lines of the above listing.\nEach deployment or a call to the blockchain will be noted and will take some time to execute.\nWe can see that the ",(0,o.kt)("inlineCode",{parentName:"p"},"transfer")," call took over 15 seconds to execute. But calling ",(0,o.kt)("inlineCode",{parentName:"p"},"balance_of")," was nearly instant\nand cost us nothing. How it is possible?"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You can see the deployment on ",(0,o.kt)("a",{parentName:"p",href:"http://cspr.live/"},"http://cspr.live/")," - the transfer from the example\ncan be seen ",(0,o.kt)("a",{parentName:"p",href:"https://integration.cspr.live/deploy/65b1a5d21174a62c675f89683aba995c453b942c705b404a1f8bbf6f0f6de32a"},"here"),".")),(0,o.kt)("h2",{id:"how-livenet-backend-works"},"How Livenet backend works"),(0,o.kt)("p",null,"All calls of entrypoints executed on a Casper blockchain cost gas - even if they do not change the state.\nIt is possible however to query the state of the blockchain for free."),(0,o.kt)("p",null,"This principle is used in the Livenet backend - all calls that do not change the state of the blockchain are really executed offline - the only thing that is requested from the\nnode is the current state. This is why the ",(0,o.kt)("inlineCode",{parentName:"p"},"balance_of")," call was almost instant and free."),(0,o.kt)("p",null,"Basically, if the entrypoint function is not mutable or does not make a call to an unknown external contract\n(see ",(0,o.kt)("a",{parentName:"p",href:"/docs/next/basics/cross-calls"},"Cross Calls"),"), it is executed offline and\nnode is used for the state query only. However, the Livenet needs to know the connection between the contracts\nand the code, so make sure to deploy or load already deployed contracts"),(0,o.kt)("h2",{id:"multiple-enviroments"},"Multiple enviroments"),(0,o.kt)("p",null,"It is possible to have multiple environments for the Livenet backend. This is useful if we want to easily switch between multiple accounts,\nmultiple nodes or even multiple chains."),(0,o.kt)("p",null,"To do this, simply create a new ",(0,o.kt)("inlineCode",{parentName:"p"},".env")," file with a different prefix - for example, ",(0,o.kt)("inlineCode",{parentName:"p"},"integration.env")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"mainnet.env"),".\nThen, pass the ",(0,o.kt)("inlineCode",{parentName:"p"},"ODRA_CASPER_LIVENET_ENV")," variable with value either ",(0,o.kt)("inlineCode",{parentName:"p"},"integration")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"mainnet")," to select which file\nhas to be used first. If your ",(0,o.kt)("inlineCode",{parentName:"p"},"integration.env")," file has a value that IS present in the ",(0,o.kt)("inlineCode",{parentName:"p"},".env")," file, it will\noverride the value from the ",(0,o.kt)("inlineCode",{parentName:"p"},".env")," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"ODRA_CASPER_LIVENET_ENV=integration cargo run --bin erc20_on_livenet --features=livene\n")),(0,o.kt)("p",null,"To sum up - this command will firstly load the ",(0,o.kt)("inlineCode",{parentName:"p"},"integration.env")," file and then load the missing values from ",(0,o.kt)("inlineCode",{parentName:"p"},".env")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/67a34253.03275479.js b/docs/assets/js/67a34253.03275479.js new file mode 100644 index 000000000..3b9857442 --- /dev/null +++ b/docs/assets/js/67a34253.03275479.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2691],{75821:e=>{e.exports=JSON.parse('{"title":"Backends","description":"Backends","slug":"/category/backends","permalink":"/docs/0.5.0/category/backends","navigation":{"previous":{"title":"Signatures","permalink":"/docs/0.5.0/advanced/signatures"},"next":{"title":"What is a backend?","permalink":"/docs/0.5.0/backends/what-is-a-backend"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/67cb2d26.8eba780a.js b/docs/assets/js/67cb2d26.8eba780a.js new file mode 100644 index 000000000..62322c78e --- /dev/null +++ b/docs/assets/js/67cb2d26.8eba780a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2522],{21861:e=>{e.exports=JSON.parse('{"title":"Advanced","description":"Advanced concepts of Odra Framework","slug":"/category/advanced","permalink":"/docs/0.3.1/category/advanced","navigation":{"previous":{"title":"Native token","permalink":"/docs/0.3.1/basics/native-token"},"next":{"title":"Module Composer","permalink":"/docs/0.3.1/advanced/composer"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/67cf10af.3633ac11.js b/docs/assets/js/67cf10af.3633ac11.js new file mode 100644 index 000000000..b9061a180 --- /dev/null +++ b/docs/assets/js/67cf10af.3633ac11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9168],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return t?r.createElement(f,l(l({ref:n},d),{},{components:t})):r.createElement(f,l({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u<a;u++)l[u]=t[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},85243:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:3},l="OwnedToken",i={unversionedId:"tutorials/owned-token",id:"tutorials/owned-token",title:"OwnedToken",description:"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.",source:"@site/docs/tutorials/owned-token.md",sourceDirName:"tutorials",slug:"/tutorials/owned-token",permalink:"/docs/next/tutorials/owned-token",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"ERC-20",permalink:"/docs/next/tutorials/erc20"},next:{title:"Access Control",permalink:"/docs/next/tutorials/access-control"}},s={},u=[{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:3},{value:"Delegation",id:"delegation",level:3},{value:"Summary",id:"summary",level:2}],d={toc:u};function c(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ownedtoken"},"OwnedToken"),(0,o.kt)("p",null,"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"What should our module be capable of?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Conform the Erc20 interface."),(0,o.kt)("li",{parentName:"ol"},"Allow only the module owner to mint tokens."),(0,o.kt)("li",{parentName:"ol"},"Enable the current owner to designate a new owner.")),(0,o.kt)("h3",{id:"module-definition"},"Module definition"),(0,o.kt)("p",null,"Let's define a module called ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedToken")," that is a composition of ",(0,o.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Erc20")," modules."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use crate::{erc20::Erc20, ownable::Ownable};\nuse odra::module::SubModule;\n\n#[odra::module]\npub struct OwnedToken {\n ownable: SubModule<Ownable>,\n erc20: SubModule<Erc20>\n}\n")),(0,o.kt)("p",null,"As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!"),(0,o.kt)("h3",{id:"delegation"},"Delegation"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use odra::prelude::*;\nuse odra::{Address, casper_types::U256, module::Module};\n\n...\n\n#[odra::module]\nimpl OwnedToken {\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {\n let deployer = self.env().caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: &Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: &Address, amount: &U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &U256) {\n self.erc20.approve(spender, amount);\n }\n\n pub fn get_owner(&self) -> Address {\n self.ownable.get_owner()\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ownable.change_ownership(new_owner);\n }\n\n pub fn mint(&mut self, address: &Address, amount: &U256) {\n self.ownable.ensure_ownership(&self.env().caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,o.kt)("p",null,"Easy. However, there are a few worth mentioning subtleness:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L11")," - A constructor is an excellent place to initialize both modules at once."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L14-L16")," - Most of the entrypoints do not need any modification, so we simply delegate them to the ",(0,o.kt)("inlineCode",{parentName:"li"},"erc20")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L52")," - The same is done with the ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L58-L61")," - Minting should not be unconditional, we need some control over it. First, using ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," we make sure the ",(0,o.kt)("inlineCode",{parentName:"li"},"caller")," really is indeed the owner.")),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/67d74c2d.cddd8079.js b/docs/assets/js/67d74c2d.cddd8079.js new file mode 100644 index 000000000..a5b77554f --- /dev/null +++ b/docs/assets/js/67d74c2d.cddd8079.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3556],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(a),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||s;return a?n.createElement(f,i(i({ref:t},u),{},{components:a})):n.createElement(f,i({ref:t},u))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var p=2;p<s;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},3705:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const s={sidebar_position:5,description:"How to write data into blockchain's storage"},i="Storage interaction",o={unversionedId:"basics/storage-interaction",id:"version-0.6.0/basics/storage-interaction",title:"Storage interaction",description:"How to write data into blockchain's storage",source:"@site/versioned_docs/version-0.6.0/basics/05-storage-interaction.md",sourceDirName:"basics",slug:"/basics/storage-interaction",permalink:"/docs/0.6.0/basics/storage-interaction",draft:!1,tags:[],version:"0.6.0",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"How to write data into blockchain's storage"},sidebar:"tutorialSidebar",previous:{title:"Flipper Internals",permalink:"/docs/0.6.0/basics/flipper-internals"},next:{title:"Host Communication",permalink:"/docs/0.6.0/basics/communicating-with-host"}},l={},p=[{value:"Variable",id:"variable",level:2},{value:"Mapping",id:"mapping",level:2},{value:"List",id:"list",level:2},{value:"Custom Types",id:"custom-types",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-interaction"},"Storage interaction"),(0,r.kt)("p",null,"The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go\nthrough all of them and explain their pros and cons."),(0,r.kt)("h2",{id:"variable"},"Variable"),(0,r.kt)("p",null,"The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your\nvariable in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),' type. Let\'s look at a "real world" example of a contract that represents a dog:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"#[odra::module]\npub struct DogContract {\n barks: Variable<bool>,\n weight: Variable<u32>,\n name: Variable<String>,\n walks: Variable<Vec<u32>>,\n}\n")),(0,r.kt)("p",null,"You can see the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," wrapping the data. Even complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," can be wrapped (with some caveats)!"),(0,r.kt)("p",null,"Let's make this contract usable, by providing a constructor and some getter functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"use odra::Variable;\n\n#[odra::module]\nimpl DogContract {\n #[odra(init)]\n pub fn init(&mut self, barks: bool, weight: u32, name: String) {\n self.barks.set(barks);\n self.weight.set(weight);\n self.name.set(name);\n self.walks.set(Vec::<u32>::default());\n }\n\n pub fn barks(&self) -> bool {\n self.barks.get_or_default()\n }\n\n pub fn weight(&self) -> u32 {\n self.weight.get_or_default()\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.len() as u32\n }\n\n pub fn walks_total_length(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.iter().sum()\n }\n}\n")),(0,r.kt)("p",null,"As you can see, you can access the data, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"get_or_default")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"...\nself.barks.get_or_default()\n...\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Keep in mind that using ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," will result in an Option that you'll need to unwrap - the variable\ndoesn't have to be initialized!")),(0,r.kt)("p",null,"To modify the data, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"set()")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"self.barks.set(barks);\n")),(0,r.kt)("p",null,"A Variable is easy to use and efficient for simple data types. One of its downsides is that it\nserializes the data as a whole, so when you're using complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap"),",\neach time you ",(0,r.kt)("inlineCode",{parentName:"p"},"get")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," the whole data is read and written to the blockchain storage."),(0,r.kt)("p",null,"In the example above, if we want to see how many walks our dog had, we would use the function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"pub fn walks_amount(&self) -> usize {\n let walks = self.walks.get_or_default();\n walks.len()\n}\n")),(0,r.kt)("p",null,"But to do so, we need to extract the whole serialized vector from the storage, which would inefficient,\nespecially for larger sets of data."),(0,r.kt)("p",null,"To tackle this issue following two types were created."),(0,r.kt)("h2",{id:"mapping"},"Mapping"),(0,r.kt)("p",null,"The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to\npass two values - the key type and the value type. Let's look at the variation of the Dog contract, that\nuses Mapping to store information about our dog's friends and how many times they visited:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"use odra::{Mapping, Variable};\n\n#[odra::module]\npub struct DogContract2 {\n name: Variable<String>,\n friends: Mapping<String, u32>,\n}\n")),(0,r.kt)("p",null,"In the example above, our key is a String (it is a name of the friend) and we are storing u32 values\n(amount of visits). To read and write values from and into a Mapping we use a similar approach\nto the one shown in the Variables section with one difference - we need to pass a key:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"pub fn visit(&mut self, friend_name: String) {\n let visits = self.visits(friend_name.clone());\n self.friends.set(&friend_name, visits + 1);\n}\n\npub fn visits(&self, friend_name: String) -> u32 {\n self.friends.get_or_default(&friend_name)\n}\n")),(0,r.kt)("p",null,"The biggest improvement over a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," is that we can model functionality of a ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap")," using ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nThe amount of data written to and read from the storage is minimal. However, we cannot iterate over ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nWe could implement such behavior by using a numeric type key and saving the length of the set in a\nseparate variable. Thankfully Odra comes with a prepared solution - the ",(0,r.kt)("inlineCode",{parentName:"p"},"List")," type."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with\na Variable working together:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="core/src/list.rs"',title:'"core/src/list.rs"'},"use odra::{Variable, List};\n\npub struct List<T> {\n values: Mapping<u32, T>,\n index: Variable<u32>\n}\n"))),(0,r.kt)("h2",{id:"list"},"List"),(0,r.kt)("p",null,"Going back to our DogContract example - let's revisit the walk case. This time, instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),",\nwe'll use the list:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"#[odra::module]\npub struct DogContract3 {\n name: Variable<String>,\n walks: List<u32>,\n}\n")),(0,r.kt)("p",null,"As you can see, the notation is very similar to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),". To understand the usage, take a look\nat the reimplementation of the functions with an additional function that takes our dog for a walk\n(it writes the data to the storage):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"#[odra::module]\nimpl DogContract3 {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n self.walks.len()\n }\n\n pub fn walks_total_length(&self) -> u32 {\n self.walks.iter().sum()\n }\n\n pub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n }\n}\n")),(0,r.kt)("p",null,"Now, we can know how many walks our dog had without loading the whole vector from the storage.\nWe need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all\nthe cases for you."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All of the above examples, alongside the tests, are available in the odra repository in the ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/docs/")," folder.")),(0,r.kt)("h2",{id:"custom-types"},"Custom Types"),(0,r.kt)("p",null,"By default you can store only built-in types like numbers, Options, Results, Strings, Vectors."),(0,r.kt)("p",null,"Implementing custom types is straightforward, your type must derive from ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType"),": "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Address, OdraType};\n\n#[derive(OdraType)]\npub struct Dog {\n pub name: String,\n pub age: u8,\n pub owner: Option<Address>\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Each field of your struct must be an OdraType.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next article, we'll see how to query the host for information about the world and our contract."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/68495fce.584aaa02.js b/docs/assets/js/68495fce.584aaa02.js new file mode 100644 index 000000000..4a3087483 --- /dev/null +++ b/docs/assets/js/68495fce.584aaa02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2346],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>c});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),m=u(t),c=r,w=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?a.createElement(w,o(o({ref:n},d),{},{components:t})):a.createElement(w,o({ref:n},d))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},1754:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=t(87462),r=(t(67294),t(3905));const i={sidebar_position:1},o="Ownable",l={unversionedId:"tutorials/ownable",id:"version-0.5.0/tutorials/ownable",title:"Ownable",description:"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.",source:"@site/versioned_docs/version-0.5.0/tutorials/ownable.md",sourceDirName:"tutorials",slug:"/tutorials/ownable",permalink:"/docs/0.5.0/tutorials/ownable",draft:!1,tags:[],version:"0.5.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Tutorials",permalink:"/docs/0.5.0/category/tutorials"},next:{title:"ERC-20",permalink:"/docs/0.5.0/tutorials/erc20"}},s={},u=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Define a module",id:"define-a-module",level:3},{value:"Init the module",id:"init-the-module",level:3},{value:"Features implementation",id:"features-implementation",level:3},{value:"Test",id:"test",level:3},{value:"Summary",id:"summary",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:u};function p(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features."),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"storing a single value,"),(0,r.kt)("li",{parentName:"ul"},"defining constructors,"),(0,r.kt)("li",{parentName:"ul"},"error handling,"),(0,r.kt)("li",{parentName:"ul"},"defining and emitting ",(0,r.kt)("inlineCode",{parentName:"li"},"events"),"."),(0,r.kt)("li",{parentName:"ul"},"registering a contact in a test environment,"),(0,r.kt)("li",{parentName:"ul"},"interactions with the test environment,"),(0,r.kt)("li",{parentName:"ul"},"assertions (value, events, errors assertions).")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Before we write any code, we define functionalities we would like to implement."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Module has an initializer that should be called once. "),(0,r.kt)("li",{parentName:"ol"},"Only the current owner can set a new owner."),(0,r.kt)("li",{parentName:"ol"},"Read the current owner."),(0,r.kt)("li",{parentName:"ol"},"A function that fails if called by a non-owner account.")),(0,r.kt)("h3",{id:"define-a-module"},"Define a module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{types::Address, Variable};\n\n#[odra::module]\npub struct Ownable {\n owner: Variable<Address>\n}\n")),(0,r.kt)("p",null,"That was easy, but it is crucial to understand the basic before we move on."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3")," - Firstly, we need create a struct called ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," and apply ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]")," to it above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),".")),(0,r.kt)("h3",{id:"init-the-module"},"Init the module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{\n execution_error, contract_env, Event, types::{Address, event::OdraEvent}\n};\n...\n\n#[odra::module]\nimpl Ownable {\n #[odra(init)]\n pub fn init(&mut self, owner: &Address) {\n if self.owner.get().is_some() {\n contract_env::revert(Error::OwnerIsAlreadyInitialized)\n }\n\n self.owner.set(*owner);\n \n OwnershipChanged {\n prev_owner: None,\n new_owner: *owner\n }\n .emit();\n }\n}\n\nexecution_error! {\n pub enum Error {\n OwnerIsNotInitialized => 1,\n }\n}\n\n#[derive(Event, Debug, PartialEq, Eq)]\npub struct OwnershipChanged {\n pub prev_owner: Option<Address>,\n pub new_owner: Address\n}\n")),(0,r.kt)("p",null,"Ok, we have done a couple of things, let's analyze them one by one:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," should be an odra module, so add ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function is marked as ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]")," making it a constructor. It matters if we would like to deploy the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," module as a standalone contract."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum. Notice that the ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum is defined inside the ",(0,r.kt)("inlineCode",{parentName:"li"},"execution_error")," macro. It generates, among others, the required ",(0,r.kt)("inlineCode",{parentName:"li"},"Into<ExecutionError>")," binding."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L9-L11")," - If the owner has been set already, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::revert()")," function. As an argument we pass ",(0,r.kt)("inlineCode",{parentName:"li"},"Error::OwnerIsNotInitialized"),". "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13")," - Then we write the owner passed as an argument to the storage. To do so we call the ",(0,r.kt)("inlineCode",{parentName:"li"},"set()")," on ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29-L33")," - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::Event"),". We highly recommend to derive ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PartialEq")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Eq")," for testing purpose."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Finally, we create the ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged")," struct and call ",(0,r.kt)("inlineCode",{parentName:"li"},"emit()")," function on it (import ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::types::event::OdraEvent")," trait). Hence we set the first owner, we set the ",(0,r.kt)("inlineCode",{parentName:"li"},"prev_owner")," value to ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".")),(0,r.kt)("h3",{id:"features-implementation"},"Features implementation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Ownable {\n ...\n\n pub fn ensure_ownership(&self, address: &Address) {\n if Some(address) != self.owner.get().as_ref() {\n contract_env::revert(Error::NotOwner)\n }\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ensure_ownership(&contract_env::caller());\n let current_owner = self.get_owner();\n self.owner.set(*new_owner);\n OwnershipChanged {\n prev_owner: Some(current_owner),\n new_owner: *new_owner\n }\n .emit();\n }\n\n pub fn get_owner(&self) -> Address {\n match self.owner.get() {\n Some(owner) => owner,\n None => contract_env::revert(Error::OwnerIsNotInitialized)\n }\n }\n}\n\nexecution_error! {\n pub enum Error {\n NotOwner => 1,\n OwnerIsAlreadyInitialized => 2,\n OwnerIsNotInitialized => 3,\n }\n}\n")),(0,r.kt)("p",null,"The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5,L32")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()")," is reads the current owner, and reverts if is does not match the input ",(0,r.kt)("inlineCode",{parentName:"li"},"Address"),". Also we need to update our ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum adding a new variant ",(0,r.kt)("inlineCode",{parentName:"li"},"NotOwner"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - The function defined above can be reused in ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()")," implementation. We pass to it the current caller, using the ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::caller()")," function. The we update the state, and emit ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L22,L34")," - Lastly, a getter function. As the ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable")," ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returns an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option"),", we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," variant ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnerIsNotInitialized"),".")),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[cfg(test)]\nmod tests {\n use super::*;\n use odra::{assert_events, test_env};\n\n fn setup() -> (Address, OwnableRef) {\n let owner = test_env::get_account(0);\n let ownable = OwnableDeployer::init(owner);\n (owner, ownable)\n }\n\n #[test]\n fn initialization_works() {\n let (owner, ownable) = setup();\n assert_eq!(ownable.get_owner(), owner);\n \n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n );\n }\n\n #[test]\n fn owner_can_change_ownership() {\n let (owner, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n \n test_env::set_caller(owner);\n ownable.change_ownership(&new_owner);\n assert_eq!(ownable.get_owner(), new_owner);\n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: Some(owner),\n new_owner\n }\n );\n }\n\n #[test]\n fn non_owner_cannot_change_ownership() {\n let (_, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n ownable.change_ownership(&new_owner);\n \n test_env::assert_exception(Error::NotOwner, || {\n ownable.change_ownership(&new_owner);\n });\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - Each test case starts with the same initialization process, so for convenience, we defined the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we call as the first statement in each test. Take a look at the signature ",(0,r.kt)("inlineCode",{parentName:"li"},"fn setup() -> (Address, OwnableRef)"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableRef")," is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"get_owner()"),", but not ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which is a constructor."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Now, the module needs an owner, the easiest way is to take one from the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env"),". We choose the address of first account (which is the default one)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L8")," - Odra created for us ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableDeployer")," struct which implements all constructor functions. In this case there is just one function - ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which corresponds the function we have implemented in the module."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - It is time to define the first test. As you see, it is a regular rust test."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L14-15")," - Using the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may have noticed, we use here the term ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," interchangeably with ",(0,r.kt)("inlineCode",{parentName:"p"},"contract"),". The reason is once we deploy our module onto a virtual blockchain it may be considered a contract."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L17-23")," - On the contract, only the ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events"),". As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30")," - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the ",(0,r.kt)("inlineCode",{parentName:"li"},"test env")," predefines 20 accounts."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L32")," - As mentioned, the default is the 0-th account, if you want to change the executor call the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::set_caller()")," function. ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The caller switch applies only the next contract interaction, the second call will be done as the default account."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L49-55")," - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::assert_exception()")," with the error you expect and a failing block of code.")),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next tutorial we will implement a ERC20 standard."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/68deafd0.1d1eccb9.js b/docs/assets/js/68deafd0.1d1eccb9.js new file mode 100644 index 000000000..db0c20ca4 --- /dev/null +++ b/docs/assets/js/68deafd0.1d1eccb9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7779],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=s(n),m=r,b=p["".concat(c,".").concat(m)]||p[m]||d[m]||o;return n?a.createElement(b,l(l({ref:t},u),{},{components:n})):a.createElement(b,l({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s<o;s++)l[s]=n[s];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}p.displayName="MDXCreateElement"},68461:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=n(87462),r=(n(67294),n(3905));const o={},l="Attributes",i={unversionedId:"advanced/attributes",id:"version-0.6.0/advanced/attributes",title:"Attributes",description:"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.",source:"@site/versioned_docs/version-0.6.0/advanced/04-attributes.md",sourceDirName:"advanced",slug:"/advanced/attributes",permalink:"/docs/0.6.0/advanced/attributes",draft:!1,tags:[],version:"0.6.0",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced Storage Concepts",permalink:"/docs/0.6.0/advanced/advanced-storage"},next:{title:"Signatures",permalink:"/docs/0.6.0/advanced/signatures"}},c={},s=[{value:"Init",id:"init",level:2},{value:"Example",id:"example",level:3},{value:"Using",id:"using",level:2},{value:"Example",id:"example-1",level:3},{value:"Payable",id:"payable",level:2},{value:"Example",id:"example-2",level:3},{value:"Non Reentrant",id:"non-reentrant",level:2},{value:"Mixing attributes",id:"mixing-attributes",level:2}],u={toc:s};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"attributes"},"Attributes"),(0,r.kt)("p",null,"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution."),(0,r.kt)("p",null,"Odra defines a few attributes that can be applied to functions to equip them with superpowers."),(0,r.kt)("h2",{id:"init"},"Init"),(0,r.kt)("p",null,"If your contract needs initial setup, adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed."),(0,r.kt)("p",null,"It's important to note that a constructor function should not be invoked in any other context."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/contracts/erc20.rs",title:"examples/src/contracts/erc20.rs"},"#[odra(init)]\npub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n}\n")),(0,r.kt)("h2",{id:"using"},"Using"),(0,r.kt)("p",null,"An attribute applicable to struct fields. The ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," attribute accepts multiple values, separated by ",(0,r.kt)("inlineCode",{parentName:"p"},","),".\nEach value attribute must point at an existing field."),(0,r.kt)("h3",{id:"example-1"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n access_control: AccessControl,\n meta: Metadata,\n #[odra(using = "access_control, meta")]\n // #[odra(using = "access_control, metadata")] - would not compile - `metadata` field does not exist\n storage: Storage\n}\n\n#[odra::module]\nstruct AccessControl {\n owner: Variable<Address>\n}\n\n#[odra::module]\nstruct Metadata {\n version: Variable<String>\n}\n\n#[odra::module]\nstruct Storage {\n value: Variable<u8>,\n access_control: AccessControl,\n meta: Metadata\n}\n')),(0,r.kt)("h2",{id:"payable"},"Payable"),(0,r.kt)("p",null,"When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," attribute can send and take money in the form of native tokens. "),(0,r.kt)("h3",{id:"example-2"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/contracts/tlw.rs",title:"examples/src/contracts/tlw.rs"},"#[odra(payable)]\npub fn deposit(&mut self) {\n // Extract values\n let caller: Address = contract_env::caller();\n let amount: Balance = contract_env::attached_value();\n let current_block_time: BlockTime = contract_env::get_block_time();\n\n // Multiple lock check\n if self.balances.get(&caller).is_some() {\n contract_env::revert(Error::CannotLockTwice)\n }\n\n // Update state, emit event\n self.balances.set(&caller, amount);\n self.lock_expiration_map\n .set(&caller, current_block_time + self.lock_duration());\n Deposit {\n address: caller,\n amount\n }\n .emit();\n}\n")),(0,r.kt)("p",null,"If you try to send tokens to a non-payable function, the transaction will be automatically rejected."),(0,r.kt)("h2",{id:"non-reentrant"},"Non Reentrant"),(0,r.kt)("p",null,"Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds. "),(0,r.kt)("p",null,"To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts. "),(0,r.kt)("p",null,"They can also use reentrancy guards to block recursive calls to sensitive functions."),(0,r.kt)("p",null,"In Odra you can just apply the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(non_reentrant)]")," attribute to your function."),(0,r.kt)("h2",{id:"mixing-attributes"},"Mixing attributes"),(0,r.kt)("p",null,"A function can accept more than one attribute. The only exclusion is a constructor cannot be payable.\nTo apply multiple attributes, you can write:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable, non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"or "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"In both cases attributes order does not matter."),(0,r.kt)("p",null,"However, a constructor cannot be payable, so the below code would not compile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(init)]\nfn initialize() {\n // your logic...\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/69fd3230.ce2a2978.js b/docs/assets/js/69fd3230.ce2a2978.js new file mode 100644 index 000000000..2e080e456 --- /dev/null +++ b/docs/assets/js/69fd3230.ce2a2978.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4371],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=d(t),m=r,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},p),{},{components:t})):a.createElement(f,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=c;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},47277:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:2},l="Using odra-modules",i={unversionedId:"examples/using-odra-modules",id:"examples/using-odra-modules",title:"Using odra-modules",description:"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.",source:"@site/docs/examples/using-odra-modules.md",sourceDirName:"examples",slug:"/examples/using-odra-modules",permalink:"/docs/next/examples/using-odra-modules",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"odra-examples",permalink:"/docs/next/examples/odra-examples"},next:{title:"Tutorials",permalink:"/docs/next/category/tutorials"}},s={},d=[{value:"Available modules",id:"available-modules",level:2},{value:"Tokens",id:"tokens",level:3},{value:"Erc20",id:"erc20",level:4},{value:"Erc721",id:"erc721",level:4},{value:"Erc1155",id:"erc1155",level:4},{value:"Wrapped native token",id:"wrapped-native-token",level:4},{value:"Access",id:"access",level:3},{value:"AccessControl",id:"accesscontrol",level:4},{value:"Ownable",id:"ownable",level:4},{value:"Ownable2Step",id:"ownable2step",level:4},{value:"Security",id:"security",level:3},{value:"Pauseable",id:"pauseable",level:4}],p={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"using-odra-modules"},"Using odra-modules"),(0,r.kt)("p",null,"Besides the Odra framework, you can attach to your project ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-module")," - a set of plug-and-play modules."),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/getting-started/installation"},"Installation guide")," your Cargo.toml should look like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = "0.8.0"\n\n[dev-dependencies]\nodra-test = "0.8.0"\n\n[[bin]]\nname = "my_project_build_contract"\npath = "bin/build_contract.rs"\ntest = false\n\n[[bin]]\nname = "my_project_build_schema"\npath = "bin/build_schema.rs"\ntest = false\n\n[profile.release]\ncodegen-units = 1\nlto = true\n\n[profile.dev.package."*"]\nopt-level = 3\n')),(0,r.kt)("p",null,"To use ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules"),", edit your ",(0,r.kt)("inlineCode",{parentName:"p"},"dependency")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"features")," sections."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[dependencies]\nodra = "0.8.0"\nodra-modules = "0.8.0"\n')),(0,r.kt)("p",null,"Now, the only thing left is to add a module to your contract."),(0,r.kt)("p",null,"Let's write an example of ",(0,r.kt)("inlineCode",{parentName:"p"},"MyToken")," based on ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::prelude::*;\nuse odra::{Address, casper_types::U256, module::SubModule};\nuse odra_modules::erc20::Erc20;\n\n#[odra::module]\npub struct MyToken {\n erc20: SubModule<Erc20>\n}\n\n#[odra::module]\nimpl OwnedToken {\n pub fn init(&mut self, initial_supply: U256) {\n let name = String::from("MyToken");\n let symbol = String::from("MT");\n let decimals = 9u8;\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n self.erc20.approve(spender, amount);\n }\n}\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All available modules are placed in the main ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra repository"),".")),(0,r.kt)("h2",{id:"available-modules"},"Available modules"),(0,r.kt)("p",null,"Odra modules comes with couple of ready-to-use modules and reusable extensions."),(0,r.kt)("h3",{id:"tokens"},"Tokens"),(0,r.kt)("h4",{id:"erc20"},"Erc20"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"ERC20")," standard."),(0,r.kt)("h4",{id:"erc721"},"Erc721"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-721"},"ERC721")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC721Base")," and additionally uses\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extensions."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Receiver")," trait lets you implement your own logic for receiving NFTs."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc721WithMetadata")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"erc1155"},"Erc1155"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-1155"},"ERC1155")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC1155Base")," and additionally uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extension."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc1155")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"wrapped-native-token"},"Wrapped native token"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"WrappedNativeToken")," module implements the Wrapper for the native token,\nit was inspired by the WETH."),(0,r.kt)("h3",{id:"access"},"Access"),(0,r.kt)("h4",{id:"accesscontrol"},"AccessControl"),(0,r.kt)("p",null,"This module enables the implementation of role-based access control mechanisms for children\nmodules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API."),(0,r.kt)("h4",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner."),(0,r.kt)("p",null,"The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the\n",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," function."),(0,r.kt)("h4",{id:"ownable2step"},"Ownable2Step"),(0,r.kt)("p",null,"An extension of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module. "),(0,r.kt)("p",null,"Ownership can be transferred in a two-step process by using ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"accept_ownership()")," functions."),(0,r.kt)("h3",{id:"security"},"Security"),(0,r.kt)("h4",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"A module allowing to implement an emergency stop mechanism that can be triggered by any account."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/6add768b.7bbe0952.js b/docs/assets/js/6add768b.7bbe0952.js new file mode 100644 index 000000000..79918c9a4 --- /dev/null +++ b/docs/assets/js/6add768b.7bbe0952.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[656],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=d(t),m=r,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},p),{},{components:t})):a.createElement(f,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=c;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},61294:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:2},l="Using odra-modules",i={unversionedId:"examples/using-odra-modules",id:"version-0.3.0/examples/using-odra-modules",title:"Using odra-modules",description:"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.",source:"@site/versioned_docs/version-0.3.0/examples/using-odra-modules.md",sourceDirName:"examples",slug:"/examples/using-odra-modules",permalink:"/docs/0.3.0/examples/using-odra-modules",draft:!1,tags:[],version:"0.3.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"odra-examples",permalink:"/docs/0.3.0/examples/odra-examples"},next:{title:"Tutorials",permalink:"/docs/0.3.0/category/tutorials"}},s={},d=[{value:"Available modules",id:"available-modules",level:2},{value:"Tokens",id:"tokens",level:3},{value:"Erc20",id:"erc20",level:4},{value:"Erc721",id:"erc721",level:4},{value:"Erc1155",id:"erc1155",level:4},{value:"Wrapped native token",id:"wrapped-native-token",level:4},{value:"Access",id:"access",level:3},{value:"AccessControl",id:"accesscontrol",level:4},{value:"Ownable",id:"ownable",level:4},{value:"Ownable2Step",id:"ownable2step",level:4},{value:"Security",id:"security",level:3},{value:"Pauseable",id:"pauseable",level:4}],p={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"using-odra-modules"},"Using odra-modules"),(0,r.kt)("p",null,"Besides the Odra framework, you can attach to your project ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-module")," - a set of plug-and-play modules."),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.0/getting-started/installation"},"Installation guide")," your Cargo.toml should look like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.0", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,r.kt)("p",null,"To use ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules"),", edit your ",(0,r.kt)("inlineCode",{parentName:"p"},"dependency")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"features")," sections."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[dependencies]\nodra = { path = "../core", default-features = false }\nodra-modules = { path = "../modules", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]\ncasper = ["odra/casper", "odra-modules/casper"]\n')),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules")," defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," feature in your project, add ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules/casper"),"specifically (it applies to each backend).")),(0,r.kt)("p",null,"Now, the only thing left is to add a module to your contract."),(0,r.kt)("p",null,"Let's write an example of ",(0,r.kt)("inlineCode",{parentName:"p"},"MyToken")," based on ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::types::{Address, U256};\nuse odra_modules::erc20::Erc20;\n\n#[odra::module]\npub struct MyToken {\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, initial_supply: U256) {\n let name = String::from("MyToken");\n let symbol = String::from("MT");\n let decimals = 9u8;\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n self.erc20.approve(spender, amount);\n }\n}\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All available modules are placed in the main Odra repository.")),(0,r.kt)("h2",{id:"available-modules"},"Available modules"),(0,r.kt)("p",null,"Odra modules comes with couple of ready-to-use modules and reusable extensions."),(0,r.kt)("h3",{id:"tokens"},"Tokens"),(0,r.kt)("h4",{id:"erc20"},"Erc20"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"ERC20")," standard."),(0,r.kt)("h4",{id:"erc721"},"Erc721"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-721"},"ERC721")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC721Base")," and additionally uses\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extensions."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Receiver")," trait lets you implement your own logic for receiving NFTs."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc721WithMetadata")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"erc1155"},"Erc1155"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-1155"},"ERC1155")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC1155Base")," and additionally uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extension."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc1155")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"wrapped-native-token"},"Wrapped native token"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"WrappedNativeToken")," module implements the Wrapper for the native token,\nit was inspired by the WETH."),(0,r.kt)("h3",{id:"access"},"Access"),(0,r.kt)("h4",{id:"accesscontrol"},"AccessControl"),(0,r.kt)("p",null,"This module enables the implementation of role-based access control mechanisms for children\nmodules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API."),(0,r.kt)("h4",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner."),(0,r.kt)("p",null,"The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the\n",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," function."),(0,r.kt)("h4",{id:"ownable2step"},"Ownable2Step"),(0,r.kt)("p",null,"An extension of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module. "),(0,r.kt)("p",null,"Ownership can be transferred in a two-step process by using ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"accept_ownership()")," functions."),(0,r.kt)("h3",{id:"security"},"Security"),(0,r.kt)("h4",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"A module allowing to implement an emergency stop mechanism that can be triggered by any account."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/6e2102f2.c079c065.js b/docs/assets/js/6e2102f2.c079c065.js new file mode 100644 index 000000000..dcfba70ff --- /dev/null +++ b/docs/assets/js/6e2102f2.c079c065.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7064],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),l=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),f=r,h=u["".concat(s,".").concat(f)]||u[f]||p[f]||o;return n?a.createElement(h,i(i({ref:t},d),{},{components:n})):a.createElement(h,i({ref:t},d))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},56875:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:1},i="What is a backend?",c={unversionedId:"backends/what-is-a-backend",id:"backends/what-is-a-backend",title:"What is a backend?",description:"You can think of a backend as a target platform for your smart contract.",source:"@site/docs/backends/01-what-is-a-backend.md",sourceDirName:"backends",slug:"/backends/what-is-a-backend",permalink:"/docs/next/backends/what-is-a-backend",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Backends",permalink:"/docs/next/category/backends"},next:{title:"OdraVM",permalink:"/docs/next/backends/odra-vm"}},s={},l=[{value:"Contract Env",id:"contract-env",level:2},{value:"Host Env",id:"host-env",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"what-is-a-backend"},"What is a backend?"),(0,r.kt)("p",null,"You can think of a backend as a target platform for your smart contract.\nThis can be a piece of code allowing you to quickly check your code - like ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/backends/odra-vm"},"OdraVM"),",\na complete virtual machine, spinning up a blockchain for you - like ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/backends/casper"},"CasperVM"),",\nor even a real blockchain - when using ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/backends/casper"},"Livenet backend"),"."),(0,r.kt)("p",null,"Each backend has to come with two parts that Odra requires - the Contract Env and the Host Env."),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"The Contract Env is a simple interface that each backend needs to implement,\nexposing features of the blockchain from the perspective of the contract."),(0,r.kt)("p",null,"It gives Odra a set of functions, which allows implementing more complex concepts -\nfor example, to implement ",(0,r.kt)("a",{parentName:"p",href:"/docs/next/basics/storage-interaction"},"Mapping"),",\nOdra requires some kind of storage integration.\nThe exact implementation of those functions is a responsibility of a backend,\nmaking Odra and its user free to implement the contract logic,\ninstead of messing with the blockchain internals."),(0,r.kt)("p",null,"Other functions from Contract Env include handling transfers, addresses, block time, errors and events."),(0,r.kt)("h2",{id:"host-env"},"Host Env"),(0,r.kt)("p",null,"Similarly to the Contract Env, the Host Env exposes a set of functions that allows the communication with\nthe backend from the outside world - really useful for implementing tests."),(0,r.kt)("p",null,"This ranges from interacting with the blockchain - like deploying new, loading existing and calling the contracts,\nto the more test-oriented - handling errors, forwarding the block time, etc."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"We will take a look at backends Odra implements in more detail."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/6e5ab397.5149d303.js b/docs/assets/js/6e5ab397.5149d303.js new file mode 100644 index 000000000..d695ad857 --- /dev/null +++ b/docs/assets/js/6e5ab397.5149d303.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9954],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},81828:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const i={sidebar_position:4,description:"Detailed explanation of the Flipper contract"},o="Flipper Internals",l={unversionedId:"basics/flipper-internals",id:"version-0.7.0/basics/flipper-internals",title:"Flipper Internals",description:"Detailed explanation of the Flipper contract",source:"@site/versioned_docs/version-0.7.0/basics/04-flipper-internals.md",sourceDirName:"basics",slug:"/basics/flipper-internals",permalink:"/docs/basics/flipper-internals",draft:!1,tags:[],version:"0.7.0",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Detailed explanation of the Flipper contract"},sidebar:"tutorialSidebar",previous:{title:"Odra.toml",permalink:"/docs/basics/odra-toml"},next:{title:"Storage interaction",permalink:"/docs/basics/storage-interaction"}},s={},p=[{value:"Header",id:"header",level:2},{value:"Struct",id:"struct",level:2},{value:"Impl",id:"impl",level:2},{value:"Tests",id:"tests",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-internals"},"Flipper Internals"),(0,a.kt)("p",null,"In this article, we take a deep dive into the code shown in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/getting-started/flipper"},"Flipper example"),", where we will explain in more detail all\nthe Odra-specific sections of the code."),(0,a.kt)("h2",{id:"header"},"Header"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"use odra::Variable;\n")),(0,a.kt)("p",null,"Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation\nthat can be reused between targets. In the above case, we're importing ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable"),", which is responsible\nfor storing simple values on the blockchain's storage."),(0,a.kt)("h2",{id:"struct"},"Struct"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// A module definition. Each module struct consists of Variables and Mappings\n/// or/and other modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value,\n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n")),(0,a.kt)("p",null,"In Odra, all contracts are also modules, which can be reused between contracts. That's why we need\nto mark the struct with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. In the struct definition itself, we state all\nthe fields of the contract. Those fields can be regular Rust data types, however - those will not\nbe persisted on the blockchain. They can also be Odra modules - defined in your project or coming\nfrom Odra itself. Finally, to make the data persistent on the blockchain, you can use something like\n",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>")," showed above. To learn more about storage interaction, take a look at the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/basics/storage-interaction"},"next article"),"."),(0,a.kt)("h2",{id:"impl"},"Impl"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n ...\n")),(0,a.kt)("p",null,"Similarly to the struct, we mark the ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. Odra will take all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from this section and create contract endpoints from them. So, if you wish to have\nfunctions that are not available for calling outside the contract, do not make them public. Alternatively,\nyou can create a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section without the macro - all functions defined there, even marked\nwith ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," will be not callable."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," macro marks the constructor of the contract. This function will be limited to only\nto a single call, all further calls to it will result in an error."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'}," ...\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n ...\n")),(0,a.kt)("p",null,"The endpoints above show you how to interact with the simplest type of storage - ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>"),". The data\nsaved there using ",(0,a.kt)("inlineCode",{parentName:"p"},"set")," function will be persisted in the blockchain."),(0,a.kt)("h2",{id:"tests"},"Tests"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n ...\n")),(0,a.kt)("p",null,"You can write tests in any way you prefer and know in Rust. In the example above we are deploying the\ncontract using ",(0,a.kt)("inlineCode",{parentName:"p"},"FlipperDeployer")," - a piece of code generated automatically thanks to the macros.\nThe contract will be deployed on the VM you chose while running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now let's take a look at the different types of storage that Odra provides and how to use them."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/6f7f3f28.5a91b637.js b/docs/assets/js/6f7f3f28.5a91b637.js new file mode 100644 index 000000000..133430bef --- /dev/null +++ b/docs/assets/js/6f7f3f28.5a91b637.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7591],{19732:e=>{e.exports=JSON.parse('{"title":"Tutorials","description":"The theory is good, but the practice is even better. Let\'s go through a few examples summing up all the Odra concepts.","slug":"/category/tutorials","permalink":"/docs/0.5.0/category/tutorials","navigation":{"previous":{"title":"Using odra-modules","permalink":"/docs/0.5.0/examples/using-odra-modules"},"next":{"title":"Ownable","permalink":"/docs/0.5.0/tutorials/ownable"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/705c2b64.1bbe12ac.js b/docs/assets/js/705c2b64.1bbe12ac.js new file mode 100644 index 000000000..7e712d5cf --- /dev/null +++ b/docs/assets/js/705c2b64.1bbe12ac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1178],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=d(t),m=r,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},p),{},{components:t})):a.createElement(f,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=c;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},10600:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:2},l="Using odra-modules",i={unversionedId:"examples/using-odra-modules",id:"version-0.5.0/examples/using-odra-modules",title:"Using odra-modules",description:"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.",source:"@site/versioned_docs/version-0.5.0/examples/using-odra-modules.md",sourceDirName:"examples",slug:"/examples/using-odra-modules",permalink:"/docs/0.5.0/examples/using-odra-modules",draft:!1,tags:[],version:"0.5.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"odra-examples",permalink:"/docs/0.5.0/examples/odra-examples"},next:{title:"Tutorials",permalink:"/docs/0.5.0/category/tutorials"}},s={},d=[{value:"Available modules",id:"available-modules",level:2},{value:"Tokens",id:"tokens",level:3},{value:"Erc20",id:"erc20",level:4},{value:"Erc721",id:"erc721",level:4},{value:"Erc1155",id:"erc1155",level:4},{value:"Wrapped native token",id:"wrapped-native-token",level:4},{value:"Access",id:"access",level:3},{value:"AccessControl",id:"accesscontrol",level:4},{value:"Ownable",id:"ownable",level:4},{value:"Ownable2Step",id:"ownable2step",level:4},{value:"Security",id:"security",level:3},{value:"Pauseable",id:"pauseable",level:4}],p={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"using-odra-modules"},"Using odra-modules"),(0,r.kt)("p",null,"Besides the Odra framework, you can attach to your project ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-module")," - a set of plug-and-play modules."),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/getting-started/installation"},"Installation guide")," your Cargo.toml should look like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,r.kt)("p",null,"To use ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules"),", edit your ",(0,r.kt)("inlineCode",{parentName:"p"},"dependency")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"features")," sections."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[dependencies]\nodra = { path = "../core", default-features = false }\nodra-modules = { path = "../modules", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]\ncasper = ["odra/casper", "odra-modules/casper"]\n')),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules")," defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," feature in your project, add ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules/casper"),"specifically (it applies to each backend).")),(0,r.kt)("p",null,"Now, the only thing left is to add a module to your contract."),(0,r.kt)("p",null,"Let's write an example of ",(0,r.kt)("inlineCode",{parentName:"p"},"MyToken")," based on ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::types::{Address, U256};\nuse odra_modules::erc20::Erc20;\n\n#[odra::module]\npub struct MyToken {\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, initial_supply: U256) {\n let name = String::from("MyToken");\n let symbol = String::from("MT");\n let decimals = 9u8;\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n self.erc20.approve(spender, amount);\n }\n}\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All available modules are placed in the main Odra repository.")),(0,r.kt)("h2",{id:"available-modules"},"Available modules"),(0,r.kt)("p",null,"Odra modules comes with couple of ready-to-use modules and reusable extensions."),(0,r.kt)("h3",{id:"tokens"},"Tokens"),(0,r.kt)("h4",{id:"erc20"},"Erc20"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"ERC20")," standard."),(0,r.kt)("h4",{id:"erc721"},"Erc721"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-721"},"ERC721")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC721Base")," and additionally uses\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extensions."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Receiver")," trait lets you implement your own logic for receiving NFTs."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc721WithMetadata")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"erc1155"},"Erc1155"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-1155"},"ERC1155")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC1155Base")," and additionally uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extension."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc1155")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"wrapped-native-token"},"Wrapped native token"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"WrappedNativeToken")," module implements the Wrapper for the native token,\nit was inspired by the WETH."),(0,r.kt)("h3",{id:"access"},"Access"),(0,r.kt)("h4",{id:"accesscontrol"},"AccessControl"),(0,r.kt)("p",null,"This module enables the implementation of role-based access control mechanisms for children\nmodules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API."),(0,r.kt)("h4",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner."),(0,r.kt)("p",null,"The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the\n",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," function."),(0,r.kt)("h4",{id:"ownable2step"},"Ownable2Step"),(0,r.kt)("p",null,"An extension of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module. "),(0,r.kt)("p",null,"Ownership can be transferred in a two-step process by using ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"accept_ownership()")," functions."),(0,r.kt)("h3",{id:"security"},"Security"),(0,r.kt)("h4",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"A module allowing to implement an emergency stop mechanism that can be triggered by any account."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/70d9d1e8.8086cd2b.js b/docs/assets/js/70d9d1e8.8086cd2b.js new file mode 100644 index 000000000..c28106442 --- /dev/null +++ b/docs/assets/js/70d9d1e8.8086cd2b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4709],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return t?r.createElement(f,l(l({ref:n},d),{},{components:t})):r.createElement(f,l({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u<a;u++)l[u]=t[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},7060:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:3},l="OwnedToken",i={unversionedId:"tutorials/owned-token",id:"version-0.2.0/tutorials/owned-token",title:"OwnedToken",description:"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.",source:"@site/versioned_docs/version-0.2.0/tutorials/owned-token.md",sourceDirName:"tutorials",slug:"/tutorials/owned-token",permalink:"/docs/0.2.0/tutorials/owned-token",draft:!1,tags:[],version:"0.2.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"ERC-20",permalink:"/docs/0.2.0/tutorials/erc20"}},s={},u=[{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:3},{value:"Delegation",id:"delegation",level:3},{value:"Summary",id:"summary",level:2}],d={toc:u};function c(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ownedtoken"},"OwnedToken"),(0,o.kt)("p",null,"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"What should our module be capable of?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Conform the Erc20 interface."),(0,o.kt)("li",{parentName:"ol"},"Allow minting tokens but only the module owner."),(0,o.kt)("li",{parentName:"ol"},"The current owner should be able to designate a new owner.")),(0,o.kt)("h3",{id:"module-definition"},"Module definition"),(0,o.kt)("p",null,"Let's define a module called ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedToken")," that is a composition of ",(0,o.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Erc20")," modules."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n")),(0,o.kt)("p",null,"As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!"),(0,o.kt)("h3",{id:"delegation"},"Delegation"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use odra::types::{Address, Balance}\n\n...\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: Balance) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> Balance {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> Balance {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: Balance) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: Balance) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: Balance) {\n self.erc20.approve(spender, amount);\n }\n\n pub fn get_owner(&self) -> Address {\n self.ownable.get_owner()\n }\n\n pub fn change_ownership(&mut self, new_owner: Address) {\n self.ownable.change_ownership(new_owner);\n }\n\n pub fn mint(&mut self, address: Address, amount: Balance) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,o.kt)("p",null,"Easy. However, there are a few worth mentioning subtleness:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L11")," - A constructor is a great place to init both modules at once. "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L14-L16")," - Most of the entrypoints do not need any modification, so we simply delegates them to the ",(0,o.kt)("inlineCode",{parentName:"li"},"erc20")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L52")," - The same we do with the ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L58-L61")," - Minting should not be unconditional, we need some control over it. First, using ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," we make sure the ",(0,o.kt)("inlineCode",{parentName:"li"},"caller")," really is the owner.")),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/71.05f6d099.js b/docs/assets/js/71.05f6d099.js new file mode 100644 index 000000000..9bb0add8a --- /dev/null +++ b/docs/assets/js/71.05f6d099.js @@ -0,0 +1,1327 @@ +"use strict"; +exports.id = 71; +exports.ids = [71]; +exports.modules = { + +/***/ 11071: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(99794); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7201); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30381); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20683); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70277); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(39354); +/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(91518); + + + + + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 27], $Vb = [4, 6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "timeline": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "title": 17, "acc_title": 18, "acc_title_value": 19, "acc_descr": 20, "acc_descr_value": 21, "acc_descr_multiline_value": 22, "section": 23, "period_statement": 24, "event_statement": 25, "period": 26, "event": 27, "open_directive": 28, "type_directive": 29, "arg_directive": 30, "close_directive": 31, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "timeline", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 17: "title", 18: "acc_title", 19: "acc_title_value", 20: "acc_descr", 21: "acc_descr_value", 22: "acc_descr_multiline_value", 23: "section", 26: "period", 27: "event", 28: "open_directive", 29: "type_directive", 30: "arg_directive", 31: "close_directive" }, + productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [24, 1], [25, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 11: + yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 12: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccTitle(this.$); + break; + case 13: + case 14: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccDescription(this.$); + break; + case 15: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 19: + yy.addTask($$[$0], 0, ""); + this.$ = $$[$0]; + break; + case 20: + yy.addEvent($$[$0].substr(2)); + this.$ = $$[$0]; + break; + case 21: + yy.parseDirective("%%{", "open_directive"); + break; + case 22: + yy.parseDirective($$[$0], "type_directive"); + break; + case 23: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 24: + yy.parseDirective("}%%", "close_directive", "timeline"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 13: 8, 29: [1, 9] }, { 29: [2, 21] }, { 6: [1, 10], 7: 22, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, { 1: [2, 2] }, { 14: 25, 15: [1, 26], 31: $Va }, o([15, 31], [2, 22]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 22, 10: 28, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 29] }, { 21: [1, 30] }, o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 20]), { 11: [1, 31] }, { 16: 32, 30: [1, 33] }, { 11: [2, 24] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($Vb, [2, 9]), { 14: 34, 31: $Va }, { 31: [2, 23] }, { 11: [1, 35] }, o($Vb, [2, 10])], + defaultActions: { 5: [2, 21], 7: [2, 2], 27: [2, 24], 33: [2, 23] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + more: function() { + this._more = true; + return this; + }, + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + less: function(n) { + this.unput(this.match.slice(n)); + }, + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + pushState: function pushState(condition) { + this.begin(condition); + }, + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 28; + case 1: + this.begin("type_directive"); + return 29; + case 2: + this.popState(); + this.begin("arg_directive"); + return 15; + case 3: + this.popState(); + this.popState(); + return 31; + case 4: + return 30; + case 5: + break; + case 6: + break; + case 7: + return 11; + case 8: + break; + case 9: + break; + case 10: + return 4; + case 11: + return 17; + case 12: + this.begin("acc_title"); + return 18; + case 13: + this.popState(); + return "acc_title_value"; + case 14: + this.begin("acc_descr"); + return 20; + case 15: + this.popState(); + return "acc_descr_value"; + case 16: + this.begin("acc_descr_multiline"); + break; + case 17: + this.popState(); + break; + case 18: + return "acc_descr_multiline_value"; + case 19: + return 23; + case 20: + return 27; + case 21: + return 26; + case 22: + return 6; + case 23: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?::\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "open_directive": { "rules": [1], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +let currentTaskId = 0; +const sections = []; +const tasks = []; +const rawTasks = []; +const getCommonDb = () => _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.j; +const parseDirective = (statement, context, type) => { + (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.k)(globalThis, statement, context, type); +}; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.m)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const addTask = function(period, length, event) { + const rawTask = { + id: currentTaskId++, + section: currentSection, + type: currentSection, + task: period, + score: length ? length : 0, + events: event ? [event] : [] + }; + rawTasks.push(rawTask); +}; +const addEvent = function(event) { + const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1); + currentTask.events.push(event); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const timelineDb = { + clear, + getCommonDb, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + addEvent, + parseDirective +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + getCommonDb, + parseDirective, + clear, + addSection, + getSections, + getTasks, + addTask, + addEvent, + addTaskOrg, + default: timelineDb +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.class !== void 0) { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + const nText = textData.text.replace(/<br\s*\/?>/gi, " "); + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + const span = textElem.append("tspan"); + span.attr("x", textData.x + textData.textMargin * 2); + span.text(nText); + return textElem; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf2) { + const g = elem.append("g"); + const rect = getNoteRect(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf2.width; + rect.height = conf2.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf2)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf2, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf2) { + const center = task.x + conf2.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = getNoteRect(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf2.width; + rect.height = conf2.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + task.x + 14; + _drawTextCandidateFunc(conf2)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf2, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds) { + const rectElem = drawRect(elem, { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + class: "rect" + }); + rectElem.lower(); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + "text-anchor": "start", + width: 100, + height: 100, + textMargin: 0, + rx: 0, + ry: 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2, colour) { + const { taskFontSize, taskFontFamily } = conf2; + const lines = content.split(/<br\s*\/?>/gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +function wrap(text, width) { + text.each(function() { + var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this), words = text2.text().split(/(\s+|<br>)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); + for (let j = 0; j < words.length; j++) { + word = words[words.length - 1 - j]; + line.push(word); + tspan.text(line.join(" ").trim()); + if (tspan.node().getComputedTextLength() > width || word === "<br>") { + line.pop(); + tspan.text(line.join(" ").trim()); + if (word === "<br>") { + line = [""]; + } else { + line = [word]; + } + tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); + } + } + }); +} +const drawNode = function(elem, node, fullSection, conf2) { + const section = fullSection % MAX_SECTIONS - 1; + const nodeElem = elem.append("g"); + node.section = section; + nodeElem.attr( + "class", + (node.class ? node.class + " " : "") + "timeline-node " + ("section-" + section) + ); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf2.fontSize && conf2.fontSize.replace ? conf2.fontSize.replace("px", "") : conf2.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.height = Math.max(node.height, node.maxHeight); + node.width = node.width + 2 * node.padding; + textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + defaultBkg(bkgElem, node, section); + return node; +}; +const getVirtualNodeHeight = function(elem, node, conf2) { + const textElem = elem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf2.fontSize && conf2.fontSize.replace ? conf2.fontSize.replace("px", "") : conf2.fontSize; + textElem.remove(); + return bbox.height + fontSize * 1.1 * 0.5 + node.padding; +}; +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + node.type).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + getTextObj, + getNoteRect, + initGraphics, + drawNode, + getVirtualNodeHeight +}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + keys.forEach(function(key) { + conf[key] = cnf[key]; + }); +}; +const draw = function(text, id, version, diagObj) { + const conf2 = (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.g)(); + const LEFT_MARGIN = conf2.leftMargin ? conf2.leftMargin : 50; + diagObj.db.clear(); + diagObj.parser.parse(text + "\n"); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("timeline", diagObj.db); + const securityLevel = conf2.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getCommonDb().getDiagramTitle(); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("task", tasks2); + svgDraw.initGraphics(svg); + const sections2 = diagObj.db.getSections(); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("sections", sections2); + let maxSectionHeight = 0; + let maxTaskHeight = 0; + let depthY = 0; + let sectionBeginY = 0; + let masterX = 50 + LEFT_MARGIN; + let masterY = 50; + sectionBeginY = 50; + let sectionNumber = 0; + let hasSections = true; + sections2.forEach(function(section) { + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 150, + padding: 20, + maxHeight: maxSectionHeight + }; + const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf2); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("sectionHeight before draw", sectionHeight); + maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); + }); + let maxEventCount = 0; + let maxEventLineLength = 0; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("tasks.length", tasks2.length); + for (const [i, task] of tasks2.entries()) { + const taskNode = { + number: i, + descr: task, + section: task.section, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf2); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("taskHeight before draw", taskHeight); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20); + maxEventCount = Math.max(maxEventCount, task.events.length); + let maxEventLineLengthTemp = 0; + for (let j = 0; j < task.events.length; j++) { + const event = task.events[j]; + const eventNode = { + descr: event, + section: task.section, + number: task.section, + width: 150, + padding: 20, + maxHeight: 50 + }; + maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf2); + } + maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); + } + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("maxSectionHeight before draw", maxSectionHeight); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("maxTaskHeight before draw", maxTaskHeight); + if (sections2 && sections2.length > 0) { + sections2.forEach((section) => { + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 150, + padding: 20, + maxHeight: maxSectionHeight + }; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("sectionNode", sectionNode); + const sectionNodeWrapper = svg.append("g"); + const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf2); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("sectionNode output", node); + sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); + masterY += maxSectionHeight + 50; + const tasksForSection = tasks2.filter((task) => task.section === section); + if (tasksForSection.length > 0) { + drawTasks( + svg, + tasksForSection, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf2, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + false + ); + } + masterX += 200 * Math.max(tasksForSection.length, 1); + masterY = sectionBeginY; + sectionNumber++; + }); + } else { + hasSections = false; + drawTasks( + svg, + tasks2, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf2, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + true + ); + } + const box = svg.node().getBBox(); + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("bounds", box); + if (title) { + svg.append("text").text(title).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); + } + depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; + const lineWrapper = svg.append("g").attr("class", "lineWrapper"); + lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + (0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.s)( + void 0, + svg, + conf2.timeline.padding ? conf2.timeline.padding : 50, + conf2.timeline.useMaxWidth ? conf2.timeline.useMaxWidth : false + ); +}; +const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, maxTaskHeight, conf2, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { + for (const task of tasks2) { + const taskNode = { + descr: task.task, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("taskNode", taskNode); + const taskWrapper = diagram2.append("g").attr("class", "taskWrapper"); + const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf2); + const taskHeight = node.height; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("taskHeight after draw", taskHeight); + taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight); + if (task.events) { + const lineWrapper = diagram2.append("g").attr("class", "lineWrapper"); + let linelength = maxTaskHeight; + masterY += 100; + linelength = linelength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf2); + masterY -= 100; + lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr( + "y2", + masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120 + ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); + } + masterX = masterX + 200; + if (isWithoutSections && !(0,_mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.g)().timeline.disableMulticolor) { + sectionColor++; + } + } + masterY = masterY - 10; +}; +const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf2) { + let maxEventHeight = 0; + const eventBeginY = masterY; + masterY = masterY + 100; + for (const event of events) { + const eventNode = { + descr: event, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: 50 + }; + _mermaid_95cd9c8e_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("eventNode", eventNode); + const eventWrapper = diagram2.append("g").attr("class", "eventWrapper"); + const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf2); + const eventHeight = node.height; + maxEventHeight = maxEventHeight + eventHeight; + eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + masterY = masterY + 10 + eventHeight; + } + masterY = eventBeginY; + return maxEventHeight; +}; +const renderer = { + setConf, + draw +}; +const genSections = (options) => { + let sections2 = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections2 += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .lineWrapper line{ + stroke: ${options["cScaleLabel" + i]} ; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections2; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`; +const styles = getStyles; +const diagram = { + db, + renderer, + parser: parser$1, + styles +}; + +//# sourceMappingURL=diagram-definition.444bacb8.js.map + + +/***/ }), + +/***/ 91619: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ is_dark) +}); + +// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(61691); +// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(71610); +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/luminance.js +/* IMPORT */ + + +/* MAIN */ +//SOURCE: https://planetcalc.com/7779 +const luminance = (color) => { + const { r, g, b } = dist_color/* default.parse */.Z.parse(color); + const luminance = .2126 * utils/* default.channel.toLinear */.Z.channel.toLinear(r) + .7152 * utils/* default.channel.toLinear */.Z.channel.toLinear(g) + .0722 * utils/* default.channel.toLinear */.Z.channel.toLinear(b); + return utils/* default.lang.round */.Z.lang.round(luminance); +}; +/* EXPORT */ +/* harmony default export */ const methods_luminance = (luminance); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_light.js +/* IMPORT */ + +/* MAIN */ +const isLight = (color) => { + return methods_luminance(color) >= .5; +}; +/* EXPORT */ +/* harmony default export */ const is_light = (isLight); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_dark.js +/* IMPORT */ + +/* MAIN */ +const isDark = (color) => { + return !is_light(color); +}; +/* EXPORT */ +/* harmony default export */ const is_dark = (isDark); + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/docs/assets/js/716fdc54.1fa332bf.js b/docs/assets/js/716fdc54.1fa332bf.js new file mode 100644 index 000000000..c2901d2a2 --- /dev/null +++ b/docs/assets/js/716fdc54.1fa332bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[703],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,v=d["".concat(l,".").concat(m)]||d[m]||u[m]||s;return n?r.createElement(v,o(o({ref:t},p),{},{components:n})):r.createElement(v,o({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,o=new Array(s);o[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var c=2;c<s;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},15928:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const s={sidebar_position:9,description:"Creating and emitting Events"},o="Events",i={unversionedId:"basics/events",id:"version-0.7.0/basics/events",title:"Events",description:"Creating and emitting Events",source:"@site/versioned_docs/version-0.7.0/basics/09-events.md",sourceDirName:"basics",slug:"/basics/events",permalink:"/docs/basics/events",draft:!1,tags:[],version:"0.7.0",sidebarPosition:9,frontMatter:{sidebar_position:9,description:"Creating and emitting Events"},sidebar:"tutorialSidebar",previous:{title:"Errors",permalink:"/docs/basics/errors"},next:{title:"Cross calls",permalink:"/docs/basics/cross-calls"}},l={},c=[{value:"Testing events",id:"testing-events",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Different blockchains implement events in different ways. Odra lets you forget about it by introducing\nOdra Events. Take a look:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"use odra::{Event, contract_env};\nuse odra::types::{Address, BlockTime, event::OdraEvent};\n\n#[odra::module(events = [PartyStarted])]\npub struct PartyContract {\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n\n#[odra::module]\nimpl PartyContract {\n #[odra(init)]\n pub fn init(&self) {\n PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n }.emit();\n }\n}\n")),(0,a.kt)("p",null,"We defined a new contract, which emits an event called ",(0,a.kt)("inlineCode",{parentName:"p"},"PartyStarted")," when the contract is deployed.\nTo define an event, we derive an ",(0,a.kt)("inlineCode",{parentName:"p"},"Event")," macro like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n")),(0,a.kt)("p",null,"Among other things, it adds an ",(0,a.kt)("inlineCode",{parentName:"p"},"emit()")," function to the struct, which allows you to emit the event simply\nas that:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n}.emit();\n")),(0,a.kt)("p",null,"Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an ",(0,a.kt)("inlineCode",{parentName:"p"},"events")," attribute to the struct's ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. "),(0,a.kt)("p",null,"The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module."),(0,a.kt)("h2",{id:"testing-events"},"Testing events"),(0,a.kt)("p",null,"Odra's ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a handy macro ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_events!")," which lets you easily test the events that a given contract has emitted:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"use odra::{assert_events, test_env};\nuse crate::features::events::PartyStarted;\nuse super::PartyContractDeployer;\n\n#[test]\nfn test_party() {\n let party_contract = PartyContractDeployer::init();\n assert_events!(\n party_contract,\n PartyStarted {\n caller: test_env::get_account(0),\n block_time: 0,\n }\n );\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn how to call other contracts from the contract context."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/71735968.4acb548a.js b/docs/assets/js/71735968.4acb548a.js new file mode 100644 index 000000000..a871f6233 --- /dev/null +++ b/docs/assets/js/71735968.4acb548a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9345],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,h=d["".concat(l,".").concat(m)]||d[m]||c[m]||a;return r?n.createElement(h,i(i({ref:t},u),{},{components:r})):n.createElement(h,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},53309:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(87462),o=(r(67294),r(3905));const a={slug:"casper-zk-risc0",title:"Zero Knowledge on Casper",authors:["zie1ony"],image:"https://github.com/odradev.png"},i=void 0,s={permalink:"/blog/casper-zk-risc0",source:"@site/blog/2022-12-12-casper-zk-risc0.md",title:"Zero Knowledge on Casper",description:"In this post, I present how to verify a zero knowledge proof on Casper.",date:"2022-12-12T00:00:00.000Z",formattedDate:"December 12, 2022",tags:[],readingTime:4.215,hasTruncateMarker:!0,authors:[{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"casper-zk-risc0",title:"Zero Knowledge on Casper",authors:["zie1ony"],image:"https://github.com/odradev.png"},prevItem:{title:"EVM at Risc0",permalink:"/blog/evm-at-risc0"},nextItem:{title:"Odra 0.2.0 Released",permalink:"/blog/release-020"}},l={authorsImageUrls:[void 0]},p=[{value:"Zero Knowledge",id:"zero-knowledge",level:2},{value:"Risc Zero",id:"risc-zero",level:2},{value:"Example",id:"example",level:2},{value:"Guest",id:"guest",level:3},{value:"Prover",id:"prover",level:3},{value:"Verifier",id:"verifier",level:3},{value:"Livenet results",id:"livenet-results",level:3},{value:"What next",id:"what-next",level:2},{value:"Join us",id:"join-us",level:2}],u={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this post, I present how to verify a zero knowledge proof on Casper."),(0,o.kt)("h2",{id:"zero-knowledge"},"Zero Knowledge"),(0,o.kt)("p",null,"In my opinion, the ",(0,o.kt)("strong",{parentName:"p"},"zero knowledge")," (ZK) is the largest revolution in\nblockchains, since Ethereum introduced Turing-complete, account-based\nsmart contracts.\nTo put it in simple words, ZK enables two use cases not possible before:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Computation scaling - I can perform expensive computation off-chain\nand put the result on a chain with the proof."),(0,o.kt)("li",{parentName:"ol"},"Anonymity - I can prove to you, I know something without revealing it. ")),(0,o.kt)("h2",{id:"risc-zero"},"Risc Zero"),(0,o.kt)("p",null,"I'd like to introduce you to ",(0,o.kt)("a",{parentName:"p",href:"https://www.risczero.com/"},"Risc Zero"),".\nIt is the general purpose zero-knowledge virtual machine.\nGo ahead and spend time reading their website!\nFor us, the key component is the proof verifier that can be compiled into WASM.\nSooo... we can run it on Casper :)\nYes! We can prove any program, produce proof, and send it to Casper's\nsmart contract for verification."),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("p",null,"Let's dive into the example to see how it works.\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/odradev/casper-zk-with-risc0"},"The full example code"),"\nyou can find on our GitHub.\nIt is based on Risc Zero's ",(0,o.kt)("a",{parentName:"p",href:"https://www.risczero.com/docs/examples/hello_multiply"},"Hello, Multiply!"),"\nexample. So make sure you understand it first.\n",(0,o.kt)("a",{parentName:"p",href:"#guest"},"Guest")," and ",(0,o.kt)("a",{parentName:"p",href:"#prover"},"Prover")," sections are taken from this example."),(0,o.kt)("h3",{id:"guest"},"Guest"),(0,o.kt)("p",null,"The program we are proving is called a ",(0,o.kt)("strong",{parentName:"p"},"guest")," in Risc Zero.\nOur goal is to prove we know the factors of an arbitrary number.\nGiven ",(0,o.kt)("inlineCode",{parentName:"p"},"a")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"b")," below guest program computes ",(0,o.kt)("inlineCode",{parentName:"p"},"a * b")," and produces\na proof of computation."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="methods/guest/src/multiply.rs"',title:'"methods/guest/src/multiply.rs"'},'pub fn main() {\n // Load the first number from the host\n let a: u64 = env::read();\n // Load the second number from the host\n let b: u64 = env::read();\n // Verify that neither of them are 1 (i.e. nontrivial factors)\n if a == 1 || b == 1 {\n panic!("Trivial factors")\n }\n // Compute the product while being careful with integer overflow\n let product = a.checked_mul(b).expect("Integer overflow");\n env::commit(&product);\n}\n')),(0,o.kt)("h3",{id:"prover"},"Prover"),(0,o.kt)("p",null,"It's time to run the guest program and build the proof for\na specific ",(0,o.kt)("inlineCode",{parentName:"p"},"a")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"b")," values."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="prover/src/main.rs"',title:'"prover/src/main.rs"'},'fn main() {\n // Pick two numbers.\n let a: u64 = 17;\n let b: u64 = 23;\n\n // First, we make the prover, loading the \'multiply\' method.\n let multiply_src = std::fs::read(MULTIPLY_PATH)\n .expect("Method code should be present at the specified path.");\n let mut prover = Prover::new(&multiply_src, MULTIPLY_ID)\n .expect("Prover should be constructed.",);\n\n // Next we send a & b to the guest.\n prover.add_input_u32_slice(to_vec(&a).unwrap().as_slice());\n prover.add_input_u32_slice(to_vec(&b).unwrap().as_slice());\n \n // Run prover & generate receipt\n let receipt = prover.run()\n .expect("Valid code should be provable.");\n\n // Extract journal of receipt (i.e. output c, where c = a * b)\n let c: u64 = from_slice(&receipt.journal)\n .expect("Journal output should deserialize.");\n\n // Print an assertion\n println!("I know the factors of {}, and I can prove it!", c);\n\n // Verify receipt, panic if it\'s wrong.\n receipt.verify(MULTIPLY_ID).expect(\n "Code you have proven should successfully verify.",\n );\n\n // Convert journal to string and store on disk.\n let journal = serde_json::to_string(&receipt.journal).unwrap();\n write_to_file("../data/journal", &journal);\n\n // Convert seal to string and store on disk.\n let seal = serde_json::to_string(&receipt.seal).unwrap();\n write_to_file("../data/seal", &seal);\n\n // Convert method_id to string and store on disk.\n let result = serde_json::to_string(MULTIPLY_ID).unwrap();\n write_to_file("../data/method", &result);\n}\n')),(0,o.kt)("h3",{id:"verifier"},"Verifier"),(0,o.kt)("p",null,"Now the verification step.\nGiven the proof (journal + seal) and the guest program definition (method),\nCasper's smart contract checks its correctness. This one is written\njust for the demonstration, but in general you want ",(0,o.kt)("inlineCode",{parentName:"p"},"METHOD_ID")," to be\nstored in your contract and both ",(0,o.kt)("inlineCode",{parentName:"p"},"SEAL")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"JOURNAL")," to be passed to\nthe contract via arguments from the outside."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="verifier/src/verifier_contract.rs"',title:'"verifier/src/verifier_contract.rs"'},'// Import the proof and the method.\nconst METHOD_ID: &[u8] = &include!("../../data/method");\nconst SEAL: &[u32] = &include!("../../data/seal");\nconst JOURNAL: &[u32] = &include!("../../data/journal");\n\n// Verifier contract holds a result of the zk verification. \n#[odra::module]\npub struct Verifier {\n result: Variable<String>,\n}\n\n#[odra::module]\nimpl Verifier {\n // Calling this entry point triggers the zk proof verification.\n pub fn verify(&mut self) {\n let result = verify(JOURNAL, SEAL, METHOD_ID);\n self.result.set(result);\n }\n\n // Result getter.\n pub fn result(&self) -> String {\n self.result.get().unwrap_or(String::from("Not processed"))\n }\n}\n\n// The verification method. It constructs new Receipt and verifies it.\nfn verify(journal: &[u32], seal: &[u32], method_id: &[u8]) -> String {\n let result = Receipt::new(&journal, &seal).verify(method_id);\n\n match result {\n Ok(()) => String::from("Ok"),\n Err(err) => format!("Error: {}", err.to_string())\n }\n}\n')),(0,o.kt)("h3",{id:"livenet-results"},"Livenet results"),(0,o.kt)("p",null,"I have deployed it to the testnet and called the ",(0,o.kt)("inlineCode",{parentName:"p"},"verify")," method.\nThe ",(0,o.kt)("inlineCode",{parentName:"p"},"result")," was ",(0,o.kt)("inlineCode",{parentName:"p"},"Ok"),". Wow, first-ever ZK proof verification on Casper.\nTrustless bridging, layer 2 here we come :)"),(0,o.kt)("p",null,"The cost of running the ",(0,o.kt)("inlineCode",{parentName:"p"},"verify")," method is ",(0,o.kt)("inlineCode",{parentName:"p"},"2324 CSPR"),". That's a lot, but\nwe have to start somewhere."),(0,o.kt)("h2",{id:"what-next"},"What next"),(0,o.kt)("p",null,"I think it is a good place to outline possible Casper ZK goals for moving\nthis forward. The community should discuss: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Building more examples. Risc Zero has a nice battleship game to port over\nto Casper."),(0,o.kt)("li",{parentName:"ol"},"Adding Risc Zero verification method to Casper's FFI."),(0,o.kt)("li",{parentName:"ol"},"Supporting Risc Zero team. We should help develop this awesome\nopen-source project and gain the ZK expertise.")),(0,o.kt)("h2",{id:"join-us"},"Join us"),(0,o.kt)("p",null,"Interested in zero knowledge on Casper?"),(0,o.kt)("p",null,"Join ",(0,o.kt)("a",{parentName:"p",href:"https://discord.gg/Mm5ABc9P8k"},"our Discord"),", ",(0,o.kt)("a",{parentName:"p",href:"https://twitter.com/odradev"},"our Twitter")," or write us\nat ",(0,o.kt)("a",{parentName:"p",href:"mailto:contact@odra.dev"},"contact@odra.dev"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/71958ad0.8591dae0.js b/docs/assets/js/71958ad0.8591dae0.js new file mode 100644 index 000000000..97a629983 --- /dev/null +++ b/docs/assets/js/71958ad0.8591dae0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7556],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=d(t),m=r,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},p),{},{components:t})):a.createElement(f,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=c;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},97454:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:2},l="Using odra-modules",i={unversionedId:"examples/using-odra-modules",id:"version-0.6.0/examples/using-odra-modules",title:"Using odra-modules",description:"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.",source:"@site/versioned_docs/version-0.6.0/examples/using-odra-modules.md",sourceDirName:"examples",slug:"/examples/using-odra-modules",permalink:"/docs/0.6.0/examples/using-odra-modules",draft:!1,tags:[],version:"0.6.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"odra-examples",permalink:"/docs/0.6.0/examples/odra-examples"},next:{title:"Tutorials",permalink:"/docs/0.6.0/category/tutorials"}},s={},d=[{value:"Available modules",id:"available-modules",level:2},{value:"Tokens",id:"tokens",level:3},{value:"Erc20",id:"erc20",level:4},{value:"Erc721",id:"erc721",level:4},{value:"Erc1155",id:"erc1155",level:4},{value:"Wrapped native token",id:"wrapped-native-token",level:4},{value:"Access",id:"access",level:3},{value:"AccessControl",id:"accesscontrol",level:4},{value:"Ownable",id:"ownable",level:4},{value:"Ownable2Step",id:"ownable2step",level:4},{value:"Security",id:"security",level:3},{value:"Pauseable",id:"pauseable",level:4}],p={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"using-odra-modules"},"Using odra-modules"),(0,r.kt)("p",null,"Besides the Odra framework, you can attach to your project ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-module")," - a set of plug-and-play modules."),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/getting-started/installation"},"Installation guide")," your Cargo.toml should look like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,r.kt)("p",null,"To use ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules"),", edit your ",(0,r.kt)("inlineCode",{parentName:"p"},"dependency")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"features")," sections."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[dependencies]\nodra = { path = "../core", default-features = false }\nodra-modules = { path = "../modules", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]\ncasper = ["odra/casper", "odra-modules/casper"]\n')),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules")," defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," feature in your project, add ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules/casper"),"specifically (it applies to each backend).")),(0,r.kt)("p",null,"Now, the only thing left is to add a module to your contract."),(0,r.kt)("p",null,"Let's write an example of ",(0,r.kt)("inlineCode",{parentName:"p"},"MyToken")," based on ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::types::{Address, U256};\nuse odra_modules::erc20::Erc20;\n\n#[odra::module]\npub struct MyToken {\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, initial_supply: U256) {\n let name = String::from("MyToken");\n let symbol = String::from("MT");\n let decimals = 9u8;\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n self.erc20.approve(spender, amount);\n }\n}\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All available modules are placed in the main Odra repository.")),(0,r.kt)("h2",{id:"available-modules"},"Available modules"),(0,r.kt)("p",null,"Odra modules comes with couple of ready-to-use modules and reusable extensions."),(0,r.kt)("h3",{id:"tokens"},"Tokens"),(0,r.kt)("h4",{id:"erc20"},"Erc20"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"ERC20")," standard."),(0,r.kt)("h4",{id:"erc721"},"Erc721"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-721"},"ERC721")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC721Base")," and additionally uses\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extensions."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Receiver")," trait lets you implement your own logic for receiving NFTs."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc721WithMetadata")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"erc1155"},"Erc1155"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-1155"},"ERC1155")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC1155Base")," and additionally uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extension."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc1155")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"wrapped-native-token"},"Wrapped native token"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"WrappedNativeToken")," module implements the Wrapper for the native token,\nit was inspired by the WETH."),(0,r.kt)("h3",{id:"access"},"Access"),(0,r.kt)("h4",{id:"accesscontrol"},"AccessControl"),(0,r.kt)("p",null,"This module enables the implementation of role-based access control mechanisms for children\nmodules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API."),(0,r.kt)("h4",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner."),(0,r.kt)("p",null,"The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the\n",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," function."),(0,r.kt)("h4",{id:"ownable2step"},"Ownable2Step"),(0,r.kt)("p",null,"An extension of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module. "),(0,r.kt)("p",null,"Ownership can be transferred in a two-step process by using ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"accept_ownership()")," functions."),(0,r.kt)("h3",{id:"security"},"Security"),(0,r.kt)("h4",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"A module allowing to implement an emergency stop mechanism that can be triggered by any account."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/71b691b7.9684bfe0.js b/docs/assets/js/71b691b7.9684bfe0.js new file mode 100644 index 000000000..05987277b --- /dev/null +++ b/docs/assets/js/71b691b7.9684bfe0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3095],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||i;return n?r.createElement(f,o(o({ref:t},u),{},{components:n})):r.createElement(f,o({ref:t},u))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var c=2;c<i;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},84710:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const i={slug:"evm-at-risc0",title:"EVM at Risc0",authors:["zie1ony"],image:"https://github.com/odradev.png"},o=void 0,l={permalink:"/blog/evm-at-risc0",source:"@site/blog/2023-02-13-evm-at-risc0.md",title:"EVM at Risc0",description:"Let's run Solidity code inside SputnikVM inside Risc0.",date:"2023-02-13T00:00:00.000Z",formattedDate:"February 13, 2023",tags:[],readingTime:3.97,hasTruncateMarker:!0,authors:[{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"evm-at-risc0",title:"EVM at Risc0",authors:["zie1ony"],image:"https://github.com/odradev.png"},prevItem:{title:"Odra + CosmWasm",permalink:"/blog/odra-cosmwasm"},nextItem:{title:"Zero Knowledge on Casper",permalink:"/blog/casper-zk-risc0"}},s={authorsImageUrls:[void 0]},c=[{value:"Solidity",id:"solidity",level:2},{value:"EVM",id:"evm",level:2},{value:"Risc0",id:"risc0",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Join us",id:"join-us",level:2}],u={toc:c};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Let's run Solidity code inside ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/rust-blockchain/evm/"},"SputnikVM")," inside ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/risc0/risc0"},"Risc0"),"."),(0,a.kt)("p",null,"First make sure you know how Risc0 works.\nMy ",(0,a.kt)("a",{parentName:"p",href:"/blog/casper-zk-risc0"},"previous post")," explains it."),(0,a.kt)("p",null,"If you want to jump directly to the full code example, it's in the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/odradev/evm-at-risc0"},"repo"),"."),(0,a.kt)("h2",{id:"solidity"},"Solidity"),(0,a.kt)("p",null,"As an example, I have this simple Solidity code.\nIt is a calculator with two functions.\nOne for addition and one for the nth Fibonacci number."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-solidity",metastring:'title="bytecode/Calculator.sol"',title:'"bytecode/Calculator.sol"'},"contract Calculator {\n function add(uint256 a, uint256 b) public pure returns (uint256) {\n return a + b;\n }\n\n function fibonacci(uint256 n) public returns (uint256) {\n if (n <= 1) {\n return n;\n } else {\n return fibonacci(n - 1) + fibonacci(n - 2);\n }\n }\n}\n")),(0,a.kt)("p",null,"It needs to be compiled into the byte code. ",(0,a.kt)("inlineCode",{parentName:"p"},"solc")," can do this."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ solc \\\n --bin-runtime \\\n --optimize \\\n --overwrite \\\n --evm-version istanbul \\\n --output-dir bytecode \\\n bytecode/Calculator.sol \n")),(0,a.kt)("p",null,"It produces an EVM bytecode in the ",(0,a.kt)("inlineCode",{parentName:"p"},"bytecode")," directory."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ ls bytecode/\nCalculator.bin-runtime Calculator.sol\n")),(0,a.kt)("h2",{id:"evm"},"EVM"),(0,a.kt)("p",null,"The EVM I used is ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/rust-blockchain/evm/"},"SputnikVM"),".\nMost important it is written in pure Rust and even with ",(0,a.kt)("inlineCode",{parentName:"p"},"no_std")," mode.\nThis way I can start an in-memory instance of EVM.\nThen take the bytecode of a contract and install it.\nFinally, call the contract with arguments and obtain the result value.\nFor now, it's just a Rust code. Risc0 comes later."),(0,a.kt)("p",null,"The code is based on Sputnik's ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/rust-blockchain/evm/blob/master/benches/loop.rs"},"benchmark test"),".\nHuge thanks to ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/birchmd"},"Michael Birch")," for helping with Sputnik.\nAlso make sure how EVM's ",(0,a.kt)("a",{parentName:"p",href:"https://solidity-by-example.org/function-selector"},"function selectors")," work."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="evm-runner/src/lib.rs"',title:'"evm-runner/src/lib.rs"'},'\n// Load previously compiled Calculator contract.\npub const CALCULATOR_EVM_PROGRAM: &str = include_str!(\n "../../bytecode/Calculator.bin-runtime"\n);\n\n// Run Calculator for a given input.\npub fn run_calc_contract(input: &str) -> String {\n run_evm(CALCULATOR_EVM_PROGRAM, input)\n}\n\n// Run a program (contract) for a given input. \nfn run_evm(program: &str, input: &str) -> String {\n\n // Define EVM configuration.\n let config = Config::istanbul();\n let vicinity = MemoryVicinity {\n gas_price: U256::zero(),\n origin: H160::default(),\n block_hashes: Vec::new(),\n block_number: Default::default(),\n block_coinbase: Default::default(),\n block_timestamp: Default::default(),\n block_difficulty: Default::default(),\n block_gas_limit: Default::default(),\n chain_id: U256::one(),\n block_base_fee_per_gas: U256::zero(),\n };\n\n // Initialized the state of EVM\'s memory.\n let mut state = BTreeMap::new();\n\n // Add our contract under the 0x10 address.\n state.insert(\n H160::from_str("0x1000000000000000000000000000000000000000")\n .unwrap(),\n MemoryAccount {\n nonce: U256::one(),\n balance: U256::from(10000000),\n storage: BTreeMap::new(),\n code: hex::decode(program).unwrap(),\n }\n );\n\n // Add new user 0xf0 that will be used as the contract caller.\n state.insert(\n H160::from_str("0xf000000000000000000000000000000000000000")\n .unwrap(),\n MemoryAccount {\n nonce: U256::one(),\n balance: U256::from(10000000),\n storage: BTreeMap::new(),\n code: Vec::new(),\n },\n );\n\n // Prepare the executor.\n let backend = MemoryBackend::new(&vicinity, state);\n let metadata = StackSubstateMetadata::new(u64::MAX, &config);\n let state = MemoryStackState::new(metadata, &backend);\n let precompiles = BTreeMap::new();\n let mut executor \n = StackExecutor::new_with_precompiles(state, &config, &precompiles);\n\n // Call the 0x10 contract using the 0xf0 user.\n // Use the input variable. \n let (exit_reason, result) = executor.transact_call(\n H160::from_str("0xf000000000000000000000000000000000000000")\n .unwrap(),\n H160::from_str("0x1000000000000000000000000000000000000000")\n .unwrap(),\n U256::zero(),\n hex::decode(input).unwrap(),\n u64::MAX,\n Vec::new(),\n );\n\n // Make sure the execution succeeded.\n assert!(exit_reason == ExitReason::Succeed(ExitSucceed::Returned));\n \n // Return hex encoded string.\n hex::encode(result)\n}\n')),(0,a.kt)("p",null,"Let's execute it. In below tests the ",(0,a.kt)("inlineCode",{parentName:"p"},"data")," variable hold two things:\nfunction selector and arguments."),(0,a.kt)("p",null,"For example ",(0,a.kt)("inlineCode",{parentName:"p"},"61047ff4000000000000000000000000000000000000000000000000000000000000000a"),"\nis concatination of the function selector (first 8 chars) and 256-bit long argument.\nIt is just ",(0,a.kt)("inlineCode",{parentName:"p"},"fibonacci(10)"),". ",(0,a.kt)("inlineCode",{parentName:"p"},"a")," is hex of ",(0,a.kt)("inlineCode",{parentName:"p"},"10")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"37")," is hex of ",(0,a.kt)("inlineCode",{parentName:"p"},"52"),". "),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="evm-runner/src/lib.rs"',title:'"evm-runner/src/lib.rs"'},'#[test]\nfn fibonacci_works() {\n let data = "61047ff4000000000000000000000000000000000000000000000000000000000000000a";\n let result = run_calc_contract(data);\n assert_eq!(result, "0000000000000000000000000000000000000000000000000000000000000037"); \n}\n\n#[test]\nfn addition_works() {\n let data = "771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002";\n let result = run_calc_contract(data);\n assert_eq!(result, "0000000000000000000000000000000000000000000000000000000000000009");\n}\n')),(0,a.kt)("h2",{id:"risc0"},"Risc0"),(0,a.kt)("p",null,"It's time for ",(0,a.kt)("inlineCode",{parentName:"p"},"risc0"),"."),(0,a.kt)("p",null,"First the guest program.\nIt is super simple.\nIt takes a string as an argument,\npasses it to the ",(0,a.kt)("inlineCode",{parentName:"p"},"run_calc_contract"),"\nand returns the result."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=methods/guest/src/bin/evm_calc.rs",title:"methods/guest/src/bin/evm_calc.rs"},"#![no_main]\n#![no_std]\n\nextern crate alloc;\n\nuse alloc::{string::String};\nuse risc0_zkvm::guest::{env};\nuse evm_runner::run_calc_contract;\n\nrisc0_zkvm::guest::entry!(main);\n\npub fn main() {\n let input: String = env::read();\n let result = run_calc_contract(&input);\n env::commit(&result);\n}\n")),(0,a.kt)("p",null,"The final step is calling it under ZK."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=host/src/main.rs",title:"host/src/main.rs"},'fn main() {\n println!("Proving Calculator.add(7, 2)");\n let input = "771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002";\n let result = run_prover(input);\n println!("Proof generated. 7 + 2 = {result}");\n \n println!("Proving Calculator.fibonacci(4)");\n let input = "61047ff40000000000000000000000000000000000000000000000000000000000000004";\n let result = run_prover(input);\n println!("Proof generated. fibonacci(4) = {result}");\n}\n\nfn run_prover(input: &str) -> u32 {\n // Make the prover.\n let method_code = std::fs::read(EVM_CALC_PATH).unwrap();\n let mut prover = Prover::new(&method_code, EVM_CALC_ID).unwrap();\n\n // Push the input as an argument.\n prover.add_input_u32_slice(to_vec(input).unwrap().as_slice());\n \n // Execute the prover.\n let receipt = prover.run().unwrap();\n \n // Verify the proof.\n assert!(receipt.verify(EVM_CALC_ID).is_ok());\n \n // Return result as an u32 value.\n let result: String = from_slice(receipt.journal.as_slice()).unwrap();\n u32::from_str_radix(&result, 16).unwrap()\n}\n')),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ cargo run --release -p host\nProving Calculator.add(7, 2)\nProof generated. 7 + 2 = 9\nProving Calculator.fibonacci(4)\nProof generated. fibonacci(4) = 3\n")),(0,a.kt)("h2",{id:"conclusion"},"Conclusion"),(0,a.kt)("p",null,"How amazing and mindblowing it is!\nOf course, it's just a proof of concept.\nYet with further development of Risc0 improving its proving time and\nwith more flexible SputnikVM this approach is more than promising."),(0,a.kt)("h2",{id:"join-us"},"Join us"),(0,a.kt)("p",null,"Interested?"),(0,a.kt)("p",null,"Join ",(0,a.kt)("a",{parentName:"p",href:"https://discord.gg/Mm5ABc9P8k"},"our Discord"),", ",(0,a.kt)("a",{parentName:"p",href:"https://twitter.com/odradev"},"our Twitter")," or write us\nat ",(0,a.kt)("a",{parentName:"p",href:"mailto:contact@odra.dev"},"contact@odra.dev"),"."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/728e71a1.ddcc5767.js b/docs/assets/js/728e71a1.ddcc5767.js new file mode 100644 index 000000000..8d5498eae --- /dev/null +++ b/docs/assets/js/728e71a1.ddcc5767.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4301],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=d(t),m=r,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},c),{},{components:t})):a.createElement(f,l({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}p.displayName="MDXCreateElement"},54540:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={},l="Delegate",i={unversionedId:"advanced/delegate",id:"version-0.5.0/advanced/delegate",title:"Delegate",description:"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.",source:"@site/versioned_docs/version-0.5.0/advanced/02-delegate.md",sourceDirName:"advanced",slug:"/advanced/delegate",permalink:"/docs/0.5.0/advanced/delegate",draft:!1,tags:[],version:"0.5.0",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Module reusing",permalink:"/docs/0.5.0/advanced/using"},next:{title:"Advanced Storage Concepts",permalink:"/docs/0.5.0/advanced/advanced-storage"}},s={},d=[{value:"Overview",id:"overview",level:2},{value:"Code Examples",id:"code-examples",level:2}],c={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"delegate"},"Delegate"),(0,r.kt)("p",null,"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module."),(0,r.kt)("p",null,"The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"To utilize the delegate feature in your contract, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro, your parent module remains clean and easy to understand."),(0,r.kt)("p",null,"You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself."),(0,r.kt)("h2",{id:"code-examples"},"Code Examples"),(0,r.kt)("p",null,"Consider the following basic example for better understanding:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);\n pub fn approve(&mut self, spender: Address, amount: U256);\n pub fn name(&self) -> String;\n pub fn symbol(&self) -> String;\n pub fn decimals(&self) -> u8;\n pub fn total_supply(&self) -> U256;\n pub fn balance_of(&self, owner: Address) -> U256;\n pub fn allowance(&self, owner: Address, spender: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n pub fn change_ownership(&mut self, new_owner: Address);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedToken")," contract includes two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),". We delegate various functions from both modules using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro. As a result, the contract retains its succinctness without compromising on functionality."),(0,r.kt)("p",null,"The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities."),(0,r.kt)("p",null,"Let's take a look at another example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};\n\n#[odra::module]\npub struct DeFiPlatform {\n ownable: Ownable,\n erc20: Erc20,\n exchange: Exchange\n}\n\n#[odra::module]\nimpl DeFiPlatform {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n self.exchange.init(exchange_rate);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn balance_of(&self, owner: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n }\n\n to self.exchange {\n pub fn swap(&mut self, sender: Address, recipient: Address);\n pub fn set_exchange_rate(&mut self, new_rate: u64);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"In this ",(0,r.kt)("inlineCode",{parentName:"p"},"DeFiPlatform")," contract, we include ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"Exchange")," modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure."),(0,r.kt)("p",null,"Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/73285975.38bfacf4.js b/docs/assets/js/73285975.38bfacf4.js new file mode 100644 index 000000000..9fc48d34f --- /dev/null +++ b/docs/assets/js/73285975.38bfacf4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2869],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=s(n),m=r,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},38419:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(87462),r=(n(67294),n(3905));const o={},i="Attributes",l={unversionedId:"advanced/attributes",id:"version-0.3.0/advanced/attributes",title:"Attributes",description:"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.",source:"@site/versioned_docs/version-0.3.0/advanced/04-attributes.md",sourceDirName:"advanced",slug:"/advanced/attributes",permalink:"/docs/0.3.0/advanced/attributes",draft:!1,tags:[],version:"0.3.0",sidebarPosition:4,frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Advanced Storage Concepts",permalink:"/docs/0.3.0/advanced/advanced-storage"},next:{title:"Backends",permalink:"/docs/0.3.0/category/backends"}},c={},s=[{value:"Init",id:"init",level:2},{value:"Example",id:"example",level:3},{value:"Payable",id:"payable",level:2},{value:"Example",id:"example-1",level:3},{value:"Non Reentrant",id:"non-reentrant",level:2},{value:"Mixing attributes",id:"mixing-attributes",level:2}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"attributes"},"Attributes"),(0,r.kt)("p",null,"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution."),(0,r.kt)("p",null,"Odra defines a few attributes that can be applied to functions to equip them with superpowers."),(0,r.kt)("h2",{id:"init"},"Init"),(0,r.kt)("p",null,"If your contract needs initial setup, adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed."),(0,r.kt)("p",null,"It's important to note that a constructor function should not be invoked in any other context."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/erc20.rs",title:"examples/erc20.rs"},"#[odra(init)]\npub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n}\n")),(0,r.kt)("h2",{id:"payable"},"Payable"),(0,r.kt)("p",null,"When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the #","[odra(payable)]"," attribute can send and take money in the form of native tokens. "),(0,r.kt)("h3",{id:"example-1"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/tlw.rs",title:"examples/tlw.rs"},"#[odra(payable)]\npub fn deposit(&mut self) {\n // Extract values\n let caller: Address = contract_env::caller();\n let amount: Balance = contract_env::attached_value();\n let current_block_time: BlockTime = contract_env::get_block_time();\n\n // Multiple lock check\n if self.balances.get(&caller).is_some() {\n contract_env::revert(Error::CannotLockTwice)\n }\n\n // Update state, emit event\n self.balances.set(&caller, amount);\n self.lock_expiration_map\n .set(&caller, current_block_time + self.lock_duration());\n Deposit {\n address: caller,\n amount\n }\n .emit();\n}\n")),(0,r.kt)("p",null,"If you try to send tokens to a non-payable function, the transaction will be automatically rejected."),(0,r.kt)("h2",{id:"non-reentrant"},"Non Reentrant"),(0,r.kt)("p",null,"Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds. "),(0,r.kt)("p",null,"To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts. "),(0,r.kt)("p",null,"They can also use reentrancy guards to block recursive calls to sensitive functions."),(0,r.kt)("p",null,"In Odra you can just apply the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(non_reentrant)]")," attribute to your function."),(0,r.kt)("h2",{id:"mixing-attributes"},"Mixing attributes"),(0,r.kt)("p",null,"A function can accept more than one attribute. The only exclusion is a constructor cannot be payable.\nTo apply multiple attributes, you can write:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable, non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"or "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"In both cases attributes order does not matter."),(0,r.kt)("p",null,"However, a constructor cannot be payable, so the below code would not compile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(init)]\nfn initialize() {\n // your logic...\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/733ac994.bf22c9dd.js b/docs/assets/js/733ac994.bf22c9dd.js new file mode 100644 index 000000000..c701edd59 --- /dev/null +++ b/docs/assets/js/733ac994.bf22c9dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7952],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(a),g=n,m=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return a?r.createElement(m,l(l({ref:t},p),{},{components:a})):r.createElement(m,l({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var c=2;c<o;c++)l[c]=a[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,a)}d.displayName="MDXCreateElement"},15774:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=a(87462),n=(a(67294),a(3905));const o={sidebar_position:1},l="Installation",i={unversionedId:"getting-started/installation",id:"version-0.3.1/getting-started/installation",title:"Installation",description:"Hello fellow Odra user! This page will guide you through the installation process.",source:"@site/versioned_docs/version-0.3.1/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/0.3.1/getting-started/installation",draft:!1,tags:[],version:"0.3.1",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Getting started",permalink:"/docs/0.3.1/category/getting-started"},next:{title:"Flipper example",permalink:"/docs/0.3.1/getting-started/flipper"}},s={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Cargo Odra",id:"installing-cargo-odra",level:2},{value:"Creating a new Odra project",id:"creating-a-new-odra-project",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"installation"},"Installation"),(0,n.kt)("p",null,"Hello fellow Odra user! This page will guide you through the installation process."),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("p",null,"To start working with Odra, you need to have the following installed on your machine:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Rust toolchain installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://rustup.rs/"},"rustup.rs"),")"),(0,n.kt)("li",{parentName:"ul"},"wasmstrip tool installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/WebAssembly/wabt"},"wabt"),")")),(0,n.kt)("p",null,"We do not provide exact commands for installing these tools, as they are different for different operating systems.\nPlease refer to the documentation of the tools themselves."),(0,n.kt)("p",null,"With Rust toolchain ready, you can add a new target:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"rustup target add wasm32-unknown-unknown\n")),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("inlineCode",{parentName:"p"},"wasm32-unknown-uknown")," is a target that will be used by Odra to compile your smart contracts to WASM files.")),(0,n.kt)("h2",{id:"installing-cargo-odra"},"Installing Cargo Odra"),(0,n.kt)("p",null,"Cargo Odra is a helpful tool that will help you to build and test your smart contracts.\nIt is not required to use Odra, but the documentation will assume that you have it installed."),(0,n.kt)("p",null,"To install it, simply execute the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo install cargo-odra\n")),(0,n.kt)("p",null,"To check if it was installed correctly and see available commands, type:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra --help\n")),(0,n.kt)("p",null,"If everything went fine, we can proceed to the next step."),(0,n.kt)("h2",{id:"creating-a-new-odra-project"},"Creating a new Odra project"),(0,n.kt)("p",null,"To create a new project, simply execute:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project && cd my_project\n")),(0,n.kt)("p",null,'This will create a new folder called "my_project" and initialize Odra there. Cargo Odra\nwill create a sample contract for you in src directory. You can run the tests of this contract\nby executing:'),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,n.kt)("p",null,"This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Congratulations!")," Now you are ready to create contracts using Odra framework! If you had any problems during\nthe installation process, feel free to ask for help on our ",(0,n.kt)("a",{parentName:"p",href:"https://discord.com/invite/Mm5ABc9P8k"},"Discord"),"."),(0,n.kt)("h2",{id:"whats-next"},"What's next?"),(0,n.kt)("p",null,"If you want to see the code that you just tested, continue to the description of ",(0,n.kt)("a",{parentName:"p",href:"flipper"},"Flipper example"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/739a70a9.f96db3be.js b/docs/assets/js/739a70a9.f96db3be.js new file mode 100644 index 000000000..d2a37270c --- /dev/null +++ b/docs/assets/js/739a70a9.f96db3be.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9986],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),f=l(r),m=o,y=f["".concat(p,".").concat(m)]||f[m]||u[m]||a;return r?n.createElement(y,i(i({ref:t},s),{},{components:r})):n.createElement(y,i({ref:t},s))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},82698:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={slug:"casper-zk-risc0",title:"Zero Knowledge on Casper",authors:["zie1ony"],image:"https://github.com/odradev.png"},i=void 0,c={permalink:"/blog/casper-zk-risc0",source:"@site/blog/2022-12-12-casper-zk-risc0.md",title:"Zero Knowledge on Casper",description:"In this post, I present how to verify a zero knowledge proof on Casper.",date:"2022-12-12T00:00:00.000Z",formattedDate:"December 12, 2022",tags:[],readingTime:4.215,hasTruncateMarker:!0,authors:[{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"casper-zk-risc0",title:"Zero Knowledge on Casper",authors:["zie1ony"],image:"https://github.com/odradev.png"},prevItem:{title:"EVM at Risc0",permalink:"/blog/evm-at-risc0"},nextItem:{title:"Odra 0.2.0 Released",permalink:"/blog/release-020"}},p={authorsImageUrls:[void 0]},l=[],s={toc:l};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this post, I present how to verify a zero knowledge proof on Casper."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/7414f7c1.326cab86.js b/docs/assets/js/7414f7c1.326cab86.js new file mode 100644 index 000000000..c019696a4 --- /dev/null +++ b/docs/assets/js/7414f7c1.326cab86.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2858],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>g});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),c=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},l=function(e){var n=c(e.components);return a.createElement(p.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(t),g=r,m=u["".concat(p,".").concat(g)]||u[g]||d[g]||i;return t?a.createElement(m,o(o({ref:n},l),{},{components:t})):a.createElement(m,o({ref:n},l))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var c=2;c<i;c++)o[c]=t[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}u.displayName="MDXCreateElement"},72017:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=t(87462),r=(t(67294),t(3905));const i={},o="Advanced Storage Concepts",s={unversionedId:"advanced/advanced-storage",id:"version-0.3.0/advanced/advanced-storage",title:"Advanced Storage Concepts",description:"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.",source:"@site/versioned_docs/version-0.3.0/advanced/03-advanced-storage.md",sourceDirName:"advanced",slug:"/advanced/advanced-storage",permalink:"/docs/0.3.0/advanced/advanced-storage",draft:!1,tags:[],version:"0.3.0",sidebarPosition:3,frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Delegate",permalink:"/docs/0.3.0/advanced/delegate"},next:{title:"Attributes",permalink:"/docs/0.3.0/advanced/attributes"}},p={},c=[{value:"Recap and Basic Concepts",id:"recap-and-basic-concepts",level:2},{value:"Advanced Storage Concepts",id:"advanced-storage-concepts-1",level:2},{value:"Sequence",id:"sequence",level:3},{value:"Advanced Mapping",id:"advanced-mapping",level:3},{value:"AdvancedStorage Contract",id:"advancedstorage-contract",level:2},{value:"Conclusion",id:"conclusion",level:2}],l={toc:c};function d(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"advanced-storage-concepts"},"Advanced Storage Concepts"),(0,r.kt)("p",null,"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Sequence")," modules, which are key components of the advanced storage interaction in Odra."),(0,r.kt)("h2",{id:"recap-and-basic-concepts"},"Recap and Basic Concepts"),(0,r.kt)("p",null,"Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),". These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Variable"),": A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Mapping"),": Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"List"),": Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over."),(0,r.kt)("p",null,"If you need a refresher on these topics, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.0/basics/storage-interaction"},"guide")," on basic storage in Odra."),(0,r.kt)("h2",{id:"advanced-storage-concepts-1"},"Advanced Storage Concepts"),(0,r.kt)("h3",{id:"sequence"},"Sequence"),(0,r.kt)("p",null,"The Sequence in Odra is a basic module that holds a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," which keeps track of the current value. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub struct Sequence<T>\nwhere\n T: Num + One + OdraType\n{\n value: Variable<T>\n}\n")),(0,r.kt)("p",null,"The Sequence module provides functions ",(0,r.kt)("inlineCode",{parentName:"p"},"get_current_value")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"next_value")," to get the current value and increment the value respectively."),(0,r.kt)("h3",{id:"advanced-mapping"},"Advanced Mapping"),(0,r.kt)("p",null,"In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility."),(0,r.kt)("p",null,"Let's consider the following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/mapping.rs"',title:'"examples/mapping.rs"'},"use odra::{map, types::U256, Mapping, UnwrapOrRevert};\n\nuse crate::owned_token::OwnedToken;\n\n#[odra::module]\npub struct NestedMapping {\n strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,\n tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>\n}\n\n#[odra::module]\nimpl NestedMapping {\n\n ...\n\n pub fn set_token(\n &mut self,\n key1: String,\n key2: u32,\n key3: String,\n token_name: String,\n decimals: u8,\n symbol: String,\n initial_supply: &U256\n ) {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .init(token_name, symbol, decimals, initial_supply);\n }\n\n pub fn get_string_api(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> String {\n let mapping = self.strings.get_instance(&key1).get_instance(&key2);\n mapping.get(&key3).unwrap_or_revert()\n }\n\n pub fn total_supply(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> U256 {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .total_supply()\n }\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers. "),(0,r.kt)("p",{parentName:"admonition"},"Instead of using the ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," function, call ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()"),", which sets the correct namespace for nested modules.")),(0,r.kt)("p",null,"If the terminal value is deeply nested, a long chain of get_instance() calls is required."),(0,r.kt)("p",null,"To keep the codebase consistent, a ",(0,r.kt)("inlineCode",{parentName:"p"},"map!")," macro can be used:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/mapping.rs"',title:'"examples/mapping.rs"'},"...\n\npub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {\n map!(self.strings[key1][key2][key3] = value);\n}\n\npub fn get_string_macro(\n &self, \n key1: String, \n key2: u32, \n key3: String\n) -> String {\n map!(self.strings[key1][key2][key3])\n}\n\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The terminal value must not be an Odra Module.")),(0,r.kt)("h2",{id:"advancedstorage-contract"},"AdvancedStorage Contract"),(0,r.kt)("p",null,"The given code snippet showcases the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdvancedStorage")," contract that incorporates these storage concepts."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Sequence, Mapping};\nuse crate::modules::Token;\n\n#[odra::module]\npub struct AdvancedStorage {\n my_sequence: Sequence<u32>,\n my_mapping: Mapping<String, Mapping<String, Token>>,\n}\n\nimpl AdvancedStorage {\n pub fn get_sequence_current_value(&self) -> u32 {\n self.my_sequence.get_current_value()\n }\n\n pub fn next_sequence_value(&mut self) -> u32 {\n self.my_sequence.next_value()\n }\n\n pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.set(&inner_key, value);\n }\n\n pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.get(&inner_key)\n }\n}\n")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/74376d79.69b07d3f.js b/docs/assets/js/74376d79.69b07d3f.js new file mode 100644 index 000000000..a8c459161 --- /dev/null +++ b/docs/assets/js/74376d79.69b07d3f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9413],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=d(t),m=r,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},c),{},{components:t})):a.createElement(f,l({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}p.displayName="MDXCreateElement"},42014:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={},l="Delegate",i={unversionedId:"advanced/delegate",id:"version-0.3.0/advanced/delegate",title:"Delegate",description:"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.",source:"@site/versioned_docs/version-0.3.0/advanced/02-delegate.md",sourceDirName:"advanced",slug:"/advanced/delegate",permalink:"/docs/0.3.0/advanced/delegate",draft:!1,tags:[],version:"0.3.0",sidebarPosition:2,frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Module Composer",permalink:"/docs/0.3.0/advanced/composer"},next:{title:"Advanced Storage Concepts",permalink:"/docs/0.3.0/advanced/advanced-storage"}},s={},d=[{value:"Overview",id:"overview",level:2},{value:"Code Examples",id:"code-examples",level:2}],c={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"delegate"},"Delegate"),(0,r.kt)("p",null,"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module."),(0,r.kt)("p",null,"The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"To utilize the delegate feature in your contract, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro, your parent module remains clean and easy to understand."),(0,r.kt)("p",null,"You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself."),(0,r.kt)("h2",{id:"code-examples"},"Code Examples"),(0,r.kt)("p",null,"Consider the following basic example for better understanding:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);\n pub fn approve(&mut self, spender: Address, amount: U256);\n pub fn name(&self) -> String;\n pub fn symbol(&self) -> String;\n pub fn decimals(&self) -> u8;\n pub fn total_supply(&self) -> U256;\n pub fn balance_of(&self, owner: Address) -> U256;\n pub fn allowance(&self, owner: Address, spender: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n pub fn change_ownership(&mut self, new_owner: Address);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedToken")," contract includes two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),". We delegate various functions from both modules using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro. As a result, the contract retains its succinctness without compromising on functionality."),(0,r.kt)("p",null,"The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities."),(0,r.kt)("p",null,"Let's take a look at another example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};\n\n#[odra::module]\npub struct DeFiPlatform {\n ownable: Ownable,\n erc20: Erc20,\n exchange: Exchange\n}\n\n#[odra::module]\nimpl DeFiPlatform {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n self.exchange.init(exchange_rate);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn balance_of(&self, owner: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n }\n\n to self.exchange {\n pub fn swap(&mut self, sender: Address, recipient: Address);\n pub fn set_exchange_rate(&mut self, new_rate: u64);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"In this ",(0,r.kt)("inlineCode",{parentName:"p"},"DeFiPlatform")," contract, we include ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"Exchange")," modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure."),(0,r.kt)("p",null,"Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/74442e8e.f901ad8b.js b/docs/assets/js/74442e8e.f901ad8b.js new file mode 100644 index 000000000..d151ce75a --- /dev/null +++ b/docs/assets/js/74442e8e.f901ad8b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2761],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=d(t),m=r,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},p),{},{components:t})):a.createElement(f,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=c;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},80449:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:2},l="Using odra-modules",i={unversionedId:"examples/using-odra-modules",id:"version-0.3.1/examples/using-odra-modules",title:"Using odra-modules",description:"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.",source:"@site/versioned_docs/version-0.3.1/examples/using-odra-modules.md",sourceDirName:"examples",slug:"/examples/using-odra-modules",permalink:"/docs/0.3.1/examples/using-odra-modules",draft:!1,tags:[],version:"0.3.1",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"odra-examples",permalink:"/docs/0.3.1/examples/odra-examples"},next:{title:"Tutorials",permalink:"/docs/0.3.1/category/tutorials"}},s={},d=[{value:"Available modules",id:"available-modules",level:2},{value:"Tokens",id:"tokens",level:3},{value:"Erc20",id:"erc20",level:4},{value:"Erc721",id:"erc721",level:4},{value:"Erc1155",id:"erc1155",level:4},{value:"Wrapped native token",id:"wrapped-native-token",level:4},{value:"Access",id:"access",level:3},{value:"AccessControl",id:"accesscontrol",level:4},{value:"Ownable",id:"ownable",level:4},{value:"Ownable2Step",id:"ownable2step",level:4},{value:"Security",id:"security",level:3},{value:"Pauseable",id:"pauseable",level:4}],p={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"using-odra-modules"},"Using odra-modules"),(0,r.kt)("p",null,"Besides the Odra framework, you can attach to your project ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-module")," - a set of plug-and-play modules."),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.1/getting-started/installation"},"Installation guide")," your Cargo.toml should look like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,r.kt)("p",null,"To use ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules"),", edit your ",(0,r.kt)("inlineCode",{parentName:"p"},"dependency")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"features")," sections."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[dependencies]\nodra = { path = "../core", default-features = false }\nodra-modules = { path = "../modules", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]\ncasper = ["odra/casper", "odra-modules/casper"]\n')),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules")," defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," feature in your project, add ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules/casper"),"specifically (it applies to each backend).")),(0,r.kt)("p",null,"Now, the only thing left is to add a module to your contract."),(0,r.kt)("p",null,"Let's write an example of ",(0,r.kt)("inlineCode",{parentName:"p"},"MyToken")," based on ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::types::{Address, U256};\nuse odra_modules::erc20::Erc20;\n\n#[odra::module]\npub struct MyToken {\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, initial_supply: U256) {\n let name = String::from("MyToken");\n let symbol = String::from("MT");\n let decimals = 9u8;\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n self.erc20.approve(spender, amount);\n }\n}\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All available modules are placed in the main Odra repository.")),(0,r.kt)("h2",{id:"available-modules"},"Available modules"),(0,r.kt)("p",null,"Odra modules comes with couple of ready-to-use modules and reusable extensions."),(0,r.kt)("h3",{id:"tokens"},"Tokens"),(0,r.kt)("h4",{id:"erc20"},"Erc20"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"ERC20")," standard."),(0,r.kt)("h4",{id:"erc721"},"Erc721"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-721"},"ERC721")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC721Base")," and additionally uses\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extensions."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Receiver")," trait lets you implement your own logic for receiving NFTs."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc721WithMetadata")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"erc1155"},"Erc1155"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-1155"},"ERC1155")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC1155Base")," and additionally uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extension."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc1155")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"wrapped-native-token"},"Wrapped native token"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"WrappedNativeToken")," module implements the Wrapper for the native token,\nit was inspired by the WETH."),(0,r.kt)("h3",{id:"access"},"Access"),(0,r.kt)("h4",{id:"accesscontrol"},"AccessControl"),(0,r.kt)("p",null,"This module enables the implementation of role-based access control mechanisms for children\nmodules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API."),(0,r.kt)("h4",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner."),(0,r.kt)("p",null,"The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the\n",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," function."),(0,r.kt)("h4",{id:"ownable2step"},"Ownable2Step"),(0,r.kt)("p",null,"An extension of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module. "),(0,r.kt)("p",null,"Ownership can be transferred in a two-step process by using ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"accept_ownership()")," functions."),(0,r.kt)("h3",{id:"security"},"Security"),(0,r.kt)("h4",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"A module allowing to implement an emergency stop mechanism that can be triggered by any account."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/7457cffc.95d0c1aa.js b/docs/assets/js/7457cffc.95d0c1aa.js new file mode 100644 index 000000000..ed650d373 --- /dev/null +++ b/docs/assets/js/7457cffc.95d0c1aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3675],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(f,s(s({ref:n},c),{},{components:t})):a.createElement(f,s({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,s=new Array(o);s[0]=d;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,s[1]=l;for(var p=2;p<o;p++)s[p]=t[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,t)}d.displayName="MDXCreateElement"},54410:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:3},s="ERC-20",l={unversionedId:"tutorials/erc20",id:"version-0.7.0/tutorials/erc20",title:"ERC-20",description:"It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.",source:"@site/versioned_docs/version-0.7.0/tutorials/erc20.md",sourceDirName:"tutorials",slug:"/tutorials/erc20",permalink:"/docs/tutorials/erc20",draft:!1,tags:[],version:"0.7.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Ownable",permalink:"/docs/tutorials/ownable"},next:{title:"OwnedToken",permalink:"/docs/tutorials/owned-token"}},i={},p=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:2},{value:"Metadata",id:"metadata",level:3},{value:"Core",id:"core",level:3},{value:"Test",id:"test",level:3},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"erc-20"},"ERC-20"),(0,r.kt)("p",null,"It's time for something that every smart contract developer has done at least once. Let's try to implement ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"Erc20")," standard. Of course, we are going to use the Odra Framework. "),(0,r.kt)("p",null,"The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value. "),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"advanced storage - key-value pairs, "),(0,r.kt)("li",{parentName:"ul"},"Odra types like ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),", "),(0,r.kt)("li",{parentName:"ul"},"advanced events assertion.")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Our module has a pretty complex storage layout in comparison to the previous example."),(0,r.kt)("p",null,"We need to store the following data:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Immutable metadata - name, symbol and decimals."),(0,r.kt)("li",{parentName:"ol"},"Total supply."),(0,r.kt)("li",{parentName:"ol"},"Users' balances."),(0,r.kt)("li",{parentName:"ol"},"Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.")),(0,r.kt)("h2",{id:"module-definition"},"Module definition"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module(events = [Transfer, Approval])]\npub struct Erc20 {\n decimals: Variable<u8>,\n symbol: Variable<String>,\n name: Variable<String>,\n total_supply: Variable<Balance>,\n balances: Mapping<Address, Balance>,\n allowances: Mapping<Address, Mapping<Address, Balance>>\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - For the first time, we need to store key-value pairs. In order to do that, we use ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),". The name is taken after Solidity's native type ",(0,r.kt)("inlineCode",{parentName:"li"},"mapping"),". You may notice the ",(0,r.kt)("inlineCode",{parentName:"li"},"balances")," property maps ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),". If you deal with addresses or you operate on tokens, you should always choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," over ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Odra allows nested ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),"s, what we utilize to store allowances.")),(0,r.kt)("h3",{id:"metadata"},"Metadata"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Erc20 {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn symbol(&self) -> String {\n self.symbol.get_or_default()\n }\n\n pub fn decimals(&self) -> u8 {\n self.decimals.get_or_default()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.total_supply.get_or_default()\n }\n}\n\nimpl Erc20 {\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.balances.add(address, *amount);\n self.total_supply.add(amount);\n Transfer {\n from: None,\n to: Some(*address),\n amount: *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Transfer {\n pub from: Option<Address>,\n pub to: Option<Address>,\n pub amount: Balance\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L1")," - The first ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," block, marked as a module, contains functions defined in the ERC-20 standard."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3-L10")," - A constructor sets the token metadata and mints the initial supply."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12-L14")," - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," example, we used the ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returning an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<T>"),". If the type implements ",(0,r.kt)("inlineCode",{parentName:"li"},"Default")," trait, you can call ",(0,r.kt)("inlineCode",{parentName:"li"},"get_or_default()")," function and the contract does not fail even if the value is not initialized."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29")," - The second ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," is not an odra module, in other words these function will not be a part of contract's ABI."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30-L39")," - Mint function is public, so like in a regular rust code will be accessible from the outside. ",(0,r.kt)("inlineCode",{parentName:"li"},"mint()")," use notation ",(0,r.kt)("inlineCode",{parentName:"li"},"self.balances.add(&address, amount);"),", which it is syntactic sugar for:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"let current_balance = self.balances.get(&address).unwrap_or_default();\nlet new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();\nself.balances.set(&address, new_balance);\n")),(0,r.kt)("h3",{id:"core"},"Core"),(0,r.kt)("p",null,"For the sake of completeness, let's implement the remaining functionalities like ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_from"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"approve"),". They are not introducing any new concepts, so we leave them without additional remarks."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs",title:"erc20.rs"},"#[odra::module]\nimpl Erc20 {\n ...\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n let caller = contract_env::caller();\n self.raw_transfer(&caller, recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let spender = contract_env::caller();\n self.spend_allowance(owner, &spender, amount);\n self.raw_transfer(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n let owner = contract_env::caller();\n self.allowances.get_instance(&owner).set(spender, *amount);\n Approval {\n owner,\n spender: *spender,\n value: *amount\n }\n .emit();\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.balances.get_or_default(&address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.allowances.get_instance(owner).get_or_default(spender)\n }\n}\n\nimpl Erc20 {\n ...\n\n fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let owner_balance = self.balances.get_or_default(&owner);\n if *amount > owner_balance {\n contract_env::revert(Error::InsufficientBalance)\n }\n self.balances.set(owner, owner_balance - *amount);\n self.balances.add(recipient, *amount);\n Transfer {\n from: Some(*owner),\n to: Some(*recipient),\n amount: *amount\n }\n .emit();\n }\n\n fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {\n let allowance = self.allowances.get_instance(owner).get_or_default(spender);\n if allowance < *amount {\n contract_env::revert(Error::InsufficientAllowance)\n }\n let new_allowance = allowance - *amount;\n self.allowances\n .get_instance(owner)\n .set(spender, new_allowance);\n Approval {\n owner: *owner,\n spender: *spender,\n value: allowance - *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Approval {\n pub owner: Address,\n pub spender: Address,\n pub value: U256\n}\n\nexecution_error! {\n pub enum Error {\n InsufficientBalance => 1,\n InsufficientAllowance => 2,\n }\n}\n")),(0,r.kt)("p",null,"Now, compare the code we have written, with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"},"Open Zeppelin code"),". Out of 10, how Solidity-ish is our implementation?"),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},'#[cfg(test)]\npub mod tests {\n use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};\n use odra::{assert_events, test_env, types::U256};\n\n pub const NAME: &str = "Plascoin";\n pub const SYMBOL: &str = "PLS";\n pub const DECIMALS: u8 = 10;\n pub const INITIAL_SUPPLY: u32 = 10_000;\n\n pub fn setup() -> Erc20Ref {\n Erc20Deployer::init(\n String::from(NAME),\n String::from(SYMBOL),\n DECIMALS,\n INITIAL_SUPPLY.into()\n )\n }\n\n #[test]\n fn initialization() {\n let erc20 = setup();\n\n assert_eq!(&erc20.symbol(), SYMBOL);\n assert_eq!(&erc20.name(), NAME);\n assert_eq!(erc20.decimals(), DECIMALS);\n assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());\n assert_events!(\n erc20,\n Transfer {\n from: None,\n to: Some(test_env::get_account(0)),\n amount: INITIAL_SUPPLY.into()\n }\n );\n }\n\n #[test]\n fn transfer_works() {\n let mut erc20 = setup();\n let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n erc20.transfer(&recipient, &amount);\n\n assert_eq!(\n erc20.balance_of(&sender),\n U256::from(INITIAL_SUPPLY) - amount\n );\n assert_eq!(erc20.balance_of(&recipient), amount);\n assert_events!(\n erc20,\n Transfer {\n from: Some(sender),\n to: Some(recipient),\n amount\n }\n );\n }\n\n #[test]\n fn transfer_error() {\n let mut erc20 = setup();\n let recipient = test_env::get_account(1);\n let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);\n\n test_env::assert_exception(Error::InsufficientBalance, || {\n erc20.transfer(&recipient, &amount)\n });\n }\n\n #[test]\n fn transfer_from_and_approval_work() {\n let mut erc20 = setup();\n let (owner, recipient, spender) = (\n test_env::get_account(0),\n test_env::get_account(1),\n test_env::get_account(2)\n );\n let approved_amount = 3_000.into();\n let transfer_amount = 1_000.into();\n\n // Owner approves Spender.\n erc20.approve(&spender, &approved_amount);\n\n // Allowance was recorded.\n assert_eq!(erc20.allowance(&owner, &spender), approved_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount\n }\n );\n\n // Spender transfers tokens from Owner to Recipient.\n test_env::set_caller(spender);\n erc20.transfer_from(&owner, &recipient, &transfer_amount);\n\n // Tokens are transferred and allowance decremented.\n assert_eq!(\n erc20.balance_of(&owner),\n U256::from(INITIAL_SUPPLY) - transfer_amount\n );\n assert_eq!(erc20.balance_of(&recipient), transfer_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount - transfer_amount\n },\n Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount: transfer_amount\n }\n );\n \n assert_events!(erc20, Approval, Transfer);\n }\n\n #[test]\n fn transfer_from_error() {\n let mut erc20 = setup();\n let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n test_env::set_caller(spender);\n test_env::assert_exception(Error::InsufficientAllowance, || {\n erc20.transfer_from(&owner, &spender, &amount)\n });\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L111-123")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events!()")," macro accepts multiple events. You must pass them in the order they were emitted. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L125")," - Alternatively, if you don't want to check the entire event, you may assert only its type.")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"You can not mix both approaches, you pass full events or types only.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"Having two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", let's combine them, and create an ERC-20 on steroids."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/754937b2.76a8c9b9.js b/docs/assets/js/754937b2.76a8c9b9.js new file mode 100644 index 000000000..ee0530560 --- /dev/null +++ b/docs/assets/js/754937b2.76a8c9b9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3308],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=o,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||s;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,a=new Array(s);a[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var c=2;c<s;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},34370:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(87462),o=(n(67294),n(3905));const s={sidebar_position:11,description:"Divide your code into modules"},a="Modules",i={unversionedId:"basics/modules",id:"version-0.4.0/basics/modules",title:"Modules",description:"Divide your code into modules",source:"@site/versioned_docs/version-0.4.0/basics/11-modules.md",sourceDirName:"basics",slug:"/basics/modules",permalink:"/docs/0.4.0/basics/modules",draft:!1,tags:[],version:"0.4.0",sidebarPosition:11,frontMatter:{sidebar_position:11,description:"Divide your code into modules"},sidebar:"tutorialSidebar",previous:{title:"Cross calls",permalink:"/docs/0.4.0/basics/cross-calls"},next:{title:"Native token",permalink:"/docs/0.4.0/basics/native-token"}},l={},c=[{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you\nwrite is also a module, thanks to a macro ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),'. This means that we can easily rewrite our math\nexample from the previous article, to use a single contract, but still separate our "math" code:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/modules.rs"',title:'"examples/src/docs/modules.rs"'},"use crate::docs::cross_calls::MathEngine;\n\n#[odra::module]\npub struct ModulesContract {\n pub math_engine: MathEngine,\n}\n\n#[odra::module]\nimpl ModulesContract {\n pub fn add_using_module(&self) -> u32 {\n self.math_engine.add(3, 5)\n }\n}\n")),(0,o.kt)("p",null,"Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as\na module!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"As we don't need to hold addresses, the test is really simple:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/modules.rs"',title:'"examples/src/docs/modules.rs"'},"use super::ModulesContractDeployer;\n\n#[test]\nfn test_modules() {\n let modules_contract = ModulesContractDeployer::default();\n assert_eq!(modules_contract.add_using_module(), 8);\n}\n")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will see how to handle native token transfers."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/78452797.39b6ce0a.js b/docs/assets/js/78452797.39b6ce0a.js new file mode 100644 index 000000000..8feffc2cf --- /dev/null +++ b/docs/assets/js/78452797.39b6ce0a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6100],{89199:e=>{e.exports=JSON.parse('{"title":"Examples","description":"Examples","slug":"/category/examples","permalink":"/docs/0.3.1/category/examples","navigation":{"previous":{"title":"Casper","permalink":"/docs/0.3.1/backends/casper"},"next":{"title":"odra-examples","permalink":"/docs/0.3.1/examples/odra-examples"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/79253424.ad0dbf7d.js b/docs/assets/js/79253424.ad0dbf7d.js new file mode 100644 index 000000000..32610efd3 --- /dev/null +++ b/docs/assets/js/79253424.ad0dbf7d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6571],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),m=p(a),d=r,f=m["".concat(l,".").concat(d)]||m[d]||c[d]||s;return a?n.createElement(f,i(i({ref:t},u),{},{components:a})):n.createElement(f,i({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=m;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var p=2;p<s;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},56098:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const s={sidebar_position:5,description:"How to write data into blockchain's storage"},i="Storage interaction",o={unversionedId:"basics/storage-interaction",id:"basics/storage-interaction",title:"Storage interaction",description:"How to write data into blockchain's storage",source:"@site/docs/basics/05-storage-interaction.md",sourceDirName:"basics",slug:"/basics/storage-interaction",permalink:"/docs/next/basics/storage-interaction",draft:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"How to write data into blockchain's storage"},sidebar:"tutorialSidebar",previous:{title:"Flipper Internals",permalink:"/docs/next/basics/flipper-internals"},next:{title:"Host Communication",permalink:"/docs/next/basics/communicating-with-host"}},l={},p=[{value:"Var",id:"var",level:2},{value:"Mapping",id:"mapping",level:2},{value:"List",id:"list",level:2},{value:"Custom Types",id:"custom-types",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-interaction"},"Storage interaction"),(0,r.kt)("p",null,"The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go\nthrough all of them and explain their pros and cons."),(0,r.kt)("h2",{id:"var"},"Var"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Var")," is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your\nvariable in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Var"),' type. Let\'s look at a "real world" example of a contract that represents a dog:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"#[odra::module]\npub struct DogContract {\n barks: Var<bool>,\n weight: Var<u32>,\n name: Var<String>,\n walks: Var<Vec<u32>>,\n}\n")),(0,r.kt)("p",null,"You can see the ",(0,r.kt)("inlineCode",{parentName:"p"},"Var")," wrapping the data. Even complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," can be wrapped (with some caveats)!"),(0,r.kt)("p",null,"Let's make this contract usable, by providing a constructor and some getter functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"use odra::Var;\n\n#[odra::module]\nimpl DogContract {\n pub fn init(&mut self, barks: bool, weight: u32, name: String) {\n self.barks.set(barks);\n self.weight.set(weight);\n self.name.set(name);\n self.walks.set(Vec::<u32>::default());\n }\n\n pub fn barks(&self) -> bool {\n self.barks.get_or_default()\n }\n\n pub fn weight(&self) -> u32 {\n self.weight.get_or_default()\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.len() as u32\n }\n\n pub fn walks_total_length(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.iter().sum()\n }\n}\n")),(0,r.kt)("p",null,"As you can see, you can access the data, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"get_or_default")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"...\nself.barks.get_or_default()\n...\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Keep in mind that using ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," will result in an Option that you'll need to unwrap - the variable\ndoesn't have to be initialized!")),(0,r.kt)("p",null,"To modify the data, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"set()")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"self.barks.set(barks);\n")),(0,r.kt)("p",null,"A ",(0,r.kt)("inlineCode",{parentName:"p"},"Var")," is easy to use and efficient for simple data types. One of its downsides is that it\nserializes the data as a whole, so when you're using complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap"),",\neach time you ",(0,r.kt)("inlineCode",{parentName:"p"},"get")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," the whole data is read and written to the blockchain storage."),(0,r.kt)("p",null,"In the example above, if we want to see how many walks our dog had, we would use the function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"pub fn walks_amount(&self) -> usize {\n let walks = self.walks.get_or_default();\n walks.len()\n}\n")),(0,r.kt)("p",null,"But to do so, we need to extract the whole serialized vector from the storage, which would inefficient,\nespecially for larger sets of data."),(0,r.kt)("p",null,"To tackle this issue following two types were created."),(0,r.kt)("h2",{id:"mapping"},"Mapping"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," is used to store and access data as key-value pairs. To define a ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", you need to\npass two values - the key type and the value type. Let's look at the variation of the Dog contract, that\nuses ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," to store information about our dog's friends and how many times they visited:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"use odra::{Mapping, Var};\n\n#[odra::module]\npub struct DogContract2 {\n name: Var<String>,\n friends: Mapping<String, u32>,\n}\n")),(0,r.kt)("p",null,"In the example above, our key is a String (it is a name of the friend) and we are storing u32 values\n(amount of visits). To read and write values from and into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," we use a similar approach\nto the one shown in the Vars section with one difference - we need to pass a key:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"pub fn visit(&mut self, friend_name: String) {\n let visits = self.visits(friend_name.clone());\n self.friends.set(&friend_name, visits + 1);\n}\n\npub fn visits(&self, friend_name: String) -> u32 {\n self.friends.get_or_default(&friend_name)\n}\n")),(0,r.kt)("p",null,"The biggest improvement over a ",(0,r.kt)("inlineCode",{parentName:"p"},"Var")," is that we can model functionality of a ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap")," using ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nThe amount of data written to and read from the storage is minimal. However, we cannot iterate over ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nWe could implement such behavior by using a numeric type key and saving the length of the set in a\nseparate variable. Thankfully Odra comes with a prepared solution - the ",(0,r.kt)("inlineCode",{parentName:"p"},"List")," type."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with\na Var working together:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="core/src/list.rs"',title:'"core/src/list.rs"'},"use odra::{List, Var};\n\npub struct List<T> {\n values: Mapping<u32, T>,\n index: Var<u32>\n}\n"))),(0,r.kt)("h2",{id:"list"},"List"),(0,r.kt)("p",null,"Going back to our DogContract example - let's revisit the walk case. This time, instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),",\nwe'll use the list:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"#[odra::module]\npub struct DogContract3 {\n name: Var<String>,\n walks: List<u32>,\n}\n")),(0,r.kt)("p",null,"As you can see, the notation is very similar to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),". To understand the usage, take a look\nat the reimplementation of the functions with an additional function that takes our dog for a walk\n(it writes the data to the storage):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"#[odra::module]\nimpl DogContract3 {\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n self.walks.len()\n }\n\n pub fn walks_total_length(&self) -> u32 {\n self.walks.iter().sum()\n }\n\n pub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n }\n}\n")),(0,r.kt)("p",null,"Now, we can know how many walks our dog had without loading the whole vector from the storage.\nWe need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all\nthe cases for you."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All of the above examples, alongside the tests, are available in the Odra repository in the ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/features/")," folder.")),(0,r.kt)("h2",{id:"custom-types"},"Custom Types"),(0,r.kt)("p",null,"By default you can store only built-in types like numbers, Options, Results, Strings, Vectors."),(0,r.kt)("p",null,"Implementing custom types is straightforward, your type must derive from ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType"),": "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Address, OdraType};\n\n#[derive(OdraType)]\npub struct Dog {\n pub name: String,\n pub age: u8,\n pub owner: Option<Address>\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Each field of your struct must be an OdraType.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next article, we'll see how to query the host for information about the world and our contract."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/799b1c68.48866af0.js b/docs/assets/js/799b1c68.48866af0.js new file mode 100644 index 000000000..09e1a3ea7 --- /dev/null +++ b/docs/assets/js/799b1c68.48866af0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5657],{47790:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"0.2.0","label":"0.2.0","banner":"unmaintained","badge":true,"noIndex":false,"className":"docs-version-0.2.0","isLast":false,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Odra framework","href":"/docs/0.2.0/","docId":"intro"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs/0.2.0/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Flipper example","href":"/docs/0.2.0/getting-started/flipper","docId":"getting-started/flipper"}],"href":"/docs/0.2.0/category/getting-started"},{"type":"category","label":"Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Cargo Odra","href":"/docs/0.2.0/basics/cargo-odra","docId":"basics/cargo-odra"},{"type":"link","label":"Directory structure","href":"/docs/0.2.0/basics/directory-structure","docId":"basics/directory-structure"},{"type":"link","label":"Odra.toml","href":"/docs/0.2.0/basics/odra-toml","docId":"basics/odra-toml"},{"type":"link","label":"Flipper Internals","href":"/docs/0.2.0/basics/flipper-internals","docId":"basics/flipper-internals"},{"type":"link","label":"Storage interaction","href":"/docs/0.2.0/basics/storage-interaction","docId":"basics/storage-interaction"},{"type":"link","label":"Host Communication","href":"/docs/0.2.0/basics/communicating-with-host","docId":"basics/communicating-with-host"},{"type":"link","label":"Testing","href":"/docs/0.2.0/basics/testing","docId":"basics/testing"},{"type":"link","label":"Errors","href":"/docs/0.2.0/basics/errors","docId":"basics/errors"},{"type":"link","label":"Events","href":"/docs/0.2.0/basics/events","docId":"basics/events"},{"type":"link","label":"Cross calls","href":"/docs/0.2.0/basics/cross-calls","docId":"basics/cross-calls"},{"type":"link","label":"Modules","href":"/docs/0.2.0/basics/modules","docId":"basics/modules"},{"type":"link","label":"Native token","href":"/docs/0.2.0/basics/native-token","docId":"basics/native-token"}],"href":"/docs/0.2.0/category/basics"},{"type":"category","label":"Backends","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is a backend?","href":"/docs/0.2.0/backends/what-is-a-backend","docId":"backends/what-is-a-backend"},{"type":"link","label":"MockVM","href":"/docs/0.2.0/backends/mock-vm","docId":"backends/mock-vm"},{"type":"link","label":"Casper","href":"/docs/0.2.0/backends/casper","docId":"backends/casper"}],"href":"/docs/0.2.0/category/backends"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"odra-examples","href":"/docs/0.2.0/examples/odra-examples","docId":"examples/odra-examples"},{"type":"link","label":"Using odra-modules","href":"/docs/0.2.0/examples/using-odra-modules","docId":"examples/using-odra-modules"}],"href":"/docs/0.2.0/category/examples"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ownable","href":"/docs/0.2.0/tutorials/ownable","docId":"tutorials/ownable"},{"type":"link","label":"ERC-20","href":"/docs/0.2.0/tutorials/erc20","docId":"tutorials/erc20"},{"type":"link","label":"OwnedToken","href":"/docs/0.2.0/tutorials/owned-token","docId":"tutorials/owned-token"}],"href":"/docs/0.2.0/category/tutorials"}]},"docs":{"backends/casper":{"id":"backends/casper","title":"Casper","description":"The Casper backend allows you to compile your contracts into WASM files which can be deployed","sidebar":"defaultSidebar"},"backends/mock-vm":{"id":"backends/mock-vm","title":"MockVM","description":"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing","sidebar":"defaultSidebar"},"backends/what-is-a-backend":{"id":"backends/what-is-a-backend","title":"What is a backend?","description":"You can think of a backend as a target platform for your smart contract.","sidebar":"defaultSidebar"},"basics/cargo-odra":{"id":"basics/cargo-odra","title":"Cargo Odra","description":"A tool for managing Odra projects","sidebar":"defaultSidebar"},"basics/communicating-with-host":{"id":"basics/communicating-with-host","title":"Host Communication","description":"How to get information from the Host","sidebar":"defaultSidebar"},"basics/cross-calls":{"id":"basics/cross-calls","title":"Cross calls","description":"Contracts calling contracts","sidebar":"defaultSidebar"},"basics/directory-structure":{"id":"basics/directory-structure","title":"Directory structure","description":"Files and folders in the Odra project","sidebar":"defaultSidebar"},"basics/errors":{"id":"basics/errors","title":"Errors","description":"Causing and handling errors","sidebar":"defaultSidebar"},"basics/events":{"id":"basics/events","title":"Events","description":"Creating and emitting Events","sidebar":"defaultSidebar"},"basics/flipper-internals":{"id":"basics/flipper-internals","title":"Flipper Internals","description":"Detailed explanation of the Flipper contract","sidebar":"defaultSidebar"},"basics/modules":{"id":"basics/modules","title":"Modules","description":"Divide your code into modules","sidebar":"defaultSidebar"},"basics/native-token":{"id":"basics/native-token","title":"Native token","description":"How to deposit, withdraw and transfer","sidebar":"defaultSidebar"},"basics/odra-toml":{"id":"basics/odra-toml","title":"Odra.toml","description":"Odra\'s configuration file","sidebar":"defaultSidebar"},"basics/storage-interaction":{"id":"basics/storage-interaction","title":"Storage interaction","description":"How to write data into blockchain\'s storage","sidebar":"defaultSidebar"},"basics/testing":{"id":"basics/testing","title":"Testing","description":"How to write tests in Odra","sidebar":"defaultSidebar"},"examples/odra-examples":{"id":"examples/odra-examples","title":"odra-examples","description":"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.","sidebar":"defaultSidebar"},"examples/using-odra-modules":{"id":"examples/using-odra-modules","title":"Using odra-modules","description":"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.","sidebar":"defaultSidebar"},"getting-started/flipper":{"id":"getting-started/flipper","title":"Flipper example","description":"To quickly start working with Odra, take a look at the following code sample. If you followed the","sidebar":"defaultSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Hello fellow Odra user! This page will guide you through the installation process.","sidebar":"defaultSidebar"},"intro":{"id":"intro","title":"Odra framework","description":"Odra Docs","sidebar":"defaultSidebar"},"tutorials/erc20":{"id":"tutorials/erc20","title":"ERC-20","description":"It\'s time for something that every smart contract developer has done at least once. Let\'s try to implement Erc20 standard. Of course, we are going to use the Odra Framework.","sidebar":"defaultSidebar"},"tutorials/ownable":{"id":"tutorials/ownable","title":"Ownable","description":"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract\'s critical features.","sidebar":"defaultSidebar"},"tutorials/owned-token":{"id":"tutorials/owned-token","title":"OwnedToken","description":"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/79b67993.39b2c6a5.js b/docs/assets/js/79b67993.39b2c6a5.js new file mode 100644 index 000000000..fd1b6c748 --- /dev/null +++ b/docs/assets/js/79b67993.39b2c6a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7798],{19217:e=>{e.exports=JSON.parse('{"title":"Examples","description":"Examples","slug":"/category/examples","permalink":"/docs/next/category/examples","navigation":{"previous":{"title":"Livenet","permalink":"/docs/next/backends/livenet"},"next":{"title":"odra-examples","permalink":"/docs/next/examples/odra-examples"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/79d3180c.d41db72a.js b/docs/assets/js/79d3180c.d41db72a.js new file mode 100644 index 000000000..adfbacc17 --- /dev/null +++ b/docs/assets/js/79d3180c.d41db72a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9375],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},79522:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},l="Flipper example",i={unversionedId:"getting-started/flipper",id:"version-0.7.0/getting-started/flipper",title:"Flipper example",description:"To quickly start working with Odra, take a look at the following code sample. If you followed the",source:"@site/versioned_docs/version-0.7.0/getting-started/flipper.md",sourceDirName:"getting-started",slug:"/getting-started/flipper",permalink:"/docs/getting-started/flipper",draft:!1,tags:[],version:"0.7.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/docs/getting-started/installation"},next:{title:"Basics",permalink:"/docs/category/basics"}},s={},p=[{value:"Let's flip",id:"lets-flip",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-example"},"Flipper example"),(0,a.kt)("p",null,"To quickly start working with Odra, take a look at the following code sample. If you followed the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/getting-started/installation"},"Installation")," tutorial, you should have this file already at ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),"."),(0,a.kt)("p",null,"For further explanation of how this code works, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/basics/flipper-internals"},"Flipper Internals"),"."),(0,a.kt)("h2",{id:"lets-flip"},"Let's flip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs" showLineNumbers',title:'"flipper.rs"',showLineNumbers:!0},"use odra::Variable;\n\n/// A module definition. Each module struct consists Variables and Mappings\n/// or/and another modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value, \n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n\n/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n /// Retrieves value from the storage. \n /// If the value has never been set, the default value is returned.\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n\n #[test]\n fn test_two_flippers() {\n let mut contract1 = FlipperDeployer::initial_settings();\n let contract2 = FlipperDeployer::initial_settings();\n assert!(!contract1.get());\n assert!(!contract2.get());\n contract1.flip();\n assert!(contract1.get());\n assert!(!contract2.get());\n }\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next category of articles, we will go through basic concepts of Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/7acce579.c1964be6.js b/docs/assets/js/7acce579.c1964be6.js new file mode 100644 index 000000000..89645257b --- /dev/null +++ b/docs/assets/js/7acce579.c1964be6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3158],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},p),{},{components:a})):n.createElement(g,i({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=a[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},51003:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1,description:"A tool for managing Odra projects"},i="Cargo Odra",l={unversionedId:"basics/cargo-odra",id:"version-0.4.0/basics/cargo-odra",title:"Cargo Odra",description:"A tool for managing Odra projects",source:"@site/versioned_docs/version-0.4.0/basics/01-cargo-odra.md",sourceDirName:"basics",slug:"/basics/cargo-odra",permalink:"/docs/0.4.0/basics/cargo-odra",draft:!1,tags:[],version:"0.4.0",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"A tool for managing Odra projects"},sidebar:"tutorialSidebar",previous:{title:"Basics",permalink:"/docs/0.4.0/category/basics"},next:{title:"Directory structure",permalink:"/docs/0.4.0/basics/directory-structure"}},s={},c=[{value:"Managing projects",id:"managing-projects",level:2},{value:"Generating code",id:"generating-code",level:2},{value:"Testing",id:"testing",level:2},{value:"Building code",id:"building-code",level:2},{value:"Updating dependencies",id:"updating-dependencies",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cargo-odra"},"Cargo Odra"),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/getting-started/installation"},"Installation")," tutorial properly,\nyou should already be set up with the Cargo Odra tool. It is an executable that will help you with\nmanaging your smart contracts project, testing and running them on multiple backends (blockchains)."),(0,r.kt)("p",null,"Let's take a look at all the possibilities that Cargo Odra gives you."),(0,r.kt)("h2",{id:"managing-projects"},"Managing projects"),(0,r.kt)("p",null,"Two commands will help you create a new project. The first one is ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra new"),".\nYou need to pass one parameter, namely ",(0,r.kt)("inlineCode",{parentName:"p"},"--name {PROJECT_NAME}"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project\n")),(0,r.kt)("p",null,"This will create a new project in the ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project")," folder and name it ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project"),". You can see it\nfor yourself, for example by taking a look into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file created in your project's folder:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n')),(0,r.kt)("p",null,"The project is created using the template located in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra's main repository"),".\nBy default it uses ",(0,r.kt)("inlineCode",{parentName:"p"},"full")," template, if you want, you can use minimalistic ",(0,r.kt)("inlineCode",{parentName:"p"},"blank")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -t blank --name my-project\n")),(0,r.kt)("p",null,"By default, the latest release of Odra will be used for the template and as a dependency.\nYou can pass a source of Odra you want to use, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"-s")," parameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -n my-project -s ../odra # will use local folder of odra\ncargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release\ncargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io\n")),(0,r.kt)("p",null,"The second way of creating a project is by using ",(0,r.kt)("inlineCode",{parentName:"p"},"init")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra init --name my-project\n")),(0,r.kt)("p",null,"It works in the same way as ",(0,r.kt)("inlineCode",{parentName:"p"},"new"),", but instead of creating a new folder, it will create a project\nin the current, empty directory."),(0,r.kt)("h2",{id:"generating-code"},"Generating code"),(0,r.kt)("p",null,"If you want to quickly create a new contract code, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"generate")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra generate -c counter \n")),(0,r.kt)("p",null,"This will create a new file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/counter.rs")," with sample code, add appropriate ",(0,r.kt)("inlineCode",{parentName:"p"},"use")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mod")," sections\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"src/lib.rs")," and update the ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file accordingly. To learn more about ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file,\nvisit ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/odra-toml"},"Odra.toml"),"."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Most used command during the development of your project should be this one:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"It will run your tests against Odra's MockVM. It is substantially faster than virtual machines\nprovided by blockchains developers and implements all the features Odra uses."),(0,r.kt)("p",null,'When you want to run tests against a "real" VM, just provide the name of the backend using ',(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\noption:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files,\nspin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat.\nKeep in mind that this is a lot slower than MockVM and you cannot use the debugger.\nThis is why MockVM was created and should be your first choice when developing contracts.\nOf course, testing all of your code against a blockchain VM is a must in the end."),(0,r.kt)("p",null,"If you want to run only some of the tests, you can pass arguments to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo test")," command\n(which is run in the background obviously):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- this-will-be-passed-to-cargo-test\n")),(0,r.kt)("p",null,"If you want to run tests which names contain the word ",(0,r.kt)("inlineCode",{parentName:"p"},"two"),", you can execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- two\n")),(0,r.kt)("p",null,"Of course, you can do the same when using the backend:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper -- two\n")),(0,r.kt)("h2",{id:"building-code"},"Building code"),(0,r.kt)("p",null,"You can also build the code itself and generate the output contracts without running the tests.\nTo do so, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("p",null,"Where ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," is the name of the backend we are using in this example. If the build process\nfinishes successfully, wasm files will be located in ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," folder."),(0,r.kt)("h2",{id:"updating-dependencies"},"Updating dependencies"),(0,r.kt)("p",null,"You will learn later, that the project using Odra contains more than one Rust project - your own and\none or more builders. To run ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo update")," on all of them at once instead of traversing all the folders\nyou can use this command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra update\n")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next section, we will take a look at all the files and directories that ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," created\nfor us and explain their purpose."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/7d8962a6.4e63c0db.js b/docs/assets/js/7d8962a6.4e63c0db.js new file mode 100644 index 000000000..3b5ed9f0c --- /dev/null +++ b/docs/assets/js/7d8962a6.4e63c0db.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6671],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=p(a),m=r,g=u["".concat(l,".").concat(m)]||u[m]||d[m]||s;return a?n.createElement(g,i(i({ref:t},c),{},{components:a})):n.createElement(g,i({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=u;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var p=2;p<s;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},20210:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const s={slug:"Nysa",title:"Nysa",authors:["kpob"],image:"./twitter-card.png"},i=void 0,o={permalink:"/blog/Nysa",source:"@site/blog/2023-08-18-nysa/index.md",title:"Nysa",description:'The Oder River, known as "Odra" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wroc\u0142aw, Szczecin, and Gda\u0144sk, to international waterways. The Oder also plays a significant role in the region\'s ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.',date:"2023-08-18T00:00:00.000Z",formattedDate:"August 18, 2023",tags:[],readingTime:8.47,hasTruncateMarker:!0,authors:[{name:"Krzysztof Pobiar\u017cyn",title:"Lead Developer",url:"https://github.com/kpob",key:"kpob"}],frontMatter:{slug:"Nysa",title:"Nysa",authors:["kpob"],image:"./twitter-card.png"},nextItem:{title:"It's all about the community!",permalink:"/blog/its-all-about-the-community"}},l={image:a(46180).Z,authorsImageUrls:[void 0]},p=[{value:"Odra",id:"odra",level:2},{value:"Nysa",id:"nysa",level:2},{value:"Nysa + Odra",id:"nysa--odra",level:3},{value:"Examples",id:"examples",level:2},{value:"Status message",id:"status-message",level:3},{value:"CappedErc20",id:"cappederc20",level:3},{value:"Conclusion",id:"conclusion",level:2}],c={toc:p};function d(e){let{components:t,...s}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,'The Oder River, known as "Odra" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wroc\u0142aw, Szczecin, and Gda\u0144sk, to international waterways. The Oder also plays a significant role in the region\'s ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.'),(0,r.kt)("p",null,"The Nysa K\u0142odzka is a significant river in Poland, flowing through the country's southwestern part. It travels approximately 188 kilometers, originating in the Czech Republic and merging with the Oder River in Poland. The river passes through picturesque landscapes, including the K\u0142odzko Valley, and plays a crucial role in local ecosystems. Its waters are harnessed for various purposes, such as hydroelectric power generation and irrigation."),(0,r.kt)("p",null,"Oh, wait, shouldn't it be a tech blog?"),(0,r.kt)("p",null,"This is a valid question, we will get back to it in a moment."),(0,r.kt)("h2",{id:"odra"},"Odra"),(0,r.kt)("p",null,"A short reminder:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design ...\nit takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel. "),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("a",{parentName:"p",href:"https://odra.dev/docs/"},"Odra"))),(0,r.kt)("p",null,"Understanding that people generally dislike learning new things, we've kept this in mind throughout development. Since day one, we have focused on creating Odra with the largest group of smart contract developers in mind - those familiar with Solidity. The Odra Framework is designed to flatten the learning curve for this group."),(0,r.kt)("p",null,"A Solidity developer will encounter familiar concepts such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Constructors"),(0,r.kt)("li",{parentName:"ul"},"Payable functions"),(0,r.kt)("li",{parentName:"ul"},"Mappings"),(0,r.kt)("li",{parentName:"ul"},"Reverts"),(0,r.kt)("li",{parentName:"ul"},"Current caller"),(0,r.kt)("li",{parentName:"ul"},"Current block time"),(0,r.kt)("li",{parentName:"ul"},"A standard module library (similar to OpenZeppelin)"),(0,r.kt)("li",{parentName:"ul"},"And more")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"It's important to note that the Odra Framework is intentionally blockchain-agnostic. Its design does not target any particular blockchain. "),(0,r.kt)("p",{parentName:"admonition"},"Ultimately, Odra is built to support multiple blockchains, allowing the writing of smart contracts in Rust.")),(0,r.kt)("p",null,"Having so many similarities, why not take the next step and transpile Solidity code into Odra code?"),(0,r.kt)("p",null,"This is where Nysa comes into play."),(0,r.kt)("h2",{id:"nysa"},"Nysa"),(0,r.kt)("p",null,"Solidity and Rust share some syntax similarities despite being designed for different purposes. Both languages emphasize strong typing, pattern matching, and immutability by default."),(0,r.kt)("p",null,"Nysa performs Solidity-to-Rust transpilation through four simple steps."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"nysa-gen",src:a(12112).Z,width:"661",height:"591"})),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Solidity Parser"))),(0,r.kt)("p",null,"Firstly, we need a well-structured Rust representation of Solidity code. Nysa utilizes ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/lalrpop/lalrpop"},"LALRPOP")," - a Rust parser generator framework. In the further steps, this enables us to conduct static analysis of the Solidity code, ranging from contract context down to individual expressions."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=solidity-parser/src/pt.rs",title:"solidity-parser/src/pt.rs"},"// The representation of a Solidity contract\n#[derive(Debug, PartialEq)]\npub struct ContractDefinition {\n pub doc: Vec<DocComment>,\n pub loc: Loc,\n pub ty: ContractTy,\n pub name: Identifier,\n pub base: Vec<Base>,\n pub parts: Vec<ContractPart>,\n}\n")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"C3 Linearization"))),(0,r.kt)("p",null,"One of the most notable distinctions between Rust and Solidity is their approach to inheritance. Rust says ",(0,r.kt)("inlineCode",{parentName:"p"},"No, thx"),", whereas Solidity opts for ",(0,r.kt)("inlineCode",{parentName:"p"},"The more, the better"),". Speaking more technically, Solidity supports multiple inheritance with ",(0,r.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/C3_linearization"},"C3 linearization"),"."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The primary purpose of the C3 Linearization Algorithm is to establish a consistent and unambiguous order of method resolution in cases where there might be ambiguity or conflicts due to multiple inheritance. It ensures that the inherited methods are called in a predictable and well-defined sequence based on the class hierarchy and the order in which classes are defined.")),(0,r.kt)("p",null,"For simulating C3 linearization, Nysa utilizes an ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/c3-lang"},"implementation")," of the C3 linearization in Rust written by ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/zie1ony"},"Maciej Zieli\u0144ski"),", so everything stays in the Odra family."),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Nysa Parser"))),(0,r.kt)("p",null,"After that, we step to the essential part, converting Solidity code into Rust code."),(0,r.kt)("p",null,"For example, a Solidity event."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity"},"event Transfer(address indexed from, address indexed to, uint256 value);\n")),(0,r.kt)("p",null,"can easily be represented as an plain Rust struct - the same name, the same fields, similar types. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[derive(PartialEq, Eq, Debug)]\npub struct Transfer {\n from: Option<Address>,\n to: Option<Address>,\n value: U256,\n}\n")),(0,r.kt)("p",null,"The same we do with contracts, interfaces, libraries, errors, variables, functions, statements, etc."),(0,r.kt)("p",null,"Here is a snippet of the expression parser:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=nysa/src/parser/odra/expr/mod.rs",title:"nysa/src/parser/odra/expr/mod.rs"},"pub fn parse<T>(expression: &Expression, ctx: &mut T) -> Result<syn::Expr, ParserError>\nwhere\n T: StorageInfo + TypeInfo + EventsRegister + ExternalCallsRegister + ContractInfo + FnContext,\n{\n match expression {\n Expression::Require { condition, error } => error::revert(Some(condition), error, ctx),\n Expression::ZeroAddress => Ok(parse_quote!(None)),\n Expression::Add { left, right } => math::add(left, right, ctx),\n Expression::Subtract { left, right } => math::sub(left, right, ctx),\n Expression::Increment { expr } => {\n let expr = parse(expr, ctx)?;\n Ok(parse_quote!(#expr += 1))\n }\n Expression::ExternalCall {\n variable,\n fn_name,\n args,\n } => parse_ext_call(variable, fn_name, args, ctx),\n Expression::Type { ty } => {\n let ty = ty::parse_plain_type_from_ty(ty, ctx)?;\n Ok(parse_quote!(#ty))\n }\n Expression::BoolLiteral(b) => Ok(parse_quote!(#b)),\n ...\n }\n}\n\n")),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Printing the code"))),(0,r.kt)("p",null,"The last step is just consuming the resulting C3 AST. Nysa produces a token stream from the AST. Most likely you would write it to a file."),(0,r.kt)("p",null,"And there you are: a Rust smart contract is ready to be compiled!"),(0,r.kt)("h3",{id:"nysa--odra"},"Nysa + Odra"),(0,r.kt)("p",null,"By design, Nysa is a universal tool, so the third step from the pipeline is replaceable. In other words, a Solidity input can be converted to Rust code supporting a framework/SDK of your choice unless you provide a parser implementation."),(0,r.kt)("p",null,"However, the default implementation is ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraParser"),", which takes a contract written in Solidity and splits out an Odra module."),(0,r.kt)("p",null,"I hope you see an analogy to the first two paragraphs at this point. Nysa the river and Nysa the transpiler ",(0,r.kt)("inlineCode",{parentName:"p"},"flow into")," Odra."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"nysa-odra",src:a(42719).Z,width:"661",height:"591"})),(0,r.kt)("h2",{id:"examples"},"Examples"),(0,r.kt)("h3",{id:"status-message"},"Status message"),(0,r.kt)("p",null,"Let's get our hands dirty and create a very simple project. We will write a contract that stores a single mapping of records - an address to a string message."),(0,r.kt)("p",null,"To set up the project, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -n status -t blank\ncd status\n")),(0,r.kt)("p",null,"The first thing is to add Nysa to the project and create a rudimentary ",(0,r.kt)("inlineCode",{parentName:"p"},"build.rs")," where we define the input - a solidity contract and the output - an Odra module generated by Nysa."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[build-dependencies]\nnysa = { version = "0.1.0", features = ["builder"] }\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=build.rs",title:"build.rs"},'const DEST_FILE_PATH: &str = "src/status_message.rs";\nconst SOURCE_FILE_PATH: &str = "src/status_message.sol";\n\nfn main() {\n nysa::builder::generate_file::<&str, nysa::OdraParser>(SOURCE_FILE_PATH, DEST_FILE_PATH);\n}\n')),(0,r.kt)("p",null,"Next, implement the contract. Naturally, a Solidity one."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity",metastring:"title=src/status_message.sol",title:"src/status_message.sol"},"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\ncontract StatusMessage {\n mapping(address => string) records;\n\n function setStatus(string memory status) public payable {\n address accountId = msg.sender;\n records[accountId] = status;\n }\n\n function getStatus(address accountId) public view returns (string memory) {\n return records[accountId];\n }\n}\n")),(0,r.kt)("p",null,"The contract has a single mapping ",(0,r.kt)("inlineCode",{parentName:"p"},"records")," that stores a message and its owner. Additionally, exposes two entry points: ",(0,r.kt)("inlineCode",{parentName:"p"},"setStatus")," (sets current's sender message) and ",(0,r.kt)("inlineCode",{parentName:"p"},"getStatus"),"."),(0,r.kt)("p",null,"Following, let's define a ",(0,r.kt)("inlineCode",{parentName:"p"},"lib.rs")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=src/lib.rs",title:"src/lib.rs"},"mod status_message;\npub use status_message::{StatusMessage, StatusMessageDeployer, StatusMessageRef};\n\n#[cfg(test)]\nmod test;\n")),(0,r.kt)("p",null,"The file is straightforward: registers a ",(0,r.kt)("inlineCode",{parentName:"p"},"status_message")," rust module, reexports some Odra abstractions, and adds a test module."),(0,r.kt)("p",null,"Lastly, we can test our contract.\nLike the original solidity contract, our Odra contract exposes two entry points: ",(0,r.kt)("inlineCode",{parentName:"p"},"set_message()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"get_message()"),".\nThe test code looks like ",(0,r.kt)("a",{parentName:"p",href:"https://odra.dev/docs/basics/testing"},"any other")," Odra test: we use ",(0,r.kt)("inlineCode",{parentName:"p"},"StatusMessageDeployer")," to instantiate a contract, which gets us a reference to interact with the contract."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=src/test.rs",title:"src/test.rs"},'use odra::{test_env, types::Address};\nuse super::*;\n\nconst ACCOUNT: fn() -> Address = || odra::test_env::get_account(1);\n\n#[test]\nfn set_get_message() {\n let mut contract = StatusMessageDeployer::default();\n\n test_env::set_caller(ACCOUNT());\n contract.set_status("hello".to_string());\n assert_eq!("hello".to_string(), contract.get_status(Some(ACCOUNT())));\n}\n\n#[test]\nfn get_nonexistent_message() {\n let contract = StatusMessageDeployer::default();\n\n assert_eq!(\n String::new(),\n contract.get_status(Some(ACCOUNT()))\n );\n}\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test # test against MockVM\n# or\ncargo odra test -b casper # build a wasm file and test against CasperVM\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"status-message\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 lib.rs\n\u2502 \u251c\u2500\u2500 status_message.sol\n\u2502 \u2514\u2500\u2500 test.rs\n\u251c\u2500\u2500 build.rs\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 Odra.toml\n")),(0,r.kt)("p",null,"Full example available ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/nysa/tree/feature/odra/examples/status-message/nysa"},"here"),"."),(0,r.kt)("h3",{id:"cappederc20"},"CappedErc20"),(0,r.kt)("p",null,"A more complex, real-world example is a ",(0,r.kt)("inlineCode",{parentName:"p"},"CappedErc20")," contract. It is a ERC20 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol"},"Ownable"),", ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Burnable.sol"},"Burnable")," and ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Capped.sol"},"Capped")," token contract."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-solidity",metastring:"title=plascoin.sol",title:"plascoin.sol"},"// ...\n// rest of the code\n\ncontract Plascoin is ERC20Capped, ERC20Burnable, Ownable {\n constructor(string memory name_, string memory symbol_, uint256 cap_, address initialOwner) ERC20(name_, symbol_) ERC20Capped(cap_) Ownable(initialOwner) {\n }\n\n function mint(address account, uint256 amount) public onlyOwner {\n _mint(account, amount);\n }\n\n function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Capped) {\n super._update(from, to, value);\n }\n}\n")),(0,r.kt)("p",null,"You can check out the full source code ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/nysa/blob/feature/odra/examples/capped-erc20/src/plascoin.sol"},"here"),"."),(0,r.kt)("p",null,"Deployment of such a contract onto the Casper testnet is straightforward. We are just two steps from it. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"# to make sure the contract works as expected \n# we execute cargo odra test command to build and run tests\ncargo odra test -b casper\n\n# deploy onto the testnet\ncasper-client put-deploy\n --node-address {{NODE_ADDRESS}}\n --chain-name casper-test\n --secret-key {{SECRET_KEY}} \\\n --session-path {{CONTRACT_WASM}} \\\n --payment-amount 130000000000 \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'{{CONTRACT_PACKAGE_HASH_NAMED_KEY}}'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'true'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"odra_cfg_constructor:string:'init'\" \\\n --session-arg \"name:string='{{name}}'\" \\\n --session-arg \"symbol:string='{{symbol}}'\" \\\n --session-arg \"cap:u256='{{cap}}'\" \\\n --session-arg \"initial_owner:opt_key='{{owner}}'\"\n")),(0,r.kt)("p",null,"Literally in 5 minutes I was able to:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Build a wasm file from Solidity source code"),(0,r.kt)("li",{parentName:"ol"},"Successfully ",(0,r.kt)("a",{parentName:"li",href:"https://testnet.cspr.live/deploy/b1dd9628f8a36b7ed24949f88ea97ebb21d0c213e9cc87fc5ee4076074de0c88"},"deploy")," the contract onto Testnet,"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://testnet.cspr.live/deploy/1def539f806fd39ec1b75687c46946c7510fe3bb15860fcc3420c7bea7e7f10f"},"Mint")," some tokens,"),(0,r.kt)("li",{parentName:"ol"},"And ",(0,r.kt)("a",{parentName:"li",href:"https://testnet.cspr.live/deploy/0e2e0fa490f00783ddaecd06aaf2b43d8c5f6d3224a28a31ad66bfef48ce26e6"},"transfer")," them.")),(0,r.kt)("p",null,"Finally, we compare the costs of Solidity-to-Odra contract and a native CEP-18 implementation. Despite the contracts being different in terms of the internal logic and exposed entry points, such comparison gives us some insight into Nysa's efficiency."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"action"),(0,r.kt)("th",{parentName:"tr",align:null},"CEP-18"),(0,r.kt)("th",{parentName:"tr",align:null},"Nysa"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"deploy"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://testnet.cspr.live/deploy/2b5d17ea5d9c093c4252705285f7aeabe58cff37fb48b5837567908e2d91329a"},"143.87")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://testnet.cspr.live/deploy/b1dd9628f8a36b7ed24949f88ea97ebb21d0c213e9cc87fc5ee4076074de0c88"},"93.37"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"transfer"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://testnet.cspr.live/deploy/3ab866e7cf7b59e081f12aea4103f9552b261b601d91b072ea10ab5be6cf0e45"},"1.29")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://testnet.cspr.live/deploy/0e2e0fa490f00783ddaecd06aaf2b43d8c5f6d3224a28a31ad66bfef48ce26e6"},"1.36"))))),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Nysa is at early stage of development, but already has shown a huge potential. In a few simple steps, you can take advantage of an existing smart contract and convert it into an Odra module. The module can be a standalone contract, or a building block of a bigger contract."))}d.isMDXComponent=!0},12112:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/nysa_generic.drawio-9478454b52585f4bd5c3a825f50917f2.svg"},42719:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/nysa_odra.drawio-e8d8d662f0a2e5e364005985245721fd.svg"},46180:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/twitter-card-941b7cfa84d4da7dd4848d3556845b53.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/7df6186d.8f4bc43f.js b/docs/assets/js/7df6186d.8f4bc43f.js new file mode 100644 index 000000000..08ab6863a --- /dev/null +++ b/docs/assets/js/7df6186d.8f4bc43f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3968],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},12458:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},l="Flipper example",i={unversionedId:"getting-started/flipper",id:"version-0.2.0/getting-started/flipper",title:"Flipper example",description:"To quickly start working with Odra, take a look at the following code sample. If you followed the",source:"@site/versioned_docs/version-0.2.0/getting-started/flipper.md",sourceDirName:"getting-started",slug:"/getting-started/flipper",permalink:"/docs/0.2.0/getting-started/flipper",draft:!1,tags:[],version:"0.2.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs/0.2.0/getting-started/installation"},next:{title:"Basics",permalink:"/docs/0.2.0/category/basics"}},s={},p=[{value:"Let's flip",id:"lets-flip",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-example"},"Flipper example"),(0,a.kt)("p",null,"To quickly start working with Odra, take a look at the following code sample. If you followed the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/getting-started/installation"},"Installation")," tutorial, you should have this file already at ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),"."),(0,a.kt)("p",null,"For further explanation of how this code works, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/basics/flipper-internals"},"Flipper Internals"),"."),(0,a.kt)("h2",{id:"lets-flip"},"Let's flip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs" showLineNumbers',title:'"flipper.rs"',showLineNumbers:!0},"use odra::Variable;\n\n/// A module definition. Each module struct consists Variables and Mappings\n/// or/and another modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value, \n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n\n/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n /// Retrieves value from the storage. \n /// If the value has never been set, the default value is returned.\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n\n #[test]\n fn test_two_flippers() {\n let mut contract1 = FlipperDeployer::initial_settings();\n let contract2 = FlipperDeployer::initial_settings();\n assert!(!contract1.get());\n assert!(!contract2.get());\n contract1.flip();\n assert!(contract1.get());\n assert!(!contract2.get());\n }\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next category of articles, we will go through basic concepts of Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/7e706e45.cdfe3eb6.js b/docs/assets/js/7e706e45.cdfe3eb6.js new file mode 100644 index 000000000..a60733304 --- /dev/null +++ b/docs/assets/js/7e706e45.cdfe3eb6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9032],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>c});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),m=u(t),c=r,w=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?a.createElement(w,o(o({ref:n},d),{},{components:t})):a.createElement(w,o({ref:n},d))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},80960:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=t(87462),r=(t(67294),t(3905));const i={sidebar_position:1},o="Ownable",l={unversionedId:"tutorials/ownable",id:"version-0.3.1/tutorials/ownable",title:"Ownable",description:"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.",source:"@site/versioned_docs/version-0.3.1/tutorials/ownable.md",sourceDirName:"tutorials",slug:"/tutorials/ownable",permalink:"/docs/0.3.1/tutorials/ownable",draft:!1,tags:[],version:"0.3.1",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Tutorials",permalink:"/docs/0.3.1/category/tutorials"},next:{title:"ERC-20",permalink:"/docs/0.3.1/tutorials/erc20"}},s={},u=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Define a module",id:"define-a-module",level:3},{value:"Init the module",id:"init-the-module",level:3},{value:"Features implementation",id:"features-implementation",level:3},{value:"Test",id:"test",level:3},{value:"Summary",id:"summary",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:u};function p(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features."),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"storing a single value,"),(0,r.kt)("li",{parentName:"ul"},"defining constructors,"),(0,r.kt)("li",{parentName:"ul"},"error handling,"),(0,r.kt)("li",{parentName:"ul"},"defining and emitting ",(0,r.kt)("inlineCode",{parentName:"li"},"events"),"."),(0,r.kt)("li",{parentName:"ul"},"registering a contact in a test environment,"),(0,r.kt)("li",{parentName:"ul"},"interactions with the test environment,"),(0,r.kt)("li",{parentName:"ul"},"assertions (value, events, errors assertions).")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Before we write any code, we define functionalities we would like to implement."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Module has an initializer that should be called once. "),(0,r.kt)("li",{parentName:"ol"},"Only the current owner can set a new owner."),(0,r.kt)("li",{parentName:"ol"},"Read the current owner."),(0,r.kt)("li",{parentName:"ol"},"A function that fails if called by a non-owner account.")),(0,r.kt)("h3",{id:"define-a-module"},"Define a module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{types::Address, Variable};\n\n#[odra::module]\npub struct Ownable {\n owner: Variable<Address>\n}\n")),(0,r.kt)("p",null,"That was easy, but it is crucial to understand the basic before we move on."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3")," - Firstly, we need create a struct called ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," and apply ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]")," to it above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),".")),(0,r.kt)("h3",{id:"init-the-module"},"Init the module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{\n execution_error, contract_env, Event, types::{Address, event::OdraEvent}\n};\n...\n\n#[odra::module]\nimpl Ownable {\n #[odra(init)]\n pub fn init(&mut self, owner: &Address) {\n if self.owner.get().is_some() {\n contract_env::revert(Error::OwnerIsAlreadyInitialized)\n }\n\n self.owner.set(*owner);\n \n OwnershipChanged {\n prev_owner: None,\n new_owner: *owner\n }\n .emit();\n }\n}\n\nexecution_error! {\n pub enum Error {\n OwnerIsNotInitialized => 1,\n }\n}\n\n#[derive(Event, Debug, PartialEq, Eq)]\npub struct OwnershipChanged {\n pub prev_owner: Option<Address>,\n pub new_owner: Address\n}\n")),(0,r.kt)("p",null,"Ok, we have done a couple of things, let's analyze them one by one:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," should be an odra module, so add ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function is marked as ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]")," making it a constructor. It matters if we would like to deploy the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," module as a standalone contract."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum. Notice that the ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum is defined inside the ",(0,r.kt)("inlineCode",{parentName:"li"},"execution_error")," macro. It generates, among others, the required ",(0,r.kt)("inlineCode",{parentName:"li"},"Into<ExecutionError>")," binding."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L9-L11")," - If the owner has been set already, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::revert()")," function. As an argument we pass ",(0,r.kt)("inlineCode",{parentName:"li"},"Error::OwnerIsNotInitialized"),". "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13")," - Then we write the owner passed as an argument to the storage. To do so we call the ",(0,r.kt)("inlineCode",{parentName:"li"},"set()")," on ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29-L33")," - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::Event"),". We highly recommend to derive ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PartialEq")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Eq")," for testing purpose."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Finally, we create the ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged")," struct and call ",(0,r.kt)("inlineCode",{parentName:"li"},"emit()")," function on it (import ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::types::event::OdraEvent")," trait). Hence we set the first owner, we set the ",(0,r.kt)("inlineCode",{parentName:"li"},"prev_owner")," value to ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".")),(0,r.kt)("h3",{id:"features-implementation"},"Features implementation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Ownable {\n ...\n\n pub fn ensure_ownership(&self, address: &Address) {\n if Some(address) != self.owner.get().as_ref() {\n contract_env::revert(Error::NotOwner)\n }\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ensure_ownership(&contract_env::caller());\n let current_owner = self.get_owner();\n self.owner.set(*new_owner);\n OwnershipChanged {\n prev_owner: Some(current_owner),\n new_owner: *new_owner\n }\n .emit();\n }\n\n pub fn get_owner(&self) -> Address {\n match self.owner.get() {\n Some(owner) => owner,\n None => contract_env::revert(Error::OwnerIsNotInitialized)\n }\n }\n}\n\nexecution_error! {\n pub enum Error {\n NotOwner => 1,\n OwnerIsAlreadyInitialized => 2,\n OwnerIsNotInitialized => 3,\n }\n}\n")),(0,r.kt)("p",null,"The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5,L32")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()")," is reads the current owner, and reverts if is does not match the input ",(0,r.kt)("inlineCode",{parentName:"li"},"Address"),". Also we need to update our ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum adding a new variant ",(0,r.kt)("inlineCode",{parentName:"li"},"NotOwner"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - The function defined above can be reused in ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()")," implementation. We pass to it the current caller, using the ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::caller()")," function. The we update the state, and emit ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L22,L34")," - Lastly, a getter function. As the ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable")," ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returns an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option"),", we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," variant ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnerIsNotInitialized"),".")),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[cfg(test)]\nmod tests {\n use super::*;\n use odra::{assert_events, test_env};\n\n fn setup() -> (Address, OwnableRef) {\n let owner = test_env::get_account(0);\n let ownable = OwnableDeployer::init(owner);\n (owner, ownable)\n }\n\n #[test]\n fn initialization_works() {\n let (owner, ownable) = setup();\n assert_eq!(ownable.get_owner(), owner);\n \n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n );\n }\n\n #[test]\n fn owner_can_change_ownership() {\n let (owner, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n \n test_env::set_caller(owner);\n ownable.change_ownership(&new_owner);\n assert_eq!(ownable.get_owner(), new_owner);\n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: Some(owner),\n new_owner\n }\n );\n }\n\n #[test]\n fn non_owner_cannot_change_ownership() {\n let (_, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n ownable.change_ownership(&new_owner);\n \n test_env::assert_exception(Error::NotOwner, || {\n ownable.change_ownership(&new_owner);\n });\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - Each test case starts with the same initialization process, so for convenience, we defined the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we call as the first statement in each test. Take a look at the signature ",(0,r.kt)("inlineCode",{parentName:"li"},"fn setup() -> (Address, OwnableRef)"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableRef")," is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"get_owner()"),", but not ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which is a constructor."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Now, the module needs an owner, the easiest way is to take one from the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env"),". We choose the address of first account (which is the default one)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L8")," - Odra created for us ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableDeployer")," struct which implements all constructor functions. In this case there is just one function - ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which corresponds the function we have implemented in the module."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - It is time to define the first test. As you see, it is a regular rust test."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L14-15")," - Using the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may have noticed, we use here the term ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," interchangeably with ",(0,r.kt)("inlineCode",{parentName:"p"},"contract"),". The reason is once we deploy our module onto a virtual blockchain it may be considered a contract."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L17-23")," - On the contract, only the ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events"),". As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30")," - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the ",(0,r.kt)("inlineCode",{parentName:"li"},"test env")," predefines 20 accounts."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L32")," - As mentioned, the default is the 0-th account, if you want to change the executor call the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::set_caller()")," function. ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The caller switch applies only the next contract interaction, the second call will be done as the default account."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L49-55")," - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::assert_exception()")," with the error you expect and a failing block of code.")),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next tutorial we will implement a ERC20 standard."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/7f9a1b7a.e85c6e9e.js b/docs/assets/js/7f9a1b7a.e85c6e9e.js new file mode 100644 index 000000000..c5016dec0 --- /dev/null +++ b/docs/assets/js/7f9a1b7a.e85c6e9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4133],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,f=u["".concat(i,".").concat(m)]||u[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var c=2;c<s;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},97329:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:10,description:"Contracts calling contracts"},o="Cross calls",l={unversionedId:"basics/cross-calls",id:"version-0.7.0/basics/cross-calls",title:"Cross calls",description:"Contracts calling contracts",source:"@site/versioned_docs/version-0.7.0/basics/10-cross-calls.md",sourceDirName:"basics",slug:"/basics/cross-calls",permalink:"/docs/basics/cross-calls",draft:!1,tags:[],version:"0.7.0",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Contracts calling contracts"},sidebar:"tutorialSidebar",previous:{title:"Events",permalink:"/docs/basics/events"},next:{title:"Modules",permalink:"/docs/basics/modules"}},i={},c=[{value:"Contract Ref",id:"contract-ref",level:2},{value:"Testing",id:"testing",level:2}],d={toc:c};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cross-calls"},"Cross calls"),(0,r.kt)("p",null,"To show how to handle calls between contracts, first, let's implement two of them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"use odra::Variable;\nuse odra::types::{Address};\n\n#[odra::module]\npub struct CrossContract {\n pub math_engine: Variable<Address>,\n}\n\n#[odra::module]\nimpl CrossContract {\n #[odra(init)]\n pub fn init(&mut self, math_engine_address: Address) {\n self.math_engine.set(math_engine_address);\n }\n\n pub fn add_using_another(&self) -> u32 {\n let math_engine_address = self.math_engine.get().unwrap();\n MathEngineRef::at(math_engine_address).add(3, 5)\n }\n}\n\n#[odra::module]\npub struct MathEngine {\n}\n\n#[odra::module]\nimpl MathEngine {\n pub fn add(&self, n1: u32, n2: u32) -> u32 {\n n1 + n2\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract can add two numbers. ",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," takes an ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," in its init function and saves it in\nstorage for later use. If we deploy the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," first and take note of its address, we can then deploy\n",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," and use ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," to perform complicated calculations for us!"),(0,r.kt)("p",null,"To call the external contract, we use the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," that was created for us by Odra:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"MathEngineRef::at(math_engine_address).add(3, 5)\n")),(0,r.kt)("h2",{id:"contract-ref"},"Contract Ref"),(0,r.kt)("p",null,"We mentioned ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," already in our ",(0,r.kt)("a",{parentName:"p",href:"/docs/basics/testing"},"Testing")," article.\nIt is a reference to already deployed - running contract.\nHere we are going to take a deeper look at it."),(0,r.kt)("p",null,"Similarly to a ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," is generated automatically, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nTo get an instance of a reference, we can either deploy a contract (using ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),") or by building it\ndirectly, using ",(0,r.kt)("inlineCode",{parentName:"p"},"::at(address: Address)")," method, as shown above.\nThe reference implements all the public endpoints to the contract (those marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),"\nimpl), alongside couple methods:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"at(Address) -> Self")," - points the reference to an Address"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"address() -> Address")," - returns the Address the reference is currently pointing at"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"with_tokens(Amount) -> Self")," - attaches Amount of native tokens to the next call")),(0,r.kt)("h1",{id:"external-contracts"},"External Contracts"),(0,r.kt)("p",null,"Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI."),(0,r.kt)("p",null,"For that purpose, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra:external_contract]")," macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of."),(0,r.kt)("p",null,"Let's pretend the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," we defined is an external contract. There is a contract with ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function that adds two numbers somewhere."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"#[odra::external_contract]\npub trait Adder {\n fn add(&self, n1: u32, n2: u32) -> u32;\n}\n")),(0,r.kt)("p",null,"Analogously to modules, Odra creates the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderRef")," struct (but do not create the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderDeployer"),"). Having an address we can call:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"AdderRef::at(address).add(3, 5)\n")),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Let's see how we can test our cross calls using this knowledge:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"use super::{CrossContractDeployer, MathEngineDeployer};\n\n#[test]\nfn test_cross_calls() {\n let math_engine_contract = MathEngineDeployer::default();\n let cross_contract = CrossContractDeployer::init(math_engine_contract.address());\n\n assert_eq!(cross_contract.add_using_another(), 8);\n}\n")),(0,r.kt)("p",null,"Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function we want to use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/cross_calls.rs"',title:'"examples/src/features/cross_calls.rs"'},"#[cfg(test)]\nmod tests {\n use odra::types::Address;\n use crate::features::cross_calls::{Adder, AdderRef};\n \n #[test]\n fn test_ext() {\n let adder = AdderRef::at(get_adder_address());\n\n assert_eq!(adder.add(1, 2), 3);\n }\n\n fn get_adder_address() -> Address {\n let contract = MathEngineDeployer::default();\n contract.address()\n }\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/800dfaa2.5c66eaa8.js b/docs/assets/js/800dfaa2.5c66eaa8.js new file mode 100644 index 000000000..027f852be --- /dev/null +++ b/docs/assets/js/800dfaa2.5c66eaa8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4928],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),f=a,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},44531:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:1},i="What is a backend?",c={unversionedId:"backends/what-is-a-backend",id:"version-0.7.0/backends/what-is-a-backend",title:"What is a backend?",description:"You can think of a backend as a target platform for your smart contract.",source:"@site/versioned_docs/version-0.7.0/backends/01-what-is-a-backend.md",sourceDirName:"backends",slug:"/backends/what-is-a-backend",permalink:"/docs/backends/what-is-a-backend",draft:!1,tags:[],version:"0.7.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Backends",permalink:"/docs/category/backends"},next:{title:"MockVM",permalink:"/docs/backends/mock-vm"}},s={},l=[{value:"Contract Env",id:"contract-env",level:2},{value:"Test Env",id:"test-env",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-a-backend"},"What is a backend?"),(0,a.kt)("p",null,"You can think of a backend as a target platform for your smart contract.\nThis can be a piece of code allowing you to quickly check your code - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/backends/mock-vm"},"MockVM"),",\nor a complete virtual machine, spinning up a blockchain for you - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/backends/casper"},"CasperVM"),"."),(0,a.kt)("p",null,"Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env."),(0,a.kt)("h2",{id:"contract-env"},"Contract Env"),(0,a.kt)("p",null,"The Contract Env is a simple interface that each backend needs to implement,\nexposing features of the blockchain from the perspective of the contract."),(0,a.kt)("p",null,"It gives Odra a set of functions, which allows implementing more complex concepts -\nfor example, to implement ",(0,a.kt)("a",{parentName:"p",href:"/docs/basics/storage-interaction"},"Mapping"),",\nOdra requires some kind of storage integration.\nThe exact implementation of those functions is a responsibility of a backend,\nmaking Odra and its user free to implement the contract logic,\ninstead of messing with the blockchain internals."),(0,a.kt)("p",null,"Other functions from Contract Env include handling transfers, addresses, block time, errors and events."),(0,a.kt)("h2",{id:"test-env"},"Test Env"),(0,a.kt)("p",null,"Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with\nthe backend from the outside world - really useful for implementing tests."),(0,a.kt)("p",null,"This ranges from interacting with the blockchain - like deploying and calling the contracts,\nto the more test-oriented - handling errors, forwarding the block time, etc."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will take a look at backends Odra implements in more detail."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/8010fede.038a5d25.js b/docs/assets/js/8010fede.038a5d25.js new file mode 100644 index 000000000..9940d4321 --- /dev/null +++ b/docs/assets/js/8010fede.038a5d25.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2628],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=d(t),m=r,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},p),{},{components:t})):a.createElement(f,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=c;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},29011:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:2},l="Using odra-modules",i={unversionedId:"examples/using-odra-modules",id:"version-0.7.0/examples/using-odra-modules",title:"Using odra-modules",description:"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.",source:"@site/versioned_docs/version-0.7.0/examples/using-odra-modules.md",sourceDirName:"examples",slug:"/examples/using-odra-modules",permalink:"/docs/examples/using-odra-modules",draft:!1,tags:[],version:"0.7.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"odra-examples",permalink:"/docs/examples/odra-examples"},next:{title:"Tutorials",permalink:"/docs/category/tutorials"}},s={},d=[{value:"Available modules",id:"available-modules",level:2},{value:"Tokens",id:"tokens",level:3},{value:"Erc20",id:"erc20",level:4},{value:"Erc721",id:"erc721",level:4},{value:"Erc1155",id:"erc1155",level:4},{value:"Wrapped native token",id:"wrapped-native-token",level:4},{value:"Access",id:"access",level:3},{value:"AccessControl",id:"accesscontrol",level:4},{value:"Ownable",id:"ownable",level:4},{value:"Ownable2Step",id:"ownable2step",level:4},{value:"Security",id:"security",level:3},{value:"Pauseable",id:"pauseable",level:4}],p={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"using-odra-modules"},"Using odra-modules"),(0,r.kt)("p",null,"Besides the Odra framework, you can attach to your project ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-module")," - a set of plug-and-play modules."),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/getting-started/installation"},"Installation guide")," your Cargo.toml should look like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,r.kt)("p",null,"To use ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules"),", edit your ",(0,r.kt)("inlineCode",{parentName:"p"},"dependency")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"features")," sections."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[dependencies]\nodra = { path = "../core", default-features = false }\nodra-modules = { path = "../modules", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]\ncasper = ["odra/casper", "odra-modules/casper"]\n')),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules")," defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," feature in your project, add ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules/casper"),"specifically (it applies to each backend).")),(0,r.kt)("p",null,"Now, the only thing left is to add a module to your contract."),(0,r.kt)("p",null,"Let's write an example of ",(0,r.kt)("inlineCode",{parentName:"p"},"MyToken")," based on ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::types::{Address, U256};\nuse odra_modules::erc20::Erc20;\n\n#[odra::module]\npub struct MyToken {\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, initial_supply: U256) {\n let name = String::from("MyToken");\n let symbol = String::from("MT");\n let decimals = 9u8;\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n self.erc20.approve(spender, amount);\n }\n}\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All available modules are placed in the main Odra repository.")),(0,r.kt)("h2",{id:"available-modules"},"Available modules"),(0,r.kt)("p",null,"Odra modules comes with couple of ready-to-use modules and reusable extensions."),(0,r.kt)("h3",{id:"tokens"},"Tokens"),(0,r.kt)("h4",{id:"erc20"},"Erc20"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"ERC20")," standard."),(0,r.kt)("h4",{id:"erc721"},"Erc721"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-721"},"ERC721")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC721Base")," and additionally uses\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extensions."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Receiver")," trait lets you implement your own logic for receiving NFTs."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc721WithMetadata")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"erc1155"},"Erc1155"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-1155"},"ERC1155")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC1155Base")," and additionally uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extension."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc1155")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"wrapped-native-token"},"Wrapped native token"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"WrappedNativeToken")," module implements the Wrapper for the native token,\nit was inspired by the WETH."),(0,r.kt)("h3",{id:"access"},"Access"),(0,r.kt)("h4",{id:"accesscontrol"},"AccessControl"),(0,r.kt)("p",null,"This module enables the implementation of role-based access control mechanisms for children\nmodules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API."),(0,r.kt)("h4",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner."),(0,r.kt)("p",null,"The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the\n",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," function."),(0,r.kt)("h4",{id:"ownable2step"},"Ownable2Step"),(0,r.kt)("p",null,"An extension of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module. "),(0,r.kt)("p",null,"Ownership can be transferred in a two-step process by using ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"accept_ownership()")," functions."),(0,r.kt)("h3",{id:"security"},"Security"),(0,r.kt)("h4",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"A module allowing to implement an emergency stop mechanism that can be triggered by any account."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/814f3328.e5d9b741.js b/docs/assets/js/814f3328.e5d9b741.js new file mode 100644 index 000000000..458f39774 --- /dev/null +++ b/docs/assets/js/814f3328.e5d9b741.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[]}')}}]); \ No newline at end of file diff --git a/docs/assets/js/815ad8c9.f1cfd89f.js b/docs/assets/js/815ad8c9.f1cfd89f.js new file mode 100644 index 000000000..7c6a2b698 --- /dev/null +++ b/docs/assets/js/815ad8c9.f1cfd89f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9145],{3905:(e,r,n)=>{n.d(r,{Zo:()=>p,kt:()=>m});var t=n(67294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?a(Object(n),!0).forEach((function(r){o(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,o=function(e,r){if(null==e)return{};var n,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=t.createContext({}),c=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},p=function(e){var r=c(e.components);return t.createElement(l.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=o,w=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return n?t.createElement(w,s(s({ref:r},p),{},{components:n})):t.createElement(w,s({ref:r},p))}));function m(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,s[1]=i;for(var c=2;c<a;c++)s[c]=n[c];return t.createElement.apply(null,s)}return t.createElement.apply(null,n)}d.displayName="MDXCreateElement"},71900:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=n(87462),o=(n(67294),n(3905));const a={sidebar_position:8,description:"Causing and handling errors"},s="Errors",i={unversionedId:"basics/errors",id:"version-0.3.1/basics/errors",title:"Errors",description:"Causing and handling errors",source:"@site/versioned_docs/version-0.3.1/basics/08-errors.md",sourceDirName:"basics",slug:"/basics/errors",permalink:"/docs/0.3.1/basics/errors",draft:!1,tags:[],version:"0.3.1",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"Causing and handling errors"},sidebar:"tutorialSidebar",previous:{title:"Testing",permalink:"/docs/0.3.1/basics/testing"},next:{title:"Events",permalink:"/docs/0.3.1/basics/events"}},l={},c=[{value:"Testing errors",id:"testing-errors",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:r,...n}=e;return(0,o.kt)("wrapper",(0,t.Z)({},p,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"errors"},"Errors"),(0,o.kt)("p",null,"Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the\nfollowing example of a simple owned contract:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"use odra::{execution_error, Variable, UnwrapOrRevert};\nuse odra::types::Address;\n\n#[odra::module]\npub struct OwnedContract {\n name: Variable<String>,\n owner: Variable<Address>,\n}\n\nexecution_error! {\n pub enum Error {\n OwnerNotSet => 1,\n NotAnOwner => 2,\n }\n}\n\n\n#[odra::module]\nimpl OwnedContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.owner.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn owner(&self) -> Address {\n self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n }\n\n pub fn change_name(&mut self, name: String) {\n let caller = odra::contract_env::caller();\n if caller != self.owner() {\n odra::contract_env::revert(Error::NotAnOwner)\n }\n\n self.name.set(name);\n }\n}\n")),(0,o.kt)("p",null,"Firstly, we are using ",(0,o.kt)("inlineCode",{parentName:"p"},"execution_error!")," macro to define our own set of Errors that our contract will\nthrow. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use\n",(0,o.kt)("inlineCode",{parentName:"p"},"unwrap_or_revert_with")," and pass an error as an argument:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n")),(0,o.kt)("p",null,"You and the users of your contract will be thankful for a meaningful error message!"),(0,o.kt)("p",null,"You can also throw the error directly, by using ",(0,o.kt)("inlineCode",{parentName:"p"},"revert"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"odra::contract_env::revert(Error::NotAnOwner)\n")),(0,o.kt)("h2",{id:"testing-errors"},"Testing errors"),(0,o.kt)("p",null,"Okay, but how about testing it? We've already mentioned a function - ",(0,o.kt)("inlineCode",{parentName:"p"},"assert_exception"),". This is how you will\nuse it:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},'use super::{OwnedContractDeployer, OwnedContractRef};\nuse super::Error;\n\n#[test]\nfn test_owner_error() {\n let owner = odra::test_env::get_account(0);\n let not_an_owner = odra::test_env::get_account(1);\n\n odra::test_env::set_caller(owner);\n let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());\n\n odra::test_env::set_caller(not_an_owner);\n odra::test_env::assert_exception(Error::NotAnOwner, || {\n owned_contract.change_name("NewName".to_string());\n })\n}\n')),(0,o.kt)("p",null,"In the example above, because we are calling the ",(0,o.kt)("inlineCode",{parentName:"p"},"change_name"),' method as an address which is not an "owner",\nwe are expecting that "NotAnOwner" error will be thrown.'),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Here we are creating another reference to the already deployed contract using ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedContractRef::at()")," and passing to it\nits Address. Note that ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedContractDeployer::init()")," returns the same type.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will learn how to emit and test events using Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/83697071.0ed48f7d.js b/docs/assets/js/83697071.0ed48f7d.js new file mode 100644 index 000000000..1b49685e2 --- /dev/null +++ b/docs/assets/js/83697071.0ed48f7d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5894],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=l(n),m=a,v=u["".concat(c,".").concat(m)]||u[m]||p[m]||s;return n?r.createElement(v,o(o({ref:t},d),{},{components:n})):r.createElement(v,o({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,o=new Array(s);o[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var l=2;l<s;l++)o[l]=n[l];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},69707:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const s={sidebar_position:9,description:"Creating and emitting Events"},o="Events",i={unversionedId:"basics/events",id:"version-0.3.1/basics/events",title:"Events",description:"Creating and emitting Events",source:"@site/versioned_docs/version-0.3.1/basics/09-events.md",sourceDirName:"basics",slug:"/basics/events",permalink:"/docs/0.3.1/basics/events",draft:!1,tags:[],version:"0.3.1",sidebarPosition:9,frontMatter:{sidebar_position:9,description:"Creating and emitting Events"},sidebar:"tutorialSidebar",previous:{title:"Errors",permalink:"/docs/0.3.1/basics/errors"},next:{title:"Cross calls",permalink:"/docs/0.3.1/basics/cross-calls"}},c={},l=[{value:"Testing events",id:"testing-events",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Different blockchains implement events in different ways. Odra lets you forget about it by introducing\nOdra Events. Take a look:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"use odra::{Event, contract_env};\nuse odra::types::{Address, BlockTime, event::OdraEvent};\n\n#[odra::module(events = [PartyStarted])]\npub struct PartyContract {\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n\n#[odra::module]\nimpl PartyContract {\n #[odra(init)]\n pub fn init(&self) {\n PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n }.emit();\n }\n}\n")),(0,a.kt)("p",null,"We defined a new contract, which emits an event called ",(0,a.kt)("inlineCode",{parentName:"p"},"PartyStarted")," when the contract is deployed.\nTo define an event, we derive an ",(0,a.kt)("inlineCode",{parentName:"p"},"Event")," macro like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n")),(0,a.kt)("p",null,"Among other things, it adds an ",(0,a.kt)("inlineCode",{parentName:"p"},"emit()")," function to the struct, which allows you to emit the event simply\nas that:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n}.emit();\n")),(0,a.kt)("p",null,"Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an ",(0,a.kt)("inlineCode",{parentName:"p"},"events")," attribute to the struct's ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. "),(0,a.kt)("p",null,"The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module."),(0,a.kt)("h2",{id:"testing-events"},"Testing events"),(0,a.kt)("p",null,"Odra's ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a handy macro ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_events!")," which lets you easily test the events that a given contract has emitted:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"use odra::{assert_events, test_env};\nuse crate::docs::events::PartyStarted;\nuse super::PartyContractDeployer;\n\n#[test]\nfn test_party() {\n let party_contract = PartyContractDeployer::init();\n assert_events!(\n party_contract,\n PartyStarted {\n caller: test_env::get_account(0),\n block_time: 0,\n }\n );\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn how to call other contracts from the contract context."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/88b75f2c.dda19374.js b/docs/assets/js/88b75f2c.dda19374.js new file mode 100644 index 000000000..3b9aef4cb --- /dev/null +++ b/docs/assets/js/88b75f2c.dda19374.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6075],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=d(t),m=r,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},c),{},{components:t})):a.createElement(f,l({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}p.displayName="MDXCreateElement"},68306:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={},l="Delegate",i={unversionedId:"advanced/delegate",id:"version-0.7.0/advanced/delegate",title:"Delegate",description:"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.",source:"@site/versioned_docs/version-0.7.0/advanced/02-delegate.md",sourceDirName:"advanced",slug:"/advanced/delegate",permalink:"/docs/advanced/delegate",draft:!1,tags:[],version:"0.7.0",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Module reusing",permalink:"/docs/advanced/using"},next:{title:"Advanced Storage Concepts",permalink:"/docs/advanced/advanced-storage"}},s={},d=[{value:"Overview",id:"overview",level:2},{value:"Code Examples",id:"code-examples",level:2}],c={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"delegate"},"Delegate"),(0,r.kt)("p",null,"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module."),(0,r.kt)("p",null,"The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"To utilize the delegate feature in your contract, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro, your parent module remains clean and easy to understand."),(0,r.kt)("p",null,"You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself."),(0,r.kt)("h2",{id:"code-examples"},"Code Examples"),(0,r.kt)("p",null,"Consider the following basic example for better understanding:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);\n pub fn approve(&mut self, spender: Address, amount: U256);\n pub fn name(&self) -> String;\n pub fn symbol(&self) -> String;\n pub fn decimals(&self) -> u8;\n pub fn total_supply(&self) -> U256;\n pub fn balance_of(&self, owner: Address) -> U256;\n pub fn allowance(&self, owner: Address, spender: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n pub fn change_ownership(&mut self, new_owner: Address);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedToken")," contract includes two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),". We delegate various functions from both modules using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro. As a result, the contract retains its succinctness without compromising on functionality."),(0,r.kt)("p",null,"The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities."),(0,r.kt)("p",null,"Let's take a look at another example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};\n\n#[odra::module]\npub struct DeFiPlatform {\n ownable: Ownable,\n erc20: Erc20,\n exchange: Exchange\n}\n\n#[odra::module]\nimpl DeFiPlatform {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n self.exchange.init(exchange_rate);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn balance_of(&self, owner: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n }\n\n to self.exchange {\n pub fn swap(&mut self, sender: Address, recipient: Address);\n pub fn set_exchange_rate(&mut self, new_rate: u64);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"In this ",(0,r.kt)("inlineCode",{parentName:"p"},"DeFiPlatform")," contract, we include ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"Exchange")," modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure."),(0,r.kt)("p",null,"Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/893f4b86.f1b9c467.js b/docs/assets/js/893f4b86.f1b9c467.js new file mode 100644 index 000000000..95f2955a0 --- /dev/null +++ b/docs/assets/js/893f4b86.f1b9c467.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6452],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?n(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,o,a=function(e,r){if(null==e)return{};var t,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},c=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return t?o.createElement(f,l(l({ref:r},c),{},{components:t})):o.createElement(f,l({ref:r},c))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,l=new Array(n);l[0]=u;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<n;p++)l[p]=t[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},25661:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var o=t(87462),a=(t(67294),t(3905));const n={sidebar_position:1},l="odra-examples",i={unversionedId:"examples/odra-examples",id:"version-0.7.0/examples/odra-examples",title:"odra-examples",description:"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.",source:"@site/versioned_docs/version-0.7.0/examples/odra-examples.md",sourceDirName:"examples",slug:"/examples/odra-examples",permalink:"/docs/examples/odra-examples",draft:!1,tags:[],version:"0.7.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Examples",permalink:"/docs/category/examples"},next:{title:"Using odra-modules",permalink:"/docs/examples/using-odra-modules"}},s={},p=[{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odra-examples"},"odra-examples"),(0,a.kt)("p",null,"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the ",(0,a.kt)("inlineCode",{parentName:"p"},"examples")," in the Odra main repository."),(0,a.kt)("p",null,'The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.'),(0,a.kt)("p",null,"Don't worry if you find learning solely by reading the code challenging. Go to the ",(0,a.kt)("a",{parentName:"p",href:"../category/tutorials/"},"Tutorial")," section, where we will review it together. We will break the code into pieces, leaving no space for further questions."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn about reusable Odra components encapsulated in ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/8988b866.22b63e10.js b/docs/assets/js/8988b866.22b63e10.js new file mode 100644 index 000000000..0ae15dae7 --- /dev/null +++ b/docs/assets/js/8988b866.22b63e10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5598],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(f,s(s({ref:n},c),{},{components:t})):a.createElement(f,s({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,s=new Array(o);s[0]=d;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,s[1]=l;for(var p=2;p<o;p++)s[p]=t[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,t)}d.displayName="MDXCreateElement"},86965:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:3},s="ERC-20",l={unversionedId:"tutorials/erc20",id:"version-0.4.0/tutorials/erc20",title:"ERC-20",description:"It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.",source:"@site/versioned_docs/version-0.4.0/tutorials/erc20.md",sourceDirName:"tutorials",slug:"/tutorials/erc20",permalink:"/docs/0.4.0/tutorials/erc20",draft:!1,tags:[],version:"0.4.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Ownable",permalink:"/docs/0.4.0/tutorials/ownable"},next:{title:"OwnedToken",permalink:"/docs/0.4.0/tutorials/owned-token"}},i={},p=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:2},{value:"Metadata",id:"metadata",level:3},{value:"Core",id:"core",level:3},{value:"Test",id:"test",level:3},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"erc-20"},"ERC-20"),(0,r.kt)("p",null,"It's time for something that every smart contract developer has done at least once. Let's try to implement ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"Erc20")," standard. Of course, we are going to use the Odra Framework. "),(0,r.kt)("p",null,"The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value. "),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"advanced storage - key-value pairs, "),(0,r.kt)("li",{parentName:"ul"},"Odra types like ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),", "),(0,r.kt)("li",{parentName:"ul"},"advanced events assertion.")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Our module has a pretty complex storage layout in comparison to the previous example."),(0,r.kt)("p",null,"We need to store the following data:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Immutable metadata - name, symbol and decimals."),(0,r.kt)("li",{parentName:"ol"},"Total supply."),(0,r.kt)("li",{parentName:"ol"},"Users' balances."),(0,r.kt)("li",{parentName:"ol"},"Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.")),(0,r.kt)("h2",{id:"module-definition"},"Module definition"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module(events = [Transfer, Approval])]\npub struct Erc20 {\n decimals: Variable<u8>,\n symbol: Variable<String>,\n name: Variable<String>,\n total_supply: Variable<Balance>,\n balances: Mapping<Address, Balance>,\n allowances: Mapping<Address, Mapping<Address, Balance>>\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - For the first time, we need to store key-value pairs. In order to do that, we use ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),". The name is taken after Solidity's native type ",(0,r.kt)("inlineCode",{parentName:"li"},"mapping"),". You may notice the ",(0,r.kt)("inlineCode",{parentName:"li"},"balances")," property maps ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),". If you deal with addresses or you operate on tokens, you should always choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," over ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Odra allows nested ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),"s, what we utilize to store allowances.")),(0,r.kt)("h3",{id:"metadata"},"Metadata"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Erc20 {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn symbol(&self) -> String {\n self.symbol.get_or_default()\n }\n\n pub fn decimals(&self) -> u8 {\n self.decimals.get_or_default()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.total_supply.get_or_default()\n }\n}\n\nimpl Erc20 {\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.balances.add(address, *amount);\n self.total_supply.add(amount);\n Transfer {\n from: None,\n to: Some(*address),\n amount: *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Transfer {\n pub from: Option<Address>,\n pub to: Option<Address>,\n pub amount: Balance\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L1")," - The first ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," block, marked as a module, contains functions defined in the ERC-20 standard."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3-L10")," - A constructor sets the token metadata and mints the initial supply."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12-L14")," - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," example, we used the ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returning an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<T>"),". If the type implements ",(0,r.kt)("inlineCode",{parentName:"li"},"Default")," trait, you can call ",(0,r.kt)("inlineCode",{parentName:"li"},"get_or_default()")," function and the contract does not fail even if the value is not initialized."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29")," - The second ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," is not an odra module, in other words these function will not be a part of contract's ABI."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30-L39")," - Mint function is public, so like in a regular rust code will be accessible from the outside. ",(0,r.kt)("inlineCode",{parentName:"li"},"mint()")," use notation ",(0,r.kt)("inlineCode",{parentName:"li"},"self.balances.add(&address, amount);"),", which it is syntactic sugar for:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"let current_balance = self.balances.get(&address).unwrap_or_default();\nlet new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();\nself.balances.set(&address, new_balance);\n")),(0,r.kt)("h3",{id:"core"},"Core"),(0,r.kt)("p",null,"For the sake of completeness, let's implement the remaining functionalities like ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_from"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"approve"),". They are not introducing any new concepts, so we leave them without additional remarks."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs",title:"erc20.rs"},"#[odra::module]\nimpl Erc20 {\n ...\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n let caller = contract_env::caller();\n self.raw_transfer(&caller, recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let spender = contract_env::caller();\n self.spend_allowance(owner, &spender, amount);\n self.raw_transfer(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n let owner = contract_env::caller();\n self.allowances.get_instance(&owner).set(spender, *amount);\n Approval {\n owner,\n spender: *spender,\n value: *amount\n }\n .emit();\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.balances.get_or_default(&address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.allowances.get_instance(owner).get_or_default(spender)\n }\n}\n\nimpl Erc20 {\n ...\n\n fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let owner_balance = self.balances.get_or_default(&owner);\n if *amount > owner_balance {\n contract_env::revert(Error::InsufficientBalance)\n }\n self.balances.set(owner, owner_balance - *amount);\n self.balances.add(recipient, *amount);\n Transfer {\n from: Some(*owner),\n to: Some(*recipient),\n amount: *amount\n }\n .emit();\n }\n\n fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {\n let allowance = self.allowances.get_instance(owner).get_or_default(spender);\n if allowance < *amount {\n contract_env::revert(Error::InsufficientAllowance)\n }\n let new_allowance = allowance - *amount;\n self.allowances\n .get_instance(owner)\n .set(spender, new_allowance);\n Approval {\n owner: *owner,\n spender: *spender,\n value: allowance - *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Approval {\n pub owner: Address,\n pub spender: Address,\n pub value: U256\n}\n\nexecution_error! {\n pub enum Error {\n InsufficientBalance => 1,\n InsufficientAllowance => 2,\n }\n}\n")),(0,r.kt)("p",null,"Now, compare the code we have written, with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"},"Open Zeppelin code"),". Out of 10, how Solidity-ish is our implementation?"),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},'#[cfg(test)]\npub mod tests {\n use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};\n use odra::{assert_events, test_env, types::U256};\n\n pub const NAME: &str = "Plascoin";\n pub const SYMBOL: &str = "PLS";\n pub const DECIMALS: u8 = 10;\n pub const INITIAL_SUPPLY: u32 = 10_000;\n\n pub fn setup() -> Erc20Ref {\n Erc20Deployer::init(\n String::from(NAME),\n String::from(SYMBOL),\n DECIMALS,\n INITIAL_SUPPLY.into()\n )\n }\n\n #[test]\n fn initialization() {\n let erc20 = setup();\n\n assert_eq!(&erc20.symbol(), SYMBOL);\n assert_eq!(&erc20.name(), NAME);\n assert_eq!(erc20.decimals(), DECIMALS);\n assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());\n assert_events!(\n erc20,\n Transfer {\n from: None,\n to: Some(test_env::get_account(0)),\n amount: INITIAL_SUPPLY.into()\n }\n );\n }\n\n #[test]\n fn transfer_works() {\n let mut erc20 = setup();\n let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n erc20.transfer(&recipient, &amount);\n\n assert_eq!(\n erc20.balance_of(&sender),\n U256::from(INITIAL_SUPPLY) - amount\n );\n assert_eq!(erc20.balance_of(&recipient), amount);\n assert_events!(\n erc20,\n Transfer {\n from: Some(sender),\n to: Some(recipient),\n amount\n }\n );\n }\n\n #[test]\n fn transfer_error() {\n let mut erc20 = setup();\n let recipient = test_env::get_account(1);\n let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);\n\n test_env::assert_exception(Error::InsufficientBalance, || {\n erc20.transfer(&recipient, &amount)\n });\n }\n\n #[test]\n fn transfer_from_and_approval_work() {\n let mut erc20 = setup();\n let (owner, recipient, spender) = (\n test_env::get_account(0),\n test_env::get_account(1),\n test_env::get_account(2)\n );\n let approved_amount = 3_000.into();\n let transfer_amount = 1_000.into();\n\n // Owner approves Spender.\n erc20.approve(&spender, &approved_amount);\n\n // Allowance was recorded.\n assert_eq!(erc20.allowance(&owner, &spender), approved_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount\n }\n );\n\n // Spender transfers tokens from Owner to Recipient.\n test_env::set_caller(spender);\n erc20.transfer_from(&owner, &recipient, &transfer_amount);\n\n // Tokens are transferred and allowance decremented.\n assert_eq!(\n erc20.balance_of(&owner),\n U256::from(INITIAL_SUPPLY) - transfer_amount\n );\n assert_eq!(erc20.balance_of(&recipient), transfer_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount - transfer_amount\n },\n Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount: transfer_amount\n }\n );\n \n assert_events!(erc20, Approval, Transfer);\n }\n\n #[test]\n fn transfer_from_error() {\n let mut erc20 = setup();\n let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n test_env::set_caller(spender);\n test_env::assert_exception(Error::InsufficientAllowance, || {\n erc20.transfer_from(&owner, &spender, &amount)\n });\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L111-123")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events!()")," macro accepts multiple events. You must pass them in the order they were emitted. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L125")," - Alternatively, if you don't want to check the entire event, you may assert only its type.")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"You can not mix both approaches, you pass full events or types only.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"Having two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", let's combine them, and create an ERC-20 on steroids."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/8b0ca31f.9e0a83d9.js b/docs/assets/js/8b0ca31f.9e0a83d9.js new file mode 100644 index 000000000..45928481e --- /dev/null +++ b/docs/assets/js/8b0ca31f.9e0a83d9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8071],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),h=a,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(k,i(i({ref:t},d),{},{components:n})):r.createElement(k,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},74879:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},i="MockVM",c={unversionedId:"backends/mock-vm",id:"version-0.5.0/backends/mock-vm",title:"MockVM",description:"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing",source:"@site/versioned_docs/version-0.5.0/backends/02-mock-vm.md",sourceDirName:"backends",slug:"/backends/mock-vm",permalink:"/docs/0.5.0/backends/mock-vm",draft:!1,tags:[],version:"0.5.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What is a backend?",permalink:"/docs/0.5.0/backends/what-is-a-backend"},next:{title:"Casper",permalink:"/docs/0.5.0/backends/casper"}},s={},l=[{value:"Usage",id:"usage",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Execution",id:"execution",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mockvm"},"MockVM"),(0,a.kt)("p",null,"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing\nthe code written in Odra without compiling the contract to the target architecture and spinning up the\nblockchain."),(0,a.kt)("p",null,"Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler."),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The MockVM is the default backend for Odra framework, so each time you run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,a.kt)("p",null,"You are running your code against it."),(0,a.kt)("h2",{id:"architecture"},"Architecture"),(0,a.kt)("p",null,"MockVM consists of two main parts: the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," and the ",(0,a.kt)("inlineCode",{parentName:"p"},"State"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," is just a list of contracts deployed onto the MockVM, identified by an ",(0,a.kt)("inlineCode",{parentName:"p"},"Address"),".\nEach time we call the contract, we call its instance stored in the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register"),"."),(0,a.kt)("p",null,"Contracts and Test Env functions can modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"State")," of the MockVM."),(0,a.kt)("p",null,'Contrary to the "real" backend, which holds the whole history of the blockchain,\nthe MockVM ',(0,a.kt)("inlineCode",{parentName:"p"},"State")," holds only the current state of the MockVM.\nThanks to this and the fact that we do not need the blockchain itself,\nMockVM starts instantly and runs the tests in the native speed."),(0,a.kt)("h2",{id:"execution"},"Execution"),(0,a.kt)("p",null,"When the MockVM backend is enabled, the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro is responsible for converting\nyour ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions into a list of Entrypoints, which are put into a Contract Container.\nWhen the contract is deployed, its Container registered into a Registry under an address.\nDuring the contract call, MockVM finds an Entrypoint and executes the code."),(0,a.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[Contract Container];\n id2[Contract Container]--\x3eid3((Contract Registry))\n id3((Contract Registry))--\x3eid4[(MockVM Execution)]"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/8e991cde.79b88e8f.js b/docs/assets/js/8e991cde.79b88e8f.js new file mode 100644 index 000000000..e2bb7caa7 --- /dev/null +++ b/docs/assets/js/8e991cde.79b88e8f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7287],{14737:e=>{e.exports=JSON.parse('{"title":"Tutorials","description":"The theory is good, but the practice is even better. Let\'s go through a few examples summing up all the Odra concepts.","slug":"/category/tutorials","permalink":"/docs/0.2.0/category/tutorials","navigation":{"previous":{"title":"Using odra-modules","permalink":"/docs/0.2.0/examples/using-odra-modules"},"next":{"title":"Ownable","permalink":"/docs/0.2.0/tutorials/ownable"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/8f162cb9.762379e0.js b/docs/assets/js/8f162cb9.762379e0.js new file mode 100644 index 000000000..464598cd7 --- /dev/null +++ b/docs/assets/js/8f162cb9.762379e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6221],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,f=u["".concat(c,".").concat(m)]||u[m]||p[m]||o;return n?a.createElement(f,s(s({ref:t},d),{},{components:n})):a.createElement(f,s({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,s=new Array(o);s[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var l=2;l<o;l++)s[l]=n[l];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},31832:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:12,description:"How to deposit, withdraw and transfer"},s="Native token",i={unversionedId:"basics/native-token",id:"version-0.2.0/basics/native-token",title:"Native token",description:"How to deposit, withdraw and transfer",source:"@site/versioned_docs/version-0.2.0/basics/12-native-token.md",sourceDirName:"basics",slug:"/basics/native-token",permalink:"/docs/0.2.0/basics/native-token",draft:!1,tags:[],version:"0.2.0",sidebarPosition:12,frontMatter:{sidebar_position:12,description:"How to deposit, withdraw and transfer"},sidebar:"defaultSidebar",previous:{title:"Modules",permalink:"/docs/0.2.0/basics/modules"},next:{title:"Backends",permalink:"/docs/0.2.0/category/backends"}},c={},l=[{value:"Testing",id:"testing",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"native-token"},"Native token"),(0,r.kt)("p",null,"Different blockchains come with different implementations of their native tokens. Odra wraps it all for you\nin easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit\ntheir funds and anyone can withdraw them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/native_token.rs"',title:'"examples/src/docs/native_token.rs"'},"use odra::types::Balance;\nuse odra::contract_env;\n\n#[odra::module]\npub struct PublicWallet {\n}\n\n#[odra::module]\nimpl PublicWallet {\n #[odra(payable)]\n pub fn deposit(&mut self) {\n }\n\n pub fn withdraw(&mut self, amount: Balance) {\n contract_env::transfer_tokens(contract_env::caller(), amount);\n }\n}\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make\nany checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is\neven possible."),(0,r.kt)("p",{parentName:"admonition"},"To see a more reasonable example, check out ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/tlw.rs")," in the odra main repository.")),(0,r.kt)("p",null,"You can see a new macro used here: ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," - it will add all the code needed for a function to\nbe able to receive the funds. Additionally, we are using a new function from contract_env - ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_tokens"),".\nIt does exactly what you are expecting it to do - it will transfer native tokens from the contract to the\nspecified address."),(0,r.kt)("p",null,"We are also using the ",(0,r.kt)("inlineCode",{parentName:"p"},"Balance")," - an Odra type that wraps around the type that the underlying blockchain uses\nfor counting tokens."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"To be able to test how many tokens a contract (or any address) has, ",(0,r.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a function -\n",(0,r.kt)("inlineCode",{parentName:"p"},"token_balance"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/native_token.rs"',title:'"examples/src/docs/native_token.rs"'},"use odra::types::Balance;\nuse odra::test_env;\nuse super::PublicWalletDeployer;\n\n#[test]\nfn test_modules() {\n let mut my_contract = PublicWalletDeployer::default();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());\n\n my_contract.with_tokens(Balance::from(100)).deposit();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));\n\n my_contract.withdraw(Balance::from(25));\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/9005cef3.95511a2a.js b/docs/assets/js/9005cef3.95511a2a.js new file mode 100644 index 000000000..748757605 --- /dev/null +++ b/docs/assets/js/9005cef3.95511a2a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5973],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(f,s(s({ref:n},c),{},{components:t})):a.createElement(f,s({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,s=new Array(o);s[0]=d;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,s[1]=l;for(var p=2;p<o;p++)s[p]=t[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,t)}d.displayName="MDXCreateElement"},64021:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:3},s="ERC-20",l={unversionedId:"tutorials/erc20",id:"version-0.6.0/tutorials/erc20",title:"ERC-20",description:"It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.",source:"@site/versioned_docs/version-0.6.0/tutorials/erc20.md",sourceDirName:"tutorials",slug:"/tutorials/erc20",permalink:"/docs/0.6.0/tutorials/erc20",draft:!1,tags:[],version:"0.6.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Ownable",permalink:"/docs/0.6.0/tutorials/ownable"},next:{title:"OwnedToken",permalink:"/docs/0.6.0/tutorials/owned-token"}},i={},p=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:2},{value:"Metadata",id:"metadata",level:3},{value:"Core",id:"core",level:3},{value:"Test",id:"test",level:3},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"erc-20"},"ERC-20"),(0,r.kt)("p",null,"It's time for something that every smart contract developer has done at least once. Let's try to implement ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"Erc20")," standard. Of course, we are going to use the Odra Framework. "),(0,r.kt)("p",null,"The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value. "),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"advanced storage - key-value pairs, "),(0,r.kt)("li",{parentName:"ul"},"Odra types like ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),", "),(0,r.kt)("li",{parentName:"ul"},"advanced events assertion.")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Our module has a pretty complex storage layout in comparison to the previous example."),(0,r.kt)("p",null,"We need to store the following data:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Immutable metadata - name, symbol and decimals."),(0,r.kt)("li",{parentName:"ol"},"Total supply."),(0,r.kt)("li",{parentName:"ol"},"Users' balances."),(0,r.kt)("li",{parentName:"ol"},"Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.")),(0,r.kt)("h2",{id:"module-definition"},"Module definition"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module(events = [Transfer, Approval])]\npub struct Erc20 {\n decimals: Variable<u8>,\n symbol: Variable<String>,\n name: Variable<String>,\n total_supply: Variable<Balance>,\n balances: Mapping<Address, Balance>,\n allowances: Mapping<Address, Mapping<Address, Balance>>\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - For the first time, we need to store key-value pairs. In order to do that, we use ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),". The name is taken after Solidity's native type ",(0,r.kt)("inlineCode",{parentName:"li"},"mapping"),". You may notice the ",(0,r.kt)("inlineCode",{parentName:"li"},"balances")," property maps ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),". If you deal with addresses or you operate on tokens, you should always choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," over ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Odra allows nested ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),"s, what we utilize to store allowances.")),(0,r.kt)("h3",{id:"metadata"},"Metadata"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Erc20 {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn symbol(&self) -> String {\n self.symbol.get_or_default()\n }\n\n pub fn decimals(&self) -> u8 {\n self.decimals.get_or_default()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.total_supply.get_or_default()\n }\n}\n\nimpl Erc20 {\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.balances.add(address, *amount);\n self.total_supply.add(amount);\n Transfer {\n from: None,\n to: Some(*address),\n amount: *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Transfer {\n pub from: Option<Address>,\n pub to: Option<Address>,\n pub amount: Balance\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L1")," - The first ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," block, marked as a module, contains functions defined in the ERC-20 standard."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3-L10")," - A constructor sets the token metadata and mints the initial supply."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12-L14")," - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," example, we used the ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returning an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<T>"),". If the type implements ",(0,r.kt)("inlineCode",{parentName:"li"},"Default")," trait, you can call ",(0,r.kt)("inlineCode",{parentName:"li"},"get_or_default()")," function and the contract does not fail even if the value is not initialized."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29")," - The second ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," is not an odra module, in other words these function will not be a part of contract's ABI."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30-L39")," - Mint function is public, so like in a regular rust code will be accessible from the outside. ",(0,r.kt)("inlineCode",{parentName:"li"},"mint()")," use notation ",(0,r.kt)("inlineCode",{parentName:"li"},"self.balances.add(&address, amount);"),", which it is syntactic sugar for:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"let current_balance = self.balances.get(&address).unwrap_or_default();\nlet new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();\nself.balances.set(&address, new_balance);\n")),(0,r.kt)("h3",{id:"core"},"Core"),(0,r.kt)("p",null,"For the sake of completeness, let's implement the remaining functionalities like ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_from"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"approve"),". They are not introducing any new concepts, so we leave them without additional remarks."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs",title:"erc20.rs"},"#[odra::module]\nimpl Erc20 {\n ...\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n let caller = contract_env::caller();\n self.raw_transfer(&caller, recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let spender = contract_env::caller();\n self.spend_allowance(owner, &spender, amount);\n self.raw_transfer(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n let owner = contract_env::caller();\n self.allowances.get_instance(&owner).set(spender, *amount);\n Approval {\n owner,\n spender: *spender,\n value: *amount\n }\n .emit();\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.balances.get_or_default(&address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.allowances.get_instance(owner).get_or_default(spender)\n }\n}\n\nimpl Erc20 {\n ...\n\n fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let owner_balance = self.balances.get_or_default(&owner);\n if *amount > owner_balance {\n contract_env::revert(Error::InsufficientBalance)\n }\n self.balances.set(owner, owner_balance - *amount);\n self.balances.add(recipient, *amount);\n Transfer {\n from: Some(*owner),\n to: Some(*recipient),\n amount: *amount\n }\n .emit();\n }\n\n fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {\n let allowance = self.allowances.get_instance(owner).get_or_default(spender);\n if allowance < *amount {\n contract_env::revert(Error::InsufficientAllowance)\n }\n let new_allowance = allowance - *amount;\n self.allowances\n .get_instance(owner)\n .set(spender, new_allowance);\n Approval {\n owner: *owner,\n spender: *spender,\n value: allowance - *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Approval {\n pub owner: Address,\n pub spender: Address,\n pub value: U256\n}\n\nexecution_error! {\n pub enum Error {\n InsufficientBalance => 1,\n InsufficientAllowance => 2,\n }\n}\n")),(0,r.kt)("p",null,"Now, compare the code we have written, with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"},"Open Zeppelin code"),". Out of 10, how Solidity-ish is our implementation?"),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},'#[cfg(test)]\npub mod tests {\n use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};\n use odra::{assert_events, test_env, types::U256};\n\n pub const NAME: &str = "Plascoin";\n pub const SYMBOL: &str = "PLS";\n pub const DECIMALS: u8 = 10;\n pub const INITIAL_SUPPLY: u32 = 10_000;\n\n pub fn setup() -> Erc20Ref {\n Erc20Deployer::init(\n String::from(NAME),\n String::from(SYMBOL),\n DECIMALS,\n INITIAL_SUPPLY.into()\n )\n }\n\n #[test]\n fn initialization() {\n let erc20 = setup();\n\n assert_eq!(&erc20.symbol(), SYMBOL);\n assert_eq!(&erc20.name(), NAME);\n assert_eq!(erc20.decimals(), DECIMALS);\n assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());\n assert_events!(\n erc20,\n Transfer {\n from: None,\n to: Some(test_env::get_account(0)),\n amount: INITIAL_SUPPLY.into()\n }\n );\n }\n\n #[test]\n fn transfer_works() {\n let mut erc20 = setup();\n let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n erc20.transfer(&recipient, &amount);\n\n assert_eq!(\n erc20.balance_of(&sender),\n U256::from(INITIAL_SUPPLY) - amount\n );\n assert_eq!(erc20.balance_of(&recipient), amount);\n assert_events!(\n erc20,\n Transfer {\n from: Some(sender),\n to: Some(recipient),\n amount\n }\n );\n }\n\n #[test]\n fn transfer_error() {\n let mut erc20 = setup();\n let recipient = test_env::get_account(1);\n let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);\n\n test_env::assert_exception(Error::InsufficientBalance, || {\n erc20.transfer(&recipient, &amount)\n });\n }\n\n #[test]\n fn transfer_from_and_approval_work() {\n let mut erc20 = setup();\n let (owner, recipient, spender) = (\n test_env::get_account(0),\n test_env::get_account(1),\n test_env::get_account(2)\n );\n let approved_amount = 3_000.into();\n let transfer_amount = 1_000.into();\n\n // Owner approves Spender.\n erc20.approve(&spender, &approved_amount);\n\n // Allowance was recorded.\n assert_eq!(erc20.allowance(&owner, &spender), approved_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount\n }\n );\n\n // Spender transfers tokens from Owner to Recipient.\n test_env::set_caller(spender);\n erc20.transfer_from(&owner, &recipient, &transfer_amount);\n\n // Tokens are transferred and allowance decremented.\n assert_eq!(\n erc20.balance_of(&owner),\n U256::from(INITIAL_SUPPLY) - transfer_amount\n );\n assert_eq!(erc20.balance_of(&recipient), transfer_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount - transfer_amount\n },\n Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount: transfer_amount\n }\n );\n \n assert_events!(erc20, Approval, Transfer);\n }\n\n #[test]\n fn transfer_from_error() {\n let mut erc20 = setup();\n let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n test_env::set_caller(spender);\n test_env::assert_exception(Error::InsufficientAllowance, || {\n erc20.transfer_from(&owner, &spender, &amount)\n });\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L111-123")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events!()")," macro accepts multiple events. You must pass them in the order they were emitted. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L125")," - Alternatively, if you don't want to check the entire event, you may assert only its type.")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"You can not mix both approaches, you pass full events or types only.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"Having two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", let's combine them, and create an ERC-20 on steroids."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/90c053b1.c73461b8.js b/docs/assets/js/90c053b1.c73461b8.js new file mode 100644 index 000000000..d04402431 --- /dev/null +++ b/docs/assets/js/90c053b1.c73461b8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4593],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=a,h=p["".concat(l,".").concat(m)]||p[m]||u[m]||o;return n?r.createElement(h,s(s({ref:t},d),{},{components:n})):r.createElement(h,s({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},42345:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:7,description:"How to write tests in Odra"},s="Testing",i={unversionedId:"basics/testing",id:"version-0.3.1/basics/testing",title:"Testing",description:"How to write tests in Odra",source:"@site/versioned_docs/version-0.3.1/basics/07-testing.md",sourceDirName:"basics",slug:"/basics/testing",permalink:"/docs/0.3.1/basics/testing",draft:!1,tags:[],version:"0.3.1",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"How to write tests in Odra"},sidebar:"tutorialSidebar",previous:{title:"Host Communication",permalink:"/docs/0.3.1/basics/communicating-with-host"},next:{title:"Errors",permalink:"/docs/0.3.1/basics/errors"}},l={},c=[{value:"Test env",id:"test-env",level:2},{value:"Deployer",id:"deployer",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write\nregular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the\nprevious article:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},'use odra::{Variable, List};\n\n#[cfg(test)]\nmod tests {\n use super::DogContract3Deployer;\n\n #[test]\n fn init_test() {\n let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n assert_eq!(dog_contract.walks_amount(), 0);\n assert_eq!(dog_contract.walks_total_length(), 0);\n dog_contract.walk_the_dog(5);\n dog_contract.walk_the_dog(10);\n assert_eq!(dog_contract.walks_amount(), 2);\n assert_eq!(dog_contract.walks_total_length(), 15);\n }\n}\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(module)]")," macro created a Deployer code for us, which will deploy the contract on the\nVM:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},'let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n')),(0,a.kt)("p",null,"From now on, we can use ",(0,a.kt)("inlineCode",{parentName:"p"},"dog_contract")," to interact with our deployed contract - in particular, all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from the impl section that was annotated with a macro are available to us:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"// Impl\npub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n}\n\n...\n\n// Test\ndog_contract.walk_the_dog(5);\n")),(0,a.kt)("h2",{id:"test-env"},"Test env"),(0,a.kt)("p",null,"Odra gives us some additional functions that we can use to communicate with the host (outside the contract context)\nand to configure how the contracts are deployed and called. Let's revisit the example from the previous\narticle about host communication and implement the tests that prove it works:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/testing.rs"',title:'"examples/src/docs/testing.rs"'},'#[cfg(test)]\nmod tests {\n use super::TestingContractDeployer;\n\n #[test]\n fn test_env() {\n let testing_contract = TestingContractDeployer::init("MyContract".to_string());\n let creator = testing_contract.created_by();\n odra::test_env::set_caller(odra::test_env::get_account(1));\n let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());\n let creator2 = testing_contract2.created_by();\n assert!(creator != creator2);\n }\n}\n')),(0,a.kt)("p",null,"In the code above, we are deploying two instances of the same contract, but we're using ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::test_env::set_caller"),"\nto change the caller - so the Address which is deploying the contract. This changes the result of the ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::contract_env::caller()"),"\nthe function we are calling inside the contract."),(0,a.kt)("p",null,"Each test env comes with a set of functions that will let you write better tests:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn set_caller(address: Address)")," - you've seen it in action just now"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn token_balance(address: Address) -> Balance")," - it returns the balance of the account associated with the given address"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn advance_block_time_by(seconds: BlockTime)")," - it increases the current value of block_time"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_account(n: usize) -> Address")," - it returns an nth address that was prepared for you by Odra in advance;\nby default, you start with the 0th account"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn assert_exception<F, E>(err: E, block: F)")," - it executes the ",(0,a.kt)("inlineCode",{parentName:"li"},"block")," code and expects ",(0,a.kt)("inlineCode",{parentName:"li"},"err")," to happen"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError>")," - returns\nthe event emitted by the contract")),(0,a.kt)("p",null,"Again, we'll see those used in the next articles."),(0,a.kt)("h2",{id:"deployer"},"Deployer"),(0,a.kt)("p",null,"You may be wondering what is the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractDeployer")," and where did it come from.\nIt is a piece of code generated automatically for you, thanks to the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nIf you used the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," on one of the methods, it will be the constructor of your contract.\nOdra will make sure that it is called only once, so you can use it to initialize your data structures etc."),(0,a.kt)("p",null,"If you do not provide the init method, you can deploy the contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"::default()")," method.\nIn the end, you will get a ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," instance (in our case the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractRef"),") which reimplements all\nthe methods you defined in the contract, but executes them on a blockchain!"),(0,a.kt)("p",null,"To learn more about the ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," contract, visit the ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.1/basics/cross-calls"},"Cross calls")," article."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We take a look at how Odra handles errors!"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/90f06335.95264650.js b/docs/assets/js/90f06335.95264650.js new file mode 100644 index 000000000..0bddd5425 --- /dev/null +++ b/docs/assets/js/90f06335.95264650.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1459],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=d(t),m=r,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},p),{},{components:t})):a.createElement(f,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=c;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},58009:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:2},l="Using odra-modules",i={unversionedId:"examples/using-odra-modules",id:"version-0.4.0/examples/using-odra-modules",title:"Using odra-modules",description:"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.",source:"@site/versioned_docs/version-0.4.0/examples/using-odra-modules.md",sourceDirName:"examples",slug:"/examples/using-odra-modules",permalink:"/docs/0.4.0/examples/using-odra-modules",draft:!1,tags:[],version:"0.4.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"odra-examples",permalink:"/docs/0.4.0/examples/odra-examples"},next:{title:"Tutorials",permalink:"/docs/0.4.0/category/tutorials"}},s={},d=[{value:"Available modules",id:"available-modules",level:2},{value:"Tokens",id:"tokens",level:3},{value:"Erc20",id:"erc20",level:4},{value:"Erc721",id:"erc721",level:4},{value:"Erc1155",id:"erc1155",level:4},{value:"Wrapped native token",id:"wrapped-native-token",level:4},{value:"Access",id:"access",level:3},{value:"AccessControl",id:"accesscontrol",level:4},{value:"Ownable",id:"ownable",level:4},{value:"Ownable2Step",id:"ownable2step",level:4},{value:"Security",id:"security",level:3},{value:"Pauseable",id:"pauseable",level:4}],p={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"using-odra-modules"},"Using odra-modules"),(0,r.kt)("p",null,"Besides the Odra framework, you can attach to your project ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-module")," - a set of plug-and-play modules."),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/getting-started/installation"},"Installation guide")," your Cargo.toml should look like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,r.kt)("p",null,"To use ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules"),", edit your ",(0,r.kt)("inlineCode",{parentName:"p"},"dependency")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"features")," sections."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[dependencies]\nodra = { path = "../core", default-features = false }\nodra-modules = { path = "../modules", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]\ncasper = ["odra/casper", "odra-modules/casper"]\n')),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules")," defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," feature in your project, add ",(0,r.kt)("inlineCode",{parentName:"p"},"odra-modules/casper"),"specifically (it applies to each backend).")),(0,r.kt)("p",null,"Now, the only thing left is to add a module to your contract."),(0,r.kt)("p",null,"Let's write an example of ",(0,r.kt)("inlineCode",{parentName:"p"},"MyToken")," based on ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::types::{Address, U256};\nuse odra_modules::erc20::Erc20;\n\n#[odra::module]\npub struct MyToken {\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, initial_supply: U256) {\n let name = String::from("MyToken");\n let symbol = String::from("MT");\n let decimals = 9u8;\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n self.erc20.approve(spender, amount);\n }\n}\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All available modules are placed in the main Odra repository.")),(0,r.kt)("h2",{id:"available-modules"},"Available modules"),(0,r.kt)("p",null,"Odra modules comes with couple of ready-to-use modules and reusable extensions."),(0,r.kt)("h3",{id:"tokens"},"Tokens"),(0,r.kt)("h4",{id:"erc20"},"Erc20"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"ERC20")," standard."),(0,r.kt)("h4",{id:"erc721"},"Erc721"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-721"},"ERC721")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC721Base")," and additionally uses\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extensions."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Receiver")," trait lets you implement your own logic for receiving NFTs."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc721WithMetadata")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Token"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc721Metadata")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"erc1155"},"Erc1155"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Base")," module implements the ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-1155"},"ERC1155")," standard, adjusted for the Odra framework."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," module implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"ERC1155Base")," and additionally uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," extension."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedErc1155")," trait is a combination of ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc1155Token")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," modules."),(0,r.kt)("h4",{id:"wrapped-native-token"},"Wrapped native token"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"WrappedNativeToken")," module implements the Wrapper for the native token,\nit was inspired by the WETH."),(0,r.kt)("h3",{id:"access"},"Access"),(0,r.kt)("h4",{id:"accesscontrol"},"AccessControl"),(0,r.kt)("p",null,"This module enables the implementation of role-based access control mechanisms for children\nmodules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API."),(0,r.kt)("h4",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner."),(0,r.kt)("p",null,"The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the\n",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," function."),(0,r.kt)("h4",{id:"ownable2step"},"Ownable2Step"),(0,r.kt)("p",null,"An extension of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module. "),(0,r.kt)("p",null,"Ownership can be transferred in a two-step process by using ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_ownership()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"accept_ownership()")," functions."),(0,r.kt)("h3",{id:"security"},"Security"),(0,r.kt)("h4",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"A module allowing to implement an emergency stop mechanism that can be triggered by any account."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/918e870d.7022f90d.js b/docs/assets/js/918e870d.7022f90d.js new file mode 100644 index 000000000..4aadb3c25 --- /dev/null +++ b/docs/assets/js/918e870d.7022f90d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3849],{38967:e=>{e.exports=JSON.parse('{"title":"Advanced","description":"Advanced concepts of Odra Framework","slug":"/category/advanced","permalink":"/docs/0.5.0/category/advanced","navigation":{"previous":{"title":"Native token","permalink":"/docs/0.5.0/basics/native-token"},"next":{"title":"Module reusing","permalink":"/docs/0.5.0/advanced/using"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/919c36c8.b43927bb.js b/docs/assets/js/919c36c8.b43927bb.js new file mode 100644 index 000000000..8b5dc28c2 --- /dev/null +++ b/docs/assets/js/919c36c8.b43927bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8221],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?n(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,o,a=function(e,r){if(null==e)return{};var t,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},c=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return t?o.createElement(f,l(l({ref:r},c),{},{components:t})):o.createElement(f,l({ref:r},c))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,l=new Array(n);l[0]=u;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<n;p++)l[p]=t[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},96739:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var o=t(87462),a=(t(67294),t(3905));const n={sidebar_position:1},l="odra-examples",i={unversionedId:"examples/odra-examples",id:"version-0.5.0/examples/odra-examples",title:"odra-examples",description:"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.",source:"@site/versioned_docs/version-0.5.0/examples/odra-examples.md",sourceDirName:"examples",slug:"/examples/odra-examples",permalink:"/docs/0.5.0/examples/odra-examples",draft:!1,tags:[],version:"0.5.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Examples",permalink:"/docs/0.5.0/category/examples"},next:{title:"Using odra-modules",permalink:"/docs/0.5.0/examples/using-odra-modules"}},s={},p=[{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odra-examples"},"odra-examples"),(0,a.kt)("p",null,"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the ",(0,a.kt)("inlineCode",{parentName:"p"},"examples")," in the Odra main repository."),(0,a.kt)("p",null,'The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.'),(0,a.kt)("p",null,"Don't worry if you find learning solely by reading the code challenging. Go to the ",(0,a.kt)("a",{parentName:"p",href:"../category/tutorials/"},"Tutorial")," section, where we will review it together. We will break the code into pieces, leaving no space for further questions."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn about reusable Odra components encapsulated in ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/91b04621.9d61b848.js b/docs/assets/js/91b04621.9d61b848.js new file mode 100644 index 000000000..8663a5d1a --- /dev/null +++ b/docs/assets/js/91b04621.9d61b848.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9809],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(a),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||s;return a?n.createElement(f,i(i({ref:t},u),{},{components:a})):n.createElement(f,i({ref:t},u))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var p=2;p<s;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},38392:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const s={sidebar_position:5,description:"How to write data into blockchain's storage"},i="Storage interaction",o={unversionedId:"basics/storage-interaction",id:"version-0.7.0/basics/storage-interaction",title:"Storage interaction",description:"How to write data into blockchain's storage",source:"@site/versioned_docs/version-0.7.0/basics/05-storage-interaction.md",sourceDirName:"basics",slug:"/basics/storage-interaction",permalink:"/docs/basics/storage-interaction",draft:!1,tags:[],version:"0.7.0",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"How to write data into blockchain's storage"},sidebar:"tutorialSidebar",previous:{title:"Flipper Internals",permalink:"/docs/basics/flipper-internals"},next:{title:"Host Communication",permalink:"/docs/basics/communicating-with-host"}},l={},p=[{value:"Variable",id:"variable",level:2},{value:"Mapping",id:"mapping",level:2},{value:"List",id:"list",level:2},{value:"Custom Types",id:"custom-types",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-interaction"},"Storage interaction"),(0,r.kt)("p",null,"The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go\nthrough all of them and explain their pros and cons."),(0,r.kt)("h2",{id:"variable"},"Variable"),(0,r.kt)("p",null,"The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your\nvariable in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),' type. Let\'s look at a "real world" example of a contract that represents a dog:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"#[odra::module]\npub struct DogContract {\n barks: Variable<bool>,\n weight: Variable<u32>,\n name: Variable<String>,\n walks: Variable<Vec<u32>>,\n}\n")),(0,r.kt)("p",null,"You can see the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," wrapping the data. Even complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," can be wrapped (with some caveats)!"),(0,r.kt)("p",null,"Let's make this contract usable, by providing a constructor and some getter functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"use odra::Variable;\n\n#[odra::module]\nimpl DogContract {\n #[odra(init)]\n pub fn init(&mut self, barks: bool, weight: u32, name: String) {\n self.barks.set(barks);\n self.weight.set(weight);\n self.name.set(name);\n self.walks.set(Vec::<u32>::default());\n }\n\n pub fn barks(&self) -> bool {\n self.barks.get_or_default()\n }\n\n pub fn weight(&self) -> u32 {\n self.weight.get_or_default()\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.len() as u32\n }\n\n pub fn walks_total_length(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.iter().sum()\n }\n}\n")),(0,r.kt)("p",null,"As you can see, you can access the data, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"get_or_default")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"...\nself.barks.get_or_default()\n...\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Keep in mind that using ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," will result in an Option that you'll need to unwrap - the variable\ndoesn't have to be initialized!")),(0,r.kt)("p",null,"To modify the data, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"set()")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"self.barks.set(barks);\n")),(0,r.kt)("p",null,"A Variable is easy to use and efficient for simple data types. One of its downsides is that it\nserializes the data as a whole, so when you're using complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap"),",\neach time you ",(0,r.kt)("inlineCode",{parentName:"p"},"get")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," the whole data is read and written to the blockchain storage."),(0,r.kt)("p",null,"In the example above, if we want to see how many walks our dog had, we would use the function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/variable.rs"',title:'"examples/src/features/storage/variable.rs"'},"pub fn walks_amount(&self) -> usize {\n let walks = self.walks.get_or_default();\n walks.len()\n}\n")),(0,r.kt)("p",null,"But to do so, we need to extract the whole serialized vector from the storage, which would inefficient,\nespecially for larger sets of data."),(0,r.kt)("p",null,"To tackle this issue following two types were created."),(0,r.kt)("h2",{id:"mapping"},"Mapping"),(0,r.kt)("p",null,"The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to\npass two values - the key type and the value type. Let's look at the variation of the Dog contract, that\nuses Mapping to store information about our dog's friends and how many times they visited:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"use odra::{Mapping, Variable};\n\n#[odra::module]\npub struct DogContract2 {\n name: Variable<String>,\n friends: Mapping<String, u32>,\n}\n")),(0,r.kt)("p",null,"In the example above, our key is a String (it is a name of the friend) and we are storing u32 values\n(amount of visits). To read and write values from and into a Mapping we use a similar approach\nto the one shown in the Variables section with one difference - we need to pass a key:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"pub fn visit(&mut self, friend_name: String) {\n let visits = self.visits(friend_name.clone());\n self.friends.set(&friend_name, visits + 1);\n}\n\npub fn visits(&self, friend_name: String) -> u32 {\n self.friends.get_or_default(&friend_name)\n}\n")),(0,r.kt)("p",null,"The biggest improvement over a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," is that we can model functionality of a ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap")," using ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nThe amount of data written to and read from the storage is minimal. However, we cannot iterate over ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nWe could implement such behavior by using a numeric type key and saving the length of the set in a\nseparate variable. Thankfully Odra comes with a prepared solution - the ",(0,r.kt)("inlineCode",{parentName:"p"},"List")," type."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with\na Variable working together:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="core/src/list.rs"',title:'"core/src/list.rs"'},"use odra::{Variable, List};\n\npub struct List<T> {\n values: Mapping<u32, T>,\n index: Variable<u32>\n}\n"))),(0,r.kt)("h2",{id:"list"},"List"),(0,r.kt)("p",null,"Going back to our DogContract example - let's revisit the walk case. This time, instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),",\nwe'll use the list:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"#[odra::module]\npub struct DogContract3 {\n name: Variable<String>,\n walks: List<u32>,\n}\n")),(0,r.kt)("p",null,"As you can see, the notation is very similar to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),". To understand the usage, take a look\nat the reimplementation of the functions with an additional function that takes our dog for a walk\n(it writes the data to the storage):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"#[odra::module]\nimpl DogContract3 {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n self.walks.len()\n }\n\n pub fn walks_total_length(&self) -> u32 {\n self.walks.iter().sum()\n }\n\n pub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n }\n}\n")),(0,r.kt)("p",null,"Now, we can know how many walks our dog had without loading the whole vector from the storage.\nWe need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all\nthe cases for you."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All of the above examples, alongside the tests, are available in the odra repository in the ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/docs/")," folder.")),(0,r.kt)("h2",{id:"custom-types"},"Custom Types"),(0,r.kt)("p",null,"By default you can store only built-in types like numbers, Options, Results, Strings, Vectors."),(0,r.kt)("p",null,"Implementing custom types is straightforward, your type must derive from ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType"),": "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Address, OdraType};\n\n#[derive(OdraType)]\npub struct Dog {\n pub name: String,\n pub age: u8,\n pub owner: Option<Address>\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Each field of your struct must be an OdraType.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next article, we'll see how to query the host for information about the world and our contract."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/93514764.0f5af50a.js b/docs/assets/js/93514764.0f5af50a.js new file mode 100644 index 000000000..5a9c66a8e --- /dev/null +++ b/docs/assets/js/93514764.0f5af50a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3336],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(r),d=a,f=m["".concat(c,".").concat(d)]||m[d]||p[d]||o;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},92755:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var n=r(87462),a=(r(67294),r(3905));const o={slug:"its-all-about-the-community",title:"It's all about the community!",authors:["zie1ony"],image:"./roadmap.png"},i=void 0,l={permalink:"/blog/its-all-about-the-community",source:"@site/blog/2023-06-27-we-are-here-to-stay/index.md",title:"It's all about the community!",description:"Over the past months,",date:"2023-06-27T00:00:00.000Z",formattedDate:"June 27, 2023",tags:[],readingTime:2.825,hasTruncateMarker:!0,authors:[{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"its-all-about-the-community",title:"It's all about the community!",authors:["zie1ony"],image:"./roadmap.png"},prevItem:{title:"Nysa",permalink:"/blog/Nysa"},nextItem:{title:"OpenAI writes ERC20 in Odra",permalink:"/blog/2023-02-27-openai-writes-erc20-in-odra"}},c={image:r(32899).Z,authorsImageUrls:[void 0]},s=[],u={toc:s};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Over the past months,\nwe have been working hard on bringing Odra to the Casper world.\nWhile we are proud of what we have achieved so far,\nthe hard part is just beginning.\nSmart contract developers from outside of our team are starting to use Odra.\nWe are thrilled about it and here is how we are going to support the community."))}p.isMDXComponent=!0},32899:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/roadmap-8255e4b08deb4134a7e97e32c21ad0dc.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/935f2afb.647dfe49.js b/docs/assets/js/935f2afb.647dfe49.js new file mode 100644 index 000000000..3980a234e --- /dev/null +++ b/docs/assets/js/935f2afb.647dfe49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"0.8.0","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Odra framework","href":"/docs/next/","docId":"intro"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs/next/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Flipper example","href":"/docs/next/getting-started/flipper","docId":"getting-started/flipper"}],"href":"/docs/next/category/getting-started"},{"type":"category","label":"Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Cargo Odra","href":"/docs/next/basics/cargo-odra","docId":"basics/cargo-odra"},{"type":"link","label":"Directory structure","href":"/docs/next/basics/directory-structure","docId":"basics/directory-structure"},{"type":"link","label":"Odra.toml","href":"/docs/next/basics/odra-toml","docId":"basics/odra-toml"},{"type":"link","label":"Flipper Internals","href":"/docs/next/basics/flipper-internals","docId":"basics/flipper-internals"},{"type":"link","label":"Storage interaction","href":"/docs/next/basics/storage-interaction","docId":"basics/storage-interaction"},{"type":"link","label":"Host Communication","href":"/docs/next/basics/communicating-with-host","docId":"basics/communicating-with-host"},{"type":"link","label":"Testing","href":"/docs/next/basics/testing","docId":"basics/testing"},{"type":"link","label":"Errors","href":"/docs/next/basics/errors","docId":"basics/errors"},{"type":"link","label":"Events","href":"/docs/next/basics/events","docId":"basics/events"},{"type":"link","label":"Cross calls","href":"/docs/next/basics/cross-calls","docId":"basics/cross-calls"},{"type":"link","label":"Modules","href":"/docs/next/basics/modules","docId":"basics/modules"},{"type":"link","label":"Native token","href":"/docs/next/basics/native-token","docId":"basics/native-token"}],"href":"/docs/next/category/basics"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Delegate","href":"/docs/next/advanced/delegate","docId":"advanced/delegate"},{"type":"link","label":"Advanced Storage Concepts","href":"/docs/next/advanced/advanced-storage","docId":"advanced/advanced-storage"},{"type":"link","label":"Attributes","href":"/docs/next/advanced/attributes","docId":"advanced/attributes"},{"type":"link","label":"Storage Layout","href":"/docs/next/advanced/storage-layout","docId":"advanced/storage-layout"}],"href":"/docs/next/category/advanced"},{"type":"category","label":"Backends","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is a backend?","href":"/docs/next/backends/what-is-a-backend","docId":"backends/what-is-a-backend"},{"type":"link","label":"OdraVM","href":"/docs/next/backends/odra-vm","docId":"backends/odra-vm"},{"type":"link","label":"Casper","href":"/docs/next/backends/casper","docId":"backends/casper"},{"type":"link","label":"Livenet","href":"/docs/next/backends/livenet","docId":"backends/livenet"}],"href":"/docs/next/category/backends"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"odra-examples","href":"/docs/next/examples/odra-examples","docId":"examples/odra-examples"},{"type":"link","label":"Using odra-modules","href":"/docs/next/examples/using-odra-modules","docId":"examples/using-odra-modules"}],"href":"/docs/next/category/examples"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ownable","href":"/docs/next/tutorials/ownable","docId":"tutorials/ownable"},{"type":"link","label":"ERC-20","href":"/docs/next/tutorials/erc20","docId":"tutorials/erc20"},{"type":"link","label":"OwnedToken","href":"/docs/next/tutorials/owned-token","docId":"tutorials/owned-token"},{"type":"link","label":"Access Control","href":"/docs/next/tutorials/access-control","docId":"tutorials/access-control"},{"type":"link","label":"Pauseable","href":"/docs/next/tutorials/pauseable","docId":"tutorials/pauseable"}],"href":"/docs/next/category/tutorials"},{"type":"category","label":"Migrations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Migration guide to v0.8.0","href":"/docs/next/migrations/to-0.8.0","docId":"migrations/to-0.8.0"}],"href":"/docs/next/category/migrations"}]},"docs":{"advanced/advanced-storage":{"id":"advanced/advanced-storage","title":"Advanced Storage Concepts","description":"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.","sidebar":"tutorialSidebar"},"advanced/attributes":{"id":"advanced/attributes","title":"Attributes","description":"Smart contract developers with Ethereum background are familiar with Solidity\'s concept of modifiers in Solidity - a feature that","sidebar":"tutorialSidebar"},"advanced/delegate":{"id":"advanced/delegate","title":"Delegate","description":"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.","sidebar":"tutorialSidebar"},"advanced/storage-layout":{"id":"advanced/storage-layout","title":"Storage Layout","description":"Odra\'s innovative modular design necessitates a unique storage layout. This","sidebar":"tutorialSidebar"},"backends/casper":{"id":"backends/casper","title":"Casper","description":"The Casper backend allows you to compile your contracts into WASM files which can be deployed","sidebar":"tutorialSidebar"},"backends/livenet":{"id":"backends/livenet","title":"Livenet","description":"The Livenet backend let us deploy and test the contracts on the real blockchain. It can be a local","sidebar":"tutorialSidebar"},"backends/odra-vm":{"id":"backends/odra-vm","title":"OdraVM","description":"The OdraVM is a simple implementation of a mock backend with a minimal set of features that allows testing","sidebar":"tutorialSidebar"},"backends/what-is-a-backend":{"id":"backends/what-is-a-backend","title":"What is a backend?","description":"You can think of a backend as a target platform for your smart contract.","sidebar":"tutorialSidebar"},"basics/cargo-odra":{"id":"basics/cargo-odra","title":"Cargo Odra","description":"A tool for managing Odra projects","sidebar":"tutorialSidebar"},"basics/communicating-with-host":{"id":"basics/communicating-with-host","title":"Host Communication","description":"How to get information from the Host","sidebar":"tutorialSidebar"},"basics/cross-calls":{"id":"basics/cross-calls","title":"Cross calls","description":"Contracts calling contracts","sidebar":"tutorialSidebar"},"basics/directory-structure":{"id":"basics/directory-structure","title":"Directory structure","description":"Files and folders in the Odra project","sidebar":"tutorialSidebar"},"basics/errors":{"id":"basics/errors","title":"Errors","description":"Causing and handling errors","sidebar":"tutorialSidebar"},"basics/events":{"id":"basics/events","title":"Events","description":"Creating and emitting Events","sidebar":"tutorialSidebar"},"basics/flipper-internals":{"id":"basics/flipper-internals","title":"Flipper Internals","description":"Detailed explanation of the Flipper contract","sidebar":"tutorialSidebar"},"basics/modules":{"id":"basics/modules","title":"Modules","description":"Divide your code into modules","sidebar":"tutorialSidebar"},"basics/native-token":{"id":"basics/native-token","title":"Native token","description":"How to deposit, withdraw and transfer","sidebar":"tutorialSidebar"},"basics/odra-toml":{"id":"basics/odra-toml","title":"Odra.toml","description":"Odra\'s configuration file","sidebar":"tutorialSidebar"},"basics/storage-interaction":{"id":"basics/storage-interaction","title":"Storage interaction","description":"How to write data into blockchain\'s storage","sidebar":"tutorialSidebar"},"basics/testing":{"id":"basics/testing","title":"Testing","description":"How to write tests in Odra","sidebar":"tutorialSidebar"},"examples/odra-examples":{"id":"examples/odra-examples","title":"odra-examples","description":"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the [Odra main repository].","sidebar":"tutorialSidebar"},"examples/using-odra-modules":{"id":"examples/using-odra-modules","title":"Using odra-modules","description":"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.","sidebar":"tutorialSidebar"},"getting-started/flipper":{"id":"getting-started/flipper","title":"Flipper example","description":"To quickly start working with Odra, take a look at the following code sample. If you followed the","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Hello fellow Odra user! This page will guide you through the installation process.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Odra framework","description":"Odra Docs","sidebar":"tutorialSidebar"},"migrations/to-0.8.0":{"id":"migrations/to-0.8.0","title":"Migration guide to v0.8.0","description":"Migration guide to v0.8.0","sidebar":"tutorialSidebar"},"tutorials/access-control":{"id":"tutorials/access-control","title":"Access Control","description":"In a previous tutorial, we introduced the Ownable module, which serves the purpose of securing access to specific contract features. While it establishes a fundamental security layer, there are numerous scenarios where this level of security is insufficient,","sidebar":"tutorialSidebar"},"tutorials/erc20":{"id":"tutorials/erc20","title":"ERC-20","description":"It\'s time for something that every smart contract developer has done at least once. Let\'s try to implement Erc20 standard. Of course, we are going to use the Odra Framework.","sidebar":"tutorialSidebar"},"tutorials/ownable":{"id":"tutorials/ownable","title":"Ownable","description":"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract\'s critical features.","sidebar":"tutorialSidebar"},"tutorials/owned-token":{"id":"tutorials/owned-token","title":"OwnedToken","description":"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.","sidebar":"tutorialSidebar"},"tutorials/pauseable":{"id":"tutorials/pauseable","title":"Pauseable","description":"The Pauseable module is like your smart contract\'s safety switch. It lets authorized users temporarily pause certain features if needed. It\'s a great way to boost security, but it\'s not meant to be used on its own. Think of it as an extra tool in your access control toolbox, giving you more control to manage your smart contract safely and efficiently.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/94723368.7d3ff207.js b/docs/assets/js/94723368.7d3ff207.js new file mode 100644 index 000000000..b7a68956a --- /dev/null +++ b/docs/assets/js/94723368.7d3ff207.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4916],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=o,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||s;return n?r.createElement(f,a(a({ref:t},c),{},{components:n})):r.createElement(f,a({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,a=new Array(s);a[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var u=2;u<s;u++)a[u]=n[u];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},53568:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var r=n(87462),o=(n(67294),n(3905));const s={sidebar_position:11,description:"Divide your code into modules"},a="Modules",i={unversionedId:"basics/modules",id:"version-0.5.0/basics/modules",title:"Modules",description:"Divide your code into modules",source:"@site/versioned_docs/version-0.5.0/basics/11-modules.md",sourceDirName:"basics",slug:"/basics/modules",permalink:"/docs/0.5.0/basics/modules",draft:!1,tags:[],version:"0.5.0",sidebarPosition:11,frontMatter:{sidebar_position:11,description:"Divide your code into modules"},sidebar:"tutorialSidebar",previous:{title:"Cross calls",permalink:"/docs/0.5.0/basics/cross-calls"},next:{title:"Native token",permalink:"/docs/0.5.0/basics/native-token"}},l={},u=[{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:u};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you\nwrite is also a module, thanks to a macro ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),'. This means that we can easily rewrite our math\nexample from the previous article, to use a single contract, but still separate our "math" code:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/modules.rs"',title:'"examples/src/features/modules.rs"'},"use crate::features::cross_calls::MathEngine;\n\n#[odra::module]\npub struct ModulesContract {\n pub math_engine: MathEngine,\n}\n\n#[odra::module]\nimpl ModulesContract {\n pub fn add_using_module(&self) -> u32 {\n self.math_engine.add(3, 5)\n }\n}\n")),(0,o.kt)("p",null,"Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as\na module!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"As we don't need to hold addresses, the test is really simple:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/modules.rs"',title:'"examples/src/features/modules.rs"'},"use super::ModulesContractDeployer;\n\n#[test]\nfn test_modules() {\n let modules_contract = ModulesContractDeployer::default();\n assert_eq!(modules_contract.add_using_module(), 8);\n}\n")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will see how to handle native token transfers."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/95db938c.ffeb697c.js b/docs/assets/js/95db938c.ffeb697c.js new file mode 100644 index 000000000..8b234d361 --- /dev/null +++ b/docs/assets/js/95db938c.ffeb697c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6145],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=o,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||s;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,a=new Array(s);a[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var c=2;c<s;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},99314:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(87462),o=(n(67294),n(3905));const s={sidebar_position:11,description:"Divide your code into modules"},a="Modules",i={unversionedId:"basics/modules",id:"version-0.2.0/basics/modules",title:"Modules",description:"Divide your code into modules",source:"@site/versioned_docs/version-0.2.0/basics/11-modules.md",sourceDirName:"basics",slug:"/basics/modules",permalink:"/docs/0.2.0/basics/modules",draft:!1,tags:[],version:"0.2.0",sidebarPosition:11,frontMatter:{sidebar_position:11,description:"Divide your code into modules"},sidebar:"defaultSidebar",previous:{title:"Cross calls",permalink:"/docs/0.2.0/basics/cross-calls"},next:{title:"Native token",permalink:"/docs/0.2.0/basics/native-token"}},l={},c=[{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you\nwrite is also a module, thanks to a macro ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),'. This means that we can easily rewrite our math\nexample from the previous article, to use a single contract, but still separate our "math" code:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/modules.rs"',title:'"examples/src/docs/modules.rs"'},"use crate::docs::cross_calls::MathEngine;\n\n#[odra::module]\npub struct ModulesContract {\n pub math_engine: MathEngine,\n}\n\n#[odra::module]\nimpl ModulesContract {\n pub fn add_using_module(&self) -> u32 {\n self.math_engine.add(3, 5)\n }\n}\n")),(0,o.kt)("p",null,"Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as\na module!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"As we don't need to hold addresses, the test is really simple:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/modules.rs"',title:'"examples/src/docs/modules.rs"'},"use super::ModulesContractDeployer;\n\n#[test]\nfn test_modules() {\n let modules_contract = ModulesContractDeployer::default();\n assert_eq!(modules_contract.add_using_module(), 8);\n}\n")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will see how to handle native token transfers."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/95f5ef42.da7d1e4e.js b/docs/assets/js/95f5ef42.da7d1e4e.js new file mode 100644 index 000000000..4e5e8d1c7 --- /dev/null +++ b/docs/assets/js/95f5ef42.da7d1e4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4296],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>g});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),c=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},l=function(e){var n=c(e.components);return a.createElement(p.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(t),g=r,m=u["".concat(p,".").concat(g)]||u[g]||d[g]||i;return t?a.createElement(m,o(o({ref:n},l),{},{components:t})):a.createElement(m,o({ref:n},l))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var c=2;c<i;c++)o[c]=t[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}u.displayName="MDXCreateElement"},29490:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=t(87462),r=(t(67294),t(3905));const i={},o="Advanced Storage Concepts",s={unversionedId:"advanced/advanced-storage",id:"version-0.6.0/advanced/advanced-storage",title:"Advanced Storage Concepts",description:"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.",source:"@site/versioned_docs/version-0.6.0/advanced/03-advanced-storage.md",sourceDirName:"advanced",slug:"/advanced/advanced-storage",permalink:"/docs/0.6.0/advanced/advanced-storage",draft:!1,tags:[],version:"0.6.0",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Delegate",permalink:"/docs/0.6.0/advanced/delegate"},next:{title:"Attributes",permalink:"/docs/0.6.0/advanced/attributes"}},p={},c=[{value:"Recap and Basic Concepts",id:"recap-and-basic-concepts",level:2},{value:"Advanced Storage Concepts",id:"advanced-storage-concepts-1",level:2},{value:"Sequence",id:"sequence",level:3},{value:"Advanced Mapping",id:"advanced-mapping",level:3},{value:"AdvancedStorage Contract",id:"advancedstorage-contract",level:2},{value:"Conclusion",id:"conclusion",level:2}],l={toc:c};function d(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"advanced-storage-concepts"},"Advanced Storage Concepts"),(0,r.kt)("p",null,"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Sequence")," modules, which are key components of the advanced storage interaction in Odra."),(0,r.kt)("h2",{id:"recap-and-basic-concepts"},"Recap and Basic Concepts"),(0,r.kt)("p",null,"Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),". These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Variable"),": A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Mapping"),": Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"List"),": Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over."),(0,r.kt)("p",null,"If you need a refresher on these topics, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/storage-interaction"},"guide")," on basic storage in Odra."),(0,r.kt)("h2",{id:"advanced-storage-concepts-1"},"Advanced Storage Concepts"),(0,r.kt)("h3",{id:"sequence"},"Sequence"),(0,r.kt)("p",null,"The Sequence in Odra is a basic module that holds a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," which keeps track of the current value. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub struct Sequence<T>\nwhere\n T: Num + One + OdraType\n{\n value: Variable<T>\n}\n")),(0,r.kt)("p",null,"The Sequence module provides functions ",(0,r.kt)("inlineCode",{parentName:"p"},"get_current_value")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"next_value")," to get the current value and increment the value respectively."),(0,r.kt)("h3",{id:"advanced-mapping"},"Advanced Mapping"),(0,r.kt)("p",null,"In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility."),(0,r.kt)("p",null,"Let's consider the following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"use odra::{map, types::U256, Mapping, UnwrapOrRevert};\n\nuse crate::owned_token::OwnedToken;\n\n#[odra::module]\npub struct NestedMapping {\n strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,\n tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>\n}\n\n#[odra::module]\nimpl NestedMapping {\n\n ...\n\n pub fn set_token(\n &mut self,\n key1: String,\n key2: u32,\n key3: String,\n token_name: String,\n decimals: u8,\n symbol: String,\n initial_supply: &U256\n ) {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .init(token_name, symbol, decimals, initial_supply);\n }\n\n pub fn get_string_api(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> String {\n let mapping = self.strings.get_instance(&key1).get_instance(&key2);\n mapping.get(&key3).unwrap_or_revert()\n }\n\n pub fn total_supply(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> U256 {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .total_supply()\n }\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers. "),(0,r.kt)("p",{parentName:"admonition"},"Instead of using the ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," function, call ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()"),", which sets the correct namespace for nested modules.")),(0,r.kt)("p",null,"If the terminal value is deeply nested, a long chain of ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()")," calls is required."),(0,r.kt)("p",null,"To keep the codebase consistent, a ",(0,r.kt)("inlineCode",{parentName:"p"},"map!")," macro can be used:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"...\n\npub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {\n map!(self.strings[key1][key2][key3] = value);\n}\n\npub fn get_string_macro(\n &self, \n key1: String, \n key2: u32, \n key3: String\n) -> String {\n map!(self.strings[key1][key2][key3])\n}\n\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The terminal value must not be an Odra Module.")),(0,r.kt)("h2",{id:"advancedstorage-contract"},"AdvancedStorage Contract"),(0,r.kt)("p",null,"The given code snippet showcases the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdvancedStorage")," contract that incorporates these storage concepts."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Sequence, Mapping};\nuse crate::modules::Token;\n\n#[odra::module]\npub struct AdvancedStorage {\n my_sequence: Sequence<u32>,\n my_mapping: Mapping<String, Mapping<String, Token>>,\n}\n\nimpl AdvancedStorage {\n pub fn get_sequence_current_value(&self) -> u32 {\n self.my_sequence.get_current_value()\n }\n\n pub fn next_sequence_value(&mut self) -> u32 {\n self.my_sequence.next_value()\n }\n\n pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.set(&inner_key, value);\n }\n\n pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.get(&inner_key)\n }\n}\n")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/98b2adcf.6640f6d0.js b/docs/assets/js/98b2adcf.6640f6d0.js new file mode 100644 index 000000000..7fe985520 --- /dev/null +++ b/docs/assets/js/98b2adcf.6640f6d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5930],{24469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/docs/assets/js/9a7c9bac.97ef6b89.js b/docs/assets/js/9a7c9bac.97ef6b89.js new file mode 100644 index 000000000..4aaae48aa --- /dev/null +++ b/docs/assets/js/9a7c9bac.97ef6b89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6701],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),h=a,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(k,i(i({ref:t},d),{},{components:n})):r.createElement(k,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},10596:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},i="MockVM",c={unversionedId:"backends/mock-vm",id:"version-0.3.1/backends/mock-vm",title:"MockVM",description:"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing",source:"@site/versioned_docs/version-0.3.1/backends/02-mock-vm.md",sourceDirName:"backends",slug:"/backends/mock-vm",permalink:"/docs/0.3.1/backends/mock-vm",draft:!1,tags:[],version:"0.3.1",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What is a backend?",permalink:"/docs/0.3.1/backends/what-is-a-backend"},next:{title:"Casper",permalink:"/docs/0.3.1/backends/casper"}},s={},l=[{value:"Usage",id:"usage",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Execution",id:"execution",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mockvm"},"MockVM"),(0,a.kt)("p",null,"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing\nthe code written in Odra without compiling the contract to the target architecture and spinning up the\nblockchain."),(0,a.kt)("p",null,"Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler."),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The MockVM is the default backend for Odra framework, so each time you run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,a.kt)("p",null,"You are running your code against it."),(0,a.kt)("h2",{id:"architecture"},"Architecture"),(0,a.kt)("p",null,"MockVM consists of two main parts: the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," and the ",(0,a.kt)("inlineCode",{parentName:"p"},"State"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," is just a list of contracts deployed onto the MockVM, identified by an ",(0,a.kt)("inlineCode",{parentName:"p"},"Address"),".\nEach time we call the contract, we call its instance stored in the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register"),"."),(0,a.kt)("p",null,"Contracts and Test Env functions can modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"State")," of the MockVM."),(0,a.kt)("p",null,'Contrary to the "real" backend, which holds the whole history of the blockchain,\nthe MockVM ',(0,a.kt)("inlineCode",{parentName:"p"},"State")," holds only the current state of the MockVM.\nThanks to this and the fact that we do not need the blockchain itself,\nMockVM starts instantly and runs the tests in the native speed."),(0,a.kt)("h2",{id:"execution"},"Execution"),(0,a.kt)("p",null,"When the MockVM backend is enabled, the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro is responsible for converting\nyour ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions into a list of Entrypoints, which are put into a Contract Container.\nWhen the contract is deployed, its Container registered into a Registry under an address.\nDuring the contract call, MockVM finds an Entrypoint and executes the code."),(0,a.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[Contract Container];\n id2[Contract Container]--\x3eid3((Contract Registry))\n id3((Contract Registry))--\x3eid4[(MockVM Execution)]"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/9a7f4a11.931eca48.js b/docs/assets/js/9a7f4a11.931eca48.js new file mode 100644 index 000000000..8f454e428 --- /dev/null +++ b/docs/assets/js/9a7f4a11.931eca48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8923],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>f});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?l(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):l(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)t=l[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)t=l[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=a.createContext({}),d=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},c=function(e){var n=d(e.components);return a.createElement(i.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(t),f=r,m=u["".concat(i,".").concat(f)]||u[f]||p[f]||l;return t?a.createElement(m,o(o({ref:n},c),{},{components:t})):a.createElement(m,o({ref:n},c))}));function f(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=t.length,o=new Array(l);o[0]=u;var s={};for(var i in n)hasOwnProperty.call(n,i)&&(s[i]=n[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var d=2;d<l;d++)o[d]=t[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}u.displayName="MDXCreateElement"},49614:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const l={slug:"2023-02-27-openai-writes-erc20-in-odra",title:"OpenAI writes ERC20 in Odra",authors:["zie1ony"],image:"./twitter-card.png"},o=void 0,s={permalink:"/blog/2023-02-27-openai-writes-erc20-in-odra",source:"@site/blog/2023-02-27-openai-writes-erc20-in-odra/index.md",title:"OpenAI writes ERC20 in Odra",description:"OpenAI can write Odra smart contracts.",date:"2023-02-27T00:00:00.000Z",formattedDate:"February 27, 2023",tags:[],readingTime:3.785,hasTruncateMarker:!0,authors:[{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"2023-02-27-openai-writes-erc20-in-odra",title:"OpenAI writes ERC20 in Odra",authors:["zie1ony"],image:"./twitter-card.png"},prevItem:{title:"It's all about the community!",permalink:"/blog/its-all-about-the-community"},nextItem:{title:"Odra + CosmWasm",permalink:"/blog/odra-cosmwasm"}},i={image:t(901).Z,authorsImageUrls:[void 0]},d=[{value:"OpenAI",id:"openai",level:2},{value:"DaVinci Edit",id:"davinci-edit",level:2},{value:"ERC20 by AI",id:"erc20-by-ai",level:2},{value:"What is next?",id:"what-is-next",level:2}],c={toc:d};function p(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"OpenAI can write Odra smart contracts.\nThis is how."),(0,r.kt)("h2",{id:"openai"},"OpenAI"),(0,r.kt)("p",null,"OpenAI already proved that AI can code.\nGithub Copilot is used by more and more developers.\nMany times it is mind-blowing how accurate it is.\nIt would be great if one of the OpenAI models could simply work after writing:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"Q: Write the ERC20 smart contract.\n\nA: use odra::{Mapping, Variable}...\n")),(0,r.kt)("p",null,"So far OpenAI hasn't indexed Odra. I even asked ChatGPT."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"Q: Do you know what is the Odra Framework for writing smart contracts?\n Response in one sentence. Use Yoda style.\n\nA: Aware of an Odra Framework for writing smart contracts, I am not.\n")),(0,r.kt)("p",null,"Soon (year or two) it will happen and Odra will be supported out of the box,\nsimply because it is available on GitHub."),(0,r.kt)("h2",{id:"davinci-edit"},"DaVinci Edit"),(0,r.kt)("p",null,"OpenAI gives us a great tool called ",(0,r.kt)("a",{parentName:"p",href:"https://openai.com/blog/gpt-3-edit-insert/"},"Edit"),".\nIt uses the same technology Github Copiled it based on called ",(0,r.kt)("a",{parentName:"p",href:"https://openai.com/blog/openai-codex/"},"Codex"),",\nOpenAI gives us access to the model ",(0,r.kt)("inlineCode",{parentName:"p"},"code-davinci-edit-001"),".\nIt allows you to paste in the code and ask for changes.\nSee more examples like rewriting Fibonacci to a recursive version ",(0,r.kt)("a",{parentName:"p",href:"https://platform.openai.com/docs/guides/code/editing-code"},"here"),". "),(0,r.kt)("p",null,"But it doesn't know Odra.\nLuckily this is not a problem.\nI have found a nice trick that allows producing the code I want.\nWe simply have to present all the features of Odra and ask a good question."),(0,r.kt)("h2",{id:"erc20-by-ai"},"ERC20 by AI"),(0,r.kt)("p",null,"The goal is to bend AI to write the ERC20 token using Odra.\nThe Edit query needs two elements:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"source code,"),(0,r.kt)("li",{parentName:"ul"},"text that describes what should be changed. ")),(0,r.kt)("p",null,"As the input source code I wrote the code that uses all the features ERC20 would use.\nI need ",(0,r.kt)("inlineCode",{parentName:"p"},"odra::module"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"caller()"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),",\nconstructor, and errors."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=flipper.rs",title:"flipper.rs"},"use odra::{Variable, types::Address, contract_env, Mapping, execution_error};\n\n#[odra::module]\npub struct Flipper {\n value: Variable<bool>,\n flips_count: Variable<u32>,\n owner: Variable<Address>,\n messages: Mapping<(Address, Address), String>\n}\n\n#[odra::module]\nimpl Flipper {\n #[odra(init)]\n pub fn init(&mut self, owner: Address) {\n self.value.set(false);\n self.owner.set(owner);\n }\n\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n pub fn flip(&mut self) {\n self.value.set(!self.get_value());\n self.flips_count.set(self.flips_count.get_or_default());\n }\n\n pub fn get_value(&self) -> bool {\n self.value.get_or_default()\n }\n \n pub fn get_owner(&self) -> Option<Address> {\n self.owner.get()\n }\n\n pub fn set_message(&mut self, recipient: Address, msg: String) {\n let sender = contract_env::caller();\n let current_msg = self.messages.get(&(sender, recipient));\n match current_msg {\n Some(_) => contract_env::revert(Error::MessageAlreadyDefined),\n None => self.messages.set(&(sender, recipient), msg)\n }\n }\n\n pub fn get_message(&self, sender: Address, recipient: Address) -> String {\n self.messages.get_or_default(&(sender, recipient))\n }\n}\n\nexecution_error! {\n pub enum Error {\n MessageAlreadyDefined => 1,\n NotAnMessageSender => 2,\n }\n}\n")),(0,r.kt)("p",null,"ChatGPT knows what the ERC20 is, so the kind request for changes is simple."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"Q: Implement another smart contract called ERC20.\n Balances should be of type U256.\n")),(0,r.kt)("p",null,"This is the result."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="ERC20 contract in Odra generated by OpenAI"',title:'"ERC20',contract:!0,in:!0,Odra:!0,generated:!0,by:!0,'OpenAI"':!0},"use odra::{Variable, types::Address, contract_env, Mapping, execution_error, U256};\n\n#[odra::module]\npub struct ERC20 {\n name: Variable<String>,\n symbol: Variable<String>,\n decimals: Variable<u8>,\n total_supply: Variable<U256>,\n balances: Mapping<Address, U256>,\n allowed: Mapping<(Address, Address), U256>\n}\n\n#[odra::module]\nimpl ERC20 {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, total_supply: U256) {\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.total_supply.set(total_supply);\n self.balances.set(&contract_env::caller(), total_supply);\n }\n\n pub fn total_supply(&self) -> U256 {\n self.total_supply.get_or_default()\n }\n\n pub fn balance_of(&self, owner: Address) -> U256 {\n self.balances.get_or_default(&owner)\n }\n\n pub fn transfer(&mut self, to: Address, value: U256) {\n let from = contract_env::caller();\n let from_balance = self.balances.get_or_default(&from);\n let to_balance = self.balances.get_or_default(&to);\n if from_balance < value {\n contract_env::revert(Error::InsufficientBalance);\n }\n self.balances.set(&from, from_balance - value);\n self.balances.set(&to, to_balance + value);\n }\n\n pub fn transfer_from(&mut self, from: Address, to: Address, value: U256) {\n let caller = contract_env::caller();\n let from_balance = self.balances.get_or_default(&from);\n let to_balance = self.balances.get_or_default(&to);\n let allowed = self.allowed.get_or_default(&(from, caller));\n if from_balance < value {\n contract_env::revert(Error::InsufficientBalance);\n }\n if allowed < value {\n contract_env::revert(Error::InsufficientAllowance);\n }\n self.balances.set(&from, from_balance - value);\n self.balances.set(&to, to_balance + value);\n self.allowed.set(&(from, caller), allowed - value);\n }\n\n pub fn approve(&mut self, spender: Address, value: U256) {\n let owner = contract_env::caller();\n self.allowed.set(&(owner, spender), value);\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.allowed.get_or_default(&(owner, spender))\n }\n}\n\nexecution_error! {\n pub enum Error {\n InsufficientBalance => 1,\n InsufficientAllowance => 2,\n }\n}\n")),(0,r.kt)("p",null,"Wow!"),(0,r.kt)("h2",{id:"what-is-next"},"What is next?"),(0,r.kt)("p",null,"AI already understands smart contracts.\nIt had to read a lot of Solidity code.\nI checked and it knows Uniswap and Compound source code.\nMost interesting is that AI was able to implement a concept it already knew\nfrom another programming language in the unseen Rust framework.\nAt some point, we will be able to translate all the Solidity code to Odra.\nOr maybe we will not have to..."),(0,r.kt)("p",null,"It is hard to imagine how good it will be in 2025 and beyond."))}p.isMDXComponent=!0},901:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/twitter-card-0f7e768e63da0acd629609954ba26f62.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/9cc9201d.de6931b6.js b/docs/assets/js/9cc9201d.de6931b6.js new file mode 100644 index 000000000..42686a484 --- /dev/null +++ b/docs/assets/js/9cc9201d.de6931b6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3395],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>g});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),c=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},l=function(e){var n=c(e.components);return a.createElement(p.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(t),g=r,m=u["".concat(p,".").concat(g)]||u[g]||d[g]||i;return t?a.createElement(m,o(o({ref:n},l),{},{components:t})):a.createElement(m,o({ref:n},l))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var c=2;c<i;c++)o[c]=t[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}u.displayName="MDXCreateElement"},50030:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=t(87462),r=(t(67294),t(3905));const i={},o="Advanced Storage Concepts",s={unversionedId:"advanced/advanced-storage",id:"version-0.5.0/advanced/advanced-storage",title:"Advanced Storage Concepts",description:"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.",source:"@site/versioned_docs/version-0.5.0/advanced/03-advanced-storage.md",sourceDirName:"advanced",slug:"/advanced/advanced-storage",permalink:"/docs/0.5.0/advanced/advanced-storage",draft:!1,tags:[],version:"0.5.0",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Delegate",permalink:"/docs/0.5.0/advanced/delegate"},next:{title:"Attributes",permalink:"/docs/0.5.0/advanced/attributes"}},p={},c=[{value:"Recap and Basic Concepts",id:"recap-and-basic-concepts",level:2},{value:"Advanced Storage Concepts",id:"advanced-storage-concepts-1",level:2},{value:"Sequence",id:"sequence",level:3},{value:"Advanced Mapping",id:"advanced-mapping",level:3},{value:"AdvancedStorage Contract",id:"advancedstorage-contract",level:2},{value:"Conclusion",id:"conclusion",level:2}],l={toc:c};function d(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"advanced-storage-concepts"},"Advanced Storage Concepts"),(0,r.kt)("p",null,"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Sequence")," modules, which are key components of the advanced storage interaction in Odra."),(0,r.kt)("h2",{id:"recap-and-basic-concepts"},"Recap and Basic Concepts"),(0,r.kt)("p",null,"Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),". These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Variable"),": A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Mapping"),": Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"List"),": Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over."),(0,r.kt)("p",null,"If you need a refresher on these topics, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/storage-interaction"},"guide")," on basic storage in Odra."),(0,r.kt)("h2",{id:"advanced-storage-concepts-1"},"Advanced Storage Concepts"),(0,r.kt)("h3",{id:"sequence"},"Sequence"),(0,r.kt)("p",null,"The Sequence in Odra is a basic module that holds a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," which keeps track of the current value. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub struct Sequence<T>\nwhere\n T: Num + One + OdraType\n{\n value: Variable<T>\n}\n")),(0,r.kt)("p",null,"The Sequence module provides functions ",(0,r.kt)("inlineCode",{parentName:"p"},"get_current_value")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"next_value")," to get the current value and increment the value respectively."),(0,r.kt)("h3",{id:"advanced-mapping"},"Advanced Mapping"),(0,r.kt)("p",null,"In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility."),(0,r.kt)("p",null,"Let's consider the following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"use odra::{map, types::U256, Mapping, UnwrapOrRevert};\n\nuse crate::owned_token::OwnedToken;\n\n#[odra::module]\npub struct NestedMapping {\n strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,\n tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>\n}\n\n#[odra::module]\nimpl NestedMapping {\n\n ...\n\n pub fn set_token(\n &mut self,\n key1: String,\n key2: u32,\n key3: String,\n token_name: String,\n decimals: u8,\n symbol: String,\n initial_supply: &U256\n ) {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .init(token_name, symbol, decimals, initial_supply);\n }\n\n pub fn get_string_api(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> String {\n let mapping = self.strings.get_instance(&key1).get_instance(&key2);\n mapping.get(&key3).unwrap_or_revert()\n }\n\n pub fn total_supply(\n &self, \n key1: String, \n key2: u32, \n key3: String\n ) -> U256 {\n self.tokens\n .get_instance(&key1)\n .get_instance(&key2)\n .get_instance(&key3)\n .total_supply()\n }\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers. "),(0,r.kt)("p",{parentName:"admonition"},"Instead of using the ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," function, call ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()"),", which sets the correct namespace for nested modules.")),(0,r.kt)("p",null,"If the terminal value is deeply nested, a long chain of ",(0,r.kt)("inlineCode",{parentName:"p"},"get_instance()")," calls is required."),(0,r.kt)("p",null,"To keep the codebase consistent, a ",(0,r.kt)("inlineCode",{parentName:"p"},"map!")," macro can be used:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/mapping.rs"',title:'"examples/src/features/storage/mapping.rs"'},"...\n\npub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {\n map!(self.strings[key1][key2][key3] = value);\n}\n\npub fn get_string_macro(\n &self, \n key1: String, \n key2: u32, \n key3: String\n) -> String {\n map!(self.strings[key1][key2][key3])\n}\n\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The terminal value must not be an Odra Module.")),(0,r.kt)("h2",{id:"advancedstorage-contract"},"AdvancedStorage Contract"),(0,r.kt)("p",null,"The given code snippet showcases the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdvancedStorage")," contract that incorporates these storage concepts."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Sequence, Mapping};\nuse crate::modules::Token;\n\n#[odra::module]\npub struct AdvancedStorage {\n my_sequence: Sequence<u32>,\n my_mapping: Mapping<String, Mapping<String, Token>>,\n}\n\nimpl AdvancedStorage {\n pub fn get_sequence_current_value(&self) -> u32 {\n self.my_sequence.get_current_value()\n }\n\n pub fn next_sequence_value(&mut self) -> u32 {\n self.my_sequence.next_value()\n }\n\n pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.set(&inner_key, value);\n }\n\n pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {\n let inner_mapping = self.my_mapping.get_instance(&outer_key);\n inner_mapping.get(&inner_key)\n }\n}\n")),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/9d620965.4f817163.js b/docs/assets/js/9d620965.4f817163.js new file mode 100644 index 000000000..8a249db18 --- /dev/null +++ b/docs/assets/js/9d620965.4f817163.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9634],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=o,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||s;return n?r.createElement(f,a(a({ref:t},c),{},{components:n})):r.createElement(f,a({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,a=new Array(s);a[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var u=2;u<s;u++)a[u]=n[u];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},27177:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var r=n(87462),o=(n(67294),n(3905));const s={sidebar_position:11,description:"Divide your code into modules"},a="Modules",i={unversionedId:"basics/modules",id:"version-0.6.0/basics/modules",title:"Modules",description:"Divide your code into modules",source:"@site/versioned_docs/version-0.6.0/basics/11-modules.md",sourceDirName:"basics",slug:"/basics/modules",permalink:"/docs/0.6.0/basics/modules",draft:!1,tags:[],version:"0.6.0",sidebarPosition:11,frontMatter:{sidebar_position:11,description:"Divide your code into modules"},sidebar:"tutorialSidebar",previous:{title:"Cross calls",permalink:"/docs/0.6.0/basics/cross-calls"},next:{title:"Native token",permalink:"/docs/0.6.0/basics/native-token"}},l={},u=[{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:u};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you\nwrite is also a module, thanks to a macro ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),'. This means that we can easily rewrite our math\nexample from the previous article, to use a single contract, but still separate our "math" code:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/modules.rs"',title:'"examples/src/features/modules.rs"'},"use crate::features::cross_calls::MathEngine;\n\n#[odra::module]\npub struct ModulesContract {\n pub math_engine: MathEngine,\n}\n\n#[odra::module]\nimpl ModulesContract {\n pub fn add_using_module(&self) -> u32 {\n self.math_engine.add(3, 5)\n }\n}\n")),(0,o.kt)("p",null,"Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as\na module!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"As we don't need to hold addresses, the test is really simple:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/modules.rs"',title:'"examples/src/features/modules.rs"'},"use super::ModulesContractDeployer;\n\n#[test]\nfn test_modules() {\n let modules_contract = ModulesContractDeployer::default();\n assert_eq!(modules_contract.add_using_module(), 8);\n}\n")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will see how to handle native token transfers."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/9d95fe34.47cef24c.js b/docs/assets/js/9d95fe34.47cef24c.js new file mode 100644 index 000000000..2011e3022 --- /dev/null +++ b/docs/assets/js/9d95fe34.47cef24c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4434],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,f=u["".concat(c,".").concat(m)]||u[m]||p[m]||o;return n?a.createElement(f,i(i({ref:t},d),{},{components:n})):a.createElement(f,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var l=2;l<o;l++)i[l]=n[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},91975:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:12,description:"How to deposit, withdraw and transfer"},i="Native token",s={unversionedId:"basics/native-token",id:"version-0.3.1/basics/native-token",title:"Native token",description:"How to deposit, withdraw and transfer",source:"@site/versioned_docs/version-0.3.1/basics/12-native-token.md",sourceDirName:"basics",slug:"/basics/native-token",permalink:"/docs/0.3.1/basics/native-token",draft:!1,tags:[],version:"0.3.1",sidebarPosition:12,frontMatter:{sidebar_position:12,description:"How to deposit, withdraw and transfer"},sidebar:"tutorialSidebar",previous:{title:"Modules",permalink:"/docs/0.3.1/basics/modules"},next:{title:"Advanced",permalink:"/docs/0.3.1/category/advanced"}},c={},l=[{value:"Testing",id:"testing",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"native-token"},"Native token"),(0,r.kt)("p",null,"Different blockchains come with different implementations of their native tokens. Odra wraps it all for you\nin easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit\ntheir funds and anyone can withdraw them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/native_token.rs"',title:'"examples/src/docs/native_token.rs"'},"use odra::types::Balance;\nuse odra::contract_env;\n\n#[odra::module]\npub struct PublicWallet {\n}\n\n#[odra::module]\nimpl PublicWallet {\n #[odra(payable)]\n pub fn deposit(&mut self) {\n }\n\n pub fn withdraw(&mut self, amount: Balance) {\n contract_env::transfer_tokens(contract_env::caller(), amount);\n }\n}\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make\nany checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is\neven possible."),(0,r.kt)("p",{parentName:"admonition"},"To see a more reasonable example, check out ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/tlw.rs")," in the odra main repository.")),(0,r.kt)("p",null,"You can see a new macro used here: ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," - it will add all the code needed for a function to\nbe able to receive the funds. Additionally, we are using a new function from contract_env - ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_tokens"),".\nIt does exactly what you are expecting it to do - it will transfer native tokens from the contract to the\nspecified address."),(0,r.kt)("p",null,"We are also using the ",(0,r.kt)("inlineCode",{parentName:"p"},"Balance")," - an Odra type that wraps around the type that the underlying blockchain uses\nfor counting tokens."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"To be able to test how many tokens a contract (or any address) has, ",(0,r.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a function -\n",(0,r.kt)("inlineCode",{parentName:"p"},"token_balance"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/native_token.rs"',title:'"examples/src/docs/native_token.rs"'},"use odra::types::Balance;\nuse odra::test_env;\nuse super::PublicWalletDeployer;\n\n#[test]\nfn test_modules() {\n let mut my_contract = PublicWalletDeployer::default();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());\n\n my_contract.with_tokens(Balance::from(100)).deposit();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));\n\n my_contract.withdraw(Balance::from(25));\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/9e4087bc.2dee4e95.js b/docs/assets/js/9e4087bc.2dee4e95.js new file mode 100644 index 000000000..f82602cef --- /dev/null +++ b/docs/assets/js/9e4087bc.2dee4e95.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3608],{63169:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(67294),l=a(39960),n=a(95999),c=a(1944),i=a(16963);function m(e){let{year:t,posts:a}=e;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((e=>r.createElement("li",{key:e.metadata.date},r.createElement(l.Z,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))))))}function s(e){let{years:t}=e;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map(((e,t)=>r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(m,e)))))))}function o(e){let{archive:t}=e;const a=(0,n.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),l=(0,n.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),m=function(e){const t=e.reduceRight(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return r.createElement(r.Fragment,null,r.createElement(c.d,{title:a,description:l}),r.createElement(i.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},a),r.createElement("p",{className:"hero__subtitle"},l))),r.createElement("main",null,m.length>0&&r.createElement(s,{years:m}))))}}}]); \ No newline at end of file diff --git a/docs/assets/js/9e73c0bb.b0c60152.js b/docs/assets/js/9e73c0bb.b0c60152.js new file mode 100644 index 000000000..a345a4b8a --- /dev/null +++ b/docs/assets/js/9e73c0bb.b0c60152.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2432],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?n(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,o,a=function(e,r){if(null==e)return{};var t,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},c=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return t?o.createElement(f,l(l({ref:r},c),{},{components:t})):o.createElement(f,l({ref:r},c))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,l=new Array(n);l[0]=u;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<n;p++)l[p]=t[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},76108:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var o=t(87462),a=(t(67294),t(3905));const n={sidebar_position:1},l="odra-examples",i={unversionedId:"examples/odra-examples",id:"version-0.2.0/examples/odra-examples",title:"odra-examples",description:"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.",source:"@site/versioned_docs/version-0.2.0/examples/odra-examples.md",sourceDirName:"examples",slug:"/examples/odra-examples",permalink:"/docs/0.2.0/examples/odra-examples",draft:!1,tags:[],version:"0.2.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Examples",permalink:"/docs/0.2.0/category/examples"},next:{title:"Using odra-modules",permalink:"/docs/0.2.0/examples/using-odra-modules"}},s={},p=[{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odra-examples"},"odra-examples"),(0,a.kt)("p",null,"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the ",(0,a.kt)("inlineCode",{parentName:"p"},"examples")," in the Odra main repository."),(0,a.kt)("p",null,'The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.'),(0,a.kt)("p",null,"Don't worry if you find learning solely by reading the code challenging. Go to the ",(0,a.kt)("a",{parentName:"p",href:"../category/tutorials/"},"Tutorial")," section, where we will review it together. We will break the code into pieces, leaving no space for further questions."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn about reusable Odra components encapsulated in ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/9ffb5fe4.cbfd0513.js b/docs/assets/js/9ffb5fe4.cbfd0513.js new file mode 100644 index 000000000..7d742e967 --- /dev/null +++ b/docs/assets/js/9ffb5fe4.cbfd0513.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5558],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,f=u["".concat(c,".").concat(m)]||u[m]||p[m]||o;return n?a.createElement(f,s(s({ref:t},d),{},{components:n})):a.createElement(f,s({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,s=new Array(o);s[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var l=2;l<o;l++)s[l]=n[l];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},55642:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:12,description:"How to deposit, withdraw and transfer"},s="Native token",i={unversionedId:"basics/native-token",id:"version-0.3.0/basics/native-token",title:"Native token",description:"How to deposit, withdraw and transfer",source:"@site/versioned_docs/version-0.3.0/basics/12-native-token.md",sourceDirName:"basics",slug:"/basics/native-token",permalink:"/docs/0.3.0/basics/native-token",draft:!1,tags:[],version:"0.3.0",sidebarPosition:12,frontMatter:{sidebar_position:12,description:"How to deposit, withdraw and transfer"},sidebar:"defaultSidebar",previous:{title:"Modules",permalink:"/docs/0.3.0/basics/modules"},next:{title:"Advanced",permalink:"/docs/0.3.0/category/advanced"}},c={},l=[{value:"Testing",id:"testing",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"native-token"},"Native token"),(0,r.kt)("p",null,"Different blockchains come with different implementations of their native tokens. Odra wraps it all for you\nin easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit\ntheir funds and anyone can withdraw them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/native_token.rs"',title:'"examples/src/docs/native_token.rs"'},"use odra::types::Balance;\nuse odra::contract_env;\n\n#[odra::module]\npub struct PublicWallet {\n}\n\n#[odra::module]\nimpl PublicWallet {\n #[odra(payable)]\n pub fn deposit(&mut self) {\n }\n\n pub fn withdraw(&mut self, amount: Balance) {\n contract_env::transfer_tokens(contract_env::caller(), amount);\n }\n}\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make\nany checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is\neven possible."),(0,r.kt)("p",{parentName:"admonition"},"To see a more reasonable example, check out ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/tlw.rs")," in the odra main repository.")),(0,r.kt)("p",null,"You can see a new macro used here: ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," - it will add all the code needed for a function to\nbe able to receive the funds. Additionally, we are using a new function from contract_env - ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_tokens"),".\nIt does exactly what you are expecting it to do - it will transfer native tokens from the contract to the\nspecified address."),(0,r.kt)("p",null,"We are also using the ",(0,r.kt)("inlineCode",{parentName:"p"},"Balance")," - an Odra type that wraps around the type that the underlying blockchain uses\nfor counting tokens."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"To be able to test how many tokens a contract (or any address) has, ",(0,r.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a function -\n",(0,r.kt)("inlineCode",{parentName:"p"},"token_balance"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/native_token.rs"',title:'"examples/src/docs/native_token.rs"'},"use odra::types::Balance;\nuse odra::test_env;\nuse super::PublicWalletDeployer;\n\n#[test]\nfn test_modules() {\n let mut my_contract = PublicWalletDeployer::default();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());\n\n my_contract.with_tokens(Balance::from(100)).deposit();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));\n\n my_contract.withdraw(Balance::from(25));\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/a046a162.691f889b.js b/docs/assets/js/a046a162.691f889b.js new file mode 100644 index 000000000..a7cfe53ab --- /dev/null +++ b/docs/assets/js/a046a162.691f889b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9344],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88654:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const i={sidebar_position:4,description:"Detailed explanation of the Flipper contract"},o="Flipper Internals",l={unversionedId:"basics/flipper-internals",id:"version-0.6.0/basics/flipper-internals",title:"Flipper Internals",description:"Detailed explanation of the Flipper contract",source:"@site/versioned_docs/version-0.6.0/basics/04-flipper-internals.md",sourceDirName:"basics",slug:"/basics/flipper-internals",permalink:"/docs/0.6.0/basics/flipper-internals",draft:!1,tags:[],version:"0.6.0",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Detailed explanation of the Flipper contract"},sidebar:"tutorialSidebar",previous:{title:"Odra.toml",permalink:"/docs/0.6.0/basics/odra-toml"},next:{title:"Storage interaction",permalink:"/docs/0.6.0/basics/storage-interaction"}},s={},p=[{value:"Header",id:"header",level:2},{value:"Struct",id:"struct",level:2},{value:"Impl",id:"impl",level:2},{value:"Tests",id:"tests",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-internals"},"Flipper Internals"),(0,a.kt)("p",null,"In this article, we take a deep dive into the code shown in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.6.0/getting-started/flipper"},"Flipper example"),", where we will explain in more detail all\nthe Odra-specific sections of the code."),(0,a.kt)("h2",{id:"header"},"Header"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"use odra::Variable;\n")),(0,a.kt)("p",null,"Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation\nthat can be reused between targets. In the above case, we're importing ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable"),", which is responsible\nfor storing simple values on the blockchain's storage."),(0,a.kt)("h2",{id:"struct"},"Struct"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// A module definition. Each module struct consists of Variables and Mappings\n/// or/and other modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value,\n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n")),(0,a.kt)("p",null,"In Odra, all contracts are also modules, which can be reused between contracts. That's why we need\nto mark the struct with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. In the struct definition itself, we state all\nthe fields of the contract. Those fields can be regular Rust data types, however - those will not\nbe persisted on the blockchain. They can also be Odra modules - defined in your project or coming\nfrom Odra itself. Finally, to make the data persistent on the blockchain, you can use something like\n",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>")," showed above. To learn more about storage interaction, take a look at the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/storage-interaction"},"next article"),"."),(0,a.kt)("h2",{id:"impl"},"Impl"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n ...\n")),(0,a.kt)("p",null,"Similarly to the struct, we mark the ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. Odra will take all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from this section and create contract endpoints from them. So, if you wish to have\nfunctions that are not available for calling outside the contract, do not make them public. Alternatively,\nyou can create a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section without the macro - all functions defined there, even marked\nwith ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," will be not callable."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," macro marks the constructor of the contract. This function will be limited to only\nto a single call, all further calls to it will result in an error."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'}," ...\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n ...\n")),(0,a.kt)("p",null,"The endpoints above show you how to interact with the simplest type of storage - ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>"),". The data\nsaved there using ",(0,a.kt)("inlineCode",{parentName:"p"},"set")," function will be persisted in the blockchain."),(0,a.kt)("h2",{id:"tests"},"Tests"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n ...\n")),(0,a.kt)("p",null,"You can write tests in any way you prefer and know in Rust. In the example above we are deploying the\ncontract using ",(0,a.kt)("inlineCode",{parentName:"p"},"FlipperDeployer")," - a piece of code generated automatically thanks to the macros.\nThe contract will be deployed on the VM you chose while running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now let's take a look at the different types of storage that Odra provides and how to use them."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/a05c6bda.eda097fe.js b/docs/assets/js/a05c6bda.eda097fe.js new file mode 100644 index 000000000..4def50362 --- /dev/null +++ b/docs/assets/js/a05c6bda.eda097fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8118],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>m});var r=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?n(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,r,o=function(e,t){if(null==e)return{};var a,r,o={},n=Object.keys(e);for(r=0;r<n.length;r++)a=n[r],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)a=n[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,o=e.mdxType,n=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(a),m=o,h=c["".concat(s,".").concat(m)]||c[m]||d[m]||n;return a?r.createElement(h,i(i({ref:t},u),{},{components:a})):r.createElement(h,i({ref:t},u))}));function m(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=a.length,i=new Array(n);i[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<n;p++)i[p]=a[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}c.displayName="MDXCreateElement"},52936:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>l,toc:()=>p});var r=a(87462),o=(a(67294),a(3905));const n={slug:"its-all-about-the-community",title:"It's all about the community!",authors:["zie1ony"],image:"./roadmap.png"},i=void 0,l={permalink:"/blog/its-all-about-the-community",source:"@site/blog/2023-06-27-we-are-here-to-stay/index.md",title:"It's all about the community!",description:"Over the past months,",date:"2023-06-27T00:00:00.000Z",formattedDate:"June 27, 2023",tags:[],readingTime:2.825,hasTruncateMarker:!0,authors:[{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"its-all-about-the-community",title:"It's all about the community!",authors:["zie1ony"],image:"./roadmap.png"},prevItem:{title:"Nysa",permalink:"/blog/Nysa"},nextItem:{title:"OpenAI writes ERC20 in Odra",permalink:"/blog/2023-02-27-openai-writes-erc20-in-odra"}},s={image:a(32899).Z,authorsImageUrls:[void 0]},p=[{value:"Hello Odra Community",id:"hello-odra-community",level:2},{value:"We will help with your project",id:"we-will-help-with-your-project",level:2},{value:"Roadmap",id:"roadmap",level:2}],u={toc:p};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Over the past months,\nwe have been working hard on bringing Odra to the Casper world.\nWhile we are proud of what we have achieved so far,\nthe hard part is just beginning.\nSmart contract developers from outside of our team are starting to use Odra.\nWe are thrilled about it and here is how we are going to support the community."),(0,o.kt)("h2",{id:"hello-odra-community"},"Hello Odra Community"),(0,o.kt)("p",null,"Whether you are a Rust developer, Solidity developer or a Casper enthusiast\nwe are happy to have you here, reading this blog post."),(0,o.kt)("p",null,"We have built Odra to make smart contract development on Casper easy.\nNow we are entering the next phase of the open source journey.\nWe are going to focus on the community and make sure\nOdra is the best tool for the job.\nOur motto (we borrowed from the Django Project) is:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"We bring cutting-edge smart contract development tools to\nprofessionals with deadlines."))),(0,o.kt)("p",null,"How will we do it? We are going to focus on four things:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Quality")," - Our code and documentation will be of the highest quality.\nWe will always have tons of tests and examples."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Simplicity")," - The simplest solution is the best solution.\nOdra's API needs to be simple and easy to use.\nAlways!\nWe are not afraid to take a few steps back and rethink our design.\nWe believe in short feedback loops and fast iterations."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Reusability")," - No one likes to repeat itself.\nWe see a huge potential in Odra Modules.\nIn time, it can become a standard library of Casper smart contracts,\nthat are battle-tested and ready to use."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Community")," - We are here to help you.\nYou can always reach out to us on ",(0,o.kt)("a",{parentName:"li",href:"https://discord.gg/Mm5ABc9P8k"},"Discord")," or ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/odradev/odra"},"Github"),".")),(0,o.kt)("h2",{id:"we-will-help-with-your-project"},"We will help with your project"),(0,o.kt)("p",null,"Whether you are a Rust developer or not, you can start using Odra today.\nWe have prepared a few ",(0,o.kt)("a",{parentName:"p",href:"https://odra.dev/docs"},"examples and docs")," to help you get started.\nRust knowledge required to use Odra is minimal.\nThat was always the goal."),(0,o.kt)("p",null,"But we understand that it is hard to start.\nWe got your back."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"We offer free consulting + 2 hours of live coding."))),(0,o.kt)("p",null,"All you have to do is write us an email at ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("a",{parentName:"strong",href:"mailto:contract@odra.dev"},"contract@odra.dev")),"\nwith a short description of your project.\nWe will schedule a call and help you get started with Odra.\nAfter 2 hours of live coding, you will have a working repository with 2 or 3\nsmart contracts, that you can use as a starting point for your project."),(0,o.kt)("h2",{id:"roadmap"},"Roadmap"),(0,o.kt)("p",null,"The feedback we got quite often was:\n",(0,o.kt)("strong",{parentName:"p"},"It's nice, but will it last? What's the direction of the project?"),"\nPoint taken. Now we answer: ",(0,o.kt)("strong",{parentName:"p"},"We are here to stay."),"\nWe got the support from the Casper Association and some projects of our own\nto keep us funded. We play the long game."),(0,o.kt)("p",null,"To systematize our work, we have prepared the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/milestones"},"roadmap"),".\nAs of now, we maintain plans for at least three future releases.\nIt is a good balance between predictability and flexibility.\nWe will release new versions approximately every 1-2 months or as needed.\nEveryone is encouraged to propose a new Odra feature or enhancement.\nNew proposals need to be discussed and approved by the core team.\nWhen the feature is ready, we assign it to one of the future releases."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Odra Roadmap",src:a(32899).Z,width:"1642",height:"1094"})))}d.isMDXComponent=!0},32899:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/roadmap-8255e4b08deb4134a7e97e32c21ad0dc.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/a0d3df9d.fbc93276.js b/docs/assets/js/a0d3df9d.fbc93276.js new file mode 100644 index 000000000..ce638b36a --- /dev/null +++ b/docs/assets/js/a0d3df9d.fbc93276.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3743],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=l(n),m=a,v=u["".concat(c,".").concat(m)]||u[m]||p[m]||s;return n?r.createElement(v,o(o({ref:t},d),{},{components:n})):r.createElement(v,o({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,o=new Array(s);o[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var l=2;l<s;l++)o[l]=n[l];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},2544:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const s={sidebar_position:9,description:"Creating and emitting Events"},o="Events",i={unversionedId:"basics/events",id:"version-0.3.0/basics/events",title:"Events",description:"Creating and emitting Events",source:"@site/versioned_docs/version-0.3.0/basics/09-events.md",sourceDirName:"basics",slug:"/basics/events",permalink:"/docs/0.3.0/basics/events",draft:!1,tags:[],version:"0.3.0",sidebarPosition:9,frontMatter:{sidebar_position:9,description:"Creating and emitting Events"},sidebar:"defaultSidebar",previous:{title:"Errors",permalink:"/docs/0.3.0/basics/errors"},next:{title:"Cross calls",permalink:"/docs/0.3.0/basics/cross-calls"}},c={},l=[{value:"Testing events",id:"testing-events",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Different blockchains implement events in different ways. Odra lets you forget about it by introducing\nOdra Events. Take a look:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"use odra::{Event, contract_env};\nuse odra::types::{Address, BlockTime, event::OdraEvent};\n\n#[odra::module(events = [PartyStarted])]\npub struct PartyContract {\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n\n#[odra::module]\nimpl PartyContract {\n #[odra(init)]\n pub fn init(&self) {\n PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n }.emit();\n }\n}\n")),(0,a.kt)("p",null,"We defined a new contract, which emits an event called ",(0,a.kt)("inlineCode",{parentName:"p"},"PartyStarted")," when the contract is deployed.\nTo define an event, we derive an ",(0,a.kt)("inlineCode",{parentName:"p"},"Event")," macro like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n")),(0,a.kt)("p",null,"Among other things, it adds an ",(0,a.kt)("inlineCode",{parentName:"p"},"emit()")," function to the struct, which allows you to emit the event simply\nas that:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n}.emit();\n")),(0,a.kt)("p",null,"Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an ",(0,a.kt)("inlineCode",{parentName:"p"},"events")," attribute to the struct's ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro and use array-like syntax to list events your module emits. "),(0,a.kt)("p",null,"The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module."),(0,a.kt)("h2",{id:"testing-events"},"Testing events"),(0,a.kt)("p",null,"Odra's ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a handy macro ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_events!")," which lets you easily test the events that a given contract has emitted:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"use odra::{assert_events, test_env};\nuse crate::docs::events::PartyStarted;\nuse super::PartyContractDeployer;\n\n#[test]\nfn test_party() {\n let party_contract = PartyContractDeployer::init();\n assert_events!(\n party_contract,\n PartyStarted {\n caller: test_env::get_account(0),\n block_time: 0,\n }\n );\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn how to call other contracts from the contract context."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/a3d6ef01.684e5c74.js b/docs/assets/js/a3d6ef01.684e5c74.js new file mode 100644 index 000000000..7ad2a6288 --- /dev/null +++ b/docs/assets/js/a3d6ef01.684e5c74.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6153],{41835:e=>{e.exports=JSON.parse('{"title":"Advanced","description":"Advanced concepts of Odra Framework","slug":"/category/advanced","permalink":"/docs/next/category/advanced","navigation":{"previous":{"title":"Native token","permalink":"/docs/next/basics/native-token"},"next":{"title":"Delegate","permalink":"/docs/next/advanced/delegate"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/a663e775.18f6c1d1.js b/docs/assets/js/a663e775.18f6c1d1.js new file mode 100644 index 000000000..a0b4b6a50 --- /dev/null +++ b/docs/assets/js/a663e775.18f6c1d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6317],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,f=u["".concat(i,".").concat(m)]||u[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var c=2;c<s;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},35789:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:10,description:"Contracts calling contracts"},o="Cross calls",l={unversionedId:"basics/cross-calls",id:"version-0.4.0/basics/cross-calls",title:"Cross calls",description:"Contracts calling contracts",source:"@site/versioned_docs/version-0.4.0/basics/10-cross-calls.md",sourceDirName:"basics",slug:"/basics/cross-calls",permalink:"/docs/0.4.0/basics/cross-calls",draft:!1,tags:[],version:"0.4.0",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Contracts calling contracts"},sidebar:"tutorialSidebar",previous:{title:"Events",permalink:"/docs/0.4.0/basics/events"},next:{title:"Modules",permalink:"/docs/0.4.0/basics/modules"}},i={},c=[{value:"Contract Ref",id:"contract-ref",level:2},{value:"Testing",id:"testing",level:2}],d={toc:c};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cross-calls"},"Cross calls"),(0,r.kt)("p",null,"To show how to handle calls between contracts, first, let's implement two of them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"use odra::Variable;\nuse odra::types::{Address};\n\n#[odra::module]\npub struct CrossContract {\n pub math_engine: Variable<Address>,\n}\n\n#[odra::module]\nimpl CrossContract {\n #[odra(init)]\n pub fn init(&mut self, math_engine_address: Address) {\n self.math_engine.set(math_engine_address);\n }\n\n pub fn add_using_another(&self) -> u32 {\n let math_engine_address = self.math_engine.get().unwrap();\n MathEngineRef::at(math_engine_address).add(3, 5)\n }\n}\n\n#[odra::module]\npub struct MathEngine {\n}\n\n#[odra::module]\nimpl MathEngine {\n pub fn add(&self, n1: u32, n2: u32) -> u32 {\n n1 + n2\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract can add two numbers. ",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," takes an ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," in its init function and saves it in\nstorage for later use. If we deploy the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," first and take note of its address, we can then deploy\n",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," and use ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," to perform complicated calculations for us!"),(0,r.kt)("p",null,"To call the external contract, we use the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," that was created for us by Odra:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"MathEngineRef::at(math_engine_address).add(3, 5)\n")),(0,r.kt)("h2",{id:"contract-ref"},"Contract Ref"),(0,r.kt)("p",null,"We mentioned ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," already in our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/testing"},"Testing")," article.\nIt is a reference to already deployed - running contract.\nHere we are going to take a deeper look at it."),(0,r.kt)("p",null,"Similarly to a ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," is generated automatically, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nTo get an instance of a reference, we can either deploy a contract (using ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),") or by building it\ndirectly, using ",(0,r.kt)("inlineCode",{parentName:"p"},"::at(address: Address)")," method, as shown above.\nThe reference implements all the public endpoints to the contract (those marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),"\nimpl), alongside couple methods:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"at(Address) -> Self")," - points the reference to an Address"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"address() -> Address")," - returns the Address the reference is currently pointing at"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"with_tokens(Amount) -> Self")," - attaches Amount of native tokens to the next call")),(0,r.kt)("h1",{id:"external-contracts"},"External Contracts"),(0,r.kt)("p",null,"Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI."),(0,r.kt)("p",null,"For that purpose, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra:external_contract]")," macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of."),(0,r.kt)("p",null,"Let's pretend the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," we defined is an external contract. There is a contract with ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function that adds two numbers somewhere."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"#[odra::external_contract]\npub trait Adder {\n fn add(&self, n1: u32, n2: u32) -> u32;\n}\n")),(0,r.kt)("p",null,"Analogously to modules, Odra creates the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderRef")," struct (but do not create the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderDeployer"),"). Having an address we can call:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"AdderRef::at(address).add(3, 5)\n")),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Let's see how we can test our cross calls using this knowledge:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"use super::{CrossContractDeployer, MathEngineDeployer};\n\n#[test]\nfn test_cross_calls() {\n let math_engine_contract = MathEngineDeployer::default();\n let cross_contract = CrossContractDeployer::init(math_engine_contract.address());\n\n assert_eq!(cross_contract.add_using_another(), 8);\n}\n")),(0,r.kt)("p",null,"Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function we want to use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"#[cfg(test)]\nmod tests {\n use odra::types::Address;\n use crate::docs::cross_calls::{Adder, AdderRef};\n \n #[test]\n fn test_ext() {\n let adder = AdderRef::at(get_adder_address());\n\n assert_eq!(adder.add(1, 2), 3);\n }\n\n fn get_adder_address() -> Address {\n let contract = MathEngineDeployer::default();\n contract.address()\n }\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/a6734805.f167d1dc.js b/docs/assets/js/a6734805.f167d1dc.js new file mode 100644 index 000000000..7ecfda2b1 --- /dev/null +++ b/docs/assets/js/a6734805.f167d1dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2947],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(f,s(s({ref:n},c),{},{components:t})):a.createElement(f,s({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,s=new Array(o);s[0]=d;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,s[1]=l;for(var p=2;p<o;p++)s[p]=t[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,t)}d.displayName="MDXCreateElement"},15469:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=t(87462),r=(t(67294),t(3905));const o={sidebar_position:3},s="ERC-20",l={unversionedId:"tutorials/erc20",id:"version-0.3.1/tutorials/erc20",title:"ERC-20",description:"It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.",source:"@site/versioned_docs/version-0.3.1/tutorials/erc20.md",sourceDirName:"tutorials",slug:"/tutorials/erc20",permalink:"/docs/0.3.1/tutorials/erc20",draft:!1,tags:[],version:"0.3.1",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Ownable",permalink:"/docs/0.3.1/tutorials/ownable"},next:{title:"OwnedToken",permalink:"/docs/0.3.1/tutorials/owned-token"}},i={},p=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:2},{value:"Metadata",id:"metadata",level:3},{value:"Core",id:"core",level:3},{value:"Test",id:"test",level:3},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"erc-20"},"ERC-20"),(0,r.kt)("p",null,"It's time for something that every smart contract developer has done at least once. Let's try to implement ",(0,r.kt)("a",{parentName:"p",href:"https://eips.ethereum.org/EIPS/eip-20"},"Erc20")," standard. Of course, we are going to use the Odra Framework. "),(0,r.kt)("p",null,"The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value. "),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"advanced storage - key-value pairs, "),(0,r.kt)("li",{parentName:"ul"},"Odra types like ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),", "),(0,r.kt)("li",{parentName:"ul"},"advanced events assertion.")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Our module has a pretty complex storage layout in comparison to the previous example."),(0,r.kt)("p",null,"We need to store the following data:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Immutable metadata - name, symbol and decimals."),(0,r.kt)("li",{parentName:"ol"},"Total supply."),(0,r.kt)("li",{parentName:"ol"},"Users' balances."),(0,r.kt)("li",{parentName:"ol"},"Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.")),(0,r.kt)("h2",{id:"module-definition"},"Module definition"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module(events = [Transfer, Approval])]\npub struct Erc20 {\n decimals: Variable<u8>,\n symbol: Variable<String>,\n name: Variable<String>,\n total_supply: Variable<Balance>,\n balances: Mapping<Address, Balance>,\n allowances: Mapping<Address, Mapping<Address, Balance>>\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - For the first time, we need to store key-value pairs. In order to do that, we use ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),". The name is taken after Solidity's native type ",(0,r.kt)("inlineCode",{parentName:"li"},"mapping"),". You may notice the ",(0,r.kt)("inlineCode",{parentName:"li"},"balances")," property maps ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance"),". If you deal with addresses or you operate on tokens, you should always choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Address")," over ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Odra allows nested ",(0,r.kt)("inlineCode",{parentName:"li"},"Mapping"),"s, what we utilize to store allowances.")),(0,r.kt)("h3",{id:"metadata"},"Metadata"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Erc20 {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn symbol(&self) -> String {\n self.symbol.get_or_default()\n }\n\n pub fn decimals(&self) -> u8 {\n self.decimals.get_or_default()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.total_supply.get_or_default()\n }\n}\n\nimpl Erc20 {\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.balances.add(address, *amount);\n self.total_supply.add(amount);\n Transfer {\n from: None,\n to: Some(*address),\n amount: *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Transfer {\n pub from: Option<Address>,\n pub to: Option<Address>,\n pub amount: Balance\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L1")," - The first ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," block, marked as a module, contains functions defined in the ERC-20 standard."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3-L10")," - A constructor sets the token metadata and mints the initial supply."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12-L14")," - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," example, we used the ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returning an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<T>"),". If the type implements ",(0,r.kt)("inlineCode",{parentName:"li"},"Default")," trait, you can call ",(0,r.kt)("inlineCode",{parentName:"li"},"get_or_default()")," function and the contract does not fail even if the value is not initialized."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29")," - The second ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," is not an odra module, in other words these function will not be a part of contract's ABI."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30-L39")," - Mint function is public, so like in a regular rust code will be accessible from the outside. ",(0,r.kt)("inlineCode",{parentName:"li"},"mint()")," use notation ",(0,r.kt)("inlineCode",{parentName:"li"},"self.balances.add(&address, amount);"),", which it is syntactic sugar for:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"let current_balance = self.balances.get(&address).unwrap_or_default();\nlet new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();\nself.balances.set(&address, new_balance);\n")),(0,r.kt)("h3",{id:"core"},"Core"),(0,r.kt)("p",null,"For the sake of completeness, let's implement the remaining functionalities like ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_from"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"approve"),". They are not introducing any new concepts, so we leave them without additional remarks."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs",title:"erc20.rs"},"#[odra::module]\nimpl Erc20 {\n ...\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n let caller = contract_env::caller();\n self.raw_transfer(&caller, recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let spender = contract_env::caller();\n self.spend_allowance(owner, &spender, amount);\n self.raw_transfer(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n let owner = contract_env::caller();\n self.allowances.get_instance(&owner).set(spender, *amount);\n Approval {\n owner,\n spender: *spender,\n value: *amount\n }\n .emit();\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.balances.get_or_default(&address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.allowances.get_instance(owner).get_or_default(spender)\n }\n}\n\nimpl Erc20 {\n ...\n\n fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n let owner_balance = self.balances.get_or_default(&owner);\n if *amount > owner_balance {\n contract_env::revert(Error::InsufficientBalance)\n }\n self.balances.set(owner, owner_balance - *amount);\n self.balances.add(recipient, *amount);\n Transfer {\n from: Some(*owner),\n to: Some(*recipient),\n amount: *amount\n }\n .emit();\n }\n\n fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {\n let allowance = self.allowances.get_instance(owner).get_or_default(spender);\n if allowance < *amount {\n contract_env::revert(Error::InsufficientAllowance)\n }\n let new_allowance = allowance - *amount;\n self.allowances\n .get_instance(owner)\n .set(spender, new_allowance);\n Approval {\n owner: *owner,\n spender: *spender,\n value: allowance - *amount\n }\n .emit();\n }\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Approval {\n pub owner: Address,\n pub spender: Address,\n pub value: U256\n}\n\nexecution_error! {\n pub enum Error {\n InsufficientBalance => 1,\n InsufficientAllowance => 2,\n }\n}\n")),(0,r.kt)("p",null,"Now, compare the code we have written, with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"},"Open Zeppelin code"),". Out of 10, how Solidity-ish is our implementation?"),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=erc20.rs showLineNumbers",title:"erc20.rs",showLineNumbers:!0},'#[cfg(test)]\npub mod tests {\n use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};\n use odra::{assert_events, test_env, types::U256};\n\n pub const NAME: &str = "Plascoin";\n pub const SYMBOL: &str = "PLS";\n pub const DECIMALS: u8 = 10;\n pub const INITIAL_SUPPLY: u32 = 10_000;\n\n pub fn setup() -> Erc20Ref {\n Erc20Deployer::init(\n String::from(NAME),\n String::from(SYMBOL),\n DECIMALS,\n INITIAL_SUPPLY.into()\n )\n }\n\n #[test]\n fn initialization() {\n let erc20 = setup();\n\n assert_eq!(&erc20.symbol(), SYMBOL);\n assert_eq!(&erc20.name(), NAME);\n assert_eq!(erc20.decimals(), DECIMALS);\n assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());\n assert_events!(\n erc20,\n Transfer {\n from: None,\n to: Some(test_env::get_account(0)),\n amount: INITIAL_SUPPLY.into()\n }\n );\n }\n\n #[test]\n fn transfer_works() {\n let mut erc20 = setup();\n let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n erc20.transfer(&recipient, &amount);\n\n assert_eq!(\n erc20.balance_of(&sender),\n U256::from(INITIAL_SUPPLY) - amount\n );\n assert_eq!(erc20.balance_of(&recipient), amount);\n assert_events!(\n erc20,\n Transfer {\n from: Some(sender),\n to: Some(recipient),\n amount\n }\n );\n }\n\n #[test]\n fn transfer_error() {\n let mut erc20 = setup();\n let recipient = test_env::get_account(1);\n let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);\n\n test_env::assert_exception(Error::InsufficientBalance, || {\n erc20.transfer(&recipient, &amount)\n });\n }\n\n #[test]\n fn transfer_from_and_approval_work() {\n let mut erc20 = setup();\n let (owner, recipient, spender) = (\n test_env::get_account(0),\n test_env::get_account(1),\n test_env::get_account(2)\n );\n let approved_amount = 3_000.into();\n let transfer_amount = 1_000.into();\n\n // Owner approves Spender.\n erc20.approve(&spender, &approved_amount);\n\n // Allowance was recorded.\n assert_eq!(erc20.allowance(&owner, &spender), approved_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount\n }\n );\n\n // Spender transfers tokens from Owner to Recipient.\n test_env::set_caller(spender);\n erc20.transfer_from(&owner, &recipient, &transfer_amount);\n\n // Tokens are transferred and allowance decremented.\n assert_eq!(\n erc20.balance_of(&owner),\n U256::from(INITIAL_SUPPLY) - transfer_amount\n );\n assert_eq!(erc20.balance_of(&recipient), transfer_amount);\n assert_events!(\n erc20,\n Approval {\n owner,\n spender,\n value: approved_amount - transfer_amount\n },\n Transfer {\n from: Some(owner),\n to: Some(recipient),\n amount: transfer_amount\n }\n );\n \n assert_events!(erc20, Approval, Transfer);\n }\n\n #[test]\n fn transfer_from_error() {\n let mut erc20 = setup();\n let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));\n let amount = 1_000.into();\n\n test_env::set_caller(spender);\n test_env::assert_exception(Error::InsufficientAllowance, || {\n erc20.transfer_from(&owner, &spender, &amount)\n });\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L111-123")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events!()")," macro accepts multiple events. You must pass them in the order they were emitted. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L125")," - Alternatively, if you don't want to check the entire event, you may assert only its type.")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"You can not mix both approaches, you pass full events or types only.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"Having two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", let's combine them, and create an ERC-20 on steroids."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/a6aa9e1f.d72a4b28.js b/docs/assets/js/a6aa9e1f.d72a4b28.js new file mode 100644 index 000000000..03db16548 --- /dev/null +++ b/docs/assets/js/a6aa9e1f.d72a4b28.js @@ -0,0 +1 @@ +(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3089],{39058:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var s=a(67294),n=a(86010),l=a(16963),r=a(87524),o=a(39960),i=a(95999);const m="sidebar_re4s",c="sidebarItemTitle_pO2u",u="sidebarItemList_Yudw",d="sidebarItem__DBe",g="sidebarItemLink_mo7H",j="sidebarItemLinkActive_I1ZP";function p(e){let{sidebar:t}=e;return s.createElement("aside",{className:"col col--3"},s.createElement("nav",{className:(0,n.Z)(m,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},s.createElement("div",{className:(0,n.Z)(c,"margin-bottom--md")},t.title),s.createElement("ul",{className:(0,n.Z)(u,"clean-list")},t.items.map((e=>s.createElement("li",{key:e.permalink,className:d},s.createElement(o.Z,{isNavLink:!0,to:e.permalink,className:g,activeClassName:j},e.title)))))))}var h=a(13102);function b(e){let{sidebar:t}=e;return s.createElement("ul",{className:"menu__list"},t.items.map((e=>s.createElement("li",{key:e.permalink,className:"menu__list-item"},s.createElement(o.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function f(e){return s.createElement(h.Zo,{component:b,props:e})}function E(e){let{sidebar:t}=e;const a=(0,r.i)();return t?.items.length?"mobile"===a?s.createElement(f,{sidebar:t}):s.createElement(p,{sidebar:t}):null}function v(e){const{sidebar:t,toc:a,children:r,...o}=e,i=t&&t.items.length>0;return s.createElement(l.Z,o,s.createElement("div",{className:"container margin-vert--lg"},s.createElement("div",{className:"row"},s.createElement(E,{sidebar:t}),s.createElement("main",{className:(0,n.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"http://schema.org/Blog"},r),a&&s.createElement("div",{className:"col col--2"},a))))}},93269:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>f});var s=a(67294),n=a(86010),l=a(52263),r=a(1944),o=a(35281),i=a(39058),m=a(95999),c=a(32244);function u(e){const{metadata:t}=e,{previousPage:a,nextPage:n}=t;return s.createElement("nav",{className:"pagination-nav","aria-label":(0,m.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&s.createElement(c.Z,{permalink:a,title:s.createElement(m.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),n&&s.createElement(c.Z,{permalink:n,title:s.createElement(m.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}var d=a(90197),g=a(9460),j=a(63496);function p(e){let{items:t,component:a=j.Z}=e;return s.createElement(s.Fragment,null,t.map((e=>{let{content:t}=e;return s.createElement(g.n,{key:t.metadata.permalink,content:t},s.createElement(a,null,s.createElement(t,null)))})))}function h(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,l.Z)(),{blogDescription:n,blogTitle:o,permalink:i}=t,m="/"===i?a:o;return s.createElement(s.Fragment,null,s.createElement(r.d,{title:m,description:n}),s.createElement(d.Z,{tag:"blog_posts_list"}))}function b(e){const{metadata:t,items:a,sidebar:n}=e;return s.createElement(i.Z,{sidebar:n},s.createElement(p,{items:a}),s.createElement(u,{metadata:t}))}function f(e){return s.createElement(r.FG,{className:(0,n.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},s.createElement(h,e),s.createElement(b,e))}},63496:(e,t,a)=>{"use strict";a.d(t,{Z:()=>O});var s=a(67294),n=a(86010),l=a(9460),r=a(44996);function o(e){let{children:t,className:a}=e;const{frontMatter:n,assets:o}=(0,l.C)(),{withBaseUrl:i}=(0,r.C)(),m=o.image??n.image;return s.createElement("article",{className:a,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},m&&s.createElement("meta",{itemProp:"image",content:i(m,{absolute:!0})}),t)}var i=a(39960);const m="title_f1Hy";function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:r}=(0,l.C)(),{permalink:o,title:c}=a,u=r?"h1":"h2";return s.createElement(u,{className:(0,n.Z)(m,t),itemProp:"headline"},r?c:s.createElement(i.Z,{itemProp:"url",to:o},c))}var u=a(95999),d=a(52263);const g=["zero","one","two","few","many","other"];function j(e){return g.filter((t=>e.includes(t)))}const p={locale:"en",pluralForms:j(["one","other"]),select:e=>1===e?"one":"other"};function h(){const{i18n:{currentLocale:e}}=(0,d.Z)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:j(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`),p}}),[e])}function b(){const e=h();return{selectMessage:(t,a)=>function(e,t,a){const s=e.split("|");if(1===s.length)return s[0];s.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const n=a.select(t),l=a.pluralForms.indexOf(n);return s[Math.min(l,s.length-1)]}(a,t,e)}}const f="container_mt6G";function E(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=b();return t=>{const a=Math.ceil(t);return e(a,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". 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 min read|{readingTime} min read"},{readingTime:a}))}}();return s.createElement(s.Fragment,null,a(t))}function v(e){let{date:t,formattedDate:a}=e;return s.createElement("time",{dateTime:t,itemProp:"datePublished"},a)}function k(){return s.createElement(s.Fragment,null," \xb7 ")}function N(e){let{className:t}=e;const{metadata:a}=(0,l.C)(),{date:r,formattedDate:o,readingTime:i}=a;return s.createElement("div",{className:(0,n.Z)(f,"margin-vert--md",t)},s.createElement(v,{date:r,formattedDate:o}),void 0!==i&&s.createElement(s.Fragment,null,s.createElement(k,null),s.createElement(E,{readingTime:i})))}function P(e){return e.href?s.createElement(i.Z,e):s.createElement(s.Fragment,null,e.children)}function Z(e){let{author:t,className:a}=e;const{name:l,title:r,url:o,imageURL:i,email:m}=t,c=o||m&&`mailto:${m}`||void 0;return s.createElement("div",{className:(0,n.Z)("avatar margin-bottom--sm",a)},i&&s.createElement(P,{href:c,className:"avatar__photo-link"},s.createElement("img",{className:"avatar__photo",src:i,alt:l})),l&&s.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},s.createElement("div",{className:"avatar__name"},s.createElement(P,{href:c,itemProp:"url"},s.createElement("span",{itemProp:"name"},l))),r&&s.createElement("small",{className:"avatar__subtitle",itemProp:"description"},r)))}const _="authorCol_q4o9",y="imageOnlyAuthorRow_lXe7",w="imageOnlyAuthorCol_cxD5";function z(e){let{className:t}=e;const{metadata:{authors:a},assets:r}=(0,l.C)();if(0===a.length)return null;const o=a.every((e=>{let{name:t}=e;return!t}));return s.createElement("div",{className:(0,n.Z)("margin-top--md margin-bottom--sm",o?y:"row",t)},a.map(((e,t)=>s.createElement("div",{className:(0,n.Z)(!o&&"col col--4",o?w:_),key:t},s.createElement(Z,{author:{...e,imageURL:r.authorsImageUrls[t]??e.imageURL}})))))}function T(){return s.createElement("header",null,s.createElement(c,null),s.createElement(N,null),s.createElement(z,null))}var C=a(18780),x=a(88905);function F(e){let{children:t,className:a}=e;const{isBlogPostPage:r}=(0,l.C)();return s.createElement("div",{id:r?C.blogPostContainerID:void 0,className:(0,n.Z)("markdown",a),itemProp:"articleBody"},s.createElement(x.Z,null,t))}var I=a(84881),B=a(86233),L=a(87462);function M(){return s.createElement("b",null,s.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function R(e){const{blogPostTitle:t,...a}=e;return s.createElement(i.Z,(0,L.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},a),s.createElement(M,null))}const A="blogPostFooterDetailsFull_mRVl";function D(){const{metadata:e,isBlogPostPage:t}=(0,l.C)(),{tags:a,title:r,editUrl:o,hasTruncateMarker:i}=e,m=!t&&i,c=a.length>0;return c||m||o?s.createElement("footer",{className:(0,n.Z)("row docusaurus-mt-lg",t&&A)},c&&s.createElement("div",{className:(0,n.Z)("col",{"col--9":m})},s.createElement(B.Z,{tags:a})),t&&o&&s.createElement("div",{className:"col margin-top--sm"},s.createElement(I.Z,{editUrl:o})),m&&s.createElement("div",{className:(0,n.Z)("col text--right",{"col--3":c})},s.createElement(R,{blogPostTitle:r,to:e.permalink}))):null}function O(e){let{children:t,className:a}=e;const r=function(){const{isBlogPostPage:e}=(0,l.C)();return e?void 0:"margin-bottom--xl"}();return s.createElement(o,{className:(0,n.Z)(r,a)},s.createElement(T,null),s.createElement(F,null,t),s.createElement(D,null))}},9460:(e,t,a)=>{"use strict";a.d(t,{C:()=>o,n:()=>r});var s=a(67294),n=a(902);const l=s.createContext(null);function r(e){let{children:t,content:a,isBlogPostPage:n=!1}=e;const r=function(e){let{content:t,isBlogPostPage:a}=e;return(0,s.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:n});return s.createElement(l.Provider,{value:r},t)}function o(){const e=(0,s.useContext)(l);if(null===e)throw new n.i6("BlogPostProvider");return e}},46700:(e,t,a)=>{var s={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function n(e){var t=l(e);return a(t)}function l(e){if(!a.o(s,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return s[e]}n.keys=function(){return Object.keys(s)},n.resolve=l,e.exports=n,n.id=46700}}]); \ No newline at end of file diff --git a/docs/assets/js/a6f6e2b9.236d4d2e.js b/docs/assets/js/a6f6e2b9.236d4d2e.js new file mode 100644 index 000000000..31d605c1b --- /dev/null +++ b/docs/assets/js/a6f6e2b9.236d4d2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7093],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(r),f=o,m=d["".concat(p,".").concat(f)]||d[f]||s[f]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},32193:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(87462),o=(r(67294),r(3905));const a={slug:"release-020",title:"Odra 0.2.0 Released",authors:["kubaplas","kpob","zie1ony"],image:"https://github.com/odradev.png"},i=void 0,l={permalink:"/blog/release-020",source:"@site/blog/2022-11-30-release-020/index.md",title:"Odra 0.2.0 Released",description:"We want to introduce you to the very first public release of the Odra Framework proudly!",date:"2022-11-30T00:00:00.000Z",formattedDate:"November 30, 2022",tags:[],readingTime:3.07,hasTruncateMarker:!0,authors:[{name:"Kuba P\u0142askonka",title:"Lead Developer",url:"https://github.com/kubaplas",key:"kubaplas"},{name:"Krzysztof Pobiar\u017cyn",title:"Lead Developer",url:"https://github.com/kpob",key:"kpob"},{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"release-020",title:"Odra 0.2.0 Released",authors:["kubaplas","kpob","zie1ony"],image:"https://github.com/odradev.png"},prevItem:{title:"Zero Knowledge on Casper",permalink:"/blog/casper-zk-risc0"}},p={authorsImageUrls:[void 0,void 0,void 0]},c=[],u={toc:c};function s(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"We want to introduce you to the very first public release of the Odra Framework proudly!"))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/a88260b3.9b8b8e27.js b/docs/assets/js/a88260b3.9b8b8e27.js new file mode 100644 index 000000000..063f22f97 --- /dev/null +++ b/docs/assets/js/a88260b3.9b8b8e27.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5176],{49449:e=>{e.exports=JSON.parse('{"title":"Tutorials","description":"The theory is good, but the practice is even better. Let\'s go through a few examples summing up all the Odra concepts.","slug":"/category/tutorials","permalink":"/docs/0.3.1/category/tutorials","navigation":{"previous":{"title":"Using odra-modules","permalink":"/docs/0.3.1/examples/using-odra-modules"},"next":{"title":"Ownable","permalink":"/docs/0.3.1/tutorials/ownable"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/aaadf060.5faff66f.js b/docs/assets/js/aaadf060.5faff66f.js new file mode 100644 index 000000000..85ec0ef55 --- /dev/null +++ b/docs/assets/js/aaadf060.5faff66f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4318],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},p),{},{components:a})):n.createElement(g,i({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=a[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},15470:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1,description:"A tool for managing Odra projects"},i="Cargo Odra",l={unversionedId:"basics/cargo-odra",id:"version-0.5.0/basics/cargo-odra",title:"Cargo Odra",description:"A tool for managing Odra projects",source:"@site/versioned_docs/version-0.5.0/basics/01-cargo-odra.md",sourceDirName:"basics",slug:"/basics/cargo-odra",permalink:"/docs/0.5.0/basics/cargo-odra",draft:!1,tags:[],version:"0.5.0",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"A tool for managing Odra projects"},sidebar:"tutorialSidebar",previous:{title:"Basics",permalink:"/docs/0.5.0/category/basics"},next:{title:"Directory structure",permalink:"/docs/0.5.0/basics/directory-structure"}},s={},c=[{value:"Managing projects",id:"managing-projects",level:2},{value:"Generating code",id:"generating-code",level:2},{value:"Testing",id:"testing",level:2},{value:"Building code",id:"building-code",level:2},{value:"Updating dependencies",id:"updating-dependencies",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cargo-odra"},"Cargo Odra"),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/getting-started/installation"},"Installation")," tutorial properly,\nyou should already be set up with the Cargo Odra tool. It is an executable that will help you with\nmanaging your smart contracts project, testing and running them on multiple backends (blockchains)."),(0,r.kt)("p",null,"Let's take a look at all the possibilities that Cargo Odra gives you."),(0,r.kt)("h2",{id:"managing-projects"},"Managing projects"),(0,r.kt)("p",null,"Two commands will help you create a new project. The first one is ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra new"),".\nYou need to pass one parameter, namely ",(0,r.kt)("inlineCode",{parentName:"p"},"--name {PROJECT_NAME}"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project\n")),(0,r.kt)("p",null,"This will create a new project in the ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project")," folder and name it ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project"),". You can see it\nfor yourself, for example by taking a look into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file created in your project's folder:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n')),(0,r.kt)("p",null,"The project is created using the template located in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra's main repository"),".\nBy default it uses ",(0,r.kt)("inlineCode",{parentName:"p"},"full")," template, if you want, you can use minimalistic ",(0,r.kt)("inlineCode",{parentName:"p"},"blank")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -t blank --name my-project\n")),(0,r.kt)("p",null,"By default, the latest release of Odra will be used for the template and as a dependency.\nYou can pass a source of Odra you want to use, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"-s")," parameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -n my-project -s ../odra # will use local folder of odra\ncargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release\ncargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io\n")),(0,r.kt)("p",null,"The second way of creating a project is by using ",(0,r.kt)("inlineCode",{parentName:"p"},"init")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra init --name my-project\n")),(0,r.kt)("p",null,"It works in the same way as ",(0,r.kt)("inlineCode",{parentName:"p"},"new"),", but instead of creating a new folder, it will create a project\nin the current, empty directory."),(0,r.kt)("h2",{id:"generating-code"},"Generating code"),(0,r.kt)("p",null,"If you want to quickly create a new contract code, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"generate")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra generate -c counter \n")),(0,r.kt)("p",null,"This will create a new file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/counter.rs")," with sample code, add appropriate ",(0,r.kt)("inlineCode",{parentName:"p"},"use")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mod")," sections\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"src/lib.rs")," and update the ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file accordingly. To learn more about ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file,\nvisit ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/odra-toml"},"Odra.toml"),"."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Most used command during the development of your project should be this one:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"It will run your tests against Odra's MockVM. It is substantially faster than virtual machines\nprovided by blockchains developers and implements all the features Odra uses."),(0,r.kt)("p",null,'When you want to run tests against a "real" VM, just provide the name of the backend using ',(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\noption:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files,\nspin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat.\nKeep in mind that this is a lot slower than MockVM and you cannot use the debugger.\nThis is why MockVM was created and should be your first choice when developing contracts.\nOf course, testing all of your code against a blockchain VM is a must in the end."),(0,r.kt)("p",null,"If you want to run only some of the tests, you can pass arguments to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo test")," command\n(which is run in the background obviously):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- this-will-be-passed-to-cargo-test\n")),(0,r.kt)("p",null,"If you want to run tests which names contain the word ",(0,r.kt)("inlineCode",{parentName:"p"},"two"),", you can execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- two\n")),(0,r.kt)("p",null,"Of course, you can do the same when using the backend:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper -- two\n")),(0,r.kt)("h2",{id:"building-code"},"Building code"),(0,r.kt)("p",null,"You can also build the code itself and generate the output contracts without running the tests.\nTo do so, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("p",null,"Where ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," is the name of the backend we are using in this example. If the build process\nfinishes successfully, wasm files will be located in ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," folder."),(0,r.kt)("h2",{id:"updating-dependencies"},"Updating dependencies"),(0,r.kt)("p",null,"You will learn later, that the project using Odra contains more than one Rust project - your own and\none or more builders. To run ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo update")," on all of them at once instead of traversing all the folders\nyou can use this command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra update\n")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next section, we will take a look at all the files and directories that ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," created\nfor us and explain their purpose."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ab4716a0.a7bba1a3.js b/docs/assets/js/ab4716a0.a7bba1a3.js new file mode 100644 index 000000000..b7d983594 --- /dev/null +++ b/docs/assets/js/ab4716a0.a7bba1a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2933],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},71550:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const i={sidebar_position:4,description:"Detailed explanation of the Flipper contract"},o="Flipper Internals",l={unversionedId:"basics/flipper-internals",id:"version-0.5.0/basics/flipper-internals",title:"Flipper Internals",description:"Detailed explanation of the Flipper contract",source:"@site/versioned_docs/version-0.5.0/basics/04-flipper-internals.md",sourceDirName:"basics",slug:"/basics/flipper-internals",permalink:"/docs/0.5.0/basics/flipper-internals",draft:!1,tags:[],version:"0.5.0",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Detailed explanation of the Flipper contract"},sidebar:"tutorialSidebar",previous:{title:"Odra.toml",permalink:"/docs/0.5.0/basics/odra-toml"},next:{title:"Storage interaction",permalink:"/docs/0.5.0/basics/storage-interaction"}},s={},p=[{value:"Header",id:"header",level:2},{value:"Struct",id:"struct",level:2},{value:"Impl",id:"impl",level:2},{value:"Tests",id:"tests",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-internals"},"Flipper Internals"),(0,a.kt)("p",null,"In this article, we take a deep dive into the code shown in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.5.0/getting-started/flipper"},"Flipper example"),", where we will explain in more detail all\nthe Odra-specific sections of the code."),(0,a.kt)("h2",{id:"header"},"Header"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"use odra::Variable;\n")),(0,a.kt)("p",null,"Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation\nthat can be reused between targets. In the above case, we're importing ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable"),", which is responsible\nfor storing simple values on the blockchain's storage."),(0,a.kt)("h2",{id:"struct"},"Struct"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// A module definition. Each module struct consists of Variables and Mappings\n/// or/and other modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value,\n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n")),(0,a.kt)("p",null,"In Odra, all contracts are also modules, which can be reused between contracts. That's why we need\nto mark the struct with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. In the struct definition itself, we state all\nthe fields of the contract. Those fields can be regular Rust data types, however - those will not\nbe persisted on the blockchain. They can also be Odra modules - defined in your project or coming\nfrom Odra itself. Finally, to make the data persistent on the blockchain, you can use something like\n",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>")," showed above. To learn more about storage interaction, take a look at the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/storage-interaction"},"next article"),"."),(0,a.kt)("h2",{id:"impl"},"Impl"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n ...\n")),(0,a.kt)("p",null,"Similarly to the struct, we mark the ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. Odra will take all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from this section and create contract endpoints from them. So, if you wish to have\nfunctions that are not available for calling outside the contract, do not make them public. Alternatively,\nyou can create a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section without the macro - all functions defined there, even marked\nwith ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," will be not callable."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," macro marks the constructor of the contract. This function will be limited to only\nto a single call, all further calls to it will result in an error."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'}," ...\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n ...\n")),(0,a.kt)("p",null,"The endpoints above show you how to interact with the simplest type of storage - ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>"),". The data\nsaved there using ",(0,a.kt)("inlineCode",{parentName:"p"},"set")," function will be persisted in the blockchain."),(0,a.kt)("h2",{id:"tests"},"Tests"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n ...\n")),(0,a.kt)("p",null,"You can write tests in any way you prefer and know in Rust. In the example above we are deploying the\ncontract using ",(0,a.kt)("inlineCode",{parentName:"p"},"FlipperDeployer")," - a piece of code generated automatically thanks to the macros.\nThe contract will be deployed on the VM you chose while running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now let's take a look at the different types of storage that Odra provides and how to use them."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ab49860c.5eff6c80.js b/docs/assets/js/ab49860c.5eff6c80.js new file mode 100644 index 000000000..adaac128b --- /dev/null +++ b/docs/assets/js/ab49860c.5eff6c80.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5211],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},34584:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,description:"How to get information from the Host"},i="Host Communication",s={unversionedId:"basics/communicating-with-host",id:"version-0.4.0/basics/communicating-with-host",title:"Host Communication",description:"How to get information from the Host",source:"@site/versioned_docs/version-0.4.0/basics/06-communicating-with-host.md",sourceDirName:"basics",slug:"/basics/communicating-with-host",permalink:"/docs/0.4.0/basics/communicating-with-host",draft:!1,tags:[],version:"0.4.0",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"How to get information from the Host"},sidebar:"tutorialSidebar",previous:{title:"Storage interaction",permalink:"/docs/0.4.0/basics/storage-interaction"},next:{title:"Testing",permalink:"/docs/0.4.0/basics/testing"}},c={},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"host-communication"},"Host Communication"),(0,o.kt)("p",null,"One of the things that your contract will probably do is to query the host for some information -\nwhat is the current time? Who called me? Following example shows how to do this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/host.rs"',title:'"examples/src/docs/host.rs"'},"use odra::Variable;\nuse odra::types::{BlockTime, Address};\n\n#[odra::module]\npub struct HostContract {\n name: Variable<String>,\n created_at: Variable<BlockTime>,\n created_by: Variable<Address>,\n}\n\n#[odra::module]\nimpl HostContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.created_at.set(odra::contract_env::get_block_time());\n self.created_by.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n}\n")),(0,o.kt)("p",null,"As you can see, we are calling functions from ",(0,o.kt)("inlineCode",{parentName:"p"},"odra::contract_env"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"get_block_time()")," will return\nthe current block time wrapped in Odra type ",(0,o.kt)("inlineCode",{parentName:"p"},"BlockTime"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"caller()")," will return an Odra ",(0,o.kt)("inlineCode",{parentName:"p"},"Address")," of\na caller (this can be an external caller or another contract)."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will learn more functions that Odra exposes from host and types it uses in further articles.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"In the next article, we'll dive into testing your contracts with Odra, so you can check that the code\nwe presented in fact works!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ac692f92.26b66903.js b/docs/assets/js/ac692f92.26b66903.js new file mode 100644 index 000000000..1bd063bf4 --- /dev/null +++ b/docs/assets/js/ac692f92.26b66903.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6539],{30577:e=>{e.exports=JSON.parse('{"title":"Backends","description":"Backends","slug":"/category/backends","permalink":"/docs/next/category/backends","navigation":{"previous":{"title":"Storage Layout","permalink":"/docs/next/advanced/storage-layout"},"next":{"title":"What is a backend?","permalink":"/docs/next/backends/what-is-a-backend"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/acebe248.8ef99510.js b/docs/assets/js/acebe248.8ef99510.js new file mode 100644 index 000000000..122c000f9 --- /dev/null +++ b/docs/assets/js/acebe248.8ef99510.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6393],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||s;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,i=new Array(s);i[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var p=2;p<s;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},70411:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:5,description:"How to write data into blockchain's storage"},i="Storage interaction",o={unversionedId:"basics/storage-interaction",id:"version-0.4.0/basics/storage-interaction",title:"Storage interaction",description:"How to write data into blockchain's storage",source:"@site/versioned_docs/version-0.4.0/basics/05-storage-interaction.md",sourceDirName:"basics",slug:"/basics/storage-interaction",permalink:"/docs/0.4.0/basics/storage-interaction",draft:!1,tags:[],version:"0.4.0",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"How to write data into blockchain's storage"},sidebar:"tutorialSidebar",previous:{title:"Flipper Internals",permalink:"/docs/0.4.0/basics/flipper-internals"},next:{title:"Host Communication",permalink:"/docs/0.4.0/basics/communicating-with-host"}},l={},p=[{value:"Variable",id:"variable",level:2},{value:"Mapping",id:"mapping",level:2},{value:"List",id:"list",level:2},{value:"Custom Types",id:"custom-types",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-interaction"},"Storage interaction"),(0,r.kt)("p",null,"The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go\nthrough all of them and explain their pros and cons."),(0,r.kt)("h2",{id:"variable"},"Variable"),(0,r.kt)("p",null,"The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your\nvariable in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),' type. Let\'s look at a "real world" example of a contract that represents a dog:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"#[odra::module]\npub struct DogContract {\n barks: Variable<bool>,\n weight: Variable<u32>,\n name: Variable<String>,\n walks: Variable<Vec<u32>>,\n}\n")),(0,r.kt)("p",null,"You can see the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," wrapping the data. Even complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," can be wrapped (with some caveats)!"),(0,r.kt)("p",null,"Let's make this contract usable, by providing a constructor and some getter functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"use odra::Variable;\n\n#[odra::module]\nimpl DogContract {\n #[odra(init)]\n pub fn init(&mut self, barks: bool, weight: u32, name: String) {\n self.barks.set(barks);\n self.weight.set(weight);\n self.name.set(name);\n self.walks.set(Vec::<u32>::default());\n }\n\n pub fn barks(&self) -> bool {\n self.barks.get_or_default()\n }\n\n pub fn weight(&self) -> u32 {\n self.weight.get_or_default()\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.len() as u32\n }\n\n pub fn walks_total_length(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.iter().sum()\n }\n}\n")),(0,r.kt)("p",null,"As you can see, you can access the data, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"get_or_default")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"...\nself.barks.get_or_default()\n...\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Keep in mind that using ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," will result in an Option that you'll need to unwrap - the variable\ndoesn't have to be initialized!")),(0,r.kt)("p",null,"To modify the data, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"set()")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"self.barks.set(barks);\n")),(0,r.kt)("p",null,"A Variable is easy to use and efficient for simple data types. One of its downsides is that it\nserializes the data as a whole, so when you're using complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap"),",\neach time you ",(0,r.kt)("inlineCode",{parentName:"p"},"get")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," the whole data is read and written to the blockchain storage."),(0,r.kt)("p",null,"In the example above, if we want to see how many walks our dog had, we would use the function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"pub fn walks_amount(&self) -> usize {\n let walks = self.walks.get_or_default();\n walks.len()\n}\n")),(0,r.kt)("p",null,"But to do so, we need to extract the whole serialized vector from the storage, which would inefficient,\nespecially for larger sets of data."),(0,r.kt)("p",null,"To tackle this issue following two types were created."),(0,r.kt)("h2",{id:"mapping"},"Mapping"),(0,r.kt)("p",null,"The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to\npass two values - the key type and the value type. Let's look at the variation of the Dog contract, that\nuses Mapping to store information about our dog's friends and how many times they visited:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/mapping.rs"',title:'"examples/src/docs/mapping.rs"'},"use odra::{Mapping, Variable};\n\n#[odra::module]\npub struct DogContract2 {\n name: Variable<String>,\n friends: Mapping<String, u32>,\n}\n")),(0,r.kt)("p",null,"In the example above, our key is a String (it is a name of the friend) and we are storing u32 values\n(amount of visits). To read and write values from and into a Mapping we use a similar approach\nto the one shown in the Variables section with one difference - we need to pass a key:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/mapping.rs"',title:'"examples/src/docs/mapping.rs"'},"pub fn visit(&mut self, friend_name: String) {\n let visits = self.visits(friend_name.clone());\n self.friends.set(&friend_name, visits + 1);\n}\n\npub fn visits(&self, friend_name: String) -> u32 {\n self.friends.get_or_default(&friend_name)\n}\n")),(0,r.kt)("p",null,"The biggest improvement over a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," is that we can model functionality of a ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap")," using ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nThe amount of data written to and read from the storage is minimal. However, we cannot iterate over ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nWe could implement such behavior by using a numeric type key and saving the length of the set in a\nseparate variable. Thankfully Odra comes with a prepared solution - the ",(0,r.kt)("inlineCode",{parentName:"p"},"List")," type."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with\na Variable working together:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="core/src/list.rs"',title:'"core/src/list.rs"'},"use odra::{Variable, List};\n\npub struct List<T> {\n values: Mapping<u32, T>,\n index: Variable<u32>\n}\n"))),(0,r.kt)("h2",{id:"list"},"List"),(0,r.kt)("p",null,"Going back to our DogContract example - let's revisit the walk case. This time, instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),",\nwe'll use the list:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"#[odra::module]\npub struct DogContract3 {\n name: Variable<String>,\n walks: List<u32>,\n}\n")),(0,r.kt)("p",null,"As you can see, the notation is very similar to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),". To understand the usage, take a look\nat the reimplementation of the functions with an additional function that takes our dog for a walk\n(it writes the data to the storage):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"#[odra::module]\nimpl DogContract3 {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n self.walks.len()\n }\n\n pub fn walks_total_length(&self) -> u32 {\n self.walks.iter().sum()\n }\n\n pub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n }\n}\n")),(0,r.kt)("p",null,"Now, we can know how many walks our dog had without loading the whole vector from the storage.\nWe need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all\nthe cases for you."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All of the above examples, alongside the tests, are available in the odra repository in the ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/docs/")," folder.")),(0,r.kt)("h2",{id:"custom-types"},"Custom Types"),(0,r.kt)("p",null,"By default you can store only built-in types like numbers, Options, Results, Strings, Vectors."),(0,r.kt)("p",null,"Implementing custom types is straightforward, your type must derive from ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType"),": "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{Address, OdraType};\n\n#[derive(OdraType)]\npub struct Dog {\n pub name: String,\n pub age: u8,\n pub owner: Option<Address>\n}\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Each field of your struct must be an OdraType.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next article, we'll see how to query the host for information about the world and our contract."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ad92572d.bb1dfdb2.js b/docs/assets/js/ad92572d.bb1dfdb2.js new file mode 100644 index 000000000..09d99b770 --- /dev/null +++ b/docs/assets/js/ad92572d.bb1dfdb2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[242],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),f=a,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},96867:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:1},i="What is a backend?",c={unversionedId:"backends/what-is-a-backend",id:"version-0.5.0/backends/what-is-a-backend",title:"What is a backend?",description:"You can think of a backend as a target platform for your smart contract.",source:"@site/versioned_docs/version-0.5.0/backends/01-what-is-a-backend.md",sourceDirName:"backends",slug:"/backends/what-is-a-backend",permalink:"/docs/0.5.0/backends/what-is-a-backend",draft:!1,tags:[],version:"0.5.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Backends",permalink:"/docs/0.5.0/category/backends"},next:{title:"MockVM",permalink:"/docs/0.5.0/backends/mock-vm"}},s={},l=[{value:"Contract Env",id:"contract-env",level:2},{value:"Test Env",id:"test-env",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-a-backend"},"What is a backend?"),(0,a.kt)("p",null,"You can think of a backend as a target platform for your smart contract.\nThis can be a piece of code allowing you to quickly check your code - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.5.0/backends/mock-vm"},"MockVM"),",\nor a complete virtual machine, spinning up a blockchain for you - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.5.0/backends/casper"},"CasperVM"),"."),(0,a.kt)("p",null,"Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env."),(0,a.kt)("h2",{id:"contract-env"},"Contract Env"),(0,a.kt)("p",null,"The Contract Env is a simple interface that each backend needs to implement,\nexposing features of the blockchain from the perspective of the contract."),(0,a.kt)("p",null,"It gives Odra a set of functions, which allows implementing more complex concepts -\nfor example, to implement ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/storage-interaction"},"Mapping"),",\nOdra requires some kind of storage integration.\nThe exact implementation of those functions is a responsibility of a backend,\nmaking Odra and its user free to implement the contract logic,\ninstead of messing with the blockchain internals."),(0,a.kt)("p",null,"Other functions from Contract Env include handling transfers, addresses, block time, errors and events."),(0,a.kt)("h2",{id:"test-env"},"Test Env"),(0,a.kt)("p",null,"Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with\nthe backend from the outside world - really useful for implementing tests."),(0,a.kt)("p",null,"This ranges from interacting with the blockchain - like deploying and calling the contracts,\nto the more test-oriented - handling errors, forwarding the block time, etc."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will take a look at backends Odra implements in more detail."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/aee91c2e.0da84d3e.js b/docs/assets/js/aee91c2e.0da84d3e.js new file mode 100644 index 000000000..014a1f348 --- /dev/null +++ b/docs/assets/js/aee91c2e.0da84d3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3073],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),d=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},l=function(e){var t=d(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),u=d(n),h=a,m=u["".concat(s,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(m,i(i({ref:t},l),{},{components:n})):r.createElement(m,i({ref:t},l))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var d=2;d<o;d++)i[d]=n[d];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},17118:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},i="OdraVM",c={unversionedId:"backends/odra-vm",id:"backends/odra-vm",title:"OdraVM",description:"The OdraVM is a simple implementation of a mock backend with a minimal set of features that allows testing",source:"@site/docs/backends/02-odra-vm.md",sourceDirName:"backends",slug:"/backends/odra-vm",permalink:"/docs/next/backends/odra-vm",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What is a backend?",permalink:"/docs/next/backends/what-is-a-backend"},next:{title:"Casper",permalink:"/docs/next/backends/casper"}},s={},d=[{value:"Usage",id:"usage",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Execution",id:"execution",level:2}],l={toc:d};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odravm"},"OdraVM"),(0,a.kt)("p",null,"The OdraVM is a simple implementation of a mock backend with a minimal set of features that allows testing\nthe code written in Odra without compiling the contract to the target architecture and spinning up the\nblockchain."),(0,a.kt)("p",null,"Thanks to OdraVM tests run a lot faster than other backends. You can even debug the code in real time -\nsimply use your IDE's debug functionality."),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The OdraVM is the default backend for Odra framework, so each time you run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,a.kt)("p",null,"You are running your code against it."),(0,a.kt)("h2",{id:"architecture"},"Architecture"),(0,a.kt)("p",null,"OdraVM consists of two main parts: the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," and the ",(0,a.kt)("inlineCode",{parentName:"p"},"State"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," is a list of contracts deployed onto the OdraVM, identified by an ",(0,a.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,a.kt)("p",null,"Contracts and Test Env functions can modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"State")," of the OdraVM."),(0,a.kt)("p",null,'Contrary to the "real" backend, which holds the whole history of the blockchain,\nthe OdraVM ',(0,a.kt)("inlineCode",{parentName:"p"},"State")," holds only the current state of the OdraVM.\nThanks to this and the fact that we do not need the blockchain itself,\nOdraVM starts instantly and runs the tests in the native speed."),(0,a.kt)("h2",{id:"execution"},"Execution"),(0,a.kt)("p",null,"When the OdraVM backend is enabled, the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro is responsible for converting\nyour ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions into a list of Entrypoints, which are put into a ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Container"),".\nWhen the contract is deployed, its Container registered into a Registry under an address.\nDuring the contract call, OdraVM finds an Entrypoint and executes the code."),(0,a.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[Contract Container];\n id2[Contract Container]--\x3eid3((Contract Registry))\n id3((Contract Registry))--\x3eid4[(OdraVM Execution)]"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/af2a4ce0.a24a33da.js b/docs/assets/js/af2a4ce0.a24a33da.js new file mode 100644 index 000000000..c422e1f76 --- /dev/null +++ b/docs/assets/js/af2a4ce0.a24a33da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9706],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},15008:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:2,description:"Files and folders in the Odra project"},i="Directory structure",l={unversionedId:"basics/directory-structure",id:"version-0.6.0/basics/directory-structure",title:"Directory structure",description:"Files and folders in the Odra project",source:"@site/versioned_docs/version-0.6.0/basics/02-directory-structure.md",sourceDirName:"basics",slug:"/basics/directory-structure",permalink:"/docs/0.6.0/basics/directory-structure",draft:!1,tags:[],version:"0.6.0",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Files and folders in the Odra project"},sidebar:"tutorialSidebar",previous:{title:"Cargo Odra",permalink:"/docs/0.6.0/basics/cargo-odra"},next:{title:"Odra.toml",permalink:"/docs/0.6.0/basics/odra-toml"}},s={},c=[{value:"Cargo.toml",id:"cargotoml",level:2},{value:"Odra.toml",id:"odratoml",level:2},{value:".builder_* folders",id:"builder_-folders",level:2},{value:"src/",id:"src",level:2},{value:"target/",id:"target",level:2},{value:"wasm/",id:"wasm",level:2}],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"directory-structure"},"Directory structure"),(0,a.kt)("p",null,"After creating a new project using Odra and running the tests, you will be presented with the\nfollowing files and directories:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 CHANGELOG.md\n\u251c\u2500\u2500 Odra.toml\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 .builder_casper/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 flipper.rs\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 target/\n\u2514\u2500\u2500 wasm/\n")),(0,a.kt)("h2",{id:"cargotoml"},"Cargo.toml"),(0,a.kt)("p",null,"Let's first take a look at ",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "sample"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,a.kt)("p",null,"By default, your project will use the latest odra version available at crates.io. We are using two features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/mock-vm")," - it is responsible for running tests on Odra's MockVM"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/casper")," - backend implementation of Casper blockchain\nMore backends will be released as features that will be possible to enable here.")),(0,a.kt)("h2",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"This is the file that holds information about contracts that will be generated when running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"As we can see, we have a single contract, its ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) corresponds to\nthe contract is located in ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),".\nMore contracts can be added here by hand, or by using ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command."),(0,a.kt)("h2",{id:"builder_-folders"},".builder_* folders"),(0,a.kt)("p",null,"Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary\nfor building wasm files and running them against blockchain VMs. As it is not necessary to modify\nfiles in those folders in any way, by default they are hidden (hence the ",(0,a.kt)("inlineCode",{parentName:"p"},".")," at the beginning of the\nfolder name)."),(0,a.kt)("h2",{id:"src"},"src/"),(0,a.kt)("p",null,"This is the folder where your smart contract files live."),(0,a.kt)("h2",{id:"target"},"target/"),(0,a.kt)("p",null,"Files generated by cargo during the build process are put here."),(0,a.kt)("h2",{id:"wasm"},"wasm/"),(0,a.kt)("p",null,"WASM files generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," are put here. You can grab those WASM files\nand deploy them on the blockchain of your choosing."),(0,a.kt)("h1",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now, let's take a look at one of the files mentioned above in more detail,\nnamely the ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/afc3a23f.a8d853e2.js b/docs/assets/js/afc3a23f.a8d853e2.js new file mode 100644 index 000000000..d41f4937b --- /dev/null +++ b/docs/assets/js/afc3a23f.a8d853e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[996],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},p),{},{components:a})):n.createElement(g,i({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=a[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},1883:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1,description:"A tool for managing Odra projects"},i="Cargo Odra",l={unversionedId:"basics/cargo-odra",id:"version-0.7.0/basics/cargo-odra",title:"Cargo Odra",description:"A tool for managing Odra projects",source:"@site/versioned_docs/version-0.7.0/basics/01-cargo-odra.md",sourceDirName:"basics",slug:"/basics/cargo-odra",permalink:"/docs/basics/cargo-odra",draft:!1,tags:[],version:"0.7.0",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"A tool for managing Odra projects"},sidebar:"tutorialSidebar",previous:{title:"Basics",permalink:"/docs/category/basics"},next:{title:"Directory structure",permalink:"/docs/basics/directory-structure"}},s={},c=[{value:"Managing projects",id:"managing-projects",level:2},{value:"Generating code",id:"generating-code",level:2},{value:"Testing",id:"testing",level:2},{value:"Building code",id:"building-code",level:2},{value:"Updating dependencies",id:"updating-dependencies",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cargo-odra"},"Cargo Odra"),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/getting-started/installation"},"Installation")," tutorial properly,\nyou should already be set up with the Cargo Odra tool. It is an executable that will help you with\nmanaging your smart contracts project, testing and running them on multiple backends (blockchains)."),(0,r.kt)("p",null,"Let's take a look at all the possibilities that Cargo Odra gives you."),(0,r.kt)("h2",{id:"managing-projects"},"Managing projects"),(0,r.kt)("p",null,"Two commands will help you create a new project. The first one is ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra new"),".\nYou need to pass one parameter, namely ",(0,r.kt)("inlineCode",{parentName:"p"},"--name {PROJECT_NAME}"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project\n")),(0,r.kt)("p",null,"This will create a new project in the ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project")," folder and name it ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project"),". You can see it\nfor yourself, for example by taking a look into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file created in your project's folder:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n')),(0,r.kt)("p",null,"The project is created using the template located in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra's main repository"),".\nBy default it uses ",(0,r.kt)("inlineCode",{parentName:"p"},"full")," template, if you want, you can use minimalistic ",(0,r.kt)("inlineCode",{parentName:"p"},"blank")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -t blank --name my-project\n")),(0,r.kt)("p",null,"By default, the latest release of Odra will be used for the template and as a dependency.\nYou can pass a source of Odra you want to use, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"-s")," parameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -n my-project -s ../odra # will use local folder of odra\ncargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release\ncargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io\n")),(0,r.kt)("p",null,"The second way of creating a project is by using ",(0,r.kt)("inlineCode",{parentName:"p"},"init")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra init --name my-project\n")),(0,r.kt)("p",null,"It works in the same way as ",(0,r.kt)("inlineCode",{parentName:"p"},"new"),", but instead of creating a new folder, it will create a project\nin the current, empty directory."),(0,r.kt)("h2",{id:"generating-code"},"Generating code"),(0,r.kt)("p",null,"If you want to quickly create a new contract code, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"generate")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra generate -c counter \n")),(0,r.kt)("p",null,"This will create a new file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/counter.rs")," with sample code, add appropriate ",(0,r.kt)("inlineCode",{parentName:"p"},"use")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mod")," sections\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"src/lib.rs")," and update the ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file accordingly. To learn more about ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file,\nvisit ",(0,r.kt)("a",{parentName:"p",href:"/docs/basics/odra-toml"},"Odra.toml"),"."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Most used command during the development of your project should be this one:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"It will run your tests against Odra's MockVM. It is substantially faster than virtual machines\nprovided by blockchains developers and implements all the features Odra uses."),(0,r.kt)("p",null,'When you want to run tests against a "real" VM, just provide the name of the backend using ',(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\noption:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files,\nspin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat.\nKeep in mind that this is a lot slower than MockVM and you cannot use the debugger.\nThis is why MockVM was created and should be your first choice when developing contracts.\nOf course, testing all of your code against a blockchain VM is a must in the end."),(0,r.kt)("p",null,"If you want to run only some of the tests, you can pass arguments to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo test")," command\n(which is run in the background obviously):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- this-will-be-passed-to-cargo-test\n")),(0,r.kt)("p",null,"If you want to run tests which names contain the word ",(0,r.kt)("inlineCode",{parentName:"p"},"two"),", you can execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- two\n")),(0,r.kt)("p",null,"Of course, you can do the same when using the backend:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper -- two\n")),(0,r.kt)("h2",{id:"building-code"},"Building code"),(0,r.kt)("p",null,"You can also build the code itself and generate the output contracts without running the tests.\nTo do so, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("p",null,"Where ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," is the name of the backend we are using in this example. If the build process\nfinishes successfully, wasm files will be located in ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," folder."),(0,r.kt)("h2",{id:"updating-dependencies"},"Updating dependencies"),(0,r.kt)("p",null,"You will learn later, that the project using Odra contains more than one Rust project - your own and\none or more builders. To run ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo update")," on all of them at once instead of traversing all the folders\nyou can use this command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra update\n")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next section, we will take a look at all the files and directories that ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," created\nfor us and explain their purpose."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b0f6aa87.6a1e5a02.js b/docs/assets/js/b0f6aa87.6a1e5a02.js new file mode 100644 index 000000000..fd70a9f4e --- /dev/null +++ b/docs/assets/js/b0f6aa87.6a1e5a02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8584],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(a),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,s=new Array(o);s[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var p=2;p<o;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},69182:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:3},s="Casper",i={unversionedId:"backends/casper",id:"version-0.4.0/backends/casper",title:"Casper",description:"The Casper backend allows you to compile your contracts into WASM files which can be deployed",source:"@site/versioned_docs/version-0.4.0/backends/03-casper.md",sourceDirName:"backends",slug:"/backends/casper",permalink:"/docs/0.4.0/backends/casper",draft:!1,tags:[],version:"0.4.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"MockVM",permalink:"/docs/0.4.0/backends/mock-vm"},next:{title:"Examples",permalink:"/docs/0.4.0/category/examples"}},l={},p=[{value:"Types",id:"types",level:2},{value:"Contract Env",id:"contract-env",level:2},{value:"Events",id:"events",level:3},{value:"Payable",id:"payable",level:3},{value:"Revert",id:"revert",level:3},{value:"Context",id:"context",level:3},{value:"Test Env",id:"test-env",level:2},{value:"Usage",id:"usage",level:2},{value:"Constructors",id:"constructors",level:2},{value:"WASM arguments",id:"wasm-arguments",level:3},{value:"Example usage",id:"example-usage",level:3},{value:"Sending CSPR to a contract",id:"sending-cspr-to-a-contract",level:2},{value:"Using proxy_caller.wasm",id:"using-proxy_callerwasm",level:3},{value:"Execution",id:"execution",level:2}],c={toc:p};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"casper"},"Casper"),(0,r.kt)("p",null,"The Casper backend allows you to compile your contracts into WASM files which can be deployed\nonto ",(0,r.kt)("a",{parentName:"p",href:"https://casper.network/"},"Casper Blockchain"),"\nand lets you to easily run them against ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-execution-engine"},"Casper's Execution Engine")," locally."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"A struct to be written into the storage must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait OdraType: \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("p",null,"The other exposed types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CallArgs")," - wraps around casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},(0,r.kt)("inlineCode",{parentName:"a"},"RuntimeArgs")),";"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," - U512 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"BlockTime")," - u64 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Address")," - an enum that encapsulates casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/account/struct.AccountHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"AccountHash"))," and ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/struct.ContractPackageHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ContractPackageHash")))),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances."),(0,r.kt)("h3",{id:"events"},"Events"),(0,r.kt)("p",null,"An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've\nalready learned from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/events"},"events article"),", in Odra you emit an event, similarly, you would do it in ",(0,r.kt)("a",{parentName:"p",href:"https://docs.soliditylang.org/en/v0.8.15/contracts.html#example"},"Solidity"),"."),(0,r.kt)("p",null,"Under the hood, Odra integrates with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/make-software/casper-event-standard"},"Casper Event Standard")," and creates a few ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/struct.URef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"URef"),"s")," in the global state when a contract is being installed:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events")," - a dictionary that stores events' data."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_length")," - the evens count."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_ces_version")," - the version of ",(0,r.kt)("inlineCode",{parentName:"li"},"Casper Event Standard"),". "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_schema")," - a dictionary that stores event schemas.")),(0,r.kt)("p",null,"Besides that, all the events the contract emits are registered - events schemas are written to the storage under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__events_schema")," key."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Don't forget to expose events in the module using ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module(events = [...])]"),". ")),(0,r.kt)("p",null,"So, ",(0,r.kt)("inlineCode",{parentName:"p"},"Events")," are nothing different from any other data stored by a contract."),(0,r.kt)("p",null,"A struct to be an event must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"SerializableEvent")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait SerializableEvent: \n odra_types::event::OdraEvent + \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("h3",{id:"payable"},"Payable"),(0,r.kt)("p",null,"The first Odra idiom is a ",(0,r.kt)("inlineCode",{parentName:"p"},"Contract Main Purse"),". It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper ",(0,r.kt)("inlineCode",{parentName:"p"},"URef")," and a purse are created and stored under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse")," key."),(0,r.kt)("p",null,"Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo Purse"),". It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse."),(0,r.kt)("p",null,"Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable.\nIf under the way something goes wrong with the transfer, the contract reverts."),(0,r.kt)("p",null,"The transferred amount can be read inside the contract by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Odra expects the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," runtime argument to be attached to a contract call.")),(0,r.kt)("h3",{id:"revert"},"Revert"),(0,r.kt)("p",null,"In Casper, we can stop the execution pretty straightforwardly - call the ",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::revert()"),".\nOdra adds an extra abstraction layer - in a contract ",(0,r.kt)("inlineCode",{parentName:"p"},"ExecutionError"),"s are defined, which ultimately are transformed into Casper's ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/enum.ApiError.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ApiError::User")),"."),(0,r.kt)("h3",{id:"context"},"Context"),(0,r.kt)("p",null,"Casper equips developers with very low-level tooling, which can be cumbersome for newcomers.\nIf you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_address()")," function takes the first element of the callstack (",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-contract/latest/casper_contract/contract_api/runtime/fn.get_call_stack.html"},(0,r.kt)("inlineCode",{parentName:"a"},"runtime::get_call_stack()")),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::caller()")," function takes the second element of the call stack (",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::get_call_stack()"),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"As mentioned in the ","[Payable]"," section, to store CSPR, each contract creates its purse. To read the contract balance, you call ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_balance"),", which checks the balance of the purse stored under ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse"),"."),(0,r.kt)("h2",{id:"test-env"},"Test Env"),(0,r.kt)("p",null,"Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Casper Execution Engine"),"."),(0,r.kt)("p",null,"In your test, you can freely switch execution context by setting as a caller (",(0,r.kt)("inlineCode",{parentName:"p"},"test_env::set_caller()"),") one of the 20 predefined accounts. Each account possesses the default amount of ",(0,r.kt)("inlineCode",{parentName:"p"},"Motes")," (100_000_000_000_000_000)."),(0,r.kt)("p",null,"The Test Env internally keeps track of the current ",(0,r.kt)("inlineCode",{parentName:"p"},"block time"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"error")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"attached value"),"."),(0,r.kt)("p",null,"Each test is executed on a fresh instance of the Test Env."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Name of the Casper backend in Odra is ",(0,r.kt)("inlineCode",{parentName:"p"},"casper"),", so to run the tests against it, simply pass it as a ",(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\nparameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"If you want to just generate a wasm file, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("h2",{id:"constructors"},"Constructors"),(0,r.kt)("p",null,"Let's define a basic Odra module that includes a constructor:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\nstruct Counter {\n value: Variable<u32>\n}\n\n#[odra::module]\nimpl Counter {\n #[odra(init)]\n pub initialize(&mut self, value: u32) {\n self.value.set(value);\n }\n}\n")),(0,r.kt)("p",null,"Read more about constructors ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/advanced/attributes#init"},"here"),"."),(0,r.kt)("h3",{id:"wasm-arguments"},"WASM arguments"),(0,r.kt)("p",null,"When deploying a new contract you have to specify following arguments."),(0,r.kt)("p",null,"Required arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The key under which the package hash of the contract will be stored."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_allow_key_override")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true")," and the key specified in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," already exists, it will be overwritten."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_is_upgradable")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),", the contract will be deployed as upgradable.")),(0,r.kt)("p",null,"Optional arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_constructor")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. If the contract has the constructor entry point marked with ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]"),", this should be set to the constructor name."),(0,r.kt)("li",{parentName:"ul"},"constructor arguments that match entry point set in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_constructor"),".")),(0,r.kt)("h3",{id:"example-usage"},"Example usage"),(0,r.kt)("p",null,"To deploy your contract with a constructor using ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client"),", you need to pass the above arguments.\nAdditionally, you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," argument, which sets the arbitrary initial value for the counter."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 5000000000000 \\\n --session-path ./wasm/counter.wasm \\\n --session-arg "odra_cfg_package_hash_key_name:string:\'counter_package_hash\'" \\\n --session-arg "odra_cfg_allow_key_override:bool:\'true\'" \\\n --session-arg "odra_cfg_is_upgradable:bool:\'true\'" \\\n --session-arg "odra_cfg_constructor:string:\'initialize\'" \\\n --session-arg "value:u32:42" \n')),(0,r.kt)("p",null,"For a more in-depth tutorial, please refer to the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.casper.network/writing-contracts/"},"Casper's 'Writing On-Chain Code'"),"."),(0,r.kt)("h2",{id:"sending-cspr-to-a-contract"},"Sending CSPR to a contract"),(0,r.kt)("p",null,"Defining payable entry points is described in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/basics/native-token"},"Native Token")," section."),(0,r.kt)("p",null,"What is happening under the hood is that Odra creates a new ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," argument for each payable\nentry point. The ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," needs to be top-upped with CSPR before calling the contract.\nWhen a contract adds CSPR to another contract call, Odra handles it for you.\nThe problem arises when you want to call an entry point and attach CSPR as an account.\nThe only way of doing that is by executing code in the sessions context, that\ntop-ups the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," and then calls the contract."),(0,r.kt)("p",null,"Odra provides a generic ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," that does exactly that.\nYou can build it by yourself from the main Odra repository, or use the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.4.0/odra-casper/livenet/resources/proxy_caller.wasm"},"proxy_caller.wasm"),"\nwe maintain."),(0,r.kt)("h3",{id:"using-proxy_callerwasm"},"Using proxy_caller.wasm"),(0,r.kt)("p",null,"To use the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," you need to attach the following arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"contract_package_hash")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"BytesArray(32)")," type. The package hash of the contract you want to call.\nResult of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," on ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/contracts/struct.ContractPackageHash.html"},"CasperPackageHash"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"entry_point")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The name of the entry point you want to call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"args")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bytes")," type. It is a serialized ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},"RuntimeArgs")," with the arguments you want to pass\nto the entry point. To be specific it is the result of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," method wrapped with ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/bytesrepr/struct.Bytes.html"},"Bytes")," type."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"attached_value"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<U512>")," type. The amount of CSPR you want to attach to the call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"amount"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"U512")," type. Should be the same value as ",(0,r.kt)("inlineCode",{parentName:"li"},"attached_value")," if not ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".\nIt is a special Casper argument that enables the access to account's main purse.")),(0,r.kt)("p",null,"Currently ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client")," doesn't allow building such arguments.\nYou have to build it using your SDK."),(0,r.kt)("h2",{id:"execution"},"Execution"),(0,r.kt)("p",null,"First thing Odra does with your code, is similar to the one used in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.4.0/backends/mock-vm"},"MockVM")," -\na list of entrypoints is generated, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[IR];\n id2[IR]--\x3eid3((WASM))\n id3((WASM))--\x3eid4[(Local Casper\\nExecution Engine)]\n id3((WASM))--\x3eid5[(Casper Network)]"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b241ea99.5afc158d.js b/docs/assets/js/b241ea99.5afc158d.js new file mode 100644 index 000000000..c8b4ef93e --- /dev/null +++ b/docs/assets/js/b241ea99.5afc158d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4230],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return t?r.createElement(f,l(l({ref:n},d),{},{components:t})):r.createElement(f,l({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u<a;u++)l[u]=t[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},16017:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:3},l="OwnedToken",i={unversionedId:"tutorials/owned-token",id:"version-0.3.1/tutorials/owned-token",title:"OwnedToken",description:"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.",source:"@site/versioned_docs/version-0.3.1/tutorials/owned-token.md",sourceDirName:"tutorials",slug:"/tutorials/owned-token",permalink:"/docs/0.3.1/tutorials/owned-token",draft:!1,tags:[],version:"0.3.1",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"ERC-20",permalink:"/docs/0.3.1/tutorials/erc20"}},s={},u=[{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:3},{value:"Delegation",id:"delegation",level:3},{value:"Summary",id:"summary",level:2}],d={toc:u};function c(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ownedtoken"},"OwnedToken"),(0,o.kt)("p",null,"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"What should our module be capable of?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Conform the Erc20 interface."),(0,o.kt)("li",{parentName:"ol"},"Allow minting tokens but only the module owner."),(0,o.kt)("li",{parentName:"ol"},"The current owner should be able to designate a new owner.")),(0,o.kt)("h3",{id:"module-definition"},"Module definition"),(0,o.kt)("p",null,"Let's define a module called ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedToken")," that is a composition of ",(0,o.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Erc20")," modules."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n")),(0,o.kt)("p",null,"As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!"),(0,o.kt)("h3",{id:"delegation"},"Delegation"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use odra::types::{Address, Balance}\n\n...\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n self.erc20.approve(spender, amount);\n }\n\n pub fn get_owner(&self) -> Address {\n self.ownable.get_owner()\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ownable.change_ownership(new_owner);\n }\n\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.ownable.ensure_ownership(&contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,o.kt)("p",null,"Easy. However, there are a few worth mentioning subtleness:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L11")," - A constructor is a great place to init both modules at once. "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L14-L16")," - Most of the entrypoints do not need any modification, so we simply delegates them to the ",(0,o.kt)("inlineCode",{parentName:"li"},"erc20")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L52")," - The same we do with the ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L58-L61")," - Minting should not be unconditional, we need some control over it. First, using ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," we make sure the ",(0,o.kt)("inlineCode",{parentName:"li"},"caller")," really is the owner.")),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b2b675dd.b113f45a.js b/docs/assets/js/b2b675dd.b113f45a.js new file mode 100644 index 000000000..33b63bfbd --- /dev/null +++ b/docs/assets/js/b2b675dd.b113f45a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":7,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/docs/assets/js/b2e57a16.e8efe736.js b/docs/assets/js/b2e57a16.e8efe736.js new file mode 100644 index 000000000..f6abc6aaa --- /dev/null +++ b/docs/assets/js/b2e57a16.e8efe736.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9243],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),f=a,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},71345:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:1},i="What is a backend?",c={unversionedId:"backends/what-is-a-backend",id:"version-0.6.0/backends/what-is-a-backend",title:"What is a backend?",description:"You can think of a backend as a target platform for your smart contract.",source:"@site/versioned_docs/version-0.6.0/backends/01-what-is-a-backend.md",sourceDirName:"backends",slug:"/backends/what-is-a-backend",permalink:"/docs/0.6.0/backends/what-is-a-backend",draft:!1,tags:[],version:"0.6.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Backends",permalink:"/docs/0.6.0/category/backends"},next:{title:"MockVM",permalink:"/docs/0.6.0/backends/mock-vm"}},s={},l=[{value:"Contract Env",id:"contract-env",level:2},{value:"Test Env",id:"test-env",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-a-backend"},"What is a backend?"),(0,a.kt)("p",null,"You can think of a backend as a target platform for your smart contract.\nThis can be a piece of code allowing you to quickly check your code - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.6.0/backends/mock-vm"},"MockVM"),",\nor a complete virtual machine, spinning up a blockchain for you - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.6.0/backends/casper"},"CasperVM"),"."),(0,a.kt)("p",null,"Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env."),(0,a.kt)("h2",{id:"contract-env"},"Contract Env"),(0,a.kt)("p",null,"The Contract Env is a simple interface that each backend needs to implement,\nexposing features of the blockchain from the perspective of the contract."),(0,a.kt)("p",null,"It gives Odra a set of functions, which allows implementing more complex concepts -\nfor example, to implement ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/storage-interaction"},"Mapping"),",\nOdra requires some kind of storage integration.\nThe exact implementation of those functions is a responsibility of a backend,\nmaking Odra and its user free to implement the contract logic,\ninstead of messing with the blockchain internals."),(0,a.kt)("p",null,"Other functions from Contract Env include handling transfers, addresses, block time, errors and events."),(0,a.kt)("h2",{id:"test-env"},"Test Env"),(0,a.kt)("p",null,"Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with\nthe backend from the outside world - really useful for implementing tests."),(0,a.kt)("p",null,"This ranges from interacting with the blockchain - like deploying and calling the contracts,\nto the more test-oriented - handling errors, forwarding the block time, etc."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will take a look at backends Odra implements in more detail."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b2f44958.fe9a4cb5.js b/docs/assets/js/b2f44958.fe9a4cb5.js new file mode 100644 index 000000000..431487e9e --- /dev/null +++ b/docs/assets/js/b2f44958.fe9a4cb5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5776],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(n),d=o,f=m["".concat(c,".").concat(d)]||m[d]||p[d]||a;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},88144:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,description:"How to get information from the Host"},i="Host Communication",s={unversionedId:"basics/communicating-with-host",id:"version-0.5.0/basics/communicating-with-host",title:"Host Communication",description:"How to get information from the Host",source:"@site/versioned_docs/version-0.5.0/basics/06-communicating-with-host.md",sourceDirName:"basics",slug:"/basics/communicating-with-host",permalink:"/docs/0.5.0/basics/communicating-with-host",draft:!1,tags:[],version:"0.5.0",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"How to get information from the Host"},sidebar:"tutorialSidebar",previous:{title:"Storage interaction",permalink:"/docs/0.5.0/basics/storage-interaction"},next:{title:"Testing",permalink:"/docs/0.5.0/basics/testing"}},c={},l=[{value:"What's next",id:"whats-next",level:2}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"host-communication"},"Host Communication"),(0,o.kt)("p",null,"One of the things that your contract will probably do is to query the host for some information -\nwhat is the current time? Who called me? Following example shows how to do this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/host_functions.rs"',title:'"examples/src/features/host_functions.rs"'},"use odra::Variable;\nuse odra::types::{BlockTime, Address};\n\n#[odra::module]\npub struct HostContract {\n name: Variable<String>,\n created_at: Variable<BlockTime>,\n created_by: Variable<Address>,\n}\n\n#[odra::module]\nimpl HostContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.created_at.set(odra::contract_env::get_block_time());\n self.created_by.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n}\n")),(0,o.kt)("p",null,"As you can see, we are calling functions from ",(0,o.kt)("inlineCode",{parentName:"p"},"odra::contract_env"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"get_block_time()")," will return\nthe current block time wrapped in Odra type ",(0,o.kt)("inlineCode",{parentName:"p"},"BlockTime"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"caller()")," will return an Odra ",(0,o.kt)("inlineCode",{parentName:"p"},"Address")," of\na caller (this can be an external caller or another contract)."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will learn more functions that Odra exposes from host and types it uses in further articles.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"In the next article, we'll dive into testing your contracts with Odra, so you can check that the code\nwe presented in fact works!"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b2f554cd.4608dc99.js b/docs/assets/js/b2f554cd.4608dc99.js new file mode 100644 index 000000000..4030496c8 --- /dev/null +++ b/docs/assets/js/b2f554cd.4608dc99.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"Nysa","metadata":{"permalink":"/blog/Nysa","source":"@site/blog/2023-08-18-nysa/index.md","title":"Nysa","description":"The Oder River, known as \\"Odra\\" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wroc\u0142aw, Szczecin, and Gda\u0144sk, to international waterways. The Oder also plays a significant role in the region\'s ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.","date":"2023-08-18T00:00:00.000Z","formattedDate":"August 18, 2023","tags":[],"readingTime":8.47,"hasTruncateMarker":true,"authors":[{"name":"Krzysztof Pobiar\u017cyn","title":"Lead Developer","url":"https://github.com/kpob","key":"kpob"}],"frontMatter":{"slug":"Nysa","title":"Nysa","authors":["kpob"],"image":"./twitter-card.png"},"nextItem":{"title":"It\'s all about the community!","permalink":"/blog/its-all-about-the-community"}},"content":"The Oder River, known as \\"Odra\\" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wroc\u0142aw, Szczecin, and Gda\u0144sk, to international waterways. The Oder also plays a significant role in the region\'s ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.\\n\\nThe Nysa K\u0142odzka is a significant river in Poland, flowing through the country\'s southwestern part. It travels approximately 188 kilometers, originating in the Czech Republic and merging with the Oder River in Poland. The river passes through picturesque landscapes, including the K\u0142odzko Valley, and plays a crucial role in local ecosystems. Its waters are harnessed for various purposes, such as hydroelectric power generation and irrigation.\\n\\nOh, wait, shouldn\'t it be a tech blog?\\n\\nThis is a valid question, we will get back to it in a moment.\\n\\n\x3c!--truncate--\x3e\\n\\n## Odra\\n\\nA short reminder:\\n\\n> Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design ...\\n> it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel. \\n>\\n> [Odra][odra]\\n\\nUnderstanding that people generally dislike learning new things, we\'ve kept this in mind throughout development. Since day one, we have focused on creating Odra with the largest group of smart contract developers in mind - those familiar with Solidity. The Odra Framework is designed to flatten the learning curve for this group.\\n\\nA Solidity developer will encounter familiar concepts such as:\\n\\n* Constructors\\n* Payable functions\\n* Mappings\\n* Reverts\\n* Current caller\\n* Current block time\\n* A standard module library (similar to OpenZeppelin)\\n* And more\\n\\n:::note\\nIt\'s important to note that the Odra Framework is intentionally blockchain-agnostic. Its design does not target any particular blockchain. \\n\\nUltimately, Odra is built to support multiple blockchains, allowing the writing of smart contracts in Rust.\\n:::\\n\\nHaving so many similarities, why not take the next step and transpile Solidity code into Odra code?\\n\\nThis is where Nysa comes into play.\\n\\n## Nysa\\n\\nSolidity and Rust share some syntax similarities despite being designed for different purposes. Both languages emphasize strong typing, pattern matching, and immutability by default.\\n\\nNysa performs Solidity-to-Rust transpilation through four simple steps.\\n\\n![nysa-gen](./nysa_generic.drawio.svg)\\n\\n1. **Solidity Parser**\\n \\nFirstly, we need a well-structured Rust representation of Solidity code. Nysa utilizes [LALRPOP][lalrpop] - a Rust parser generator framework. In the further steps, this enables us to conduct static analysis of the Solidity code, ranging from contract context down to individual expressions.\\n\\n```rust title=solidity-parser/src/pt.rs\\n// The representation of a Solidity contract\\n#[derive(Debug, PartialEq)]\\npub struct ContractDefinition {\\n pub doc: Vec<DocComment>,\\n pub loc: Loc,\\n pub ty: ContractTy,\\n pub name: Identifier,\\n pub base: Vec<Base>,\\n pub parts: Vec<ContractPart>,\\n}\\n```\\n\\n2. **C3 Linearization**\\n \\nOne of the most notable distinctions between Rust and Solidity is their approach to inheritance. Rust says `No, thx`, whereas Solidity opts for `The more, the better`. Speaking more technically, Solidity supports multiple inheritance with [C3 linearization][c3].\\n\\n:::info\\nThe primary purpose of the C3 Linearization Algorithm is to establish a consistent and unambiguous order of method resolution in cases where there might be ambiguity or conflicts due to multiple inheritance. It ensures that the inherited methods are called in a predictable and well-defined sequence based on the class hierarchy and the order in which classes are defined.\\n:::\\n\\nFor simulating C3 linearization, Nysa utilizes an [implementation][c3-impl] of the C3 linearization in Rust written by [Maciej Zieli\u0144ski][z1elony], so everything stays in the Odra family.\\n\\n3. **Nysa Parser**\\n\\nAfter that, we step to the essential part, converting Solidity code into Rust code.\\n\\nFor example, a Solidity event.\\n\\n```solidity\\nevent Transfer(address indexed from, address indexed to, uint256 value);\\n```\\ncan easily be represented as an plain Rust struct - the same name, the same fields, similar types. \\n\\n```rust\\n#[derive(PartialEq, Eq, Debug)]\\npub struct Transfer {\\n from: Option<Address>,\\n to: Option<Address>,\\n value: U256,\\n}\\n```\\n\\nThe same we do with contracts, interfaces, libraries, errors, variables, functions, statements, etc.\\n\\nHere is a snippet of the expression parser:\\n\\n```rust title=nysa/src/parser/odra/expr/mod.rs\\npub fn parse<T>(expression: &Expression, ctx: &mut T) -> Result<syn::Expr, ParserError>\\nwhere\\n T: StorageInfo + TypeInfo + EventsRegister + ExternalCallsRegister + ContractInfo + FnContext,\\n{\\n match expression {\\n Expression::Require { condition, error } => error::revert(Some(condition), error, ctx),\\n Expression::ZeroAddress => Ok(parse_quote!(None)),\\n Expression::Add { left, right } => math::add(left, right, ctx),\\n Expression::Subtract { left, right } => math::sub(left, right, ctx),\\n Expression::Increment { expr } => {\\n let expr = parse(expr, ctx)?;\\n Ok(parse_quote!(#expr += 1))\\n }\\n Expression::ExternalCall {\\n variable,\\n fn_name,\\n args,\\n } => parse_ext_call(variable, fn_name, args, ctx),\\n Expression::Type { ty } => {\\n let ty = ty::parse_plain_type_from_ty(ty, ctx)?;\\n Ok(parse_quote!(#ty))\\n }\\n Expression::BoolLiteral(b) => Ok(parse_quote!(#b)),\\n ...\\n }\\n}\\n\\n```\\n\\n4. **Printing the code**\\n\\nThe last step is just consuming the resulting C3 AST. Nysa produces a token stream from the AST. Most likely you would write it to a file.\\n\\nAnd there you are: a Rust smart contract is ready to be compiled!\\n\\n### Nysa + Odra\\nBy design, Nysa is a universal tool, so the third step from the pipeline is replaceable. In other words, a Solidity input can be converted to Rust code supporting a framework/SDK of your choice unless you provide a parser implementation.\\n\\nHowever, the default implementation is `OdraParser`, which takes a contract written in Solidity and splits out an Odra module.\\n\\nI hope you see an analogy to the first two paragraphs at this point. Nysa the river and Nysa the transpiler `flow into` Odra.\\n\\n![nysa-odra](./nysa_odra.drawio.svg)\\n\\n## Examples\\n\\n### Status message\\n\\nLet\'s get our hands dirty and create a very simple project. We will write a contract that stores a single mapping of records - an address to a string message.\\n\\nTo set up the project, we use `cargo odra`.\\n``` bash\\ncargo odra new -n status -t blank\\ncd status\\n```\\n\\nThe first thing is to add Nysa to the project and create a rudimentary `build.rs` where we define the input - a solidity contract and the output - an Odra module generated by Nysa.\\n\\n```toml title=Cargo.toml\\n[build-dependencies]\\nnysa = { version = \\"0.1.0\\", features = [\\"builder\\"] }\\n```\\n\\n```rust title=build.rs\\nconst DEST_FILE_PATH: &str = \\"src/status_message.rs\\";\\nconst SOURCE_FILE_PATH: &str = \\"src/status_message.sol\\";\\n\\nfn main() {\\n nysa::builder::generate_file::<&str, nysa::OdraParser>(SOURCE_FILE_PATH, DEST_FILE_PATH);\\n}\\n```\\n\\nNext, implement the contract. Naturally, a Solidity one.\\n\\n```solidity title=src/status_message.sol\\n// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ncontract StatusMessage {\\n mapping(address => string) records;\\n\\n function setStatus(string memory status) public payable {\\n address accountId = msg.sender;\\n records[accountId] = status;\\n }\\n\\n function getStatus(address accountId) public view returns (string memory) {\\n return records[accountId];\\n }\\n}\\n```\\n\\nThe contract has a single mapping `records` that stores a message and its owner. Additionally, exposes two entry points: `setStatus` (sets current\'s sender message) and `getStatus`.\\n\\nFollowing, let\'s define a `lib.rs` file.\\n\\n```rust title=src/lib.rs\\nmod status_message;\\npub use status_message::{StatusMessage, StatusMessageDeployer, StatusMessageRef};\\n\\n#[cfg(test)]\\nmod test;\\n```\\nThe file is straightforward: registers a `status_message` rust module, reexports some Odra abstractions, and adds a test module.\\n\\nLastly, we can test our contract.\\nLike the original solidity contract, our Odra contract exposes two entry points: `set_message()` and `get_message()`.\\nThe test code looks like [any other][odra-docs-testing] Odra test: we use `StatusMessageDeployer` to instantiate a contract, which gets us a reference to interact with the contract.\\n\\n```rust title=src/test.rs\\nuse odra::{test_env, types::Address};\\nuse super::*;\\n\\nconst ACCOUNT: fn() -> Address = || odra::test_env::get_account(1);\\n\\n#[test]\\nfn set_get_message() {\\n let mut contract = StatusMessageDeployer::default();\\n\\n test_env::set_caller(ACCOUNT());\\n contract.set_status(\\"hello\\".to_string());\\n assert_eq!(\\"hello\\".to_string(), contract.get_status(Some(ACCOUNT())));\\n}\\n\\n#[test]\\nfn get_nonexistent_message() {\\n let contract = StatusMessageDeployer::default();\\n\\n assert_eq!(\\n String::new(),\\n contract.get_status(Some(ACCOUNT()))\\n );\\n}\\n```\\n\\n```bash\\ncargo odra test # test against MockVM\\n# or\\ncargo odra test -b casper # build a wasm file and test against CasperVM\\n```\\n\\n```\\nstatus-message\\n\u251c\u2500\u2500 src\\n\u2502 \u251c\u2500\u2500 lib.rs\\n\u2502 \u251c\u2500\u2500 status_message.sol\\n\u2502 \u2514\u2500\u2500 test.rs\\n\u251c\u2500\u2500 build.rs\\n\u251c\u2500\u2500 Cargo.toml\\n\u2514\u2500\u2500 Odra.toml\\n```\\n\\nFull example available [here][nysa-status-example].\\n\\n### CappedErc20\\n\\nA more complex, real-world example is a `CappedErc20` contract. It is a ERC20 [Ownable][oz-ownable], [Burnable][oz-burnable] and [Capped][oz-capped] token contract.\\n\\n```solidity title=plascoin.sol\\n// ...\\n// rest of the code\\n\\ncontract Plascoin is ERC20Capped, ERC20Burnable, Ownable {\\n constructor(string memory name_, string memory symbol_, uint256 cap_, address initialOwner) ERC20(name_, symbol_) ERC20Capped(cap_) Ownable(initialOwner) {\\n }\\n\\n function mint(address account, uint256 amount) public onlyOwner {\\n _mint(account, amount);\\n }\\n\\n function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Capped) {\\n super._update(from, to, value);\\n }\\n}\\n```\\nYou can check out the full source code [here][nysa-capped-erc20-sol].\\n\\nDeployment of such a contract onto the Casper testnet is straightforward. We are just two steps from it. \\n\\n```sh\\n# to make sure the contract works as expected \\n# we execute cargo odra test command to build and run tests\\ncargo odra test -b casper\\n\\n# deploy onto the testnet\\ncasper-client put-deploy\\n --node-address {{NODE_ADDRESS}}\\n --chain-name casper-test\\n --secret-key {{SECRET_KEY}} \\\\\\n --session-path {{CONTRACT_WASM}} \\\\\\n --payment-amount 130000000000 \\\\\\n --session-arg \\"odra_cfg_package_hash_key_name:string:\'{{CONTRACT_PACKAGE_HASH_NAMED_KEY}}\'\\" \\\\\\n --session-arg \\"odra_cfg_allow_key_override:bool:\'true\'\\" \\\\\\n --session-arg \\"odra_cfg_is_upgradable:bool:\'true\'\\" \\\\\\n --session-arg \\"odra_cfg_constructor:string:\'init\'\\" \\\\\\n --session-arg \\"name:string=\'{{name}}\'\\" \\\\\\n --session-arg \\"symbol:string=\'{{symbol}}\'\\" \\\\\\n --session-arg \\"cap:u256=\'{{cap}}\'\\" \\\\\\n --session-arg \\"initial_owner:opt_key=\'{{owner}}\'\\"\\n```\\n\\nLiterally in 5 minutes I was able to:\\n1. Build a wasm file from Solidity source code\\n2. Successfully [deploy][nysa-deploy] the contract onto Testnet,\\n3. [Mint][nysa-mint] some tokens,\\n4. And [transfer][nysa-transfer] them.\\n \\nFinally, we compare the costs of Solidity-to-Odra contract and a native CEP-18 implementation. Despite the contracts being different in terms of the internal logic and exposed entry points, such comparison gives us some insight into Nysa\'s efficiency.\\n\\n| action | CEP-18 | Nysa |\\n|-----------|----------------------|-----------------------|\\n| deploy | [143.87][cep-deploy] | [93.37][nysa-deploy] |\\n| transfer | [1.29][cep-transfer] | [1.36][nysa-transfer] |\\n\\n## Conclusion\\n\\nNysa is at early stage of development, but already has shown a huge potential. In a few simple steps, you can take advantage of an existing smart contract and convert it into an Odra module. The module can be a standalone contract, or a building block of a bigger contract.\\n\\n[lalrpop]: https://github.com/lalrpop/lalrpop\\n[c3]: https://en.wikipedia.org/wiki/C3_linearization\\n[c3-impl]: https://github.com/odradev/c3-lang\\n[z1elony]: https://github.com/zie1ony\\n[odra]: https://odra.dev/docs/\\n[odra-discord]: https://discord.gg/Mm5ABc9P8k\\n[odra-twitter]: https://twitter.com/odradev\\n[odra-wiki]: https://en.wikipedia.org/wiki/Oder\\n[nysa-wiki]: https://en.wikipedia.org/wiki/Eastern_Neisse\\n[nysa-capped-erc20-sol]: https://github.com/odradev/nysa/blob/feature/odra/examples/capped-erc20/src/plascoin.sol\\n[nysa-capped-erc20]: https://github.com/odradev/nysa/blob/feature/odra/examples/capped-erc20/\\n[nysa-status-example]: https://github.com/odradev/nysa/tree/feature/odra/examples/status-message/nysa\\n[odra-docs-testing]: https://odra.dev/docs/basics/testing\\n[cep-deploy]: https://testnet.cspr.live/deploy/2b5d17ea5d9c093c4252705285f7aeabe58cff37fb48b5837567908e2d91329a\\n[cep-transfer]: https://testnet.cspr.live/deploy/3ab866e7cf7b59e081f12aea4103f9552b261b601d91b072ea10ab5be6cf0e45\\n[nysa-deploy]: https://testnet.cspr.live/deploy/b1dd9628f8a36b7ed24949f88ea97ebb21d0c213e9cc87fc5ee4076074de0c88\\n[nysa-mint]: https://testnet.cspr.live/deploy/1def539f806fd39ec1b75687c46946c7510fe3bb15860fcc3420c7bea7e7f10f\\n[nysa-transfer]: https://testnet.cspr.live/deploy/0e2e0fa490f00783ddaecd06aaf2b43d8c5f6d3224a28a31ad66bfef48ce26e6\\n[open-zeppelin]: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts\\n[oz-ownable]: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol\\n[oz-capped]: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Capped.sol\\n[oz-burnable]: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Burnable.sol"},{"id":"its-all-about-the-community","metadata":{"permalink":"/blog/its-all-about-the-community","source":"@site/blog/2023-06-27-we-are-here-to-stay/index.md","title":"It\'s all about the community!","description":"Over the past months,","date":"2023-06-27T00:00:00.000Z","formattedDate":"June 27, 2023","tags":[],"readingTime":2.825,"hasTruncateMarker":true,"authors":[{"name":"Maciej Zieli\u0144ski","title":"CTO","url":"https://github.com/zie1ony","key":"zie1ony"}],"frontMatter":{"slug":"its-all-about-the-community","title":"It\'s all about the community!","authors":["zie1ony"],"image":"./roadmap.png"},"prevItem":{"title":"Nysa","permalink":"/blog/Nysa"},"nextItem":{"title":"OpenAI writes ERC20 in Odra","permalink":"/blog/2023-02-27-openai-writes-erc20-in-odra"}},"content":"Over the past months,\\nwe have been working hard on bringing Odra to the Casper world.\\nWhile we are proud of what we have achieved so far,\\nthe hard part is just beginning.\\nSmart contract developers from outside of our team are starting to use Odra.\\nWe are thrilled about it and here is how we are going to support the community.\\n\\n\x3c!--truncate--\x3e\\n\\n## Hello Odra Community\\n\\nWhether you are a Rust developer, Solidity developer or a Casper enthusiast\\nwe are happy to have you here, reading this blog post.\\n\\nWe have built Odra to make smart contract development on Casper easy.\\nNow we are entering the next phase of the open source journey.\\nWe are going to focus on the community and make sure\\nOdra is the best tool for the job.\\nOur motto (we borrowed from the Django Project) is:\\n\\n> **We bring cutting-edge smart contract development tools to \\nprofessionals with deadlines.**\\n\\nHow will we do it? We are going to focus on four things:\\n- **Quality** - Our code and documentation will be of the highest quality.\\nWe will always have tons of tests and examples.\\n- **Simplicity** - The simplest solution is the best solution.\\nOdra\'s API needs to be simple and easy to use.\\nAlways!\\nWe are not afraid to take a few steps back and rethink our design.\\nWe believe in short feedback loops and fast iterations.\\n- **Reusability** - No one likes to repeat itself.\\nWe see a huge potential in Odra Modules.\\nIn time, it can become a standard library of Casper smart contracts,\\nthat are battle-tested and ready to use.\\n- **Community** - We are here to help you.\\nYou can always reach out to us on [Discord] or [Github].\\n\\n## We will help with your project\\n\\nWhether you are a Rust developer or not, you can start using Odra today.\\nWe have prepared a few [examples and docs] to help you get started.\\nRust knowledge required to use Odra is minimal.\\nThat was always the goal.\\n\\nBut we understand that it is hard to start.\\nWe got your back.\\n\\n> **We offer free consulting + 2 hours of live coding.**\\n\\nAll you have to do is write us an email at **contract@odra.dev**\\nwith a short description of your project.\\nWe will schedule a call and help you get started with Odra.\\nAfter 2 hours of live coding, you will have a working repository with 2 or 3 \\nsmart contracts, that you can use as a starting point for your project.\\n\\n## Roadmap\\n\\nThe feedback we got quite often was:\\n__It\'s nice, but will it last? What\'s the direction of the project?__\\nPoint taken. Now we answer: __We are here to stay.__\\nWe got the support from the Casper Association and some projects of our own\\nto keep us funded. We play the long game.\\n\\nTo systematize our work, we have prepared the [roadmap].\\nAs of now, we maintain plans for at least three future releases.\\nIt is a good balance between predictability and flexibility.\\nWe will release new versions approximately every 1-2 months or as needed.\\nEveryone is encouraged to propose a new Odra feature or enhancement.\\nNew proposals need to be discussed and approved by the core team.\\nWhen the feature is ready, we assign it to one of the future releases.\\n\\n![Odra Roadmap](./roadmap.png)\\n\\n[Discord]: https://discord.gg/Mm5ABc9P8k\\n[Github]: https://github.com/odradev/odra\\n[examples and docs]: https://odra.dev/docs\\n[roadmap]: https://github.com/odradev/odra/milestones"},{"id":"2023-02-27-openai-writes-erc20-in-odra","metadata":{"permalink":"/blog/2023-02-27-openai-writes-erc20-in-odra","source":"@site/blog/2023-02-27-openai-writes-erc20-in-odra/index.md","title":"OpenAI writes ERC20 in Odra","description":"OpenAI can write Odra smart contracts.","date":"2023-02-27T00:00:00.000Z","formattedDate":"February 27, 2023","tags":[],"readingTime":3.785,"hasTruncateMarker":true,"authors":[{"name":"Maciej Zieli\u0144ski","title":"CTO","url":"https://github.com/zie1ony","key":"zie1ony"}],"frontMatter":{"slug":"2023-02-27-openai-writes-erc20-in-odra","title":"OpenAI writes ERC20 in Odra","authors":["zie1ony"],"image":"./twitter-card.png"},"prevItem":{"title":"It\'s all about the community!","permalink":"/blog/its-all-about-the-community"},"nextItem":{"title":"Odra + CosmWasm","permalink":"/blog/odra-cosmwasm"}},"content":"OpenAI can write Odra smart contracts.\\nThis is how.\\n\\n\x3c!--truncate--\x3e\\n\\n## OpenAI\\nOpenAI already proved that AI can code.\\nGithub Copilot is used by more and more developers.\\nMany times it is mind-blowing how accurate it is.\\nIt would be great if one of the OpenAI models could simply work after writing:\\n\\n```\\nQ: Write the ERC20 smart contract.\\n\\nA: use odra::{Mapping, Variable}...\\n```\\n\\nSo far OpenAI hasn\'t indexed Odra. I even asked ChatGPT.\\n\\n```\\nQ: Do you know what is the Odra Framework for writing smart contracts?\\n Response in one sentence. Use Yoda style.\\n\\nA: Aware of an Odra Framework for writing smart contracts, I am not.\\n```\\n\\nSoon (year or two) it will happen and Odra will be supported out of the box,\\nsimply because it is available on GitHub.\\n\\n## DaVinci Edit\\n\\nOpenAI gives us a great tool called [Edit](https://openai.com/blog/gpt-3-edit-insert/).\\nIt uses the same technology Github Copiled it based on called [Codex](https://openai.com/blog/openai-codex/),\\nOpenAI gives us access to the model `code-davinci-edit-001`.\\nIt allows you to paste in the code and ask for changes.\\nSee more examples like rewriting Fibonacci to a recursive version [here](https://platform.openai.com/docs/guides/code/editing-code). \\n\\nBut it doesn\'t know Odra.\\nLuckily this is not a problem.\\nI have found a nice trick that allows producing the code I want.\\nWe simply have to present all the features of Odra and ask a good question.\\n\\n## ERC20 by AI\\n\\nThe goal is to bend AI to write the ERC20 token using Odra.\\nThe Edit query needs two elements:\\n* source code,\\n* text that describes what should be changed. \\n\\nAs the input source code I wrote the code that uses all the features ERC20 would use.\\nI need `odra::module`, `Variable`, `Mapping`, `caller()`, `Address`,\\nconstructor, and errors.\\n\\n```rust title=flipper.rs\\nuse odra::{Variable, types::Address, contract_env, Mapping, execution_error};\\n\\n#[odra::module]\\npub struct Flipper {\\n value: Variable<bool>,\\n flips_count: Variable<u32>,\\n owner: Variable<Address>,\\n messages: Mapping<(Address, Address), String>\\n}\\n\\n#[odra::module]\\nimpl Flipper {\\n #[odra(init)]\\n pub fn init(&mut self, owner: Address) {\\n self.value.set(false);\\n self.owner.set(owner);\\n }\\n\\n pub fn set(&mut self, value: bool) {\\n self.value.set(value);\\n }\\n\\n pub fn flip(&mut self) {\\n self.value.set(!self.get_value());\\n self.flips_count.set(self.flips_count.get_or_default());\\n }\\n\\n pub fn get_value(&self) -> bool {\\n self.value.get_or_default()\\n }\\n \\n pub fn get_owner(&self) -> Option<Address> {\\n self.owner.get()\\n }\\n\\n pub fn set_message(&mut self, recipient: Address, msg: String) {\\n let sender = contract_env::caller();\\n let current_msg = self.messages.get(&(sender, recipient));\\n match current_msg {\\n Some(_) => contract_env::revert(Error::MessageAlreadyDefined),\\n None => self.messages.set(&(sender, recipient), msg)\\n }\\n }\\n\\n pub fn get_message(&self, sender: Address, recipient: Address) -> String {\\n self.messages.get_or_default(&(sender, recipient))\\n }\\n}\\n\\nexecution_error! {\\n pub enum Error {\\n MessageAlreadyDefined => 1,\\n NotAnMessageSender => 2,\\n }\\n}\\n```\\n\\nChatGPT knows what the ERC20 is, so the kind request for changes is simple.\\n\\n```\\nQ: Implement another smart contract called ERC20.\\n Balances should be of type U256.\\n```\\n\\nThis is the result.\\n\\n```rust title=\\"ERC20 contract in Odra generated by OpenAI\\"\\nuse odra::{Variable, types::Address, contract_env, Mapping, execution_error, U256};\\n\\n#[odra::module]\\npub struct ERC20 {\\n name: Variable<String>,\\n symbol: Variable<String>,\\n decimals: Variable<u8>,\\n total_supply: Variable<U256>,\\n balances: Mapping<Address, U256>,\\n allowed: Mapping<(Address, Address), U256>\\n}\\n\\n#[odra::module]\\nimpl ERC20 {\\n #[odra(init)]\\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, total_supply: U256) {\\n self.name.set(name);\\n self.symbol.set(symbol);\\n self.decimals.set(decimals);\\n self.total_supply.set(total_supply);\\n self.balances.set(&contract_env::caller(), total_supply);\\n }\\n\\n pub fn total_supply(&self) -> U256 {\\n self.total_supply.get_or_default()\\n }\\n\\n pub fn balance_of(&self, owner: Address) -> U256 {\\n self.balances.get_or_default(&owner)\\n }\\n\\n pub fn transfer(&mut self, to: Address, value: U256) {\\n let from = contract_env::caller();\\n let from_balance = self.balances.get_or_default(&from);\\n let to_balance = self.balances.get_or_default(&to);\\n if from_balance < value {\\n contract_env::revert(Error::InsufficientBalance);\\n }\\n self.balances.set(&from, from_balance - value);\\n self.balances.set(&to, to_balance + value);\\n }\\n\\n pub fn transfer_from(&mut self, from: Address, to: Address, value: U256) {\\n let caller = contract_env::caller();\\n let from_balance = self.balances.get_or_default(&from);\\n let to_balance = self.balances.get_or_default(&to);\\n let allowed = self.allowed.get_or_default(&(from, caller));\\n if from_balance < value {\\n contract_env::revert(Error::InsufficientBalance);\\n }\\n if allowed < value {\\n contract_env::revert(Error::InsufficientAllowance);\\n }\\n self.balances.set(&from, from_balance - value);\\n self.balances.set(&to, to_balance + value);\\n self.allowed.set(&(from, caller), allowed - value);\\n }\\n\\n pub fn approve(&mut self, spender: Address, value: U256) {\\n let owner = contract_env::caller();\\n self.allowed.set(&(owner, spender), value);\\n }\\n\\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\\n self.allowed.get_or_default(&(owner, spender))\\n }\\n}\\n\\nexecution_error! {\\n pub enum Error {\\n InsufficientBalance => 1,\\n InsufficientAllowance => 2,\\n }\\n}\\n```\\n\\nWow!\\n\\n## What is next?\\n\\nAI already understands smart contracts.\\nIt had to read a lot of Solidity code.\\nI checked and it knows Uniswap and Compound source code.\\nMost interesting is that AI was able to implement a concept it already knew\\nfrom another programming language in the unseen Rust framework.\\nAt some point, we will be able to translate all the Solidity code to Odra.\\nOr maybe we will not have to...\\n\\nIt is hard to imagine how good it will be in 2025 and beyond."},{"id":"odra-cosmwasm","metadata":{"permalink":"/blog/odra-cosmwasm","source":"@site/blog/2023-02-15-odra-cosmos.md","title":"Odra + CosmWasm","description":"In November 2022 we released the first version of the Odra Framework. It\'s time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm.","date":"2023-02-15T00:00:00.000Z","formattedDate":"February 15, 2023","tags":[],"readingTime":5.96,"hasTruncateMarker":true,"authors":[{"name":"Krzysztof Pobiar\u017cyn","title":"Lead Developer","url":"https://github.com/kpob","key":"kpob"}],"frontMatter":{"slug":"odra-cosmwasm","title":"Odra + CosmWasm","authors":["kpob"],"image":"https://github.com/odradev.png"},"prevItem":{"title":"OpenAI writes ERC20 in Odra","permalink":"/blog/2023-02-27-openai-writes-erc20-in-odra"},"nextItem":{"title":"EVM at Risc0","permalink":"/blog/evm-at-risc0"}},"content":"In November 2022 we released [the first version](../blog/2022-11-30-release-020/index.md) of the Odra Framework. It\'s time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm.\\n\\n\x3c!--truncate--\x3e\\n\\n## CosmWasm\\n\\nCosmWasm is a smart contract platform for building dApps on the Cosmos blockchain ecosystem.\\nThe platform is designed as a module that can be integrated into the Cosmos SDK, enabling developers who are already building blockchains with the Cosmos SDK to easily incorporate CosmWasm smart contract functionality without the need to modify their existing code.\\n\\nIt uses the Rust programming language, so is potentially a perfect candidate for an Odra backend.\\nThere are many blockchains like [Osmosis], [Secret Network], [Juno] that utilize CosmWasm.\\n\\n## Show me your code\\n\\nI would like to write a `Counter` smart contract that is CosmWasm compatible.\\nWhat are the requirements?\\n\\n1. It should store a `u32` value. \\n2. The initial value it set by the contract deployer.\\n3. The value can be incremented.\\n4. The value can read from the storage.\\n5. The contract can call another contract and increment its counter.\\n\\nSo let\'s write an Odra module first.\\n\\n```rust title=counter.rs\\nuse odra::{types::{Address, event::OdraEvent}, Variable, contract_env};\\nuse self::events::{Init, ValueUpdated};\\n\\n#[odra::module]\\npub struct Counter {\\n pub value: Variable<u32>\\n}\\n\\n#[odra::module]\\nimpl Counter {\\n #[odra(init)]\\n pub fn init(&mut self, value: u32) {\\n self.value.set(value);\\n <Init as OdraEvent>::emit(Init {\\n value,\\n });\\n }\\n\\n pub fn increment(&mut self) {\\n let old_value = self.value.get_or_default();\\n let new_value = old_value + 1;\\n self.value.set(new_value);\\n \\n ValueUpdated {\\n old_value,\\n new_value,\\n operator: contract_env::caller()\\n }.emit();\\n }\\n\\n pub fn cross_increment(&mut self, counter_address: Address) {\\n CounterRef::at(counter_address).increment();\\n }\\n\\n pub fn get_value(&self) -> u32 {\\n self.value.get_or_default()\\n }\\n}\\n\\nmod events {\\n use odra::types::Address;\\n\\n #[derive(odra::Event)]\\n pub struct ValueUpdated {\\n pub old_value: u32,\\n pub new_value: u32,\\n pub operator: Address\\n }\\n \\n #[derive(odra::Event)]\\n pub struct Init {\\n pub value: u32,\\n }\\n}\\n\\n#[cfg(test)]\\nmod tests {\\n use super::*;\\n\\n #[test]\\n fn deploy() {\\n let counter = CounterDeployer::init(10);\\n assert_eq!(10, counter.get_value());\\n }\\n\\n #[test]\\n fn increment() {\\n let mut counter = CounterDeployer::init(10);\\n counter.increment();\\n assert_eq!(11, counter.get_value());\\n }\\n}\\n```\\nBut wait, I mentioned CosmWasm, did I?\\n\\nHere the beauty of Odra comes into play.\\n\\nLet\'s use `cargo-odra`.\\n```bash\\ncargo odra build -b cosmos\\n```\\nAnd... that\'s it, congratulations! We have just written and build our first CosmWasm contract.\\nAs you see, it is nothing different from building a contract for Casper. No additional code, we only changed the `-b` flag.\\n\\n## Deploy\\nWe have just built a wasm file, but is it really a fully functional contract?\\n\\nAs a battlefield let\'s choose [Juno Network] (if you would like to read more about smart contract development on Juno read this [Quick Start tutorial]). This is an arbitrary choice, each client is built upon a so-called Wasm Zone [wasmd], and its interface is alike.\\n\\nAssuming you already know how to interact with Juno testnet, let\'s move to the fun part.\\n\\nBut before we go, to keep things simple, let\'s prepare a [justfile]. It\'ll make our interactions with the blockchain much easier. See [full version].\\n\\n```justfile title=justfile\\nNODE := \\"--node https://rpc.uni.juno.deuslabs.fi:443\\"\\nCHAIN_ID := \\"--chain-id uni-6\\"\\nQUERY_FLAGS := NODE + \\" \\" + CHAIN_ID\\nTRANSACTION_DEFAULTS := \\"--gas-prices 0.025ujunox --gas auto --gas-adjustment 1.3 --broadcast-mode block\\"\\nEXEC_FLAGS := NODE + \\" \\" + CHAIN_ID + \\" \\" + TRANSACTION_DEFAULTS\\n\\nget-address NAME:\\n junod keys show {{NAME}} | grep -o juno.*\\n\\nstore-wasm WASM_PATH SENDER:\\n junod tx wasm store \\\\\\n {{WASM_PATH}} --from {{SENDER}} {{EXEC_FLAGS}}\\n\\ninit-contract CODE_ID VALUE SENDER CONTRACT_NAME:\\n junod tx wasm instantiate \\\\\\n {{CODE_ID}} \\\\\\n `just run-args-parser \'{\\"name\\": \\"init\\", \\"args\\": [ { \\"value\\" : {{VALUE}} }]}\'` \\\\\\n --label \'{{CONTRACT_NAME}}\' --from {{SENDER}} \\\\\\n --admin `just get-address {{SENDER}}` \\\\\\n {{EXEC_FLAGS}}\\n\\nexec-increment ADDRESS SENDER:\\n junod tx wasm execute \\\\\\n {{ADDRESS}} \\\\\\n `just run-args-parser \'{\\"name\\": \\"increment\\"}\'` \\\\\\n --from {{SENDER}} \\\\\\n {{EXEC_FLAGS}}\\n\\nquery-get-value ADDRESS:\\n junod q wasm contract-state smart {{ADDRESS}} \\\\\\n `just run-args-parser \'{\\"name\\": \\"get_value\\"}\'` {{QUERY_FLAGS}}\\n```\\n\\nOk, we are ready to go.\\n\\nFirst, a CosmWasm contract needs to be stored, technically is not a contract yet. Like a larva waiting to morph into a butterfly (sorry for that).\\n\\nThere are three ways to interact with a contract.\\n1. Instantiate - in other words, a constructor call. Once the contract is instantiated, it gets an address.\\n2. Execute - call an entrypoint that modifies the state.\\n3. Query - read the contract\'s state.\\n \\nNow, let\'s take a look at how to do it using the tools we have just prepared.\\n\\n```bash\\n# args: \\n# the path to a wasm file,\\n# the name under we store the private key.\\njust store-wasm counter.wasm odra\\n\\n...\\nraw_log: \'[{\\"events\\":[{\\"type\\":\\"message\\",\\"attributes\\":[{\\"key\\":\\"action\\",\\"value\\":\\"/cosmwasm.wasm.v1.MsgStoreCode\\"},{\\"key\\":\\"module\\",\\"value\\":\\"wasm\\"},{\\"key\\":\\"sender\\",\\"value\\":\\"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh\\"}]},{\\"type\\":\\"store_code\\",\\"attributes\\":[{\\"key\\":\\"code_checksum\\",\\"value\\":\\"9fb9e7f39170de2628892ed5eecc556e2487267b30bb2c9656f8c7d1cd9f9a59\\"},{\\"key\\":\\"code_id\\",\\"value\\":\\"286\\"}]}]}]\'\\n...\\ntxhash: 1A8BA520E980C5ABCBCFA6F62D68B6BB82E780544605DE4DD5C6B1C5E966441B\\n```\\n\\nGreat, our code is successfully stored. Form the logs we can read now the `code_id` which we will use to initialize the contract.\\n\\n```bash\\n# args: \\n# code id taken from the previous tx, \\n# counter initial value, \\n# named private key,\\n# contract label.\\njust init-contract 286 1 odra \\"My Counter\\"\\n\\n...\\nraw_log: \'[{\\"events\\":[{\\"type\\":\\"instantiate\\",\\"attributes\\":[{\\"key\\":\\"_contract_address\\",\\"value\\":\\"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\"},{\\"key\\":\\"code_id\\",\\"value\\":\\"286\\"}]},{\\"type\\":\\"message\\",\\"attributes\\":[{\\"key\\":\\"action\\",\\"value\\":\\"/cosmwasm.wasm.v1.MsgInstantiateContract\\"},{\\"key\\":\\"module\\",\\"value\\":\\"wasm\\"},{\\"key\\":\\"sender\\",\\"value\\":\\"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh\\"}]},{\\"type\\":\\"wasm\\",\\"attributes\\":[{\\"key\\":\\"_contract_address\\",\\"value\\":\\"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\"},{\\"key\\":\\"value\\",\\"value\\":\\"1\\"}]},{\\"type\\":\\"wasm-Init\\",\\"attributes\\":[{\\"key\\":\\"_contract_address\\",\\"value\\":\\"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\"},{\\"key\\":\\"value\\",\\"value\\":\\"1\\"}]}]}]\'\\n...\\ntxhash: 8DC53F95805349C3763CF4AF9527CAB2AEBEC77B240EFD3801C61231D8748F26\\n```\\n\\nFantastic, the contract has been initialized and we have its address - `juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g`.\\nIt\'s time to increment the counter.\\n\\n```bash\\n# args:\\n# contract address taken from the previous tx,\\n# named private key\\njust exec-increment juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g odra\\n\\n...\\nraw_log: \'[{\\"events\\":[{\\"type\\":\\"execute\\",\\"attributes\\":[{\\"key\\":\\"_contract_address\\",\\"value\\":\\"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\"}]},{\\"type\\":\\"message\\",\\"attributes\\":[{\\"key\\":\\"action\\",\\"value\\":\\"/cosmwasm.wasm.v1.MsgExecuteContract\\"},{\\"key\\":\\"module\\",\\"value\\":\\"wasm\\"},{\\"key\\":\\"sender\\",\\"value\\":\\"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh\\"}]},{\\"type\\":\\"wasm\\",\\"attributes\\":[{\\"key\\":\\"_contract_address\\",\\"value\\":\\"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\"},{\\"key\\":\\"action\\",\\"value\\":\\"increment\\"}]},{\\"type\\":\\"wasm-ValueUpdated\\",\\"attributes\\":[{\\"key\\":\\"_contract_address\\",\\"value\\":\\"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\"},{\\"key\\":\\"old_value\\",\\"value\\":\\"1\\"},{\\"key\\":\\"new_value\\",\\"value\\":\\"2\\"},{\\"key\\":\\"operator\\",\\"value\\":\\"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh\\"}]}]}]\'\\n...\\ntxhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2\\n```\\n\\nFinally, we expected, the value to be equal to 2 (the initial value was 1 and we incremented it once).\\n\\n``` bash\\n# args:\\n# contract address\\njust query-get-value juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\n\\ndata: 2\\n```\\nIndeed, as expected the current counter value is 2.\\n\\n## Show me your transaction\\nI get it, you don\'t want to do it all by yourself. So let\'s take a closer look at one of my transactions.\\n\\n```bash\\njunod q tx 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2 --node https://rpc.uni.juno.deuslabs.fi:443 --chain-id uni-6\\n...\\nlogs:\\n- events:\\n - attributes:\\n - key: _contract_address\\n value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\n type: execute\\n - attributes:\\n - key: action\\n value: /cosmwasm.wasm.v1.MsgExecuteContract\\n - key: module\\n value: wasm\\n - key: sender\\n value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh\\n type: message\\n - attributes:\\n - key: _contract_address\\n value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\n - key: action\\n value: increment\\n type: wasm\\n - attributes:\\n - key: _contract_address\\n value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\\n - key: old_value\\n value: \\"1\\"\\n - key: new_value\\n value: \\"2\\"\\n - key: operator\\n value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh\\n type: wasm-ValueUpdated\\n...\\ntxhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2\\n```\\n\\nIf you are familiar Cosmos ecosystem, you can see that there is an attribute containing\\nthe performed action (`increment`) (If there were some parameters, they would be included in this attribute).\\nWe can find here also our `ValueUpdated` event with its arguments `old_value`, `new_value` and `operator`.\\n\\nWow, we have it, everything worked as intended!\\n\\n## Conclusion\\nWouldn\'t it be great to replace [Casper Erc20] and [Cosmos Erc20] with a super-simple\\nsingle [Odra Erc20] implementation?\\n\\nThe `Counter` contract is just a POC, and there is still a long road ahead of us.\\nThis simple example shows that features like storage, events, and cross-contract calls\\ncan be unified in a simple readable interface.\\n\\nCosmWasm integration hasn\'t been published yet, but if you want to experiment by yourself, \\ncheck our GitHub (don\'t forget to update cargo-odra as well).\\n\\n## Join us\\nInterested?\\n\\nJoin [our Discord][odra-discord], [our Twitter][odra-twitter] or write us\\nat contact@odra.dev.\\n\\n[odra-discord]: https://discord.gg/Mm5ABc9P8k\\n[odra-twitter]: https://twitter.com/odradev\\n[Secret Network]: https://scrt.network/\\n[Osmosis]: https://docsosmosis.zone/\\n[Juno]: https://www.junonetwork.io/\\n[wasmd]: https://github.com/CosmWasm/wasmd\\n[`cargo-odra`]: https://odra.dev/docs/basics/cargo-odra\\n[Juno Network]: https://www.junonetwork.io/\\n[Quick Start tutorial]: https://medium.com/@NitroBiell/smart-contract-development-quick-start-on-juno-5dabf6fdcad0\\n[justfile]: https://github.com/casey/just\\n[full version]: https://github.com/odradev/odra/blob/feature/cosmos/odra-cosmos/juno-client/justfile\\n[Casper Erc20]: https://github.com/casper-ecosystem/erc20/tree/master/erc20/src\\n[Cosmos Erc20]: https://github.com/CosmWasm/cw-plus/tree/main/contracts/cw20-base/src\\n[Odra Erc20]: https://github.com/odradev/odra/blob/release/0.2.0/examples/src/erc20.rs"},{"id":"evm-at-risc0","metadata":{"permalink":"/blog/evm-at-risc0","source":"@site/blog/2023-02-13-evm-at-risc0.md","title":"EVM at Risc0","description":"Let\'s run Solidity code inside SputnikVM inside Risc0.","date":"2023-02-13T00:00:00.000Z","formattedDate":"February 13, 2023","tags":[],"readingTime":3.97,"hasTruncateMarker":true,"authors":[{"name":"Maciej Zieli\u0144ski","title":"CTO","url":"https://github.com/zie1ony","key":"zie1ony"}],"frontMatter":{"slug":"evm-at-risc0","title":"EVM at Risc0","authors":["zie1ony"],"image":"https://github.com/odradev.png"},"prevItem":{"title":"Odra + CosmWasm","permalink":"/blog/odra-cosmwasm"},"nextItem":{"title":"Zero Knowledge on Casper","permalink":"/blog/casper-zk-risc0"}},"content":"Let\'s run Solidity code inside [SputnikVM](https://github.com/rust-blockchain/evm/) inside [Risc0](https://github.com/risc0/risc0).\\n\\n\x3c!--truncate--\x3e\\nFirst make sure you know how Risc0 works.\\nMy [previous post](2022-12-12-casper-zk-risc0.md) explains it.\\n\\nIf you want to jump directly to the full code example, it\'s in the [repo](https://github.com/odradev/evm-at-risc0).\\n\\n## Solidity\\n\\nAs an example, I have this simple Solidity code.\\nIt is a calculator with two functions.\\nOne for addition and one for the nth Fibonacci number.\\n\\n```solidity title=\\"bytecode/Calculator.sol\\"\\ncontract Calculator {\\n function add(uint256 a, uint256 b) public pure returns (uint256) {\\n return a + b;\\n }\\n\\n function fibonacci(uint256 n) public returns (uint256) {\\n if (n <= 1) {\\n return n;\\n } else {\\n return fibonacci(n - 1) + fibonacci(n - 2);\\n }\\n }\\n}\\n```\\n\\nIt needs to be compiled into the byte code. `solc` can do this.\\n\\n```bash\\n$ solc \\\\\\n --bin-runtime \\\\\\n --optimize \\\\\\n --overwrite \\\\\\n --evm-version istanbul \\\\\\n --output-dir bytecode \\\\\\n bytecode/Calculator.sol \\n```\\n\\nIt produces an EVM bytecode in the `bytecode` directory.\\n\\n```bash\\n$ ls bytecode/\\nCalculator.bin-runtime Calculator.sol\\n```\\n\\n## EVM\\n\\nThe EVM I used is [SputnikVM](https://github.com/rust-blockchain/evm/).\\nMost important it is written in pure Rust and even with `no_std` mode.\\nThis way I can start an in-memory instance of EVM.\\nThen take the bytecode of a contract and install it.\\nFinally, call the contract with arguments and obtain the result value.\\nFor now, it\'s just a Rust code. Risc0 comes later.\\n\\nThe code is based on Sputnik\'s [benchmark test](https://github.com/rust-blockchain/evm/blob/master/benches/loop.rs).\\nHuge thanks to [Michael Birch](https://github.com/birchmd) for helping with Sputnik.\\nAlso make sure how EVM\'s [function selectors](https://solidity-by-example.org/function-selector) work.\\n\\n```rust title=\\"evm-runner/src/lib.rs\\"\\n\\n// Load previously compiled Calculator contract.\\npub const CALCULATOR_EVM_PROGRAM: &str = include_str!(\\n \\"../../bytecode/Calculator.bin-runtime\\"\\n);\\n\\n// Run Calculator for a given input.\\npub fn run_calc_contract(input: &str) -> String {\\n run_evm(CALCULATOR_EVM_PROGRAM, input)\\n}\\n\\n// Run a program (contract) for a given input. \\nfn run_evm(program: &str, input: &str) -> String {\\n\\n // Define EVM configuration.\\n let config = Config::istanbul();\\n\\tlet vicinity = MemoryVicinity {\\n\\t\\tgas_price: U256::zero(),\\n\\t\\torigin: H160::default(),\\n\\t\\tblock_hashes: Vec::new(),\\n\\t\\tblock_number: Default::default(),\\n\\t\\tblock_coinbase: Default::default(),\\n\\t\\tblock_timestamp: Default::default(),\\n\\t\\tblock_difficulty: Default::default(),\\n\\t\\tblock_gas_limit: Default::default(),\\n\\t\\tchain_id: U256::one(),\\n\\t\\tblock_base_fee_per_gas: U256::zero(),\\n\\t};\\n\\n // Initialized the state of EVM\'s memory.\\n\\tlet mut state = BTreeMap::new();\\n\\n // Add our contract under the 0x10 address.\\n state.insert(\\n\\t\\tH160::from_str(\\"0x1000000000000000000000000000000000000000\\")\\n .unwrap(),\\n\\t\\tMemoryAccount {\\n\\t\\t\\tnonce: U256::one(),\\n\\t\\t\\tbalance: U256::from(10000000),\\n\\t\\t\\tstorage: BTreeMap::new(),\\n\\t\\t\\tcode: hex::decode(program).unwrap(),\\n\\t\\t}\\n\\t);\\n\\n // Add new user 0xf0 that will be used as the contract caller.\\n state.insert(\\n\\t\\tH160::from_str(\\"0xf000000000000000000000000000000000000000\\")\\n .unwrap(),\\n\\t\\tMemoryAccount {\\n\\t\\t\\tnonce: U256::one(),\\n\\t\\t\\tbalance: U256::from(10000000),\\n\\t\\t\\tstorage: BTreeMap::new(),\\n\\t\\t\\tcode: Vec::new(),\\n\\t\\t},\\n\\t);\\n\\n // Prepare the executor.\\n\\tlet backend = MemoryBackend::new(&vicinity, state);\\n\\tlet metadata = StackSubstateMetadata::new(u64::MAX, &config);\\n\\tlet state = MemoryStackState::new(metadata, &backend);\\n\\tlet precompiles = BTreeMap::new();\\n\\tlet mut executor \\n = StackExecutor::new_with_precompiles(state, &config, &precompiles);\\n\\n // Call the 0x10 contract using the 0xf0 user.\\n // Use the input variable. \\n\\tlet (exit_reason, result) = executor.transact_call(\\n\\t\\tH160::from_str(\\"0xf000000000000000000000000000000000000000\\")\\n .unwrap(),\\n\\t\\tH160::from_str(\\"0x1000000000000000000000000000000000000000\\")\\n .unwrap(),\\n\\t\\tU256::zero(),\\n\\t\\thex::decode(input).unwrap(),\\n\\t\\tu64::MAX,\\n\\t\\tVec::new(),\\n\\t);\\n\\n // Make sure the execution succeeded.\\n assert!(exit_reason == ExitReason::Succeed(ExitSucceed::Returned));\\n \\n // Return hex encoded string.\\n hex::encode(result)\\n}\\n```\\n\\nLet\'s execute it. In below tests the `data` variable hold two things:\\nfunction selector and arguments.\\n\\nFor example `61047ff4000000000000000000000000000000000000000000000000000000000000000a`\\nis concatination of the function selector (first 8 chars) and 256-bit long argument.\\nIt is just `fibonacci(10)`. `a` is hex of `10` and `37` is hex of `52`. \\n\\n```rust title=\\"evm-runner/src/lib.rs\\"\\n#[test]\\nfn fibonacci_works() {\\n let data = \\"61047ff4000000000000000000000000000000000000000000000000000000000000000a\\";\\n let result = run_calc_contract(data);\\n assert_eq!(result, \\"0000000000000000000000000000000000000000000000000000000000000037\\"); \\n}\\n\\n#[test]\\nfn addition_works() {\\n let data = \\"771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002\\";\\n let result = run_calc_contract(data);\\n assert_eq!(result, \\"0000000000000000000000000000000000000000000000000000000000000009\\");\\n}\\n```\\n\\n## Risc0\\n\\nIt\'s time for `risc0`.\\n\\nFirst the guest program.\\nIt is super simple.\\nIt takes a string as an argument,\\npasses it to the `run_calc_contract`\\nand returns the result.\\n\\n```rust title=methods/guest/src/bin/evm_calc.rs\\n#![no_main]\\n#![no_std]\\n\\nextern crate alloc;\\n\\nuse alloc::{string::String};\\nuse risc0_zkvm::guest::{env};\\nuse evm_runner::run_calc_contract;\\n\\nrisc0_zkvm::guest::entry!(main);\\n\\npub fn main() {\\n let input: String = env::read();\\n let result = run_calc_contract(&input);\\n env::commit(&result);\\n}\\n```\\n\\nThe final step is calling it under ZK.\\n\\n```rust title=host/src/main.rs\\nfn main() {\\n println!(\\"Proving Calculator.add(7, 2)\\");\\n let input = \\"771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002\\";\\n let result = run_prover(input);\\n println!(\\"Proof generated. 7 + 2 = {result}\\");\\n \\n println!(\\"Proving Calculator.fibonacci(4)\\");\\n let input = \\"61047ff40000000000000000000000000000000000000000000000000000000000000004\\";\\n let result = run_prover(input);\\n println!(\\"Proof generated. fibonacci(4) = {result}\\");\\n}\\n\\nfn run_prover(input: &str) -> u32 {\\n // Make the prover.\\n let method_code = std::fs::read(EVM_CALC_PATH).unwrap();\\n let mut prover = Prover::new(&method_code, EVM_CALC_ID).unwrap();\\n\\n // Push the input as an argument.\\n prover.add_input_u32_slice(to_vec(input).unwrap().as_slice());\\n \\n // Execute the prover.\\n let receipt = prover.run().unwrap();\\n \\n // Verify the proof.\\n assert!(receipt.verify(EVM_CALC_ID).is_ok());\\n \\n // Return result as an u32 value.\\n let result: String = from_slice(receipt.journal.as_slice()).unwrap();\\n u32::from_str_radix(&result, 16).unwrap()\\n}\\n```\\n\\n```bash\\n$ cargo run --release -p host\\nProving Calculator.add(7, 2)\\nProof generated. 7 + 2 = 9\\nProving Calculator.fibonacci(4)\\nProof generated. fibonacci(4) = 3\\n```\\n\\n## Conclusion\\nHow amazing and mindblowing it is!\\nOf course, it\'s just a proof of concept.\\nYet with further development of Risc0 improving its proving time and\\nwith more flexible SputnikVM this approach is more than promising.\\n\\n## Join us\\nInterested?\\n\\nJoin [our Discord][odra-discord], [our Twitter][odra-twitter] or write us\\nat contact@odra.dev.\\n\\n[odra-discord]: https://discord.gg/Mm5ABc9P8k\\n[odra-twitter]: https://twitter.com/odradev"},{"id":"casper-zk-risc0","metadata":{"permalink":"/blog/casper-zk-risc0","source":"@site/blog/2022-12-12-casper-zk-risc0.md","title":"Zero Knowledge on Casper","description":"In this post, I present how to verify a zero knowledge proof on Casper.","date":"2022-12-12T00:00:00.000Z","formattedDate":"December 12, 2022","tags":[],"readingTime":4.215,"hasTruncateMarker":true,"authors":[{"name":"Maciej Zieli\u0144ski","title":"CTO","url":"https://github.com/zie1ony","key":"zie1ony"}],"frontMatter":{"slug":"casper-zk-risc0","title":"Zero Knowledge on Casper","authors":["zie1ony"],"image":"https://github.com/odradev.png"},"prevItem":{"title":"EVM at Risc0","permalink":"/blog/evm-at-risc0"},"nextItem":{"title":"Odra 0.2.0 Released","permalink":"/blog/release-020"}},"content":"In this post, I present how to verify a zero knowledge proof on Casper.\\n\x3c!--truncate--\x3e\\n\\n## Zero Knowledge\\nIn my opinion, the **zero knowledge** (ZK) is the largest revolution in \\nblockchains, since Ethereum introduced Turing-complete, account-based \\nsmart contracts.\\nTo put it in simple words, ZK enables two use cases not possible before:\\n\\n1. Computation scaling - I can perform expensive computation off-chain\\nand put the result on a chain with the proof.\\n2. Anonymity - I can prove to you, I know something without revealing it. \\n\\n## Risc Zero\\nI\'d like to introduce you to [Risc Zero](https://www.risczero.com/).\\nIt is the general purpose zero-knowledge virtual machine.\\nGo ahead and spend time reading their website!\\nFor us, the key component is the proof verifier that can be compiled into WASM.\\nSooo... we can run it on Casper :)\\nYes! We can prove any program, produce proof, and send it to Casper\'s\\nsmart contract for verification.\\n\\n## Example\\nLet\'s dive into the example to see how it works.\\n[The full example code](https://github.com/odradev/casper-zk-with-risc0)\\nyou can find on our GitHub. \\nIt is based on Risc Zero\'s [Hello, Multiply!](https://www.risczero.com/docs/examples/hello_multiply)\\nexample. So make sure you understand it first.\\n[Guest](#guest) and [Prover](#prover) sections are taken from this example.\\n\\n### Guest\\nThe program we are proving is called a **guest** in Risc Zero.\\nOur goal is to prove we know the factors of an arbitrary number.\\nGiven `a` and `b` below guest program computes `a * b` and produces\\na proof of computation.\\n\\n```rust title=\\"methods/guest/src/multiply.rs\\"\\npub fn main() {\\n // Load the first number from the host\\n let a: u64 = env::read();\\n // Load the second number from the host\\n let b: u64 = env::read();\\n // Verify that neither of them are 1 (i.e. nontrivial factors)\\n if a == 1 || b == 1 {\\n panic!(\\"Trivial factors\\")\\n }\\n // Compute the product while being careful with integer overflow\\n let product = a.checked_mul(b).expect(\\"Integer overflow\\");\\n env::commit(&product);\\n}\\n```\\n\\n### Prover\\nIt\'s time to run the guest program and build the proof for \\na specific `a` and `b` values.\\n\\n```rust title=\\"prover/src/main.rs\\"\\nfn main() {\\n // Pick two numbers.\\n let a: u64 = 17;\\n let b: u64 = 23;\\n\\n // First, we make the prover, loading the \'multiply\' method.\\n let multiply_src = std::fs::read(MULTIPLY_PATH)\\n .expect(\\"Method code should be present at the specified path.\\");\\n let mut prover = Prover::new(&multiply_src, MULTIPLY_ID)\\n .expect(\\"Prover should be constructed.\\",);\\n\\n // Next we send a & b to the guest.\\n prover.add_input_u32_slice(to_vec(&a).unwrap().as_slice());\\n prover.add_input_u32_slice(to_vec(&b).unwrap().as_slice());\\n \\n // Run prover & generate receipt\\n let receipt = prover.run()\\n .expect(\\"Valid code should be provable.\\");\\n\\n // Extract journal of receipt (i.e. output c, where c = a * b)\\n let c: u64 = from_slice(&receipt.journal)\\n .expect(\\"Journal output should deserialize.\\");\\n\\n // Print an assertion\\n println!(\\"I know the factors of {}, and I can prove it!\\", c);\\n\\n // Verify receipt, panic if it\'s wrong.\\n receipt.verify(MULTIPLY_ID).expect(\\n \\"Code you have proven should successfully verify.\\",\\n );\\n\\n // Convert journal to string and store on disk.\\n let journal = serde_json::to_string(&receipt.journal).unwrap();\\n write_to_file(\\"../data/journal\\", &journal);\\n\\n // Convert seal to string and store on disk.\\n let seal = serde_json::to_string(&receipt.seal).unwrap();\\n write_to_file(\\"../data/seal\\", &seal);\\n\\n // Convert method_id to string and store on disk.\\n let result = serde_json::to_string(MULTIPLY_ID).unwrap();\\n write_to_file(\\"../data/method\\", &result);\\n}\\n```\\n\\n### Verifier\\nNow the verification step.\\nGiven the proof (journal + seal) and the guest program definition (method),\\nCasper\'s smart contract checks its correctness. This one is written\\njust for the demonstration, but in general you want `METHOD_ID` to be\\nstored in your contract and both `SEAL` and `JOURNAL` to be passed to\\nthe contract via arguments from the outside.\\n\\n```rust title=\\"verifier/src/verifier_contract.rs\\"\\n// Import the proof and the method.\\nconst METHOD_ID: &[u8] = &include!(\\"../../data/method\\");\\nconst SEAL: &[u32] = &include!(\\"../../data/seal\\");\\nconst JOURNAL: &[u32] = &include!(\\"../../data/journal\\");\\n\\n// Verifier contract holds a result of the zk verification. \\n#[odra::module]\\npub struct Verifier {\\n result: Variable<String>,\\n}\\n\\n#[odra::module]\\nimpl Verifier {\\n // Calling this entry point triggers the zk proof verification.\\n pub fn verify(&mut self) {\\n let result = verify(JOURNAL, SEAL, METHOD_ID);\\n self.result.set(result);\\n }\\n\\n // Result getter.\\n pub fn result(&self) -> String {\\n self.result.get().unwrap_or(String::from(\\"Not processed\\"))\\n }\\n}\\n\\n// The verification method. It constructs new Receipt and verifies it.\\nfn verify(journal: &[u32], seal: &[u32], method_id: &[u8]) -> String {\\n let result = Receipt::new(&journal, &seal).verify(method_id);\\n\\n match result {\\n Ok(()) => String::from(\\"Ok\\"),\\n Err(err) => format!(\\"Error: {}\\", err.to_string())\\n }\\n}\\n```\\n\\n### Livenet results\\nI have deployed it to the testnet and called the `verify` method.\\nThe `result` was `Ok`. Wow, first-ever ZK proof verification on Casper.\\nTrustless bridging, layer 2 here we come :)\\n\\nThe cost of running the `verify` method is `2324 CSPR`. That\'s a lot, but\\nwe have to start somewhere.\\n\\n## What next\\nI think it is a good place to outline possible Casper ZK goals for moving\\nthis forward. The community should discuss: \\n1. Building more examples. Risc Zero has a nice battleship game to port over\\nto Casper.\\n2. Adding Risc Zero verification method to Casper\'s FFI.\\n3. Supporting Risc Zero team. We should help develop this awesome\\nopen-source project and gain the ZK expertise.\\n\\n## Join us\\nInterested in zero knowledge on Casper?\\n\\nJoin [our Discord][odra-discord], [our Twitter][odra-twitter] or write us\\nat contact@odra.dev.\\n\\n[odra-discord]: https://discord.gg/Mm5ABc9P8k\\n[odra-twitter]: https://twitter.com/odradev"},{"id":"release-020","metadata":{"permalink":"/blog/release-020","source":"@site/blog/2022-11-30-release-020/index.md","title":"Odra 0.2.0 Released","description":"We want to introduce you to the very first public release of the Odra Framework proudly!","date":"2022-11-30T00:00:00.000Z","formattedDate":"November 30, 2022","tags":[],"readingTime":3.07,"hasTruncateMarker":true,"authors":[{"name":"Kuba P\u0142askonka","title":"Lead Developer","url":"https://github.com/kubaplas","key":"kubaplas"},{"name":"Krzysztof Pobiar\u017cyn","title":"Lead Developer","url":"https://github.com/kpob","key":"kpob"},{"name":"Maciej Zieli\u0144ski","title":"CTO","url":"https://github.com/zie1ony","key":"zie1ony"}],"frontMatter":{"slug":"release-020","title":"Odra 0.2.0 Released","authors":["kubaplas","kpob","zie1ony"],"image":"https://github.com/odradev.png"},"prevItem":{"title":"Zero Knowledge on Casper","permalink":"/blog/casper-zk-risc0"}},"content":"We want to introduce you to the very first public release of the Odra Framework proudly!\\n\\n\x3c!--truncate--\x3e\\n\\n## A bit of history\\nMore than a year ago Maciej Zieli\u0144ski resigned from the position of Ecosystem Leader at [CasperLabs][casperlabs].\\nAlong with Krzysztof Pobiar\u017cyn and Kuba P\u0142askonka, we formed an engineering team dedicated to smart contracts.\\n\\nLooking at the blockchain ecosystems from the smart contract developer perspective there are two universes.\\nThe first one is Solidity, which thrives and is at its best now.\\nIt has a ton of well-tested code and security tooling.\\nWhenever an EVM-based blockchain pops out it gets populated by forks of DeFi and DAO protocols.\\nFascinating network effect emerges - code written for one EVM-based blockchain can be run on every other EVM-based blockchain.\\nThe second universe is Rust which compiles to WebAssembly.\\nHere developer communities live in the guarded cities of Polkadot, Cosmos, Solana, Casper, and Near. \\nThe code written for one platform is not portable.\\nThe network effect never had a chance to arise.\\n\\nThe main reason why Odra exists is achieving this cross-chain code reusability.\\nWe could paraphrase a bit and say:\\n\\"One to bring them all and in the code bind them.\\"\\n\\n## Odra for Casper\\nThe very first blockchain we have integrated with Odra is Casper.\\nIn comparison to [casper-contract][casper-contract] API, it greatly cuts development time and offers a much lower entry level.\\nThe Odra interface is developer friendly and people familiar with Solidity, [Ink][ink], or [Near][near-sdk] will feel like at home.\\nWe hope it will unleash the creativity and bring a whole bunch of products onto Casper.\\n\\n## Odra Framework\\n\\nOdra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design.\\nBuilt by experienced developers, it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel.\\nIt\'s free and open source.\\n\\nOdra\'s goal is to become the go-to smart contract framework for all WebAssembly-based blockchains. \\n\\nA smart contract written using Odra can be executed on all integrated systems.\\nWe can do it by abstracting over core concepts that all the above systems are built around. \\nThese are type system, storage, entry points, execution context, and testing environment.\\nWe believe it will bring standardization to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this ecosystem.\\n\\nLet\u2019s look at a Flipper contract, that holds a boolean value.\\nThe contract has a constructor that sets the initial value, and two entry points: `flip()` and `get()`, to change and query the current value, respectively.\\n\\n```rust\\nuse odra::Variable;\\n\\n#[odra::module]\\npub struct Flipper {\\n value: Variable<bool>,\\n}\\n\\n#[odra::module]\\nimpl Flipper {\\n\\n #[odra(init)]\\n pub fn init(&mut self, value: bool) {\\n self.value.set(value);\\n }\\n\\n pub fn flip(&mut self) {\\n self.value.set(!self.get());\\n }\\n\\n pub fn get(&self) -> bool {\\n self.value.get_or_default()\\n }\\n}\\n```\\n\\nIt comes with the CLI tool [cargo-odra][cargo-odra] that makes it easy to use Odra.\\n\\n![cargo-odra](./cargo_odra.gif)\\n\\nNeat and simple, isn\'t it? Do you like it? Start flowing with us!\\n\\n## What next\\n\\nLet\'s be honest, we are just starting.\\nThe codebase is still hot.\\nOn the other hand, we are happy with the interfaces we designed.\\nNow is the time to write documentation and tutorials.\\nWe are also building the modules library inspired by [OpenZeppelin][open-zeppelin].\\nThe security code audit is still ahead of us.\\n\\n## Join us\\n\\nCheck out the [Odra GitHub repository][odra-repo] for more info on how to get the most out of Odra. \\nShould you have questions, join [our Discord][odra-discord], [our Twitter][odra-twitter] or write us at contact@odra.dev.\\n\\n[casperlabs]: https://casperlabs.io\\n[odra-repo]: https://github.com/odradev/odra\\n[cargo-odra]: https://github.com/odradev/cargo-odra\\n[odra-discord]: https://discord.gg/Mm5ABc9P8k\\n[odra-twitter]: https://twitter.com/odradev\\n[casper-contract]: https://crates.io/crates/casper-contract\\n[ink]: https://crates.io/crates/ink_lang\\n[near-sdk]: https://crates.io/crates/near-sdk\\n[open-zeppelin]: https://github.com/OpenZeppelin/openzeppelin-contracts/"}]}')}}]); \ No newline at end of file diff --git a/docs/assets/js/b338949b.42ca8fba.js b/docs/assets/js/b338949b.42ca8fba.js new file mode 100644 index 000000000..ea3e214e2 --- /dev/null +++ b/docs/assets/js/b338949b.42ca8fba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2103],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=s(n),m=r,b=p["".concat(c,".").concat(m)]||p[m]||d[m]||o;return n?a.createElement(b,l(l({ref:t},u),{},{components:n})):a.createElement(b,l({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s<o;s++)l[s]=n[s];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}p.displayName="MDXCreateElement"},60208:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=n(87462),r=(n(67294),n(3905));const o={},l="Attributes",i={unversionedId:"advanced/attributes",id:"version-0.5.0/advanced/attributes",title:"Attributes",description:"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.",source:"@site/versioned_docs/version-0.5.0/advanced/04-attributes.md",sourceDirName:"advanced",slug:"/advanced/attributes",permalink:"/docs/0.5.0/advanced/attributes",draft:!1,tags:[],version:"0.5.0",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced Storage Concepts",permalink:"/docs/0.5.0/advanced/advanced-storage"},next:{title:"Signatures",permalink:"/docs/0.5.0/advanced/signatures"}},c={},s=[{value:"Init",id:"init",level:2},{value:"Example",id:"example",level:3},{value:"Using",id:"using",level:2},{value:"Example",id:"example-1",level:3},{value:"Payable",id:"payable",level:2},{value:"Example",id:"example-2",level:3},{value:"Non Reentrant",id:"non-reentrant",level:2},{value:"Mixing attributes",id:"mixing-attributes",level:2}],u={toc:s};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"attributes"},"Attributes"),(0,r.kt)("p",null,"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution."),(0,r.kt)("p",null,"Odra defines a few attributes that can be applied to functions to equip them with superpowers."),(0,r.kt)("h2",{id:"init"},"Init"),(0,r.kt)("p",null,"If your contract needs initial setup, adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed."),(0,r.kt)("p",null,"It's important to note that a constructor function should not be invoked in any other context."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/contracts/erc20.rs",title:"examples/src/contracts/erc20.rs"},"#[odra(init)]\npub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n}\n")),(0,r.kt)("h2",{id:"using"},"Using"),(0,r.kt)("p",null,"An attribute applicable to struct fields. The ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," attribute accepts multiple values, separated by ",(0,r.kt)("inlineCode",{parentName:"p"},","),".\nEach value attribute must point at an existing field."),(0,r.kt)("h3",{id:"example-1"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n access_control: AccessControl,\n meta: Metadata,\n #[odra(using = "access_control, meta")]\n // #[odra(using = "access_control, metadata")] - would not compile - `metadata` field does not exist\n storage: Storage\n}\n\n#[odra::module]\nstruct AccessControl {\n owner: Variable<Address>\n}\n\n#[odra::module]\nstruct Metadata {\n version: Variable<String>\n}\n\n#[odra::module]\nstruct Storage {\n value: Variable<u8>,\n access_control: AccessControl,\n meta: Metadata\n}\n')),(0,r.kt)("h2",{id:"payable"},"Payable"),(0,r.kt)("p",null,"When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," attribute can send and take money in the form of native tokens. "),(0,r.kt)("h3",{id:"example-2"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/contracts/tlw.rs",title:"examples/src/contracts/tlw.rs"},"#[odra(payable)]\npub fn deposit(&mut self) {\n // Extract values\n let caller: Address = contract_env::caller();\n let amount: Balance = contract_env::attached_value();\n let current_block_time: BlockTime = contract_env::get_block_time();\n\n // Multiple lock check\n if self.balances.get(&caller).is_some() {\n contract_env::revert(Error::CannotLockTwice)\n }\n\n // Update state, emit event\n self.balances.set(&caller, amount);\n self.lock_expiration_map\n .set(&caller, current_block_time + self.lock_duration());\n Deposit {\n address: caller,\n amount\n }\n .emit();\n}\n")),(0,r.kt)("p",null,"If you try to send tokens to a non-payable function, the transaction will be automatically rejected."),(0,r.kt)("h2",{id:"non-reentrant"},"Non Reentrant"),(0,r.kt)("p",null,"Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds. "),(0,r.kt)("p",null,"To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts. "),(0,r.kt)("p",null,"They can also use reentrancy guards to block recursive calls to sensitive functions."),(0,r.kt)("p",null,"In Odra you can just apply the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(non_reentrant)]")," attribute to your function."),(0,r.kt)("h2",{id:"mixing-attributes"},"Mixing attributes"),(0,r.kt)("p",null,"A function can accept more than one attribute. The only exclusion is a constructor cannot be payable.\nTo apply multiple attributes, you can write:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable, non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"or "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"In both cases attributes order does not matter."),(0,r.kt)("p",null,"However, a constructor cannot be payable, so the below code would not compile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(init)]\nfn initialize() {\n // your logic...\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b435d362.0fc0efc0.js b/docs/assets/js/b435d362.0fc0efc0.js new file mode 100644 index 000000000..1f5cef755 --- /dev/null +++ b/docs/assets/js/b435d362.0fc0efc0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7150],{43396:e=>{e.exports=JSON.parse('{"title":"Examples","description":"Examples","slug":"/category/examples","permalink":"/docs/0.4.0/category/examples","navigation":{"previous":{"title":"Casper","permalink":"/docs/0.4.0/backends/casper"},"next":{"title":"odra-examples","permalink":"/docs/0.4.0/examples/odra-examples"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/b4f02106.1850566b.js b/docs/assets/js/b4f02106.1850566b.js new file mode 100644 index 000000000..893b06527 --- /dev/null +++ b/docs/assets/js/b4f02106.1850566b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1442],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=d(t),m=r,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},c),{},{components:t})):a.createElement(f,l({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}p.displayName="MDXCreateElement"},73437:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={},l="Delegate",i={unversionedId:"advanced/delegate",id:"version-0.6.0/advanced/delegate",title:"Delegate",description:"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.",source:"@site/versioned_docs/version-0.6.0/advanced/02-delegate.md",sourceDirName:"advanced",slug:"/advanced/delegate",permalink:"/docs/0.6.0/advanced/delegate",draft:!1,tags:[],version:"0.6.0",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Module reusing",permalink:"/docs/0.6.0/advanced/using"},next:{title:"Advanced Storage Concepts",permalink:"/docs/0.6.0/advanced/advanced-storage"}},s={},d=[{value:"Overview",id:"overview",level:2},{value:"Code Examples",id:"code-examples",level:2}],c={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"delegate"},"Delegate"),(0,r.kt)("p",null,"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module."),(0,r.kt)("p",null,"The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"To utilize the delegate feature in your contract, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro, your parent module remains clean and easy to understand."),(0,r.kt)("p",null,"You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself."),(0,r.kt)("h2",{id:"code-examples"},"Code Examples"),(0,r.kt)("p",null,"Consider the following basic example for better understanding:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);\n pub fn approve(&mut self, spender: Address, amount: U256);\n pub fn name(&self) -> String;\n pub fn symbol(&self) -> String;\n pub fn decimals(&self) -> u8;\n pub fn total_supply(&self) -> U256;\n pub fn balance_of(&self, owner: Address) -> U256;\n pub fn allowance(&self, owner: Address, spender: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n pub fn change_ownership(&mut self, new_owner: Address);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedToken")," contract includes two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),". We delegate various functions from both modules using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro. As a result, the contract retains its succinctness without compromising on functionality."),(0,r.kt)("p",null,"The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities."),(0,r.kt)("p",null,"Let's take a look at another example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};\n\n#[odra::module]\npub struct DeFiPlatform {\n ownable: Ownable,\n erc20: Erc20,\n exchange: Exchange\n}\n\n#[odra::module]\nimpl DeFiPlatform {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n self.exchange.init(exchange_rate);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn balance_of(&self, owner: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n }\n\n to self.exchange {\n pub fn swap(&mut self, sender: Address, recipient: Address);\n pub fn set_exchange_rate(&mut self, new_rate: u64);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"In this ",(0,r.kt)("inlineCode",{parentName:"p"},"DeFiPlatform")," contract, we include ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"Exchange")," modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure."),(0,r.kt)("p",null,"Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b548b5e0.5414a78d.js b/docs/assets/js/b548b5e0.5414a78d.js new file mode 100644 index 000000000..e8f3879a9 --- /dev/null +++ b/docs/assets/js/b548b5e0.5414a78d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1810],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},7954:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},i="Odra framework",s={unversionedId:"intro",id:"version-0.4.0/intro",title:"Odra framework",description:"Odra Docs",source:"@site/versioned_docs/version-0.4.0/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/0.4.0/",draft:!1,tags:[],version:"0.4.0",sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},sidebar:"tutorialSidebar",next:{title:"Getting started",permalink:"/docs/0.4.0/category/getting-started"}},c={image:r(34954).Z},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"odra-framework"},"Odra framework"),(0,o.kt)("p",null,"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean,\npragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract\ndevelopment, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open\nsource."),(0,o.kt)("p",null,"Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains."),(0,o.kt)("p",null,"A smart contract written using Odra can be executed on all integrated systems. We can do it\nby abstracting over core concepts that all the above systems are built around. These are type system,\nstorage, entry points, execution context, and testing environment. We believe it will bring standardization\nto the development of Rust-based smart contracts and enable code reusability we have not yet seen in this\necosystem."),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.4.0/getting-started/installation"},"Installation")," and our ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.4.0/getting-started/flipper"},"Flipper example"),"\nto find out how to start your new project with Odra."))}d.isMDXComponent=!0},34954:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/b6aaec29.474717b9.js b/docs/assets/js/b6aaec29.474717b9.js new file mode 100644 index 000000000..474310f62 --- /dev/null +++ b/docs/assets/js/b6aaec29.474717b9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1655],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,v=d["".concat(l,".").concat(m)]||d[m]||u[m]||s;return n?r.createElement(v,o(o({ref:t},p),{},{components:n})):r.createElement(v,o({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,o=new Array(s);o[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var c=2;c<s;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},63510:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const s={sidebar_position:9,description:"Creating and emitting Events"},o="Events",i={unversionedId:"basics/events",id:"version-0.6.0/basics/events",title:"Events",description:"Creating and emitting Events",source:"@site/versioned_docs/version-0.6.0/basics/09-events.md",sourceDirName:"basics",slug:"/basics/events",permalink:"/docs/0.6.0/basics/events",draft:!1,tags:[],version:"0.6.0",sidebarPosition:9,frontMatter:{sidebar_position:9,description:"Creating and emitting Events"},sidebar:"tutorialSidebar",previous:{title:"Errors",permalink:"/docs/0.6.0/basics/errors"},next:{title:"Cross calls",permalink:"/docs/0.6.0/basics/cross-calls"}},l={},c=[{value:"Testing events",id:"testing-events",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Different blockchains implement events in different ways. Odra lets you forget about it by introducing\nOdra Events. Take a look:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"use odra::{Event, contract_env};\nuse odra::types::{Address, BlockTime, event::OdraEvent};\n\n#[odra::module(events = [PartyStarted])]\npub struct PartyContract {\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n\n#[odra::module]\nimpl PartyContract {\n #[odra(init)]\n pub fn init(&self) {\n PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n }.emit();\n }\n}\n")),(0,a.kt)("p",null,"We defined a new contract, which emits an event called ",(0,a.kt)("inlineCode",{parentName:"p"},"PartyStarted")," when the contract is deployed.\nTo define an event, we derive an ",(0,a.kt)("inlineCode",{parentName:"p"},"Event")," macro like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n")),(0,a.kt)("p",null,"Among other things, it adds an ",(0,a.kt)("inlineCode",{parentName:"p"},"emit()")," function to the struct, which allows you to emit the event simply\nas that:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n}.emit();\n")),(0,a.kt)("p",null,"Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an ",(0,a.kt)("inlineCode",{parentName:"p"},"events")," attribute to the struct's ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. "),(0,a.kt)("p",null,"The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module."),(0,a.kt)("h2",{id:"testing-events"},"Testing events"),(0,a.kt)("p",null,"Odra's ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a handy macro ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_events!")," which lets you easily test the events that a given contract has emitted:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"use odra::{assert_events, test_env};\nuse crate::features::events::PartyStarted;\nuse super::PartyContractDeployer;\n\n#[test]\nfn test_party() {\n let party_contract = PartyContractDeployer::init();\n assert_events!(\n party_contract,\n PartyStarted {\n caller: test_env::get_account(0),\n block_time: 0,\n }\n );\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn how to call other contracts from the contract context."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b7573e33.854de50e.js b/docs/assets/js/b7573e33.854de50e.js new file mode 100644 index 000000000..b650d0626 --- /dev/null +++ b/docs/assets/js/b7573e33.854de50e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7897],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},o=Object.keys(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i=a.createContext({}),u=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},d=function(e){var t=u(e.components);return a.createElement(i.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=u(r),m=n,h=p["".concat(i,".").concat(m)]||p[m]||c[m]||o;return r?a.createElement(h,l(l({ref:t},d),{},{components:r})):a.createElement(h,l({ref:t},d))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,l=new Array(o);l[0]=p;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:n,l[1]=s;for(var u=2;u<o;u++)l[u]=r[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,r)}p.displayName="MDXCreateElement"},51464:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=r(87462),n=(r(67294),r(3905));const o={},l="Module Composer",s={unversionedId:"advanced/composer",id:"version-0.3.0/advanced/composer",title:"Module Composer",description:"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.",source:"@site/versioned_docs/version-0.3.0/advanced/01-composer.md",sourceDirName:"advanced",slug:"/advanced/composer",permalink:"/docs/0.3.0/advanced/composer",draft:!1,tags:[],version:"0.3.0",sidebarPosition:1,frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Advanced",permalink:"/docs/0.3.0/category/advanced"},next:{title:"Delegate",permalink:"/docs/0.3.0/advanced/delegate"}},i={},u=[{value:"Conceptual Overview",id:"conceptual-overview",level:2},{value:"Usage",id:"usage",level:2},{value:"Conclusion",id:"conclusion",level:2}],d={toc:u};function c(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"module-composer"},"Module Composer"),(0,n.kt)("p",null,"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples."),(0,n.kt)("h2",{id:"conceptual-overview"},"Conceptual Overview"),(0,n.kt)("p",null,"By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n value: Variable<u8>, // the default namespace would be "contract_value"\n module: Module\n}\n\n#[odra::module]\nstruct Module {\n secret: Variable<String> // the default namespace would be "contract_module_secret"\n}\n')),(0,n.kt)("p",null,"While this isolation often proves useful, there are scenarios where shared storage is beneficial. Here, the Module Composer comes in."),(0,n.kt)("p",null,"Additionally, the Module Composer shortens the storage key - a handy side effect of shared storage. "),(0,n.kt)("p",null,"For each module, Odra generates a corresponding Composer struct (e.g., ",(0,n.kt)("inlineCode",{parentName:"p"},"MyContractComposer")," for ",(0,n.kt)("inlineCode",{parentName:"p"},"MyContract")," module), which aids in manual module composition."),(0,n.kt)("h2",{id:"usage"},"Usage"),(0,n.kt)("p",null,"By default, the #","[odra::module]"," macro generates an implementation of the odra::Instance trait, prefixing the storage key of child modules with the parent namespace. To disable this behavior, pass the ",(0,n.kt)("inlineCode",{parentName:"p"},"skip_instance")," argument to the #","[odra::module]"," macro."),(0,n.kt)("p",null,"Let's write a simple code example. The example provided below introduces some additional complexity by featuring deeper module nesting."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::{Instance, Variable};\n\n#[odra::module]\npub struct SharedStorage {\n pub value: Variable<String>\n}\n\n#[odra::module]\npub struct MyStorage {\n pub shared: SharedStorage,\n pub version: Variable<u8>\n}\n\n#[odra::module]\npub struct MoreStorage {\n pub my_storage: MyStorage,\n pub extra: Variable<u32>\n}\n\n#[odra::module(skip_instance)]\npub struct ComplexContract {\n pub shared: SharedStorage,\n pub more_storage: MoreStorage\n}\n\n#[odra::module]\nimpl ComplexContract {\n #[odra(init)]\n pub fn init(&mut self, version: u8, value: String, extra: u32) {\n self.more_storage.my_storage.version.set(version);\n self.shared.value.set(value);\n self.more_storage.extra.set(extra);\n }\n\n pub fn get_value(&self) -> String {\n self.shared.value.get_or_default()\n }\n\n pub fn get_value_via_storage(&self) -> String {\n self.more_storage.my_storage.shared.value.get_or_default()\n }\n\n pub fn get_extra_value(&self) -> u32 {\n self.more_storage.extra.get_or_default()\n }\n}\n\nimpl Instance for ComplexContract {\n fn instance(namespace: &str) -> Self {\n let shared = SharedStorageComposer::new(namespace, "shared").compose();\n let my_storage = MyStorageComposer::new(namespace, "my_storage")\n .with_shared(&shared)\n .compose();\n let more_storage = MoreStorageComposer::new(namespace, "more_storage")\n .with_my_storage(&my_storage)\n .compose();\n Self { shared, more_storage }\n }\n}\n\n#[cfg(test)]\nmod test {\n use crate::composer::ComplexContractDeployer;\n\n #[test]\n fn t() {\n let shared_value = "shared_value".to_string();\n let extra_value: u32 = 314;\n let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);\n\n assert_eq!(token.get_value(), shared_value);\n assert_eq!(token.get_value_via_storage(), shared_value);\n assert_eq!(token.get_extra_value(), extra_value);\n }\n}\n')),(0,n.kt)("p",null,"In this example, we've introduced a new module, ",(0,n.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", which nests ",(0,n.kt)("inlineCode",{parentName:"p"},"MyStorage")," and includes an extra value. The ",(0,n.kt)("inlineCode",{parentName:"p"},"ComplexContract")," contains ",(0,n.kt)("inlineCode",{parentName:"p"},"SharedStorage")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels."),(0,n.kt)("p",null,"If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"On the contract level - ",(0,n.kt)("inlineCode",{parentName:"li"},"contract_shared_value"),"."),(0,n.kt)("li",{parentName:"ol"},"On the ",(0,n.kt)("inlineCode",{parentName:"li"},"MyStorage")," module level - ",(0,n.kt)("inlineCode",{parentName:"li"},"contract_more_storage_shared_value"),".")),(0,n.kt)("p",null,"This example showcases how you can effectively use the Module Composer feature to build intricate and efficient smart contracts."),(0,n.kt)("h2",{id:"conclusion"},"Conclusion"),(0,n.kt)("p",null,"The Module Composer in Odra provides developers with a high level of flexibility and control over module behavior in their smart contracts. This guide, complete with a practical example, should give you a good understanding of the feature. Embrace the power of the Module Composer and unleash the full potential of your smart contracts!"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b759477d.741c75cd.js b/docs/assets/js/b759477d.741c75cd.js new file mode 100644 index 000000000..c9f343fcc --- /dev/null +++ b/docs/assets/js/b759477d.741c75cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[79],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},95150:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},i="Odra framework",s={unversionedId:"intro",id:"version-0.2.0/intro",title:"Odra framework",description:"Odra Docs",source:"@site/versioned_docs/version-0.2.0/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/0.2.0/",draft:!1,tags:[],version:"0.2.0",sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},sidebar:"defaultSidebar",next:{title:"Getting started",permalink:"/docs/0.2.0/category/getting-started"}},c={image:r(72709).Z},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"odra-framework"},"Odra framework"),(0,o.kt)("p",null,"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean,\npragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract\ndevelopment, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open\nsource."),(0,o.kt)("p",null,"Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains."),(0,o.kt)("p",null,"A smart contract written using Odra can be executed on all integrated systems. We can do it\nby abstracting over core concepts that all the above systems are built around. These are type system,\nstorage, entry points, execution context, and testing environment. We believe it will bring standardization\nto the development of Rust-based smart contracts and enable code reusability we have not yet seen in this\necosystem."),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.2.0/getting-started/installation"},"Installation")," and our ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.2.0/getting-started/flipper"},"Flipper example"),"\nto find out how to start your new project with Odra."))}d.isMDXComponent=!0},72709:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/b7d3ed64.5f843fed.js b/docs/assets/js/b7d3ed64.5f843fed.js new file mode 100644 index 000000000..811d332f9 --- /dev/null +++ b/docs/assets/js/b7d3ed64.5f843fed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8666],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},14454:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},l="Flipper example",i={unversionedId:"getting-started/flipper",id:"version-0.3.0/getting-started/flipper",title:"Flipper example",description:"To quickly start working with Odra, take a look at the following code sample. If you followed the",source:"@site/versioned_docs/version-0.3.0/getting-started/flipper.md",sourceDirName:"getting-started",slug:"/getting-started/flipper",permalink:"/docs/0.3.0/getting-started/flipper",draft:!1,tags:[],version:"0.3.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs/0.3.0/getting-started/installation"},next:{title:"Basics",permalink:"/docs/0.3.0/category/basics"}},s={},p=[{value:"Let's flip",id:"lets-flip",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-example"},"Flipper example"),(0,a.kt)("p",null,"To quickly start working with Odra, take a look at the following code sample. If you followed the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.0/getting-started/installation"},"Installation")," tutorial, you should have this file already at ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),"."),(0,a.kt)("p",null,"For further explanation of how this code works, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.0/basics/flipper-internals"},"Flipper Internals"),"."),(0,a.kt)("h2",{id:"lets-flip"},"Let's flip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs" showLineNumbers',title:'"flipper.rs"',showLineNumbers:!0},"use odra::Variable;\n\n/// A module definition. Each module struct consists Variables and Mappings\n/// or/and another modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value, \n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n\n/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n /// Retrieves value from the storage. \n /// If the value has never been set, the default value is returned.\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n\n #[test]\n fn test_two_flippers() {\n let mut contract1 = FlipperDeployer::initial_settings();\n let contract2 = FlipperDeployer::initial_settings();\n assert!(!contract1.get());\n assert!(!contract2.get());\n contract1.flip();\n assert!(contract1.get());\n assert!(!contract2.get());\n }\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next category of articles, we will go through basic concepts of Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b87f41d0.f0f181c1.js b/docs/assets/js/b87f41d0.f0f181c1.js new file mode 100644 index 000000000..109d8eba9 --- /dev/null +++ b/docs/assets/js/b87f41d0.f0f181c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7752],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},82979:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},l="Flipper example",i={unversionedId:"getting-started/flipper",id:"version-0.3.1/getting-started/flipper",title:"Flipper example",description:"To quickly start working with Odra, take a look at the following code sample. If you followed the",source:"@site/versioned_docs/version-0.3.1/getting-started/flipper.md",sourceDirName:"getting-started",slug:"/getting-started/flipper",permalink:"/docs/0.3.1/getting-started/flipper",draft:!1,tags:[],version:"0.3.1",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/docs/0.3.1/getting-started/installation"},next:{title:"Basics",permalink:"/docs/0.3.1/category/basics"}},s={},p=[{value:"Let's flip",id:"lets-flip",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-example"},"Flipper example"),(0,a.kt)("p",null,"To quickly start working with Odra, take a look at the following code sample. If you followed the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.1/getting-started/installation"},"Installation")," tutorial, you should have this file already at ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),"."),(0,a.kt)("p",null,"For further explanation of how this code works, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.1/basics/flipper-internals"},"Flipper Internals"),"."),(0,a.kt)("h2",{id:"lets-flip"},"Let's flip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs" showLineNumbers',title:'"flipper.rs"',showLineNumbers:!0},"use odra::Variable;\n\n/// A module definition. Each module struct consists Variables and Mappings\n/// or/and another modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value, \n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n\n/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n /// Retrieves value from the storage. \n /// If the value has never been set, the default value is returned.\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n\n #[test]\n fn test_two_flippers() {\n let mut contract1 = FlipperDeployer::initial_settings();\n let contract2 = FlipperDeployer::initial_settings();\n assert!(!contract1.get());\n assert!(!contract2.get());\n contract1.flip();\n assert!(contract1.get());\n assert!(!contract2.get());\n }\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next category of articles, we will go through basic concepts of Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/b94504cb.a2d52b37.js b/docs/assets/js/b94504cb.a2d52b37.js new file mode 100644 index 000000000..a1e4a2435 --- /dev/null +++ b/docs/assets/js/b94504cb.a2d52b37.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4415],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=s(n),m=r,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},70872:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(87462),r=(n(67294),n(3905));const o={},i="Attributes",l={unversionedId:"advanced/attributes",id:"version-0.4.0/advanced/attributes",title:"Attributes",description:"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.",source:"@site/versioned_docs/version-0.4.0/advanced/04-attributes.md",sourceDirName:"advanced",slug:"/advanced/attributes",permalink:"/docs/0.4.0/advanced/attributes",draft:!1,tags:[],version:"0.4.0",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced Storage Concepts",permalink:"/docs/0.4.0/advanced/advanced-storage"},next:{title:"Backends",permalink:"/docs/0.4.0/category/backends"}},c={},s=[{value:"Init",id:"init",level:2},{value:"Example",id:"example",level:3},{value:"Payable",id:"payable",level:2},{value:"Example",id:"example-1",level:3},{value:"Non Reentrant",id:"non-reentrant",level:2},{value:"Mixing attributes",id:"mixing-attributes",level:2}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"attributes"},"Attributes"),(0,r.kt)("p",null,"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution."),(0,r.kt)("p",null,"Odra defines a few attributes that can be applied to functions to equip them with superpowers."),(0,r.kt)("h2",{id:"init"},"Init"),(0,r.kt)("p",null,"If your contract needs initial setup, adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed."),(0,r.kt)("p",null,"It's important to note that a constructor function should not be invoked in any other context."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/erc20.rs",title:"examples/erc20.rs"},"#[odra(init)]\npub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n}\n")),(0,r.kt)("h2",{id:"payable"},"Payable"),(0,r.kt)("p",null,"When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," attribute can send and take money in the form of native tokens. "),(0,r.kt)("h3",{id:"example-1"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/tlw.rs",title:"examples/tlw.rs"},"#[odra(payable)]\npub fn deposit(&mut self) {\n // Extract values\n let caller: Address = contract_env::caller();\n let amount: Balance = contract_env::attached_value();\n let current_block_time: BlockTime = contract_env::get_block_time();\n\n // Multiple lock check\n if self.balances.get(&caller).is_some() {\n contract_env::revert(Error::CannotLockTwice)\n }\n\n // Update state, emit event\n self.balances.set(&caller, amount);\n self.lock_expiration_map\n .set(&caller, current_block_time + self.lock_duration());\n Deposit {\n address: caller,\n amount\n }\n .emit();\n}\n")),(0,r.kt)("p",null,"If you try to send tokens to a non-payable function, the transaction will be automatically rejected."),(0,r.kt)("h2",{id:"non-reentrant"},"Non Reentrant"),(0,r.kt)("p",null,"Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds. "),(0,r.kt)("p",null,"To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts. "),(0,r.kt)("p",null,"They can also use reentrancy guards to block recursive calls to sensitive functions."),(0,r.kt)("p",null,"In Odra you can just apply the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(non_reentrant)]")," attribute to your function."),(0,r.kt)("h2",{id:"mixing-attributes"},"Mixing attributes"),(0,r.kt)("p",null,"A function can accept more than one attribute. The only exclusion is a constructor cannot be payable.\nTo apply multiple attributes, you can write:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable, non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"or "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"In both cases attributes order does not matter."),(0,r.kt)("p",null,"However, a constructor cannot be payable, so the below code would not compile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(init)]\nfn initialize() {\n // your logic...\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ba36c747.3acfa93c.js b/docs/assets/js/ba36c747.3acfa93c.js new file mode 100644 index 000000000..137a2c714 --- /dev/null +++ b/docs/assets/js/ba36c747.3acfa93c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4997],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>m});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function s(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function i(t,e){if(null==t)return{};var n,a,r=function(t,e){if(null==t)return{};var n,a,r={},o=Object.keys(t);for(a=0;a<o.length;a++)n=o[a],e.indexOf(n)>=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a<o.length;a++)n=o[a],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var l=a.createContext({}),c=function(t){var e=a.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):s(s({},e),t)),n},p=function(t){var e=c(t.components);return a.createElement(l.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,p=i(t,["components","mdxType","originalType","parentName"]),u=c(n),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||o;return n?a.createElement(h,s(s({ref:e},p),{},{components:n})):a.createElement(h,s({ref:e},p))}));function m(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=n.length,s=new Array(o);s[0]=u;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i.mdxType="string"==typeof t?t:r,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},44326:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:7,description:"How to write tests in Odra"},s="Testing",i={unversionedId:"basics/testing",id:"basics/testing",title:"Testing",description:"How to write tests in Odra",source:"@site/docs/basics/07-testing.md",sourceDirName:"basics",slug:"/basics/testing",permalink:"/docs/next/basics/testing",draft:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"How to write tests in Odra"},sidebar:"tutorialSidebar",previous:{title:"Host Communication",permalink:"/docs/next/basics/communicating-with-host"},next:{title:"Errors",permalink:"/docs/next/basics/errors"}},l={},c=[{value:"HostEnv",id:"hostenv",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(t){let{components:e,...n}=t;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write\nregular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the\nprevious article:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},'use odra::{List, Var};\n\n#[cfg(test)]\nmod tests {\n use super::{DogContract3HostRef, DogContract3InitArgs};\n use odra::{host::Deployer, prelude::*};\n\n #[test]\n fn init_test() {\n let test_env = odra_test::env();\n let init_args = DogContract3InitArgs {\n name: "DogContract".to_string()\n };\n let mut dog_contract = DogContract3HostRef::deploy(&test_env, init_args);\n assert_eq!(dog_contract.walks_amount(), 0);\n assert_eq!(dog_contract.walks_total_length(), 0);\n dog_contract.walk_the_dog(5);\n dog_contract.walk_the_dog(10);\n assert_eq!(dog_contract.walks_amount(), 2);\n assert_eq!(dog_contract.walks_total_length(), 15);\n }\n}\n')),(0,r.kt)("p",null,"The first interesting thing you may notice is placed the import section."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use super::{DogContract3HostRef, DogContract3InitArgs};\nuse odra::{host::Deployer, prelude::*};\n")),(0,r.kt)("p",null,"We are using ",(0,r.kt)("inlineCode",{parentName:"p"},"super")," to import the ",(0,r.kt)("inlineCode",{parentName:"p"},"DogContract3HostRef")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"DogContract3InitArgs")," from the parent module.\n",(0,r.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}HostRef")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}InitArgs")," are types that was generated for us by Odra."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"DogContract3HostRef")," is a reference to the contract that we can use to interact with it (call entrypoints)\nand implements ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/host/trait.HostRef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"HostRef"))," trait. "),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"DogContract3InitArgs")," is a struct that we use to initialize the contract and implements ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/host/trait.InitArgs.html"},(0,r.kt)("inlineCode",{parentName:"a"},"InitArgs"))," trait.\nConsidering the contract initialization, there three possible scenarios:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"The contract has a constructor with arguments, then Odra creates a struct named ",(0,r.kt)("inlineCode",{parentName:"li"},"{{ModuleName}}InitArgs"),"."),(0,r.kt)("li",{parentName:"ol"},"The contract has a constructor with no arguments, then you can use ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::host::NoArgs"),"."),(0,r.kt)("li",{parentName:"ol"},"The contract does not have a constructor, then you can use ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::host::NoArgs"),".\nAll of those structs implement the ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::host::InitArgs")," trait, required to conform to the\n",(0,r.kt)("inlineCode",{parentName:"li"},"Deployer::deploy")," method signature. ")),(0,r.kt)("p",null,"The other import is ",(0,r.kt)("inlineCode",{parentName:"p"},"odra::host::Deployer"),". This is a trait is used to deploy the contract and give us a reference to it."),(0,r.kt)("p",null,"Let's take a look at the test itself. How to obtain a reference to the contract?\n",(0,r.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}HostRef")," implements the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/host/trait.Deployer.html"},(0,r.kt)("inlineCode",{parentName:"a"},"Deployer"))," trait, which provides the ",(0,r.kt)("inlineCode",{parentName:"p"},"deploy")," method:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"let mut dog_contract = DogContract3HostRef::deploy(&test_env, init_args);\n")),(0,r.kt)("p",null,"From now on, we can use ",(0,r.kt)("inlineCode",{parentName:"p"},"dog_contract")," to interact with our deployed contract - in particular, all\n",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," functions from the impl section that was annotated with a macro are available to us:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"// Impl\npub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n}\n\n...\n\n// Test\ndog_contract.walk_the_dog(5);\n")),(0,r.kt)("h2",{id:"hostenv"},"HostEnv"),(0,r.kt)("p",null,"Odra gives us some additional functions that we can use to communicate with the host (outside the contract context)\nand to configure how the contracts are deployed and called. Let's revisit the example from the previous\narticle about host communication and implement the tests that prove it works:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/testing.rs"',title:'"examples/src/features/testing.rs"'},'#[cfg(test)]\nmod tests {\n use crate::features::testing::{TestingContractHostRef, TestingContractInitArgs};\n use odra::{host::{Deployer, HostEnv}, prelude::*};\n\n #[test]\n fn env() {\n let test_env: HostEnv = odra_test::env();\n test_env.set_caller(test_env.get_account(0));\n let init_args = TestingContractInitArgs {\n name: "MyContract".to_string()\n };\n let testing_contract = TestingContractHostRef::deploy(&test_env, init_args);\n let creator = testing_contract.created_by();\n test_env.set_caller(test_env.get_account(1));\n let init_args = TestingContractInitArgs {\n name: "MyContract2".to_string()\n };\n let testing_contract2 = TestingContractHostRef::deploy(&test_env, init_args);\n let creator2 = testing_contract2.created_by();\n assert_ne!(creator, creator2);\n }\n}\n')),(0,r.kt)("p",null,"In the code above, at the beginning of the test, we are obtaining a ",(0,r.kt)("inlineCode",{parentName:"p"},"HostEnv")," instance using ",(0,r.kt)("inlineCode",{parentName:"p"},"odra_test::env()"),".\nNext, we are deploying two instances of the same contract, but we're using ",(0,r.kt)("inlineCode",{parentName:"p"},"HostEnv::set_caller"),"\nto change the caller - so the Address which is deploying the contract. This changes the result of the ",(0,r.kt)("inlineCode",{parentName:"p"},"odra::ContractEnv::caller()"),"\nthe function we are calling inside the contract."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"HostEnv")," comes with a set of functions that will let you write better tests:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"fn set_caller(&self, address: Address)")," - you've seen it in action just now"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"fn balance_of(&self, address: &Address) -> U512")," - returns the balance of the account associated with the given address"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"fn advance_block_time(&self, time_diff: u64)")," - increases the current value of ",(0,r.kt)("inlineCode",{parentName:"li"},"block_time")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"fn get_account(&self, n: usize) -> Address")," - returns an n-th address that was prepared for you by Odra in advance;\nby default, you start with the 0-th account"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"fn emitted_event<T: ToBytes + EventInstance>(&self, contract_address: &Address, event: &T) -> bool")," - verifies if the event was emitted by the contract")),(0,r.kt)("p",null,"Full list of functions can be found in the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/host/struct.HostEnv.html"},(0,r.kt)("inlineCode",{parentName:"a"},"HostEnv"))," documentation."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"We take a look at how Odra handles errors!"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/bab04a93.9417c5fe.js b/docs/assets/js/bab04a93.9417c5fe.js new file mode 100644 index 000000000..1614336fd --- /dev/null +++ b/docs/assets/js/bab04a93.9417c5fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5006],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=s(n),m=r,f=p["".concat(c,".").concat(m)]||p[m]||d[m]||o;return n?a.createElement(f,l(l({ref:t},u),{},{components:n})):a.createElement(f,l({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s<o;s++)l[s]=n[s];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}p.displayName="MDXCreateElement"},94071:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=n(87462),r=(n(67294),n(3905));const o={},l="Attributes",i={unversionedId:"advanced/attributes",id:"version-0.7.0/advanced/attributes",title:"Attributes",description:"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.",source:"@site/versioned_docs/version-0.7.0/advanced/04-attributes.md",sourceDirName:"advanced",slug:"/advanced/attributes",permalink:"/docs/advanced/attributes",draft:!1,tags:[],version:"0.7.0",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced Storage Concepts",permalink:"/docs/advanced/advanced-storage"},next:{title:"Signatures",permalink:"/docs/advanced/signatures"}},c={},s=[{value:"Init",id:"init",level:2},{value:"Example",id:"example",level:3},{value:"Using",id:"using",level:2},{value:"Example",id:"example-1",level:3},{value:"Payable",id:"payable",level:2},{value:"Example",id:"example-2",level:3},{value:"Non Reentrant",id:"non-reentrant",level:2},{value:"Example",id:"example-3",level:3},{value:"Mixing attributes",id:"mixing-attributes",level:2}],u={toc:s};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"attributes"},"Attributes"),(0,r.kt)("p",null,"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution."),(0,r.kt)("p",null,"Odra defines a few attributes that can be applied to functions to equip them with superpowers."),(0,r.kt)("h2",{id:"init"},"Init"),(0,r.kt)("p",null,"If your contract needs initial setup, adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed."),(0,r.kt)("p",null,"It's important to note that a constructor function should not be invoked in any other context."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/contracts/erc20.rs",title:"examples/src/contracts/erc20.rs"},"#[odra(init)]\npub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {\n let caller = contract_env::caller();\n self.name.set(name);\n self.symbol.set(symbol);\n self.decimals.set(decimals);\n self.mint(&caller, initial_supply);\n}\n")),(0,r.kt)("h2",{id:"using"},"Using"),(0,r.kt)("p",null,"An attribute applicable to struct fields. The ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," attribute accepts multiple values, separated by ",(0,r.kt)("inlineCode",{parentName:"p"},","),".\nEach value attribute must point at an existing field."),(0,r.kt)("h3",{id:"example-1"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n access_control: AccessControl,\n meta: Metadata,\n #[odra(using = "access_control, meta")]\n // #[odra(using = "access_control, metadata")] - would not compile - `metadata` field does not exist\n storage: Storage\n}\n\n#[odra::module]\nstruct AccessControl {\n owner: Variable<Address>\n}\n\n#[odra::module]\nstruct Metadata {\n version: Variable<String>\n}\n\n#[odra::module]\nstruct Storage {\n value: Variable<u8>,\n access_control: AccessControl,\n meta: Metadata\n}\n')),(0,r.kt)("h2",{id:"payable"},"Payable"),(0,r.kt)("p",null,"When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," attribute can send and take money in the form of native tokens. "),(0,r.kt)("h3",{id:"example-2"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/contracts/tlw.rs",title:"examples/src/contracts/tlw.rs"},"#[odra(payable)]\npub fn deposit(&mut self) {\n // Extract values\n let caller: Address = contract_env::caller();\n let amount: Balance = contract_env::attached_value();\n let current_block_time: BlockTime = contract_env::get_block_time();\n\n // Multiple lock check\n if self.balances.get(&caller).is_some() {\n contract_env::revert(Error::CannotLockTwice)\n }\n\n // Update state, emit event\n self.balances.set(&caller, amount);\n self.lock_expiration_map\n .set(&caller, current_block_time + self.lock_duration());\n Deposit {\n address: caller,\n amount\n }\n .emit();\n}\n")),(0,r.kt)("p",null,"If you try to send tokens to a non-payable function, the transaction will be automatically rejected."),(0,r.kt)("h2",{id:"non-reentrant"},"Non Reentrant"),(0,r.kt)("p",null,"Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds. "),(0,r.kt)("p",null,"To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts. "),(0,r.kt)("p",null,"They can also use reentrancy guards to block recursive calls to sensitive functions."),(0,r.kt)("p",null,"In Odra you can just apply the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(non_reentrant)]")," attribute to your function."),(0,r.kt)("h3",{id:"example-3"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\npub struct NonReentrantCounter {\n counter: Variable<u32>\n}\n\n#[odra::module]\nimpl NonReentrantCounter {\n #[odra(non_reentrant)]\n pub fn count_ref_recursive(&mut self, n: u32) {\n if n > 0 {\n self.count();\n ReentrancyMockRef::at(&contract_env::self_address()).count_ref_recursive(n - 1);\n }\n }\n}\n\nimpl NonReentrantCounter {\n fn count(&mut self) {\n let c = self.counter.get_or_default();\n self.counter.set(c + 1);\n }\n}\n\n#[cfg(test)]\nmod test {\n use odra::{test_env, types::ExecutionError};\n\n #[test]\n fn ref_recursion_not_allowed() {\n test_env::assert_exception(ExecutionError::reentrant_call(), || {\n let mut contract = super::NonReentrantCounterDeployer::default();\n contract.count_ref_recursive(11);\n });\n }\n}\n")),(0,r.kt)("h2",{id:"mixing-attributes"},"Mixing attributes"),(0,r.kt)("p",null,"A function can accept more than one attribute. The only exclusion is a constructor cannot be payable.\nTo apply multiple attributes, you can write:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable, non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"or "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,r.kt)("p",null,"In both cases attributes order does not matter."),(0,r.kt)("p",null,"However, a constructor cannot be payable, so the below code would not compile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(init)]\nfn initialize() {\n // your logic...\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/bac2ca12.b5935fce.js b/docs/assets/js/bac2ca12.b5935fce.js new file mode 100644 index 000000000..55e1a7c78 --- /dev/null +++ b/docs/assets/js/bac2ca12.b5935fce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4720],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=s(n),f=a,m=d["".concat(c,".").concat(f)]||d[f]||p[f]||o;return n?r.createElement(m,l(l({ref:t},u),{},{components:n})):r.createElement(m,l({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s<o;s++)l[s]=n[s];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},17144:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={},l="Attributes",i={unversionedId:"advanced/attributes",id:"advanced/attributes",title:"Attributes",description:"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that",source:"@site/docs/advanced/03-attributes.md",sourceDirName:"advanced",slug:"/advanced/attributes",permalink:"/docs/next/advanced/attributes",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced Storage Concepts",permalink:"/docs/next/advanced/advanced-storage"},next:{title:"Storage Layout",permalink:"/docs/next/advanced/storage-layout"}},c={},s=[{value:"Payable",id:"payable",level:2},{value:"Example",id:"example",level:3},{value:"Non Reentrant",id:"non-reentrant",level:2},{value:"Example",id:"example-1",level:3},{value:"Mixing attributes",id:"mixing-attributes",level:2}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"attributes"},"Attributes"),(0,a.kt)("p",null,"Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that\nallows developers to embed common checks into function definitions in a readable and reusable manner.\nThese are essentially prerequisites for function execution."),(0,a.kt)("p",null,"Odra defines a few attributes that can be applied to functions to equip them with superpowers."),(0,a.kt)("h2",{id:"payable"},"Payable"),(0,a.kt)("p",null,"When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," attribute can send and take money in the form of native tokens. "),(0,a.kt)("h3",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=examples/src/contracts/tlw.rs",title:"examples/src/contracts/tlw.rs"},"#[odra(payable)]\npub fn deposit(&mut self) {\n // Extract values\n let caller: Address = self.env().caller();\n let amount: U256 = self.env().attached_value();\n let current_block_time: u64 = self.env().get_block_time();\n\n // Multiple lock check\n if self.balances.get(&caller).is_some() {\n self.env.revert(Error::CannotLockTwice)\n }\n\n // Update state, emit event\n self.balances.set(&caller, amount);\n self.lock_expiration_map\n .set(&caller, current_block_time + self.lock_duration());\n self.env()\n .emit_event(Deposit {\n address: caller,\n amount\n });\n}\n")),(0,a.kt)("p",null,"If you try to send tokens to a non-payable function, the transaction will be automatically rejected."),(0,a.kt)("h2",{id:"non-reentrant"},"Non Reentrant"),(0,a.kt)("p",null,"Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds. "),(0,a.kt)("p",null,"To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts. "),(0,a.kt)("p",null,"They can also use reentrancy guards to block recursive calls to sensitive functions."),(0,a.kt)("p",null,"In Odra you can just apply the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(non_reentrant)]")," attribute to your function."),(0,a.kt)("h3",{id:"example-1"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\npub struct NonReentrantCounter {\n counter: Var<u32>\n}\n\n#[odra::module]\nimpl NonReentrantCounter {\n #[odra(non_reentrant)]\n pub fn count_ref_recursive(&mut self, n: u32) {\n if n > 0 {\n self.count();\n ReentrancyMockRef::new(self.env(), self.env().self_address()).count_ref_recursive(n - 1);\n }\n }\n}\n\nimpl NonReentrantCounter {\n fn count(&mut self) {\n let c = self.counter.get_or_default();\n self.counter.set(c + 1);\n }\n}\n\n#[cfg(test)]\nmod test {\n use super::*;\n use odra::{host::{Deployer, NoArgs}, ExecutionError};\n\n #[test]\n fn ref_recursion_not_allowed() {\n let test_env = odra_test::env();\n let mut contract = NonReentrantCounterHostRef::deploy(&test_env, NoArgs);\n\n let result = contract.count_ref_recursive(11);\n assert_eq!(result, ExecutionError::ReentrantCall.into());\n }\n}\n")),(0,a.kt)("h2",{id:"mixing-attributes"},"Mixing attributes"),(0,a.kt)("p",null,"A function can accept more than one attribute. The only exclusion is a constructor cannot be payable.\nTo apply multiple attributes, you can write:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable, non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,a.kt)("p",null,"or "),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra(payable)]\n#[odra(non_reentrant)]\nfn deposit() {\n // your logic...\n}\n")),(0,a.kt)("p",null,"In both cases attributes order does not matter."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/bd4cf5c0.f12ece2e.js b/docs/assets/js/bd4cf5c0.f12ece2e.js new file mode 100644 index 000000000..2d91249d0 --- /dev/null +++ b/docs/assets/js/bd4cf5c0.f12ece2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3241],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),c=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||s;return a?n.createElement(h,o(o({ref:t},p),{},{components:a})):n.createElement(h,o({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,o=new Array(s);o[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var c=2;c<s;c++)o[c]=a[c];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},37493:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const s={sidebar_position:3},o="Casper",i={unversionedId:"backends/casper",id:"version-0.2.0/backends/casper",title:"Casper",description:"The Casper backend allows you to compile your contracts into WASM files which can be deployed",source:"@site/versioned_docs/version-0.2.0/backends/03-casper.md",sourceDirName:"backends",slug:"/backends/casper",permalink:"/docs/0.2.0/backends/casper",draft:!1,tags:[],version:"0.2.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"MockVM",permalink:"/docs/0.2.0/backends/mock-vm"},next:{title:"Examples",permalink:"/docs/0.2.0/category/examples"}},l={},c=[{value:"Types",id:"types",level:2},{value:"Contract Env",id:"contract-env",level:2},{value:"Events",id:"events",level:3},{value:"Payable",id:"payable",level:3},{value:"Revert",id:"revert",level:3},{value:"Context",id:"context",level:3},{value:"Test Env",id:"test-env",level:2},{value:"Usage",id:"usage",level:2},{value:"Execution",id:"execution",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"casper"},"Casper"),(0,r.kt)("p",null,"The Casper backend allows you to compile your contracts into WASM files which can be deployed\nonto ",(0,r.kt)("a",{parentName:"p",href:"https://casper.network/"},"Casper Blockchain"),"\nand lets you to easily run them against ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-execution-engine"},"Casper's Execution Engine")," locally."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"A struct to be written into the storage must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait OdraType: \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("p",null,"The other exposed types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CallArgs")," - wraps around casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},(0,r.kt)("inlineCode",{parentName:"a"},"RuntimeArgs")),";"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," - U512 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"BlockTime")," - u64 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Address")," - an enum that encapsulates casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/account/struct.AccountHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"AccountHash"))," and ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/struct.ContractPackageHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ContractPackageHash")))),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances."),(0,r.kt)("h3",{id:"events"},"Events"),(0,r.kt)("p",null,"An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've\nalready learned from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.2.0/basics/events"},"events article"),", in Odra you emit an event, similarly, you would do it in ",(0,r.kt)("a",{parentName:"p",href:"https://docs.soliditylang.org/en/v0.8.15/contracts.html#example"},"Solidity"),"."),(0,r.kt)("p",null,"Under the hood, Odra creates two ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/struct.URef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"URef"),"s")," in the global state:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events")," - a dictionary that stores events' data."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_length")," - the evens count.")),(0,r.kt)("p",null,"So, ",(0,r.kt)("inlineCode",{parentName:"p"},"Events")," are nothing different from any other data stored by a contract."),(0,r.kt)("p",null,"A struct to be an event must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"SerializableEvent")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait SerializableEvent: \n odra_types::event::OdraEvent + \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("h3",{id:"payable"},"Payable"),(0,r.kt)("p",null,"The first Odra idiom is a ",(0,r.kt)("inlineCode",{parentName:"p"},"Contract Main Purse"),". It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper ",(0,r.kt)("inlineCode",{parentName:"p"},"URef")," and a purse are created and stored under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse")," key."),(0,r.kt)("p",null,"Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo Purse"),". It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse."),(0,r.kt)("p",null,"Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable.\nIf under the way something goes wrong with the transfer, the contract reverts."),(0,r.kt)("p",null,"The transferred amount can be read inside the contract by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Odra expects the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," runtime argument to be attached to a contract call.")),(0,r.kt)("h3",{id:"revert"},"Revert"),(0,r.kt)("p",null,"In Casper, we can stop the execution pretty straightforwardly - call the ",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::revert()"),".\nOdra adds an extra abstraction layer - in a contract ",(0,r.kt)("inlineCode",{parentName:"p"},"ExecutionError"),"s are defined, which ultimately are transformed into Casper's ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/enum.ApiError.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ApiError::User")),"."),(0,r.kt)("h3",{id:"context"},"Context"),(0,r.kt)("p",null,"Casper equips developers with very low-level tooling, which can be cumbersome for newcomers.\nIf you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_address()")," function takes the first element of the callstack (",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-contract/latest/casper_contract/contract_api/runtime/fn.get_call_stack.html"},(0,r.kt)("inlineCode",{parentName:"a"},"runtime::get_call_stack()")),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::caller()")," function takes the second element of the call stack (",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::get_call_stack()"),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"As mentioned in the ","[Payable]"," section, to store CSPR, each contract creates its purse. To read the contract balance, you call ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_balance"),", which checks the balance of the purse stored under ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse"),"."),(0,r.kt)("h2",{id:"test-env"},"Test Env"),(0,r.kt)("p",null,"Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Casper Execution Engine"),"."),(0,r.kt)("p",null,"In your test, you can freely switch execution context by setting as a caller (",(0,r.kt)("inlineCode",{parentName:"p"},"test_env::set_caller()"),") one of the 20 predefined accounts. Each account possesses the default amount of ",(0,r.kt)("inlineCode",{parentName:"p"},"Motes")," (100_000_000_000_000_000)."),(0,r.kt)("p",null,"The Test Env internally keeps track of the current ",(0,r.kt)("inlineCode",{parentName:"p"},"block time"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"error")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"attached value"),"."),(0,r.kt)("p",null,"Each test is executed on a fresh instance of the Test Env."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Name of the Casper backend in Odra is ",(0,r.kt)("inlineCode",{parentName:"p"},"casper"),", so to run the tests against it, simply pass it as a ",(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\nparameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"If you want to just generate a wasm file, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("h2",{id:"execution"},"Execution"),(0,r.kt)("p",null,"First thing Odra does with your code, is similar to the one used in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.2.0/backends/mock-vm"},"MockVM")," -\na list of entrypoints is generated, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[IR];\n id2[IR]--\x3eid3((WASM))\n id3((WASM))--\x3eid4[(Local Casper\\nExecution Engine)]\n id3((WASM))--\x3eid5[(Casper Network)]"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/be0b2ac1.c2904d19.js b/docs/assets/js/be0b2ac1.c2904d19.js new file mode 100644 index 000000000..bac11aee9 --- /dev/null +++ b/docs/assets/js/be0b2ac1.c2904d19.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[589],{82532:e=>{e.exports=JSON.parse('{"title":"Basics","description":"Basic concepts of Odra Framework","slug":"/category/basics","permalink":"/docs/0.6.0/category/basics","navigation":{"previous":{"title":"Flipper example","permalink":"/docs/0.6.0/getting-started/flipper"},"next":{"title":"Cargo Odra","permalink":"/docs/0.6.0/basics/cargo-odra"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/beab0651.654bd829.js b/docs/assets/js/beab0651.654bd829.js new file mode 100644 index 000000000..e284d6f88 --- /dev/null +++ b/docs/assets/js/beab0651.654bd829.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7620],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?n(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,o,a=function(e,r){if(null==e)return{};var t,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},c=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return t?o.createElement(f,l(l({ref:r},c),{},{components:t})):o.createElement(f,l({ref:r},c))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,l=new Array(n);l[0]=u;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<n;p++)l[p]=t[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},25369:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var o=t(87462),a=(t(67294),t(3905));const n={sidebar_position:1},l="odra-examples",i={unversionedId:"examples/odra-examples",id:"version-0.3.1/examples/odra-examples",title:"odra-examples",description:"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.",source:"@site/versioned_docs/version-0.3.1/examples/odra-examples.md",sourceDirName:"examples",slug:"/examples/odra-examples",permalink:"/docs/0.3.1/examples/odra-examples",draft:!1,tags:[],version:"0.3.1",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Examples",permalink:"/docs/0.3.1/category/examples"},next:{title:"Using odra-modules",permalink:"/docs/0.3.1/examples/using-odra-modules"}},s={},p=[{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odra-examples"},"odra-examples"),(0,a.kt)("p",null,"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the ",(0,a.kt)("inlineCode",{parentName:"p"},"examples")," in the Odra main repository."),(0,a.kt)("p",null,'The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.'),(0,a.kt)("p",null,"Don't worry if you find learning solely by reading the code challenging. Go to the ",(0,a.kt)("a",{parentName:"p",href:"../category/tutorials/"},"Tutorial")," section, where we will review it together. We will break the code into pieces, leaving no space for further questions."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn about reusable Odra components encapsulated in ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/bee0af8b.69fdde87.js b/docs/assets/js/bee0af8b.69fdde87.js new file mode 100644 index 000000000..05482ffa7 --- /dev/null +++ b/docs/assets/js/bee0af8b.69fdde87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5662],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},95920:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},i="Odra framework",s={unversionedId:"intro",id:"version-0.3.0/intro",title:"Odra framework",description:"Odra Docs",source:"@site/versioned_docs/version-0.3.0/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/0.3.0/",draft:!1,tags:[],version:"0.3.0",sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/",image:"./docs-cover.png",description:"Odra Docs"},sidebar:"defaultSidebar",next:{title:"Getting started",permalink:"/docs/0.3.0/category/getting-started"}},c={image:r(15866).Z},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"odra-framework"},"Odra framework"),(0,o.kt)("p",null,"Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean,\npragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract\ndevelopment, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open\nsource."),(0,o.kt)("p",null,"Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains."),(0,o.kt)("p",null,"A smart contract written using Odra can be executed on all integrated systems. We can do it\nby abstracting over core concepts that all the above systems are built around. These are type system,\nstorage, entry points, execution context, and testing environment. We believe it will bring standardization\nto the development of Rust-based smart contracts and enable code reusability we have not yet seen in this\necosystem."),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.3.0/getting-started/installation"},"Installation")," and our ",(0,o.kt)("a",{parentName:"p",href:"/docs/0.3.0/getting-started/flipper"},"Flipper example"),"\nto find out how to start your new project with Odra."))}d.isMDXComponent=!0},15866:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docs-cover-b8a52fd3e2deb53e343dd3094b0727c0.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/befd1fba.955ad137.js b/docs/assets/js/befd1fba.955ad137.js new file mode 100644 index 000000000..b33a02634 --- /dev/null +++ b/docs/assets/js/befd1fba.955ad137.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1215],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?a.createElement(f,i(i({ref:t},p),{},{components:n})):a.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var l=2;l<o;l++)i[l]=n[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},98158:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:12,description:"How to deposit, withdraw and transfer"},i="Native token",s={unversionedId:"basics/native-token",id:"version-0.6.0/basics/native-token",title:"Native token",description:"How to deposit, withdraw and transfer",source:"@site/versioned_docs/version-0.6.0/basics/12-native-token.md",sourceDirName:"basics",slug:"/basics/native-token",permalink:"/docs/0.6.0/basics/native-token",draft:!1,tags:[],version:"0.6.0",sidebarPosition:12,frontMatter:{sidebar_position:12,description:"How to deposit, withdraw and transfer"},sidebar:"tutorialSidebar",previous:{title:"Modules",permalink:"/docs/0.6.0/basics/modules"},next:{title:"Advanced",permalink:"/docs/0.6.0/category/advanced"}},c={},l=[{value:"Testing",id:"testing",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"native-token"},"Native token"),(0,r.kt)("p",null,"Different blockchains come with different implementations of their native tokens. Odra wraps it all for you\nin easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit\ntheir funds and anyone can withdraw them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/native_token.rs"',title:'"examples/src/features/native_token.rs"'},"use odra::types::Balance;\nuse odra::contract_env;\n\n#[odra::module]\npub struct PublicWallet {\n}\n\n#[odra::module]\nimpl PublicWallet {\n #[odra(payable)]\n pub fn deposit(&mut self) {\n }\n\n pub fn withdraw(&mut self, amount: Balance) {\n contract_env::transfer_tokens(contract_env::caller(), amount);\n }\n}\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make\nany checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is\neven possible."),(0,r.kt)("p",{parentName:"admonition"},"To see a more reasonable example, check out ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/tlw.rs")," in the odra main repository.")),(0,r.kt)("p",null,"You can see a new macro used here: ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," - it will add all the code needed for a function to\nbe able to receive the funds. Additionally, we are using a new function from contract_env - ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_tokens"),".\nIt does exactly what you are expecting it to do - it will transfer native tokens from the contract to the\nspecified address."),(0,r.kt)("p",null,"We are also using the ",(0,r.kt)("inlineCode",{parentName:"p"},"Balance")," - an Odra type that wraps around the type that the underlying blockchain uses\nfor counting tokens."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"To be able to test how many tokens a contract (or any address) has, ",(0,r.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a function -\n",(0,r.kt)("inlineCode",{parentName:"p"},"token_balance"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/native_token.rs"',title:'"examples/src/features/native_token.rs"'},"use odra::types::Balance;\nuse odra::test_env;\nuse super::PublicWalletDeployer;\n\n#[test]\nfn test_modules() {\n let mut my_contract = PublicWalletDeployer::default();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());\n\n my_contract.with_tokens(Balance::from(100)).deposit();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));\n\n my_contract.withdraw(Balance::from(25));\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/bfc20097.940e9141.js b/docs/assets/js/bfc20097.940e9141.js new file mode 100644 index 000000000..ac6a2c5aa --- /dev/null +++ b/docs/assets/js/bfc20097.940e9141.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5897],{3905:(e,n,r)=>{r.d(n,{Zo:()=>c,kt:()=>m});var t=r(67294);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function a(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function l(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?a(Object(r),!0).forEach((function(n){o(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function s(e,n){if(null==e)return{};var r,t,o=function(e,n){if(null==e)return{};var r,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=t.createContext({}),d=function(e){var n=t.useContext(i),r=n;return e&&(r="function"==typeof e?e(n):l(l({},n),e)),r},c=function(e){var n=d(e.components);return t.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},p=t.forwardRef((function(e,n){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=d(r),m=o,f=p["".concat(i,".").concat(m)]||p[m]||u[m]||a;return r?t.createElement(f,l(l({ref:n},c),{},{components:r})):t.createElement(f,l({ref:n},c))}));function m(e,n){var r=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=p;var s={};for(var i in n)hasOwnProperty.call(n,i)&&(s[i]=n[i]);s.originalType=e,s.mdxType="string"==typeof e?e:o,l[1]=s;for(var d=2;d<a;d++)l[d]=r[d];return t.createElement.apply(null,l)}return t.createElement.apply(null,r)}p.displayName="MDXCreateElement"},93969:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var t=r(87462),o=(r(67294),r(3905));const a={sidebar_position:4},l="Access Control",s={unversionedId:"tutorials/access-control",id:"tutorials/access-control",title:"Access Control",description:"In a previous tutorial, we introduced the Ownable module, which serves the purpose of securing access to specific contract features. While it establishes a fundamental security layer, there are numerous scenarios where this level of security is insufficient,",source:"@site/docs/tutorials/access-control.md",sourceDirName:"tutorials",slug:"/tutorials/access-control",permalink:"/docs/next/tutorials/access-control",draft:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"OwnedToken",permalink:"/docs/next/tutorials/owned-token"},next:{title:"Pauseable",permalink:"/docs/next/tutorials/pauseable"}},i={},d=[{value:"Code",id:"code",level:2},{value:"Events and Errors",id:"events-and-errors",level:3},{value:"Module",id:"module",level:3}],c={toc:d};function u(e){let{components:n,...r}=e;return(0,o.kt)("wrapper",(0,t.Z)({},c,r,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"access-control"},"Access Control"),(0,o.kt)("p",null,"In a previous tutorial, we introduced the ",(0,o.kt)("a",{parentName:"p",href:"/docs/next/tutorials/ownable"},(0,o.kt)("inlineCode",{parentName:"a"},"Ownable"))," module, which serves the purpose of securing access to specific contract features. While it establishes a fundamental security layer, there are numerous scenarios where this level of security is insufficient, "),(0,o.kt)("p",null,"In this article we design and implement a more fine-grained access control layer."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"Before we start writing code, we list the functionalities of our access control layer."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"A ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," type is used across the module."),(0,o.kt)("li",{parentName:"ol"},"A ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," can be assigned to many ",(0,o.kt)("inlineCode",{parentName:"li"},"Address"),"es."),(0,o.kt)("li",{parentName:"ol"},"Each ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," may have a corresponding admin role."),(0,o.kt)("li",{parentName:"ol"},"Only an admin can grant/revoke a ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),"."),(0,o.kt)("li",{parentName:"ol"},"A ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," can be renounced."),(0,o.kt)("li",{parentName:"ol"},"A ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," cannot be renounced on someone's behalf."),(0,o.kt)("li",{parentName:"ol"},"Each action triggers an event."),(0,o.kt)("li",{parentName:"ol"},"Unauthorized access stops contract execution.")),(0,o.kt)("h3",{id:"events-and-errors"},"Events and Errors"),(0,o.kt)("p",null,"There are three actions that can be performed concerning a ",(0,o.kt)("inlineCode",{parentName:"p"},"Role"),": granting, revoking, and altering the admin role. Let us establish standard Odra events for each of these actions."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=events.rs showLineNumbers",title:"events.rs",showLineNumbers:!0},"use odra::casper_event_standard::{self, Event};\nuse odra::casper_types::Address;\nuse super::access_control::Role;\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct RoleGranted {\n pub role: Role,\n pub address: Address,\n pub sender: Address\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct RoleRevoked {\n pub role: Role,\n pub address: Address,\n pub sender: Address\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct RoleAdminChanged {\n pub role: Role,\n pub previous_admin_role: Role,\n pub new_admin_role: Role\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L5-L17")," - to describe the grant or revoke actions, our events specify the ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),", and ",(0,o.kt)("inlineCode",{parentName:"li"},"Address"),"es indicating who receives or loses access and who provides or withdraws it."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L19-L24")," - the event describing the admin role change, requires the subject ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),", the previous and the current admin ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),".")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=errors.rs",title:"errors.rs"},"use odra::OdraError;\n\n#[derive(OdraError)]\npub enum Error {\n MissingRole = 20_000,\n RoleRenounceForAnotherAddress = 20_001,\n}\n")),(0,o.kt)("p",null,"Errors definition is straightforward - there are only two invalid states: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"An action is triggered by an unauthorized actor."),(0,o.kt)("li",{parentName:"ol"},"The caller is attempting to resign the Role on someone's behalf. ")),(0,o.kt)("h3",{id:"module"},"Module"),(0,o.kt)("p",null,"Now, we are stepping into the most interesting part: the module definition and implementation."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=access_control.rs showLineNumbers",title:"access_control.rs",showLineNumbers:!0},"use super::events::*;\nuse crate::access::errors::Error;\nuse odra::prelude::*;\nuse odra::{module::Module, Address, Mapping};\n\npub type Role = [u8; 32];\n\npub const DEFAULT_ADMIN_ROLE: Role = [0u8; 32];\n\n#[odra::module(events = [RoleAdminChanged, RoleGranted, RoleRevoked])]\npub struct AccessControl {\n roles: Mapping<(Role, Address), bool>,\n role_admin: Mapping<Role, Role>\n}\n\n#[odra::module]\nimpl AccessControl {\n pub1 fn has_role(&self, role: &Role, address: &Address) -> bool {\n self.roles.get_instance(role).get_or_default(address)\n }\n\n pub fn get_role_admin(&self, role: &Role) -> Role {\n let admin_role = self.role_admin.get(role);\n if let Some(admin) = admin_role {\n admin\n } else {\n DEFAULT_ADMIN_ROLE\n }\n }\n\n pub fn grant_role(&mut self, role: &Role, address: &Address) {\n self.check_role(&self.get_role_admin(role), &contract_env::caller());\n self.unchecked_grant_role(role, address);\n }\n\n pub fn revoke_role(&mut self, role: &Role, address: &Address) {\n self.check_role(&self.get_role_admin(role), &contract_env::caller());\n self.unchecked_revoke_role(role, address);\n }\n\n pub fn renounce_role(&mut self, role: &Role, address: &Address) {\n if address != &contract_env::caller() {\n self.env().revert(Error::RoleRenounceForAnotherAddress);\n }\n self.unchecked_revoke_role(role, address);\n }\n}\n\nimpl AccessControl {\n pub fn check_role(&self, role: &Role, address: &Address) {\n if !self.has_role(role, address) {\n self.env().revert(Error::MissingRole);\n }\n }\n\n pub fn set_admin_role(&mut self, role: &Role, admin_role: &Role) {\n let previous_admin_role = self.get_role_admin(role);\n self.role_admin.set(role, *admin_role);\n self.env().emit_event(RoleAdminChanged {\n role: *role,\n previous_admin_role,\n new_admin_role: *admin_role\n });\n }\n\n pub fn unchecked_grant_role(&mut self, role: &Role, address: &Address) {\n if !self.has_role(role, address) {\n self.roles.get_instance(role).set(address, true);\n self.env().emit_event(RoleGranted {\n role: *role,\n address: *address,\n sender: self.env().caller()\n });\n }\n }\n\n pub fn unchecked_revoke_role(&mut self, role: &Role, address: &Address) {\n if self.has_role(role, address) {\n self.roles.get_instance(role).set(address, false);\n self.env().emit_event(RoleRevoked {\n role: *role,\n address: *address,\n sender: self.env().caller()\n });\n }\n }\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L6")," - Firstly, we need the ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," type. It is simply an alias for a 32-byte array."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L8")," - The default role is an array filled with zeros."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L13")," - The storage consists of two mappings:")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"roles")," - a nested mapping that stores information about whether a certain Role is granted to a given ",(0,o.kt)("inlineCode",{parentName:"li"},"Address"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"role_admin")," - each ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," can have a single admin ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),".")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L18-L20")," - This is a simple check to determine if a ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," has been granted to a given ",(0,o.kt)("inlineCode",{parentName:"li"},"Address"),". It is an exposed entry point and an important building block widely used throughout the entire module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L49")," - This is a non-exported block containing helper functions."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L54")," - The ",(0,o.kt)("inlineCode",{parentName:"li"},"check_role()")," function serves as a guard function. Before a ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," is granted or revoked, we must ensure that the caller is allowed to do so. For this purpose, the function reads the roles mapping. If the role has not been granted to the address, the contract reverts with ",(0,o.kt)("inlineCode",{parentName:"li"},"Error::MissingRole"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L56-L64")," - The ",(0,o.kt)("inlineCode",{parentName:"li"},"set_admin_role()")," function simply updates the role_admin mapping and emits the ",(0,o.kt)("inlineCode",{parentName:"li"},"RoleAdminChanged")," event."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L66-L86")," - The ",(0,o.kt)("inlineCode",{parentName:"li"},"unchecked_grant_role()")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"unchecked_revoke_role()")," functions are mirror functions that update the roles mapping and post ",(0,o.kt)("inlineCode",{parentName:"li"},"RoleGranted")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"RoleRevoked")," events. If the role is already granted, ",(0,o.kt)("inlineCode",{parentName:"li"},"unchecked_grant_role()")," has no effect (the opposite check is made in the case of revoking a role)."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L22-L29")," - The ",(0,o.kt)("inlineCode",{parentName:"li"},"get_role_admin()")," entry point reads the role_admin. If there is no admin role for a given role, it returns the default role."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L31-L46")," - This is a combination of ",(0,o.kt)("inlineCode",{parentName:"li"},"check_role()")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"unchecked_*_role()"),". Entry points fail on unauthorized access.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/bfc8213d.3a79c799.js b/docs/assets/js/bfc8213d.3a79c799.js new file mode 100644 index 000000000..480b3bb99 --- /dev/null +++ b/docs/assets/js/bfc8213d.3a79c799.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9309],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(a),g=n,m=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return a?r.createElement(m,l(l({ref:t},p),{},{components:a})):r.createElement(m,l({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var c=2;c<o;c++)l[c]=a[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,a)}d.displayName="MDXCreateElement"},93853:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=a(87462),n=(a(67294),a(3905));const o={sidebar_position:1},l="Installation",i={unversionedId:"getting-started/installation",id:"version-0.5.0/getting-started/installation",title:"Installation",description:"Hello fellow Odra user! This page will guide you through the installation process.",source:"@site/versioned_docs/version-0.5.0/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/0.5.0/getting-started/installation",draft:!1,tags:[],version:"0.5.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Getting started",permalink:"/docs/0.5.0/category/getting-started"},next:{title:"Flipper example",permalink:"/docs/0.5.0/getting-started/flipper"}},s={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Cargo Odra",id:"installing-cargo-odra",level:2},{value:"Creating a new Odra project",id:"creating-a-new-odra-project",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"installation"},"Installation"),(0,n.kt)("p",null,"Hello fellow Odra user! This page will guide you through the installation process."),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("p",null,"To start working with Odra, you need to have the following installed on your machine:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Rust toolchain installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://rustup.rs/"},"rustup.rs"),")"),(0,n.kt)("li",{parentName:"ul"},"wasmstrip tool installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/WebAssembly/wabt"},"wabt"),")")),(0,n.kt)("p",null,"We do not provide exact commands for installing these tools, as they are different for different operating systems.\nPlease refer to the documentation of the tools themselves."),(0,n.kt)("p",null,"With Rust toolchain ready, you can add a new target:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"rustup target add wasm32-unknown-unknown\n")),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("inlineCode",{parentName:"p"},"wasm32-unknown-uknown")," is a target that will be used by Odra to compile your smart contracts to WASM files.")),(0,n.kt)("h2",{id:"installing-cargo-odra"},"Installing Cargo Odra"),(0,n.kt)("p",null,"Cargo Odra is a helpful tool that will help you to build and test your smart contracts.\nIt is not required to use Odra, but the documentation will assume that you have it installed."),(0,n.kt)("p",null,"To install it, simply execute the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo install cargo-odra\n")),(0,n.kt)("p",null,"To check if it was installed correctly and see available commands, type:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra --help\n")),(0,n.kt)("p",null,"If everything went fine, we can proceed to the next step."),(0,n.kt)("h2",{id:"creating-a-new-odra-project"},"Creating a new Odra project"),(0,n.kt)("p",null,"To create a new project, simply execute:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project && cd my_project\n")),(0,n.kt)("p",null,'This will create a new folder called "my_project" and initialize Odra there. Cargo Odra\nwill create a sample contract for you in src directory. You can run the tests of this contract\nby executing:'),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,n.kt)("p",null,"This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Congratulations!")," Now you are ready to create contracts using Odra framework! If you had any problems during\nthe installation process, feel free to ask for help on our ",(0,n.kt)("a",{parentName:"p",href:"https://discord.com/invite/Mm5ABc9P8k"},"Discord"),"."),(0,n.kt)("h2",{id:"whats-next"},"What's next?"),(0,n.kt)("p",null,"If you want to see the code that you just tested, continue to the description of ",(0,n.kt)("a",{parentName:"p",href:"flipper"},"Flipper example"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c10f3592.176c977b.js b/docs/assets/js/c10f3592.176c977b.js new file mode 100644 index 000000000..c70be081f --- /dev/null +++ b/docs/assets/js/c10f3592.176c977b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8966],{8968:e=>{e.exports=JSON.parse('{"title":"Backends","description":"Backends","slug":"/category/backends","permalink":"/docs/category/backends","navigation":{"previous":{"title":"Signatures","permalink":"/docs/advanced/signatures"},"next":{"title":"What is a backend?","permalink":"/docs/backends/what-is-a-backend"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/c13d152b.e2564cc1.js b/docs/assets/js/c13d152b.e2564cc1.js new file mode 100644 index 000000000..292d4dd80 --- /dev/null +++ b/docs/assets/js/c13d152b.e2564cc1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3668],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?a.createElement(f,i(i({ref:t},p),{},{components:n})):a.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var l=2;l<o;l++)i[l]=n[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},62260:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:12,description:"How to deposit, withdraw and transfer"},i="Native token",s={unversionedId:"basics/native-token",id:"version-0.5.0/basics/native-token",title:"Native token",description:"How to deposit, withdraw and transfer",source:"@site/versioned_docs/version-0.5.0/basics/12-native-token.md",sourceDirName:"basics",slug:"/basics/native-token",permalink:"/docs/0.5.0/basics/native-token",draft:!1,tags:[],version:"0.5.0",sidebarPosition:12,frontMatter:{sidebar_position:12,description:"How to deposit, withdraw and transfer"},sidebar:"tutorialSidebar",previous:{title:"Modules",permalink:"/docs/0.5.0/basics/modules"},next:{title:"Advanced",permalink:"/docs/0.5.0/category/advanced"}},c={},l=[{value:"Testing",id:"testing",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"native-token"},"Native token"),(0,r.kt)("p",null,"Different blockchains come with different implementations of their native tokens. Odra wraps it all for you\nin easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit\ntheir funds and anyone can withdraw them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/native_token.rs"',title:'"examples/src/features/native_token.rs"'},"use odra::types::Balance;\nuse odra::contract_env;\n\n#[odra::module]\npub struct PublicWallet {\n}\n\n#[odra::module]\nimpl PublicWallet {\n #[odra(payable)]\n pub fn deposit(&mut self) {\n }\n\n pub fn withdraw(&mut self, amount: Balance) {\n contract_env::transfer_tokens(contract_env::caller(), amount);\n }\n}\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make\nany checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is\neven possible."),(0,r.kt)("p",{parentName:"admonition"},"To see a more reasonable example, check out ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/tlw.rs")," in the odra main repository.")),(0,r.kt)("p",null,"You can see a new macro used here: ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," - it will add all the code needed for a function to\nbe able to receive the funds. Additionally, we are using a new function from contract_env - ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_tokens"),".\nIt does exactly what you are expecting it to do - it will transfer native tokens from the contract to the\nspecified address."),(0,r.kt)("p",null,"We are also using the ",(0,r.kt)("inlineCode",{parentName:"p"},"Balance")," - an Odra type that wraps around the type that the underlying blockchain uses\nfor counting tokens."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"To be able to test how many tokens a contract (or any address) has, ",(0,r.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a function -\n",(0,r.kt)("inlineCode",{parentName:"p"},"token_balance"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/native_token.rs"',title:'"examples/src/features/native_token.rs"'},"use odra::types::Balance;\nuse odra::test_env;\nuse super::PublicWalletDeployer;\n\n#[test]\nfn test_modules() {\n let mut my_contract = PublicWalletDeployer::default();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());\n\n my_contract.with_tokens(Balance::from(100)).deposit();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));\n\n my_contract.withdraw(Balance::from(25));\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c1418166.799af3f0.js b/docs/assets/js/c1418166.799af3f0.js new file mode 100644 index 000000000..cf5ded316 --- /dev/null +++ b/docs/assets/js/c1418166.799af3f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7978],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=l(n),f=a,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||o;return n?r.createElement(m,s(s({ref:t},p),{},{components:n})):r.createElement(m,s({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var l=2;l<o;l++)s[l]=n[l];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},62393:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:12,description:"How to deposit, withdraw and transfer"},s="Native token",i={unversionedId:"basics/native-token",id:"basics/native-token",title:"Native token",description:"How to deposit, withdraw and transfer",source:"@site/docs/basics/12-native-token.md",sourceDirName:"basics",slug:"/basics/native-token",permalink:"/docs/next/basics/native-token",draft:!1,tags:[],version:"current",sidebarPosition:12,frontMatter:{sidebar_position:12,description:"How to deposit, withdraw and transfer"},sidebar:"tutorialSidebar",previous:{title:"Modules",permalink:"/docs/next/basics/modules"},next:{title:"Advanced",permalink:"/docs/next/category/advanced"}},c={},l=[{value:"Testing",id:"testing",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"native-token"},"Native token"),(0,a.kt)("p",null,"Different blockchains come with different implementations of their native tokens. Odra wraps it all for you\nin easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit\ntheir funds and anyone can withdraw them:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/native_token.rs"',title:'"examples/src/features/native_token.rs"'},"use odra::prelude::*;\nuse odra::{casper_types::U512, module::Module};\n\n#[odra::module]\npub struct PublicWallet;\n\n#[odra::module]\nimpl PublicWallet {\n #[odra(payable)]\n pub fn deposit(&mut self) {}\n\n pub fn withdraw(&mut self, amount: &U512) {\n self.env().transfer_tokens(&self.env().caller(), amount);\n }\n}\n")),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make\nany checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is\neven possible."),(0,a.kt)("p",{parentName:"admonition"},"To see a more reasonable example, check out ",(0,a.kt)("inlineCode",{parentName:"p"},"examples/src/contracts/tlw.rs")," in the odra main repository.")),(0,a.kt)("p",null,"You can see a new macro used here: ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," - it will add all the code needed for a function to\nbe able to receive the funds. Additionally, we are using a new function from ",(0,a.kt)("inlineCode",{parentName:"p"},"ContractEnv::transfer_tokens()"),".\nIt does exactly what you are expecting it to do - it transfers native tokens from the contract to the\nspecified address."),(0,a.kt)("h2",{id:"testing"},"Testing"),(0,a.kt)("p",null,"To be able to test how many tokens a contract (or any address) has, ",(0,a.kt)("inlineCode",{parentName:"p"},"HostEnv")," comes with a function -\n",(0,a.kt)("inlineCode",{parentName:"p"},"balance_of"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/native_token.rs"',title:'"examples/src/features/native_token.rs"'},"use super::PublicWalletHostRef;\nuse odra::{casper_types::U512, host::{Deployer, NoArgs}};\n\n#[test]\nfn test_modules() {\n let test_env = odra_test::env();\n let mut my_contract = PublicWalletHostRef::deploy(&test_env, NoArgs);\n assert_eq!(test_env.balance_of(my_contract.address()), U512::zero());\n\n my_contract.with_tokens(U512::from(100)).deposit();\n assert_eq!(test_env.balance_of(my_contract.address()), U512::from(100));\n\n my_contract.withdraw(U512::from(25));\n assert_eq!(test_env.balance_of(my_contract.address()), U512::from(75));\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c1ae59bd.5624c97f.js b/docs/assets/js/c1ae59bd.5624c97f.js new file mode 100644 index 000000000..825403a34 --- /dev/null +++ b/docs/assets/js/c1ae59bd.5624c97f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7437],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(n),g=a,m=d["".concat(l,".").concat(g)]||d[g]||u[g]||i;return n?r.createElement(m,o(o({ref:t},p),{},{components:n})):r.createElement(m,o({ref:t},p))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var c=2;c<i;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},64970:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const i={slug:"Nysa",title:"Nysa",authors:["kpob"],image:"./twitter-card.png"},o=void 0,s={permalink:"/blog/Nysa",source:"@site/blog/2023-08-18-nysa/index.md",title:"Nysa",description:'The Oder River, known as "Odra" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wroc\u0142aw, Szczecin, and Gda\u0144sk, to international waterways. The Oder also plays a significant role in the region\'s ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.',date:"2023-08-18T00:00:00.000Z",formattedDate:"August 18, 2023",tags:[],readingTime:8.47,hasTruncateMarker:!0,authors:[{name:"Krzysztof Pobiar\u017cyn",title:"Lead Developer",url:"https://github.com/kpob",key:"kpob"}],frontMatter:{slug:"Nysa",title:"Nysa",authors:["kpob"],image:"./twitter-card.png"},nextItem:{title:"It's all about the community!",permalink:"/blog/its-all-about-the-community"}},l={image:n(46180).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,'The Oder River, known as "Odra" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wroc\u0142aw, Szczecin, and Gda\u0144sk, to international waterways. The Oder also plays a significant role in the region\'s ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.'),(0,a.kt)("p",null,"The Nysa K\u0142odzka is a significant river in Poland, flowing through the country's southwestern part. It travels approximately 188 kilometers, originating in the Czech Republic and merging with the Oder River in Poland. The river passes through picturesque landscapes, including the K\u0142odzko Valley, and plays a crucial role in local ecosystems. Its waters are harnessed for various purposes, such as hydroelectric power generation and irrigation."),(0,a.kt)("p",null,"Oh, wait, shouldn't it be a tech blog?"),(0,a.kt)("p",null,"This is a valid question, we will get back to it in a moment."))}u.isMDXComponent=!0},46180:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/twitter-card-941b7cfa84d4da7dd4848d3556845b53.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/c24519ee.ae644b8f.js b/docs/assets/js/c24519ee.ae644b8f.js new file mode 100644 index 000000000..a7e6f9244 --- /dev/null +++ b/docs/assets/js/c24519ee.ae644b8f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7541],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=d(t),m=r,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},c),{},{components:t})):a.createElement(f,l({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}p.displayName="MDXCreateElement"},52402:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={},l="Delegate",i={unversionedId:"advanced/delegate",id:"version-0.4.0/advanced/delegate",title:"Delegate",description:"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.",source:"@site/versioned_docs/version-0.4.0/advanced/02-delegate.md",sourceDirName:"advanced",slug:"/advanced/delegate",permalink:"/docs/0.4.0/advanced/delegate",draft:!1,tags:[],version:"0.4.0",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Module Composer",permalink:"/docs/0.4.0/advanced/composer"},next:{title:"Advanced Storage Concepts",permalink:"/docs/0.4.0/advanced/advanced-storage"}},s={},d=[{value:"Overview",id:"overview",level:2},{value:"Code Examples",id:"code-examples",level:2}],c={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"delegate"},"Delegate"),(0,r.kt)("p",null,"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module."),(0,r.kt)("p",null,"The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"To utilize the delegate feature in your contract, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro, your parent module remains clean and easy to understand."),(0,r.kt)("p",null,"You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself."),(0,r.kt)("h2",{id:"code-examples"},"Code Examples"),(0,r.kt)("p",null,"Consider the following basic example for better understanding:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);\n pub fn approve(&mut self, spender: Address, amount: U256);\n pub fn name(&self) -> String;\n pub fn symbol(&self) -> String;\n pub fn decimals(&self) -> u8;\n pub fn total_supply(&self) -> U256;\n pub fn balance_of(&self, owner: Address) -> U256;\n pub fn allowance(&self, owner: Address, spender: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n pub fn change_ownership(&mut self, new_owner: Address);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedToken")," contract includes two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),". We delegate various functions from both modules using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro. As a result, the contract retains its succinctness without compromising on functionality."),(0,r.kt)("p",null,"The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities."),(0,r.kt)("p",null,"Let's take a look at another example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};\n\n#[odra::module]\npub struct DeFiPlatform {\n ownable: Ownable,\n erc20: Erc20,\n exchange: Exchange\n}\n\n#[odra::module]\nimpl DeFiPlatform {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n self.exchange.init(exchange_rate);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn balance_of(&self, owner: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n }\n\n to self.exchange {\n pub fn swap(&mut self, sender: Address, recipient: Address);\n pub fn set_exchange_rate(&mut self, new_rate: u64);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"In this ",(0,r.kt)("inlineCode",{parentName:"p"},"DeFiPlatform")," contract, we include ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"Exchange")," modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure."),(0,r.kt)("p",null,"Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c3fd70b6.ff508e75.js b/docs/assets/js/c3fd70b6.ff508e75.js new file mode 100644 index 000000000..9148abf99 --- /dev/null +++ b/docs/assets/js/c3fd70b6.ff508e75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8459],{28939:t=>{t.exports=JSON.parse('{"title":"Getting started","description":"5 minutes to learn the most important Odra concepts.","slug":"/category/getting-started","permalink":"/docs/next/category/getting-started","navigation":{"previous":{"title":"Odra framework","permalink":"/docs/next/"},"next":{"title":"Installation","permalink":"/docs/next/getting-started/installation"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/c43892d3.951d8759.js b/docs/assets/js/c43892d3.951d8759.js new file mode 100644 index 000000000..57323ec5d --- /dev/null +++ b/docs/assets/js/c43892d3.951d8759.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9138],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),h=a,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(k,i(i({ref:t},d),{},{components:n})):r.createElement(k,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},64917:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},i="MockVM",c={unversionedId:"backends/mock-vm",id:"version-0.3.0/backends/mock-vm",title:"MockVM",description:"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing",source:"@site/versioned_docs/version-0.3.0/backends/02-mock-vm.md",sourceDirName:"backends",slug:"/backends/mock-vm",permalink:"/docs/0.3.0/backends/mock-vm",draft:!1,tags:[],version:"0.3.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"What is a backend?",permalink:"/docs/0.3.0/backends/what-is-a-backend"},next:{title:"Casper",permalink:"/docs/0.3.0/backends/casper"}},s={},l=[{value:"Usage",id:"usage",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Execution",id:"execution",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mockvm"},"MockVM"),(0,a.kt)("p",null,"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing\nthe code written in Odra without compiling the contract to the target architecture and spinning up the\nblockchain."),(0,a.kt)("p",null,"Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler."),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The MockVM is the default backend for Odra framework, so each time you run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,a.kt)("p",null,"You are running your code against it."),(0,a.kt)("h2",{id:"architecture"},"Architecture"),(0,a.kt)("p",null,"MockVM consists of two main parts: the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," and the ",(0,a.kt)("inlineCode",{parentName:"p"},"State"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," is just a list of contracts deployed onto the MockVM, identified by an ",(0,a.kt)("inlineCode",{parentName:"p"},"Address"),".\nEach time we call the contract, we call its instance stored in the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register"),"."),(0,a.kt)("p",null,"Contracts and Test Env functions can modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"State")," of the MockVM."),(0,a.kt)("p",null,'Contrary to the "real" backend, which holds the whole history of the blockchain,\nthe MockVM ',(0,a.kt)("inlineCode",{parentName:"p"},"State")," holds only the current state of the MockVM.\nThanks to this and the fact that we do not need the blockchain itself,\nMockVM starts instantly and runs the tests in the native speed."),(0,a.kt)("h2",{id:"execution"},"Execution"),(0,a.kt)("p",null,"When the MockVM backend is enabled, the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro is responsible for converting\nyour ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions into a list of Entrypoints, which are put into a Contract Container.\nWhen the contract is deployed, its Container registered into a Registry under an address.\nDuring the contract call, MockVM finds an Entrypoint and executes the code."),(0,a.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[Contract Container];\n id2[Contract Container]--\x3eid3((Contract Registry))\n id3((Contract Registry))--\x3eid4[(MockVM Execution)]"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c4f5d8e4.127ee1e6.js b/docs/assets/js/c4f5d8e4.127ee1e6.js new file mode 100644 index 000000000..d298e4bda --- /dev/null +++ b/docs/assets/js/c4f5d8e4.127ee1e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4195],{9722:(e,a,t)=>{t.d(a,{Z:()=>c});var l,r=t(67294);function n(){return n=Object.assign?Object.assign.bind():function(e){for(var a=1;a<arguments.length;a++){var t=arguments[a];for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&(e[l]=t[l])}return e},n.apply(this,arguments)}const c=e=>{let{title:a,titleId:t,...c}=e;return r.createElement("svg",n({xmlns:"http://www.w3.org/2000/svg",width:1088,height:687.962,viewBox:"0 0 1088 687.962","aria-labelledby":t},c),void 0===a?r.createElement("title",{id:t},"Easy to Use"):a?r.createElement("title",{id:t},a):null,l||(l=r.createElement("g",{"data-name":"Group 12"},r.createElement("g",{"data-name":"Group 11"},r.createElement("path",{"data-name":"Path 83",d:"M961.81 454.442c-5.27 45.15-16.22 81.4-31.25 110.31-20 38.52-54.21 54.04-84.77 70.28a193.275 193.275 0 0 1-27.46 11.94c-55.61 19.3-117.85 14.18-166.74 3.99a657.282 657.282 0 0 0-104.09-13.16q-14.97-.675-29.97-.67c-15.42.02-293.07 5.29-360.67-131.57-16.69-33.76-28.13-75-32.24-125.27-11.63-142.12 52.29-235.46 134.74-296.47 155.97-115.41 369.76-110.57 523.43 7.88 102.36 78.9 198.2 198.31 179.02 362.74Z",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 84",d:"M930.56 564.752c-20 38.52-47.21 64.04-77.77 80.28a193.272 193.272 0 0 1-27.46 11.94c-55.61 19.3-117.85 14.18-166.74 3.99a657.3 657.3 0 0 0-104.09-13.16q-14.97-.675-29.97-.67-23.13.03-46.25 1.72c-100.17 7.36-253.82-6.43-321.42-143.29L326 177.962l62.95 161.619 20.09 51.59 55.37-75.98L493 275.962l130.2 149.27 36.8-81.27 254.78 207.919 14.21 11.59Z",fill:"#f2f2f2"}),r.createElement("path",{"data-name":"Path 85",d:"m302 282.962 26-57 36 83-31-60Z",opacity:.1}),r.createElement("path",{"data-name":"Path 86",d:"M554.5 647.802q-14.97-.675-29.97-.67l-115.49-255.96Z",opacity:.1}),r.createElement("path",{"data-name":"Path 87",d:"M464.411 315.191 493 292.962l130 150-132-128Z",opacity:.1}),r.createElement("path",{"data-name":"Path 88",d:"M852.79 645.032a193.265 193.265 0 0 1-27.46 11.94L623.2 425.232Z",opacity:.1}),r.createElement("circle",{"data-name":"Ellipse 11",cx:3,cy:3,r:3,transform:"translate(479 98.962)",fill:"#f2f2f2"}),r.createElement("circle",{"data-name":"Ellipse 12",cx:3,cy:3,r:3,transform:"translate(396 201.962)",fill:"#f2f2f2"}),r.createElement("circle",{"data-name":"Ellipse 13",cx:2,cy:2,r:2,transform:"translate(600 220.962)",fill:"#f2f2f2"}),r.createElement("circle",{"data-name":"Ellipse 14",cx:2,cy:2,r:2,transform:"translate(180 265.962)",fill:"#f2f2f2"}),r.createElement("circle",{"data-name":"Ellipse 15",cx:2,cy:2,r:2,transform:"translate(612 96.962)",fill:"#f2f2f2"}),r.createElement("circle",{"data-name":"Ellipse 16",cx:2,cy:2,r:2,transform:"translate(736 192.962)",fill:"#f2f2f2"}),r.createElement("circle",{"data-name":"Ellipse 17",cx:2,cy:2,r:2,transform:"translate(858 344.962)",fill:"#f2f2f2"}),r.createElement("path",{"data-name":"Path 89",d:"M306 121.222h-2.76v-2.76h-1.48v2.76H299v1.478h2.76v2.759h1.48V122.7H306Z",fill:"#f2f2f2"}),r.createElement("path",{"data-name":"Path 90",d:"M848 424.222h-2.76v-2.76h-1.48v2.76H841v1.478h2.76v2.759h1.48V425.7H848Z",fill:"#f2f2f2"}),r.createElement("path",{"data-name":"Path 91",d:"M1088 613.962c0 16.569-243.557 74-544 74s-544-57.431-544-74 243.557 14 544 14 544-30.568 544-14Z",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 92",d:"M1088 613.962c0 16.569-243.557 74-544 74s-544-57.431-544-74 243.557 14 544 14 544-30.568 544-14Z",opacity:.1}),r.createElement("ellipse",{"data-name":"Ellipse 18",cx:544,cy:30,rx:544,ry:30,transform:"translate(0 583.962)",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 93",d:"M568 571.962c0 33.137-14.775 24-33 24s-33 9.137-33-24 33-96 33-96 33 62.863 33 96Z",fill:"#ff6584"}),r.createElement("path",{"data-name":"Path 94",d:"M550 584.641c0 15.062-6.716 10.909-15 10.909s-15 4.153-15-10.909 15-43.636 15-43.636 15 28.576 15 43.636Z",opacity:.1}),r.createElement("rect",{"data-name":"Rectangle 97",width:92,height:18,rx:9,transform:"translate(489 604.962)",fill:"#2f2e41"}),r.createElement("rect",{"data-name":"Rectangle 98",width:92,height:18,rx:9,transform:"translate(489 586.962)",fill:"#2f2e41"}),r.createElement("path",{"data-name":"Path 95",d:"M137 490.528c0 55.343 34.719 100.126 77.626 100.126",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 96",d:"M214.626 590.654c0-55.965 38.745-101.251 86.626-101.251",fill:"#6c63ff"}),r.createElement("path",{"data-name":"Path 97",d:"M165.125 495.545c0 52.57 22.14 95.109 49.5 95.109",fill:"#6c63ff"}),r.createElement("path",{"data-name":"Path 98",d:"M214.626 590.654c0-71.511 44.783-129.377 100.126-129.377",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 99",d:"M198.3 591.36s11.009-.339 14.326-2.7 16.934-5.183 17.757-1.395 16.544 18.844 4.115 18.945-28.879-1.936-32.19-3.953-4.008-10.897-4.008-10.897Z",fill:"#a8a8a8"}),r.createElement("path",{"data-name":"Path 100",d:"M234.716 604.89c-12.429.1-28.879-1.936-32.19-3.953-2.522-1.536-3.527-7.048-3.863-9.591l-.368.014s.7 8.879 4.009 10.9 19.761 4.053 32.19 3.953c3.588-.029 4.827-1.305 4.759-3.2-.498 1.142-1.867 1.855-4.537 1.877Z",opacity:.2}),r.createElement("path",{"data-name":"Path 101",d:"M721.429 527.062c0 38.029 23.857 68.8 53.341 68.8",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 102",d:"M774.769 595.863c0-38.456 26.623-69.575 59.525-69.575",fill:"#6c63ff"}),r.createElement("path",{"data-name":"Path 103",d:"M740.755 530.509c0 36.124 15.213 65.354 34.014 65.354",fill:"#6c63ff"}),r.createElement("path",{"data-name":"Path 104",d:"M774.769 595.863c0-49.139 30.773-88.9 68.8-88.9",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 105",d:"M763.548 596.348s7.565-.233 9.844-1.856 11.636-3.562 12.2-.958 11.368 12.949 2.828 13.018-19.844-1.33-22.119-2.716-2.753-7.488-2.753-7.488Z",fill:"#a8a8a8"}),r.createElement("path",{"data-name":"Path 106",d:"M788.574 605.645c-8.54.069-19.844-1.33-22.119-2.716-1.733-1.056-2.423-4.843-2.654-6.59l-.253.01s.479 6.1 2.755 7.487 13.579 2.785 22.119 2.716c2.465-.02 3.317-.9 3.27-2.2-.343.788-1.283 1.278-3.118 1.293Z",opacity:.2}),r.createElement("path",{"data-name":"Path 107",d:"M893.813 618.699s11.36-1.729 14.5-4.591 16.89-7.488 18.217-3.667 19.494 17.447 6.633 19.107-30.153 1.609-33.835-.065-5.515-10.784-5.515-10.784Z",fill:"#a8a8a8"}),r.createElement("path",{"data-name":"Path 108",d:"M933.228 628.154c-12.86 1.659-30.153 1.609-33.835-.065-2.8-1.275-4.535-6.858-5.2-9.45l-.379.061s1.833 9.109 5.516 10.783 20.975 1.725 33.835.065c3.712-.479 4.836-1.956 4.529-3.906-.375 1.246-1.703 2.156-4.466 2.512Z",opacity:.2}),r.createElement("path",{"data-name":"Path 109",d:"M614.26 617.881s9.587-1.459 12.237-3.875 14.255-6.32 15.374-3.095 16.452 14.725 5.6 16.125-25.448 1.358-28.555-.055-4.656-9.1-4.656-9.1Z",fill:"#a8a8a8"}),r.createElement("path",{"data-name":"Path 110",d:"M647.524 625.856c-10.853 1.4-25.448 1.358-28.555-.055-2.367-1.076-3.827-5.788-4.39-7.976l-.32.051s1.547 7.687 4.655 9.1 17.7 1.456 28.555.055c3.133-.4 4.081-1.651 3.822-3.3-.314 1.057-1.435 1.825-3.767 2.125Z",opacity:.2}),r.createElement("path",{"data-name":"Path 111",d:"M122.389 613.09s7.463-1.136 9.527-3.016 11.1-4.92 11.969-2.409 12.808 11.463 4.358 12.553-19.811 1.057-22.23-.043-3.624-7.085-3.624-7.085Z",fill:"#a8a8a8"}),r.createElement("path",{"data-name":"Path 112",d:"M148.285 619.302c-8.449 1.09-19.811 1.057-22.23-.043-1.842-.838-2.979-4.506-3.417-6.209l-.249.04s1.2 5.984 3.624 7.085 13.781 1.133 22.23.043c2.439-.315 3.177-1.285 2.976-2.566-.246.818-1.119 1.416-2.934 1.65Z",opacity:.2}),r.createElement("path",{"data-name":"Path 113",d:"M383.7 601.318c0 30.22-42.124 20.873-93.7 20.873s-93.074 9.347-93.074-20.873 42.118-36.793 93.694-36.793 93.08 6.573 93.08 36.793Z",opacity:.1}),r.createElement("path",{"data-name":"Path 114",d:"M383.7 593.881c0 30.22-42.124 20.873-93.7 20.873s-93.074 9.347-93.074-20.873 42.114-36.8 93.69-36.8 93.084 6.576 93.084 36.8Z",fill:"#3f3d56"})),r.createElement("path",{"data-name":"Path 40",d:"M360.175 475.732h91.791v37.153h-91.791Z",fill:"#fff",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 41",d:"M277.126 597.026a21.828 21.828 0 0 1-18.908-10.927 21.829 21.829 0 0 0 18.908 32.782h21.855v-21.855Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 42",d:"m375.451 481.607 76.514-4.782v-10.928a21.854 21.854 0 0 0-21.855-21.855h-98.347l-2.732-4.735a3.154 3.154 0 0 0-5.464 0l-2.732 4.732-2.732-4.732a3.154 3.154 0 0 0-5.464 0l-2.732 4.732-2.731-4.732a3.154 3.154 0 0 0-5.464 0l-2.732 4.735h-.071l-4.526-4.525a3.153 3.153 0 0 0-5.276 1.414l-1.5 5.577-5.674-1.521a3.154 3.154 0 0 0-3.863 3.864l1.52 5.679-5.575 1.494a3.155 3.155 0 0 0-1.416 5.278l4.526 4.526v.07l-4.735 2.731a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.732a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.731a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.727a3.154 3.154 0 0 0 0 5.464l4.735 2.736-4.735 2.732a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.732a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.731a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.732a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.731a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.731a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.735a3.154 3.154 0 0 0 0 5.464l4.732 2.732-4.732 2.728a3.154 3.154 0 0 0 0 5.464l4.732 2.732a21.854 21.854 0 0 0 21.858 21.855h131.13a21.854 21.854 0 0 0 21.855-21.855v-87.42l-76.514-4.782a11.632 11.632 0 0 1 0-23.219",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 43",d:"M408.255 618.882h32.782v-43.71h-32.782Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 44",d:"M462.893 591.563a5.438 5.438 0 0 0-.7.07c-.042-.164-.081-.329-.127-.493a5.457 5.457 0 1 0-5.4-9.372q-.181-.185-.366-.367a5.454 5.454 0 1 0-9.384-5.4c-.162-.046-.325-.084-.486-.126a5.467 5.467 0 1 0-10.788 0c-.162.042-.325.08-.486.126a5.457 5.457 0 1 0-9.384 5.4 21.843 21.843 0 1 0 36.421 21.02 5.452 5.452 0 1 0 .7-10.858",fill:"#44d860",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 45",d:"M419.183 553.317h32.782v-21.855h-32.782Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 46",d:"M462.893 545.121a2.732 2.732 0 1 0 0-5.464 2.811 2.811 0 0 0-.349.035c-.022-.082-.04-.164-.063-.246a2.733 2.733 0 0 0-1.052-5.253 2.7 2.7 0 0 0-1.648.566q-.09-.093-.184-.184a2.7 2.7 0 0 0 .553-1.633 2.732 2.732 0 0 0-5.245-1.07 10.928 10.928 0 1 0 0 21.031 2.732 2.732 0 0 0 5.245-1.07 2.7 2.7 0 0 0-.553-1.633q.093-.09.184-.184a2.7 2.7 0 0 0 1.648.566 2.732 2.732 0 0 0 1.052-5.253c.023-.081.042-.164.063-.246a2.814 2.814 0 0 0 .349.035",fill:"#44d860",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 47",d:"M320.836 479.556a2.732 2.732 0 0 1-2.732-2.732 8.2 8.2 0 0 0-16.391 0 2.732 2.732 0 0 1-5.464 0 13.66 13.66 0 0 1 27.319 0 2.732 2.732 0 0 1-2.732 2.732",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 48",d:"M364.546 618.881h65.565a21.854 21.854 0 0 0 21.855-21.855v-76.492h-65.565a21.854 21.854 0 0 0-21.855 21.855Z",fill:"#ffff50",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 49",d:"M435.596 554.41h-54.681a1.093 1.093 0 1 1 0-2.185h54.681a1.093 1.093 0 0 1 0 2.185m0 21.855h-54.681a1.093 1.093 0 1 1 0-2.186h54.681a1.093 1.093 0 0 1 0 2.186m0 21.855h-54.681a1.093 1.093 0 1 1 0-2.185h54.681a1.093 1.093 0 0 1 0 2.185m0-54.434h-54.681a1.093 1.093 0 1 1 0-2.185h54.681a1.093 1.093 0 0 1 0 2.185m0 21.652h-54.681a1.093 1.093 0 1 1 0-2.186h54.681a1.093 1.093 0 0 1 0 2.186m0 21.855h-54.681a1.093 1.093 0 1 1 0-2.186h54.681a1.093 1.093 0 0 1 0 2.186m16.369-100.959c-.013 0-.024-.007-.037-.005-3.377.115-4.974 3.492-6.384 6.472-1.471 3.114-2.608 5.139-4.473 5.078-2.064-.074-3.244-2.406-4.494-4.874-1.436-2.835-3.075-6.049-6.516-5.929-3.329.114-4.932 3.053-6.346 5.646-1.5 2.762-2.529 4.442-4.5 4.364-2.106-.076-3.225-1.972-4.52-4.167-1.444-2.443-3.112-5.191-6.487-5.1-3.272.113-4.879 2.606-6.3 4.808-1.5 2.328-2.552 3.746-4.551 3.662-2.156-.076-3.27-1.65-4.558-3.472-1.447-2.047-3.077-4.363-6.442-4.251-3.2.109-4.807 2.153-6.224 3.954-1.346 1.709-2.4 3.062-4.621 2.977a1.094 1.094 0 0 0-.079 2.186c3.3.11 4.967-1.967 6.417-3.81 1.286-1.635 2.4-3.045 4.582-3.12 2.1-.09 3.091 1.218 4.584 3.327 1.417 2 3.026 4.277 6.263 4.394 3.391.114 5.022-2.42 6.467-4.663 1.292-2 2.406-3.734 4.535-3.807 1.959-.073 3.026 1.475 4.529 4.022 1.417 2.4 3.023 5.121 6.324 5.241 3.415.118 5.064-2.863 6.5-5.5 1.245-2.282 2.419-4.437 4.5-4.509 1.959-.046 2.981 1.743 4.492 4.732 1.412 2.79 3.013 5.95 6.365 6.071h.185c3.348 0 4.937-3.36 6.343-6.331 1.245-2.634 2.423-5.114 4.444-5.216Z",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 50",d:"M342.691 618.882h43.71v-43.71h-43.71Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("g",{"data-name":"Group 8",transform:"rotate(-14.98 2188.845 -1120.376)"},r.createElement("rect",{"data-name":"Rectangle 3",width:92.361,height:36.462,rx:2,fill:"#d8d8d8"}),r.createElement("g",{"data-name":"Group 2",transform:"translate(1.531 23.03)",fill:"#4a4a4a"},r.createElement("rect",{"data-name":"Rectangle 4",width:5.336,height:5.336,rx:1,transform:"translate(16.797)"}),r.createElement("rect",{"data-name":"Rectangle 5",width:5.336,height:5.336,rx:1,transform:"translate(23.12)"}),r.createElement("rect",{"data-name":"Rectangle 6",width:5.336,height:5.336,rx:1,transform:"translate(29.444)"}),r.createElement("rect",{"data-name":"Rectangle 7",width:5.336,height:5.336,rx:1,transform:"translate(35.768)"}),r.createElement("rect",{"data-name":"Rectangle 8",width:5.336,height:5.336,rx:1,transform:"translate(42.091)"}),r.createElement("rect",{"data-name":"Rectangle 9",width:5.336,height:5.336,rx:1,transform:"translate(48.415)"}),r.createElement("rect",{"data-name":"Rectangle 10",width:5.336,height:5.336,rx:1,transform:"translate(54.739)"}),r.createElement("rect",{"data-name":"Rectangle 11",width:5.336,height:5.336,rx:1,transform:"translate(61.063)"}),r.createElement("rect",{"data-name":"Rectangle 12",width:5.336,height:5.336,rx:1,transform:"translate(67.386)"}),r.createElement("path",{"data-name":"Path 51",d:"M1.093 0h13.425a1.093 1.093 0 0 1 1.093 1.093v3.15a1.093 1.093 0 0 1-1.093 1.093H1.093A1.093 1.093 0 0 1 0 4.243v-3.15A1.093 1.093 0 0 1 1.093 0ZM75 0h13.426a1.093 1.093 0 0 1 1.093 1.093v3.15a1.093 1.093 0 0 1-1.093 1.093H75a1.093 1.093 0 0 1-1.093-1.093v-3.15A1.093 1.093 0 0 1 75 0Z",fillRule:"evenodd"})),r.createElement("g",{"data-name":"Group 3",transform:"translate(1.531 10.261)",fill:"#4a4a4a"},r.createElement("path",{"data-name":"Path 52",d:"M1.093 0h5.125A1.093 1.093 0 0 1 7.31 1.093v3.149a1.093 1.093 0 0 1-1.092 1.093H1.093A1.093 1.093 0 0 1 0 4.242V1.093A1.093 1.093 0 0 1 1.093 0Z",fillRule:"evenodd"}),r.createElement("rect",{"data-name":"Rectangle 13",width:5.336,height:5.336,rx:1,transform:"translate(8.299)"}),r.createElement("rect",{"data-name":"Rectangle 14",width:5.336,height:5.336,rx:1,transform:"translate(14.623)"}),r.createElement("rect",{"data-name":"Rectangle 15",width:5.336,height:5.336,rx:1,transform:"translate(20.947)"}),r.createElement("rect",{"data-name":"Rectangle 16",width:5.336,height:5.336,rx:1,transform:"translate(27.271)"}),r.createElement("rect",{"data-name":"Rectangle 17",width:5.336,height:5.336,rx:1,transform:"translate(33.594)"}),r.createElement("rect",{"data-name":"Rectangle 18",width:5.336,height:5.336,rx:1,transform:"translate(39.918)"}),r.createElement("rect",{"data-name":"Rectangle 19",width:5.336,height:5.336,rx:1,transform:"translate(46.242)"}),r.createElement("rect",{"data-name":"Rectangle 20",width:5.336,height:5.336,rx:1,transform:"translate(52.565)"}),r.createElement("rect",{"data-name":"Rectangle 21",width:5.336,height:5.336,rx:1,transform:"translate(58.888)"}),r.createElement("rect",{"data-name":"Rectangle 22",width:5.336,height:5.336,rx:1,transform:"translate(65.212)"}),r.createElement("rect",{"data-name":"Rectangle 23",width:5.336,height:5.336,rx:1,transform:"translate(71.536)"}),r.createElement("rect",{"data-name":"Rectangle 24",width:5.336,height:5.336,rx:1,transform:"translate(77.859)"}),r.createElement("rect",{"data-name":"Rectangle 25",width:5.336,height:5.336,rx:1,transform:"translate(84.183)"})),r.createElement("g",{"data-name":"Group 4",transform:"rotate(180 45.525 4.773)",fill:"#4a4a4a"},r.createElement("path",{"data-name":"Path 53",d:"M1.093 0h5.126a1.093 1.093 0 0 1 1.093 1.093v3.15a1.093 1.093 0 0 1-1.093 1.093H1.093A1.093 1.093 0 0 1 0 4.243v-3.15A1.093 1.093 0 0 1 1.093 0Z",fillRule:"evenodd"}),r.createElement("rect",{"data-name":"Rectangle 26",width:5.336,height:5.336,rx:1,transform:"translate(8.299)"}),r.createElement("rect",{"data-name":"Rectangle 27",width:5.336,height:5.336,rx:1,transform:"translate(14.623)"}),r.createElement("rect",{"data-name":"Rectangle 28",width:5.336,height:5.336,rx:1,transform:"translate(20.947)"}),r.createElement("rect",{"data-name":"Rectangle 29",width:5.336,height:5.336,rx:1,transform:"translate(27.271)"}),r.createElement("rect",{"data-name":"Rectangle 30",width:5.336,height:5.336,rx:1,transform:"translate(33.594)"}),r.createElement("rect",{"data-name":"Rectangle 31",width:5.336,height:5.336,rx:1,transform:"translate(39.918)"}),r.createElement("rect",{"data-name":"Rectangle 32",width:5.336,height:5.336,rx:1,transform:"translate(46.242)"}),r.createElement("rect",{"data-name":"Rectangle 33",width:5.336,height:5.336,rx:1,transform:"translate(52.565)"}),r.createElement("rect",{"data-name":"Rectangle 34",width:5.336,height:5.336,rx:1,transform:"translate(58.889)"}),r.createElement("rect",{"data-name":"Rectangle 35",width:5.336,height:5.336,rx:1,transform:"translate(65.213)"}),r.createElement("rect",{"data-name":"Rectangle 36",width:5.336,height:5.336,rx:1,transform:"translate(71.537)"}),r.createElement("rect",{"data-name":"Rectangle 37",width:5.336,height:5.336,rx:1,transform:"translate(77.86)"}),r.createElement("rect",{"data-name":"Rectangle 38",width:5.336,height:5.336,rx:1,transform:"translate(84.183)"}),r.createElement("rect",{"data-name":"Rectangle 39",width:5.336,height:5.336,rx:1,transform:"translate(8.299)"}),r.createElement("rect",{"data-name":"Rectangle 40",width:5.336,height:5.336,rx:1,transform:"translate(14.623)"}),r.createElement("rect",{"data-name":"Rectangle 41",width:5.336,height:5.336,rx:1,transform:"translate(20.947)"}),r.createElement("rect",{"data-name":"Rectangle 42",width:5.336,height:5.336,rx:1,transform:"translate(27.271)"}),r.createElement("rect",{"data-name":"Rectangle 43",width:5.336,height:5.336,rx:1,transform:"translate(33.594)"}),r.createElement("rect",{"data-name":"Rectangle 44",width:5.336,height:5.336,rx:1,transform:"translate(39.918)"}),r.createElement("rect",{"data-name":"Rectangle 45",width:5.336,height:5.336,rx:1,transform:"translate(46.242)"}),r.createElement("rect",{"data-name":"Rectangle 46",width:5.336,height:5.336,rx:1,transform:"translate(52.565)"}),r.createElement("rect",{"data-name":"Rectangle 47",width:5.336,height:5.336,rx:1,transform:"translate(58.889)"}),r.createElement("rect",{"data-name":"Rectangle 48",width:5.336,height:5.336,rx:1,transform:"translate(65.213)"}),r.createElement("rect",{"data-name":"Rectangle 49",width:5.336,height:5.336,rx:1,transform:"translate(71.537)"}),r.createElement("rect",{"data-name":"Rectangle 50",width:5.336,height:5.336,rx:1,transform:"translate(77.86)"}),r.createElement("rect",{"data-name":"Rectangle 51",width:5.336,height:5.336,rx:1,transform:"translate(84.183)"})),r.createElement("g",{"data-name":"Group 6",fill:"#4a4a4a"},r.createElement("path",{"data-name":"Path 54",d:"M2.624 16.584h7.3a1.093 1.093 0 0 1 1.092 1.093v3.15a1.093 1.093 0 0 1-1.093 1.093h-7.3a1.093 1.093 0 0 1-1.092-1.093v-3.149a1.093 1.093 0 0 1 1.093-1.094Z",fillRule:"evenodd"}),r.createElement("g",{"data-name":"Group 5",transform:"translate(12.202 16.584)"},r.createElement("rect",{"data-name":"Rectangle 52",width:5.336,height:5.336,rx:1}),r.createElement("rect",{"data-name":"Rectangle 53",width:5.336,height:5.336,rx:1,transform:"translate(6.324)"}),r.createElement("rect",{"data-name":"Rectangle 54",width:5.336,height:5.336,rx:1,transform:"translate(12.647)"}),r.createElement("rect",{"data-name":"Rectangle 55",width:5.336,height:5.336,rx:1,transform:"translate(18.971)"}),r.createElement("rect",{"data-name":"Rectangle 56",width:5.336,height:5.336,rx:1,transform:"translate(25.295)"}),r.createElement("rect",{"data-name":"Rectangle 57",width:5.336,height:5.336,rx:1,transform:"translate(31.619)"}),r.createElement("rect",{"data-name":"Rectangle 58",width:5.336,height:5.336,rx:1,transform:"translate(37.942)"}),r.createElement("rect",{"data-name":"Rectangle 59",width:5.336,height:5.336,rx:1,transform:"translate(44.265)"}),r.createElement("rect",{"data-name":"Rectangle 60",width:5.336,height:5.336,rx:1,transform:"translate(50.589)"}),r.createElement("rect",{"data-name":"Rectangle 61",width:5.336,height:5.336,rx:1,transform:"translate(56.912)"}),r.createElement("rect",{"data-name":"Rectangle 62",width:5.336,height:5.336,rx:1,transform:"translate(63.236)"})),r.createElement("path",{"data-name":"Path 55",d:"M83.053 16.584h6.906a1.093 1.093 0 0 1 1.091 1.093v3.15a1.093 1.093 0 0 1-1.091 1.093h-6.907a1.093 1.093 0 0 1-1.093-1.093v-3.149a1.093 1.093 0 0 1 1.093-1.094Z",fillRule:"evenodd"})),r.createElement("g",{"data-name":"Group 7",transform:"translate(1.531 29.627)",fill:"#4a4a4a"},r.createElement("rect",{"data-name":"Rectangle 63",width:5.336,height:5.336,rx:1}),r.createElement("rect",{"data-name":"Rectangle 64",width:5.336,height:5.336,rx:1,transform:"translate(6.324)"}),r.createElement("rect",{"data-name":"Rectangle 65",width:5.336,height:5.336,rx:1,transform:"translate(12.647)"}),r.createElement("rect",{"data-name":"Rectangle 66",width:5.336,height:5.336,rx:1,transform:"translate(18.971)"}),r.createElement("path",{"data-name":"Path 56",d:"M26.387 0h30.422a1.093 1.093 0 0 1 1.093 1.093v3.151a1.093 1.093 0 0 1-1.093 1.093H26.387a1.093 1.093 0 0 1-1.093-1.093V1.093A1.093 1.093 0 0 1 26.387 0Zm33.594 0h3.942a1.093 1.093 0 0 1 1.093 1.093v3.151a1.093 1.093 0 0 1-1.093 1.093h-3.942a1.093 1.093 0 0 1-1.093-1.093V1.093A1.093 1.093 0 0 1 59.981 0Z",fillRule:"evenodd"}),r.createElement("rect",{"data-name":"Rectangle 67",width:5.336,height:5.336,rx:1,transform:"translate(66.003)"}),r.createElement("rect",{"data-name":"Rectangle 68",width:5.336,height:5.336,rx:1,transform:"translate(72.327)"}),r.createElement("rect",{"data-name":"Rectangle 69",width:5.336,height:5.336,rx:1,transform:"translate(84.183)"}),r.createElement("path",{"data-name":"Path 57",d:"M78.254 2.273v-1.18A1.093 1.093 0 0 1 79.347 0h3.15a1.093 1.093 0 0 1 1.093 1.093v1.18Z"}),r.createElement("path",{"data-name":"Path 58",d:"M83.591 3.063v1.18a1.093 1.093 0 0 1-1.093 1.093h-3.15a1.093 1.093 0 0 1-1.093-1.093v-1.18Z"})),r.createElement("rect",{"data-name":"Rectangle 70",width:88.927,height:2.371,rx:1.085,transform:"translate(1.925 1.17)",fill:"#4a4a4a"}),r.createElement("rect",{"data-name":"Rectangle 71",width:4.986,height:1.581,rx:.723,transform:"translate(4.1 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 72",width:4.986,height:1.581,rx:.723,transform:"translate(10.923 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 73",width:4.986,height:1.581,rx:.723,transform:"translate(16.173 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 74",width:4.986,height:1.581,rx:.723,transform:"translate(21.421 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 75",width:4.986,height:1.581,rx:.723,transform:"translate(26.671 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 76",width:4.986,height:1.581,rx:.723,transform:"translate(33.232 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 77",width:4.986,height:1.581,rx:.723,transform:"translate(38.48 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 78",width:4.986,height:1.581,rx:.723,transform:"translate(43.73 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 79",width:4.986,height:1.581,rx:.723,transform:"translate(48.978 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 80",width:4.986,height:1.581,rx:.723,transform:"translate(55.54 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 81",width:4.986,height:1.581,rx:.723,transform:"translate(60.788 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 82",width:4.986,height:1.581,rx:.723,transform:"translate(66.038 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 83",width:4.986,height:1.581,rx:.723,transform:"translate(72.599 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 84",width:4.986,height:1.581,rx:.723,transform:"translate(77.847 1.566)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 85",width:4.986,height:1.581,rx:.723,transform:"translate(83.097 1.566)",fill:"#d8d8d8",opacity:.136})),r.createElement("path",{"data-name":"Path 59",d:"M408.256 591.563a5.439 5.439 0 0 0-.7.07c-.042-.164-.081-.329-.127-.493a5.457 5.457 0 1 0-5.4-9.372q-.181-.185-.366-.367a5.454 5.454 0 1 0-9.384-5.4c-.162-.046-.325-.084-.486-.126a5.467 5.467 0 1 0-10.788 0c-.162.042-.325.08-.486.126a5.457 5.457 0 1 0-9.384 5.4 21.843 21.843 0 1 0 36.421 21.02 5.452 5.452 0 1 0 .7-10.858",fill:"#44d860",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 60",d:"M342.691 553.317h43.71v-21.855h-43.71Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 61",d:"M397.328 545.121a2.732 2.732 0 1 0 0-5.464 2.811 2.811 0 0 0-.349.035c-.022-.082-.04-.164-.063-.246a2.733 2.733 0 0 0-1.052-5.253 2.7 2.7 0 0 0-1.648.566q-.09-.093-.184-.184a2.7 2.7 0 0 0 .553-1.633 2.732 2.732 0 0 0-5.245-1.07 10.928 10.928 0 1 0 0 21.031 2.732 2.732 0 0 0 5.245-1.07 2.7 2.7 0 0 0-.553-1.633q.093-.09.184-.184a2.7 2.7 0 0 0 1.648.566 2.732 2.732 0 0 0 1.052-5.253c.023-.081.042-.164.063-.246a2.811 2.811 0 0 0 .349.035",fill:"#44d860",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 62",d:"M408.256 464.531a2.967 2.967 0 0 1-.535-.055 2.754 2.754 0 0 1-.514-.153 2.838 2.838 0 0 1-.471-.251 4.139 4.139 0 0 1-.415-.339 3.2 3.2 0 0 1-.338-.415 2.7 2.7 0 0 1-.459-1.517 2.968 2.968 0 0 1 .055-.535 3.152 3.152 0 0 1 .152-.514 2.874 2.874 0 0 1 .252-.47 2.633 2.633 0 0 1 .753-.754 2.837 2.837 0 0 1 .471-.251 2.753 2.753 0 0 1 .514-.153 2.527 2.527 0 0 1 1.071 0 2.654 2.654 0 0 1 .983.4 4.139 4.139 0 0 1 .415.339 4.019 4.019 0 0 1 .339.415 2.786 2.786 0 0 1 .251.47 2.864 2.864 0 0 1 .208 1.049 2.77 2.77 0 0 1-.8 1.934 4.139 4.139 0 0 1-.415.339 2.722 2.722 0 0 1-1.519.459m21.855-1.366a2.789 2.789 0 0 1-1.935-.8 4.162 4.162 0 0 1-.338-.415 2.7 2.7 0 0 1-.459-1.519 2.789 2.789 0 0 1 .8-1.934 4.139 4.139 0 0 1 .415-.339 2.838 2.838 0 0 1 .471-.251 2.752 2.752 0 0 1 .514-.153 2.527 2.527 0 0 1 1.071 0 2.654 2.654 0 0 1 .983.4 4.139 4.139 0 0 1 .415.339 2.79 2.79 0 0 1 .8 1.934 3.069 3.069 0 0 1-.055.535 2.779 2.779 0 0 1-.153.514 3.885 3.885 0 0 1-.251.47 4.02 4.02 0 0 1-.339.415 4.138 4.138 0 0 1-.415.339 2.722 2.722 0 0 1-1.519.459",fillRule:"evenodd"}))))}},88066:(e,a,t)=>{t.d(a,{Z:()=>c});var l,r=t(67294);function n(){return n=Object.assign?Object.assign.bind():function(e){for(var a=1;a<arguments.length;a++){var t=arguments[a];for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&(e[l]=t[l])}return e},n.apply(this,arguments)}const c=e=>{let{title:a,titleId:t,...c}=e;return r.createElement("svg",n({xmlns:"http://www.w3.org/2000/svg",width:1041.277,height:554.141,viewBox:"0 0 1041.277 554.141","aria-labelledby":t},c),void 0===a?r.createElement("title",{id:t},"Powered by React"):a?r.createElement("title",{id:t},a):null,l||(l=r.createElement("g",{"data-name":"Group 24"},r.createElement("g",{"data-name":"Group 23",transform:"translate(-.011 -.035)"},r.createElement("path",{"data-name":"Path 299",d:"M961.48 438.21q-1.74 3.75-3.47 7.4-2.7 5.67-5.33 11.12c-.78 1.61-1.56 3.19-2.32 4.77-8.6 17.57-16.63 33.11-23.45 45.89a73.21 73.21 0 0 1-63.81 38.7l-151.65 1.65h-1.6l-13 .14-11.12.12-34.1.37h-1.38l-17.36.19h-.53l-107 1.16-95.51 1-11.11.12-69 .75h-.08l-44.75.48h-.48l-141.5 1.53-42.33.46a87.991 87.991 0 0 1-10.79-.54c-1.22-.14-2.44-.3-3.65-.49a87.38 87.38 0 0 1-51.29-27.54c-18.21-20.03-31.46-43.4-40.36-68.76q-1.93-5.49-3.6-11.12c-30.81-104.15 6.75-238.52 74.35-328.44q4.25-5.64 8.64-11l.07-.08c20.79-25.52 44.1-46.84 68.93-62 44-26.91 92.75-34.49 140.7-11.9 40.57 19.12 78.45 28.11 115.17 30.55 3.71.24 7.42.42 11.11.53 84.23 2.65 163.17-27.7 255.87-47.29 3.69-.78 7.39-1.55 11.12-2.28C763 .54 836.36-6.4 923.6 8.19a189.089 189.089 0 0 1 26.76 6.4q5.77 1.86 11.12 4c41.64 16.94 64.35 48.24 74 87.46q1.37 5.46 2.37 11.11c17.11 94.34-33 228.16-76.37 321.05Z",fill:"#f2f2f2"}),r.createElement("path",{"data-name":"Path 300",d:"M497.02 445.61a95.21 95.21 0 0 1-1.87 11.12h93.7v-11.12Zm-78.25 62.81 11.11-.09v-27.47c-3.81-.17-7.52-.34-11.11-.52Zm-232.92-62.81v11.12h198.5v-11.12Zm849.68-339.52h-74V18.6q-5.35-2.17-11.12-4v91.49H696.87V13.67c-3.73.73-7.43 1.5-11.12 2.28v90.14H429.88V63.24c-3.69-.11-7.4-.29-11.11-.53v43.38H162.9v-62c-24.83 15.16-48.14 36.48-68.93 62h-.07v.08q-4.4 5.4-8.64 11h8.64v328.44h-83q1.66 5.63 3.6 11.12h79.39v93.62a87 87 0 0 0 12.2 2.79c1.21.19 2.43.35 3.65.49a87.991 87.991 0 0 0 10.79.54l42.33-.46v-97h255.91v94.21l11.11-.12v-94.07h255.87v91.36l11.12-.12v-91.24h253.49v4.77c.76-1.58 1.54-3.16 2.32-4.77q2.63-5.45 5.33-11.12 1.73-3.64 3.47-7.4v-321h76.42q-1.01-5.69-2.37-11.12ZM162.9 445.61V117.17h255.87v328.44Zm267 0V117.17h255.85v328.44Zm520.48 0H696.87V117.17h253.49Z",opacity:.1}),r.createElement("path",{"data-name":"Path 301",d:"M863.09 533.65v13l-151.92 1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99-175.61 1.63h-.15l-44.65.42-.48.01-198.4 1.82v-15l46.65-28 93.6-.78 2-.01.66-.01 2-.03 44.94-.37 2.01-.01.64-.01 2-.01 14.41-.12.38-.01 35.55-.3h.29l277.4-2.34 6.79-.05h.68l5.18-.05 37.65-.31 2-.03 1.85-.02h.96l11.71-.09 2.32-.03 3.11-.02 9.75-.09 15.47-.13 2-.02 3.48-.02h.65l74.71-.64Z",fill:"#65617d"}),r.createElement("path",{"data-name":"Path 302",d:"M863.09 533.65v13l-151.92 1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99-175.61 1.63h-.15l-44.65.42-.48.01-198.4 1.82v-15l46.65-28 93.6-.78 2-.01.66-.01 2-.03 44.94-.37 2.01-.01.64-.01 2-.01 14.41-.12.38-.01 35.55-.3h.29l277.4-2.34 6.79-.05h.68l5.18-.05 37.65-.31 2-.03 1.85-.02h.96l11.71-.09 2.32-.03 3.11-.02 9.75-.09 15.47-.13 2-.02 3.48-.02h.65l74.71-.64Z",opacity:.2}),r.createElement("path",{"data-name":"Path 303",d:"M296.1 483.66v24.49a6.13 6.13 0 0 1-3.5 5.54 6 6 0 0 1-2.5.6l-34.9.74a6 6 0 0 1-2.7-.57 6.12 6.12 0 0 1-3.57-5.57v-25.23Z",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 304",d:"M296.1 483.66v24.49a6.13 6.13 0 0 1-3.5 5.54 6 6 0 0 1-2.5.6l-34.9.74a6 6 0 0 1-2.7-.57 6.12 6.12 0 0 1-3.57-5.57v-25.23Z",opacity:.1}),r.createElement("path",{"data-name":"Path 305",d:"M298.1 483.66v24.49a6.13 6.13 0 0 1-3.5 5.54 6 6 0 0 1-2.5.6l-34.9.74a6 6 0 0 1-2.7-.57 6.12 6.12 0 0 1-3.57-5.57v-25.23Z",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Rectangle 137",fill:"#3f3d56",d:"M680.92 483.65h47.17v31.5h-47.17z"}),r.createElement("path",{"data-name":"Rectangle 138",opacity:.1,d:"M680.92 483.65h47.17v31.5h-47.17z"}),r.createElement("path",{"data-name":"Rectangle 139",fill:"#3f3d56",d:"M678.92 483.65h47.17v31.5h-47.17z"}),r.createElement("path",{"data-name":"Path 306",d:"M298.09 483.65v4.97l-47.17 1.26v-6.23Z",opacity:.1}),r.createElement("path",{"data-name":"Path 307",d:"M381.35 312.36v168.2a4 4 0 0 1-3.85 3.95l-191.65 5.1h-.05a4 4 0 0 1-3.95-3.95v-173.3a4 4 0 0 1 3.95-3.95h191.6a4 4 0 0 1 3.95 3.95Z",fill:"#65617d"}),r.createElement("path",{"data-name":"Path 308",d:"M185.85 308.41v181.2h-.05a4 4 0 0 1-3.95-3.95v-173.3a4 4 0 0 1 3.95-3.95Z",opacity:.1}),r.createElement("path",{"data-name":"Path 309",d:"M194.59 319.15h177.5V467.4l-177.5 4Z",fill:"#39374d"}),r.createElement("path",{"data-name":"Path 310",d:"M726.09 483.65v6.41l-47.17-1.26v-5.15Z",opacity:.1}),r.createElement("path",{"data-name":"Path 311",d:"M788.35 312.36v173.3a4 4 0 0 1-4 3.95l-191.69-5.1a4 4 0 0 1-3.85-3.95v-168.2a4 4 0 0 1 3.95-3.95h191.6a4 4 0 0 1 3.99 3.95Z",fill:"#65617d"}),r.createElement("path",{"data-name":"Path 312",d:"M788.35 312.36v173.3a4 4 0 0 1-4 3.95v-181.2a4 4 0 0 1 4 3.95Z",opacity:.1}),r.createElement("path",{"data-name":"Path 313",d:"M775.59 319.15h-177.5V467.4l177.5 4Z",fill:"#39374d"}),r.createElement("path",{"data-name":"Path 314",d:"M583.85 312.36v168.2a4 4 0 0 1-3.85 3.95l-191.65 5.1a4 4 0 0 1-4-3.95v-173.3a4 4 0 0 1 3.95-3.95h191.6a4 4 0 0 1 3.95 3.95Z",fill:"#65617d"}),r.createElement("path",{"data-name":"Path 315",d:"M397.09 319.15h177.5V467.4l-177.5 4Z",fill:"#4267b2"}),r.createElement("path",{"data-name":"Path 316",d:"M863.09 533.65v13l-151.92 1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99-175.61 1.63h-.15l-44.65.42-.48.01-198.4 1.82v-15l202.51-1.33h.48l40.99-.28h.19l283.08-1.87h.29l.17-.01h.47l4.79-.03h1.46l74.49-.5 4.4-.02.98-.01Z",opacity:.1}),r.createElement("circle",{"data-name":"Ellipse 111",cx:51.33,cy:51.33,r:51.33,transform:"translate(435.93 246.82)",fill:"#fbbebe"}),r.createElement("path",{"data-name":"Path 317",d:"M538.6 377.16s-99.5 12-90 0c3.44-4.34 4.39-17.2 4.2-31.85-.06-4.45-.22-9.06-.45-13.65-1.1-22-3.75-43.5-3.75-43.5s87-41 77-8.5c-4 13.13-2.69 31.57.35 48.88.89 5.05 1.92 10 3 14.7a344.66 344.66 0 0 0 9.65 33.92Z",fill:"#fbbebe"}),r.createElement("path",{"data-name":"Path 318",d:"M506.13 373.09c11.51-2.13 23.7-6 34.53-1.54 2.85 1.17 5.47 2.88 8.39 3.86s6.12 1.22 9.16 1.91c10.68 2.42 19.34 10.55 24.9 20s8.44 20.14 11.26 30.72l6.9 25.83c6 22.45 12 45.09 13.39 68.3a2437.506 2437.506 0 0 1-250.84 1.43c5.44-10.34 11-21.31 10.54-33s-7.19-23.22-4.76-34.74c1.55-7.34 6.57-13.39 9.64-20.22 8.75-19.52 1.94-45.79 17.32-60.65 6.92-6.68 17-9.21 26.63-8.89 12.28.41 24.85 4.24 37 6.11 15.56 2.36 30.26 3.76 45.94.88Z",fill:"#ff6584"}),r.createElement("path",{"data-name":"Path 319",d:"m637.03 484.26-.1 1.43v.1l-.17 2.3-1.33 18.51-1.61 22.3-.46 6.28-1 13.44v.17l-107 1-175.59 1.9v.84h-.14v-1.12l.45-14.36.86-28.06.74-23.79.07-2.37a10.53 10.53 0 0 1 11.42-10.17c4.72.4 10.85.89 18.18 1.41l3 .22c42.33 2.94 120.56 6.74 199.5 2 1.66-.09 3.33-.19 5-.31 12.24-.77 24.47-1.76 36.58-3a10.53 10.53 0 0 1 11.6 11.23Z",opacity:.1}),r.createElement("path",{"data-name":"Path 320",d:"M349.74 552.53v-.84l175.62-1.91 107-1h.3v-.17l1-13.44.43-6 1.64-22.61 1.29-17.9v-.44a10.617 10.617 0 0 0-.11-2.47.3.3 0 0 0 0-.1 10.391 10.391 0 0 0-2-4.64 10.54 10.54 0 0 0-9.42-4 937.419 937.419 0 0 1-36.58 3c-1.67.12-3.34.22-5 .31-78.94 4.69-157.17.89-199.5-2l-3-.22c-7.33-.52-13.46-1-18.18-1.41a10.54 10.54 0 0 0-11.24 8.53 11 11 0 0 0-.18 1.64l-.68 22.16-.93 28.07-.44 14.36v1.12Z",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 321",d:"m637.33 491.27-1.23 15.33-1.83 22.85-.46 5.72-1 12.81-.06.64v.17l-.15 1.48.11-1.48h-.29l-107 1-175.65 1.9v-.28l.49-14.36 1-28.06.64-18.65a6.36 6.36 0 0 1 3.06-5.25 6.25 6.25 0 0 1 3.78-.9c2.1.17 4.68.37 7.69.59 4.89.36 10.92.78 17.94 1.22 13 .82 29.31 1.7 48 2.42 52 2 122.2 2.67 188.88-3.17 3-.26 6.1-.55 9.13-.84a6.26 6.26 0 0 1 3.48.66 5.159 5.159 0 0 1 .86.54 6.14 6.14 0 0 1 2 2.46 3.564 3.564 0 0 1 .25.61 6.279 6.279 0 0 1 .36 2.59Z",opacity:.1}),r.createElement("path",{"data-name":"Path 322",d:"M298.1 504.96v3.19a6.13 6.13 0 0 1-3.5 5.54l-40.1.77a6.12 6.12 0 0 1-3.57-5.57v-3Z",opacity:.1}),r.createElement("path",{"data-name":"Path 323",d:"m298.59 515.57-52.25 1v-8.67l52.25-1Z",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 324",d:"m298.59 515.57-52.25 1v-8.67l52.25-1Z",opacity:.1}),r.createElement("path",{"data-name":"Path 325",d:"m300.59 515.57-52.25 1v-8.67l52.25-1Z",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 326",d:"M679.22 506.96v3.19a6.13 6.13 0 0 0 3.5 5.54l40.1.77a6.12 6.12 0 0 0 3.57-5.57v-3Z",opacity:.1}),r.createElement("path",{"data-name":"Path 327",d:"m678.72 517.57 52.25 1v-8.67l-52.25-1Z",opacity:.1}),r.createElement("path",{"data-name":"Path 328",d:"m676.72 517.57 52.25 1v-8.67l-52.25-1Z",fill:"#3f3d56"}),r.createElement("path",{"data-name":"Path 329",d:"M454.79 313.88c.08 7-3.16 13.6-5.91 20.07a163.491 163.491 0 0 0-12.66 74.71c.73 11 2.58 22 .73 32.9s-8.43 21.77-19 24.9c17.53 10.45 41.26 9.35 57.76-2.66 8.79-6.4 15.34-15.33 21.75-24.11a97.86 97.86 0 0 1-13.31 44.75 103.43 103.43 0 0 0 73.51-40.82c4.31-5.81 8.06-12.19 9.72-19.23 3.09-13-1.22-26.51-4.51-39.5a266.055 266.055 0 0 1-6.17-33c-.43-3.56-.78-7.22.1-10.7 1-4.07 3.67-7.51 5.64-11.22 5.6-10.54 5.73-23.3 2.86-34.88s-8.49-22.26-14.06-32.81c-4.46-8.46-9.3-17.31-17.46-22.28-5.1-3.1-11-4.39-16.88-5.64l-25.37-5.43c-5.55-1.19-11.26-2.38-16.87-1.51-9.47 1.48-16.14 8.32-22 15.34-4.59 5.46-15.81 15.71-16.6 22.86-.72 6.59 5.1 17.63 6.09 24.58 1.3 9 2.22 6 7.3 11.52 3.21 3.42 5.28 7.37 5.34 12.16Z",fill:"#3f3d56"})),r.createElement("path",{"data-name":"Path 40",d:"M280.139 370.832h43.635v17.662h-43.635Z",fill:"#fff",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 41",d:"M240.66 428.493a10.377 10.377 0 0 1-8.989-5.195 10.377 10.377 0 0 0 8.988 15.584h10.391v-10.389Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 42",d:"m287.402 373.625 36.373-2.273v-5.195a10.389 10.389 0 0 0-10.39-10.389h-46.75l-1.3-2.249a1.5 1.5 0 0 0-2.6 0l-1.3 2.249-1.3-2.249a1.5 1.5 0 0 0-2.6 0l-1.3 2.249-1.3-2.249a1.5 1.5 0 0 0-2.6 0l-1.3 2.249h-.034l-2.152-2.151a1.5 1.5 0 0 0-2.508.672l-.696 2.653-2.7-.723a1.5 1.5 0 0 0-1.836 1.837l.722 2.7-2.65.71a1.5 1.5 0 0 0-.673 2.509l2.152 2.152v.033l-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.25 1.282-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3-2.249 1.3a1.5 1.5 0 0 0 0 2.6l2.249 1.3a10.389 10.389 0 0 0 10.389 10.34h62.335a10.389 10.389 0 0 0 10.39-10.39v-41.557l-36.373-2.273a5.53 5.53 0 0 1 0-11.038",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 43",d:"M302.996 438.882h15.584v-20.779h-15.584Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 44",d:"M328.97 425.895a2.582 2.582 0 0 0-.332.033c-.02-.078-.038-.156-.06-.234a2.594 2.594 0 1 0-2.567-4.455q-.086-.088-.174-.175a2.593 2.593 0 1 0-4.461-2.569c-.077-.022-.154-.04-.231-.06a2.6 2.6 0 1 0-5.128 0c-.077.02-.154.038-.231.06a2.594 2.594 0 1 0-4.461 2.569 10.384 10.384 0 1 0 17.314 9.992 2.592 2.592 0 1 0 .332-5.161",fill:"#44d860",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 45",d:"M308.191 407.713h15.584v-10.389h-15.584Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 46",d:"M328.969 403.818a1.3 1.3 0 1 0 0-2.6 1.336 1.336 0 0 0-.166.017l-.03-.117a1.3 1.3 0 0 0-.5-2.5 1.285 1.285 0 0 0-.783.269l-.087-.087a1.285 1.285 0 0 0 .263-.776 1.3 1.3 0 0 0-2.493-.509 5.195 5.195 0 1 0 0 10 1.3 1.3 0 0 0 2.493-.509 1.285 1.285 0 0 0-.263-.776l.087-.087a1.285 1.285 0 0 0 .783.269 1.3 1.3 0 0 0 .5-2.5c.011-.038.02-.078.03-.117a1.337 1.337 0 0 0 .166.017",fill:"#44d860",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 47",d:"M261.439 372.65a1.3 1.3 0 0 1-1.3-1.3 3.9 3.9 0 0 0-7.792 0 1.3 1.3 0 1 1-2.6 0 6.494 6.494 0 0 1 12.987 0 1.3 1.3 0 0 1-1.3 1.3",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 48",d:"M282.217 438.882h31.168a10.389 10.389 0 0 0 10.389-10.389V392.13h-31.168a10.389 10.389 0 0 0-10.389 10.389Z",fill:"#ffff50",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 49",d:"M315.993 408.233h-25.994a.52.52 0 1 1 0-1.039h25.994a.52.52 0 0 1 0 1.039m0 10.389h-25.994a.52.52 0 1 1 0-1.039h25.994a.52.52 0 0 1 0 1.039m0 10.389h-25.994a.52.52 0 1 1 0-1.039h25.994a.52.52 0 0 1 0 1.039m0-25.877h-25.994a.52.52 0 1 1 0-1.039h25.994a.52.52 0 0 1 0 1.039m0 10.293h-25.994a.52.52 0 1 1 0-1.039h25.994a.52.52 0 0 1 0 1.039m0 10.389h-25.994a.52.52 0 1 1 0-1.039h25.994a.52.52 0 0 1 0 1.039m7.782-47.993h-.018c-1.605.055-2.365 1.66-3.035 3.077-.7 1.48-1.24 2.443-2.126 2.414-.981-.035-1.542-1.144-2.137-2.317-.683-1.347-1.462-2.876-3.1-2.819-1.582.054-2.344 1.451-3.017 2.684-.715 1.313-1.2 2.112-2.141 2.075-1-.036-1.533-.938-2.149-1.981-.686-1.162-1.479-2.467-3.084-2.423-1.555.053-2.319 1.239-2.994 2.286-.713 1.106-1.213 1.781-2.164 1.741-1.025-.036-1.554-.784-2.167-1.65-.688-.973-1.463-2.074-3.062-2.021a3.815 3.815 0 0 0-2.959 1.879c-.64.812-1.14 1.456-2.2 1.415a.52.52 0 0 0-.037 1.039 3.588 3.588 0 0 0 3.05-1.811c.611-.777 1.139-1.448 2.178-1.483 1-.043 1.47.579 2.179 1.582.674.953 1.438 2.033 2.977 2.089 1.612.054 2.387-1.151 3.074-2.217.614-.953 1.144-1.775 2.156-1.81.931-.035 1.438.7 2.153 1.912.674 1.141 1.437 2.434 3.006 2.491 1.623.056 2.407-1.361 3.09-2.616.592-1.085 1.15-2.109 2.14-2.143.931-.022 1.417.829 2.135 2.249.671 1.326 1.432 2.828 3.026 2.886h.088c1.592 0 2.347-1.6 3.015-3.01.592-1.252 1.152-2.431 2.113-2.479Z",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 50",d:"M271.828 438.882h20.779v-20.779h-20.779Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("g",{"data-name":"Group 8",transform:"rotate(-14.98 1643.944 -873.93)"},r.createElement("rect",{"data-name":"Rectangle 3",width:43.906,height:17.333,rx:2,fill:"#d8d8d8"}),r.createElement("g",{"data-name":"Group 2",transform:"translate(.728 10.948)",fill:"#4a4a4a"},r.createElement("rect",{"data-name":"Rectangle 4",width:2.537,height:2.537,rx:1,transform:"translate(7.985)"}),r.createElement("rect",{"data-name":"Rectangle 5",width:2.537,height:2.537,rx:1,transform:"translate(10.991)"}),r.createElement("rect",{"data-name":"Rectangle 6",width:2.537,height:2.537,rx:1,transform:"translate(13.997)"}),r.createElement("rect",{"data-name":"Rectangle 7",width:2.537,height:2.537,rx:1,transform:"translate(17.003)"}),r.createElement("rect",{"data-name":"Rectangle 8",width:2.537,height:2.537,rx:1,transform:"translate(20.009)"}),r.createElement("rect",{"data-name":"Rectangle 9",width:2.537,height:2.537,rx:1,transform:"translate(23.015)"}),r.createElement("rect",{"data-name":"Rectangle 10",width:2.537,height:2.537,rx:1,transform:"translate(26.021)"}),r.createElement("rect",{"data-name":"Rectangle 11",width:2.537,height:2.537,rx:1,transform:"translate(29.028)"}),r.createElement("rect",{"data-name":"Rectangle 12",width:2.537,height:2.537,rx:1,transform:"translate(32.034)"}),r.createElement("path",{"data-name":"Path 51",d:"M.519 0H6.9a.519.519 0 0 1 .521.52v1.5a.519.519 0 0 1-.519.519H.519A.519.519 0 0 1 0 2.017V.519A.519.519 0 0 1 .519 0Zm35.134 0h6.383a.519.519 0 0 1 .519.519v1.5a.519.519 0 0 1-.519.519h-6.384a.519.519 0 0 1-.519-.519v-1.5A.519.519 0 0 1 35.652 0Z",fillRule:"evenodd"})),r.createElement("g",{"data-name":"Group 3",transform:"translate(.728 4.878)",fill:"#4a4a4a"},r.createElement("path",{"data-name":"Path 52",d:"M.519 0h2.437a.519.519 0 0 1 .519.519v1.5a.519.519 0 0 1-.519.519H.519A.519.519 0 0 1 0 2.017V.519A.519.519 0 0 1 .519 0Z",fillRule:"evenodd"}),r.createElement("rect",{"data-name":"Rectangle 13",width:2.537,height:2.537,rx:1,transform:"translate(3.945)"}),r.createElement("rect",{"data-name":"Rectangle 14",width:2.537,height:2.537,rx:1,transform:"translate(6.951)"}),r.createElement("rect",{"data-name":"Rectangle 15",width:2.537,height:2.537,rx:1,transform:"translate(9.958)"}),r.createElement("rect",{"data-name":"Rectangle 16",width:2.537,height:2.537,rx:1,transform:"translate(12.964)"}),r.createElement("rect",{"data-name":"Rectangle 17",width:2.537,height:2.537,rx:1,transform:"translate(15.97)"}),r.createElement("rect",{"data-name":"Rectangle 18",width:2.537,height:2.537,rx:1,transform:"translate(18.976)"}),r.createElement("rect",{"data-name":"Rectangle 19",width:2.537,height:2.537,rx:1,transform:"translate(21.982)"}),r.createElement("rect",{"data-name":"Rectangle 20",width:2.537,height:2.537,rx:1,transform:"translate(24.988)"}),r.createElement("rect",{"data-name":"Rectangle 21",width:2.537,height:2.537,rx:1,transform:"translate(27.994)"}),r.createElement("rect",{"data-name":"Rectangle 22",width:2.537,height:2.537,rx:1,transform:"translate(31)"}),r.createElement("rect",{"data-name":"Rectangle 23",width:2.537,height:2.537,rx:1,transform:"translate(34.006)"}),r.createElement("rect",{"data-name":"Rectangle 24",width:2.537,height:2.537,rx:1,transform:"translate(37.012)"}),r.createElement("rect",{"data-name":"Rectangle 25",width:2.537,height:2.537,rx:1,transform:"translate(40.018)"})),r.createElement("g",{"data-name":"Group 4",transform:"rotate(180 21.642 2.269)",fill:"#4a4a4a"},r.createElement("path",{"data-name":"Path 53",d:"M.519 0h2.437a.519.519 0 0 1 .519.519v1.5a.519.519 0 0 1-.519.519H.519A.519.519 0 0 1 0 2.017V.519A.519.519 0 0 1 .519 0Z",fillRule:"evenodd"}),r.createElement("rect",{"data-name":"Rectangle 26",width:2.537,height:2.537,rx:1,transform:"translate(3.945)"}),r.createElement("rect",{"data-name":"Rectangle 27",width:2.537,height:2.537,rx:1,transform:"translate(6.951)"}),r.createElement("rect",{"data-name":"Rectangle 28",width:2.537,height:2.537,rx:1,transform:"translate(9.958)"}),r.createElement("rect",{"data-name":"Rectangle 29",width:2.537,height:2.537,rx:1,transform:"translate(12.964)"}),r.createElement("rect",{"data-name":"Rectangle 30",width:2.537,height:2.537,rx:1,transform:"translate(15.97)"}),r.createElement("rect",{"data-name":"Rectangle 31",width:2.537,height:2.537,rx:1,transform:"translate(18.976)"}),r.createElement("rect",{"data-name":"Rectangle 32",width:2.537,height:2.537,rx:1,transform:"translate(21.982)"}),r.createElement("rect",{"data-name":"Rectangle 33",width:2.537,height:2.537,rx:1,transform:"translate(24.988)"}),r.createElement("rect",{"data-name":"Rectangle 34",width:2.537,height:2.537,rx:1,transform:"translate(27.994)"}),r.createElement("rect",{"data-name":"Rectangle 35",width:2.537,height:2.537,rx:1,transform:"translate(31.001)"}),r.createElement("rect",{"data-name":"Rectangle 36",width:2.537,height:2.537,rx:1,transform:"translate(34.007)"}),r.createElement("rect",{"data-name":"Rectangle 37",width:2.537,height:2.537,rx:1,transform:"translate(37.013)"}),r.createElement("rect",{"data-name":"Rectangle 38",width:2.537,height:2.537,rx:1,transform:"translate(40.018)"}),r.createElement("rect",{"data-name":"Rectangle 39",width:2.537,height:2.537,rx:1,transform:"translate(3.945)"}),r.createElement("rect",{"data-name":"Rectangle 40",width:2.537,height:2.537,rx:1,transform:"translate(6.951)"}),r.createElement("rect",{"data-name":"Rectangle 41",width:2.537,height:2.537,rx:1,transform:"translate(9.958)"}),r.createElement("rect",{"data-name":"Rectangle 42",width:2.537,height:2.537,rx:1,transform:"translate(12.964)"}),r.createElement("rect",{"data-name":"Rectangle 43",width:2.537,height:2.537,rx:1,transform:"translate(15.97)"}),r.createElement("rect",{"data-name":"Rectangle 44",width:2.537,height:2.537,rx:1,transform:"translate(18.976)"}),r.createElement("rect",{"data-name":"Rectangle 45",width:2.537,height:2.537,rx:1,transform:"translate(21.982)"}),r.createElement("rect",{"data-name":"Rectangle 46",width:2.537,height:2.537,rx:1,transform:"translate(24.988)"}),r.createElement("rect",{"data-name":"Rectangle 47",width:2.537,height:2.537,rx:1,transform:"translate(27.994)"}),r.createElement("rect",{"data-name":"Rectangle 48",width:2.537,height:2.537,rx:1,transform:"translate(31.001)"}),r.createElement("rect",{"data-name":"Rectangle 49",width:2.537,height:2.537,rx:1,transform:"translate(34.007)"}),r.createElement("rect",{"data-name":"Rectangle 50",width:2.537,height:2.537,rx:1,transform:"translate(37.013)"}),r.createElement("rect",{"data-name":"Rectangle 51",width:2.537,height:2.537,rx:1,transform:"translate(40.018)"})),r.createElement("g",{"data-name":"Group 6",fill:"#4a4a4a"},r.createElement("path",{"data-name":"Path 54",d:"M1.247 7.883h3.47a.519.519 0 0 1 .519.519v1.5a.519.519 0 0 1-.519.519h-3.47A.519.519 0 0 1 .728 9.9V8.403a.519.519 0 0 1 .519-.52Z",fillRule:"evenodd"}),r.createElement("g",{"data-name":"Group 5",transform:"translate(5.801 7.883)"},r.createElement("rect",{"data-name":"Rectangle 52",width:2.537,height:2.537,rx:1}),r.createElement("rect",{"data-name":"Rectangle 53",width:2.537,height:2.537,rx:1,transform:"translate(3.006)"}),r.createElement("rect",{"data-name":"Rectangle 54",width:2.537,height:2.537,rx:1,transform:"translate(6.012)"}),r.createElement("rect",{"data-name":"Rectangle 55",width:2.537,height:2.537,rx:1,transform:"translate(9.018)"}),r.createElement("rect",{"data-name":"Rectangle 56",width:2.537,height:2.537,rx:1,transform:"translate(12.025)"}),r.createElement("rect",{"data-name":"Rectangle 57",width:2.537,height:2.537,rx:1,transform:"translate(15.031)"}),r.createElement("rect",{"data-name":"Rectangle 58",width:2.537,height:2.537,rx:1,transform:"translate(18.037)"}),r.createElement("rect",{"data-name":"Rectangle 59",width:2.537,height:2.537,rx:1,transform:"translate(21.042)"}),r.createElement("rect",{"data-name":"Rectangle 60",width:2.537,height:2.537,rx:1,transform:"translate(24.049)"}),r.createElement("rect",{"data-name":"Rectangle 61",width:2.537,height:2.537,rx:1,transform:"translate(27.055)"}),r.createElement("rect",{"data-name":"Rectangle 62",width:2.537,height:2.537,rx:1,transform:"translate(30.061)"})),r.createElement("path",{"data-name":"Path 55",d:"M39.482 7.883h3.28a.519.519 0 0 1 .519.519v1.5a.519.519 0 0 1-.519.519h-3.281a.519.519 0 0 1-.519-.521V8.403a.519.519 0 0 1 .519-.52Z",fillRule:"evenodd"})),r.createElement("g",{"data-name":"Group 7",transform:"translate(.728 14.084)",fill:"#4a4a4a"},r.createElement("rect",{"data-name":"Rectangle 63",width:2.537,height:2.537,rx:1}),r.createElement("rect",{"data-name":"Rectangle 64",width:2.537,height:2.537,rx:1,transform:"translate(3.006)"}),r.createElement("rect",{"data-name":"Rectangle 65",width:2.537,height:2.537,rx:1,transform:"translate(6.012)"}),r.createElement("rect",{"data-name":"Rectangle 66",width:2.537,height:2.537,rx:1,transform:"translate(9.018)"}),r.createElement("path",{"data-name":"Path 56",d:"M12.543 0h14.462a.519.519 0 0 1 .519.519v1.5a.519.519 0 0 1-.519.519H12.543a.519.519 0 0 1-.519-.52V.519A.519.519 0 0 1 12.543 0Zm15.97 0h1.874a.519.519 0 0 1 .519.519v1.5a.519.519 0 0 1-.519.519h-1.874a.519.519 0 0 1-.519-.519v-1.5A.519.519 0 0 1 28.513 0Z",fillRule:"evenodd"}),r.createElement("rect",{"data-name":"Rectangle 67",width:2.537,height:2.537,rx:1,transform:"translate(31.376)"}),r.createElement("rect",{"data-name":"Rectangle 68",width:2.537,height:2.537,rx:1,transform:"translate(34.382)"}),r.createElement("rect",{"data-name":"Rectangle 69",width:2.537,height:2.537,rx:1,transform:"translate(40.018)"}),r.createElement("path",{"data-name":"Path 57",d:"M37.199 1.08V.519A.519.519 0 0 1 37.718 0h1.499a.519.519 0 0 1 .519.519v.561Z"}),r.createElement("path",{"data-name":"Path 58",d:"M39.737 1.456v.561a.519.519 0 0 1-.519.519h-1.499a.519.519 0 0 1-.519-.519v-.561Z"})),r.createElement("rect",{"data-name":"Rectangle 70",width:42.273,height:1.127,rx:.564,transform:"translate(.915 .556)",fill:"#4a4a4a"}),r.createElement("rect",{"data-name":"Rectangle 71",width:2.37,height:.752,rx:.376,transform:"translate(1.949 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 72",width:2.37,height:.752,rx:.376,transform:"translate(5.193 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 73",width:2.37,height:.752,rx:.376,transform:"translate(7.688 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 74",width:2.37,height:.752,rx:.376,transform:"translate(10.183 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 75",width:2.37,height:.752,rx:.376,transform:"translate(12.679 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 76",width:2.37,height:.752,rx:.376,transform:"translate(15.797 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 77",width:2.37,height:.752,rx:.376,transform:"translate(18.292 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 78",width:2.37,height:.752,rx:.376,transform:"translate(20.788 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 79",width:2.37,height:.752,rx:.376,transform:"translate(23.283 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 80",width:2.37,height:.752,rx:.376,transform:"translate(26.402 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 81",width:2.37,height:.752,rx:.376,transform:"translate(28.897 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 82",width:2.37,height:.752,rx:.376,transform:"translate(31.393 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 83",width:2.37,height:.752,rx:.376,transform:"translate(34.512 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 84",width:2.37,height:.752,rx:.376,transform:"translate(37.007 .744)",fill:"#d8d8d8",opacity:.136}),r.createElement("rect",{"data-name":"Rectangle 85",width:2.37,height:.752,rx:.376,transform:"translate(39.502 .744)",fill:"#d8d8d8",opacity:.136})),r.createElement("path",{"data-name":"Path 59",d:"M302.996 425.895a2.583 2.583 0 0 0-.332.033c-.02-.078-.038-.156-.06-.234a2.594 2.594 0 1 0-2.567-4.455q-.086-.088-.174-.175a2.593 2.593 0 1 0-4.461-2.569c-.077-.022-.154-.04-.231-.06a2.6 2.6 0 1 0-5.128 0c-.077.02-.154.038-.231.06a2.594 2.594 0 1 0-4.461 2.569 10.384 10.384 0 1 0 17.314 9.992 2.592 2.592 0 1 0 .332-5.161",fill:"#44d860",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 60",d:"M271.828 407.713h20.779v-10.389h-20.779Z",fill:"#3ecc5f",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 61",d:"M297.801 403.818a1.3 1.3 0 1 0 0-2.6 1.338 1.338 0 0 0-.166.017l-.03-.117a1.3 1.3 0 0 0-.5-2.5 1.285 1.285 0 0 0-.783.269l-.087-.087a1.285 1.285 0 0 0 .263-.776 1.3 1.3 0 0 0-2.493-.509 5.195 5.195 0 1 0 0 10 1.3 1.3 0 0 0 2.493-.509 1.285 1.285 0 0 0-.263-.776l.087-.087a1.285 1.285 0 0 0 .783.269 1.3 1.3 0 0 0 .5-2.5c.011-.038.02-.078.03-.117a1.335 1.335 0 0 0 .166.017",fill:"#44d860",fillRule:"evenodd"}),r.createElement("path",{"data-name":"Path 62",d:"M302.997 365.507a1.41 1.41 0 0 1-.255-.026 1.309 1.309 0 0 1-.244-.073 1.349 1.349 0 0 1-.224-.119 1.967 1.967 0 0 1-.2-.161 1.52 1.52 0 0 1-.161-.2 1.282 1.282 0 0 1-.218-.722 1.41 1.41 0 0 1 .026-.255 1.5 1.5 0 0 1 .072-.244 1.364 1.364 0 0 1 .12-.223 1.252 1.252 0 0 1 .358-.358 1.349 1.349 0 0 1 .224-.119 1.309 1.309 0 0 1 .244-.073 1.2 1.2 0 0 1 .509 0 1.262 1.262 0 0 1 .468.192 1.968 1.968 0 0 1 .2.161 1.908 1.908 0 0 1 .161.2 1.322 1.322 0 0 1 .12.223 1.361 1.361 0 0 1 .1.5 1.317 1.317 0 0 1-.379.919 1.968 1.968 0 0 1-.2.161 1.346 1.346 0 0 1-.223.119 1.332 1.332 0 0 1-.5.1m10.389-.649a1.326 1.326 0 0 1-.92-.379 1.979 1.979 0 0 1-.161-.2 1.282 1.282 0 0 1-.218-.722 1.326 1.326 0 0 1 .379-.919 1.967 1.967 0 0 1 .2-.161 1.351 1.351 0 0 1 .224-.119 1.308 1.308 0 0 1 .244-.073 1.2 1.2 0 0 1 .509 0 1.262 1.262 0 0 1 .468.192 1.967 1.967 0 0 1 .2.161 1.326 1.326 0 0 1 .379.919 1.461 1.461 0 0 1-.026.255 1.323 1.323 0 0 1-.073.244 1.847 1.847 0 0 1-.119.223 1.911 1.911 0 0 1-.161.2 1.967 1.967 0 0 1-.2.161 1.294 1.294 0 0 1-.722.218",fillRule:"evenodd"}),r.createElement("g",{transform:"translate(466.3 278.56)",fill:"#61dafb"},r.createElement("path",{"data-name":"Path 330",d:"M263.668 117.179c0-5.827-7.3-11.35-18.487-14.775 2.582-11.4 1.434-20.477-3.622-23.382a7.861 7.861 0 0 0-4.016-1v4a4.152 4.152 0 0 1 2.044.466c2.439 1.4 3.5 6.724 2.672 13.574-.2 1.685-.52 3.461-.914 5.272a86.9 86.9 0 0 0-11.386-1.954 87.469 87.469 0 0 0-7.459-8.965c5.845-5.433 11.332-8.41 15.062-8.41V78c-4.931 0-11.386 3.514-17.913 9.611-6.527-6.061-12.982-9.539-17.913-9.539v4c3.712 0 9.216 2.959 15.062 8.356a84.687 84.687 0 0 0-7.405 8.947 83.732 83.732 0 0 0-11.4 1.972 54.136 54.136 0 0 1-.932-5.2c-.843-6.85.2-12.175 2.618-13.592a3.991 3.991 0 0 1 2.062-.466v-4a8 8 0 0 0-4.052 1c-5.039 2.9-6.168 11.96-3.568 23.328-11.153 3.443-18.415 8.947-18.415 14.757 0 5.828 7.3 11.35 18.487 14.775-2.582 11.4-1.434 20.477 3.622 23.382a7.882 7.882 0 0 0 4.034 1c4.931 0 11.386-3.514 17.913-9.611 6.527 6.061 12.982 9.539 17.913 9.539a8 8 0 0 0 4.052-1c5.039-2.9 6.168-11.96 3.568-23.328 11.111-3.42 18.373-8.943 18.373-14.752Zm-23.346-11.96a80.235 80.235 0 0 1-2.421 7.083 83.185 83.185 0 0 0-2.349-4.3 96.877 96.877 0 0 0-2.582-4.2c2.547.377 5.004.843 7.353 1.417Zm-8.212 19.1c-1.4 2.421-2.833 4.716-4.321 6.85a93.313 93.313 0 0 1-8.1.359c-2.708 0-5.415-.126-8.069-.341q-2.232-3.2-4.339-6.814-2.044-3.523-3.73-7.136a94.058 94.058 0 0 1 3.712-7.154c1.4-2.421 2.833-4.716 4.321-6.85a93.313 93.313 0 0 1 8.1-.359c2.708 0 5.415.126 8.069.341q2.232 3.2 4.339 6.814 2.044 3.523 3.73 7.136a101.198 101.198 0 0 1-3.712 7.15Zm5.792-2.331a76.525 76.525 0 0 1 2.474 7.136 80.22 80.22 0 0 1-7.387 1.434c.879-1.381 1.757-2.8 2.582-4.25a96.22 96.22 0 0 0 2.329-4.324Zm-18.182 19.128a73.921 73.921 0 0 1-4.985-5.738c1.614.072 3.263.126 4.931.126 1.685 0 3.353-.036 4.985-.126a69.993 69.993 0 0 1-4.931 5.738Zm-13.34-10.561c-2.546-.377-5-.843-7.352-1.417a80.235 80.235 0 0 1 2.421-7.083c.735 1.434 1.506 2.869 2.349 4.3s1.702 2.837 2.582 4.2Zm13.25-37.314a73.924 73.924 0 0 1 4.985 5.738 110.567 110.567 0 0 0-4.931-.126c-1.686 0-3.353.036-4.985.126a69.993 69.993 0 0 1 4.931-5.738ZM206.362 103.8a100.567 100.567 0 0 0-4.913 8.55 76.525 76.525 0 0 1-2.474-7.136 90.158 90.158 0 0 1 7.387-1.414Zm-16.227 22.449c-6.348-2.708-10.454-6.258-10.454-9.073s4.106-6.383 10.454-9.073c1.542-.663 3.228-1.255 4.967-1.811a86.122 86.122 0 0 0 4.034 10.92 84.9 84.9 0 0 0-3.981 10.866 53.804 53.804 0 0 1-5.021-1.826Zm9.647 25.623c-2.439-1.4-3.5-6.724-2.672-13.574.2-1.686.52-3.461.914-5.272a86.9 86.9 0 0 0 11.386 1.954 87.465 87.465 0 0 0 7.459 8.965c-5.845 5.433-11.332 8.41-15.062 8.41a4.279 4.279 0 0 1-2.026-.48Zm42.532-13.663c.843 6.85-.2 12.175-2.618 13.592a3.99 3.99 0 0 1-2.062.466c-3.712 0-9.216-2.959-15.062-8.356a84.689 84.689 0 0 0 7.405-8.947 83.731 83.731 0 0 0 11.4-1.972 50.194 50.194 0 0 1 .936 5.22Zm6.9-11.96c-1.542.663-3.228 1.255-4.967 1.811a86.12 86.12 0 0 0-4.034-10.92 84.9 84.9 0 0 0 3.981-10.866 56.777 56.777 0 0 1 5.039 1.829c6.348 2.708 10.454 6.258 10.454 9.073-.017 2.818-4.123 6.386-10.471 9.076Z"}),r.createElement("path",{"data-name":"Path 331",d:"M201.718 78.072Z"}),r.createElement("circle",{"data-name":"Ellipse 112",cx:8.194,cy:8.194,r:8.194,transform:"translate(211.472 108.984)"}),r.createElement("path",{"data-name":"Path 332",d:"M237.525 78.018Z"})))))}},14002:(e,a,t)=>{t.d(a,{Z:()=>S});var l,r,n,c,h,m,d,i,f,s,o,g,E,p,v,R,x,w,u,Z,M,y,P,b,q,V,A,H,G,N,O,_,j,k,z,D,F=t(67294);function C(){return C=Object.assign?Object.assign.bind():function(e){for(var a=1;a<arguments.length;a++){var t=arguments[a];for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&(e[l]=t[l])}return e},C.apply(this,arguments)}const S=e=>{let{title:a,titleId:t,...S}=e;return F.createElement("svg",C({xmlns:"http://www.w3.org/2000/svg",width:1129,height:663,viewBox:"0 0 1129 663","aria-labelledby":t},S),void 0===a?F.createElement("title",{id:t},"Focus on What Matters"):a?F.createElement("title",{id:t},a):null,l||(l=F.createElement("circle",{cx:321,cy:321,r:321,fill:"#f2f2f2"})),r||(r=F.createElement("ellipse",{cx:559,cy:635.5,rx:514,ry:27.5,fill:"#3f3d56"})),n||(n=F.createElement("ellipse",{cx:558,cy:627,rx:460,ry:22,opacity:.2})),c||(c=F.createElement("path",{fill:"#3f3d56",d:"M131 152.5h840v50H131z"})),h||(h=F.createElement("path",{d:"M131 608.83a21.67 21.67 0 0 0 21.67 21.67h796.66A21.67 21.67 0 0 0 971 608.83V177.5H131ZM949.33 117.5H152.67A21.67 21.67 0 0 0 131 139.17v38.33h840v-38.33a21.67 21.67 0 0 0-21.67-21.67Z",fill:"#3f3d56"})),m||(m=F.createElement("path",{d:"M949.33 117.5H152.67A21.67 21.67 0 0 0 131 139.17v38.33h840v-38.33a21.67 21.67 0 0 0-21.67-21.67Z",opacity:.2})),d||(d=F.createElement("circle",{cx:181,cy:147.5,r:13,fill:"#3f3d56"})),i||(i=F.createElement("circle",{cx:217,cy:147.5,r:13,fill:"#3f3d56"})),f||(f=F.createElement("circle",{cx:253,cy:147.5,r:13,fill:"#3f3d56"})),s||(s=F.createElement("rect",{x:168,y:213.5,width:337,height:386,rx:5.335,fill:"#606060"})),o||(o=F.createElement("rect",{x:603,y:272.5,width:284,height:22,rx:5.476,fill:"#2e8555"})),g||(g=F.createElement("rect",{x:537,y:352.5,width:416,height:15,rx:5.476,fill:"#2e8555"})),E||(E=F.createElement("rect",{x:537,y:396.5,width:416,height:15,rx:5.476,fill:"#2e8555"})),p||(p=F.createElement("rect",{x:537,y:440.5,width:416,height:15,rx:5.476,fill:"#2e8555"})),v||(v=F.createElement("rect",{x:537,y:484.5,width:416,height:15,rx:5.476,fill:"#2e8555"})),R||(R=F.createElement("rect",{x:865,y:552.5,width:88,height:26,rx:7.028,fill:"#3ecc5f"})),x||(x=F.createElement("path",{d:"M1053.103 506.116a30.114 30.114 0 0 0 3.983-15.266c0-13.797-8.544-24.98-19.083-24.98s-19.082 11.183-19.082 24.98a30.114 30.114 0 0 0 3.983 15.266 31.248 31.248 0 0 0 0 30.532 31.248 31.248 0 0 0 0 30.532 31.248 31.248 0 0 0 0 30.532 30.114 30.114 0 0 0-3.983 15.266c0 13.797 8.543 24.981 19.082 24.981s19.083-11.184 19.083-24.98a30.114 30.114 0 0 0-3.983-15.267 31.248 31.248 0 0 0 0-30.532 31.248 31.248 0 0 0 0-30.532 31.248 31.248 0 0 0 0-30.532Z",fill:"#3f3d56"})),w||(w=F.createElement("ellipse",{cx:1038.003,cy:460.318,rx:19.083,ry:24.981,fill:"#3f3d56"})),u||(u=F.createElement("ellipse",{cx:1038.003,cy:429.786,rx:19.083,ry:24.981,fill:"#3f3d56"})),Z||(Z=F.createElement("path",{d:"M1109.439 220.845a91.61 91.61 0 0 0 7.106-10.461l-50.14-8.235 54.228.403a91.566 91.566 0 0 0 1.746-72.426l-72.755 37.742 67.097-49.321A91.413 91.413 0 1 0 965.75 220.845a91.458 91.458 0 0 0-10.425 16.67l65.087 33.814-69.4-23.292a91.46 91.46 0 0 0 14.738 85.837 91.406 91.406 0 1 0 143.689 0 91.418 91.418 0 0 0 0-113.03Z",fill:"#3ecc5f",fillRule:"evenodd"})),M||(M=F.createElement("path",{d:"M946.188 277.36a91.013 91.013 0 0 0 19.562 56.514 91.406 91.406 0 1 0 143.689 0c12.25-15.553-163.25-66.774-163.25-56.515Z",opacity:.1})),y||(y=F.createElement("path",{d:"M330.12 342.936h111.474v45.12H330.12Z",fill:"#fff",fillRule:"evenodd"})),P||(P=F.createElement("path",{d:"M229.263 490.241a26.51 26.51 0 0 1-22.963-13.27 26.51 26.51 0 0 0 22.963 39.812h26.541V490.24Z",fill:"#3ecc5f",fillRule:"evenodd"})),b||(b=F.createElement("path",{d:"m348.672 350.07 92.922-5.807v-13.27a26.54 26.54 0 0 0-26.541-26.542H295.616l-3.318-5.746a3.83 3.83 0 0 0-6.635 0l-3.318 5.746-3.317-5.746a3.83 3.83 0 0 0-6.636 0l-3.317 5.746-3.318-5.746a3.83 3.83 0 0 0-6.635 0l-3.318 5.746c-.03 0-.056.004-.086.004l-5.497-5.495a3.83 3.83 0 0 0-6.407 1.717l-1.817 6.773-6.89-1.847a3.83 3.83 0 0 0-4.691 4.693l1.844 6.891-6.77 1.814a3.832 3.832 0 0 0-1.72 6.41l5.497 5.497c0 .028-.004.055-.004.085l-5.747 3.317a3.83 3.83 0 0 0 0 6.636l5.747 3.317-5.747 3.318a3.83 3.83 0 0 0 0 6.635l5.747 3.318-5.747 3.318a3.83 3.83 0 0 0 0 6.635l5.747 3.318-5.747 3.317a3.83 3.83 0 0 0 0 6.636l5.747 3.317-5.747 3.318a3.83 3.83 0 0 0 0 6.636l5.747 3.317-5.747 3.318a3.83 3.83 0 0 0 0 6.635l5.747 3.318-5.747 3.318a3.83 3.83 0 0 0 0 6.635l5.747 3.318-5.747 3.317a3.83 3.83 0 0 0 0 6.636l5.747 3.317-5.747 3.318a3.83 3.83 0 0 0 0 6.635l5.747 3.318-5.747 3.318a3.83 3.83 0 0 0 0 6.635l5.747 3.318-5.747 3.317a3.83 3.83 0 0 0 0 6.636l5.747 3.317-5.747 3.318a3.83 3.83 0 0 0 0 6.635l5.747 3.318a26.54 26.54 0 0 0 26.541 26.542h159.249a26.54 26.54 0 0 0 26.541-26.542V384.075l-92.922-5.807a14.126 14.126 0 0 1 0-28.197",fill:"#3ecc5f",fillRule:"evenodd"})),q||(q=F.createElement("path",{d:"M388.511 516.783h39.812V463.7h-39.812Z",fill:"#3ecc5f",fillRule:"evenodd"})),V||(V=F.createElement("path",{d:"M454.865 483.606a6.602 6.602 0 0 0-.848.085c-.05-.2-.099-.4-.154-.599a6.627 6.627 0 1 0-6.557-11.382q-.22-.225-.445-.446a6.624 6.624 0 1 0-11.397-6.564c-.196-.055-.394-.102-.59-.152a6.64 6.64 0 1 0-13.101 0c-.197.05-.394.097-.59.152a6.628 6.628 0 1 0-11.398 6.564 26.528 26.528 0 1 0 44.232 25.528 6.621 6.621 0 1 0 .848-13.186",fill:"#44d860",fillRule:"evenodd"})),A||(A=F.createElement("path",{d:"M401.782 437.158h39.812v-26.541h-39.812Z",fill:"#3ecc5f",fillRule:"evenodd"})),H||(H=F.createElement("path",{d:"M454.865 427.205a3.318 3.318 0 0 0 0-6.635 3.411 3.411 0 0 0-.424.042c-.026-.1-.049-.199-.077-.298a3.319 3.319 0 0 0-1.278-6.38 3.282 3.282 0 0 0-2 .688q-.11-.113-.224-.223a3.282 3.282 0 0 0 .672-1.983 3.318 3.318 0 0 0-6.37-1.299 13.27 13.27 0 1 0 0 25.541 3.318 3.318 0 0 0 6.37-1.3 3.282 3.282 0 0 0-.672-1.982q.114-.11.223-.223a3.282 3.282 0 0 0 2.001.688 3.318 3.318 0 0 0 1.278-6.38c.028-.098.05-.199.077-.298a3.413 3.413 0 0 0 .424.042",fill:"#44d860",fillRule:"evenodd"})),G||(G=F.createElement("path",{d:"M282.345 347.581a3.318 3.318 0 0 1-3.317-3.318 9.953 9.953 0 1 0-19.906 0 3.318 3.318 0 1 1-6.636 0 16.588 16.588 0 1 1 33.177 0 3.318 3.318 0 0 1-3.318 3.318",fillRule:"evenodd"})),N||(N=F.createElement("path",{d:"M335.428 516.783h79.625a26.54 26.54 0 0 0 26.541-26.542v-92.895H361.97a26.54 26.54 0 0 0-26.542 26.542Z",fill:"#ffff50",fillRule:"evenodd"})),O||(O=F.createElement("path",{d:"M421.714 438.485h-66.406a1.327 1.327 0 0 1 0-2.654h66.406a1.327 1.327 0 0 1 0 2.654m0 26.542h-66.406a1.327 1.327 0 1 1 0-2.654h66.406a1.327 1.327 0 0 1 0 2.654m0 26.541h-66.406a1.327 1.327 0 1 1 0-2.654h66.406a1.327 1.327 0 0 1 0 2.654m0-66.106h-66.406a1.327 1.327 0 0 1 0-2.655h66.406a1.327 1.327 0 0 1 0 2.655m0 26.294h-66.406a1.327 1.327 0 0 1 0-2.654h66.406a1.327 1.327 0 0 1 0 2.654m0 26.542h-66.406a1.327 1.327 0 0 1 0-2.655h66.406a1.327 1.327 0 0 1 0 2.655m19.88-122.607c-.016 0-.03-.008-.045-.007-4.1.14-6.04 4.241-7.753 7.86-1.786 3.783-3.168 6.242-5.432 6.167-2.506-.09-3.94-2.922-5.458-5.918-1.744-3.443-3.734-7.347-7.913-7.201-4.042.138-5.99 3.708-7.706 6.857-1.828 3.355-3.071 5.394-5.47 5.3-2.557-.093-3.916-2.395-5.488-5.06-1.753-2.967-3.78-6.304-7.878-6.19-3.973.137-5.925 3.166-7.648 5.84-1.822 2.826-3.098 4.549-5.527 4.447-2.618-.093-3.97-2.004-5.535-4.216-1.757-2.486-3.737-5.3-7.823-5.163-3.886.133-5.838 2.615-7.56 4.802-1.634 2.075-2.91 3.718-5.611 3.615a1.328 1.328 0 1 0-.096 2.654c4.004.134 6.032-2.389 7.793-4.628 1.562-1.985 2.91-3.698 5.564-3.789 2.556-.108 3.754 1.48 5.567 4.041 1.721 2.434 3.675 5.195 7.606 5.337 4.118.138 6.099-2.94 7.853-5.663 1.569-2.434 2.923-4.535 5.508-4.624 2.38-.088 3.674 1.792 5.5 4.885 1.722 2.916 3.671 6.22 7.68 6.365 4.147.143 6.15-3.477 7.895-6.682 1.511-2.77 2.938-5.388 5.466-5.475 2.38-.056 3.62 2.116 5.456 5.746 1.714 3.388 3.658 7.226 7.73 7.373l.224.004c4.066 0 5.996-4.08 7.704-7.689 1.511-3.198 2.942-6.21 5.397-6.334Z",fillRule:"evenodd"})),_||(_=F.createElement("path",{d:"M308.887 516.783h53.083V463.7h-53.083Z",fill:"#3ecc5f",fillRule:"evenodd"})),j||(j=F.createElement("path",{d:"M388.511 483.606a6.602 6.602 0 0 0-.848.085c-.05-.2-.098-.4-.154-.599a6.627 6.627 0 1 0-6.557-11.382q-.22-.225-.444-.446a6.624 6.624 0 1 0-11.397-6.564c-.197-.055-.394-.102-.59-.152a6.64 6.64 0 1 0-13.102 0c-.196.05-.394.097-.59.152a6.628 6.628 0 1 0-11.397 6.564 26.528 26.528 0 1 0 44.231 25.528 6.621 6.621 0 1 0 .848-13.186",fill:"#44d860",fillRule:"evenodd"})),k||(k=F.createElement("path",{d:"M308.887 437.158h53.083v-26.541h-53.083Z",fill:"#3ecc5f",fillRule:"evenodd"})),z||(z=F.createElement("path",{d:"M375.24 427.205a3.318 3.318 0 1 0 0-6.635 3.411 3.411 0 0 0-.423.042c-.026-.1-.05-.199-.077-.298a3.319 3.319 0 0 0-1.278-6.38 3.282 3.282 0 0 0-2.001.688q-.11-.113-.223-.223a3.282 3.282 0 0 0 .671-1.983 3.318 3.318 0 0 0-6.37-1.299 13.27 13.27 0 1 0 0 25.541 3.318 3.318 0 0 0 6.37-1.3 3.282 3.282 0 0 0-.671-1.982q.113-.11.223-.223a3.282 3.282 0 0 0 2.001.688 3.318 3.318 0 0 0 1.278-6.38c.028-.098.05-.199.077-.298a3.413 3.413 0 0 0 .423.042",fill:"#44d860",fillRule:"evenodd"})),D||(D=F.createElement("path",{d:"M388.511 329.334a3.603 3.603 0 0 1-.65-.067 3.344 3.344 0 0 1-.624-.185 3.447 3.447 0 0 1-.572-.306 5.027 5.027 0 0 1-.504-.411 3.887 3.887 0 0 1-.41-.504 3.275 3.275 0 0 1-.558-1.845 3.602 3.602 0 0 1 .067-.65 3.826 3.826 0 0 1 .184-.624 3.489 3.489 0 0 1 .307-.57 3.197 3.197 0 0 1 .914-.916 3.447 3.447 0 0 1 .572-.305 3.344 3.344 0 0 1 .624-.186 3.07 3.07 0 0 1 1.3 0 3.223 3.223 0 0 1 1.195.49 5.028 5.028 0 0 1 .504.412 4.88 4.88 0 0 1 .411.504 3.382 3.382 0 0 1 .306.571 3.478 3.478 0 0 1 .252 1.274 3.364 3.364 0 0 1-.969 2.349 5.027 5.027 0 0 1-.504.411 3.306 3.306 0 0 1-1.845.558m26.542-1.66a3.388 3.388 0 0 1-2.35-.968 5.042 5.042 0 0 1-.41-.504 3.275 3.275 0 0 1-.558-1.845 3.387 3.387 0 0 1 .967-2.349 5.026 5.026 0 0 1 .505-.411 3.447 3.447 0 0 1 .572-.305 3.343 3.343 0 0 1 .623-.186 3.07 3.07 0 0 1 1.3 0 3.224 3.224 0 0 1 1.195.49 5.026 5.026 0 0 1 .504.412 3.388 3.388 0 0 1 .97 2.35 3.726 3.726 0 0 1-.067.65 3.374 3.374 0 0 1-.186.623 4.715 4.715 0 0 1-.305.57 4.88 4.88 0 0 1-.412.505 5.026 5.026 0 0 1-.504.412 3.305 3.305 0 0 1-1.844.557",fillRule:"evenodd"})))}},53261:(e,a,t)=>{t.r(a),t.d(a,{default:()=>v});var l=t(67294),r=t(86010),n=t(39960),c=t(52263),h=t(16963),m=t(87462);const d="features_t9lD",i="featureSvg_GfXr",f=[{title:"Easy to Use",Svg:t(9722).Z,description:l.createElement(l.Fragment,null,"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.")},{title:"Focus on What Matters",Svg:t(14002).Z,description:l.createElement(l.Fragment,null,"Docusaurus lets you focus on your docs, and we'll do the chores. Go ahead and move your docs into the ",l.createElement("code",null,"docs")," directory.")},{title:"Powered by React",Svg:t(88066).Z,description:l.createElement(l.Fragment,null,"Extend or customize your website layout by reusing React. Docusaurus can be extended while reusing the same header and footer.")}];function s(e){let{Svg:a,title:t,description:n}=e;return l.createElement("div",{className:(0,r.Z)("col col--4")},l.createElement("div",{className:"text--center"},l.createElement(a,{className:i,role:"img"})),l.createElement("div",{className:"text--center padding-horiz--md"},l.createElement("h3",null,t),l.createElement("p",null,n)))}function o(){return l.createElement("section",{className:d},l.createElement("div",{className:"container"},l.createElement("div",{className:"row"},f.map(((e,a)=>l.createElement(s,(0,m.Z)({key:a},e)))))))}const g="heroBanner_qdFl",E="buttons_AeoN";function p(){const{siteConfig:e}=(0,c.Z)();return l.createElement("header",{className:(0,r.Z)("hero hero--primary",g)},l.createElement("div",{className:"container"},l.createElement("h1",{className:"hero__title"},e.title),l.createElement("p",{className:"hero__subtitle"},e.tagline),l.createElement("div",{className:E},l.createElement(n.Z,{className:"button button--secondary button--lg",to:"/docs"},"Docusaurus Tutorial - 5min \u23f1\ufe0f"))))}function v(){const{siteConfig:e}=(0,c.Z)();return l.createElement(h.Z,{title:`Hello from ${e.title}`,description:"Description will go into a meta tag in <head />"},l.createElement(p,null),l.createElement("main",null,l.createElement(o,null)))}}}]); \ No newline at end of file diff --git a/docs/assets/js/c52764ec.6e443e42.js b/docs/assets/js/c52764ec.6e443e42.js new file mode 100644 index 000000000..d19b3a48b --- /dev/null +++ b/docs/assets/js/c52764ec.6e443e42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2653],{46492:t=>{t.exports=JSON.parse('{"title":"Getting started","description":"5 minutes to learn the most important Odra concepts.","slug":"/category/getting-started","permalink":"/docs/0.6.0/category/getting-started","navigation":{"previous":{"title":"Odra framework","permalink":"/docs/0.6.0/"},"next":{"title":"Installation","permalink":"/docs/0.6.0/getting-started/installation"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/c5296eae.9725cc06.js b/docs/assets/js/c5296eae.9725cc06.js new file mode 100644 index 000000000..8ef62e6c1 --- /dev/null +++ b/docs/assets/js/c5296eae.9725cc06.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5396],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,f=u["".concat(i,".").concat(m)]||u[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var c=2;c<s;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},49944:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:10,description:"Contracts calling contracts"},o="Cross calls",l={unversionedId:"basics/cross-calls",id:"version-0.2.0/basics/cross-calls",title:"Cross calls",description:"Contracts calling contracts",source:"@site/versioned_docs/version-0.2.0/basics/10-cross-calls.md",sourceDirName:"basics",slug:"/basics/cross-calls",permalink:"/docs/0.2.0/basics/cross-calls",draft:!1,tags:[],version:"0.2.0",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Contracts calling contracts"},sidebar:"defaultSidebar",previous:{title:"Events",permalink:"/docs/0.2.0/basics/events"},next:{title:"Modules",permalink:"/docs/0.2.0/basics/modules"}},i={},c=[{value:"Contract Ref",id:"contract-ref",level:2},{value:"Testing",id:"testing",level:2}],d={toc:c};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cross-calls"},"Cross calls"),(0,r.kt)("p",null,"To show how to handle calls between contracts, first, let's implement two of them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"use odra::Variable;\nuse odra::types::{Address};\n\n#[odra::module]\npub struct CrossContract {\n pub math_engine: Variable<Address>,\n}\n\n#[odra::module]\nimpl CrossContract {\n #[odra(init)]\n pub fn init(&mut self, math_engine_address: Address) {\n self.math_engine.set(math_engine_address);\n }\n\n pub fn add_using_another(&self) -> u32 {\n let math_engine_address = self.math_engine.get().unwrap();\n MathEngineRef::at(math_engine_address).add(3, 5)\n }\n}\n\n#[odra::module]\npub struct MathEngine {\n}\n\n#[odra::module]\nimpl MathEngine {\n pub fn add(&self, n1: u32, n2: u32) -> u32 {\n n1 + n2\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract can add two numbers. ",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," takes an ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," in its init function and saves it in\nstorage for later use. If we deploy the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," first and take note of its address, we can then deploy\n",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," and use ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," to perform complicated calculations for us!"),(0,r.kt)("p",null,"To call the external contract, we use the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," that was created for us by Odra:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"MathEngineRef::at(math_engine_address).add(3, 5)\n")),(0,r.kt)("h2",{id:"contract-ref"},"Contract Ref"),(0,r.kt)("p",null,"We mentioned ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," already in our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.2.0/basics/testing"},"Testing")," article.\nIt is a reference to already deployed - running contract.\nHere we are going to take a deeper look at it."),(0,r.kt)("p",null,"Similarly to a ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," is generated automatically, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nTo get an instance of a reference, we can either deploy a contract (using ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),") or by building it\ndirectly, using ",(0,r.kt)("inlineCode",{parentName:"p"},"::at(address: Address)")," method, as shown above.\nThe reference implements all the public endpoints to the contract (those marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),"\nimpl), alongside couple methods:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"at(Address) -> Self")," - points the reference to an Address"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"address() -> Address")," - returns the Address the reference is currently pointing at"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"with_tokens(Amount) -> Self")," - attaches Amount of native tokens to the next call")),(0,r.kt)("h1",{id:"external-contracts"},"External Contracts"),(0,r.kt)("p",null,"Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI."),(0,r.kt)("p",null,"For that purpose, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra:external_contract]")," macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of."),(0,r.kt)("p",null,"Let's pretend the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," we defined is an external contract. There is a contract with ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function that adds two numbers somewhere."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"#[odra::external_contract]\npub trait Adder {\n fn add(&self, n1: u32, n2: u32) -> u32;\n}\n")),(0,r.kt)("p",null,"Analogously to modules, Odra creates the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderRef")," struct (but do not create the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderDeployer"),"). Having an address we can call:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"AdderRef::at(address).add(3, 5)\n")),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Let's see how we can test our cross calls using this knowledge:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"use super::{CrossContractDeployer, MathEngineDeployer};\n\n#[test]\nfn test_cross_calls() {\n let math_engine_contract = MathEngineDeployer::default();\n let cross_contract = CrossContractDeployer::init(math_engine_contract.address());\n\n assert_eq!(cross_contract.add_using_another(), 8);\n}\n")),(0,r.kt)("p",null,"Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function we want to use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"#[cfg(test)]\nmod tests {\n use odra::types::Address;\n use crate::docs::cross_calls::{Adder, AdderRef};\n \n #[test]\n fn test_ext() {\n let adder = AdderRef::at(get_adder_address());\n\n assert_eq!(adder.add(1, 2), 3);\n }\n\n fn get_adder_address() -> Address {\n let contract = MathEngineDeployer::default();\n contract.address()\n }\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c52d4d42.30a89473.js b/docs/assets/js/c52d4d42.30a89473.js new file mode 100644 index 000000000..805a12397 --- /dev/null +++ b/docs/assets/js/c52d4d42.30a89473.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7227],{3905:(e,r,n)=>{n.d(r,{Zo:()=>u,kt:()=>m});var t=n(67294);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?o(Object(n),!0).forEach((function(r){a(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,a=function(e,r){if(null==e)return{};var n,t,a={},o=Object.keys(e);for(t=0;t<o.length;t++)n=o[t],r.indexOf(n)>=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)n=o[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=t.createContext({}),c=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},u=function(e){var r=c(e.components);return t.createElement(l.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,f=d["".concat(l,".").concat(m)]||d[m]||p[m]||o;return n?t.createElement(f,s(s({ref:r},u),{},{components:n})):t.createElement(f,s({ref:r},u))}));function m(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return t.createElement.apply(null,s)}return t.createElement.apply(null,n)}d.displayName="MDXCreateElement"},38008:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var t=n(87462),a=(n(67294),n(3905));const o={sidebar_position:8,description:"Causing and handling errors"},s="Errors",i={unversionedId:"basics/errors",id:"version-0.6.0/basics/errors",title:"Errors",description:"Causing and handling errors",source:"@site/versioned_docs/version-0.6.0/basics/08-errors.md",sourceDirName:"basics",slug:"/basics/errors",permalink:"/docs/0.6.0/basics/errors",draft:!1,tags:[],version:"0.6.0",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"Causing and handling errors"},sidebar:"tutorialSidebar",previous:{title:"Testing",permalink:"/docs/0.6.0/basics/testing"},next:{title:"Events",permalink:"/docs/0.6.0/basics/events"}},l={},c=[{value:"Testing errors",id:"testing-errors",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function p(e){let{components:r,...n}=e;return(0,a.kt)("wrapper",(0,t.Z)({},u,n,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"errors"},"Errors"),(0,a.kt)("p",null,"Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the\nfollowing example of a simple owned contract:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"use odra::{execution_error, Variable, UnwrapOrRevert};\nuse odra::types::Address;\n\n#[odra::module]\npub struct OwnedContract {\n name: Variable<String>,\n owner: Variable<Address>,\n}\n\nexecution_error! {\n pub enum Error {\n OwnerNotSet => 1,\n NotAnOwner => 2,\n }\n}\n\n\n#[odra::module]\nimpl OwnedContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.owner.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn owner(&self) -> Address {\n self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n }\n\n pub fn change_name(&mut self, name: String) {\n let caller = odra::contract_env::caller();\n if caller != self.owner() {\n odra::contract_env::revert(Error::NotAnOwner)\n }\n\n self.name.set(name);\n }\n}\n")),(0,a.kt)("p",null,"Firstly, we are using ",(0,a.kt)("inlineCode",{parentName:"p"},"execution_error!")," macro to define our own set of Errors that our contract will\nthrow. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use\n",(0,a.kt)("inlineCode",{parentName:"p"},"unwrap_or_revert_with")," and pass an error as an argument:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n")),(0,a.kt)("p",null,"You and the users of your contract will be thankful for a meaningful error message!"),(0,a.kt)("p",null,"You can also throw the error directly, by using ",(0,a.kt)("inlineCode",{parentName:"p"},"revert"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"odra::contract_env::revert(Error::NotAnOwner)\n")),(0,a.kt)("h2",{id:"testing-errors"},"Testing errors"),(0,a.kt)("p",null,"Okay, but how about testing it? We've already mentioned a function - ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_exception"),". This is how you will\nuse it:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},'use super::{OwnedContractDeployer, OwnedContractRef};\nuse super::Error;\n\n#[test]\nfn test_owner_error() {\n let owner = odra::test_env::get_account(0);\n let not_an_owner = odra::test_env::get_account(1);\n\n odra::test_env::set_caller(owner);\n let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());\n\n odra::test_env::set_caller(not_an_owner);\n odra::test_env::assert_exception(Error::NotAnOwner, || {\n owned_contract.change_name("NewName".to_string());\n })\n}\n')),(0,a.kt)("p",null,"In the example above, because we are calling the ",(0,a.kt)("inlineCode",{parentName:"p"},"change_name"),' method as an address which is not an "owner",\nwe are expecting that "NotAnOwner" error will be thrown.'),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Here we are creating another reference to the already deployed contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"OwnedContractRef::at()")," and passing to it\nits Address. Note that ",(0,a.kt)("inlineCode",{parentName:"p"},"OwnedContractDeployer::init()")," returns the same type.")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will learn how to emit and test events using Odra."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c5cef920.0d511cf5.js b/docs/assets/js/c5cef920.0d511cf5.js new file mode 100644 index 000000000..18162f21a --- /dev/null +++ b/docs/assets/js/c5cef920.0d511cf5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8590],{3905:(e,r,n)=>{n.d(r,{Zo:()=>p,kt:()=>m});var t=n(67294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?a(Object(n),!0).forEach((function(r){o(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,o=function(e,r){if(null==e)return{};var n,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=t.createContext({}),c=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},p=function(e){var r=c(e.components);return t.createElement(l.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=o,w=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return n?t.createElement(w,s(s({ref:r},p),{},{components:n})):t.createElement(w,s({ref:r},p))}));function m(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,s[1]=i;for(var c=2;c<a;c++)s[c]=n[c];return t.createElement.apply(null,s)}return t.createElement.apply(null,n)}d.displayName="MDXCreateElement"},62467:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=n(87462),o=(n(67294),n(3905));const a={sidebar_position:8,description:"Causing and handling errors"},s="Errors",i={unversionedId:"basics/errors",id:"version-0.3.0/basics/errors",title:"Errors",description:"Causing and handling errors",source:"@site/versioned_docs/version-0.3.0/basics/08-errors.md",sourceDirName:"basics",slug:"/basics/errors",permalink:"/docs/0.3.0/basics/errors",draft:!1,tags:[],version:"0.3.0",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"Causing and handling errors"},sidebar:"defaultSidebar",previous:{title:"Testing",permalink:"/docs/0.3.0/basics/testing"},next:{title:"Events",permalink:"/docs/0.3.0/basics/events"}},l={},c=[{value:"Testing errors",id:"testing-errors",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:r,...n}=e;return(0,o.kt)("wrapper",(0,t.Z)({},p,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"errors"},"Errors"),(0,o.kt)("p",null,"Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the\nfollowing example of a simple owned contract:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"use odra::{execution_error, Variable, UnwrapOrRevert};\nuse odra::types::Address;\n\n#[odra::module]\npub struct OwnedContract {\n name: Variable<String>,\n owner: Variable<Address>,\n}\n\nexecution_error! {\n pub enum Error {\n OwnerNotSet => 1,\n NotAnOwner => 2,\n }\n}\n\n\n#[odra::module]\nimpl OwnedContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.owner.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn owner(&self) -> Address {\n self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n }\n\n pub fn change_name(&mut self, name: String) {\n let caller = odra::contract_env::caller();\n if caller != self.owner() {\n odra::contract_env::revert(Error::NotAnOwner)\n }\n\n self.name.set(name);\n }\n}\n")),(0,o.kt)("p",null,"Firstly, we are using ",(0,o.kt)("inlineCode",{parentName:"p"},"execution_error!")," macro to define our own set of Errors that our contract will\nthrow. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use\n",(0,o.kt)("inlineCode",{parentName:"p"},"unwrap_or_revert_with")," and pass an error as an argument:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n")),(0,o.kt)("p",null,"You and the users of your contract will be thankful for a meaningful error message!"),(0,o.kt)("p",null,"You can also throw the error directly, by using ",(0,o.kt)("inlineCode",{parentName:"p"},"revert"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},"odra::contract_env::revert(Error::NotAnOwner)\n")),(0,o.kt)("h2",{id:"testing-errors"},"Testing errors"),(0,o.kt)("p",null,"Okay, but how about testing it? We've already mentioned a function - ",(0,o.kt)("inlineCode",{parentName:"p"},"assert_exception"),". This is how you will\nuse it:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/errors.rs"',title:'"examples/src/docs/errors.rs"'},'use super::{OwnedContractDeployer, OwnedContractRef};\nuse super::Error;\n\n#[test]\nfn test_owner_error() {\n let owner = odra::test_env::get_account(0);\n let not_an_owner = odra::test_env::get_account(1);\n\n odra::test_env::set_caller(owner);\n let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());\n\n odra::test_env::set_caller(not_an_owner);\n odra::test_env::assert_exception(Error::NotAnOwner, || {\n let mut owned_contract = OwnedContractRef::at(owned_contract.address());\n owned_contract.change_name("NewName".to_string());\n })\n}\n')),(0,o.kt)("p",null,"In the example above, because we are calling the ",(0,o.kt)("inlineCode",{parentName:"p"},"change_name"),' method as an address which is not an "owner",\nwe are expecting that "NotAnOwner" error will be thrown.'),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Here we are creating another reference to the already deployed contract using ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedContractRef::at()")," and passing to it\nits Address. Note that ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedContractDeployer::init()")," returns the same type.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will learn how to emit and test events using Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c5f43526.6560bfcd.js b/docs/assets/js/c5f43526.6560bfcd.js new file mode 100644 index 000000000..142ee4300 --- /dev/null +++ b/docs/assets/js/c5f43526.6560bfcd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2037],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},50605:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:2,description:"Files and folders in the Odra project"},i="Directory structure",l={unversionedId:"basics/directory-structure",id:"version-0.3.1/basics/directory-structure",title:"Directory structure",description:"Files and folders in the Odra project",source:"@site/versioned_docs/version-0.3.1/basics/02-directory-structure.md",sourceDirName:"basics",slug:"/basics/directory-structure",permalink:"/docs/0.3.1/basics/directory-structure",draft:!1,tags:[],version:"0.3.1",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Files and folders in the Odra project"},sidebar:"tutorialSidebar",previous:{title:"Cargo Odra",permalink:"/docs/0.3.1/basics/cargo-odra"},next:{title:"Odra.toml",permalink:"/docs/0.3.1/basics/odra-toml"}},s={},c=[{value:"Cargo.toml",id:"cargotoml",level:2},{value:"Odra.toml",id:"odratoml",level:2},{value:".builder_* folders",id:"builder_-folders",level:2},{value:"src/",id:"src",level:2},{value:"target/",id:"target",level:2},{value:"wasm/",id:"wasm",level:2}],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"directory-structure"},"Directory structure"),(0,a.kt)("p",null,"After creating a new project using Odra and running the tests, you will be presented with the\nfollowing files and directories:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 CHANGELOG.md\n\u251c\u2500\u2500 Odra.toml\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 .builder_casper/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 flipper.rs\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 target/\n\u2514\u2500\u2500 wasm/\n")),(0,a.kt)("h2",{id:"cargotoml"},"Cargo.toml"),(0,a.kt)("p",null,"Let's first take a look at ",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "sample"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,a.kt)("p",null,"By default, your project will use the latest odra version available at crates.io. We are using two features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/mock-vm")," - it is responsible for running tests on Odra's MockVM"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/casper")," - backend implementation of Casper blockchain\nMore backends will be released as features that will be possible to enable here.")),(0,a.kt)("h2",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"This is the file that holds information about contracts that will be generated when running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"As we can see, we have a single contract, its ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) corresponds to\nthe contract is located in ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),".\nMore contracts can be added here by hand, or by using ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command."),(0,a.kt)("h2",{id:"builder_-folders"},".builder_* folders"),(0,a.kt)("p",null,"Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary\nfor building wasm files and running them against blockchain VMs. As it is not necessary to modify\nfiles in those folders in any way, by default they are hidden (hence the ",(0,a.kt)("inlineCode",{parentName:"p"},".")," at the beginning of the\nfolder name)."),(0,a.kt)("h2",{id:"src"},"src/"),(0,a.kt)("p",null,"This is the folder where your smart contract files live."),(0,a.kt)("h2",{id:"target"},"target/"),(0,a.kt)("p",null,"Files generated by cargo during the build process are put here."),(0,a.kt)("h2",{id:"wasm"},"wasm/"),(0,a.kt)("p",null,"WASM files generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," are put here. You can grab those WASM files\nand deploy them on the blockchain of your choosing."),(0,a.kt)("h1",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now, let's take a look at one of the files mentioned above in more detail,\nnamely the ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c6385d27.ccf0ac8d.js b/docs/assets/js/c6385d27.ccf0ac8d.js new file mode 100644 index 000000000..c0d2e5f95 --- /dev/null +++ b/docs/assets/js/c6385d27.ccf0ac8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5579],{48187:e=>{e.exports=JSON.parse('{"title":"Advanced","description":"Advanced concepts of Odra Framework","slug":"/category/advanced","permalink":"/docs/0.6.0/category/advanced","navigation":{"previous":{"title":"Native token","permalink":"/docs/0.6.0/basics/native-token"},"next":{"title":"Module reusing","permalink":"/docs/0.6.0/advanced/using"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/c705646d.e790d100.js b/docs/assets/js/c705646d.e790d100.js new file mode 100644 index 000000000..e43dbe856 --- /dev/null +++ b/docs/assets/js/c705646d.e790d100.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6489],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=a,h=p["".concat(l,".").concat(m)]||p[m]||d[m]||o;return n?r.createElement(h,s(s({ref:t},u),{},{components:n})):r.createElement(h,s({ref:t},u))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},65350:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:7,description:"How to write tests in Odra"},s="Testing",i={unversionedId:"basics/testing",id:"version-0.6.0/basics/testing",title:"Testing",description:"How to write tests in Odra",source:"@site/versioned_docs/version-0.6.0/basics/07-testing.md",sourceDirName:"basics",slug:"/basics/testing",permalink:"/docs/0.6.0/basics/testing",draft:!1,tags:[],version:"0.6.0",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"How to write tests in Odra"},sidebar:"tutorialSidebar",previous:{title:"Host Communication",permalink:"/docs/0.6.0/basics/communicating-with-host"},next:{title:"Errors",permalink:"/docs/0.6.0/basics/errors"}},l={},c=[{value:"Test env",id:"test-env",level:2},{value:"Deployer",id:"deployer",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write\nregular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the\nprevious article:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},'use odra::{Variable, List};\n\n#[cfg(test)]\nmod tests {\n use super::DogContract3Deployer;\n\n #[test]\n fn init_test() {\n let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n assert_eq!(dog_contract.walks_amount(), 0);\n assert_eq!(dog_contract.walks_total_length(), 0);\n dog_contract.walk_the_dog(5);\n dog_contract.walk_the_dog(10);\n assert_eq!(dog_contract.walks_amount(), 2);\n assert_eq!(dog_contract.walks_total_length(), 15);\n }\n}\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(module)]")," macro created a Deployer code for us, which will deploy the contract on the\nVM:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},'let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n')),(0,a.kt)("p",null,"From now on, we can use ",(0,a.kt)("inlineCode",{parentName:"p"},"dog_contract")," to interact with our deployed contract - in particular, all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from the impl section that was annotated with a macro are available to us:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/storage/list.rs"',title:'"examples/src/features/storage/list.rs"'},"// Impl\npub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n}\n\n...\n\n// Test\ndog_contract.walk_the_dog(5);\n")),(0,a.kt)("h2",{id:"test-env"},"Test env"),(0,a.kt)("p",null,"Odra gives us some additional functions that we can use to communicate with the host (outside the contract context)\nand to configure how the contracts are deployed and called. Let's revisit the example from the previous\narticle about host communication and implement the tests that prove it works:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/testing.rs"',title:'"examples/src/features/testing.rs"'},'#[cfg(test)]\nmod tests {\n use super::TestingContractDeployer;\n\n #[test]\n fn test_env() {\n let testing_contract = TestingContractDeployer::init("MyContract".to_string());\n let creator = testing_contract.created_by();\n odra::test_env::set_caller(odra::test_env::get_account(1));\n let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());\n let creator2 = testing_contract2.created_by();\n assert!(creator != creator2);\n }\n}\n')),(0,a.kt)("p",null,"In the code above, we are deploying two instances of the same contract, but we're using ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::test_env::set_caller"),"\nto change the caller - so the Address which is deploying the contract. This changes the result of the ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::contract_env::caller()"),"\nthe function we are calling inside the contract."),(0,a.kt)("p",null,"Each test env comes with a set of functions that will let you write better tests:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn set_caller(address: Address)")," - you've seen it in action just now"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn token_balance(address: Address) -> Balance")," - it returns the balance of the account associated with the given address"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn advance_block_time_by(seconds: BlockTime)")," - it increases the current value of block_time"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_account(n: usize) -> Address")," - it returns an nth address that was prepared for you by Odra in advance;\nby default, you start with the 0th account"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn assert_exception<F, E>(err: E, block: F)")," - it executes the ",(0,a.kt)("inlineCode",{parentName:"li"},"block")," code and expects ",(0,a.kt)("inlineCode",{parentName:"li"},"err")," to happen"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError>")," - returns\nthe event emitted by the contract")),(0,a.kt)("p",null,"Again, we'll see those used in the next articles."),(0,a.kt)("h2",{id:"deployer"},"Deployer"),(0,a.kt)("p",null,"You may be wondering what is the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractDeployer")," and where did it come from.\nIt is a piece of code generated automatically for you, thanks to the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nIf you used the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," on one of the methods, it will be the constructor of your contract.\nOdra will make sure that it is called only once, so you can use it to initialize your data structures etc."),(0,a.kt)("p",null,"If you do not provide the init method, you can deploy the contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"::default()")," method.\nIn the end, you will get a ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," instance (in our case the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractRef"),") which reimplements all\nthe methods you defined in the contract, but executes them on a blockchain!"),(0,a.kt)("p",null,"To learn more about the ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," contract, visit the ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/cross-calls"},"Cross calls")," article."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We take a look at how Odra handles errors!"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c714b9ee.c599700c.js b/docs/assets/js/c714b9ee.c599700c.js new file mode 100644 index 000000000..835bab0ae --- /dev/null +++ b/docs/assets/js/c714b9ee.c599700c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6105],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),h=a,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(k,i(i({ref:t},d),{},{components:n})):r.createElement(k,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},91651:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},i="MockVM",c={unversionedId:"backends/mock-vm",id:"version-0.2.0/backends/mock-vm",title:"MockVM",description:"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing",source:"@site/versioned_docs/version-0.2.0/backends/02-mock-vm.md",sourceDirName:"backends",slug:"/backends/mock-vm",permalink:"/docs/0.2.0/backends/mock-vm",draft:!1,tags:[],version:"0.2.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"What is a backend?",permalink:"/docs/0.2.0/backends/what-is-a-backend"},next:{title:"Casper",permalink:"/docs/0.2.0/backends/casper"}},s={},l=[{value:"Usage",id:"usage",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Execution",id:"execution",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mockvm"},"MockVM"),(0,a.kt)("p",null,"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing\nthe code written in Odra without compiling the contract to the target architecture and spinning up the\nblockchain."),(0,a.kt)("p",null,"Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler."),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The MockVM is the default backend for Odra framework, so each time you run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,a.kt)("p",null,"You are running your code against it."),(0,a.kt)("h2",{id:"architecture"},"Architecture"),(0,a.kt)("p",null,"MockVM consists of two main parts: the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," and the ",(0,a.kt)("inlineCode",{parentName:"p"},"State"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," is just a list of contracts deployed onto the MockVM, identified by an ",(0,a.kt)("inlineCode",{parentName:"p"},"Address"),".\nEach time we call the contract, we call its instance stored in the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register"),"."),(0,a.kt)("p",null,"Contracts and Test Env functions can modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"State")," of the MockVM."),(0,a.kt)("p",null,'Contrary to the "real" backend, which holds the whole history of the blockchain,\nthe MockVM ',(0,a.kt)("inlineCode",{parentName:"p"},"State")," holds only the current state of the MockVM.\nThanks to this and the fact that we do not need the blockchain itself,\nMockVM starts instantly and runs the tests in the native speed."),(0,a.kt)("h2",{id:"execution"},"Execution"),(0,a.kt)("p",null,"When the MockVM backend is enabled, the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro is responsible for converting\nyour ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions into a list of Entrypoints, which are put into a Contract Container.\nWhen the contract is deployed, its Container registered into a Registry under an address.\nDuring the contract call, MockVM finds an Entrypoint and executes the code."),(0,a.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[Contract Container];\n id2[Contract Container]--\x3eid3((Contract Registry))\n id3((Contract Registry))--\x3eid4[(MockVM Execution)]"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/c71fcec7.a2c41cf5.js b/docs/assets/js/c71fcec7.a2c41cf5.js new file mode 100644 index 000000000..59e15c260 --- /dev/null +++ b/docs/assets/js/c71fcec7.a2c41cf5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6974],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},48458:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,description:"How to get information from the Host"},i="Host Communication",s={unversionedId:"basics/communicating-with-host",id:"version-0.3.1/basics/communicating-with-host",title:"Host Communication",description:"How to get information from the Host",source:"@site/versioned_docs/version-0.3.1/basics/06-communicating-with-host.md",sourceDirName:"basics",slug:"/basics/communicating-with-host",permalink:"/docs/0.3.1/basics/communicating-with-host",draft:!1,tags:[],version:"0.3.1",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"How to get information from the Host"},sidebar:"tutorialSidebar",previous:{title:"Storage interaction",permalink:"/docs/0.3.1/basics/storage-interaction"},next:{title:"Testing",permalink:"/docs/0.3.1/basics/testing"}},c={},l=[{value:"What's next",id:"whats-next",level:2}],p={toc:l};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"host-communication"},"Host Communication"),(0,o.kt)("p",null,"One of the things that your contract will probably do is to query the host for some information -\nwhat is the current time? Who called me? Following example shows how to do this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/host.rs"',title:'"examples/src/docs/host.rs"'},"use odra::Variable;\nuse odra::types::{BlockTime, Address};\n\n#[odra::module]\npub struct HostContract {\n name: Variable<String>,\n created_at: Variable<BlockTime>,\n created_by: Variable<Address>,\n}\n\n#[odra::module]\nimpl HostContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.created_at.set(odra::contract_env::get_block_time());\n self.created_by.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n}\n")),(0,o.kt)("p",null,"As you can see, we are calling functions from ",(0,o.kt)("inlineCode",{parentName:"p"},"odra::contract_env"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"get_block_time()")," will return\nthe current block time wrapped in Odra type ",(0,o.kt)("inlineCode",{parentName:"p"},"BlockTime"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"caller()")," will return an Odra ",(0,o.kt)("inlineCode",{parentName:"p"},"Address")," of\na caller (this can be an external caller or another contract)."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will learn more functions that Odra exposes from host and types it uses in further articles.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"In the next article, we'll dive into testing your contracts with Odra, so you can check that the code\nwe presented in fact works!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ca76cddc.0fe3f002.js b/docs/assets/js/ca76cddc.0fe3f002.js new file mode 100644 index 000000000..3b29cb1d9 --- /dev/null +++ b/docs/assets/js/ca76cddc.0fe3f002.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4191],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=l(n),m=a,v=u["".concat(c,".").concat(m)]||u[m]||d[m]||s;return n?r.createElement(v,o(o({ref:t},p),{},{components:n})):r.createElement(v,o({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,o=new Array(s);o[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var l=2;l<s;l++)o[l]=n[l];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},46486:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const s={sidebar_position:9,description:"Creating and emitting Events"},o="Events",i={unversionedId:"basics/events",id:"basics/events",title:"Events",description:"Creating and emitting Events",source:"@site/docs/basics/09-events.md",sourceDirName:"basics",slug:"/basics/events",permalink:"/docs/next/basics/events",draft:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{sidebar_position:9,description:"Creating and emitting Events"},sidebar:"tutorialSidebar",previous:{title:"Errors",permalink:"/docs/next/basics/errors"},next:{title:"Cross calls",permalink:"/docs/next/basics/cross-calls"}},c={},l=[{value:"Testing events",id:"testing-events",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"In the EVM world events are stored as logs within the blockchain's transaction receipts. These logs can be accessed by external applications or other smart contracts to monitor and react to specific events. Casper does not support events natively, however, Odra mimics this feature. Take a look:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"use casper_event_standard::Event;\nuse odra::casper_event_standard;\nuse odra::prelude::*;\nuse odra::{Address, module::Module};\n\n#[odra::module(events = [PartyStarted])]\npub struct PartyContract;\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: u64\n}\n\n#[odra::module]\nimpl PartyContract {\n pub fn init(&self) {\n self.env().emit_event(PartyStarted {\n caller: self.env().caller(),\n block_time: self.env().get_block_time()\n });\n }\n}\n")),(0,a.kt)("p",null,"We defined a new contract, which emits an event called ",(0,a.kt)("inlineCode",{parentName:"p"},"PartyStarted")," when the contract is deployed.\nTo define an event, we derive an ",(0,a.kt)("inlineCode",{parentName:"p"},"Event")," macro like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: u64,\n}\n")),(0,a.kt)("p",null,"To emit an event, we use the ",(0,a.kt)("inlineCode",{parentName:"p"},"emit_event")," function from the ",(0,a.kt)("inlineCode",{parentName:"p"},"ContractEnv"),", passing the event as an argument:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},"PartyStarted {\n caller: self.env().caller(),\n block_time: self.env().get_block_time()\n}.emit();\n")),(0,a.kt)("p",null,"To determine all the events at compilation time to register them once the contract is deployed. To register events, add an ",(0,a.kt)("inlineCode",{parentName:"p"},"events")," attribute to the struct's ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. "),(0,a.kt)("p",null,"The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module."),(0,a.kt)("h2",{id:"testing-events"},"Testing events"),(0,a.kt)("p",null,"Odra's ",(0,a.kt)("inlineCode",{parentName:"p"},"HostEnv")," comes with a few functions which lets you easily test the events that a given contract has emitted:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/events.rs"',title:'"examples/src/features/events.rs"'},'use super::{PartyContractHostRef, PartyStarted};\nuse odra::host::{Deployer, HostEnv, HostRef, NoArgs};\n\n#[test]\nfn test_party() {\n let test_env: HostEnv = odra_test::env();\n let party_contract = PartyContractHostRef::deploy(&test_env, NoArgs);\n test_env.emitted_event(\n party_contract.address(),\n &PartyStarted {\n caller: test_env.get_account(0),\n block_time: 0\n }\n );\n // If you do not want to check the exact event, you can use `emitted` function\n test_env.emitted(party_contract.address(), "PartyStarted");\n // You can also check how many events were emitted.\n assert_eq!(test_env.events_count(party_contract.address()), 1);\n}\n')),(0,a.kt)("p",null,"To explore more event testing functions, check the ",(0,a.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/host/struct.HostEnv.html"},(0,a.kt)("inlineCode",{parentName:"a"},"HostEnv"))," documentation."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn how to call other contracts from the contract context."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/cad7ddc9.1cb9d315.js b/docs/assets/js/cad7ddc9.1cb9d315.js new file mode 100644 index 000000000..9748c4f5b --- /dev/null +++ b/docs/assets/js/cad7ddc9.1cb9d315.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7042],{74431:e=>{e.exports=JSON.parse('{"title":"Examples","description":"Examples","slug":"/category/examples","permalink":"/docs/0.2.0/category/examples","navigation":{"previous":{"title":"Casper","permalink":"/docs/0.2.0/backends/casper"},"next":{"title":"odra-examples","permalink":"/docs/0.2.0/examples/odra-examples"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/cb085bdb.c1d78c9c.js b/docs/assets/js/cb085bdb.c1d78c9c.js new file mode 100644 index 000000000..c09d65bb3 --- /dev/null +++ b/docs/assets/js/cb085bdb.c1d78c9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4201],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},84299:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const i={sidebar_position:4,description:"Detailed explanation of the Flipper contract"},o="Flipper Internals",l={unversionedId:"basics/flipper-internals",id:"version-0.3.1/basics/flipper-internals",title:"Flipper Internals",description:"Detailed explanation of the Flipper contract",source:"@site/versioned_docs/version-0.3.1/basics/04-flipper-internals.md",sourceDirName:"basics",slug:"/basics/flipper-internals",permalink:"/docs/0.3.1/basics/flipper-internals",draft:!1,tags:[],version:"0.3.1",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Detailed explanation of the Flipper contract"},sidebar:"tutorialSidebar",previous:{title:"Odra.toml",permalink:"/docs/0.3.1/basics/odra-toml"},next:{title:"Storage interaction",permalink:"/docs/0.3.1/basics/storage-interaction"}},s={},p=[{value:"Header",id:"header",level:2},{value:"Struct",id:"struct",level:2},{value:"Impl",id:"impl",level:2},{value:"Tests",id:"tests",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-internals"},"Flipper Internals"),(0,a.kt)("p",null,"In this article, we take a deep dive into the code shown in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.1/getting-started/flipper"},"Flipper example"),", where we will explain in more detail all\nthe Odra-specific sections of the code."),(0,a.kt)("h2",{id:"header"},"Header"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"use odra::Variable;\n")),(0,a.kt)("p",null,"Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation\nthat can be reused between targets. In the above case, we're importing ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable"),", which is responsible\nfor storing simple values on the blockchain's storage."),(0,a.kt)("h2",{id:"struct"},"Struct"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// A module definition. Each module struct consists of Variables and Mappings\n/// or/and other modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value,\n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n")),(0,a.kt)("p",null,"In Odra, all contracts are also modules, which can be reused between contracts. That's why we need\nto mark the struct with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. In the struct definition itself, we state all\nthe fields of the contract. Those fields can be regular Rust data types, however - those will not\nbe persisted on the blockchain. They can also be Odra modules - defined in your project or coming\nfrom Odra itself. Finally, to make the data persistent on the blockchain, you can use something like\n",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>")," showed above. To learn more about storage interaction, take a look at the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.1/basics/storage-interaction"},"next article"),"."),(0,a.kt)("h2",{id:"impl"},"Impl"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n ...\n")),(0,a.kt)("p",null,"Similarly to the struct, we mark the ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. Odra will take all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from this section and create contract endpoints from them. So, if you wish to have\nfunctions that are not available for calling outside the contract, do not make them public. Alternatively,\nyou can create a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section without the macro - all functions defined there, even marked\nwith ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," will be not callable."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," macro marks the constructor of the contract. This function will be limited to only\nto a single call, all further calls to it will result in an error."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'}," ...\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n ...\n")),(0,a.kt)("p",null,"The endpoints above show you how to interact with the simplest type of storage - ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>"),". The data\nsaved there using ",(0,a.kt)("inlineCode",{parentName:"p"},"set")," function will be persisted in the blockchain."),(0,a.kt)("h2",{id:"tests"},"Tests"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n ...\n")),(0,a.kt)("p",null,"You can write tests in any way you prefer and know in Rust. In the example above we are deploying the\ncontract using ",(0,a.kt)("inlineCode",{parentName:"p"},"FlipperDeployer")," - a piece of code generated automatically thanks to the macros.\nThe contract will be deployed on the VM you chose while running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now let's take a look at the different types of storage that Odra provides and how to use them."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/cbdaac1b.d86a12f9.js b/docs/assets/js/cbdaac1b.d86a12f9.js new file mode 100644 index 000000000..a35d66997 --- /dev/null +++ b/docs/assets/js/cbdaac1b.d86a12f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3744],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>p});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=u(t),p=r,w=c["".concat(s,".").concat(p)]||c[p]||m[p]||i;return t?a.createElement(w,o(o({ref:n},d),{},{components:t})):a.createElement(w,o({ref:n},d))}));function p(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=c;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},55468:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=t(87462),r=(t(67294),t(3905));const i={sidebar_position:1},o="Ownable",l={unversionedId:"tutorials/ownable",id:"version-0.2.0/tutorials/ownable",title:"Ownable",description:"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.",source:"@site/versioned_docs/version-0.2.0/tutorials/ownable.md",sourceDirName:"tutorials",slug:"/tutorials/ownable",permalink:"/docs/0.2.0/tutorials/ownable",draft:!1,tags:[],version:"0.2.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Tutorials",permalink:"/docs/0.2.0/category/tutorials"},next:{title:"ERC-20",permalink:"/docs/0.2.0/tutorials/erc20"}},s={},u=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Define a module",id:"define-a-module",level:3},{value:"Init the module",id:"init-the-module",level:3},{value:"Features implementation",id:"features-implementation",level:3},{value:"Test",id:"test",level:3},{value:"Summary",id:"summary",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:u};function m(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features."),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"storing a single value,"),(0,r.kt)("li",{parentName:"ul"},"defining constructors,"),(0,r.kt)("li",{parentName:"ul"},"error handling,"),(0,r.kt)("li",{parentName:"ul"},"defining and emitting ",(0,r.kt)("inlineCode",{parentName:"li"},"events"),"."),(0,r.kt)("li",{parentName:"ul"},"registering a contact in a test environment,"),(0,r.kt)("li",{parentName:"ul"},"interactions with the test environment,"),(0,r.kt)("li",{parentName:"ul"},"assertions (value, events, errors assertions).")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Before we write any code, we define functionalities we would like to implement."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Module has an initializer that should be called once. "),(0,r.kt)("li",{parentName:"ol"},"Only the current owner can set a new owner."),(0,r.kt)("li",{parentName:"ol"},"Read the current owner."),(0,r.kt)("li",{parentName:"ol"},"A function that fails if called by a non-owner account.")),(0,r.kt)("h3",{id:"define-a-module"},"Define a module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{types::Address, Variable};\n\n#[odra::module]\npub struct Ownable {\n owner: Variable<Address>\n}\n")),(0,r.kt)("p",null,"That was easy, but it is crucial to understand the basic before we move on."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3")," - Firstly, we need create a struct called ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," and apply ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]")," to it above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),".")),(0,r.kt)("h3",{id:"init-the-module"},"Init the module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{execution_error, contract_env, Event, types::{Address, event::OdraEvent};\n\n...\n\n#[odra::module]\nimpl Ownable {\n #[odra(init)]\n pub fn init(&mut self, owner: Address) {\n if self.owner.get().is_some() {\n contract_env::revert(Error::OwnerIsAlreadyInitialized)\n }\n\n self.owner.set(owner);\n \n OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n .emit();\n }\n}\n\nexecution_error! {\n pub enum Error {\n OwnerIsNotInitialized => 1,\n }\n}\n\n#[derive(Event, Debug, PartialEq, Eq)]\npub struct OwnershipChanged {\n pub prev_owner: Option<Address>,\n pub new_owner: Address\n}\n")),(0,r.kt)("p",null,"Ok, we have done a couple of things, let's analyze them one by one:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," should be an odra module, so add ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function is marked as ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]")," making it a constructor. It matters if we would like to deploy the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," module as a standalone contract."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum. Notice that the ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum is defined inside the ",(0,r.kt)("inlineCode",{parentName:"li"},"execution_error")," macro. It generates, among others, the required ",(0,r.kt)("inlineCode",{parentName:"li"},"Into<ExecutionError>")," binding."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L9-L11")," - If the owner has been set already, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::revert()")," function. As an argument we pass ",(0,r.kt)("inlineCode",{parentName:"li"},"Error::OwnerIsNotInitialized"),". "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13")," - Then we write the owner passed as an argument to the storage. To do so we call the ",(0,r.kt)("inlineCode",{parentName:"li"},"set()")," on ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L29-L33")," - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::Event"),". We highly recommend to derive ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PartialEq")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Eq")," for testing purpose."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L23")," - Finally, we create the ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged")," struct and call ",(0,r.kt)("inlineCode",{parentName:"li"},"emit()")," function on it (import ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::types::event::OdraEvent")," trait). Hence we set the first owner, we set the ",(0,r.kt)("inlineCode",{parentName:"li"},"prev_owner")," value to ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".")),(0,r.kt)("h3",{id:"features-implementation"},"Features implementation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Ownable {\n ...\n\n pub fn ensure_ownership(&self, address: Address) {\n if Some(address) != self.owner.get() {\n contract_env::revert(Error::NotOwner)\n }\n }\n\n pub fn change_ownership(&mut self, new_owner: Address) {\n self.ensure_ownership(contract_env::caller());\n let current_owner = self.get_owner();\n self.owner.set(new_owner);\n OwnershipChanged {\n prev_owner: Some(current_owner),\n new_owner\n }\n .emit();\n }\n\n pub fn get_owner(&self) -> Address {\n match self.owner.get() {\n Some(owner) => owner,\n None => contract_env::revert(Error::OwnerIsNotInitialized)\n }\n }\n}\n\nexecution_error! {\n pub enum Error {\n NotOwner => 1,\n OwnerIsAlreadyInitialized => 2,\n OwnerIsNotInitialized => 3,\n }\n}\n")),(0,r.kt)("p",null,"The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5,L32")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()")," is reads the current owner, and reverts if is does not match the input ",(0,r.kt)("inlineCode",{parentName:"li"},"Address"),". Also we need to update our ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum adding a new variant ",(0,r.kt)("inlineCode",{parentName:"li"},"NotOwner"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - The function defined above can be reused in ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()")," implementation. We pass to it the current caller, using the ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_env::caller()")," function. The we update the state, and emit ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L22,L34")," - Lastly, a getter function. As the ",(0,r.kt)("inlineCode",{parentName:"li"},"Variable")," ",(0,r.kt)("inlineCode",{parentName:"li"},"get()")," function returns an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option"),", we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," variant ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnerIsNotInitialized"),".")),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[cfg(test)]\nmod tests {\n use super::*;\n use odra::{assert_events, test_env};\n\n fn setup() -> (Address, OwnableRef) {\n let owner = test_env::get_account(0);\n let ownable = OwnableDeployer::init(owner);\n (owner, ownable)\n }\n\n #[test]\n fn initialization_works() {\n let (owner, ownable) = setup();\n assert_eq!(ownable.get_owner(), owner);\n \n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n );\n }\n\n #[test]\n fn owner_can_change_ownership() {\n let (owner, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n \n test_env::set_caller(owner);\n ownable.change_ownership(new_owner);\n assert_eq!(ownable.get_owner(), new_owner);\n assert_events!(\n ownable,\n OwnershipChanged {\n prev_owner: Some(owner),\n new_owner\n }\n );\n }\n\n #[test]\n fn non_owner_cannot_change_ownership() {\n let (_, mut ownable) = setup();\n let new_owner = test_env::get_account(1);\n ownable.change_ownership(new_owner);\n \n test_env::assert_exception(Error::NotOwner, || {\n // If we don't create a new ref, an error occurs:\n // cannot borrow `ownable` as mutable, as it is \n // a captured variable in a `Fn` closure cannot borrow as mutable\n let mut ownable = OwnableRef::at(ownable.address());\n ownable.change_ownership(new_owner);\n });\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - Each test case starts with the same initialization process, so for convenience, we defined the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we call as the first statement in each test. Take a look at the signature ",(0,r.kt)("inlineCode",{parentName:"li"},"fn setup() -> (Address, OwnableRef)"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableRef")," is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"get_owner()"),", but not ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which is a constructor."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7")," - Now, the module needs an owner, the easiest way is to take one from the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env"),". We choose the address of first account (which is the default one)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L8")," - Odra created for us ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableDeployer")," struct which implements all constructor functions. In this case there is just one function - ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," which corresponds the function we have implemented in the module."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - It is time to define the first test. As you see, it is a regular rust test."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L14-15")," - Using the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may have noticed, we use here the term ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," interchangeably with ",(0,r.kt)("inlineCode",{parentName:"p"},"contract"),". The reason is once we deploy our module onto a virtual blockchain it may be considered a contract."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L17-23")," - On the contract, only the ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro ",(0,r.kt)("inlineCode",{parentName:"li"},"assert_events"),". As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30")," - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the ",(0,r.kt)("inlineCode",{parentName:"li"},"test env")," predefines 20 accounts."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L32")," - As mentioned, the default is the 0-th account, if you want to change the executor call the ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::set_caller()")," function. ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The caller switch applies only the next contract interaction, the second call will be done as the default account."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L49-55")," - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call ",(0,r.kt)("inlineCode",{parentName:"li"},"test_env::assert_exception()")," with the error you expect and a failing block of code.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"In the test we create a second contract reference ",(0,r.kt)("inlineCode",{parentName:"p"},"let mut ownable = OwnableRef::at(ownable.address());"),". As the name stands, it is just a reference, we interact with the same contract - only the address matters.")))),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next tutorial we will implement a ERC20 standard."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/cca6b120.0686e279.js b/docs/assets/js/cca6b120.0686e279.js new file mode 100644 index 000000000..fb7039f60 --- /dev/null +++ b/docs/assets/js/cca6b120.0686e279.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5775],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=a,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},54790:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:3,description:"Odra's configuration file"},i="Odra.toml",l={unversionedId:"basics/odra-toml",id:"version-0.3.1/basics/odra-toml",title:"Odra.toml",description:"Odra's configuration file",source:"@site/versioned_docs/version-0.3.1/basics/03-odra-toml.md",sourceDirName:"basics",slug:"/basics/odra-toml",permalink:"/docs/0.3.1/basics/odra-toml",draft:!1,tags:[],version:"0.3.1",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"Odra's configuration file"},sidebar:"tutorialSidebar",previous:{title:"Directory structure",permalink:"/docs/0.3.1/basics/directory-structure"},next:{title:"Flipper Internals",permalink:"/docs/0.3.1/basics/flipper-internals"}},c={},s=[{value:"Adding a new contract manually",id:"adding-a-new-contract-manually",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"As mentioned in the previous article, ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," is a file that contains information about all the contracts\nthat Odra will build. Let's take a look at the file structure again:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," will be used as a name for the contract - the generated wasm file will be in the above case named\n",(0,a.kt)("inlineCode",{parentName:"p"},"flipper.wasm"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) is used by the builder to locate the exact struct where\nthe contract is defined."),(0,a.kt)("h2",{id:"adding-a-new-contract-manually"},"Adding a new contract manually"),(0,a.kt)("p",null,"Besides using the ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command, you can add a new contract to be compiled by hand.\nTo do this, add another ",(0,a.kt)("inlineCode",{parentName:"p"},"[[contracts]]")," element, name it and make sure that the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," is set correctly."),(0,a.kt)("p",null,"For example, if you want to create a new contract called ",(0,a.kt)("inlineCode",{parentName:"p"},"counter"),", your ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file should finally\nlook like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n\n[[contracts]]\nname = "counter"\nfqn = "sample::Counter"\n')),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous\n",(0,a.kt)("inlineCode",{parentName:"p"},"Flipper")," contract."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ccc49370.9ef391ad.js b/docs/assets/js/ccc49370.9ef391ad.js new file mode 100644 index 000000000..dee843305 --- /dev/null +++ b/docs/assets/js/ccc49370.9ef391ad.js @@ -0,0 +1 @@ +(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6103],{39058:(e,t,n)=>{"use strict";n.d(t,{Z:()=>E});var a=n(67294),s=n(86010),l=n(16963),r=n(87524),o=n(39960),i=n(95999);const c="sidebar_re4s",m="sidebarItemTitle_pO2u",u="sidebarItemList_Yudw",d="sidebarItem__DBe",g="sidebarItemLink_mo7H",h="sidebarItemLinkActive_I1ZP";function f(e){let{sidebar:t}=e;return a.createElement("aside",{className:"col col--3"},a.createElement("nav",{className:(0,s.Z)(c,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},a.createElement("div",{className:(0,s.Z)(m,"margin-bottom--md")},t.title),a.createElement("ul",{className:(0,s.Z)(u,"clean-list")},t.items.map((e=>a.createElement("li",{key:e.permalink,className:d},a.createElement(o.Z,{isNavLink:!0,to:e.permalink,className:g,activeClassName:h},e.title)))))))}var j=n(13102);function p(e){let{sidebar:t}=e;return a.createElement("ul",{className:"menu__list"},t.items.map((e=>a.createElement("li",{key:e.permalink,className:"menu__list-item"},a.createElement(o.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function v(e){return a.createElement(j.Zo,{component:p,props:e})}function b(e){let{sidebar:t}=e;const n=(0,r.i)();return t?.items.length?"mobile"===n?a.createElement(v,{sidebar:t}):a.createElement(f,{sidebar:t}):null}function E(e){const{sidebar:t,toc:n,children:r,...o}=e,i=t&&t.items.length>0;return a.createElement(l.Z,o,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement(b,{sidebar:t}),a.createElement("main",{className:(0,s.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"http://schema.org/Blog"},r),n&&a.createElement("div",{className:"col col--2"},n))))}},63496:(e,t,n)=>{"use strict";n.d(t,{Z:()=>R});var a=n(67294),s=n(86010),l=n(9460),r=n(44996);function o(e){let{children:t,className:n}=e;const{frontMatter:s,assets:o}=(0,l.C)(),{withBaseUrl:i}=(0,r.C)(),c=o.image??s.image;return a.createElement("article",{className:n,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},c&&a.createElement("meta",{itemProp:"image",content:i(c,{absolute:!0})}),t)}var i=n(39960);const c="title_f1Hy";function m(e){let{className:t}=e;const{metadata:n,isBlogPostPage:r}=(0,l.C)(),{permalink:o,title:m}=n,u=r?"h1":"h2";return a.createElement(u,{className:(0,s.Z)(c,t),itemProp:"headline"},r?m:a.createElement(i.Z,{itemProp:"url",to:o},m))}var u=n(95999),d=n(52263);const g=["zero","one","two","few","many","other"];function h(e){return g.filter((t=>e.includes(t)))}const f={locale:"en",pluralForms:h(["one","other"]),select:e=>1===e?"one":"other"};function j(){const{i18n:{currentLocale:e}}=(0,d.Z)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:h(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`),f}}),[e])}function p(){const e=j();return{selectMessage:(t,n)=>function(e,t,n){const a=e.split("|");if(1===a.length)return a[0];a.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 ${a.length}: ${e}`);const s=n.select(t),l=n.pluralForms.indexOf(s);return a[Math.min(l,a.length-1)]}(n,t,e)}}const v="container_mt6G";function b(e){let{readingTime:t}=e;const n=function(){const{selectMessage:e}=p();return t=>{const n=Math.ceil(t);return e(n,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". 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 min read|{readingTime} min read"},{readingTime:n}))}}();return a.createElement(a.Fragment,null,n(t))}function E(e){let{date:t,formattedDate:n}=e;return a.createElement("time",{dateTime:t,itemProp:"datePublished"},n)}function k(){return a.createElement(a.Fragment,null," \xb7 ")}function N(e){let{className:t}=e;const{metadata:n}=(0,l.C)(),{date:r,formattedDate:o,readingTime:i}=n;return a.createElement("div",{className:(0,s.Z)(v,"margin-vert--md",t)},a.createElement(E,{date:r,formattedDate:o}),void 0!==i&&a.createElement(a.Fragment,null,a.createElement(k,null),a.createElement(b,{readingTime:i})))}function _(e){return e.href?a.createElement(i.Z,e):a.createElement(a.Fragment,null,e.children)}function y(e){let{author:t,className:n}=e;const{name:l,title:r,url:o,imageURL:i,email:c}=t,m=o||c&&`mailto:${c}`||void 0;return a.createElement("div",{className:(0,s.Z)("avatar margin-bottom--sm",n)},i&&a.createElement(_,{href:m,className:"avatar__photo-link"},a.createElement("img",{className:"avatar__photo",src:i,alt:l})),l&&a.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},a.createElement("div",{className:"avatar__name"},a.createElement(_,{href:m,itemProp:"url"},a.createElement("span",{itemProp:"name"},l))),r&&a.createElement("small",{className:"avatar__subtitle",itemProp:"description"},r)))}const L="authorCol_q4o9",P="imageOnlyAuthorRow_lXe7",Z="imageOnlyAuthorCol_cxD5";function C(e){let{className:t}=e;const{metadata:{authors:n},assets:r}=(0,l.C)();if(0===n.length)return null;const o=n.every((e=>{let{name:t}=e;return!t}));return a.createElement("div",{className:(0,s.Z)("margin-top--md margin-bottom--sm",o?P:"row",t)},n.map(((e,t)=>a.createElement("div",{className:(0,s.Z)(!o&&"col col--4",o?Z:L),key:t},a.createElement(y,{author:{...e,imageURL:r.authorsImageUrls[t]??e.imageURL}})))))}function x(){return a.createElement("header",null,a.createElement(m,null),a.createElement(N,null),a.createElement(C,null))}var w=n(18780),H=n(88905);function z(e){let{children:t,className:n}=e;const{isBlogPostPage:r}=(0,l.C)();return a.createElement("div",{id:r?w.blogPostContainerID:void 0,className:(0,s.Z)("markdown",n),itemProp:"articleBody"},a.createElement(H.Z,null,t))}var I=n(84881),T=n(86233),M=n(87462);function B(){return a.createElement("b",null,a.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function A(e){const{blogPostTitle:t,...n}=e;return a.createElement(i.Z,(0,M.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},n),a.createElement(B,null))}const O="blogPostFooterDetailsFull_mRVl";function F(){const{metadata:e,isBlogPostPage:t}=(0,l.C)(),{tags:n,title:r,editUrl:o,hasTruncateMarker:i}=e,c=!t&&i,m=n.length>0;return m||c||o?a.createElement("footer",{className:(0,s.Z)("row docusaurus-mt-lg",t&&O)},m&&a.createElement("div",{className:(0,s.Z)("col",{"col--9":c})},a.createElement(T.Z,{tags:n})),t&&o&&a.createElement("div",{className:"col margin-top--sm"},a.createElement(I.Z,{editUrl:o})),c&&a.createElement("div",{className:(0,s.Z)("col text--right",{"col--3":m})},a.createElement(A,{blogPostTitle:r,to:e.permalink}))):null}function R(e){let{children:t,className:n}=e;const r=function(){const{isBlogPostPage:e}=(0,l.C)();return e?void 0:"margin-bottom--xl"}();return a.createElement(o,{className:(0,s.Z)(r,n)},a.createElement(x,null),a.createElement(z,null,t),a.createElement(F,null))}},65203:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var a=n(67294),s=n(86010),l=n(1944),r=n(35281),o=n(9460),i=n(39058),c=n(63496),m=n(87462),u=n(95999),d=n(32244);function g(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,u.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(d.Z,(0,m.Z)({},n,{subLabel:a.createElement(u.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(d.Z,(0,m.Z)({},t,{subLabel:a.createElement(u.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function h(){const{assets:e,metadata:t}=(0,o.C)(),{title:n,description:s,date:r,tags:i,authors:c,frontMatter:m}=t,{keywords:u}=m,d=e.image??m.image;return a.createElement(l.d,{title:n,description:s,keywords:u,image:d},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:r}),c.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:c.map((e=>e.url)).filter(Boolean).join(",")}),i.length>0&&a.createElement("meta",{property:"article:tag",content:i.map((e=>e.label)).join(",")}))}var f=n(39407);function j(e){let{sidebar:t,children:n}=e;const{metadata:s,toc:l}=(0,o.C)(),{nextItem:r,prevItem:m,frontMatter:u}=s,{hide_table_of_contents:d,toc_min_heading_level:h,toc_max_heading_level:j}=u;return a.createElement(i.Z,{sidebar:t,toc:!d&&l.length>0?a.createElement(f.Z,{toc:l,minHeadingLevel:h,maxHeadingLevel:j}):void 0},a.createElement(c.Z,null,n),(r||m)&&a.createElement(g,{nextItem:r,prevItem:m}))}function p(e){const t=e.content;return a.createElement(o.n,{content:e.content,isBlogPostPage:!0},a.createElement(l.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogPostPage)},a.createElement(h,null),a.createElement(j,{sidebar:e.sidebar},a.createElement(t,null))))}},39407:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var a=n(87462),s=n(67294),l=n(86010),r=n(93743);const o="tableOfContents_bqdL";function i(e){let{className:t,...n}=e;return s.createElement("div",{className:(0,l.Z)(o,"thin-scrollbar",t)},s.createElement(r.Z,(0,a.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},93743:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var a=n(87462),s=n(67294),l=n(86668);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...s}=e;n>=0?t[n].children.push(s):a.push(s)})),a}function o(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=o({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function i(e){const t=e.getBoundingClientRect();return t.top===t.bottom?i(e.parentNode):t}function c(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>i(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(i(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function m(){const e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,l.L)();return(0,s.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function u(e){const t=(0,s.useRef)(void 0),n=m();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:s,minHeadingLevel:l,maxHeadingLevel:r}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),o=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let s=t;s<=n;s+=1)a.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:l,maxHeadingLevel:r}),i=c(o,{anchorTopOffset:n.current}),m=e.find((e=>i&&i.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(s),e.classList.add(s),t.current=e):e.classList.remove(s)}(e,e===m)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,n])}function d(e){let{toc:t,className:n,linkClassName:a,isChild:l}=e;return t.length?s.createElement("ul",{className:l?void 0:n},t.map((e=>s.createElement("li",{key:e.id},s.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),s.createElement(d,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const g=s.memo(d);function h(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:m,maxHeadingLevel:d,...h}=e;const f=(0,l.L)(),j=m??f.tableOfContents.minHeadingLevel,p=d??f.tableOfContents.maxHeadingLevel,v=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>o({toc:r(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:j,maxHeadingLevel:p});return u((0,s.useMemo)((()=>{if(i&&c)return{linkClassName:i,linkActiveClassName:c,minHeadingLevel:j,maxHeadingLevel:p}}),[i,c,j,p])),s.createElement(g,(0,a.Z)({toc:v,className:n,linkClassName:i},h))}},9460:(e,t,n)=>{"use strict";n.d(t,{C:()=>o,n:()=>r});var a=n(67294),s=n(902);const l=a.createContext(null);function r(e){let{children:t,content:n,isBlogPostPage:s=!1}=e;const r=function(e){let{content:t,isBlogPostPage:n}=e;return(0,a.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:n})),[t,n])}({content:n,isBlogPostPage:s});return a.createElement(l.Provider,{value:r},t)}function o(){const e=(0,a.useContext)(l);if(null===e)throw new s.i6("BlogPostProvider");return e}},46700:(e,t,n)=>{var a={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function s(e){var t=l(e);return n(t)}function l(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}s.keys=function(){return Object.keys(a)},s.resolve=l,e.exports=s,s.id=46700}}]); \ No newline at end of file diff --git a/docs/assets/js/cd591068.8b1ceedb.js b/docs/assets/js/cd591068.8b1ceedb.js new file mode 100644 index 000000000..6040a90cb --- /dev/null +++ b/docs/assets/js/cd591068.8b1ceedb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2331],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=a,h=p["".concat(l,".").concat(m)]||p[m]||u[m]||o;return n?r.createElement(h,s(s({ref:t},d),{},{components:n})):r.createElement(h,s({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},94806:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:7,description:"How to write tests in Odra"},s="Testing",i={unversionedId:"basics/testing",id:"version-0.3.0/basics/testing",title:"Testing",description:"How to write tests in Odra",source:"@site/versioned_docs/version-0.3.0/basics/07-testing.md",sourceDirName:"basics",slug:"/basics/testing",permalink:"/docs/0.3.0/basics/testing",draft:!1,tags:[],version:"0.3.0",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"How to write tests in Odra"},sidebar:"defaultSidebar",previous:{title:"Host Communication",permalink:"/docs/0.3.0/basics/communicating-with-host"},next:{title:"Errors",permalink:"/docs/0.3.0/basics/errors"}},l={},c=[{value:"Test env",id:"test-env",level:2},{value:"Deployer",id:"deployer",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:c};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing"},"Testing"),(0,a.kt)("p",null,"Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write\nregular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the\nprevious article:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},'use odra::{Variable, List};\n\n#[cfg(test)]\nmod tests {\n use super::DogContract3Deployer;\n\n #[test]\n fn init_test() {\n let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n assert_eq!(dog_contract.walks_amount(), 0);\n assert_eq!(dog_contract.walks_total_length(), 0);\n dog_contract.walk_the_dog(5);\n dog_contract.walk_the_dog(10);\n assert_eq!(dog_contract.walks_amount(), 2);\n assert_eq!(dog_contract.walks_total_length(), 15);\n }\n}\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(module)]")," macro created a Deployer code for us, which will deploy the contract on the\nVM:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},'let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());\n')),(0,a.kt)("p",null,"From now on, we can use ",(0,a.kt)("inlineCode",{parentName:"p"},"dog_contract")," to interact with our deployed contract - in particular, all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from the impl section that was annotated with a macro are available to us:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"// Impl\npub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n}\n\n...\n\n// Test\ndog_contract.walk_the_dog(5);\n")),(0,a.kt)("h2",{id:"test-env"},"Test env"),(0,a.kt)("p",null,"Odra gives us some additional functions that we can use to communicate with the host (outside the contract context)\nand to configure how the contracts are deployed and called. Let's revisit the example from the previous\narticle about host communication and implement the tests that prove it works:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/testing.rs"',title:'"examples/src/docs/testing.rs"'},'#[cfg(test)]\nmod tests {\n use super::TestingContractDeployer;\n\n #[test]\n fn test_env() {\n let testing_contract = TestingContractDeployer::init("MyContract".to_string());\n let creator = testing_contract.created_by();\n odra::test_env::set_caller(odra::test_env::get_account(1));\n let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());\n let creator2 = testing_contract2.created_by();\n assert!(creator != creator2);\n }\n}\n')),(0,a.kt)("p",null,"In the code above, we are deploying two instances of the same contract, but we're using ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::test_env::set_caller"),"\nto change the caller - so the Address which is deploying the contract. This changes the result of the ",(0,a.kt)("inlineCode",{parentName:"p"},"odra::contract_env::caller()"),"\nthe function we are calling inside the contract."),(0,a.kt)("p",null,"Each test env comes with a set of functions that will let you write better tests:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn set_caller(address: Address)")," - you've seen it in action just now"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn token_balance(address: Address) -> Balance")," - it returns the balance of the account associated with the given address"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn advance_block_time_by(seconds: BlockTime)")," - it increases the current value of block_time"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_account(n: usize) -> Address")," - it returns an nth address that was prepared for you by Odra in advance;\nby default, you start with the 0th account"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn assert_exception<F, E>(err: E, block: F)")," - it executes the ",(0,a.kt)("inlineCode",{parentName:"li"},"block")," code and expects ",(0,a.kt)("inlineCode",{parentName:"li"},"err")," to happen"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError>")," - returns\nthe event emitted by the contract")),(0,a.kt)("p",null,"Again, we'll see those used in the next articles."),(0,a.kt)("h2",{id:"deployer"},"Deployer"),(0,a.kt)("p",null,"You may be wondering what is the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractDeployer")," and where did it come from.\nIt is a piece of code generated automatically for you, thanks to the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nIf you used the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," on one of the methods, it will be the constructor of your contract.\nOdra will make sure that it is called only once, so you can use it to initialize your data structures etc."),(0,a.kt)("p",null,"If you do not provide the init method, you can deploy the contract using ",(0,a.kt)("inlineCode",{parentName:"p"},"::default()")," method.\nIn the end, you will get a ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," instance (in our case the ",(0,a.kt)("inlineCode",{parentName:"p"},"TestingContractRef"),") which reimplements all\nthe methods you defined in the contract, but executes them on a blockchain!"),(0,a.kt)("p",null,"To learn more about the ",(0,a.kt)("inlineCode",{parentName:"p"},"Ref")," contract, visit the ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.0/basics/cross-calls"},"Cross calls")," article."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We take a look at how Odra handles errors!"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/cd790770.fd618f15.js b/docs/assets/js/cd790770.fd618f15.js new file mode 100644 index 000000000..41bc3ffea --- /dev/null +++ b/docs/assets/js/cd790770.fd618f15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8841],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),m=s(r),f=a,d=m["".concat(l,".").concat(f)]||m[f]||u[f]||o;return r?n.createElement(d,i(i({ref:t},p),{},{components:r})):n.createElement(d,i({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s<o;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},74324:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var n=r(87462),a=(r(67294),r(3905));const o={slug:"2023-02-27-openai-writes-erc20-in-odra",title:"OpenAI writes ERC20 in Odra",authors:["zie1ony"],image:"./twitter-card.png"},i=void 0,c={permalink:"/blog/2023-02-27-openai-writes-erc20-in-odra",source:"@site/blog/2023-02-27-openai-writes-erc20-in-odra/index.md",title:"OpenAI writes ERC20 in Odra",description:"OpenAI can write Odra smart contracts.",date:"2023-02-27T00:00:00.000Z",formattedDate:"February 27, 2023",tags:[],readingTime:3.785,hasTruncateMarker:!0,authors:[{name:"Maciej Zieli\u0144ski",title:"CTO",url:"https://github.com/zie1ony",key:"zie1ony"}],frontMatter:{slug:"2023-02-27-openai-writes-erc20-in-odra",title:"OpenAI writes ERC20 in Odra",authors:["zie1ony"],image:"./twitter-card.png"},prevItem:{title:"It's all about the community!",permalink:"/blog/its-all-about-the-community"},nextItem:{title:"Odra + CosmWasm",permalink:"/blog/odra-cosmwasm"}},l={image:r(901).Z,authorsImageUrls:[void 0]},s=[],p={toc:s};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"OpenAI can write Odra smart contracts.\nThis is how."))}u.isMDXComponent=!0},901:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/twitter-card-0f7e768e63da0acd629609954ba26f62.png"}}]); \ No newline at end of file diff --git a/docs/assets/js/cde2d623.e4204b81.js b/docs/assets/js/cde2d623.e4204b81.js new file mode 100644 index 000000000..151ab1766 --- /dev/null +++ b/docs/assets/js/cde2d623.e4204b81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[825],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=o,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||a;return n?r.createElement(f,s(s({ref:t},c),{},{components:n})):r.createElement(f,s({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,s[1]=i;for(var u=2;u<a;u++)s[u]=n[u];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},60090:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:11,description:"Divide your code into modules"},s="Modules",i={unversionedId:"basics/modules",id:"basics/modules",title:"Modules",description:"Divide your code into modules",source:"@site/docs/basics/11-modules.md",sourceDirName:"basics",slug:"/basics/modules",permalink:"/docs/next/basics/modules",draft:!1,tags:[],version:"current",sidebarPosition:11,frontMatter:{sidebar_position:11,description:"Divide your code into modules"},sidebar:"tutorialSidebar",previous:{title:"Cross calls",permalink:"/docs/next/basics/cross-calls"},next:{title:"Native token",permalink:"/docs/next/basics/native-token"}},l={},u=[{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:u};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you\nwrite is also a module, thanks to the macro ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),'. This means that we can easily rewrite our math\nexample from the previous article, to use a single contract, but still separate our "math" code:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/modules.rs"',title:'"examples/src/features/modules.rs"'},"use crate::features::cross_calls::MathEngine;\nuse odra::module::SubModule;\nuse odra::prelude::*;\n\n#[odra::module]\npub struct ModulesContract {\n pub math_engine: SubModule<MathEngine>\n}\n\n#[odra::module]\nimpl ModulesContract {\n pub fn add_using_module(&self) -> u32 {\n self.math_engine.add(3, 5)\n }\n}\n")),(0,o.kt)("admonition",{type:"important"},(0,o.kt)("p",{parentName:"admonition"},"To use a module as a component of another module, you need to use the ",(0,o.kt)("inlineCode",{parentName:"p"},"SubModule")," type. This is a special type\nthat crates a keyspace (read more in ",(0,o.kt)("a",{parentName:"p",href:"/docs/next/advanced/storage-layout"},"Storage Layout"),") and provide access to its public methods.")),(0,o.kt)("p",null,"Note that we didn't need to rewrite the ",(0,o.kt)("inlineCode",{parentName:"p"},"MathEngine")," - we are using the contract from cross calls example as\na module!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"To see how modules can be used in a real-world scenario, check out the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.8.0/examples/src/contracts/owned_token.rs"},"OwnedToken example")," in the main Odra repository!")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"As we don't need to hold addresses, the test is really simple:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/modules.rs"',title:'"examples/src/features/modules.rs"'},"use super::ModulesContractHostRef;\nuse odra::host::{Deployer, NoArgs};\n\n#[test]\nfn test_modules() {\n let test_env = odra_test::env();\n let modules_contract = ModulesContractHostRef::deploy(&test_env, NoArgs);\n assert_eq!(modules_contract.add_using_module(), 8);\n}\n")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"We will see how to handle native token transfers."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ce4f9116.d2cd5056.js b/docs/assets/js/ce4f9116.d2cd5056.js new file mode 100644 index 000000000..293eebf49 --- /dev/null +++ b/docs/assets/js/ce4f9116.d2cd5056.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9680],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),d=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=d(e.components);return r.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=d(t),m=o,h=p["".concat(s,".").concat(m)]||p[m]||u[m]||a;return t?r.createElement(h,l(l({ref:n},c),{},{components:t})):r.createElement(h,l({ref:n},c))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var d=2;d<a;d++)l[d]=t[d];return r.createElement.apply(null,l)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},3529:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:4},l="Access Control",i={unversionedId:"tutorials/access-control",id:"version-0.7.0/tutorials/access-control",title:"Access Control",description:"In a previous tutorial, we introduced the Ownable module, which serves the purpose of securing access to specific contract features. While it establishes a fundamental security layer, there are numerous scenarios where this level of security is insufficient,",source:"@site/versioned_docs/version-0.7.0/tutorials/access-control.md",sourceDirName:"tutorials",slug:"/tutorials/access-control",permalink:"/docs/tutorials/access-control",draft:!1,tags:[],version:"0.7.0",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"OwnedToken",permalink:"/docs/tutorials/owned-token"},next:{title:"Pauseable",permalink:"/docs/tutorials/pauseable"}},s={},d=[{value:"Code",id:"code",level:2},{value:"Events and Errors",id:"events-and-errors",level:3},{value:"Module",id:"module",level:3}],c={toc:d};function u(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"access-control"},"Access Control"),(0,o.kt)("p",null,"In a previous tutorial, we introduced the ",(0,o.kt)("a",{parentName:"p",href:"/docs/tutorials/ownable"},(0,o.kt)("inlineCode",{parentName:"a"},"Ownable"))," module, which serves the purpose of securing access to specific contract features. While it establishes a fundamental security layer, there are numerous scenarios where this level of security is insufficient, "),(0,o.kt)("p",null,"In this article we design and implement a more fine-grained access control layer."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"Before we start writing code, we list the functionalities of our access control layer."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"A ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," type is used across the module."),(0,o.kt)("li",{parentName:"ol"},"A ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," can be assigned to many ",(0,o.kt)("inlineCode",{parentName:"li"},"Address"),"es."),(0,o.kt)("li",{parentName:"ol"},"Each ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," may have a corresponding admin role."),(0,o.kt)("li",{parentName:"ol"},"Only an admin can grant/revoke a ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),"."),(0,o.kt)("li",{parentName:"ol"},"A ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," can be renounced."),(0,o.kt)("li",{parentName:"ol"},"A ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," cannot be renounced on someone's behalf."),(0,o.kt)("li",{parentName:"ol"},"Each action triggers an event."),(0,o.kt)("li",{parentName:"ol"},"Unauthorized access stops contract execution.")),(0,o.kt)("h3",{id:"events-and-errors"},"Events and Errors"),(0,o.kt)("p",null,"There are three actions that can be performed concerning a ",(0,o.kt)("inlineCode",{parentName:"p"},"Role"),": granting, revoking, and altering the admin role. Let us establish standard Odra events for each of these actions."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=events.rs showLineNumbers",title:"events.rs",showLineNumbers:!0},"use odra::{types::Address, Event};\nuse super::access_control::Role;\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct RoleGranted {\n pub role: Role,\n pub address: Address,\n pub sender: Address\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct RoleRevoked {\n pub role: Role,\n pub address: Address,\n pub sender: Address\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct RoleAdminChanged {\n pub role: Role,\n pub previous_admin_role: Role,\n pub new_admin_role: Role\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L4-L16")," - to describe the grant or revoke actions, our events specify the ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),", and ",(0,o.kt)("inlineCode",{parentName:"li"},"Address"),"es indicating who receives or loses access and who provides or withdraws it."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L18-L21")," - the event describing the admin role change, requires the subject ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),", the previous and the current admin ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),".")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=errors.rs",title:"errors.rs"},"use odra::execution_error;\n\nexecution_error! {\n pub enum Error {\n MissingRole => 20_000,\n RoleRenounceForAnotherAddress => 20_001,\n }\n}\n")),(0,o.kt)("p",null,"Errors definition is straightforward - there are only two invalid states: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"An action is triggered by an unauthorized actor."),(0,o.kt)("li",{parentName:"ol"},"The caller is attempting to resign the Role on someone's behalf. ")),(0,o.kt)("h3",{id:"module"},"Module"),(0,o.kt)("p",null,"Now, we are stepping into the most interesting part: the module definition and implementation."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=access_control.rs showLineNumbers",title:"access_control.rs",showLineNumbers:!0},"use super::{\n errors::Error,\n events::{RoleAdminChanged, RoleGranted, RoleRevoked}\n};\nuse odra::{\n contract_env,\n types::{event::OdraEvent, Address},\n Mapping\n};\n\npub type Role = [u8; 32];\n\npub const DEFAULT_ADMIN_ROLE: Role = [0u8; 32];\n\n#[odra::module(events = [RoleAdminChanged, RoleGranted, RoleRevoked])]\npub struct AccessControl {\n roles: Mapping<Role, Mapping<Address, bool>>,\n role_admin: Mapping<Role, Role>\n}\n\n#[odra::module]\nimpl AccessControl {\n pub fn has_role(&self, role: &Role, address: &Address) -> bool {\n self.roles.get_instance(role).get_or_default(address)\n }\n\n pub fn get_role_admin(&self, role: &Role) -> Role {\n let admin_role = self.role_admin.get(role);\n if let Some(admin) = admin_role {\n admin\n } else {\n DEFAULT_ADMIN_ROLE\n }\n }\n\n pub fn grant_role(&mut self, role: &Role, address: &Address) {\n self.check_role(&self.get_role_admin(role), &contract_env::caller());\n self.unchecked_grant_role(role, address);\n }\n\n pub fn revoke_role(&mut self, role: &Role, address: &Address) {\n self.check_role(&self.get_role_admin(role), &contract_env::caller());\n self.unchecked_revoke_role(role, address);\n }\n\n pub fn renounce_role(&mut self, role: &Role, address: &Address) {\n if address != &contract_env::caller() {\n contract_env::revert(Error::RoleRenounceForAnotherAddress);\n }\n self.unchecked_revoke_role(role, address);\n }\n}\n\nimpl AccessControl {\n pub fn check_role(&self, role: &Role, address: &Address) {\n if !self.has_role(role, address) {\n contract_env::revert(Error::MissingRole);\n }\n }\n\n pub fn set_admin_role(&mut self, role: &Role, admin_role: &Role) {\n let previous_admin_role = self.get_role_admin(role);\n self.role_admin.set(role, *admin_role);\n RoleAdminChanged {\n role: *role,\n previous_admin_role,\n new_admin_role: *admin_role\n }\n .emit();\n }\n\n pub fn unchecked_grant_role(&mut self, role: &Role, address: &Address) {\n if !self.has_role(role, address) {\n self.roles.get_instance(role).set(address, true);\n RoleGranted {\n role: *role,\n address: *address,\n sender: contract_env::caller()\n }\n .emit();\n }\n }\n\n pub fn unchecked_revoke_role(&mut self, role: &Role, address: &Address) {\n if self.has_role(role, address) {\n self.roles.get_instance(role).set(address, false);\n RoleRevoked {\n role: *role,\n address: *address,\n sender: contract_env::caller()\n }\n .emit();\n }\n }\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L11")," - Firstly, we need the ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," type. It is simply an alias for a 32-byte array."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L13")," - The default role is an array filled with zeros."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L15-L19")," - The storage consists of two mappings:")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"roles - a nested mapping that stores information about whether a certain Role is granted to a given ",(0,o.kt)("inlineCode",{parentName:"li"},"Address"),"."),(0,o.kt)("li",{parentName:"ol"},"role_admin - each ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," can have a single admin ",(0,o.kt)("inlineCode",{parentName:"li"},"Role"),".")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L23-L25")," - This is a simple check to determine if a ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," has been granted to a given ",(0,o.kt)("inlineCode",{parentName:"li"},"Address"),". It is an exposed entry point and an important building block widely used throughout the entire module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L54")," - This is a non-exported block containing helper functions."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L55-L59")," - The ",(0,o.kt)("inlineCode",{parentName:"li"},"check_role()")," function serves as a guard function. Before a ",(0,o.kt)("inlineCode",{parentName:"li"},"Role")," is granted or revoked, we must ensure that the caller is allowed to do so. For this purpose, the function reads the roles mapping. If the role has not been granted to the address, the contract reverts with ",(0,o.kt)("inlineCode",{parentName:"li"},"Error::MissingRole"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L61-L70")," - The ",(0,o.kt)("inlineCode",{parentName:"li"},"set_admin_role()")," function simply updates the role_admin mapping and emits the ",(0,o.kt)("inlineCode",{parentName:"li"},"RoleAdminChanged")," event."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L72-L94")," - The ",(0,o.kt)("inlineCode",{parentName:"li"},"unchecked_grant_role()")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"unchecked_revoke_role()")," functions are mirror functions that update the roles mapping and post ",(0,o.kt)("inlineCode",{parentName:"li"},"RoleGranted")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"RoleRevoked")," events. If the role is already granted, ",(0,o.kt)("inlineCode",{parentName:"li"},"unchecked_grant_role()")," has no effect (the opposite check is made in the case of revoking a role)."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L27-L34")," - The ",(0,o.kt)("inlineCode",{parentName:"li"},"get_role_admin()")," entry point reads the role_admin. If there is no admin role for a given role, it returns the default role."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L36-L51")," - This is a combination of ",(0,o.kt)("inlineCode",{parentName:"li"},"check_role()")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"unchecked_*_role()"),". Entry points fail on unauthorized access.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ce999a4e.0ce8a513.js b/docs/assets/js/ce999a4e.0ce8a513.js new file mode 100644 index 000000000..5db58b961 --- /dev/null +++ b/docs/assets/js/ce999a4e.0ce8a513.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2862],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},p),{},{components:a})):n.createElement(g,i({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=a[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},71824:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1,description:"A tool for managing Odra projects"},i="Cargo Odra",l={unversionedId:"basics/cargo-odra",id:"version-0.2.0/basics/cargo-odra",title:"Cargo Odra",description:"A tool for managing Odra projects",source:"@site/versioned_docs/version-0.2.0/basics/01-cargo-odra.md",sourceDirName:"basics",slug:"/basics/cargo-odra",permalink:"/docs/0.2.0/basics/cargo-odra",draft:!1,tags:[],version:"0.2.0",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"A tool for managing Odra projects"},sidebar:"defaultSidebar",previous:{title:"Basics",permalink:"/docs/0.2.0/category/basics"},next:{title:"Directory structure",permalink:"/docs/0.2.0/basics/directory-structure"}},s={},c=[{value:"Managing projects",id:"managing-projects",level:2},{value:"Generating code",id:"generating-code",level:2},{value:"Testing",id:"testing",level:2},{value:"Building code",id:"building-code",level:2},{value:"Updating dependencies",id:"updating-dependencies",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cargo-odra"},"Cargo Odra"),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.2.0/getting-started/installation"},"Installation")," tutorial properly,\nyou should already be set up with the Cargo Odra tool. It is an executable that will help you with\nmanaging your smart contracts project, testing and running them on multiple backends (blockchains)."),(0,r.kt)("p",null,"Let's take a look at all the possibilities that Cargo Odra gives you."),(0,r.kt)("h2",{id:"managing-projects"},"Managing projects"),(0,r.kt)("p",null,"Two commands will help you create a new project. The first one is ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra new"),".\nYou need to pass one parameter, namely ",(0,r.kt)("inlineCode",{parentName:"p"},"--name {PROJECT_NAME}"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project\n")),(0,r.kt)("p",null,"This will create a new project in the ",(0,r.kt)("inlineCode",{parentName:"p"},"my-project")," folder and name it ",(0,r.kt)("inlineCode",{parentName:"p"},"my-project"),". You can see it\nfor yourself, for example by taking a look into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file created in your project's folder:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "my-project"\nversion = "0.1.0"\nedition = "2021"\n')),(0,r.kt)("p",null,"The project is created using an existing template located in\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra-template"},"https://github.com/odradev/odra-template"),".\nIf you want, you can use your own template, by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"-r")," parameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -r https://github.com/my-repo/my-odra-template --name my-project\n")),(0,r.kt)("p",null,"Additionally, you can pass a branch name you want to use using ",(0,r.kt)("inlineCode",{parentName:"p"},"-g"),", otherwise, the default\nbranch will be used. To see an example of a template, take a look at the repository linked above."),(0,r.kt)("p",null,"The second way of creating a project is by using ",(0,r.kt)("inlineCode",{parentName:"p"},"init")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra init --name my-project\n")),(0,r.kt)("p",null,"It works in the same way as ",(0,r.kt)("inlineCode",{parentName:"p"},"new"),", but instead of creating a new folder, it will create a project\nin the current, empty directory."),(0,r.kt)("h2",{id:"generating-code"},"Generating code"),(0,r.kt)("p",null,"If you want to quickly create a new contract code, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"generate")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra generate -c counter \n")),(0,r.kt)("p",null,"This will create a new file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/counter.rs")," with sample code, add appropriate ",(0,r.kt)("inlineCode",{parentName:"p"},"use")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mod")," sections\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"src/lib.rs")," and update the ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file accordingly. To learn more about ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file,\nvisit ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.2.0/basics/odra-toml"},"Odra.toml"),"."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Most used command during the development of your project should be this one:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"It will run your tests against Odra's MockVM. It is substantially faster than virtual machines\nprovided by blockchains developers and implements all the features Odra uses."),(0,r.kt)("p",null,'When you want to run tests against a "real" VM, just provide the name of the backend using ',(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\noption:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files,\nspin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat.\nKeep in mind that this is a lot slower than MockVM and you cannot use the debugger.\nThis is why MockVM was created and should be your first choice when developing contracts.\nOf course, testing all of your code against a blockchain VM is a must in the end."),(0,r.kt)("p",null,"If you want to run only some of the tests, you can pass arguments to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo test")," command\n(which is run in the background obviously):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- this-will-be-passed-to-cargo-test\n")),(0,r.kt)("p",null,"If you want to run tests which names contain the word ",(0,r.kt)("inlineCode",{parentName:"p"},"two"),", you can execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- two\n")),(0,r.kt)("p",null,"Of course, you can do the same when using the backend:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper -- two\n")),(0,r.kt)("h2",{id:"building-code"},"Building code"),(0,r.kt)("p",null,"You can also build the code itself and generate the output contracts without running the tests.\nTo do so, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("p",null,"Where ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," is the name of the backend we are using in this example. If the build process\nfinishes successfully, wasm files will be located in ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," folder."),(0,r.kt)("h2",{id:"updating-dependencies"},"Updating dependencies"),(0,r.kt)("p",null,"You will learn later, that the project using Odra contains more than one Rust project - your own and\none or more builders. To run ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo update")," on all of them at once instead of traversing all the folders\nyou can use this command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra update\n")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next section, we will take a look at all the files and directories that ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," created\nfor us and explain their purpose."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/cecbc2b5.c68d76de.js b/docs/assets/js/cecbc2b5.c68d76de.js new file mode 100644 index 000000000..ffdaacbbc --- /dev/null +++ b/docs/assets/js/cecbc2b5.c68d76de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5901],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),f=a,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},63481:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:1},i="What is a backend?",c={unversionedId:"backends/what-is-a-backend",id:"version-0.3.0/backends/what-is-a-backend",title:"What is a backend?",description:"You can think of a backend as a target platform for your smart contract.",source:"@site/versioned_docs/version-0.3.0/backends/01-what-is-a-backend.md",sourceDirName:"backends",slug:"/backends/what-is-a-backend",permalink:"/docs/0.3.0/backends/what-is-a-backend",draft:!1,tags:[],version:"0.3.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Backends",permalink:"/docs/0.3.0/category/backends"},next:{title:"MockVM",permalink:"/docs/0.3.0/backends/mock-vm"}},s={},l=[{value:"Contract Env",id:"contract-env",level:2},{value:"Test Env",id:"test-env",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-a-backend"},"What is a backend?"),(0,a.kt)("p",null,"You can think of a backend as a target platform for your smart contract.\nThis can be a piece of code allowing you to quickly check your code - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.0/backends/mock-vm"},"MockVM"),",\nor a complete virtual machine, spinning up a blockchain for you - like ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.0/backends/casper"},"CasperVM"),"."),(0,a.kt)("p",null,"Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env."),(0,a.kt)("h2",{id:"contract-env"},"Contract Env"),(0,a.kt)("p",null,"The Contract Env is a simple interface that each backend needs to implement,\nexposing features of the blockchain from the perspective of the contract."),(0,a.kt)("p",null,"It gives Odra a set of functions, which allows implementing more complex concepts -\nfor example, to implement ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.3.0/basics/storage-interaction"},"Mapping"),",\nOdra requires some kind of storage integration.\nThe exact implementation of those functions is a responsibility of a backend,\nmaking Odra and its user free to implement the contract logic,\ninstead of messing with the blockchain internals."),(0,a.kt)("p",null,"Other functions from Contract Env include handling transfers, addresses, block time, errors and events."),(0,a.kt)("h2",{id:"test-env"},"Test Env"),(0,a.kt)("p",null,"Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with\nthe backend from the outside world - really useful for implementing tests."),(0,a.kt)("p",null,"This ranges from interacting with the blockchain - like deploying and calling the contracts,\nto the more test-oriented - handling errors, forwarding the block time, etc."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will take a look at backends Odra implements in more detail."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/cf3f256a.f9385a89.js b/docs/assets/js/cf3f256a.f9385a89.js new file mode 100644 index 000000000..56e6b6963 --- /dev/null +++ b/docs/assets/js/cf3f256a.f9385a89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3175],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},55132:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:2,description:"Files and folders in the Odra project"},i="Directory structure",l={unversionedId:"basics/directory-structure",id:"version-0.7.0/basics/directory-structure",title:"Directory structure",description:"Files and folders in the Odra project",source:"@site/versioned_docs/version-0.7.0/basics/02-directory-structure.md",sourceDirName:"basics",slug:"/basics/directory-structure",permalink:"/docs/basics/directory-structure",draft:!1,tags:[],version:"0.7.0",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Files and folders in the Odra project"},sidebar:"tutorialSidebar",previous:{title:"Cargo Odra",permalink:"/docs/basics/cargo-odra"},next:{title:"Odra.toml",permalink:"/docs/basics/odra-toml"}},s={},c=[{value:"Cargo.toml",id:"cargotoml",level:2},{value:"Odra.toml",id:"odratoml",level:2},{value:".builder_* folders",id:"builder_-folders",level:2},{value:"src/",id:"src",level:2},{value:"target/",id:"target",level:2},{value:"wasm/",id:"wasm",level:2}],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"directory-structure"},"Directory structure"),(0,a.kt)("p",null,"After creating a new project using Odra and running the tests, you will be presented with the\nfollowing files and directories:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 CHANGELOG.md\n\u251c\u2500\u2500 Odra.toml\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 .builder_casper/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 flipper.rs\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 target/\n\u2514\u2500\u2500 wasm/\n")),(0,a.kt)("h2",{id:"cargotoml"},"Cargo.toml"),(0,a.kt)("p",null,"Let's first take a look at ",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "sample"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.1", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,a.kt)("p",null,"By default, your project will use the latest odra version available at crates.io. We are using two features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/mock-vm")," - it is responsible for running tests on Odra's MockVM"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/casper")," - backend implementation of Casper blockchain\nMore backends will be released as features that will be possible to enable here.")),(0,a.kt)("h2",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"This is the file that holds information about contracts that will be generated when running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"As we can see, we have a single contract, its ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) corresponds to\nthe contract is located in ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),".\nMore contracts can be added here by hand, or by using ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command."),(0,a.kt)("h2",{id:"builder_-folders"},".builder_* folders"),(0,a.kt)("p",null,"Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary\nfor building wasm files and running them against blockchain VMs. As it is not necessary to modify\nfiles in those folders in any way, by default they are hidden (hence the ",(0,a.kt)("inlineCode",{parentName:"p"},".")," at the beginning of the\nfolder name)."),(0,a.kt)("h2",{id:"src"},"src/"),(0,a.kt)("p",null,"This is the folder where your smart contract files live."),(0,a.kt)("h2",{id:"target"},"target/"),(0,a.kt)("p",null,"Files generated by cargo during the build process are put here."),(0,a.kt)("h2",{id:"wasm"},"wasm/"),(0,a.kt)("p",null,"WASM files generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," are put here. You can grab those WASM files\nand deploy them on the blockchain of your choosing."),(0,a.kt)("h1",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now, let's take a look at one of the files mentioned above in more detail,\nnamely the ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/d0c01b74.5d9599bb.js b/docs/assets/js/d0c01b74.5d9599bb.js new file mode 100644 index 000000000..84438882d --- /dev/null +++ b/docs/assets/js/d0c01b74.5d9599bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3622],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||i;return n?a.createElement(f,s(s({ref:t},u),{},{components:n})):a.createElement(f,s({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,s[1]=o;for(var p=2;p<i;p++)s[p]=n[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},62276:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var a=n(87462),r=(n(67294),n(3905));const i={sidebar_position:5,description:"How to write data into blockchain's storage"},s="Storage interaction",o={unversionedId:"basics/storage-interaction",id:"version-0.2.0/basics/storage-interaction",title:"Storage interaction",description:"How to write data into blockchain's storage",source:"@site/versioned_docs/version-0.2.0/basics/05-storage-interaction.md",sourceDirName:"basics",slug:"/basics/storage-interaction",permalink:"/docs/0.2.0/basics/storage-interaction",draft:!1,tags:[],version:"0.2.0",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"How to write data into blockchain's storage"},sidebar:"defaultSidebar",previous:{title:"Flipper Internals",permalink:"/docs/0.2.0/basics/flipper-internals"},next:{title:"Host Communication",permalink:"/docs/0.2.0/basics/communicating-with-host"}},l={},p=[{value:"Variable",id:"variable",level:2},{value:"Mapping",id:"mapping",level:2},{value:"List",id:"list",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-interaction"},"Storage interaction"),(0,r.kt)("p",null,"The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go\nthrough all of them and explain their pros and cons."),(0,r.kt)("h2",{id:"variable"},"Variable"),(0,r.kt)("p",null,"The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your\nvariable in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable"),' type. Let\'s look at a "real world" example of a contract that represents a dog:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"#[odra::module]\npub struct DogContract {\n barks: Variable<bool>,\n weight: Variable<u32>,\n name: Variable<String>,\n pets: Variable<Vec<u32>>,\n}\n")),(0,r.kt)("p",null,"You can see the ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," wrapping the data. Even complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," can be wrapped (with some caveats)!"),(0,r.kt)("p",null,"Let's make this contract usable, by providing a constructor and some getter functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"use odra::Variable;\n\n#[odra::module]\nimpl DogContract {\n #[odra(init)]\n pub fn init(&mut self, barks: bool, weight: u32, name: String) {\n self.barks.set(barks);\n self.weight.set(weight);\n self.name.set(name);\n self.walks.set(Vec::<u32>::default());\n }\n\n pub fn barks(&self) -> bool {\n self.barks.get_or_default()\n }\n\n pub fn weight(&self) -> u32 {\n self.weight.get_or_default()\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.len() as u32\n }\n\n pub fn walks_total_length(&self) -> u32 {\n let walks = self.walks.get_or_default();\n walks.iter().sum()\n }\n}\n")),(0,r.kt)("p",null,"As you can see, you can access the data, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"get_or_default")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"...\nself.barks.get_or_default()\n...\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Keep in mind that using ",(0,r.kt)("inlineCode",{parentName:"p"},"get()")," will result in an Option that you'll need to unwrap - the variable\ndoesn't have to be initialized!")),(0,r.kt)("p",null,"To modify the data, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"set()")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"self.barks.set(barks);\n")),(0,r.kt)("p",null,"A Variable is easy to use and efficient for simple data types. One of its downsides is that it\nserializes the data as a whole, so when you're using complex types like ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap"),",\neach time you ",(0,r.kt)("inlineCode",{parentName:"p"},"get")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," the whole data is read and written to the blockchain storage."),(0,r.kt)("p",null,"In the example above, if we want to see how many walks our dog had, we would use the function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/variable.rs"',title:'"examples/src/docs/variable.rs"'},"pub fn walks_amount(&self) -> usize {\n let walks = self.walks.get_or_default();\n walks.len()\n}\n")),(0,r.kt)("p",null,"But to do so, we need to extract the whole serialized vector from the storage, which would inefficient,\nespecially for larger sets of data."),(0,r.kt)("p",null,"To tackle this issue following two types were created."),(0,r.kt)("h2",{id:"mapping"},"Mapping"),(0,r.kt)("p",null,"The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to\npass two values - the key type and the value type. Let's look at the variation of the Dog contract, that\nuses Mapping to store information about our dog's friends and how many times they visited:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/mapping.rs"',title:'"examples/src/docs/mapping.rs"'},"use odra::{Mapping, Variable};\n\n#[odra::module]\npub struct DogContract2 {\n name: Variable<String>,\n friends: Mapping<String, u32>,\n}\n")),(0,r.kt)("p",null,"In the example above, our key is a String (it is a name of the friend) and we are storing u32 values\n(amount of visits). To read and write values from and into a Mapping we use a similar approach\nto the one shown in the Variables section with one difference - we need to pass a key:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/mapping.rs"',title:'"examples/src/docs/mapping.rs"'},"pub fn visit(&mut self, friend_name: String) {\n let visits = self.visits(friend_name.clone());\n self.friends.set(&friend_name, visits + 1);\n}\n\npub fn visits(&self, friend_name: String) -> u32 {\n match self.friends.get(&friend_name) {\n None => {\n 0\n },\n Some(v) => {\n v\n }\n }\n}\n")),(0,r.kt)("p",null,"The biggest improvement over a ",(0,r.kt)("inlineCode",{parentName:"p"},"Variable")," is that we can model functionality of a ",(0,r.kt)("inlineCode",{parentName:"p"},"HashMap")," using ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nThe amount of data written to and read from the storage is minimal. However, we cannot iterate over ",(0,r.kt)("inlineCode",{parentName:"p"},"Mapping"),".\nWe could implement such behaviour by using a numeric type key and saving the length of the set in a\nseparate variable. Thankfully Odra comes with a prepared solution - the ",(0,r.kt)("inlineCode",{parentName:"p"},"List")," type."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with\na Variable working together:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="core/src/list.rs"',title:'"core/src/list.rs"'},"use odra::{Variable, List};\n\npub struct List<T> {\n values: Mapping<u32, T>,\n index: Variable<u32>\n}\n"))),(0,r.kt)("h2",{id:"list"},"List"),(0,r.kt)("p",null,"Going back to our DogContract example - let's revisit the walk case. This time, instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),",\nwe'll use the list:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"#[odra::module]\npub struct DogContract3 {\n name: Variable<String>,\n walks: List<u32>,\n}\n")),(0,r.kt)("p",null,"As you can see, the notation is very similar to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Vec"),". To understand the usage, take a look\nat the reimplementation of the functions with an additional function that takes our dog for a walk\n(it writes the data to the storage):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/list.rs"',title:'"examples/src/docs/list.rs"'},"#[odra::module]\nimpl DogContract3 {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn walks_amount(&self) -> u32 {\n self.walks.len()\n }\n\n pub fn walks_total_length(&self) -> u32 {\n self.walks.iter().sum()\n }\n\n pub fn walk_the_dog(&mut self, length: u32) {\n self.walks.push(length);\n }\n}\n")),(0,r.kt)("p",null,"Now, we can know how many walks our dog had without loading the whole vector from the storage.\nWe need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all\nthe cases for you."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All of the above examples, alongside the tests, are available in the odra repository in the ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/docs/")," folder.")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next article, we'll see how to query the host for information about the world and our contract."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/d15969ed.a7e49a14.js b/docs/assets/js/d15969ed.a7e49a14.js new file mode 100644 index 000000000..f26504e3d --- /dev/null +++ b/docs/assets/js/d15969ed.a7e49a14.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[190],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>p});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var u=n.createContext({}),i=function(e){var t=n.useContext(u),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=i(e.components);return n.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,u=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=i(a),p=r,h=m["".concat(u,".").concat(p)]||m[p]||d[p]||o;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function p(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,s=new Array(o);s[0]=m;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l.mdxType="string"==typeof e?e:r,s[1]=l;for(var i=2;i<o;i++)s[i]=a[i];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},86318:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var n=a(87462),r=(a(67294),a(3905));const o={slug:"odra-cosmwasm",title:"Odra + CosmWasm",authors:["kpob"],image:"https://github.com/odradev.png"},s=void 0,l={permalink:"/blog/odra-cosmwasm",source:"@site/blog/2023-02-15-odra-cosmos.md",title:"Odra + CosmWasm",description:"In November 2022 we released the first version of the Odra Framework. It's time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm.",date:"2023-02-15T00:00:00.000Z",formattedDate:"February 15, 2023",tags:[],readingTime:5.96,hasTruncateMarker:!0,authors:[{name:"Krzysztof Pobiar\u017cyn",title:"Lead Developer",url:"https://github.com/kpob",key:"kpob"}],frontMatter:{slug:"odra-cosmwasm",title:"Odra + CosmWasm",authors:["kpob"],image:"https://github.com/odradev.png"},prevItem:{title:"OpenAI writes ERC20 in Odra",permalink:"/blog/2023-02-27-openai-writes-erc20-in-odra"},nextItem:{title:"EVM at Risc0",permalink:"/blog/evm-at-risc0"}},u={authorsImageUrls:[void 0]},i=[{value:"CosmWasm",id:"cosmwasm",level:2},{value:"Show me your code",id:"show-me-your-code",level:2},{value:"Deploy",id:"deploy",level:2},{value:"Show me your transaction",id:"show-me-your-transaction",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Join us",id:"join-us",level:2}],c={toc:i};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In November 2022 we released ",(0,r.kt)("a",{parentName:"p",href:"/blog/release-020"},"the first version")," of the Odra Framework. It's time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm."),(0,r.kt)("h2",{id:"cosmwasm"},"CosmWasm"),(0,r.kt)("p",null,"CosmWasm is a smart contract platform for building dApps on the Cosmos blockchain ecosystem.\nThe platform is designed as a module that can be integrated into the Cosmos SDK, enabling developers who are already building blockchains with the Cosmos SDK to easily incorporate CosmWasm smart contract functionality without the need to modify their existing code."),(0,r.kt)("p",null,"It uses the Rust programming language, so is potentially a perfect candidate for an Odra backend.\nThere are many blockchains like ",(0,r.kt)("a",{parentName:"p",href:"https://docsosmosis.zone/"},"Osmosis"),", ",(0,r.kt)("a",{parentName:"p",href:"https://scrt.network/"},"Secret Network"),", ",(0,r.kt)("a",{parentName:"p",href:"https://www.junonetwork.io/"},"Juno")," that utilize CosmWasm."),(0,r.kt)("h2",{id:"show-me-your-code"},"Show me your code"),(0,r.kt)("p",null,"I would like to write a ",(0,r.kt)("inlineCode",{parentName:"p"},"Counter")," smart contract that is CosmWasm compatible.\nWhat are the requirements?"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"It should store a ",(0,r.kt)("inlineCode",{parentName:"li"},"u32")," value. "),(0,r.kt)("li",{parentName:"ol"},"The initial value it set by the contract deployer."),(0,r.kt)("li",{parentName:"ol"},"The value can be incremented."),(0,r.kt)("li",{parentName:"ol"},"The value can read from the storage."),(0,r.kt)("li",{parentName:"ol"},"The contract can call another contract and increment its counter.")),(0,r.kt)("p",null,"So let's write an Odra module first."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=counter.rs",title:"counter.rs"},"use odra::{types::{Address, event::OdraEvent}, Variable, contract_env};\nuse self::events::{Init, ValueUpdated};\n\n#[odra::module]\npub struct Counter {\n pub value: Variable<u32>\n}\n\n#[odra::module]\nimpl Counter {\n #[odra(init)]\n pub fn init(&mut self, value: u32) {\n self.value.set(value);\n <Init as OdraEvent>::emit(Init {\n value,\n });\n }\n\n pub fn increment(&mut self) {\n let old_value = self.value.get_or_default();\n let new_value = old_value + 1;\n self.value.set(new_value);\n \n ValueUpdated {\n old_value,\n new_value,\n operator: contract_env::caller()\n }.emit();\n }\n\n pub fn cross_increment(&mut self, counter_address: Address) {\n CounterRef::at(counter_address).increment();\n }\n\n pub fn get_value(&self) -> u32 {\n self.value.get_or_default()\n }\n}\n\nmod events {\n use odra::types::Address;\n\n #[derive(odra::Event)]\n pub struct ValueUpdated {\n pub old_value: u32,\n pub new_value: u32,\n pub operator: Address\n }\n \n #[derive(odra::Event)]\n pub struct Init {\n pub value: u32,\n }\n}\n\n#[cfg(test)]\nmod tests {\n use super::*;\n\n #[test]\n fn deploy() {\n let counter = CounterDeployer::init(10);\n assert_eq!(10, counter.get_value());\n }\n\n #[test]\n fn increment() {\n let mut counter = CounterDeployer::init(10);\n counter.increment();\n assert_eq!(11, counter.get_value());\n }\n}\n")),(0,r.kt)("p",null,"But wait, I mentioned CosmWasm, did I?"),(0,r.kt)("p",null,"Here the beauty of Odra comes into play."),(0,r.kt)("p",null,"Let's use ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo-odra"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b cosmos\n")),(0,r.kt)("p",null,"And... that's it, congratulations! We have just written and build our first CosmWasm contract.\nAs you see, it is nothing different from building a contract for Casper. No additional code, we only changed the ",(0,r.kt)("inlineCode",{parentName:"p"},"-b")," flag."),(0,r.kt)("h2",{id:"deploy"},"Deploy"),(0,r.kt)("p",null,"We have just built a wasm file, but is it really a fully functional contract?"),(0,r.kt)("p",null,"As a battlefield let's choose ",(0,r.kt)("a",{parentName:"p",href:"https://www.junonetwork.io/"},"Juno Network")," (if you would like to read more about smart contract development on Juno read this ",(0,r.kt)("a",{parentName:"p",href:"https://medium.com/@NitroBiell/smart-contract-development-quick-start-on-juno-5dabf6fdcad0"},"Quick Start tutorial"),"). This is an arbitrary choice, each client is built upon a so-called Wasm Zone ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/CosmWasm/wasmd"},"wasmd"),", and its interface is alike."),(0,r.kt)("p",null,"Assuming you already know how to interact with Juno testnet, let's move to the fun part."),(0,r.kt)("p",null,"But before we go, to keep things simple, let's prepare a ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/casey/just"},"justfile"),". It'll make our interactions with the blockchain much easier. See ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/feature/cosmos/odra-cosmos/juno-client/justfile"},"full version"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-justfile",metastring:"title=justfile",title:"justfile"},'NODE := "--node https://rpc.uni.juno.deuslabs.fi:443"\nCHAIN_ID := "--chain-id uni-6"\nQUERY_FLAGS := NODE + " " + CHAIN_ID\nTRANSACTION_DEFAULTS := "--gas-prices 0.025ujunox --gas auto --gas-adjustment 1.3 --broadcast-mode block"\nEXEC_FLAGS := NODE + " " + CHAIN_ID + " " + TRANSACTION_DEFAULTS\n\nget-address NAME:\n junod keys show {{NAME}} | grep -o juno.*\n\nstore-wasm WASM_PATH SENDER:\n junod tx wasm store \\\n {{WASM_PATH}} --from {{SENDER}} {{EXEC_FLAGS}}\n\ninit-contract CODE_ID VALUE SENDER CONTRACT_NAME:\n junod tx wasm instantiate \\\n {{CODE_ID}} \\\n `just run-args-parser \'{"name": "init", "args": [ { "value" : {{VALUE}} }]}\'` \\\n --label \'{{CONTRACT_NAME}}\' --from {{SENDER}} \\\n --admin `just get-address {{SENDER}}` \\\n {{EXEC_FLAGS}}\n\nexec-increment ADDRESS SENDER:\n junod tx wasm execute \\\n {{ADDRESS}} \\\n `just run-args-parser \'{"name": "increment"}\'` \\\n --from {{SENDER}} \\\n {{EXEC_FLAGS}}\n\nquery-get-value ADDRESS:\n junod q wasm contract-state smart {{ADDRESS}} \\\n `just run-args-parser \'{"name": "get_value"}\'` {{QUERY_FLAGS}}\n')),(0,r.kt)("p",null,"Ok, we are ready to go."),(0,r.kt)("p",null,"First, a CosmWasm contract needs to be stored, technically is not a contract yet. Like a larva waiting to morph into a butterfly (sorry for that)."),(0,r.kt)("p",null,"There are three ways to interact with a contract."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Instantiate - in other words, a constructor call. Once the contract is instantiated, it gets an address."),(0,r.kt)("li",{parentName:"ol"},"Execute - call an entrypoint that modifies the state."),(0,r.kt)("li",{parentName:"ol"},"Query - read the contract's state.")),(0,r.kt)("p",null,"Now, let's take a look at how to do it using the tools we have just prepared."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'# args: \n# the path to a wasm file,\n# the name under we store the private key.\njust store-wasm counter.wasm odra\n\n...\nraw_log: \'[{"events":[{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgStoreCode"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"store_code","attributes":[{"key":"code_checksum","value":"9fb9e7f39170de2628892ed5eecc556e2487267b30bb2c9656f8c7d1cd9f9a59"},{"key":"code_id","value":"286"}]}]}]\'\n...\ntxhash: 1A8BA520E980C5ABCBCFA6F62D68B6BB82E780544605DE4DD5C6B1C5E966441B\n')),(0,r.kt)("p",null,"Great, our code is successfully stored. Form the logs we can read now the ",(0,r.kt)("inlineCode",{parentName:"p"},"code_id")," which we will use to initialize the contract."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'# args: \n# code id taken from the previous tx, \n# counter initial value, \n# named private key,\n# contract label.\njust init-contract 286 1 odra "My Counter"\n\n...\nraw_log: \'[{"events":[{"type":"instantiate","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"code_id","value":"286"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgInstantiateContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"wasm","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"value","value":"1"}]},{"type":"wasm-Init","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"value","value":"1"}]}]}]\'\n...\ntxhash: 8DC53F95805349C3763CF4AF9527CAB2AEBEC77B240EFD3801C61231D8748F26\n')),(0,r.kt)("p",null,"Fantastic, the contract has been initialized and we have its address - ",(0,r.kt)("inlineCode",{parentName:"p"},"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"),".\nIt's time to increment the counter."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'# args:\n# contract address taken from the previous tx,\n# named private key\njust exec-increment juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g odra\n\n...\nraw_log: \'[{"events":[{"type":"execute","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgExecuteContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"wasm","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"action","value":"increment"}]},{"type":"wasm-ValueUpdated","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"old_value","value":"1"},{"key":"new_value","value":"2"},{"key":"operator","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]}]}]\'\n...\ntxhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2\n')),(0,r.kt)("p",null,"Finally, we expected, the value to be equal to 2 (the initial value was 1 and we incremented it once)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# args:\n# contract address\njust query-get-value juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\n\ndata: 2\n")),(0,r.kt)("p",null,"Indeed, as expected the current counter value is 2."),(0,r.kt)("h2",{id:"show-me-your-transaction"},"Show me your transaction"),(0,r.kt)("p",null,"I get it, you don't want to do it all by yourself. So let's take a closer look at one of my transactions."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'junod q tx 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2 --node https://rpc.uni.juno.deuslabs.fi:443 --chain-id uni-6\n...\nlogs:\n- events:\n - attributes:\n - key: _contract_address\n value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\n type: execute\n - attributes:\n - key: action\n value: /cosmwasm.wasm.v1.MsgExecuteContract\n - key: module\n value: wasm\n - key: sender\n value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh\n type: message\n - attributes:\n - key: _contract_address\n value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\n - key: action\n value: increment\n type: wasm\n - attributes:\n - key: _contract_address\n value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g\n - key: old_value\n value: "1"\n - key: new_value\n value: "2"\n - key: operator\n value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh\n type: wasm-ValueUpdated\n...\ntxhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2\n')),(0,r.kt)("p",null,"If you are familiar Cosmos ecosystem, you can see that there is an attribute containing\nthe performed action (",(0,r.kt)("inlineCode",{parentName:"p"},"increment"),") (If there were some parameters, they would be included in this attribute).\nWe can find here also our ",(0,r.kt)("inlineCode",{parentName:"p"},"ValueUpdated")," event with its arguments ",(0,r.kt)("inlineCode",{parentName:"p"},"old_value"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"new_value")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"operator"),"."),(0,r.kt)("p",null,"Wow, we have it, everything worked as intended!"),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Wouldn't it be great to replace ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/casper-ecosystem/erc20/tree/master/erc20/src"},"Casper Erc20")," and ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/CosmWasm/cw-plus/tree/main/contracts/cw20-base/src"},"Cosmos Erc20")," with a super-simple\nsingle ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.2.0/examples/src/erc20.rs"},"Odra Erc20")," implementation?"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Counter")," contract is just a POC, and there is still a long road ahead of us.\nThis simple example shows that features like storage, events, and cross-contract calls\ncan be unified in a simple readable interface."),(0,r.kt)("p",null,"CosmWasm integration hasn't been published yet, but if you want to experiment by yourself,\ncheck our GitHub (don't forget to update cargo-odra as well)."),(0,r.kt)("h2",{id:"join-us"},"Join us"),(0,r.kt)("p",null,"Interested?"),(0,r.kt)("p",null,"Join ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/Mm5ABc9P8k"},"our Discord"),", ",(0,r.kt)("a",{parentName:"p",href:"https://twitter.com/odradev"},"our Twitter")," or write us\nat ",(0,r.kt)("a",{parentName:"p",href:"mailto:contact@odra.dev"},"contact@odra.dev"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/d386dd06.a52672fe.js b/docs/assets/js/d386dd06.a52672fe.js new file mode 100644 index 000000000..0d2bb2d4a --- /dev/null +++ b/docs/assets/js/d386dd06.a52672fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5067],{75444:e=>{e.exports=JSON.parse('{"title":"Backends","description":"Backends","slug":"/category/backends","permalink":"/docs/0.6.0/category/backends","navigation":{"previous":{"title":"Signatures","permalink":"/docs/0.6.0/advanced/signatures"},"next":{"title":"What is a backend?","permalink":"/docs/0.6.0/backends/what-is-a-backend"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/d5e3179c.3db0c54d.js b/docs/assets/js/d5e3179c.3db0c54d.js new file mode 100644 index 000000000..49481e3d7 --- /dev/null +++ b/docs/assets/js/d5e3179c.3db0c54d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8089],{3905:(e,r,n)=>{n.d(r,{Zo:()=>u,kt:()=>m});var t=n(67294);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?o(Object(n),!0).forEach((function(r){a(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,a=function(e,r){if(null==e)return{};var n,t,a={},o=Object.keys(e);for(t=0;t<o.length;t++)n=o[t],r.indexOf(n)>=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)n=o[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=t.createContext({}),p=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},u=function(e){var r=p(e.components);return t.createElement(l.Provider,{value:r},e.children)},c={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||o;return n?t.createElement(f,s(s({ref:r},u),{},{components:n})):t.createElement(f,s({ref:r},u))}));function m(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var p=2;p<o;p++)s[p]=n[p];return t.createElement.apply(null,s)}return t.createElement.apply(null,n)}d.displayName="MDXCreateElement"},41453:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var t=n(87462),a=(n(67294),n(3905));const o={sidebar_position:8,description:"Causing and handling errors"},s="Errors",i={unversionedId:"basics/errors",id:"basics/errors",title:"Errors",description:"Causing and handling errors",source:"@site/docs/basics/08-errors.md",sourceDirName:"basics",slug:"/basics/errors",permalink:"/docs/next/basics/errors",draft:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"Causing and handling errors"},sidebar:"tutorialSidebar",previous:{title:"Testing",permalink:"/docs/next/basics/testing"},next:{title:"Events",permalink:"/docs/next/basics/events"}},l={},p=[{value:"Testing errors",id:"testing-errors",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:p};function c(e){let{components:r,...n}=e;return(0,a.kt)("wrapper",(0,t.Z)({},u,n,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"errors"},"Errors"),(0,a.kt)("p",null,"Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the\nfollowing example of a simple owned contract:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"use odra::prelude::*;\nuse odra::{Address, module::Module, OdraError, Var};\n\n#[odra::module]\npub struct OwnedContract {\n name: Var<String>,\n owner: Var<Address>\n}\n\n#[derive(OdraError)]\npub enum Error {\n OwnerNotSet = 1,\n NotAnOwner = 2\n}\n\n#[odra::module]\nimpl OwnedContract {\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.owner.set(self.env().caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n\n pub fn owner(&self) -> Address {\n self.owner.get_or_revert_with(Error::OwnerNotSet)\n }\n\n pub fn change_name(&mut self, name: String) {\n let caller = self.env().caller();\n if caller != self.owner() {\n self.env().revert(Error::NotAnOwner)\n }\n\n self.name.set(name);\n }\n}\n\n")),(0,a.kt)("p",null,"Firstly, we are using the ",(0,a.kt)("inlineCode",{parentName:"p"},"OdraError")," derive macro to define our own set of Errors that our contract will\nthrow. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use\n",(0,a.kt)("inlineCode",{parentName:"p"},"unwrap_or_revert_with")," and pass an error as an argument:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)\n")),(0,a.kt)("p",null,"You can also throw the error directly, by using ",(0,a.kt)("inlineCode",{parentName:"p"},"revert"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},"self.env().revert(Error::NotAnOwner)\n")),(0,a.kt)("p",null,"Defining an error in Odra, you must keep in mind a few rules:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"An error should be a field-less enum. "),(0,a.kt)("li",{parentName:"ol"},"The enum must derive from ",(0,a.kt)("inlineCode",{parentName:"li"},"OdraError"),"."),(0,a.kt)("li",{parentName:"ol"},"Avoid implicit discriminants.")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"In your project you can define as many error enums as you wish, but you must ensure that the discriminants are unique across the project!")),(0,a.kt)("h2",{id:"testing-errors"},"Testing errors"),(0,a.kt)("p",null,"Okay, but how about testing it? Let's write a test that will check if the error is thrown when the caller is not an owner:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/handling_errors.rs"',title:'"examples/src/features/handling_errors.rs"'},'use super::{Error, OwnedContractHostRef, OwnedContractInitArgs};\nuse odra::prelude::*;\n\n#[test]\nfn test_owner_error() {\n let test_env = odra_test::env();\n let owner = test_env.get_account(0);\n let not_an_owner = test_env.get_account(1);\n\n test_env.set_caller(owner);\n let init_args = OwnedContractInitArgs {\n name: "OwnedContract".to_string()\n };\n let mut owned_contract = OwnedContractHostRef::deploy(&test_env, init_args);\n\n test_env.set_caller(not_an_owner);\n assert_eq!(\n owned_contract.try_change_name("NewName".to_string()),\n Err(Error::NotAnOwner.into())\n );\n}\n')),(0,a.kt)("p",null,"Each ",(0,a.kt)("inlineCode",{parentName:"p"},"{{ModuleName}}HostRef")," has ",(0,a.kt)("inlineCode",{parentName:"p"},"try_{{entry_point_name}}")," functions that return an ",(0,a.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/type.OdraResult.html"},(0,a.kt)("inlineCode",{parentName:"a"},"OdraResult")),".\n",(0,a.kt)("inlineCode",{parentName:"p"},"OwnedContractHostRef")," implements regular entrypoints: ",(0,a.kt)("inlineCode",{parentName:"p"},"name"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"owner"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"change_name"),", and\nand safe its safe version: ",(0,a.kt)("inlineCode",{parentName:"p"},"try_name"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"try_owner"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"try_change_name"),"."),(0,a.kt)("p",null,"In our example, we are calling ",(0,a.kt)("inlineCode",{parentName:"p"},"try_change_name")," and expecting an error to be thrown.\nFor assertions, we are using a standard ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_eq!")," macro. As the contract call returns an ",(0,a.kt)("inlineCode",{parentName:"p"},"OdraError"),",\nwe need to convert our custom error to ",(0,a.kt)("inlineCode",{parentName:"p"},"OdraError")," using ",(0,a.kt)("inlineCode",{parentName:"p"},"Into::into()"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"We will learn how to emit and test events using Odra."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/d691a609.c2d99f7f.js b/docs/assets/js/d691a609.c2d99f7f.js new file mode 100644 index 000000000..5d298da4c --- /dev/null +++ b/docs/assets/js/d691a609.c2d99f7f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3468],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,f=u["".concat(i,".").concat(m)]||u[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var c=2;c<s;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},89562:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:10,description:"Contracts calling contracts"},o="Cross calls",l={unversionedId:"basics/cross-calls",id:"version-0.3.0/basics/cross-calls",title:"Cross calls",description:"Contracts calling contracts",source:"@site/versioned_docs/version-0.3.0/basics/10-cross-calls.md",sourceDirName:"basics",slug:"/basics/cross-calls",permalink:"/docs/0.3.0/basics/cross-calls",draft:!1,tags:[],version:"0.3.0",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Contracts calling contracts"},sidebar:"defaultSidebar",previous:{title:"Events",permalink:"/docs/0.3.0/basics/events"},next:{title:"Modules",permalink:"/docs/0.3.0/basics/modules"}},i={},c=[{value:"Contract Ref",id:"contract-ref",level:2},{value:"Testing",id:"testing",level:2}],d={toc:c};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cross-calls"},"Cross calls"),(0,r.kt)("p",null,"To show how to handle calls between contracts, first, let's implement two of them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"use odra::Variable;\nuse odra::types::{Address};\n\n#[odra::module]\npub struct CrossContract {\n pub math_engine: Variable<Address>,\n}\n\n#[odra::module]\nimpl CrossContract {\n #[odra(init)]\n pub fn init(&mut self, math_engine_address: Address) {\n self.math_engine.set(math_engine_address);\n }\n\n pub fn add_using_another(&self) -> u32 {\n let math_engine_address = self.math_engine.get().unwrap();\n MathEngineRef::at(math_engine_address).add(3, 5)\n }\n}\n\n#[odra::module]\npub struct MathEngine {\n}\n\n#[odra::module]\nimpl MathEngine {\n pub fn add(&self, n1: u32, n2: u32) -> u32 {\n n1 + n2\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract can add two numbers. ",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," takes an ",(0,r.kt)("inlineCode",{parentName:"p"},"Address")," in its init function and saves it in\nstorage for later use. If we deploy the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," first and take note of its address, we can then deploy\n",(0,r.kt)("inlineCode",{parentName:"p"},"CrossContract")," and use ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," to perform complicated calculations for us!"),(0,r.kt)("p",null,"To call the external contract, we use the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," that was created for us by Odra:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"MathEngineRef::at(math_engine_address).add(3, 5)\n")),(0,r.kt)("h2",{id:"contract-ref"},"Contract Ref"),(0,r.kt)("p",null,"We mentioned ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," already in our ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.3.0/basics/testing"},"Testing")," article.\nIt is a reference to already deployed - running contract.\nHere we are going to take a deeper look at it."),(0,r.kt)("p",null,"Similarly to a ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ref")," is generated automatically, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro.\nTo get an instance of a reference, we can either deploy a contract (using ",(0,r.kt)("inlineCode",{parentName:"p"},"Deployer"),") or by building it\ndirectly, using ",(0,r.kt)("inlineCode",{parentName:"p"},"::at(address: Address)")," method, as shown above.\nThe reference implements all the public endpoints to the contract (those marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"pub")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]"),"\nimpl), alongside couple methods:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"at(Address) -> Self")," - points the reference to an Address"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"address() -> Address")," - returns the Address the reference is currently pointing at"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"with_tokens(Amount) -> Self")," - attaches Amount of native tokens to the next call")),(0,r.kt)("h1",{id:"external-contracts"},"External Contracts"),(0,r.kt)("p",null,"Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI."),(0,r.kt)("p",null,"For that purpose, we use ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra:external_contract]")," macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of."),(0,r.kt)("p",null,"Let's pretend the ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," we defined is an external contract. There is a contract with ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function that adds two numbers somewhere."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"#[odra::external_contract]\npub trait Adder {\n fn add(&self, n1: u32, n2: u32) -> u32;\n}\n")),(0,r.kt)("p",null,"Analogously to modules, Odra creates the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderRef")," struct (but do not create the ",(0,r.kt)("inlineCode",{parentName:"p"},"AdderDeployer"),"). Having an address we can call:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"AdderRef::at(address).add(3, 5)\n")),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Let's see how we can test our cross calls using this knowledge:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"use super::{CrossContractDeployer, MathEngineDeployer};\n\n#[test]\nfn test_cross_calls() {\n let math_engine_contract = MathEngineDeployer::default();\n let cross_contract = CrossContractDeployer::init(math_engine_contract.address());\n\n assert_eq!(cross_contract.add_using_another(), 8);\n}\n")),(0,r.kt)("p",null,"Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a ",(0,r.kt)("inlineCode",{parentName:"p"},"MathEngine")," contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the ",(0,r.kt)("inlineCode",{parentName:"p"},"add()")," function we want to use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/cross_calls.rs"',title:'"examples/src/docs/cross_calls.rs"'},"#[cfg(test)]\nmod tests {\n use odra::types::Address;\n use crate::docs::cross_calls::{Adder, AdderRef};\n \n #[test]\n fn test_ext() {\n let adder = AdderRef::at(get_adder_address());\n\n assert_eq!(adder.add(1, 2), 3);\n }\n\n fn get_adder_address() -> Address {\n let contract = MathEngineDeployer::default();\n contract.address()\n }\n}\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/d7637d81.7af705c8.js b/docs/assets/js/d7637d81.7af705c8.js new file mode 100644 index 000000000..c312feadf --- /dev/null +++ b/docs/assets/js/d7637d81.7af705c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4062],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>c});var r=t(67294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,r,a=function(e,n){if(null==e)return{};var t,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i=r.createContext({}),d=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=d(e.components);return r.createElement(i.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=d(t),c=a,f=m["".concat(i,".").concat(c)]||m[c]||u[c]||o;return t?r.createElement(f,s(s({ref:n},p),{},{components:t})):r.createElement(f,s({ref:n},p))}));function c(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,s=new Array(o);s[0]=m;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l.mdxType="string"==typeof e?e:a,s[1]=l;for(var d=2;d<o;d++)s[d]=t[d];return r.createElement.apply(null,s)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},40808:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=t(87462),a=(t(67294),t(3905));const o={sidebar_position:2},s="Using odra-modules",l={unversionedId:"examples/using-odra-modules",id:"version-0.2.0/examples/using-odra-modules",title:"Using odra-modules",description:"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.",source:"@site/versioned_docs/version-0.2.0/examples/using-odra-modules.md",sourceDirName:"examples",slug:"/examples/using-odra-modules",permalink:"/docs/0.2.0/examples/using-odra-modules",draft:!1,tags:[],version:"0.2.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"odra-examples",permalink:"/docs/0.2.0/examples/odra-examples"},next:{title:"Tutorials",permalink:"/docs/0.2.0/category/tutorials"}},i={},d=[],p={toc:d};function u(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"using-odra-modules"},"Using odra-modules"),(0,a.kt)("p",null,"Besides the Odra framework, you can attach to your project ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-module")," - a set of plug-and-play modules."),(0,a.kt)("p",null,"If you followed the ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/getting-started/installation"},"Installation guide")," your Cargo.toml should look like:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.2.0", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,a.kt)("p",null,"To use ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),", edit your ",(0,a.kt)("inlineCode",{parentName:"p"},"dependency")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"features")," sections."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:"title=Cargo.toml",title:"Cargo.toml"},'[dependencies]\nodra = { path = "../core", default-features = false }\nodra-modules = { path = "../modules", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]\ncasper = ["odra/casper", "odra-modules/casper"]\n')),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules")," defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a ",(0,a.kt)("inlineCode",{parentName:"p"},"casper")," feature in your project, add ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules/casper"),"specifically (it applies to each backend).")),(0,a.kt)("p",null,"Now, the only thing left is to add a module to your contract."),(0,a.kt)("p",null,"Let's write an example of ",(0,a.kt)("inlineCode",{parentName:"p"},"MyToken")," based on ",(0,a.kt)("inlineCode",{parentName:"p"},"Erc20")," module."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::types::{Address, U256};\nuse odra_modules::erc20::Erc20;\n\n#[odra::module]\npub struct MyToken {\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, initial_supply: U256) {\n let name = String::from("MyToken");\n let symbol = String::from("MT");\n let decimals = 9u8;\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> U256 {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: Address) -> U256 {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: Address, spender: Address) -> U256 {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: Address, amount: U256) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: Address, amount: U256) {\n self.erc20.approve(spender, amount);\n }\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"All available modules are placed in the main Odra repository.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/d985b3f7.e852e117.js b/docs/assets/js/d985b3f7.e852e117.js new file mode 100644 index 000000000..c4f4ab1a7 --- /dev/null +++ b/docs/assets/js/d985b3f7.e852e117.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9558],{15745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/docs/assets/js/d9fee9da.2ff8b9e6.js b/docs/assets/js/d9fee9da.2ff8b9e6.js new file mode 100644 index 000000000..0f6ff65b6 --- /dev/null +++ b/docs/assets/js/d9fee9da.2ff8b9e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7405],{29124:e=>{e.exports=JSON.parse('{"title":"Basics","description":"Basic concepts of Odra Framework","slug":"/category/basics","permalink":"/docs/0.3.1/category/basics","navigation":{"previous":{"title":"Flipper example","permalink":"/docs/0.3.1/getting-started/flipper"},"next":{"title":"Cargo Odra","permalink":"/docs/0.3.1/basics/cargo-odra"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/da555cce.e33c96c7.js b/docs/assets/js/da555cce.e33c96c7.js new file mode 100644 index 000000000..ffa7d8ee0 --- /dev/null +++ b/docs/assets/js/da555cce.e33c96c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5228],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},p),{},{components:a})):n.createElement(g,i({ref:t},p))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=a[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},7275:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:1,description:"A tool for managing Odra projects"},i="Cargo Odra",l={unversionedId:"basics/cargo-odra",id:"version-0.6.0/basics/cargo-odra",title:"Cargo Odra",description:"A tool for managing Odra projects",source:"@site/versioned_docs/version-0.6.0/basics/01-cargo-odra.md",sourceDirName:"basics",slug:"/basics/cargo-odra",permalink:"/docs/0.6.0/basics/cargo-odra",draft:!1,tags:[],version:"0.6.0",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"A tool for managing Odra projects"},sidebar:"tutorialSidebar",previous:{title:"Basics",permalink:"/docs/0.6.0/category/basics"},next:{title:"Directory structure",permalink:"/docs/0.6.0/basics/directory-structure"}},s={},c=[{value:"Managing projects",id:"managing-projects",level:2},{value:"Generating code",id:"generating-code",level:2},{value:"Testing",id:"testing",level:2},{value:"Building code",id:"building-code",level:2},{value:"Updating dependencies",id:"updating-dependencies",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:c};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"cargo-odra"},"Cargo Odra"),(0,r.kt)("p",null,"If you followed the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/getting-started/installation"},"Installation")," tutorial properly,\nyou should already be set up with the Cargo Odra tool. It is an executable that will help you with\nmanaging your smart contracts project, testing and running them on multiple backends (blockchains)."),(0,r.kt)("p",null,"Let's take a look at all the possibilities that Cargo Odra gives you."),(0,r.kt)("h2",{id:"managing-projects"},"Managing projects"),(0,r.kt)("p",null,"Two commands will help you create a new project. The first one is ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra new"),".\nYou need to pass one parameter, namely ",(0,r.kt)("inlineCode",{parentName:"p"},"--name {PROJECT_NAME}"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project\n")),(0,r.kt)("p",null,"This will create a new project in the ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project")," folder and name it ",(0,r.kt)("inlineCode",{parentName:"p"},"my_project"),". You can see it\nfor yourself, for example by taking a look into a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file created in your project's folder:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "my_project"\nversion = "0.1.0"\nedition = "2021"\n')),(0,r.kt)("p",null,"The project is created using the template located in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra"},"Odra's main repository"),".\nBy default it uses ",(0,r.kt)("inlineCode",{parentName:"p"},"full")," template, if you want, you can use minimalistic ",(0,r.kt)("inlineCode",{parentName:"p"},"blank")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -t blank --name my-project\n")),(0,r.kt)("p",null,"By default, the latest release of Odra will be used for the template and as a dependency.\nYou can pass a source of Odra you want to use, by using ",(0,r.kt)("inlineCode",{parentName:"p"},"-s")," parameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new -n my-project -s ../odra # will use local folder of odra\ncargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release\ncargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io\n")),(0,r.kt)("p",null,"The second way of creating a project is by using ",(0,r.kt)("inlineCode",{parentName:"p"},"init")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra init --name my-project\n")),(0,r.kt)("p",null,"It works in the same way as ",(0,r.kt)("inlineCode",{parentName:"p"},"new"),", but instead of creating a new folder, it will create a project\nin the current, empty directory."),(0,r.kt)("h2",{id:"generating-code"},"Generating code"),(0,r.kt)("p",null,"If you want to quickly create a new contract code, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"generate")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra generate -c counter \n")),(0,r.kt)("p",null,"This will create a new file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/counter.rs")," with sample code, add appropriate ",(0,r.kt)("inlineCode",{parentName:"p"},"use")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mod")," sections\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"src/lib.rs")," and update the ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file accordingly. To learn more about ",(0,r.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file,\nvisit ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.6.0/basics/odra-toml"},"Odra.toml"),"."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"Most used command during the development of your project should be this one:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,r.kt)("p",null,"It will run your tests against Odra's MockVM. It is substantially faster than virtual machines\nprovided by blockchains developers and implements all the features Odra uses."),(0,r.kt)("p",null,'When you want to run tests against a "real" VM, just provide the name of the backend using ',(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\noption:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files,\nspin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat.\nKeep in mind that this is a lot slower than MockVM and you cannot use the debugger.\nThis is why MockVM was created and should be your first choice when developing contracts.\nOf course, testing all of your code against a blockchain VM is a must in the end."),(0,r.kt)("p",null,"If you want to run only some of the tests, you can pass arguments to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo test")," command\n(which is run in the background obviously):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- this-will-be-passed-to-cargo-test\n")),(0,r.kt)("p",null,"If you want to run tests which names contain the word ",(0,r.kt)("inlineCode",{parentName:"p"},"two"),", you can execute:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -- two\n")),(0,r.kt)("p",null,"Of course, you can do the same when using the backend:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper -- two\n")),(0,r.kt)("h2",{id:"building-code"},"Building code"),(0,r.kt)("p",null,"You can also build the code itself and generate the output contracts without running the tests.\nTo do so, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("p",null,"Where ",(0,r.kt)("inlineCode",{parentName:"p"},"casper")," is the name of the backend we are using in this example. If the build process\nfinishes successfully, wasm files will be located in ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," folder."),(0,r.kt)("h2",{id:"updating-dependencies"},"Updating dependencies"),(0,r.kt)("p",null,"You will learn later, that the project using Odra contains more than one Rust project - your own and\none or more builders. To run ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo update")," on all of them at once instead of traversing all the folders\nyou can use this command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra update\n")),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next section, we will take a look at all the files and directories that ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo odra")," created\nfor us and explain their purpose."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/da9e3acc.6d6af0a3.js b/docs/assets/js/da9e3acc.6d6af0a3.js new file mode 100644 index 000000000..f55467bf6 --- /dev/null +++ b/docs/assets/js/da9e3acc.6d6af0a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[827],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},47820:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const i={sidebar_position:4,description:"Detailed explanation of the Flipper contract"},o="Flipper Internals",l={unversionedId:"basics/flipper-internals",id:"version-0.2.0/basics/flipper-internals",title:"Flipper Internals",description:"Detailed explanation of the Flipper contract",source:"@site/versioned_docs/version-0.2.0/basics/04-flipper-internals.md",sourceDirName:"basics",slug:"/basics/flipper-internals",permalink:"/docs/0.2.0/basics/flipper-internals",draft:!1,tags:[],version:"0.2.0",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Detailed explanation of the Flipper contract"},sidebar:"defaultSidebar",previous:{title:"Odra.toml",permalink:"/docs/0.2.0/basics/odra-toml"},next:{title:"Storage interaction",permalink:"/docs/0.2.0/basics/storage-interaction"}},s={},p=[{value:"Header",id:"header",level:2},{value:"Struct",id:"struct",level:2},{value:"Impl",id:"impl",level:2},{value:"Tests",id:"tests",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-internals"},"Flipper Internals"),(0,a.kt)("p",null,"In this article, we take a deep dive into the code shown in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/getting-started/flipper"},"Flipper example"),", where we will explain in more detail all\nthe Odra-specific sections of the code."),(0,a.kt)("h2",{id:"header"},"Header"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"use odra::Variable;\n")),(0,a.kt)("p",null,"Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation\nthat can be reused between targets. In the above case, we're importing ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable"),", which is responsible\nfor storing simple values on the blockchain's storage."),(0,a.kt)("h2",{id:"struct"},"Struct"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// A module definition. Each module struct consists of Variables and Mappings\n/// or/and other modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value,\n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n")),(0,a.kt)("p",null,"In Odra, all contracts are also modules, which can be reused between contracts. That's why we need\nto mark the struct with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. In the struct definition itself, we state all\nthe fields of the contract. Those fields can be regular Rust data types, however - those will not\nbe persisted on the blockchain. They can also be Odra modules - defined in your project or coming\nfrom Odra itself. Finally, to make the data persistent on the blockchain, you can use something like\n",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>")," showed above. To learn more about storage interaction, take a look at the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.2.0/basics/storage-interaction"},"next article"),"."),(0,a.kt)("h2",{id:"impl"},"Impl"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n ...\n")),(0,a.kt)("p",null,"Similarly to the struct, we mark the ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section with the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. Odra will take all\n",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions from this section and create contract endpoints from them. So, if you wish to have\nfunctions that are not available for calling outside the contract, do not make them public. Alternatively,\nyou can create a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"impl")," section without the macro - all functions defined there, even marked\nwith ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," will be not callable."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra(init)]")," macro marks the constructor of the contract. This function will be limited to only\nto a single call, all further calls to it will result in an error."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'}," ...\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n ...\n")),(0,a.kt)("p",null,"The endpoints above show you how to interact with the simplest type of storage - ",(0,a.kt)("inlineCode",{parentName:"p"},"Variable<T>"),". The data\nsaved there using ",(0,a.kt)("inlineCode",{parentName:"p"},"set")," function will be persisted in the blockchain."),(0,a.kt)("h2",{id:"tests"},"Tests"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs"',title:'"flipper.rs"'},"#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n ...\n")),(0,a.kt)("p",null,"You can write tests in any way you prefer and know in Rust. In the example above we are deploying the\ncontract using ",(0,a.kt)("inlineCode",{parentName:"p"},"FlipperDeployer")," - a piece of code generated automatically thanks to the macros.\nThe contract will be deployed on the VM you chose while running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),"."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now let's take a look at the different types of storage that Odra provides and how to use them."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/db82a1c0.01b7c8ed.js b/docs/assets/js/db82a1c0.01b7c8ed.js new file mode 100644 index 000000000..a8f9fa60e --- /dev/null +++ b/docs/assets/js/db82a1c0.01b7c8ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[494],{32259:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"0.4.0","label":"0.4.0","banner":"unmaintained","badge":true,"noIndex":false,"className":"docs-version-0.4.0","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Odra framework","href":"/docs/0.4.0/","docId":"intro"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs/0.4.0/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Flipper example","href":"/docs/0.4.0/getting-started/flipper","docId":"getting-started/flipper"}],"href":"/docs/0.4.0/category/getting-started"},{"type":"category","label":"Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Cargo Odra","href":"/docs/0.4.0/basics/cargo-odra","docId":"basics/cargo-odra"},{"type":"link","label":"Directory structure","href":"/docs/0.4.0/basics/directory-structure","docId":"basics/directory-structure"},{"type":"link","label":"Odra.toml","href":"/docs/0.4.0/basics/odra-toml","docId":"basics/odra-toml"},{"type":"link","label":"Flipper Internals","href":"/docs/0.4.0/basics/flipper-internals","docId":"basics/flipper-internals"},{"type":"link","label":"Storage interaction","href":"/docs/0.4.0/basics/storage-interaction","docId":"basics/storage-interaction"},{"type":"link","label":"Host Communication","href":"/docs/0.4.0/basics/communicating-with-host","docId":"basics/communicating-with-host"},{"type":"link","label":"Testing","href":"/docs/0.4.0/basics/testing","docId":"basics/testing"},{"type":"link","label":"Errors","href":"/docs/0.4.0/basics/errors","docId":"basics/errors"},{"type":"link","label":"Events","href":"/docs/0.4.0/basics/events","docId":"basics/events"},{"type":"link","label":"Cross calls","href":"/docs/0.4.0/basics/cross-calls","docId":"basics/cross-calls"},{"type":"link","label":"Modules","href":"/docs/0.4.0/basics/modules","docId":"basics/modules"},{"type":"link","label":"Native token","href":"/docs/0.4.0/basics/native-token","docId":"basics/native-token"}],"href":"/docs/0.4.0/category/basics"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Module Composer","href":"/docs/0.4.0/advanced/composer","docId":"advanced/composer"},{"type":"link","label":"Delegate","href":"/docs/0.4.0/advanced/delegate","docId":"advanced/delegate"},{"type":"link","label":"Advanced Storage Concepts","href":"/docs/0.4.0/advanced/advanced-storage","docId":"advanced/advanced-storage"},{"type":"link","label":"Attributes","href":"/docs/0.4.0/advanced/attributes","docId":"advanced/attributes"}],"href":"/docs/0.4.0/category/advanced"},{"type":"category","label":"Backends","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is a backend?","href":"/docs/0.4.0/backends/what-is-a-backend","docId":"backends/what-is-a-backend"},{"type":"link","label":"MockVM","href":"/docs/0.4.0/backends/mock-vm","docId":"backends/mock-vm"},{"type":"link","label":"Casper","href":"/docs/0.4.0/backends/casper","docId":"backends/casper"}],"href":"/docs/0.4.0/category/backends"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"odra-examples","href":"/docs/0.4.0/examples/odra-examples","docId":"examples/odra-examples"},{"type":"link","label":"Using odra-modules","href":"/docs/0.4.0/examples/using-odra-modules","docId":"examples/using-odra-modules"}],"href":"/docs/0.4.0/category/examples"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ownable","href":"/docs/0.4.0/tutorials/ownable","docId":"tutorials/ownable"},{"type":"link","label":"ERC-20","href":"/docs/0.4.0/tutorials/erc20","docId":"tutorials/erc20"},{"type":"link","label":"OwnedToken","href":"/docs/0.4.0/tutorials/owned-token","docId":"tutorials/owned-token"}],"href":"/docs/0.4.0/category/tutorials"}]},"docs":{"advanced/advanced-storage":{"id":"advanced/advanced-storage","title":"Advanced Storage Concepts","description":"The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.","sidebar":"tutorialSidebar"},"advanced/attributes":{"id":"advanced/attributes","title":"Attributes","description":"Smart contract developers with Ethereum background are familiar with Solidity\'s concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.","sidebar":"tutorialSidebar"},"advanced/composer":{"id":"advanced/composer","title":"Module Composer","description":"The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.","sidebar":"tutorialSidebar"},"advanced/delegate":{"id":"advanced/delegate","title":"Delegate","description":"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.","sidebar":"tutorialSidebar"},"backends/casper":{"id":"backends/casper","title":"Casper","description":"The Casper backend allows you to compile your contracts into WASM files which can be deployed","sidebar":"tutorialSidebar"},"backends/mock-vm":{"id":"backends/mock-vm","title":"MockVM","description":"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing","sidebar":"tutorialSidebar"},"backends/what-is-a-backend":{"id":"backends/what-is-a-backend","title":"What is a backend?","description":"You can think of a backend as a target platform for your smart contract.","sidebar":"tutorialSidebar"},"basics/cargo-odra":{"id":"basics/cargo-odra","title":"Cargo Odra","description":"A tool for managing Odra projects","sidebar":"tutorialSidebar"},"basics/communicating-with-host":{"id":"basics/communicating-with-host","title":"Host Communication","description":"How to get information from the Host","sidebar":"tutorialSidebar"},"basics/cross-calls":{"id":"basics/cross-calls","title":"Cross calls","description":"Contracts calling contracts","sidebar":"tutorialSidebar"},"basics/directory-structure":{"id":"basics/directory-structure","title":"Directory structure","description":"Files and folders in the Odra project","sidebar":"tutorialSidebar"},"basics/errors":{"id":"basics/errors","title":"Errors","description":"Causing and handling errors","sidebar":"tutorialSidebar"},"basics/events":{"id":"basics/events","title":"Events","description":"Creating and emitting Events","sidebar":"tutorialSidebar"},"basics/flipper-internals":{"id":"basics/flipper-internals","title":"Flipper Internals","description":"Detailed explanation of the Flipper contract","sidebar":"tutorialSidebar"},"basics/modules":{"id":"basics/modules","title":"Modules","description":"Divide your code into modules","sidebar":"tutorialSidebar"},"basics/native-token":{"id":"basics/native-token","title":"Native token","description":"How to deposit, withdraw and transfer","sidebar":"tutorialSidebar"},"basics/odra-toml":{"id":"basics/odra-toml","title":"Odra.toml","description":"Odra\'s configuration file","sidebar":"tutorialSidebar"},"basics/storage-interaction":{"id":"basics/storage-interaction","title":"Storage interaction","description":"How to write data into blockchain\'s storage","sidebar":"tutorialSidebar"},"basics/testing":{"id":"basics/testing","title":"Testing","description":"How to write tests in Odra","sidebar":"tutorialSidebar"},"examples/odra-examples":{"id":"examples/odra-examples","title":"odra-examples","description":"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.","sidebar":"tutorialSidebar"},"examples/using-odra-modules":{"id":"examples/using-odra-modules","title":"Using odra-modules","description":"Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.","sidebar":"tutorialSidebar"},"getting-started/flipper":{"id":"getting-started/flipper","title":"Flipper example","description":"To quickly start working with Odra, take a look at the following code sample. If you followed the","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Hello fellow Odra user! This page will guide you through the installation process.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Odra framework","description":"Odra Docs","sidebar":"tutorialSidebar"},"tutorials/erc20":{"id":"tutorials/erc20","title":"ERC-20","description":"It\'s time for something that every smart contract developer has done at least once. Let\'s try to implement Erc20 standard. Of course, we are going to use the Odra Framework.","sidebar":"tutorialSidebar"},"tutorials/ownable":{"id":"tutorials/ownable","title":"Ownable","description":"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract\'s critical features.","sidebar":"tutorialSidebar"},"tutorials/owned-token":{"id":"tutorials/owned-token","title":"OwnedToken","description":"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/df1503d8.285dccf0.js b/docs/assets/js/df1503d8.285dccf0.js new file mode 100644 index 000000000..e7c497d29 --- /dev/null +++ b/docs/assets/js/df1503d8.285dccf0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8445],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u=a.createContext({}),l=function(e){var t=a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=l(e.components);return a.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,u=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=l(n),m=r,f=c["".concat(u,".").concat(m)]||c[m]||p[m]||s;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,o=new Array(s);o[0]=c;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var l=2;l<s;l++)o[l]=n[l];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},14797:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const s={sidebar_position:5},o="Pauseable",i={unversionedId:"tutorials/pauseable",id:"tutorials/pauseable",title:"Pauseable",description:"The Pauseable module is like your smart contract's safety switch. It lets authorized users temporarily pause certain features if needed. It's a great way to boost security, but it's not meant to be used on its own. Think of it as an extra tool in your access control toolbox, giving you more control to manage your smart contract safely and efficiently.",source:"@site/docs/tutorials/pauseable.md",sourceDirName:"tutorials",slug:"/tutorials/pauseable",permalink:"/docs/next/tutorials/pauseable",draft:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Access Control",permalink:"/docs/next/tutorials/access-control"},next:{title:"Migrations",permalink:"/docs/next/category/migrations"}},u={},l=[{value:"Code",id:"code",level:2},{value:"Events and Error",id:"events-and-error",level:3},{value:"Module definition",id:"module-definition",level:3},{value:"Checks and guards",id:"checks-and-guards",level:3},{value:"Actions",id:"actions",level:3},{value:"Pauseable counter",id:"pauseable-counter",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"pauseable"},"Pauseable"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Pauseable")," module is like your smart contract's safety switch. It lets authorized users temporarily pause certain features if needed. It's a great way to boost security, but it's not meant to be used on its own. Think of it as an extra tool in your access control toolbox, giving you more control to manage your smart contract safely and efficiently."),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"As always, we will start with defining functionalities of our module."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Check the state - is it paused or not."),(0,r.kt)("li",{parentName:"ol"},"State guards - a contract should stop execution if is in a state we don't expect."),(0,r.kt)("li",{parentName:"ol"},"Switch the state.")),(0,r.kt)("h3",{id:"events-and-error"},"Events and Error"),(0,r.kt)("p",null,"There just two errors that may occur: ",(0,r.kt)("inlineCode",{parentName:"p"},"PausedRequired"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"UnpausedRequired"),". We define them in a standard Odra way."),(0,r.kt)("p",null,"Events definition is highly uncomplicated: ",(0,r.kt)("inlineCode",{parentName:"p"},"Paused")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Unpaused")," events holds only the address of the pauser."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{Address, casper_event_standard::{self, Event}, OdraError};\n\n#[derive(OdraError)]\npub enum Error {\n PausedRequired = 1_000,\n UnpausedRequired = 1_001,\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Paused {\n pub account: Address\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct Unpaused {\n pub account: Address\n}\n")),(0,r.kt)("h3",{id:"module-definition"},"Module definition"),(0,r.kt)("p",null,"The module storage is extremely simple - has a single ",(0,r.kt)("inlineCode",{parentName:"p"},"Var")," of type bool, that indicates if a contract is paused."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\npub struct Pauseable {\n is_paused: Var<bool>\n}\n")),(0,r.kt)("h3",{id:"checks-and-guards"},"Checks and guards"),(0,r.kt)("p",null,"Now, let's move to state checks and guards."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=pauseable.rs showLineNumbers",title:"pauseable.rs",showLineNumbers:!0},"impl Pauseable {\n pub fn is_paused(&self) -> bool {\n self.is_paused.get_or_default()\n }\n\n pub fn require_not_paused(&self) {\n if self.is_paused() {\n self.env().revert(Error::UnpausedRequired);\n }\n }\n\n pub fn require_paused(&self) {\n if !self.is_paused() {\n self.env().revert(Error::PausedRequired);\n }\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L1")," - as mentioned in the intro, the module is not intended to be a standalone contract, so the only ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," block is not annotated with ",(0,r.kt)("inlineCode",{parentName:"li"},"odra::module")," and hence does not expose any entrypoint."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L2")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"is_paused()")," checks the contract state, if the Var ",(0,r.kt)("inlineCode",{parentName:"li"},"is_paused")," has not been initialized, the default value (false) is returned."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - to guarantee the code is executed when the contract is not paused, ",(0,r.kt)("inlineCode",{parentName:"li"},"require_not_paused()")," function reads the state and reverts if the contract is paused. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L12")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"require_paused()")," is a mirror function - stops the contract execution if the contract is not paused.")),(0,r.kt)("h3",{id:"actions"},"Actions"),(0,r.kt)("p",null,"Finally, we will add the ability to switch the module state."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"impl Pauseable {\n pub fn pause(&mut self) {\n self.require_not_paused();\n self.is_paused.set(true);\n\n self.env().emit_event(Paused {\n account: self.env().caller()\n });\n }\n\n pub fn unpause(&mut self) {\n self.require_paused();\n self.is_paused.set(false);\n\n self.env().emit_event(Unpaused {\n account: self.env().caller()\n });\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"pause()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"unpause()")," functions do three things: ensure the contract is the right state (unpaused for ",(0,r.kt)("inlineCode",{parentName:"p"},"pause()"),", not paused for ",(0,r.kt)("inlineCode",{parentName:"p"},"unpause()"),"), updates the state, and finally emits events (",(0,r.kt)("inlineCode",{parentName:"p"},"Paused"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"Unpaused"),")."),(0,r.kt)("h2",{id:"pauseable-counter"},"Pauseable counter"),(0,r.kt)("p",null,"In the end, let's use the module in a contract. For this purpose, we will implement a mock contract called ",(0,r.kt)("inlineCode",{parentName:"p"},"PauseableCounter"),". The contract consists of a Var ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," and a ",(0,r.kt)("inlineCode",{parentName:"p"},"Pauseable")," module. The counter can only be incremented if the contract is in a normal state (is not paused)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{module::SubModule, Var};\nuse odra_modules::security::Pauseable;\n\n#[odra::module]\npub struct PauseableCounter {\n value: Var<u32>,\n pauseable: SubModule<Pauseable>\n}\n\n#[odra::module]\nimpl PauseableCounter {\n pub fn increment(&mut self) {\n self.pauseable.require_not_paused();\n\n let new_value = self.value.get_or_default() + 1;\n self.value.set(new_value);\n }\n\n pub fn pause(&mut self) {\n self.pauseable.pause();\n }\n\n pub fn unpause(&mut self) {\n self.pauseable.unpause();\n }\n\n pub fn get_value(&self) -> u32 {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod test {\n use super::*;\n\n #[test]\n fn increment_only_if_unpaused() {\n let test_env = odra_test::env();\n let mut contract = PauseableCounterDeployer::init(&test_env);\n contract.increment();\n contract.pause();\n\n assert_eq!(\n contract.try_increment().unwrap_err(),\n UnpausedRequired.into()\n );\n assert_eq!(contract.get_value(), 1);\n }\n}\n")),(0,r.kt)("p",null,"As we see in the test, in a simple way, using a single function call we can turn off the counter for a while and freeze the counter. Any time we want we can turn it back on. Easy!"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/e018be55.8f6ee0e2.js b/docs/assets/js/e018be55.8f6ee0e2.js new file mode 100644 index 000000000..775145652 --- /dev/null +++ b/docs/assets/js/e018be55.8f6ee0e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9314],{36590:e=>{e.exports=JSON.parse('{"title":"Tutorials","description":"The theory is good, but the practice is even better. Let\'s go through a few examples summing up all the Odra concepts.","slug":"/category/tutorials","permalink":"/docs/next/category/tutorials","navigation":{"previous":{"title":"Using odra-modules","permalink":"/docs/next/examples/using-odra-modules"},"next":{"title":"Ownable","permalink":"/docs/next/tutorials/ownable"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/e2022d8c.83e9cfc2.js b/docs/assets/js/e2022d8c.83e9cfc2.js new file mode 100644 index 000000000..69ba08503 --- /dev/null +++ b/docs/assets/js/e2022d8c.83e9cfc2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2701],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>c});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=d(t),c=r,w=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?a.createElement(w,o(o({ref:n},u),{},{components:t})):a.createElement(w,o({ref:n},u))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var d=2;d<i;d++)o[d]=t[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},86058:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const i={sidebar_position:1},o="Ownable",l={unversionedId:"tutorials/ownable",id:"tutorials/ownable",title:"Ownable",description:"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.",source:"@site/docs/tutorials/ownable.md",sourceDirName:"tutorials",slug:"/tutorials/ownable",permalink:"/docs/next/tutorials/ownable",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Tutorials",permalink:"/docs/next/category/tutorials"},next:{title:"ERC-20",permalink:"/docs/next/tutorials/erc20"}},s={},d=[{value:"Framework features",id:"framework-features",level:2},{value:"Code",id:"code",level:2},{value:"Define a module",id:"define-a-module",level:3},{value:"Init the module",id:"init-the-module",level:3},{value:"Features implementation",id:"features-implementation",level:3},{value:"Test",id:"test",level:3},{value:"Summary",id:"summary",level:2},{value:"What's next",id:"whats-next",level:2}],u={toc:d};function p(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ownable"},"Ownable"),(0,r.kt)("p",null,"In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features."),(0,r.kt)("h2",{id:"framework-features"},"Framework features"),(0,r.kt)("p",null,"A module we will write in a minute, will help you master a few Odra features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"storing a single value,"),(0,r.kt)("li",{parentName:"ul"},"defining a constructor,"),(0,r.kt)("li",{parentName:"ul"},"error handling,"),(0,r.kt)("li",{parentName:"ul"},"defining and emitting ",(0,r.kt)("inlineCode",{parentName:"li"},"events"),"."),(0,r.kt)("li",{parentName:"ul"},"registering a contact in a test environment,"),(0,r.kt)("li",{parentName:"ul"},"interactions with the test environment,"),(0,r.kt)("li",{parentName:"ul"},"assertions (value, events, errors assertions).")),(0,r.kt)("h2",{id:"code"},"Code"),(0,r.kt)("p",null,"Before we write any code, we define functionalities we would like to implement."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Module has an initializer that should be called once. "),(0,r.kt)("li",{parentName:"ol"},"Only the current owner can set a new owner."),(0,r.kt)("li",{parentName:"ol"},"Read the current owner."),(0,r.kt)("li",{parentName:"ol"},"A function that fails if called by a non-owner account.")),(0,r.kt)("h3",{id:"define-a-module"},"Define a module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::{Address, Var};\n\n#[odra::module(events = [OwnershipTransferred])]\npub struct Ownable {\n owner: Var<Option<Address>>\n}\n")),(0,r.kt)("p",null,"That was easy, but it is crucial to understand the basics before we move on."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L3")," - Firstly, we need to create a struct called ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," and apply ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module(events = [OwnershipTransferred])]")," to it. The events attribute is optional but informs the Odra toolchain about the events that will be emitted by the module and includes them in the contract's metadata."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L5")," - Then we can define the layout of our module. It is extremely simple - just a single state value. What is most important is that you can never leave a raw type; you must always wrap it with ",(0,r.kt)("inlineCode",{parentName:"li"},"Var"),".")),(0,r.kt)("h3",{id:"init-the-module"},"Init the module"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"use odra::prelude::*;\nuse odra::{Address, module::Module, Var};\nuse odra::casper_event_standard::{self, Event};\n...\n\n#[odra::module]\nimpl Ownable {\n pub fn init(&mut self, owner: &Address) {\n if self.owner.get().is_some() {\n self.env().revert(Error::OwnerIsAlreadyInitialized)\n }\n\n self.owner.set(*owner);\n \n self.env().emit_event(OwnershipChanged {\n prev_owner: None,\n new_owner: *owner\n });\n }\n}\n\n#[derive(OdraError)]\npub enum Error {\n OwnerIsNotInitialized = 1,\n}\n\n#[derive(Event, Debug, PartialEq, Eq)]\npub struct OwnershipChanged {\n pub prev_owner: Option<Address>,\n pub new_owner: Address\n}\n")),(0,r.kt)("p",null,"Ok, we have done a couple of things, let's analyze them one by one:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"impl")," should be an Odra module, so add ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L8")," - The ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function is a constructor. This matters if we would like to deploy the ",(0,r.kt)("inlineCode",{parentName:"li"},"Ownable")," module as a standalone contract."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L22-25")," - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose, we defined an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum. Notice that the ",(0,r.kt)("inlineCode",{parentName:"li"},"OdraError")," derive macro is applied to the enum. It generates, among others, the required ",(0,r.kt)("inlineCode",{parentName:"li"},"Into<odra::OdraError>")," binding."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L9-L11")," - If the owner has been set already, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"ContractEnv::revert()")," function with an ",(0,r.kt)("inlineCode",{parentName:"li"},"Error::OwnerIsNotInitialized")," argument. "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13")," - Then we write the owner passed as an argument to the storage. To do so, we call the ",(0,r.kt)("inlineCode",{parentName:"li"},"set()")," on ",(0,r.kt)("inlineCode",{parentName:"li"},"Var"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L27-L31")," - Once the owner is set, we would like to inform the outside world. The first step is to define an event struct. The struct must derive from ",(0,r.kt)("inlineCode",{parentName:"li"},"casper_event_standard::Event"),". We highly recommend to derive ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PartialEq")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Eq")," for testing purpose."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L15")," - Finally, call ",(0,r.kt)("inlineCode",{parentName:"li"},"ContractEnv::emit_event()")," passing the ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged")," instance to the function. Hence, we set the first owner, we set the ",(0,r.kt)("inlineCode",{parentName:"li"},"prev_owner")," value to ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),". ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"L3 ",(0,r.kt)("inlineCode",{parentName:"p"},"use odra::casper_event_standard::{self, Event};")," imports the ",(0,r.kt)("inlineCode",{parentName:"p"},"Event")," macro, but also the whole ",(0,r.kt)("inlineCode",{parentName:"p"},"casper_event_standard")," module, which is required by the code generated by the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[derive(Event)]")," macro.")))),(0,r.kt)("h3",{id:"features-implementation"},"Features implementation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[odra::module]\nimpl Ownable {\n ...\n\n pub fn ensure_ownership(&self, address: &Address) {\n if Some(address) != self.owner.get().as_ref() {\n self.env().revert(Error::NotOwner)\n }\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ensure_ownership(&self.env().caller());\n let current_owner = self.get_owner();\n self.owner.set(*new_owner);\n self.env().emit_event(OwnershipChanged {\n prev_owner: Some(current_owner),\n new_owner: *new_owner\n });\n }\n\n pub fn get_owner(&self) -> Address {\n match self.owner.get() {\n Some(owner) => owner,\n None => self.env().revert(Error::OwnerIsNotInitialized)\n }\n }\n}\n\n#[derive(OdraError)]\npub enum Error {\n NotOwner = 1,\n OwnerIsAlreadyInitialized = 2,\n OwnerIsNotInitialized = 3,\n}\n")),(0,r.kt)("p",null,"The above implementation relies on the concepts we have already used in this tutorial, so it should be easy for you to get along."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7,L31")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()")," reads the current owner and reverts if it does not match the input ",(0,r.kt)("inlineCode",{parentName:"li"},"Address"),". Also, we need to update our ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," enum by adding a new variant ",(0,r.kt)("inlineCode",{parentName:"li"},"NotOwner"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - The function defined above can be reused in the ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()")," implementation. We pass to it the current caller, using the ",(0,r.kt)("inlineCode",{parentName:"li"},"ContractEnv::caller()")," function. Then we update the state and emit ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnershipChanged"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L21,L33")," - Lastly, a getter function. As the ",(0,r.kt)("inlineCode",{parentName:"li"},"Var::get()")," function returns an ",(0,r.kt)("inlineCode",{parentName:"li"},"Option"),", we need to handle a possible error. If someone calls the getter on an uninitialized module, it should revert with a new ",(0,r.kt)("inlineCode",{parentName:"li"},"Error")," variant ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnerIsNotInitialized"),".")),(0,r.kt)("h3",{id:"test"},"Test"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:"showLineNumbers",showLineNumbers:!0},"#[cfg(test)]\nmod tests {\n use super::*;\n use odra::HostEnv;\n\n fn setup() -> (OwnableHostRef, HostEnv, Address) {\n let env: HostEnv = odra_test::env();\n (OwnableDeployer::init(&env), env.clone(), env.get_account(0))\n }\n\n #[test]\n fn initialization_works() {\n let (ownable, _, owner) = setup();\n assert_eq!(ownable.get_owner(), owner);\n \n contract.env().emitted_event(\n ownable.address(),\n &OwnershipChanged {\n prev_owner: None,\n new_owner: owner\n }\n );\n }\n\n #[test]\n fn owner_can_change_ownership() {\n let (mut ownable, env, owner) = setup();\n let new_owner = env.get_account(1);\n \n env.set_caller(owner);\n ownable.change_ownership(&new_owner);\n assert_eq!(ownable.get_owner(), new_owner);\n\n contract.env().emitted_event(\n ownable.address(),\n &OwnershipChanged {\n prev_owner: Some(owner),\n new_owner\n }\n );\n }\n\n #[test]\n fn non_owner_cannot_change_ownership() {\n let (mut ownable, env, owner) = setup();\n let new_owner = env.get_account(1);\n ownable.change_ownership(&new_owner);\n \n assert_eq!(ownable.change_ownership(&new_owner), Err(Error::NotOwner.into()));\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L6")," - Each test case starts with the same initialization process, so for convenience, we have defined the setup() function, which we call as the first statement in each test. Take a look at the signature: ",(0,r.kt)("inlineCode",{parentName:"li"},"fn setup() -> (OwnableHostRef, HostEnv, Address)"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableHostRef")," is a contract reference generated by Odra. This reference allows us to call all the defined entrypoints, namely: ",(0,r.kt)("inlineCode",{parentName:"li"},"ensure_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"change_ownership()"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"get_owner()"),", but not ",(0,r.kt)("inlineCode",{parentName:"li"},"init()"),", which is a constructor."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L7, L8")," - The starting point of every test is getting an instance of ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv")," by calling ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_test::env()"),". Our function returns a triple: a contract ref, an env, and an address (the initial owner). Odra ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra::module]")," macro generates a ",(0,r.kt)("inlineCode",{parentName:"li"},"OwnableDeployer")," struct which exposes the ",(0,r.kt)("inlineCode",{parentName:"li"},"init")," function, which deploys the contract, calls its constructor and returns a reference. Lastly, the module needs an owner. The easiest way is to take one from the ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv"),". We choose the address of first account (which is the default one). "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L11")," - It is time to define the first test. As you see, it is a regular Rust test."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L13-14")," - Using the ",(0,r.kt)("inlineCode",{parentName:"li"},"setup()")," function, we get the owner and a reference (in this test, we don't use the env, so we ignore it). We make a standard assertion, comparing the owner we know with the value returned from the contract.",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may have noticed, we use here the term ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," interchangeably with ",(0,r.kt)("inlineCode",{parentName:"p"},"contract"),". The reason is once we deploy our module onto a virtual blockchain it may be considered a contract."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L16-22")," - On the contract, only the ",(0,r.kt)("inlineCode",{parentName:"li"},"init()")," function has been called, so we expect one event to have been emitted. To assert that, let's use ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv"),". To get the env, we call ",(0,r.kt)("inlineCode",{parentName:"li"},"env()")," on the contract, then call ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv::emitted_event"),". As the first argument, pass the contract address you want to read events from, followed by an event as you expect it to have occurred."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L28")," - Because we know the initial owner is the 0th account, we must select a different account. It could be any index from 1 to 19 - the ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv")," predefines 20 accounts."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L30")," - As mentioned, the default is the 0th account, if you want to change the executor, call the ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv::set_caller()")," function. ",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The caller switch applies only the next contract interaction, the second call will be done as the default account."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"L45-49")," - If a non-owner account tries to change ownership, we expect it to fail. To capture the error, call ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv::try_change_ownership()")," instead of ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv::change_ownership()"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"HostEnv")," provides try",(0,r.kt)("em",{parentName:"li"}," functions for each contract's entrypoint. The `try"),(0,r.kt)("inlineCode",{parentName:"li"},"functions return"),"OdraResult",(0,r.kt)("inlineCode",{parentName:"li"},"(an alias for"),"Result<T, OdraError>",(0,r.kt)("inlineCode",{parentName:"li"},") instead of panicking and halting the execution. In our case, we expect the contract to revert with the "),"Error::NotOwner",(0,r.kt)("inlineCode",{parentName:"li"},"error. To compare the error, we use the"),"Error::into()",(0,r.kt)("inlineCode",{parentName:"li"},"function, which converts the error into the"),"OdraError` type.")),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable")," module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract."),(0,r.kt)("h2",{id:"whats-next"},"What's next"),(0,r.kt)("p",null,"In the next tutorial we will implement a ERC20 standard."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/e294fa30.debc291b.js b/docs/assets/js/e294fa30.debc291b.js new file mode 100644 index 000000000..bc2b7f82c --- /dev/null +++ b/docs/assets/js/e294fa30.debc291b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4023],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(n),d=o,f=m["".concat(c,".").concat(d)]||m[d]||p[d]||a;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},95086:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,description:"How to get information from the Host"},i="Host Communication",s={unversionedId:"basics/communicating-with-host",id:"version-0.7.0/basics/communicating-with-host",title:"Host Communication",description:"How to get information from the Host",source:"@site/versioned_docs/version-0.7.0/basics/06-communicating-with-host.md",sourceDirName:"basics",slug:"/basics/communicating-with-host",permalink:"/docs/basics/communicating-with-host",draft:!1,tags:[],version:"0.7.0",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"How to get information from the Host"},sidebar:"tutorialSidebar",previous:{title:"Storage interaction",permalink:"/docs/basics/storage-interaction"},next:{title:"Testing",permalink:"/docs/basics/testing"}},c={},l=[{value:"What's next",id:"whats-next",level:2}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"host-communication"},"Host Communication"),(0,o.kt)("p",null,"One of the things that your contract will probably do is to query the host for some information -\nwhat is the current time? Who called me? Following example shows how to do this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/host_functions.rs"',title:'"examples/src/features/host_functions.rs"'},"use odra::Variable;\nuse odra::types::{BlockTime, Address};\n\n#[odra::module]\npub struct HostContract {\n name: Variable<String>,\n created_at: Variable<BlockTime>,\n created_by: Variable<Address>,\n}\n\n#[odra::module]\nimpl HostContract {\n #[odra(init)]\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.created_at.set(odra::contract_env::get_block_time());\n self.created_by.set(odra::contract_env::caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n}\n")),(0,o.kt)("p",null,"As you can see, we are calling functions from ",(0,o.kt)("inlineCode",{parentName:"p"},"odra::contract_env"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"get_block_time()")," will return\nthe current block time wrapped in Odra type ",(0,o.kt)("inlineCode",{parentName:"p"},"BlockTime"),". ",(0,o.kt)("inlineCode",{parentName:"p"},"caller()")," will return an Odra ",(0,o.kt)("inlineCode",{parentName:"p"},"Address")," of\na caller (this can be an external caller or another contract)."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will learn more functions that Odra exposes from host and types it uses in further articles.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"In the next article, we'll dive into testing your contracts with Odra, so you can check that the code\nwe presented in fact works!"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/e31bed34.b9cedacd.js b/docs/assets/js/e31bed34.b9cedacd.js new file mode 100644 index 000000000..2b5567e94 --- /dev/null +++ b/docs/assets/js/e31bed34.b9cedacd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1839],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=d(t),m=r,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||o;return t?a.createElement(f,l(l({ref:n},c),{},{components:t})):a.createElement(f,l({ref:n},c))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,l=new Array(o);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=t[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,t)}p.displayName="MDXCreateElement"},38090:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=t(87462),r=(t(67294),t(3905));const o={},l="Delegate",i={unversionedId:"advanced/delegate",id:"version-0.3.1/advanced/delegate",title:"Delegate",description:"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.",source:"@site/versioned_docs/version-0.3.1/advanced/02-delegate.md",sourceDirName:"advanced",slug:"/advanced/delegate",permalink:"/docs/0.3.1/advanced/delegate",draft:!1,tags:[],version:"0.3.1",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Module Composer",permalink:"/docs/0.3.1/advanced/composer"},next:{title:"Advanced Storage Concepts",permalink:"/docs/0.3.1/advanced/advanced-storage"}},s={},d=[{value:"Overview",id:"overview",level:2},{value:"Code Examples",id:"code-examples",level:2}],c={toc:d};function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"delegate"},"Delegate"),(0,r.kt)("p",null,"Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module."),(0,r.kt)("p",null,"The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"To utilize the delegate feature in your contract, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro, your parent module remains clean and easy to understand."),(0,r.kt)("p",null,"You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself."),(0,r.kt)("h2",{id:"code-examples"},"Code Examples"),(0,r.kt)("p",null,"Consider the following basic example for better understanding:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);\n pub fn approve(&mut self, spender: Address, amount: U256);\n pub fn name(&self) -> String;\n pub fn symbol(&self) -> String;\n pub fn decimals(&self) -> u8;\n pub fn total_supply(&self) -> U256;\n pub fn balance_of(&self, owner: Address) -> U256;\n pub fn allowance(&self, owner: Address, spender: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n pub fn change_ownership(&mut self, new_owner: Address);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"OwnedToken")," contract includes two modules: ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),". We delegate various functions from both modules using the ",(0,r.kt)("inlineCode",{parentName:"p"},"delegate!")," macro. As a result, the contract retains its succinctness without compromising on functionality."),(0,r.kt)("p",null,"The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities."),(0,r.kt)("p",null,"Let's take a look at another example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"use odra::{\n contract_env,\n types::{Address, U256}\n};\n\nuse crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};\n\n#[odra::module]\npub struct DeFiPlatform {\n ownable: Ownable,\n erc20: Erc20,\n exchange: Exchange\n}\n\n#[odra::module]\nimpl DeFiPlatform {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n self.exchange.init(exchange_rate);\n }\n\n delegate! {\n to self.erc20 {\n pub fn transfer(&mut self, recipient: Address, amount: U256);\n pub fn balance_of(&self, owner: Address) -> U256;\n }\n\n to self.ownable {\n pub fn get_owner(&self) -> Address;\n }\n\n to self.exchange {\n pub fn swap(&mut self, sender: Address, recipient: Address);\n pub fn set_exchange_rate(&mut self, new_rate: u64);\n }\n }\n\n pub fn mint(&mut self, address: Address, amount: U256) {\n self.ownable.ensure_ownership(contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,r.kt)("p",null,"In this ",(0,r.kt)("inlineCode",{parentName:"p"},"DeFiPlatform")," contract, we include ",(0,r.kt)("inlineCode",{parentName:"p"},"Erc20"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Ownable"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"Exchange")," modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure."),(0,r.kt)("p",null,"Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/e4b2a41e.272fb4d8.js b/docs/assets/js/e4b2a41e.272fb4d8.js new file mode 100644 index 000000000..5b467e625 --- /dev/null +++ b/docs/assets/js/e4b2a41e.272fb4d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1422],{67251:e=>{e.exports=JSON.parse('{"title":"Examples","description":"Examples","slug":"/category/examples","permalink":"/docs/0.3.0/category/examples","navigation":{"previous":{"title":"Casper","permalink":"/docs/0.3.0/backends/casper"},"next":{"title":"odra-examples","permalink":"/docs/0.3.0/examples/odra-examples"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/e538a9e1.c4c0e0cf.js b/docs/assets/js/e538a9e1.c4c0e0cf.js new file mode 100644 index 000000000..694e58bed --- /dev/null +++ b/docs/assets/js/e538a9e1.c4c0e0cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[635],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},24046:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:2,description:"Files and folders in the Odra project"},i="Directory structure",l={unversionedId:"basics/directory-structure",id:"version-0.3.0/basics/directory-structure",title:"Directory structure",description:"Files and folders in the Odra project",source:"@site/versioned_docs/version-0.3.0/basics/02-directory-structure.md",sourceDirName:"basics",slug:"/basics/directory-structure",permalink:"/docs/0.3.0/basics/directory-structure",draft:!1,tags:[],version:"0.3.0",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Files and folders in the Odra project"},sidebar:"defaultSidebar",previous:{title:"Cargo Odra",permalink:"/docs/0.3.0/basics/cargo-odra"},next:{title:"Odra.toml",permalink:"/docs/0.3.0/basics/odra-toml"}},s={},c=[{value:"Cargo.toml",id:"cargotoml",level:2},{value:"Odra.toml",id:"odratoml",level:2},{value:".builder_* folders",id:"builder_-folders",level:2},{value:"src/",id:"src",level:2},{value:"target/",id:"target",level:2},{value:"wasm/",id:"wasm",level:2}],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"directory-structure"},"Directory structure"),(0,a.kt)("p",null,"After creating a new project using Odra and running the tests, you will be presented with the\nfollowing files and directories:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 CHANGELOG.md\n\u251c\u2500\u2500 Odra.toml\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 .builder_casper/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 flipper.rs\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 target/\n\u2514\u2500\u2500 wasm/\n")),(0,a.kt)("h2",{id:"cargotoml"},"Cargo.toml"),(0,a.kt)("p",null,"Let's first take a look at ",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[package]\nname = "sample"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nodra = { version = "0.3.0", default-features = false }\n\n[features]\ndefault = ["mock-vm"]\nmock-vm = ["odra/mock-vm"]\ncasper = ["odra/casper"]\n')),(0,a.kt)("p",null,"By default, your project will use the latest odra version available at crates.io. We are using two features:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/mock-vm")," - it is responsible for running tests on Odra's MockVM"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"odra/casper")," - backend implementation of Casper blockchain\nMore backends will be released as features that will be possible to enable here.")),(0,a.kt)("h2",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"This is the file that holds information about contracts that will be generated when running ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"As we can see, we have a single contract, its ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) corresponds to\nthe contract is located in ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),".\nMore contracts can be added here by hand, or by using ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command."),(0,a.kt)("h2",{id:"builder_-folders"},".builder_* folders"),(0,a.kt)("p",null,"Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary\nfor building wasm files and running them against blockchain VMs. As it is not necessary to modify\nfiles in those folders in any way, by default they are hidden (hence the ",(0,a.kt)("inlineCode",{parentName:"p"},".")," at the beginning of the\nfolder name)."),(0,a.kt)("h2",{id:"src"},"src/"),(0,a.kt)("p",null,"This is the folder where your smart contract files live."),(0,a.kt)("h2",{id:"target"},"target/"),(0,a.kt)("p",null,"Files generated by cargo during the build process are put here."),(0,a.kt)("h2",{id:"wasm"},"wasm/"),(0,a.kt)("p",null,"WASM files generated by ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra build")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra test")," are put here. You can grab those WASM files\nand deploy them on the blockchain of your choosing."),(0,a.kt)("h1",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Now, let's take a look at one of the files mentioned above in more detail,\nnamely the ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/e5e64bd0.902e37fb.js b/docs/assets/js/e5e64bd0.902e37fb.js new file mode 100644 index 000000000..0146ccfe2 --- /dev/null +++ b/docs/assets/js/e5e64bd0.902e37fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1401],{65322:e=>{e.exports=JSON.parse('{"title":"Backends","description":"Backends","slug":"/category/backends","permalink":"/docs/0.3.0/category/backends","navigation":{"previous":{"title":"Attributes","permalink":"/docs/0.3.0/advanced/attributes"},"next":{"title":"What is a backend?","permalink":"/docs/0.3.0/backends/what-is-a-backend"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/e8a3ffa2.9e6f7abe.js b/docs/assets/js/e8a3ffa2.9e6f7abe.js new file mode 100644 index 000000000..cda2d4ce6 --- /dev/null +++ b/docs/assets/js/e8a3ffa2.9e6f7abe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1389],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(a),g=n,m=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return a?r.createElement(m,l(l({ref:t},p),{},{components:a})):r.createElement(m,l({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var c=2;c<o;c++)l[c]=a[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,a)}d.displayName="MDXCreateElement"},10296:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=a(87462),n=(a(67294),a(3905));const o={sidebar_position:1},l="Installation",i={unversionedId:"getting-started/installation",id:"version-0.6.0/getting-started/installation",title:"Installation",description:"Hello fellow Odra user! This page will guide you through the installation process.",source:"@site/versioned_docs/version-0.6.0/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/0.6.0/getting-started/installation",draft:!1,tags:[],version:"0.6.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Getting started",permalink:"/docs/0.6.0/category/getting-started"},next:{title:"Flipper example",permalink:"/docs/0.6.0/getting-started/flipper"}},s={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Cargo Odra",id:"installing-cargo-odra",level:2},{value:"Creating a new Odra project",id:"creating-a-new-odra-project",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"installation"},"Installation"),(0,n.kt)("p",null,"Hello fellow Odra user! This page will guide you through the installation process."),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("p",null,"To start working with Odra, you need to have the following installed on your machine:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Rust toolchain installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://rustup.rs/"},"rustup.rs"),")"),(0,n.kt)("li",{parentName:"ul"},"wasmstrip tool installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/WebAssembly/wabt"},"wabt"),")")),(0,n.kt)("p",null,"We do not provide exact commands for installing these tools, as they are different for different operating systems.\nPlease refer to the documentation of the tools themselves."),(0,n.kt)("p",null,"With Rust toolchain ready, you can add a new target:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"rustup target add wasm32-unknown-unknown\n")),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("inlineCode",{parentName:"p"},"wasm32-unknown-uknown")," is a target that will be used by Odra to compile your smart contracts to WASM files.")),(0,n.kt)("h2",{id:"installing-cargo-odra"},"Installing Cargo Odra"),(0,n.kt)("p",null,"Cargo Odra is a helpful tool that will help you to build and test your smart contracts.\nIt is not required to use Odra, but the documentation will assume that you have it installed."),(0,n.kt)("p",null,"To install it, simply execute the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo install cargo-odra\n")),(0,n.kt)("p",null,"To check if it was installed correctly and see available commands, type:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra --help\n")),(0,n.kt)("p",null,"If everything went fine, we can proceed to the next step."),(0,n.kt)("h2",{id:"creating-a-new-odra-project"},"Creating a new Odra project"),(0,n.kt)("p",null,"To create a new project, simply execute:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project && cd my_project\n")),(0,n.kt)("p",null,'This will create a new folder called "my_project" and initialize Odra there. Cargo Odra\nwill create a sample contract for you in src directory. You can run the tests of this contract\nby executing:'),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,n.kt)("p",null,"This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Congratulations!")," Now you are ready to create contracts using Odra framework! If you had any problems during\nthe installation process, feel free to ask for help on our ",(0,n.kt)("a",{parentName:"p",href:"https://discord.com/invite/Mm5ABc9P8k"},"Discord"),"."),(0,n.kt)("h2",{id:"whats-next"},"What's next?"),(0,n.kt)("p",null,"If you want to see the code that you just tested, continue to the description of ",(0,n.kt)("a",{parentName:"p",href:"flipper"},"Flipper example"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/e9ea549b.2dc87fd4.js b/docs/assets/js/e9ea549b.2dc87fd4.js new file mode 100644 index 000000000..966bf922c --- /dev/null +++ b/docs/assets/js/e9ea549b.2dc87fd4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5495],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(i,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=f;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:a,l[1]=s;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},3070:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},l="Flipper example",s={unversionedId:"getting-started/flipper",id:"getting-started/flipper",title:"Flipper example",description:"To quickly start working with Odra, take a look at the following code sample. If you followed the",source:"@site/docs/getting-started/flipper.md",sourceDirName:"getting-started",slug:"/getting-started/flipper",permalink:"/docs/next/getting-started/flipper",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/docs/next/getting-started/installation"},next:{title:"Basics",permalink:"/docs/next/category/basics"}},i={},p=[{value:"Let's flip",id:"lets-flip",level:2},{value:"Testing",id:"testing",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-example"},"Flipper example"),(0,a.kt)("p",null,"To quickly start working with Odra, take a look at the following code sample. If you followed the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/next/getting-started/installation"},"Installation")," tutorial, you should have this file already at ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),"."),(0,a.kt)("p",null,"For further explanation of how this code works, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/next/basics/flipper-internals"},"Flipper Internals"),"."),(0,a.kt)("h2",{id:"lets-flip"},"Let's flip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs" showLineNumbers',title:'"flipper.rs"',showLineNumbers:!0},"use odra::Var;\n\n/// A module definition. Each module struct consists Vars and Mappings\n/// or/and another modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value, \n /// it's a proxy that writes/reads value to/from the host.\n value: Var<bool>,\n}\n\n/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor, must be named `init`.\n ///\n /// Initializes the contract with the value of value.\n pub fn init(&mut self) {\n self.value.set(false);\n }\n\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n /// Retrieves value from the storage. \n /// If the value has never been set, the default value is returned.\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperHostRef;\n use odra::host::{Deployer, NoArgs};\n\n #[test]\n fn flipping() {\n let env = odra_test::env();\n // To test a module we need to deploy it. Autogenerated `FlipperHostRef`\n // implements `Deployer` trait, so we can use it to deploy the module.\n let mut contract = FlipperHostRef::deploy(&env, NoArgs);\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n\n #[test]\n fn test_two_flippers() {\n let env = odra_test::env();\n let mut contract1 = FlipperHostRef::deploy(&env, NoArgs);\n let contract2 = FlipperHostRef::deploy(&env, NoArgs);\n assert!(!contract1.get());\n assert!(!contract2.get());\n contract1.flip();\n assert!(contract1.get());\n assert!(!contract2.get());\n }\n}\n")),(0,a.kt)("h2",{id:"testing"},"Testing"),(0,a.kt)("p",null,"To run the tests, execute the following command:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test # or add the `-b casper` flag to run tests on the CasperVM\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next category of articles, we will go through basic concepts of Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ea145f46.320423fc.js b/docs/assets/js/ea145f46.320423fc.js new file mode 100644 index 000000000..1ca78d005 --- /dev/null +++ b/docs/assets/js/ea145f46.320423fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9856],{92892:t=>{t.exports=JSON.parse('{"title":"Getting started","description":"5 minutes to learn the most important Odra concepts.","slug":"/category/getting-started","permalink":"/docs/0.2.0/category/getting-started","navigation":{"previous":{"title":"Odra framework","permalink":"/docs/0.2.0/"},"next":{"title":"Installation","permalink":"/docs/0.2.0/getting-started/installation"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/ed6ae2e5.fcf896d2.js b/docs/assets/js/ed6ae2e5.fcf896d2.js new file mode 100644 index 000000000..e185473dc --- /dev/null +++ b/docs/assets/js/ed6ae2e5.fcf896d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7493],{35069:e=>{e.exports=JSON.parse('{"title":"Backends","description":"Backends","slug":"/category/backends","permalink":"/docs/0.4.0/category/backends","navigation":{"previous":{"title":"Attributes","permalink":"/docs/0.4.0/advanced/attributes"},"next":{"title":"What is a backend?","permalink":"/docs/0.4.0/backends/what-is-a-backend"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/ed898d19.b182a3b1.js b/docs/assets/js/ed898d19.b182a3b1.js new file mode 100644 index 000000000..320d0a452 --- /dev/null +++ b/docs/assets/js/ed898d19.b182a3b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[659],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=r,v=p["".concat(s,".").concat(m)]||p[m]||c[m]||o;return n?a.createElement(v,l(l({ref:t},d),{},{components:n})):a.createElement(v,l({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u<o;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}p.displayName="MDXCreateElement"},65822:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(87462),r=(n(67294),n(3905));const o={},l="Module reusing",i={unversionedId:"advanced/using",id:"version-0.6.0/advanced/using",title:"Module reusing",description:"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.",source:"@site/versioned_docs/version-0.6.0/advanced/01-using.md",sourceDirName:"advanced",slug:"/advanced/using",permalink:"/docs/0.6.0/advanced/using",draft:!1,tags:[],version:"0.6.0",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Advanced",permalink:"/docs/0.6.0/category/advanced"},next:{title:"Delegate",permalink:"/docs/0.6.0/advanced/delegate"}},s={},u=[{value:"Conceptual Overview",id:"conceptual-overview",level:2},{value:"Usage",id:"usage",level:2}],d={toc:u};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"module-reusing"},"Module reusing"),(0,r.kt)("p",null,"This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples."),(0,r.kt)("h2",{id:"conceptual-overview"},"Conceptual Overview"),(0,r.kt)("p",null,"By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[odra::module]\nstruct Contract {\n value: Variable<u8>, // the default namespace would be "value"\n module: Module\n}\n\n#[odra::module]\nstruct Module {\n secret: Variable<String> // the default namespace would be "module_secret"\n}\n')),(0,r.kt)("p",null,"While this isolation often proves useful, there are scenarios where shared storage is beneficial."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null," Odra generates an array of keys, prefixing the storage key of child modules with the parent namespace, like in the example above. But what if you want to reuse the same instance of a module? Add a ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(using)]"),' attribute to a module to override the default behavior. This is information for the module "Do not prefix storage keys for the given module." so effectively, the child and the parent use the same module instance.'),(0,r.kt)("p",null,"Let's illustrate it with a simple example. The example provided below introduces some additional complexity by featuring deeper module nesting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use odra::Variable;\n\n#[odra::module]\npub struct SharedStorage {\n pub value: Variable<String>\n}\n\n#[odra::module]\npub struct MyStorage {\n pub shared: SharedStorage,\n pub version: Variable<u8>\n}\n\n#[odra::module]\npub struct ComposableContract {\n pub shared: SharedStorage,\n #[odra(using = "shared")]\n pub storage: MyStorage\n}\n\n#[odra::module]\nimpl ComposableContract {\n #[odra(init)]\n pub fn init(&mut self, version: u8, value: String) {\n self.storage.version.set(version);\n self.shared.value.set(value);\n }\n\n pub fn get_value(&self) -> String {\n self.shared.value.get_or_default()\n }\n\n pub fn get_value_via_storage(&self) -> String {\n self.storage.shared.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod test {\n use crate::composer::ComplexContractDeployer;\n\n #[test]\n fn t() {\n let shared_value = "shared_value".to_string();\n let extra_value: u32 = 314;\n let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);\n\n assert_eq!(token.get_value(), shared_value);\n assert_eq!(token.get_value_via_storage(), shared_value);\n assert_eq!(token.get_extra_value(), extra_value);\n }\n}\n')),(0,r.kt)("p",null,"In this example, we've introduced a new module, ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", which nests ",(0,r.kt)("inlineCode",{parentName:"p"},"MyStorage")," and includes an extra value. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ComplexContract")," contains ",(0,r.kt)("inlineCode",{parentName:"p"},"SharedStorage")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MoreStorage"),", creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels."),(0,r.kt)("p",null,"If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"On the contract level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_shared_value"),"."),(0,r.kt)("li",{parentName:"ol"},"On the ",(0,r.kt)("inlineCode",{parentName:"li"},"MyStorage")," module level - ",(0,r.kt)("inlineCode",{parentName:"li"},"contract_more_storage_shared_value"),".")),(0,r.kt)("p",null,"This example showcases how you can effectively use the module reusing feature to build intricate and efficient smart contracts."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ee3d80a6.6c361738.js b/docs/assets/js/ee3d80a6.6c361738.js new file mode 100644 index 000000000..4bc1c99f4 --- /dev/null +++ b/docs/assets/js/ee3d80a6.6c361738.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[8927],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=a,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},78575:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:3,description:"Odra's configuration file"},i="Odra.toml",l={unversionedId:"basics/odra-toml",id:"version-0.7.0/basics/odra-toml",title:"Odra.toml",description:"Odra's configuration file",source:"@site/versioned_docs/version-0.7.0/basics/03-odra-toml.md",sourceDirName:"basics",slug:"/basics/odra-toml",permalink:"/docs/basics/odra-toml",draft:!1,tags:[],version:"0.7.0",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"Odra's configuration file"},sidebar:"tutorialSidebar",previous:{title:"Directory structure",permalink:"/docs/basics/directory-structure"},next:{title:"Flipper Internals",permalink:"/docs/basics/flipper-internals"}},c={},s=[{value:"Adding a new contract manually",id:"adding-a-new-contract-manually",level:2},{value:"What's next",id:"whats-next",level:2}],p={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odratoml"},"Odra.toml"),(0,a.kt)("p",null,"As mentioned in the previous article, ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," is a file that contains information about all the contracts\nthat Odra will build. Let's take a look at the file structure again:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n')),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," will be used as a name for the contract - the generated wasm file will be in the above case named\n",(0,a.kt)("inlineCode",{parentName:"p"},"flipper.wasm"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," (Fully Qualified Name) is used by the builder to locate the exact struct where\nthe contract is defined."),(0,a.kt)("h2",{id:"adding-a-new-contract-manually"},"Adding a new contract manually"),(0,a.kt)("p",null,"Besides using the ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo odra generate")," command, you can add a new contract to be compiled by hand.\nTo do this, add another ",(0,a.kt)("inlineCode",{parentName:"p"},"[[contracts]]")," element, name it and make sure that the ",(0,a.kt)("inlineCode",{parentName:"p"},"fqn")," is set correctly."),(0,a.kt)("p",null,"For example, if you want to create a new contract called ",(0,a.kt)("inlineCode",{parentName:"p"},"counter"),", your ",(0,a.kt)("inlineCode",{parentName:"p"},"Odra.toml")," file should finally\nlook like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'[[contracts]]\nname = "flipper"\nfqn = "sample::Flipper"\n\n[[contracts]]\nname = "counter"\nfqn = "sample::Counter"\n')),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous\n",(0,a.kt)("inlineCode",{parentName:"p"},"Flipper")," contract."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/eedc1cb5.c39fe2ed.js b/docs/assets/js/eedc1cb5.c39fe2ed.js new file mode 100644 index 000000000..a6cb03e1b --- /dev/null +++ b/docs/assets/js/eedc1cb5.c39fe2ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4248],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?n(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,o,a=function(e,r){if(null==e)return{};var t,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},c=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||n;return t?o.createElement(f,l(l({ref:r},c),{},{components:t})):o.createElement(f,l({ref:r},c))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,l=new Array(n);l[0]=u;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<n;p++)l[p]=t[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},30420:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var o=t(87462),a=(t(67294),t(3905));const n={sidebar_position:1},l="odra-examples",i={unversionedId:"examples/odra-examples",id:"version-0.6.0/examples/odra-examples",title:"odra-examples",description:"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.",source:"@site/versioned_docs/version-0.6.0/examples/odra-examples.md",sourceDirName:"examples",slug:"/examples/odra-examples",permalink:"/docs/0.6.0/examples/odra-examples",draft:!1,tags:[],version:"0.6.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Examples",permalink:"/docs/0.6.0/category/examples"},next:{title:"Using odra-modules",permalink:"/docs/0.6.0/examples/using-odra-modules"}},s={},p=[{value:"What's next",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"odra-examples"},"odra-examples"),(0,a.kt)("p",null,"Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the ",(0,a.kt)("inlineCode",{parentName:"p"},"examples")," in the Odra main repository."),(0,a.kt)("p",null,'The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.'),(0,a.kt)("p",null,"Don't worry if you find learning solely by reading the code challenging. Go to the ",(0,a.kt)("a",{parentName:"p",href:"../category/tutorials/"},"Tutorial")," section, where we will review it together. We will break the code into pieces, leaving no space for further questions."),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn about reusable Odra components encapsulated in ",(0,a.kt)("inlineCode",{parentName:"p"},"odra-modules"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/f00a1e6f.67c65fac.js b/docs/assets/js/f00a1e6f.67c65fac.js new file mode 100644 index 000000000..410e57efe --- /dev/null +++ b/docs/assets/js/f00a1e6f.67c65fac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1171],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var r=n(67294);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 s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=l(n),m=a,v=u["".concat(c,".").concat(m)]||u[m]||p[m]||s;return n?r.createElement(v,o(o({ref:t},d),{},{components:n})):r.createElement(v,o({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,o=new Array(s);o[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var l=2;l<s;l++)o[l]=n[l];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},88378:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const s={sidebar_position:9,description:"Creating and emitting Events"},o="Events",i={unversionedId:"basics/events",id:"version-0.4.0/basics/events",title:"Events",description:"Creating and emitting Events",source:"@site/versioned_docs/version-0.4.0/basics/09-events.md",sourceDirName:"basics",slug:"/basics/events",permalink:"/docs/0.4.0/basics/events",draft:!1,tags:[],version:"0.4.0",sidebarPosition:9,frontMatter:{sidebar_position:9,description:"Creating and emitting Events"},sidebar:"tutorialSidebar",previous:{title:"Errors",permalink:"/docs/0.4.0/basics/errors"},next:{title:"Cross calls",permalink:"/docs/0.4.0/basics/cross-calls"}},c={},l=[{value:"Testing events",id:"testing-events",level:2},{value:"What's next",id:"whats-next",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Different blockchains implement events in different ways. Odra lets you forget about it by introducing\nOdra Events. Take a look:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"use odra::{Event, contract_env};\nuse odra::types::{Address, BlockTime, event::OdraEvent};\n\n#[odra::module(events = [PartyStarted])]\npub struct PartyContract {\n}\n\n#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n\n#[odra::module]\nimpl PartyContract {\n #[odra(init)]\n pub fn init(&self) {\n PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n }.emit();\n }\n}\n")),(0,a.kt)("p",null,"We defined a new contract, which emits an event called ",(0,a.kt)("inlineCode",{parentName:"p"},"PartyStarted")," when the contract is deployed.\nTo define an event, we derive an ",(0,a.kt)("inlineCode",{parentName:"p"},"Event")," macro like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"#[derive(Event, PartialEq, Eq, Debug)]\npub struct PartyStarted {\n pub caller: Address,\n pub block_time: BlockTime,\n}\n")),(0,a.kt)("p",null,"Among other things, it adds an ",(0,a.kt)("inlineCode",{parentName:"p"},"emit()")," function to the struct, which allows you to emit the event simply\nas that:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"PartyStarted {\n caller: contract_env::caller(),\n block_time: contract_env::get_block_time(),\n}.emit();\n")),(0,a.kt)("p",null,"Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an ",(0,a.kt)("inlineCode",{parentName:"p"},"events")," attribute to the struct's ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. "),(0,a.kt)("p",null,"The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module."),(0,a.kt)("h2",{id:"testing-events"},"Testing events"),(0,a.kt)("p",null,"Odra's ",(0,a.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a handy macro ",(0,a.kt)("inlineCode",{parentName:"p"},"assert_events!")," which lets you easily test the events that a given contract has emitted:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/docs/events.rs"',title:'"examples/src/docs/events.rs"'},"use odra::{assert_events, test_env};\nuse crate::docs::events::PartyStarted;\nuse super::PartyContractDeployer;\n\n#[test]\nfn test_party() {\n let party_contract = PartyContractDeployer::init();\n assert_events!(\n party_contract,\n PartyStarted {\n caller: test_env::get_account(0),\n block_time: 0,\n }\n );\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"Read the next article to learn how to call other contracts from the contract context."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/f0928d2f.b6746a68.js b/docs/assets/js/f0928d2f.b6746a68.js new file mode 100644 index 000000000..1cb20b88d --- /dev/null +++ b/docs/assets/js/f0928d2f.b6746a68.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[5660],{78942:e=>{e.exports=JSON.parse('{"title":"Tutorials","description":"The theory is good, but the practice is even better. Let\'s go through a few examples summing up all the Odra concepts.","slug":"/category/tutorials","permalink":"/docs/0.3.0/category/tutorials","navigation":{"previous":{"title":"Using odra-modules","permalink":"/docs/0.3.0/examples/using-odra-modules"},"next":{"title":"Ownable","permalink":"/docs/0.3.0/tutorials/ownable"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/f1080184.dc2838d7.js b/docs/assets/js/f1080184.dc2838d7.js new file mode 100644 index 000000000..cf8c9ab89 --- /dev/null +++ b/docs/assets/js/f1080184.dc2838d7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9074],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(a),g=n,m=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return a?r.createElement(m,l(l({ref:t},p),{},{components:a})):r.createElement(m,l({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var c=2;c<o;c++)l[c]=a[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,a)}d.displayName="MDXCreateElement"},58327:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=a(87462),n=(a(67294),a(3905));const o={sidebar_position:1},l="Installation",i={unversionedId:"getting-started/installation",id:"version-0.7.0/getting-started/installation",title:"Installation",description:"Hello fellow Odra user! This page will guide you through the installation process.",source:"@site/versioned_docs/version-0.7.0/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/getting-started/installation",draft:!1,tags:[],version:"0.7.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Getting started",permalink:"/docs/category/getting-started"},next:{title:"Flipper example",permalink:"/docs/getting-started/flipper"}},s={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Cargo Odra",id:"installing-cargo-odra",level:2},{value:"Creating a new Odra project",id:"creating-a-new-odra-project",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"installation"},"Installation"),(0,n.kt)("p",null,"Hello fellow Odra user! This page will guide you through the installation process."),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("p",null,"To start working with Odra, you need to have the following installed on your machine:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Rust toolchain installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://rustup.rs/"},"rustup.rs"),")"),(0,n.kt)("li",{parentName:"ul"},"wasmstrip tool installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/WebAssembly/wabt"},"wabt"),")")),(0,n.kt)("p",null,"We do not provide exact commands for installing these tools, as they are different for different operating systems.\nPlease refer to the documentation of the tools themselves."),(0,n.kt)("p",null,"With Rust toolchain ready, you can add a new target:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"rustup target add wasm32-unknown-unknown\n")),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("inlineCode",{parentName:"p"},"wasm32-unknown-uknown")," is a target that will be used by Odra to compile your smart contracts to WASM files.")),(0,n.kt)("h2",{id:"installing-cargo-odra"},"Installing Cargo Odra"),(0,n.kt)("p",null,"Cargo Odra is a helpful tool that will help you to build and test your smart contracts.\nIt is not required to use Odra, but the documentation will assume that you have it installed."),(0,n.kt)("p",null,"To install it, simply execute the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo install cargo-odra\n")),(0,n.kt)("p",null,"To check if it was installed correctly and see available commands, type:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra --help\n")),(0,n.kt)("p",null,"If everything went fine, we can proceed to the next step."),(0,n.kt)("h2",{id:"creating-a-new-odra-project"},"Creating a new Odra project"),(0,n.kt)("p",null,"To create a new project, simply execute:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project && cd my_project\n")),(0,n.kt)("p",null,'This will create a new folder called "my_project" and initialize Odra there. Cargo Odra\nwill create a sample contract for you in src directory. You can run the tests of this contract\nby executing:'),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,n.kt)("p",null,"This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Congratulations!")," Now you are ready to create contracts using Odra framework! If you had any problems during\nthe installation process, feel free to ask for help on our ",(0,n.kt)("a",{parentName:"p",href:"https://discord.com/invite/Mm5ABc9P8k"},"Discord"),"."),(0,n.kt)("h2",{id:"whats-next"},"What's next?"),(0,n.kt)("p",null,"If you want to see the code that you just tested, continue to the description of ",(0,n.kt)("a",{parentName:"p",href:"flipper"},"Flipper example"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/f146bc3c.cc1925d4.js b/docs/assets/js/f146bc3c.cc1925d4.js new file mode 100644 index 000000000..60e27039a --- /dev/null +++ b/docs/assets/js/f146bc3c.cc1925d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2329],{73800:e=>{e.exports=JSON.parse('{"title":"Examples","description":"Examples","slug":"/category/examples","permalink":"/docs/0.6.0/category/examples","navigation":{"previous":{"title":"Casper","permalink":"/docs/0.6.0/backends/casper"},"next":{"title":"odra-examples","permalink":"/docs/0.6.0/examples/odra-examples"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/f54718af.62e2f4f8.js b/docs/assets/js/f54718af.62e2f4f8.js new file mode 100644 index 000000000..708edad77 --- /dev/null +++ b/docs/assets/js/f54718af.62e2f4f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[2294],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(a),m=r,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,s=new Array(o);s[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var p=2;p<o;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},53478:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const o={sidebar_position:3},s="Casper",i={unversionedId:"backends/casper",id:"version-0.5.0/backends/casper",title:"Casper",description:"The Casper backend allows you to compile your contracts into WASM files which can be deployed",source:"@site/versioned_docs/version-0.5.0/backends/03-casper.md",sourceDirName:"backends",slug:"/backends/casper",permalink:"/docs/0.5.0/backends/casper",draft:!1,tags:[],version:"0.5.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"MockVM",permalink:"/docs/0.5.0/backends/mock-vm"},next:{title:"Examples",permalink:"/docs/0.5.0/category/examples"}},l={},p=[{value:"Types",id:"types",level:2},{value:"Contract Env",id:"contract-env",level:2},{value:"Events",id:"events",level:3},{value:"Payable",id:"payable",level:3},{value:"Revert",id:"revert",level:3},{value:"Context",id:"context",level:3},{value:"Test Env",id:"test-env",level:2},{value:"Usage",id:"usage",level:2},{value:"Constructors",id:"constructors",level:2},{value:"WASM arguments",id:"wasm-arguments",level:3},{value:"Contract Deploys",id:"contract-deploys",level:2},{value:"Example: Deploy Counter",id:"example-deploy-counter",level:3},{value:"Example: Deploy ERC721",id:"example-deploy-erc721",level:3},{value:"Example: Deploy ERC1155",id:"example-deploy-erc1155",level:3},{value:"Sending CSPR to a contract",id:"sending-cspr-to-a-contract",level:2},{value:"Using proxy_caller.wasm",id:"using-proxy_callerwasm",level:3},{value:"Execution",id:"execution",level:2}],c={toc:p};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"casper"},"Casper"),(0,r.kt)("p",null,"The Casper backend allows you to compile your contracts into WASM files which can be deployed\nonto ",(0,r.kt)("a",{parentName:"p",href:"https://casper.network/"},"Casper Blockchain"),"\nand lets you to easily run them against ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/casper-execution-engine"},"Casper's Execution Engine")," locally."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"A struct to be written into the storage must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"OdraType")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait OdraType: \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("p",null,"The other exposed types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CallArgs")," - wraps around casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},(0,r.kt)("inlineCode",{parentName:"a"},"RuntimeArgs")),";"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Balance")," - U512 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"BlockTime")," - u64 type alias;"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Address")," - an enum that encapsulates casper's ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/account/struct.AccountHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"AccountHash"))," and ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/struct.ContractPackageHash.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ContractPackageHash")))),(0,r.kt)("h2",{id:"contract-env"},"Contract Env"),(0,r.kt)("p",null,"As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances."),(0,r.kt)("h3",{id:"events"},"Events"),(0,r.kt)("p",null,"An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've\nalready learned from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/events"},"events article"),", in Odra you emit an event, similarly, you would do it in ",(0,r.kt)("a",{parentName:"p",href:"https://docs.soliditylang.org/en/v0.8.15/contracts.html#example"},"Solidity"),"."),(0,r.kt)("p",null,"Under the hood, Odra integrates with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/make-software/casper-event-standard"},"Casper Event Standard")," and creates a few ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/struct.URef.html"},(0,r.kt)("inlineCode",{parentName:"a"},"URef"),"s")," in the global state when a contract is being installed:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events")," - a dictionary that stores events' data."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_length")," - the evens count."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_ces_version")," - the version of ",(0,r.kt)("inlineCode",{parentName:"li"},"Casper Event Standard"),". "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"__events_schema")," - a dictionary that stores event schemas.")),(0,r.kt)("p",null,"Besides that, all the events the contract emits are registered - events schemas are written to the storage under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__events_schema")," key."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Don't forget to expose events in the module using ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module(events = [...])]"),". ")),(0,r.kt)("p",null,"So, ",(0,r.kt)("inlineCode",{parentName:"p"},"Events")," are nothing different from any other data stored by a contract."),(0,r.kt)("p",null,"A struct to be an event must implement ",(0,r.kt)("inlineCode",{parentName:"p"},"SerializableEvent")," which is defined as follow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait SerializableEvent: \n odra_types::event::OdraEvent + \n casper_types::CLTyped + \n casper_types::bytesrepr::ToBytes + \n casper_types::bytesrepr::FromBytes {}\n")),(0,r.kt)("h3",{id:"payable"},"Payable"),(0,r.kt)("p",null,"The first Odra idiom is a ",(0,r.kt)("inlineCode",{parentName:"p"},"Contract Main Purse"),". It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper ",(0,r.kt)("inlineCode",{parentName:"p"},"URef")," and a purse are created and stored under the ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse")," key."),(0,r.kt)("p",null,"Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo Purse"),". It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse."),(0,r.kt)("p",null,"Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable.\nIf under the way something goes wrong with the transfer, the contract reverts."),(0,r.kt)("p",null,"The transferred amount can be read inside the contract by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Odra expects the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," runtime argument to be attached to a contract call.\nIn case of its absence, the ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::attached_value()")," returns zero.")),(0,r.kt)("h3",{id:"revert"},"Revert"),(0,r.kt)("p",null,"In Casper, we can stop the execution pretty straightforwardly - call the ",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::revert()"),".\nOdra adds an extra abstraction layer - in a contract ",(0,r.kt)("inlineCode",{parentName:"p"},"ExecutionError"),"s are defined, which ultimately are transformed into Casper's ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-types/latest/casper_types/enum.ApiError.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ApiError::User")),"."),(0,r.kt)("h3",{id:"context"},"Context"),(0,r.kt)("p",null,"Casper equips developers with very low-level tooling, which can be cumbersome for newcomers.\nIf you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_address()")," function takes the first element of the callstack (",(0,r.kt)("a",{parentName:"p",href:"https://docs.rs/casper-contract/latest/casper_contract/contract_api/runtime/fn.get_call_stack.html"},(0,r.kt)("inlineCode",{parentName:"a"},"runtime::get_call_stack()")),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::caller()")," function takes the second element of the call stack (",(0,r.kt)("inlineCode",{parentName:"p"},"runtime::get_call_stack()"),") and casts it to ",(0,r.kt)("inlineCode",{parentName:"p"},"Address"),"."),(0,r.kt)("p",null,"As mentioned in the ","[Payable]"," section, to store CSPR, each contract creates its purse. To read the contract balance, you call ",(0,r.kt)("inlineCode",{parentName:"p"},"contract_env::self_balance"),", which checks the balance of the purse stored under ",(0,r.kt)("inlineCode",{parentName:"p"},"__contract_main_purse"),"."),(0,r.kt)("h2",{id:"test-env"},"Test Env"),(0,r.kt)("p",null,"Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Casper Execution Engine"),"."),(0,r.kt)("p",null,"In your test, you can freely switch execution context by setting as a caller (",(0,r.kt)("inlineCode",{parentName:"p"},"test_env::set_caller()"),") one of the 20 predefined accounts. Each account possesses the default amount of ",(0,r.kt)("inlineCode",{parentName:"p"},"Motes")," (100_000_000_000_000_000)."),(0,r.kt)("p",null,"The Test Env internally keeps track of the current ",(0,r.kt)("inlineCode",{parentName:"p"},"block time"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"error")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"attached value"),"."),(0,r.kt)("p",null,"Each test is executed on a fresh instance of the Test Env."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Name of the Casper backend in Odra is ",(0,r.kt)("inlineCode",{parentName:"p"},"casper"),", so to run the tests against it, simply pass it as a ",(0,r.kt)("inlineCode",{parentName:"p"},"-b"),"\nparameter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,r.kt)("p",null,"If you want to just generate a wasm file, simply run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper\n")),(0,r.kt)("h2",{id:"constructors"},"Constructors"),(0,r.kt)("p",null,"Let's define a basic Odra module that includes a constructor:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"#[odra::module]\nstruct Counter {\n value: Variable<u32>\n}\n\n#[odra::module]\nimpl Counter {\n #[odra(init)]\n pub initialize(&mut self, value: u32) {\n self.value.set(value);\n }\n}\n")),(0,r.kt)("p",null,"Read more about constructors ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/advanced/attributes#init"},"here"),"."),(0,r.kt)("h3",{id:"wasm-arguments"},"WASM arguments"),(0,r.kt)("p",null,"When deploying a new contract you have to specify following arguments."),(0,r.kt)("p",null,"Required arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The key under which the package hash of the contract will be stored."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_allow_key_override")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true")," and the key specified in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_package_hash_key_name")," already exists, it will be overwritten."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_is_upgradable")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bool")," type. If ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),", the contract will be deployed as upgradable.")),(0,r.kt)("p",null,"Optional arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_constructor")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. If the contract has the constructor entry point marked with ",(0,r.kt)("inlineCode",{parentName:"li"},"#[odra(init)]"),", this should be set to the constructor name."),(0,r.kt)("li",{parentName:"ul"},"constructor arguments that match entry point set in ",(0,r.kt)("inlineCode",{parentName:"li"},"odra_cfg_constructor"),".")),(0,r.kt)("h2",{id:"contract-deploys"},"Contract Deploys"),(0,r.kt)("h3",{id:"example-deploy-counter"},"Example: Deploy Counter"),(0,r.kt)("p",null,"To deploy your contract with a constructor using ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client"),", you need to pass the above arguments.\nAdditionally, you need to pass the ",(0,r.kt)("inlineCode",{parentName:"p"},"value")," argument, which sets the arbitrary initial value for the counter."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 5000000000000 \\\n --session-path ./wasm/counter.wasm \\\n --session-arg "odra_cfg_package_hash_key_name:string:\'counter_package_hash\'" \\\n --session-arg "odra_cfg_allow_key_override:bool:\'true\'" \\\n --session-arg "odra_cfg_is_upgradable:bool:\'true\'" \\\n --session-arg "odra_cfg_constructor:string:\'initialize\'" \\\n --session-arg "value:u32:42" \n')),(0,r.kt)("p",null,"For a more in-depth tutorial, please refer to the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.casper.network/writing-contracts/"},"Casper's 'Writing On-Chain Code'"),"."),(0,r.kt)("h3",{id:"example-deploy-erc721"},"Example: Deploy ERC721"),(0,r.kt)("p",null,"Odra comes with a standard ERC721 token implementation.\nClone the main Odra repo and navigate to the ",(0,r.kt)("inlineCode",{parentName:"p"},"modules")," directory."),(0,r.kt)("p",null,"Firstly contract needs to be compiled."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper -c erc721_token\n")),(0,r.kt)("p",null,"It produces the ",(0,r.kt)("inlineCode",{parentName:"p"},"erc721_token.wasm")," file in the ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm")," directory."),(0,r.kt)("p",null,"Now it's time to deploy the contract."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 300000000000 \\\n --session-path ./wasm/erc721_token.wasm \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'my_nft'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'false'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"odra_cfg_constructor:string:'init'\" \\\n --session-arg \"name:string:'MyNFT'\" \\\n --session-arg \"symbol:string:'NFT'\" \\\n --session-arg \"base_uri:string:'https://example.com/'\"\n")),(0,r.kt)("p",null,"It's done.\nThe contract is deployed and ready to use.\nYour account is the owner of the contract and you can mint and burn tokens.\nFor more details see the code of the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.5.0/modules/src/erc721_token.rs"},"ERC721")," module."),(0,r.kt)("p",null,"To obtain the package hash of the contract search for ",(0,r.kt)("inlineCode",{parentName:"p"},"my_nft")," key\nin your account's named keys."),(0,r.kt)("h3",{id:"example-deploy-erc1155"},"Example: Deploy ERC1155"),(0,r.kt)("p",null,"The process is similar to the one described in the previous section."),(0,r.kt)("p",null,"Contract compilation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra build -b casper -c erc1155_token\n")),(0,r.kt)("p",null,"Contract deployment:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"casper-client put-deploy \\\n --node-address [NODE_ADDRESS] \\\n --chain-name casper-test \\\n --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \\\n --payment-amount 300000000000 \\\n --session-path ./wasm/erc1155_token.wasm \\\n --session-arg \"odra_cfg_package_hash_key_name:string:'my_tokens'\" \\\n --session-arg \"odra_cfg_allow_key_override:bool:'false'\" \\\n --session-arg \"odra_cfg_is_upgradable:bool:'true'\" \\\n --session-arg \"odra_cfg_constructor:string:'init'\" \\\n")),(0,r.kt)("p",null,"As previously, your account is the owner and can mint and burn tokens.\nFor more details see the code of the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.5.0/modules/src/erc1155_token.rs"},"ERC1155")," module."),(0,r.kt)("h2",{id:"sending-cspr-to-a-contract"},"Sending CSPR to a contract"),(0,r.kt)("p",null,"Defining payable entry points is described in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/native-token"},"Native Token")," section."),(0,r.kt)("p",null,"What is happening under the hood is that Odra creates a new ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," argument for each payable\nentry point. The ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," needs to be top-upped with CSPR before calling the contract.\nWhen a contract adds CSPR to another contract call, Odra handles it for you.\nThe problem arises when you want to call an entry point and attach CSPR as an account.\nThe only way of doing that is by executing code in the sessions context, that\ntop-ups the ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo_purse")," and then calls the contract."),(0,r.kt)("p",null,"Odra provides a generic ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," that does exactly that.\nYou can build it by yourself from the main Odra repository, or use the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/odradev/odra/blob/release/0.4.0/odra-casper/livenet/resources/proxy_caller.wasm"},"proxy_caller.wasm"),"\nwe maintain."),(0,r.kt)("h3",{id:"using-proxy_callerwasm"},"Using proxy_caller.wasm"),(0,r.kt)("p",null,"To use the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy_caller.wasm")," you need to attach the following arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"contract_package_hash")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"BytesArray(32)")," type. The package hash of the contract you want to call.\nResult of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," on ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/contracts/struct.ContractPackageHash.html"},"CasperPackageHash"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"entry_point")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"String")," type. The name of the entry point you want to call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"args")," - ",(0,r.kt)("inlineCode",{parentName:"li"},"Bytes")," type. It is a serialized ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/runtime_args/struct.RuntimeArgs.html"},"RuntimeArgs")," with the arguments you want to pass\nto the entry point. To be specific it is the result of ",(0,r.kt)("inlineCode",{parentName:"li"},"to_bytes")," method wrapped with ",(0,r.kt)("a",{parentName:"li",href:"https://docs.rs/casper-types/latest/casper_types/bytesrepr/struct.Bytes.html"},"Bytes")," type."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"attached_value"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"Option<U512>")," type. The amount of CSPR you want to attach to the call."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"amount"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"U512")," type. Should be the same value as ",(0,r.kt)("inlineCode",{parentName:"li"},"attached_value")," if not ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),".\nIt is a special Casper argument that enables the access to account's main purse.")),(0,r.kt)("p",null,"Currently ",(0,r.kt)("inlineCode",{parentName:"p"},"casper-client")," doesn't allow building such arguments.\nYou have to build it using your SDK."),(0,r.kt)("h2",{id:"execution"},"Execution"),(0,r.kt)("p",null,"First thing Odra does with your code, is similar to the one used in ",(0,r.kt)("a",{parentName:"p",href:"/docs/0.5.0/backends/mock-vm"},"MockVM")," -\na list of entrypoints is generated, thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro."),(0,r.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[IR];\n id2[IR]--\x3eid3((WASM))\n id3((WASM))--\x3eid4[(Local Casper\\nExecution Engine)]\n id3((WASM))--\x3eid5[(Casper Network)]"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/f5bf02f1.db11918d.js b/docs/assets/js/f5bf02f1.db11918d.js new file mode 100644 index 000000000..f74c18562 --- /dev/null +++ b/docs/assets/js/f5bf02f1.db11918d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9756],{60374:e=>{e.exports=JSON.parse('{"title":"Advanced","description":"Advanced concepts of Odra Framework","slug":"/category/advanced","permalink":"/docs/category/advanced","navigation":{"previous":{"title":"Native token","permalink":"/docs/basics/native-token"},"next":{"title":"Module reusing","permalink":"/docs/advanced/using"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/f92986d2.c6655b0e.js b/docs/assets/js/f92986d2.c6655b0e.js new file mode 100644 index 000000000..ba730a04c --- /dev/null +++ b/docs/assets/js/f92986d2.c6655b0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[9165],{49749:t=>{t.exports=JSON.parse('{"title":"Getting started","description":"5 minutes to learn the most important Odra concepts.","slug":"/category/getting-started","permalink":"/docs/0.4.0/category/getting-started","navigation":{"previous":{"title":"Odra framework","permalink":"/docs/0.4.0/"},"next":{"title":"Installation","permalink":"/docs/0.4.0/getting-started/installation"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/fa4e959a.9fa4cb3e.js b/docs/assets/js/fa4e959a.9fa4cb3e.js new file mode 100644 index 000000000..292d12e40 --- /dev/null +++ b/docs/assets/js/fa4e959a.9fa4cb3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[1544],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(n),d=o,f=p["".concat(c,".").concat(d)]||p[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=p;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},73633:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,description:"How to get information from the Host"},i="Host Communication",s={unversionedId:"basics/communicating-with-host",id:"basics/communicating-with-host",title:"Host Communication",description:"How to get information from the Host",source:"@site/docs/basics/06-communicating-with-host.md",sourceDirName:"basics",slug:"/basics/communicating-with-host",permalink:"/docs/next/basics/communicating-with-host",draft:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"How to get information from the Host"},sidebar:"tutorialSidebar",previous:{title:"Storage interaction",permalink:"/docs/next/basics/storage-interaction"},next:{title:"Testing",permalink:"/docs/next/basics/testing"}},c={},l=[{value:"What's next",id:"whats-next",level:2}],u={toc:l};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"host-communication"},"Host Communication"),(0,o.kt)("p",null,"One of the things that your contract will probably do is to query the host for some information -\nwhat is the current time? Who called me? Following example shows how to do this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/host_functions.rs"',title:'"examples/src/features/host_functions.rs"'},"use odra::prelude::*;\nuse odra::{Address, module::Module, Var};\n\n#[odra::module]\npub struct HostContract {\n name: Var<String>,\n created_at: Var<u64>,\n created_by: Var<Address>\n}\n\n#[odra::module]\nimpl HostContract {\n pub fn init(&mut self, name: String) {\n self.name.set(name);\n self.created_at.set(self.env().get_block_time());\n self.created_by.set(self.env().caller())\n }\n\n pub fn name(&self) -> String {\n self.name.get_or_default()\n }\n}\n")),(0,o.kt)("p",null,"As you can see, we are using ",(0,o.kt)("inlineCode",{parentName:"p"},"self.env()"),". It is an implementation of ",(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/module/trait.Module.html#tymehtod.env"},(0,o.kt)("inlineCode",{parentName:"a"},"Module::env()")),", autogenerated\nby ",(0,o.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro. The function returns a reference to the ",(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/odra/0.8.0/odra/struct.ContractEnv.html"},(0,o.kt)("inlineCode",{parentName:"a"},"ContractEnv"))," (you can read more in\nthe ",(0,o.kt)("a",{parentName:"p",href:"/docs/next/backends/what-is-a-backend#contract-env"},(0,o.kt)("inlineCode",{parentName:"a"},"Backend section")),"). This is a structure that provides access to the host functions and variables. "),(0,o.kt)("p",null,"In this example, we use two of them:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"get_block_time()")," - returns the current block time as u64. "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"caller()")," - returns an Odra ",(0,o.kt)("inlineCode",{parentName:"li"},"Address")," of the caller (this can be an external caller or another contract).")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will learn more functions that Odra exposes from host and types it uses in further articles.")),(0,o.kt)("h2",{id:"whats-next"},"What's next"),(0,o.kt)("p",null,"In the next article, we'll dive into testing your contracts with Odra, so you can check that the code\nwe presented in fact works!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/fb249be3.6a9b1906.js b/docs/assets/js/fb249be3.6a9b1906.js new file mode 100644 index 000000000..7127fc241 --- /dev/null +++ b/docs/assets/js/fb249be3.6a9b1906.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[0],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return t?r.createElement(f,l(l({ref:n},d),{},{components:t})):r.createElement(f,l({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=p;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u<a;u++)l[u]=t[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},67268:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(87462),o=(t(67294),t(3905));const a={sidebar_position:3},l="OwnedToken",i={unversionedId:"tutorials/owned-token",id:"version-0.3.0/tutorials/owned-token",title:"OwnedToken",description:"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.",source:"@site/versioned_docs/version-0.3.0/tutorials/owned-token.md",sourceDirName:"tutorials",slug:"/tutorials/owned-token",permalink:"/docs/0.3.0/tutorials/owned-token",draft:!1,tags:[],version:"0.3.0",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"ERC-20",permalink:"/docs/0.3.0/tutorials/erc20"}},s={},u=[{value:"Code",id:"code",level:2},{value:"Module definition",id:"module-definition",level:3},{value:"Delegation",id:"delegation",level:3},{value:"Summary",id:"summary",level:2}],d={toc:u};function c(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ownedtoken"},"OwnedToken"),(0,o.kt)("p",null,"This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one."),(0,o.kt)("h2",{id:"code"},"Code"),(0,o.kt)("p",null,"What should our module be capable of?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Conform the Erc20 interface."),(0,o.kt)("li",{parentName:"ol"},"Allow minting tokens but only the module owner."),(0,o.kt)("li",{parentName:"ol"},"The current owner should be able to designate a new owner.")),(0,o.kt)("h3",{id:"module-definition"},"Module definition"),(0,o.kt)("p",null,"Let's define a module called ",(0,o.kt)("inlineCode",{parentName:"p"},"OwnedToken")," that is a composition of ",(0,o.kt)("inlineCode",{parentName:"p"},"Ownable")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Erc20")," modules."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use crate::{erc20::Erc20, ownable::Ownable};\n\n#[odra::module]\npub struct OwnedToken {\n ownable: Ownable,\n erc20: Erc20\n}\n")),(0,o.kt)("p",null,"As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!"),(0,o.kt)("h3",{id:"delegation"},"Delegation"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:"title=owned_token.rs showLineNumbers",title:"owned_token.rs",showLineNumbers:!0},"use odra::types::{Address, Balance}\n\n...\n\n#[odra::module]\nimpl OwnedToken {\n #[odra(init)]\n pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {\n let deployer = contract_env::caller();\n self.ownable.init(deployer);\n self.erc20.init(name, symbol, decimals, initial_supply);\n }\n\n pub fn name(&self) -> String {\n self.erc20.name()\n }\n\n pub fn symbol(&self) -> String {\n self.erc20.symbol()\n }\n\n pub fn decimals(&self) -> u8 {\n self.erc20.decimals()\n }\n\n pub fn total_supply(&self) -> Balance {\n self.erc20.total_supply()\n }\n\n pub fn balance_of(&self, address: &Address) -> Balance {\n self.erc20.balance_of(address)\n }\n\n pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {\n self.erc20.allowance(owner, spender)\n }\n\n pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {\n self.erc20.transfer(recipient, amount);\n }\n\n pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {\n self.erc20.transfer_from(owner, recipient, amount);\n }\n\n pub fn approve(&mut self, spender: &Address, amount: &Balance) {\n self.erc20.approve(spender, amount);\n }\n\n pub fn get_owner(&self) -> Address {\n self.ownable.get_owner()\n }\n\n pub fn change_ownership(&mut self, new_owner: &Address) {\n self.ownable.change_ownership(new_owner);\n }\n\n pub fn mint(&mut self, address: &Address, amount: &Balance) {\n self.ownable.ensure_ownership(&contract_env::caller());\n self.erc20.mint(address, amount);\n }\n}\n")),(0,o.kt)("p",null,"Easy. However, there are a few worth mentioning subtleness:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L10-L11")," - A constructor is a great place to init both modules at once. "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L14-L16")," - Most of the entrypoints do not need any modification, so we simply delegates them to the ",(0,o.kt)("inlineCode",{parentName:"li"},"erc20")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L50-L52")," - The same we do with the ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," module."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"L58-L61")," - Minting should not be unconditional, we need some control over it. First, using ",(0,o.kt)("inlineCode",{parentName:"li"},"ownable")," we make sure the ",(0,o.kt)("inlineCode",{parentName:"li"},"caller")," really is the owner.")),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/fdb5f68c.582d92bd.js b/docs/assets/js/fdb5f68c.582d92bd.js new file mode 100644 index 000000000..8a6792645 --- /dev/null +++ b/docs/assets/js/fdb5f68c.582d92bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[7178],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(a),g=n,m=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return a?r.createElement(m,l(l({ref:t},p),{},{components:a})):r.createElement(m,l({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var c=2;c<o;c++)l[c]=a[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,a)}d.displayName="MDXCreateElement"},34258:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=a(87462),n=(a(67294),a(3905));const o={sidebar_position:1},l="Installation",i={unversionedId:"getting-started/installation",id:"version-0.4.0/getting-started/installation",title:"Installation",description:"Hello fellow Odra user! This page will guide you through the installation process.",source:"@site/versioned_docs/version-0.4.0/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/0.4.0/getting-started/installation",draft:!1,tags:[],version:"0.4.0",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Getting started",permalink:"/docs/0.4.0/category/getting-started"},next:{title:"Flipper example",permalink:"/docs/0.4.0/getting-started/flipper"}},s={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Cargo Odra",id:"installing-cargo-odra",level:2},{value:"Creating a new Odra project",id:"creating-a-new-odra-project",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"installation"},"Installation"),(0,n.kt)("p",null,"Hello fellow Odra user! This page will guide you through the installation process."),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("p",null,"To start working with Odra, you need to have the following installed on your machine:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Rust toolchain installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://rustup.rs/"},"rustup.rs"),")"),(0,n.kt)("li",{parentName:"ul"},"wasmstrip tool installed (see ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/WebAssembly/wabt"},"wabt"),")")),(0,n.kt)("p",null,"We do not provide exact commands for installing these tools, as they are different for different operating systems.\nPlease refer to the documentation of the tools themselves."),(0,n.kt)("p",null,"With Rust toolchain ready, you can add a new target:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"rustup target add wasm32-unknown-unknown\n")),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("inlineCode",{parentName:"p"},"wasm32-unknown-uknown")," is a target that will be used by Odra to compile your smart contracts to WASM files.")),(0,n.kt)("h2",{id:"installing-cargo-odra"},"Installing Cargo Odra"),(0,n.kt)("p",null,"Cargo Odra is a helpful tool that will help you to build and test your smart contracts.\nIt is not required to use Odra, but the documentation will assume that you have it installed."),(0,n.kt)("p",null,"To install it, simply execute the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo install cargo-odra\n")),(0,n.kt)("p",null,"To check if it was installed correctly and see available commands, type:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra --help\n")),(0,n.kt)("p",null,"If everything went fine, we can proceed to the next step."),(0,n.kt)("h2",{id:"creating-a-new-odra-project"},"Creating a new Odra project"),(0,n.kt)("p",null,"To create a new project, simply execute:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra new --name my-project && cd my_project\n")),(0,n.kt)("p",null,'This will create a new folder called "my_project" and initialize Odra there. Cargo Odra\nwill create a sample contract for you in src directory. You can run the tests of this contract\nby executing:'),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,n.kt)("p",null,"This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test -b casper\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Congratulations!")," Now you are ready to create contracts using Odra framework! If you had any problems during\nthe installation process, feel free to ask for help on our ",(0,n.kt)("a",{parentName:"p",href:"https://discord.com/invite/Mm5ABc9P8k"},"Discord"),"."),(0,n.kt)("h2",{id:"whats-next"},"What's next?"),(0,n.kt)("p",null,"If you want to see the code that you just tested, continue to the description of ",(0,n.kt)("a",{parentName:"p",href:"flipper"},"Flipper example"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/fe2b6021.df5b1421.js b/docs/assets/js/fe2b6021.df5b1421.js new file mode 100644 index 000000000..bb122a7c3 --- /dev/null +++ b/docs/assets/js/fe2b6021.df5b1421.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[4467],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},36958:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},l="Flipper example",i={unversionedId:"getting-started/flipper",id:"version-0.5.0/getting-started/flipper",title:"Flipper example",description:"To quickly start working with Odra, take a look at the following code sample. If you followed the",source:"@site/versioned_docs/version-0.5.0/getting-started/flipper.md",sourceDirName:"getting-started",slug:"/getting-started/flipper",permalink:"/docs/0.5.0/getting-started/flipper",draft:!1,tags:[],version:"0.5.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/docs/0.5.0/getting-started/installation"},next:{title:"Basics",permalink:"/docs/0.5.0/category/basics"}},s={},p=[{value:"Let's flip",id:"lets-flip",level:2},{value:"What's next",id:"whats-next",level:2}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flipper-example"},"Flipper example"),(0,a.kt)("p",null,"To quickly start working with Odra, take a look at the following code sample. If you followed the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/0.5.0/getting-started/installation"},"Installation")," tutorial, you should have this file already at ",(0,a.kt)("inlineCode",{parentName:"p"},"src/flipper.rs"),"."),(0,a.kt)("p",null,"For further explanation of how this code works, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/0.5.0/basics/flipper-internals"},"Flipper Internals"),"."),(0,a.kt)("h2",{id:"lets-flip"},"Let's flip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="flipper.rs" showLineNumbers',title:'"flipper.rs"',showLineNumbers:!0},"use odra::Variable;\n\n/// A module definition. Each module struct consists Variables and Mappings\n/// or/and another modules.\n#[odra::module]\npub struct Flipper {\n /// The module itself does not store the value, \n /// it's a proxy that writes/reads value to/from the host.\n value: Variable<bool>,\n}\n\n/// Module implementation.\n///\n/// To generate entrypoints,\n/// an implementation block must be marked as #[odra::module].\n#[odra::module]\nimpl Flipper {\n /// Odra constructor.\n ///\n /// Initializes the contract with the value of value.\n #[odra(init)]\n pub fn initial_settings(&mut self) {\n self.value.set(false);\n }\n\n /// Replaces the current value with the passed argument.\n pub fn set(&mut self, value: bool) {\n self.value.set(value);\n }\n\n /// Replaces the current value with the opposite value.\n pub fn flip(&mut self) {\n self.value.set(!self.get());\n }\n\n /// Retrieves value from the storage. \n /// If the value has never been set, the default value is returned.\n pub fn get(&self) -> bool {\n self.value.get_or_default()\n }\n}\n\n#[cfg(test)]\nmod tests {\n use crate::flipper::FlipperDeployer;\n\n #[test]\n fn flipping() {\n // To test a module we need to deploy it using autogenerated Deployer. \n let mut contract = FlipperDeployer::initial_settings();\n assert!(!contract.get());\n contract.flip();\n assert!(contract.get());\n }\n\n #[test]\n fn test_two_flippers() {\n let mut contract1 = FlipperDeployer::initial_settings();\n let contract2 = FlipperDeployer::initial_settings();\n assert!(!contract1.get());\n assert!(!contract2.get());\n contract1.flip();\n assert!(contract1.get());\n assert!(!contract2.get());\n }\n}\n")),(0,a.kt)("h2",{id:"whats-next"},"What's next"),(0,a.kt)("p",null,"In the next category of articles, we will go through basic concepts of Odra."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/fec7bf31.58881655.js b/docs/assets/js/fec7bf31.58881655.js new file mode 100644 index 000000000..614de2069 --- /dev/null +++ b/docs/assets/js/fec7bf31.58881655.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6844],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),h=a,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(k,i(i({ref:t},d),{},{components:n})):r.createElement(k,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},39055:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:2},i="MockVM",c={unversionedId:"backends/mock-vm",id:"version-0.7.0/backends/mock-vm",title:"MockVM",description:"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing",source:"@site/versioned_docs/version-0.7.0/backends/02-mock-vm.md",sourceDirName:"backends",slug:"/backends/mock-vm",permalink:"/docs/backends/mock-vm",draft:!1,tags:[],version:"0.7.0",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What is a backend?",permalink:"/docs/backends/what-is-a-backend"},next:{title:"Casper",permalink:"/docs/backends/casper"}},s={},l=[{value:"Usage",id:"usage",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Execution",id:"execution",level:2}],d={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mockvm"},"MockVM"),(0,a.kt)("p",null,"The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing\nthe code written in Odra without compiling the contract to the target architecture and spinning up the\nblockchain."),(0,a.kt)("p",null,"Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler."),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The MockVM is the default backend for Odra framework, so each time you run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cargo odra test\n")),(0,a.kt)("p",null,"You are running your code against it."),(0,a.kt)("h2",{id:"architecture"},"Architecture"),(0,a.kt)("p",null,"MockVM consists of two main parts: the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," and the ",(0,a.kt)("inlineCode",{parentName:"p"},"State"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register")," is just a list of contracts deployed onto the MockVM, identified by an ",(0,a.kt)("inlineCode",{parentName:"p"},"Address"),".\nEach time we call the contract, we call its instance stored in the ",(0,a.kt)("inlineCode",{parentName:"p"},"Contract Register"),"."),(0,a.kt)("p",null,"Contracts and Test Env functions can modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"State")," of the MockVM."),(0,a.kt)("p",null,'Contrary to the "real" backend, which holds the whole history of the blockchain,\nthe MockVM ',(0,a.kt)("inlineCode",{parentName:"p"},"State")," holds only the current state of the MockVM.\nThanks to this and the fact that we do not need the blockchain itself,\nMockVM starts instantly and runs the tests in the native speed."),(0,a.kt)("h2",{id:"execution"},"Execution"),(0,a.kt)("p",null,"When the MockVM backend is enabled, the ",(0,a.kt)("inlineCode",{parentName:"p"},"#[odra::module]")," macro is responsible for converting\nyour ",(0,a.kt)("inlineCode",{parentName:"p"},"pub")," functions into a list of Entrypoints, which are put into a Contract Container.\nWhen the contract is deployed, its Container registered into a Registry under an address.\nDuring the contract call, MockVM finds an Entrypoint and executes the code."),(0,a.kt)("mermaid",{value:"graph TD;\n id1[[Odra code]]--\x3eid2[Contract Container];\n id2[Contract Container]--\x3eid3((Contract Registry))\n id3((Contract Registry))--\x3eid4[(MockVM Execution)]"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ff33c5f7.6b1cd76b.js b/docs/assets/js/ff33c5f7.6b1cd76b.js new file mode 100644 index 000000000..509fdcd94 --- /dev/null +++ b/docs/assets/js/ff33c5f7.6b1cd76b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[6901],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return n?a.createElement(f,i(i({ref:t},p),{},{components:n})):a.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var l=2;l<o;l++)i[l]=n[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},41516:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(87462),r=(n(67294),n(3905));const o={sidebar_position:12,description:"How to deposit, withdraw and transfer"},i="Native token",s={unversionedId:"basics/native-token",id:"version-0.7.0/basics/native-token",title:"Native token",description:"How to deposit, withdraw and transfer",source:"@site/versioned_docs/version-0.7.0/basics/12-native-token.md",sourceDirName:"basics",slug:"/basics/native-token",permalink:"/docs/basics/native-token",draft:!1,tags:[],version:"0.7.0",sidebarPosition:12,frontMatter:{sidebar_position:12,description:"How to deposit, withdraw and transfer"},sidebar:"tutorialSidebar",previous:{title:"Modules",permalink:"/docs/basics/modules"},next:{title:"Advanced",permalink:"/docs/category/advanced"}},c={},l=[{value:"Testing",id:"testing",level:2}],p={toc:l};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"native-token"},"Native token"),(0,r.kt)("p",null,"Different blockchains come with different implementations of their native tokens. Odra wraps it all for you\nin easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit\ntheir funds and anyone can withdraw them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/native_token.rs"',title:'"examples/src/features/native_token.rs"'},"use odra::types::Balance;\nuse odra::contract_env;\n\n#[odra::module]\npub struct PublicWallet {\n}\n\n#[odra::module]\nimpl PublicWallet {\n #[odra(payable)]\n pub fn deposit(&mut self) {\n }\n\n pub fn withdraw(&mut self, amount: Balance) {\n contract_env::transfer_tokens(contract_env::caller(), amount);\n }\n}\n")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make\nany checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is\neven possible."),(0,r.kt)("p",{parentName:"admonition"},"To see a more reasonable example, check out ",(0,r.kt)("inlineCode",{parentName:"p"},"examples/src/tlw.rs")," in the odra main repository.")),(0,r.kt)("p",null,"You can see a new macro used here: ",(0,r.kt)("inlineCode",{parentName:"p"},"#[odra(payable)]")," - it will add all the code needed for a function to\nbe able to receive the funds. Additionally, we are using a new function from contract_env - ",(0,r.kt)("inlineCode",{parentName:"p"},"transfer_tokens"),".\nIt does exactly what you are expecting it to do - it will transfer native tokens from the contract to the\nspecified address."),(0,r.kt)("p",null,"We are also using the ",(0,r.kt)("inlineCode",{parentName:"p"},"Balance")," - an Odra type that wraps around the type that the underlying blockchain uses\nfor counting tokens."),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("p",null,"To be able to test how many tokens a contract (or any address) has, ",(0,r.kt)("inlineCode",{parentName:"p"},"test_env")," comes with a function -\n",(0,r.kt)("inlineCode",{parentName:"p"},"token_balance"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="examples/src/features/native_token.rs"',title:'"examples/src/features/native_token.rs"'},"use odra::types::Balance;\nuse odra::test_env;\nuse super::PublicWalletDeployer;\n\n#[test]\nfn test_modules() {\n let mut my_contract = PublicWalletDeployer::default();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());\n\n my_contract.with_tokens(Balance::from(100)).deposit();\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));\n\n my_contract.withdraw(Balance::from(25));\n assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));\n}\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/assets/js/ff3976bd.eda77dfb.js b/docs/assets/js/ff3976bd.eda77dfb.js new file mode 100644 index 000000000..3108d23bc --- /dev/null +++ b/docs/assets/js/ff3976bd.eda77dfb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[3037],{36944:e=>{e.exports=JSON.parse('{"title":"Tutorials","description":"The theory is good, but the practice is even better. Let\'s go through a few examples summing up all the Odra concepts.","slug":"/category/tutorials","permalink":"/docs/0.6.0/category/tutorials","navigation":{"previous":{"title":"Using odra-modules","permalink":"/docs/0.6.0/examples/using-odra-modules"},"next":{"title":"Ownable","permalink":"/docs/0.6.0/tutorials/ownable"}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/main.2d7f4338.js b/docs/assets/js/main.2d7f4338.js new file mode 100644 index 000000000..4dff1e259 --- /dev/null +++ b/docs/assets/js/main.2d7f4338.js @@ -0,0 +1,2 @@ +/*! For license information please see main.2d7f4338.js.LICENSE.txt */ +(self.webpackChunkodra_website=self.webpackChunkodra_website||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(67294),r=n(87462),o=n(68356),i=n.n(o),s=n(16887);const c={"0030fd86":[()=>n.e(1887).then(n.t.bind(n,47619,19)),"~docs/default/version-0-5-0-metadata-prop-3bc.json",47619],"01e5113f":[()=>n.e(3052).then(n.bind(n,89592)),"@site/versioned_docs/version-0.6.0/basics/03-odra-toml.md",89592],"02192c58":[()=>n.e(4836).then(n.bind(n,87994)),"@site/versioned_docs/version-0.5.0/basics/07-testing.md",87994],"028141a3":[()=>n.e(8283).then(n.bind(n,42309)),"@site/versioned_docs/version-0.2.0/basics/02-directory-structure.md",42309],"02a3f783":[()=>n.e(9410).then(n.bind(n,79644)),"@site/versioned_docs/version-0.5.0/tutorials/owned-token.md",79644],"037547ca":[()=>n.e(9184).then(n.t.bind(n,33709,19)),"~docs/default/category-docs-031-tutorialsidebar-category-getting-started-093.json",33709],"03d24697":[()=>n.e(5333).then(n.bind(n,9887)),"@site/versioned_docs/version-0.7.0/tutorials/pauseable.md",9887],"04477b87":[()=>n.e(6056).then(n.bind(n,6835)),"@site/versioned_docs/version-0.3.0/getting-started/installation.md",6835],"06a0fa51":[()=>n.e(348).then(n.bind(n,9284)),"@site/docs/backends/03-casper.md",9284],"09109da1":[()=>n.e(8492).then(n.bind(n,85051)),"@site/versioned_docs/version-0.7.0/basics/08-errors.md",85051],"0993954b":[()=>n.e(7646).then(n.t.bind(n,83769,19)),"/home/runner/work/odradev.github.io/odradev.github.io/docusaurus/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],"0a44181e":[()=>n.e(7731).then(n.t.bind(n,55448,19)),"~docs/default/category-docsnext-tutorialsidebar-category-basics-714.json",55448],"0a8f7599":[()=>n.e(4589).then(n.bind(n,23588)),"@site/versioned_docs/version-0.4.0/basics/12-native-token.md",23588],"0abf45c2":[()=>n.e(7625).then(n.bind(n,11377)),"@site/docs/basics/01-cargo-odra.md",11377],"0be49901":[()=>n.e(1109).then(n.bind(n,90890)),"@site/versioned_docs/version-0.4.0/backends/01-what-is-a-backend.md",90890],"0bf9d8ab":[()=>n.e(2325).then(n.bind(n,20203)),"@site/versioned_docs/version-0.7.0/advanced/01-using.md",20203],"0e384e19":[()=>n.e(9671).then(n.bind(n,59881)),"@site/docs/intro.md",59881],"0ea00542":[()=>n.e(6388).then(n.bind(n,56716)),"@site/versioned_docs/version-0.3.0/backends/03-casper.md",56716],"1030000d":[()=>n.e(2042).then(n.bind(n,70592)),"@site/versioned_docs/version-0.3.0/basics/05-storage-interaction.md",70592],"119fbfb6":[()=>n.e(1969).then(n.bind(n,41173)),"@site/versioned_docs/version-0.7.0/intro.md",41173],"11e5b730":[()=>n.e(9906).then(n.bind(n,86507)),"@site/versioned_docs/version-0.2.0/basics/03-odra-toml.md",86507],13066500:[()=>n.e(3772).then(n.bind(n,33136)),"@site/versioned_docs/version-0.5.0/advanced/01-using.md",33136],"13ab0148":[()=>n.e(523).then(n.bind(n,12440)),"@site/versioned_docs/version-0.3.1/intro.md",12440],"1416c8f4":[()=>n.e(8700).then(n.bind(n,76223)),"@site/versioned_docs/version-0.7.0/tutorials/owned-token.md",76223],"14355e8c":[()=>n.e(6693).then(n.bind(n,29841)),"@site/versioned_docs/version-0.4.0/basics/07-testing.md",29841],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,34228)),"@theme/DocCategoryGeneratedIndexPage",34228],"1524a02c":[()=>n.e(5399).then(n.t.bind(n,28289,19)),"~docs/default/category-docs-050-tutorialsidebar-category-getting-started-e5b.json",28289],"1684519a":[()=>n.e(8381).then(n.bind(n,79176)),"@site/versioned_docs/version-0.4.0/advanced/03-advanced-storage.md",79176],"17498f44":[()=>n.e(9828).then(n.t.bind(n,8173,19)),"~docs/default/category-docsnext-tutorialsidebar-category-migrations-c0b.json",8173],"177939f6":[()=>n.e(995).then(n.bind(n,65883)),"@site/blog/2022-11-30-release-020/index.md",65883],17896441:[()=>Promise.all([n.e(532),n.e(239),n.e(7918)]).then(n.bind(n,15154)),"@theme/DocItem",15154],"181ab02d":[()=>n.e(8099).then(n.t.bind(n,89891,19)),"~docs/default/category-docs-020-defaultsidebar-category-backends-651.json",89891],"1999a842":[()=>n.e(427).then(n.t.bind(n,89813,19)),"~docs/default/category-docs-031-tutorialsidebar-category-backends-c6a.json",89813],"1b34e22f":[()=>n.e(3785).then(n.bind(n,55309)),"@site/versioned_docs/version-0.2.0/getting-started/installation.md",55309],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,19963)),"@theme/DocPage",19963],"1f63a7a5":[()=>n.e(5914).then(n.bind(n,86519)),"@site/versioned_docs/version-0.2.0/tutorials/erc20.md",86519],"208794bf":[()=>n.e(1172).then(n.bind(n,61684)),"@site/versioned_docs/version-0.3.1/advanced/03-advanced-storage.md",61684],"20f44f94":[()=>n.e(1079).then(n.bind(n,86330)),"@site/versioned_docs/version-0.4.0/basics/08-errors.md",86330],"2131dc9d":[()=>n.e(5310).then(n.t.bind(n,31582,19)),"~docs/default/category-docs-050-tutorialsidebar-category-basics-0bf.json",31582],"21fc20bd":[()=>n.e(5724).then(n.bind(n,78514)),"@site/versioned_docs/version-0.3.0/examples/odra-examples.md",78514],"237cf9c7":[()=>n.e(2806).then(n.bind(n,75556)),"@site/versioned_docs/version-0.2.0/basics/09-events.md",75556],"24bf3011":[()=>n.e(6882).then(n.bind(n,6067)),"@site/versioned_docs/version-0.3.1/advanced/01-composer.md",6067],"26441f8e":[()=>n.e(7742).then(n.bind(n,43240)),"@site/versioned_docs/version-0.6.0/advanced/05-signatures.md",43240],"274ccf11":[()=>n.e(7057).then(n.bind(n,31990)),"@site/versioned_docs/version-0.2.0/basics/06-communicating-with-host.md",31990],"28efbf3f":[()=>n.e(2240).then(n.bind(n,65114)),"@site/versioned_docs/version-0.2.0/basics/07-testing.md",65114],"29c8e325":[()=>n.e(7447).then(n.bind(n,72984)),"@site/versioned_docs/version-0.4.0/basics/02-directory-structure.md",72984],"2b7acc9d":[()=>n.e(4923).then(n.bind(n,83808)),"@site/versioned_docs/version-0.3.0/basics/03-odra-toml.md",83808],"2bf460c7":[()=>n.e(6286).then(n.bind(n,34226)),"@site/versioned_docs/version-0.3.0/basics/01-cargo-odra.md",34226],"2c824dec":[()=>n.e(8367).then(n.bind(n,43783)),"@site/versioned_docs/version-0.5.0/tutorials/erc20.md",43783],"2fe15297":[()=>n.e(2111).then(n.t.bind(n,21388,19)),"~docs/default/version-0-7-0-metadata-prop-303.json",21388],"3129ff44":[()=>n.e(6367).then(n.bind(n,6533)),"@site/versioned_docs/version-0.3.1/backends/01-what-is-a-backend.md",6533],"3152febb":[()=>n.e(225).then(n.t.bind(n,43492,19)),"~docs/default/category-docs-tutorialsidebar-category-getting-started-3f9.json",43492],32993410:[()=>n.e(5510).then(n.t.bind(n,65216,19)),"~docs/default/category-docs-050-tutorialsidebar-category-examples-d18.json",65216],33762072:[()=>n.e(7669).then(n.t.bind(n,82154,19)),"~docs/default/version-0-3-1-metadata-prop-266.json",82154],"33e7c3de":[()=>n.e(3914).then(n.bind(n,86747)),"@site/versioned_docs/version-0.7.0/backends/03-casper.md",86747],34731735:[()=>n.e(5604).then(n.bind(n,70551)),"@site/docs/basics/10-cross-calls.md",70551],"367de8e8":[()=>n.e(6527).then(n.bind(n,75572)),"@site/versioned_docs/version-0.6.0/getting-started/flipper.md",75572],"3701fb97":[()=>n.e(2253).then(n.bind(n,21439)),"@site/versioned_docs/version-0.3.1/basics/10-cross-calls.md",21439],"3721b008":[()=>n.e(5151).then(n.bind(n,87454)),"@site/versioned_docs/version-0.5.0/basics/08-errors.md",87454],"383c9ad7":[()=>n.e(6491).then(n.bind(n,62030)),"@site/docs/advanced/01-delegate.md",62030],"39d2189a":[()=>n.e(6262).then(n.bind(n,80158)),"@site/versioned_docs/version-0.4.0/basics/04-flipper-internals.md",80158],"3ac77d2e":[()=>n.e(4627).then(n.bind(n,8985)),"@site/versioned_docs/version-0.4.0/basics/03-odra-toml.md",8985],"3bb5653d":[()=>n.e(9167).then(n.bind(n,47844)),"@site/versioned_docs/version-0.5.0/basics/05-storage-interaction.md",47844],"3c817d4f":[()=>n.e(2801).then(n.bind(n,82285)),"@site/blog/2023-02-15-odra-cosmos.md?truncated=true",82285],"3cb0761e":[()=>n.e(5108).then(n.bind(n,24992)),"@site/docs/basics/02-directory-structure.md",24992],"3e9ef03c":[()=>n.e(2717).then(n.bind(n,69455)),"@site/versioned_docs/version-0.2.0/backends/01-what-is-a-backend.md",69455],"3edee900":[()=>n.e(6010).then(n.bind(n,69042)),"@site/versioned_docs/version-0.3.1/basics/05-storage-interaction.md",69042],"3eed3f1a":[()=>n.e(3362).then(n.bind(n,33984)),"@site/versioned_docs/version-0.7.0/basics/07-testing.md",33984],"3f00e816":[()=>n.e(3227).then(n.bind(n,90744)),"@site/versioned_docs/version-0.6.0/tutorials/owned-token.md",90744],"41445f6c":[()=>n.e(8784).then(n.bind(n,90347)),"@site/versioned_docs/version-0.6.0/basics/10-cross-calls.md",90347],"4279e616":[()=>n.e(2890).then(n.bind(n,82177)),"@site/versioned_docs/version-0.5.0/intro.md",82177],"42eeae87":[()=>n.e(5866).then(n.bind(n,83948)),"@site/versioned_docs/version-0.7.0/basics/11-modules.md",83948],"42fe661b":[()=>n.e(800).then(n.bind(n,96841)),"@site/versioned_docs/version-0.5.0/basics/03-odra-toml.md",96841],"43e47b8e":[()=>n.e(9108).then(n.bind(n,10195)),"@site/versioned_docs/version-0.4.0/backends/02-mock-vm.md",10195],"448060b1":[()=>n.e(2081).then(n.bind(n,18382)),"@site/versioned_docs/version-0.4.0/getting-started/flipper.md",18382],"45990ab7":[()=>n.e(8088).then(n.bind(n,90119)),"@site/versioned_docs/version-0.3.1/backends/03-casper.md",90119],"473b33d6":[()=>n.e(4050).then(n.bind(n,48265)),"@site/versioned_docs/version-0.6.0/backends/02-mock-vm.md",48265],"48d43fc1":[()=>n.e(6611).then(n.bind(n,85279)),"@site/docs/basics/04-flipper-internals.md",85279],"496b44fb":[()=>n.e(4266).then(n.bind(n,45352)),"@site/versioned_docs/version-0.4.0/tutorials/owned-token.md",45352],"4a070847":[()=>n.e(357).then(n.t.bind(n,36834,19)),"~docs/default/category-docs-tutorialsidebar-category-examples-5d5.json",36834],"4cd738bd":[()=>n.e(8322).then(n.t.bind(n,84876,19)),"~docs/default/category-docs-tutorialsidebar-category-tutorials-d5c.json",84876],"4da81bc4":[()=>n.e(663).then(n.bind(n,52506)),"@site/versioned_docs/version-0.6.0/tutorials/ownable.md",52506],"4e50b37d":[()=>n.e(1588).then(n.t.bind(n,64570,19)),"~docs/default/category-docs-040-tutorialsidebar-category-basics-d09.json",64570],"4f40819b":[()=>n.e(874).then(n.bind(n,74645)),"@site/versioned_docs/version-0.5.0/basics/09-events.md",74645],"509c4227":[()=>n.e(723).then(n.bind(n,61505)),"@site/versioned_docs/version-0.3.0/basics/06-communicating-with-host.md",61505],"51bf83ad":[()=>n.e(7127).then(n.bind(n,21740)),"@site/versioned_docs/version-0.4.0/tutorials/ownable.md",21740],"53726ad7":[()=>n.e(2288).then(n.bind(n,11661)),"@site/versioned_docs/version-0.3.0/basics/11-modules.md",11661],"54dbc4b0":[()=>n.e(9186).then(n.bind(n,36170)),"@site/versioned_docs/version-0.6.0/intro.md",36170],"54f44165":[()=>n.e(152).then(n.bind(n,60681)),"@site/docs/getting-started/installation.md",60681],"55362a87":[()=>n.e(9616).then(n.bind(n,41096)),"@site/versioned_docs/version-0.3.0/tutorials/ownable.md",41096],"558ac3fc":[()=>n.e(9654).then(n.bind(n,85403)),"@site/versioned_docs/version-0.5.0/advanced/05-signatures.md",85403],"56296f23":[()=>n.e(1577).then(n.bind(n,87983)),"@site/versioned_docs/version-0.4.0/advanced/01-composer.md",87983],"575b7125":[()=>n.e(992).then(n.bind(n,37990)),"@site/versioned_docs/version-0.7.0/advanced/03-advanced-storage.md",37990],"57648d1e":[()=>n.e(8181).then(n.bind(n,63279)),"@site/versioned_docs/version-0.3.1/advanced/04-attributes.md",63279],"57bc1a35":[()=>n.e(3394).then(n.bind(n,10349)),"@site/docs/migrations/to-0.8.0.md",10349],"5825ca57":[()=>n.e(7199).then(n.bind(n,68526)),"@site/versioned_docs/version-0.3.0/tutorials/erc20.md",68526],"58abd590":[()=>n.e(7457).then(n.t.bind(n,76045,19)),"~docs/default/category-docs-tutorialsidebar-category-basics-2c3.json",76045],"58f10d9f":[()=>n.e(2493).then(n.t.bind(n,99005,19)),"~docs/default/version-0-6-0-metadata-prop-089.json",99005],"599e53c2":[()=>n.e(2411).then(n.bind(n,60007)),"@site/blog/2023-02-13-evm-at-risc0.md?truncated=true",60007],"5a816386":[()=>n.e(1390).then(n.bind(n,55551)),"@site/versioned_docs/version-0.3.1/basics/11-modules.md",55551],"5aa50e24":[()=>n.e(2944).then(n.bind(n,67927)),"@site/docs/advanced/04-storage-layout.md",67927],"5ad2f7ef":[()=>n.e(3814).then(n.bind(n,76602)),"@site/versioned_docs/version-0.6.0/backends/03-casper.md",76602],"5b4d97e3":[()=>n.e(5057).then(n.bind(n,35061)),"@site/versioned_docs/version-0.7.0/tutorials/ownable.md",35061],"5bcb7a16":[()=>n.e(2098).then(n.t.bind(n,66904,19)),"~docs/default/category-docs-030-defaultsidebar-category-advanced-1d0.json",66904],"5be2abc9":[()=>n.e(9737).then(n.t.bind(n,95650,19)),"~docs/default/category-docs-020-defaultsidebar-category-basics-042.json",95650],"5bf6529c":[()=>n.e(5113).then(n.t.bind(n,50520,19)),"~docs/default/category-docs-040-tutorialsidebar-category-advanced-bcf.json",50520],"5bff39d6":[()=>n.e(5753).then(n.t.bind(n,86871,19)),"~docs/default/category-docs-030-defaultsidebar-category-basics-feb.json",86871],"5c4991bb":[()=>n.e(4189).then(n.bind(n,57890)),"@site/versioned_docs/version-0.3.1/basics/01-cargo-odra.md",57890],"5c77c5fd":[()=>n.e(2007).then(n.bind(n,23022)),"@site/versioned_docs/version-0.4.0/examples/odra-examples.md",23022],"5ca766f6":[()=>n.e(3538).then(n.bind(n,91669)),"@site/versioned_docs/version-0.6.0/basics/06-communicating-with-host.md",91669],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f012ce0":[()=>n.e(2945).then(n.t.bind(n,47805,19)),"~docs/default/version-0-3-0-metadata-prop-150.json",47805],"5f13c361":[()=>n.e(9820).then(n.t.bind(n,77715,19)),"~docs/default/category-docs-040-tutorialsidebar-category-tutorials-20a.json",77715],"5f2971ba":[()=>n.e(3633).then(n.bind(n,1164)),"@site/versioned_docs/version-0.2.0/basics/08-errors.md",1164],"60d35280":[()=>n.e(8733).then(n.bind(n,23694)),"@site/docs/basics/03-odra-toml.md",23694],"60dd6115":[()=>n.e(3069).then(n.bind(n,21229)),"@site/versioned_docs/version-0.5.0/basics/10-cross-calls.md",21229],"615e12e7":[()=>n.e(3472).then(n.bind(n,84147)),"@site/docs/advanced/02-advanced-storage.md",84147],"6289863c":[()=>n.e(4733).then(n.bind(n,31050)),"@site/versioned_docs/version-0.3.0/basics/04-flipper-internals.md",31050],"632b087e":[()=>n.e(6499).then(n.bind(n,67033)),"@site/versioned_docs/version-0.5.0/basics/02-directory-structure.md",67033],"64fba0bc":[()=>n.e(4500).then(n.bind(n,53101)),"@site/docs/tutorials/erc20.md",53101],"659ab8cb":[()=>n.e(7922).then(n.bind(n,91724)),"@site/docs/examples/odra-examples.md",91724],"65ab6b77":[()=>n.e(2540).then(n.t.bind(n,47143,19)),"~docs/default/category-docs-030-defaultsidebar-category-getting-started-698.json",47143],"6617ee69":[()=>n.e(366).then(n.bind(n,9555)),"@site/versioned_docs/version-0.7.0/advanced/05-signatures.md",9555],"6640477e":[()=>n.e(7552).then(n.bind(n,81313)),"@site/docs/backends/04-livenet.md",81313],"67a34253":[()=>n.e(2691).then(n.t.bind(n,75821,19)),"~docs/default/category-docs-050-tutorialsidebar-category-backends-3ca.json",75821],"67cb2d26":[()=>n.e(2522).then(n.t.bind(n,21861,19)),"~docs/default/category-docs-031-tutorialsidebar-category-advanced-d13.json",21861],"67cf10af":[()=>n.e(9168).then(n.bind(n,85243)),"@site/docs/tutorials/owned-token.md",85243],"67d74c2d":[()=>n.e(3556).then(n.bind(n,3705)),"@site/versioned_docs/version-0.6.0/basics/05-storage-interaction.md",3705],"68495fce":[()=>n.e(2346).then(n.bind(n,1754)),"@site/versioned_docs/version-0.5.0/tutorials/ownable.md",1754],"68deafd0":[()=>n.e(7779).then(n.bind(n,68461)),"@site/versioned_docs/version-0.6.0/advanced/04-attributes.md",68461],"69fd3230":[()=>n.e(4371).then(n.bind(n,47277)),"@site/docs/examples/using-odra-modules.md",47277],"6add768b":[()=>n.e(656).then(n.bind(n,61294)),"@site/versioned_docs/version-0.3.0/examples/using-odra-modules.md",61294],"6e2102f2":[()=>n.e(7064).then(n.bind(n,56875)),"@site/docs/backends/01-what-is-a-backend.md",56875],"6e5ab397":[()=>n.e(9954).then(n.bind(n,81828)),"@site/versioned_docs/version-0.7.0/basics/04-flipper-internals.md",81828],"6f7f3f28":[()=>n.e(7591).then(n.t.bind(n,19732,19)),"~docs/default/category-docs-050-tutorialsidebar-category-tutorials-126.json",19732],"705c2b64":[()=>n.e(1178).then(n.bind(n,10600)),"@site/versioned_docs/version-0.5.0/examples/using-odra-modules.md",10600],"70d9d1e8":[()=>n.e(4709).then(n.bind(n,7060)),"@site/versioned_docs/version-0.2.0/tutorials/owned-token.md",7060],"716fdc54":[()=>n.e(703).then(n.bind(n,15928)),"@site/versioned_docs/version-0.7.0/basics/09-events.md",15928],71735968:[()=>n.e(9345).then(n.bind(n,53309)),"@site/blog/2022-12-12-casper-zk-risc0.md",53309],"71958ad0":[()=>n.e(7556).then(n.bind(n,97454)),"@site/versioned_docs/version-0.6.0/examples/using-odra-modules.md",97454],"71b691b7":[()=>n.e(3095).then(n.bind(n,84710)),"@site/blog/2023-02-13-evm-at-risc0.md",84710],"728e71a1":[()=>n.e(4301).then(n.bind(n,54540)),"@site/versioned_docs/version-0.5.0/advanced/02-delegate.md",54540],73285975:[()=>n.e(2869).then(n.bind(n,38419)),"@site/versioned_docs/version-0.3.0/advanced/04-attributes.md",38419],"733ac994":[()=>n.e(7952).then(n.bind(n,15774)),"@site/versioned_docs/version-0.3.1/getting-started/installation.md",15774],"739a70a9":[()=>n.e(9986).then(n.bind(n,82698)),"@site/blog/2022-12-12-casper-zk-risc0.md?truncated=true",82698],"7414f7c1":[()=>n.e(2858).then(n.bind(n,72017)),"@site/versioned_docs/version-0.3.0/advanced/03-advanced-storage.md",72017],"74376d79":[()=>n.e(9413).then(n.bind(n,42014)),"@site/versioned_docs/version-0.3.0/advanced/02-delegate.md",42014],"74442e8e":[()=>n.e(2761).then(n.bind(n,80449)),"@site/versioned_docs/version-0.3.1/examples/using-odra-modules.md",80449],"7457cffc":[()=>n.e(3675).then(n.bind(n,54410)),"@site/versioned_docs/version-0.7.0/tutorials/erc20.md",54410],"754937b2":[()=>n.e(3308).then(n.bind(n,34370)),"@site/versioned_docs/version-0.4.0/basics/11-modules.md",34370],78452797:[()=>n.e(6100).then(n.t.bind(n,89199,19)),"~docs/default/category-docs-031-tutorialsidebar-category-examples-a1d.json",89199],79253424:[()=>n.e(6571).then(n.bind(n,56098)),"@site/docs/basics/05-storage-interaction.md",56098],"799b1c68":[()=>n.e(5657).then(n.t.bind(n,47790,19)),"~docs/default/version-0-2-0-metadata-prop-0a3.json",47790],"79b67993":[()=>n.e(7798).then(n.t.bind(n,19217,19)),"~docs/default/category-docsnext-tutorialsidebar-category-examples-41f.json",19217],"79d3180c":[()=>n.e(9375).then(n.bind(n,79522)),"@site/versioned_docs/version-0.7.0/getting-started/flipper.md",79522],"7acce579":[()=>n.e(3158).then(n.bind(n,51003)),"@site/versioned_docs/version-0.4.0/basics/01-cargo-odra.md",51003],"7d8962a6":[()=>n.e(6671).then(n.bind(n,20210)),"@site/blog/2023-08-18-nysa/index.md",20210],"7df6186d":[()=>n.e(3968).then(n.bind(n,12458)),"@site/versioned_docs/version-0.2.0/getting-started/flipper.md",12458],"7e706e45":[()=>n.e(9032).then(n.bind(n,80960)),"@site/versioned_docs/version-0.3.1/tutorials/ownable.md",80960],"7f9a1b7a":[()=>n.e(4133).then(n.bind(n,97329)),"@site/versioned_docs/version-0.7.0/basics/10-cross-calls.md",97329],"800dfaa2":[()=>n.e(4928).then(n.bind(n,44531)),"@site/versioned_docs/version-0.7.0/backends/01-what-is-a-backend.md",44531],"8010fede":[()=>n.e(2628).then(n.bind(n,29011)),"@site/versioned_docs/version-0.7.0/examples/using-odra-modules.md",29011],"814f3328":[()=>n.e(2535).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"815ad8c9":[()=>n.e(9145).then(n.bind(n,71900)),"@site/versioned_docs/version-0.3.1/basics/08-errors.md",71900],83697071:[()=>n.e(5894).then(n.bind(n,69707)),"@site/versioned_docs/version-0.3.1/basics/09-events.md",69707],"88b75f2c":[()=>n.e(6075).then(n.bind(n,68306)),"@site/versioned_docs/version-0.7.0/advanced/02-delegate.md",68306],"893f4b86":[()=>n.e(6452).then(n.bind(n,25661)),"@site/versioned_docs/version-0.7.0/examples/odra-examples.md",25661],"8988b866":[()=>n.e(5598).then(n.bind(n,86965)),"@site/versioned_docs/version-0.4.0/tutorials/erc20.md",86965],"8b0ca31f":[()=>n.e(8071).then(n.bind(n,74879)),"@site/versioned_docs/version-0.5.0/backends/02-mock-vm.md",74879],"8e991cde":[()=>n.e(7287).then(n.t.bind(n,14737,19)),"~docs/default/category-docs-020-defaultsidebar-category-tutorials-d40.json",14737],"8f162cb9":[()=>n.e(6221).then(n.bind(n,31832)),"@site/versioned_docs/version-0.2.0/basics/12-native-token.md",31832],"9005cef3":[()=>n.e(5973).then(n.bind(n,64021)),"@site/versioned_docs/version-0.6.0/tutorials/erc20.md",64021],"90c053b1":[()=>n.e(4593).then(n.bind(n,42345)),"@site/versioned_docs/version-0.3.1/basics/07-testing.md",42345],"90f06335":[()=>n.e(1459).then(n.bind(n,58009)),"@site/versioned_docs/version-0.4.0/examples/using-odra-modules.md",58009],"918e870d":[()=>n.e(3849).then(n.t.bind(n,38967,19)),"~docs/default/category-docs-050-tutorialsidebar-category-advanced-c5b.json",38967],"919c36c8":[()=>n.e(8221).then(n.bind(n,96739)),"@site/versioned_docs/version-0.5.0/examples/odra-examples.md",96739],"91b04621":[()=>n.e(9809).then(n.bind(n,38392)),"@site/versioned_docs/version-0.7.0/basics/05-storage-interaction.md",38392],93514764:[()=>n.e(3336).then(n.bind(n,92755)),"@site/blog/2023-06-27-we-are-here-to-stay/index.md?truncated=true",92755],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],94723368:[()=>n.e(4916).then(n.bind(n,53568)),"@site/versioned_docs/version-0.5.0/basics/11-modules.md",53568],"95db938c":[()=>n.e(6145).then(n.bind(n,99314)),"@site/versioned_docs/version-0.2.0/basics/11-modules.md",99314],"95f5ef42":[()=>n.e(4296).then(n.bind(n,29490)),"@site/versioned_docs/version-0.6.0/advanced/03-advanced-storage.md",29490],"98b2adcf":[()=>n.e(5930).then(n.t.bind(n,24469,19)),"/home/runner/work/odradev.github.io/odradev.github.io/docusaurus/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],"9a7c9bac":[()=>n.e(6701).then(n.bind(n,10596)),"@site/versioned_docs/version-0.3.1/backends/02-mock-vm.md",10596],"9a7f4a11":[()=>n.e(8923).then(n.bind(n,49614)),"@site/blog/2023-02-27-openai-writes-erc20-in-odra/index.md",49614],"9cc9201d":[()=>n.e(3395).then(n.bind(n,50030)),"@site/versioned_docs/version-0.5.0/advanced/03-advanced-storage.md",50030],"9d620965":[()=>n.e(9634).then(n.bind(n,27177)),"@site/versioned_docs/version-0.6.0/basics/11-modules.md",27177],"9d95fe34":[()=>n.e(4434).then(n.bind(n,91975)),"@site/versioned_docs/version-0.3.1/basics/12-native-token.md",91975],"9e4087bc":[()=>n.e(3608).then(n.bind(n,63169)),"@theme/BlogArchivePage",63169],"9e73c0bb":[()=>n.e(2432).then(n.bind(n,76108)),"@site/versioned_docs/version-0.2.0/examples/odra-examples.md",76108],"9ffb5fe4":[()=>n.e(5558).then(n.bind(n,55642)),"@site/versioned_docs/version-0.3.0/basics/12-native-token.md",55642],a046a162:[()=>n.e(9344).then(n.bind(n,88654)),"@site/versioned_docs/version-0.6.0/basics/04-flipper-internals.md",88654],a05c6bda:[()=>n.e(8118).then(n.bind(n,52936)),"@site/blog/2023-06-27-we-are-here-to-stay/index.md",52936],a0d3df9d:[()=>n.e(3743).then(n.bind(n,2544)),"@site/versioned_docs/version-0.3.0/basics/09-events.md",2544],a3d6ef01:[()=>n.e(6153).then(n.t.bind(n,41835,19)),"~docs/default/category-docsnext-tutorialsidebar-category-advanced-59f.json",41835],a663e775:[()=>n.e(6317).then(n.bind(n,35789)),"@site/versioned_docs/version-0.4.0/basics/10-cross-calls.md",35789],a6734805:[()=>n.e(2947).then(n.bind(n,15469)),"@site/versioned_docs/version-0.3.1/tutorials/erc20.md",15469],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(239),n.e(3089)]).then(n.bind(n,93269)),"@theme/BlogListPage",93269],a6f6e2b9:[()=>n.e(7093).then(n.bind(n,32193)),"@site/blog/2022-11-30-release-020/index.md?truncated=true",32193],a88260b3:[()=>n.e(5176).then(n.t.bind(n,49449,19)),"~docs/default/category-docs-031-tutorialsidebar-category-tutorials-00f.json",49449],aaadf060:[()=>n.e(4318).then(n.bind(n,15470)),"@site/versioned_docs/version-0.5.0/basics/01-cargo-odra.md",15470],ab4716a0:[()=>n.e(2933).then(n.bind(n,71550)),"@site/versioned_docs/version-0.5.0/basics/04-flipper-internals.md",71550],ab49860c:[()=>n.e(5211).then(n.bind(n,34584)),"@site/versioned_docs/version-0.4.0/basics/06-communicating-with-host.md",34584],ac692f92:[()=>n.e(6539).then(n.t.bind(n,30577,19)),"~docs/default/category-docsnext-tutorialsidebar-category-backends-ad3.json",30577],acebe248:[()=>n.e(6393).then(n.bind(n,70411)),"@site/versioned_docs/version-0.4.0/basics/05-storage-interaction.md",70411],ad92572d:[()=>n.e(242).then(n.bind(n,96867)),"@site/versioned_docs/version-0.5.0/backends/01-what-is-a-backend.md",96867],aee91c2e:[()=>n.e(3073).then(n.bind(n,17118)),"@site/docs/backends/02-odra-vm.md",17118],af2a4ce0:[()=>n.e(9706).then(n.bind(n,15008)),"@site/versioned_docs/version-0.6.0/basics/02-directory-structure.md",15008],afc3a23f:[()=>n.e(996).then(n.bind(n,1883)),"@site/versioned_docs/version-0.7.0/basics/01-cargo-odra.md",1883],b0f6aa87:[()=>n.e(8584).then(n.bind(n,69182)),"@site/versioned_docs/version-0.4.0/backends/03-casper.md",69182],b241ea99:[()=>n.e(4230).then(n.bind(n,16017)),"@site/versioned_docs/version-0.3.1/tutorials/owned-token.md",16017],b2b675dd:[()=>n.e(533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2e57a16:[()=>n.e(9243).then(n.bind(n,71345)),"@site/versioned_docs/version-0.6.0/backends/01-what-is-a-backend.md",71345],b2f44958:[()=>n.e(5776).then(n.bind(n,88144)),"@site/versioned_docs/version-0.5.0/basics/06-communicating-with-host.md",88144],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b338949b:[()=>n.e(2103).then(n.bind(n,60208)),"@site/versioned_docs/version-0.5.0/advanced/04-attributes.md",60208],b435d362:[()=>n.e(7150).then(n.t.bind(n,43396,19)),"~docs/default/category-docs-040-tutorialsidebar-category-examples-524.json",43396],b4f02106:[()=>n.e(1442).then(n.bind(n,73437)),"@site/versioned_docs/version-0.6.0/advanced/02-delegate.md",73437],b548b5e0:[()=>n.e(1810).then(n.bind(n,7954)),"@site/versioned_docs/version-0.4.0/intro.md",7954],b6aaec29:[()=>n.e(1655).then(n.bind(n,63510)),"@site/versioned_docs/version-0.6.0/basics/09-events.md",63510],b7573e33:[()=>n.e(7897).then(n.bind(n,51464)),"@site/versioned_docs/version-0.3.0/advanced/01-composer.md",51464],b759477d:[()=>n.e(79).then(n.bind(n,95150)),"@site/versioned_docs/version-0.2.0/intro.md",95150],b7d3ed64:[()=>n.e(8666).then(n.bind(n,14454)),"@site/versioned_docs/version-0.3.0/getting-started/flipper.md",14454],b87f41d0:[()=>n.e(7752).then(n.bind(n,82979)),"@site/versioned_docs/version-0.3.1/getting-started/flipper.md",82979],b94504cb:[()=>n.e(4415).then(n.bind(n,70872)),"@site/versioned_docs/version-0.4.0/advanced/04-attributes.md",70872],ba36c747:[()=>n.e(4997).then(n.bind(n,44326)),"@site/docs/basics/07-testing.md",44326],bab04a93:[()=>n.e(5006).then(n.bind(n,94071)),"@site/versioned_docs/version-0.7.0/advanced/04-attributes.md",94071],bac2ca12:[()=>n.e(4720).then(n.bind(n,17144)),"@site/docs/advanced/03-attributes.md",17144],bd4cf5c0:[()=>n.e(3241).then(n.bind(n,37493)),"@site/versioned_docs/version-0.2.0/backends/03-casper.md",37493],be0b2ac1:[()=>n.e(589).then(n.t.bind(n,82532,19)),"~docs/default/category-docs-060-tutorialsidebar-category-basics-f9f.json",82532],beab0651:[()=>n.e(7620).then(n.bind(n,25369)),"@site/versioned_docs/version-0.3.1/examples/odra-examples.md",25369],bee0af8b:[()=>n.e(5662).then(n.bind(n,95920)),"@site/versioned_docs/version-0.3.0/intro.md",95920],befd1fba:[()=>n.e(1215).then(n.bind(n,98158)),"@site/versioned_docs/version-0.6.0/basics/12-native-token.md",98158],bfc20097:[()=>n.e(5897).then(n.bind(n,93969)),"@site/docs/tutorials/access-control.md",93969],bfc8213d:[()=>n.e(9309).then(n.bind(n,93853)),"@site/versioned_docs/version-0.5.0/getting-started/installation.md",93853],c10f3592:[()=>n.e(8966).then(n.t.bind(n,8968,19)),"~docs/default/category-docs-tutorialsidebar-category-backends-ecf.json",8968],c13d152b:[()=>n.e(3668).then(n.bind(n,62260)),"@site/versioned_docs/version-0.5.0/basics/12-native-token.md",62260],c1418166:[()=>n.e(7978).then(n.bind(n,62393)),"@site/docs/basics/12-native-token.md",62393],c1ae59bd:[()=>n.e(7437).then(n.bind(n,64970)),"@site/blog/2023-08-18-nysa/index.md?truncated=true",64970],c24519ee:[()=>n.e(7541).then(n.bind(n,52402)),"@site/versioned_docs/version-0.4.0/advanced/02-delegate.md",52402],c3fd70b6:[()=>n.e(8459).then(n.t.bind(n,28939,19)),"~docs/default/category-docsnext-tutorialsidebar-category-getting-started-fbc.json",28939],c43892d3:[()=>n.e(9138).then(n.bind(n,64917)),"@site/versioned_docs/version-0.3.0/backends/02-mock-vm.md",64917],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,53261)),"@site/src/pages/index.js",53261],c52764ec:[()=>n.e(2653).then(n.t.bind(n,46492,19)),"~docs/default/category-docs-060-tutorialsidebar-category-getting-started-2f5.json",46492],c5296eae:[()=>n.e(5396).then(n.bind(n,49944)),"@site/versioned_docs/version-0.2.0/basics/10-cross-calls.md",49944],c52d4d42:[()=>n.e(7227).then(n.bind(n,38008)),"@site/versioned_docs/version-0.6.0/basics/08-errors.md",38008],c5cef920:[()=>n.e(8590).then(n.bind(n,62467)),"@site/versioned_docs/version-0.3.0/basics/08-errors.md",62467],c5f43526:[()=>n.e(2037).then(n.bind(n,50605)),"@site/versioned_docs/version-0.3.1/basics/02-directory-structure.md",50605],c6385d27:[()=>n.e(5579).then(n.t.bind(n,48187,19)),"~docs/default/category-docs-060-tutorialsidebar-category-advanced-0fe.json",48187],c705646d:[()=>n.e(6489).then(n.bind(n,65350)),"@site/versioned_docs/version-0.6.0/basics/07-testing.md",65350],c714b9ee:[()=>n.e(6105).then(n.bind(n,91651)),"@site/versioned_docs/version-0.2.0/backends/02-mock-vm.md",91651],c71fcec7:[()=>n.e(6974).then(n.bind(n,48458)),"@site/versioned_docs/version-0.3.1/basics/06-communicating-with-host.md",48458],ca76cddc:[()=>n.e(4191).then(n.bind(n,46486)),"@site/docs/basics/09-events.md",46486],cad7ddc9:[()=>n.e(7042).then(n.t.bind(n,74431,19)),"~docs/default/category-docs-020-defaultsidebar-category-examples-b7f.json",74431],cb085bdb:[()=>n.e(4201).then(n.bind(n,84299)),"@site/versioned_docs/version-0.3.1/basics/04-flipper-internals.md",84299],cbdaac1b:[()=>n.e(3744).then(n.bind(n,55468)),"@site/versioned_docs/version-0.2.0/tutorials/ownable.md",55468],cca6b120:[()=>n.e(5775).then(n.bind(n,54790)),"@site/versioned_docs/version-0.3.1/basics/03-odra-toml.md",54790],ccc49370:[()=>Promise.all([n.e(532),n.e(239),n.e(6103)]).then(n.bind(n,65203)),"@theme/BlogPostPage",65203],cd591068:[()=>n.e(2331).then(n.bind(n,94806)),"@site/versioned_docs/version-0.3.0/basics/07-testing.md",94806],cd790770:[()=>n.e(8841).then(n.bind(n,74324)),"@site/blog/2023-02-27-openai-writes-erc20-in-odra/index.md?truncated=true",74324],cde2d623:[()=>n.e(825).then(n.bind(n,60090)),"@site/docs/basics/11-modules.md",60090],ce4f9116:[()=>n.e(9680).then(n.bind(n,3529)),"@site/versioned_docs/version-0.7.0/tutorials/access-control.md",3529],ce999a4e:[()=>n.e(2862).then(n.bind(n,71824)),"@site/versioned_docs/version-0.2.0/basics/01-cargo-odra.md",71824],cecbc2b5:[()=>n.e(5901).then(n.bind(n,63481)),"@site/versioned_docs/version-0.3.0/backends/01-what-is-a-backend.md",63481],cf3f256a:[()=>n.e(3175).then(n.bind(n,55132)),"@site/versioned_docs/version-0.7.0/basics/02-directory-structure.md",55132],d0c01b74:[()=>n.e(3622).then(n.bind(n,62276)),"@site/versioned_docs/version-0.2.0/basics/05-storage-interaction.md",62276],d15969ed:[()=>n.e(190).then(n.bind(n,86318)),"@site/blog/2023-02-15-odra-cosmos.md",86318],d386dd06:[()=>n.e(5067).then(n.t.bind(n,75444,19)),"~docs/default/category-docs-060-tutorialsidebar-category-backends-58b.json",75444],d5e3179c:[()=>n.e(8089).then(n.bind(n,41453)),"@site/docs/basics/08-errors.md",41453],d691a609:[()=>n.e(3468).then(n.bind(n,89562)),"@site/versioned_docs/version-0.3.0/basics/10-cross-calls.md",89562],d7637d81:[()=>n.e(4062).then(n.bind(n,40808)),"@site/versioned_docs/version-0.2.0/examples/using-odra-modules.md",40808],d985b3f7:[()=>n.e(9558).then(n.t.bind(n,15745,19)),"/home/runner/work/odradev.github.io/odradev.github.io/docusaurus/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],d9fee9da:[()=>n.e(7405).then(n.t.bind(n,29124,19)),"~docs/default/category-docs-031-tutorialsidebar-category-basics-96f.json",29124],da555cce:[()=>n.e(5228).then(n.bind(n,7275)),"@site/versioned_docs/version-0.6.0/basics/01-cargo-odra.md",7275],da9e3acc:[()=>n.e(827).then(n.bind(n,47820)),"@site/versioned_docs/version-0.2.0/basics/04-flipper-internals.md",47820],db82a1c0:[()=>n.e(494).then(n.t.bind(n,32259,19)),"~docs/default/version-0-4-0-metadata-prop-913.json",32259],df1503d8:[()=>n.e(8445).then(n.bind(n,14797)),"@site/docs/tutorials/pauseable.md",14797],e018be55:[()=>n.e(9314).then(n.t.bind(n,36590,19)),"~docs/default/category-docsnext-tutorialsidebar-category-tutorials-f26.json",36590],e2022d8c:[()=>n.e(2701).then(n.bind(n,86058)),"@site/docs/tutorials/ownable.md",86058],e294fa30:[()=>n.e(4023).then(n.bind(n,95086)),"@site/versioned_docs/version-0.7.0/basics/06-communicating-with-host.md",95086],e31bed34:[()=>n.e(1839).then(n.bind(n,38090)),"@site/versioned_docs/version-0.3.1/advanced/02-delegate.md",38090],e4b2a41e:[()=>n.e(1422).then(n.t.bind(n,67251,19)),"~docs/default/category-docs-030-defaultsidebar-category-examples-be4.json",67251],e538a9e1:[()=>n.e(635).then(n.bind(n,24046)),"@site/versioned_docs/version-0.3.0/basics/02-directory-structure.md",24046],e5e64bd0:[()=>n.e(1401).then(n.t.bind(n,65322,19)),"~docs/default/category-docs-030-defaultsidebar-category-backends-73f.json",65322],e8a3ffa2:[()=>n.e(1389).then(n.bind(n,10296)),"@site/versioned_docs/version-0.6.0/getting-started/installation.md",10296],e9ea549b:[()=>n.e(5495).then(n.bind(n,3070)),"@site/docs/getting-started/flipper.md",3070],ea145f46:[()=>n.e(9856).then(n.t.bind(n,92892,19)),"~docs/default/category-docs-020-defaultsidebar-category-getting-started-e58.json",92892],ed6ae2e5:[()=>n.e(7493).then(n.t.bind(n,35069,19)),"~docs/default/category-docs-040-tutorialsidebar-category-backends-062.json",35069],ed898d19:[()=>n.e(659).then(n.bind(n,65822)),"@site/versioned_docs/version-0.6.0/advanced/01-using.md",65822],ee3d80a6:[()=>n.e(8927).then(n.bind(n,78575)),"@site/versioned_docs/version-0.7.0/basics/03-odra-toml.md",78575],eedc1cb5:[()=>n.e(4248).then(n.bind(n,30420)),"@site/versioned_docs/version-0.6.0/examples/odra-examples.md",30420],f00a1e6f:[()=>n.e(1171).then(n.bind(n,88378)),"@site/versioned_docs/version-0.4.0/basics/09-events.md",88378],f0928d2f:[()=>n.e(5660).then(n.t.bind(n,78942,19)),"~docs/default/category-docs-030-defaultsidebar-category-tutorials-000.json",78942],f1080184:[()=>n.e(9074).then(n.bind(n,58327)),"@site/versioned_docs/version-0.7.0/getting-started/installation.md",58327],f146bc3c:[()=>n.e(2329).then(n.t.bind(n,73800,19)),"~docs/default/category-docs-060-tutorialsidebar-category-examples-ba1.json",73800],f54718af:[()=>n.e(2294).then(n.bind(n,53478)),"@site/versioned_docs/version-0.5.0/backends/03-casper.md",53478],f5bf02f1:[()=>n.e(9756).then(n.t.bind(n,60374,19)),"~docs/default/category-docs-tutorialsidebar-category-advanced-90a.json",60374],f92986d2:[()=>n.e(9165).then(n.t.bind(n,49749,19)),"~docs/default/category-docs-040-tutorialsidebar-category-getting-started-a8e.json",49749],fa4e959a:[()=>n.e(1544).then(n.bind(n,73633)),"@site/docs/basics/06-communicating-with-host.md",73633],fb249be3:[()=>n.e(0).then(n.bind(n,67268)),"@site/versioned_docs/version-0.3.0/tutorials/owned-token.md",67268],fdb5f68c:[()=>n.e(7178).then(n.bind(n,34258)),"@site/versioned_docs/version-0.4.0/getting-started/installation.md",34258],fe2b6021:[()=>n.e(4467).then(n.bind(n,36958)),"@site/versioned_docs/version-0.5.0/getting-started/flipper.md",36958],fec7bf31:[()=>n.e(6844).then(n.bind(n,39055)),"@site/versioned_docs/version-0.7.0/backends/02-mock-vm.md",39055],ff33c5f7:[()=>n.e(6901).then(n.bind(n,41516)),"@site/versioned_docs/version-0.7.0/basics/12-native-token.md",41516],ff3976bd:[()=>n.e(3037).then(n.t.bind(n,36944,19)),"~docs/default/category-docs-060-tutorialsidebar-category-tutorials-b61.json",36944]};function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?a.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},a.createElement("p",null,String(t)),a.createElement("div",null,a.createElement("button",{type:"button",onClick:n},"Retry"))):r?a.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},a.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},a.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"8"},a.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var d=n(99670),u=n(30226);function p(e,t){if("*"===e)return i()({loading:l,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return a.createElement(u.z,{value:{plugin:{name:"native",id:"default"}}},a.createElement(n,t))}});const o=s[`${e}-${t}`],p={},f=[],b=[],m=(0,d.Z)(o);return Object.entries(m).forEach((e=>{let[t,n]=e;const a=c[n];a&&(p[t]=a[0],f.push(a[1]),b.push(a[2]))})),i().Map({loading:l,loader:p,modules:f,webpack:()=>b,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,a]=t;const r=a.default;if(!r)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 r&&"function"!=typeof r||Object.keys(a).filter((e=>"default"!==e)).forEach((e=>{r[e]=a[e]}));let o=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{o=o[e]})),o[s[s.length-1]]=r}));const s=i.__comp;delete i.__comp;const c=i.__context;return delete i.__context,a.createElement(u.z,{value:c},a.createElement(s,(0,r.Z)({},i,n)))}})}const f=[{path:"/blog",component:p("/blog","8e1"),exact:!0},{path:"/blog/2023-02-27-openai-writes-erc20-in-odra",component:p("/blog/2023-02-27-openai-writes-erc20-in-odra","d74"),exact:!0},{path:"/blog/archive",component:p("/blog/archive","fb4"),exact:!0},{path:"/blog/casper-zk-risc0",component:p("/blog/casper-zk-risc0","130"),exact:!0},{path:"/blog/evm-at-risc0",component:p("/blog/evm-at-risc0","d36"),exact:!0},{path:"/blog/its-all-about-the-community",component:p("/blog/its-all-about-the-community","1cb"),exact:!0},{path:"/blog/Nysa",component:p("/blog/Nysa","9ad"),exact:!0},{path:"/blog/odra-cosmwasm",component:p("/blog/odra-cosmwasm","70d"),exact:!0},{path:"/blog/release-020",component:p("/blog/release-020","1af"),exact:!0},{path:"/docs/0.2.0",component:p("/docs/0.2.0","eb8"),routes:[{path:"/docs/0.2.0/",component:p("/docs/0.2.0/","dd7"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/backends/casper",component:p("/docs/0.2.0/backends/casper","9e3"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/backends/mock-vm",component:p("/docs/0.2.0/backends/mock-vm","af2"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/backends/what-is-a-backend",component:p("/docs/0.2.0/backends/what-is-a-backend","ac7"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/cargo-odra",component:p("/docs/0.2.0/basics/cargo-odra","0cf"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/communicating-with-host",component:p("/docs/0.2.0/basics/communicating-with-host","76d"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/cross-calls",component:p("/docs/0.2.0/basics/cross-calls","9e3"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/directory-structure",component:p("/docs/0.2.0/basics/directory-structure","49a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/errors",component:p("/docs/0.2.0/basics/errors","dc2"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/events",component:p("/docs/0.2.0/basics/events","d84"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/flipper-internals",component:p("/docs/0.2.0/basics/flipper-internals","5d3"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/modules",component:p("/docs/0.2.0/basics/modules","592"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/native-token",component:p("/docs/0.2.0/basics/native-token","8f7"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/odra-toml",component:p("/docs/0.2.0/basics/odra-toml","b95"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/storage-interaction",component:p("/docs/0.2.0/basics/storage-interaction","5ec"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/basics/testing",component:p("/docs/0.2.0/basics/testing","101"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/category/backends",component:p("/docs/0.2.0/category/backends","f65"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/category/basics",component:p("/docs/0.2.0/category/basics","3e9"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/category/examples",component:p("/docs/0.2.0/category/examples","539"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/category/getting-started",component:p("/docs/0.2.0/category/getting-started","d19"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/category/tutorials",component:p("/docs/0.2.0/category/tutorials","05e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/examples/odra-examples",component:p("/docs/0.2.0/examples/odra-examples","640"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/examples/using-odra-modules",component:p("/docs/0.2.0/examples/using-odra-modules","765"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/getting-started/flipper",component:p("/docs/0.2.0/getting-started/flipper","5ff"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/getting-started/installation",component:p("/docs/0.2.0/getting-started/installation","c82"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/tutorials/erc20",component:p("/docs/0.2.0/tutorials/erc20","05b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/tutorials/ownable",component:p("/docs/0.2.0/tutorials/ownable","d53"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.2.0/tutorials/owned-token",component:p("/docs/0.2.0/tutorials/owned-token","79e"),exact:!0,sidebar:"defaultSidebar"}]},{path:"/docs/0.3.0",component:p("/docs/0.3.0","10f"),routes:[{path:"/docs/0.3.0/",component:p("/docs/0.3.0/","959"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/advanced/advanced-storage",component:p("/docs/0.3.0/advanced/advanced-storage","141"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/advanced/attributes",component:p("/docs/0.3.0/advanced/attributes","2c9"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/advanced/composer",component:p("/docs/0.3.0/advanced/composer","226"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/advanced/delegate",component:p("/docs/0.3.0/advanced/delegate","bfb"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/backends/casper",component:p("/docs/0.3.0/backends/casper","106"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/backends/mock-vm",component:p("/docs/0.3.0/backends/mock-vm","187"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/backends/what-is-a-backend",component:p("/docs/0.3.0/backends/what-is-a-backend","37a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/cargo-odra",component:p("/docs/0.3.0/basics/cargo-odra","c76"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/communicating-with-host",component:p("/docs/0.3.0/basics/communicating-with-host","049"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/cross-calls",component:p("/docs/0.3.0/basics/cross-calls","790"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/directory-structure",component:p("/docs/0.3.0/basics/directory-structure","5e5"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/errors",component:p("/docs/0.3.0/basics/errors","8ce"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/events",component:p("/docs/0.3.0/basics/events","fbf"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/flipper-internals",component:p("/docs/0.3.0/basics/flipper-internals","c30"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/modules",component:p("/docs/0.3.0/basics/modules","c88"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/native-token",component:p("/docs/0.3.0/basics/native-token","87f"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/odra-toml",component:p("/docs/0.3.0/basics/odra-toml","cd5"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/storage-interaction",component:p("/docs/0.3.0/basics/storage-interaction","12e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/basics/testing",component:p("/docs/0.3.0/basics/testing","fda"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/category/advanced",component:p("/docs/0.3.0/category/advanced","08a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/category/backends",component:p("/docs/0.3.0/category/backends","5e8"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/category/basics",component:p("/docs/0.3.0/category/basics","03f"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/category/examples",component:p("/docs/0.3.0/category/examples","bf7"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/category/getting-started",component:p("/docs/0.3.0/category/getting-started","20b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/category/tutorials",component:p("/docs/0.3.0/category/tutorials","814"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/examples/odra-examples",component:p("/docs/0.3.0/examples/odra-examples","fa6"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/examples/using-odra-modules",component:p("/docs/0.3.0/examples/using-odra-modules","c03"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/getting-started/flipper",component:p("/docs/0.3.0/getting-started/flipper","553"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/getting-started/installation",component:p("/docs/0.3.0/getting-started/installation","6ad"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/tutorials/erc20",component:p("/docs/0.3.0/tutorials/erc20","2a7"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/tutorials/ownable",component:p("/docs/0.3.0/tutorials/ownable","11c"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs/0.3.0/tutorials/owned-token",component:p("/docs/0.3.0/tutorials/owned-token","a68"),exact:!0,sidebar:"defaultSidebar"}]},{path:"/docs/0.3.1",component:p("/docs/0.3.1","af3"),routes:[{path:"/docs/0.3.1/",component:p("/docs/0.3.1/","0fe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/advanced/advanced-storage",component:p("/docs/0.3.1/advanced/advanced-storage","f06"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/advanced/attributes",component:p("/docs/0.3.1/advanced/attributes","bce"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/advanced/composer",component:p("/docs/0.3.1/advanced/composer","a52"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/advanced/delegate",component:p("/docs/0.3.1/advanced/delegate","e81"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/backends/casper",component:p("/docs/0.3.1/backends/casper","e0e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/backends/mock-vm",component:p("/docs/0.3.1/backends/mock-vm","039"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/backends/what-is-a-backend",component:p("/docs/0.3.1/backends/what-is-a-backend","8d7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/cargo-odra",component:p("/docs/0.3.1/basics/cargo-odra","76a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/communicating-with-host",component:p("/docs/0.3.1/basics/communicating-with-host","85d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/cross-calls",component:p("/docs/0.3.1/basics/cross-calls","ed1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/directory-structure",component:p("/docs/0.3.1/basics/directory-structure","95e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/errors",component:p("/docs/0.3.1/basics/errors","699"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/events",component:p("/docs/0.3.1/basics/events","0ff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/flipper-internals",component:p("/docs/0.3.1/basics/flipper-internals","8ce"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/modules",component:p("/docs/0.3.1/basics/modules","a5c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/native-token",component:p("/docs/0.3.1/basics/native-token","b51"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/odra-toml",component:p("/docs/0.3.1/basics/odra-toml","39b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/storage-interaction",component:p("/docs/0.3.1/basics/storage-interaction","5cc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/basics/testing",component:p("/docs/0.3.1/basics/testing","d8f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/category/advanced",component:p("/docs/0.3.1/category/advanced","7fc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/category/backends",component:p("/docs/0.3.1/category/backends","521"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/category/basics",component:p("/docs/0.3.1/category/basics","be6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/category/examples",component:p("/docs/0.3.1/category/examples","793"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/category/getting-started",component:p("/docs/0.3.1/category/getting-started","1b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/category/tutorials",component:p("/docs/0.3.1/category/tutorials","55a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/examples/odra-examples",component:p("/docs/0.3.1/examples/odra-examples","9f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/examples/using-odra-modules",component:p("/docs/0.3.1/examples/using-odra-modules","9a9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/getting-started/flipper",component:p("/docs/0.3.1/getting-started/flipper","1e0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/getting-started/installation",component:p("/docs/0.3.1/getting-started/installation","999"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/tutorials/erc20",component:p("/docs/0.3.1/tutorials/erc20","3c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/tutorials/ownable",component:p("/docs/0.3.1/tutorials/ownable","939"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.3.1/tutorials/owned-token",component:p("/docs/0.3.1/tutorials/owned-token","e34"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/docs/0.4.0",component:p("/docs/0.4.0","6b9"),routes:[{path:"/docs/0.4.0/",component:p("/docs/0.4.0/","f26"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/advanced/advanced-storage",component:p("/docs/0.4.0/advanced/advanced-storage","8c8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/advanced/attributes",component:p("/docs/0.4.0/advanced/attributes","8f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/advanced/composer",component:p("/docs/0.4.0/advanced/composer","37a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/advanced/delegate",component:p("/docs/0.4.0/advanced/delegate","66f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/backends/casper",component:p("/docs/0.4.0/backends/casper","c05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/backends/mock-vm",component:p("/docs/0.4.0/backends/mock-vm","bbe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/backends/what-is-a-backend",component:p("/docs/0.4.0/backends/what-is-a-backend","afc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/cargo-odra",component:p("/docs/0.4.0/basics/cargo-odra","be3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/communicating-with-host",component:p("/docs/0.4.0/basics/communicating-with-host","2c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/cross-calls",component:p("/docs/0.4.0/basics/cross-calls","cd2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/directory-structure",component:p("/docs/0.4.0/basics/directory-structure","fda"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/errors",component:p("/docs/0.4.0/basics/errors","6ff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/events",component:p("/docs/0.4.0/basics/events","7b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/flipper-internals",component:p("/docs/0.4.0/basics/flipper-internals","a33"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/modules",component:p("/docs/0.4.0/basics/modules","2a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/native-token",component:p("/docs/0.4.0/basics/native-token","a56"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/odra-toml",component:p("/docs/0.4.0/basics/odra-toml","011"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/storage-interaction",component:p("/docs/0.4.0/basics/storage-interaction","a7a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/basics/testing",component:p("/docs/0.4.0/basics/testing","7ac"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/category/advanced",component:p("/docs/0.4.0/category/advanced","0be"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/category/backends",component:p("/docs/0.4.0/category/backends","7c2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/category/basics",component:p("/docs/0.4.0/category/basics","1ef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/category/examples",component:p("/docs/0.4.0/category/examples","84f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/category/getting-started",component:p("/docs/0.4.0/category/getting-started","651"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/category/tutorials",component:p("/docs/0.4.0/category/tutorials","d6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/examples/odra-examples",component:p("/docs/0.4.0/examples/odra-examples","48a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/examples/using-odra-modules",component:p("/docs/0.4.0/examples/using-odra-modules","174"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/getting-started/flipper",component:p("/docs/0.4.0/getting-started/flipper","c72"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/getting-started/installation",component:p("/docs/0.4.0/getting-started/installation","ed5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/tutorials/erc20",component:p("/docs/0.4.0/tutorials/erc20","f49"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/tutorials/ownable",component:p("/docs/0.4.0/tutorials/ownable","0ce"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.4.0/tutorials/owned-token",component:p("/docs/0.4.0/tutorials/owned-token","d8c"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/docs/0.5.0",component:p("/docs/0.5.0","ed6"),routes:[{path:"/docs/0.5.0/",component:p("/docs/0.5.0/","96f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/advanced/advanced-storage",component:p("/docs/0.5.0/advanced/advanced-storage","656"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/advanced/attributes",component:p("/docs/0.5.0/advanced/attributes","f61"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/advanced/delegate",component:p("/docs/0.5.0/advanced/delegate","0f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/advanced/signatures",component:p("/docs/0.5.0/advanced/signatures","96c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/advanced/using",component:p("/docs/0.5.0/advanced/using","93b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/backends/casper",component:p("/docs/0.5.0/backends/casper","372"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/backends/mock-vm",component:p("/docs/0.5.0/backends/mock-vm","96e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/backends/what-is-a-backend",component:p("/docs/0.5.0/backends/what-is-a-backend","a98"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/cargo-odra",component:p("/docs/0.5.0/basics/cargo-odra","d15"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/communicating-with-host",component:p("/docs/0.5.0/basics/communicating-with-host","545"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/cross-calls",component:p("/docs/0.5.0/basics/cross-calls","d66"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/directory-structure",component:p("/docs/0.5.0/basics/directory-structure","161"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/errors",component:p("/docs/0.5.0/basics/errors","393"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/events",component:p("/docs/0.5.0/basics/events","056"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/flipper-internals",component:p("/docs/0.5.0/basics/flipper-internals","93e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/modules",component:p("/docs/0.5.0/basics/modules","eae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/native-token",component:p("/docs/0.5.0/basics/native-token","186"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/odra-toml",component:p("/docs/0.5.0/basics/odra-toml","1c3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/storage-interaction",component:p("/docs/0.5.0/basics/storage-interaction","14c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/basics/testing",component:p("/docs/0.5.0/basics/testing","3e5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/category/advanced",component:p("/docs/0.5.0/category/advanced","d06"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/category/backends",component:p("/docs/0.5.0/category/backends","c3c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/category/basics",component:p("/docs/0.5.0/category/basics","8c1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/category/examples",component:p("/docs/0.5.0/category/examples","170"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/category/getting-started",component:p("/docs/0.5.0/category/getting-started","4a6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/category/tutorials",component:p("/docs/0.5.0/category/tutorials","44a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/examples/odra-examples",component:p("/docs/0.5.0/examples/odra-examples","398"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/examples/using-odra-modules",component:p("/docs/0.5.0/examples/using-odra-modules","2bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/getting-started/flipper",component:p("/docs/0.5.0/getting-started/flipper","a09"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/getting-started/installation",component:p("/docs/0.5.0/getting-started/installation","6a7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/tutorials/erc20",component:p("/docs/0.5.0/tutorials/erc20","277"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/tutorials/ownable",component:p("/docs/0.5.0/tutorials/ownable","681"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.5.0/tutorials/owned-token",component:p("/docs/0.5.0/tutorials/owned-token","217"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/docs/0.6.0",component:p("/docs/0.6.0","07e"),routes:[{path:"/docs/0.6.0/",component:p("/docs/0.6.0/","6cb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/advanced/advanced-storage",component:p("/docs/0.6.0/advanced/advanced-storage","e45"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/advanced/attributes",component:p("/docs/0.6.0/advanced/attributes","30c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/advanced/delegate",component:p("/docs/0.6.0/advanced/delegate","9cd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/advanced/signatures",component:p("/docs/0.6.0/advanced/signatures","ade"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/advanced/using",component:p("/docs/0.6.0/advanced/using","623"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/backends/casper",component:p("/docs/0.6.0/backends/casper","ffb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/backends/mock-vm",component:p("/docs/0.6.0/backends/mock-vm","936"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/backends/what-is-a-backend",component:p("/docs/0.6.0/backends/what-is-a-backend","cad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/cargo-odra",component:p("/docs/0.6.0/basics/cargo-odra","6a0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/communicating-with-host",component:p("/docs/0.6.0/basics/communicating-with-host","704"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/cross-calls",component:p("/docs/0.6.0/basics/cross-calls","4a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/directory-structure",component:p("/docs/0.6.0/basics/directory-structure","adb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/errors",component:p("/docs/0.6.0/basics/errors","5af"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/events",component:p("/docs/0.6.0/basics/events","77a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/flipper-internals",component:p("/docs/0.6.0/basics/flipper-internals","b3c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/modules",component:p("/docs/0.6.0/basics/modules","e0c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/native-token",component:p("/docs/0.6.0/basics/native-token","089"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/odra-toml",component:p("/docs/0.6.0/basics/odra-toml","142"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/storage-interaction",component:p("/docs/0.6.0/basics/storage-interaction","568"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/basics/testing",component:p("/docs/0.6.0/basics/testing","4f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/category/advanced",component:p("/docs/0.6.0/category/advanced","b04"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/category/backends",component:p("/docs/0.6.0/category/backends","567"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/category/basics",component:p("/docs/0.6.0/category/basics","7b9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/category/examples",component:p("/docs/0.6.0/category/examples","933"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/category/getting-started",component:p("/docs/0.6.0/category/getting-started","d6e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/category/tutorials",component:p("/docs/0.6.0/category/tutorials","565"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/examples/odra-examples",component:p("/docs/0.6.0/examples/odra-examples","297"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/examples/using-odra-modules",component:p("/docs/0.6.0/examples/using-odra-modules","b91"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/getting-started/flipper",component:p("/docs/0.6.0/getting-started/flipper","41a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/getting-started/installation",component:p("/docs/0.6.0/getting-started/installation","f64"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/tutorials/erc20",component:p("/docs/0.6.0/tutorials/erc20","9af"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/tutorials/ownable",component:p("/docs/0.6.0/tutorials/ownable","f5c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/0.6.0/tutorials/owned-token",component:p("/docs/0.6.0/tutorials/owned-token","900"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/docs/next",component:p("/docs/next","366"),routes:[{path:"/docs/next/",component:p("/docs/next/","a05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/advanced/advanced-storage",component:p("/docs/next/advanced/advanced-storage","bb5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/advanced/attributes",component:p("/docs/next/advanced/attributes","372"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/advanced/delegate",component:p("/docs/next/advanced/delegate","b46"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/advanced/storage-layout",component:p("/docs/next/advanced/storage-layout","152"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/backends/casper",component:p("/docs/next/backends/casper","823"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/backends/livenet",component:p("/docs/next/backends/livenet","2f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/backends/odra-vm",component:p("/docs/next/backends/odra-vm","a9b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/backends/what-is-a-backend",component:p("/docs/next/backends/what-is-a-backend","c4c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/cargo-odra",component:p("/docs/next/basics/cargo-odra","5d3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/communicating-with-host",component:p("/docs/next/basics/communicating-with-host","8bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/cross-calls",component:p("/docs/next/basics/cross-calls","f0e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/directory-structure",component:p("/docs/next/basics/directory-structure","cf2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/errors",component:p("/docs/next/basics/errors","b56"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/events",component:p("/docs/next/basics/events","d09"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/flipper-internals",component:p("/docs/next/basics/flipper-internals","136"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/modules",component:p("/docs/next/basics/modules","d67"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/native-token",component:p("/docs/next/basics/native-token","a1b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/odra-toml",component:p("/docs/next/basics/odra-toml","efe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/storage-interaction",component:p("/docs/next/basics/storage-interaction","ca7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/basics/testing",component:p("/docs/next/basics/testing","95b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/category/advanced",component:p("/docs/next/category/advanced","655"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/category/backends",component:p("/docs/next/category/backends","b10"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/category/basics",component:p("/docs/next/category/basics","48a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/category/examples",component:p("/docs/next/category/examples","caa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/category/getting-started",component:p("/docs/next/category/getting-started","345"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/category/migrations",component:p("/docs/next/category/migrations","fa2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/category/tutorials",component:p("/docs/next/category/tutorials","fad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/examples/odra-examples",component:p("/docs/next/examples/odra-examples","3a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/examples/using-odra-modules",component:p("/docs/next/examples/using-odra-modules","a73"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/getting-started/flipper",component:p("/docs/next/getting-started/flipper","9d2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/getting-started/installation",component:p("/docs/next/getting-started/installation","89e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/migrations/to-0.8.0",component:p("/docs/next/migrations/to-0.8.0","118"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/tutorials/access-control",component:p("/docs/next/tutorials/access-control","182"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/tutorials/erc20",component:p("/docs/next/tutorials/erc20","0c8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/tutorials/ownable",component:p("/docs/next/tutorials/ownable","aac"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/tutorials/owned-token",component:p("/docs/next/tutorials/owned-token","6be"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/next/tutorials/pauseable",component:p("/docs/next/tutorials/pauseable","6ca"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/docs",component:p("/docs","a01"),routes:[{path:"/docs/",component:p("/docs/","464"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/advanced/advanced-storage",component:p("/docs/advanced/advanced-storage","0a7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/advanced/attributes",component:p("/docs/advanced/attributes","a91"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/advanced/delegate",component:p("/docs/advanced/delegate","d4e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/advanced/signatures",component:p("/docs/advanced/signatures","f5e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/advanced/using",component:p("/docs/advanced/using","e0b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/backends/casper",component:p("/docs/backends/casper","1bc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/backends/mock-vm",component:p("/docs/backends/mock-vm","b6e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/backends/what-is-a-backend",component:p("/docs/backends/what-is-a-backend","cf5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/cargo-odra",component:p("/docs/basics/cargo-odra","9dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/communicating-with-host",component:p("/docs/basics/communicating-with-host","ac2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/cross-calls",component:p("/docs/basics/cross-calls","8ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/directory-structure",component:p("/docs/basics/directory-structure","831"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/errors",component:p("/docs/basics/errors","1f3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/events",component:p("/docs/basics/events","28c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/flipper-internals",component:p("/docs/basics/flipper-internals","266"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/modules",component:p("/docs/basics/modules","f4d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/native-token",component:p("/docs/basics/native-token","2b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/odra-toml",component:p("/docs/basics/odra-toml","b3a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/storage-interaction",component:p("/docs/basics/storage-interaction","e1d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/basics/testing",component:p("/docs/basics/testing","752"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/advanced",component:p("/docs/category/advanced","7b4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/backends",component:p("/docs/category/backends","744"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/basics",component:p("/docs/category/basics","dd3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/examples",component:p("/docs/category/examples","fe3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/getting-started",component:p("/docs/category/getting-started","01f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/tutorials",component:p("/docs/category/tutorials","f40"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/examples/odra-examples",component:p("/docs/examples/odra-examples","457"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/examples/using-odra-modules",component:p("/docs/examples/using-odra-modules","9bb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/getting-started/flipper",component:p("/docs/getting-started/flipper","c93"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/getting-started/installation",component:p("/docs/getting-started/installation","9cb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/access-control",component:p("/docs/tutorials/access-control","a22"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/erc20",component:p("/docs/tutorials/erc20","9d0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/ownable",component:p("/docs/tutorials/ownable","87e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/owned-token",component:p("/docs/tutorials/owned-token","18f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/pauseable",component:p("/docs/tutorials/pauseable","a00"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:p("/","780"),exact:!0},{path:"*",component:p("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>r,t:()=>o});var a=n(67294);const r=a.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{o(!0)}),[]),a.createElement(r.Provider,{value:n},t)}},49383:(e,t,n)=>{"use strict";var a=n(67294),r=n(73935),o=n(73727),i=n(70405),s=n(10412);const c=[n(32497),n(3310),n(18320),n(52295)];var l=n(723),d=n(16550),u=n(18790);function p(e){let{children:t}=e;return a.createElement(a.Fragment,null,t)}var f=n(87462),b=n(35742),m=n(52263),g=n(44996),h=n(86668),v=n(1944),y=n(94711),k=n(19727),w=n(43320),_=n(90197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,m.Z)(),n=(0,y.l)();return a.createElement(b.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:r}]=e;return a.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:r})})),a.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.Z)(),r=function(){const{siteConfig:{url:e}}=(0,m.Z)(),{pathname:t}=(0,d.TH)();return e+(0,g.Z)(t)}(),o=t?`${n}${t}`:r;return a.createElement(b.Z,null,a.createElement("meta",{property:"og:url",content:o}),a.createElement("link",{rel:"canonical",href:o}))}function E(){const{i18n:{currentLocale:e}}=(0,m.Z)(),{metadata:t,image:n}=(0,h.L)();return a.createElement(a.Fragment,null,a.createElement(b.Z,null,a.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),a.createElement("body",{className:k.h})),n&&a.createElement(v.d,{image:n}),a.createElement(x,null),a.createElement(S,null),a.createElement(_.Z,{tag:w.HX,locale:e}),a.createElement(b.Z,null,t.map(((e,t)=>a.createElement("meta",(0,f.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,u.f)(l.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var A=n(98934),L=n(58940);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];const r=c.map((t=>(t.default?.[e]??t[e])?.(...n)));return()=>r.forEach((e=>e?.()))}const I=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,a.useLayoutEffect)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const a=t.pathname===n.pathname,r=t.hash===n.hash,o=t.search===n.search;if(a&&r&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1));document.getElementById(e)?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),N("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,u.f)(l.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class P extends a.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?N("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=N("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 a.createElement(I,{previousLocation:this.previousLocation,location:t},a.createElement(d.AW,{location:t,render:()=>e}))}}const R=P,D="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="docusaurus-base-url-issue-banner" 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="${M}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${M}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function j(){const{siteConfig:{baseUrl:e}}=(0,m.Z)();return(0,a.useLayoutEffect)((()=>{window[F]=!1}),[]),a.createElement(a.Fragment,null,!s.Z.canUseDOM&&a.createElement(b.Z,null,a.createElement("script",null,B(e))),a.createElement("div",{id:D}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,m.Z)(),{pathname:n}=(0,d.TH)();return t&&n===e?a.createElement(j,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,m.Z)(),i=(0,g.Z)(e),{htmlLang:s,direction:c}=o[r];return a.createElement(b.Z,null,a.createElement("html",{lang:s,dir:c}),a.createElement("title",null,t),a.createElement("meta",{property:"og:title",content:t}),a.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&a.createElement("link",{rel:"icon",href:i}))}var U=n(44763);function Z(){const e=(0,u.H)(l.Z),t=(0,d.TH)();return a.createElement(U.Z,null,a.createElement(L.M,null,a.createElement(A.t,null,a.createElement(p,null,a.createElement($,null),a.createElement(E,null),a.createElement(z,null),a.createElement(R,{location:T(t)},e)))))}var H=n(16887);const G=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 a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();(document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode)?.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const a=new XMLHttpRequest;a.open("GET",e,!0),a.withCredentials=!0,a.onload=()=>{200===a.status?t():n()},a.send(null)}))};var V=n(99670);const W=new Set,q=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,K={prefetch(e){if(!(e=>!Y()&&!q.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,u.f)(l.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(H).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Y()&&!q.has(e))(e)&&(q.add(e),O(e))},X=Object.freeze(K);if(s.Z.canUseDOM){window.docusaurus=X;const e=r.hydrate;O(window.location.pathname).then((()=>{e(a.createElement(i.B6,null,a.createElement(o.VK,null,a.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>u});var a=n(67294),r=n(36809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"0.8.0","isLast":false,"path":"/docs/next","mainDocId":"intro","docs":[{"id":"advanced/advanced-storage","path":"/docs/next/advanced/advanced-storage","sidebar":"tutorialSidebar"},{"id":"advanced/attributes","path":"/docs/next/advanced/attributes","sidebar":"tutorialSidebar"},{"id":"advanced/delegate","path":"/docs/next/advanced/delegate","sidebar":"tutorialSidebar"},{"id":"advanced/storage-layout","path":"/docs/next/advanced/storage-layout","sidebar":"tutorialSidebar"},{"id":"backends/casper","path":"/docs/next/backends/casper","sidebar":"tutorialSidebar"},{"id":"backends/livenet","path":"/docs/next/backends/livenet","sidebar":"tutorialSidebar"},{"id":"backends/odra-vm","path":"/docs/next/backends/odra-vm","sidebar":"tutorialSidebar"},{"id":"backends/what-is-a-backend","path":"/docs/next/backends/what-is-a-backend","sidebar":"tutorialSidebar"},{"id":"basics/cargo-odra","path":"/docs/next/basics/cargo-odra","sidebar":"tutorialSidebar"},{"id":"basics/communicating-with-host","path":"/docs/next/basics/communicating-with-host","sidebar":"tutorialSidebar"},{"id":"basics/cross-calls","path":"/docs/next/basics/cross-calls","sidebar":"tutorialSidebar"},{"id":"basics/directory-structure","path":"/docs/next/basics/directory-structure","sidebar":"tutorialSidebar"},{"id":"basics/errors","path":"/docs/next/basics/errors","sidebar":"tutorialSidebar"},{"id":"basics/events","path":"/docs/next/basics/events","sidebar":"tutorialSidebar"},{"id":"basics/flipper-internals","path":"/docs/next/basics/flipper-internals","sidebar":"tutorialSidebar"},{"id":"basics/modules","path":"/docs/next/basics/modules","sidebar":"tutorialSidebar"},{"id":"basics/native-token","path":"/docs/next/basics/native-token","sidebar":"tutorialSidebar"},{"id":"basics/odra-toml","path":"/docs/next/basics/odra-toml","sidebar":"tutorialSidebar"},{"id":"basics/storage-interaction","path":"/docs/next/basics/storage-interaction","sidebar":"tutorialSidebar"},{"id":"basics/testing","path":"/docs/next/basics/testing","sidebar":"tutorialSidebar"},{"id":"examples/odra-examples","path":"/docs/next/examples/odra-examples","sidebar":"tutorialSidebar"},{"id":"examples/using-odra-modules","path":"/docs/next/examples/using-odra-modules","sidebar":"tutorialSidebar"},{"id":"getting-started/flipper","path":"/docs/next/getting-started/flipper","sidebar":"tutorialSidebar"},{"id":"getting-started/installation","path":"/docs/next/getting-started/installation","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/next/","sidebar":"tutorialSidebar"},{"id":"migrations/to-0.8.0","path":"/docs/next/migrations/to-0.8.0","sidebar":"tutorialSidebar"},{"id":"tutorials/access-control","path":"/docs/next/tutorials/access-control","sidebar":"tutorialSidebar"},{"id":"tutorials/erc20","path":"/docs/next/tutorials/erc20","sidebar":"tutorialSidebar"},{"id":"tutorials/ownable","path":"/docs/next/tutorials/ownable","sidebar":"tutorialSidebar"},{"id":"tutorials/owned-token","path":"/docs/next/tutorials/owned-token","sidebar":"tutorialSidebar"},{"id":"tutorials/pauseable","path":"/docs/next/tutorials/pauseable","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/docs/next/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/basics","path":"/docs/next/category/basics","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/docs/next/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/backends","path":"/docs/next/category/backends","sidebar":"tutorialSidebar"},{"id":"/category/examples","path":"/docs/next/category/examples","sidebar":"tutorialSidebar"},{"id":"/category/tutorials","path":"/docs/next/category/tutorials","sidebar":"tutorialSidebar"},{"id":"/category/migrations","path":"/docs/next/category/migrations","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/next/","label":"intro"}}}},{"name":"0.7.0","label":"0.7.0","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"advanced/advanced-storage","path":"/docs/advanced/advanced-storage","sidebar":"tutorialSidebar"},{"id":"advanced/attributes","path":"/docs/advanced/attributes","sidebar":"tutorialSidebar"},{"id":"advanced/delegate","path":"/docs/advanced/delegate","sidebar":"tutorialSidebar"},{"id":"advanced/signatures","path":"/docs/advanced/signatures","sidebar":"tutorialSidebar"},{"id":"advanced/using","path":"/docs/advanced/using","sidebar":"tutorialSidebar"},{"id":"backends/casper","path":"/docs/backends/casper","sidebar":"tutorialSidebar"},{"id":"backends/mock-vm","path":"/docs/backends/mock-vm","sidebar":"tutorialSidebar"},{"id":"backends/what-is-a-backend","path":"/docs/backends/what-is-a-backend","sidebar":"tutorialSidebar"},{"id":"basics/cargo-odra","path":"/docs/basics/cargo-odra","sidebar":"tutorialSidebar"},{"id":"basics/communicating-with-host","path":"/docs/basics/communicating-with-host","sidebar":"tutorialSidebar"},{"id":"basics/cross-calls","path":"/docs/basics/cross-calls","sidebar":"tutorialSidebar"},{"id":"basics/directory-structure","path":"/docs/basics/directory-structure","sidebar":"tutorialSidebar"},{"id":"basics/errors","path":"/docs/basics/errors","sidebar":"tutorialSidebar"},{"id":"basics/events","path":"/docs/basics/events","sidebar":"tutorialSidebar"},{"id":"basics/flipper-internals","path":"/docs/basics/flipper-internals","sidebar":"tutorialSidebar"},{"id":"basics/modules","path":"/docs/basics/modules","sidebar":"tutorialSidebar"},{"id":"basics/native-token","path":"/docs/basics/native-token","sidebar":"tutorialSidebar"},{"id":"basics/odra-toml","path":"/docs/basics/odra-toml","sidebar":"tutorialSidebar"},{"id":"basics/storage-interaction","path":"/docs/basics/storage-interaction","sidebar":"tutorialSidebar"},{"id":"basics/testing","path":"/docs/basics/testing","sidebar":"tutorialSidebar"},{"id":"examples/odra-examples","path":"/docs/examples/odra-examples","sidebar":"tutorialSidebar"},{"id":"examples/using-odra-modules","path":"/docs/examples/using-odra-modules","sidebar":"tutorialSidebar"},{"id":"getting-started/flipper","path":"/docs/getting-started/flipper","sidebar":"tutorialSidebar"},{"id":"getting-started/installation","path":"/docs/getting-started/installation","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/","sidebar":"tutorialSidebar"},{"id":"tutorials/access-control","path":"/docs/tutorials/access-control","sidebar":"tutorialSidebar"},{"id":"tutorials/erc20","path":"/docs/tutorials/erc20","sidebar":"tutorialSidebar"},{"id":"tutorials/ownable","path":"/docs/tutorials/ownable","sidebar":"tutorialSidebar"},{"id":"tutorials/owned-token","path":"/docs/tutorials/owned-token","sidebar":"tutorialSidebar"},{"id":"tutorials/pauseable","path":"/docs/tutorials/pauseable","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/docs/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/basics","path":"/docs/category/basics","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/docs/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/backends","path":"/docs/category/backends","sidebar":"tutorialSidebar"},{"id":"/category/examples","path":"/docs/category/examples","sidebar":"tutorialSidebar"},{"id":"/category/tutorials","path":"/docs/category/tutorials","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/","label":"version-0.7.0/intro"}}}},{"name":"0.6.0","label":"0.6.0","isLast":false,"path":"/docs/0.6.0","mainDocId":"intro","docs":[{"id":"advanced/advanced-storage","path":"/docs/0.6.0/advanced/advanced-storage","sidebar":"tutorialSidebar"},{"id":"advanced/attributes","path":"/docs/0.6.0/advanced/attributes","sidebar":"tutorialSidebar"},{"id":"advanced/delegate","path":"/docs/0.6.0/advanced/delegate","sidebar":"tutorialSidebar"},{"id":"advanced/signatures","path":"/docs/0.6.0/advanced/signatures","sidebar":"tutorialSidebar"},{"id":"advanced/using","path":"/docs/0.6.0/advanced/using","sidebar":"tutorialSidebar"},{"id":"backends/casper","path":"/docs/0.6.0/backends/casper","sidebar":"tutorialSidebar"},{"id":"backends/mock-vm","path":"/docs/0.6.0/backends/mock-vm","sidebar":"tutorialSidebar"},{"id":"backends/what-is-a-backend","path":"/docs/0.6.0/backends/what-is-a-backend","sidebar":"tutorialSidebar"},{"id":"basics/cargo-odra","path":"/docs/0.6.0/basics/cargo-odra","sidebar":"tutorialSidebar"},{"id":"basics/communicating-with-host","path":"/docs/0.6.0/basics/communicating-with-host","sidebar":"tutorialSidebar"},{"id":"basics/cross-calls","path":"/docs/0.6.0/basics/cross-calls","sidebar":"tutorialSidebar"},{"id":"basics/directory-structure","path":"/docs/0.6.0/basics/directory-structure","sidebar":"tutorialSidebar"},{"id":"basics/errors","path":"/docs/0.6.0/basics/errors","sidebar":"tutorialSidebar"},{"id":"basics/events","path":"/docs/0.6.0/basics/events","sidebar":"tutorialSidebar"},{"id":"basics/flipper-internals","path":"/docs/0.6.0/basics/flipper-internals","sidebar":"tutorialSidebar"},{"id":"basics/modules","path":"/docs/0.6.0/basics/modules","sidebar":"tutorialSidebar"},{"id":"basics/native-token","path":"/docs/0.6.0/basics/native-token","sidebar":"tutorialSidebar"},{"id":"basics/odra-toml","path":"/docs/0.6.0/basics/odra-toml","sidebar":"tutorialSidebar"},{"id":"basics/storage-interaction","path":"/docs/0.6.0/basics/storage-interaction","sidebar":"tutorialSidebar"},{"id":"basics/testing","path":"/docs/0.6.0/basics/testing","sidebar":"tutorialSidebar"},{"id":"examples/odra-examples","path":"/docs/0.6.0/examples/odra-examples","sidebar":"tutorialSidebar"},{"id":"examples/using-odra-modules","path":"/docs/0.6.0/examples/using-odra-modules","sidebar":"tutorialSidebar"},{"id":"getting-started/flipper","path":"/docs/0.6.0/getting-started/flipper","sidebar":"tutorialSidebar"},{"id":"getting-started/installation","path":"/docs/0.6.0/getting-started/installation","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/0.6.0/","sidebar":"tutorialSidebar"},{"id":"tutorials/erc20","path":"/docs/0.6.0/tutorials/erc20","sidebar":"tutorialSidebar"},{"id":"tutorials/ownable","path":"/docs/0.6.0/tutorials/ownable","sidebar":"tutorialSidebar"},{"id":"tutorials/owned-token","path":"/docs/0.6.0/tutorials/owned-token","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/docs/0.6.0/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/basics","path":"/docs/0.6.0/category/basics","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/docs/0.6.0/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/backends","path":"/docs/0.6.0/category/backends","sidebar":"tutorialSidebar"},{"id":"/category/examples","path":"/docs/0.6.0/category/examples","sidebar":"tutorialSidebar"},{"id":"/category/tutorials","path":"/docs/0.6.0/category/tutorials","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/0.6.0/","label":"version-0.6.0/intro"}}}},{"name":"0.5.0","label":"0.5.0","isLast":false,"path":"/docs/0.5.0","mainDocId":"intro","docs":[{"id":"advanced/advanced-storage","path":"/docs/0.5.0/advanced/advanced-storage","sidebar":"tutorialSidebar"},{"id":"advanced/attributes","path":"/docs/0.5.0/advanced/attributes","sidebar":"tutorialSidebar"},{"id":"advanced/delegate","path":"/docs/0.5.0/advanced/delegate","sidebar":"tutorialSidebar"},{"id":"advanced/signatures","path":"/docs/0.5.0/advanced/signatures","sidebar":"tutorialSidebar"},{"id":"advanced/using","path":"/docs/0.5.0/advanced/using","sidebar":"tutorialSidebar"},{"id":"backends/casper","path":"/docs/0.5.0/backends/casper","sidebar":"tutorialSidebar"},{"id":"backends/mock-vm","path":"/docs/0.5.0/backends/mock-vm","sidebar":"tutorialSidebar"},{"id":"backends/what-is-a-backend","path":"/docs/0.5.0/backends/what-is-a-backend","sidebar":"tutorialSidebar"},{"id":"basics/cargo-odra","path":"/docs/0.5.0/basics/cargo-odra","sidebar":"tutorialSidebar"},{"id":"basics/communicating-with-host","path":"/docs/0.5.0/basics/communicating-with-host","sidebar":"tutorialSidebar"},{"id":"basics/cross-calls","path":"/docs/0.5.0/basics/cross-calls","sidebar":"tutorialSidebar"},{"id":"basics/directory-structure","path":"/docs/0.5.0/basics/directory-structure","sidebar":"tutorialSidebar"},{"id":"basics/errors","path":"/docs/0.5.0/basics/errors","sidebar":"tutorialSidebar"},{"id":"basics/events","path":"/docs/0.5.0/basics/events","sidebar":"tutorialSidebar"},{"id":"basics/flipper-internals","path":"/docs/0.5.0/basics/flipper-internals","sidebar":"tutorialSidebar"},{"id":"basics/modules","path":"/docs/0.5.0/basics/modules","sidebar":"tutorialSidebar"},{"id":"basics/native-token","path":"/docs/0.5.0/basics/native-token","sidebar":"tutorialSidebar"},{"id":"basics/odra-toml","path":"/docs/0.5.0/basics/odra-toml","sidebar":"tutorialSidebar"},{"id":"basics/storage-interaction","path":"/docs/0.5.0/basics/storage-interaction","sidebar":"tutorialSidebar"},{"id":"basics/testing","path":"/docs/0.5.0/basics/testing","sidebar":"tutorialSidebar"},{"id":"examples/odra-examples","path":"/docs/0.5.0/examples/odra-examples","sidebar":"tutorialSidebar"},{"id":"examples/using-odra-modules","path":"/docs/0.5.0/examples/using-odra-modules","sidebar":"tutorialSidebar"},{"id":"getting-started/flipper","path":"/docs/0.5.0/getting-started/flipper","sidebar":"tutorialSidebar"},{"id":"getting-started/installation","path":"/docs/0.5.0/getting-started/installation","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/0.5.0/","sidebar":"tutorialSidebar"},{"id":"tutorials/erc20","path":"/docs/0.5.0/tutorials/erc20","sidebar":"tutorialSidebar"},{"id":"tutorials/ownable","path":"/docs/0.5.0/tutorials/ownable","sidebar":"tutorialSidebar"},{"id":"tutorials/owned-token","path":"/docs/0.5.0/tutorials/owned-token","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/docs/0.5.0/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/basics","path":"/docs/0.5.0/category/basics","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/docs/0.5.0/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/backends","path":"/docs/0.5.0/category/backends","sidebar":"tutorialSidebar"},{"id":"/category/examples","path":"/docs/0.5.0/category/examples","sidebar":"tutorialSidebar"},{"id":"/category/tutorials","path":"/docs/0.5.0/category/tutorials","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/0.5.0/","label":"version-0.5.0/intro"}}}},{"name":"0.4.0","label":"0.4.0","isLast":false,"path":"/docs/0.4.0","mainDocId":"intro","docs":[{"id":"advanced/advanced-storage","path":"/docs/0.4.0/advanced/advanced-storage","sidebar":"tutorialSidebar"},{"id":"advanced/attributes","path":"/docs/0.4.0/advanced/attributes","sidebar":"tutorialSidebar"},{"id":"advanced/composer","path":"/docs/0.4.0/advanced/composer","sidebar":"tutorialSidebar"},{"id":"advanced/delegate","path":"/docs/0.4.0/advanced/delegate","sidebar":"tutorialSidebar"},{"id":"backends/casper","path":"/docs/0.4.0/backends/casper","sidebar":"tutorialSidebar"},{"id":"backends/mock-vm","path":"/docs/0.4.0/backends/mock-vm","sidebar":"tutorialSidebar"},{"id":"backends/what-is-a-backend","path":"/docs/0.4.0/backends/what-is-a-backend","sidebar":"tutorialSidebar"},{"id":"basics/cargo-odra","path":"/docs/0.4.0/basics/cargo-odra","sidebar":"tutorialSidebar"},{"id":"basics/communicating-with-host","path":"/docs/0.4.0/basics/communicating-with-host","sidebar":"tutorialSidebar"},{"id":"basics/cross-calls","path":"/docs/0.4.0/basics/cross-calls","sidebar":"tutorialSidebar"},{"id":"basics/directory-structure","path":"/docs/0.4.0/basics/directory-structure","sidebar":"tutorialSidebar"},{"id":"basics/errors","path":"/docs/0.4.0/basics/errors","sidebar":"tutorialSidebar"},{"id":"basics/events","path":"/docs/0.4.0/basics/events","sidebar":"tutorialSidebar"},{"id":"basics/flipper-internals","path":"/docs/0.4.0/basics/flipper-internals","sidebar":"tutorialSidebar"},{"id":"basics/modules","path":"/docs/0.4.0/basics/modules","sidebar":"tutorialSidebar"},{"id":"basics/native-token","path":"/docs/0.4.0/basics/native-token","sidebar":"tutorialSidebar"},{"id":"basics/odra-toml","path":"/docs/0.4.0/basics/odra-toml","sidebar":"tutorialSidebar"},{"id":"basics/storage-interaction","path":"/docs/0.4.0/basics/storage-interaction","sidebar":"tutorialSidebar"},{"id":"basics/testing","path":"/docs/0.4.0/basics/testing","sidebar":"tutorialSidebar"},{"id":"examples/odra-examples","path":"/docs/0.4.0/examples/odra-examples","sidebar":"tutorialSidebar"},{"id":"examples/using-odra-modules","path":"/docs/0.4.0/examples/using-odra-modules","sidebar":"tutorialSidebar"},{"id":"getting-started/flipper","path":"/docs/0.4.0/getting-started/flipper","sidebar":"tutorialSidebar"},{"id":"getting-started/installation","path":"/docs/0.4.0/getting-started/installation","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/0.4.0/","sidebar":"tutorialSidebar"},{"id":"tutorials/erc20","path":"/docs/0.4.0/tutorials/erc20","sidebar":"tutorialSidebar"},{"id":"tutorials/ownable","path":"/docs/0.4.0/tutorials/ownable","sidebar":"tutorialSidebar"},{"id":"tutorials/owned-token","path":"/docs/0.4.0/tutorials/owned-token","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/docs/0.4.0/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/basics","path":"/docs/0.4.0/category/basics","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/docs/0.4.0/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/backends","path":"/docs/0.4.0/category/backends","sidebar":"tutorialSidebar"},{"id":"/category/examples","path":"/docs/0.4.0/category/examples","sidebar":"tutorialSidebar"},{"id":"/category/tutorials","path":"/docs/0.4.0/category/tutorials","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/0.4.0/","label":"version-0.4.0/intro"}}}},{"name":"0.3.1","label":"0.3.1","isLast":false,"path":"/docs/0.3.1","mainDocId":"intro","docs":[{"id":"advanced/advanced-storage","path":"/docs/0.3.1/advanced/advanced-storage","sidebar":"tutorialSidebar"},{"id":"advanced/attributes","path":"/docs/0.3.1/advanced/attributes","sidebar":"tutorialSidebar"},{"id":"advanced/composer","path":"/docs/0.3.1/advanced/composer","sidebar":"tutorialSidebar"},{"id":"advanced/delegate","path":"/docs/0.3.1/advanced/delegate","sidebar":"tutorialSidebar"},{"id":"backends/casper","path":"/docs/0.3.1/backends/casper","sidebar":"tutorialSidebar"},{"id":"backends/mock-vm","path":"/docs/0.3.1/backends/mock-vm","sidebar":"tutorialSidebar"},{"id":"backends/what-is-a-backend","path":"/docs/0.3.1/backends/what-is-a-backend","sidebar":"tutorialSidebar"},{"id":"basics/cargo-odra","path":"/docs/0.3.1/basics/cargo-odra","sidebar":"tutorialSidebar"},{"id":"basics/communicating-with-host","path":"/docs/0.3.1/basics/communicating-with-host","sidebar":"tutorialSidebar"},{"id":"basics/cross-calls","path":"/docs/0.3.1/basics/cross-calls","sidebar":"tutorialSidebar"},{"id":"basics/directory-structure","path":"/docs/0.3.1/basics/directory-structure","sidebar":"tutorialSidebar"},{"id":"basics/errors","path":"/docs/0.3.1/basics/errors","sidebar":"tutorialSidebar"},{"id":"basics/events","path":"/docs/0.3.1/basics/events","sidebar":"tutorialSidebar"},{"id":"basics/flipper-internals","path":"/docs/0.3.1/basics/flipper-internals","sidebar":"tutorialSidebar"},{"id":"basics/modules","path":"/docs/0.3.1/basics/modules","sidebar":"tutorialSidebar"},{"id":"basics/native-token","path":"/docs/0.3.1/basics/native-token","sidebar":"tutorialSidebar"},{"id":"basics/odra-toml","path":"/docs/0.3.1/basics/odra-toml","sidebar":"tutorialSidebar"},{"id":"basics/storage-interaction","path":"/docs/0.3.1/basics/storage-interaction","sidebar":"tutorialSidebar"},{"id":"basics/testing","path":"/docs/0.3.1/basics/testing","sidebar":"tutorialSidebar"},{"id":"examples/odra-examples","path":"/docs/0.3.1/examples/odra-examples","sidebar":"tutorialSidebar"},{"id":"examples/using-odra-modules","path":"/docs/0.3.1/examples/using-odra-modules","sidebar":"tutorialSidebar"},{"id":"getting-started/flipper","path":"/docs/0.3.1/getting-started/flipper","sidebar":"tutorialSidebar"},{"id":"getting-started/installation","path":"/docs/0.3.1/getting-started/installation","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/0.3.1/","sidebar":"tutorialSidebar"},{"id":"tutorials/erc20","path":"/docs/0.3.1/tutorials/erc20","sidebar":"tutorialSidebar"},{"id":"tutorials/ownable","path":"/docs/0.3.1/tutorials/ownable","sidebar":"tutorialSidebar"},{"id":"tutorials/owned-token","path":"/docs/0.3.1/tutorials/owned-token","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/docs/0.3.1/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/basics","path":"/docs/0.3.1/category/basics","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/docs/0.3.1/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/backends","path":"/docs/0.3.1/category/backends","sidebar":"tutorialSidebar"},{"id":"/category/examples","path":"/docs/0.3.1/category/examples","sidebar":"tutorialSidebar"},{"id":"/category/tutorials","path":"/docs/0.3.1/category/tutorials","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/0.3.1/","label":"version-0.3.1/intro"}}}},{"name":"0.3.0","label":"0.3.0","isLast":false,"path":"/docs/0.3.0","mainDocId":"intro","docs":[{"id":"advanced/advanced-storage","path":"/docs/0.3.0/advanced/advanced-storage","sidebar":"defaultSidebar"},{"id":"advanced/attributes","path":"/docs/0.3.0/advanced/attributes","sidebar":"defaultSidebar"},{"id":"advanced/composer","path":"/docs/0.3.0/advanced/composer","sidebar":"defaultSidebar"},{"id":"advanced/delegate","path":"/docs/0.3.0/advanced/delegate","sidebar":"defaultSidebar"},{"id":"backends/casper","path":"/docs/0.3.0/backends/casper","sidebar":"defaultSidebar"},{"id":"backends/mock-vm","path":"/docs/0.3.0/backends/mock-vm","sidebar":"defaultSidebar"},{"id":"backends/what-is-a-backend","path":"/docs/0.3.0/backends/what-is-a-backend","sidebar":"defaultSidebar"},{"id":"basics/cargo-odra","path":"/docs/0.3.0/basics/cargo-odra","sidebar":"defaultSidebar"},{"id":"basics/communicating-with-host","path":"/docs/0.3.0/basics/communicating-with-host","sidebar":"defaultSidebar"},{"id":"basics/cross-calls","path":"/docs/0.3.0/basics/cross-calls","sidebar":"defaultSidebar"},{"id":"basics/directory-structure","path":"/docs/0.3.0/basics/directory-structure","sidebar":"defaultSidebar"},{"id":"basics/errors","path":"/docs/0.3.0/basics/errors","sidebar":"defaultSidebar"},{"id":"basics/events","path":"/docs/0.3.0/basics/events","sidebar":"defaultSidebar"},{"id":"basics/flipper-internals","path":"/docs/0.3.0/basics/flipper-internals","sidebar":"defaultSidebar"},{"id":"basics/modules","path":"/docs/0.3.0/basics/modules","sidebar":"defaultSidebar"},{"id":"basics/native-token","path":"/docs/0.3.0/basics/native-token","sidebar":"defaultSidebar"},{"id":"basics/odra-toml","path":"/docs/0.3.0/basics/odra-toml","sidebar":"defaultSidebar"},{"id":"basics/storage-interaction","path":"/docs/0.3.0/basics/storage-interaction","sidebar":"defaultSidebar"},{"id":"basics/testing","path":"/docs/0.3.0/basics/testing","sidebar":"defaultSidebar"},{"id":"examples/odra-examples","path":"/docs/0.3.0/examples/odra-examples","sidebar":"defaultSidebar"},{"id":"examples/using-odra-modules","path":"/docs/0.3.0/examples/using-odra-modules","sidebar":"defaultSidebar"},{"id":"getting-started/flipper","path":"/docs/0.3.0/getting-started/flipper","sidebar":"defaultSidebar"},{"id":"getting-started/installation","path":"/docs/0.3.0/getting-started/installation","sidebar":"defaultSidebar"},{"id":"intro","path":"/docs/0.3.0/","sidebar":"defaultSidebar"},{"id":"tutorials/erc20","path":"/docs/0.3.0/tutorials/erc20","sidebar":"defaultSidebar"},{"id":"tutorials/ownable","path":"/docs/0.3.0/tutorials/ownable","sidebar":"defaultSidebar"},{"id":"tutorials/owned-token","path":"/docs/0.3.0/tutorials/owned-token","sidebar":"defaultSidebar"},{"id":"/category/getting-started","path":"/docs/0.3.0/category/getting-started","sidebar":"defaultSidebar"},{"id":"/category/basics","path":"/docs/0.3.0/category/basics","sidebar":"defaultSidebar"},{"id":"/category/advanced","path":"/docs/0.3.0/category/advanced","sidebar":"defaultSidebar"},{"id":"/category/backends","path":"/docs/0.3.0/category/backends","sidebar":"defaultSidebar"},{"id":"/category/examples","path":"/docs/0.3.0/category/examples","sidebar":"defaultSidebar"},{"id":"/category/tutorials","path":"/docs/0.3.0/category/tutorials","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/docs/0.3.0/","label":"version-0.3.0/intro"}}}},{"name":"0.2.0","label":"0.2.0","isLast":false,"path":"/docs/0.2.0","mainDocId":"intro","docs":[{"id":"backends/casper","path":"/docs/0.2.0/backends/casper","sidebar":"defaultSidebar"},{"id":"backends/mock-vm","path":"/docs/0.2.0/backends/mock-vm","sidebar":"defaultSidebar"},{"id":"backends/what-is-a-backend","path":"/docs/0.2.0/backends/what-is-a-backend","sidebar":"defaultSidebar"},{"id":"basics/cargo-odra","path":"/docs/0.2.0/basics/cargo-odra","sidebar":"defaultSidebar"},{"id":"basics/communicating-with-host","path":"/docs/0.2.0/basics/communicating-with-host","sidebar":"defaultSidebar"},{"id":"basics/cross-calls","path":"/docs/0.2.0/basics/cross-calls","sidebar":"defaultSidebar"},{"id":"basics/directory-structure","path":"/docs/0.2.0/basics/directory-structure","sidebar":"defaultSidebar"},{"id":"basics/errors","path":"/docs/0.2.0/basics/errors","sidebar":"defaultSidebar"},{"id":"basics/events","path":"/docs/0.2.0/basics/events","sidebar":"defaultSidebar"},{"id":"basics/flipper-internals","path":"/docs/0.2.0/basics/flipper-internals","sidebar":"defaultSidebar"},{"id":"basics/modules","path":"/docs/0.2.0/basics/modules","sidebar":"defaultSidebar"},{"id":"basics/native-token","path":"/docs/0.2.0/basics/native-token","sidebar":"defaultSidebar"},{"id":"basics/odra-toml","path":"/docs/0.2.0/basics/odra-toml","sidebar":"defaultSidebar"},{"id":"basics/storage-interaction","path":"/docs/0.2.0/basics/storage-interaction","sidebar":"defaultSidebar"},{"id":"basics/testing","path":"/docs/0.2.0/basics/testing","sidebar":"defaultSidebar"},{"id":"examples/odra-examples","path":"/docs/0.2.0/examples/odra-examples","sidebar":"defaultSidebar"},{"id":"examples/using-odra-modules","path":"/docs/0.2.0/examples/using-odra-modules","sidebar":"defaultSidebar"},{"id":"getting-started/flipper","path":"/docs/0.2.0/getting-started/flipper","sidebar":"defaultSidebar"},{"id":"getting-started/installation","path":"/docs/0.2.0/getting-started/installation","sidebar":"defaultSidebar"},{"id":"intro","path":"/docs/0.2.0/","sidebar":"defaultSidebar"},{"id":"tutorials/erc20","path":"/docs/0.2.0/tutorials/erc20","sidebar":"defaultSidebar"},{"id":"tutorials/ownable","path":"/docs/0.2.0/tutorials/ownable","sidebar":"defaultSidebar"},{"id":"tutorials/owned-token","path":"/docs/0.2.0/tutorials/owned-token","sidebar":"defaultSidebar"},{"id":"/category/getting-started","path":"/docs/0.2.0/category/getting-started","sidebar":"defaultSidebar"},{"id":"/category/basics","path":"/docs/0.2.0/category/basics","sidebar":"defaultSidebar"},{"id":"/category/backends","path":"/docs/0.2.0/category/backends","sidebar":"defaultSidebar"},{"id":"/category/examples","path":"/docs/0.2.0/category/examples","sidebar":"defaultSidebar"},{"id":"/category/tutorials","path":"/docs/0.2.0/category/tutorials","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/docs/0.2.0/","label":"version-0.2.0/intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(57529);const c=JSON.parse('{"docusaurusVersion":"2.3.1","siteVersion":"0.0.1","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.3.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.3.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.3.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.3.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.3.1"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.3.1"}}}'),l={siteConfig:r.default,siteMetadata:c,globalData:o,i18n:i,codeTranslations:s},d=a.createContext(l);function u(e){let{children:t}=e;return a.createElement(d.Provider,{value:l},t)}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var a=n(67294),r=n(10412),o=n(35742),i=n(16963);function s(e){let{error:t,tryAgain:n}=e;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},a.createElement("h1",null,"This page crashed."),a.createElement("p",null,t.message),a.createElement("button",{type:"button",onClick:n},"Try again"))}function c(e){let{error:t,tryAgain:n}=e;return a.createElement(d,{fallback:()=>a.createElement(s,{error:t,tryAgain:n})},a.createElement(o.Z,null,a.createElement("title",null,"Page Error")),a.createElement(i.Z,null,a.createElement(s,{error:t,tryAgain:n})))}const l=e=>a.createElement(c,e);class d extends a.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){r.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??l)(e)}return e??null}}},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const a="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,r={canUseDOM:a,canUseEventListeners:a&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:a&&"IntersectionObserver"in window,canUseViewport:a&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a=n(67294),r=n(70405);function o(e){return a.createElement(r.ql,e)}},39960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(87462),r=n(67294),o=n(73727),i=n(18780),s=n(52263),c=n(13919),l=n(10412);const d=r.createContext({collectLink:()=>{}});var u=n(44996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:b,isActive:m,"data-noBrokenLinkCheck":g,autoAddBaseUrl:h=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:k}}=(0,s.Z)(),{withBaseUrl:w}=(0,u.C)(),_=(0,r.useContext)(d),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const x=p||f;const E=(0,c.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(A=C,h&&(e=>e.startsWith("/"))(A)?w(A):A):void 0;var A;T&&E&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:k}));const L=(0,r.useRef)(!1),N=n?o.OL:o.rU,I=l.Z.canUseIntersectionObserver,O=(0,r.useRef)(),P=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,r.useEffect)((()=>(!I&&E&&null!=T&&window.docusaurus.prefetch(T),()=>{I&&O.current&&O.current.disconnect()})),[O,T,I,E]);const R=T?.startsWith("#")??!1,D=!T||!E||R;return D||g||_.collectLink(T),D?r.createElement("a",(0,a.Z)({ref:S,href:T},x&&!E&&{target:"_blank",rel:"noopener noreferrer"},v)):r.createElement(N,(0,a.Z)({},v,{onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,I&&e&&E&&(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!=T&&window.docusaurus.prefetch(T))}))})),O.current.observe(e))},to:T},n&&{isActive:m,activeClassName:b}))}const f=r.forwardRef(p)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>s});var a=n(67294);function r(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,a.isValidElement)(e)))?n.map(((e,t)=>(0,a.isValidElement)(e)?a.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function s(e,t){let{message:n,id:a}=e;return r(i({message:n,id:a}),t)}function c(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return a.createElement(a.Fragment,null,r(s,o))}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>a});const a="default"},13919:(e,t,n)=>{"use strict";function a(e){return/^(?:\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!a(e)}n.d(t,{Z:()=>r,b:()=>a})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var a=n(67294),r=n(52263),o=n(13919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,r.Z)(),n=(0,a.useCallback)(((n,a)=>function(e,t,n,a){let{forcePrependBaseUrl:r=!1,absolute:i=!1}=void 0===a?{}:a;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(r)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,a)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a=n(67294),r=n(58940);function o(){return(0,a.useContext)(r._)}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a=n(67294),r=n(98934);function o(){return(0,a.useContext)(r._)}},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[r,o]=n;const i=a?`${a}.${r}`:r;var s;"object"==typeof(s=o)&&s&&Object.keys(s).length>0?e(o,i):t[i]=o}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>r,z:()=>o});var a=n(67294);const r=a.createContext(null);function o(e){let{children:t,value:n}=e;const o=a.useContext(r),i=(0,a.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 a={...t.data,...n?.data};return{plugin:t.plugin,data:a}}({parent:o,value:n})),[o,n]);return a.createElement(r.Provider,{value:i},t)}},80143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>m,gA:()=>p,_r:()=>d,Jo:()=>g,zh:()=>u,yW:()=>b,gB:()=>f});var a=n(16550),r=n(52263),o=n(29935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function c(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,a.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),r=n?.docs.find((e=>!!(0,a.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:r,alternateDocVersions:r?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((a=>{a.id===t&&(n[e.name]=a)}))})),n}(r.id):{}}}const l={},d=()=>i("docusaurus-plugin-content-docs")??l,u=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const a=i(e)?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,a.TH)();return function(e,t,n){void 0===n&&(n={});const r=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,a.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=r?{pluginId:r[0],pluginData:r[1]}:void 0;if(!o&&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 o}(t,n,e)}function f(e){return u(e).versions}function b(e){const t=u(e);return s(t)}function m(e){const t=u(e),{pathname:n}=(0,a.TH)();return c(t,n)}function g(e){const t=u(e),{pathname:n}=(0,a.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var a=n(74865),r=n.n(a);r().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{r().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){r().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var a=n(87410),r=n(36809);!function(e){const{themeConfig:{prism:t}}=r.default,{additionalLanguages:a}=t;globalThis.Prism=e,a.forEach((e=>{n(25583)(`./prism-${e}`)})),delete globalThis.Prism}(a.Z)},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a=n(67294);const r="iconExternalLink_nPIU";function o(e){let{width:t=13.5,height:n=13.5}=e;return a.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r},a.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},16963:(e,t,n)=>{"use strict";n.d(t,{Z:()=>ct});var a=n(67294),r=n(86010),o=n(44763),i=n(1944),s=n(87462),c=n(16550),l=n(95999),d=n(85936);const u="docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,a.useRef)(null),{action:t}=(0,c.k6)(),n=(0,a.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(u);t&&p(t)}),[]);return(0,d.S)((n=>{let{location:a}=n;e.current&&!a.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const b=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??b,{containerRef:n,onClick:r}=f();return a.createElement("div",{ref:n,role:"region","aria-label":b},a.createElement("a",(0,s.Z)({},e,{href:`#${u}`,onClick:r}),t))}var g=n(35281),h=n(19727);const v="skipToContent_fXgn";function y(){return a.createElement(m,{className:v})}var k=n(86668),w=n(59689);function _(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:i,...c}=e;return a.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},c),a.createElement("g",{stroke:r,strokeWidth:o},a.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S="closeButton_CVFx";function x(e){return a.createElement("button",(0,s.Z)({type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,r.Z)("clean-btn close",S,e.className)}),a.createElement(_,{width:14,height:14,strokeWidth:3.1}))}const E="content_knG7";function C(e){const{announcementBar:t}=(0,k.L)(),{content:n}=t;return a.createElement("div",(0,s.Z)({},e,{className:(0,r.Z)(E,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T="announcementBar_mb4j",A="announcementBarPlaceholder_vyr4",L="announcementBarClose_gvF7",N="announcementBarContent_xLdY";function I(){const{announcementBar:e}=(0,k.L)(),{isActive:t,close:n}=(0,w.nT)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:i}=e;return a.createElement("div",{className:T,style:{backgroundColor:r,color:o},role:"banner"},i&&a.createElement("div",{className:A}),a.createElement(C,{className:N}),i&&a.createElement(x,{onClick:n,className:L}))}var O=n(72961),P=n(12466);var R=n(902),D=n(13102);const M=a.createContext(null);function F(e){let{children:t}=e;const n=function(){const e=(0,O.e)(),t=(0,D.HY)(),[n,r]=(0,a.useState)(!1),o=null!==t.component,i=(0,R.D9)(o);return(0,a.useEffect)((()=>{o&&!i&&r(!0)}),[o,i]),(0,a.useEffect)((()=>{o?e.shown||r(!0):r(!1)}),[e.shown,o]),(0,a.useMemo)((()=>[n,r]),[n])}();return a.createElement(M.Provider,{value:n},t)}function B(e){if(e.component){const t=e.component;return a.createElement(t,e.props)}}function j(){const e=(0,a.useContext)(M);if(!e)throw new R.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,r=(0,a.useCallback)((()=>n(!1)),[n]),o=(0,D.HY)();return(0,a.useMemo)((()=>({shown:t,hide:r,content:B(o)})),[r,o,t])}function z(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=j();return a.createElement("div",{className:"navbar-sidebar"},t,a.createElement("div",{className:(0,r.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},a.createElement("div",{className:"navbar-sidebar__item menu"},n),a.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var $=n(92949),U=n(72389);function Z(e){return a.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function H(e){return a.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const G={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function V(e){let{className:t,value:n,onChange:o}=e;const i=(0,U.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return a.createElement("div",{className:(0,r.Z)(G.toggle,t)},a.createElement("button",{className:(0,r.Z)("clean-btn",G.toggleButton,!i&&G.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite"},a.createElement(Z,{className:(0,r.Z)(G.toggleIcon,G.lightToggleIcon)}),a.createElement(H,{className:(0,r.Z)(G.toggleIcon,G.darkToggleIcon)})))}const W=a.memo(V);function q(e){let{className:t}=e;const n=(0,k.L)().colorMode.disableSwitch,{colorMode:r,setColorMode:o}=(0,$.I)();return n?null:a.createElement(W,{className:t,value:r,onChange:o})}var Y=n(11231);function K(){return a.createElement(Y.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function X(){const e=(0,O.e)();return a.createElement("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},a.createElement(_,{color:"var(--ifm-color-emphasis-600)"}))}function Q(){return a.createElement("div",{className:"navbar-sidebar__brand"},a.createElement(K,null),a.createElement(q,{className:"margin-right--md"}),a.createElement(X,null))}var J=n(39960),ee=n(44996),te=n(13919);function ne(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var ae=n(39471);function re(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:i,html:c,isDropdownLink:l,prependBaseUrlToHref:d,...u}=e;const p=(0,ee.Z)(r),f=(0,ee.Z)(t),b=(0,ee.Z)(o,{forcePrependBaseUrl:!0}),m=i&&o&&!(0,te.Z)(o),g=c?{dangerouslySetInnerHTML:{__html:c}}:{children:a.createElement(a.Fragment,null,i,m&&a.createElement(ae.Z,l&&{width:12,height:12}))};return o?a.createElement(J.Z,(0,s.Z)({href:d?b:o},u,g)):a.createElement(J.Z,(0,s.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ne(n,t.pathname):t.pathname.startsWith(f)},u,g))}function oe(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=a.createElement(re,(0,s.Z)({className:(0,r.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?a.createElement("li",null,i):i}function ie(e){let{className:t,isDropdownItem:n,...o}=e;return a.createElement("li",{className:"menu__list-item"},a.createElement(re,(0,s.Z)({className:(0,r.Z)("menu__link",t)},o)))}function se(e){let{mobile:t=!1,position:n,...r}=e;const o=t?ie:oe;return a.createElement(o,(0,s.Z)({},r,{activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ce=n(86043),le=n(48596),de=n(52263);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ne(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function pe(e){let{items:t,position:n,className:o,onClick:i,...c}=e;const l=(0,a.useRef)(null),[d,u]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&u(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[l]),a.createElement("div",{ref:l,className:(0,r.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":d})},a.createElement(re,(0,s.Z)({"aria-haspopup":"true","aria-expanded":d,role:"button",href:c.to?void 0:"#",className:(0,r.Z)("navbar__link",o)},c,{onClick:c.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),u(!d))}}),c.children??c.label),a.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>a.createElement(Ce,(0,s.Z)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),u(!1);const t=l.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function fe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const d=function(){const{siteConfig:{baseUrl:e}}=(0,de.Z)(),{pathname:t}=(0,c.TH)();return t.replace(e,"/")}(),u=ue(t,d),{collapsed:p,toggleCollapsed:f,setCollapsed:b}=(0,ce.u)({initialState:()=>!u});return(0,a.useEffect)((()=>{u&&b(!u)}),[d,u,b]),a.createElement("li",{className:(0,r.Z)("menu__list-item",{"menu__list-item--collapsed":p})},a.createElement(re,(0,s.Z)({role:"button",className:(0,r.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},l,{onClick:e=>{e.preventDefault(),f()}}),l.children??l.label),a.createElement(ce.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>a.createElement(Ce,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function be(e){let{mobile:t=!1,...n}=e;const r=t?fe:pe;return a.createElement(r,n)}var me=n(94711);function ge(e){let{width:t=20,height:n=20,...r}=e;return a.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},r),a.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";const ve=()=>null,ye="searchBox_ZlJk";function ke(e){let{children:t,className:n}=e;return a.createElement("div",{className:(0,r.Z)(n,ye)},t)}var we=n(80143),_e=n(52802);var Se=n(60373);const xe=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:se,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,...o}=e;const{i18n:{currentLocale:i,locales:d,localeConfigs:u}}=(0,de.Z)(),p=(0,me.l)(),{search:f,hash:b}=(0,c.TH)(),m=[...n,...d.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${b}`;return{label:u[e].label,lang:u[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):u[i].label;return a.createElement(be,(0,s.Z)({},o,{mobile:t,label:a.createElement(a.Fragment,null,a.createElement(ge,{className:he}),g),items:m}))},search:function(e){let{mobile:t,className:n}=e;return t?null:a.createElement(ke,{className:n},a.createElement(ve,null))},dropdown:be,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return a.createElement(s,{className:(0,r.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:i}=(0,we.Iw)(r),c=(0,_e.vY)(t,r);return null===c?null:a.createElement(se,(0,s.Z)({exact:!0},o,{isActive:()=>i?.path===c.path||!!i?.sidebar&&i.sidebar===c.sidebar,label:n??c.id,to:c.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:i}=(0,we.Iw)(r),c=(0,_e.oz)(t,r).link;if(!c)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return a.createElement(se,(0,s.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??c.label,to:c.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const i=(0,_e.lO)(r)[0],c=t??i.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return a.createElement(se,(0,s.Z)({},o,{label:c,to:l}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:i,...d}=e;const{search:u,hash:p}=(0,c.TH)(),f=(0,we.Iw)(n),b=(0,we.gB)(n),{savePreferredVersionName:m}=(0,Se.J)(n),g=[...o,...b.map((e=>{const t=f.alternateDocVersions[e.name]??xe(e);return{label:e.label,to:`${t.path}${u}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>m(e.name)}})),...i],h=(0,_e.lO)(n)[0],v=t&&g.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&g.length>1?void 0:xe(h).path;return g.length<=1?a.createElement(se,(0,s.Z)({},d,{mobile:t,label:v,to:y,isActive:r?()=>!1:void 0})):a.createElement(be,(0,s.Z)({},d,{mobile:t,label:v,to:y,items:g,isActive:r?()=>!1:void 0}))}};function Ce(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return a.createElement(o,n)}function Te(){const e=(0,O.e)(),t=(0,k.L)().navbar.items;return a.createElement("ul",{className:"menu__list"},t.map(((t,n)=>a.createElement(Ce,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ae(e){return a.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),a.createElement(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Le(){const e=0===(0,k.L)().navbar.items.length,t=j();return a.createElement(a.Fragment,null,!e&&a.createElement(Ae,{onClick:()=>t.hide()}),t.content)}function Ne(){const e=(0,O.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,a.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?a.createElement(z,{header:a.createElement(Q,null),primaryMenu:a.createElement(Te,null),secondaryMenu:a.createElement(Le,null)}):null}const Ie="navbarHideable_m1mJ",Oe="navbarHidden_jGov";function Pe(e){return a.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,r.Z)("navbar-sidebar__backdrop",e.className)}))}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,k.L)(),i=(0,O.e)(),{navbarRef:s,isNavbarVisible:c}=function(e){const[t,n]=(0,a.useState)(e),r=(0,a.useRef)(!1),o=(0,a.useRef)(0),i=(0,a.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,a)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(r.current)return void(r.current=!1);const s=a?.scrollY,c=document.documentElement.scrollHeight-o.current,l=window.innerHeight;s&&i>=s?n(!1):i+l<c&&n(!0)})),(0,d.S)((t=>{if(!e)return;const a=t.location.hash;if(a?document.getElementById(a.substring(1)):void 0)return r.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return a.createElement("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,r.Z)("navbar","navbar--fixed-top",n&&[Ie,!c&&Oe],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,a.createElement(Pe,{onClick:i.toggle}),a.createElement(Ne,null))}function De(e){let{width:t=30,height:n=30,className:r,...o}=e;return a.createElement("svg",(0,s.Z)({className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Me(){const{toggle:e,shown:t}=(0,O.e)();return a.createElement("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},a.createElement(De,null))}const Fe="colorModeToggle_DEke";function Be(e){let{items:t}=e;return a.createElement(a.Fragment,null,t.map(((e,t)=>a.createElement(Ce,(0,s.Z)({},e,{key:t})))))}function je(e){let{left:t,right:n}=e;return a.createElement("div",{className:"navbar__inner"},a.createElement("div",{className:"navbar__items"},t),a.createElement("div",{className:"navbar__items navbar__items--right"},n))}function ze(){const e=(0,O.e)(),t=(0,k.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return a.createElement(je,{left:a.createElement(a.Fragment,null,!e.disabled&&a.createElement(Me,null),a.createElement(K,null),a.createElement(Be,{items:n})),right:a.createElement(a.Fragment,null,a.createElement(Be,{items:r}),a.createElement(q,{className:Fe}),!o&&a.createElement(ke,null,a.createElement(ve,null)))})}function $e(){return a.createElement(Re,null,a.createElement(ze,null))}function Ue(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:i,...c}=t,l=(0,ee.Z)(n),d=(0,ee.Z)(r,{forcePrependBaseUrl:!0});return a.createElement(J.Z,(0,s.Z)({className:"footer__link-item"},r?{href:i?d:r}:{to:l},c),o,r&&!(0,te.Z)(r)&&a.createElement(ae.Z,null))}function Ze(e){let{item:t}=e;return t.html?a.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):a.createElement("li",{key:t.href??t.to,className:"footer__item"},a.createElement(Ue,{item:t}))}function He(e){let{column:t}=e;return a.createElement("div",{className:"col footer__col"},a.createElement("div",{className:"footer__title"},t.title),a.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>a.createElement(Ze,{key:t,item:e})))))}function Ge(e){let{columns:t}=e;return a.createElement("div",{className:"row footer__links"},t.map(((e,t)=>a.createElement(He,{key:t,column:e}))))}function Ve(){return a.createElement("span",{className:"footer__link-separator"},"\xb7")}function We(e){let{item:t}=e;return t.html?a.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):a.createElement(Ue,{item:t})}function qe(e){let{links:t}=e;return a.createElement("div",{className:"footer__links text--center"},a.createElement("div",{className:"footer__links"},t.map(((e,n)=>a.createElement(a.Fragment,{key:n},a.createElement(We,{item:e}),t.length!==n+1&&a.createElement(Ve,null))))))}function Ye(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?a.createElement(Ge,{columns:t}):a.createElement(qe,{links:t})}var Ke=n(50941);const Xe="footerLogoLink_BH7S";function Qe(e){let{logo:t}=e;const{withBaseUrl:n}=(0,ee.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return a.createElement(Ke.Z,{className:(0,r.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function Je(e){let{logo:t}=e;return t.href?a.createElement(J.Z,{href:t.href,className:Xe,target:t.target},a.createElement(Qe,{logo:t})):a.createElement(Qe,{logo:t})}function et(e){let{copyright:t}=e;return a.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function tt(e){let{style:t,links:n,logo:o,copyright:i}=e;return a.createElement("footer",{className:(0,r.Z)("footer",{"footer--dark":"dark"===t})},a.createElement("div",{className:"container container-fluid"},n,(o||i)&&a.createElement("div",{className:"footer__bottom text--center"},o&&a.createElement("div",{className:"margin-bottom--sm"},o),i)))}function nt(){const{footer:e}=(0,k.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return a.createElement(tt,{style:o,links:n&&n.length>0&&a.createElement(Ye,{links:n}),logo:r&&a.createElement(Je,{logo:r}),copyright:t&&a.createElement(et,{copyright:t})})}const at=a.memo(nt),rt=(0,R.Qc)([$.S,w.pl,P.OC,Se.L5,i.VC,function(e){let{children:t}=e;return a.createElement(D.n2,null,a.createElement(O.M,null,a.createElement(F,null,t)))}]);function ot(e){let{children:t}=e;return a.createElement(rt,null,t)}function it(e){let{error:t,tryAgain:n}=e;return a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),a.createElement("p",null,t.message),a.createElement("div",null,a.createElement("button",{type:"button",onClick:n},a.createElement(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const st="mainWrapper_z2l0";function ct(e){const{children:t,noFooter:n,wrapperClassName:s,title:c,description:l}=e;return(0,h.t)(),a.createElement(ot,null,a.createElement(i.d,{title:c,description:l}),a.createElement(y,null),a.createElement(I,null),a.createElement($e,null),a.createElement("div",{id:u,className:(0,r.Z)(g.k.wrapper.main,st,s)},a.createElement(o.Z,{fallback:e=>a.createElement(it,e)},t)),!n&&a.createElement(at,null))}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a=n(67294),r=n(35742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return a.createElement(r.Z,null,t&&a.createElement("meta",{name:"docusaurus_locale",content:t}),n&&a.createElement("meta",{name:"docusaurus_version",content:n}),o&&a.createElement("meta",{name:"docusaurus_tag",content:o}),i&&a.createElement("meta",{name:"docsearch:language",content:i}),n&&a.createElement("meta",{name:"docsearch:version",content:n}),o&&a.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},50941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var a=n(87462),r=n(67294),o=n(86010),i=n(72389),s=n(92949);const c={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function l(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:l,className:d,alt:u,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return r.createElement(r.Fragment,null,f.map((e=>r.createElement("img",(0,a.Z)({key:e,src:l[e],alt:u,className:(0,o.Z)(c.themedImage,c[`themedImage--${e}`],d)},p)))))}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,z:()=>b});var a=n(87462),r=n(67294),o=n(10412);function i(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const s={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function l(e,t){const n=t?s:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function d(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??"ease-in-out"}`,height:`${t}px`}}function i(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return l(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=s.height,e.style.overflow=s.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function u(e){if(!o.Z.canUseDOM)return e?s:c}function p(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:c}=e;const p=(0,r.useRef)(null);return d({collapsibleRef:p,collapsed:n,animation:o}),r.createElement(t,{ref:p,style:c?void 0:u(n),onTransitionEnd:e=>{"height"===e.propertyName&&(l(p.current,n),i?.(n))},className:s},a)}function f(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[s,c]=(0,r.useState)(t);return(0,r.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,r.useLayoutEffect)((()=>{o&&c(t)}),[o,t]),o?r.createElement(p,(0,a.Z)({},n,{collapsed:s})):null}function b(e){let{lazy:t,...n}=e;const a=t?f:p;return r.createElement(a,n)}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>b,pl:()=>f});var a=n(67294),r=n(72389),o=n(50012),i=n(902),s=n(86668);const c=(0,o.WA)("docusaurus.announcement.dismiss"),l=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),u=e=>c.set(String(e)),p=a.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,r.Z)(),[n,o]=(0,a.useState)((()=>!!t&&d()));(0,a.useEffect)((()=>{o(d())}),[]);const i=(0,a.useCallback)((()=>{u(!0),o(!0)}),[]);return(0,a.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=l.get();"annoucement-bar"===n&&(n="announcement-bar");const a=t!==n;l.set(t),a&&u(!1),!a&&d()||o(!1)}),[e]),(0,a.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return a.createElement(p.Provider,{value:n},t)}function b(){const e=(0,a.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>m});var a=n(67294),r=n(10412),o=n(902),i=n(50012),s=n(86668);const c=a.createContext(void 0),l="theme",d=(0,i.WA)(l),u="light",p="dark",f=e=>e===p?p:u;function b(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,i]=(0,a.useState)((e=>r.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e))(e));(0,a.useEffect)((()=>{t&&d.del()}),[t]);const c=(0,a.useCallback)((function(t,a){void 0===a&&(a={});const{persist:r=!0}=a;t?(i(t),r&&(e=>{d.set(f(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p:u:e),d.del())}),[n,e]);(0,a.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,a.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==l)return;const t=d.get();null!==t&&c(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,c]);const b=(0,a.useRef)(!1);return(0,a.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),a=()=>{window.matchMedia("print").matches||b.current?b.current=window.matchMedia("print").matches:c(null)};return e.addListener(a),()=>e.removeListener(a)}),[c,t,n]),(0,a.useMemo)((()=>({colorMode:o,setColorMode:c,get isDarkTheme(){return o===p},setLightTheme(){c(u)},setDarkTheme(){c(p)}})),[o,c])}function m(e){let{children:t}=e;const n=b();return a.createElement(c.Provider,{value:n},t)}function g(){const e=(0,a.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>h});var a=n(67294),r=n(80143),o=n(29935),i=n(86668),s=n(52802),c=n(902),l=n(50012);const d=e=>`docs-preferred-version-${e}`,u=(e,t,n)=>{(0,l.WA)(d(e),{persistence:t}).set(n)},p=(e,t)=>(0,l.WA)(d(e),{persistence:t}).get(),f=(e,t)=>{(0,l.WA)(d(e),{persistence:t}).del()};const b=a.createContext(null);function m(){const e=(0,r._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,a.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,a.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,a.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:a}=e;function r(e){const t=p(e,n);return a[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,r(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,a.useMemo)((()=>({savePreferredVersion:function(e,n){u(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return a.createElement(b.Provider,{value:n},t)}function h(e){let{children:t}=e;return s.cE?a.createElement(g,null,t):a.createElement(a.Fragment,null,t)}function v(){const e=(0,a.useContext)(b);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,r.zh)(e),[n,i]=v(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,a.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>s});var a=n(67294),r=n(902);const o=Symbol("EmptyContext"),i=a.createContext(o);function s(e){let{children:t,name:n,items:r}=e;const o=(0,a.useMemo)((()=>n&&r?{name:n,items:r}:null),[n,r]);return a.createElement(i.Provider,{value:o},t)}function c(){const e=(0,a.useContext)(i);if(e===o)throw new r.i6("DocsSidebarProvider");return e}},74477:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>i});var a=n(67294),r=n(902);const o=a.createContext(null);function i(e){let{children:t,version:n}=e;return a.createElement(o.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(o);if(null===e)throw new r.i6("DocsVersionProvider");return e}},72961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var a=n(67294),r=n(13102),o=n(87524),i=n(16550),s=(n(61688),n(902));function c(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,a.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var l=n(86668);const d=a.createContext(void 0);function u(){const e=function(){const e=(0,r.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,s]=(0,a.useState)(!1);c((()=>{if(i)return s(!1),!1}));const d=(0,a.useCallback)((()=>{s((e=>!e))}),[]);return(0,a.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,a.useMemo)((()=>({disabled:e,shouldRender:n,toggle:d,shown:i})),[e,n,d,i])}function p(e){let{children:t}=e;const n=u();return a.createElement(d.Provider,{value:n},t)}function f(){const e=a.useContext(d);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>c,n2:()=>i});var a=n(67294),r=n(902);const o=a.createContext(null);function i(e){let{children:t}=e;const n=(0,a.useState)({component:null,props:null});return a.createElement(o.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(o);if(!e)throw new r.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const i=(0,a.useContext)(o);if(!i)throw new r.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,c=(0,r.Ql)(n);return(0,a.useEffect)((()=>{s({component:t,props:c})}),[s,t,c]),(0,a.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>r,t:()=>o});var a=n(67294);const r="navigation-with-keyboard";function o(){(0,a.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(r),"mousedown"===e.type&&document.body.classList.remove(r)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(r),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var a=n(67294),r=n(10412);const o="desktop",i="mobile",s="ssr";function c(){return r.Z.canUseDOM?window.innerWidth>996?o:i:s}function l(){const[e,t]=(0,a.useState)((()=>c()));return(0,a.useEffect)((()=>{function e(){t(c())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>a});const a={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},52802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>x,Wl:()=>b,_F:()=>h,cE:()=>p,jA:()=>m,xz:()=>f,hI:()=>S,lO:()=>k,vY:()=>_,oz:()=>w,s1:()=>y});var a=n(67294),r=n(16550),o=n(18790),i=n(80143),s=n(60373),c=n(74477),l=n(1116);function d(e){return Array.from(new Set(e))}var u=n(48596);const p=!!i._r;function f(e){const t=(0,c.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function b(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=b(t);if(e)return e}}}function m(){const{pathname:e}=(0,r.TH)(),t=(0,l.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,u.Mg)(e,t);function h(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||((e,t)=>e.some((e=>h(e,t))))(e.items,t))}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:a=!1}=e;const r=[];return function e(t){for(const o of t)if("category"===o.type&&((0,u.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,u.Mg)(o.href,n)){return a&&"category"!==o.type||r.unshift(o),!0}return!1}(t),r}function y(){const e=(0,l.V)(),{pathname:t}=(0,r.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),r=(0,i.yW)(e);return(0,a.useMemo)((()=>d([t,n,r].filter(Boolean))),[t,n,r])}function w(e,t){const n=k(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),a=t.find((t=>t[0]===e));if(!a)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return a[1]}),[e,n])}function _(e,t){const n=k(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),a=t.find((t=>t.id===e));if(!a){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: 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- ${d(t.map((e=>e.id))).join("\n- ")}`)}return a}),[e,n])}function S(e){let{route:t,versionMetadata:n}=e;const a=(0,r.TH)(),i=t.routes,s=i.find((e=>(0,r.LX)(a.pathname,e)));if(!s)return null;const c=s.sidebar,l=c?n.docsSidebars[c]:void 0;return{docElement:(0,o.H)(i),sidebarName:c,sidebarItems:l}}function x(e){return e.filter((e=>"category"!==e.type||!!b(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>d,VC:()=>f});var a=n(67294),r=n(86010),o=n(35742),i=n(30226);function s(){const e=a.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var c=n(44996),l=n(52263);function d(e){let{title:t,description:n,keywords:r,image:i,children:s}=e;const d=function(e){const{siteConfig:t}=(0,l.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}(t),{withBaseUrl:u}=(0,c.C)(),p=i?u(i,{absolute:!0}):void 0;return a.createElement(o.Z,null,t&&a.createElement("title",null,d),t&&a.createElement("meta",{property:"og:title",content:d}),n&&a.createElement("meta",{name:"description",content:n}),n&&a.createElement("meta",{property:"og:description",content:n}),r&&a.createElement("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&a.createElement("meta",{property:"og:image",content:p}),p&&a.createElement("meta",{name:"twitter:image",content:p}),s)}const u=a.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=a.useContext(u),s=(0,r.Z)(i,t);return a.createElement(u.Provider,{value:s},a.createElement(o.Z,null,a.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return a.createElement(p,{className:(0,r.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>l,Ql:()=>c,i6:()=>s,zX:()=>o});var a=n(67294);const r=n(10412).Z.canUseDOM?a.useLayoutEffect:a.useEffect;function o(e){const t=(0,a.useRef)(e);return r((()=>{t.current=e}),[e]),(0,a.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,a.useRef)();return r((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,a.useMemo)((()=>e),t.flat())}function l(e){return t=>{let{children:n}=t;return a.createElement(a.Fragment,null,e.reduceRight(((e,t)=>a.createElement(t,null,e)),n))}}},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var a=n(67294),r=n(723),o=n(52263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,a.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function a(e){return e.path===t&&!0===e.exact}function r(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(a)||e(t.filter(r).flatMap((e=>e.routes??[])))}(n)}({routes:r.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>c,RF:()=>u});var a=n(67294),r=n(10412),o=n(72389),i=n(902);const s=a.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,a.useRef)(!0);return(0,a.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return a.createElement(s.Provider,{value:n},t)}function l(){const e=(0,a.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>r.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function u(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=l(),r=(0,a.useRef)(d()),o=(0,i.zX)(e);(0,a.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,r.current),r.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,a.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function a(){const r=document.documentElement.scrollTop;(n&&r>e||!n&&r<e)&&(t=requestAnimationFrame(a),window.scrollTo(0,Math.floor(.85*(r-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>a,os:()=>r});n(52263);const a="default";function r(e,t){return`docs-${e}-${t}`}},50012:(e,t,n)=>{"use strict";n.d(t,{WA:()=>c});n(67294),n(61688);const a="localStorage";function r(e){let{key:t,oldValue:n,newValue:a,storage:r}=e;if(n===a)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,a,window.location.href,r),window.dispatchEvent(o)}function o(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,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const a=n.getItem(e);n.setItem(e,t),r({key:e,oldValue:a,newValue:t,storage:n})}catch(a){console.error(`Docusaurus storage error, can't set ${e}=${t}`,a)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),r({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const a=a=>{a.storageArea===n&&a.key===e&&t(a)};return window.addEventListener("storage",a),()=>window.removeEventListener("storage",a)}catch(a){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,a),()=>{}}}}}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var a=n(52263),r=n(16550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,a.Z)(),{pathname:i}=(0,r.TH)(),s=o===n?e:e.replace(`/${o}/`,"/"),c=i.replace(e,"");return{createUrl:function(e){let{locale:a,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===n?`${s}`:`${s}${e}/`}(a)}${c}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var a=n(67294),r=n(16550),o=n(902);function i(e){const t=(0,r.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,a.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>r});var a=n(52263);function r(){return(0,a.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:a}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[r]=e.split(/[#?]/),o="/"===r||r===a?r:(i=r,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(r,o)}},18780:function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var r=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return a(r).default}})},11231:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var a=n(87462),r=n(67294),o=n(39960),i=n(44996),s=n(52263),c=n(86668),l=n(50941);function d(e){let{logo:t,alt:n,imageClassName:a}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=r.createElement(l.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return a?r.createElement("div",{className:a},s):s}function u(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:i}}=(0,c.L)(),{imageClassName:l,titleClassName:u,...p}=e,f=n?"":t,b=i?.alt??f;return r.createElement(o.Z,(0,a.Z)({},p,i?.target&&{target:i.target}),i&&r.createElement(d,{logo:i,alt:b,imageClassName:l}),null!=n&&r.createElement("b",{className:u},n))}},86010:(e,t,n)=>{"use strict";function a(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(r&&(r+=" "),r+=n);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}n.d(t,{Z:()=>r});const r=function(){for(var e,t,n=0,r="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(r&&(r+=" "),r+=t);return r}},99318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>k,q_:()=>C,ob:()=>f,PP:()=>A,Ep:()=>p});var a=n(87462);function r(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,a=n+1,r=e.length;a<r;n+=1,a+=1)e[n]=e[a];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,a=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&r(e),c=t&&r(t),l=s||c;if(e&&r(e)?i=a:a.length&&(i.pop(),i=i.concat(a)),!i.length)return"/";if(i.length){var d=i[i.length-1];n="."===d||".."===d||""===d}else n=!1;for(var u=0,p=i.length;p>=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),u++):u&&(o(i,p),u--)}if(!l)for(;u--;u)i.unshift("..");!l||""===i[0]||i[0]&&r(i[0])||i.unshift("");var b=i.join("/");return n&&"/"!==b.substr(-1)&&(b+="/"),b};var s=n(38776);function c(e){return"/"===e.charAt(0)?e:"/"+e}function l(e){return"/"===e.charAt(0)?e.substr(1):e}function d(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 u(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,a=e.hash,r=t||"/";return n&&"?"!==n&&(r+="?"===n.charAt(0)?n:"?"+n),a&&"#"!==a&&(r+="#"===a.charAt(0)?a:"#"+a),r}function f(e,t,n,r){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",a="",r=t.indexOf("#");-1!==r&&(a=t.substr(r),t=t.substr(0,r));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===a?"":a}}(e),o.state=t):(void 0===(o=(0,a.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),r?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,r.pathname)):o.pathname=r.pathname:o.pathname||(o.pathname="/"),o}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,a,r){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof a?a(o,r):r(!0):r(!1!==o)}else r(!0)},appendListener:function(e){var n=!0;function a(){n&&e.apply(void 0,arguments)}return t.push(a),function(){n=!1,t=t.filter((function(e){return e!==a}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];t.forEach((function(e){return e.apply(void 0,n)}))}}}var m=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var h="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function k(e){void 0===e&&(e={}),m||(0,s.Z)(!1);var t,n=window.history,r=(-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,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,l=i.forceRefresh,k=void 0!==l&&l,w=i.getUserConfirmation,_=void 0===w?g:w,S=i.keyLength,x=void 0===S?6:S,E=e.basename?u(c(e.basename)):"";function C(e){var t=e||{},n=t.key,a=t.state,r=window.location,o=r.pathname+r.search+r.hash;return E&&(o=d(o,E)),f(o,a,n)}function T(){return Math.random().toString(36).substr(2,x)}var A=b();function L(e){(0,a.Z)($,e),$.length=n.length,A.notifyListeners($.location,$.action)}function N(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||P(C(e.state))}function I(){P(C(y()))}var O=!1;function P(e){if(O)O=!1,L();else{A.confirmTransitionTo(e,"POP",_,(function(t){t?L({action:"POP",location:e}):function(e){var t=$.location,n=D.indexOf(t.key);-1===n&&(n=0);var a=D.indexOf(e.key);-1===a&&(a=0);var r=n-a;r&&(O=!0,F(r))}(e)}))}}var R=C(y()),D=[R.key];function M(e){return E+p(e)}function F(e){n.go(e)}var B=0;function j(e){1===(B+=e)&&1===e?(window.addEventListener(h,N),o&&window.addEventListener(v,I)):0===B&&(window.removeEventListener(h,N),o&&window.removeEventListener(v,I))}var z=!1;var $={length:n.length,action:"POP",location:R,createHref:M,push:function(e,t){var a="PUSH",o=f(e,t,T(),$.location);A.confirmTransitionTo(o,a,_,(function(e){if(e){var t=M(o),i=o.key,s=o.state;if(r)if(n.pushState({key:i,state:s},null,t),k)window.location.href=t;else{var c=D.indexOf($.location.key),l=D.slice(0,c+1);l.push(o.key),D=l,L({action:a,location:o})}else window.location.href=t}}))},replace:function(e,t){var a="REPLACE",o=f(e,t,T(),$.location);A.confirmTransitionTo(o,a,_,(function(e){if(e){var t=M(o),i=o.key,s=o.state;if(r)if(n.replaceState({key:i,state:s},null,t),k)window.location.replace(t);else{var c=D.indexOf($.location.key);-1!==c&&(D[c]=o.key),L({action:a,location:o})}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 z||(j(1),z=!0),function(){return z&&(z=!1,j(-1)),t()}},listen:function(e){var t=A.appendListener(e);return j(1),function(){j(-1),t()}}};return $}var w="hashchange",_={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+l(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:l,decodePath:c},slash:{encodePath:c,decodePath:c}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function x(){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={}),m||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),r=n.getUserConfirmation,o=void 0===r?g:r,i=n.hashType,l=void 0===i?"slash":i,h=e.basename?u(c(e.basename)):"",v=_[l],y=v.encodePath,k=v.decodePath;function C(){var e=k(x());return h&&(e=d(e,h)),f(e)}var T=b();function A(e){(0,a.Z)(z,e),z.length=t.length,T.notifyListeners(z.location,z.action)}var L=!1,N=null;function I(){var e,t,n=x(),a=y(n);if(n!==a)E(a);else{var r=C(),i=z.location;if(!L&&(t=r,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(N===p(r))return;N=null,function(e){if(L)L=!1,A();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?A({action:t,location:e}):function(e){var t=z.location,n=D.lastIndexOf(p(t));-1===n&&(n=0);var a=D.lastIndexOf(p(e));-1===a&&(a=0);var r=n-a;r&&(L=!0,M(r))}(e)}))}}(r)}}var O=x(),P=y(O);O!==P&&E(P);var R=C(),D=[p(R)];function M(e){t.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?window.addEventListener(w,I):0===F&&window.removeEventListener(w,I)}var j=!1;var z={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(h+p(e))},push:function(e,t){var n="PUSH",a=f(e,void 0,void 0,z.location);T.confirmTransitionTo(a,n,o,(function(e){if(e){var t=p(a),r=y(h+t);if(x()!==r){N=t,function(e){window.location.hash=e}(r);var o=D.lastIndexOf(p(z.location)),i=D.slice(0,o+1);i.push(t),D=i,A({action:n,location:a})}else A()}}))},replace:function(e,t){var n="REPLACE",a=f(e,void 0,void 0,z.location);T.confirmTransitionTo(a,n,o,(function(e){if(e){var t=p(a),r=y(h+t);x()!==r&&(N=t,E(r));var o=D.indexOf(p(z.location));-1!==o&&(D[o]=t),A({action:n,location:a})}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return j||(B(1),j=!0),function(){return j&&(j=!1,B(-1)),t()}},listen:function(e){var t=T.appendListener(e);return B(1),function(){B(-1),t()}}};return z}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,r=t.initialEntries,o=void 0===r?["/"]:r,i=t.initialIndex,s=void 0===i?0:i,c=t.keyLength,l=void 0===c?6:c,d=b();function u(e){(0,a.Z)(k,e),k.length=k.entries.length,d.notifyListeners(k.location,k.action)}function m(){return Math.random().toString(36).substr(2,l)}var g=T(s,0,o.length-1),h=o.map((function(e){return f(e,void 0,"string"==typeof e?m():e.key||m())})),v=p;function y(e){var t=T(k.index+e,0,k.entries.length-1),a=k.entries[t];d.confirmTransitionTo(a,"POP",n,(function(e){e?u({action:"POP",location:a,index:t}):u()}))}var k={length:h.length,action:"POP",location:h[g],index:g,entries:h,createHref:v,push:function(e,t){var a="PUSH",r=f(e,t,m(),k.location);d.confirmTransitionTo(r,a,n,(function(e){if(e){var t=k.index+1,n=k.entries.slice(0);n.length>t?n.splice(t,n.length-t,r):n.push(r),u({action:a,location:r,index:t,entries:n})}}))},replace:function(e,t){var a="REPLACE",r=f(e,t,m(),k.location);d.confirmTransitionTo(r,a,n,(function(e){e&&(k.entries[k.index]=r,u({action:a,location:r}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=k.index+e;return t>=0&&t<k.entries.length},block:function(e){return void 0===e&&(e=!1),d.setPrompt(e)},listen:function(e){return d.appendListener(e)}};return k}},8679:(e,t,n)=>{"use strict";var a=n(59864),r={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return a.isMemo(e)?i:s[e.$$typeof]||r}s[a.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[a.Memo]=i;var l=Object.defineProperty,d=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,b=Object.prototype;e.exports=function e(t,n,a){if("string"!=typeof n){if(b){var r=f(n);r&&r!==b&&e(t,r,a)}var i=d(n);u&&(i=i.concat(u(n)));for(var s=c(t),m=c(n),g=0;g<i.length;++g){var h=i[g];if(!(o[h]||a&&a[h]||m&&m[h]||s&&s[h])){var v=p(n,h);try{l(t,h,v)}catch(y){}}}}return t}},41143:e=>{"use strict";e.exports=function(e,t,n,a,r,o,i,s){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,a,r,o,i,s],d=0;(c=new Error(t.replace(/%s/g,(function(){return l[d++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},32497:(e,t,n)=>{"use strict";n.r(t)},52295:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var a,r;a=function(){var e,t,n={version:"0.2.0"},a=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 r(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var r;return(r="translate3d"===a.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===a.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,r}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(a[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=r(e,a.minimum,1),n.status=1===e?null:e;var o=n.render(!t),l=o.querySelector(a.barSelector),d=a.speed,u=a.easing;return o.offsetWidth,s((function(t){""===a.positionUsing&&(a.positionUsing=n.getPositioningCSS()),c(l,i(e,d,u)),1===e?(c(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){c(o,{transition:"all "+d+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),d)}),d)):setTimeout(t,d)})),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())}),a.trickleSpeed)};return a.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)*r(Math.random()*t,.1,.95)),t=r(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*a.trickleRate)},e=0,t=0,n.promise=function(a){return a&&"resolved"!==a.state()?(0===t&&n.start(),e++,t++,a.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");d(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=a.template;var r,i=t.querySelector(a.barSelector),s=e?"-100":o(n.status||0),l=document.querySelector(a.parent);return c(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),a.showSpinner||(r=t.querySelector(a.spinnerSelector))&&f(r),l!=document.body&&d(l,"nprogress-custom-parent"),l.appendChild(t),t},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(a.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()}}(),c=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 a(t){var n=document.body.style;if(t in n)return t;for(var a,r=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);r--;)if((a=e[r]+o)in n)return a;return t}function r(e){return e=n(e),t[e]||(t[e]=a(e))}function o(e,t,n){t=r(t),e.style[t]=n}return function(e,t){var n,a,r=arguments;if(2==r.length)for(n in t)void 0!==(a=t[n])&&t.hasOwnProperty(n)&&o(e,n,a);else o(e,r[1],r[2])}}();function l(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function d(e,t){var n=p(e),a=n+t;l(n,t)||(e.className=a.substring(1))}function u(e,t){var n,a=p(e);l(e,t)&&(n=a.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===(r="function"==typeof a?a.call(t,n,t,e):a)||(e.exports=r)},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;function r(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach((function(e){a[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},a)).join("")}catch(r){return!1}}()?Object.assign:function(e,o){for(var i,s,c=r(e),l=1;l<arguments.length;l++){for(var d in i=Object(arguments[l]))n.call(i,d)&&(c[d]=i[d]);if(t){s=t(i);for(var u=0;u<s.length;u++)a.call(i,s[u])&&(c[s[u]]=i[s[u]])}}return c}},14779:(e,t,n)=>{var a=n(5826);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var r=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,a=[],o=0,i=0,s="",d=t&&t.delimiter||"/";null!=(n=r.exec(e));){var u=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+u.length,p)s+=p[1];else{var b=e[i],m=n[2],g=n[3],h=n[4],v=n[5],y=n[6],k=n[7];s&&(a.push(s),s="");var w=null!=m&&null!=b&&b!==m,_="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||d,E=h||v;a.push({name:g||o++,prefix:m||"",delimiter:x,optional:S,repeat:_,partial:w,asterisk:!!k,pattern:E?l(E):k?".*":"[^"+c(x)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&a.push(s),a}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),r=0;r<e.length;r++)"object"==typeof e[r]&&(n[r]=new RegExp("^(?:"+e[r].pattern+")$",u(t)));return function(t,r){for(var o="",s=t||{},c=(r||{}).pretty?i:encodeURIComponent,l=0;l<e.length;l++){var d=e[l];if("string"!=typeof d){var u,p=s[d.name];if(null==p){if(d.optional){d.partial&&(o+=d.prefix);continue}throw new TypeError('Expected "'+d.name+'" to be defined')}if(a(p)){if(!d.repeat)throw new TypeError('Expected "'+d.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(d.optional)continue;throw new TypeError('Expected "'+d.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(u=c(p[f]),!n[l].test(u))throw new TypeError('Expected all "'+d.name+'" to match "'+d.pattern+'", but received `'+JSON.stringify(u)+"`");o+=(0===f?d.prefix:d.delimiter)+u}}else{if(u=d.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):c(p),!n[l].test(u))throw new TypeError('Expected "'+d.name+'" to match "'+d.pattern+'", but received "'+u+'"');o+=d.prefix+u}}else o+=d}return o}}function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function l(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function d(e,t){return e.keys=t,e}function u(e){return e&&e.sensitive?"":"i"}function p(e,t,n){a(t)||(n=t||n,t=[]);for(var r=(n=n||{}).strict,o=!1!==n.end,i="",s=0;s<e.length;s++){var l=e[s];if("string"==typeof l)i+=c(l);else{var p=c(l.prefix),f="(?:"+l.pattern+")";t.push(l),l.repeat&&(f+="(?:"+p+f+")*"),i+=f=l.optional?l.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var b=c(n.delimiter||"/"),m=i.slice(-b.length)===b;return r||(i=(m?i.slice(0,-b.length):i)+"(?:"+b+"(?=$))?"),i+=o?"$":r&&m?"":"(?="+b+"|$)",d(new RegExp("^"+i,u(n)),t)}function f(e,t,n){return a(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var a=0;a<n.length;a++)t.push({name:a,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return d(e,t)}(e,t):a(e)?function(e,t,n){for(var a=[],r=0;r<e.length;r++)a.push(f(e[r],t,n).source);return d(new RegExp("(?:"+a.join("|")+")",u(n)),t)}(e,t,n):function(e,t,n){return p(o(e,n),t,n)}(e,t,n)}},87410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},a={util:{encode:function e(t){return t instanceof r?new r(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 r,o;switch(n=n||{},a.util.type(t)){case"Object":if(o=a.util.objId(t),n[o])return n[o];for(var i in r={},n[o]=r,t)t.hasOwnProperty(i)&&(r[i]=e(t[i],n));return r;case"Array":return o=a.util.objId(t),n[o]?n[o]:(r=[],n[o]=r,t.forEach((function(t,a){r[a]=e(t,n)})),r);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 a="no-"+t;e;){var r=e.classList;if(r.contains(t))return!0;if(r.contains(a))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=a.util.clone(a.languages[e]);for(var r in t)n[r]=t[r];return n},insertBefore:function(e,t,n,r){var o=(r=r||a.languages)[e],i={};for(var s in o)if(o.hasOwnProperty(s)){if(s==t)for(var c in n)n.hasOwnProperty(c)&&(i[c]=n[c]);n.hasOwnProperty(s)||(i[s]=o[s])}var l=r[e];return r[e]=i,a.languages.DFS(a.languages,(function(t,n){n===l&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,r,o){o=o||{};var i=a.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],r||s);var c=t[s],l=a.util.type(c);"Object"!==l||o[i(c)]?"Array"!==l||o[i(c)]||(o[i(c)]=!0,e(c,n,s,o)):(o[i(c)]=!0,e(c,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};return a.hooks.run("before-tokenize",o),o.tokens=a.tokenize(o.code,o.grammar),a.hooks.run("after-tokenize",o),r.stringify(a.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var a in n)t[a]=n[a];delete t.rest}var r=new s;return c(r,r.head,e),i(e,r,t,r.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(r)},hooks:{all:{},add:function(e,t){var n=a.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=a.hooks.all[e];if(n&&n.length)for(var r,o=0;r=n[o++];)r(t)}},Token:r};function r(e,t,n,a){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length}function o(e,t,n,a){e.lastIndex=t;var r=e.exec(n);if(r&&a&&r[1]){var o=r[1].length;r.index+=o,r[0]=r[0].slice(o)}return r}function i(e,t,n,s,d,u){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var b=0;b<f.length;++b){if(u&&u.cause==p+","+b)return;var m=f[b],g=m.inside,h=!!m.lookbehind,v=!!m.greedy,y=m.alias;if(v&&!m.pattern.global){var k=m.pattern.toString().match(/[imsuy]*$/)[0];m.pattern=RegExp(m.pattern.source,k+"g")}for(var w=m.pattern||m,_=s.next,S=d;_!==t.tail&&!(u&&S>=u.reach);S+=_.value.length,_=_.next){var x=_.value;if(t.length>e.length)return;if(!(x instanceof r)){var E,C=1;if(v){if(!(E=o(w,S,e,h))||E.index>=e.length)break;var T=E.index,A=E.index+E[0].length,L=S;for(L+=_.value.length;T>=L;)L+=(_=_.next).value.length;if(S=L-=_.value.length,_.value instanceof r)continue;for(var N=_;N!==t.tail&&(L<A||"string"==typeof N.value);N=N.next)C++,L+=N.value.length;C--,x=e.slice(S,L),E.index-=S}else if(!(E=o(w,0,x,h)))continue;T=E.index;var I=E[0],O=x.slice(0,T),P=x.slice(T+I.length),R=S+x.length;u&&R>u.reach&&(u.reach=R);var D=_.prev;if(O&&(D=c(t,D,O),S+=O.length),l(t,D,C),_=c(t,D,new r(p,g?a.tokenize(I,g):I,y,I)),P&&c(t,_,P),C>1){var M={cause:p+","+b,reach:R};i(e,t,n,_.prev,S,M),u&&M.reach>u.reach&&(u.reach=M.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 c(e,t,n){var a=t.next,r={value:n,prev:t,next:a};return t.next=r,a.prev=r,e.length++,r}function l(e,t,n){for(var a=t.next,r=0;r<n&&a!==e.tail;r++)a=a.next;t.next=a,a.prev=t,e.length-=r}return r.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var r="";return t.forEach((function(t){r+=e(t,n)})),r}var o={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(o.classes,i):o.classes.push(i)),a.hooks.run("wrap",o);var s="";for(var c in o.attributes)s+=" "+c+'="'+(o.attributes[c]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+s+">"+o.content+"</"+o.tag+">"},a}(),r=a;a.default=a,r.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},r.languages.markup.tag.inside["attr-value"].inside.entity=r.languages.markup.entity,r.languages.markup.doctype.inside["internal-subset"].inside=r.languages.markup,r.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(r.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:r.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var a={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:r.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:a},r.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(r.languages.markup.tag,"addAttribute",{value:function(e,t){r.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:r.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),r.languages.html=r.languages.markup,r.languages.mathml=r.languages.markup,r.languages.svg=r.languages.markup,r.languages.xml=r.languages.extend("markup",{}),r.languages.ssml=r.languages.xml,r.languages.atom=r.languages.xml,r.languages.rss=r.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var r=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=a.variable[1].inside,i=0;i<r.length;i++)o[r[i]]=e.languages.bash[r[i]];e.languages.shell=e.languages.bash}(r),r.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:/[{}[\];(),.:]/},r.languages.c=r.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|[?:~]|[-+*/%&|^!=<>]=?/}),r.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),r.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},r.languages.c.string],char:r.languages.c.char,comment:r.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:r.languages.c}}}}),r.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 r.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(r),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(r),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var a={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},r={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:a,number:r,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:a,number:r})}(r),r.languages.javascript=r.languages.extend("clike",{"class-name":[r.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}|\?\?=?|\?\.?|[~:]/}),r.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,r.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:r.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:r.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:r.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:r.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:r.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),r.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:r.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"}}),r.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),r.languages.markup&&(r.languages.markup.tag.addInlined("script","javascript"),r.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")),r.languages.js=r.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(r),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,a="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",r=/(?:[^\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})),o=/"(?:[^"\\\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 a})).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 a}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return a})).replace(/<<key>>/g,(function(){return"(?:"+r+"|"+o+")"}))),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(o),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}(r),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 a=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,r=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return a})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+r+o+"(?:"+r+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+r+o+")(?:"+r+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(a),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+r+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+r+"$"),inside:{"table-header":{pattern:RegExp(a),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,a=t.length;n<a;n++){var r=t[n];if("code"===r.type){var o=r.content[1],i=r.content[3];if(o&&i&&"code-language"===o.type&&"code-block"===i.type&&"string"==typeof o.content){var s=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),c="language-"+(s=(/[a-z][\w-]*/i.exec(s)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,c]:i.alias.push(c):i.alias=[c]}}else e(r.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",a=0,r=t.classes.length;a<r;a++){var o=t.classes[a],l=/language-(.+)/.exec(o);if(l){n=l[1];break}}var d,u=e.languages[n];if(u)t.content=e.highlight((d=t.content,d.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),c(n);var a=s[t];return a||e}))),u,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),s={amp:"&",lt:"<",gt:">",quot:'"'},c=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(r),r.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:r.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+/},r.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 a=t[n++];if("keyword"===a.type&&"mutation"===a.content){var r=[];if(u(["definition-mutation","punctuation"])&&"("===d(1).content){n+=2;var o=p(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=d(0);"variable"===i.type&&(f(i,"variable-input"),r.push(i.content))}n=o+1}if(u(["punctuation","property-query"])&&"{"===d(0).content&&(n++,f(d(0),"property-mutation"),r.length>0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var c=n;c<s;c++){var l=t[c];"variable"===l.type&&r.indexOf(l.content)>=0&&f(l,"variable-input")}}}}function d(e){return t[n+e]}function u(e,t){t=t||0;for(var n=0;n<e.length;n++){var a=d(n+t);if(!a||a.type!==e[n])return!1}return!0}function p(e,a){for(var r=1,o=n;o<t.length;o++){var i=t[o],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))r++;else if(a.test(s)&&0===--r)return o}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),r.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,a=t.inside.interpolation,r=a.inside["interpolation-punctuation"],o=a.pattern.source;function i(t,a){if(e.languages[t])return{pattern:RegExp("((?:"+a+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function c(t,n,a){var r={code:t,grammar:n,language:a};return e.hooks.run("before-tokenize",r),r.tokens=e.tokenize(r.code,r.grammar),e.hooks.run("after-tokenize",r),r.tokens}function l(t){var n={};n["interpolation-punctuation"]=r;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,c(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,a.alias,t)}function d(t,n,a){var r=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,d={},u=c(r.map((function(e){if("string"==typeof e)return e;for(var n,r=e.content;-1!==t.indexOf(n=s(i++,a)););return d[n]=r,n})).join(""),n,a),p=Object.keys(d);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=p.length)return;var a=t[n];if("string"==typeof a||"string"==typeof a.content){var r=p[i],o="string"==typeof a?a:a.content,s=o.indexOf(r);if(-1!==s){++i;var c=o.substring(0,s),u=l(d[r]),f=o.substring(s+r.length),b=[];if(c&&b.push(c),b.push(u),f){var m=[f];e(m),b.push.apply(b,m)}"string"==typeof a?(t.splice.apply(t,[n,1].concat(b)),n+=b.length-1):a.content=b}}else{var g=a.content;Array.isArray(g)?e(g):e([g])}}}(u),new e.Token(a,u,"language-"+a,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 u={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in u&&function t(n){for(var a=0,r=n.length;a<r;a++){var o=n[a];if("string"!=typeof o){var i=o.content;if(Array.isArray(i))if("template-string"===o.type){var s=i[1];if(3===i.length&&"string"!=typeof s&&"embedded-code"===s.type){var c=p(s),l=s.alias,u=Array.isArray(l)?l[0]:l,f=e.languages[u];if(!f)continue;i[1]=d(c,f,u)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(r),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}(r),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"],a=0;a<n.length;a++){var r=n[a],o=e.languages.javascript[r];"RegExp"===e.util.type(o)&&(o=e.languages.javascript[r]={pattern:o});var i=o.inside||{};o.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(r),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,a=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,r=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return a})).replace(/<SPREAD>/g,(function(){return r})),RegExp(e,t)}r=o(r).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\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:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],a=0;a<t.length;a++){var r=t[a],o=!1;if("string"!=typeof r&&("tag"===r.type&&r.content[0]&&"tag"===r.content[0].type?"</"===r.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(r.content[0].content[1])&&n.pop():"/>"===r.content[r.content.length-1].content||n.push({tagName:i(r.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===r.type&&"{"===r.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===r.type&&"}"===r.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof r)&&n.length>0&&0===n[n.length-1].openedBraces){var c=i(r);a<t.length-1&&("string"==typeof t[a+1]||"plain-text"===t[a+1].type)&&(c+=i(t[a+1]),t.splice(a+1,1)),a>0&&("string"==typeof t[a-1]||"plain-text"===t[a-1].type)&&(c=i(t[a-1])+c,t.splice(a-1,1),a--),t[a]=new e.Token("plain-text",c,null,c)}r.content&&"string"!=typeof r.content&&s(r.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(r),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var a=t[n],r=[];/^\w+$/.test(n)||r.push(/\w+/.exec(n)[0]),"diff"===n&&r.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+a+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:r,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(r),r.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},r.languages.go=r.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/}),r.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete r.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,r,o){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(r,(function(e){if("function"==typeof o&&!o(e))return e;for(var r,s=i.length;-1!==n.code.indexOf(r=t(a,s));)++s;return i[s]=e,r})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var r=0,o=Object.keys(n.tokenStack);!function i(s){for(var c=0;c<s.length&&!(r>=o.length);c++){var l=s[c];if("string"==typeof l||l.content&&"string"==typeof l.content){var d=o[r],u=n.tokenStack[d],p="string"==typeof l?l:l.content,f=t(a,d),b=p.indexOf(f);if(b>-1){++r;var m=p.substring(0,b),g=new e.Token(a,e.tokenize(u,n.grammar),"language-"+a,u),h=p.substring(b+f.length),v=[];m&&v.push.apply(v,i([m])),v.push(g),h&&v.push.apply(v,i([h])),"string"==typeof l?s.splice.apply(s,[c,1].concat(v)):l.content=v}}else l.content&&i(l.content)}return s}(n.tokens)}}}})}(r),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(r),r.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"}},r.languages.webmanifest=r.languages.json,r.languages.less=r.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),r.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),r.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},r.languages.objectivec=r.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 r.languages.objectivec["class-name"],r.languages.objc=r.languages.objectivec,r.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},r.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:/[{}[\];(),.:]/},r.languages.python["string-interpolation"].inside.interpolation.inside.rest=r.languages.python,r.languages.py=r.languages.python,r.languages.reason=r.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/}),r.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 r.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(r),r.languages.scss=r.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),r.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),r.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),r.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),r.languages.scss.atrule.inside.rest=r.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},a={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};a.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:a}},a.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:a}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:a}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:a}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:a}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:a.interpolation}},rest:a}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:a.interpolation,comment:a.comment,punctuation:/[{},]/}},func:a.func,string:a.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:a.interpolation,punctuation:/[{}()\[\];:.]/}}(r),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(r),r.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=r},70767:()=>{!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}(Prism)},30893:()=>{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},25583:(e,t,n)=>{var a={"./prism-rust":70767,"./prism-solidity":30893};function r(e){var t=o(e);return n(t)}function o(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}r.keys=function(){return Object.keys(a)},r.resolve=o,e.exports=r,r.id=25583},92703:(e,t,n)=>{"use strict";var a=n(50414);function r(){}function o(){}o.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,o,i){if(i!==a){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:o,resetWarningCache:r};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var a=n(67294),r=n(27418),o=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!a)throw Error(i(227));var s=new Set,c={};function l(e,t){d(e,t),d(e+"Capture",t)}function d(e,t){for(c[e]=t,e=0;e<t.length;e++)s.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f=Object.prototype.hasOwnProperty,b={},m={};function g(e,t,n,a,r,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=a,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var h={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){h[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];h[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){h[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){h[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){h[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){h[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){h[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){h[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){h[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function k(e,t,n,a){var r=h.hasOwnProperty(t)?h[t]:null;(null!==r?0===r.type:!a&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,a){if(null==t||function(e,t,n,a){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!a&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,a))return!0;if(a)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,r,a)&&(n=null),a||null===r?function(e){return!!f.call(m,e)||!f.call(b,e)&&(p.test(e)?m[e]=!0:(b[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):r.mustUseProperty?e[r.propertyName]=null===n?3!==r.type&&"":n:(t=r.attributeName,a=r.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(r=r.type)||4===r&&!0===n?"":""+n,a?e.setAttributeNS(a,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(v,y);h[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,y);h[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,y);h[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){h[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),h.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){h[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_=60103,S=60106,x=60107,E=60108,C=60114,T=60109,A=60110,L=60112,N=60113,I=60120,O=60115,P=60116,R=60121,D=60128,M=60129,F=60130,B=60131;if("function"==typeof Symbol&&Symbol.for){var j=Symbol.for;_=j("react.element"),S=j("react.portal"),x=j("react.fragment"),E=j("react.strict_mode"),C=j("react.profiler"),T=j("react.provider"),A=j("react.context"),L=j("react.forward_ref"),N=j("react.suspense"),I=j("react.suspense_list"),O=j("react.memo"),P=j("react.lazy"),R=j("react.block"),j("react.scope"),D=j("react.opaque.id"),M=j("react.debug_trace_mode"),F=j("react.offscreen"),B=j("react.legacy_hidden")}var z,$="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$&&e[$]||e["@@iterator"])?e:null}function Z(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var H=!1;function G(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var a=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){a=c}e.call(t.prototype)}else{try{throw Error()}catch(c){a=c}e()}}catch(c){if(c&&a&&"string"==typeof c.stack){for(var r=c.stack.split("\n"),o=a.stack.split("\n"),i=r.length-1,s=o.length-1;1<=i&&0<=s&&r[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(r[i]!==o[s]){if(1!==i||1!==s)do{if(i--,0>--s||r[i]!==o[s])return"\n"+r[i].replace(" at new "," at ")}while(1<=i&&0<=s);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Z(e):""}function V(e){switch(e.tag){case 5:return Z(e.type);case 16:return Z("Lazy");case 13:return Z("Suspense");case 19:return Z("SuspenseList");case 0:case 2:case 15:return e=G(e.type,!1);case 11:return e=G(e.type.render,!1);case 22:return e=G(e.type._render,!1);case 1:return e=G(e.type,!0);default:return""}}function W(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 x:return"Fragment";case S:return"Portal";case C:return"Profiler";case E:return"StrictMode";case N:return"Suspense";case I:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case A:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case L:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case O:return W(e.type);case R:return W(e._render);case P:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),a=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var r=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(e){a=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(e){a=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=Y(e)?e.checked?"true":"false":e.value),(e=a)!==n&&(t.setValue(e),!0)}function Q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return r({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,a=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:a,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&k(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),a=t.type;if(null!=n)"number"===a?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===a||"reset"===a)return void e.removeAttribute("value");t.hasOwnProperty("value")?re(e,t.type,n):t.hasOwnProperty("defaultValue")&&re(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function ae(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var a=t.type;if(!("submit"!==a&&"reset"!==a||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 re(e,t,n){"number"===t&&Q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function oe(e,t){return e=r({children:void 0},t),(t=function(e){var t="";return a.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,a){if(e=e.options,t){t={};for(var r=0;r<n.length;r++)t["$"+n[r]]=!0;for(n=0;n<e.length;n++)r=t.hasOwnProperty("$"+e[n].value),e[n].selected!==r&&(e[n].selected=r),r&&a&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,r=0;r<e.length;r++){if(e[r].value===n)return e[r].selected=!0,void(a&&(e[r].defaultSelected=!0));null!==t||e[r].disabled||(t=e[r])}null!==t&&(t.selected=!0)}}function se(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return r({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ce(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function le(e,t){var n=q(t.value),a=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=a&&(e.defaultValue=""+a)}function de(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var ue="http://www.w3.org/1999/xhtml",pe="http://www.w3.org/2000/svg";function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function be(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,ge,he=(ge=function(e,t){if(e.namespaceURI!==pe||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,a){MSApp.execUnsafeLocalFunction((function(){return ge(e,t)}))}:ge);function ve(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ye={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ke=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ye.hasOwnProperty(e)&&ye[e]?(""+t).trim():t+"px"}function _e(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var a=0===n.indexOf("--"),r=we(n,t[n],a);"float"===n&&(n="cssFloat"),a?e.setProperty(n,r):e[n]=r}}Object.keys(ye).forEach((function(e){ke.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ye[t]=ye[e]}))}));var Se=r({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xe(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function Ee(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ce(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Te=null,Ae=null,Le=null;function Ne(e){if(e=ar(e)){if("function"!=typeof Te)throw Error(i(280));var t=e.stateNode;t&&(t=or(t),Te(e.stateNode,e.type,t))}}function Ie(e){Ae?Le?Le.push(e):Le=[e]:Ae=e}function Oe(){if(Ae){var e=Ae,t=Le;if(Le=Ae=null,Ne(e),t)for(e=0;e<t.length;e++)Ne(t[e])}}function Pe(e,t){return e(t)}function Re(e,t,n,a,r){return e(t,n,a,r)}function De(){}var Me=Pe,Fe=!1,Be=!1;function je(){null===Ae&&null===Le||(De(),Oe())}function ze(e,t){var n=e.stateNode;if(null===n)return null;var a=or(n);if(null===a)return null;n=a[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":(a=!a.disabled)||(a=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!a;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var $e=!1;if(u)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){$e=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(ge){$e=!1}function Ze(e,t,n,a,r,o,i,s,c){var l=Array.prototype.slice.call(arguments,3);try{t.apply(n,l)}catch(d){this.onError(d)}}var He=!1,Ge=null,Ve=!1,We=null,qe={onError:function(e){He=!0,Ge=e}};function Ye(e,t,n,a,r,o,i,s,c){He=!1,Ge=null,Ze.apply(qe,arguments)}function Ke(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Xe(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(Ke(e)!==e)throw Error(i(188))}function Je(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ke(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,a=t;;){var r=n.return;if(null===r)break;var o=r.alternate;if(null===o){if(null!==(a=r.return)){n=a;continue}break}if(r.child===o.child){for(o=r.child;o;){if(o===n)return Qe(r),e;if(o===a)return Qe(r),t;o=o.sibling}throw Error(i(188))}if(n.return!==a.return)n=r,a=o;else{for(var s=!1,c=r.child;c;){if(c===n){s=!0,n=r,a=o;break}if(c===a){s=!0,a=r,n=o;break}c=c.sibling}if(!s){for(c=o.child;c;){if(c===n){s=!0,n=o,a=r;break}if(c===a){s=!0,a=o,n=r;break}c=c.sibling}if(!s)throw Error(i(189))}}if(n.alternate!==a)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var tt,nt,at,rt,ot=!1,it=[],st=null,ct=null,lt=null,dt=new Map,ut=new Map,pt=[],ft="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 bt(e,t,n,a,r){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:r,targetContainers:[a]}}function mt(e,t){switch(e){case"focusin":case"focusout":st=null;break;case"dragenter":case"dragleave":ct=null;break;case"mouseover":case"mouseout":lt=null;break;case"pointerover":case"pointerout":dt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ut.delete(t.pointerId)}}function gt(e,t,n,a,r,o){return null===e||e.nativeEvent!==o?(e=bt(t,n,a,r,o),null!==t&&(null!==(t=ar(t))&&nt(t)),e):(e.eventSystemFlags|=a,t=e.targetContainers,null!==r&&-1===t.indexOf(r)&&t.push(r),e)}function ht(e){var t=nr(e.target);if(null!==t){var n=Ke(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Xe(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){at(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function vt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=ar(n))&&nt(t),e.blockedOn=n,!1;t.shift()}return!0}function yt(e,t,n){vt(e)&&n.delete(t)}function kt(){for(ot=!1;0<it.length;){var e=it[0];if(null!==e.blockedOn){null!==(e=ar(e.blockedOn))&&tt(e);break}for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&it.shift()}null!==st&&vt(st)&&(st=null),null!==ct&&vt(ct)&&(ct=null),null!==lt&&vt(lt)&&(lt=null),dt.forEach(yt),ut.forEach(yt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,kt)))}function _t(e){function t(t){return wt(t,e)}if(0<it.length){wt(it[0],e);for(var n=1;n<it.length;n++){var a=it[n];a.blockedOn===e&&(a.blockedOn=null)}}for(null!==st&&wt(st,e),null!==ct&&wt(ct,e),null!==lt&&wt(lt,e),dt.forEach(t),ut.forEach(t),n=0;n<pt.length;n++)(a=pt[n]).blockedOn===e&&(a.blockedOn=null);for(;0<pt.length&&null===(n=pt[0]).blockedOn;)ht(n),null===n.blockedOn&&pt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},Et={},Ct={};function Tt(e){if(Et[e])return Et[e];if(!xt[e])return e;var t,n=xt[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ct)return Et[e]=n[t];return e}u&&(Ct=document.createElement("div").style,"AnimationEvent"in window||(delete xt.animationend.animation,delete xt.animationiteration.animation,delete xt.animationstart.animation),"TransitionEvent"in window||delete xt.transitionend.transition);var At=Tt("animationend"),Lt=Tt("animationiteration"),Nt=Tt("animationstart"),It=Tt("transitionend"),Ot=new Map,Pt=new Map,Rt=["abort","abort",At,"animationEnd",Lt,"animationIteration",Nt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function Dt(e,t){for(var n=0;n<e.length;n+=2){var a=e[n],r=e[n+1];r="on"+(r[0].toUpperCase()+r.slice(1)),Pt.set(a,t),Ot.set(a,r),l(r,[a])}}(0,o.unstable_now)();var Mt=8;function Ft(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Bt(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var a=0,r=0,o=e.expiredLanes,i=e.suspendedLanes,s=e.pingedLanes;if(0!==o)a=o,r=Mt=15;else if(0!==(o=134217727&n)){var c=o&~i;0!==c?(a=Ft(c),r=Mt):0!==(s&=o)&&(a=Ft(s),r=Mt)}else 0!==(o=n&~i)?(a=Ft(o),r=Mt):0!==s&&(a=Ft(s),r=Mt);if(0===a)return 0;if(a=n&((0>(a=31-Ht(a))?0:1<<a)<<1)-1,0!==t&&t!==a&&0==(t&i)){if(Ft(t),r<=Mt)return t;Mt=r}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=a;0<t;)r=1<<(n=31-Ht(t)),a|=e[n],t&=~r;return a}function jt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function zt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=$t(24&~t))?zt(10,t):e;case 10:return 0===(e=$t(192&~t))?zt(8,t):e;case 8:return 0===(e=$t(3584&~t))&&(0===(e=$t(4186112&~t))&&(e=512)),e;case 2:return 0===(t=$t(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function $t(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Zt(e,t,n){e.pendingLanes|=t;var a=t-1;e.suspendedLanes&=a,e.pingedLanes&=a,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Gt(e)/Vt|0)|0},Gt=Math.log,Vt=Math.LN2;var Wt=o.unstable_UserBlockingPriority,qt=o.unstable_runWithPriority,Yt=!0;function Kt(e,t,n,a){Fe||De();var r=Qt,o=Fe;Fe=!0;try{Re(r,e,t,n,a)}finally{(Fe=o)||je()}}function Xt(e,t,n,a){qt(Wt,Qt.bind(null,e,t,n,a))}function Qt(e,t,n,a){var r;if(Yt)if((r=0==(4&t))&&0<it.length&&-1<ft.indexOf(e))e=bt(null,e,t,n,a),it.push(e);else{var o=Jt(e,t,n,a);if(null===o)r&&mt(e,a);else{if(r){if(-1<ft.indexOf(e))return e=bt(o,e,t,n,a),void it.push(e);if(function(e,t,n,a,r){switch(t){case"focusin":return st=gt(st,e,t,n,a,r),!0;case"dragenter":return ct=gt(ct,e,t,n,a,r),!0;case"mouseover":return lt=gt(lt,e,t,n,a,r),!0;case"pointerover":var o=r.pointerId;return dt.set(o,gt(dt.get(o)||null,e,t,n,a,r)),!0;case"gotpointercapture":return o=r.pointerId,ut.set(o,gt(ut.get(o)||null,e,t,n,a,r)),!0}return!1}(o,e,t,n,a))return;mt(e,a)}Da(e,t,a,null,n)}}}function Jt(e,t,n,a){var r=Ce(a);if(null!==(r=nr(r))){var o=Ke(r);if(null===o)r=null;else{var i=o.tag;if(13===i){if(null!==(r=Xe(o)))return r;r=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;r=null}else o!==r&&(r=null)}}return Da(e,t,a,r,n),null}var en=null,tn=null,nn=null;function an(){if(nn)return nn;var e,t,n=tn,a=n.length,r="value"in en?en.value:en.textContent,o=r.length;for(e=0;e<a&&n[e]===r[e];e++);var i=a-e;for(t=1;t<=i&&n[a-t]===r[o-t];t++);return nn=r.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function sn(){return!1}function cn(e){function t(t,n,a,r,o){for(var i in this._reactName=t,this._targetInst=a,this.type=n,this.nativeEvent=r,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(r):r[i]);return this.isDefaultPrevented=(null!=r.defaultPrevented?r.defaultPrevented:!1===r.returnValue)?on:sn,this.isPropagationStopped=sn,this}return r(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var ln,dn,un,pn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=cn(pn),bn=r({},pn,{view:0,detail:0}),mn=cn(bn),gn=r({},bn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:An,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==un&&(un&&"mousemove"===e.type?(ln=e.screenX-un.screenX,dn=e.screenY-un.screenY):dn=ln=0,un=e),ln)},movementY:function(e){return"movementY"in e?e.movementY:dn}}),hn=cn(gn),vn=cn(r({},gn,{dataTransfer:0})),yn=cn(r({},bn,{relatedTarget:0})),kn=cn(r({},pn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=r({},pn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),_n=cn(wn),Sn=cn(r({},pn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},En={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"},Cn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Tn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Cn[e])&&!!t[e]}function An(){return Tn}var Ln=r({},bn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?En[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:An,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Nn=cn(Ln),In=cn(r({},gn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),On=cn(r({},bn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:An})),Pn=cn(r({},pn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Rn=r({},gn,{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}),Dn=cn(Rn),Mn=[9,13,27,32],Fn=u&&"CompositionEvent"in window,Bn=null;u&&"documentMode"in document&&(Bn=document.documentMode);var jn=u&&"TextEvent"in window&&!Bn,zn=u&&(!Fn||Bn&&8<Bn&&11>=Bn),$n=String.fromCharCode(32),Un=!1;function Zn(e,t){switch(e){case"keyup":return-1!==Mn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Gn=!1;var Vn={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 Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Vn[e.type]:"textarea"===t}function qn(e,t,n,a){Ie(a),0<(t=Fa(t,"onChange")).length&&(n=new fn("onChange","change",null,n,a),e.push({event:n,listeners:t}))}var Yn=null,Kn=null;function Xn(e){La(e,0)}function Qn(e){if(X(rr(e)))return e}function Jn(e,t){if("change"===e)return t}var ea=!1;if(u){var ta;if(u){var na="oninput"in document;if(!na){var aa=document.createElement("div");aa.setAttribute("oninput","return;"),na="function"==typeof aa.oninput}ta=na}else ta=!1;ea=ta&&(!document.documentMode||9<document.documentMode)}function ra(){Yn&&(Yn.detachEvent("onpropertychange",oa),Kn=Yn=null)}function oa(e){if("value"===e.propertyName&&Qn(Kn)){var t=[];if(qn(t,Kn,e,Ce(e)),e=Xn,Fe)e(t);else{Fe=!0;try{Pe(e,t)}finally{Fe=!1,je()}}}}function ia(e,t,n){"focusin"===e?(ra(),Kn=n,(Yn=t).attachEvent("onpropertychange",oa)):"focusout"===e&&ra()}function sa(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Qn(Kn)}function ca(e,t){if("click"===e)return Qn(t)}function la(e,t){if("input"===e||"change"===e)return Qn(t)}var da="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},ua=Object.prototype.hasOwnProperty;function pa(e,t){if(da(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(a=0;a<n.length;a++)if(!ua.call(t,n[a])||!da(e[n[a]],t[n[a]]))return!1;return!0}function fa(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ba(e,t){var n,a=fa(e);for(e=0;a;){if(3===a.nodeType){if(n=e+a.textContent.length,e<=t&&n>=t)return{node:a,offset:t-e};e=n}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=fa(a)}}function ma(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?ma(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function ga(){for(var e=window,t=Q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(a){n=!1}if(!n)break;t=Q((e=t.contentWindow).document)}return t}function ha(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var va=u&&"documentMode"in document&&11>=document.documentMode,ya=null,ka=null,wa=null,_a=!1;function Sa(e,t,n){var a=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;_a||null==ya||ya!==Q(a)||("selectionStart"in(a=ya)&&ha(a)?a={start:a.selectionStart,end:a.selectionEnd}:a={anchorNode:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset},wa&&pa(wa,a)||(wa=a,0<(a=Fa(ka,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:a}),t.target=ya)))}Dt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Dt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Dt(Rt,2);for(var xa="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Ea=0;Ea<xa.length;Ea++)Pt.set(xa[Ea],0);d("onMouseEnter",["mouseout","mouseover"]),d("onMouseLeave",["mouseout","mouseover"]),d("onPointerEnter",["pointerout","pointerover"]),d("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 Ca="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ta=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ca));function Aa(e,t,n){var a=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,a,r,o,s,c,l){if(Ye.apply(this,arguments),He){if(!He)throw Error(i(198));var d=Ge;He=!1,Ge=null,Ve||(Ve=!0,We=d)}}(a,t,void 0,e),e.currentTarget=null}function La(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var a=e[n],r=a.event;a=a.listeners;e:{var o=void 0;if(t)for(var i=a.length-1;0<=i;i--){var s=a[i],c=s.instance,l=s.currentTarget;if(s=s.listener,c!==o&&r.isPropagationStopped())break e;Aa(r,s,l),o=c}else for(i=0;i<a.length;i++){if(c=(s=a[i]).instance,l=s.currentTarget,s=s.listener,c!==o&&r.isPropagationStopped())break e;Aa(r,s,l),o=c}}}if(Ve)throw e=We,Ve=!1,We=null,e}function Na(e,t){var n=ir(t),a=e+"__bubble";n.has(a)||(Ra(t,e,2,!1),n.add(a))}var Ia="_reactListening"+Math.random().toString(36).slice(2);function Oa(e){e[Ia]||(e[Ia]=!0,s.forEach((function(t){Ta.has(t)||Pa(t,!1,e,null),Pa(t,!0,e,null)})))}function Pa(e,t,n,a){var r=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,o=n;if("selectionchange"===e&&9!==n.nodeType&&(o=n.ownerDocument),null!==a&&!t&&Ta.has(e)){if("scroll"!==e)return;r|=2,o=a}var i=ir(o),s=e+"__"+(t?"capture":"bubble");i.has(s)||(t&&(r|=4),Ra(o,e,r,t),i.add(s))}function Ra(e,t,n,a){var r=Pt.get(t);switch(void 0===r?2:r){case 0:r=Kt;break;case 1:r=Xt;break;default:r=Qt}n=r.bind(null,t,n,e),r=void 0,!$e||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(r=!0),a?void 0!==r?e.addEventListener(t,n,{capture:!0,passive:r}):e.addEventListener(t,n,!0):void 0!==r?e.addEventListener(t,n,{passive:r}):e.addEventListener(t,n,!1)}function Da(e,t,n,a,r){var o=a;if(0==(1&t)&&0==(2&t)&&null!==a)e:for(;;){if(null===a)return;var i=a.tag;if(3===i||4===i){var s=a.stateNode.containerInfo;if(s===r||8===s.nodeType&&s.parentNode===r)break;if(4===i)for(i=a.return;null!==i;){var c=i.tag;if((3===c||4===c)&&((c=i.stateNode.containerInfo)===r||8===c.nodeType&&c.parentNode===r))return;i=i.return}for(;null!==s;){if(null===(i=nr(s)))return;if(5===(c=i.tag)||6===c){a=o=i;continue e}s=s.parentNode}}a=a.return}!function(e,t,n){if(Be)return e(t,n);Be=!0;try{Me(e,t,n)}finally{Be=!1,je()}}((function(){var a=o,r=Ce(n),i=[];e:{var s=Ot.get(e);if(void 0!==s){var c=fn,l=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":c=Nn;break;case"focusin":l="focus",c=yn;break;case"focusout":l="blur",c=yn;break;case"beforeblur":case"afterblur":c=yn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=vn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=On;break;case At:case Lt:case Nt:c=kn;break;case It:c=Pn;break;case"scroll":c=mn;break;case"wheel":c=Dn;break;case"copy":case"cut":case"paste":c=_n;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=In}var d=0!=(4&t),u=!d&&"scroll"===e,p=d?null!==s?s+"Capture":null:s;d=[];for(var f,b=a;null!==b;){var m=(f=b).stateNode;if(5===f.tag&&null!==m&&(f=m,null!==p&&(null!=(m=ze(b,p))&&d.push(Ma(b,m,f)))),u)break;b=b.return}0<d.length&&(s=new c(s,l,null,n,r),i.push({event:s,listeners:d}))}}if(0==(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(l=n.relatedTarget||n.fromElement)||!nr(l)&&!l[er])&&(c||s)&&(s=r.window===r?r:(s=r.ownerDocument)?s.defaultView||s.parentWindow:window,c?(c=a,null!==(l=(l=n.relatedTarget||n.toElement)?nr(l):null)&&(l!==(u=Ke(l))||5!==l.tag&&6!==l.tag)&&(l=null)):(c=null,l=a),c!==l)){if(d=hn,m="onMouseLeave",p="onMouseEnter",b="mouse","pointerout"!==e&&"pointerover"!==e||(d=In,m="onPointerLeave",p="onPointerEnter",b="pointer"),u=null==c?s:rr(c),f=null==l?s:rr(l),(s=new d(m,b+"leave",c,n,r)).target=u,s.relatedTarget=f,m=null,nr(r)===a&&((d=new d(p,b+"enter",l,n,r)).target=f,d.relatedTarget=u,m=d),u=m,c&&l)e:{for(p=l,b=0,f=d=c;f;f=Ba(f))b++;for(f=0,m=p;m;m=Ba(m))f++;for(;0<b-f;)d=Ba(d),b--;for(;0<f-b;)p=Ba(p),f--;for(;b--;){if(d===p||null!==p&&d===p.alternate)break e;d=Ba(d),p=Ba(p)}d=null}else d=null;null!==c&&ja(i,s,c,d,!1),null!==l&&null!==u&&ja(i,u,l,d,!0)}if("select"===(c=(s=a?rr(a):window).nodeName&&s.nodeName.toLowerCase())||"input"===c&&"file"===s.type)var g=Jn;else if(Wn(s))if(ea)g=la;else{g=sa;var h=ia}else(c=s.nodeName)&&"input"===c.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=ca);switch(g&&(g=g(e,a))?qn(i,g,n,r):(h&&h(e,s,a),"focusout"===e&&(h=s._wrapperState)&&h.controlled&&"number"===s.type&&re(s,"number",s.value)),h=a?rr(a):window,e){case"focusin":(Wn(h)||"true"===h.contentEditable)&&(ya=h,ka=a,wa=null);break;case"focusout":wa=ka=ya=null;break;case"mousedown":_a=!0;break;case"contextmenu":case"mouseup":case"dragend":_a=!1,Sa(i,n,r);break;case"selectionchange":if(va)break;case"keydown":case"keyup":Sa(i,n,r)}var v;if(Fn)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 Gn?Zn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(zn&&"ko"!==n.locale&&(Gn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Gn&&(v=an()):(tn="value"in(en=r)?en.value:en.textContent,Gn=!0)),0<(h=Fa(a,y)).length&&(y=new Sn(y,e,null,n,r),i.push({event:y,listeners:h}),v?y.data=v:null!==(v=Hn(n))&&(y.data=v))),(v=jn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:(Un=!0,$n);case"textInput":return(e=t.data)===$n&&Un?null:e;default:return null}}(e,n):function(e,t){if(Gn)return"compositionend"===e||!Fn&&Zn(e,t)?(e=an(),nn=tn=en=null,Gn=!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 zn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(a=Fa(a,"onBeforeInput")).length&&(r=new Sn("onBeforeInput","beforeinput",null,n,r),i.push({event:r,listeners:a}),r.data=v))}La(i,t)}))}function Ma(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Fa(e,t){for(var n=t+"Capture",a=[];null!==e;){var r=e,o=r.stateNode;5===r.tag&&null!==o&&(r=o,null!=(o=ze(e,n))&&a.unshift(Ma(e,o,r)),null!=(o=ze(e,t))&&a.push(Ma(e,o,r))),e=e.return}return a}function Ba(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function ja(e,t,n,a,r){for(var o=t._reactName,i=[];null!==n&&n!==a;){var s=n,c=s.alternate,l=s.stateNode;if(null!==c&&c===a)break;5===s.tag&&null!==l&&(s=l,r?null!=(c=ze(n,o))&&i.unshift(Ma(n,c,s)):r||null!=(c=ze(n,o))&&i.push(Ma(n,c,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function za(){}var $a=null,Ua=null;function Za(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Ha(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Ga="function"==typeof setTimeout?setTimeout:void 0,Va="function"==typeof clearTimeout?clearTimeout:void 0;function Wa(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function qa(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Ya(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 Ka=0;var Xa=Math.random().toString(36).slice(2),Qa="__reactFiber$"+Xa,Ja="__reactProps$"+Xa,er="__reactContainer$"+Xa,tr="__reactEvents$"+Xa;function nr(e){var t=e[Qa];if(t)return t;for(var n=e.parentNode;n;){if(t=n[er]||n[Qa]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Ya(e);null!==e;){if(n=e[Qa])return n;e=Ya(e)}return t}n=(e=n).parentNode}return null}function ar(e){return!(e=e[Qa]||e[er])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function rr(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function or(e){return e[Ja]||null}function ir(e){var t=e[tr];return void 0===t&&(t=e[tr]=new Set),t}var sr=[],cr=-1;function lr(e){return{current:e}}function dr(e){0>cr||(e.current=sr[cr],sr[cr]=null,cr--)}function ur(e,t){cr++,sr[cr]=e.current,e.current=t}var pr={},fr=lr(pr),br=lr(!1),mr=pr;function gr(e,t){var n=e.type.contextTypes;if(!n)return pr;var a=e.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===t)return a.__reactInternalMemoizedMaskedChildContext;var r,o={};for(r in n)o[r]=t[r];return a&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function hr(e){return null!=(e=e.childContextTypes)}function vr(){dr(br),dr(fr)}function yr(e,t,n){if(fr.current!==pr)throw Error(i(168));ur(fr,t),ur(br,n)}function kr(e,t,n){var a=e.stateNode;if(e=t.childContextTypes,"function"!=typeof a.getChildContext)return n;for(var o in a=a.getChildContext())if(!(o in e))throw Error(i(108,W(t)||"Unknown",o));return r({},n,a)}function wr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||pr,mr=fr.current,ur(fr,e),ur(br,br.current),!0}function _r(e,t,n){var a=e.stateNode;if(!a)throw Error(i(169));n?(e=kr(e,t,mr),a.__reactInternalMemoizedMergedChildContext=e,dr(br),dr(fr),ur(fr,e)):dr(br),ur(br,n)}var Sr=null,xr=null,Er=o.unstable_runWithPriority,Cr=o.unstable_scheduleCallback,Tr=o.unstable_cancelCallback,Ar=o.unstable_shouldYield,Lr=o.unstable_requestPaint,Nr=o.unstable_now,Ir=o.unstable_getCurrentPriorityLevel,Or=o.unstable_ImmediatePriority,Pr=o.unstable_UserBlockingPriority,Rr=o.unstable_NormalPriority,Dr=o.unstable_LowPriority,Mr=o.unstable_IdlePriority,Fr={},Br=void 0!==Lr?Lr:function(){},jr=null,zr=null,$r=!1,Ur=Nr(),Zr=1e4>Ur?Nr:function(){return Nr()-Ur};function Hr(){switch(Ir()){case Or:return 99;case Pr:return 98;case Rr:return 97;case Dr:return 96;case Mr:return 95;default:throw Error(i(332))}}function Gr(e){switch(e){case 99:return Or;case 98:return Pr;case 97:return Rr;case 96:return Dr;case 95:return Mr;default:throw Error(i(332))}}function Vr(e,t){return e=Gr(e),Er(e,t)}function Wr(e,t,n){return e=Gr(e),Cr(e,t,n)}function qr(){if(null!==zr){var e=zr;zr=null,Tr(e)}Yr()}function Yr(){if(!$r&&null!==jr){$r=!0;var e=0;try{var t=jr;Vr(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),jr=null}catch(n){throw null!==jr&&(jr=jr.slice(e+1)),Cr(Or,qr),n}finally{$r=!1}}}var Kr=w.ReactCurrentBatchConfig;function Xr(e,t){if(e&&e.defaultProps){for(var n in t=r({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Qr=lr(null),Jr=null,eo=null,to=null;function no(){to=eo=Jr=null}function ao(e){var t=Qr.current;dr(Qr),e.type._context._currentValue=t}function ro(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function oo(e,t){Jr=e,to=eo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Fi=!0),e.firstContext=null)}function io(e,t){if(to!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(to=e,t=1073741823),t={context:e,observedBits:t,next:null},null===eo){if(null===Jr)throw Error(i(308));eo=t,Jr.dependencies={lanes:0,firstContext:t,responders:null}}else eo=eo.next=t;return e._currentValue}var so=!1;function co(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function lo(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 uo(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function po(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fo(e,t){var n=e.updateQueue,a=e.alternate;if(null!==a&&n===(a=a.updateQueue)){var r=null,o=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===o?r=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?r=o=t:o=o.next=t}else r=o=t;return n={baseState:a.baseState,firstBaseUpdate:r,lastBaseUpdate:o,shared:a.shared,effects:a.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function bo(e,t,n,a){var o=e.updateQueue;so=!1;var i=o.firstBaseUpdate,s=o.lastBaseUpdate,c=o.shared.pending;if(null!==c){o.shared.pending=null;var l=c,d=l.next;l.next=null,null===s?i=d:s.next=d,s=l;var u=e.alternate;if(null!==u){var p=(u=u.updateQueue).lastBaseUpdate;p!==s&&(null===p?u.firstBaseUpdate=d:p.next=d,u.lastBaseUpdate=l)}}if(null!==i){for(p=o.baseState,s=0,u=d=l=null;;){c=i.lane;var f=i.eventTime;if((a&c)===c){null!==u&&(u=u.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var b=e,m=i;switch(c=t,f=n,m.tag){case 1:if("function"==typeof(b=m.payload)){p=b.call(f,p,c);break e}p=b;break e;case 3:b.flags=-4097&b.flags|64;case 0:if(null==(c="function"==typeof(b=m.payload)?b.call(f,p,c):b))break e;p=r({},p,c);break e;case 2:so=!0}}null!==i.callback&&(e.flags|=32,null===(c=o.effects)?o.effects=[i]:c.push(i))}else f={eventTime:f,lane:c,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===u?(d=u=f,l=p):u=u.next=f,s|=c;if(null===(i=i.next)){if(null===(c=o.shared.pending))break;i=c.next,c.next=null,o.lastBaseUpdate=c,o.shared.pending=null}}null===u&&(l=p),o.baseState=l,o.firstBaseUpdate=d,o.lastBaseUpdate=u,$s|=s,e.lanes=s,e.memoizedState=p}}function mo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var a=e[t],r=a.callback;if(null!==r){if(a.callback=null,a=n,"function"!=typeof r)throw Error(i(191,r));r.call(a)}}}var go=(new a.Component).refs;function ho(e,t,n,a){n=null==(n=n(a,t=e.memoizedState))?t:r({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var vo={isMounted:function(e){return!!(e=e._reactInternals)&&Ke(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var a=pc(),r=fc(e),o=uo(a,r);o.payload=t,null!=n&&(o.callback=n),po(e,o),bc(e,r,a)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var a=pc(),r=fc(e),o=uo(a,r);o.tag=1,o.payload=t,null!=n&&(o.callback=n),po(e,o),bc(e,r,a)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=pc(),a=fc(e),r=uo(n,a);r.tag=2,null!=t&&(r.callback=t),po(e,r),bc(e,a,n)}};function yo(e,t,n,a,r,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(a,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!pa(n,a)||!pa(r,o))}function ko(e,t,n){var a=!1,r=pr,o=t.contextType;return"object"==typeof o&&null!==o?o=io(o):(r=hr(t)?mr:fr.current,o=(a=null!=(a=t.contextTypes))?gr(e,r):pr),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=vo,e.stateNode=t,t._reactInternals=e,a&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=o),t}function wo(e,t,n,a){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,a),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,a),t.state!==e&&vo.enqueueReplaceState(t,t.state,null)}function _o(e,t,n,a){var r=e.stateNode;r.props=n,r.state=e.memoizedState,r.refs=go,co(e);var o=t.contextType;"object"==typeof o&&null!==o?r.context=io(o):(o=hr(t)?mr:fr.current,r.context=gr(e,o)),bo(e,n,r,a),r.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(ho(e,t,o,n),r.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof r.getSnapshotBeforeUpdate||"function"!=typeof r.UNSAFE_componentWillMount&&"function"!=typeof r.componentWillMount||(t=r.state,"function"==typeof r.componentWillMount&&r.componentWillMount(),"function"==typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount(),t!==r.state&&vo.enqueueReplaceState(r,r.state,null),bo(e,n,r,a),r.state=e.memoizedState),"function"==typeof r.componentDidMount&&(e.flags|=4)}var So=Array.isArray;function xo(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var a=n.stateNode}if(!a)throw Error(i(147,e));var r=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===r?t.ref:(t=function(e){var t=a.refs;t===go&&(t=a.refs={}),null===e?delete t[r]:t[r]=e},t._stringRef=r,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function Eo(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function Co(e){function t(t,n){if(e){var a=t.lastEffect;null!==a?(a.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,a){if(!e)return null;for(;null!==a;)t(n,a),a=a.sibling;return null}function a(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function r(e,t){return(e=Vc(e,t)).index=0,e.sibling=null,e}function o(t,n,a){return t.index=a,e?null!==(a=t.alternate)?(a=a.index)<n?(t.flags=2,n):a:(t.flags=2,n):n}function s(t){return e&&null===t.alternate&&(t.flags=2),t}function c(e,t,n,a){return null===t||6!==t.tag?((t=Kc(n,e.mode,a)).return=e,t):((t=r(t,n)).return=e,t)}function l(e,t,n,a){return null!==t&&t.elementType===n.type?((a=r(t,n.props)).ref=xo(e,t,n),a.return=e,a):((a=Wc(n.type,n.key,n.props,null,e.mode,a)).ref=xo(e,t,n),a.return=e,a)}function d(e,t,n,a){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Xc(n,e.mode,a)).return=e,t):((t=r(t,n.children||[])).return=e,t)}function u(e,t,n,a,o){return null===t||7!==t.tag?((t=qc(n,e.mode,a,o)).return=e,t):((t=r(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Kc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case _:return(n=Wc(t.type,t.key,t.props,null,e.mode,n)).ref=xo(e,null,t),n.return=e,n;case S:return(t=Xc(t,e.mode,n)).return=e,t}if(So(t)||U(t))return(t=qc(t,e.mode,n,null)).return=e,t;Eo(e,t)}return null}function f(e,t,n,a){var r=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==r?null:c(e,t,""+n,a);if("object"==typeof n&&null!==n){switch(n.$$typeof){case _:return n.key===r?n.type===x?u(e,t,n.props.children,a,r):l(e,t,n,a):null;case S:return n.key===r?d(e,t,n,a):null}if(So(n)||U(n))return null!==r?null:u(e,t,n,a,null);Eo(e,n)}return null}function b(e,t,n,a,r){if("string"==typeof a||"number"==typeof a)return c(t,e=e.get(n)||null,""+a,r);if("object"==typeof a&&null!==a){switch(a.$$typeof){case _:return e=e.get(null===a.key?n:a.key)||null,a.type===x?u(t,e,a.props.children,r,a.key):l(t,e,a,r);case S:return d(t,e=e.get(null===a.key?n:a.key)||null,a,r)}if(So(a)||U(a))return u(t,e=e.get(n)||null,a,r,null);Eo(t,a)}return null}function m(r,i,s,c){for(var l=null,d=null,u=i,m=i=0,g=null;null!==u&&m<s.length;m++){u.index>m?(g=u,u=null):g=u.sibling;var h=f(r,u,s[m],c);if(null===h){null===u&&(u=g);break}e&&u&&null===h.alternate&&t(r,u),i=o(h,i,m),null===d?l=h:d.sibling=h,d=h,u=g}if(m===s.length)return n(r,u),l;if(null===u){for(;m<s.length;m++)null!==(u=p(r,s[m],c))&&(i=o(u,i,m),null===d?l=u:d.sibling=u,d=u);return l}for(u=a(r,u);m<s.length;m++)null!==(g=b(u,r,m,s[m],c))&&(e&&null!==g.alternate&&u.delete(null===g.key?m:g.key),i=o(g,i,m),null===d?l=g:d.sibling=g,d=g);return e&&u.forEach((function(e){return t(r,e)})),l}function g(r,s,c,l){var d=U(c);if("function"!=typeof d)throw Error(i(150));if(null==(c=d.call(c)))throw Error(i(151));for(var u=d=null,m=s,g=s=0,h=null,v=c.next();null!==m&&!v.done;g++,v=c.next()){m.index>g?(h=m,m=null):h=m.sibling;var y=f(r,m,v.value,l);if(null===y){null===m&&(m=h);break}e&&m&&null===y.alternate&&t(r,m),s=o(y,s,g),null===u?d=y:u.sibling=y,u=y,m=h}if(v.done)return n(r,m),d;if(null===m){for(;!v.done;g++,v=c.next())null!==(v=p(r,v.value,l))&&(s=o(v,s,g),null===u?d=v:u.sibling=v,u=v);return d}for(m=a(r,m);!v.done;g++,v=c.next())null!==(v=b(m,r,g,v.value,l))&&(e&&null!==v.alternate&&m.delete(null===v.key?g:v.key),s=o(v,s,g),null===u?d=v:u.sibling=v,u=v);return e&&m.forEach((function(e){return t(r,e)})),d}return function(e,a,o,c){var l="object"==typeof o&&null!==o&&o.type===x&&null===o.key;l&&(o=o.props.children);var d="object"==typeof o&&null!==o;if(d)switch(o.$$typeof){case _:e:{for(d=o.key,l=a;null!==l;){if(l.key===d){if(7===l.tag){if(o.type===x){n(e,l.sibling),(a=r(l,o.props.children)).return=e,e=a;break e}}else if(l.elementType===o.type){n(e,l.sibling),(a=r(l,o.props)).ref=xo(e,l,o),a.return=e,e=a;break e}n(e,l);break}t(e,l),l=l.sibling}o.type===x?((a=qc(o.props.children,e.mode,c,o.key)).return=e,e=a):((c=Wc(o.type,o.key,o.props,null,e.mode,c)).ref=xo(e,a,o),c.return=e,e=c)}return s(e);case S:e:{for(l=o.key;null!==a;){if(a.key===l){if(4===a.tag&&a.stateNode.containerInfo===o.containerInfo&&a.stateNode.implementation===o.implementation){n(e,a.sibling),(a=r(a,o.children||[])).return=e,e=a;break e}n(e,a);break}t(e,a),a=a.sibling}(a=Xc(o,e.mode,c)).return=e,e=a}return s(e)}if("string"==typeof o||"number"==typeof o)return o=""+o,null!==a&&6===a.tag?(n(e,a.sibling),(a=r(a,o)).return=e,e=a):(n(e,a),(a=Kc(o,e.mode,c)).return=e,e=a),s(e);if(So(o))return m(e,a,o,c);if(U(o))return g(e,a,o,c);if(d&&Eo(e,o),void 0===o&&!l)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,a)}}var To=Co(!0),Ao=Co(!1),Lo={},No=lr(Lo),Io=lr(Lo),Oo=lr(Lo);function Po(e){if(e===Lo)throw Error(i(174));return e}function Ro(e,t){switch(ur(Oo,t),ur(Io,e),ur(No,Lo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:be(null,"");break;default:t=be(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}dr(No),ur(No,t)}function Do(){dr(No),dr(Io),dr(Oo)}function Mo(e){Po(Oo.current);var t=Po(No.current),n=be(t,e.type);t!==n&&(ur(Io,e),ur(No,n))}function Fo(e){Io.current===e&&(dr(No),dr(Io))}var Bo=lr(0);function jo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var zo=null,$o=null,Uo=!1;function Zo(e,t){var n=Hc(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ho(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Go(e){if(Uo){var t=$o;if(t){var n=t;if(!Ho(e,t)){if(!(t=qa(n.nextSibling))||!Ho(e,t))return e.flags=-1025&e.flags|2,Uo=!1,void(zo=e);Zo(zo,n)}zo=e,$o=qa(t.firstChild)}else e.flags=-1025&e.flags|2,Uo=!1,zo=e}}function Vo(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;zo=e}function Wo(e){if(e!==zo)return!1;if(!Uo)return Vo(e),Uo=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Ha(t,e.memoizedProps))for(t=$o;t;)Zo(e,t),t=qa(t.nextSibling);if(Vo(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){$o=qa(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}$o=null}}else $o=zo?qa(e.stateNode.nextSibling):null;return!0}function qo(){$o=zo=null,Uo=!1}var Yo=[];function Ko(){for(var e=0;e<Yo.length;e++)Yo[e]._workInProgressVersionPrimary=null;Yo.length=0}var Xo=w.ReactCurrentDispatcher,Qo=w.ReactCurrentBatchConfig,Jo=0,ei=null,ti=null,ni=null,ai=!1,ri=!1;function oi(){throw Error(i(321))}function ii(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!da(e[n],t[n]))return!1;return!0}function si(e,t,n,a,r,o){if(Jo=o,ei=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Xo.current=null===e||null===e.memoizedState?Pi:Ri,e=n(a,r),ri){o=0;do{if(ri=!1,!(25>o))throw Error(i(301));o+=1,ni=ti=null,t.updateQueue=null,Xo.current=Di,e=n(a,r)}while(ri)}if(Xo.current=Oi,t=null!==ti&&null!==ti.next,Jo=0,ni=ti=ei=null,ai=!1,t)throw Error(i(300));return e}function ci(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ni?ei.memoizedState=ni=e:ni=ni.next=e,ni}function li(){if(null===ti){var e=ei.alternate;e=null!==e?e.memoizedState:null}else e=ti.next;var t=null===ni?ei.memoizedState:ni.next;if(null!==t)ni=t,ti=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ti=e).memoizedState,baseState:ti.baseState,baseQueue:ti.baseQueue,queue:ti.queue,next:null},null===ni?ei.memoizedState=ni=e:ni=ni.next=e}return ni}function di(e,t){return"function"==typeof t?t(e):t}function ui(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var a=ti,r=a.baseQueue,o=n.pending;if(null!==o){if(null!==r){var s=r.next;r.next=o.next,o.next=s}a.baseQueue=r=o,n.pending=null}if(null!==r){r=r.next,a=a.baseState;var c=s=o=null,l=r;do{var d=l.lane;if((Jo&d)===d)null!==c&&(c=c.next={lane:0,action:l.action,eagerReducer:l.eagerReducer,eagerState:l.eagerState,next:null}),a=l.eagerReducer===e?l.eagerState:e(a,l.action);else{var u={lane:d,action:l.action,eagerReducer:l.eagerReducer,eagerState:l.eagerState,next:null};null===c?(s=c=u,o=a):c=c.next=u,ei.lanes|=d,$s|=d}l=l.next}while(null!==l&&l!==r);null===c?o=a:c.next=s,da(a,t.memoizedState)||(Fi=!0),t.memoizedState=a,t.baseState=o,t.baseQueue=c,n.lastRenderedState=a}return[t.memoizedState,n.dispatch]}function pi(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var a=n.dispatch,r=n.pending,o=t.memoizedState;if(null!==r){n.pending=null;var s=r=r.next;do{o=e(o,s.action),s=s.next}while(s!==r);da(o,t.memoizedState)||(Fi=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,a]}function fi(e,t,n){var a=t._getVersion;a=a(t._source);var r=t._workInProgressVersionPrimary;if(null!==r?e=r===a:(e=e.mutableReadLanes,(e=(Jo&e)===e)&&(t._workInProgressVersionPrimary=a,Yo.push(t))),e)return n(t._source);throw Yo.push(t),Error(i(350))}function bi(e,t,n,a){var r=Ps;if(null===r)throw Error(i(349));var o=t._getVersion,s=o(t._source),c=Xo.current,l=c.useState((function(){return fi(r,t,n)})),d=l[1],u=l[0];l=ni;var p=e.memoizedState,f=p.refs,b=f.getSnapshot,m=p.source;p=p.subscribe;var g=ei;return e.memoizedState={refs:f,source:t,subscribe:a},c.useEffect((function(){f.getSnapshot=n,f.setSnapshot=d;var e=o(t._source);if(!da(s,e)){e=n(t._source),da(u,e)||(d(e),e=fc(g),r.mutableReadLanes|=e&r.pendingLanes),e=r.mutableReadLanes,r.entangledLanes|=e;for(var a=r.entanglements,i=e;0<i;){var c=31-Ht(i),l=1<<c;a[c]|=e,i&=~l}}}),[n,t,a]),c.useEffect((function(){return a(t._source,(function(){var e=f.getSnapshot,n=f.setSnapshot;try{n(e(t._source));var a=fc(g);r.mutableReadLanes|=a&r.pendingLanes}catch(o){n((function(){throw o}))}}))}),[t,a]),da(b,n)&&da(m,t)&&da(p,a)||((e={pending:null,dispatch:null,lastRenderedReducer:di,lastRenderedState:u}).dispatch=d=Ii.bind(null,ei,e),l.queue=e,l.baseQueue=null,u=fi(r,t,n),l.memoizedState=l.baseState=u),u}function mi(e,t,n){return bi(li(),e,t,n)}function gi(e){var t=ci();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:di,lastRenderedState:e}).dispatch=Ii.bind(null,ei,e),[t.memoizedState,e]}function hi(e,t,n,a){return e={tag:e,create:t,destroy:n,deps:a,next:null},null===(t=ei.updateQueue)?(t={lastEffect:null},ei.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(a=n.next,n.next=e,e.next=a,t.lastEffect=e),e}function vi(e){return e={current:e},ci().memoizedState=e}function yi(){return li().memoizedState}function ki(e,t,n,a){var r=ci();ei.flags|=e,r.memoizedState=hi(1|t,n,void 0,void 0===a?null:a)}function wi(e,t,n,a){var r=li();a=void 0===a?null:a;var o=void 0;if(null!==ti){var i=ti.memoizedState;if(o=i.destroy,null!==a&&ii(a,i.deps))return void hi(t,n,o,a)}ei.flags|=e,r.memoizedState=hi(1|t,n,o,a)}function _i(e,t){return ki(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function xi(e,t){return wi(4,2,e,t)}function Ei(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 Ci(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,Ei.bind(null,t,e),n)}function Ti(){}function Ai(e,t){var n=li();t=void 0===t?null:t;var a=n.memoizedState;return null!==a&&null!==t&&ii(t,a[1])?a[0]:(n.memoizedState=[e,t],e)}function Li(e,t){var n=li();t=void 0===t?null:t;var a=n.memoizedState;return null!==a&&null!==t&&ii(t,a[1])?a[0]:(e=e(),n.memoizedState=[e,t],e)}function Ni(e,t){var n=Hr();Vr(98>n?98:n,(function(){e(!0)})),Vr(97<n?97:n,(function(){var n=Qo.transition;Qo.transition=1;try{e(!1),t()}finally{Qo.transition=n}}))}function Ii(e,t,n){var a=pc(),r=fc(e),o={lane:r,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===ei||null!==i&&i===ei)ri=ai=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var s=t.lastRenderedState,c=i(s,n);if(o.eagerReducer=i,o.eagerState=c,da(c,s))return}catch(l){}bc(e,r,a)}}var Oi={readContext:io,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Pi={readContext:io,useCallback:function(e,t){return ci().memoizedState=[e,void 0===t?null:t],e},useContext:io,useEffect:_i,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,ki(4,2,Ei.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ki(4,2,e,t)},useMemo:function(e,t){var n=ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var a=ci();return t=void 0!==n?n(t):t,a.memoizedState=a.baseState=t,e=(e=a.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,ei,e),[a.memoizedState,e]},useRef:vi,useState:gi,useDebugValue:Ti,useDeferredValue:function(e){var t=gi(e),n=t[0],a=t[1];return _i((function(){var t=Qo.transition;Qo.transition=1;try{a(e)}finally{Qo.transition=t}}),[e]),n},useTransition:function(){var e=gi(!1),t=e[0];return vi(e=Ni.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var a=ci();return a.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},bi(a,e,t,n)},useOpaqueIdentifier:function(){if(Uo){var e=!1,t=function(e){return{$$typeof:D,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Ka++).toString(36))),Error(i(355))})),n=gi(t)[1];return 0==(2&ei.mode)&&(ei.flags|=516,hi(5,(function(){n("r:"+(Ka++).toString(36))}),void 0,null)),t}return gi(t="r:"+(Ka++).toString(36)),t},unstable_isNewReconciler:!1},Ri={readContext:io,useCallback:Ai,useContext:io,useEffect:Si,useImperativeHandle:Ci,useLayoutEffect:xi,useMemo:Li,useReducer:ui,useRef:yi,useState:function(){return ui(di)},useDebugValue:Ti,useDeferredValue:function(e){var t=ui(di),n=t[0],a=t[1];return Si((function(){var t=Qo.transition;Qo.transition=1;try{a(e)}finally{Qo.transition=t}}),[e]),n},useTransition:function(){var e=ui(di)[0];return[yi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ui(di)[0]},unstable_isNewReconciler:!1},Di={readContext:io,useCallback:Ai,useContext:io,useEffect:Si,useImperativeHandle:Ci,useLayoutEffect:xi,useMemo:Li,useReducer:pi,useRef:yi,useState:function(){return pi(di)},useDebugValue:Ti,useDeferredValue:function(e){var t=pi(di),n=t[0],a=t[1];return Si((function(){var t=Qo.transition;Qo.transition=1;try{a(e)}finally{Qo.transition=t}}),[e]),n},useTransition:function(){var e=pi(di)[0];return[yi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return pi(di)[0]},unstable_isNewReconciler:!1},Mi=w.ReactCurrentOwner,Fi=!1;function Bi(e,t,n,a){t.child=null===e?Ao(t,null,n,a):To(t,e.child,n,a)}function ji(e,t,n,a,r){n=n.render;var o=t.ref;return oo(t,r),a=si(e,t,n,a,o,r),null===e||Fi?(t.flags|=1,Bi(e,t,a,r),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~r,os(e,t,r))}function zi(e,t,n,a,r,o){if(null===e){var i=n.type;return"function"!=typeof i||Gc(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Wc(n.type,null,a,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,$i(e,t,i,a,r,o))}return i=e.child,0==(r&o)&&(r=i.memoizedProps,(n=null!==(n=n.compare)?n:pa)(r,a)&&e.ref===t.ref)?os(e,t,o):(t.flags|=1,(e=Vc(i,a)).ref=t.ref,e.return=t,t.child=e)}function $i(e,t,n,a,r,o){if(null!==e&&pa(e.memoizedProps,a)&&e.ref===t.ref){if(Fi=!1,0==(o&r))return t.lanes=e.lanes,os(e,t,o);0!=(16384&e.flags)&&(Fi=!0)}return Hi(e,t,n,a,o)}function Ui(e,t,n){var a=t.pendingProps,r=a.children,o=null!==e?e.memoizedState:null;if("hidden"===a.mode||"unstable-defer-without-hiding"===a.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},_c(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},_c(t,e),null;t.memoizedState={baseLanes:0},_c(t,null!==o?o.baseLanes:n)}else null!==o?(a=o.baseLanes|n,t.memoizedState=null):a=n,_c(t,a);return Bi(e,t,r,n),t.child}function Zi(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,a,r){var o=hr(n)?mr:fr.current;return o=gr(t,o),oo(t,r),n=si(e,t,n,a,o,r),null===e||Fi?(t.flags|=1,Bi(e,t,n,r),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~r,os(e,t,r))}function Gi(e,t,n,a,r){if(hr(n)){var o=!0;wr(t)}else o=!1;if(oo(t,r),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),ko(t,n,a),_o(t,n,a,r),a=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var c=i.context,l=n.contextType;"object"==typeof l&&null!==l?l=io(l):l=gr(t,l=hr(n)?mr:fr.current);var d=n.getDerivedStateFromProps,u="function"==typeof d||"function"==typeof i.getSnapshotBeforeUpdate;u||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==a||c!==l)&&wo(t,i,a,l),so=!1;var p=t.memoizedState;i.state=p,bo(t,a,i,r),c=t.memoizedState,s!==a||p!==c||br.current||so?("function"==typeof d&&(ho(t,n,d,a),c=t.memoizedState),(s=so||yo(t,n,s,a,p,c,l))?(u||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=a,t.memoizedState=c),i.props=a,i.state=c,i.context=l,a=s):("function"==typeof i.componentDidMount&&(t.flags|=4),a=!1)}else{i=t.stateNode,lo(e,t),s=t.memoizedProps,l=t.type===t.elementType?s:Xr(t.type,s),i.props=l,u=t.pendingProps,p=i.context,"object"==typeof(c=n.contextType)&&null!==c?c=io(c):c=gr(t,c=hr(n)?mr:fr.current);var f=n.getDerivedStateFromProps;(d="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==u||p!==c)&&wo(t,i,a,c),so=!1,p=t.memoizedState,i.state=p,bo(t,a,i,r);var b=t.memoizedState;s!==u||p!==b||br.current||so?("function"==typeof f&&(ho(t,n,f,a),b=t.memoizedState),(l=so||yo(t,n,l,a,p,b,c))?(d||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(a,b,c),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(a,b,c)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),t.memoizedProps=a,t.memoizedState=b),i.props=a,i.state=b,i.context=c,a=l):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),a=!1)}return Vi(e,t,n,a,o,r)}function Vi(e,t,n,a,r,o){Zi(e,t);var i=0!=(64&t.flags);if(!a&&!i)return r&&_r(t,n,!1),os(e,t,o);a=t.stateNode,Mi.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:a.render();return t.flags|=1,null!==e&&i?(t.child=To(t,e.child,null,o),t.child=To(t,null,s,o)):Bi(e,t,s,o),t.memoizedState=a.state,r&&_r(t,n,!0),t.child}function Wi(e){var t=e.stateNode;t.pendingContext?yr(0,t.pendingContext,t.pendingContext!==t.context):t.context&&yr(0,t.context,!1),Ro(e,t.containerInfo)}var qi,Yi,Ki,Xi={dehydrated:null,retryLane:0};function Qi(e,t,n){var a,r=t.pendingProps,o=Bo.current,i=!1;return(a=0!=(64&t.flags))||(a=(null===e||null!==e.memoizedState)&&0!=(2&o)),a?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===r.fallback||!0===r.unstable_avoidThisFallback||(o|=1),ur(Bo,1&o),null===e?(void 0!==r.fallback&&Go(t),e=r.children,o=r.fallback,i?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,e):"number"==typeof r.unstable_expectedLoadTime?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,t.lanes=33554432,e):((n=Yc({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(r=ts(e,t,r.children,r.fallback,n),i=t.child,o=e.child.memoizedState,i.memoizedState=null===o?{baseLanes:n}:{baseLanes:o.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Xi,r):(n=es(e,t,r.children,n),t.memoizedState=null,n))}function Ji(e,t,n,a){var r=e.mode,o=e.child;return t={mode:"hidden",children:t},0==(2&r)&&null!==o?(o.childLanes=0,o.pendingProps=t):o=Yc(t,r,0,null),n=qc(n,r,a,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function es(e,t,n,a){var r=e.child;return e=r.sibling,n=Vc(r,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=a),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function ts(e,t,n,a,r){var o=t.mode,i=e.child;e=i.sibling;var s={mode:"hidden",children:n};return 0==(2&o)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=s,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vc(i,s),null!==e?a=Vc(e,a):(a=qc(a,o,r,null)).flags|=2,a.return=t,n.return=t,n.sibling=a,t.child=n,a}function ns(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ro(e.return,t)}function as(e,t,n,a,r,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:a,tail:n,tailMode:r,lastEffect:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=a,i.tail=n,i.tailMode=r,i.lastEffect=o)}function rs(e,t,n){var a=t.pendingProps,r=a.revealOrder,o=a.tail;if(Bi(e,t,a.children,n),0!=(2&(a=Bo.current)))a=1&a|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&ns(e,n);else if(19===e.tag)ns(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}a&=1}if(ur(Bo,a),0==(2&t.mode))t.memoizedState=null;else switch(r){case"forwards":for(n=t.child,r=null;null!==n;)null!==(e=n.alternate)&&null===jo(e)&&(r=n),n=n.sibling;null===(n=r)?(r=t.child,t.child=null):(r=n.sibling,n.sibling=null),as(t,!1,r,n,o,t.lastEffect);break;case"backwards":for(n=null,r=t.child,t.child=null;null!==r;){if(null!==(e=r.alternate)&&null===jo(e)){t.child=r;break}e=r.sibling,r.sibling=n,n=r,r=e}as(t,!0,n,null,o,t.lastEffect);break;case"together":as(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function os(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),$s|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function is(e,t){if(!Uo)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 a=null;null!==n;)null!==n.alternate&&(a=n),n=n.sibling;null===a?t||null===e.tail?e.tail=null:e.tail.sibling=null:a.sibling=null}}function ss(e,t,n){var a=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return hr(t.type)&&vr(),null;case 3:return Do(),dr(br),dr(fr),Ko(),(a=t.stateNode).pendingContext&&(a.context=a.pendingContext,a.pendingContext=null),null!==e&&null!==e.child||(Wo(t)?t.flags|=4:a.hydrate||(t.flags|=256)),null;case 5:Fo(t);var o=Po(Oo.current);if(n=t.type,null!==e&&null!=t.stateNode)Yi(e,t,n,a),e.ref!==t.ref&&(t.flags|=128);else{if(!a){if(null===t.stateNode)throw Error(i(166));return null}if(e=Po(No.current),Wo(t)){a=t.stateNode,n=t.type;var s=t.memoizedProps;switch(a[Qa]=t,a[Ja]=s,n){case"dialog":Na("cancel",a),Na("close",a);break;case"iframe":case"object":case"embed":Na("load",a);break;case"video":case"audio":for(e=0;e<Ca.length;e++)Na(Ca[e],a);break;case"source":Na("error",a);break;case"img":case"image":case"link":Na("error",a),Na("load",a);break;case"details":Na("toggle",a);break;case"input":ee(a,s),Na("invalid",a);break;case"select":a._wrapperState={wasMultiple:!!s.multiple},Na("invalid",a);break;case"textarea":ce(a,s),Na("invalid",a)}for(var l in xe(n,s),e=null,s)s.hasOwnProperty(l)&&(o=s[l],"children"===l?"string"==typeof o?a.textContent!==o&&(e=["children",o]):"number"==typeof o&&a.textContent!==""+o&&(e=["children",""+o]):c.hasOwnProperty(l)&&null!=o&&"onScroll"===l&&Na("scroll",a));switch(n){case"input":K(a),ae(a,s,!0);break;case"textarea":K(a),de(a);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(a.onclick=za)}a=e,t.updateQueue=a,null!==a&&(t.flags|=4)}else{switch(l=9===o.nodeType?o:o.ownerDocument,e===ue&&(e=fe(n)),e===ue?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof a.is?e=l.createElement(n,{is:a.is}):(e=l.createElement(n),"select"===n&&(l=e,a.multiple?l.multiple=!0:a.size&&(l.size=a.size))):e=l.createElementNS(e,n),e[Qa]=t,e[Ja]=a,qi(e,t),t.stateNode=e,l=Ee(n,a),n){case"dialog":Na("cancel",e),Na("close",e),o=a;break;case"iframe":case"object":case"embed":Na("load",e),o=a;break;case"video":case"audio":for(o=0;o<Ca.length;o++)Na(Ca[o],e);o=a;break;case"source":Na("error",e),o=a;break;case"img":case"image":case"link":Na("error",e),Na("load",e),o=a;break;case"details":Na("toggle",e),o=a;break;case"input":ee(e,a),o=J(e,a),Na("invalid",e);break;case"option":o=oe(e,a);break;case"select":e._wrapperState={wasMultiple:!!a.multiple},o=r({},a,{value:void 0}),Na("invalid",e);break;case"textarea":ce(e,a),o=se(e,a),Na("invalid",e);break;default:o=a}xe(n,o);var d=o;for(s in d)if(d.hasOwnProperty(s)){var u=d[s];"style"===s?_e(e,u):"dangerouslySetInnerHTML"===s?null!=(u=u?u.__html:void 0)&&he(e,u):"children"===s?"string"==typeof u?("textarea"!==n||""!==u)&&ve(e,u):"number"==typeof u&&ve(e,""+u):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(c.hasOwnProperty(s)?null!=u&&"onScroll"===s&&Na("scroll",e):null!=u&&k(e,s,u,l))}switch(n){case"input":K(e),ae(e,a,!1);break;case"textarea":K(e),de(e);break;case"option":null!=a.value&&e.setAttribute("value",""+q(a.value));break;case"select":e.multiple=!!a.multiple,null!=(s=a.value)?ie(e,!!a.multiple,s,!1):null!=a.defaultValue&&ie(e,!!a.multiple,a.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=za)}Za(n,a)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ki(0,t,e.memoizedProps,a);else{if("string"!=typeof a&&null===t.stateNode)throw Error(i(166));n=Po(Oo.current),Po(No.current),Wo(t)?(a=t.stateNode,n=t.memoizedProps,a[Qa]=t,a.nodeValue!==n&&(t.flags|=4)):((a=(9===n.nodeType?n:n.ownerDocument).createTextNode(a))[Qa]=t,t.stateNode=a)}return null;case 13:return dr(Bo),a=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(a=null!==a,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Wo(t):n=null!==e.memoizedState,a&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Bo.current)?0===Bs&&(Bs=3):(0!==Bs&&3!==Bs||(Bs=4),null===Ps||0==(134217727&$s)&&0==(134217727&Us)||vc(Ps,Ds))),(a||n)&&(t.flags|=4),null);case 4:return Do(),null===e&&Oa(t.stateNode.containerInfo),null;case 10:return ao(t),null;case 19:if(dr(Bo),null===(a=t.memoizedState))return null;if(s=0!=(64&t.flags),null===(l=a.rendering))if(s)is(a,!1);else{if(0!==Bs||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(l=jo(e))){for(t.flags|=64,is(a,!1),null!==(s=l.updateQueue)&&(t.updateQueue=s,t.flags|=4),null===a.lastEffect&&(t.firstEffect=null),t.lastEffect=a.lastEffect,a=n,n=t.child;null!==n;)e=a,(s=n).flags&=2,s.nextEffect=null,s.firstEffect=null,s.lastEffect=null,null===(l=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=l.childLanes,s.lanes=l.lanes,s.child=l.child,s.memoizedProps=l.memoizedProps,s.memoizedState=l.memoizedState,s.updateQueue=l.updateQueue,s.type=l.type,e=l.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return ur(Bo,1&Bo.current|2),t.child}e=e.sibling}null!==a.tail&&Zr()>Vs&&(t.flags|=64,s=!0,is(a,!1),t.lanes=33554432)}else{if(!s)if(null!==(e=jo(l))){if(t.flags|=64,s=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),is(a,!0),null===a.tail&&"hidden"===a.tailMode&&!l.alternate&&!Uo)return null!==(t=t.lastEffect=a.lastEffect)&&(t.nextEffect=null),null}else 2*Zr()-a.renderingStartTime>Vs&&1073741824!==n&&(t.flags|=64,s=!0,is(a,!1),t.lanes=33554432);a.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=a.last)?n.sibling=l:t.child=l,a.last=l)}return null!==a.tail?(n=a.tail,a.rendering=n,a.tail=n.sibling,a.lastEffect=t.lastEffect,a.renderingStartTime=Zr(),n.sibling=null,t=Bo.current,ur(Bo,s?1&t|2:1&t),n):null;case 23:case 24:return Sc(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==a.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function cs(e){switch(e.tag){case 1:hr(e.type)&&vr();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Do(),dr(br),dr(fr),Ko(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Fo(e),null;case 13:return dr(Bo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return dr(Bo),null;case 4:return Do(),null;case 10:return ao(e),null;case 23:case 24:return Sc(),null;default:return null}}function ls(e,t){try{var n="",a=t;do{n+=V(a),a=a.return}while(a);var r=n}catch(o){r="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:r}}function ds(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}qi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Yi=function(e,t,n,a){var o=e.memoizedProps;if(o!==a){e=t.stateNode,Po(No.current);var i,s=null;switch(n){case"input":o=J(e,o),a=J(e,a),s=[];break;case"option":o=oe(e,o),a=oe(e,a),s=[];break;case"select":o=r({},o,{value:void 0}),a=r({},a,{value:void 0}),s=[];break;case"textarea":o=se(e,o),a=se(e,a),s=[];break;default:"function"!=typeof o.onClick&&"function"==typeof a.onClick&&(e.onclick=za)}for(u in xe(n,a),n=null,o)if(!a.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(i in l)l.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(c.hasOwnProperty(u)?s||(s=[]):(s=s||[]).push(u,null));for(u in a){var d=a[u];if(l=null!=o?o[u]:void 0,a.hasOwnProperty(u)&&d!==l&&(null!=d||null!=l))if("style"===u)if(l){for(i in l)!l.hasOwnProperty(i)||d&&d.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in d)d.hasOwnProperty(i)&&l[i]!==d[i]&&(n||(n={}),n[i]=d[i])}else n||(s||(s=[]),s.push(u,n)),n=d;else"dangerouslySetInnerHTML"===u?(d=d?d.__html:void 0,l=l?l.__html:void 0,null!=d&&l!==d&&(s=s||[]).push(u,d)):"children"===u?"string"!=typeof d&&"number"!=typeof d||(s=s||[]).push(u,""+d):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(c.hasOwnProperty(u)?(null!=d&&"onScroll"===u&&Na("scroll",e),s||l===d||(s=[])):"object"==typeof d&&null!==d&&d.$$typeof===D?d.toString():(s=s||[]).push(u,d))}n&&(s=s||[]).push("style",n);var u=s;(t.updateQueue=u)&&(t.flags|=4)}},Ki=function(e,t,n,a){n!==a&&(t.flags|=4)};var us="function"==typeof WeakMap?WeakMap:Map;function ps(e,t,n){(n=uo(-1,n)).tag=3,n.payload={element:null};var a=t.value;return n.callback=function(){Ks||(Ks=!0,Xs=a),ds(0,t)},n}function fs(e,t,n){(n=uo(-1,n)).tag=3;var a=e.type.getDerivedStateFromError;if("function"==typeof a){var r=t.value;n.payload=function(){return ds(0,t),a(r)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof a&&(null===Qs?Qs=new Set([this]):Qs.add(this),ds(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var bs="function"==typeof WeakSet?WeakSet:Set;function ms(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zc(e,n)}else t.current=null}function gs(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,a=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Xr(t.type,n),a),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Wa(t.stateNode.containerInfo))}throw Error(i(163))}function hs(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var a=e.create;e.destroy=a()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var r=e;a=r.next,0!=(4&(r=r.tag))&&0!=(1&r)&&(Fc(n,e),Mc(n,e)),e=a}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(a=n.elementType===n.type?t.memoizedProps:Xr(n.type,t.memoizedProps),e.componentDidUpdate(a,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&mo(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}mo(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Za(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&_t(n)))))}throw Error(i(163))}function vs(e,t){for(var n=e;;){if(5===n.tag){var a=n.stateNode;if(t)"function"==typeof(a=a.style).setProperty?a.setProperty("display","none","important"):a.display="none";else{a=n.stateNode;var r=n.memoizedProps.style;r=null!=r&&r.hasOwnProperty("display")?r.display:null,a.style.display=we("display",r)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function ys(e,t){if(xr&&"function"==typeof xr.onCommitFiberUnmount)try{xr.onCommitFiberUnmount(Sr,t)}catch(o){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var a=n,r=a.destroy;if(a=a.tag,void 0!==r)if(0!=(4&a))Fc(t,n);else{a=t;try{r()}catch(o){zc(a,o)}}n=n.next}while(n!==e)}break;case 1:if(ms(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){zc(t,o)}break;case 5:ms(t);break;case 4:Es(e,t)}}function ks(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function ws(e){return 5===e.tag||3===e.tag||4===e.tag}function _s(e){e:{for(var t=e.return;null!==t;){if(ws(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var a=!1;break;case 3:case 4:t=t.containerInfo,a=!0;break;default:throw Error(i(161))}16&n.flags&&(ve(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||ws(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}a?Ss(e,n,t):xs(e,n,t)}function Ss(e,t,n){var a=e.tag,r=5===a||6===a;if(r)e=r?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=za));else if(4!==a&&null!==(e=e.child))for(Ss(e,t,n),e=e.sibling;null!==e;)Ss(e,t,n),e=e.sibling}function xs(e,t,n){var a=e.tag,r=5===a||6===a;if(r)e=r?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==a&&null!==(e=e.child))for(xs(e,t,n),e=e.sibling;null!==e;)xs(e,t,n),e=e.sibling}function Es(e,t){for(var n,a,r=t,o=!1;;){if(!o){o=r.return;e:for(;;){if(null===o)throw Error(i(160));switch(n=o.stateNode,o.tag){case 5:a=!1;break e;case 3:case 4:n=n.containerInfo,a=!0;break e}o=o.return}o=!0}if(5===r.tag||6===r.tag){e:for(var s=e,c=r,l=c;;)if(ys(s,l),null!==l.child&&4!==l.tag)l.child.return=l,l=l.child;else{if(l===c)break e;for(;null===l.sibling;){if(null===l.return||l.return===c)break e;l=l.return}l.sibling.return=l.return,l=l.sibling}a?(s=n,c=r.stateNode,8===s.nodeType?s.parentNode.removeChild(c):s.removeChild(c)):n.removeChild(r.stateNode)}else if(4===r.tag){if(null!==r.child){n=r.stateNode.containerInfo,a=!0,r.child.return=r,r=r.child;continue}}else if(ys(e,r),null!==r.child){r.child.return=r,r=r.child;continue}if(r===t)break;for(;null===r.sibling;){if(null===r.return||r.return===t)return;4===(r=r.return).tag&&(o=!1)}r.sibling.return=r.return,r=r.sibling}}function Cs(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var a=n=n.next;do{3==(3&a.tag)&&(e=a.destroy,a.destroy=void 0,void 0!==e&&e()),a=a.next}while(a!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){a=t.memoizedProps;var r=null!==e?e.memoizedProps:a;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[Ja]=a,"input"===e&&"radio"===a.type&&null!=a.name&&te(n,a),Ee(e,r),t=Ee(e,a),r=0;r<o.length;r+=2){var s=o[r],c=o[r+1];"style"===s?_e(n,c):"dangerouslySetInnerHTML"===s?he(n,c):"children"===s?ve(n,c):k(n,s,c,t)}switch(e){case"input":ne(n,a);break;case"textarea":le(n,a);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!a.multiple,null!=(o=a.value)?ie(n,!!a.multiple,o,!1):e!==!!a.multiple&&(null!=a.defaultValue?ie(n,!!a.multiple,a.defaultValue,!0):ie(n,!!a.multiple,a.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,_t(n.containerInfo)));case 13:return null!==t.memoizedState&&(Gs=Zr(),vs(t.child,!0)),void Ts(t);case 19:return void Ts(t);case 23:case 24:return void vs(t,null!==t.memoizedState)}throw Error(i(163))}function Ts(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new bs),t.forEach((function(t){var a=Uc.bind(null,e,t);n.has(t)||(n.add(t),t.then(a,a))}))}}function As(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Ls=Math.ceil,Ns=w.ReactCurrentDispatcher,Is=w.ReactCurrentOwner,Os=0,Ps=null,Rs=null,Ds=0,Ms=0,Fs=lr(0),Bs=0,js=null,zs=0,$s=0,Us=0,Zs=0,Hs=null,Gs=0,Vs=1/0;function Ws(){Vs=Zr()+500}var qs,Ys=null,Ks=!1,Xs=null,Qs=null,Js=!1,ec=null,tc=90,nc=[],ac=[],rc=null,oc=0,ic=null,sc=-1,cc=0,lc=0,dc=null,uc=!1;function pc(){return 0!=(48&Os)?Zr():-1!==sc?sc:sc=Zr()}function fc(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Hr()?1:2;if(0===cc&&(cc=zs),0!==Kr.transition){0!==lc&&(lc=null!==Hs?Hs.pendingLanes:0),e=cc;var t=4186112&~lc;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Hr(),0!=(4&Os)&&98===e?e=zt(12,cc):e=zt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),cc),e}function bc(e,t,n){if(50<oc)throw oc=0,ic=null,Error(i(185));if(null===(e=mc(e,t)))return null;Zt(e,t,n),e===Ps&&(Us|=t,4===Bs&&vc(e,Ds));var a=Hr();1===t?0!=(8&Os)&&0==(48&Os)?yc(e):(gc(e,n),0===Os&&(Ws(),qr())):(0==(4&Os)||98!==a&&99!==a||(null===rc?rc=new Set([e]):rc.add(e)),gc(e,n)),Hs=e}function mc(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gc(e,t){for(var n=e.callbackNode,a=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,s=e.pendingLanes;0<s;){var c=31-Ht(s),l=1<<c,d=o[c];if(-1===d){if(0==(l&a)||0!=(l&r)){d=t,Ft(l);var u=Mt;o[c]=10<=u?d+250:6<=u?d+5e3:-1}}else d<=t&&(e.expiredLanes|=l);s&=~l}if(a=Bt(e,e===Ps?Ds:0),t=Mt,0===a)null!==n&&(n!==Fr&&Tr(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Fr&&Tr(n)}15===t?(n=yc.bind(null,e),null===jr?(jr=[n],zr=Cr(Or,Yr)):jr.push(n),n=Fr):14===t?n=Wr(99,yc.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Wr(n,hc.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function hc(e){if(sc=-1,lc=cc=0,0!=(48&Os))throw Error(i(327));var t=e.callbackNode;if(Dc()&&e.callbackNode!==t)return null;var n=Bt(e,e===Ps?Ds:0);if(0===n)return null;var a=n,r=Os;Os|=16;var o=Cc();for(Ps===e&&Ds===a||(Ws(),xc(e,a));;)try{Lc();break}catch(c){Ec(e,c)}if(no(),Ns.current=o,Os=r,null!==Rs?a=0:(Ps=null,Ds=0,a=Bs),0!=(zs&Us))xc(e,0);else if(0!==a){if(2===a&&(Os|=64,e.hydrate&&(e.hydrate=!1,Wa(e.containerInfo)),0!==(n=jt(e))&&(a=Tc(e,n))),1===a)throw t=js,xc(e,0),vc(e,n),gc(e,Zr()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,a){case 0:case 1:throw Error(i(345));case 2:case 5:Oc(e);break;case 3:if(vc(e,n),(62914560&n)===n&&10<(a=Gs+500-Zr())){if(0!==Bt(e,0))break;if(((r=e.suspendedLanes)&n)!==n){pc(),e.pingedLanes|=e.suspendedLanes&r;break}e.timeoutHandle=Ga(Oc.bind(null,e),a);break}Oc(e);break;case 4:if(vc(e,n),(4186112&n)===n)break;for(a=e.eventTimes,r=-1;0<n;){var s=31-Ht(n);o=1<<s,(s=a[s])>r&&(r=s),n&=~o}if(n=r,10<(n=(120>(n=Zr()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ls(n/1960))-n)){e.timeoutHandle=Ga(Oc.bind(null,e),n);break}Oc(e);break;default:throw Error(i(329))}}return gc(e,Zr()),e.callbackNode===t?hc.bind(null,e):null}function vc(e,t){for(t&=~Zs,t&=~Us,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),a=1<<n;e[n]=-1,t&=~a}}function yc(e){if(0!=(48&Os))throw Error(i(327));if(Dc(),e===Ps&&0!=(e.expiredLanes&Ds)){var t=Ds,n=Tc(e,t);0!=(zs&Us)&&(n=Tc(e,t=Bt(e,t)))}else n=Tc(e,t=Bt(e,0));if(0!==e.tag&&2===n&&(Os|=64,e.hydrate&&(e.hydrate=!1,Wa(e.containerInfo)),0!==(t=jt(e))&&(n=Tc(e,t))),1===n)throw n=js,xc(e,0),vc(e,t),gc(e,Zr()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Oc(e),gc(e,Zr()),null}function kc(e,t){var n=Os;Os|=1;try{return e(t)}finally{0===(Os=n)&&(Ws(),qr())}}function wc(e,t){var n=Os;Os&=-2,Os|=8;try{return e(t)}finally{0===(Os=n)&&(Ws(),qr())}}function _c(e,t){ur(Fs,Ms),Ms|=t,zs|=t}function Sc(){Ms=Fs.current,dr(Fs)}function xc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Va(n)),null!==Rs)for(n=Rs.return;null!==n;){var a=n;switch(a.tag){case 1:null!=(a=a.type.childContextTypes)&&vr();break;case 3:Do(),dr(br),dr(fr),Ko();break;case 5:Fo(a);break;case 4:Do();break;case 13:case 19:dr(Bo);break;case 10:ao(a);break;case 23:case 24:Sc()}n=n.return}Ps=e,Rs=Vc(e.current,null),Ds=Ms=zs=t,Bs=0,js=null,Zs=Us=$s=0}function Ec(e,t){for(;;){var n=Rs;try{if(no(),Xo.current=Oi,ai){for(var a=ei.memoizedState;null!==a;){var r=a.queue;null!==r&&(r.pending=null),a=a.next}ai=!1}if(Jo=0,ni=ti=ei=null,ri=!1,Is.current=null,null===n||null===n.return){Bs=1,js=t,Rs=null;break}e:{var o=e,i=n.return,s=n,c=t;if(t=Ds,s.flags|=2048,s.firstEffect=s.lastEffect=null,null!==c&&"object"==typeof c&&"function"==typeof c.then){var l=c;if(0==(2&s.mode)){var d=s.alternate;d?(s.updateQueue=d.updateQueue,s.memoizedState=d.memoizedState,s.lanes=d.lanes):(s.updateQueue=null,s.memoizedState=null)}var u=0!=(1&Bo.current),p=i;do{var f;if(f=13===p.tag){var b=p.memoizedState;if(null!==b)f=null!==b.dehydrated;else{var m=p.memoizedProps;f=void 0!==m.fallback&&(!0!==m.unstable_avoidThisFallback||!u)}}if(f){var g=p.updateQueue;if(null===g){var h=new Set;h.add(l),p.updateQueue=h}else g.add(l);if(0==(2&p.mode)){if(p.flags|=64,s.flags|=16384,s.flags&=-2981,1===s.tag)if(null===s.alternate)s.tag=17;else{var v=uo(-1,1);v.tag=2,po(s,v)}s.lanes|=1;break e}c=void 0,s=t;var y=o.pingCache;if(null===y?(y=o.pingCache=new us,c=new Set,y.set(l,c)):void 0===(c=y.get(l))&&(c=new Set,y.set(l,c)),!c.has(s)){c.add(s);var k=$c.bind(null,o,l,s);l.then(k,k)}p.flags|=4096,p.lanes=t;break e}p=p.return}while(null!==p);c=Error((W(s.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Bs&&(Bs=2),c=ls(c,s),p=i;do{switch(p.tag){case 3:o=c,p.flags|=4096,t&=-t,p.lanes|=t,fo(p,ps(0,o,t));break e;case 1:o=c;var w=p.type,_=p.stateNode;if(0==(64&p.flags)&&("function"==typeof w.getDerivedStateFromError||null!==_&&"function"==typeof _.componentDidCatch&&(null===Qs||!Qs.has(_)))){p.flags|=4096,t&=-t,p.lanes|=t,fo(p,fs(p,o,t));break e}}p=p.return}while(null!==p)}Ic(n)}catch(S){t=S,Rs===n&&null!==n&&(Rs=n=n.return);continue}break}}function Cc(){var e=Ns.current;return Ns.current=Oi,null===e?Oi:e}function Tc(e,t){var n=Os;Os|=16;var a=Cc();for(Ps===e&&Ds===t||xc(e,t);;)try{Ac();break}catch(r){Ec(e,r)}if(no(),Os=n,Ns.current=a,null!==Rs)throw Error(i(261));return Ps=null,Ds=0,Bs}function Ac(){for(;null!==Rs;)Nc(Rs)}function Lc(){for(;null!==Rs&&!Ar();)Nc(Rs)}function Nc(e){var t=qs(e.alternate,e,Ms);e.memoizedProps=e.pendingProps,null===t?Ic(e):Rs=t,Is.current=null}function Ic(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ss(n,t,Ms)))return void(Rs=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Ms)||0==(4&n.mode)){for(var a=0,r=n.child;null!==r;)a|=r.lanes|r.childLanes,r=r.sibling;n.childLanes=a}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=cs(t)))return n.flags&=2047,void(Rs=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Rs=t);Rs=t=e}while(null!==t);0===Bs&&(Bs=5)}function Oc(e){var t=Hr();return Vr(99,Pc.bind(null,e,t)),null}function Pc(e,t){do{Dc()}while(null!==ec);if(0!=(48&Os))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var a=n.lanes|n.childLanes,r=a,o=e.pendingLanes&~r;e.pendingLanes=r,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=r,e.mutableReadLanes&=r,e.entangledLanes&=r,r=e.entanglements;for(var s=e.eventTimes,c=e.expirationTimes;0<o;){var l=31-Ht(o),d=1<<l;r[l]=0,s[l]=-1,c[l]=-1,o&=~d}if(null!==rc&&0==(24&a)&&rc.has(e)&&rc.delete(e),e===Ps&&(Rs=Ps=null,Ds=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,a=n.firstEffect):a=n:a=n.firstEffect,null!==a){if(r=Os,Os|=32,Is.current=null,$a=Yt,ha(s=ga())){if("selectionStart"in s)c={start:s.selectionStart,end:s.selectionEnd};else e:if(c=(c=s.ownerDocument)&&c.defaultView||window,(d=c.getSelection&&c.getSelection())&&0!==d.rangeCount){c=d.anchorNode,o=d.anchorOffset,l=d.focusNode,d=d.focusOffset;try{c.nodeType,l.nodeType}catch(C){c=null;break e}var u=0,p=-1,f=-1,b=0,m=0,g=s,h=null;t:for(;;){for(var v;g!==c||0!==o&&3!==g.nodeType||(p=u+o),g!==l||0!==d&&3!==g.nodeType||(f=u+d),3===g.nodeType&&(u+=g.nodeValue.length),null!==(v=g.firstChild);)h=g,g=v;for(;;){if(g===s)break t;if(h===c&&++b===o&&(p=u),h===l&&++m===d&&(f=u),null!==(v=g.nextSibling))break;h=(g=h).parentNode}g=v}c=-1===p||-1===f?null:{start:p,end:f}}else c=null;c=c||{start:0,end:0}}else c=null;Ua={focusedElem:s,selectionRange:c},Yt=!1,dc=null,uc=!1,Ys=a;do{try{Rc()}catch(C){if(null===Ys)throw Error(i(330));zc(Ys,C),Ys=Ys.nextEffect}}while(null!==Ys);dc=null,Ys=a;do{try{for(s=e;null!==Ys;){var y=Ys.flags;if(16&y&&ve(Ys.stateNode,""),128&y){var k=Ys.alternate;if(null!==k){var w=k.ref;null!==w&&("function"==typeof w?w(null):w.current=null)}}switch(1038&y){case 2:_s(Ys),Ys.flags&=-3;break;case 6:_s(Ys),Ys.flags&=-3,Cs(Ys.alternate,Ys);break;case 1024:Ys.flags&=-1025;break;case 1028:Ys.flags&=-1025,Cs(Ys.alternate,Ys);break;case 4:Cs(Ys.alternate,Ys);break;case 8:Es(s,c=Ys);var _=c.alternate;ks(c),null!==_&&ks(_)}Ys=Ys.nextEffect}}catch(C){if(null===Ys)throw Error(i(330));zc(Ys,C),Ys=Ys.nextEffect}}while(null!==Ys);if(w=Ua,k=ga(),y=w.focusedElem,s=w.selectionRange,k!==y&&y&&y.ownerDocument&&ma(y.ownerDocument.documentElement,y)){null!==s&&ha(y)&&(k=s.start,void 0===(w=s.end)&&(w=k),"selectionStart"in y?(y.selectionStart=k,y.selectionEnd=Math.min(w,y.value.length)):(w=(k=y.ownerDocument||document)&&k.defaultView||window).getSelection&&(w=w.getSelection(),c=y.textContent.length,_=Math.min(s.start,c),s=void 0===s.end?_:Math.min(s.end,c),!w.extend&&_>s&&(c=s,s=_,_=c),c=ba(y,_),o=ba(y,s),c&&o&&(1!==w.rangeCount||w.anchorNode!==c.node||w.anchorOffset!==c.offset||w.focusNode!==o.node||w.focusOffset!==o.offset)&&((k=k.createRange()).setStart(c.node,c.offset),w.removeAllRanges(),_>s?(w.addRange(k),w.extend(o.node,o.offset)):(k.setEnd(o.node,o.offset),w.addRange(k))))),k=[];for(w=y;w=w.parentNode;)1===w.nodeType&&k.push({element:w,left:w.scrollLeft,top:w.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<k.length;y++)(w=k[y]).element.scrollLeft=w.left,w.element.scrollTop=w.top}Yt=!!$a,Ua=$a=null,e.current=n,Ys=a;do{try{for(y=e;null!==Ys;){var S=Ys.flags;if(36&S&&hs(y,Ys.alternate,Ys),128&S){k=void 0;var x=Ys.ref;if(null!==x){var E=Ys.stateNode;Ys.tag,k=E,"function"==typeof x?x(k):x.current=k}}Ys=Ys.nextEffect}}catch(C){if(null===Ys)throw Error(i(330));zc(Ys,C),Ys=Ys.nextEffect}}while(null!==Ys);Ys=null,Br(),Os=r}else e.current=n;if(Js)Js=!1,ec=e,tc=t;else for(Ys=a;null!==Ys;)t=Ys.nextEffect,Ys.nextEffect=null,8&Ys.flags&&((S=Ys).sibling=null,S.stateNode=null),Ys=t;if(0===(a=e.pendingLanes)&&(Qs=null),1===a?e===ic?oc++:(oc=0,ic=e):oc=0,n=n.stateNode,xr&&"function"==typeof xr.onCommitFiberRoot)try{xr.onCommitFiberRoot(Sr,n,void 0,64==(64&n.current.flags))}catch(C){}if(gc(e,Zr()),Ks)throw Ks=!1,e=Xs,Xs=null,e;return 0!=(8&Os)||qr(),null}function Rc(){for(;null!==Ys;){var e=Ys.alternate;uc||null===dc||(0!=(8&Ys.flags)?et(Ys,dc)&&(uc=!0):13===Ys.tag&&As(e,Ys)&&et(Ys,dc)&&(uc=!0));var t=Ys.flags;0!=(256&t)&&gs(e,Ys),0==(512&t)||Js||(Js=!0,Wr(97,(function(){return Dc(),null}))),Ys=Ys.nextEffect}}function Dc(){if(90!==tc){var e=97<tc?97:tc;return tc=90,Vr(e,Bc)}return!1}function Mc(e,t){nc.push(t,e),Js||(Js=!0,Wr(97,(function(){return Dc(),null})))}function Fc(e,t){ac.push(t,e),Js||(Js=!0,Wr(97,(function(){return Dc(),null})))}function Bc(){if(null===ec)return!1;var e=ec;if(ec=null,0!=(48&Os))throw Error(i(331));var t=Os;Os|=32;var n=ac;ac=[];for(var a=0;a<n.length;a+=2){var r=n[a],o=n[a+1],s=r.destroy;if(r.destroy=void 0,"function"==typeof s)try{s()}catch(l){if(null===o)throw Error(i(330));zc(o,l)}}for(n=nc,nc=[],a=0;a<n.length;a+=2){r=n[a],o=n[a+1];try{var c=r.create;r.destroy=c()}catch(l){if(null===o)throw Error(i(330));zc(o,l)}}for(c=e.current.firstEffect;null!==c;)e=c.nextEffect,c.nextEffect=null,8&c.flags&&(c.sibling=null,c.stateNode=null),c=e;return Os=t,qr(),!0}function jc(e,t,n){po(e,t=ps(0,t=ls(n,t),1)),t=pc(),null!==(e=mc(e,1))&&(Zt(e,1,t),gc(e,t))}function zc(e,t){if(3===e.tag)jc(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){jc(n,e,t);break}if(1===n.tag){var a=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof a.componentDidCatch&&(null===Qs||!Qs.has(a))){var r=fs(n,e=ls(t,e),1);if(po(n,r),r=pc(),null!==(n=mc(n,1)))Zt(n,1,r),gc(n,r);else if("function"==typeof a.componentDidCatch&&(null===Qs||!Qs.has(a)))try{a.componentDidCatch(t,e)}catch(o){}break}}n=n.return}}function $c(e,t,n){var a=e.pingCache;null!==a&&a.delete(t),t=pc(),e.pingedLanes|=e.suspendedLanes&n,Ps===e&&(Ds&n)===n&&(4===Bs||3===Bs&&(62914560&Ds)===Ds&&500>Zr()-Gs?xc(e,0):Zs|=n),gc(e,t)}function Uc(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Hr()?1:2:(0===cc&&(cc=zs),0===(t=$t(62914560&~cc))&&(t=4194304))),n=pc(),null!==(e=mc(e,t))&&(Zt(e,t,n),gc(e,n))}function Zc(e,t,n,a){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=a,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Hc(e,t,n,a){return new Zc(e,t,n,a)}function Gc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vc(e,t){var n=e.alternate;return null===n?((n=Hc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Wc(e,t,n,a,r,o){var s=2;if(a=e,"function"==typeof e)Gc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case x:return qc(n.children,r,o,t);case M:s=8,r|=16;break;case E:s=8,r|=1;break;case C:return(e=Hc(12,n,t,8|r)).elementType=C,e.type=C,e.lanes=o,e;case N:return(e=Hc(13,n,t,r)).type=N,e.elementType=N,e.lanes=o,e;case I:return(e=Hc(19,n,t,r)).elementType=I,e.lanes=o,e;case F:return Yc(n,r,o,t);case B:return(e=Hc(24,n,t,r)).elementType=B,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:s=10;break e;case A:s=9;break e;case L:s=11;break e;case O:s=14;break e;case P:s=16,a=null;break e;case R:s=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Hc(s,n,t,r)).elementType=e,t.type=a,t.lanes=o,t}function qc(e,t,n,a){return(e=Hc(7,e,a,t)).lanes=n,e}function Yc(e,t,n,a){return(e=Hc(23,e,a,t)).elementType=F,e.lanes=n,e}function Kc(e,t,n){return(e=Hc(6,e,null,t)).lanes=n,e}function Xc(e,t,n){return(t=Hc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Qc(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Jc(e,t,n){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==a?null:""+a,children:e,containerInfo:t,implementation:n}}function el(e,t,n,a){var r=t.current,o=pc(),s=fc(r);e:if(n){t:{if(Ke(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var c=n;do{switch(c.tag){case 3:c=c.stateNode.context;break t;case 1:if(hr(c.type)){c=c.stateNode.__reactInternalMemoizedMergedChildContext;break t}}c=c.return}while(null!==c);throw Error(i(171))}if(1===n.tag){var l=n.type;if(hr(l)){n=kr(n,l,c);break e}}n=c}else n=pr;return null===t.context?t.context=n:t.pendingContext=n,(t=uo(o,s)).payload={element:e},null!==(a=void 0===a?null:a)&&(t.callback=a),po(r,t),bc(r,s,o),s}function tl(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function nl(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function al(e,t){nl(e,t),(e=e.alternate)&&nl(e,t)}function rl(e,t,n){var a=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Qc(e,t,null!=n&&!0===n.hydrate),t=Hc(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,co(t),e[er]=n.current,Oa(8===e.nodeType?e.parentNode:e),a)for(e=0;e<a.length;e++){var r=(t=a[e])._getVersion;r=r(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,r]:n.mutableSourceEagerHydrationData.push(t,r)}this._internalRoot=n}function ol(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function il(e,t,n,a,r){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if("function"==typeof r){var s=r;r=function(){var e=tl(i);s.call(e)}}el(t,i,e,r)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new rl(e,0,t?{hydrate:!0}:void 0)}(n,a),i=o._internalRoot,"function"==typeof r){var c=r;r=function(){var e=tl(i);c.call(e)}}wc((function(){el(t,i,e,r)}))}return tl(i)}function sl(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ol(t))throw Error(i(200));return Jc(e,t,null,n)}qs=function(e,t,n){var a=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||br.current)Fi=!0;else{if(0==(n&a)){switch(Fi=!1,t.tag){case 3:Wi(t),qo();break;case 5:Mo(t);break;case 1:hr(t.type)&&wr(t);break;case 4:Ro(t,t.stateNode.containerInfo);break;case 10:a=t.memoizedProps.value;var r=t.type._context;ur(Qr,r._currentValue),r._currentValue=a;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Qi(e,t,n):(ur(Bo,1&Bo.current),null!==(t=os(e,t,n))?t.sibling:null);ur(Bo,1&Bo.current);break;case 19:if(a=0!=(n&t.childLanes),0!=(64&e.flags)){if(a)return rs(e,t,n);t.flags|=64}if(null!==(r=t.memoizedState)&&(r.rendering=null,r.tail=null,r.lastEffect=null),ur(Bo,Bo.current),a)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return os(e,t,n)}Fi=0!=(16384&e.flags)}else Fi=!1;switch(t.lanes=0,t.tag){case 2:if(a=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,r=gr(t,fr.current),oo(t,n),r=si(null,t,a,e,r,n),t.flags|=1,"object"==typeof r&&null!==r&&"function"==typeof r.render&&void 0===r.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,hr(a)){var o=!0;wr(t)}else o=!1;t.memoizedState=null!==r.state&&void 0!==r.state?r.state:null,co(t);var s=a.getDerivedStateFromProps;"function"==typeof s&&ho(t,a,s,e),r.updater=vo,t.stateNode=r,r._reactInternals=t,_o(t,a,e,n),t=Vi(null,t,a,!0,o,n)}else t.tag=0,Bi(null,t,r,n),t=t.child;return t;case 16:r=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Gc(e)?1:0;if(null!=e){if((e=e.$$typeof)===L)return 11;if(e===O)return 14}return 2}(r),e=Xr(r,e),o){case 0:t=Hi(null,t,r,e,n);break e;case 1:t=Gi(null,t,r,e,n);break e;case 11:t=ji(null,t,r,e,n);break e;case 14:t=zi(null,t,r,Xr(r.type,e),a,n);break e}throw Error(i(306,r,""))}return t;case 0:return a=t.type,r=t.pendingProps,Hi(e,t,a,r=t.elementType===a?r:Xr(a,r),n);case 1:return a=t.type,r=t.pendingProps,Gi(e,t,a,r=t.elementType===a?r:Xr(a,r),n);case 3:if(Wi(t),a=t.updateQueue,null===e||null===a)throw Error(i(282));if(a=t.pendingProps,r=null!==(r=t.memoizedState)?r.element:null,lo(e,t),bo(t,a,null,n),(a=t.memoizedState.element)===r)qo(),t=os(e,t,n);else{if((o=(r=t.stateNode).hydrate)&&($o=qa(t.stateNode.containerInfo.firstChild),zo=t,o=Uo=!0),o){if(null!=(e=r.mutableSourceEagerHydrationData))for(r=0;r<e.length;r+=2)(o=e[r])._workInProgressVersionPrimary=e[r+1],Yo.push(o);for(n=Ao(t,null,a,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Bi(e,t,a,n),qo();t=t.child}return t;case 5:return Mo(t),null===e&&Go(t),a=t.type,r=t.pendingProps,o=null!==e?e.memoizedProps:null,s=r.children,Ha(a,r)?s=null:null!==o&&Ha(a,o)&&(t.flags|=16),Zi(e,t),Bi(e,t,s,n),t.child;case 6:return null===e&&Go(t),null;case 13:return Qi(e,t,n);case 4:return Ro(t,t.stateNode.containerInfo),a=t.pendingProps,null===e?t.child=To(t,null,a,n):Bi(e,t,a,n),t.child;case 11:return a=t.type,r=t.pendingProps,ji(e,t,a,r=t.elementType===a?r:Xr(a,r),n);case 7:return Bi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Bi(e,t,t.pendingProps.children,n),t.child;case 10:e:{a=t.type._context,r=t.pendingProps,s=t.memoizedProps,o=r.value;var c=t.type._context;if(ur(Qr,c._currentValue),c._currentValue=o,null!==s)if(c=s.value,0===(o=da(c,o)?0:0|("function"==typeof a._calculateChangedBits?a._calculateChangedBits(c,o):1073741823))){if(s.children===r.children&&!br.current){t=os(e,t,n);break e}}else for(null!==(c=t.child)&&(c.return=t);null!==c;){var l=c.dependencies;if(null!==l){s=c.child;for(var d=l.firstContext;null!==d;){if(d.context===a&&0!=(d.observedBits&o)){1===c.tag&&((d=uo(-1,n&-n)).tag=2,po(c,d)),c.lanes|=n,null!==(d=c.alternate)&&(d.lanes|=n),ro(c.return,n),l.lanes|=n;break}d=d.next}}else s=10===c.tag&&c.type===t.type?null:c.child;if(null!==s)s.return=c;else for(s=c;null!==s;){if(s===t){s=null;break}if(null!==(c=s.sibling)){c.return=s.return,s=c;break}s=s.return}c=s}Bi(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,a=(o=t.pendingProps).children,oo(t,n),a=a(r=io(r,o.unstable_observedBits)),t.flags|=1,Bi(e,t,a,n),t.child;case 14:return o=Xr(r=t.type,t.pendingProps),zi(e,t,r,o=Xr(r.type,o),a,n);case 15:return $i(e,t,t.type,t.pendingProps,a,n);case 17:return a=t.type,r=t.pendingProps,r=t.elementType===a?r:Xr(a,r),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,hr(a)?(e=!0,wr(t)):e=!1,oo(t,n),ko(t,a,r),_o(t,a,r,n),Vi(null,t,a,!0,e,n);case 19:return rs(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},rl.prototype.render=function(e){el(e,this._internalRoot,null,null)},rl.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;el(null,e,null,(function(){t[er]=null}))},tt=function(e){13===e.tag&&(bc(e,4,pc()),al(e,4))},nt=function(e){13===e.tag&&(bc(e,67108864,pc()),al(e,67108864))},at=function(e){if(13===e.tag){var t=pc(),n=fc(e);bc(e,n,t),al(e,n)}},rt=function(e,t){return t()},Te=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var a=n[t];if(a!==e&&a.form===e.form){var r=or(a);if(!r)throw Error(i(90));X(a),ne(a,r)}}}break;case"textarea":le(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Pe=kc,Re=function(e,t,n,a,r){var o=Os;Os|=4;try{return Vr(98,e.bind(null,t,n,a,r))}finally{0===(Os=o)&&(Ws(),qr())}},De=function(){0==(49&Os)&&(function(){if(null!==rc){var e=rc;rc=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gc(e,Zr())}))}qr()}(),Dc())},Me=function(e,t){var n=Os;Os|=2;try{return e(t)}finally{0===(Os=n)&&(Ws(),qr())}};var cl={Events:[ar,rr,or,Ie,Oe,Dc,{current:!1}]},ll={findFiberByHostInstance:nr,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},dl={bundleType:ll.bundleType,version:ll.version,rendererPackageName:ll.rendererPackageName,rendererConfig:ll.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Je(e))?null:e.stateNode},findFiberByHostInstance:ll.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ul=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ul.isDisabled&&ul.supportsFiber)try{Sr=ul.inject(dl),xr=ul}catch(ge){}}t.hydrate=function(e,t,n){if(!ol(t))throw Error(i(200));return il(null,e,t,!0,n)}},73935:(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(64448)},69590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,a="function"==typeof Set,r="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(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,c,l,d;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(c=s;0!=c--;)if(!o(e[c],i[c]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(d=e.entries();!(c=d.next()).done;)if(!i.has(c.value[0]))return!1;for(d=e.entries();!(c=d.next()).done;)if(!o(c.value[1],i.get(c.value[0])))return!1;return!0}if(a&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(d=e.entries();!(c=d.next()).done;)if(!i.has(c.value[0]))return!1;return!0}if(r&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(c=s;0!=c--;)if(e[c]!==i[c])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((s=(l=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(c=s;0!=c--;)if(!Object.prototype.hasOwnProperty.call(i,l[c]))return!1;if(t&&e instanceof Element)return!1;for(c=s;0!=c--;)if(("_owner"!==l[c]&&"__v"!==l[c]&&"__o"!==l[c]||!e.$$typeof)&&!o(e[l[c]],i[l[c]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},70405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>G,ql:()=>J});var a=n(67294),r=n(45697),o=n.n(r),i=n(69590),s=n.n(i),c=n(41143),l=n.n(c),d=n(96774),u=n.n(d);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,b(e,t)}function b(e,t){return b=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},b(e,t)}function m(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t.indexOf(n=o[a])>=0||(r[n]=e[n]);return r}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},h={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"]},k=Object.keys(g).map((function(e){return g[e]})),w={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},_=Object.keys(w).reduce((function(e,t){return e[w[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var a=e[n];if(Object.prototype.hasOwnProperty.call(a,t))return a[t]}return null},x=function(e){var t=S(e,g.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var a=S(e,"defaultTitle");return t||a||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[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var a=Object.keys(n),r=0;r<a.length;r+=1){var o=a[r].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},A=function(e,t,n){var a={};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 r={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var s=o[i],c=s.toLowerCase();-1===t.indexOf(c)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===c&&"stylesheet"===e[c].toLowerCase()||(n=c),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var l=e[n].toLowerCase();return a[n]||(a[n]={}),r[n]||(r[n]={}),!a[n][l]&&(r[n][l]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(r),i=0;i<o.length;i+=1){var s=o[i],c=p({},a[s],r[s]);a[s]=c}return e}),[]).reverse()},L=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},N=function(e){return Array.isArray(e)?e.join(""):e},I=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),a=0;a<n.length;a+=1)if(t[n[a]]&&t[n[a]].includes(e[n[a]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},O=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},P=[g.NOSCRIPT,g.SCRIPT,g.STYLE],R=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,"'")},D=function(e){return Object.keys(e).reduce((function(t,n){var a=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+a:a}),"")},M=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[w[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var r,o=((r={key:n})["data-rh"]=!0,r);return Object.keys(t).forEach((function(e){var n=w[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),a.createElement(e,o)}))},B=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(r={key:e=t.title})["data-rh"]=!0,o=M(n,r),[a.createElement(g.TITLE,o,e)];var e,n,r,o},toString:function(){return function(e,t,n,a){var r=D(n),o=N(t);return r?"<"+e+' data-rh="true" '+r+">"+R(o,a)+"</"+e+">":"<"+e+' data-rh="true">'+R(o,a)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return M(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,a){var r=Object.keys(a).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var r=void 0===a[t]?t:t+'="'+R(a[t],n)+'"';return e?e+" "+r:r}),""),o=a.innerHTML||a.cssText||"",i=-1===P.indexOf(e);return t+"<"+e+' data-rh="true" '+r+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},j=function(e){var t=e.baseTag,n=e.bodyAttributes,a=e.encode,r=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,s=e.title,c=void 0===s?"":s,l=e.titleAttributes,d=e.linkTags,u=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var b=function(e){var t=e.linkTags,n=e.scriptTags,a=e.encode,r=I(e.metaTags,y),o=I(t,h),i=I(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(g.META,r.priority),F(g.LINK,o.priority),F(g.SCRIPT,i.priority))},toString:function(){return B(g.META,r.priority,a)+" "+B(g.LINK,o.priority,a)+" "+B(g.SCRIPT,i.priority,a)}},metaTags:r.default,linkTags:o.default,scriptTags:i.default}}(e);f=b.priorityMethods,d=b.linkTags,u=b.metaTags,p=b.scriptTags}return{priority:f,base:B(g.BASE,t,a),bodyAttributes:B("bodyAttributes",n,a),htmlAttributes:B("htmlAttributes",r,a),link:B(g.LINK,d,a),meta:B(g.META,u,a),noscript:B(g.NOSCRIPT,o,a),script:B(g.SCRIPT,p,a),style:B(g.STYLE,i,a),title:B(g.TITLE,{title:c,titleAttributes:l},a)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=j({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=a.createContext({}),Z=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),H="undefined"!=typeof document,G=function(e){function t(n){var a;return(a=e.call(this,n)||this).helmetData=new $(a.props.context,t.canUseDOM),a}return f(t,e),t.prototype.render=function(){return a.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(a.Component);G.canUseDOM=H,G.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},G.defaultProps={context:{}},G.displayName="HelmetProvider";var V=function(e,t){var n,a=document.head||document.querySelector(g.HEAD),r=a.querySelectorAll(e+"[data-rh]"),o=[].slice.call(r),i=[];return t&&t.length&&t.forEach((function(t){var a=document.createElement(e);for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&("innerHTML"===r?a.innerHTML=t.innerHTML:"cssText"===r?a.styleSheet?a.styleSheet.cssText=t.cssText:a.appendChild(document.createTextNode(t.cssText)):a.setAttribute(r,void 0===t[r]?"":t[r]));a.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,a.isEqualNode(e)}))?o.splice(n,1):i.push(a)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return a.appendChild(e)})),{oldTags:o,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var a=n.getAttribute("data-rh"),r=a?a.split(","):[],o=[].concat(r),i=Object.keys(t),s=0;s<i.length;s+=1){var c=i[s],l=t[c]||"";n.getAttribute(c)!==l&&n.setAttribute(c,l),-1===r.indexOf(c)&&r.push(c);var d=o.indexOf(c);-1!==d&&o.splice(d,1)}for(var u=o.length-1;u>=0;u-=1)n.removeAttribute(o[u]);r.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,a=e.htmlAttributes,r=e.linkTags,o=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,c=e.scriptTags,l=e.styleTags,d=e.title,u=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,a),function(e,t){void 0!==e&&document.title!==e&&(document.title=N(e)),W(g.TITLE,t)}(d,u);var p={baseTag:V(g.BASE,n),linkTags:V(g.LINK,r),metaTags:V(g.META,o),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,c),styleTags:V(g.STYLE,l)},f={},b={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,a=t.oldTags;n.length&&(f[e]=n),a.length&&(b[e]=p[e].oldTags)})),t&&t(),s(e,f,b)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),r=0;r<n;r++)a[r]=arguments[r];return(t=e.call.apply(e,[this].concat(a))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!u()(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,a=n.setHelmet,r=null,o=(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(g.LINK,["rel","href"],e),metaTags:A(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:E(e),scriptTags:A(g.SCRIPT,["src","innerHTML"],e),styleTags:A(g.STYLE,["cssText"],e),title:x(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:L(e,"prioritizeSeoTags")});G.canUseDOM?(t=o,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){q(t,(function(){Y=null}))})):(q(t),Y=null)):j&&(r=j(o)),a(r)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(a.Component);K.propTypes={context:Z.isRequired},K.displayName="HelmetDispatcher";var X=["children"],Q=["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()(O(this.props,"helmetData"),O(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,a=e.arrayTypeChildren;return p({},a,((t={})[n.type]=[].concat(a[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,a=e.child,r=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(a.type){case g.TITLE:return p({},r,((t={})[a.type]=i,t.titleAttributes=p({},o),t));case g.BODY:return p({},r,{bodyAttributes:p({},o)});case g.HTML:return p({},r,{htmlAttributes:p({},o)});default:return p({},r,((n={})[a.type]=p({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var a;n=p({},n,((a={})[t]=e[t],a))})),n},n.warnOnInvalidChildren=function(e,t){return l()(k.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 "+k.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),l()(!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,r={};return a.Children.forEach(e,(function(e){if(e&&e.props){var a=e.props,o=a.children,i=m(a,X),s=Object.keys(i).reduce((function(e,t){return e[_[t]||t]=i[t],e}),{}),c=e.type;switch("symbol"==typeof c?c=c.toString():n.warnOnInvalidChildren(e,o),c){case g.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:s,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(r,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,Q),r=p({},n),o=n.helmetData;return t&&(r=this.mapChildrenToProps(t,r)),!o||o instanceof $||(o=new $(o.context,o.instances)),o?a.createElement(K,p({},r,{context:o.value,helmetData:void 0})):a.createElement(U.Consumer,null,(function(e){return a.createElement(K,p({},r,{context:e}))}))},t}(a.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},69921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,a=n?Symbol.for("react.element"):60103,r=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,c=n?Symbol.for("react.provider"):60109,l=n?Symbol.for("react.context"):60110,d=n?Symbol.for("react.async_mode"):60111,u=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,b=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,h=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,k=n?Symbol.for("react.scope"):60119;function w(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case a:switch(e=e.type){case d:case u:case o:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case l:case p:case g:case m:case c:return e;default:return t}}case r:return t}}}function _(e){return w(e)===u}t.AsyncMode=d,t.ConcurrentMode=u,t.ContextConsumer=l,t.ContextProvider=c,t.Element=a,t.ForwardRef=p,t.Fragment=o,t.Lazy=g,t.Memo=m,t.Portal=r,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return _(e)||w(e)===d},t.isConcurrentMode=_,t.isContextConsumer=function(e){return w(e)===l},t.isContextProvider=function(e){return w(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===a},t.isForwardRef=function(e){return w(e)===p},t.isFragment=function(e){return w(e)===o},t.isLazy=function(e){return w(e)===g},t.isMemo=function(e){return w(e)===m},t.isPortal=function(e){return w(e)===r},t.isProfiler=function(e){return w(e)===s},t.isStrictMode=function(e){return w(e)===i},t.isSuspense=function(e){return w(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===u||e===s||e===i||e===f||e===b||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===m||e.$$typeof===c||e.$$typeof===l||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===k||e.$$typeof===h)},t.typeOf=w},59864:(e,t,n)=>{"use strict";e.exports=n(69921)},68356:(e,t,n)=>{"use strict";function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(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 a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i.apply(this,arguments)}var s=n(67294),c=n(45697),l=[],d=[];function u(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(a){var r=u(e[a]);r.loading?t.loading=!0:(t.loaded[a]=r.loaded,t.error=r.error),n.push(r.promise),r.promise.then((function(e){t.loaded[a]=e})).catch((function(e){t.error=e}))}))}catch(a){t.error=a}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 b(e,t){var u,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var b=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),m=null;function g(){return m||(m=e(b.loader)),m.promise}return l.push(g),"function"==typeof b.webpack&&d.push((function(){if((0,b.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=u=function(t){function n(n){var a;return o(r(r(a=t.call(this,n)||this)),"retry",(function(){a.setState({error:null,loading:!0,timedOut:!1}),m=e(b.loader),a._loadModule()})),g(),a.state={error:m.error,pastDelay:!1,timedOut:!1,loading:m.loading,loaded:m.loaded},a}a(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(b.modules)&&b.modules.forEach((function(t){e.context.loadable.report(t)})),m.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof b.delay&&(0===b.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),b.delay)),"number"==typeof b.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),b.timeout));var n=function(){t({error:m.error,loaded:m.loaded,loading:m.loading}),e._clearTimeouts()};m.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(b.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?b.render(this.state.loaded,this.props):null},n}(s.Component),o(u,"contextTypes",{loadable:c.shape({report:c.func.isRequired})}),p}function m(e){return b(u,e)}m.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return b(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}a(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function h(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return h(e)}))}o(g,"propTypes",{report:c.func.isRequired}),o(g,"childContextTypes",{loadable:c.shape({report:c.func.isRequired}).isRequired}),m.Capture=g,m.preloadAll=function(){return new Promise((function(e,t){h(l).then(e,t)}))},m.preloadReady=function(){return new Promise((function(e,t){h(d).then(e,e)}))},e.exports=m},18790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var a=n(16550),r=n(87462),o=n(67294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var r=e.path?(0,a.LX)(t,e):n.length?n[n.length-1].match:a.F0.computeRootMatch(t);return r&&(n.push({route:e,match:r}),e.routes&&i(e.routes,t,n)),r})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(a.rs,n,e.map((function(e,n){return o.createElement(a.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,r.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,r.Z)({},n,t,{route:e}))}})}))):null}},73727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>d,rU:()=>g});var a=n(16550),r=n(75068),o=n(67294),i=n(99318),s=n(87462),c=n(63366),l=n(38776),d=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),r=0;r<n;r++)a[r]=arguments[r];return(t=e.call.apply(e,[this].concat(a))||this).history=(0,i.lX)(t.props),t}return(0,r.Z)(t,e),t.prototype.render=function(){return o.createElement(a.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var u=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},b=o.forwardRef;void 0===b&&(b=f);var m=b((function(e,t){var n=e.innerRef,a=e.navigate,r=e.onClick,i=(0,c.Z)(e,["innerRef","navigate","onClick"]),l=i.target,d=(0,s.Z)({},i,{onClick:function(e){try{r&&r(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||l&&"_self"!==l||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),a())}});return d.ref=f!==b&&t||n,o.createElement("a",d)}));var g=b((function(e,t){var n=e.component,r=void 0===n?m:n,d=e.replace,g=e.to,h=e.innerRef,v=(0,c.Z)(e,["component","replace","to","innerRef"]);return o.createElement(a.s6.Consumer,null,(function(e){e||(0,l.Z)(!1);var n=e.history,a=p(u(g,e.location),e.location),c=a?n.createHref(a):"",m=(0,s.Z)({},v,{href:c,navigate:function(){var t=u(g,e.location),a=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(d||a?n.replace:n.push)(t)}});return f!==b?m.ref=t||h:m.innerRef=h,o.createElement(r,m)}))})),h=function(e){return e},v=o.forwardRef;void 0===v&&(v=h);var y=v((function(e,t){var n=e["aria-current"],r=void 0===n?"page":n,i=e.activeClassName,d=void 0===i?"active":i,f=e.activeStyle,b=e.className,m=e.exact,y=e.isActive,k=e.location,w=e.sensitive,_=e.strict,S=e.style,x=e.to,E=e.innerRef,C=(0,c.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(a.s6.Consumer,null,(function(e){e||(0,l.Z)(!1);var n=k||e.location,i=p(u(x,n),n),c=i.pathname,T=c&&c.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=T?(0,a.LX)(n.pathname,{path:T,exact:m,sensitive:w,strict:_}):null,L=!!(y?y(A,n):A),N="function"==typeof b?b(L):b,I="function"==typeof S?S(L):S;L&&(N=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(" ")}(N,d),I=(0,s.Z)({},I,f));var O=(0,s.Z)({"aria-current":L&&r||null,className:N,style:I,to:i},C);return h!==v?O.ref=t||E:O.innerRef=E,o.createElement(g,O)}))}))},16550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>x,F0:()=>k,LX:()=>S,TH:()=>P,k6:()=>O,rs:()=>N,s6:()=>y});var a=n(75068),r=n(67294),o=n(45697),i=n.n(o),s=n(99318),c=n(38776),l=n(87462),d=n(14779),u=n.n(d),p=(n(59864),n(63366)),f=(n(8679),1073741823),b="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function m(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,a){e=n,t.forEach((function(t){return t(e,a)}))}}}var g=r.createContext||function(e,t){var n,o,s="__create-react-context-"+function(){var e="__global_unique_id__";return b[e]=(b[e]||0)+1}()+"__",c=function(e){function n(){for(var t,n=arguments.length,a=new Array(n),r=0;r<n;r++)a[r]=arguments[r];return(t=e.call.apply(e,[this].concat(a))||this).emitter=m(t.props.value),t}(0,a.Z)(n,e);var r=n.prototype;return r.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},r.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,a=this.props.value,r=e.value;((o=a)===(i=r)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(a,r):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},r.render=function(){return this.props.children},n}(r.Component);c.childContextTypes=((n={})[s]=i().object.isRequired,n);var l=function(t){function n(){for(var e,n=arguments.length,a=new Array(n),r=0;r<n;r++)a[r]=arguments[r];return(e=t.call.apply(t,[this].concat(a))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,a.Z)(n,t);var r=n.prototype;return r.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},r.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},r.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},r.getValue=function(){return this.context[s]?this.context[s].get():e},r.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(r.Component);return l.contextTypes=((o={})[s]=i().object,o),{Provider:c,Consumer:l}},h=function(e){var t=g();return t.displayName=e,t},v=h("Router-History"),y=h("Router"),k=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,a.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return r.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},r.createElement(v.Provider,{children:this.props.children||null,value:this.props.history}))},t}(r.Component);r.Component;r.Component;var w={},_=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,a=n.path,r=n.exact,o=void 0!==r&&r,i=n.strict,s=void 0!==i&&i,c=n.sensitive,l=void 0!==c&&c;return[].concat(a).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var a=function(e,t){var n=""+t.end+t.strict+t.sensitive,a=w[n]||(w[n]={});if(a[e])return a[e];var r=[],o={regexp:u()(e,r,t),keys:r};return _<1e4&&(a[e]=o,_++),o}(n,{end:o,strict:s,sensitive:l}),r=a.regexp,i=a.keys,c=r.exec(e);if(!c)return null;var d=c[0],p=c.slice(1),f=e===d;return o&&!f?null:{path:n,url:"/"===n&&""===d?"/":d,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var x=function(e){function t(){return e.apply(this,arguments)||this}return(0,a.Z)(t,e),t.prototype.render=function(){var e=this;return r.createElement(y.Consumer,null,(function(t){t||(0,c.Z)(!1);var n=e.props.location||t.location,a=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,l.Z)({},t,{location:n,match:a}),i=e.props,s=i.children,d=i.component,u=i.render;return Array.isArray(s)&&function(e){return 0===r.Children.count(e)}(s)&&(s=null),r.createElement(y.Provider,{value:o},o.match?s?"function"==typeof s?s(o):s:d?r.createElement(d,o):u?u(o):null:"function"==typeof s?s(o):null)}))},t}(r.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,l.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.Ep)(e)}function A(e){return function(){(0,c.Z)(!1)}}function L(){}r.Component;var N=function(e){function t(){return e.apply(this,arguments)||this}return(0,a.Z)(t,e),t.prototype.render=function(){var e=this;return r.createElement(y.Consumer,null,(function(t){t||(0,c.Z)(!1);var n,a,o=e.props.location||t.location;return r.Children.forEach(e.props.children,(function(e){if(null==a&&r.isValidElement(e)){n=e;var i=e.props.path||e.props.from;a=i?S(o.pathname,(0,l.Z)({},e.props,{path:i})):t.match}})),a?r.cloneElement(n,{location:o,computedMatch:a}):null}))},t}(r.Component);var I=r.useContext;function O(){return I(v)}function P(){return I(y).location}},72408:(e,t,n)=>{"use strict";var a=n(27418),r=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,s=60110,c=60112;t.Suspense=60113;var l=60115,d=60116;if("function"==typeof Symbol&&Symbol.for){var u=Symbol.for;r=u("react.element"),o=u("react.portal"),t.Fragment=u("react.fragment"),t.StrictMode=u("react.strict_mode"),t.Profiler=u("react.profiler"),i=u("react.provider"),s=u("react.context"),c=u("react.forward_ref"),t.Suspense=u("react.suspense"),l=u("react.memo"),d=u("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function f(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var b={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function g(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||b}function h(){}function v(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||b}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(f(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},h.prototype=g.prototype;var y=v.prototype=new h;y.constructor=v,a(y,g.prototype),y.isPureReactComponent=!0;var k={current:null},w=Object.prototype.hasOwnProperty,_={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var a,o={},i=null,s=null;if(null!=t)for(a in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)w.call(t,a)&&!_.hasOwnProperty(a)&&(o[a]=t[a]);var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){for(var l=Array(c),d=0;d<c;d++)l[d]=arguments[d+2];o.children=l}if(e&&e.defaultProps)for(a in c=e.defaultProps)void 0===o[a]&&(o[a]=c[a]);return{$$typeof:r,type:e,key:i,ref:s,props:o,_owner:k.current}}function x(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}var E=/\/+/g;function C(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 T(e,t,n,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case r:case o:c=!0}}if(c)return i=i(c=e),e=""===a?"."+C(c,0):a,Array.isArray(i)?(n="",null!=e&&(n=e.replace(E,"$&/")+"/"),T(i,t,n,"",(function(e){return e}))):null!=i&&(x(i)&&(i=function(e,t){return{$$typeof:r,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||c&&c.key===i.key?"":(""+i.key).replace(E,"$&/")+"/")+e)),t.push(i)),1;if(c=0,a=""===a?".":a+":",Array.isArray(e))for(var l=0;l<e.length;l++){var d=a+C(s=e[l],l);c+=T(s,t,n,d,i)}else if(d=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof d)for(e=d.call(e),l=0;!(s=e.next()).done;)c+=T(s=s.value,t,n,d=a+C(s,l++),i);else if("object"===s)throw t=""+e,Error(f(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function A(e,t,n){if(null==e)return e;var a=[],r=0;return T(e,a,"","",(function(e){return t.call(n,e,r++)})),a}function L(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var N={current:null};function I(){var e=N.current;if(null===e)throw Error(f(321));return e}var O={ReactCurrentDispatcher:N,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:k,IsSomeRendererActing:{current:!1},assign:a};t.Children={map:A,forEach:function(e,t,n){A(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return A(e,(function(){t++})),t},toArray:function(e){return A(e,(function(e){return e}))||[]},only:function(e){if(!x(e))throw Error(f(143));return e}},t.Component=g,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=O,t.cloneElement=function(e,t,n){if(null==e)throw Error(f(267,e));var o=a({},e.props),i=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=k.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(d in t)w.call(t,d)&&!_.hasOwnProperty(d)&&(o[d]=void 0===t[d]&&void 0!==l?l[d]:t[d])}var d=arguments.length-2;if(1===d)o.children=n;else if(1<d){l=Array(d);for(var u=0;u<d;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:r,type:e.type,key:i,ref:s,props:o,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.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=x,t.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:L}},t.memo=function(e,t){return{$$typeof:l,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return I().useCallback(e,t)},t.useContext=function(e,t){return I().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return I().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return I().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return I().useLayoutEffect(e,t)},t.useMemo=function(e,t){return I().useMemo(e,t)},t.useReducer=function(e,t,n){return I().useReducer(e,t,n)},t.useRef=function(e){return I().useRef(e)},t.useState=function(e){return I().useState(e)},t.version="17.0.2"},67294:(e,t,n)=>{"use strict";e.exports=n(72408)},60053:(e,t)=>{"use strict";var n,a,r,o;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,c=s.now();t.unstable_now=function(){return s.now()-c}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var l=null,d=null,u=function(){if(null!==l)try{var e=t.unstable_now();l(!0,e),l=null}catch(n){throw setTimeout(u,0),n}};n=function(e){null!==l?setTimeout(n,0,e):(l=e,setTimeout(u,0))},a=function(e,t){d=setTimeout(e,t)},r=function(){clearTimeout(d)},t.unstable_shouldYield=function(){return!1},o=t.unstable_forceFrameRate=function(){}}else{var p=window.setTimeout,f=window.clearTimeout;if("undefined"!=typeof console){var b=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof b&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var m=!1,g=null,h=-1,v=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},o=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var k=new MessageChannel,w=k.port2;k.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();y=e+v;try{g(!0,e)?w.postMessage(null):(m=!1,g=null)}catch(n){throw w.postMessage(null),n}}else m=!1},n=function(e){g=e,m||(m=!0,w.postMessage(null))},a=function(e,n){h=p((function(){e(t.unstable_now())}),n)},r=function(){f(h),h=-1}}function _(e,t){var n=e.length;e.push(t);e:for(;;){var a=n-1>>>1,r=e[a];if(!(void 0!==r&&0<E(r,t)))break e;e[a]=t,e[n]=r,n=a}}function S(e){return void 0===(e=e[0])?null:e}function x(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var a=0,r=e.length;a<r;){var o=2*(a+1)-1,i=e[o],s=o+1,c=e[s];if(void 0!==i&&0>E(i,n))void 0!==c&&0>E(c,i)?(e[a]=c,e[s]=n,a=s):(e[a]=i,e[o]=n,a=o);else{if(!(void 0!==c&&0>E(c,n)))break e;e[a]=c,e[s]=n,a=s}}}return t}return null}function E(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var C=[],T=[],A=1,L=null,N=3,I=!1,O=!1,P=!1;function R(e){for(var t=S(T);null!==t;){if(null===t.callback)x(T);else{if(!(t.startTime<=e))break;x(T),t.sortIndex=t.expirationTime,_(C,t)}t=S(T)}}function D(e){if(P=!1,R(e),!O)if(null!==S(C))O=!0,n(M);else{var t=S(T);null!==t&&a(D,t.startTime-e)}}function M(e,n){O=!1,P&&(P=!1,r()),I=!0;var o=N;try{for(R(n),L=S(C);null!==L&&(!(L.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=L.callback;if("function"==typeof i){L.callback=null,N=L.priorityLevel;var s=i(L.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?L.callback=s:L===S(C)&&x(C),R(n)}else x(C);L=S(C)}if(null!==L)var c=!0;else{var l=S(T);null!==l&&a(D,l.startTime-n),c=!1}return c}finally{L=null,N=o,I=!1}}var F=o;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(){O||I||(O=!0,n(M))},t.unstable_getCurrentPriorityLevel=function(){return N},t.unstable_getFirstCallbackNode=function(){return S(C)},t.unstable_next=function(e){switch(N){case 1:case 2:case 3:var t=3;break;default:t=N}var n=N;N=t;try{return e()}finally{N=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=N;N=e;try{return t()}finally{N=n}},t.unstable_scheduleCallback=function(e,o,i){var s=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?s+i:s:i=s,e){case 1:var c=-1;break;case 2:c=250;break;case 5:c=1073741823;break;case 4:c=1e4;break;default:c=5e3}return e={id:A++,callback:o,priorityLevel:e,startTime:i,expirationTime:c=i+c,sortIndex:-1},i>s?(e.sortIndex=i,_(T,e),null===S(C)&&e===S(T)&&(P?r():P=!0,a(D,i-s))):(e.sortIndex=c,_(C,e),O||I||(O=!0,n(M))),e},t.unstable_wrapCallback=function(e){var t=N;return function(){var n=N;N=t;try{return e.apply(this,arguments)}finally{N=n}}}},63840:(e,t,n)=>{"use strict";e.exports=n(60053)},96774:e=>{e.exports=function(e,t,n,a){var r=n?n.call(a,e,t):void 0;if(void 0!==r)return!!r;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c<o.length;c++){var l=o[c];if(!s(l))return!1;var d=e[l],u=t[l];if(!1===(r=n?n.call(a,d,u,l):void 0)||void 0===r&&d!==u)return!1}return!0}},53250:(e,t,n)=>{"use strict";var a=n(67294);var r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=a.useState,i=a.useEffect,s=a.useLayoutEffect,c=a.useDebugValue;function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch(a){return!0}}var d="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),a=o({inst:{value:n,getSnapshot:t}}),r=a[0].inst,d=a[1];return s((function(){r.value=n,r.getSnapshot=t,l(r)&&d({inst:r})}),[e,n,t]),i((function(){return l(r)&&d({inst:r}),e((function(){l(r)&&d({inst:r})}))}),[e]),c(n),n};void 0!==a.useSyncExternalStore&&a.useSyncExternalStore},61688:(e,t,n)=>{"use strict";n(53250)},36809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const a={title:"Odra",tagline:"Writing smart contracts have never been easier!",url:"https://odra.dev",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.ico",organizationName:"odradev",projectName:"odra",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{blog:{showReadingTime:!0,blogSidebarCount:0,postsPerPage:"ALL"},docs:{sidebarPath:"/home/runner/work/odradev.github.io/odradev.github.io/docusaurus/sidebars.js",lastVersion:"0.7.0",versions:{current:{label:"0.8.0"},"0.7.0":{label:"0.7.0",path:""},"0.6.0":{label:"0.6.0",path:"0.6.0"},"0.5.0":{label:"0.5.0",path:"0.5.0"},"0.4.0":{label:"0.4.0",path:"0.4.0"},"0.3.1":{label:"0.3.1",path:"0.3.1"},"0.3.0":{label:"0.3.0",path:"0.3.0"},"0.2.0":{label:"0.2.0",path:"0.2.0"}}},theme:{customCss:"/home/runner/work/odradev.github.io/odradev.github.io/docusaurus/src/css/custom.css"}}]],markdown:{mermaid:!0},themes:["@docusaurus/theme-mermaid"],themeConfig:{colorMode:{defaultMode:"dark",disableSwitch:!1,respectPrefersColorScheme:!1},navbar:{logo:{alt:"Odra Logo",src:"img/small_logo.png"},items:[{to:"/blog",label:"Blog",position:"left"},{to:"/docs",label:"Docs",position:"left"},{type:"docsVersionDropdown",position:"right",dropdownActiveClassDisabled:!0,dropdownItemsBefore:[],dropdownItemsAfter:[]},{href:"https://github.com/odradev/odra",label:"GitHub",position:"right"},{href:"https://twitter.com/odradev",label:"Twitter",position:"right"},{href:"https://discord.gg/Mm5ABc9P8k",label:"Discord",position:"right"}],hideOnScroll:!1},footer:{style:"light",copyright:'by <a href="https://odra.dev">odra.dev<a>',links:[]},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:"#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)"}}]},additionalLanguages:["rust","solidity"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3},mermaid:{theme:{dark:"dark",light:"default"},options:{}}},baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},87462:(e,t,n)=>{"use strict";function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},a.apply(this,arguments)}n.d(t,{Z:()=>a})},75068:(e,t,n)=>{"use strict";function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}n.d(t,{Z:()=>r})},63366:(e,t,n)=>{"use strict";function a(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}n.d(t,{Z:()=>a})},38776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a="Invariant failed";function r(e,t){if(!e)throw new Error(a)}},57529:e=>{"use strict";e.exports={}},16887:e=>{"use strict";e.exports=JSON.parse('{"/blog-8e1":{"__comp":"a6aa9e1f","__context":{"plugin":"98b2adcf"},"sidebar":"814f3328","items":[{"content":"c1ae59bd"},{"content":"93514764"},{"content":"cd790770"},{"content":"3c817d4f"},{"content":"599e53c2"},{"content":"739a70a9"},{"content":"a6f6e2b9"}],"metadata":"b2b675dd"},"/blog/2023-02-27-openai-writes-erc20-in-odra-d74":{"__comp":"ccc49370","__context":{"plugin":"98b2adcf"},"sidebar":"814f3328","content":"9a7f4a11"},"/blog/archive-fb4":{"__comp":"9e4087bc","__context":{"plugin":"98b2adcf"},"archive":"b2f554cd"},"/blog/casper-zk-risc0-130":{"__comp":"ccc49370","__context":{"plugin":"98b2adcf"},"sidebar":"814f3328","content":"71735968"},"/blog/evm-at-risc0-d36":{"__comp":"ccc49370","__context":{"plugin":"98b2adcf"},"sidebar":"814f3328","content":"71b691b7"},"/blog/its-all-about-the-community-1cb":{"__comp":"ccc49370","__context":{"plugin":"98b2adcf"},"sidebar":"814f3328","content":"a05c6bda"},"/blog/Nysa-9ad":{"__comp":"ccc49370","__context":{"plugin":"98b2adcf"},"sidebar":"814f3328","content":"7d8962a6"},"/blog/odra-cosmwasm-70d":{"__comp":"ccc49370","__context":{"plugin":"98b2adcf"},"sidebar":"814f3328","content":"d15969ed"},"/blog/release-020-1af":{"__comp":"ccc49370","__context":{"plugin":"98b2adcf"},"sidebar":"814f3328","content":"177939f6"},"/docs/0.2.0-eb8":{"__comp":"1be78505","__context":{"plugin":"0993954b"},"versionMetadata":"799b1c68"},"/docs/0.2.0/-dd7":{"__comp":"17896441","content":"b759477d"},"/docs/0.2.0/backends/casper-9e3":{"__comp":"17896441","content":"bd4cf5c0"},"/docs/0.2.0/backends/mock-vm-af2":{"__comp":"17896441","content":"c714b9ee"},"/docs/0.2.0/backends/what-is-a-backend-ac7":{"__comp":"17896441","content":"3e9ef03c"},"/docs/0.2.0/basics/cargo-odra-0cf":{"__comp":"17896441","content":"ce999a4e"},"/docs/0.2.0/basics/communicating-with-host-76d":{"__comp":"17896441","content":"274ccf11"},"/docs/0.2.0/basics/cross-calls-9e3":{"__comp":"17896441","content":"c5296eae"},"/docs/0.2.0/basics/directory-structure-49a":{"__comp":"17896441","content":"028141a3"},"/docs/0.2.0/basics/errors-dc2":{"__comp":"17896441","content":"5f2971ba"},"/docs/0.2.0/basics/events-d84":{"__comp":"17896441","content":"237cf9c7"},"/docs/0.2.0/basics/flipper-internals-5d3":{"__comp":"17896441","content":"da9e3acc"},"/docs/0.2.0/basics/modules-592":{"__comp":"17896441","content":"95db938c"},"/docs/0.2.0/basics/native-token-8f7":{"__comp":"17896441","content":"8f162cb9"},"/docs/0.2.0/basics/odra-toml-b95":{"__comp":"17896441","content":"11e5b730"},"/docs/0.2.0/basics/storage-interaction-5ec":{"__comp":"17896441","content":"d0c01b74"},"/docs/0.2.0/basics/testing-101":{"__comp":"17896441","content":"28efbf3f"},"/docs/0.2.0/category/backends-f65":{"__comp":"14eb3368","categoryGeneratedIndex":"181ab02d"},"/docs/0.2.0/category/basics-3e9":{"__comp":"14eb3368","categoryGeneratedIndex":"5be2abc9"},"/docs/0.2.0/category/examples-539":{"__comp":"14eb3368","categoryGeneratedIndex":"cad7ddc9"},"/docs/0.2.0/category/getting-started-d19":{"__comp":"14eb3368","categoryGeneratedIndex":"ea145f46"},"/docs/0.2.0/category/tutorials-05e":{"__comp":"14eb3368","categoryGeneratedIndex":"8e991cde"},"/docs/0.2.0/examples/odra-examples-640":{"__comp":"17896441","content":"9e73c0bb"},"/docs/0.2.0/examples/using-odra-modules-765":{"__comp":"17896441","content":"d7637d81"},"/docs/0.2.0/getting-started/flipper-5ff":{"__comp":"17896441","content":"7df6186d"},"/docs/0.2.0/getting-started/installation-c82":{"__comp":"17896441","content":"1b34e22f"},"/docs/0.2.0/tutorials/erc20-05b":{"__comp":"17896441","content":"1f63a7a5"},"/docs/0.2.0/tutorials/ownable-d53":{"__comp":"17896441","content":"cbdaac1b"},"/docs/0.2.0/tutorials/owned-token-79e":{"__comp":"17896441","content":"70d9d1e8"},"/docs/0.3.0-10f":{"__comp":"1be78505","__context":{"plugin":"0993954b"},"versionMetadata":"5f012ce0"},"/docs/0.3.0/-959":{"__comp":"17896441","content":"bee0af8b"},"/docs/0.3.0/advanced/advanced-storage-141":{"__comp":"17896441","content":"7414f7c1"},"/docs/0.3.0/advanced/attributes-2c9":{"__comp":"17896441","content":"73285975"},"/docs/0.3.0/advanced/composer-226":{"__comp":"17896441","content":"b7573e33"},"/docs/0.3.0/advanced/delegate-bfb":{"__comp":"17896441","content":"74376d79"},"/docs/0.3.0/backends/casper-106":{"__comp":"17896441","content":"0ea00542"},"/docs/0.3.0/backends/mock-vm-187":{"__comp":"17896441","content":"c43892d3"},"/docs/0.3.0/backends/what-is-a-backend-37a":{"__comp":"17896441","content":"cecbc2b5"},"/docs/0.3.0/basics/cargo-odra-c76":{"__comp":"17896441","content":"2bf460c7"},"/docs/0.3.0/basics/communicating-with-host-049":{"__comp":"17896441","content":"509c4227"},"/docs/0.3.0/basics/cross-calls-790":{"__comp":"17896441","content":"d691a609"},"/docs/0.3.0/basics/directory-structure-5e5":{"__comp":"17896441","content":"e538a9e1"},"/docs/0.3.0/basics/errors-8ce":{"__comp":"17896441","content":"c5cef920"},"/docs/0.3.0/basics/events-fbf":{"__comp":"17896441","content":"a0d3df9d"},"/docs/0.3.0/basics/flipper-internals-c30":{"__comp":"17896441","content":"6289863c"},"/docs/0.3.0/basics/modules-c88":{"__comp":"17896441","content":"53726ad7"},"/docs/0.3.0/basics/native-token-87f":{"__comp":"17896441","content":"9ffb5fe4"},"/docs/0.3.0/basics/odra-toml-cd5":{"__comp":"17896441","content":"2b7acc9d"},"/docs/0.3.0/basics/storage-interaction-12e":{"__comp":"17896441","content":"1030000d"},"/docs/0.3.0/basics/testing-fda":{"__comp":"17896441","content":"cd591068"},"/docs/0.3.0/category/advanced-08a":{"__comp":"14eb3368","categoryGeneratedIndex":"5bcb7a16"},"/docs/0.3.0/category/backends-5e8":{"__comp":"14eb3368","categoryGeneratedIndex":"e5e64bd0"},"/docs/0.3.0/category/basics-03f":{"__comp":"14eb3368","categoryGeneratedIndex":"5bff39d6"},"/docs/0.3.0/category/examples-bf7":{"__comp":"14eb3368","categoryGeneratedIndex":"e4b2a41e"},"/docs/0.3.0/category/getting-started-20b":{"__comp":"14eb3368","categoryGeneratedIndex":"65ab6b77"},"/docs/0.3.0/category/tutorials-814":{"__comp":"14eb3368","categoryGeneratedIndex":"f0928d2f"},"/docs/0.3.0/examples/odra-examples-fa6":{"__comp":"17896441","content":"21fc20bd"},"/docs/0.3.0/examples/using-odra-modules-c03":{"__comp":"17896441","content":"6add768b"},"/docs/0.3.0/getting-started/flipper-553":{"__comp":"17896441","content":"b7d3ed64"},"/docs/0.3.0/getting-started/installation-6ad":{"__comp":"17896441","content":"04477b87"},"/docs/0.3.0/tutorials/erc20-2a7":{"__comp":"17896441","content":"5825ca57"},"/docs/0.3.0/tutorials/ownable-11c":{"__comp":"17896441","content":"55362a87"},"/docs/0.3.0/tutorials/owned-token-a68":{"__comp":"17896441","content":"fb249be3"},"/docs/0.3.1-af3":{"__comp":"1be78505","__context":{"plugin":"0993954b"},"versionMetadata":"33762072"},"/docs/0.3.1/-0fe":{"__comp":"17896441","content":"13ab0148"},"/docs/0.3.1/advanced/advanced-storage-f06":{"__comp":"17896441","content":"208794bf"},"/docs/0.3.1/advanced/attributes-bce":{"__comp":"17896441","content":"57648d1e"},"/docs/0.3.1/advanced/composer-a52":{"__comp":"17896441","content":"24bf3011"},"/docs/0.3.1/advanced/delegate-e81":{"__comp":"17896441","content":"e31bed34"},"/docs/0.3.1/backends/casper-e0e":{"__comp":"17896441","content":"45990ab7"},"/docs/0.3.1/backends/mock-vm-039":{"__comp":"17896441","content":"9a7c9bac"},"/docs/0.3.1/backends/what-is-a-backend-8d7":{"__comp":"17896441","content":"3129ff44"},"/docs/0.3.1/basics/cargo-odra-76a":{"__comp":"17896441","content":"5c4991bb"},"/docs/0.3.1/basics/communicating-with-host-85d":{"__comp":"17896441","content":"c71fcec7"},"/docs/0.3.1/basics/cross-calls-ed1":{"__comp":"17896441","content":"3701fb97"},"/docs/0.3.1/basics/directory-structure-95e":{"__comp":"17896441","content":"c5f43526"},"/docs/0.3.1/basics/errors-699":{"__comp":"17896441","content":"815ad8c9"},"/docs/0.3.1/basics/events-0ff":{"__comp":"17896441","content":"83697071"},"/docs/0.3.1/basics/flipper-internals-8ce":{"__comp":"17896441","content":"cb085bdb"},"/docs/0.3.1/basics/modules-a5c":{"__comp":"17896441","content":"5a816386"},"/docs/0.3.1/basics/native-token-b51":{"__comp":"17896441","content":"9d95fe34"},"/docs/0.3.1/basics/odra-toml-39b":{"__comp":"17896441","content":"cca6b120"},"/docs/0.3.1/basics/storage-interaction-5cc":{"__comp":"17896441","content":"3edee900"},"/docs/0.3.1/basics/testing-d8f":{"__comp":"17896441","content":"90c053b1"},"/docs/0.3.1/category/advanced-7fc":{"__comp":"14eb3368","categoryGeneratedIndex":"67cb2d26"},"/docs/0.3.1/category/backends-521":{"__comp":"14eb3368","categoryGeneratedIndex":"1999a842"},"/docs/0.3.1/category/basics-be6":{"__comp":"14eb3368","categoryGeneratedIndex":"d9fee9da"},"/docs/0.3.1/category/examples-793":{"__comp":"14eb3368","categoryGeneratedIndex":"78452797"},"/docs/0.3.1/category/getting-started-1b7":{"__comp":"14eb3368","categoryGeneratedIndex":"037547ca"},"/docs/0.3.1/category/tutorials-55a":{"__comp":"14eb3368","categoryGeneratedIndex":"a88260b3"},"/docs/0.3.1/examples/odra-examples-9f8":{"__comp":"17896441","content":"beab0651"},"/docs/0.3.1/examples/using-odra-modules-9a9":{"__comp":"17896441","content":"74442e8e"},"/docs/0.3.1/getting-started/flipper-1e0":{"__comp":"17896441","content":"b87f41d0"},"/docs/0.3.1/getting-started/installation-999":{"__comp":"17896441","content":"733ac994"},"/docs/0.3.1/tutorials/erc20-3c7":{"__comp":"17896441","content":"a6734805"},"/docs/0.3.1/tutorials/ownable-939":{"__comp":"17896441","content":"7e706e45"},"/docs/0.3.1/tutorials/owned-token-e34":{"__comp":"17896441","content":"b241ea99"},"/docs/0.4.0-6b9":{"__comp":"1be78505","__context":{"plugin":"0993954b"},"versionMetadata":"db82a1c0"},"/docs/0.4.0/-f26":{"__comp":"17896441","content":"b548b5e0"},"/docs/0.4.0/advanced/advanced-storage-8c8":{"__comp":"17896441","content":"1684519a"},"/docs/0.4.0/advanced/attributes-8f9":{"__comp":"17896441","content":"b94504cb"},"/docs/0.4.0/advanced/composer-37a":{"__comp":"17896441","content":"56296f23"},"/docs/0.4.0/advanced/delegate-66f":{"__comp":"17896441","content":"c24519ee"},"/docs/0.4.0/backends/casper-c05":{"__comp":"17896441","content":"b0f6aa87"},"/docs/0.4.0/backends/mock-vm-bbe":{"__comp":"17896441","content":"43e47b8e"},"/docs/0.4.0/backends/what-is-a-backend-afc":{"__comp":"17896441","content":"0be49901"},"/docs/0.4.0/basics/cargo-odra-be3":{"__comp":"17896441","content":"7acce579"},"/docs/0.4.0/basics/communicating-with-host-2c9":{"__comp":"17896441","content":"ab49860c"},"/docs/0.4.0/basics/cross-calls-cd2":{"__comp":"17896441","content":"a663e775"},"/docs/0.4.0/basics/directory-structure-fda":{"__comp":"17896441","content":"29c8e325"},"/docs/0.4.0/basics/errors-6ff":{"__comp":"17896441","content":"20f44f94"},"/docs/0.4.0/basics/events-7b1":{"__comp":"17896441","content":"f00a1e6f"},"/docs/0.4.0/basics/flipper-internals-a33":{"__comp":"17896441","content":"39d2189a"},"/docs/0.4.0/basics/modules-2a3":{"__comp":"17896441","content":"754937b2"},"/docs/0.4.0/basics/native-token-a56":{"__comp":"17896441","content":"0a8f7599"},"/docs/0.4.0/basics/odra-toml-011":{"__comp":"17896441","content":"3ac77d2e"},"/docs/0.4.0/basics/storage-interaction-a7a":{"__comp":"17896441","content":"acebe248"},"/docs/0.4.0/basics/testing-7ac":{"__comp":"17896441","content":"14355e8c"},"/docs/0.4.0/category/advanced-0be":{"__comp":"14eb3368","categoryGeneratedIndex":"5bf6529c"},"/docs/0.4.0/category/backends-7c2":{"__comp":"14eb3368","categoryGeneratedIndex":"ed6ae2e5"},"/docs/0.4.0/category/basics-1ef":{"__comp":"14eb3368","categoryGeneratedIndex":"4e50b37d"},"/docs/0.4.0/category/examples-84f":{"__comp":"14eb3368","categoryGeneratedIndex":"b435d362"},"/docs/0.4.0/category/getting-started-651":{"__comp":"14eb3368","categoryGeneratedIndex":"f92986d2"},"/docs/0.4.0/category/tutorials-d6c":{"__comp":"14eb3368","categoryGeneratedIndex":"5f13c361"},"/docs/0.4.0/examples/odra-examples-48a":{"__comp":"17896441","content":"5c77c5fd"},"/docs/0.4.0/examples/using-odra-modules-174":{"__comp":"17896441","content":"90f06335"},"/docs/0.4.0/getting-started/flipper-c72":{"__comp":"17896441","content":"448060b1"},"/docs/0.4.0/getting-started/installation-ed5":{"__comp":"17896441","content":"fdb5f68c"},"/docs/0.4.0/tutorials/erc20-f49":{"__comp":"17896441","content":"8988b866"},"/docs/0.4.0/tutorials/ownable-0ce":{"__comp":"17896441","content":"51bf83ad"},"/docs/0.4.0/tutorials/owned-token-d8c":{"__comp":"17896441","content":"496b44fb"},"/docs/0.5.0-ed6":{"__comp":"1be78505","__context":{"plugin":"0993954b"},"versionMetadata":"0030fd86"},"/docs/0.5.0/-96f":{"__comp":"17896441","content":"4279e616"},"/docs/0.5.0/advanced/advanced-storage-656":{"__comp":"17896441","content":"9cc9201d"},"/docs/0.5.0/advanced/attributes-f61":{"__comp":"17896441","content":"b338949b"},"/docs/0.5.0/advanced/delegate-0f8":{"__comp":"17896441","content":"728e71a1"},"/docs/0.5.0/advanced/signatures-96c":{"__comp":"17896441","content":"558ac3fc"},"/docs/0.5.0/advanced/using-93b":{"__comp":"17896441","content":"13066500"},"/docs/0.5.0/backends/casper-372":{"__comp":"17896441","content":"f54718af"},"/docs/0.5.0/backends/mock-vm-96e":{"__comp":"17896441","content":"8b0ca31f"},"/docs/0.5.0/backends/what-is-a-backend-a98":{"__comp":"17896441","content":"ad92572d"},"/docs/0.5.0/basics/cargo-odra-d15":{"__comp":"17896441","content":"aaadf060"},"/docs/0.5.0/basics/communicating-with-host-545":{"__comp":"17896441","content":"b2f44958"},"/docs/0.5.0/basics/cross-calls-d66":{"__comp":"17896441","content":"60dd6115"},"/docs/0.5.0/basics/directory-structure-161":{"__comp":"17896441","content":"632b087e"},"/docs/0.5.0/basics/errors-393":{"__comp":"17896441","content":"3721b008"},"/docs/0.5.0/basics/events-056":{"__comp":"17896441","content":"4f40819b"},"/docs/0.5.0/basics/flipper-internals-93e":{"__comp":"17896441","content":"ab4716a0"},"/docs/0.5.0/basics/modules-eae":{"__comp":"17896441","content":"94723368"},"/docs/0.5.0/basics/native-token-186":{"__comp":"17896441","content":"c13d152b"},"/docs/0.5.0/basics/odra-toml-1c3":{"__comp":"17896441","content":"42fe661b"},"/docs/0.5.0/basics/storage-interaction-14c":{"__comp":"17896441","content":"3bb5653d"},"/docs/0.5.0/basics/testing-3e5":{"__comp":"17896441","content":"02192c58"},"/docs/0.5.0/category/advanced-d06":{"__comp":"14eb3368","categoryGeneratedIndex":"918e870d"},"/docs/0.5.0/category/backends-c3c":{"__comp":"14eb3368","categoryGeneratedIndex":"67a34253"},"/docs/0.5.0/category/basics-8c1":{"__comp":"14eb3368","categoryGeneratedIndex":"2131dc9d"},"/docs/0.5.0/category/examples-170":{"__comp":"14eb3368","categoryGeneratedIndex":"32993410"},"/docs/0.5.0/category/getting-started-4a6":{"__comp":"14eb3368","categoryGeneratedIndex":"1524a02c"},"/docs/0.5.0/category/tutorials-44a":{"__comp":"14eb3368","categoryGeneratedIndex":"6f7f3f28"},"/docs/0.5.0/examples/odra-examples-398":{"__comp":"17896441","content":"919c36c8"},"/docs/0.5.0/examples/using-odra-modules-2bf":{"__comp":"17896441","content":"705c2b64"},"/docs/0.5.0/getting-started/flipper-a09":{"__comp":"17896441","content":"fe2b6021"},"/docs/0.5.0/getting-started/installation-6a7":{"__comp":"17896441","content":"bfc8213d"},"/docs/0.5.0/tutorials/erc20-277":{"__comp":"17896441","content":"2c824dec"},"/docs/0.5.0/tutorials/ownable-681":{"__comp":"17896441","content":"68495fce"},"/docs/0.5.0/tutorials/owned-token-217":{"__comp":"17896441","content":"02a3f783"},"/docs/0.6.0-07e":{"__comp":"1be78505","__context":{"plugin":"0993954b"},"versionMetadata":"58f10d9f"},"/docs/0.6.0/-6cb":{"__comp":"17896441","content":"54dbc4b0"},"/docs/0.6.0/advanced/advanced-storage-e45":{"__comp":"17896441","content":"95f5ef42"},"/docs/0.6.0/advanced/attributes-30c":{"__comp":"17896441","content":"68deafd0"},"/docs/0.6.0/advanced/delegate-9cd":{"__comp":"17896441","content":"b4f02106"},"/docs/0.6.0/advanced/signatures-ade":{"__comp":"17896441","content":"26441f8e"},"/docs/0.6.0/advanced/using-623":{"__comp":"17896441","content":"ed898d19"},"/docs/0.6.0/backends/casper-ffb":{"__comp":"17896441","content":"5ad2f7ef"},"/docs/0.6.0/backends/mock-vm-936":{"__comp":"17896441","content":"473b33d6"},"/docs/0.6.0/backends/what-is-a-backend-cad":{"__comp":"17896441","content":"b2e57a16"},"/docs/0.6.0/basics/cargo-odra-6a0":{"__comp":"17896441","content":"da555cce"},"/docs/0.6.0/basics/communicating-with-host-704":{"__comp":"17896441","content":"5ca766f6"},"/docs/0.6.0/basics/cross-calls-4a3":{"__comp":"17896441","content":"41445f6c"},"/docs/0.6.0/basics/directory-structure-adb":{"__comp":"17896441","content":"af2a4ce0"},"/docs/0.6.0/basics/errors-5af":{"__comp":"17896441","content":"c52d4d42"},"/docs/0.6.0/basics/events-77a":{"__comp":"17896441","content":"b6aaec29"},"/docs/0.6.0/basics/flipper-internals-b3c":{"__comp":"17896441","content":"a046a162"},"/docs/0.6.0/basics/modules-e0c":{"__comp":"17896441","content":"9d620965"},"/docs/0.6.0/basics/native-token-089":{"__comp":"17896441","content":"befd1fba"},"/docs/0.6.0/basics/odra-toml-142":{"__comp":"17896441","content":"01e5113f"},"/docs/0.6.0/basics/storage-interaction-568":{"__comp":"17896441","content":"67d74c2d"},"/docs/0.6.0/basics/testing-4f2":{"__comp":"17896441","content":"c705646d"},"/docs/0.6.0/category/advanced-b04":{"__comp":"14eb3368","categoryGeneratedIndex":"c6385d27"},"/docs/0.6.0/category/backends-567":{"__comp":"14eb3368","categoryGeneratedIndex":"d386dd06"},"/docs/0.6.0/category/basics-7b9":{"__comp":"14eb3368","categoryGeneratedIndex":"be0b2ac1"},"/docs/0.6.0/category/examples-933":{"__comp":"14eb3368","categoryGeneratedIndex":"f146bc3c"},"/docs/0.6.0/category/getting-started-d6e":{"__comp":"14eb3368","categoryGeneratedIndex":"c52764ec"},"/docs/0.6.0/category/tutorials-565":{"__comp":"14eb3368","categoryGeneratedIndex":"ff3976bd"},"/docs/0.6.0/examples/odra-examples-297":{"__comp":"17896441","content":"eedc1cb5"},"/docs/0.6.0/examples/using-odra-modules-b91":{"__comp":"17896441","content":"71958ad0"},"/docs/0.6.0/getting-started/flipper-41a":{"__comp":"17896441","content":"367de8e8"},"/docs/0.6.0/getting-started/installation-f64":{"__comp":"17896441","content":"e8a3ffa2"},"/docs/0.6.0/tutorials/erc20-9af":{"__comp":"17896441","content":"9005cef3"},"/docs/0.6.0/tutorials/ownable-f5c":{"__comp":"17896441","content":"4da81bc4"},"/docs/0.6.0/tutorials/owned-token-900":{"__comp":"17896441","content":"3f00e816"},"/docs/next-366":{"__comp":"1be78505","__context":{"plugin":"0993954b"},"versionMetadata":"935f2afb"},"/docs/next/-a05":{"__comp":"17896441","content":"0e384e19"},"/docs/next/advanced/advanced-storage-bb5":{"__comp":"17896441","content":"615e12e7"},"/docs/next/advanced/attributes-372":{"__comp":"17896441","content":"bac2ca12"},"/docs/next/advanced/delegate-b46":{"__comp":"17896441","content":"383c9ad7"},"/docs/next/advanced/storage-layout-152":{"__comp":"17896441","content":"5aa50e24"},"/docs/next/backends/casper-823":{"__comp":"17896441","content":"06a0fa51"},"/docs/next/backends/livenet-2f8":{"__comp":"17896441","content":"6640477e"},"/docs/next/backends/odra-vm-a9b":{"__comp":"17896441","content":"aee91c2e"},"/docs/next/backends/what-is-a-backend-c4c":{"__comp":"17896441","content":"6e2102f2"},"/docs/next/basics/cargo-odra-5d3":{"__comp":"17896441","content":"0abf45c2"},"/docs/next/basics/communicating-with-host-8bf":{"__comp":"17896441","content":"fa4e959a"},"/docs/next/basics/cross-calls-f0e":{"__comp":"17896441","content":"34731735"},"/docs/next/basics/directory-structure-cf2":{"__comp":"17896441","content":"3cb0761e"},"/docs/next/basics/errors-b56":{"__comp":"17896441","content":"d5e3179c"},"/docs/next/basics/events-d09":{"__comp":"17896441","content":"ca76cddc"},"/docs/next/basics/flipper-internals-136":{"__comp":"17896441","content":"48d43fc1"},"/docs/next/basics/modules-d67":{"__comp":"17896441","content":"cde2d623"},"/docs/next/basics/native-token-a1b":{"__comp":"17896441","content":"c1418166"},"/docs/next/basics/odra-toml-efe":{"__comp":"17896441","content":"60d35280"},"/docs/next/basics/storage-interaction-ca7":{"__comp":"17896441","content":"79253424"},"/docs/next/basics/testing-95b":{"__comp":"17896441","content":"ba36c747"},"/docs/next/category/advanced-655":{"__comp":"14eb3368","categoryGeneratedIndex":"a3d6ef01"},"/docs/next/category/backends-b10":{"__comp":"14eb3368","categoryGeneratedIndex":"ac692f92"},"/docs/next/category/basics-48a":{"__comp":"14eb3368","categoryGeneratedIndex":"0a44181e"},"/docs/next/category/examples-caa":{"__comp":"14eb3368","categoryGeneratedIndex":"79b67993"},"/docs/next/category/getting-started-345":{"__comp":"14eb3368","categoryGeneratedIndex":"c3fd70b6"},"/docs/next/category/migrations-fa2":{"__comp":"14eb3368","categoryGeneratedIndex":"17498f44"},"/docs/next/category/tutorials-fad":{"__comp":"14eb3368","categoryGeneratedIndex":"e018be55"},"/docs/next/examples/odra-examples-3a4":{"__comp":"17896441","content":"659ab8cb"},"/docs/next/examples/using-odra-modules-a73":{"__comp":"17896441","content":"69fd3230"},"/docs/next/getting-started/flipper-9d2":{"__comp":"17896441","content":"e9ea549b"},"/docs/next/getting-started/installation-89e":{"__comp":"17896441","content":"54f44165"},"/docs/next/migrations/to-0.8.0-118":{"__comp":"17896441","content":"57bc1a35"},"/docs/next/tutorials/access-control-182":{"__comp":"17896441","content":"bfc20097"},"/docs/next/tutorials/erc20-0c8":{"__comp":"17896441","content":"64fba0bc"},"/docs/next/tutorials/ownable-aac":{"__comp":"17896441","content":"e2022d8c"},"/docs/next/tutorials/owned-token-6be":{"__comp":"17896441","content":"67cf10af"},"/docs/next/tutorials/pauseable-6ca":{"__comp":"17896441","content":"df1503d8"},"/docs-a01":{"__comp":"1be78505","__context":{"plugin":"0993954b"},"versionMetadata":"2fe15297"},"/docs/-464":{"__comp":"17896441","content":"119fbfb6"},"/docs/advanced/advanced-storage-0a7":{"__comp":"17896441","content":"575b7125"},"/docs/advanced/attributes-a91":{"__comp":"17896441","content":"bab04a93"},"/docs/advanced/delegate-d4e":{"__comp":"17896441","content":"88b75f2c"},"/docs/advanced/signatures-f5e":{"__comp":"17896441","content":"6617ee69"},"/docs/advanced/using-e0b":{"__comp":"17896441","content":"0bf9d8ab"},"/docs/backends/casper-1bc":{"__comp":"17896441","content":"33e7c3de"},"/docs/backends/mock-vm-b6e":{"__comp":"17896441","content":"fec7bf31"},"/docs/backends/what-is-a-backend-cf5":{"__comp":"17896441","content":"800dfaa2"},"/docs/basics/cargo-odra-9dd":{"__comp":"17896441","content":"afc3a23f"},"/docs/basics/communicating-with-host-ac2":{"__comp":"17896441","content":"e294fa30"},"/docs/basics/cross-calls-8ec":{"__comp":"17896441","content":"7f9a1b7a"},"/docs/basics/directory-structure-831":{"__comp":"17896441","content":"cf3f256a"},"/docs/basics/errors-1f3":{"__comp":"17896441","content":"09109da1"},"/docs/basics/events-28c":{"__comp":"17896441","content":"716fdc54"},"/docs/basics/flipper-internals-266":{"__comp":"17896441","content":"6e5ab397"},"/docs/basics/modules-f4d":{"__comp":"17896441","content":"42eeae87"},"/docs/basics/native-token-2b1":{"__comp":"17896441","content":"ff33c5f7"},"/docs/basics/odra-toml-b3a":{"__comp":"17896441","content":"ee3d80a6"},"/docs/basics/storage-interaction-e1d":{"__comp":"17896441","content":"91b04621"},"/docs/basics/testing-752":{"__comp":"17896441","content":"3eed3f1a"},"/docs/category/advanced-7b4":{"__comp":"14eb3368","categoryGeneratedIndex":"f5bf02f1"},"/docs/category/backends-744":{"__comp":"14eb3368","categoryGeneratedIndex":"c10f3592"},"/docs/category/basics-dd3":{"__comp":"14eb3368","categoryGeneratedIndex":"58abd590"},"/docs/category/examples-fe3":{"__comp":"14eb3368","categoryGeneratedIndex":"4a070847"},"/docs/category/getting-started-01f":{"__comp":"14eb3368","categoryGeneratedIndex":"3152febb"},"/docs/category/tutorials-f40":{"__comp":"14eb3368","categoryGeneratedIndex":"4cd738bd"},"/docs/examples/odra-examples-457":{"__comp":"17896441","content":"893f4b86"},"/docs/examples/using-odra-modules-9bb":{"__comp":"17896441","content":"8010fede"},"/docs/getting-started/flipper-c93":{"__comp":"17896441","content":"79d3180c"},"/docs/getting-started/installation-9cb":{"__comp":"17896441","content":"f1080184"},"/docs/tutorials/access-control-a22":{"__comp":"17896441","content":"ce4f9116"},"/docs/tutorials/erc20-9d0":{"__comp":"17896441","content":"7457cffc"},"/docs/tutorials/ownable-87e":{"__comp":"17896441","content":"5b4d97e3"},"/docs/tutorials/owned-token-18f":{"__comp":"17896441","content":"1416c8f4"},"/docs/tutorials/pauseable-a00":{"__comp":"17896441","content":"03d24697"},"/-780":{"__comp":"c4f5d8e4","__context":{"plugin":"d985b3f7"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=49383,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/docs/assets/js/main.2d7f4338.js.LICENSE.txt b/docs/assets/js/main.2d7f4338.js.LICENSE.txt new file mode 100644 index 000000000..eb75d6910 --- /dev/null +++ b/docs/assets/js/main.2d7f4338.js.LICENSE.txt @@ -0,0 +1,63 @@ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/** + * @license React + * use-sync-external-store-shim.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + */ + +/** @license React v0.20.2 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/docs/assets/js/runtime~main.daf70288.js b/docs/assets/js/runtime~main.daf70288.js new file mode 100644 index 000000000..6dbefb66e --- /dev/null +++ b/docs/assets/js/runtime~main.daf70288.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i<e.length;i++){a=e[i][0],c=e[i][1],d=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=c();void 0!==n&&(f=n)}}return f}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=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 d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({0:"fb249be3",53:"935f2afb",79:"b759477d",152:"54f44165",190:"d15969ed",225:"3152febb",242:"ad92572d",348:"06a0fa51",357:"4a070847",366:"6617ee69",427:"1999a842",494:"db82a1c0",523:"13ab0148",533:"b2b675dd",589:"be0b2ac1",635:"e538a9e1",656:"6add768b",659:"ed898d19",663:"4da81bc4",703:"716fdc54",723:"509c4227",800:"42fe661b",825:"cde2d623",827:"da9e3acc",874:"4f40819b",992:"575b7125",995:"177939f6",996:"afc3a23f",1079:"20f44f94",1109:"0be49901",1171:"f00a1e6f",1172:"208794bf",1178:"705c2b64",1215:"befd1fba",1389:"e8a3ffa2",1390:"5a816386",1401:"e5e64bd0",1422:"e4b2a41e",1442:"b4f02106",1459:"90f06335",1477:"b2f554cd",1544:"fa4e959a",1577:"56296f23",1588:"4e50b37d",1655:"b6aaec29",1810:"b548b5e0",1839:"e31bed34",1887:"0030fd86",1969:"119fbfb6",2007:"5c77c5fd",2037:"c5f43526",2042:"1030000d",2081:"448060b1",2098:"5bcb7a16",2103:"b338949b",2111:"2fe15297",2240:"28efbf3f",2253:"3701fb97",2288:"53726ad7",2294:"f54718af",2325:"0bf9d8ab",2329:"f146bc3c",2331:"cd591068",2346:"68495fce",2411:"599e53c2",2432:"9e73c0bb",2493:"58f10d9f",2522:"67cb2d26",2535:"814f3328",2540:"65ab6b77",2628:"8010fede",2653:"c52764ec",2691:"67a34253",2701:"e2022d8c",2717:"3e9ef03c",2761:"74442e8e",2801:"3c817d4f",2806:"237cf9c7",2858:"7414f7c1",2862:"ce999a4e",2869:"73285975",2890:"4279e616",2933:"ab4716a0",2944:"5aa50e24",2945:"5f012ce0",2947:"a6734805",3037:"ff3976bd",3052:"01e5113f",3069:"60dd6115",3073:"aee91c2e",3089:"a6aa9e1f",3095:"71b691b7",3158:"7acce579",3175:"cf3f256a",3227:"3f00e816",3241:"bd4cf5c0",3308:"754937b2",3336:"93514764",3362:"3eed3f1a",3394:"57bc1a35",3395:"9cc9201d",3468:"d691a609",3472:"615e12e7",3538:"5ca766f6",3556:"67d74c2d",3608:"9e4087bc",3622:"d0c01b74",3633:"5f2971ba",3668:"c13d152b",3675:"7457cffc",3743:"a0d3df9d",3744:"cbdaac1b",3772:"13066500",3785:"1b34e22f",3814:"5ad2f7ef",3849:"918e870d",3914:"33e7c3de",3968:"7df6186d",4023:"e294fa30",4050:"473b33d6",4062:"d7637d81",4133:"7f9a1b7a",4189:"5c4991bb",4191:"ca76cddc",4195:"c4f5d8e4",4201:"cb085bdb",4230:"b241ea99",4248:"eedc1cb5",4266:"496b44fb",4296:"95f5ef42",4301:"728e71a1",4318:"aaadf060",4371:"69fd3230",4415:"b94504cb",4434:"9d95fe34",4467:"fe2b6021",4500:"64fba0bc",4589:"0a8f7599",4593:"90c053b1",4627:"3ac77d2e",4709:"70d9d1e8",4720:"bac2ca12",4733:"6289863c",4836:"02192c58",4916:"94723368",4923:"2b7acc9d",4928:"800dfaa2",4997:"ba36c747",5006:"bab04a93",5057:"5b4d97e3",5067:"d386dd06",5108:"3cb0761e",5113:"5bf6529c",5151:"3721b008",5176:"a88260b3",5211:"ab49860c",5228:"da555cce",5310:"2131dc9d",5333:"03d24697",5396:"c5296eae",5399:"1524a02c",5495:"e9ea549b",5510:"32993410",5558:"9ffb5fe4",5579:"c6385d27",5598:"8988b866",5604:"34731735",5657:"799b1c68",5660:"f0928d2f",5662:"bee0af8b",5724:"21fc20bd",5753:"5bff39d6",5775:"cca6b120",5776:"b2f44958",5866:"42eeae87",5894:"83697071",5897:"bfc20097",5901:"cecbc2b5",5914:"1f63a7a5",5930:"98b2adcf",5973:"9005cef3",6010:"3edee900",6056:"04477b87",6075:"88b75f2c",6100:"78452797",6103:"ccc49370",6105:"c714b9ee",6145:"95db938c",6153:"a3d6ef01",6221:"8f162cb9",6262:"39d2189a",6286:"2bf460c7",6317:"a663e775",6367:"3129ff44",6388:"0ea00542",6393:"acebe248",6452:"893f4b86",6489:"c705646d",6491:"383c9ad7",6499:"632b087e",6527:"367de8e8",6539:"ac692f92",6571:"79253424",6611:"48d43fc1",6671:"7d8962a6",6693:"14355e8c",6701:"9a7c9bac",6844:"fec7bf31",6882:"24bf3011",6901:"ff33c5f7",6974:"c71fcec7",7042:"cad7ddc9",7057:"274ccf11",7064:"6e2102f2",7093:"a6f6e2b9",7127:"51bf83ad",7150:"b435d362",7178:"fdb5f68c",7199:"5825ca57",7227:"c52d4d42",7287:"8e991cde",7405:"d9fee9da",7437:"c1ae59bd",7447:"29c8e325",7457:"58abd590",7493:"ed6ae2e5",7541:"c24519ee",7552:"6640477e",7556:"71958ad0",7591:"6f7f3f28",7620:"beab0651",7625:"0abf45c2",7646:"0993954b",7669:"33762072",7731:"0a44181e",7742:"26441f8e",7752:"b87f41d0",7779:"68deafd0",7798:"79b67993",7897:"b7573e33",7918:"17896441",7922:"659ab8cb",7952:"733ac994",7978:"c1418166",8071:"8b0ca31f",8088:"45990ab7",8089:"d5e3179c",8099:"181ab02d",8118:"a05c6bda",8181:"57648d1e",8221:"919c36c8",8283:"028141a3",8322:"4cd738bd",8367:"2c824dec",8381:"1684519a",8445:"df1503d8",8459:"c3fd70b6",8492:"09109da1",8584:"b0f6aa87",8590:"c5cef920",8666:"b7d3ed64",8700:"1416c8f4",8733:"60d35280",8784:"41445f6c",8841:"cd790770",8923:"9a7f4a11",8927:"ee3d80a6",8966:"c10f3592",9032:"7e706e45",9074:"f1080184",9108:"43e47b8e",9138:"c43892d3",9145:"815ad8c9",9165:"f92986d2",9167:"3bb5653d",9168:"67cf10af",9184:"037547ca",9186:"54dbc4b0",9243:"b2e57a16",9309:"bfc8213d",9314:"e018be55",9344:"a046a162",9345:"71735968",9375:"79d3180c",9410:"02a3f783",9413:"74376d79",9514:"1be78505",9558:"d985b3f7",9616:"55362a87",9634:"9d620965",9654:"558ac3fc",9671:"0e384e19",9680:"ce4f9116",9706:"af2a4ce0",9737:"5be2abc9",9756:"f5bf02f1",9809:"91b04621",9817:"14eb3368",9820:"5f13c361",9828:"17498f44",9856:"ea145f46",9906:"11e5b730",9954:"6e5ab397",9986:"739a70a9"}[e]||e)+"."+{0:"6a9b1906",53:"647dfe49",79:"741c75cd",152:"28fecf6a",190:"a7e49a14",225:"b578fce8",239:"1c1be196",242:"bb1dfdb2",348:"de90d71b",357:"6f83ba1e",366:"997746c7",427:"820a7b72",494:"01b7c8ed",523:"1c044ea9",533:"b113f45a",589:"c2904d19",635:"c4c0e0cf",656:"7bbe0952",659:"b182a3b1",663:"8394f24c",703:"1fa332bf",723:"47019aec",800:"47c7f34d",825:"e4204b81",827:"6d6af0a3",874:"a65210d5",992:"8675e1af",995:"5459c34e",996:"a8d853e2",1071:"e2867e75",1079:"a3b5c386",1109:"da3bc7a7",1171:"67c65fac",1172:"f248129c",1178:"1bbe12ac",1215:"955ad137",1389:"9e6f7abe",1390:"79ee88a2",1401:"902e37fb",1422:"272fb4d8",1442:"1850566b",1459:"95264650",1477:"4608dc99",1544:"9fa4cb3e",1577:"e1d2def4",1588:"c19de7e6",1655:"474717b9",1810:"5414a78d",1839:"b9cedacd",1887:"36a0add6",1969:"540c932e",2007:"3835990b",2037:"6560bfcd",2042:"b3656c78",2081:"1769ff8c",2098:"b39fe9ec",2103:"42ca8fba",2111:"5897a284",2240:"834330bf",2253:"ba7e2e61",2288:"c28cc51c",2294:"62e2f4f8",2325:"1415d9b1",2329:"cc1925d4",2331:"8b1ceedb",2346:"584aaa02",2366:"7f723f8c",2411:"4696106f",2432:"b0c60152",2493:"42367a11",2522:"8eba780a",2535:"e5d9b741",2540:"f56eaadf",2628:"038a5d25",2653:"6e443e42",2691:"03275479",2701:"83e9cfc2",2717:"e119ce44",2761:"f901ad8b",2801:"a554124e",2806:"60ed9371",2858:"326cab86",2862:"0ce8a513",2869:"38bfacf4",2890:"c84971cf",2933:"a7bba1a3",2944:"08f3271d",2945:"66530f3f",2947:"f167d1dc",3037:"eda77dfb",3052:"8baae4cc",3069:"411922ef",3073:"0da84d3e",3089:"d72a4b28",3095:"9684bfe0",3158:"c1964be6",3175:"f9385a89",3209:"aa3c4b05",3227:"24822ebf",3241:"f12ece2e",3308:"76a8c9b9",3336:"0f5af50a",3362:"a7629729",3394:"9b29e434",3395:"de6931b6",3468:"c2d99f7f",3472:"0ccd2410",3538:"166e12ee",3556:"cddd8079",3608:"2dee4e95",3622:"5d9599bb",3633:"76428dc4",3668:"e2564cc1",3675:"95d0c1aa",3743:"fbc93276",3744:"d86a12f9",3772:"41606d43",3785:"6c966b3e",3814:"55c21b01",3849:"7022f90d",3914:"003d7d55",3968:"8f4bc43f",4023:"debc291b",4050:"267b74de",4062:"7af705c8",4133:"e85c6e9e",4189:"a02d70ad",4191:"0fe3f002",4195:"127ee1e6",4201:"c1d78c9c",4230:"5afc158d",4248:"c39fe2ed",4266:"03522ed5",4296:"da7d1e4e",4301:"ddcc5767",4318:"5faff66f",4371:"ce2a2978",4415:"a2d52b37",4434:"47cef24c",4467:"df5b1421",4500:"a26b8b88",4589:"a9fe9083",4593:"c73461b8",4627:"8a10319f",4709:"8086cd2b",4720:"b5935fce",4733:"3acee235",4836:"00b1f2c1",4916:"7d3ff207",4923:"b3098d85",4928:"5c66eaa8",4972:"ddc2c974",4997:"3acfa93c",5006:"9417c5fe",5057:"0c110946",5067:"a52672fe",5108:"24178130",5113:"a6bc321b",5151:"94406143",5176:"9b8b8e27",5211:"5eff6c80",5228:"e33c96c7",5310:"3e6226ca",5333:"c811feae",5396:"9725cc06",5399:"f6f26170",5495:"2dc87fd4",5510:"ca14d499",5558:"cbfd0513",5579:"ccf0ac8d",5598:"22b63e10",5604:"d9ff4c00",5657:"48866af0",5660:"b6746a68",5662:"69fdde87",5724:"52002aff",5753:"e237ef14",5775:"0686e279",5776:"fe9a4cb5",5866:"096ead6a",5894:"0ed48f7d",5897:"940e9141",5901:"c68d76de",5914:"e6152d60",5930:"6640f6d0",5973:"95511a2a",6010:"7b2c1fbe",6056:"d0956e0b",6075:"dda19374",6100:"39b6ce0a",6103:"9ef391ad",6105:"c599700c",6145:"ffeb697c",6153:"684e5c74",6221:"762379e0",6262:"957a72d4",6286:"d3ce45e8",6317:"18f6c1d1",6367:"45bcc71d",6388:"4ccf87b7",6393:"8ef99510",6452:"f1b9c467",6489:"e790d100",6491:"d6dc0d8d",6499:"4eec3cd6",6527:"63c096d4",6539:"26b66903",6571:"ad0dbf7d",6611:"909d4d76",6671:"4e63c0db",6693:"e1d1be18",6701:"97ef6b89",6844:"58881655",6882:"c9743c08",6901:"6b1cd76b",6974:"a2c41cf5",7042:"1cb9d315",7057:"c39c7f41",7064:"c079c065",7093:"236d4d2e",7127:"aa19762a",7150:"0fc0efc0",7178:"582d92bd",7199:"5247cfeb",7227:"30a89473",7287:"79b88e8f",7405:"2ff8b9e6",7437:"5624c97f",7447:"0f9aec2a",7457:"4ec338a7",7493:"fcf896d2",7541:"ae644b8f",7552:"44c4cde8",7556:"8591dae0",7591:"5a91b637",7620:"654bd829",7625:"9c21d8d5",7646:"4128cfa0",7669:"8595d500",7731:"1a62c359",7742:"edb7397b",7752:"f0f181c1",7779:"1d1eccb9",7798:"39b2c6a5",7897:"854de50e",7918:"10d59a08",7922:"3935a46f",7952:"bf22c9dd",7978:"799af3f0",8071:"9e0a83d9",8088:"325a3e5a",8089:"3db0c54d",8099:"a47d9657",8118:"eda097fe",8181:"ad598a74",8221:"b43927bb",8283:"cb8c70bc",8322:"815dbdce",8367:"4ae4c723",8381:"49e3efaf",8445:"285dccf0",8459:"ff508e75",8492:"8638a6af",8584:"6a1e5a02",8590:"0d511cf5",8666:"5f843fed",8700:"f122c28e",8733:"be2bbe36",8784:"c688fb67",8841:"fd618f15",8923:"931eca48",8927:"6c361738",8966:"176c977b",9032:"cdfe3eb6",9074:"dc2838d7",9108:"118fb83f",9138:"951d8759",9145:"f1cfd89f",9165:"c6655b0e",9167:"9326908b",9168:"3633ac11",9184:"36ecaa56",9186:"b3687542",9243:"e8efe736",9309:"3a79c799",9314:"8f6ee0e2",9344:"691f889b",9345:"4acb548a",9375:"d41db72a",9410:"a17d85ba",9413:"69b07d3f",9514:"98e8e130",9558:"e852e117",9616:"fd0666c9",9634:"4f817163",9654:"007facc4",9671:"7af7ee02",9680:"d2cd5056",9706:"a24a33da",9737:"f73320be",9756:"db11918d",9809:"9d61b848",9817:"fbe30db7",9820:"8e08356b",9828:"ff116f3b",9856:"320423fc",9906:"2adaa868",9954:"5149d303",9986:"f96db3be"}[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,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="odra-website:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==d+a){t=l;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",d+a),t.src=e),c[e]=[f];var u=(f,a)=>{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.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.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={13066500:"3772",17896441:"7918",32993410:"5510",33762072:"7669",34731735:"5604",71735968:"9345",73285975:"2869",78452797:"6100",79253424:"6571",83697071:"5894",93514764:"3336",94723368:"4916",fb249be3:"0","935f2afb":"53",b759477d:"79","54f44165":"152",d15969ed:"190","3152febb":"225",ad92572d:"242","06a0fa51":"348","4a070847":"357","6617ee69":"366","1999a842":"427",db82a1c0:"494","13ab0148":"523",b2b675dd:"533",be0b2ac1:"589",e538a9e1:"635","6add768b":"656",ed898d19:"659","4da81bc4":"663","716fdc54":"703","509c4227":"723","42fe661b":"800",cde2d623:"825",da9e3acc:"827","4f40819b":"874","575b7125":"992","177939f6":"995",afc3a23f:"996","20f44f94":"1079","0be49901":"1109",f00a1e6f:"1171","208794bf":"1172","705c2b64":"1178",befd1fba:"1215",e8a3ffa2:"1389","5a816386":"1390",e5e64bd0:"1401",e4b2a41e:"1422",b4f02106:"1442","90f06335":"1459",b2f554cd:"1477",fa4e959a:"1544","56296f23":"1577","4e50b37d":"1588",b6aaec29:"1655",b548b5e0:"1810",e31bed34:"1839","0030fd86":"1887","119fbfb6":"1969","5c77c5fd":"2007",c5f43526:"2037","1030000d":"2042","448060b1":"2081","5bcb7a16":"2098",b338949b:"2103","2fe15297":"2111","28efbf3f":"2240","3701fb97":"2253","53726ad7":"2288",f54718af:"2294","0bf9d8ab":"2325",f146bc3c:"2329",cd591068:"2331","68495fce":"2346","599e53c2":"2411","9e73c0bb":"2432","58f10d9f":"2493","67cb2d26":"2522","814f3328":"2535","65ab6b77":"2540","8010fede":"2628",c52764ec:"2653","67a34253":"2691",e2022d8c:"2701","3e9ef03c":"2717","74442e8e":"2761","3c817d4f":"2801","237cf9c7":"2806","7414f7c1":"2858",ce999a4e:"2862","4279e616":"2890",ab4716a0:"2933","5aa50e24":"2944","5f012ce0":"2945",a6734805:"2947",ff3976bd:"3037","01e5113f":"3052","60dd6115":"3069",aee91c2e:"3073",a6aa9e1f:"3089","71b691b7":"3095","7acce579":"3158",cf3f256a:"3175","3f00e816":"3227",bd4cf5c0:"3241","754937b2":"3308","3eed3f1a":"3362","57bc1a35":"3394","9cc9201d":"3395",d691a609:"3468","615e12e7":"3472","5ca766f6":"3538","67d74c2d":"3556","9e4087bc":"3608",d0c01b74:"3622","5f2971ba":"3633",c13d152b:"3668","7457cffc":"3675",a0d3df9d:"3743",cbdaac1b:"3744","1b34e22f":"3785","5ad2f7ef":"3814","918e870d":"3849","33e7c3de":"3914","7df6186d":"3968",e294fa30:"4023","473b33d6":"4050",d7637d81:"4062","7f9a1b7a":"4133","5c4991bb":"4189",ca76cddc:"4191",c4f5d8e4:"4195",cb085bdb:"4201",b241ea99:"4230",eedc1cb5:"4248","496b44fb":"4266","95f5ef42":"4296","728e71a1":"4301",aaadf060:"4318","69fd3230":"4371",b94504cb:"4415","9d95fe34":"4434",fe2b6021:"4467","64fba0bc":"4500","0a8f7599":"4589","90c053b1":"4593","3ac77d2e":"4627","70d9d1e8":"4709",bac2ca12:"4720","6289863c":"4733","02192c58":"4836","2b7acc9d":"4923","800dfaa2":"4928",ba36c747:"4997",bab04a93:"5006","5b4d97e3":"5057",d386dd06:"5067","3cb0761e":"5108","5bf6529c":"5113","3721b008":"5151",a88260b3:"5176",ab49860c:"5211",da555cce:"5228","2131dc9d":"5310","03d24697":"5333",c5296eae:"5396","1524a02c":"5399",e9ea549b:"5495","9ffb5fe4":"5558",c6385d27:"5579","8988b866":"5598","799b1c68":"5657",f0928d2f:"5660",bee0af8b:"5662","21fc20bd":"5724","5bff39d6":"5753",cca6b120:"5775",b2f44958:"5776","42eeae87":"5866",bfc20097:"5897",cecbc2b5:"5901","1f63a7a5":"5914","98b2adcf":"5930","9005cef3":"5973","3edee900":"6010","04477b87":"6056","88b75f2c":"6075",ccc49370:"6103",c714b9ee:"6105","95db938c":"6145",a3d6ef01:"6153","8f162cb9":"6221","39d2189a":"6262","2bf460c7":"6286",a663e775:"6317","3129ff44":"6367","0ea00542":"6388",acebe248:"6393","893f4b86":"6452",c705646d:"6489","383c9ad7":"6491","632b087e":"6499","367de8e8":"6527",ac692f92:"6539","48d43fc1":"6611","7d8962a6":"6671","14355e8c":"6693","9a7c9bac":"6701",fec7bf31:"6844","24bf3011":"6882",ff33c5f7:"6901",c71fcec7:"6974",cad7ddc9:"7042","274ccf11":"7057","6e2102f2":"7064",a6f6e2b9:"7093","51bf83ad":"7127",b435d362:"7150",fdb5f68c:"7178","5825ca57":"7199",c52d4d42:"7227","8e991cde":"7287",d9fee9da:"7405",c1ae59bd:"7437","29c8e325":"7447","58abd590":"7457",ed6ae2e5:"7493",c24519ee:"7541","6640477e":"7552","71958ad0":"7556","6f7f3f28":"7591",beab0651:"7620","0abf45c2":"7625","0993954b":"7646","0a44181e":"7731","26441f8e":"7742",b87f41d0:"7752","68deafd0":"7779","79b67993":"7798",b7573e33:"7897","659ab8cb":"7922","733ac994":"7952",c1418166:"7978","8b0ca31f":"8071","45990ab7":"8088",d5e3179c:"8089","181ab02d":"8099",a05c6bda:"8118","57648d1e":"8181","919c36c8":"8221","028141a3":"8283","4cd738bd":"8322","2c824dec":"8367","1684519a":"8381",df1503d8:"8445",c3fd70b6:"8459","09109da1":"8492",b0f6aa87:"8584",c5cef920:"8590",b7d3ed64:"8666","1416c8f4":"8700","60d35280":"8733","41445f6c":"8784",cd790770:"8841","9a7f4a11":"8923",ee3d80a6:"8927",c10f3592:"8966","7e706e45":"9032",f1080184:"9074","43e47b8e":"9108",c43892d3:"9138","815ad8c9":"9145",f92986d2:"9165","3bb5653d":"9167","67cf10af":"9168","037547ca":"9184","54dbc4b0":"9186",b2e57a16:"9243",bfc8213d:"9309",e018be55:"9314",a046a162:"9344","79d3180c":"9375","02a3f783":"9410","74376d79":"9413","1be78505":"9514",d985b3f7:"9558","55362a87":"9616","9d620965":"9634","558ac3fc":"9654","0e384e19":"9671",ce4f9116:"9680",af2a4ce0:"9706","5be2abc9":"9737",f5bf02f1:"9756","91b04621":"9809","14eb3368":"9817","5f13c361":"9820","17498f44":"9828",ea145f46:"9856","11e5b730":"9906","6e5ab397":"9954","739a70a9":"9986"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},a=self.webpackChunkodra_website=self.webpackChunkodra_website||[];a.forEach(f.bind(null,0)),a.push=f.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/docs/blog/2023-02-27-openai-writes-erc20-in-odra/index.html b/docs/blog/2023-02-27-openai-writes-erc20-in-odra/index.html new file mode 100644 index 000000000..1b9e84b09 --- /dev/null +++ b/docs/blog/2023-02-27-openai-writes-erc20-in-odra/index.html @@ -0,0 +1,38 @@ +<!doctype html> +<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default"> +<head> +<meta charset="UTF-8"> +<meta name="generator" content="Docusaurus v2.3.1"> +<title data-rh="true">OpenAI writes ERC20 in Odra | Odra + + + + + +
    +

    OpenAI writes ERC20 in Odra

    · 4 min read

    OpenAI can write Odra smart contracts. +This is how.

    OpenAI

    OpenAI already proved that AI can code. +Github Copilot is used by more and more developers. +Many times it is mind-blowing how accurate it is. +It would be great if one of the OpenAI models could simply work after writing:

    Q: Write the ERC20 smart contract.

    A: use odra::{Mapping, Variable}...

    So far OpenAI hasn't indexed Odra. I even asked ChatGPT.

    Q: Do you know what is the Odra Framework for writing smart contracts?
    Response in one sentence. Use Yoda style.

    A: Aware of an Odra Framework for writing smart contracts, I am not.

    Soon (year or two) it will happen and Odra will be supported out of the box, +simply because it is available on GitHub.

    DaVinci Edit

    OpenAI gives us a great tool called Edit. +It uses the same technology Github Copiled it based on called Codex, +OpenAI gives us access to the model code-davinci-edit-001. +It allows you to paste in the code and ask for changes. +See more examples like rewriting Fibonacci to a recursive version here.

    But it doesn't know Odra. +Luckily this is not a problem. +I have found a nice trick that allows producing the code I want. +We simply have to present all the features of Odra and ask a good question.

    ERC20 by AI

    The goal is to bend AI to write the ERC20 token using Odra. +The Edit query needs two elements:

    • source code,
    • text that describes what should be changed.

    As the input source code I wrote the code that uses all the features ERC20 would use. +I need odra::module, Variable, Mapping, caller(), Address, +constructor, and errors.

    flipper.rs
    use odra::{Variable, types::Address, contract_env, Mapping, execution_error};

    #[odra::module]
    pub struct Flipper {
    value: Variable<bool>,
    flips_count: Variable<u32>,
    owner: Variable<Address>,
    messages: Mapping<(Address, Address), String>
    }

    #[odra::module]
    impl Flipper {
    #[odra(init)]
    pub fn init(&mut self, owner: Address) {
    self.value.set(false);
    self.owner.set(owner);
    }

    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    pub fn flip(&mut self) {
    self.value.set(!self.get_value());
    self.flips_count.set(self.flips_count.get_or_default());
    }

    pub fn get_value(&self) -> bool {
    self.value.get_or_default()
    }

    pub fn get_owner(&self) -> Option<Address> {
    self.owner.get()
    }

    pub fn set_message(&mut self, recipient: Address, msg: String) {
    let sender = contract_env::caller();
    let current_msg = self.messages.get(&(sender, recipient));
    match current_msg {
    Some(_) => contract_env::revert(Error::MessageAlreadyDefined),
    None => self.messages.set(&(sender, recipient), msg)
    }
    }

    pub fn get_message(&self, sender: Address, recipient: Address) -> String {
    self.messages.get_or_default(&(sender, recipient))
    }
    }

    execution_error! {
    pub enum Error {
    MessageAlreadyDefined => 1,
    NotAnMessageSender => 2,
    }
    }

    ChatGPT knows what the ERC20 is, so the kind request for changes is simple.

    Q: Implement another smart contract called ERC20.
    Balances should be of type U256.

    This is the result.

    ERC20 contract in Odra generated by OpenAI
    use odra::{Variable, types::Address, contract_env, Mapping, execution_error, U256};

    #[odra::module]
    pub struct ERC20 {
    name: Variable<String>,
    symbol: Variable<String>,
    decimals: Variable<u8>,
    total_supply: Variable<U256>,
    balances: Mapping<Address, U256>,
    allowed: Mapping<(Address, Address), U256>
    }

    #[odra::module]
    impl ERC20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, total_supply: U256) {
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.total_supply.set(total_supply);
    self.balances.set(&contract_env::caller(), total_supply);
    }

    pub fn total_supply(&self) -> U256 {
    self.total_supply.get_or_default()
    }

    pub fn balance_of(&self, owner: Address) -> U256 {
    self.balances.get_or_default(&owner)
    }

    pub fn transfer(&mut self, to: Address, value: U256) {
    let from = contract_env::caller();
    let from_balance = self.balances.get_or_default(&from);
    let to_balance = self.balances.get_or_default(&to);
    if from_balance < value {
    contract_env::revert(Error::InsufficientBalance);
    }
    self.balances.set(&from, from_balance - value);
    self.balances.set(&to, to_balance + value);
    }

    pub fn transfer_from(&mut self, from: Address, to: Address, value: U256) {
    let caller = contract_env::caller();
    let from_balance = self.balances.get_or_default(&from);
    let to_balance = self.balances.get_or_default(&to);
    let allowed = self.allowed.get_or_default(&(from, caller));
    if from_balance < value {
    contract_env::revert(Error::InsufficientBalance);
    }
    if allowed < value {
    contract_env::revert(Error::InsufficientAllowance);
    }
    self.balances.set(&from, from_balance - value);
    self.balances.set(&to, to_balance + value);
    self.allowed.set(&(from, caller), allowed - value);
    }

    pub fn approve(&mut self, spender: Address, value: U256) {
    let owner = contract_env::caller();
    self.allowed.set(&(owner, spender), value);
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.allowed.get_or_default(&(owner, spender))
    }
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Wow!

    What is next?

    AI already understands smart contracts. +It had to read a lot of Solidity code. +I checked and it knows Uniswap and Compound source code. +Most interesting is that AI was able to implement a concept it already knew +from another programming language in the unseen Rust framework. +At some point, we will be able to translate all the Solidity code to Odra. +Or maybe we will not have to...

    It is hard to imagine how good it will be in 2025 and beyond.

    + + + + \ No newline at end of file diff --git a/docs/blog/Nysa/index.html b/docs/blog/Nysa/index.html new file mode 100644 index 000000000..17e0f187f --- /dev/null +++ b/docs/blog/Nysa/index.html @@ -0,0 +1,20 @@ + + + + + +Nysa | Odra + + + + + +
    +

    Nysa

    · 9 min read

    The Oder River, known as "Odra" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wrocław, Szczecin, and Gdańsk, to international waterways. The Oder also plays a significant role in the region's ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.

    The Nysa Kłodzka is a significant river in Poland, flowing through the country's southwestern part. It travels approximately 188 kilometers, originating in the Czech Republic and merging with the Oder River in Poland. The river passes through picturesque landscapes, including the Kłodzko Valley, and plays a crucial role in local ecosystems. Its waters are harnessed for various purposes, such as hydroelectric power generation and irrigation.

    Oh, wait, shouldn't it be a tech blog?

    This is a valid question, we will get back to it in a moment.

    Odra

    A short reminder:

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design ... +it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel.

    Odra

    Understanding that people generally dislike learning new things, we've kept this in mind throughout development. Since day one, we have focused on creating Odra with the largest group of smart contract developers in mind - those familiar with Solidity. The Odra Framework is designed to flatten the learning curve for this group.

    A Solidity developer will encounter familiar concepts such as:

    • Constructors
    • Payable functions
    • Mappings
    • Reverts
    • Current caller
    • Current block time
    • A standard module library (similar to OpenZeppelin)
    • And more
    note

    It's important to note that the Odra Framework is intentionally blockchain-agnostic. Its design does not target any particular blockchain.

    Ultimately, Odra is built to support multiple blockchains, allowing the writing of smart contracts in Rust.

    Having so many similarities, why not take the next step and transpile Solidity code into Odra code?

    This is where Nysa comes into play.

    Nysa

    Solidity and Rust share some syntax similarities despite being designed for different purposes. Both languages emphasize strong typing, pattern matching, and immutability by default.

    Nysa performs Solidity-to-Rust transpilation through four simple steps.

    nysa-gen

    1. Solidity Parser

    Firstly, we need a well-structured Rust representation of Solidity code. Nysa utilizes LALRPOP - a Rust parser generator framework. In the further steps, this enables us to conduct static analysis of the Solidity code, ranging from contract context down to individual expressions.

    solidity-parser/src/pt.rs
    // The representation of a Solidity contract
    #[derive(Debug, PartialEq)]
    pub struct ContractDefinition {
    pub doc: Vec<DocComment>,
    pub loc: Loc,
    pub ty: ContractTy,
    pub name: Identifier,
    pub base: Vec<Base>,
    pub parts: Vec<ContractPart>,
    }
    1. C3 Linearization

    One of the most notable distinctions between Rust and Solidity is their approach to inheritance. Rust says No, thx, whereas Solidity opts for The more, the better. Speaking more technically, Solidity supports multiple inheritance with C3 linearization.

    info

    The primary purpose of the C3 Linearization Algorithm is to establish a consistent and unambiguous order of method resolution in cases where there might be ambiguity or conflicts due to multiple inheritance. It ensures that the inherited methods are called in a predictable and well-defined sequence based on the class hierarchy and the order in which classes are defined.

    For simulating C3 linearization, Nysa utilizes an implementation of the C3 linearization in Rust written by Maciej Zieliński, so everything stays in the Odra family.

    1. Nysa Parser

    After that, we step to the essential part, converting Solidity code into Rust code.

    For example, a Solidity event.

    event Transfer(address indexed from, address indexed to, uint256 value);

    can easily be represented as an plain Rust struct - the same name, the same fields, similar types.

    #[derive(PartialEq, Eq, Debug)]
    pub struct Transfer {
    from: Option<Address>,
    to: Option<Address>,
    value: U256,
    }

    The same we do with contracts, interfaces, libraries, errors, variables, functions, statements, etc.

    Here is a snippet of the expression parser:

    nysa/src/parser/odra/expr/mod.rs
    pub fn parse<T>(expression: &Expression, ctx: &mut T) -> Result<syn::Expr, ParserError>
    where
    T: StorageInfo + TypeInfo + EventsRegister + ExternalCallsRegister + ContractInfo + FnContext,
    {
    match expression {
    Expression::Require { condition, error } => error::revert(Some(condition), error, ctx),
    Expression::ZeroAddress => Ok(parse_quote!(None)),
    Expression::Add { left, right } => math::add(left, right, ctx),
    Expression::Subtract { left, right } => math::sub(left, right, ctx),
    Expression::Increment { expr } => {
    let expr = parse(expr, ctx)?;
    Ok(parse_quote!(#expr += 1))
    }
    Expression::ExternalCall {
    variable,
    fn_name,
    args,
    } => parse_ext_call(variable, fn_name, args, ctx),
    Expression::Type { ty } => {
    let ty = ty::parse_plain_type_from_ty(ty, ctx)?;
    Ok(parse_quote!(#ty))
    }
    Expression::BoolLiteral(b) => Ok(parse_quote!(#b)),
    ...
    }
    }

    1. Printing the code

    The last step is just consuming the resulting C3 AST. Nysa produces a token stream from the AST. Most likely you would write it to a file.

    And there you are: a Rust smart contract is ready to be compiled!

    Nysa + Odra

    By design, Nysa is a universal tool, so the third step from the pipeline is replaceable. In other words, a Solidity input can be converted to Rust code supporting a framework/SDK of your choice unless you provide a parser implementation.

    However, the default implementation is OdraParser, which takes a contract written in Solidity and splits out an Odra module.

    I hope you see an analogy to the first two paragraphs at this point. Nysa the river and Nysa the transpiler flow into Odra.

    nysa-odra

    Examples

    Status message

    Let's get our hands dirty and create a very simple project. We will write a contract that stores a single mapping of records - an address to a string message.

    To set up the project, we use cargo odra.

    cargo odra new -n status -t blank
    cd status

    The first thing is to add Nysa to the project and create a rudimentary build.rs where we define the input - a solidity contract and the output - an Odra module generated by Nysa.

    Cargo.toml
    [build-dependencies]
    nysa = { version = "0.1.0", features = ["builder"] }
    build.rs
    const DEST_FILE_PATH: &str = "src/status_message.rs";
    const SOURCE_FILE_PATH: &str = "src/status_message.sol";

    fn main() {
    nysa::builder::generate_file::<&str, nysa::OdraParser>(SOURCE_FILE_PATH, DEST_FILE_PATH);
    }

    Next, implement the contract. Naturally, a Solidity one.

    src/status_message.sol
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.19;

    contract StatusMessage {
    mapping(address => string) records;

    function setStatus(string memory status) public payable {
    address accountId = msg.sender;
    records[accountId] = status;
    }

    function getStatus(address accountId) public view returns (string memory) {
    return records[accountId];
    }
    }

    The contract has a single mapping records that stores a message and its owner. Additionally, exposes two entry points: setStatus (sets current's sender message) and getStatus.

    Following, let's define a lib.rs file.

    src/lib.rs
    mod status_message;
    pub use status_message::{StatusMessage, StatusMessageDeployer, StatusMessageRef};

    #[cfg(test)]
    mod test;

    The file is straightforward: registers a status_message rust module, reexports some Odra abstractions, and adds a test module.

    Lastly, we can test our contract. +Like the original solidity contract, our Odra contract exposes two entry points: set_message() and get_message(). +The test code looks like any other Odra test: we use StatusMessageDeployer to instantiate a contract, which gets us a reference to interact with the contract.

    src/test.rs
    use odra::{test_env, types::Address};
    use super::*;

    const ACCOUNT: fn() -> Address = || odra::test_env::get_account(1);

    #[test]
    fn set_get_message() {
    let mut contract = StatusMessageDeployer::default();

    test_env::set_caller(ACCOUNT());
    contract.set_status("hello".to_string());
    assert_eq!("hello".to_string(), contract.get_status(Some(ACCOUNT())));
    }

    #[test]
    fn get_nonexistent_message() {
    let contract = StatusMessageDeployer::default();

    assert_eq!(
    String::new(),
    contract.get_status(Some(ACCOUNT()))
    );
    }
    cargo odra test # test against MockVM
    # or
    cargo odra test -b casper # build a wasm file and test against CasperVM
    status-message
    ├── src
    │ ├── lib.rs
    │ ├── status_message.sol
    │ └── test.rs
    ├── build.rs
    ├── Cargo.toml
    └── Odra.toml

    Full example available here.

    CappedErc20

    A more complex, real-world example is a CappedErc20 contract. It is a ERC20 Ownable, Burnable and Capped token contract.

    plascoin.sol
    // ...
    // rest of the code

    contract Plascoin is ERC20Capped, ERC20Burnable, Ownable {
    constructor(string memory name_, string memory symbol_, uint256 cap_, address initialOwner) ERC20(name_, symbol_) ERC20Capped(cap_) Ownable(initialOwner) {
    }

    function mint(address account, uint256 amount) public onlyOwner {
    _mint(account, amount);
    }

    function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Capped) {
    super._update(from, to, value);
    }
    }

    You can check out the full source code here.

    Deployment of such a contract onto the Casper testnet is straightforward. We are just two steps from it.

    # to make sure the contract works as expected 
    # we execute cargo odra test command to build and run tests
    cargo odra test -b casper

    # deploy onto the testnet
    casper-client put-deploy
    --node-address {{NODE_ADDRESS}}
    --chain-name casper-test
    --secret-key {{SECRET_KEY}} \
    --session-path {{CONTRACT_WASM}} \
    --payment-amount 130000000000 \
    --session-arg "odra_cfg_package_hash_key_name:string:'{{CONTRACT_PACKAGE_HASH_NAMED_KEY}}'" \
    --session-arg "odra_cfg_allow_key_override:bool:'true'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \
    --session-arg "name:string='{{name}}'" \
    --session-arg "symbol:string='{{symbol}}'" \
    --session-arg "cap:u256='{{cap}}'" \
    --session-arg "initial_owner:opt_key='{{owner}}'"

    Literally in 5 minutes I was able to:

    1. Build a wasm file from Solidity source code
    2. Successfully deploy the contract onto Testnet,
    3. Mint some tokens,
    4. And transfer them.

    Finally, we compare the costs of Solidity-to-Odra contract and a native CEP-18 implementation. Despite the contracts being different in terms of the internal logic and exposed entry points, such comparison gives us some insight into Nysa's efficiency.

    actionCEP-18Nysa
    deploy143.8793.37
    transfer1.291.36

    Conclusion

    Nysa is at early stage of development, but already has shown a huge potential. In a few simple steps, you can take advantage of an existing smart contract and convert it into an Odra module. The module can be a standalone contract, or a building block of a bigger contract.

    + + + + \ No newline at end of file diff --git a/docs/blog/archive/index.html b/docs/blog/archive/index.html new file mode 100644 index 000000000..8db676a15 --- /dev/null +++ b/docs/blog/archive/index.html @@ -0,0 +1,17 @@ + + + + + +Archive | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/blog/atom.xml b/docs/blog/atom.xml new file mode 100644 index 000000000..32eb2a7f3 --- /dev/null +++ b/docs/blog/atom.xml @@ -0,0 +1,254 @@ + + + https://odra.dev/blog + Odra Blog + 2023-08-18T00:00:00.000Z + https://github.com/jpmonette/feed + + Odra Blog + https://odra.dev/img/favicon.ico + + <![CDATA[Nysa]]> + https://odra.dev/blog/Nysa + + 2023-08-18T00:00:00.000Z + + The Oder River, known as "Odra" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wrocław, Szczecin, and Gdańsk, to international waterways. The Oder also plays a significant role in the region's ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.

    The Nysa Kłodzka is a significant river in Poland, flowing through the country's southwestern part. It travels approximately 188 kilometers, originating in the Czech Republic and merging with the Oder River in Poland. The river passes through picturesque landscapes, including the Kłodzko Valley, and plays a crucial role in local ecosystems. Its waters are harnessed for various purposes, such as hydroelectric power generation and irrigation.

    Oh, wait, shouldn't it be a tech blog?

    This is a valid question, we will get back to it in a moment.

    Odra

    A short reminder:

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design ... +it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel.

    Odra

    Understanding that people generally dislike learning new things, we've kept this in mind throughout development. Since day one, we have focused on creating Odra with the largest group of smart contract developers in mind - those familiar with Solidity. The Odra Framework is designed to flatten the learning curve for this group.

    A Solidity developer will encounter familiar concepts such as:

    • Constructors
    • Payable functions
    • Mappings
    • Reverts
    • Current caller
    • Current block time
    • A standard module library (similar to OpenZeppelin)
    • And more
    note

    It's important to note that the Odra Framework is intentionally blockchain-agnostic. Its design does not target any particular blockchain.

    Ultimately, Odra is built to support multiple blockchains, allowing the writing of smart contracts in Rust.

    Having so many similarities, why not take the next step and transpile Solidity code into Odra code?

    This is where Nysa comes into play.

    Nysa

    Solidity and Rust share some syntax similarities despite being designed for different purposes. Both languages emphasize strong typing, pattern matching, and immutability by default.

    Nysa performs Solidity-to-Rust transpilation through four simple steps.

    nysa-gen

    1. Solidity Parser

    Firstly, we need a well-structured Rust representation of Solidity code. Nysa utilizes LALRPOP - a Rust parser generator framework. In the further steps, this enables us to conduct static analysis of the Solidity code, ranging from contract context down to individual expressions.

    solidity-parser/src/pt.rs
    // The representation of a Solidity contract
    #[derive(Debug, PartialEq)]
    pub struct ContractDefinition {
    pub doc: Vec<DocComment>,
    pub loc: Loc,
    pub ty: ContractTy,
    pub name: Identifier,
    pub base: Vec<Base>,
    pub parts: Vec<ContractPart>,
    }
    1. C3 Linearization

    One of the most notable distinctions between Rust and Solidity is their approach to inheritance. Rust says No, thx, whereas Solidity opts for The more, the better. Speaking more technically, Solidity supports multiple inheritance with C3 linearization.

    info

    The primary purpose of the C3 Linearization Algorithm is to establish a consistent and unambiguous order of method resolution in cases where there might be ambiguity or conflicts due to multiple inheritance. It ensures that the inherited methods are called in a predictable and well-defined sequence based on the class hierarchy and the order in which classes are defined.

    For simulating C3 linearization, Nysa utilizes an implementation of the C3 linearization in Rust written by Maciej Zieliński, so everything stays in the Odra family.

    1. Nysa Parser

    After that, we step to the essential part, converting Solidity code into Rust code.

    For example, a Solidity event.

    event Transfer(address indexed from, address indexed to, uint256 value);

    can easily be represented as an plain Rust struct - the same name, the same fields, similar types.

    #[derive(PartialEq, Eq, Debug)]
    pub struct Transfer {
    from: Option<Address>,
    to: Option<Address>,
    value: U256,
    }

    The same we do with contracts, interfaces, libraries, errors, variables, functions, statements, etc.

    Here is a snippet of the expression parser:

    nysa/src/parser/odra/expr/mod.rs
    pub fn parse<T>(expression: &Expression, ctx: &mut T) -> Result<syn::Expr, ParserError>
    where
    T: StorageInfo + TypeInfo + EventsRegister + ExternalCallsRegister + ContractInfo + FnContext,
    {
    match expression {
    Expression::Require { condition, error } => error::revert(Some(condition), error, ctx),
    Expression::ZeroAddress => Ok(parse_quote!(None)),
    Expression::Add { left, right } => math::add(left, right, ctx),
    Expression::Subtract { left, right } => math::sub(left, right, ctx),
    Expression::Increment { expr } => {
    let expr = parse(expr, ctx)?;
    Ok(parse_quote!(#expr += 1))
    }
    Expression::ExternalCall {
    variable,
    fn_name,
    args,
    } => parse_ext_call(variable, fn_name, args, ctx),
    Expression::Type { ty } => {
    let ty = ty::parse_plain_type_from_ty(ty, ctx)?;
    Ok(parse_quote!(#ty))
    }
    Expression::BoolLiteral(b) => Ok(parse_quote!(#b)),
    ...
    }
    }

    1. Printing the code

    The last step is just consuming the resulting C3 AST. Nysa produces a token stream from the AST. Most likely you would write it to a file.

    And there you are: a Rust smart contract is ready to be compiled!

    Nysa + Odra

    By design, Nysa is a universal tool, so the third step from the pipeline is replaceable. In other words, a Solidity input can be converted to Rust code supporting a framework/SDK of your choice unless you provide a parser implementation.

    However, the default implementation is OdraParser, which takes a contract written in Solidity and splits out an Odra module.

    I hope you see an analogy to the first two paragraphs at this point. Nysa the river and Nysa the transpiler flow into Odra.

    nysa-odra

    Examples

    Status message

    Let's get our hands dirty and create a very simple project. We will write a contract that stores a single mapping of records - an address to a string message.

    To set up the project, we use cargo odra.

    cargo odra new -n status -t blank
    cd status

    The first thing is to add Nysa to the project and create a rudimentary build.rs where we define the input - a solidity contract and the output - an Odra module generated by Nysa.

    Cargo.toml
    [build-dependencies]
    nysa = { version = "0.1.0", features = ["builder"] }
    build.rs
    const DEST_FILE_PATH: &str = "src/status_message.rs";
    const SOURCE_FILE_PATH: &str = "src/status_message.sol";

    fn main() {
    nysa::builder::generate_file::<&str, nysa::OdraParser>(SOURCE_FILE_PATH, DEST_FILE_PATH);
    }

    Next, implement the contract. Naturally, a Solidity one.

    src/status_message.sol
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.19;

    contract StatusMessage {
    mapping(address => string) records;

    function setStatus(string memory status) public payable {
    address accountId = msg.sender;
    records[accountId] = status;
    }

    function getStatus(address accountId) public view returns (string memory) {
    return records[accountId];
    }
    }

    The contract has a single mapping records that stores a message and its owner. Additionally, exposes two entry points: setStatus (sets current's sender message) and getStatus.

    Following, let's define a lib.rs file.

    src/lib.rs
    mod status_message;
    pub use status_message::{StatusMessage, StatusMessageDeployer, StatusMessageRef};

    #[cfg(test)]
    mod test;

    The file is straightforward: registers a status_message rust module, reexports some Odra abstractions, and adds a test module.

    Lastly, we can test our contract. +Like the original solidity contract, our Odra contract exposes two entry points: set_message() and get_message(). +The test code looks like any other Odra test: we use StatusMessageDeployer to instantiate a contract, which gets us a reference to interact with the contract.

    src/test.rs
    use odra::{test_env, types::Address};
    use super::*;

    const ACCOUNT: fn() -> Address = || odra::test_env::get_account(1);

    #[test]
    fn set_get_message() {
    let mut contract = StatusMessageDeployer::default();

    test_env::set_caller(ACCOUNT());
    contract.set_status("hello".to_string());
    assert_eq!("hello".to_string(), contract.get_status(Some(ACCOUNT())));
    }

    #[test]
    fn get_nonexistent_message() {
    let contract = StatusMessageDeployer::default();

    assert_eq!(
    String::new(),
    contract.get_status(Some(ACCOUNT()))
    );
    }
    cargo odra test # test against MockVM
    # or
    cargo odra test -b casper # build a wasm file and test against CasperVM
    status-message
    ├── src
    │ ├── lib.rs
    │ ├── status_message.sol
    │ └── test.rs
    ├── build.rs
    ├── Cargo.toml
    └── Odra.toml

    Full example available here.

    CappedErc20

    A more complex, real-world example is a CappedErc20 contract. It is a ERC20 Ownable, Burnable and Capped token contract.

    plascoin.sol
    // ...
    // rest of the code

    contract Plascoin is ERC20Capped, ERC20Burnable, Ownable {
    constructor(string memory name_, string memory symbol_, uint256 cap_, address initialOwner) ERC20(name_, symbol_) ERC20Capped(cap_) Ownable(initialOwner) {
    }

    function mint(address account, uint256 amount) public onlyOwner {
    _mint(account, amount);
    }

    function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Capped) {
    super._update(from, to, value);
    }
    }

    You can check out the full source code here.

    Deployment of such a contract onto the Casper testnet is straightforward. We are just two steps from it.

    # to make sure the contract works as expected 
    # we execute cargo odra test command to build and run tests
    cargo odra test -b casper

    # deploy onto the testnet
    casper-client put-deploy
    --node-address {{NODE_ADDRESS}}
    --chain-name casper-test
    --secret-key {{SECRET_KEY}} \
    --session-path {{CONTRACT_WASM}} \
    --payment-amount 130000000000 \
    --session-arg "odra_cfg_package_hash_key_name:string:'{{CONTRACT_PACKAGE_HASH_NAMED_KEY}}'" \
    --session-arg "odra_cfg_allow_key_override:bool:'true'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \
    --session-arg "name:string='{{name}}'" \
    --session-arg "symbol:string='{{symbol}}'" \
    --session-arg "cap:u256='{{cap}}'" \
    --session-arg "initial_owner:opt_key='{{owner}}'"

    Literally in 5 minutes I was able to:

    1. Build a wasm file from Solidity source code
    2. Successfully deploy the contract onto Testnet,
    3. Mint some tokens,
    4. And transfer them.

    Finally, we compare the costs of Solidity-to-Odra contract and a native CEP-18 implementation. Despite the contracts being different in terms of the internal logic and exposed entry points, such comparison gives us some insight into Nysa's efficiency.

    actionCEP-18Nysa
    deploy143.8793.37
    transfer1.291.36

    Conclusion

    Nysa is at early stage of development, but already has shown a huge potential. In a few simple steps, you can take advantage of an existing smart contract and convert it into an Odra module. The module can be a standalone contract, or a building block of a bigger contract.

    ]]>
    + + Krzysztof Pobiarżyn + https://github.com/kpob + +
    + + <![CDATA[It's all about the community!]]> + https://odra.dev/blog/its-all-about-the-community + + 2023-06-27T00:00:00.000Z + + Over the past months, +we have been working hard on bringing Odra to the Casper world. +While we are proud of what we have achieved so far, +the hard part is just beginning. +Smart contract developers from outside of our team are starting to use Odra. +We are thrilled about it and here is how we are going to support the community.

    Hello Odra Community

    Whether you are a Rust developer, Solidity developer or a Casper enthusiast +we are happy to have you here, reading this blog post.

    We have built Odra to make smart contract development on Casper easy. +Now we are entering the next phase of the open source journey. +We are going to focus on the community and make sure +Odra is the best tool for the job. +Our motto (we borrowed from the Django Project) is:

    We bring cutting-edge smart contract development tools to +professionals with deadlines.

    How will we do it? We are going to focus on four things:

    • Quality - Our code and documentation will be of the highest quality. +We will always have tons of tests and examples.
    • Simplicity - The simplest solution is the best solution. +Odra's API needs to be simple and easy to use. +Always! +We are not afraid to take a few steps back and rethink our design. +We believe in short feedback loops and fast iterations.
    • Reusability - No one likes to repeat itself. +We see a huge potential in Odra Modules. +In time, it can become a standard library of Casper smart contracts, +that are battle-tested and ready to use.
    • Community - We are here to help you. +You can always reach out to us on Discord or Github.

    We will help with your project

    Whether you are a Rust developer or not, you can start using Odra today. +We have prepared a few examples and docs to help you get started. +Rust knowledge required to use Odra is minimal. +That was always the goal.

    But we understand that it is hard to start. +We got your back.

    We offer free consulting + 2 hours of live coding.

    All you have to do is write us an email at contract@odra.dev +with a short description of your project. +We will schedule a call and help you get started with Odra. +After 2 hours of live coding, you will have a working repository with 2 or 3 +smart contracts, that you can use as a starting point for your project.

    Roadmap

    The feedback we got quite often was: +It's nice, but will it last? What's the direction of the project? +Point taken. Now we answer: We are here to stay. +We got the support from the Casper Association and some projects of our own +to keep us funded. We play the long game.

    To systematize our work, we have prepared the roadmap. +As of now, we maintain plans for at least three future releases. +It is a good balance between predictability and flexibility. +We will release new versions approximately every 1-2 months or as needed. +Everyone is encouraged to propose a new Odra feature or enhancement. +New proposals need to be discussed and approved by the core team. +When the feature is ready, we assign it to one of the future releases.

    Odra Roadmap

    ]]>
    + + Maciej Zieliński + https://github.com/zie1ony + +
    + + <![CDATA[OpenAI writes ERC20 in Odra]]> + https://odra.dev/blog/2023-02-27-openai-writes-erc20-in-odra + + 2023-02-27T00:00:00.000Z + + OpenAI can write Odra smart contracts. +This is how.

    OpenAI

    OpenAI already proved that AI can code. +Github Copilot is used by more and more developers. +Many times it is mind-blowing how accurate it is. +It would be great if one of the OpenAI models could simply work after writing:

    Q: Write the ERC20 smart contract.

    A: use odra::{Mapping, Variable}...

    So far OpenAI hasn't indexed Odra. I even asked ChatGPT.

    Q: Do you know what is the Odra Framework for writing smart contracts?
    Response in one sentence. Use Yoda style.

    A: Aware of an Odra Framework for writing smart contracts, I am not.

    Soon (year or two) it will happen and Odra will be supported out of the box, +simply because it is available on GitHub.

    DaVinci Edit

    OpenAI gives us a great tool called Edit. +It uses the same technology Github Copiled it based on called Codex, +OpenAI gives us access to the model code-davinci-edit-001. +It allows you to paste in the code and ask for changes. +See more examples like rewriting Fibonacci to a recursive version here.

    But it doesn't know Odra. +Luckily this is not a problem. +I have found a nice trick that allows producing the code I want. +We simply have to present all the features of Odra and ask a good question.

    ERC20 by AI

    The goal is to bend AI to write the ERC20 token using Odra. +The Edit query needs two elements:

    • source code,
    • text that describes what should be changed.

    As the input source code I wrote the code that uses all the features ERC20 would use. +I need odra::module, Variable, Mapping, caller(), Address, +constructor, and errors.

    flipper.rs
    use odra::{Variable, types::Address, contract_env, Mapping, execution_error};

    #[odra::module]
    pub struct Flipper {
    value: Variable<bool>,
    flips_count: Variable<u32>,
    owner: Variable<Address>,
    messages: Mapping<(Address, Address), String>
    }

    #[odra::module]
    impl Flipper {
    #[odra(init)]
    pub fn init(&mut self, owner: Address) {
    self.value.set(false);
    self.owner.set(owner);
    }

    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    pub fn flip(&mut self) {
    self.value.set(!self.get_value());
    self.flips_count.set(self.flips_count.get_or_default());
    }

    pub fn get_value(&self) -> bool {
    self.value.get_or_default()
    }

    pub fn get_owner(&self) -> Option<Address> {
    self.owner.get()
    }

    pub fn set_message(&mut self, recipient: Address, msg: String) {
    let sender = contract_env::caller();
    let current_msg = self.messages.get(&(sender, recipient));
    match current_msg {
    Some(_) => contract_env::revert(Error::MessageAlreadyDefined),
    None => self.messages.set(&(sender, recipient), msg)
    }
    }

    pub fn get_message(&self, sender: Address, recipient: Address) -> String {
    self.messages.get_or_default(&(sender, recipient))
    }
    }

    execution_error! {
    pub enum Error {
    MessageAlreadyDefined => 1,
    NotAnMessageSender => 2,
    }
    }

    ChatGPT knows what the ERC20 is, so the kind request for changes is simple.

    Q: Implement another smart contract called ERC20.
    Balances should be of type U256.

    This is the result.

    ERC20 contract in Odra generated by OpenAI
    use odra::{Variable, types::Address, contract_env, Mapping, execution_error, U256};

    #[odra::module]
    pub struct ERC20 {
    name: Variable<String>,
    symbol: Variable<String>,
    decimals: Variable<u8>,
    total_supply: Variable<U256>,
    balances: Mapping<Address, U256>,
    allowed: Mapping<(Address, Address), U256>
    }

    #[odra::module]
    impl ERC20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, total_supply: U256) {
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.total_supply.set(total_supply);
    self.balances.set(&contract_env::caller(), total_supply);
    }

    pub fn total_supply(&self) -> U256 {
    self.total_supply.get_or_default()
    }

    pub fn balance_of(&self, owner: Address) -> U256 {
    self.balances.get_or_default(&owner)
    }

    pub fn transfer(&mut self, to: Address, value: U256) {
    let from = contract_env::caller();
    let from_balance = self.balances.get_or_default(&from);
    let to_balance = self.balances.get_or_default(&to);
    if from_balance < value {
    contract_env::revert(Error::InsufficientBalance);
    }
    self.balances.set(&from, from_balance - value);
    self.balances.set(&to, to_balance + value);
    }

    pub fn transfer_from(&mut self, from: Address, to: Address, value: U256) {
    let caller = contract_env::caller();
    let from_balance = self.balances.get_or_default(&from);
    let to_balance = self.balances.get_or_default(&to);
    let allowed = self.allowed.get_or_default(&(from, caller));
    if from_balance < value {
    contract_env::revert(Error::InsufficientBalance);
    }
    if allowed < value {
    contract_env::revert(Error::InsufficientAllowance);
    }
    self.balances.set(&from, from_balance - value);
    self.balances.set(&to, to_balance + value);
    self.allowed.set(&(from, caller), allowed - value);
    }

    pub fn approve(&mut self, spender: Address, value: U256) {
    let owner = contract_env::caller();
    self.allowed.set(&(owner, spender), value);
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.allowed.get_or_default(&(owner, spender))
    }
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Wow!

    What is next?

    AI already understands smart contracts. +It had to read a lot of Solidity code. +I checked and it knows Uniswap and Compound source code. +Most interesting is that AI was able to implement a concept it already knew +from another programming language in the unseen Rust framework. +At some point, we will be able to translate all the Solidity code to Odra. +Or maybe we will not have to...

    It is hard to imagine how good it will be in 2025 and beyond.

    ]]>
    + + Maciej Zieliński + https://github.com/zie1ony + +
    + + <![CDATA[Odra + CosmWasm]]> + https://odra.dev/blog/odra-cosmwasm + + 2023-02-15T00:00:00.000Z + + In November 2022 we released the first version of the Odra Framework. It's time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm.

    CosmWasm

    CosmWasm is a smart contract platform for building dApps on the Cosmos blockchain ecosystem. +The platform is designed as a module that can be integrated into the Cosmos SDK, enabling developers who are already building blockchains with the Cosmos SDK to easily incorporate CosmWasm smart contract functionality without the need to modify their existing code.

    It uses the Rust programming language, so is potentially a perfect candidate for an Odra backend. +There are many blockchains like Osmosis, Secret Network, Juno that utilize CosmWasm.

    Show me your code

    I would like to write a Counter smart contract that is CosmWasm compatible. +What are the requirements?

    1. It should store a u32 value.
    2. The initial value it set by the contract deployer.
    3. The value can be incremented.
    4. The value can read from the storage.
    5. The contract can call another contract and increment its counter.

    So let's write an Odra module first.

    counter.rs
    use odra::{types::{Address, event::OdraEvent}, Variable, contract_env};
    use self::events::{Init, ValueUpdated};

    #[odra::module]
    pub struct Counter {
    pub value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub fn init(&mut self, value: u32) {
    self.value.set(value);
    <Init as OdraEvent>::emit(Init {
    value,
    });
    }

    pub fn increment(&mut self) {
    let old_value = self.value.get_or_default();
    let new_value = old_value + 1;
    self.value.set(new_value);

    ValueUpdated {
    old_value,
    new_value,
    operator: contract_env::caller()
    }.emit();
    }

    pub fn cross_increment(&mut self, counter_address: Address) {
    CounterRef::at(counter_address).increment();
    }

    pub fn get_value(&self) -> u32 {
    self.value.get_or_default()
    }
    }

    mod events {
    use odra::types::Address;

    #[derive(odra::Event)]
    pub struct ValueUpdated {
    pub old_value: u32,
    pub new_value: u32,
    pub operator: Address
    }

    #[derive(odra::Event)]
    pub struct Init {
    pub value: u32,
    }
    }

    #[cfg(test)]
    mod tests {
    use super::*;

    #[test]
    fn deploy() {
    let counter = CounterDeployer::init(10);
    assert_eq!(10, counter.get_value());
    }

    #[test]
    fn increment() {
    let mut counter = CounterDeployer::init(10);
    counter.increment();
    assert_eq!(11, counter.get_value());
    }
    }

    But wait, I mentioned CosmWasm, did I?

    Here the beauty of Odra comes into play.

    Let's use cargo-odra.

    cargo odra build -b cosmos

    And... that's it, congratulations! We have just written and build our first CosmWasm contract. +As you see, it is nothing different from building a contract for Casper. No additional code, we only changed the -b flag.

    Deploy

    We have just built a wasm file, but is it really a fully functional contract?

    As a battlefield let's choose Juno Network (if you would like to read more about smart contract development on Juno read this Quick Start tutorial). This is an arbitrary choice, each client is built upon a so-called Wasm Zone wasmd, and its interface is alike.

    Assuming you already know how to interact with Juno testnet, let's move to the fun part.

    But before we go, to keep things simple, let's prepare a justfile. It'll make our interactions with the blockchain much easier. See full version.

    justfile
    NODE := "--node https://rpc.uni.juno.deuslabs.fi:443"
    CHAIN_ID := "--chain-id uni-6"
    QUERY_FLAGS := NODE + " " + CHAIN_ID
    TRANSACTION_DEFAULTS := "--gas-prices 0.025ujunox --gas auto --gas-adjustment 1.3 --broadcast-mode block"
    EXEC_FLAGS := NODE + " " + CHAIN_ID + " " + TRANSACTION_DEFAULTS

    get-address NAME:
    junod keys show {{NAME}} | grep -o juno.*

    store-wasm WASM_PATH SENDER:
    junod tx wasm store \
    {{WASM_PATH}} --from {{SENDER}} {{EXEC_FLAGS}}

    init-contract CODE_ID VALUE SENDER CONTRACT_NAME:
    junod tx wasm instantiate \
    {{CODE_ID}} \
    `just run-args-parser '{"name": "init", "args": [ { "value" : {{VALUE}} }]}'` \
    --label '{{CONTRACT_NAME}}' --from {{SENDER}} \
    --admin `just get-address {{SENDER}}` \
    {{EXEC_FLAGS}}

    exec-increment ADDRESS SENDER:
    junod tx wasm execute \
    {{ADDRESS}} \
    `just run-args-parser '{"name": "increment"}'` \
    --from {{SENDER}} \
    {{EXEC_FLAGS}}

    query-get-value ADDRESS:
    junod q wasm contract-state smart {{ADDRESS}} \
    `just run-args-parser '{"name": "get_value"}'` {{QUERY_FLAGS}}

    Ok, we are ready to go.

    First, a CosmWasm contract needs to be stored, technically is not a contract yet. Like a larva waiting to morph into a butterfly (sorry for that).

    There are three ways to interact with a contract.

    1. Instantiate - in other words, a constructor call. Once the contract is instantiated, it gets an address.
    2. Execute - call an entrypoint that modifies the state.
    3. Query - read the contract's state.

    Now, let's take a look at how to do it using the tools we have just prepared.

    # args: 
    # the path to a wasm file,
    # the name under we store the private key.
    just store-wasm counter.wasm odra

    ...
    raw_log: '[{"events":[{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgStoreCode"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"store_code","attributes":[{"key":"code_checksum","value":"9fb9e7f39170de2628892ed5eecc556e2487267b30bb2c9656f8c7d1cd9f9a59"},{"key":"code_id","value":"286"}]}]}]'
    ...
    txhash: 1A8BA520E980C5ABCBCFA6F62D68B6BB82E780544605DE4DD5C6B1C5E966441B

    Great, our code is successfully stored. Form the logs we can read now the code_id which we will use to initialize the contract.

    # args: 
    # code id taken from the previous tx,
    # counter initial value,
    # named private key,
    # contract label.
    just init-contract 286 1 odra "My Counter"

    ...
    raw_log: '[{"events":[{"type":"instantiate","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"code_id","value":"286"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgInstantiateContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"wasm","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"value","value":"1"}]},{"type":"wasm-Init","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"value","value":"1"}]}]}]'
    ...
    txhash: 8DC53F95805349C3763CF4AF9527CAB2AEBEC77B240EFD3801C61231D8748F26

    Fantastic, the contract has been initialized and we have its address - juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g. +It's time to increment the counter.

    # args:
    # contract address taken from the previous tx,
    # named private key
    just exec-increment juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g odra

    ...
    raw_log: '[{"events":[{"type":"execute","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgExecuteContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"wasm","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"action","value":"increment"}]},{"type":"wasm-ValueUpdated","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"old_value","value":"1"},{"key":"new_value","value":"2"},{"key":"operator","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]}]}]'
    ...
    txhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2

    Finally, we expected, the value to be equal to 2 (the initial value was 1 and we incremented it once).

    # args:
    # contract address
    just query-get-value juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g

    data: 2

    Indeed, as expected the current counter value is 2.

    Show me your transaction

    I get it, you don't want to do it all by yourself. So let's take a closer look at one of my transactions.

    junod q tx 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2 --node https://rpc.uni.juno.deuslabs.fi:443 --chain-id uni-6
    ...
    logs:
    - events:
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    type: execute
    - attributes:
    - key: action
    value: /cosmwasm.wasm.v1.MsgExecuteContract
    - key: module
    value: wasm
    - key: sender
    value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh
    type: message
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    - key: action
    value: increment
    type: wasm
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    - key: old_value
    value: "1"
    - key: new_value
    value: "2"
    - key: operator
    value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh
    type: wasm-ValueUpdated
    ...
    txhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2

    If you are familiar Cosmos ecosystem, you can see that there is an attribute containing +the performed action (increment) (If there were some parameters, they would be included in this attribute). +We can find here also our ValueUpdated event with its arguments old_value, new_value and operator.

    Wow, we have it, everything worked as intended!

    Conclusion

    Wouldn't it be great to replace Casper Erc20 and Cosmos Erc20 with a super-simple +single Odra Erc20 implementation?

    The Counter contract is just a POC, and there is still a long road ahead of us. +This simple example shows that features like storage, events, and cross-contract calls +can be unified in a simple readable interface.

    CosmWasm integration hasn't been published yet, but if you want to experiment by yourself, +check our GitHub (don't forget to update cargo-odra as well).

    Join us

    Interested?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    ]]>
    + + Krzysztof Pobiarżyn + https://github.com/kpob + +
    + + <![CDATA[EVM at Risc0]]> + https://odra.dev/blog/evm-at-risc0 + + 2023-02-13T00:00:00.000Z + + Let's run Solidity code inside SputnikVM inside Risc0.

    First make sure you know how Risc0 works. +My previous post explains it.

    If you want to jump directly to the full code example, it's in the repo.

    Solidity

    As an example, I have this simple Solidity code. +It is a calculator with two functions. +One for addition and one for the nth Fibonacci number.

    bytecode/Calculator.sol
    contract Calculator {
    function add(uint256 a, uint256 b) public pure returns (uint256) {
    return a + b;
    }

    function fibonacci(uint256 n) public returns (uint256) {
    if (n <= 1) {
    return n;
    } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
    }
    }
    }

    It needs to be compiled into the byte code. solc can do this.

    $ solc \
    --bin-runtime \
    --optimize \
    --overwrite \
    --evm-version istanbul \
    --output-dir bytecode \
    bytecode/Calculator.sol

    It produces an EVM bytecode in the bytecode directory.

    $ ls bytecode/
    Calculator.bin-runtime Calculator.sol

    EVM

    The EVM I used is SputnikVM. +Most important it is written in pure Rust and even with no_std mode. +This way I can start an in-memory instance of EVM. +Then take the bytecode of a contract and install it. +Finally, call the contract with arguments and obtain the result value. +For now, it's just a Rust code. Risc0 comes later.

    The code is based on Sputnik's benchmark test. +Huge thanks to Michael Birch for helping with Sputnik. +Also make sure how EVM's function selectors work.

    evm-runner/src/lib.rs

    // Load previously compiled Calculator contract.
    pub const CALCULATOR_EVM_PROGRAM: &str = include_str!(
    "../../bytecode/Calculator.bin-runtime"
    );

    // Run Calculator for a given input.
    pub fn run_calc_contract(input: &str) -> String {
    run_evm(CALCULATOR_EVM_PROGRAM, input)
    }

    // Run a program (contract) for a given input.
    fn run_evm(program: &str, input: &str) -> String {

    // Define EVM configuration.
    let config = Config::istanbul();
    let vicinity = MemoryVicinity {
    gas_price: U256::zero(),
    origin: H160::default(),
    block_hashes: Vec::new(),
    block_number: Default::default(),
    block_coinbase: Default::default(),
    block_timestamp: Default::default(),
    block_difficulty: Default::default(),
    block_gas_limit: Default::default(),
    chain_id: U256::one(),
    block_base_fee_per_gas: U256::zero(),
    };

    // Initialized the state of EVM's memory.
    let mut state = BTreeMap::new();

    // Add our contract under the 0x10 address.
    state.insert(
    H160::from_str("0x1000000000000000000000000000000000000000")
    .unwrap(),
    MemoryAccount {
    nonce: U256::one(),
    balance: U256::from(10000000),
    storage: BTreeMap::new(),
    code: hex::decode(program).unwrap(),
    }
    );

    // Add new user 0xf0 that will be used as the contract caller.
    state.insert(
    H160::from_str("0xf000000000000000000000000000000000000000")
    .unwrap(),
    MemoryAccount {
    nonce: U256::one(),
    balance: U256::from(10000000),
    storage: BTreeMap::new(),
    code: Vec::new(),
    },
    );

    // Prepare the executor.
    let backend = MemoryBackend::new(&vicinity, state);
    let metadata = StackSubstateMetadata::new(u64::MAX, &config);
    let state = MemoryStackState::new(metadata, &backend);
    let precompiles = BTreeMap::new();
    let mut executor
    = StackExecutor::new_with_precompiles(state, &config, &precompiles);

    // Call the 0x10 contract using the 0xf0 user.
    // Use the input variable.
    let (exit_reason, result) = executor.transact_call(
    H160::from_str("0xf000000000000000000000000000000000000000")
    .unwrap(),
    H160::from_str("0x1000000000000000000000000000000000000000")
    .unwrap(),
    U256::zero(),
    hex::decode(input).unwrap(),
    u64::MAX,
    Vec::new(),
    );

    // Make sure the execution succeeded.
    assert!(exit_reason == ExitReason::Succeed(ExitSucceed::Returned));

    // Return hex encoded string.
    hex::encode(result)
    }

    Let's execute it. In below tests the data variable hold two things: +function selector and arguments.

    For example 61047ff4000000000000000000000000000000000000000000000000000000000000000a +is concatination of the function selector (first 8 chars) and 256-bit long argument. +It is just fibonacci(10). a is hex of 10 and 37 is hex of 52.

    evm-runner/src/lib.rs
    #[test]
    fn fibonacci_works() {
    let data = "61047ff4000000000000000000000000000000000000000000000000000000000000000a";
    let result = run_calc_contract(data);
    assert_eq!(result, "0000000000000000000000000000000000000000000000000000000000000037");
    }

    #[test]
    fn addition_works() {
    let data = "771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002";
    let result = run_calc_contract(data);
    assert_eq!(result, "0000000000000000000000000000000000000000000000000000000000000009");
    }

    Risc0

    It's time for risc0.

    First the guest program. +It is super simple. +It takes a string as an argument, +passes it to the run_calc_contract +and returns the result.

    methods/guest/src/bin/evm_calc.rs
    #![no_main]
    #![no_std]

    extern crate alloc;

    use alloc::{string::String};
    use risc0_zkvm::guest::{env};
    use evm_runner::run_calc_contract;

    risc0_zkvm::guest::entry!(main);

    pub fn main() {
    let input: String = env::read();
    let result = run_calc_contract(&input);
    env::commit(&result);
    }

    The final step is calling it under ZK.

    host/src/main.rs
    fn main() {
    println!("Proving Calculator.add(7, 2)");
    let input = "771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002";
    let result = run_prover(input);
    println!("Proof generated. 7 + 2 = {result}");

    println!("Proving Calculator.fibonacci(4)");
    let input = "61047ff40000000000000000000000000000000000000000000000000000000000000004";
    let result = run_prover(input);
    println!("Proof generated. fibonacci(4) = {result}");
    }

    fn run_prover(input: &str) -> u32 {
    // Make the prover.
    let method_code = std::fs::read(EVM_CALC_PATH).unwrap();
    let mut prover = Prover::new(&method_code, EVM_CALC_ID).unwrap();

    // Push the input as an argument.
    prover.add_input_u32_slice(to_vec(input).unwrap().as_slice());

    // Execute the prover.
    let receipt = prover.run().unwrap();

    // Verify the proof.
    assert!(receipt.verify(EVM_CALC_ID).is_ok());

    // Return result as an u32 value.
    let result: String = from_slice(receipt.journal.as_slice()).unwrap();
    u32::from_str_radix(&result, 16).unwrap()
    }
    $ cargo run --release -p host
    Proving Calculator.add(7, 2)
    Proof generated. 7 + 2 = 9
    Proving Calculator.fibonacci(4)
    Proof generated. fibonacci(4) = 3

    Conclusion

    How amazing and mindblowing it is! +Of course, it's just a proof of concept. +Yet with further development of Risc0 improving its proving time and +with more flexible SputnikVM this approach is more than promising.

    Join us

    Interested?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    ]]>
    + + Maciej Zieliński + https://github.com/zie1ony + +
    + + <![CDATA[Zero Knowledge on Casper]]> + https://odra.dev/blog/casper-zk-risc0 + + 2022-12-12T00:00:00.000Z + + In this post, I present how to verify a zero knowledge proof on Casper.

    Zero Knowledge

    In my opinion, the zero knowledge (ZK) is the largest revolution in +blockchains, since Ethereum introduced Turing-complete, account-based +smart contracts. +To put it in simple words, ZK enables two use cases not possible before:

    1. Computation scaling - I can perform expensive computation off-chain +and put the result on a chain with the proof.
    2. Anonymity - I can prove to you, I know something without revealing it.

    Risc Zero

    I'd like to introduce you to Risc Zero. +It is the general purpose zero-knowledge virtual machine. +Go ahead and spend time reading their website! +For us, the key component is the proof verifier that can be compiled into WASM. +Sooo... we can run it on Casper :) +Yes! We can prove any program, produce proof, and send it to Casper's +smart contract for verification.

    Example

    Let's dive into the example to see how it works. +The full example code +you can find on our GitHub. +It is based on Risc Zero's Hello, Multiply! +example. So make sure you understand it first. +Guest and Prover sections are taken from this example.

    Guest

    The program we are proving is called a guest in Risc Zero. +Our goal is to prove we know the factors of an arbitrary number. +Given a and b below guest program computes a * b and produces +a proof of computation.

    methods/guest/src/multiply.rs
    pub fn main() {
    // Load the first number from the host
    let a: u64 = env::read();
    // Load the second number from the host
    let b: u64 = env::read();
    // Verify that neither of them are 1 (i.e. nontrivial factors)
    if a == 1 || b == 1 {
    panic!("Trivial factors")
    }
    // Compute the product while being careful with integer overflow
    let product = a.checked_mul(b).expect("Integer overflow");
    env::commit(&product);
    }

    Prover

    It's time to run the guest program and build the proof for +a specific a and b values.

    prover/src/main.rs
    fn main() {
    // Pick two numbers.
    let a: u64 = 17;
    let b: u64 = 23;

    // First, we make the prover, loading the 'multiply' method.
    let multiply_src = std::fs::read(MULTIPLY_PATH)
    .expect("Method code should be present at the specified path.");
    let mut prover = Prover::new(&multiply_src, MULTIPLY_ID)
    .expect("Prover should be constructed.",);

    // Next we send a & b to the guest.
    prover.add_input_u32_slice(to_vec(&a).unwrap().as_slice());
    prover.add_input_u32_slice(to_vec(&b).unwrap().as_slice());

    // Run prover & generate receipt
    let receipt = prover.run()
    .expect("Valid code should be provable.");

    // Extract journal of receipt (i.e. output c, where c = a * b)
    let c: u64 = from_slice(&receipt.journal)
    .expect("Journal output should deserialize.");

    // Print an assertion
    println!("I know the factors of {}, and I can prove it!", c);

    // Verify receipt, panic if it's wrong.
    receipt.verify(MULTIPLY_ID).expect(
    "Code you have proven should successfully verify.",
    );

    // Convert journal to string and store on disk.
    let journal = serde_json::to_string(&receipt.journal).unwrap();
    write_to_file("../data/journal", &journal);

    // Convert seal to string and store on disk.
    let seal = serde_json::to_string(&receipt.seal).unwrap();
    write_to_file("../data/seal", &seal);

    // Convert method_id to string and store on disk.
    let result = serde_json::to_string(MULTIPLY_ID).unwrap();
    write_to_file("../data/method", &result);
    }

    Verifier

    Now the verification step. +Given the proof (journal + seal) and the guest program definition (method), +Casper's smart contract checks its correctness. This one is written +just for the demonstration, but in general you want METHOD_ID to be +stored in your contract and both SEAL and JOURNAL to be passed to +the contract via arguments from the outside.

    verifier/src/verifier_contract.rs
    // Import the proof and the method.
    const METHOD_ID: &[u8] = &include!("../../data/method");
    const SEAL: &[u32] = &include!("../../data/seal");
    const JOURNAL: &[u32] = &include!("../../data/journal");

    // Verifier contract holds a result of the zk verification.
    #[odra::module]
    pub struct Verifier {
    result: Variable<String>,
    }

    #[odra::module]
    impl Verifier {
    // Calling this entry point triggers the zk proof verification.
    pub fn verify(&mut self) {
    let result = verify(JOURNAL, SEAL, METHOD_ID);
    self.result.set(result);
    }

    // Result getter.
    pub fn result(&self) -> String {
    self.result.get().unwrap_or(String::from("Not processed"))
    }
    }

    // The verification method. It constructs new Receipt and verifies it.
    fn verify(journal: &[u32], seal: &[u32], method_id: &[u8]) -> String {
    let result = Receipt::new(&journal, &seal).verify(method_id);

    match result {
    Ok(()) => String::from("Ok"),
    Err(err) => format!("Error: {}", err.to_string())
    }
    }

    Livenet results

    I have deployed it to the testnet and called the verify method. +The result was Ok. Wow, first-ever ZK proof verification on Casper. +Trustless bridging, layer 2 here we come :)

    The cost of running the verify method is 2324 CSPR. That's a lot, but +we have to start somewhere.

    What next

    I think it is a good place to outline possible Casper ZK goals for moving +this forward. The community should discuss:

    1. Building more examples. Risc Zero has a nice battleship game to port over +to Casper.
    2. Adding Risc Zero verification method to Casper's FFI.
    3. Supporting Risc Zero team. We should help develop this awesome +open-source project and gain the ZK expertise.

    Join us

    Interested in zero knowledge on Casper?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    ]]>
    + + Maciej Zieliński + https://github.com/zie1ony + +
    + + <![CDATA[Odra 0.2.0 Released]]> + https://odra.dev/blog/release-020 + + 2022-11-30T00:00:00.000Z + + We want to introduce you to the very first public release of the Odra Framework proudly!

    A bit of history

    More than a year ago Maciej Zieliński resigned from the position of Ecosystem Leader at CasperLabs. +Along with Krzysztof Pobiarżyn and Kuba Płaskonka, we formed an engineering team dedicated to smart contracts.

    Looking at the blockchain ecosystems from the smart contract developer perspective there are two universes. +The first one is Solidity, which thrives and is at its best now. +It has a ton of well-tested code and security tooling. +Whenever an EVM-based blockchain pops out it gets populated by forks of DeFi and DAO protocols. +Fascinating network effect emerges - code written for one EVM-based blockchain can be run on every other EVM-based blockchain. +The second universe is Rust which compiles to WebAssembly. +Here developer communities live in the guarded cities of Polkadot, Cosmos, Solana, Casper, and Near. +The code written for one platform is not portable. +The network effect never had a chance to arise.

    The main reason why Odra exists is achieving this cross-chain code reusability. +We could paraphrase a bit and say: +"One to bring them all and in the code bind them."

    Odra for Casper

    The very first blockchain we have integrated with Odra is Casper. +In comparison to casper-contract API, it greatly cuts development time and offers a much lower entry level. +The Odra interface is developer friendly and people familiar with Solidity, Ink, or Near will feel like at home. +We hope it will unleash the creativity and bring a whole bunch of products onto Casper.

    Odra Framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design. +Built by experienced developers, it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel. +It's free and open source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. +We can do it by abstracting over core concepts that all the above systems are built around. +These are type system, storage, entry points, execution context, and testing environment. +We believe it will bring standardization to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this ecosystem.

    Let’s look at a Flipper contract, that holds a boolean value. +The contract has a constructor that sets the initial value, and two entry points: flip() and get(), to change and query the current value, respectively.

    use odra::Variable;

    #[odra::module]
    pub struct Flipper {
    value: Variable<bool>,
    }

    #[odra::module]
    impl Flipper {

    #[odra(init)]
    pub fn init(&mut self, value: bool) {
    self.value.set(value);
    }

    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    It comes with the CLI tool cargo-odra that makes it easy to use Odra.

    cargo-odra

    Neat and simple, isn't it? Do you like it? Start flowing with us!

    What next

    Let's be honest, we are just starting. +The codebase is still hot. +On the other hand, we are happy with the interfaces we designed. +Now is the time to write documentation and tutorials. +We are also building the modules library inspired by OpenZeppelin. +The security code audit is still ahead of us.

    Join us

    Check out the Odra GitHub repository for more info on how to get the most out of Odra. +Should you have questions, join our Discord, our Twitter or write us at contact@odra.dev.

    ]]>
    + + Kuba Płaskonka + https://github.com/kubaplas + + + Krzysztof Pobiarżyn + https://github.com/kpob + + + Maciej Zieliński + https://github.com/zie1ony + +
    +
    \ No newline at end of file diff --git a/docs/blog/casper-zk-risc0/index.html b/docs/blog/casper-zk-risc0/index.html new file mode 100644 index 000000000..fc47534f6 --- /dev/null +++ b/docs/blog/casper-zk-risc0/index.html @@ -0,0 +1,48 @@ + + + + + +Zero Knowledge on Casper | Odra + + + + + +
    +

    Zero Knowledge on Casper

    · 5 min read

    In this post, I present how to verify a zero knowledge proof on Casper.

    Zero Knowledge

    In my opinion, the zero knowledge (ZK) is the largest revolution in +blockchains, since Ethereum introduced Turing-complete, account-based +smart contracts. +To put it in simple words, ZK enables two use cases not possible before:

    1. Computation scaling - I can perform expensive computation off-chain +and put the result on a chain with the proof.
    2. Anonymity - I can prove to you, I know something without revealing it.

    Risc Zero

    I'd like to introduce you to Risc Zero. +It is the general purpose zero-knowledge virtual machine. +Go ahead and spend time reading their website! +For us, the key component is the proof verifier that can be compiled into WASM. +Sooo... we can run it on Casper :) +Yes! We can prove any program, produce proof, and send it to Casper's +smart contract for verification.

    Example

    Let's dive into the example to see how it works. +The full example code +you can find on our GitHub. +It is based on Risc Zero's Hello, Multiply! +example. So make sure you understand it first. +Guest and Prover sections are taken from this example.

    Guest

    The program we are proving is called a guest in Risc Zero. +Our goal is to prove we know the factors of an arbitrary number. +Given a and b below guest program computes a * b and produces +a proof of computation.

    methods/guest/src/multiply.rs
    pub fn main() {
    // Load the first number from the host
    let a: u64 = env::read();
    // Load the second number from the host
    let b: u64 = env::read();
    // Verify that neither of them are 1 (i.e. nontrivial factors)
    if a == 1 || b == 1 {
    panic!("Trivial factors")
    }
    // Compute the product while being careful with integer overflow
    let product = a.checked_mul(b).expect("Integer overflow");
    env::commit(&product);
    }

    Prover

    It's time to run the guest program and build the proof for +a specific a and b values.

    prover/src/main.rs
    fn main() {
    // Pick two numbers.
    let a: u64 = 17;
    let b: u64 = 23;

    // First, we make the prover, loading the 'multiply' method.
    let multiply_src = std::fs::read(MULTIPLY_PATH)
    .expect("Method code should be present at the specified path.");
    let mut prover = Prover::new(&multiply_src, MULTIPLY_ID)
    .expect("Prover should be constructed.",);

    // Next we send a & b to the guest.
    prover.add_input_u32_slice(to_vec(&a).unwrap().as_slice());
    prover.add_input_u32_slice(to_vec(&b).unwrap().as_slice());

    // Run prover & generate receipt
    let receipt = prover.run()
    .expect("Valid code should be provable.");

    // Extract journal of receipt (i.e. output c, where c = a * b)
    let c: u64 = from_slice(&receipt.journal)
    .expect("Journal output should deserialize.");

    // Print an assertion
    println!("I know the factors of {}, and I can prove it!", c);

    // Verify receipt, panic if it's wrong.
    receipt.verify(MULTIPLY_ID).expect(
    "Code you have proven should successfully verify.",
    );

    // Convert journal to string and store on disk.
    let journal = serde_json::to_string(&receipt.journal).unwrap();
    write_to_file("../data/journal", &journal);

    // Convert seal to string and store on disk.
    let seal = serde_json::to_string(&receipt.seal).unwrap();
    write_to_file("../data/seal", &seal);

    // Convert method_id to string and store on disk.
    let result = serde_json::to_string(MULTIPLY_ID).unwrap();
    write_to_file("../data/method", &result);
    }

    Verifier

    Now the verification step. +Given the proof (journal + seal) and the guest program definition (method), +Casper's smart contract checks its correctness. This one is written +just for the demonstration, but in general you want METHOD_ID to be +stored in your contract and both SEAL and JOURNAL to be passed to +the contract via arguments from the outside.

    verifier/src/verifier_contract.rs
    // Import the proof and the method.
    const METHOD_ID: &[u8] = &include!("../../data/method");
    const SEAL: &[u32] = &include!("../../data/seal");
    const JOURNAL: &[u32] = &include!("../../data/journal");

    // Verifier contract holds a result of the zk verification.
    #[odra::module]
    pub struct Verifier {
    result: Variable<String>,
    }

    #[odra::module]
    impl Verifier {
    // Calling this entry point triggers the zk proof verification.
    pub fn verify(&mut self) {
    let result = verify(JOURNAL, SEAL, METHOD_ID);
    self.result.set(result);
    }

    // Result getter.
    pub fn result(&self) -> String {
    self.result.get().unwrap_or(String::from("Not processed"))
    }
    }

    // The verification method. It constructs new Receipt and verifies it.
    fn verify(journal: &[u32], seal: &[u32], method_id: &[u8]) -> String {
    let result = Receipt::new(&journal, &seal).verify(method_id);

    match result {
    Ok(()) => String::from("Ok"),
    Err(err) => format!("Error: {}", err.to_string())
    }
    }

    Livenet results

    I have deployed it to the testnet and called the verify method. +The result was Ok. Wow, first-ever ZK proof verification on Casper. +Trustless bridging, layer 2 here we come :)

    The cost of running the verify method is 2324 CSPR. That's a lot, but +we have to start somewhere.

    What next

    I think it is a good place to outline possible Casper ZK goals for moving +this forward. The community should discuss:

    1. Building more examples. Risc Zero has a nice battleship game to port over +to Casper.
    2. Adding Risc Zero verification method to Casper's FFI.
    3. Supporting Risc Zero team. We should help develop this awesome +open-source project and gain the ZK expertise.

    Join us

    Interested in zero knowledge on Casper?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    + + + + \ No newline at end of file diff --git a/docs/blog/evm-at-risc0/index.html b/docs/blog/evm-at-risc0/index.html new file mode 100644 index 000000000..770aedbd4 --- /dev/null +++ b/docs/blog/evm-at-risc0/index.html @@ -0,0 +1,38 @@ + + + + + +EVM at Risc0 | Odra + + + + + +
    +

    EVM at Risc0

    · 4 min read

    Let's run Solidity code inside SputnikVM inside Risc0.

    First make sure you know how Risc0 works. +My previous post explains it.

    If you want to jump directly to the full code example, it's in the repo.

    Solidity

    As an example, I have this simple Solidity code. +It is a calculator with two functions. +One for addition and one for the nth Fibonacci number.

    bytecode/Calculator.sol
    contract Calculator {
    function add(uint256 a, uint256 b) public pure returns (uint256) {
    return a + b;
    }

    function fibonacci(uint256 n) public returns (uint256) {
    if (n <= 1) {
    return n;
    } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
    }
    }
    }

    It needs to be compiled into the byte code. solc can do this.

    $ solc \
    --bin-runtime \
    --optimize \
    --overwrite \
    --evm-version istanbul \
    --output-dir bytecode \
    bytecode/Calculator.sol

    It produces an EVM bytecode in the bytecode directory.

    $ ls bytecode/
    Calculator.bin-runtime Calculator.sol

    EVM

    The EVM I used is SputnikVM. +Most important it is written in pure Rust and even with no_std mode. +This way I can start an in-memory instance of EVM. +Then take the bytecode of a contract and install it. +Finally, call the contract with arguments and obtain the result value. +For now, it's just a Rust code. Risc0 comes later.

    The code is based on Sputnik's benchmark test. +Huge thanks to Michael Birch for helping with Sputnik. +Also make sure how EVM's function selectors work.

    evm-runner/src/lib.rs

    // Load previously compiled Calculator contract.
    pub const CALCULATOR_EVM_PROGRAM: &str = include_str!(
    "../../bytecode/Calculator.bin-runtime"
    );

    // Run Calculator for a given input.
    pub fn run_calc_contract(input: &str) -> String {
    run_evm(CALCULATOR_EVM_PROGRAM, input)
    }

    // Run a program (contract) for a given input.
    fn run_evm(program: &str, input: &str) -> String {

    // Define EVM configuration.
    let config = Config::istanbul();
    let vicinity = MemoryVicinity {
    gas_price: U256::zero(),
    origin: H160::default(),
    block_hashes: Vec::new(),
    block_number: Default::default(),
    block_coinbase: Default::default(),
    block_timestamp: Default::default(),
    block_difficulty: Default::default(),
    block_gas_limit: Default::default(),
    chain_id: U256::one(),
    block_base_fee_per_gas: U256::zero(),
    };

    // Initialized the state of EVM's memory.
    let mut state = BTreeMap::new();

    // Add our contract under the 0x10 address.
    state.insert(
    H160::from_str("0x1000000000000000000000000000000000000000")
    .unwrap(),
    MemoryAccount {
    nonce: U256::one(),
    balance: U256::from(10000000),
    storage: BTreeMap::new(),
    code: hex::decode(program).unwrap(),
    }
    );

    // Add new user 0xf0 that will be used as the contract caller.
    state.insert(
    H160::from_str("0xf000000000000000000000000000000000000000")
    .unwrap(),
    MemoryAccount {
    nonce: U256::one(),
    balance: U256::from(10000000),
    storage: BTreeMap::new(),
    code: Vec::new(),
    },
    );

    // Prepare the executor.
    let backend = MemoryBackend::new(&vicinity, state);
    let metadata = StackSubstateMetadata::new(u64::MAX, &config);
    let state = MemoryStackState::new(metadata, &backend);
    let precompiles = BTreeMap::new();
    let mut executor
    = StackExecutor::new_with_precompiles(state, &config, &precompiles);

    // Call the 0x10 contract using the 0xf0 user.
    // Use the input variable.
    let (exit_reason, result) = executor.transact_call(
    H160::from_str("0xf000000000000000000000000000000000000000")
    .unwrap(),
    H160::from_str("0x1000000000000000000000000000000000000000")
    .unwrap(),
    U256::zero(),
    hex::decode(input).unwrap(),
    u64::MAX,
    Vec::new(),
    );

    // Make sure the execution succeeded.
    assert!(exit_reason == ExitReason::Succeed(ExitSucceed::Returned));

    // Return hex encoded string.
    hex::encode(result)
    }

    Let's execute it. In below tests the data variable hold two things: +function selector and arguments.

    For example 61047ff4000000000000000000000000000000000000000000000000000000000000000a +is concatination of the function selector (first 8 chars) and 256-bit long argument. +It is just fibonacci(10). a is hex of 10 and 37 is hex of 52.

    evm-runner/src/lib.rs
    #[test]
    fn fibonacci_works() {
    let data = "61047ff4000000000000000000000000000000000000000000000000000000000000000a";
    let result = run_calc_contract(data);
    assert_eq!(result, "0000000000000000000000000000000000000000000000000000000000000037");
    }

    #[test]
    fn addition_works() {
    let data = "771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002";
    let result = run_calc_contract(data);
    assert_eq!(result, "0000000000000000000000000000000000000000000000000000000000000009");
    }

    Risc0

    It's time for risc0.

    First the guest program. +It is super simple. +It takes a string as an argument, +passes it to the run_calc_contract +and returns the result.

    methods/guest/src/bin/evm_calc.rs
    #![no_main]
    #![no_std]

    extern crate alloc;

    use alloc::{string::String};
    use risc0_zkvm::guest::{env};
    use evm_runner::run_calc_contract;

    risc0_zkvm::guest::entry!(main);

    pub fn main() {
    let input: String = env::read();
    let result = run_calc_contract(&input);
    env::commit(&result);
    }

    The final step is calling it under ZK.

    host/src/main.rs
    fn main() {
    println!("Proving Calculator.add(7, 2)");
    let input = "771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002";
    let result = run_prover(input);
    println!("Proof generated. 7 + 2 = {result}");

    println!("Proving Calculator.fibonacci(4)");
    let input = "61047ff40000000000000000000000000000000000000000000000000000000000000004";
    let result = run_prover(input);
    println!("Proof generated. fibonacci(4) = {result}");
    }

    fn run_prover(input: &str) -> u32 {
    // Make the prover.
    let method_code = std::fs::read(EVM_CALC_PATH).unwrap();
    let mut prover = Prover::new(&method_code, EVM_CALC_ID).unwrap();

    // Push the input as an argument.
    prover.add_input_u32_slice(to_vec(input).unwrap().as_slice());

    // Execute the prover.
    let receipt = prover.run().unwrap();

    // Verify the proof.
    assert!(receipt.verify(EVM_CALC_ID).is_ok());

    // Return result as an u32 value.
    let result: String = from_slice(receipt.journal.as_slice()).unwrap();
    u32::from_str_radix(&result, 16).unwrap()
    }
    $ cargo run --release -p host
    Proving Calculator.add(7, 2)
    Proof generated. 7 + 2 = 9
    Proving Calculator.fibonacci(4)
    Proof generated. fibonacci(4) = 3

    Conclusion

    How amazing and mindblowing it is! +Of course, it's just a proof of concept. +Yet with further development of Risc0 improving its proving time and +with more flexible SputnikVM this approach is more than promising.

    Join us

    Interested?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    + + + + \ No newline at end of file diff --git a/docs/blog/index.html b/docs/blog/index.html new file mode 100644 index 000000000..65380cfb8 --- /dev/null +++ b/docs/blog/index.html @@ -0,0 +1,23 @@ + + + + + +Blog | Odra + + + + + +
    +

    · 9 min read

    The Oder River, known as "Odra" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wrocław, Szczecin, and Gdańsk, to international waterways. The Oder also plays a significant role in the region's ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.

    The Nysa Kłodzka is a significant river in Poland, flowing through the country's southwestern part. It travels approximately 188 kilometers, originating in the Czech Republic and merging with the Oder River in Poland. The river passes through picturesque landscapes, including the Kłodzko Valley, and plays a crucial role in local ecosystems. Its waters are harnessed for various purposes, such as hydroelectric power generation and irrigation.

    Oh, wait, shouldn't it be a tech blog?

    This is a valid question, we will get back to it in a moment.

    · 3 min read

    Over the past months, +we have been working hard on bringing Odra to the Casper world. +While we are proud of what we have achieved so far, +the hard part is just beginning. +Smart contract developers from outside of our team are starting to use Odra. +We are thrilled about it and here is how we are going to support the community.

    + + + + \ No newline at end of file diff --git a/docs/blog/its-all-about-the-community/index.html b/docs/blog/its-all-about-the-community/index.html new file mode 100644 index 000000000..2c20f080f --- /dev/null +++ b/docs/blog/its-all-about-the-community/index.html @@ -0,0 +1,55 @@ + + + + + +It's all about the community! | Odra + + + + + +
    +

    It's all about the community!

    · 3 min read

    Over the past months, +we have been working hard on bringing Odra to the Casper world. +While we are proud of what we have achieved so far, +the hard part is just beginning. +Smart contract developers from outside of our team are starting to use Odra. +We are thrilled about it and here is how we are going to support the community.

    Hello Odra Community

    Whether you are a Rust developer, Solidity developer or a Casper enthusiast +we are happy to have you here, reading this blog post.

    We have built Odra to make smart contract development on Casper easy. +Now we are entering the next phase of the open source journey. +We are going to focus on the community and make sure +Odra is the best tool for the job. +Our motto (we borrowed from the Django Project) is:

    We bring cutting-edge smart contract development tools to +professionals with deadlines.

    How will we do it? We are going to focus on four things:

    • Quality - Our code and documentation will be of the highest quality. +We will always have tons of tests and examples.
    • Simplicity - The simplest solution is the best solution. +Odra's API needs to be simple and easy to use. +Always! +We are not afraid to take a few steps back and rethink our design. +We believe in short feedback loops and fast iterations.
    • Reusability - No one likes to repeat itself. +We see a huge potential in Odra Modules. +In time, it can become a standard library of Casper smart contracts, +that are battle-tested and ready to use.
    • Community - We are here to help you. +You can always reach out to us on Discord or Github.

    We will help with your project

    Whether you are a Rust developer or not, you can start using Odra today. +We have prepared a few examples and docs to help you get started. +Rust knowledge required to use Odra is minimal. +That was always the goal.

    But we understand that it is hard to start. +We got your back.

    We offer free consulting + 2 hours of live coding.

    All you have to do is write us an email at contract@odra.dev +with a short description of your project. +We will schedule a call and help you get started with Odra. +After 2 hours of live coding, you will have a working repository with 2 or 3 +smart contracts, that you can use as a starting point for your project.

    Roadmap

    The feedback we got quite often was: +It's nice, but will it last? What's the direction of the project? +Point taken. Now we answer: We are here to stay. +We got the support from the Casper Association and some projects of our own +to keep us funded. We play the long game.

    To systematize our work, we have prepared the roadmap. +As of now, we maintain plans for at least three future releases. +It is a good balance between predictability and flexibility. +We will release new versions approximately every 1-2 months or as needed. +Everyone is encouraged to propose a new Odra feature or enhancement. +New proposals need to be discussed and approved by the core team. +When the feature is ready, we assign it to one of the future releases.

    Odra Roadmap

    + + + + \ No newline at end of file diff --git a/docs/blog/odra-cosmwasm/index.html b/docs/blog/odra-cosmwasm/index.html new file mode 100644 index 000000000..6ad13c28e --- /dev/null +++ b/docs/blog/odra-cosmwasm/index.html @@ -0,0 +1,29 @@ + + + + + +Odra + CosmWasm | Odra + + + + + +
    +

    Odra + CosmWasm

    · 6 min read

    In November 2022 we released the first version of the Odra Framework. It's time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm.

    CosmWasm

    CosmWasm is a smart contract platform for building dApps on the Cosmos blockchain ecosystem. +The platform is designed as a module that can be integrated into the Cosmos SDK, enabling developers who are already building blockchains with the Cosmos SDK to easily incorporate CosmWasm smart contract functionality without the need to modify their existing code.

    It uses the Rust programming language, so is potentially a perfect candidate for an Odra backend. +There are many blockchains like Osmosis, Secret Network, Juno that utilize CosmWasm.

    Show me your code

    I would like to write a Counter smart contract that is CosmWasm compatible. +What are the requirements?

    1. It should store a u32 value.
    2. The initial value it set by the contract deployer.
    3. The value can be incremented.
    4. The value can read from the storage.
    5. The contract can call another contract and increment its counter.

    So let's write an Odra module first.

    counter.rs
    use odra::{types::{Address, event::OdraEvent}, Variable, contract_env};
    use self::events::{Init, ValueUpdated};

    #[odra::module]
    pub struct Counter {
    pub value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub fn init(&mut self, value: u32) {
    self.value.set(value);
    <Init as OdraEvent>::emit(Init {
    value,
    });
    }

    pub fn increment(&mut self) {
    let old_value = self.value.get_or_default();
    let new_value = old_value + 1;
    self.value.set(new_value);

    ValueUpdated {
    old_value,
    new_value,
    operator: contract_env::caller()
    }.emit();
    }

    pub fn cross_increment(&mut self, counter_address: Address) {
    CounterRef::at(counter_address).increment();
    }

    pub fn get_value(&self) -> u32 {
    self.value.get_or_default()
    }
    }

    mod events {
    use odra::types::Address;

    #[derive(odra::Event)]
    pub struct ValueUpdated {
    pub old_value: u32,
    pub new_value: u32,
    pub operator: Address
    }

    #[derive(odra::Event)]
    pub struct Init {
    pub value: u32,
    }
    }

    #[cfg(test)]
    mod tests {
    use super::*;

    #[test]
    fn deploy() {
    let counter = CounterDeployer::init(10);
    assert_eq!(10, counter.get_value());
    }

    #[test]
    fn increment() {
    let mut counter = CounterDeployer::init(10);
    counter.increment();
    assert_eq!(11, counter.get_value());
    }
    }

    But wait, I mentioned CosmWasm, did I?

    Here the beauty of Odra comes into play.

    Let's use cargo-odra.

    cargo odra build -b cosmos

    And... that's it, congratulations! We have just written and build our first CosmWasm contract. +As you see, it is nothing different from building a contract for Casper. No additional code, we only changed the -b flag.

    Deploy

    We have just built a wasm file, but is it really a fully functional contract?

    As a battlefield let's choose Juno Network (if you would like to read more about smart contract development on Juno read this Quick Start tutorial). This is an arbitrary choice, each client is built upon a so-called Wasm Zone wasmd, and its interface is alike.

    Assuming you already know how to interact with Juno testnet, let's move to the fun part.

    But before we go, to keep things simple, let's prepare a justfile. It'll make our interactions with the blockchain much easier. See full version.

    justfile
    NODE := "--node https://rpc.uni.juno.deuslabs.fi:443"
    CHAIN_ID := "--chain-id uni-6"
    QUERY_FLAGS := NODE + " " + CHAIN_ID
    TRANSACTION_DEFAULTS := "--gas-prices 0.025ujunox --gas auto --gas-adjustment 1.3 --broadcast-mode block"
    EXEC_FLAGS := NODE + " " + CHAIN_ID + " " + TRANSACTION_DEFAULTS

    get-address NAME:
    junod keys show {{NAME}} | grep -o juno.*

    store-wasm WASM_PATH SENDER:
    junod tx wasm store \
    {{WASM_PATH}} --from {{SENDER}} {{EXEC_FLAGS}}

    init-contract CODE_ID VALUE SENDER CONTRACT_NAME:
    junod tx wasm instantiate \
    {{CODE_ID}} \
    `just run-args-parser '{"name": "init", "args": [ { "value" : {{VALUE}} }]}'` \
    --label '{{CONTRACT_NAME}}' --from {{SENDER}} \
    --admin `just get-address {{SENDER}}` \
    {{EXEC_FLAGS}}

    exec-increment ADDRESS SENDER:
    junod tx wasm execute \
    {{ADDRESS}} \
    `just run-args-parser '{"name": "increment"}'` \
    --from {{SENDER}} \
    {{EXEC_FLAGS}}

    query-get-value ADDRESS:
    junod q wasm contract-state smart {{ADDRESS}} \
    `just run-args-parser '{"name": "get_value"}'` {{QUERY_FLAGS}}

    Ok, we are ready to go.

    First, a CosmWasm contract needs to be stored, technically is not a contract yet. Like a larva waiting to morph into a butterfly (sorry for that).

    There are three ways to interact with a contract.

    1. Instantiate - in other words, a constructor call. Once the contract is instantiated, it gets an address.
    2. Execute - call an entrypoint that modifies the state.
    3. Query - read the contract's state.

    Now, let's take a look at how to do it using the tools we have just prepared.

    # args: 
    # the path to a wasm file,
    # the name under we store the private key.
    just store-wasm counter.wasm odra

    ...
    raw_log: '[{"events":[{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgStoreCode"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"store_code","attributes":[{"key":"code_checksum","value":"9fb9e7f39170de2628892ed5eecc556e2487267b30bb2c9656f8c7d1cd9f9a59"},{"key":"code_id","value":"286"}]}]}]'
    ...
    txhash: 1A8BA520E980C5ABCBCFA6F62D68B6BB82E780544605DE4DD5C6B1C5E966441B

    Great, our code is successfully stored. Form the logs we can read now the code_id which we will use to initialize the contract.

    # args: 
    # code id taken from the previous tx,
    # counter initial value,
    # named private key,
    # contract label.
    just init-contract 286 1 odra "My Counter"

    ...
    raw_log: '[{"events":[{"type":"instantiate","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"code_id","value":"286"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgInstantiateContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"wasm","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"value","value":"1"}]},{"type":"wasm-Init","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"value","value":"1"}]}]}]'
    ...
    txhash: 8DC53F95805349C3763CF4AF9527CAB2AEBEC77B240EFD3801C61231D8748F26

    Fantastic, the contract has been initialized and we have its address - juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g. +It's time to increment the counter.

    # args:
    # contract address taken from the previous tx,
    # named private key
    just exec-increment juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g odra

    ...
    raw_log: '[{"events":[{"type":"execute","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgExecuteContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"wasm","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"action","value":"increment"}]},{"type":"wasm-ValueUpdated","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"old_value","value":"1"},{"key":"new_value","value":"2"},{"key":"operator","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]}]}]'
    ...
    txhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2

    Finally, we expected, the value to be equal to 2 (the initial value was 1 and we incremented it once).

    # args:
    # contract address
    just query-get-value juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g

    data: 2

    Indeed, as expected the current counter value is 2.

    Show me your transaction

    I get it, you don't want to do it all by yourself. So let's take a closer look at one of my transactions.

    junod q tx 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2 --node https://rpc.uni.juno.deuslabs.fi:443 --chain-id uni-6
    ...
    logs:
    - events:
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    type: execute
    - attributes:
    - key: action
    value: /cosmwasm.wasm.v1.MsgExecuteContract
    - key: module
    value: wasm
    - key: sender
    value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh
    type: message
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    - key: action
    value: increment
    type: wasm
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    - key: old_value
    value: "1"
    - key: new_value
    value: "2"
    - key: operator
    value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh
    type: wasm-ValueUpdated
    ...
    txhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2

    If you are familiar Cosmos ecosystem, you can see that there is an attribute containing +the performed action (increment) (If there were some parameters, they would be included in this attribute). +We can find here also our ValueUpdated event with its arguments old_value, new_value and operator.

    Wow, we have it, everything worked as intended!

    Conclusion

    Wouldn't it be great to replace Casper Erc20 and Cosmos Erc20 with a super-simple +single Odra Erc20 implementation?

    The Counter contract is just a POC, and there is still a long road ahead of us. +This simple example shows that features like storage, events, and cross-contract calls +can be unified in a simple readable interface.

    CosmWasm integration hasn't been published yet, but if you want to experiment by yourself, +check our GitHub (don't forget to update cargo-odra as well).

    Join us

    Interested?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    + + + + \ No newline at end of file diff --git a/docs/blog/release-020/index.html b/docs/blog/release-020/index.html new file mode 100644 index 000000000..a9c36c1aa --- /dev/null +++ b/docs/blog/release-020/index.html @@ -0,0 +1,43 @@ + + + + + +Odra 0.2.0 Released | Odra + + + + + +
    +

    Odra 0.2.0 Released

    · 4 min read

    We want to introduce you to the very first public release of the Odra Framework proudly!

    A bit of history

    More than a year ago Maciej Zieliński resigned from the position of Ecosystem Leader at CasperLabs. +Along with Krzysztof Pobiarżyn and Kuba Płaskonka, we formed an engineering team dedicated to smart contracts.

    Looking at the blockchain ecosystems from the smart contract developer perspective there are two universes. +The first one is Solidity, which thrives and is at its best now. +It has a ton of well-tested code and security tooling. +Whenever an EVM-based blockchain pops out it gets populated by forks of DeFi and DAO protocols. +Fascinating network effect emerges - code written for one EVM-based blockchain can be run on every other EVM-based blockchain. +The second universe is Rust which compiles to WebAssembly. +Here developer communities live in the guarded cities of Polkadot, Cosmos, Solana, Casper, and Near. +The code written for one platform is not portable. +The network effect never had a chance to arise.

    The main reason why Odra exists is achieving this cross-chain code reusability. +We could paraphrase a bit and say: +"One to bring them all and in the code bind them."

    Odra for Casper

    The very first blockchain we have integrated with Odra is Casper. +In comparison to casper-contract API, it greatly cuts development time and offers a much lower entry level. +The Odra interface is developer friendly and people familiar with Solidity, Ink, or Near will feel like at home. +We hope it will unleash the creativity and bring a whole bunch of products onto Casper.

    Odra Framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design. +Built by experienced developers, it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel. +It's free and open source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. +We can do it by abstracting over core concepts that all the above systems are built around. +These are type system, storage, entry points, execution context, and testing environment. +We believe it will bring standardization to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this ecosystem.

    Let’s look at a Flipper contract, that holds a boolean value. +The contract has a constructor that sets the initial value, and two entry points: flip() and get(), to change and query the current value, respectively.

    use odra::Variable;

    #[odra::module]
    pub struct Flipper {
    value: Variable<bool>,
    }

    #[odra::module]
    impl Flipper {

    #[odra(init)]
    pub fn init(&mut self, value: bool) {
    self.value.set(value);
    }

    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    It comes with the CLI tool cargo-odra that makes it easy to use Odra.

    cargo-odra

    Neat and simple, isn't it? Do you like it? Start flowing with us!

    What next

    Let's be honest, we are just starting. +The codebase is still hot. +On the other hand, we are happy with the interfaces we designed. +Now is the time to write documentation and tutorials. +We are also building the modules library inspired by OpenZeppelin. +The security code audit is still ahead of us.

    Join us

    Check out the Odra GitHub repository for more info on how to get the most out of Odra. +Should you have questions, join our Discord, our Twitter or write us at contact@odra.dev.

    + + + + \ No newline at end of file diff --git a/docs/blog/rss.xml b/docs/blog/rss.xml new file mode 100644 index 000000000..b1378d854 --- /dev/null +++ b/docs/blog/rss.xml @@ -0,0 +1,220 @@ + + + + Odra Blog + https://odra.dev/blog + Odra Blog + Fri, 18 Aug 2023 00:00:00 GMT + https://validator.w3.org/feed/docs/rss2.html + https://github.com/jpmonette/feed + en + + <![CDATA[Nysa]]> + https://odra.dev/blog/Nysa + https://odra.dev/blog/Nysa + Fri, 18 Aug 2023 00:00:00 GMT + + The Oder River, known as "Odra" in Polish, is one of the major rivers in Poland. It flows for approximately 854 kilometers, originating in the Czech Republic and flowing through southwestern Poland before emptying into the Baltic Sea. The river is a vital transportation route, connecting several Polish cities, including Wrocław, Szczecin, and Gdańsk, to international waterways. The Oder also plays a significant role in the region's ecology, supporting diverse habitats and species. Its watershed area spans multiple countries, making it a part of various international cooperation initiatives aimed at water management and environmental conservation.

    The Nysa Kłodzka is a significant river in Poland, flowing through the country's southwestern part. It travels approximately 188 kilometers, originating in the Czech Republic and merging with the Oder River in Poland. The river passes through picturesque landscapes, including the Kłodzko Valley, and plays a crucial role in local ecosystems. Its waters are harnessed for various purposes, such as hydroelectric power generation and irrigation.

    Oh, wait, shouldn't it be a tech blog?

    This is a valid question, we will get back to it in a moment.

    Odra

    A short reminder:

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design ... +it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel.

    Odra

    Understanding that people generally dislike learning new things, we've kept this in mind throughout development. Since day one, we have focused on creating Odra with the largest group of smart contract developers in mind - those familiar with Solidity. The Odra Framework is designed to flatten the learning curve for this group.

    A Solidity developer will encounter familiar concepts such as:

    • Constructors
    • Payable functions
    • Mappings
    • Reverts
    • Current caller
    • Current block time
    • A standard module library (similar to OpenZeppelin)
    • And more
    note

    It's important to note that the Odra Framework is intentionally blockchain-agnostic. Its design does not target any particular blockchain.

    Ultimately, Odra is built to support multiple blockchains, allowing the writing of smart contracts in Rust.

    Having so many similarities, why not take the next step and transpile Solidity code into Odra code?

    This is where Nysa comes into play.

    Nysa

    Solidity and Rust share some syntax similarities despite being designed for different purposes. Both languages emphasize strong typing, pattern matching, and immutability by default.

    Nysa performs Solidity-to-Rust transpilation through four simple steps.

    nysa-gen

    1. Solidity Parser

    Firstly, we need a well-structured Rust representation of Solidity code. Nysa utilizes LALRPOP - a Rust parser generator framework. In the further steps, this enables us to conduct static analysis of the Solidity code, ranging from contract context down to individual expressions.

    solidity-parser/src/pt.rs
    // The representation of a Solidity contract
    #[derive(Debug, PartialEq)]
    pub struct ContractDefinition {
    pub doc: Vec<DocComment>,
    pub loc: Loc,
    pub ty: ContractTy,
    pub name: Identifier,
    pub base: Vec<Base>,
    pub parts: Vec<ContractPart>,
    }
    1. C3 Linearization

    One of the most notable distinctions between Rust and Solidity is their approach to inheritance. Rust says No, thx, whereas Solidity opts for The more, the better. Speaking more technically, Solidity supports multiple inheritance with C3 linearization.

    info

    The primary purpose of the C3 Linearization Algorithm is to establish a consistent and unambiguous order of method resolution in cases where there might be ambiguity or conflicts due to multiple inheritance. It ensures that the inherited methods are called in a predictable and well-defined sequence based on the class hierarchy and the order in which classes are defined.

    For simulating C3 linearization, Nysa utilizes an implementation of the C3 linearization in Rust written by Maciej Zieliński, so everything stays in the Odra family.

    1. Nysa Parser

    After that, we step to the essential part, converting Solidity code into Rust code.

    For example, a Solidity event.

    event Transfer(address indexed from, address indexed to, uint256 value);

    can easily be represented as an plain Rust struct - the same name, the same fields, similar types.

    #[derive(PartialEq, Eq, Debug)]
    pub struct Transfer {
    from: Option<Address>,
    to: Option<Address>,
    value: U256,
    }

    The same we do with contracts, interfaces, libraries, errors, variables, functions, statements, etc.

    Here is a snippet of the expression parser:

    nysa/src/parser/odra/expr/mod.rs
    pub fn parse<T>(expression: &Expression, ctx: &mut T) -> Result<syn::Expr, ParserError>
    where
    T: StorageInfo + TypeInfo + EventsRegister + ExternalCallsRegister + ContractInfo + FnContext,
    {
    match expression {
    Expression::Require { condition, error } => error::revert(Some(condition), error, ctx),
    Expression::ZeroAddress => Ok(parse_quote!(None)),
    Expression::Add { left, right } => math::add(left, right, ctx),
    Expression::Subtract { left, right } => math::sub(left, right, ctx),
    Expression::Increment { expr } => {
    let expr = parse(expr, ctx)?;
    Ok(parse_quote!(#expr += 1))
    }
    Expression::ExternalCall {
    variable,
    fn_name,
    args,
    } => parse_ext_call(variable, fn_name, args, ctx),
    Expression::Type { ty } => {
    let ty = ty::parse_plain_type_from_ty(ty, ctx)?;
    Ok(parse_quote!(#ty))
    }
    Expression::BoolLiteral(b) => Ok(parse_quote!(#b)),
    ...
    }
    }

    1. Printing the code

    The last step is just consuming the resulting C3 AST. Nysa produces a token stream from the AST. Most likely you would write it to a file.

    And there you are: a Rust smart contract is ready to be compiled!

    Nysa + Odra

    By design, Nysa is a universal tool, so the third step from the pipeline is replaceable. In other words, a Solidity input can be converted to Rust code supporting a framework/SDK of your choice unless you provide a parser implementation.

    However, the default implementation is OdraParser, which takes a contract written in Solidity and splits out an Odra module.

    I hope you see an analogy to the first two paragraphs at this point. Nysa the river and Nysa the transpiler flow into Odra.

    nysa-odra

    Examples

    Status message

    Let's get our hands dirty and create a very simple project. We will write a contract that stores a single mapping of records - an address to a string message.

    To set up the project, we use cargo odra.

    cargo odra new -n status -t blank
    cd status

    The first thing is to add Nysa to the project and create a rudimentary build.rs where we define the input - a solidity contract and the output - an Odra module generated by Nysa.

    Cargo.toml
    [build-dependencies]
    nysa = { version = "0.1.0", features = ["builder"] }
    build.rs
    const DEST_FILE_PATH: &str = "src/status_message.rs";
    const SOURCE_FILE_PATH: &str = "src/status_message.sol";

    fn main() {
    nysa::builder::generate_file::<&str, nysa::OdraParser>(SOURCE_FILE_PATH, DEST_FILE_PATH);
    }

    Next, implement the contract. Naturally, a Solidity one.

    src/status_message.sol
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.19;

    contract StatusMessage {
    mapping(address => string) records;

    function setStatus(string memory status) public payable {
    address accountId = msg.sender;
    records[accountId] = status;
    }

    function getStatus(address accountId) public view returns (string memory) {
    return records[accountId];
    }
    }

    The contract has a single mapping records that stores a message and its owner. Additionally, exposes two entry points: setStatus (sets current's sender message) and getStatus.

    Following, let's define a lib.rs file.

    src/lib.rs
    mod status_message;
    pub use status_message::{StatusMessage, StatusMessageDeployer, StatusMessageRef};

    #[cfg(test)]
    mod test;

    The file is straightforward: registers a status_message rust module, reexports some Odra abstractions, and adds a test module.

    Lastly, we can test our contract. +Like the original solidity contract, our Odra contract exposes two entry points: set_message() and get_message(). +The test code looks like any other Odra test: we use StatusMessageDeployer to instantiate a contract, which gets us a reference to interact with the contract.

    src/test.rs
    use odra::{test_env, types::Address};
    use super::*;

    const ACCOUNT: fn() -> Address = || odra::test_env::get_account(1);

    #[test]
    fn set_get_message() {
    let mut contract = StatusMessageDeployer::default();

    test_env::set_caller(ACCOUNT());
    contract.set_status("hello".to_string());
    assert_eq!("hello".to_string(), contract.get_status(Some(ACCOUNT())));
    }

    #[test]
    fn get_nonexistent_message() {
    let contract = StatusMessageDeployer::default();

    assert_eq!(
    String::new(),
    contract.get_status(Some(ACCOUNT()))
    );
    }
    cargo odra test # test against MockVM
    # or
    cargo odra test -b casper # build a wasm file and test against CasperVM
    status-message
    ├── src
    │ ├── lib.rs
    │ ├── status_message.sol
    │ └── test.rs
    ├── build.rs
    ├── Cargo.toml
    └── Odra.toml

    Full example available here.

    CappedErc20

    A more complex, real-world example is a CappedErc20 contract. It is a ERC20 Ownable, Burnable and Capped token contract.

    plascoin.sol
    // ...
    // rest of the code

    contract Plascoin is ERC20Capped, ERC20Burnable, Ownable {
    constructor(string memory name_, string memory symbol_, uint256 cap_, address initialOwner) ERC20(name_, symbol_) ERC20Capped(cap_) Ownable(initialOwner) {
    }

    function mint(address account, uint256 amount) public onlyOwner {
    _mint(account, amount);
    }

    function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Capped) {
    super._update(from, to, value);
    }
    }

    You can check out the full source code here.

    Deployment of such a contract onto the Casper testnet is straightforward. We are just two steps from it.

    # to make sure the contract works as expected 
    # we execute cargo odra test command to build and run tests
    cargo odra test -b casper

    # deploy onto the testnet
    casper-client put-deploy
    --node-address {{NODE_ADDRESS}}
    --chain-name casper-test
    --secret-key {{SECRET_KEY}} \
    --session-path {{CONTRACT_WASM}} \
    --payment-amount 130000000000 \
    --session-arg "odra_cfg_package_hash_key_name:string:'{{CONTRACT_PACKAGE_HASH_NAMED_KEY}}'" \
    --session-arg "odra_cfg_allow_key_override:bool:'true'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \
    --session-arg "name:string='{{name}}'" \
    --session-arg "symbol:string='{{symbol}}'" \
    --session-arg "cap:u256='{{cap}}'" \
    --session-arg "initial_owner:opt_key='{{owner}}'"

    Literally in 5 minutes I was able to:

    1. Build a wasm file from Solidity source code
    2. Successfully deploy the contract onto Testnet,
    3. Mint some tokens,
    4. And transfer them.

    Finally, we compare the costs of Solidity-to-Odra contract and a native CEP-18 implementation. Despite the contracts being different in terms of the internal logic and exposed entry points, such comparison gives us some insight into Nysa's efficiency.

    actionCEP-18Nysa
    deploy143.8793.37
    transfer1.291.36

    Conclusion

    Nysa is at early stage of development, but already has shown a huge potential. In a few simple steps, you can take advantage of an existing smart contract and convert it into an Odra module. The module can be a standalone contract, or a building block of a bigger contract.

    ]]>
    +
    + + <![CDATA[It's all about the community!]]> + https://odra.dev/blog/its-all-about-the-community + https://odra.dev/blog/its-all-about-the-community + Tue, 27 Jun 2023 00:00:00 GMT + + Over the past months, +we have been working hard on bringing Odra to the Casper world. +While we are proud of what we have achieved so far, +the hard part is just beginning. +Smart contract developers from outside of our team are starting to use Odra. +We are thrilled about it and here is how we are going to support the community.

    Hello Odra Community

    Whether you are a Rust developer, Solidity developer or a Casper enthusiast +we are happy to have you here, reading this blog post.

    We have built Odra to make smart contract development on Casper easy. +Now we are entering the next phase of the open source journey. +We are going to focus on the community and make sure +Odra is the best tool for the job. +Our motto (we borrowed from the Django Project) is:

    We bring cutting-edge smart contract development tools to +professionals with deadlines.

    How will we do it? We are going to focus on four things:

    • Quality - Our code and documentation will be of the highest quality. +We will always have tons of tests and examples.
    • Simplicity - The simplest solution is the best solution. +Odra's API needs to be simple and easy to use. +Always! +We are not afraid to take a few steps back and rethink our design. +We believe in short feedback loops and fast iterations.
    • Reusability - No one likes to repeat itself. +We see a huge potential in Odra Modules. +In time, it can become a standard library of Casper smart contracts, +that are battle-tested and ready to use.
    • Community - We are here to help you. +You can always reach out to us on Discord or Github.

    We will help with your project

    Whether you are a Rust developer or not, you can start using Odra today. +We have prepared a few examples and docs to help you get started. +Rust knowledge required to use Odra is minimal. +That was always the goal.

    But we understand that it is hard to start. +We got your back.

    We offer free consulting + 2 hours of live coding.

    All you have to do is write us an email at contract@odra.dev +with a short description of your project. +We will schedule a call and help you get started with Odra. +After 2 hours of live coding, you will have a working repository with 2 or 3 +smart contracts, that you can use as a starting point for your project.

    Roadmap

    The feedback we got quite often was: +It's nice, but will it last? What's the direction of the project? +Point taken. Now we answer: We are here to stay. +We got the support from the Casper Association and some projects of our own +to keep us funded. We play the long game.

    To systematize our work, we have prepared the roadmap. +As of now, we maintain plans for at least three future releases. +It is a good balance between predictability and flexibility. +We will release new versions approximately every 1-2 months or as needed. +Everyone is encouraged to propose a new Odra feature or enhancement. +New proposals need to be discussed and approved by the core team. +When the feature is ready, we assign it to one of the future releases.

    Odra Roadmap

    ]]>
    +
    + + <![CDATA[OpenAI writes ERC20 in Odra]]> + https://odra.dev/blog/2023-02-27-openai-writes-erc20-in-odra + https://odra.dev/blog/2023-02-27-openai-writes-erc20-in-odra + Mon, 27 Feb 2023 00:00:00 GMT + + OpenAI can write Odra smart contracts. +This is how.

    OpenAI

    OpenAI already proved that AI can code. +Github Copilot is used by more and more developers. +Many times it is mind-blowing how accurate it is. +It would be great if one of the OpenAI models could simply work after writing:

    Q: Write the ERC20 smart contract.

    A: use odra::{Mapping, Variable}...

    So far OpenAI hasn't indexed Odra. I even asked ChatGPT.

    Q: Do you know what is the Odra Framework for writing smart contracts?
    Response in one sentence. Use Yoda style.

    A: Aware of an Odra Framework for writing smart contracts, I am not.

    Soon (year or two) it will happen and Odra will be supported out of the box, +simply because it is available on GitHub.

    DaVinci Edit

    OpenAI gives us a great tool called Edit. +It uses the same technology Github Copiled it based on called Codex, +OpenAI gives us access to the model code-davinci-edit-001. +It allows you to paste in the code and ask for changes. +See more examples like rewriting Fibonacci to a recursive version here.

    But it doesn't know Odra. +Luckily this is not a problem. +I have found a nice trick that allows producing the code I want. +We simply have to present all the features of Odra and ask a good question.

    ERC20 by AI

    The goal is to bend AI to write the ERC20 token using Odra. +The Edit query needs two elements:

    • source code,
    • text that describes what should be changed.

    As the input source code I wrote the code that uses all the features ERC20 would use. +I need odra::module, Variable, Mapping, caller(), Address, +constructor, and errors.

    flipper.rs
    use odra::{Variable, types::Address, contract_env, Mapping, execution_error};

    #[odra::module]
    pub struct Flipper {
    value: Variable<bool>,
    flips_count: Variable<u32>,
    owner: Variable<Address>,
    messages: Mapping<(Address, Address), String>
    }

    #[odra::module]
    impl Flipper {
    #[odra(init)]
    pub fn init(&mut self, owner: Address) {
    self.value.set(false);
    self.owner.set(owner);
    }

    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    pub fn flip(&mut self) {
    self.value.set(!self.get_value());
    self.flips_count.set(self.flips_count.get_or_default());
    }

    pub fn get_value(&self) -> bool {
    self.value.get_or_default()
    }

    pub fn get_owner(&self) -> Option<Address> {
    self.owner.get()
    }

    pub fn set_message(&mut self, recipient: Address, msg: String) {
    let sender = contract_env::caller();
    let current_msg = self.messages.get(&(sender, recipient));
    match current_msg {
    Some(_) => contract_env::revert(Error::MessageAlreadyDefined),
    None => self.messages.set(&(sender, recipient), msg)
    }
    }

    pub fn get_message(&self, sender: Address, recipient: Address) -> String {
    self.messages.get_or_default(&(sender, recipient))
    }
    }

    execution_error! {
    pub enum Error {
    MessageAlreadyDefined => 1,
    NotAnMessageSender => 2,
    }
    }

    ChatGPT knows what the ERC20 is, so the kind request for changes is simple.

    Q: Implement another smart contract called ERC20.
    Balances should be of type U256.

    This is the result.

    ERC20 contract in Odra generated by OpenAI
    use odra::{Variable, types::Address, contract_env, Mapping, execution_error, U256};

    #[odra::module]
    pub struct ERC20 {
    name: Variable<String>,
    symbol: Variable<String>,
    decimals: Variable<u8>,
    total_supply: Variable<U256>,
    balances: Mapping<Address, U256>,
    allowed: Mapping<(Address, Address), U256>
    }

    #[odra::module]
    impl ERC20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, total_supply: U256) {
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.total_supply.set(total_supply);
    self.balances.set(&contract_env::caller(), total_supply);
    }

    pub fn total_supply(&self) -> U256 {
    self.total_supply.get_or_default()
    }

    pub fn balance_of(&self, owner: Address) -> U256 {
    self.balances.get_or_default(&owner)
    }

    pub fn transfer(&mut self, to: Address, value: U256) {
    let from = contract_env::caller();
    let from_balance = self.balances.get_or_default(&from);
    let to_balance = self.balances.get_or_default(&to);
    if from_balance < value {
    contract_env::revert(Error::InsufficientBalance);
    }
    self.balances.set(&from, from_balance - value);
    self.balances.set(&to, to_balance + value);
    }

    pub fn transfer_from(&mut self, from: Address, to: Address, value: U256) {
    let caller = contract_env::caller();
    let from_balance = self.balances.get_or_default(&from);
    let to_balance = self.balances.get_or_default(&to);
    let allowed = self.allowed.get_or_default(&(from, caller));
    if from_balance < value {
    contract_env::revert(Error::InsufficientBalance);
    }
    if allowed < value {
    contract_env::revert(Error::InsufficientAllowance);
    }
    self.balances.set(&from, from_balance - value);
    self.balances.set(&to, to_balance + value);
    self.allowed.set(&(from, caller), allowed - value);
    }

    pub fn approve(&mut self, spender: Address, value: U256) {
    let owner = contract_env::caller();
    self.allowed.set(&(owner, spender), value);
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.allowed.get_or_default(&(owner, spender))
    }
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Wow!

    What is next?

    AI already understands smart contracts. +It had to read a lot of Solidity code. +I checked and it knows Uniswap and Compound source code. +Most interesting is that AI was able to implement a concept it already knew +from another programming language in the unseen Rust framework. +At some point, we will be able to translate all the Solidity code to Odra. +Or maybe we will not have to...

    It is hard to imagine how good it will be in 2025 and beyond.

    ]]>
    +
    + + <![CDATA[Odra + CosmWasm]]> + https://odra.dev/blog/odra-cosmwasm + https://odra.dev/blog/odra-cosmwasm + Wed, 15 Feb 2023 00:00:00 GMT + + In November 2022 we released the first version of the Odra Framework. It's time for the next big step in our framework development - a new platform integration. Meet Odra + CosmWasm.

    CosmWasm

    CosmWasm is a smart contract platform for building dApps on the Cosmos blockchain ecosystem. +The platform is designed as a module that can be integrated into the Cosmos SDK, enabling developers who are already building blockchains with the Cosmos SDK to easily incorporate CosmWasm smart contract functionality without the need to modify their existing code.

    It uses the Rust programming language, so is potentially a perfect candidate for an Odra backend. +There are many blockchains like Osmosis, Secret Network, Juno that utilize CosmWasm.

    Show me your code

    I would like to write a Counter smart contract that is CosmWasm compatible. +What are the requirements?

    1. It should store a u32 value.
    2. The initial value it set by the contract deployer.
    3. The value can be incremented.
    4. The value can read from the storage.
    5. The contract can call another contract and increment its counter.

    So let's write an Odra module first.

    counter.rs
    use odra::{types::{Address, event::OdraEvent}, Variable, contract_env};
    use self::events::{Init, ValueUpdated};

    #[odra::module]
    pub struct Counter {
    pub value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub fn init(&mut self, value: u32) {
    self.value.set(value);
    <Init as OdraEvent>::emit(Init {
    value,
    });
    }

    pub fn increment(&mut self) {
    let old_value = self.value.get_or_default();
    let new_value = old_value + 1;
    self.value.set(new_value);

    ValueUpdated {
    old_value,
    new_value,
    operator: contract_env::caller()
    }.emit();
    }

    pub fn cross_increment(&mut self, counter_address: Address) {
    CounterRef::at(counter_address).increment();
    }

    pub fn get_value(&self) -> u32 {
    self.value.get_or_default()
    }
    }

    mod events {
    use odra::types::Address;

    #[derive(odra::Event)]
    pub struct ValueUpdated {
    pub old_value: u32,
    pub new_value: u32,
    pub operator: Address
    }

    #[derive(odra::Event)]
    pub struct Init {
    pub value: u32,
    }
    }

    #[cfg(test)]
    mod tests {
    use super::*;

    #[test]
    fn deploy() {
    let counter = CounterDeployer::init(10);
    assert_eq!(10, counter.get_value());
    }

    #[test]
    fn increment() {
    let mut counter = CounterDeployer::init(10);
    counter.increment();
    assert_eq!(11, counter.get_value());
    }
    }

    But wait, I mentioned CosmWasm, did I?

    Here the beauty of Odra comes into play.

    Let's use cargo-odra.

    cargo odra build -b cosmos

    And... that's it, congratulations! We have just written and build our first CosmWasm contract. +As you see, it is nothing different from building a contract for Casper. No additional code, we only changed the -b flag.

    Deploy

    We have just built a wasm file, but is it really a fully functional contract?

    As a battlefield let's choose Juno Network (if you would like to read more about smart contract development on Juno read this Quick Start tutorial). This is an arbitrary choice, each client is built upon a so-called Wasm Zone wasmd, and its interface is alike.

    Assuming you already know how to interact with Juno testnet, let's move to the fun part.

    But before we go, to keep things simple, let's prepare a justfile. It'll make our interactions with the blockchain much easier. See full version.

    justfile
    NODE := "--node https://rpc.uni.juno.deuslabs.fi:443"
    CHAIN_ID := "--chain-id uni-6"
    QUERY_FLAGS := NODE + " " + CHAIN_ID
    TRANSACTION_DEFAULTS := "--gas-prices 0.025ujunox --gas auto --gas-adjustment 1.3 --broadcast-mode block"
    EXEC_FLAGS := NODE + " " + CHAIN_ID + " " + TRANSACTION_DEFAULTS

    get-address NAME:
    junod keys show {{NAME}} | grep -o juno.*

    store-wasm WASM_PATH SENDER:
    junod tx wasm store \
    {{WASM_PATH}} --from {{SENDER}} {{EXEC_FLAGS}}

    init-contract CODE_ID VALUE SENDER CONTRACT_NAME:
    junod tx wasm instantiate \
    {{CODE_ID}} \
    `just run-args-parser '{"name": "init", "args": [ { "value" : {{VALUE}} }]}'` \
    --label '{{CONTRACT_NAME}}' --from {{SENDER}} \
    --admin `just get-address {{SENDER}}` \
    {{EXEC_FLAGS}}

    exec-increment ADDRESS SENDER:
    junod tx wasm execute \
    {{ADDRESS}} \
    `just run-args-parser '{"name": "increment"}'` \
    --from {{SENDER}} \
    {{EXEC_FLAGS}}

    query-get-value ADDRESS:
    junod q wasm contract-state smart {{ADDRESS}} \
    `just run-args-parser '{"name": "get_value"}'` {{QUERY_FLAGS}}

    Ok, we are ready to go.

    First, a CosmWasm contract needs to be stored, technically is not a contract yet. Like a larva waiting to morph into a butterfly (sorry for that).

    There are three ways to interact with a contract.

    1. Instantiate - in other words, a constructor call. Once the contract is instantiated, it gets an address.
    2. Execute - call an entrypoint that modifies the state.
    3. Query - read the contract's state.

    Now, let's take a look at how to do it using the tools we have just prepared.

    # args: 
    # the path to a wasm file,
    # the name under we store the private key.
    just store-wasm counter.wasm odra

    ...
    raw_log: '[{"events":[{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgStoreCode"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"store_code","attributes":[{"key":"code_checksum","value":"9fb9e7f39170de2628892ed5eecc556e2487267b30bb2c9656f8c7d1cd9f9a59"},{"key":"code_id","value":"286"}]}]}]'
    ...
    txhash: 1A8BA520E980C5ABCBCFA6F62D68B6BB82E780544605DE4DD5C6B1C5E966441B

    Great, our code is successfully stored. Form the logs we can read now the code_id which we will use to initialize the contract.

    # args: 
    # code id taken from the previous tx,
    # counter initial value,
    # named private key,
    # contract label.
    just init-contract 286 1 odra "My Counter"

    ...
    raw_log: '[{"events":[{"type":"instantiate","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"code_id","value":"286"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgInstantiateContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"wasm","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"value","value":"1"}]},{"type":"wasm-Init","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"value","value":"1"}]}]}]'
    ...
    txhash: 8DC53F95805349C3763CF4AF9527CAB2AEBEC77B240EFD3801C61231D8748F26

    Fantastic, the contract has been initialized and we have its address - juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g. +It's time to increment the counter.

    # args:
    # contract address taken from the previous tx,
    # named private key
    just exec-increment juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g odra

    ...
    raw_log: '[{"events":[{"type":"execute","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgExecuteContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]},{"type":"wasm","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"action","value":"increment"}]},{"type":"wasm-ValueUpdated","attributes":[{"key":"_contract_address","value":"juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g"},{"key":"old_value","value":"1"},{"key":"new_value","value":"2"},{"key":"operator","value":"juno1le848rjac00nezzq46v5unxujaltdf270vhtfh"}]}]}]'
    ...
    txhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2

    Finally, we expected, the value to be equal to 2 (the initial value was 1 and we incremented it once).

    # args:
    # contract address
    just query-get-value juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g

    data: 2

    Indeed, as expected the current counter value is 2.

    Show me your transaction

    I get it, you don't want to do it all by yourself. So let's take a closer look at one of my transactions.

    junod q tx 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2 --node https://rpc.uni.juno.deuslabs.fi:443 --chain-id uni-6
    ...
    logs:
    - events:
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    type: execute
    - attributes:
    - key: action
    value: /cosmwasm.wasm.v1.MsgExecuteContract
    - key: module
    value: wasm
    - key: sender
    value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh
    type: message
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    - key: action
    value: increment
    type: wasm
    - attributes:
    - key: _contract_address
    value: juno10yszsgq4460a57ztuw943h5j3c9l0eyx3algzq080gatl0thecls5ttk7g
    - key: old_value
    value: "1"
    - key: new_value
    value: "2"
    - key: operator
    value: juno1le848rjac00nezzq46v5unxujaltdf270vhtfh
    type: wasm-ValueUpdated
    ...
    txhash: 52141844321B8321DA71D073D4FA0865E73C3940153373CA7EF832D15BC3C2B2

    If you are familiar Cosmos ecosystem, you can see that there is an attribute containing +the performed action (increment) (If there were some parameters, they would be included in this attribute). +We can find here also our ValueUpdated event with its arguments old_value, new_value and operator.

    Wow, we have it, everything worked as intended!

    Conclusion

    Wouldn't it be great to replace Casper Erc20 and Cosmos Erc20 with a super-simple +single Odra Erc20 implementation?

    The Counter contract is just a POC, and there is still a long road ahead of us. +This simple example shows that features like storage, events, and cross-contract calls +can be unified in a simple readable interface.

    CosmWasm integration hasn't been published yet, but if you want to experiment by yourself, +check our GitHub (don't forget to update cargo-odra as well).

    Join us

    Interested?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    ]]>
    +
    + + <![CDATA[EVM at Risc0]]> + https://odra.dev/blog/evm-at-risc0 + https://odra.dev/blog/evm-at-risc0 + Mon, 13 Feb 2023 00:00:00 GMT + + Let's run Solidity code inside SputnikVM inside Risc0.

    First make sure you know how Risc0 works. +My previous post explains it.

    If you want to jump directly to the full code example, it's in the repo.

    Solidity

    As an example, I have this simple Solidity code. +It is a calculator with two functions. +One for addition and one for the nth Fibonacci number.

    bytecode/Calculator.sol
    contract Calculator {
    function add(uint256 a, uint256 b) public pure returns (uint256) {
    return a + b;
    }

    function fibonacci(uint256 n) public returns (uint256) {
    if (n <= 1) {
    return n;
    } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
    }
    }
    }

    It needs to be compiled into the byte code. solc can do this.

    $ solc \
    --bin-runtime \
    --optimize \
    --overwrite \
    --evm-version istanbul \
    --output-dir bytecode \
    bytecode/Calculator.sol

    It produces an EVM bytecode in the bytecode directory.

    $ ls bytecode/
    Calculator.bin-runtime Calculator.sol

    EVM

    The EVM I used is SputnikVM. +Most important it is written in pure Rust and even with no_std mode. +This way I can start an in-memory instance of EVM. +Then take the bytecode of a contract and install it. +Finally, call the contract with arguments and obtain the result value. +For now, it's just a Rust code. Risc0 comes later.

    The code is based on Sputnik's benchmark test. +Huge thanks to Michael Birch for helping with Sputnik. +Also make sure how EVM's function selectors work.

    evm-runner/src/lib.rs

    // Load previously compiled Calculator contract.
    pub const CALCULATOR_EVM_PROGRAM: &str = include_str!(
    "../../bytecode/Calculator.bin-runtime"
    );

    // Run Calculator for a given input.
    pub fn run_calc_contract(input: &str) -> String {
    run_evm(CALCULATOR_EVM_PROGRAM, input)
    }

    // Run a program (contract) for a given input.
    fn run_evm(program: &str, input: &str) -> String {

    // Define EVM configuration.
    let config = Config::istanbul();
    let vicinity = MemoryVicinity {
    gas_price: U256::zero(),
    origin: H160::default(),
    block_hashes: Vec::new(),
    block_number: Default::default(),
    block_coinbase: Default::default(),
    block_timestamp: Default::default(),
    block_difficulty: Default::default(),
    block_gas_limit: Default::default(),
    chain_id: U256::one(),
    block_base_fee_per_gas: U256::zero(),
    };

    // Initialized the state of EVM's memory.
    let mut state = BTreeMap::new();

    // Add our contract under the 0x10 address.
    state.insert(
    H160::from_str("0x1000000000000000000000000000000000000000")
    .unwrap(),
    MemoryAccount {
    nonce: U256::one(),
    balance: U256::from(10000000),
    storage: BTreeMap::new(),
    code: hex::decode(program).unwrap(),
    }
    );

    // Add new user 0xf0 that will be used as the contract caller.
    state.insert(
    H160::from_str("0xf000000000000000000000000000000000000000")
    .unwrap(),
    MemoryAccount {
    nonce: U256::one(),
    balance: U256::from(10000000),
    storage: BTreeMap::new(),
    code: Vec::new(),
    },
    );

    // Prepare the executor.
    let backend = MemoryBackend::new(&vicinity, state);
    let metadata = StackSubstateMetadata::new(u64::MAX, &config);
    let state = MemoryStackState::new(metadata, &backend);
    let precompiles = BTreeMap::new();
    let mut executor
    = StackExecutor::new_with_precompiles(state, &config, &precompiles);

    // Call the 0x10 contract using the 0xf0 user.
    // Use the input variable.
    let (exit_reason, result) = executor.transact_call(
    H160::from_str("0xf000000000000000000000000000000000000000")
    .unwrap(),
    H160::from_str("0x1000000000000000000000000000000000000000")
    .unwrap(),
    U256::zero(),
    hex::decode(input).unwrap(),
    u64::MAX,
    Vec::new(),
    );

    // Make sure the execution succeeded.
    assert!(exit_reason == ExitReason::Succeed(ExitSucceed::Returned));

    // Return hex encoded string.
    hex::encode(result)
    }

    Let's execute it. In below tests the data variable hold two things: +function selector and arguments.

    For example 61047ff4000000000000000000000000000000000000000000000000000000000000000a +is concatination of the function selector (first 8 chars) and 256-bit long argument. +It is just fibonacci(10). a is hex of 10 and 37 is hex of 52.

    evm-runner/src/lib.rs
    #[test]
    fn fibonacci_works() {
    let data = "61047ff4000000000000000000000000000000000000000000000000000000000000000a";
    let result = run_calc_contract(data);
    assert_eq!(result, "0000000000000000000000000000000000000000000000000000000000000037");
    }

    #[test]
    fn addition_works() {
    let data = "771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002";
    let result = run_calc_contract(data);
    assert_eq!(result, "0000000000000000000000000000000000000000000000000000000000000009");
    }

    Risc0

    It's time for risc0.

    First the guest program. +It is super simple. +It takes a string as an argument, +passes it to the run_calc_contract +and returns the result.

    methods/guest/src/bin/evm_calc.rs
    #![no_main]
    #![no_std]

    extern crate alloc;

    use alloc::{string::String};
    use risc0_zkvm::guest::{env};
    use evm_runner::run_calc_contract;

    risc0_zkvm::guest::entry!(main);

    pub fn main() {
    let input: String = env::read();
    let result = run_calc_contract(&input);
    env::commit(&result);
    }

    The final step is calling it under ZK.

    host/src/main.rs
    fn main() {
    println!("Proving Calculator.add(7, 2)");
    let input = "771602f700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000002";
    let result = run_prover(input);
    println!("Proof generated. 7 + 2 = {result}");

    println!("Proving Calculator.fibonacci(4)");
    let input = "61047ff40000000000000000000000000000000000000000000000000000000000000004";
    let result = run_prover(input);
    println!("Proof generated. fibonacci(4) = {result}");
    }

    fn run_prover(input: &str) -> u32 {
    // Make the prover.
    let method_code = std::fs::read(EVM_CALC_PATH).unwrap();
    let mut prover = Prover::new(&method_code, EVM_CALC_ID).unwrap();

    // Push the input as an argument.
    prover.add_input_u32_slice(to_vec(input).unwrap().as_slice());

    // Execute the prover.
    let receipt = prover.run().unwrap();

    // Verify the proof.
    assert!(receipt.verify(EVM_CALC_ID).is_ok());

    // Return result as an u32 value.
    let result: String = from_slice(receipt.journal.as_slice()).unwrap();
    u32::from_str_radix(&result, 16).unwrap()
    }
    $ cargo run --release -p host
    Proving Calculator.add(7, 2)
    Proof generated. 7 + 2 = 9
    Proving Calculator.fibonacci(4)
    Proof generated. fibonacci(4) = 3

    Conclusion

    How amazing and mindblowing it is! +Of course, it's just a proof of concept. +Yet with further development of Risc0 improving its proving time and +with more flexible SputnikVM this approach is more than promising.

    Join us

    Interested?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    ]]>
    +
    + + <![CDATA[Zero Knowledge on Casper]]> + https://odra.dev/blog/casper-zk-risc0 + https://odra.dev/blog/casper-zk-risc0 + Mon, 12 Dec 2022 00:00:00 GMT + + In this post, I present how to verify a zero knowledge proof on Casper.

    Zero Knowledge

    In my opinion, the zero knowledge (ZK) is the largest revolution in +blockchains, since Ethereum introduced Turing-complete, account-based +smart contracts. +To put it in simple words, ZK enables two use cases not possible before:

    1. Computation scaling - I can perform expensive computation off-chain +and put the result on a chain with the proof.
    2. Anonymity - I can prove to you, I know something without revealing it.

    Risc Zero

    I'd like to introduce you to Risc Zero. +It is the general purpose zero-knowledge virtual machine. +Go ahead and spend time reading their website! +For us, the key component is the proof verifier that can be compiled into WASM. +Sooo... we can run it on Casper :) +Yes! We can prove any program, produce proof, and send it to Casper's +smart contract for verification.

    Example

    Let's dive into the example to see how it works. +The full example code +you can find on our GitHub. +It is based on Risc Zero's Hello, Multiply! +example. So make sure you understand it first. +Guest and Prover sections are taken from this example.

    Guest

    The program we are proving is called a guest in Risc Zero. +Our goal is to prove we know the factors of an arbitrary number. +Given a and b below guest program computes a * b and produces +a proof of computation.

    methods/guest/src/multiply.rs
    pub fn main() {
    // Load the first number from the host
    let a: u64 = env::read();
    // Load the second number from the host
    let b: u64 = env::read();
    // Verify that neither of them are 1 (i.e. nontrivial factors)
    if a == 1 || b == 1 {
    panic!("Trivial factors")
    }
    // Compute the product while being careful with integer overflow
    let product = a.checked_mul(b).expect("Integer overflow");
    env::commit(&product);
    }

    Prover

    It's time to run the guest program and build the proof for +a specific a and b values.

    prover/src/main.rs
    fn main() {
    // Pick two numbers.
    let a: u64 = 17;
    let b: u64 = 23;

    // First, we make the prover, loading the 'multiply' method.
    let multiply_src = std::fs::read(MULTIPLY_PATH)
    .expect("Method code should be present at the specified path.");
    let mut prover = Prover::new(&multiply_src, MULTIPLY_ID)
    .expect("Prover should be constructed.",);

    // Next we send a & b to the guest.
    prover.add_input_u32_slice(to_vec(&a).unwrap().as_slice());
    prover.add_input_u32_slice(to_vec(&b).unwrap().as_slice());

    // Run prover & generate receipt
    let receipt = prover.run()
    .expect("Valid code should be provable.");

    // Extract journal of receipt (i.e. output c, where c = a * b)
    let c: u64 = from_slice(&receipt.journal)
    .expect("Journal output should deserialize.");

    // Print an assertion
    println!("I know the factors of {}, and I can prove it!", c);

    // Verify receipt, panic if it's wrong.
    receipt.verify(MULTIPLY_ID).expect(
    "Code you have proven should successfully verify.",
    );

    // Convert journal to string and store on disk.
    let journal = serde_json::to_string(&receipt.journal).unwrap();
    write_to_file("../data/journal", &journal);

    // Convert seal to string and store on disk.
    let seal = serde_json::to_string(&receipt.seal).unwrap();
    write_to_file("../data/seal", &seal);

    // Convert method_id to string and store on disk.
    let result = serde_json::to_string(MULTIPLY_ID).unwrap();
    write_to_file("../data/method", &result);
    }

    Verifier

    Now the verification step. +Given the proof (journal + seal) and the guest program definition (method), +Casper's smart contract checks its correctness. This one is written +just for the demonstration, but in general you want METHOD_ID to be +stored in your contract and both SEAL and JOURNAL to be passed to +the contract via arguments from the outside.

    verifier/src/verifier_contract.rs
    // Import the proof and the method.
    const METHOD_ID: &[u8] = &include!("../../data/method");
    const SEAL: &[u32] = &include!("../../data/seal");
    const JOURNAL: &[u32] = &include!("../../data/journal");

    // Verifier contract holds a result of the zk verification.
    #[odra::module]
    pub struct Verifier {
    result: Variable<String>,
    }

    #[odra::module]
    impl Verifier {
    // Calling this entry point triggers the zk proof verification.
    pub fn verify(&mut self) {
    let result = verify(JOURNAL, SEAL, METHOD_ID);
    self.result.set(result);
    }

    // Result getter.
    pub fn result(&self) -> String {
    self.result.get().unwrap_or(String::from("Not processed"))
    }
    }

    // The verification method. It constructs new Receipt and verifies it.
    fn verify(journal: &[u32], seal: &[u32], method_id: &[u8]) -> String {
    let result = Receipt::new(&journal, &seal).verify(method_id);

    match result {
    Ok(()) => String::from("Ok"),
    Err(err) => format!("Error: {}", err.to_string())
    }
    }

    Livenet results

    I have deployed it to the testnet and called the verify method. +The result was Ok. Wow, first-ever ZK proof verification on Casper. +Trustless bridging, layer 2 here we come :)

    The cost of running the verify method is 2324 CSPR. That's a lot, but +we have to start somewhere.

    What next

    I think it is a good place to outline possible Casper ZK goals for moving +this forward. The community should discuss:

    1. Building more examples. Risc Zero has a nice battleship game to port over +to Casper.
    2. Adding Risc Zero verification method to Casper's FFI.
    3. Supporting Risc Zero team. We should help develop this awesome +open-source project and gain the ZK expertise.

    Join us

    Interested in zero knowledge on Casper?

    Join our Discord, our Twitter or write us +at contact@odra.dev.

    ]]>
    +
    + + <![CDATA[Odra 0.2.0 Released]]> + https://odra.dev/blog/release-020 + https://odra.dev/blog/release-020 + Wed, 30 Nov 2022 00:00:00 GMT + + We want to introduce you to the very first public release of the Odra Framework proudly!

    A bit of history

    More than a year ago Maciej Zieliński resigned from the position of Ecosystem Leader at CasperLabs. +Along with Krzysztof Pobiarżyn and Kuba Płaskonka, we formed an engineering team dedicated to smart contracts.

    Looking at the blockchain ecosystems from the smart contract developer perspective there are two universes. +The first one is Solidity, which thrives and is at its best now. +It has a ton of well-tested code and security tooling. +Whenever an EVM-based blockchain pops out it gets populated by forks of DeFi and DAO protocols. +Fascinating network effect emerges - code written for one EVM-based blockchain can be run on every other EVM-based blockchain. +The second universe is Rust which compiles to WebAssembly. +Here developer communities live in the guarded cities of Polkadot, Cosmos, Solana, Casper, and Near. +The code written for one platform is not portable. +The network effect never had a chance to arise.

    The main reason why Odra exists is achieving this cross-chain code reusability. +We could paraphrase a bit and say: +"One to bring them all and in the code bind them."

    Odra for Casper

    The very first blockchain we have integrated with Odra is Casper. +In comparison to casper-contract API, it greatly cuts development time and offers a much lower entry level. +The Odra interface is developer friendly and people familiar with Solidity, Ink, or Near will feel like at home. +We hope it will unleash the creativity and bring a whole bunch of products onto Casper.

    Odra Framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design. +Built by experienced developers, it takes care of much of the hassle of smart contract development, enabling you to focus on writing your dapp without reinventing the wheel. +It's free and open source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. +We can do it by abstracting over core concepts that all the above systems are built around. +These are type system, storage, entry points, execution context, and testing environment. +We believe it will bring standardization to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this ecosystem.

    Let’s look at a Flipper contract, that holds a boolean value. +The contract has a constructor that sets the initial value, and two entry points: flip() and get(), to change and query the current value, respectively.

    use odra::Variable;

    #[odra::module]
    pub struct Flipper {
    value: Variable<bool>,
    }

    #[odra::module]
    impl Flipper {

    #[odra(init)]
    pub fn init(&mut self, value: bool) {
    self.value.set(value);
    }

    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    It comes with the CLI tool cargo-odra that makes it easy to use Odra.

    cargo-odra

    Neat and simple, isn't it? Do you like it? Start flowing with us!

    What next

    Let's be honest, we are just starting. +The codebase is still hot. +On the other hand, we are happy with the interfaces we designed. +Now is the time to write documentation and tutorials. +We are also building the modules library inspired by OpenZeppelin. +The security code audit is still ahead of us.

    Join us

    Check out the Odra GitHub repository for more info on how to get the most out of Odra. +Should you have questions, join our Discord, our Twitter or write us at contact@odra.dev.

    ]]>
    +
    +
    +
    \ No newline at end of file diff --git a/docs/docs/0.2.0/backends/casper/index.html b/docs/docs/0.2.0/backends/casper/index.html new file mode 100644 index 000000000..95f25bca5 --- /dev/null +++ b/docs/docs/0.2.0/backends/casper/index.html @@ -0,0 +1,25 @@ + + + + + +Casper | Odra + + + + + +
    +
    Version: 0.2.0

    Casper

    The Casper backend allows you to compile your contracts into WASM files which can be deployed +onto Casper Blockchain +and lets you to easily run them against Casper's Execution Engine locally.

    Types

    A struct to be written into the storage must implement OdraType which is defined as follow:

    pub trait OdraType: 
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    The other exposed types are:

    Contract Env

    As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances.

    Events

    An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've +already learned from the events article, in Odra you emit an event, similarly, you would do it in Solidity.

    Under the hood, Odra creates two URefs in the global state:

    1. __events - a dictionary that stores events' data.
    2. __events_length - the evens count.

    So, Events are nothing different from any other data stored by a contract.

    A struct to be an event must implement SerializableEvent which is defined as follow:

    pub trait SerializableEvent: 
    odra_types::event::OdraEvent +
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    Payable

    The first Odra idiom is a Contract Main Purse. It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper URef and a purse are created and stored under the __contract_main_purse key.

    Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a Cargo Purse. It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse.

    Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable. +If under the way something goes wrong with the transfer, the contract reverts.

    The transferred amount can be read inside the contract by calling contract_env::attached_value().

    note

    Odra expects the cargo_purse runtime argument to be attached to a contract call.

    Revert

    In Casper, we can stop the execution pretty straightforwardly - call the runtime::revert(). +Odra adds an extra abstraction layer - in a contract ExecutionErrors are defined, which ultimately are transformed into Casper's ApiError::User.

    Context

    Casper equips developers with very low-level tooling, which can be cumbersome for newcomers. +If you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack.

    The contract_env::self_address() function takes the first element of the callstack (runtime::get_call_stack()) and casts it to Address.

    The contract_env::caller() function takes the second element of the call stack (runtime::get_call_stack()) and casts it to Address.

    As mentioned in the [Payable] section, to store CSPR, each contract creates its purse. To read the contract balance, you call contract_env::self_balance, which checks the balance of the purse stored under __contract_main_purse.

    Test Env

    Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the Casper Execution Engine.

    In your test, you can freely switch execution context by setting as a caller (test_env::set_caller()) one of the 20 predefined accounts. Each account possesses the default amount of Motes (100_000_000_000_000_000).

    The Test Env internally keeps track of the current block time, error and attached value.

    Each test is executed on a fresh instance of the Test Env.

    Usage

    Name of the Casper backend in Odra is casper, so to run the tests against it, simply pass it as a -b +parameter:

    cargo odra test -b casper

    If you want to just generate a wasm file, simply run:

    cargo odra build -b casper

    Execution

    First thing Odra does with your code, is similar to the one used in MockVM - +a list of entrypoints is generated, thanks to the #[odra::module] macro.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/backends/mock-vm/index.html b/docs/docs/0.2.0/backends/mock-vm/index.html new file mode 100644 index 000000000..5bd20c597 --- /dev/null +++ b/docs/docs/0.2.0/backends/mock-vm/index.html @@ -0,0 +1,26 @@ + + + + + +MockVM | Odra + + + + + +
    +
    Version: 0.2.0

    MockVM

    The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing +the code written in Odra without compiling the contract to the target architecture and spinning up the +blockchain.

    Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler.

    Usage

    The MockVM is the default backend for Odra framework, so each time you run

    cargo odra test

    You are running your code against it.

    Architecture

    MockVM consists of two main parts: the Contract Register and the State.

    The Contract Register is just a list of contracts deployed onto the MockVM, identified by an Address. +Each time we call the contract, we call its instance stored in the Contract Register.

    Contracts and Test Env functions can modify the State of the MockVM.

    Contrary to the "real" backend, which holds the whole history of the blockchain, +the MockVM State holds only the current state of the MockVM. +Thanks to this and the fact that we do not need the blockchain itself, +MockVM starts instantly and runs the tests in the native speed.

    Execution

    When the MockVM backend is enabled, the #[odra::module] macro is responsible for converting +your pub functions into a list of Entrypoints, which are put into a Contract Container. +When the contract is deployed, its Container registered into a Registry under an address. +During the contract call, MockVM finds an Entrypoint and executes the code.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/backends/what-is-a-backend/index.html b/docs/docs/0.2.0/backends/what-is-a-backend/index.html new file mode 100644 index 000000000..4be48e0cb --- /dev/null +++ b/docs/docs/0.2.0/backends/what-is-a-backend/index.html @@ -0,0 +1,27 @@ + + + + + +What is a backend? | Odra + + + + + +
    +
    Version: 0.2.0

    What is a backend?

    You can think of a backend as a target platform for your smart contract. +This can be a piece of code allowing you to quickly check your code - like MockVM, +or a complete virtual machine, spinning up a blockchain for you - like CasperVM.

    Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env.

    Contract Env

    The Contract Env is a simple interface that each backend needs to implement, +exposing features of the blockchain from the perspective of the contract.

    It gives Odra a set of functions, which allows implementing more complex concepts - +for example, to implement Mapping, +Odra requires some kind of storage integration. +The exact implementation of those functions is a responsibility of a backend, +making Odra and its user free to implement the contract logic, +instead of messing with the blockchain internals.

    Other functions from Contract Env include handling transfers, addresses, block time, errors and events.

    Test Env

    Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with +the backend from the outside world - really useful for implementing tests.

    This ranges from interacting with the blockchain - like deploying and calling the contracts, +to the more test-oriented - handling errors, forwarding the block time, etc.

    What's next

    We will take a look at backends Odra implements in more detail.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/cargo-odra/index.html b/docs/docs/0.2.0/basics/cargo-odra/index.html new file mode 100644 index 000000000..86bd7c1de --- /dev/null +++ b/docs/docs/0.2.0/basics/cargo-odra/index.html @@ -0,0 +1,39 @@ + + + + + +Cargo Odra | Odra + + + + + +
    +
    Version: 0.2.0

    Cargo Odra

    If you followed the Installation tutorial properly, +you should already be set up with the Cargo Odra tool. It is an executable that will help you with +managing your smart contracts project, testing and running them on multiple backends (blockchains).

    Let's take a look at all the possibilities that Cargo Odra gives you.

    Managing projects

    Two commands will help you create a new project. The first one is cargo odra new. +You need to pass one parameter, namely --name {PROJECT_NAME}:

    cargo odra new --name my-project

    This will create a new project in the my-project folder and name it my-project. You can see it +for yourself, for example by taking a look into a Cargo.toml file created in your project's folder:

    [package]
    name = "my-project"
    version = "0.1.0"
    edition = "2021"

    The project is created using an existing template located in +https://github.com/odradev/odra-template. +If you want, you can use your own template, by passing -r parameter:

    cargo odra new -r https://github.com/my-repo/my-odra-template --name my-project

    Additionally, you can pass a branch name you want to use using -g, otherwise, the default +branch will be used. To see an example of a template, take a look at the repository linked above.

    The second way of creating a project is by using init command:

    cargo odra init --name my-project

    It works in the same way as new, but instead of creating a new folder, it will create a project +in the current, empty directory.

    Generating code

    If you want to quickly create a new contract code, you can use the generate command:

    cargo odra generate -c counter 

    This will create a new file src/counter.rs with sample code, add appropriate use and mod sections +to src/lib.rs and update the Odra.toml file accordingly. To learn more about Odra.toml file, +visit Odra.toml.

    Testing

    Most used command during the development of your project should be this one:

    cargo odra test

    It will run your tests against Odra's MockVM. It is substantially faster than virtual machines +provided by blockchains developers and implements all the features Odra uses.

    When you want to run tests against a "real" VM, just provide the name of the backend using -b +option:

    cargo odra test -b casper

    In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files, +spin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat. +Keep in mind that this is a lot slower than MockVM and you cannot use the debugger. +This is why MockVM was created and should be your first choice when developing contracts. +Of course, testing all of your code against a blockchain VM is a must in the end.

    If you want to run only some of the tests, you can pass arguments to the cargo test command +(which is run in the background obviously):

    cargo odra test -- this-will-be-passed-to-cargo-test

    If you want to run tests which names contain the word two, you can execute:

    cargo odra test -- two

    Of course, you can do the same when using the backend:

    cargo odra test -b casper -- two

    Building code

    You can also build the code itself and generate the output contracts without running the tests. +To do so, simply run:

    cargo odra build -b casper

    Where casper is the name of the backend we are using in this example. If the build process +finishes successfully, wasm files will be located in wasm folder.

    Updating dependencies

    You will learn later, that the project using Odra contains more than one Rust project - your own and +one or more builders. To run cargo update on all of them at once instead of traversing all the folders +you can use this command:

    cargo odra update

    What's next

    In the next section, we will take a look at all the files and directories that cargo odra created +for us and explain their purpose.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/communicating-with-host/index.html b/docs/docs/0.2.0/basics/communicating-with-host/index.html new file mode 100644 index 000000000..b0fc7e92c --- /dev/null +++ b/docs/docs/0.2.0/basics/communicating-with-host/index.html @@ -0,0 +1,21 @@ + + + + + +Host Communication | Odra + + + + + +
    +
    Version: 0.2.0

    Host Communication

    One of the things that your contract will probably do is to query the host for some information - +what is the current time? Who called me? Following example shows how to do this:

    examples/src/docs/host.rs
    use odra::Variable;
    use odra::types::{BlockTime, Address};

    #[odra::module]
    pub struct HostContract {
    name: Variable<String>,
    created_at: Variable<BlockTime>,
    created_by: Variable<Address>,
    }

    #[odra::module]
    impl HostContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.created_at.set(odra::contract_env::get_block_time());
    self.created_by.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }
    }

    As you can see, we are calling functions from odra::contract_env. get_block_time() will return +the current block time wrapped in Odra type Blocktime. caller() will return an Odra Address of +a caller (this can be an external caller or another contract).

    info

    You will learn more functions that Odra exposes from host and types it uses in further articles.

    What's next

    In the next article, we'll dive into testing your contracts with Odra, so you can check that the code +we presented in fact works!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/cross-calls/index.html b/docs/docs/0.2.0/basics/cross-calls/index.html new file mode 100644 index 000000000..7f383ef16 --- /dev/null +++ b/docs/docs/0.2.0/basics/cross-calls/index.html @@ -0,0 +1,25 @@ + + + + + +Cross calls | Odra + + + + + +
    +
    Version: 0.2.0

    Cross calls

    To show how to handle calls between contracts, first, let's implement two of them:

    examples/src/docs/cross_calls.rs
    use odra::Variable;
    use odra::types::{Address};

    #[odra::module]
    pub struct CrossContract {
    pub math_engine: Variable<Address>,
    }

    #[odra::module]
    impl CrossContract {
    #[odra(init)]
    pub fn init(&mut self, math_engine_address: Address) {
    self.math_engine.set(math_engine_address);
    }

    pub fn add_using_another(&self) -> u32 {
    let math_engine_address = self.math_engine.get().unwrap();
    MathEngineRef::at(math_engine_address).add(3, 5)
    }
    }

    #[odra::module]
    pub struct MathEngine {
    }

    #[odra::module]
    impl MathEngine {
    pub fn add(&self, n1: u32, n2: u32) -> u32 {
    n1 + n2
    }
    }

    MathEngine contract can add two numbers. CrossContract takes an Address in its init function and saves it in +storage for later use. If we deploy the MathEngine first and take note of its address, we can then deploy +CrossContract and use MathEngine to perform complicated calculations for us!

    To call the external contract, we use the Ref that was created for us by Odra:

    examples/src/docs/cross_calls.rs
    MathEngineRef::at(math_engine_address).add(3, 5)

    Contract Ref

    We mentioned Ref already in our Testing article. +It is a reference to already deployed - running contract. +Here we are going to take a deeper look at it.

    Similarly to a Deployer, the Ref is generated automatically, thanks to the #[odra::module] macro. +To get an instance of a reference, we can either deploy a contract (using Deployer) or by building it +directly, using ::at(address: Address) method, as shown above. +The reference implements all the public endpoints to the contract (those marked as pub in #[odra::module] +impl), alongside couple methods:

    • at(Address) -> Self - points the reference to an Address
    • address() -> Address - returns the Address the reference is currently pointing at
    • with_tokens(Amount) -> Self - attaches Amount of native tokens to the next call

    External Contracts

    Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI.

    For that purpose, we use #[odra:external_contract] macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of.

    Let's pretend the MathEngine we defined is an external contract. There is a contract with add() function that adds two numbers somewhere.

    examples/src/docs/cross_calls.rs
    #[odra::external_contract]
    pub trait Adder {
    fn add(&self, n1: u32, n2: u32) -> u32;
    }

    Analogously to modules, Odra creates the AdderRef struct (but do not create the AdderDeployer). Having an address we can call:

    examples/src/docs/cross_calls.rs
    AdderRef::at(address).add(3, 5)

    Testing

    Let's see how we can test our cross calls using this knowledge:

    examples/src/docs/cross_calls.rs
    use super::{CrossContractDeployer, MathEngineDeployer};

    #[test]
    fn test_cross_calls() {
    let math_engine_contract = MathEngineDeployer::default();
    let cross_contract = CrossContractDeployer::init(math_engine_contract.address());

    assert_eq!(cross_contract.add_using_another(), 8);
    }

    Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a MathEngine contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the add() function we want to use.

    examples/src/docs/cross_calls.rs
    #[cfg(test)]
    mod tests {
    use odra::types::Address;
    use crate::docs::cross_calls::{Adder, AdderRef};

    #[test]
    fn test_ext() {
    let adder = AdderRef::at(get_adder_address());

    assert_eq!(adder.add(1, 2), 3);
    }

    fn get_adder_address() -> Address {
    let contract = MathEngineDeployer::default();
    contract.address()
    }
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/directory-structure/index.html b/docs/docs/0.2.0/basics/directory-structure/index.html new file mode 100644 index 000000000..fcc59db99 --- /dev/null +++ b/docs/docs/0.2.0/basics/directory-structure/index.html @@ -0,0 +1,27 @@ + + + + + +Directory structure | Odra + + + + + +
    +
    Version: 0.2.0

    Directory structure

    After creating a new project using Odra and running the tests, you will be presented with the +following files and directories:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── CHANGELOG.md
    ├── Odra.toml
    ├── README.md
    ├── .builder_casper/
    ├── src/
    │ ├── flipper.rs
    │ └── lib.rs
    ├── target/
    └── wasm/

    Cargo.toml

    Let's first take a look at Cargo.toml file:

    [package]
    name = "sample"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.2.0", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    By default, your project will use the latest odra version available at crates.io. We are using two features:

    • odra/mock-vm - it is responsible for running tests on Odra's MockVM
    • odra/casper - backend implementation of Casper blockchain +More backends will be released as features that will be possible to enable here.

    Odra.toml

    This is the file that holds information about contracts that will be generated when running cargo odra build and +cargo odra test:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    As we can see, we have a single contract, its fqn (Fully Qualified Name) corresponds to +the contract is located in src/flipper.rs. +More contracts can be added here by hand, or by using cargo odra generate command.

    .builder_* folders

    Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary +for building wasm files and running them against blockchain VMs. As it is not necessary to modify +files in those folders in any way, by default they are hidden (hence the . at the beginning of the +folder name).

    src/

    This is the folder where your smart contract files live.

    target/

    Files generated by cargo during the build process are put here.

    wasm/

    WASM files generated by cargo odra build and cargo odra test are put here. You can grab those WASM files +and deploy them on the blockchain of your choosing.

    What's next

    Now, let's take a look at one of the files mentioned above in more detail, +namely the Odra.toml file.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/errors/index.html b/docs/docs/0.2.0/basics/errors/index.html new file mode 100644 index 000000000..6c80273d9 --- /dev/null +++ b/docs/docs/0.2.0/basics/errors/index.html @@ -0,0 +1,23 @@ + + + + + +Errors | Odra + + + + + +
    +
    Version: 0.2.0

    Errors

    Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the +following example of a simple owned contract:

    examples/src/docs/errors.rs
    use odra::{execution_error, Variable, UnwrapOrRevert};
    use odra::types::Address;

    #[odra::module]
    pub struct OwnedContract {
    name: Variable<String>,
    owner: Variable<Address>,
    }

    execution_error! {
    pub enum Error {
    OwnerNotSet => 1,
    NotAnOwner => 2,
    }
    }


    #[odra::module]
    impl OwnedContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.owner.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn owner(&self) -> Address {
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)
    }

    pub fn change_name(&mut self, name: String) {
    let caller = odra::contract_env::caller();
    if caller != self.owner() {
    odra::contract_env::revert(Error::NotAnOwner)
    }

    self.name.set(name);
    }
    }

    Firstly, we are using execution_error! macro to define our own set of Errors that our contract will +throw. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use +unwrap_or_revert_with and pass an error as an argument:

    examples/src/docs/errors.rs
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)

    You and the users of your contract will be thankful for a meaningful error message!

    You can also throw the error directly, by using revert:

    examples/src/docs/errors.rs
    odra::contract_env::revert(Error::NotAnOwner)

    Testing errors

    Okay, but how about testing it? We've already mentioned a function - assert_exception. This is how you will +use it:

    examples/src/docs/errors.rs
    use super::{OwnedContractDeployer, OwnedContractRef};
    use super::Error;

    #[test]
    fn test_owner_error() {
    let owner = odra::test_env::get_account(0);
    let not_an_owner = odra::test_env::get_account(1);

    odra::test_env::set_caller(owner);
    let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());

    odra::test_env::set_caller(not_an_owner);
    odra::test_env::assert_exception(Error::NotAnOwner, || {
    let mut owned_contract = OwnedContractRef::at(owned_contract.address());
    owned_contract.change_name("NewName".to_string());
    })
    }

    In the example above, because we are calling the change_name method as an address which is not an "owner", +we are expecting that "NotAnOwner" error will be thrown.

    note

    Here we are creating another reference to the already deployed contract using OwnedContractRef::at() and passing to it +its Address. Note that OwnedContractDeployer::init() returns the same type.

    What's next

    We will learn how to emit and test events using Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/events/index.html b/docs/docs/0.2.0/basics/events/index.html new file mode 100644 index 000000000..c2c851369 --- /dev/null +++ b/docs/docs/0.2.0/basics/events/index.html @@ -0,0 +1,20 @@ + + + + + +Events | Odra + + + + + +
    +
    Version: 0.2.0

    Events

    Different blockchains implement events in different ways. Odra lets you forget about it by introducing +Odra Events. Take a look:

    examples/src/docs/events.rs
    use odra::{Event, contract_env};
    use odra::types::{Address, BlockTime, event::OdraEvent};

    #[odra::module]
    pub struct PartyContract {
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    #[odra::module]
    impl PartyContract {
    #[odra(init)]
    pub fn init(&self) {
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();
    }
    }

    We defined a new contract, which emits an event called PartyStarted when the contract is deployed. +To define an event, we derive an Event macro like this:

    examples/src/docs/events.rs
    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    Among other things, it adds an emit() function to the struct, which allows you to emit the event simply +as that:

    examples/src/docs/events.rs
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();

    Testing events

    Odra's test_env comes with a handy macro assert_events! which lets you easily test the events that a given contract has emitted:

    examples/src/docs/events.rs
    use odra::{assert_events, test_env};
    use crate::docs::events::PartyStarted;
    use super::PartyContractDeployer;

    #[test]
    fn test_party() {
    let party_contract = PartyContractDeployer::init();
    assert_events!(
    party_contract,
    PartyStarted {
    caller: test_env::get_account(0),
    block_time: 0,
    }
    );
    }

    What's next

    Read the next article to learn how to call other contracts from the contract context.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/flipper-internals/index.html b/docs/docs/0.2.0/basics/flipper-internals/index.html new file mode 100644 index 000000000..f7b8e3618 --- /dev/null +++ b/docs/docs/0.2.0/basics/flipper-internals/index.html @@ -0,0 +1,35 @@ + + + + + +Flipper Internals | Odra + + + + + +
    +
    Version: 0.2.0

    Flipper Internals

    In this article, we take a deep dive into the code shown in the +Flipper example, where we will explain in more detail all +the Odra-specific sections of the code.

    flipper.rs
    use odra::Variable;

    Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation +that can be reused between targets. In the above case, we're importing Variable, which is responsible +for storing simple values on the blockchain's storage.

    Struct

    flipper.rs
    /// A module definition. Each module struct consists of Variables and Mappings
    /// or/and other modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    In Odra, all contracts are also modules, which can be reused between contracts. That's why we need +to mark the struct with the #[odra::module] macro. In the struct definition itself, we state all +the fields of the contract. Those fields can be regular Rust data types, however - those will not +be persisted on the blockchain. They can also be Odra modules - defined in your project or coming +from Odra itself. Finally, to make the data persistent on the blockchain, you can use something like +Variable<T> showed above. To learn more about storage interaction, take a look at the +next article.

    Impl

    flipper.rs
    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }
    ...

    Similarly to the struct, we mark the impl section with the #[odra::module] macro. Odra will take all +pub functions from this section and create contract endpoints from them. So, if you wish to have +functions that are not available for calling outside the contract, do not make them public. Alternatively, +you can create a separate impl section without the macro - all functions defined there, even marked +with pub will be not callable.

    The #[odra(init)] macro marks the constructor of the contract. This function will be limited to only +to a single call, all further calls to it will result in an error.

    flipper.rs
        ...
    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }
    ...

    The endpoints above show you how to interact with the simplest type of storage - Variable<T>. The data +saved there using set function will be persisted in the blockchain.

    Tests

    flipper.rs
    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }
    ...

    You can write tests in any way you prefer and know in Rust. In the example above we are deploying the +contract using FlipperDeployer - a piece of code generated automatically thanks to the macros. +The contract will be deployed on the VM you chose while running cargo odra test.

    What's next

    Now let's take a look at the different types of storage that Odra provides and how to use them.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/modules/index.html b/docs/docs/0.2.0/basics/modules/index.html new file mode 100644 index 000000000..68bd5b259 --- /dev/null +++ b/docs/docs/0.2.0/basics/modules/index.html @@ -0,0 +1,20 @@ + + + + + +Modules | Odra + + + + + +
    +
    Version: 0.2.0

    Modules

    Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you +write is also a module, thanks to a macro #[odra::module]. This means that we can easily rewrite our math +example from the previous article, to use a single contract, but still separate our "math" code:

    examples/src/docs/modules.rs
    use crate::docs::cross_calls::MathEngine;

    #[odra::module]
    pub struct ModulesContract {
    pub math_engine: MathEngine,
    }

    #[odra::module]
    impl ModulesContract {
    pub fn add_using_module(&self) -> u32 {
    self.math_engine.add(3, 5)
    }
    }

    Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as +a module!

    info

    To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!

    Testing

    As we don't need to hold addresses, the test is really simple:

    examples/src/docs/modules.rs
    use super::ModulesContractDeployer;

    #[test]
    fn test_modules() {
    let modules_contract = ModulesContractDeployer::default();
    assert_eq!(modules_contract.add_using_module(), 8);
    }

    What's next

    We will see how to handle native token transfers.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/native-token/index.html b/docs/docs/0.2.0/basics/native-token/index.html new file mode 100644 index 000000000..9ba52b2e8 --- /dev/null +++ b/docs/docs/0.2.0/basics/native-token/index.html @@ -0,0 +1,26 @@ + + + + + +Native token | Odra + + + + + +
    +
    Version: 0.2.0

    Native token

    Different blockchains come with different implementations of their native tokens. Odra wraps it all for you +in easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit +their funds and anyone can withdraw them:

    examples/src/docs/native_token.rs
    use odra::types::Balance;
    use odra::contract_env;

    #[odra::module]
    pub struct PublicWallet {
    }

    #[odra::module]
    impl PublicWallet {
    #[odra(payable)]
    pub fn deposit(&mut self) {
    }

    pub fn withdraw(&mut self, amount: Balance) {
    contract_env::transfer_tokens(contract_env::caller(), amount);
    }
    }
    danger

    The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make +any checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is +even possible.

    To see a more reasonable example, check out examples/src/tlw.rs in the odra main repository.

    You can see a new macro used here: #[odra(payable)] - it will add all the code needed for a function to +be able to receive the funds. Additionally, we are using a new function from contract_env - transfer_tokens. +It does exactly what you are expecting it to do - it will transfer native tokens from the contract to the +specified address.

    We are also using the Balance - an Odra type that wraps around the type that the underlying blockchain uses +for counting tokens.

    Testing

    To be able to test how many tokens a contract (or any address) has, test_env comes with a function - +token_balance:

    examples/src/docs/native_token.rs
    use odra::types::Balance;
    use odra::test_env;
    use super::PublicWalletDeployer;

    #[test]
    fn test_modules() {
    let mut my_contract = PublicWalletDeployer::default();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());

    my_contract.with_tokens(Balance::from(100)).deposit();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));

    my_contract.withdraw(Balance::from(25));
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/odra-toml/index.html b/docs/docs/0.2.0/basics/odra-toml/index.html new file mode 100644 index 000000000..7155da8c1 --- /dev/null +++ b/docs/docs/0.2.0/basics/odra-toml/index.html @@ -0,0 +1,23 @@ + + + + + +Odra.toml | Odra + + + + + +
    +
    Version: 0.2.0

    Odra.toml

    As mentioned in the previous article, Odra.toml is a file that contains information about all the contracts +that Odra will build. Let's take a look at the file structure again:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    The name will be used as a name for the contract - the generated wasm file will be in the above case named +flipper.wasm.

    The fqn (Fully Qualified Name) is used by the builder to locate the exact struct where +the contract is defined.

    Adding a new contract manually

    Besides using the cargo odra generate command, you can add a new contract to be compiled by hand. +To do this, add another [[contracts]] element, name it and make sure that the fqn is set correctly.

    For example, if you want to create a new contract called counter, your Odra.toml file should finally +look like this:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    [[contracts]]
    name = "counter"
    fqn = "sample::Counter"

    What's next

    In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous +Flipper contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/storage-interaction/index.html b/docs/docs/0.2.0/basics/storage-interaction/index.html new file mode 100644 index 000000000..79994903e --- /dev/null +++ b/docs/docs/0.2.0/basics/storage-interaction/index.html @@ -0,0 +1,36 @@ + + + + + +Storage interaction | Odra + + + + + +
    +
    Version: 0.2.0

    Storage interaction

    The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go +through all of them and explain their pros and cons.

    Variable

    The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your +variable in the Variable type. Let's look at a "real world" example of a contract that represents a dog:

    examples/src/docs/variable.rs
    #[odra::module]
    pub struct DogContract {
    barks: Variable<bool>,
    weight: Variable<u32>,
    name: Variable<String>,
    pets: Variable<Vec<u32>>,
    }

    You can see the Variable wrapping the data. Even complex types like Vec can be wrapped (with some caveats)!

    Let's make this contract usable, by providing a constructor and some getter functions:

    examples/src/docs/variable.rs
    use odra::Variable;

    #[odra::module]
    impl DogContract {
    #[odra(init)]
    pub fn init(&mut self, barks: bool, weight: u32, name: String) {
    self.barks.set(barks);
    self.weight.set(weight);
    self.name.set(name);
    self.walks.set(Vec::<u32>::default());
    }

    pub fn barks(&self) -> bool {
    self.barks.get_or_default()
    }

    pub fn weight(&self) -> u32 {
    self.weight.get_or_default()
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.len() as u32
    }

    pub fn walks_total_length(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.iter().sum()
    }
    }

    As you can see, you can access the data, by using get_or_default function:

    examples/src/docs/variable.rs
    ...
    self.barks.get_or_default()
    ...
    note

    Keep in mind that using get() will result in an Option that you'll need to unwrap - the variable +doesn't have to be initialized!

    To modify the data, use the set() function:

    examples/src/docs/variable.rs
    self.barks.set(barks);

    A Variable is easy to use and efficient for simple data types. One of its downsides is that it +serializes the data as a whole, so when you're using complex types like Vec or HashMap, +each time you get or set the whole data is read and written to the blockchain storage.

    In the example above, if we want to see how many walks our dog had, we would use the function:

    examples/src/docs/variable.rs
    pub fn walks_amount(&self) -> usize {
    let walks = self.walks.get_or_default();
    walks.len()
    }

    But to do so, we need to extract the whole serialized vector from the storage, which would inefficient, +especially for larger sets of data.

    To tackle this issue following two types were created.

    Mapping

    The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to +pass two values - the key type and the value type. Let's look at the variation of the Dog contract, that +uses Mapping to store information about our dog's friends and how many times they visited:

    examples/src/docs/mapping.rs
    use odra::{Mapping, Variable};

    #[odra::module]
    pub struct DogContract2 {
    name: Variable<String>,
    friends: Mapping<String, u32>,
    }

    In the example above, our key is a String (it is a name of the friend) and we are storing u32 values +(amount of visits). To read and write values from and into a Mapping we use a similar approach +to the one shown in the Variables section with one difference - we need to pass a key:

    examples/src/docs/mapping.rs
    pub fn visit(&mut self, friend_name: String) {
    let visits = self.visits(friend_name.clone());
    self.friends.set(&friend_name, visits + 1);
    }

    pub fn visits(&self, friend_name: String) -> u32 {
    match self.friends.get(&friend_name) {
    None => {
    0
    },
    Some(v) => {
    v
    }
    }
    }

    The biggest improvement over a Variable is that we can model functionality of a HashMap using Mapping. +The amount of data written to and read from the storage is minimal. However, we cannot iterate over Mapping. +We could implement such behaviour by using a numeric type key and saving the length of the set in a +separate variable. Thankfully Odra comes with a prepared solution - the List type.

    note

    If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with +a Variable working together:

    core/src/list.rs
    use odra::{Variable, List};

    pub struct List<T> {
    values: Mapping<u32, T>,
    index: Variable<u32>
    }

    List

    Going back to our DogContract example - let's revisit the walk case. This time, instead of Vec, +we'll use the list:

    examples/src/docs/list.rs
    #[odra::module]
    pub struct DogContract3 {
    name: Variable<String>,
    walks: List<u32>,
    }

    As you can see, the notation is very similar to the Vec. To understand the usage, take a look +at the reimplementation of the functions with an additional function that takes our dog for a walk +(it writes the data to the storage):

    examples/src/docs/list.rs
    #[odra::module]
    impl DogContract3 {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    self.walks.len()
    }

    pub fn walks_total_length(&self) -> u32 {
    self.walks.iter().sum()
    }

    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }
    }

    Now, we can know how many walks our dog had without loading the whole vector from the storage. +We need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all +the cases for you.

    info

    All of the above examples, alongside the tests, are available in the odra repository in the examples/src/docs/ folder.

    What's next

    In the next article, we'll see how to query the host for information about the world and our contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/basics/testing/index.html b/docs/docs/0.2.0/basics/testing/index.html new file mode 100644 index 000000000..f06ddca5a --- /dev/null +++ b/docs/docs/0.2.0/basics/testing/index.html @@ -0,0 +1,32 @@ + + + + + +Testing | Odra + + + + + +
    +
    Version: 0.2.0

    Testing

    Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write +regular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the +previous article:

    examples/src/docs/list.rs
    use odra::{Variable, List};

    #[cfg(test)]
    mod tests {
    use super::DogContract3Deployer;

    #[test]
    fn init_test() {
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());
    assert_eq!(dog_contract.walks_amount(), 0);
    assert_eq!(dog_contract.walks_total_length(), 0);
    dog_contract.walk_the_dog(5);
    dog_contract.walk_the_dog(10);
    assert_eq!(dog_contract.walks_amount(), 2);
    assert_eq!(dog_contract.walks_total_length(), 15);
    }
    }

    The #[odra(module)] macro created a Deployer code for us, which will deploy the contract on the +VM:

    examples/src/docs/list.rs
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());

    From now on, we can use dog_contract to interact with our deployed contract - in particular, all +pub functions from the impl section that was annotated with a macro are available to us:

    examples/src/docs/list.rs
    // Impl
    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }

    ...

    // Test
    dog_contract.walk_the_dog(5);

    Test env

    Odra gives us some additional functions that we can use to communicate with the host (outside the contract context) +and to configure how the contracts are deployed and called. Let's revisit the example from the previous +article about host communication and implement the tests that prove it works:

    examples/src/docs/testing.rs
    #[cfg(test)]
    mod tests {
    use super::TestingContractDeployer;

    #[test]
    fn test_env() {
    let testing_contract = TestingContractDeployer::init("MyContract".to_string());
    let creator = testing_contract.created_by();
    odra::test_env::set_caller(odra::test_env::get_account(1));
    let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());
    let creator2 = testing_contract2.created_by();
    assert!(creator != creator2);
    }
    }

    In the code above, we are deploying two instances of the same contract, but we're using odra::test_env::set_caller +to change the caller - so the Address which is deploying the contract. This changes the result of the odra::contract_env::caller() +the function we are calling inside the contract.

    Each test env comes with a set of functions that will let you write better tests:

    • fn set_caller(address: Address) - you've seen it in action just now
    • fn token_balance(address: Address) -> Balance - it returns the balance of the account associated with the given address
    • fn advance_block_time_by(seconds: BlockTime) - it increases the current value of block_time
    • fn get_account(n: usize) -> Address - it returns an nth address that was prepared for you by Odra in advance; +by default, you start with the 0th account
    • fn assert_exception<F, E>(err: E, block: F) - it executes the block code and expects err to happen
    • fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError> - returns +the event emitted by the contract

    Again, we'll see those used in the next articles.

    Deployer

    You may be wondering what is the TestingContractDeployer and where did it come from. +It is a piece of code generated automatically for you, thanks to the #[odra::module] macro. +If you used the #[odra(init)] on one of the methods, it will be the constructor of your contract. +Odra will make sure that it is called only once, so you can use it to initialize your data structures etc.

    If you do not provide the init method, you can deploy the contract using ::default() method. +In the end, you will get a Ref instance (in our case the TestingContractRef) which reimplements all +the methods you defined in the contract, but executes them on a blockchain!

    To learn more about the Ref contract, visit the Cross calls article.

    What's next

    We take a look at how Odra handles errors!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/category/backends/index.html b/docs/docs/0.2.0/category/backends/index.html new file mode 100644 index 000000000..d91a83037 --- /dev/null +++ b/docs/docs/0.2.0/category/backends/index.html @@ -0,0 +1,17 @@ + + + + + +Backends | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/category/basics/index.html b/docs/docs/0.2.0/category/basics/index.html new file mode 100644 index 000000000..b3cb9274a --- /dev/null +++ b/docs/docs/0.2.0/category/basics/index.html @@ -0,0 +1,17 @@ + + + + + +Basics | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/category/examples/index.html b/docs/docs/0.2.0/category/examples/index.html new file mode 100644 index 000000000..c6ac6053f --- /dev/null +++ b/docs/docs/0.2.0/category/examples/index.html @@ -0,0 +1,17 @@ + + + + + +Examples | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/category/getting-started/index.html b/docs/docs/0.2.0/category/getting-started/index.html new file mode 100644 index 000000000..9b94b1a2d --- /dev/null +++ b/docs/docs/0.2.0/category/getting-started/index.html @@ -0,0 +1,17 @@ + + + + + +Getting started | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/category/tutorials/index.html b/docs/docs/0.2.0/category/tutorials/index.html new file mode 100644 index 000000000..9cfe222ef --- /dev/null +++ b/docs/docs/0.2.0/category/tutorials/index.html @@ -0,0 +1,17 @@ + + + + + +Tutorials | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/examples/odra-examples/index.html b/docs/docs/0.2.0/examples/odra-examples/index.html new file mode 100644 index 000000000..ed2b4060f --- /dev/null +++ b/docs/docs/0.2.0/examples/odra-examples/index.html @@ -0,0 +1,17 @@ + + + + + +odra-examples | Odra + + + + + +
    +
    Version: 0.2.0

    odra-examples

    Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.

    The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.

    Don't worry if you find learning solely by reading the code challenging. Go to the Tutorial section, where we will review it together. We will break the code into pieces, leaving no space for further questions.

    What's next

    Read the next article to learn about reusable Odra components encapsulated in odra-modules.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/examples/using-odra-modules/index.html b/docs/docs/0.2.0/examples/using-odra-modules/index.html new file mode 100644 index 000000000..2425d4687 --- /dev/null +++ b/docs/docs/0.2.0/examples/using-odra-modules/index.html @@ -0,0 +1,17 @@ + + + + + +Using odra-modules | Odra + + + + + +
    +
    Version: 0.2.0

    Using odra-modules

    Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.

    If you followed the Installation guide your Cargo.toml should look like:

    Cargo.toml
    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.2.0", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    To use odra-modules, edit your dependency and features sections.

    Cargo.toml
    [dependencies]
    odra = { path = "../core", default-features = false }
    odra-modules = { path = "../modules", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]
    casper = ["odra/casper", "odra-modules/casper"]
    danger

    odra-modules defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a casper feature in your project, add odra-modules/casperspecifically (it applies to each backend).

    Now, the only thing left is to add a module to your contract.

    Let's write an example of MyToken based on Erc20 module.

    use odra::types::{Address, U256};
    use odra_modules::erc20::Erc20;

    #[odra::module]
    pub struct MyToken {
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, initial_supply: U256) {
    let name = String::from("MyToken");
    let symbol = String::from("MT");
    let decimals = 9u8;
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    self.erc20.approve(spender, amount);
    }
    }
    info

    All available modules are placed in the main Odra repository.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/getting-started/flipper/index.html b/docs/docs/0.2.0/getting-started/flipper/index.html new file mode 100644 index 000000000..64715fd05 --- /dev/null +++ b/docs/docs/0.2.0/getting-started/flipper/index.html @@ -0,0 +1,18 @@ + + + + + +Flipper example | Odra + + + + + +
    +
    Version: 0.2.0

    Flipper example

    To quickly start working with Odra, take a look at the following code sample. If you followed the +Installation tutorial, you should have this file already at src/flipper.rs.

    For further explanation of how this code works, see Flipper Internals.

    Let's flip

    flipper.rs
    use odra::Variable;

    /// A module definition. Each module struct consists Variables and Mappings
    /// or/and another modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }

    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    /// Retrieves value from the storage.
    /// If the value has never been set, the default value is returned.
    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }

    #[test]
    fn test_two_flippers() {
    let mut contract1 = FlipperDeployer::initial_settings();
    let contract2 = FlipperDeployer::initial_settings();
    assert!(!contract1.get());
    assert!(!contract2.get());
    contract1.flip();
    assert!(contract1.get());
    assert!(!contract2.get());
    }
    }

    What's next

    In the next category of articles, we will go through basic concepts of Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/getting-started/installation/index.html b/docs/docs/0.2.0/getting-started/installation/index.html new file mode 100644 index 000000000..24b998143 --- /dev/null +++ b/docs/docs/0.2.0/getting-started/installation/index.html @@ -0,0 +1,23 @@ + + + + + +Installation | Odra + + + + + +
    +
    Version: 0.2.0

    Installation

    Hello fellow Odra user! This page will guide you through the installation process.

    Prerequisites

    To start working with Odra, you need to have the following installed on your machine:

    • Rust toolchain installed (see rustup.rs)
    • wasmstrip tool installed (see wabt)

    We do not provide exact commands for installing these tools, as they are different for different operating systems. +Please refer to the documentation of the tools themselves.

    With Rust toolchain ready, you can add a new target:

    rustup target add wasm32-unknown-unknown
    note

    wasm32-unknown-uknown is a target that will be used by Odra to compile your smart contracts to WASM files.

    Installing Cargo Odra

    Cargo Odra is a helpful tool that will help you to build and test your smart contracts. +It is not required to use Odra, but the documentation will assume that you have it installed.

    To install it, simply execute the following command:

    cargo install cargo-odra

    To check if it was installed correctly and see available commands, type:

    cargo odra --help

    If everything went fine, we can proceed to the next step.

    Creating a new Odra project

    To create a new project, simply execute:

    cargo odra new --name my-project && cd my-project

    This will create a new folder called "my-project" and initialize Odra there. Cargo Odra +will create a sample contract for you in src directory. You can run the tests of this contract +by executing:

    cargo odra test

    This will run tests using Odra's internal MockVM. You can run those tests against a real backend, to do so +we need to add a new backend. Let's use CasperVM:

    cargo odra backend add -p casper

    Now we can run the tests against it:

    cargo odra test -b casper

    Congratulations! Now you are ready to create contracts using Odra framework! If you had any problems during +the installation process, feel free to ask for help on our Discord.

    What's next?

    If you want to see the code that you just tested, continue to the description of Flipper example.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/index.html b/docs/docs/0.2.0/index.html new file mode 100644 index 000000000..de818dc27 --- /dev/null +++ b/docs/docs/0.2.0/index.html @@ -0,0 +1,25 @@ + + + + + +Odra framework | Odra + + + + + +
    +
    Version: 0.2.0

    Odra framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, +pragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract +development, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open +source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. We can do it +by abstracting over core concepts that all the above systems are built around. These are type system, +storage, entry points, execution context, and testing environment. We believe it will bring standardization +to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this +ecosystem.

    What's next

    See the Installation and our Flipper example +to find out how to start your new project with Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/tutorials/erc20/index.html b/docs/docs/0.2.0/tutorials/erc20/index.html new file mode 100644 index 000000000..d0d97612f --- /dev/null +++ b/docs/docs/0.2.0/tutorials/erc20/index.html @@ -0,0 +1,17 @@ + + + + + +ERC-20 | Odra + + + + + +
    +
    Version: 0.2.0

    ERC-20

    It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.

    The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • advanced storage - key-value pairs,
    • Odra types like Address or Balance,
    • advanced events assertion.

    Code

    Our module has a pretty complex storage layout in comparison to the previous example.

    We need to store the following data:

    1. Immutable metadata - name, symbol and decimals.
    2. Total supply.
    3. Users' balances.
    4. Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.

    Module definition

    #[odra::module]
    pub struct Erc20 {
    decimals: Variable<u8>,
    symbol: Variable<String>,
    name: Variable<String>,
    total_supply: Variable<Balance>,
    balances: Mapping<Address, Balance>,
    allowances: Mapping<(Address, Address), Balance>
    }
    • L6 - For the first time, we need to store key-value pairs. In order to do that, we use Mapping. The name is taken after Solidity's native type mapping. You may notice the balances property maps Address to Balance. If you deal with addresses or you operate on tokens, you should always choose Address over String and Balance over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform.
    • L7 - Odra does not allow nested Mappings, but you can overcome it using a tuple as a key.

    Metadata

    #[odra::module]
    impl Erc20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: Balance) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(caller, initial_supply);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn symbol(&self) -> String {
    self.symbol.get_or_default()
    }

    pub fn decimals(&self) -> u8 {
    self.decimals.get_or_default()
    }

    pub fn total_supply(&self) -> Balance {
    self.total_supply.get_or_default()
    }
    }

    impl Erc20 {
    pub fn mint(&mut self, address: Address, amount: Balance) {
    self.balances.add(&address, amount);
    self.total_supply.add(amount);
    Transfer {
    from: None,
    to: Some(address),
    amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Transfer {
    pub from: Option<Address>,
    pub to: Option<Address>,
    pub amount: Balance
    }
    • L1 - The first impl block, marked as a module, contains functions defined in the ERC-20 standard.
    • L3-L10 - A constructor sets the token metadata and mints the initial supply.
    • L12-L14 - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the Ownable example, we used the get() function returning an Option<T>. If the type implements Default trait, you can call get_or_default() function and the contract does not fail even if the value is not initialized.
    • L29 - The second impl is not an odra module, in other words these function will not be a part of contract's ABI.
    • L30-L39 - Mint function is public, so like in a regular rust code will be accessible from the outside. mint() use notation self.balances.add(&address, amount);, which it is syntactic sugar for:
    let current_balance = self.balances.get(&address).unwrap_or_default();
    let new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();
    self.balances.set(&address, new_balance);

    Core

    For the sake of completeness, let's implement the remaining functionalities like transfer, transfer_from, or approve. They are not introducing any new concepts, so we leave them without additional remarks.

    erc20.rs
    #[odra::module]
    impl Erc20 {
    ...
    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    let caller = contract_env::caller();
    self.raw_transfer(caller, recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    let spender = contract_env::caller();
    self.spend_allowance(owner, spender, amount);
    self.raw_transfer(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    let owner = contract_env::caller();
    self.allowances.set(&(owner, spender), amount);
    Approval {
    owner,
    spender,
    value: amount
    }
    .emit();
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.balances.get_or_default(&address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.allowances.get_or_default(&(owner, spender))
    }
    }

    impl Erc20 {
    ...

    fn raw_transfer(&mut self, owner: Address, recipient: Address, amount: U256) {
    let owner_balance = self.balances.get_or_default(&owner);
    if amount > owner_balance {
    contract_env::revert(Error::InsufficientBalance)
    }
    self.balances.set(&owner, owner_balance - amount);
    self.balances.add(&recipient, amount);
    Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount
    }
    .emit();
    }

    fn spend_allowance(&mut self, owner: Address, spender: Address, amount: U256) {
    let key = (owner, spender);
    let allowance = self.allowances.get_or_default(&key);
    if allowance < amount {
    contract_env::revert(Error::InsufficientAllowance)
    }
    self.allowances.set(&key, allowance - amount);
    Approval {
    owner,
    spender,
    value: allowance - amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Approval {
    pub owner: Address,
    pub spender: Address,
    pub value: U256
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Now, compare the code we have written, with Open Zeppelin code. Out of 10, how Solidity-ish is our implementation?

    Test

    erc20rs
    #[cfg(test)]
    pub mod tests {
    use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};
    use odra::{assert_events, test_env, types::U256};

    pub const NAME: &str = "Plascoin";
    pub const SYMBOL: &str = "PLS";
    pub const DECIMALS: u8 = 10;
    pub const INITIAL_SUPPLY: u32 = 10_000;

    pub fn setup() -> Erc20Ref {
    Erc20Deployer::init(
    String::from(NAME),
    String::from(SYMBOL),
    DECIMALS,
    INITIAL_SUPPLY.into()
    )
    }

    #[test]
    fn initialization() {
    let erc20 = setup();

    assert_eq!(&erc20.symbol(), SYMBOL);
    assert_eq!(&erc20.name(), NAME);
    assert_eq!(erc20.decimals(), DECIMALS);
    assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());
    assert_events!(
    erc20,
    Transfer {
    from: None,
    to: Some(test_env::get_account(0)),
    amount: INITIAL_SUPPLY.into()
    }
    );
    }

    #[test]
    fn transfer_works() {
    let mut erc20 = setup();
    let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    erc20.transfer(recipient, amount);

    assert_eq!(
    erc20.balance_of(sender),
    U256::from(INITIAL_SUPPLY) - amount
    );
    assert_eq!(erc20.balance_of(recipient), amount);
    assert_events!(
    erc20,
    Transfer {
    from: Some(sender),
    to: Some(recipient),
    amount
    }
    );
    }

    #[test]
    fn transfer_error() {
    let erc20 = setup();
    let recipient = test_env::get_account(1);
    let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);

    test_env::assert_exception(Error::InsufficientBalance, || {
    // If we don't create a new ref, an error occurs:
    // cannot borrow `erc20` as mutable, as it is a captured variable
    // in a `Fn` closure cannot borrow as mutable
    let mut erc20 = Erc20Ref::at(erc20.address());
    erc20.transfer(recipient, amount)
    });
    }

    #[test]
    fn transfer_from_and_approval_work() {
    let mut erc20 = setup();
    let (owner, recipient, spender) = (
    test_env::get_account(0),
    test_env::get_account(1),
    test_env::get_account(2)
    );
    let approved_amount = 3_000.into();
    let transfer_amount = 1_000.into();

    // Owner approves Spender.
    erc20.approve(spender, approved_amount);

    // Allowance was recorded.
    assert_eq!(erc20.allowance(owner, spender), approved_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount
    }
    );

    // Spender transfers tokens from Owner to Recipient.
    test_env::set_caller(spender);
    erc20.transfer_from(owner, recipient, transfer_amount);

    // Tokens are transferred and allowance decremented.
    assert_eq!(
    erc20.balance_of(owner),
    U256::from(INITIAL_SUPPLY) - transfer_amount
    );
    assert_eq!(erc20.balance_of(recipient), transfer_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount - transfer_amount
    },
    Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount: transfer_amount
    }
    );

    assert_events!(erc20, Approval, Transfer);
    }

    #[test]
    fn transfer_from_error() {
    let erc20 = setup();
    let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    test_env::set_caller(spender);
    test_env::assert_exception(Error::InsufficientAllowance, || {
    // If we don't create a new ref, an error occurs:
    // cannot borrow `erc20` as mutable, as it is a captured variable
    // in a `Fn` closure cannot borrow as mutable
    let mut erc20 = Erc20Ref::at(erc20.address());
    erc20.transfer_from(owner, spender, amount)
    });
    }
    }
    • L111-123 - assert_events!() macro accepts multiple events. You must pass them in the order they were emitted.
    • L125 - Alternatively, if you don't want to check the entire event, you may assert only its type.
    danger

    You can not mix both approaches, you pass full events or types only.

    What's next

    Having two modules: Ownable and Erc20, let's combine them, and create an ERC-20 on steroids.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/tutorials/ownable/index.html b/docs/docs/0.2.0/tutorials/ownable/index.html new file mode 100644 index 000000000..1841a8412 --- /dev/null +++ b/docs/docs/0.2.0/tutorials/ownable/index.html @@ -0,0 +1,17 @@ + + + + + +Ownable | Odra + + + + + +
    +
    Version: 0.2.0

    Ownable

    In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • storing a single value,
    • defining constructors,
    • error handling,
    • defining and emitting events.
    • registering a contact in a test environment,
    • interactions with the test environment,
    • assertions (value, events, errors assertions).

    Code

    Before we write any code, we define functionalities we would like to implement.

    1. Module has an initializer that should be called once.
    2. Only the current owner can set a new owner.
    3. Read the current owner.
    4. A function that fails if called by a non-owner account.

    Define a module

    use odra::{types::Address, Variable};

    #[odra::module]
    pub struct Ownable {
    owner: Variable<Address>
    }

    That was easy, but it is crucial to understand the basic before we move on.

    • L3 - Firstly, we need create a struct called Ownable and apply #[odra::module] to it above.
    • L5 - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with Variable.

    Init the module

    use odra::{execution_error, contract_env, Event, types::{Address, event::OdraEvent};

    ...

    #[odra::module]
    impl Ownable {
    #[odra(init)]
    pub fn init(&mut self, owner: Address) {
    if self.owner.get().is_some() {
    contract_env::revert(Error::OwnerIsAlreadyInitialized)
    }

    self.owner.set(owner);

    OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    .emit();
    }
    }

    execution_error! {
    pub enum Error {
    OwnerIsNotInitialized => 1,
    }
    }

    #[derive(Event, Debug, PartialEq, Eq)]
    pub struct OwnershipChanged {
    pub prev_owner: Option<Address>,
    pub new_owner: Address
    }

    Ok, we have done a couple of things, let's analyze them one by one:

    • L5 - The impl should be an odra module, so add #[odra::module].
    • L7 - The init function is marked as #[odra(init)] making it a constructor. It matters if we would like to deploy the Ownable module as a standalone contract.
    • L23 - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an Error enum. Notice that the Error enum is defined inside the execution_error macro. It generates, among others, the required Into<ExecutionError> binding.
    • L9-L11 - If the owner has been set already, we call contract_env::revert() function. As an argument we pass Error::OwnerIsNotInitialized.
    • L13 - Then we write the owner passed as an argument to the storage. To do so we call the set() on Variable.
    • L29-L33 - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from odra::Event. We highly recommend to derive Debug, PartialEq and Eq for testing purpose.
    • L23 - Finally, we create the OwnershipChanged struct and call emit() function on it (import odra::types::event::OdraEvent trait). Hence we set the first owner, we set the prev_owner value to None.

    Features implementation

    #[odra::module]
    impl Ownable {
    ...

    pub fn ensure_ownership(&self, address: Address) {
    if Some(address) != self.owner.get() {
    contract_env::revert(Error::NotOwner)
    }
    }

    pub fn change_ownership(&mut self, new_owner: Address) {
    self.ensure_ownership(contract_env::caller());
    let current_owner = self.get_owner();
    self.owner.set(new_owner);
    OwnershipChanged {
    prev_owner: Some(current_owner),
    new_owner
    }
    .emit();
    }

    pub fn get_owner(&self) -> Address {
    match self.owner.get() {
    Some(owner) => owner,
    None => contract_env::revert(Error::OwnerIsNotInitialized)
    }
    }
    }

    execution_error! {
    pub enum Error {
    NotOwner => 1,
    OwnerIsAlreadyInitialized => 2,
    OwnerIsNotInitialized => 3,
    }
    }

    The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along.

    • L5,L32 - ensure_ownership() is reads the current owner, and reverts if is does not match the input Address. Also we need to update our Error enum adding a new variant NotOwner.
    • L11 - The function defined above can be reused in change_ownership() implementation. We pass to it the current caller, using the contract_env::caller() function. The we update the state, and emit OwnershipChanged.
    • L22,L34 - Lastly, a getter function. As the Variable get() function returns an Option, we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new Error variant OwnerIsNotInitialized.

    Test

    #[cfg(test)]
    mod tests {
    use super::*;
    use odra::{assert_events, test_env};

    fn setup() -> (Address, OwnableRef) {
    let owner = test_env::get_account(0);
    let ownable = OwnableDeployer::init(owner);
    (owner, ownable)
    }

    #[test]
    fn initialization_works() {
    let (owner, ownable) = setup();
    assert_eq!(ownable.get_owner(), owner);

    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    );
    }

    #[test]
    fn owner_can_change_ownership() {
    let (owner, mut ownable) = setup();
    let new_owner = test_env::get_account(1);

    test_env::set_caller(owner);
    ownable.change_ownership(new_owner);
    assert_eq!(ownable.get_owner(), new_owner);
    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: Some(owner),
    new_owner
    }
    );
    }

    #[test]
    fn non_owner_cannot_change_ownership() {
    let (_, mut ownable) = setup();
    let new_owner = test_env::get_account(1);
    ownable.change_ownership(new_owner);

    test_env::assert_exception(Error::NotOwner, || {
    // If we don't create a new ref, an error occurs:
    // cannot borrow `ownable` as mutable, as it is
    // a captured variable in a `Fn` closure cannot borrow as mutable
    let mut ownable = OwnableRef::at(ownable.address());
    ownable.change_ownership(new_owner);
    });
    }
    }
    • L6 - Each test case starts with the same initialization process, so for convenience, we defined the setup() function we call as the first statement in each test. Take a look at the signature fn setup() -> (Address, OwnableRef). OwnableRef is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ensure_ownership(), change_ownership(), get_owner(), but not init() which is a constructor.
    • L7 - Now, the module needs an owner, the easiest way is to take one from the test_env. We choose the address of first account (which is the default one).
    • L8 - Odra created for us OwnableDeployer struct which implements all constructor functions. In this case there is just one function - init() which corresponds the function we have implemented in the module.
    • L12 - It is time to define the first test. As you see, it is a regular rust test.
    • L14-15 - Using the setup() function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.
      note

      You may have noticed, we use here the term module interchangeably with contract. The reason is once we deploy our module onto a virtual blockchain it may be considered a contract.

    • L17-23 - On the contract, only the init() function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro assert_events. As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred.
    • L30 - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the test env predefines 20 accounts.
    • L32 - As mentioned, the default is the 0-th account, if you want to change the executor call the test_env::set_caller() function.
      note

      The caller switch applies only the next contract interaction, the second call will be done as the default account.

    • L49-55 - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call test_env::assert_exception() with the error you expect and a failing block of code.
      note

      In the test we create a second contract reference let mut ownable = OwnableRef::at(ownable.address());. As the name stands, it is just a reference, we interact with the same contract - only the address matters.

    Summary

    The Ownable module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract.

    What's next

    In the next tutorial we will implement a ERC20 standard.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.2.0/tutorials/owned-token/index.html b/docs/docs/0.2.0/tutorials/owned-token/index.html new file mode 100644 index 000000000..d6cc3aedf --- /dev/null +++ b/docs/docs/0.2.0/tutorials/owned-token/index.html @@ -0,0 +1,17 @@ + + + + + +OwnedToken | Odra + + + + + +
    +
    Version: 0.2.0

    OwnedToken

    This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.

    Code

    What should our module be capable of?

    1. Conform the Erc20 interface.
    2. Allow minting tokens but only the module owner.
    3. The current owner should be able to designate a new owner.

    Module definition

    Let's define a module called OwnedToken that is a composition of Ownable and Erc20 modules.

    owned_token.rs
    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!

    Delegation

    owned_token.rs
    use odra::types::{Address, Balance}

    ...

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: Balance) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> Balance {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> Balance {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> Balance {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: Balance) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: Balance) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: Balance) {
    self.erc20.approve(spender, amount);
    }

    pub fn get_owner(&self) -> Address {
    self.ownable.get_owner()
    }

    pub fn change_ownership(&mut self, new_owner: Address) {
    self.ownable.change_ownership(new_owner);
    }

    pub fn mint(&mut self, address: Address, amount: Balance) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    Easy. However, there are a few worth mentioning subtleness:

    • L10-L11 - A constructor is a great place to init both modules at once.
    • L14-L16 - Most of the entrypoints do not need any modification, so we simply delegates them to the erc20 module.
    • L50-L52 - The same we do with the ownable module.
    • L58-L61 - Minting should not be unconditional, we need some control over it. First, using ownable we make sure the caller really is the owner.

    Summary

    The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/advanced/advanced-storage/index.html b/docs/docs/0.3.0/advanced/advanced-storage/index.html new file mode 100644 index 000000000..09ae8ef69 --- /dev/null +++ b/docs/docs/0.3.0/advanced/advanced-storage/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced Storage Concepts | Odra + + + + + +
    +
    Version: 0.3.0

    Advanced Storage Concepts

    The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.

    Recap and Basic Concepts

    Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including Variable, Mapping, and List. These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values.

    Variable: A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract.

    Mapping: Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key.

    List: Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over.

    If you need a refresher on these topics, please refer to our guide on basic storage in Odra.

    Advanced Storage Concepts

    Sequence

    The Sequence in Odra is a basic module that holds a Variable which keeps track of the current value.

    pub struct Sequence<T>
    where
    T: Num + One + OdraType
    {
    value: Variable<T>
    }

    The Sequence module provides functions get_current_value and next_value to get the current value and increment the value respectively.

    Advanced Mapping

    In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility.

    Let's consider the following example:

    examples/mapping.rs
    use odra::{map, types::U256, Mapping, UnwrapOrRevert};

    use crate::owned_token::OwnedToken;

    #[odra::module]
    pub struct NestedMapping {
    strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,
    tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>
    }

    #[odra::module]
    impl NestedMapping {

    ...

    pub fn set_token(
    &mut self,
    key1: String,
    key2: u32,
    key3: String,
    token_name: String,
    decimals: u8,
    symbol: String,
    initial_supply: &U256
    ) {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .init(token_name, symbol, decimals, initial_supply);
    }

    pub fn get_string_api(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    let mapping = self.strings.get_instance(&key1).get_instance(&key2);
    mapping.get(&key3).unwrap_or_revert()
    }

    pub fn total_supply(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> U256 {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .total_supply()
    }
    }
    note

    Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers.

    Instead of using the get() function, call get_instance(), which sets the correct namespace for nested modules.

    If the terminal value is deeply nested, a long chain of get_instance() calls is required.

    To keep the codebase consistent, a map! macro can be used:

    examples/mapping.rs
    ...

    pub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {
    map!(self.strings[key1][key2][key3] = value);
    }

    pub fn get_string_macro(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    map!(self.strings[key1][key2][key3])
    }

    danger

    The terminal value must not be an Odra Module.

    AdvancedStorage Contract

    The given code snippet showcases the AdvancedStorage contract that incorporates these storage concepts.

    use odra::{Sequence, Mapping};
    use crate::modules::Token;

    #[odra::module]
    pub struct AdvancedStorage {
    my_sequence: Sequence<u32>,
    my_mapping: Mapping<String, Mapping<String, Token>>,
    }

    impl AdvancedStorage {
    pub fn get_sequence_current_value(&self) -> u32 {
    self.my_sequence.get_current_value()
    }

    pub fn next_sequence_value(&mut self) -> u32 {
    self.my_sequence.next_value()
    }

    pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.set(&inner_key, value);
    }

    pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.get(&inner_key)
    }
    }

    Conclusion

    Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/advanced/attributes/index.html b/docs/docs/0.3.0/advanced/attributes/index.html new file mode 100644 index 000000000..c05b314d6 --- /dev/null +++ b/docs/docs/0.3.0/advanced/attributes/index.html @@ -0,0 +1,18 @@ + + + + + +Attributes | Odra + + + + + +
    +
    Version: 0.3.0

    Attributes

    Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.

    Odra defines a few attributes that can be applied to functions to equip them with superpowers.

    Init

    If your contract needs initial setup, adding the #[odra(init)] attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed.

    It's important to note that a constructor function should not be invoked in any other context.

    Example

    examples/erc20.rs
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    Payable

    When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the #[odra(payable)] attribute can send and take money in the form of native tokens.

    Example

    examples/tlw.rs
    #[odra(payable)]
    pub fn deposit(&mut self) {
    // Extract values
    let caller: Address = contract_env::caller();
    let amount: Balance = contract_env::attached_value();
    let current_block_time: BlockTime = contract_env::get_block_time();

    // Multiple lock check
    if self.balances.get(&caller).is_some() {
    contract_env::revert(Error::CannotLockTwice)
    }

    // Update state, emit event
    self.balances.set(&caller, amount);
    self.lock_expiration_map
    .set(&caller, current_block_time + self.lock_duration());
    Deposit {
    address: caller,
    amount
    }
    .emit();
    }

    If you try to send tokens to a non-payable function, the transaction will be automatically rejected.

    Non Reentrant

    Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds.

    To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts.

    They can also use reentrancy guards to block recursive calls to sensitive functions.

    In Odra you can just apply the #[odra(non_reentrant)] attribute to your function.

    Mixing attributes

    A function can accept more than one attribute. The only exclusion is a constructor cannot be payable. +To apply multiple attributes, you can write:

    #[odra(payable, non_reentrant)]
    fn deposit() {
    // your logic...
    }

    or

    #[odra(payable)]
    #[odra(non_reentrant)]
    fn deposit() {
    // your logic...
    }

    In both cases attributes order does not matter.

    However, a constructor cannot be payable, so the below code would not compile.

    #[odra(payable)]
    #[odra(init)]
    fn initialize() {
    // your logic...
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/advanced/composer/index.html b/docs/docs/0.3.0/advanced/composer/index.html new file mode 100644 index 000000000..efce1aa43 --- /dev/null +++ b/docs/docs/0.3.0/advanced/composer/index.html @@ -0,0 +1,17 @@ + + + + + +Module Composer | Odra + + + + + +
    +
    Version: 0.3.0

    Module Composer

    The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.

    Conceptual Overview

    By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key.

    #[odra::module]
    struct Contract {
    value: Variable<u8>, // the default namespace would be "contract_value"
    module: Module
    }

    #[odra::module]
    struct Module {
    secret: Variable<String> // the default namespace would be "contract_module_secret"
    }

    While this isolation often proves useful, there are scenarios where shared storage is beneficial. Here, the Module Composer comes in.

    Additionally, the Module Composer shortens the storage key - a handy side effect of shared storage.

    For each module, Odra generates a corresponding Composer struct (e.g., MyContractComposer for MyContract module), which aids in manual module composition.

    Usage

    By default, the #[odra::module] macro generates an implementation of the odra::Instance trait, prefixing the storage key of child modules with the parent namespace. To disable this behavior, pass the skip_instance argument to the #[odra::module] macro.

    Let's write a simple code example. The example provided below introduces some additional complexity by featuring deeper module nesting.

    use odra::{Instance, Variable};

    #[odra::module]
    pub struct SharedStorage {
    pub value: Variable<String>
    }

    #[odra::module]
    pub struct MyStorage {
    pub shared: SharedStorage,
    pub version: Variable<u8>
    }

    #[odra::module]
    pub struct MoreStorage {
    pub my_storage: MyStorage,
    pub extra: Variable<u32>
    }

    #[odra::module(skip_instance)]
    pub struct ComplexContract {
    pub shared: SharedStorage,
    pub more_storage: MoreStorage
    }

    #[odra::module]
    impl ComplexContract {
    #[odra(init)]
    pub fn init(&mut self, version: u8, value: String, extra: u32) {
    self.more_storage.my_storage.version.set(version);
    self.shared.value.set(value);
    self.more_storage.extra.set(extra);
    }

    pub fn get_value(&self) -> String {
    self.shared.value.get_or_default()
    }

    pub fn get_value_via_storage(&self) -> String {
    self.more_storage.my_storage.shared.value.get_or_default()
    }

    pub fn get_extra_value(&self) -> u32 {
    self.more_storage.extra.get_or_default()
    }
    }

    impl Instance for ComplexContract {
    fn instance(namespace: &str) -> Self {
    let shared = SharedStorageComposer::new(namespace, "shared").compose();
    let my_storage = MyStorageComposer::new(namespace, "my_storage")
    .with_shared(&shared)
    .compose();
    let more_storage = MoreStorageComposer::new(namespace, "more_storage")
    .with_my_storage(&my_storage)
    .compose();
    Self { shared, more_storage }
    }
    }

    #[cfg(test)]
    mod test {
    use crate::composer::ComplexContractDeployer;

    #[test]
    fn t() {
    let shared_value = "shared_value".to_string();
    let extra_value: u32 = 314;
    let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);

    assert_eq!(token.get_value(), shared_value);
    assert_eq!(token.get_value_via_storage(), shared_value);
    assert_eq!(token.get_extra_value(), extra_value);
    }
    }

    In this example, we've introduced a new module, MoreStorage, which nests MyStorage and includes an extra value. The ComplexContract contains SharedStorage and MoreStorage, creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels.

    If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:

    1. On the contract level - contract_shared_value.
    2. On the MyStorage module level - contract_more_storage_shared_value.

    This example showcases how you can effectively use the Module Composer feature to build intricate and efficient smart contracts.

    Conclusion

    The Module Composer in Odra provides developers with a high level of flexibility and control over module behavior in their smart contracts. This guide, complete with a practical example, should give you a good understanding of the feature. Embrace the power of the Module Composer and unleash the full potential of your smart contracts!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/advanced/delegate/index.html b/docs/docs/0.3.0/advanced/delegate/index.html new file mode 100644 index 000000000..ac3f54eb0 --- /dev/null +++ b/docs/docs/0.3.0/advanced/delegate/index.html @@ -0,0 +1,17 @@ + + + + + +Delegate | Odra + + + + + +
    +
    Version: 0.3.0

    Delegate

    Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.

    The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable.

    Overview

    To utilize the delegate feature in your contract, use the delegate! macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the delegate! macro, your parent module remains clean and easy to understand.

    You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself.

    Code Examples

    Consider the following basic example for better understanding:

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);
    pub fn approve(&mut self, spender: Address, amount: U256);
    pub fn name(&self) -> String;
    pub fn symbol(&self) -> String;
    pub fn decimals(&self) -> u8;
    pub fn total_supply(&self) -> U256;
    pub fn balance_of(&self, owner: Address) -> U256;
    pub fn allowance(&self, owner: Address, spender: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    pub fn change_ownership(&mut self, new_owner: Address);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    This OwnedToken contract includes two modules: Erc20 and Ownable. We delegate various functions from both modules using the delegate! macro. As a result, the contract retains its succinctness without compromising on functionality.

    The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities.

    Let's take a look at another example.

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};

    #[odra::module]
    pub struct DeFiPlatform {
    ownable: Ownable,
    erc20: Erc20,
    exchange: Exchange
    }

    #[odra::module]
    impl DeFiPlatform {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    self.exchange.init(exchange_rate);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn balance_of(&self, owner: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    }

    to self.exchange {
    pub fn swap(&mut self, sender: Address, recipient: Address);
    pub fn set_exchange_rate(&mut self, new_rate: u64);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    In this DeFiPlatform contract, we include Erc20, Ownable, and Exchange modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure.

    Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/backends/casper/index.html b/docs/docs/0.3.0/backends/casper/index.html new file mode 100644 index 000000000..17e9ed458 --- /dev/null +++ b/docs/docs/0.3.0/backends/casper/index.html @@ -0,0 +1,25 @@ + + + + + +Casper | Odra + + + + + +
    +
    Version: 0.3.0

    Casper

    The Casper backend allows you to compile your contracts into WASM files which can be deployed +onto Casper Blockchain +and lets you to easily run them against Casper's Execution Engine locally.

    Types

    A struct to be written into the storage must implement OdraType which is defined as follow:

    pub trait OdraType: 
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    The other exposed types are:

    Contract Env

    As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances.

    Events

    An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've +already learned from the events article, in Odra you emit an event, similarly, you would do it in Solidity.

    Under the hood, Odra integrates with [Casper Event Standard] and creates a few URefs in the global state when a contract is being installed:

    1. __events - a dictionary that stores events' data.
    2. __events_length - the evens count.
    3. __events_ces_version - the version of Casper Event Standard.
    4. __events_schema - a dictionary that stores event schemas.

    Besides that, all the events the contract emits are registered - events schemas are written to the storage under the __events_schema key.

    note

    Don't forget to expose events in the module using #[odra::module(events = [...])].

    So, Events are nothing different from any other data stored by a contract.

    A struct to be an event must implement SerializableEvent which is defined as follow:

    pub trait SerializableEvent: 
    odra_types::event::OdraEvent +
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    Payable

    The first Odra idiom is a Contract Main Purse. It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper URef and a purse are created and stored under the __contract_main_purse key.

    Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a Cargo Purse. It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse.

    Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable. +If under the way something goes wrong with the transfer, the contract reverts.

    The transferred amount can be read inside the contract by calling contract_env::attached_value().

    note

    Odra expects the cargo_purse runtime argument to be attached to a contract call.

    Revert

    In Casper, we can stop the execution pretty straightforwardly - call the runtime::revert(). +Odra adds an extra abstraction layer - in a contract ExecutionErrors are defined, which ultimately are transformed into Casper's ApiError::User.

    Context

    Casper equips developers with very low-level tooling, which can be cumbersome for newcomers. +If you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack.

    The contract_env::self_address() function takes the first element of the callstack (runtime::get_call_stack()) and casts it to Address.

    The contract_env::caller() function takes the second element of the call stack (runtime::get_call_stack()) and casts it to Address.

    As mentioned in the [Payable] section, to store CSPR, each contract creates its purse. To read the contract balance, you call contract_env::self_balance, which checks the balance of the purse stored under __contract_main_purse.

    Test Env

    Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the Casper Execution Engine.

    In your test, you can freely switch execution context by setting as a caller (test_env::set_caller()) one of the 20 predefined accounts. Each account possesses the default amount of Motes (100_000_000_000_000_000).

    The Test Env internally keeps track of the current block time, error and attached value.

    Each test is executed on a fresh instance of the Test Env.

    Usage

    Name of the Casper backend in Odra is casper, so to run the tests against it, simply pass it as a -b +parameter:

    cargo odra test -b casper

    If you want to just generate a wasm file, simply run:

    cargo odra build -b casper

    Constructors

    Let's define a basic Odra module that includes a constructor:

    #[odra::module]
    struct Counter {
    value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub initialize(&mut self, value: u32) {
    self.value.set(value);
    }
    }

    Read more about constructors here.

    To deploy your contract with a constructor using casper-client, you need to pass the constructor argument with a value of initialize - this represents the name of the constructor function. Additionally, you need to pass the value argument, which sets the arbitrary initial value for the counter.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 5000000000000 \
    --session-path ./wasm/counter.wasm \
    --session-arg "constructor:string:'initialize'" \
    --session-arg "value:u32:42"

    For a more in-depth tutorial, please refer to the Casper's 'Writing On-Chain Code'.

    Execution

    First thing Odra does with your code, is similar to the one used in MockVM - +a list of entrypoints is generated, thanks to the #[odra::module] macro.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/backends/mock-vm/index.html b/docs/docs/0.3.0/backends/mock-vm/index.html new file mode 100644 index 000000000..2c61966b1 --- /dev/null +++ b/docs/docs/0.3.0/backends/mock-vm/index.html @@ -0,0 +1,26 @@ + + + + + +MockVM | Odra + + + + + +
    +
    Version: 0.3.0

    MockVM

    The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing +the code written in Odra without compiling the contract to the target architecture and spinning up the +blockchain.

    Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler.

    Usage

    The MockVM is the default backend for Odra framework, so each time you run

    cargo odra test

    You are running your code against it.

    Architecture

    MockVM consists of two main parts: the Contract Register and the State.

    The Contract Register is just a list of contracts deployed onto the MockVM, identified by an Address. +Each time we call the contract, we call its instance stored in the Contract Register.

    Contracts and Test Env functions can modify the State of the MockVM.

    Contrary to the "real" backend, which holds the whole history of the blockchain, +the MockVM State holds only the current state of the MockVM. +Thanks to this and the fact that we do not need the blockchain itself, +MockVM starts instantly and runs the tests in the native speed.

    Execution

    When the MockVM backend is enabled, the #[odra::module] macro is responsible for converting +your pub functions into a list of Entrypoints, which are put into a Contract Container. +When the contract is deployed, its Container registered into a Registry under an address. +During the contract call, MockVM finds an Entrypoint and executes the code.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/backends/what-is-a-backend/index.html b/docs/docs/0.3.0/backends/what-is-a-backend/index.html new file mode 100644 index 000000000..c62ff4a4c --- /dev/null +++ b/docs/docs/0.3.0/backends/what-is-a-backend/index.html @@ -0,0 +1,27 @@ + + + + + +What is a backend? | Odra + + + + + +
    +
    Version: 0.3.0

    What is a backend?

    You can think of a backend as a target platform for your smart contract. +This can be a piece of code allowing you to quickly check your code - like MockVM, +or a complete virtual machine, spinning up a blockchain for you - like CasperVM.

    Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env.

    Contract Env

    The Contract Env is a simple interface that each backend needs to implement, +exposing features of the blockchain from the perspective of the contract.

    It gives Odra a set of functions, which allows implementing more complex concepts - +for example, to implement Mapping, +Odra requires some kind of storage integration. +The exact implementation of those functions is a responsibility of a backend, +making Odra and its user free to implement the contract logic, +instead of messing with the blockchain internals.

    Other functions from Contract Env include handling transfers, addresses, block time, errors and events.

    Test Env

    Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with +the backend from the outside world - really useful for implementing tests.

    This ranges from interacting with the blockchain - like deploying and calling the contracts, +to the more test-oriented - handling errors, forwarding the block time, etc.

    What's next

    We will take a look at backends Odra implements in more detail.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/cargo-odra/index.html b/docs/docs/0.3.0/basics/cargo-odra/index.html new file mode 100644 index 000000000..e91eba8eb --- /dev/null +++ b/docs/docs/0.3.0/basics/cargo-odra/index.html @@ -0,0 +1,38 @@ + + + + + +Cargo Odra | Odra + + + + + +
    +
    Version: 0.3.0

    Cargo Odra

    If you followed the Installation tutorial properly, +you should already be set up with the Cargo Odra tool. It is an executable that will help you with +managing your smart contracts project, testing and running them on multiple backends (blockchains).

    Let's take a look at all the possibilities that Cargo Odra gives you.

    Managing projects

    Two commands will help you create a new project. The first one is cargo odra new. +You need to pass one parameter, namely --name {PROJECT_NAME}:

    cargo odra new --name my-project

    This will create a new project in the my_project folder and name it my_project. You can see it +for yourself, for example by taking a look into a Cargo.toml file created in your project's folder:

    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    The project is created using the template located in Odra's main repository. +By default it uses full template, if you want, you can use minimalistic blank by running:

    cargo odra new -t blank --name my-project

    By default, the latest release of Odra will be used for the template and as a dependency. +You can pass a source of Odra you want to use, by using -s parameter:

    cargo odra new -n my-project -s ../odra # will use local folder of odra
    cargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release
    cargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io

    The second way of creating a project is by using init command:

    cargo odra init --name my-project

    It works in the same way as new, but instead of creating a new folder, it will create a project +in the current, empty directory.

    Generating code

    If you want to quickly create a new contract code, you can use the generate command:

    cargo odra generate -c counter 

    This will create a new file src/counter.rs with sample code, add appropriate use and mod sections +to src/lib.rs and update the Odra.toml file accordingly. To learn more about Odra.toml file, +visit Odra.toml.

    Testing

    Most used command during the development of your project should be this one:

    cargo odra test

    It will run your tests against Odra's MockVM. It is substantially faster than virtual machines +provided by blockchains developers and implements all the features Odra uses.

    When you want to run tests against a "real" VM, just provide the name of the backend using -b +option:

    cargo odra test -b casper

    In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files, +spin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat. +Keep in mind that this is a lot slower than MockVM and you cannot use the debugger. +This is why MockVM was created and should be your first choice when developing contracts. +Of course, testing all of your code against a blockchain VM is a must in the end.

    If you want to run only some of the tests, you can pass arguments to the cargo test command +(which is run in the background obviously):

    cargo odra test -- this-will-be-passed-to-cargo-test

    If you want to run tests which names contain the word two, you can execute:

    cargo odra test -- two

    Of course, you can do the same when using the backend:

    cargo odra test -b casper -- two

    Building code

    You can also build the code itself and generate the output contracts without running the tests. +To do so, simply run:

    cargo odra build -b casper

    Where casper is the name of the backend we are using in this example. If the build process +finishes successfully, wasm files will be located in wasm folder.

    Updating dependencies

    You will learn later, that the project using Odra contains more than one Rust project - your own and +one or more builders. To run cargo update on all of them at once instead of traversing all the folders +you can use this command:

    cargo odra update

    What's next

    In the next section, we will take a look at all the files and directories that cargo odra created +for us and explain their purpose.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/communicating-with-host/index.html b/docs/docs/0.3.0/basics/communicating-with-host/index.html new file mode 100644 index 000000000..7e2ca69d2 --- /dev/null +++ b/docs/docs/0.3.0/basics/communicating-with-host/index.html @@ -0,0 +1,21 @@ + + + + + +Host Communication | Odra + + + + + +
    +
    Version: 0.3.0

    Host Communication

    One of the things that your contract will probably do is to query the host for some information - +what is the current time? Who called me? Following example shows how to do this:

    examples/src/docs/host.rs
    use odra::Variable;
    use odra::types::{BlockTime, Address};

    #[odra::module]
    pub struct HostContract {
    name: Variable<String>,
    created_at: Variable<BlockTime>,
    created_by: Variable<Address>,
    }

    #[odra::module]
    impl HostContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.created_at.set(odra::contract_env::get_block_time());
    self.created_by.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }
    }

    As you can see, we are calling functions from odra::contract_env. get_block_time() will return +the current block time wrapped in Odra type BlockTime. caller() will return an Odra Address of +a caller (this can be an external caller or another contract).

    info

    You will learn more functions that Odra exposes from host and types it uses in further articles.

    What's next

    In the next article, we'll dive into testing your contracts with Odra, so you can check that the code +we presented in fact works!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/cross-calls/index.html b/docs/docs/0.3.0/basics/cross-calls/index.html new file mode 100644 index 000000000..ae4a557c8 --- /dev/null +++ b/docs/docs/0.3.0/basics/cross-calls/index.html @@ -0,0 +1,25 @@ + + + + + +Cross calls | Odra + + + + + +
    +
    Version: 0.3.0

    Cross calls

    To show how to handle calls between contracts, first, let's implement two of them:

    examples/src/docs/cross_calls.rs
    use odra::Variable;
    use odra::types::{Address};

    #[odra::module]
    pub struct CrossContract {
    pub math_engine: Variable<Address>,
    }

    #[odra::module]
    impl CrossContract {
    #[odra(init)]
    pub fn init(&mut self, math_engine_address: Address) {
    self.math_engine.set(math_engine_address);
    }

    pub fn add_using_another(&self) -> u32 {
    let math_engine_address = self.math_engine.get().unwrap();
    MathEngineRef::at(math_engine_address).add(3, 5)
    }
    }

    #[odra::module]
    pub struct MathEngine {
    }

    #[odra::module]
    impl MathEngine {
    pub fn add(&self, n1: u32, n2: u32) -> u32 {
    n1 + n2
    }
    }

    MathEngine contract can add two numbers. CrossContract takes an Address in its init function and saves it in +storage for later use. If we deploy the MathEngine first and take note of its address, we can then deploy +CrossContract and use MathEngine to perform complicated calculations for us!

    To call the external contract, we use the Ref that was created for us by Odra:

    examples/src/docs/cross_calls.rs
    MathEngineRef::at(math_engine_address).add(3, 5)

    Contract Ref

    We mentioned Ref already in our Testing article. +It is a reference to already deployed - running contract. +Here we are going to take a deeper look at it.

    Similarly to a Deployer, the Ref is generated automatically, thanks to the #[odra::module] macro. +To get an instance of a reference, we can either deploy a contract (using Deployer) or by building it +directly, using ::at(address: Address) method, as shown above. +The reference implements all the public endpoints to the contract (those marked as pub in #[odra::module] +impl), alongside couple methods:

    • at(Address) -> Self - points the reference to an Address
    • address() -> Address - returns the Address the reference is currently pointing at
    • with_tokens(Amount) -> Self - attaches Amount of native tokens to the next call

    External Contracts

    Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI.

    For that purpose, we use #[odra:external_contract] macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of.

    Let's pretend the MathEngine we defined is an external contract. There is a contract with add() function that adds two numbers somewhere.

    examples/src/docs/cross_calls.rs
    #[odra::external_contract]
    pub trait Adder {
    fn add(&self, n1: u32, n2: u32) -> u32;
    }

    Analogously to modules, Odra creates the AdderRef struct (but do not create the AdderDeployer). Having an address we can call:

    examples/src/docs/cross_calls.rs
    AdderRef::at(address).add(3, 5)

    Testing

    Let's see how we can test our cross calls using this knowledge:

    examples/src/docs/cross_calls.rs
    use super::{CrossContractDeployer, MathEngineDeployer};

    #[test]
    fn test_cross_calls() {
    let math_engine_contract = MathEngineDeployer::default();
    let cross_contract = CrossContractDeployer::init(math_engine_contract.address());

    assert_eq!(cross_contract.add_using_another(), 8);
    }

    Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a MathEngine contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the add() function we want to use.

    examples/src/docs/cross_calls.rs
    #[cfg(test)]
    mod tests {
    use odra::types::Address;
    use crate::docs::cross_calls::{Adder, AdderRef};

    #[test]
    fn test_ext() {
    let adder = AdderRef::at(get_adder_address());

    assert_eq!(adder.add(1, 2), 3);
    }

    fn get_adder_address() -> Address {
    let contract = MathEngineDeployer::default();
    contract.address()
    }
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/directory-structure/index.html b/docs/docs/0.3.0/basics/directory-structure/index.html new file mode 100644 index 000000000..f59c6a7ca --- /dev/null +++ b/docs/docs/0.3.0/basics/directory-structure/index.html @@ -0,0 +1,27 @@ + + + + + +Directory structure | Odra + + + + + +
    +
    Version: 0.3.0

    Directory structure

    After creating a new project using Odra and running the tests, you will be presented with the +following files and directories:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── CHANGELOG.md
    ├── Odra.toml
    ├── README.md
    ├── .builder_casper/
    ├── src/
    │ ├── flipper.rs
    │ └── lib.rs
    ├── target/
    └── wasm/

    Cargo.toml

    Let's first take a look at Cargo.toml file:

    [package]
    name = "sample"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.0", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    By default, your project will use the latest odra version available at crates.io. We are using two features:

    • odra/mock-vm - it is responsible for running tests on Odra's MockVM
    • odra/casper - backend implementation of Casper blockchain +More backends will be released as features that will be possible to enable here.

    Odra.toml

    This is the file that holds information about contracts that will be generated when running cargo odra build and +cargo odra test:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    As we can see, we have a single contract, its fqn (Fully Qualified Name) corresponds to +the contract is located in src/flipper.rs. +More contracts can be added here by hand, or by using cargo odra generate command.

    .builder_* folders

    Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary +for building wasm files and running them against blockchain VMs. As it is not necessary to modify +files in those folders in any way, by default they are hidden (hence the . at the beginning of the +folder name).

    src/

    This is the folder where your smart contract files live.

    target/

    Files generated by cargo during the build process are put here.

    wasm/

    WASM files generated by cargo odra build and cargo odra test are put here. You can grab those WASM files +and deploy them on the blockchain of your choosing.

    What's next

    Now, let's take a look at one of the files mentioned above in more detail, +namely the Odra.toml file.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/errors/index.html b/docs/docs/0.3.0/basics/errors/index.html new file mode 100644 index 000000000..69c43cbe1 --- /dev/null +++ b/docs/docs/0.3.0/basics/errors/index.html @@ -0,0 +1,23 @@ + + + + + +Errors | Odra + + + + + +
    +
    Version: 0.3.0

    Errors

    Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the +following example of a simple owned contract:

    examples/src/docs/errors.rs
    use odra::{execution_error, Variable, UnwrapOrRevert};
    use odra::types::Address;

    #[odra::module]
    pub struct OwnedContract {
    name: Variable<String>,
    owner: Variable<Address>,
    }

    execution_error! {
    pub enum Error {
    OwnerNotSet => 1,
    NotAnOwner => 2,
    }
    }


    #[odra::module]
    impl OwnedContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.owner.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn owner(&self) -> Address {
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)
    }

    pub fn change_name(&mut self, name: String) {
    let caller = odra::contract_env::caller();
    if caller != self.owner() {
    odra::contract_env::revert(Error::NotAnOwner)
    }

    self.name.set(name);
    }
    }

    Firstly, we are using execution_error! macro to define our own set of Errors that our contract will +throw. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use +unwrap_or_revert_with and pass an error as an argument:

    examples/src/docs/errors.rs
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)

    You and the users of your contract will be thankful for a meaningful error message!

    You can also throw the error directly, by using revert:

    examples/src/docs/errors.rs
    odra::contract_env::revert(Error::NotAnOwner)

    Testing errors

    Okay, but how about testing it? We've already mentioned a function - assert_exception. This is how you will +use it:

    examples/src/docs/errors.rs
    use super::{OwnedContractDeployer, OwnedContractRef};
    use super::Error;

    #[test]
    fn test_owner_error() {
    let owner = odra::test_env::get_account(0);
    let not_an_owner = odra::test_env::get_account(1);

    odra::test_env::set_caller(owner);
    let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());

    odra::test_env::set_caller(not_an_owner);
    odra::test_env::assert_exception(Error::NotAnOwner, || {
    let mut owned_contract = OwnedContractRef::at(owned_contract.address());
    owned_contract.change_name("NewName".to_string());
    })
    }

    In the example above, because we are calling the change_name method as an address which is not an "owner", +we are expecting that "NotAnOwner" error will be thrown.

    note

    Here we are creating another reference to the already deployed contract using OwnedContractRef::at() and passing to it +its Address. Note that OwnedContractDeployer::init() returns the same type.

    What's next

    We will learn how to emit and test events using Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/events/index.html b/docs/docs/0.3.0/basics/events/index.html new file mode 100644 index 000000000..eec078440 --- /dev/null +++ b/docs/docs/0.3.0/basics/events/index.html @@ -0,0 +1,20 @@ + + + + + +Events | Odra + + + + + +
    +
    Version: 0.3.0

    Events

    Different blockchains implement events in different ways. Odra lets you forget about it by introducing +Odra Events. Take a look:

    examples/src/docs/events.rs
    use odra::{Event, contract_env};
    use odra::types::{Address, BlockTime, event::OdraEvent};

    #[odra::module(events = [PartyStarted])]
    pub struct PartyContract {
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    #[odra::module]
    impl PartyContract {
    #[odra(init)]
    pub fn init(&self) {
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();
    }
    }

    We defined a new contract, which emits an event called PartyStarted when the contract is deployed. +To define an event, we derive an Event macro like this:

    examples/src/docs/events.rs
    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    Among other things, it adds an emit() function to the struct, which allows you to emit the event simply +as that:

    examples/src/docs/events.rs
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();

    Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an events attribute to the struct's #[odra::module] macro and use array-like syntax to list events your module emits.

    The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module.

    Testing events

    Odra's test_env comes with a handy macro assert_events! which lets you easily test the events that a given contract has emitted:

    examples/src/docs/events.rs
    use odra::{assert_events, test_env};
    use crate::docs::events::PartyStarted;
    use super::PartyContractDeployer;

    #[test]
    fn test_party() {
    let party_contract = PartyContractDeployer::init();
    assert_events!(
    party_contract,
    PartyStarted {
    caller: test_env::get_account(0),
    block_time: 0,
    }
    );
    }

    What's next

    Read the next article to learn how to call other contracts from the contract context.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/flipper-internals/index.html b/docs/docs/0.3.0/basics/flipper-internals/index.html new file mode 100644 index 000000000..4d9eb9f5e --- /dev/null +++ b/docs/docs/0.3.0/basics/flipper-internals/index.html @@ -0,0 +1,35 @@ + + + + + +Flipper Internals | Odra + + + + + +
    +
    Version: 0.3.0

    Flipper Internals

    In this article, we take a deep dive into the code shown in the +Flipper example, where we will explain in more detail all +the Odra-specific sections of the code.

    flipper.rs
    use odra::Variable;

    Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation +that can be reused between targets. In the above case, we're importing Variable, which is responsible +for storing simple values on the blockchain's storage.

    Struct

    flipper.rs
    /// A module definition. Each module struct consists of Variables and Mappings
    /// or/and other modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    In Odra, all contracts are also modules, which can be reused between contracts. That's why we need +to mark the struct with the #[odra::module] macro. In the struct definition itself, we state all +the fields of the contract. Those fields can be regular Rust data types, however - those will not +be persisted on the blockchain. They can also be Odra modules - defined in your project or coming +from Odra itself. Finally, to make the data persistent on the blockchain, you can use something like +Variable<T> showed above. To learn more about storage interaction, take a look at the +next article.

    Impl

    flipper.rs
    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }
    ...

    Similarly to the struct, we mark the impl section with the #[odra::module] macro. Odra will take all +pub functions from this section and create contract endpoints from them. So, if you wish to have +functions that are not available for calling outside the contract, do not make them public. Alternatively, +you can create a separate impl section without the macro - all functions defined there, even marked +with pub will be not callable.

    The #[odra(init)] macro marks the constructor of the contract. This function will be limited to only +to a single call, all further calls to it will result in an error.

    flipper.rs
        ...
    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }
    ...

    The endpoints above show you how to interact with the simplest type of storage - Variable<T>. The data +saved there using set function will be persisted in the blockchain.

    Tests

    flipper.rs
    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }
    ...

    You can write tests in any way you prefer and know in Rust. In the example above we are deploying the +contract using FlipperDeployer - a piece of code generated automatically thanks to the macros. +The contract will be deployed on the VM you chose while running cargo odra test.

    What's next

    Now let's take a look at the different types of storage that Odra provides and how to use them.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/modules/index.html b/docs/docs/0.3.0/basics/modules/index.html new file mode 100644 index 000000000..48b90830b --- /dev/null +++ b/docs/docs/0.3.0/basics/modules/index.html @@ -0,0 +1,20 @@ + + + + + +Modules | Odra + + + + + +
    +
    Version: 0.3.0

    Modules

    Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you +write is also a module, thanks to a macro #[odra::module]. This means that we can easily rewrite our math +example from the previous article, to use a single contract, but still separate our "math" code:

    examples/src/docs/modules.rs
    use crate::docs::cross_calls::MathEngine;

    #[odra::module]
    pub struct ModulesContract {
    pub math_engine: MathEngine,
    }

    #[odra::module]
    impl ModulesContract {
    pub fn add_using_module(&self) -> u32 {
    self.math_engine.add(3, 5)
    }
    }

    Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as +a module!

    info

    To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!

    Testing

    As we don't need to hold addresses, the test is really simple:

    examples/src/docs/modules.rs
    use super::ModulesContractDeployer;

    #[test]
    fn test_modules() {
    let modules_contract = ModulesContractDeployer::default();
    assert_eq!(modules_contract.add_using_module(), 8);
    }

    What's next

    We will see how to handle native token transfers.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/native-token/index.html b/docs/docs/0.3.0/basics/native-token/index.html new file mode 100644 index 000000000..1caebe71c --- /dev/null +++ b/docs/docs/0.3.0/basics/native-token/index.html @@ -0,0 +1,26 @@ + + + + + +Native token | Odra + + + + + +
    +
    Version: 0.3.0

    Native token

    Different blockchains come with different implementations of their native tokens. Odra wraps it all for you +in easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit +their funds and anyone can withdraw them:

    examples/src/docs/native_token.rs
    use odra::types::Balance;
    use odra::contract_env;

    #[odra::module]
    pub struct PublicWallet {
    }

    #[odra::module]
    impl PublicWallet {
    #[odra(payable)]
    pub fn deposit(&mut self) {
    }

    pub fn withdraw(&mut self, amount: Balance) {
    contract_env::transfer_tokens(contract_env::caller(), amount);
    }
    }
    danger

    The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make +any checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is +even possible.

    To see a more reasonable example, check out examples/src/tlw.rs in the odra main repository.

    You can see a new macro used here: #[odra(payable)] - it will add all the code needed for a function to +be able to receive the funds. Additionally, we are using a new function from contract_env - transfer_tokens. +It does exactly what you are expecting it to do - it will transfer native tokens from the contract to the +specified address.

    We are also using the Balance - an Odra type that wraps around the type that the underlying blockchain uses +for counting tokens.

    Testing

    To be able to test how many tokens a contract (or any address) has, test_env comes with a function - +token_balance:

    examples/src/docs/native_token.rs
    use odra::types::Balance;
    use odra::test_env;
    use super::PublicWalletDeployer;

    #[test]
    fn test_modules() {
    let mut my_contract = PublicWalletDeployer::default();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());

    my_contract.with_tokens(Balance::from(100)).deposit();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));

    my_contract.withdraw(Balance::from(25));
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/odra-toml/index.html b/docs/docs/0.3.0/basics/odra-toml/index.html new file mode 100644 index 000000000..5dc3d44dc --- /dev/null +++ b/docs/docs/0.3.0/basics/odra-toml/index.html @@ -0,0 +1,23 @@ + + + + + +Odra.toml | Odra + + + + + +
    +
    Version: 0.3.0

    Odra.toml

    As mentioned in the previous article, Odra.toml is a file that contains information about all the contracts +that Odra will build. Let's take a look at the file structure again:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    The name will be used as a name for the contract - the generated wasm file will be in the above case named +flipper.wasm.

    The fqn (Fully Qualified Name) is used by the builder to locate the exact struct where +the contract is defined.

    Adding a new contract manually

    Besides using the cargo odra generate command, you can add a new contract to be compiled by hand. +To do this, add another [[contracts]] element, name it and make sure that the fqn is set correctly.

    For example, if you want to create a new contract called counter, your Odra.toml file should finally +look like this:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    [[contracts]]
    name = "counter"
    fqn = "sample::Counter"

    What's next

    In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous +Flipper contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/storage-interaction/index.html b/docs/docs/0.3.0/basics/storage-interaction/index.html new file mode 100644 index 000000000..2d07350c6 --- /dev/null +++ b/docs/docs/0.3.0/basics/storage-interaction/index.html @@ -0,0 +1,36 @@ + + + + + +Storage interaction | Odra + + + + + +
    +
    Version: 0.3.0

    Storage interaction

    The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go +through all of them and explain their pros and cons.

    Variable

    The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your +variable in the Variable type. Let's look at a "real world" example of a contract that represents a dog:

    examples/src/docs/variable.rs
    #[odra::module]
    pub struct DogContract {
    barks: Variable<bool>,
    weight: Variable<u32>,
    name: Variable<String>,
    pets: Variable<Vec<u32>>,
    }

    You can see the Variable wrapping the data. Even complex types like Vec can be wrapped (with some caveats)!

    Let's make this contract usable, by providing a constructor and some getter functions:

    examples/src/docs/variable.rs
    use odra::Variable;

    #[odra::module]
    impl DogContract {
    #[odra(init)]
    pub fn init(&mut self, barks: bool, weight: u32, name: String) {
    self.barks.set(barks);
    self.weight.set(weight);
    self.name.set(name);
    self.walks.set(Vec::<u32>::default());
    }

    pub fn barks(&self) -> bool {
    self.barks.get_or_default()
    }

    pub fn weight(&self) -> u32 {
    self.weight.get_or_default()
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.len() as u32
    }

    pub fn walks_total_length(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.iter().sum()
    }
    }

    As you can see, you can access the data, by using get_or_default function:

    examples/src/docs/variable.rs
    ...
    self.barks.get_or_default()
    ...
    note

    Keep in mind that using get() will result in an Option that you'll need to unwrap - the variable +doesn't have to be initialized!

    To modify the data, use the set() function:

    examples/src/docs/variable.rs
    self.barks.set(barks);

    A Variable is easy to use and efficient for simple data types. One of its downsides is that it +serializes the data as a whole, so when you're using complex types like Vec or HashMap, +each time you get or set the whole data is read and written to the blockchain storage.

    In the example above, if we want to see how many walks our dog had, we would use the function:

    examples/src/docs/variable.rs
    pub fn walks_amount(&self) -> usize {
    let walks = self.walks.get_or_default();
    walks.len()
    }

    But to do so, we need to extract the whole serialized vector from the storage, which would inefficient, +especially for larger sets of data.

    To tackle this issue following two types were created.

    Mapping

    The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to +pass two values - the key type and the value type. Let's look at the variation of the Dog contract, that +uses Mapping to store information about our dog's friends and how many times they visited:

    examples/src/docs/mapping.rs
    use odra::{Mapping, Variable};

    #[odra::module]
    pub struct DogContract2 {
    name: Variable<String>,
    friends: Mapping<String, u32>,
    }

    In the example above, our key is a String (it is a name of the friend) and we are storing u32 values +(amount of visits). To read and write values from and into a Mapping we use a similar approach +to the one shown in the Variables section with one difference - we need to pass a key:

    examples/src/docs/mapping.rs
    pub fn visit(&mut self, friend_name: String) {
    let visits = self.visits(friend_name.clone());
    self.friends.set(&friend_name, visits + 1);
    }

    pub fn visits(&self, friend_name: String) -> u32 {
    self.friends.get_or_default(&friend_name)
    }

    The biggest improvement over a Variable is that we can model functionality of a HashMap using Mapping. +The amount of data written to and read from the storage is minimal. However, we cannot iterate over Mapping. +We could implement such behavior by using a numeric type key and saving the length of the set in a +separate variable. Thankfully Odra comes with a prepared solution - the List type.

    note

    If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with +a Variable working together:

    core/src/list.rs
    use odra::{Variable, List};

    pub struct List<T> {
    values: Mapping<u32, T>,
    index: Variable<u32>
    }

    List

    Going back to our DogContract example - let's revisit the walk case. This time, instead of Vec, +we'll use the list:

    examples/src/docs/list.rs
    #[odra::module]
    pub struct DogContract3 {
    name: Variable<String>,
    walks: List<u32>,
    }

    As you can see, the notation is very similar to the Vec. To understand the usage, take a look +at the reimplementation of the functions with an additional function that takes our dog for a walk +(it writes the data to the storage):

    examples/src/docs/list.rs
    #[odra::module]
    impl DogContract3 {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    self.walks.len()
    }

    pub fn walks_total_length(&self) -> u32 {
    self.walks.iter().sum()
    }

    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }
    }

    Now, we can know how many walks our dog had without loading the whole vector from the storage. +We need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all +the cases for you.

    info

    All of the above examples, alongside the tests, are available in the odra repository in the examples/src/docs/ folder.

    Custom Types

    By default you can store only built-in types like numbers, Options, Results, Strings, Vectors.

    Implementing custom types is straightforward, your type must derive from OdraType:

    use odra::{Address, OdraType};

    #[derive(OdraType)]
    pub struct Dog {
    pub name: String,
    pub age: u8,
    pub owner: Option<Address>
    }
    note

    Each field of your struct must be an OdraType.

    What's next

    In the next article, we'll see how to query the host for information about the world and our contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/basics/testing/index.html b/docs/docs/0.3.0/basics/testing/index.html new file mode 100644 index 000000000..c9e1095ac --- /dev/null +++ b/docs/docs/0.3.0/basics/testing/index.html @@ -0,0 +1,32 @@ + + + + + +Testing | Odra + + + + + +
    +
    Version: 0.3.0

    Testing

    Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write +regular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the +previous article:

    examples/src/docs/list.rs
    use odra::{Variable, List};

    #[cfg(test)]
    mod tests {
    use super::DogContract3Deployer;

    #[test]
    fn init_test() {
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());
    assert_eq!(dog_contract.walks_amount(), 0);
    assert_eq!(dog_contract.walks_total_length(), 0);
    dog_contract.walk_the_dog(5);
    dog_contract.walk_the_dog(10);
    assert_eq!(dog_contract.walks_amount(), 2);
    assert_eq!(dog_contract.walks_total_length(), 15);
    }
    }

    The #[odra(module)] macro created a Deployer code for us, which will deploy the contract on the +VM:

    examples/src/docs/list.rs
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());

    From now on, we can use dog_contract to interact with our deployed contract - in particular, all +pub functions from the impl section that was annotated with a macro are available to us:

    examples/src/docs/list.rs
    // Impl
    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }

    ...

    // Test
    dog_contract.walk_the_dog(5);

    Test env

    Odra gives us some additional functions that we can use to communicate with the host (outside the contract context) +and to configure how the contracts are deployed and called. Let's revisit the example from the previous +article about host communication and implement the tests that prove it works:

    examples/src/docs/testing.rs
    #[cfg(test)]
    mod tests {
    use super::TestingContractDeployer;

    #[test]
    fn test_env() {
    let testing_contract = TestingContractDeployer::init("MyContract".to_string());
    let creator = testing_contract.created_by();
    odra::test_env::set_caller(odra::test_env::get_account(1));
    let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());
    let creator2 = testing_contract2.created_by();
    assert!(creator != creator2);
    }
    }

    In the code above, we are deploying two instances of the same contract, but we're using odra::test_env::set_caller +to change the caller - so the Address which is deploying the contract. This changes the result of the odra::contract_env::caller() +the function we are calling inside the contract.

    Each test env comes with a set of functions that will let you write better tests:

    • fn set_caller(address: Address) - you've seen it in action just now
    • fn token_balance(address: Address) -> Balance - it returns the balance of the account associated with the given address
    • fn advance_block_time_by(seconds: BlockTime) - it increases the current value of block_time
    • fn get_account(n: usize) -> Address - it returns an nth address that was prepared for you by Odra in advance; +by default, you start with the 0th account
    • fn assert_exception<F, E>(err: E, block: F) - it executes the block code and expects err to happen
    • fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError> - returns +the event emitted by the contract

    Again, we'll see those used in the next articles.

    Deployer

    You may be wondering what is the TestingContractDeployer and where did it come from. +It is a piece of code generated automatically for you, thanks to the #[odra::module] macro. +If you used the #[odra(init)] on one of the methods, it will be the constructor of your contract. +Odra will make sure that it is called only once, so you can use it to initialize your data structures etc.

    If you do not provide the init method, you can deploy the contract using ::default() method. +In the end, you will get a Ref instance (in our case the TestingContractRef) which reimplements all +the methods you defined in the contract, but executes them on a blockchain!

    To learn more about the Ref contract, visit the Cross calls article.

    What's next

    We take a look at how Odra handles errors!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/category/advanced/index.html b/docs/docs/0.3.0/category/advanced/index.html new file mode 100644 index 000000000..9512f296f --- /dev/null +++ b/docs/docs/0.3.0/category/advanced/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced | Odra + + + + + +
    +
    Version: 0.3.0

    Advanced

    Advanced concepts of Odra Framework

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/category/backends/index.html b/docs/docs/0.3.0/category/backends/index.html new file mode 100644 index 000000000..20e2ce30b --- /dev/null +++ b/docs/docs/0.3.0/category/backends/index.html @@ -0,0 +1,17 @@ + + + + + +Backends | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/category/basics/index.html b/docs/docs/0.3.0/category/basics/index.html new file mode 100644 index 000000000..dd3206497 --- /dev/null +++ b/docs/docs/0.3.0/category/basics/index.html @@ -0,0 +1,17 @@ + + + + + +Basics | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/category/examples/index.html b/docs/docs/0.3.0/category/examples/index.html new file mode 100644 index 000000000..7cafc14ca --- /dev/null +++ b/docs/docs/0.3.0/category/examples/index.html @@ -0,0 +1,17 @@ + + + + + +Examples | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/category/getting-started/index.html b/docs/docs/0.3.0/category/getting-started/index.html new file mode 100644 index 000000000..b82ca29a2 --- /dev/null +++ b/docs/docs/0.3.0/category/getting-started/index.html @@ -0,0 +1,17 @@ + + + + + +Getting started | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/category/tutorials/index.html b/docs/docs/0.3.0/category/tutorials/index.html new file mode 100644 index 000000000..6c94ad053 --- /dev/null +++ b/docs/docs/0.3.0/category/tutorials/index.html @@ -0,0 +1,17 @@ + + + + + +Tutorials | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/examples/odra-examples/index.html b/docs/docs/0.3.0/examples/odra-examples/index.html new file mode 100644 index 000000000..f1948d535 --- /dev/null +++ b/docs/docs/0.3.0/examples/odra-examples/index.html @@ -0,0 +1,17 @@ + + + + + +odra-examples | Odra + + + + + +
    +
    Version: 0.3.0

    odra-examples

    Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.

    The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.

    Don't worry if you find learning solely by reading the code challenging. Go to the Tutorial section, where we will review it together. We will break the code into pieces, leaving no space for further questions.

    What's next

    Read the next article to learn about reusable Odra components encapsulated in odra-modules.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/examples/using-odra-modules/index.html b/docs/docs/0.3.0/examples/using-odra-modules/index.html new file mode 100644 index 000000000..5d183365b --- /dev/null +++ b/docs/docs/0.3.0/examples/using-odra-modules/index.html @@ -0,0 +1,21 @@ + + + + + +Using odra-modules | Odra + + + + + +
    +
    Version: 0.3.0

    Using odra-modules

    Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.

    If you followed the Installation guide your Cargo.toml should look like:

    Cargo.toml
    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.0", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    To use odra-modules, edit your dependency and features sections.

    Cargo.toml
    [dependencies]
    odra = { path = "../core", default-features = false }
    odra-modules = { path = "../modules", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]
    casper = ["odra/casper", "odra-modules/casper"]
    danger

    odra-modules defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a casper feature in your project, add odra-modules/casperspecifically (it applies to each backend).

    Now, the only thing left is to add a module to your contract.

    Let's write an example of MyToken based on Erc20 module.

    use odra::types::{Address, U256};
    use odra_modules::erc20::Erc20;

    #[odra::module]
    pub struct MyToken {
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, initial_supply: U256) {
    let name = String::from("MyToken");
    let symbol = String::from("MT");
    let decimals = 9u8;
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    self.erc20.approve(spender, amount);
    }
    }
    info

    All available modules are placed in the main Odra repository.

    Available modules

    Odra modules comes with couple of ready-to-use modules and reusable extensions.

    Tokens

    Erc20

    The Erc20 module implements the ERC20 standard.

    Erc721

    The Erc721Base module implements the ERC721 standard, adjusted for the Odra framework.

    The Erc721Token module implements the ERC721Base and additionally uses +the Erc721Metadata and Ownable extensions.

    The Erc721Receiver trait lets you implement your own logic for receiving NFTs.

    The OwnedErc721WithMetadata trait is a combination of Erc721Token, Erc721Metadata and Ownable modules.

    Erc1155

    The Erc1155Base module implements the ERC1155 standard, adjusted for the Odra framework.

    The Erc1155Token module implements the ERC1155Base and additionally uses the Ownable extension.

    The OwnedErc1155 trait is a combination of Erc1155Token and Ownable modules.

    Wrapped native token

    The WrappedNativeToken module implements the Wrapper for the native token, +it was inspired by the WETH.

    Access

    AccessControl

    This module enables the implementation of role-based access control mechanisms for children +modules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API.

    Ownable

    This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner.

    The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the +transfer_ownership() function.

    Ownable2Step

    An extension of the Ownable module.

    Ownership can be transferred in a two-step process by using transfer_ownership() and accept_ownership() functions.

    Security

    Pauseable

    A module allowing to implement an emergency stop mechanism that can be triggered by any account.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/getting-started/flipper/index.html b/docs/docs/0.3.0/getting-started/flipper/index.html new file mode 100644 index 000000000..f479f4c1c --- /dev/null +++ b/docs/docs/0.3.0/getting-started/flipper/index.html @@ -0,0 +1,18 @@ + + + + + +Flipper example | Odra + + + + + +
    +
    Version: 0.3.0

    Flipper example

    To quickly start working with Odra, take a look at the following code sample. If you followed the +Installation tutorial, you should have this file already at src/flipper.rs.

    For further explanation of how this code works, see Flipper Internals.

    Let's flip

    flipper.rs
    use odra::Variable;

    /// A module definition. Each module struct consists Variables and Mappings
    /// or/and another modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }

    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    /// Retrieves value from the storage.
    /// If the value has never been set, the default value is returned.
    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }

    #[test]
    fn test_two_flippers() {
    let mut contract1 = FlipperDeployer::initial_settings();
    let contract2 = FlipperDeployer::initial_settings();
    assert!(!contract1.get());
    assert!(!contract2.get());
    contract1.flip();
    assert!(contract1.get());
    assert!(!contract2.get());
    }
    }

    What's next

    In the next category of articles, we will go through basic concepts of Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/getting-started/installation/index.html b/docs/docs/0.3.0/getting-started/installation/index.html new file mode 100644 index 000000000..4ef08f669 --- /dev/null +++ b/docs/docs/0.3.0/getting-started/installation/index.html @@ -0,0 +1,23 @@ + + + + + +Installation | Odra + + + + + +
    +
    Version: 0.3.0

    Installation

    Hello fellow Odra user! This page will guide you through the installation process.

    Prerequisites

    To start working with Odra, you need to have the following installed on your machine:

    • Rust toolchain installed (see rustup.rs)
    • wasmstrip tool installed (see wabt)

    We do not provide exact commands for installing these tools, as they are different for different operating systems. +Please refer to the documentation of the tools themselves.

    With Rust toolchain ready, you can add a new target:

    rustup target add wasm32-unknown-unknown
    note

    wasm32-unknown-uknown is a target that will be used by Odra to compile your smart contracts to WASM files.

    Installing Cargo Odra

    Cargo Odra is a helpful tool that will help you to build and test your smart contracts. +It is not required to use Odra, but the documentation will assume that you have it installed.

    To install it, simply execute the following command:

    cargo install cargo-odra

    To check if it was installed correctly and see available commands, type:

    cargo odra --help

    If everything went fine, we can proceed to the next step.

    Creating a new Odra project

    To create a new project, simply execute:

    cargo odra new --name my-project && cd my-project

    This will create a new folder called "my-project" and initialize Odra there. Cargo Odra +will create a sample contract for you in src directory. You can run the tests of this contract +by executing:

    cargo odra test

    This will run tests using Odra's internal MockVM. You can run those tests against a real backend, to do so +we need to add a new backend. Let's use CasperVM:

    cargo odra backend add -p casper

    Now we can run the tests against it:

    cargo odra test -b casper

    Congratulations! Now you are ready to create contracts using Odra framework! If you had any problems during +the installation process, feel free to ask for help on our Discord.

    What's next?

    If you want to see the code that you just tested, continue to the description of Flipper example.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/index.html b/docs/docs/0.3.0/index.html new file mode 100644 index 000000000..f237c3fb5 --- /dev/null +++ b/docs/docs/0.3.0/index.html @@ -0,0 +1,25 @@ + + + + + +Odra framework | Odra + + + + + +
    +
    Version: 0.3.0

    Odra framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, +pragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract +development, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open +source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. We can do it +by abstracting over core concepts that all the above systems are built around. These are type system, +storage, entry points, execution context, and testing environment. We believe it will bring standardization +to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this +ecosystem.

    What's next

    See the Installation and our Flipper example +to find out how to start your new project with Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/tutorials/erc20/index.html b/docs/docs/0.3.0/tutorials/erc20/index.html new file mode 100644 index 000000000..4705c5508 --- /dev/null +++ b/docs/docs/0.3.0/tutorials/erc20/index.html @@ -0,0 +1,17 @@ + + + + + +ERC-20 | Odra + + + + + +
    +
    Version: 0.3.0

    ERC-20

    It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.

    The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • advanced storage - key-value pairs,
    • Odra types like Address or Balance,
    • advanced events assertion.

    Code

    Our module has a pretty complex storage layout in comparison to the previous example.

    We need to store the following data:

    1. Immutable metadata - name, symbol and decimals.
    2. Total supply.
    3. Users' balances.
    4. Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.

    Module definition

    #[odra::module(events = [Transfer, Approval])]
    pub struct Erc20 {
    decimals: Variable<u8>,
    symbol: Variable<String>,
    name: Variable<String>,
    total_supply: Variable<Balance>,
    balances: Mapping<Address, Balance>,
    allowances: Mapping<Address, Mapping<Address, Balance>>
    }
    • L6 - For the first time, we need to store key-value pairs. In order to do that, we use Mapping. The name is taken after Solidity's native type mapping. You may notice the balances property maps Address to Balance. If you deal with addresses or you operate on tokens, you should always choose Address over String and Balance over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform.
    • L7 - Odra allows nested Mappings, what we utilize to store allowances.

    Metadata

    #[odra::module]
    impl Erc20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn symbol(&self) -> String {
    self.symbol.get_or_default()
    }

    pub fn decimals(&self) -> u8 {
    self.decimals.get_or_default()
    }

    pub fn total_supply(&self) -> Balance {
    self.total_supply.get_or_default()
    }
    }

    impl Erc20 {
    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.balances.add(address, *amount);
    self.total_supply.add(amount);
    Transfer {
    from: None,
    to: Some(*address),
    amount: *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Transfer {
    pub from: Option<Address>,
    pub to: Option<Address>,
    pub amount: Balance
    }
    • L1 - The first impl block, marked as a module, contains functions defined in the ERC-20 standard.
    • L3-L10 - A constructor sets the token metadata and mints the initial supply.
    • L12-L14 - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the Ownable example, we used the get() function returning an Option<T>. If the type implements Default trait, you can call get_or_default() function and the contract does not fail even if the value is not initialized.
    • L29 - The second impl is not an odra module, in other words these function will not be a part of contract's ABI.
    • L30-L39 - Mint function is public, so like in a regular rust code will be accessible from the outside. mint() use notation self.balances.add(&address, amount);, which it is syntactic sugar for:
    let current_balance = self.balances.get(&address).unwrap_or_default();
    let new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();
    self.balances.set(&address, new_balance);

    Core

    For the sake of completeness, let's implement the remaining functionalities like transfer, transfer_from, or approve. They are not introducing any new concepts, so we leave them without additional remarks.

    erc20.rs
    #[odra::module]
    impl Erc20 {
    ...
    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    let caller = contract_env::caller();
    self.raw_transfer(&caller, recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let spender = contract_env::caller();
    self.spend_allowance(owner, &spender, amount);
    self.raw_transfer(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    let owner = contract_env::caller();
    self.allowances.get_instance(&owner).set(spender, *amount);
    Approval {
    owner,
    spender: *spender,
    value: *amount
    }
    .emit();
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.balances.get_or_default(&address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.allowances.get_instance(owner).get_or_default(spender)
    }
    }

    impl Erc20 {
    ...

    fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let owner_balance = self.balances.get_or_default(&owner);
    if *amount > owner_balance {
    contract_env::revert(Error::InsufficientBalance)
    }
    self.balances.set(owner, owner_balance - *amount);
    self.balances.add(recipient, *amount);
    Transfer {
    from: Some(*owner),
    to: Some(*recipient),
    amount: *amount
    }
    .emit();
    }

    fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {
    let allowance = self.allowances.get_instance(owner).get_or_default(spender);
    if allowance < *amount {
    contract_env::revert(Error::InsufficientAllowance)
    }
    let new_allowance = allowance - *amount;
    self.allowances
    .get_instance(owner)
    .set(spender, new_allowance);
    Approval {
    owner: *owner,
    spender: *spender,
    value: allowance - *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Approval {
    pub owner: Address,
    pub spender: Address,
    pub value: U256
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Now, compare the code we have written, with Open Zeppelin code. Out of 10, how Solidity-ish is our implementation?

    Test

    erc20.rs
    #[cfg(test)]
    pub mod tests {
    use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};
    use odra::{assert_events, test_env, types::U256};

    pub const NAME: &str = "Plascoin";
    pub const SYMBOL: &str = "PLS";
    pub const DECIMALS: u8 = 10;
    pub const INITIAL_SUPPLY: u32 = 10_000;

    pub fn setup() -> Erc20Ref {
    Erc20Deployer::init(
    String::from(NAME),
    String::from(SYMBOL),
    DECIMALS,
    INITIAL_SUPPLY.into()
    )
    }

    #[test]
    fn initialization() {
    let erc20 = setup();

    assert_eq!(&erc20.symbol(), SYMBOL);
    assert_eq!(&erc20.name(), NAME);
    assert_eq!(erc20.decimals(), DECIMALS);
    assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());
    assert_events!(
    erc20,
    Transfer {
    from: None,
    to: Some(test_env::get_account(0)),
    amount: INITIAL_SUPPLY.into()
    }
    );
    }

    #[test]
    fn transfer_works() {
    let mut erc20 = setup();
    let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    erc20.transfer(&recipient, &amount);

    assert_eq!(
    erc20.balance_of(&sender),
    U256::from(INITIAL_SUPPLY) - amount
    );
    assert_eq!(erc20.balance_of(&recipient), amount);
    assert_events!(
    erc20,
    Transfer {
    from: Some(sender),
    to: Some(recipient),
    amount
    }
    );
    }

    #[test]
    fn transfer_error() {
    let mut erc20 = setup();
    let recipient = test_env::get_account(1);
    let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);

    test_env::assert_exception(Error::InsufficientBalance, || {
    erc20.transfer(&recipient, &amount)
    });
    }

    #[test]
    fn transfer_from_and_approval_work() {
    let mut erc20 = setup();
    let (owner, recipient, spender) = (
    test_env::get_account(0),
    test_env::get_account(1),
    test_env::get_account(2)
    );
    let approved_amount = 3_000.into();
    let transfer_amount = 1_000.into();

    // Owner approves Spender.
    erc20.approve(&spender, &approved_amount);

    // Allowance was recorded.
    assert_eq!(erc20.allowance(&owner, &spender), approved_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount
    }
    );

    // Spender transfers tokens from Owner to Recipient.
    test_env::set_caller(spender);
    erc20.transfer_from(&owner, &recipient, &transfer_amount);

    // Tokens are transferred and allowance decremented.
    assert_eq!(
    erc20.balance_of(&owner),
    U256::from(INITIAL_SUPPLY) - transfer_amount
    );
    assert_eq!(erc20.balance_of(&recipient), transfer_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount - transfer_amount
    },
    Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount: transfer_amount
    }
    );

    assert_events!(erc20, Approval, Transfer);
    }

    #[test]
    fn transfer_from_error() {
    let mut erc20 = setup();
    let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    test_env::set_caller(spender);
    test_env::assert_exception(Error::InsufficientAllowance, || {
    erc20.transfer_from(&owner, &spender, &amount)
    });
    }
    }
    • L111-123 - assert_events!() macro accepts multiple events. You must pass them in the order they were emitted.
    • L125 - Alternatively, if you don't want to check the entire event, you may assert only its type.
    danger

    You can not mix both approaches, you pass full events or types only.

    What's next

    Having two modules: Ownable and Erc20, let's combine them, and create an ERC-20 on steroids.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/tutorials/ownable/index.html b/docs/docs/0.3.0/tutorials/ownable/index.html new file mode 100644 index 000000000..c26b02c9e --- /dev/null +++ b/docs/docs/0.3.0/tutorials/ownable/index.html @@ -0,0 +1,17 @@ + + + + + +Ownable | Odra + + + + + +
    +
    Version: 0.3.0

    Ownable

    In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • storing a single value,
    • defining constructors,
    • error handling,
    • defining and emitting events.
    • registering a contact in a test environment,
    • interactions with the test environment,
    • assertions (value, events, errors assertions).

    Code

    Before we write any code, we define functionalities we would like to implement.

    1. Module has an initializer that should be called once.
    2. Only the current owner can set a new owner.
    3. Read the current owner.
    4. A function that fails if called by a non-owner account.

    Define a module

    use odra::{types::Address, Variable};

    #[odra::module]
    pub struct Ownable {
    owner: Variable<Address>
    }

    That was easy, but it is crucial to understand the basic before we move on.

    • L3 - Firstly, we need create a struct called Ownable and apply #[odra::module] to it above.
    • L5 - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with Variable.

    Init the module

    use odra::{
    execution_error, contract_env, Event, types::{Address, event::OdraEvent}
    };
    ...

    #[odra::module]
    impl Ownable {
    #[odra(init)]
    pub fn init(&mut self, owner: &Address) {
    if self.owner.get().is_some() {
    contract_env::revert(Error::OwnerIsAlreadyInitialized)
    }

    self.owner.set(*owner);

    OwnershipChanged {
    prev_owner: None,
    new_owner: *owner
    }
    .emit();
    }
    }

    execution_error! {
    pub enum Error {
    OwnerIsNotInitialized => 1,
    }
    }

    #[derive(Event, Debug, PartialEq, Eq)]
    pub struct OwnershipChanged {
    pub prev_owner: Option<Address>,
    pub new_owner: Address
    }

    Ok, we have done a couple of things, let's analyze them one by one:

    • L5 - The impl should be an odra module, so add #[odra::module].
    • L7 - The init function is marked as #[odra(init)] making it a constructor. It matters if we would like to deploy the Ownable module as a standalone contract.
    • L23 - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an Error enum. Notice that the Error enum is defined inside the execution_error macro. It generates, among others, the required Into<ExecutionError> binding.
    • L9-L11 - If the owner has been set already, we call contract_env::revert() function. As an argument we pass Error::OwnerIsNotInitialized.
    • L13 - Then we write the owner passed as an argument to the storage. To do so we call the set() on Variable.
    • L29-L33 - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from odra::Event. We highly recommend to derive Debug, PartialEq and Eq for testing purpose.
    • L23 - Finally, we create the OwnershipChanged struct and call emit() function on it (import odra::types::event::OdraEvent trait). Hence we set the first owner, we set the prev_owner value to None.

    Features implementation

    #[odra::module]
    impl Ownable {
    ...

    pub fn ensure_ownership(&self, address: &Address) {
    if Some(address) != self.owner.get().as_ref() {
    contract_env::revert(Error::NotOwner)
    }
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ensure_ownership(&contract_env::caller());
    let current_owner = self.get_owner();
    self.owner.set(*new_owner);
    OwnershipChanged {
    prev_owner: Some(current_owner),
    new_owner: *new_owner
    }
    .emit();
    }

    pub fn get_owner(&self) -> Address {
    match self.owner.get() {
    Some(owner) => owner,
    None => contract_env::revert(Error::OwnerIsNotInitialized)
    }
    }
    }

    execution_error! {
    pub enum Error {
    NotOwner => 1,
    OwnerIsAlreadyInitialized => 2,
    OwnerIsNotInitialized => 3,
    }
    }

    The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along.

    • L5,L32 - ensure_ownership() is reads the current owner, and reverts if is does not match the input Address. Also we need to update our Error enum adding a new variant NotOwner.
    • L11 - The function defined above can be reused in change_ownership() implementation. We pass to it the current caller, using the contract_env::caller() function. The we update the state, and emit OwnershipChanged.
    • L22,L34 - Lastly, a getter function. As the Variable get() function returns an Option, we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new Error variant OwnerIsNotInitialized.

    Test

    #[cfg(test)]
    mod tests {
    use super::*;
    use odra::{assert_events, test_env};

    fn setup() -> (Address, OwnableRef) {
    let owner = test_env::get_account(0);
    let ownable = OwnableDeployer::init(owner);
    (owner, ownable)
    }

    #[test]
    fn initialization_works() {
    let (owner, ownable) = setup();
    assert_eq!(ownable.get_owner(), owner);

    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    );
    }

    #[test]
    fn owner_can_change_ownership() {
    let (owner, mut ownable) = setup();
    let new_owner = test_env::get_account(1);

    test_env::set_caller(owner);
    ownable.change_ownership(&new_owner);
    assert_eq!(ownable.get_owner(), new_owner);
    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: Some(owner),
    new_owner
    }
    );
    }

    #[test]
    fn non_owner_cannot_change_ownership() {
    let (_, mut ownable) = setup();
    let new_owner = test_env::get_account(1);
    ownable.change_ownership(&new_owner);

    test_env::assert_exception(Error::NotOwner, || {
    ownable.change_ownership(&new_owner);
    });
    }
    }
    • L6 - Each test case starts with the same initialization process, so for convenience, we defined the setup() function we call as the first statement in each test. Take a look at the signature fn setup() -> (Address, OwnableRef). OwnableRef is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ensure_ownership(), change_ownership(), get_owner(), but not init() which is a constructor.
    • L7 - Now, the module needs an owner, the easiest way is to take one from the test_env. We choose the address of first account (which is the default one).
    • L8 - Odra created for us OwnableDeployer struct which implements all constructor functions. In this case there is just one function - init() which corresponds the function we have implemented in the module.
    • L12 - It is time to define the first test. As you see, it is a regular rust test.
    • L14-15 - Using the setup() function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.
      note

      You may have noticed, we use here the term module interchangeably with contract. The reason is once we deploy our module onto a virtual blockchain it may be considered a contract.

    • L17-23 - On the contract, only the init() function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro assert_events. As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred.
    • L30 - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the test env predefines 20 accounts.
    • L32 - As mentioned, the default is the 0-th account, if you want to change the executor call the test_env::set_caller() function.
      note

      The caller switch applies only the next contract interaction, the second call will be done as the default account.

    • L49-55 - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call test_env::assert_exception() with the error you expect and a failing block of code.

    Summary

    The Ownable module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract.

    What's next

    In the next tutorial we will implement a ERC20 standard.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.0/tutorials/owned-token/index.html b/docs/docs/0.3.0/tutorials/owned-token/index.html new file mode 100644 index 000000000..ba7e625a3 --- /dev/null +++ b/docs/docs/0.3.0/tutorials/owned-token/index.html @@ -0,0 +1,17 @@ + + + + + +OwnedToken | Odra + + + + + +
    +
    Version: 0.3.0

    OwnedToken

    This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.

    Code

    What should our module be capable of?

    1. Conform the Erc20 interface.
    2. Allow minting tokens but only the module owner.
    3. The current owner should be able to designate a new owner.

    Module definition

    Let's define a module called OwnedToken that is a composition of Ownable and Erc20 modules.

    owned_token.rs
    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!

    Delegation

    owned_token.rs
    use odra::types::{Address, Balance}

    ...

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> Balance {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    self.erc20.approve(spender, amount);
    }

    pub fn get_owner(&self) -> Address {
    self.ownable.get_owner()
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ownable.change_ownership(new_owner);
    }

    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.ownable.ensure_ownership(&contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    Easy. However, there are a few worth mentioning subtleness:

    • L10-L11 - A constructor is a great place to init both modules at once.
    • L14-L16 - Most of the entrypoints do not need any modification, so we simply delegates them to the erc20 module.
    • L50-L52 - The same we do with the ownable module.
    • L58-L61 - Minting should not be unconditional, we need some control over it. First, using ownable we make sure the caller really is the owner.

    Summary

    The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/advanced/advanced-storage/index.html b/docs/docs/0.3.1/advanced/advanced-storage/index.html new file mode 100644 index 000000000..d61f0b307 --- /dev/null +++ b/docs/docs/0.3.1/advanced/advanced-storage/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced Storage Concepts | Odra + + + + + +
    +
    Version: 0.3.1

    Advanced Storage Concepts

    The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.

    Recap and Basic Concepts

    Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including Variable, Mapping, and List. These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values.

    Variable: A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract.

    Mapping: Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key.

    List: Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over.

    If you need a refresher on these topics, please refer to our guide on basic storage in Odra.

    Advanced Storage Concepts

    Sequence

    The Sequence in Odra is a basic module that holds a Variable which keeps track of the current value.

    pub struct Sequence<T>
    where
    T: Num + One + OdraType
    {
    value: Variable<T>
    }

    The Sequence module provides functions get_current_value and next_value to get the current value and increment the value respectively.

    Advanced Mapping

    In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility.

    Let's consider the following example:

    examples/mapping.rs
    use odra::{map, types::U256, Mapping, UnwrapOrRevert};

    use crate::owned_token::OwnedToken;

    #[odra::module]
    pub struct NestedMapping {
    strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,
    tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>
    }

    #[odra::module]
    impl NestedMapping {

    ...

    pub fn set_token(
    &mut self,
    key1: String,
    key2: u32,
    key3: String,
    token_name: String,
    decimals: u8,
    symbol: String,
    initial_supply: &U256
    ) {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .init(token_name, symbol, decimals, initial_supply);
    }

    pub fn get_string_api(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    let mapping = self.strings.get_instance(&key1).get_instance(&key2);
    mapping.get(&key3).unwrap_or_revert()
    }

    pub fn total_supply(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> U256 {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .total_supply()
    }
    }
    note

    Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers.

    Instead of using the get() function, call get_instance(), which sets the correct namespace for nested modules.

    If the terminal value is deeply nested, a long chain of get_instance() calls is required.

    To keep the codebase consistent, a map! macro can be used:

    examples/mapping.rs
    ...

    pub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {
    map!(self.strings[key1][key2][key3] = value);
    }

    pub fn get_string_macro(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    map!(self.strings[key1][key2][key3])
    }

    danger

    The terminal value must not be an Odra Module.

    AdvancedStorage Contract

    The given code snippet showcases the AdvancedStorage contract that incorporates these storage concepts.

    use odra::{Sequence, Mapping};
    use crate::modules::Token;

    #[odra::module]
    pub struct AdvancedStorage {
    my_sequence: Sequence<u32>,
    my_mapping: Mapping<String, Mapping<String, Token>>,
    }

    impl AdvancedStorage {
    pub fn get_sequence_current_value(&self) -> u32 {
    self.my_sequence.get_current_value()
    }

    pub fn next_sequence_value(&mut self) -> u32 {
    self.my_sequence.next_value()
    }

    pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.set(&inner_key, value);
    }

    pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.get(&inner_key)
    }
    }

    Conclusion

    Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/advanced/attributes/index.html b/docs/docs/0.3.1/advanced/attributes/index.html new file mode 100644 index 000000000..7a11789a2 --- /dev/null +++ b/docs/docs/0.3.1/advanced/attributes/index.html @@ -0,0 +1,18 @@ + + + + + +Attributes | Odra + + + + + +
    +
    Version: 0.3.1

    Attributes

    Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.

    Odra defines a few attributes that can be applied to functions to equip them with superpowers.

    Init

    If your contract needs initial setup, adding the #[odra(init)] attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed.

    It's important to note that a constructor function should not be invoked in any other context.

    Example

    examples/erc20.rs
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    Payable

    When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the #[odra(payable)] attribute can send and take money in the form of native tokens.

    Example

    examples/tlw.rs
    #[odra(payable)]
    pub fn deposit(&mut self) {
    // Extract values
    let caller: Address = contract_env::caller();
    let amount: Balance = contract_env::attached_value();
    let current_block_time: BlockTime = contract_env::get_block_time();

    // Multiple lock check
    if self.balances.get(&caller).is_some() {
    contract_env::revert(Error::CannotLockTwice)
    }

    // Update state, emit event
    self.balances.set(&caller, amount);
    self.lock_expiration_map
    .set(&caller, current_block_time + self.lock_duration());
    Deposit {
    address: caller,
    amount
    }
    .emit();
    }

    If you try to send tokens to a non-payable function, the transaction will be automatically rejected.

    Non Reentrant

    Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds.

    To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts.

    They can also use reentrancy guards to block recursive calls to sensitive functions.

    In Odra you can just apply the #[odra(non_reentrant)] attribute to your function.

    Mixing attributes

    A function can accept more than one attribute. The only exclusion is a constructor cannot be payable. +To apply multiple attributes, you can write:

    #[odra(payable, non_reentrant)]
    fn deposit() {
    // your logic...
    }

    or

    #[odra(payable)]
    #[odra(non_reentrant)]
    fn deposit() {
    // your logic...
    }

    In both cases attributes order does not matter.

    However, a constructor cannot be payable, so the below code would not compile.

    #[odra(payable)]
    #[odra(init)]
    fn initialize() {
    // your logic...
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/advanced/composer/index.html b/docs/docs/0.3.1/advanced/composer/index.html new file mode 100644 index 000000000..fb4675dab --- /dev/null +++ b/docs/docs/0.3.1/advanced/composer/index.html @@ -0,0 +1,17 @@ + + + + + +Module Composer | Odra + + + + + +
    +
    Version: 0.3.1

    Module Composer

    The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.

    Conceptual Overview

    By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key.

    #[odra::module]
    struct Contract {
    value: Variable<u8>, // the default namespace would be "contract_value"
    module: Module
    }

    #[odra::module]
    struct Module {
    secret: Variable<String> // the default namespace would be "contract_module_secret"
    }

    While this isolation often proves useful, there are scenarios where shared storage is beneficial. Here, the Module Composer comes in.

    Additionally, the Module Composer shortens the storage key - a handy side effect of shared storage.

    For each module, Odra generates a corresponding Composer struct (e.g., MyContractComposer for MyContract module), which aids in manual module composition.

    Usage

    By default, the #[odra::module] macro generates an implementation of the odra::Instance trait, prefixing the storage key of child modules with the parent namespace. To disable this behavior, pass the skip_instance argument to the #[odra::module] macro.

    Let's write a simple code example. The example provided below introduces some additional complexity by featuring deeper module nesting.

    use odra::{Instance, Variable, Composer};

    #[odra::module]
    pub struct SharedStorage {
    pub value: Variable<String>
    }

    #[odra::module]
    pub struct MyStorage {
    pub shared: SharedStorage,
    pub version: Variable<u8>
    }

    #[odra::module]
    pub struct MoreStorage {
    pub my_storage: MyStorage,
    pub extra: Variable<u32>
    }

    #[odra::module(skip_instance)]
    pub struct ComplexContract {
    pub shared: SharedStorage,
    pub more_storage: MoreStorage
    }

    #[odra::module]
    impl ComplexContract {
    #[odra(init)]
    pub fn init(&mut self, version: u8, value: String, extra: u32) {
    self.more_storage.my_storage.version.set(version);
    self.shared.value.set(value);
    self.more_storage.extra.set(extra);
    }

    pub fn get_value(&self) -> String {
    self.shared.value.get_or_default()
    }

    pub fn get_value_via_storage(&self) -> String {
    self.more_storage.my_storage.shared.value.get_or_default()
    }

    pub fn get_extra_value(&self) -> u32 {
    self.more_storage.extra.get_or_default()
    }
    }

    impl Instance for ComplexContract {
    fn instance(namespace: &str) -> Self {
    let value = Composer::new(namespace, "v").compose();
    let shared = SharedStorageComposer::new(namespace, "shared")
    .with_value(&value)
    .compose();
    let my_storage = MyStorageComposer::new(namespace, "my_storage")
    .with_shared(&shared)
    .compose();
    let more_storage = MoreStorageComposer::new(namespace, "more_storage")
    .with_my_storage(&my_storage)
    .compose();
    Self { shared, more_storage }
    }
    }

    #[cfg(test)]
    mod test {
    use crate::composer::ComplexContractDeployer;

    #[test]
    fn t() {
    let shared_value = "shared_value".to_string();
    let extra_value: u32 = 314;
    let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);

    assert_eq!(token.get_value(), shared_value);
    assert_eq!(token.get_value_via_storage(), shared_value);
    assert_eq!(token.get_extra_value(), extra_value);
    }
    }

    In this example, we've introduced a new module, MoreStorage, which nests MyStorage and includes an extra value. The ComplexContract contains SharedStorage and MoreStorage, creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels.

    If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:

    1. On the contract level - contract_shared_value.
    2. On the MyStorage module level - contract_more_storage_shared_value.

    This example showcases how you can effectively use the Module Composer feature to build intricate and efficient smart contracts.

    note

    To customize the storage building block, you can use Composer which API matches to modules composers API.

    Conclusion

    The Module Composer in Odra provides developers with a high level of flexibility and control over module behavior in their smart contracts. This guide, complete with a practical example, should give you a good understanding of the feature. Embrace the power of the Module Composer and unleash the full potential of your smart contracts!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/advanced/delegate/index.html b/docs/docs/0.3.1/advanced/delegate/index.html new file mode 100644 index 000000000..3358e4e57 --- /dev/null +++ b/docs/docs/0.3.1/advanced/delegate/index.html @@ -0,0 +1,17 @@ + + + + + +Delegate | Odra + + + + + +
    +
    Version: 0.3.1

    Delegate

    Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.

    The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable.

    Overview

    To utilize the delegate feature in your contract, use the delegate! macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the delegate! macro, your parent module remains clean and easy to understand.

    You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself.

    Code Examples

    Consider the following basic example for better understanding:

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);
    pub fn approve(&mut self, spender: Address, amount: U256);
    pub fn name(&self) -> String;
    pub fn symbol(&self) -> String;
    pub fn decimals(&self) -> u8;
    pub fn total_supply(&self) -> U256;
    pub fn balance_of(&self, owner: Address) -> U256;
    pub fn allowance(&self, owner: Address, spender: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    pub fn change_ownership(&mut self, new_owner: Address);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    This OwnedToken contract includes two modules: Erc20 and Ownable. We delegate various functions from both modules using the delegate! macro. As a result, the contract retains its succinctness without compromising on functionality.

    The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities.

    Let's take a look at another example.

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};

    #[odra::module]
    pub struct DeFiPlatform {
    ownable: Ownable,
    erc20: Erc20,
    exchange: Exchange
    }

    #[odra::module]
    impl DeFiPlatform {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    self.exchange.init(exchange_rate);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn balance_of(&self, owner: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    }

    to self.exchange {
    pub fn swap(&mut self, sender: Address, recipient: Address);
    pub fn set_exchange_rate(&mut self, new_rate: u64);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    In this DeFiPlatform contract, we include Erc20, Ownable, and Exchange modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure.

    Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/backends/casper/index.html b/docs/docs/0.3.1/backends/casper/index.html new file mode 100644 index 000000000..c8c619fe0 --- /dev/null +++ b/docs/docs/0.3.1/backends/casper/index.html @@ -0,0 +1,25 @@ + + + + + +Casper | Odra + + + + + +
    +
    Version: 0.3.1

    Casper

    The Casper backend allows you to compile your contracts into WASM files which can be deployed +onto Casper Blockchain +and lets you to easily run them against Casper's Execution Engine locally.

    Types

    A struct to be written into the storage must implement OdraType which is defined as follow:

    pub trait OdraType: 
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    The other exposed types are:

    Contract Env

    As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances.

    Events

    An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've +already learned from the events article, in Odra you emit an event, similarly, you would do it in Solidity.

    Under the hood, Odra integrates with Casper Event Standard and creates a few URefs in the global state when a contract is being installed:

    1. __events - a dictionary that stores events' data.
    2. __events_length - the evens count.
    3. __events_ces_version - the version of Casper Event Standard.
    4. __events_schema - a dictionary that stores event schemas.

    Besides that, all the events the contract emits are registered - events schemas are written to the storage under the __events_schema key.

    note

    Don't forget to expose events in the module using #[odra::module(events = [...])].

    So, Events are nothing different from any other data stored by a contract.

    A struct to be an event must implement SerializableEvent which is defined as follow:

    pub trait SerializableEvent: 
    odra_types::event::OdraEvent +
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    Payable

    The first Odra idiom is a Contract Main Purse. It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper URef and a purse are created and stored under the __contract_main_purse key.

    Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a Cargo Purse. It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse.

    Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable. +If under the way something goes wrong with the transfer, the contract reverts.

    The transferred amount can be read inside the contract by calling contract_env::attached_value().

    note

    Odra expects the cargo_purse runtime argument to be attached to a contract call.

    Revert

    In Casper, we can stop the execution pretty straightforwardly - call the runtime::revert(). +Odra adds an extra abstraction layer - in a contract ExecutionErrors are defined, which ultimately are transformed into Casper's ApiError::User.

    Context

    Casper equips developers with very low-level tooling, which can be cumbersome for newcomers. +If you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack.

    The contract_env::self_address() function takes the first element of the callstack (runtime::get_call_stack()) and casts it to Address.

    The contract_env::caller() function takes the second element of the call stack (runtime::get_call_stack()) and casts it to Address.

    As mentioned in the [Payable] section, to store CSPR, each contract creates its purse. To read the contract balance, you call contract_env::self_balance, which checks the balance of the purse stored under __contract_main_purse.

    Test Env

    Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the Casper Execution Engine.

    In your test, you can freely switch execution context by setting as a caller (test_env::set_caller()) one of the 20 predefined accounts. Each account possesses the default amount of Motes (100_000_000_000_000_000).

    The Test Env internally keeps track of the current block time, error and attached value.

    Each test is executed on a fresh instance of the Test Env.

    Usage

    Name of the Casper backend in Odra is casper, so to run the tests against it, simply pass it as a -b +parameter:

    cargo odra test -b casper

    If you want to just generate a wasm file, simply run:

    cargo odra build -b casper

    Constructors

    Let's define a basic Odra module that includes a constructor:

    #[odra::module]
    struct Counter {
    value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub initialize(&mut self, value: u32) {
    self.value.set(value);
    }
    }

    Read more about constructors here.

    To deploy your contract with a constructor using casper-client, you need to pass the constructor argument with a value of initialize - this represents the name of the constructor function. Additionally, you need to pass the value argument, which sets the arbitrary initial value for the counter.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 5000000000000 \
    --session-path ./wasm/counter.wasm \
    --session-arg "constructor:string:'initialize'" \
    --session-arg "value:u32:42"

    For a more in-depth tutorial, please refer to the Casper's 'Writing On-Chain Code'.

    Execution

    First thing Odra does with your code, is similar to the one used in MockVM - +a list of entrypoints is generated, thanks to the #[odra::module] macro.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/backends/mock-vm/index.html b/docs/docs/0.3.1/backends/mock-vm/index.html new file mode 100644 index 000000000..7dfb66047 --- /dev/null +++ b/docs/docs/0.3.1/backends/mock-vm/index.html @@ -0,0 +1,26 @@ + + + + + +MockVM | Odra + + + + + +
    +
    Version: 0.3.1

    MockVM

    The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing +the code written in Odra without compiling the contract to the target architecture and spinning up the +blockchain.

    Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler.

    Usage

    The MockVM is the default backend for Odra framework, so each time you run

    cargo odra test

    You are running your code against it.

    Architecture

    MockVM consists of two main parts: the Contract Register and the State.

    The Contract Register is just a list of contracts deployed onto the MockVM, identified by an Address. +Each time we call the contract, we call its instance stored in the Contract Register.

    Contracts and Test Env functions can modify the State of the MockVM.

    Contrary to the "real" backend, which holds the whole history of the blockchain, +the MockVM State holds only the current state of the MockVM. +Thanks to this and the fact that we do not need the blockchain itself, +MockVM starts instantly and runs the tests in the native speed.

    Execution

    When the MockVM backend is enabled, the #[odra::module] macro is responsible for converting +your pub functions into a list of Entrypoints, which are put into a Contract Container. +When the contract is deployed, its Container registered into a Registry under an address. +During the contract call, MockVM finds an Entrypoint and executes the code.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/backends/what-is-a-backend/index.html b/docs/docs/0.3.1/backends/what-is-a-backend/index.html new file mode 100644 index 000000000..f7ebb19e3 --- /dev/null +++ b/docs/docs/0.3.1/backends/what-is-a-backend/index.html @@ -0,0 +1,27 @@ + + + + + +What is a backend? | Odra + + + + + +
    +
    Version: 0.3.1

    What is a backend?

    You can think of a backend as a target platform for your smart contract. +This can be a piece of code allowing you to quickly check your code - like MockVM, +or a complete virtual machine, spinning up a blockchain for you - like CasperVM.

    Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env.

    Contract Env

    The Contract Env is a simple interface that each backend needs to implement, +exposing features of the blockchain from the perspective of the contract.

    It gives Odra a set of functions, which allows implementing more complex concepts - +for example, to implement Mapping, +Odra requires some kind of storage integration. +The exact implementation of those functions is a responsibility of a backend, +making Odra and its user free to implement the contract logic, +instead of messing with the blockchain internals.

    Other functions from Contract Env include handling transfers, addresses, block time, errors and events.

    Test Env

    Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with +the backend from the outside world - really useful for implementing tests.

    This ranges from interacting with the blockchain - like deploying and calling the contracts, +to the more test-oriented - handling errors, forwarding the block time, etc.

    What's next

    We will take a look at backends Odra implements in more detail.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/cargo-odra/index.html b/docs/docs/0.3.1/basics/cargo-odra/index.html new file mode 100644 index 000000000..734644a64 --- /dev/null +++ b/docs/docs/0.3.1/basics/cargo-odra/index.html @@ -0,0 +1,38 @@ + + + + + +Cargo Odra | Odra + + + + + +
    +
    Version: 0.3.1

    Cargo Odra

    If you followed the Installation tutorial properly, +you should already be set up with the Cargo Odra tool. It is an executable that will help you with +managing your smart contracts project, testing and running them on multiple backends (blockchains).

    Let's take a look at all the possibilities that Cargo Odra gives you.

    Managing projects

    Two commands will help you create a new project. The first one is cargo odra new. +You need to pass one parameter, namely --name {PROJECT_NAME}:

    cargo odra new --name my-project

    This will create a new project in the my_project folder and name it my_project. You can see it +for yourself, for example by taking a look into a Cargo.toml file created in your project's folder:

    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    The project is created using the template located in Odra's main repository. +By default it uses full template, if you want, you can use minimalistic blank by running:

    cargo odra new -t blank --name my-project

    By default, the latest release of Odra will be used for the template and as a dependency. +You can pass a source of Odra you want to use, by using -s parameter:

    cargo odra new -n my-project -s ../odra # will use local folder of odra
    cargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release
    cargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io

    The second way of creating a project is by using init command:

    cargo odra init --name my-project

    It works in the same way as new, but instead of creating a new folder, it will create a project +in the current, empty directory.

    Generating code

    If you want to quickly create a new contract code, you can use the generate command:

    cargo odra generate -c counter 

    This will create a new file src/counter.rs with sample code, add appropriate use and mod sections +to src/lib.rs and update the Odra.toml file accordingly. To learn more about Odra.toml file, +visit Odra.toml.

    Testing

    Most used command during the development of your project should be this one:

    cargo odra test

    It will run your tests against Odra's MockVM. It is substantially faster than virtual machines +provided by blockchains developers and implements all the features Odra uses.

    When you want to run tests against a "real" VM, just provide the name of the backend using -b +option:

    cargo odra test -b casper

    In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files, +spin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat. +Keep in mind that this is a lot slower than MockVM and you cannot use the debugger. +This is why MockVM was created and should be your first choice when developing contracts. +Of course, testing all of your code against a blockchain VM is a must in the end.

    If you want to run only some of the tests, you can pass arguments to the cargo test command +(which is run in the background obviously):

    cargo odra test -- this-will-be-passed-to-cargo-test

    If you want to run tests which names contain the word two, you can execute:

    cargo odra test -- two

    Of course, you can do the same when using the backend:

    cargo odra test -b casper -- two

    Building code

    You can also build the code itself and generate the output contracts without running the tests. +To do so, simply run:

    cargo odra build -b casper

    Where casper is the name of the backend we are using in this example. If the build process +finishes successfully, wasm files will be located in wasm folder.

    Updating dependencies

    You will learn later, that the project using Odra contains more than one Rust project - your own and +one or more builders. To run cargo update on all of them at once instead of traversing all the folders +you can use this command:

    cargo odra update

    What's next

    In the next section, we will take a look at all the files and directories that cargo odra created +for us and explain their purpose.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/communicating-with-host/index.html b/docs/docs/0.3.1/basics/communicating-with-host/index.html new file mode 100644 index 000000000..9f53836e6 --- /dev/null +++ b/docs/docs/0.3.1/basics/communicating-with-host/index.html @@ -0,0 +1,21 @@ + + + + + +Host Communication | Odra + + + + + +
    +
    Version: 0.3.1

    Host Communication

    One of the things that your contract will probably do is to query the host for some information - +what is the current time? Who called me? Following example shows how to do this:

    examples/src/docs/host.rs
    use odra::Variable;
    use odra::types::{BlockTime, Address};

    #[odra::module]
    pub struct HostContract {
    name: Variable<String>,
    created_at: Variable<BlockTime>,
    created_by: Variable<Address>,
    }

    #[odra::module]
    impl HostContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.created_at.set(odra::contract_env::get_block_time());
    self.created_by.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }
    }

    As you can see, we are calling functions from odra::contract_env. get_block_time() will return +the current block time wrapped in Odra type BlockTime. caller() will return an Odra Address of +a caller (this can be an external caller or another contract).

    info

    You will learn more functions that Odra exposes from host and types it uses in further articles.

    What's next

    In the next article, we'll dive into testing your contracts with Odra, so you can check that the code +we presented in fact works!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/cross-calls/index.html b/docs/docs/0.3.1/basics/cross-calls/index.html new file mode 100644 index 000000000..379465e9f --- /dev/null +++ b/docs/docs/0.3.1/basics/cross-calls/index.html @@ -0,0 +1,25 @@ + + + + + +Cross calls | Odra + + + + + +
    +
    Version: 0.3.1

    Cross calls

    To show how to handle calls between contracts, first, let's implement two of them:

    examples/src/docs/cross_calls.rs
    use odra::Variable;
    use odra::types::{Address};

    #[odra::module]
    pub struct CrossContract {
    pub math_engine: Variable<Address>,
    }

    #[odra::module]
    impl CrossContract {
    #[odra(init)]
    pub fn init(&mut self, math_engine_address: Address) {
    self.math_engine.set(math_engine_address);
    }

    pub fn add_using_another(&self) -> u32 {
    let math_engine_address = self.math_engine.get().unwrap();
    MathEngineRef::at(math_engine_address).add(3, 5)
    }
    }

    #[odra::module]
    pub struct MathEngine {
    }

    #[odra::module]
    impl MathEngine {
    pub fn add(&self, n1: u32, n2: u32) -> u32 {
    n1 + n2
    }
    }

    MathEngine contract can add two numbers. CrossContract takes an Address in its init function and saves it in +storage for later use. If we deploy the MathEngine first and take note of its address, we can then deploy +CrossContract and use MathEngine to perform complicated calculations for us!

    To call the external contract, we use the Ref that was created for us by Odra:

    examples/src/docs/cross_calls.rs
    MathEngineRef::at(math_engine_address).add(3, 5)

    Contract Ref

    We mentioned Ref already in our Testing article. +It is a reference to already deployed - running contract. +Here we are going to take a deeper look at it.

    Similarly to a Deployer, the Ref is generated automatically, thanks to the #[odra::module] macro. +To get an instance of a reference, we can either deploy a contract (using Deployer) or by building it +directly, using ::at(address: Address) method, as shown above. +The reference implements all the public endpoints to the contract (those marked as pub in #[odra::module] +impl), alongside couple methods:

    • at(Address) -> Self - points the reference to an Address
    • address() -> Address - returns the Address the reference is currently pointing at
    • with_tokens(Amount) -> Self - attaches Amount of native tokens to the next call

    External Contracts

    Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI.

    For that purpose, we use #[odra:external_contract] macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of.

    Let's pretend the MathEngine we defined is an external contract. There is a contract with add() function that adds two numbers somewhere.

    examples/src/docs/cross_calls.rs
    #[odra::external_contract]
    pub trait Adder {
    fn add(&self, n1: u32, n2: u32) -> u32;
    }

    Analogously to modules, Odra creates the AdderRef struct (but do not create the AdderDeployer). Having an address we can call:

    examples/src/docs/cross_calls.rs
    AdderRef::at(address).add(3, 5)

    Testing

    Let's see how we can test our cross calls using this knowledge:

    examples/src/docs/cross_calls.rs
    use super::{CrossContractDeployer, MathEngineDeployer};

    #[test]
    fn test_cross_calls() {
    let math_engine_contract = MathEngineDeployer::default();
    let cross_contract = CrossContractDeployer::init(math_engine_contract.address());

    assert_eq!(cross_contract.add_using_another(), 8);
    }

    Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a MathEngine contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the add() function we want to use.

    examples/src/docs/cross_calls.rs
    #[cfg(test)]
    mod tests {
    use odra::types::Address;
    use crate::docs::cross_calls::{Adder, AdderRef};

    #[test]
    fn test_ext() {
    let adder = AdderRef::at(get_adder_address());

    assert_eq!(adder.add(1, 2), 3);
    }

    fn get_adder_address() -> Address {
    let contract = MathEngineDeployer::default();
    contract.address()
    }
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/directory-structure/index.html b/docs/docs/0.3.1/basics/directory-structure/index.html new file mode 100644 index 000000000..fc09cce57 --- /dev/null +++ b/docs/docs/0.3.1/basics/directory-structure/index.html @@ -0,0 +1,27 @@ + + + + + +Directory structure | Odra + + + + + +
    +
    Version: 0.3.1

    Directory structure

    After creating a new project using Odra and running the tests, you will be presented with the +following files and directories:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── CHANGELOG.md
    ├── Odra.toml
    ├── README.md
    ├── .builder_casper/
    ├── src/
    │ ├── flipper.rs
    │ └── lib.rs
    ├── target/
    └── wasm/

    Cargo.toml

    Let's first take a look at Cargo.toml file:

    [package]
    name = "sample"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    By default, your project will use the latest odra version available at crates.io. We are using two features:

    • odra/mock-vm - it is responsible for running tests on Odra's MockVM
    • odra/casper - backend implementation of Casper blockchain +More backends will be released as features that will be possible to enable here.

    Odra.toml

    This is the file that holds information about contracts that will be generated when running cargo odra build and +cargo odra test:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    As we can see, we have a single contract, its fqn (Fully Qualified Name) corresponds to +the contract is located in src/flipper.rs. +More contracts can be added here by hand, or by using cargo odra generate command.

    .builder_* folders

    Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary +for building wasm files and running them against blockchain VMs. As it is not necessary to modify +files in those folders in any way, by default they are hidden (hence the . at the beginning of the +folder name).

    src/

    This is the folder where your smart contract files live.

    target/

    Files generated by cargo during the build process are put here.

    wasm/

    WASM files generated by cargo odra build and cargo odra test are put here. You can grab those WASM files +and deploy them on the blockchain of your choosing.

    What's next

    Now, let's take a look at one of the files mentioned above in more detail, +namely the Odra.toml file.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/errors/index.html b/docs/docs/0.3.1/basics/errors/index.html new file mode 100644 index 000000000..59b292292 --- /dev/null +++ b/docs/docs/0.3.1/basics/errors/index.html @@ -0,0 +1,23 @@ + + + + + +Errors | Odra + + + + + +
    +
    Version: 0.3.1

    Errors

    Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the +following example of a simple owned contract:

    examples/src/docs/errors.rs
    use odra::{execution_error, Variable, UnwrapOrRevert};
    use odra::types::Address;

    #[odra::module]
    pub struct OwnedContract {
    name: Variable<String>,
    owner: Variable<Address>,
    }

    execution_error! {
    pub enum Error {
    OwnerNotSet => 1,
    NotAnOwner => 2,
    }
    }


    #[odra::module]
    impl OwnedContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.owner.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn owner(&self) -> Address {
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)
    }

    pub fn change_name(&mut self, name: String) {
    let caller = odra::contract_env::caller();
    if caller != self.owner() {
    odra::contract_env::revert(Error::NotAnOwner)
    }

    self.name.set(name);
    }
    }

    Firstly, we are using execution_error! macro to define our own set of Errors that our contract will +throw. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use +unwrap_or_revert_with and pass an error as an argument:

    examples/src/docs/errors.rs
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)

    You and the users of your contract will be thankful for a meaningful error message!

    You can also throw the error directly, by using revert:

    examples/src/docs/errors.rs
    odra::contract_env::revert(Error::NotAnOwner)

    Testing errors

    Okay, but how about testing it? We've already mentioned a function - assert_exception. This is how you will +use it:

    examples/src/docs/errors.rs
    use super::{OwnedContractDeployer, OwnedContractRef};
    use super::Error;

    #[test]
    fn test_owner_error() {
    let owner = odra::test_env::get_account(0);
    let not_an_owner = odra::test_env::get_account(1);

    odra::test_env::set_caller(owner);
    let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());

    odra::test_env::set_caller(not_an_owner);
    odra::test_env::assert_exception(Error::NotAnOwner, || {
    owned_contract.change_name("NewName".to_string());
    })
    }

    In the example above, because we are calling the change_name method as an address which is not an "owner", +we are expecting that "NotAnOwner" error will be thrown.

    note

    Here we are creating another reference to the already deployed contract using OwnedContractRef::at() and passing to it +its Address. Note that OwnedContractDeployer::init() returns the same type.

    What's next

    We will learn how to emit and test events using Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/events/index.html b/docs/docs/0.3.1/basics/events/index.html new file mode 100644 index 000000000..f0df3b5cd --- /dev/null +++ b/docs/docs/0.3.1/basics/events/index.html @@ -0,0 +1,20 @@ + + + + + +Events | Odra + + + + + +
    +
    Version: 0.3.1

    Events

    Different blockchains implement events in different ways. Odra lets you forget about it by introducing +Odra Events. Take a look:

    examples/src/docs/events.rs
    use odra::{Event, contract_env};
    use odra::types::{Address, BlockTime, event::OdraEvent};

    #[odra::module(events = [PartyStarted])]
    pub struct PartyContract {
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    #[odra::module]
    impl PartyContract {
    #[odra(init)]
    pub fn init(&self) {
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();
    }
    }

    We defined a new contract, which emits an event called PartyStarted when the contract is deployed. +To define an event, we derive an Event macro like this:

    examples/src/docs/events.rs
    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    Among other things, it adds an emit() function to the struct, which allows you to emit the event simply +as that:

    examples/src/docs/events.rs
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();

    Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an events attribute to the struct's #[odra::module] macro.

    The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module.

    Testing events

    Odra's test_env comes with a handy macro assert_events! which lets you easily test the events that a given contract has emitted:

    examples/src/docs/events.rs
    use odra::{assert_events, test_env};
    use crate::docs::events::PartyStarted;
    use super::PartyContractDeployer;

    #[test]
    fn test_party() {
    let party_contract = PartyContractDeployer::init();
    assert_events!(
    party_contract,
    PartyStarted {
    caller: test_env::get_account(0),
    block_time: 0,
    }
    );
    }

    What's next

    Read the next article to learn how to call other contracts from the contract context.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/flipper-internals/index.html b/docs/docs/0.3.1/basics/flipper-internals/index.html new file mode 100644 index 000000000..f79db0a79 --- /dev/null +++ b/docs/docs/0.3.1/basics/flipper-internals/index.html @@ -0,0 +1,35 @@ + + + + + +Flipper Internals | Odra + + + + + +
    +
    Version: 0.3.1

    Flipper Internals

    In this article, we take a deep dive into the code shown in the +Flipper example, where we will explain in more detail all +the Odra-specific sections of the code.

    flipper.rs
    use odra::Variable;

    Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation +that can be reused between targets. In the above case, we're importing Variable, which is responsible +for storing simple values on the blockchain's storage.

    Struct

    flipper.rs
    /// A module definition. Each module struct consists of Variables and Mappings
    /// or/and other modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    In Odra, all contracts are also modules, which can be reused between contracts. That's why we need +to mark the struct with the #[odra::module] macro. In the struct definition itself, we state all +the fields of the contract. Those fields can be regular Rust data types, however - those will not +be persisted on the blockchain. They can also be Odra modules - defined in your project or coming +from Odra itself. Finally, to make the data persistent on the blockchain, you can use something like +Variable<T> showed above. To learn more about storage interaction, take a look at the +next article.

    Impl

    flipper.rs
    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }
    ...

    Similarly to the struct, we mark the impl section with the #[odra::module] macro. Odra will take all +pub functions from this section and create contract endpoints from them. So, if you wish to have +functions that are not available for calling outside the contract, do not make them public. Alternatively, +you can create a separate impl section without the macro - all functions defined there, even marked +with pub will be not callable.

    The #[odra(init)] macro marks the constructor of the contract. This function will be limited to only +to a single call, all further calls to it will result in an error.

    flipper.rs
        ...
    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }
    ...

    The endpoints above show you how to interact with the simplest type of storage - Variable<T>. The data +saved there using set function will be persisted in the blockchain.

    Tests

    flipper.rs
    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }
    ...

    You can write tests in any way you prefer and know in Rust. In the example above we are deploying the +contract using FlipperDeployer - a piece of code generated automatically thanks to the macros. +The contract will be deployed on the VM you chose while running cargo odra test.

    What's next

    Now let's take a look at the different types of storage that Odra provides and how to use them.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/modules/index.html b/docs/docs/0.3.1/basics/modules/index.html new file mode 100644 index 000000000..adec140a8 --- /dev/null +++ b/docs/docs/0.3.1/basics/modules/index.html @@ -0,0 +1,20 @@ + + + + + +Modules | Odra + + + + + +
    +
    Version: 0.3.1

    Modules

    Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you +write is also a module, thanks to a macro #[odra::module]. This means that we can easily rewrite our math +example from the previous article, to use a single contract, but still separate our "math" code:

    examples/src/docs/modules.rs
    use crate::docs::cross_calls::MathEngine;

    #[odra::module]
    pub struct ModulesContract {
    pub math_engine: MathEngine,
    }

    #[odra::module]
    impl ModulesContract {
    pub fn add_using_module(&self) -> u32 {
    self.math_engine.add(3, 5)
    }
    }

    Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as +a module!

    info

    To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!

    Testing

    As we don't need to hold addresses, the test is really simple:

    examples/src/docs/modules.rs
    use super::ModulesContractDeployer;

    #[test]
    fn test_modules() {
    let modules_contract = ModulesContractDeployer::default();
    assert_eq!(modules_contract.add_using_module(), 8);
    }

    What's next

    We will see how to handle native token transfers.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/native-token/index.html b/docs/docs/0.3.1/basics/native-token/index.html new file mode 100644 index 000000000..19118bfbe --- /dev/null +++ b/docs/docs/0.3.1/basics/native-token/index.html @@ -0,0 +1,26 @@ + + + + + +Native token | Odra + + + + + +
    +
    Version: 0.3.1

    Native token

    Different blockchains come with different implementations of their native tokens. Odra wraps it all for you +in easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit +their funds and anyone can withdraw them:

    examples/src/docs/native_token.rs
    use odra::types::Balance;
    use odra::contract_env;

    #[odra::module]
    pub struct PublicWallet {
    }

    #[odra::module]
    impl PublicWallet {
    #[odra(payable)]
    pub fn deposit(&mut self) {
    }

    pub fn withdraw(&mut self, amount: Balance) {
    contract_env::transfer_tokens(contract_env::caller(), amount);
    }
    }
    danger

    The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make +any checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is +even possible.

    To see a more reasonable example, check out examples/src/tlw.rs in the odra main repository.

    You can see a new macro used here: #[odra(payable)] - it will add all the code needed for a function to +be able to receive the funds. Additionally, we are using a new function from contract_env - transfer_tokens. +It does exactly what you are expecting it to do - it will transfer native tokens from the contract to the +specified address.

    We are also using the Balance - an Odra type that wraps around the type that the underlying blockchain uses +for counting tokens.

    Testing

    To be able to test how many tokens a contract (or any address) has, test_env comes with a function - +token_balance:

    examples/src/docs/native_token.rs
    use odra::types::Balance;
    use odra::test_env;
    use super::PublicWalletDeployer;

    #[test]
    fn test_modules() {
    let mut my_contract = PublicWalletDeployer::default();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());

    my_contract.with_tokens(Balance::from(100)).deposit();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));

    my_contract.withdraw(Balance::from(25));
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/odra-toml/index.html b/docs/docs/0.3.1/basics/odra-toml/index.html new file mode 100644 index 000000000..15e119962 --- /dev/null +++ b/docs/docs/0.3.1/basics/odra-toml/index.html @@ -0,0 +1,23 @@ + + + + + +Odra.toml | Odra + + + + + +
    +
    Version: 0.3.1

    Odra.toml

    As mentioned in the previous article, Odra.toml is a file that contains information about all the contracts +that Odra will build. Let's take a look at the file structure again:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    The name will be used as a name for the contract - the generated wasm file will be in the above case named +flipper.wasm.

    The fqn (Fully Qualified Name) is used by the builder to locate the exact struct where +the contract is defined.

    Adding a new contract manually

    Besides using the cargo odra generate command, you can add a new contract to be compiled by hand. +To do this, add another [[contracts]] element, name it and make sure that the fqn is set correctly.

    For example, if you want to create a new contract called counter, your Odra.toml file should finally +look like this:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    [[contracts]]
    name = "counter"
    fqn = "sample::Counter"

    What's next

    In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous +Flipper contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/storage-interaction/index.html b/docs/docs/0.3.1/basics/storage-interaction/index.html new file mode 100644 index 000000000..51e8455c3 --- /dev/null +++ b/docs/docs/0.3.1/basics/storage-interaction/index.html @@ -0,0 +1,36 @@ + + + + + +Storage interaction | Odra + + + + + +
    +
    Version: 0.3.1

    Storage interaction

    The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go +through all of them and explain their pros and cons.

    Variable

    The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your +variable in the Variable type. Let's look at a "real world" example of a contract that represents a dog:

    examples/src/docs/variable.rs
    #[odra::module]
    pub struct DogContract {
    barks: Variable<bool>,
    weight: Variable<u32>,
    name: Variable<String>,
    walks: Variable<Vec<u32>>,
    }

    You can see the Variable wrapping the data. Even complex types like Vec can be wrapped (with some caveats)!

    Let's make this contract usable, by providing a constructor and some getter functions:

    examples/src/docs/variable.rs
    use odra::Variable;

    #[odra::module]
    impl DogContract {
    #[odra(init)]
    pub fn init(&mut self, barks: bool, weight: u32, name: String) {
    self.barks.set(barks);
    self.weight.set(weight);
    self.name.set(name);
    self.walks.set(Vec::<u32>::default());
    }

    pub fn barks(&self) -> bool {
    self.barks.get_or_default()
    }

    pub fn weight(&self) -> u32 {
    self.weight.get_or_default()
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.len() as u32
    }

    pub fn walks_total_length(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.iter().sum()
    }
    }

    As you can see, you can access the data, by using get_or_default function:

    examples/src/docs/variable.rs
    ...
    self.barks.get_or_default()
    ...
    note

    Keep in mind that using get() will result in an Option that you'll need to unwrap - the variable +doesn't have to be initialized!

    To modify the data, use the set() function:

    examples/src/docs/variable.rs
    self.barks.set(barks);

    A Variable is easy to use and efficient for simple data types. One of its downsides is that it +serializes the data as a whole, so when you're using complex types like Vec or HashMap, +each time you get or set the whole data is read and written to the blockchain storage.

    In the example above, if we want to see how many walks our dog had, we would use the function:

    examples/src/docs/variable.rs
    pub fn walks_amount(&self) -> usize {
    let walks = self.walks.get_or_default();
    walks.len()
    }

    But to do so, we need to extract the whole serialized vector from the storage, which would inefficient, +especially for larger sets of data.

    To tackle this issue following two types were created.

    Mapping

    The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to +pass two values - the key type and the value type. Let's look at the variation of the Dog contract, that +uses Mapping to store information about our dog's friends and how many times they visited:

    examples/src/docs/mapping.rs
    use odra::{Mapping, Variable};

    #[odra::module]
    pub struct DogContract2 {
    name: Variable<String>,
    friends: Mapping<String, u32>,
    }

    In the example above, our key is a String (it is a name of the friend) and we are storing u32 values +(amount of visits). To read and write values from and into a Mapping we use a similar approach +to the one shown in the Variables section with one difference - we need to pass a key:

    examples/src/docs/mapping.rs
    pub fn visit(&mut self, friend_name: String) {
    let visits = self.visits(friend_name.clone());
    self.friends.set(&friend_name, visits + 1);
    }

    pub fn visits(&self, friend_name: String) -> u32 {
    self.friends.get_or_default(&friend_name)
    }

    The biggest improvement over a Variable is that we can model functionality of a HashMap using Mapping. +The amount of data written to and read from the storage is minimal. However, we cannot iterate over Mapping. +We could implement such behavior by using a numeric type key and saving the length of the set in a +separate variable. Thankfully Odra comes with a prepared solution - the List type.

    note

    If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with +a Variable working together:

    core/src/list.rs
    use odra::{Variable, List};

    pub struct List<T> {
    values: Mapping<u32, T>,
    index: Variable<u32>
    }

    List

    Going back to our DogContract example - let's revisit the walk case. This time, instead of Vec, +we'll use the list:

    examples/src/docs/list.rs
    #[odra::module]
    pub struct DogContract3 {
    name: Variable<String>,
    walks: List<u32>,
    }

    As you can see, the notation is very similar to the Vec. To understand the usage, take a look +at the reimplementation of the functions with an additional function that takes our dog for a walk +(it writes the data to the storage):

    examples/src/docs/list.rs
    #[odra::module]
    impl DogContract3 {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    self.walks.len()
    }

    pub fn walks_total_length(&self) -> u32 {
    self.walks.iter().sum()
    }

    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }
    }

    Now, we can know how many walks our dog had without loading the whole vector from the storage. +We need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all +the cases for you.

    info

    All of the above examples, alongside the tests, are available in the odra repository in the examples/src/docs/ folder.

    Custom Types

    By default you can store only built-in types like numbers, Options, Results, Strings, Vectors.

    Implementing custom types is straightforward, your type must derive from OdraType:

    use odra::{Address, OdraType};

    #[derive(OdraType)]
    pub struct Dog {
    pub name: String,
    pub age: u8,
    pub owner: Option<Address>
    }
    note

    Each field of your struct must be an OdraType.

    What's next

    In the next article, we'll see how to query the host for information about the world and our contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/basics/testing/index.html b/docs/docs/0.3.1/basics/testing/index.html new file mode 100644 index 000000000..edb8d9056 --- /dev/null +++ b/docs/docs/0.3.1/basics/testing/index.html @@ -0,0 +1,32 @@ + + + + + +Testing | Odra + + + + + +
    +
    Version: 0.3.1

    Testing

    Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write +regular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the +previous article:

    examples/src/docs/list.rs
    use odra::{Variable, List};

    #[cfg(test)]
    mod tests {
    use super::DogContract3Deployer;

    #[test]
    fn init_test() {
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());
    assert_eq!(dog_contract.walks_amount(), 0);
    assert_eq!(dog_contract.walks_total_length(), 0);
    dog_contract.walk_the_dog(5);
    dog_contract.walk_the_dog(10);
    assert_eq!(dog_contract.walks_amount(), 2);
    assert_eq!(dog_contract.walks_total_length(), 15);
    }
    }

    The #[odra(module)] macro created a Deployer code for us, which will deploy the contract on the +VM:

    examples/src/docs/list.rs
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());

    From now on, we can use dog_contract to interact with our deployed contract - in particular, all +pub functions from the impl section that was annotated with a macro are available to us:

    examples/src/docs/list.rs
    // Impl
    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }

    ...

    // Test
    dog_contract.walk_the_dog(5);

    Test env

    Odra gives us some additional functions that we can use to communicate with the host (outside the contract context) +and to configure how the contracts are deployed and called. Let's revisit the example from the previous +article about host communication and implement the tests that prove it works:

    examples/src/docs/testing.rs
    #[cfg(test)]
    mod tests {
    use super::TestingContractDeployer;

    #[test]
    fn test_env() {
    let testing_contract = TestingContractDeployer::init("MyContract".to_string());
    let creator = testing_contract.created_by();
    odra::test_env::set_caller(odra::test_env::get_account(1));
    let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());
    let creator2 = testing_contract2.created_by();
    assert!(creator != creator2);
    }
    }

    In the code above, we are deploying two instances of the same contract, but we're using odra::test_env::set_caller +to change the caller - so the Address which is deploying the contract. This changes the result of the odra::contract_env::caller() +the function we are calling inside the contract.

    Each test env comes with a set of functions that will let you write better tests:

    • fn set_caller(address: Address) - you've seen it in action just now
    • fn token_balance(address: Address) -> Balance - it returns the balance of the account associated with the given address
    • fn advance_block_time_by(seconds: BlockTime) - it increases the current value of block_time
    • fn get_account(n: usize) -> Address - it returns an nth address that was prepared for you by Odra in advance; +by default, you start with the 0th account
    • fn assert_exception<F, E>(err: E, block: F) - it executes the block code and expects err to happen
    • fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError> - returns +the event emitted by the contract

    Again, we'll see those used in the next articles.

    Deployer

    You may be wondering what is the TestingContractDeployer and where did it come from. +It is a piece of code generated automatically for you, thanks to the #[odra::module] macro. +If you used the #[odra(init)] on one of the methods, it will be the constructor of your contract. +Odra will make sure that it is called only once, so you can use it to initialize your data structures etc.

    If you do not provide the init method, you can deploy the contract using ::default() method. +In the end, you will get a Ref instance (in our case the TestingContractRef) which reimplements all +the methods you defined in the contract, but executes them on a blockchain!

    To learn more about the Ref contract, visit the Cross calls article.

    What's next

    We take a look at how Odra handles errors!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/category/advanced/index.html b/docs/docs/0.3.1/category/advanced/index.html new file mode 100644 index 000000000..da3264b90 --- /dev/null +++ b/docs/docs/0.3.1/category/advanced/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced | Odra + + + + + +
    +
    Version: 0.3.1

    Advanced

    Advanced concepts of Odra Framework

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/category/backends/index.html b/docs/docs/0.3.1/category/backends/index.html new file mode 100644 index 000000000..25f6d99c2 --- /dev/null +++ b/docs/docs/0.3.1/category/backends/index.html @@ -0,0 +1,17 @@ + + + + + +Backends | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/category/basics/index.html b/docs/docs/0.3.1/category/basics/index.html new file mode 100644 index 000000000..5029703ba --- /dev/null +++ b/docs/docs/0.3.1/category/basics/index.html @@ -0,0 +1,17 @@ + + + + + +Basics | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/category/examples/index.html b/docs/docs/0.3.1/category/examples/index.html new file mode 100644 index 000000000..a5877a88d --- /dev/null +++ b/docs/docs/0.3.1/category/examples/index.html @@ -0,0 +1,17 @@ + + + + + +Examples | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/category/getting-started/index.html b/docs/docs/0.3.1/category/getting-started/index.html new file mode 100644 index 000000000..46d5a08ae --- /dev/null +++ b/docs/docs/0.3.1/category/getting-started/index.html @@ -0,0 +1,17 @@ + + + + + +Getting started | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/category/tutorials/index.html b/docs/docs/0.3.1/category/tutorials/index.html new file mode 100644 index 000000000..989ee4a5c --- /dev/null +++ b/docs/docs/0.3.1/category/tutorials/index.html @@ -0,0 +1,17 @@ + + + + + +Tutorials | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/examples/odra-examples/index.html b/docs/docs/0.3.1/examples/odra-examples/index.html new file mode 100644 index 000000000..a9bf0918c --- /dev/null +++ b/docs/docs/0.3.1/examples/odra-examples/index.html @@ -0,0 +1,17 @@ + + + + + +odra-examples | Odra + + + + + +
    +
    Version: 0.3.1

    odra-examples

    Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.

    The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.

    Don't worry if you find learning solely by reading the code challenging. Go to the Tutorial section, where we will review it together. We will break the code into pieces, leaving no space for further questions.

    What's next

    Read the next article to learn about reusable Odra components encapsulated in odra-modules.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/examples/using-odra-modules/index.html b/docs/docs/0.3.1/examples/using-odra-modules/index.html new file mode 100644 index 000000000..4587038b2 --- /dev/null +++ b/docs/docs/0.3.1/examples/using-odra-modules/index.html @@ -0,0 +1,21 @@ + + + + + +Using odra-modules | Odra + + + + + +
    +
    Version: 0.3.1

    Using odra-modules

    Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.

    If you followed the Installation guide your Cargo.toml should look like:

    Cargo.toml
    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    To use odra-modules, edit your dependency and features sections.

    Cargo.toml
    [dependencies]
    odra = { path = "../core", default-features = false }
    odra-modules = { path = "../modules", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]
    casper = ["odra/casper", "odra-modules/casper"]
    danger

    odra-modules defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a casper feature in your project, add odra-modules/casperspecifically (it applies to each backend).

    Now, the only thing left is to add a module to your contract.

    Let's write an example of MyToken based on Erc20 module.

    use odra::types::{Address, U256};
    use odra_modules::erc20::Erc20;

    #[odra::module]
    pub struct MyToken {
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, initial_supply: U256) {
    let name = String::from("MyToken");
    let symbol = String::from("MT");
    let decimals = 9u8;
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    self.erc20.approve(spender, amount);
    }
    }
    info

    All available modules are placed in the main Odra repository.

    Available modules

    Odra modules comes with couple of ready-to-use modules and reusable extensions.

    Tokens

    Erc20

    The Erc20 module implements the ERC20 standard.

    Erc721

    The Erc721Base module implements the ERC721 standard, adjusted for the Odra framework.

    The Erc721Token module implements the ERC721Base and additionally uses +the Erc721Metadata and Ownable extensions.

    The Erc721Receiver trait lets you implement your own logic for receiving NFTs.

    The OwnedErc721WithMetadata trait is a combination of Erc721Token, Erc721Metadata and Ownable modules.

    Erc1155

    The Erc1155Base module implements the ERC1155 standard, adjusted for the Odra framework.

    The Erc1155Token module implements the ERC1155Base and additionally uses the Ownable extension.

    The OwnedErc1155 trait is a combination of Erc1155Token and Ownable modules.

    Wrapped native token

    The WrappedNativeToken module implements the Wrapper for the native token, +it was inspired by the WETH.

    Access

    AccessControl

    This module enables the implementation of role-based access control mechanisms for children +modules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API.

    Ownable

    This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner.

    The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the +transfer_ownership() function.

    Ownable2Step

    An extension of the Ownable module.

    Ownership can be transferred in a two-step process by using transfer_ownership() and accept_ownership() functions.

    Security

    Pauseable

    A module allowing to implement an emergency stop mechanism that can be triggered by any account.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/getting-started/flipper/index.html b/docs/docs/0.3.1/getting-started/flipper/index.html new file mode 100644 index 000000000..529ef4d47 --- /dev/null +++ b/docs/docs/0.3.1/getting-started/flipper/index.html @@ -0,0 +1,18 @@ + + + + + +Flipper example | Odra + + + + + +
    +
    Version: 0.3.1

    Flipper example

    To quickly start working with Odra, take a look at the following code sample. If you followed the +Installation tutorial, you should have this file already at src/flipper.rs.

    For further explanation of how this code works, see Flipper Internals.

    Let's flip

    flipper.rs
    use odra::Variable;

    /// A module definition. Each module struct consists Variables and Mappings
    /// or/and another modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }

    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    /// Retrieves value from the storage.
    /// If the value has never been set, the default value is returned.
    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }

    #[test]
    fn test_two_flippers() {
    let mut contract1 = FlipperDeployer::initial_settings();
    let contract2 = FlipperDeployer::initial_settings();
    assert!(!contract1.get());
    assert!(!contract2.get());
    contract1.flip();
    assert!(contract1.get());
    assert!(!contract2.get());
    }
    }

    What's next

    In the next category of articles, we will go through basic concepts of Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/getting-started/installation/index.html b/docs/docs/0.3.1/getting-started/installation/index.html new file mode 100644 index 000000000..e9f367a60 --- /dev/null +++ b/docs/docs/0.3.1/getting-started/installation/index.html @@ -0,0 +1,22 @@ + + + + + +Installation | Odra + + + + + +
    +
    Version: 0.3.1

    Installation

    Hello fellow Odra user! This page will guide you through the installation process.

    Prerequisites

    To start working with Odra, you need to have the following installed on your machine:

    • Rust toolchain installed (see rustup.rs)
    • wasmstrip tool installed (see wabt)

    We do not provide exact commands for installing these tools, as they are different for different operating systems. +Please refer to the documentation of the tools themselves.

    With Rust toolchain ready, you can add a new target:

    rustup target add wasm32-unknown-unknown
    note

    wasm32-unknown-uknown is a target that will be used by Odra to compile your smart contracts to WASM files.

    Installing Cargo Odra

    Cargo Odra is a helpful tool that will help you to build and test your smart contracts. +It is not required to use Odra, but the documentation will assume that you have it installed.

    To install it, simply execute the following command:

    cargo install cargo-odra

    To check if it was installed correctly and see available commands, type:

    cargo odra --help

    If everything went fine, we can proceed to the next step.

    Creating a new Odra project

    To create a new project, simply execute:

    cargo odra new --name my-project && cd my_project

    This will create a new folder called "my_project" and initialize Odra there. Cargo Odra +will create a sample contract for you in src directory. You can run the tests of this contract +by executing:

    cargo odra test

    This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:

    cargo odra test -b casper

    Congratulations! Now you are ready to create contracts using Odra framework! If you had any problems during +the installation process, feel free to ask for help on our Discord.

    What's next?

    If you want to see the code that you just tested, continue to the description of Flipper example.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/index.html b/docs/docs/0.3.1/index.html new file mode 100644 index 000000000..230a5facf --- /dev/null +++ b/docs/docs/0.3.1/index.html @@ -0,0 +1,25 @@ + + + + + +Odra framework | Odra + + + + + +
    +
    Version: 0.3.1

    Odra framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, +pragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract +development, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open +source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. We can do it +by abstracting over core concepts that all the above systems are built around. These are type system, +storage, entry points, execution context, and testing environment. We believe it will bring standardization +to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this +ecosystem.

    What's next

    See the Installation and our Flipper example +to find out how to start your new project with Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/tutorials/erc20/index.html b/docs/docs/0.3.1/tutorials/erc20/index.html new file mode 100644 index 000000000..6833f0182 --- /dev/null +++ b/docs/docs/0.3.1/tutorials/erc20/index.html @@ -0,0 +1,17 @@ + + + + + +ERC-20 | Odra + + + + + +
    +
    Version: 0.3.1

    ERC-20

    It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.

    The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • advanced storage - key-value pairs,
    • Odra types like Address or Balance,
    • advanced events assertion.

    Code

    Our module has a pretty complex storage layout in comparison to the previous example.

    We need to store the following data:

    1. Immutable metadata - name, symbol and decimals.
    2. Total supply.
    3. Users' balances.
    4. Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.

    Module definition

    #[odra::module(events = [Transfer, Approval])]
    pub struct Erc20 {
    decimals: Variable<u8>,
    symbol: Variable<String>,
    name: Variable<String>,
    total_supply: Variable<Balance>,
    balances: Mapping<Address, Balance>,
    allowances: Mapping<Address, Mapping<Address, Balance>>
    }
    • L6 - For the first time, we need to store key-value pairs. In order to do that, we use Mapping. The name is taken after Solidity's native type mapping. You may notice the balances property maps Address to Balance. If you deal with addresses or you operate on tokens, you should always choose Address over String and Balance over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform.
    • L7 - Odra allows nested Mappings, what we utilize to store allowances.

    Metadata

    #[odra::module]
    impl Erc20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn symbol(&self) -> String {
    self.symbol.get_or_default()
    }

    pub fn decimals(&self) -> u8 {
    self.decimals.get_or_default()
    }

    pub fn total_supply(&self) -> Balance {
    self.total_supply.get_or_default()
    }
    }

    impl Erc20 {
    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.balances.add(address, *amount);
    self.total_supply.add(amount);
    Transfer {
    from: None,
    to: Some(*address),
    amount: *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Transfer {
    pub from: Option<Address>,
    pub to: Option<Address>,
    pub amount: Balance
    }
    • L1 - The first impl block, marked as a module, contains functions defined in the ERC-20 standard.
    • L3-L10 - A constructor sets the token metadata and mints the initial supply.
    • L12-L14 - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the Ownable example, we used the get() function returning an Option<T>. If the type implements Default trait, you can call get_or_default() function and the contract does not fail even if the value is not initialized.
    • L29 - The second impl is not an odra module, in other words these function will not be a part of contract's ABI.
    • L30-L39 - Mint function is public, so like in a regular rust code will be accessible from the outside. mint() use notation self.balances.add(&address, amount);, which it is syntactic sugar for:
    let current_balance = self.balances.get(&address).unwrap_or_default();
    let new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();
    self.balances.set(&address, new_balance);

    Core

    For the sake of completeness, let's implement the remaining functionalities like transfer, transfer_from, or approve. They are not introducing any new concepts, so we leave them without additional remarks.

    erc20.rs
    #[odra::module]
    impl Erc20 {
    ...
    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    let caller = contract_env::caller();
    self.raw_transfer(&caller, recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let spender = contract_env::caller();
    self.spend_allowance(owner, &spender, amount);
    self.raw_transfer(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    let owner = contract_env::caller();
    self.allowances.get_instance(&owner).set(spender, *amount);
    Approval {
    owner,
    spender: *spender,
    value: *amount
    }
    .emit();
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.balances.get_or_default(&address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.allowances.get_instance(owner).get_or_default(spender)
    }
    }

    impl Erc20 {
    ...

    fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let owner_balance = self.balances.get_or_default(&owner);
    if *amount > owner_balance {
    contract_env::revert(Error::InsufficientBalance)
    }
    self.balances.set(owner, owner_balance - *amount);
    self.balances.add(recipient, *amount);
    Transfer {
    from: Some(*owner),
    to: Some(*recipient),
    amount: *amount
    }
    .emit();
    }

    fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {
    let allowance = self.allowances.get_instance(owner).get_or_default(spender);
    if allowance < *amount {
    contract_env::revert(Error::InsufficientAllowance)
    }
    let new_allowance = allowance - *amount;
    self.allowances
    .get_instance(owner)
    .set(spender, new_allowance);
    Approval {
    owner: *owner,
    spender: *spender,
    value: allowance - *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Approval {
    pub owner: Address,
    pub spender: Address,
    pub value: U256
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Now, compare the code we have written, with Open Zeppelin code. Out of 10, how Solidity-ish is our implementation?

    Test

    erc20.rs
    #[cfg(test)]
    pub mod tests {
    use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};
    use odra::{assert_events, test_env, types::U256};

    pub const NAME: &str = "Plascoin";
    pub const SYMBOL: &str = "PLS";
    pub const DECIMALS: u8 = 10;
    pub const INITIAL_SUPPLY: u32 = 10_000;

    pub fn setup() -> Erc20Ref {
    Erc20Deployer::init(
    String::from(NAME),
    String::from(SYMBOL),
    DECIMALS,
    INITIAL_SUPPLY.into()
    )
    }

    #[test]
    fn initialization() {
    let erc20 = setup();

    assert_eq!(&erc20.symbol(), SYMBOL);
    assert_eq!(&erc20.name(), NAME);
    assert_eq!(erc20.decimals(), DECIMALS);
    assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());
    assert_events!(
    erc20,
    Transfer {
    from: None,
    to: Some(test_env::get_account(0)),
    amount: INITIAL_SUPPLY.into()
    }
    );
    }

    #[test]
    fn transfer_works() {
    let mut erc20 = setup();
    let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    erc20.transfer(&recipient, &amount);

    assert_eq!(
    erc20.balance_of(&sender),
    U256::from(INITIAL_SUPPLY) - amount
    );
    assert_eq!(erc20.balance_of(&recipient), amount);
    assert_events!(
    erc20,
    Transfer {
    from: Some(sender),
    to: Some(recipient),
    amount
    }
    );
    }

    #[test]
    fn transfer_error() {
    let mut erc20 = setup();
    let recipient = test_env::get_account(1);
    let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);

    test_env::assert_exception(Error::InsufficientBalance, || {
    erc20.transfer(&recipient, &amount)
    });
    }

    #[test]
    fn transfer_from_and_approval_work() {
    let mut erc20 = setup();
    let (owner, recipient, spender) = (
    test_env::get_account(0),
    test_env::get_account(1),
    test_env::get_account(2)
    );
    let approved_amount = 3_000.into();
    let transfer_amount = 1_000.into();

    // Owner approves Spender.
    erc20.approve(&spender, &approved_amount);

    // Allowance was recorded.
    assert_eq!(erc20.allowance(&owner, &spender), approved_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount
    }
    );

    // Spender transfers tokens from Owner to Recipient.
    test_env::set_caller(spender);
    erc20.transfer_from(&owner, &recipient, &transfer_amount);

    // Tokens are transferred and allowance decremented.
    assert_eq!(
    erc20.balance_of(&owner),
    U256::from(INITIAL_SUPPLY) - transfer_amount
    );
    assert_eq!(erc20.balance_of(&recipient), transfer_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount - transfer_amount
    },
    Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount: transfer_amount
    }
    );

    assert_events!(erc20, Approval, Transfer);
    }

    #[test]
    fn transfer_from_error() {
    let mut erc20 = setup();
    let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    test_env::set_caller(spender);
    test_env::assert_exception(Error::InsufficientAllowance, || {
    erc20.transfer_from(&owner, &spender, &amount)
    });
    }
    }
    • L111-123 - assert_events!() macro accepts multiple events. You must pass them in the order they were emitted.
    • L125 - Alternatively, if you don't want to check the entire event, you may assert only its type.
    danger

    You can not mix both approaches, you pass full events or types only.

    What's next

    Having two modules: Ownable and Erc20, let's combine them, and create an ERC-20 on steroids.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/tutorials/ownable/index.html b/docs/docs/0.3.1/tutorials/ownable/index.html new file mode 100644 index 000000000..8ecdd1351 --- /dev/null +++ b/docs/docs/0.3.1/tutorials/ownable/index.html @@ -0,0 +1,17 @@ + + + + + +Ownable | Odra + + + + + +
    +
    Version: 0.3.1

    Ownable

    In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • storing a single value,
    • defining constructors,
    • error handling,
    • defining and emitting events.
    • registering a contact in a test environment,
    • interactions with the test environment,
    • assertions (value, events, errors assertions).

    Code

    Before we write any code, we define functionalities we would like to implement.

    1. Module has an initializer that should be called once.
    2. Only the current owner can set a new owner.
    3. Read the current owner.
    4. A function that fails if called by a non-owner account.

    Define a module

    use odra::{types::Address, Variable};

    #[odra::module]
    pub struct Ownable {
    owner: Variable<Address>
    }

    That was easy, but it is crucial to understand the basic before we move on.

    • L3 - Firstly, we need create a struct called Ownable and apply #[odra::module] to it above.
    • L5 - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with Variable.

    Init the module

    use odra::{
    execution_error, contract_env, Event, types::{Address, event::OdraEvent}
    };
    ...

    #[odra::module]
    impl Ownable {
    #[odra(init)]
    pub fn init(&mut self, owner: &Address) {
    if self.owner.get().is_some() {
    contract_env::revert(Error::OwnerIsAlreadyInitialized)
    }

    self.owner.set(*owner);

    OwnershipChanged {
    prev_owner: None,
    new_owner: *owner
    }
    .emit();
    }
    }

    execution_error! {
    pub enum Error {
    OwnerIsNotInitialized => 1,
    }
    }

    #[derive(Event, Debug, PartialEq, Eq)]
    pub struct OwnershipChanged {
    pub prev_owner: Option<Address>,
    pub new_owner: Address
    }

    Ok, we have done a couple of things, let's analyze them one by one:

    • L5 - The impl should be an odra module, so add #[odra::module].
    • L7 - The init function is marked as #[odra(init)] making it a constructor. It matters if we would like to deploy the Ownable module as a standalone contract.
    • L23 - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an Error enum. Notice that the Error enum is defined inside the execution_error macro. It generates, among others, the required Into<ExecutionError> binding.
    • L9-L11 - If the owner has been set already, we call contract_env::revert() function. As an argument we pass Error::OwnerIsNotInitialized.
    • L13 - Then we write the owner passed as an argument to the storage. To do so we call the set() on Variable.
    • L29-L33 - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from odra::Event. We highly recommend to derive Debug, PartialEq and Eq for testing purpose.
    • L23 - Finally, we create the OwnershipChanged struct and call emit() function on it (import odra::types::event::OdraEvent trait). Hence we set the first owner, we set the prev_owner value to None.

    Features implementation

    #[odra::module]
    impl Ownable {
    ...

    pub fn ensure_ownership(&self, address: &Address) {
    if Some(address) != self.owner.get().as_ref() {
    contract_env::revert(Error::NotOwner)
    }
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ensure_ownership(&contract_env::caller());
    let current_owner = self.get_owner();
    self.owner.set(*new_owner);
    OwnershipChanged {
    prev_owner: Some(current_owner),
    new_owner: *new_owner
    }
    .emit();
    }

    pub fn get_owner(&self) -> Address {
    match self.owner.get() {
    Some(owner) => owner,
    None => contract_env::revert(Error::OwnerIsNotInitialized)
    }
    }
    }

    execution_error! {
    pub enum Error {
    NotOwner => 1,
    OwnerIsAlreadyInitialized => 2,
    OwnerIsNotInitialized => 3,
    }
    }

    The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along.

    • L5,L32 - ensure_ownership() is reads the current owner, and reverts if is does not match the input Address. Also we need to update our Error enum adding a new variant NotOwner.
    • L11 - The function defined above can be reused in change_ownership() implementation. We pass to it the current caller, using the contract_env::caller() function. The we update the state, and emit OwnershipChanged.
    • L22,L34 - Lastly, a getter function. As the Variable get() function returns an Option, we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new Error variant OwnerIsNotInitialized.

    Test

    #[cfg(test)]
    mod tests {
    use super::*;
    use odra::{assert_events, test_env};

    fn setup() -> (Address, OwnableRef) {
    let owner = test_env::get_account(0);
    let ownable = OwnableDeployer::init(owner);
    (owner, ownable)
    }

    #[test]
    fn initialization_works() {
    let (owner, ownable) = setup();
    assert_eq!(ownable.get_owner(), owner);

    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    );
    }

    #[test]
    fn owner_can_change_ownership() {
    let (owner, mut ownable) = setup();
    let new_owner = test_env::get_account(1);

    test_env::set_caller(owner);
    ownable.change_ownership(&new_owner);
    assert_eq!(ownable.get_owner(), new_owner);
    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: Some(owner),
    new_owner
    }
    );
    }

    #[test]
    fn non_owner_cannot_change_ownership() {
    let (_, mut ownable) = setup();
    let new_owner = test_env::get_account(1);
    ownable.change_ownership(&new_owner);

    test_env::assert_exception(Error::NotOwner, || {
    ownable.change_ownership(&new_owner);
    });
    }
    }
    • L6 - Each test case starts with the same initialization process, so for convenience, we defined the setup() function we call as the first statement in each test. Take a look at the signature fn setup() -> (Address, OwnableRef). OwnableRef is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ensure_ownership(), change_ownership(), get_owner(), but not init() which is a constructor.
    • L7 - Now, the module needs an owner, the easiest way is to take one from the test_env. We choose the address of first account (which is the default one).
    • L8 - Odra created for us OwnableDeployer struct which implements all constructor functions. In this case there is just one function - init() which corresponds the function we have implemented in the module.
    • L12 - It is time to define the first test. As you see, it is a regular rust test.
    • L14-15 - Using the setup() function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.
      note

      You may have noticed, we use here the term module interchangeably with contract. The reason is once we deploy our module onto a virtual blockchain it may be considered a contract.

    • L17-23 - On the contract, only the init() function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro assert_events. As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred.
    • L30 - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the test env predefines 20 accounts.
    • L32 - As mentioned, the default is the 0-th account, if you want to change the executor call the test_env::set_caller() function.
      note

      The caller switch applies only the next contract interaction, the second call will be done as the default account.

    • L49-55 - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call test_env::assert_exception() with the error you expect and a failing block of code.

    Summary

    The Ownable module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract.

    What's next

    In the next tutorial we will implement a ERC20 standard.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.3.1/tutorials/owned-token/index.html b/docs/docs/0.3.1/tutorials/owned-token/index.html new file mode 100644 index 000000000..ec35f121d --- /dev/null +++ b/docs/docs/0.3.1/tutorials/owned-token/index.html @@ -0,0 +1,17 @@ + + + + + +OwnedToken | Odra + + + + + +
    +
    Version: 0.3.1

    OwnedToken

    This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.

    Code

    What should our module be capable of?

    1. Conform the Erc20 interface.
    2. Allow minting tokens but only the module owner.
    3. The current owner should be able to designate a new owner.

    Module definition

    Let's define a module called OwnedToken that is a composition of Ownable and Erc20 modules.

    owned_token.rs
    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!

    Delegation

    owned_token.rs
    use odra::types::{Address, Balance}

    ...

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> Balance {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    self.erc20.approve(spender, amount);
    }

    pub fn get_owner(&self) -> Address {
    self.ownable.get_owner()
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ownable.change_ownership(new_owner);
    }

    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.ownable.ensure_ownership(&contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    Easy. However, there are a few worth mentioning subtleness:

    • L10-L11 - A constructor is a great place to init both modules at once.
    • L14-L16 - Most of the entrypoints do not need any modification, so we simply delegates them to the erc20 module.
    • L50-L52 - The same we do with the ownable module.
    • L58-L61 - Minting should not be unconditional, we need some control over it. First, using ownable we make sure the caller really is the owner.

    Summary

    The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/advanced/advanced-storage/index.html b/docs/docs/0.4.0/advanced/advanced-storage/index.html new file mode 100644 index 000000000..429bdca89 --- /dev/null +++ b/docs/docs/0.4.0/advanced/advanced-storage/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced Storage Concepts | Odra + + + + + +
    +
    Version: 0.4.0

    Advanced Storage Concepts

    The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.

    Recap and Basic Concepts

    Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including Variable, Mapping, and List. These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values.

    Variable: A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract.

    Mapping: Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key.

    List: Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over.

    If you need a refresher on these topics, please refer to our guide on basic storage in Odra.

    Advanced Storage Concepts

    Sequence

    The Sequence in Odra is a basic module that holds a Variable which keeps track of the current value.

    pub struct Sequence<T>
    where
    T: Num + One + OdraType
    {
    value: Variable<T>
    }

    The Sequence module provides functions get_current_value and next_value to get the current value and increment the value respectively.

    Advanced Mapping

    In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility.

    Let's consider the following example:

    examples/mapping.rs
    use odra::{map, types::U256, Mapping, UnwrapOrRevert};

    use crate::owned_token::OwnedToken;

    #[odra::module]
    pub struct NestedMapping {
    strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,
    tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>
    }

    #[odra::module]
    impl NestedMapping {

    ...

    pub fn set_token(
    &mut self,
    key1: String,
    key2: u32,
    key3: String,
    token_name: String,
    decimals: u8,
    symbol: String,
    initial_supply: &U256
    ) {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .init(token_name, symbol, decimals, initial_supply);
    }

    pub fn get_string_api(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    let mapping = self.strings.get_instance(&key1).get_instance(&key2);
    mapping.get(&key3).unwrap_or_revert()
    }

    pub fn total_supply(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> U256 {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .total_supply()
    }
    }
    note

    Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers.

    Instead of using the get() function, call get_instance(), which sets the correct namespace for nested modules.

    If the terminal value is deeply nested, a long chain of get_instance() calls is required.

    To keep the codebase consistent, a map! macro can be used:

    examples/mapping.rs
    ...

    pub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {
    map!(self.strings[key1][key2][key3] = value);
    }

    pub fn get_string_macro(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    map!(self.strings[key1][key2][key3])
    }

    danger

    The terminal value must not be an Odra Module.

    AdvancedStorage Contract

    The given code snippet showcases the AdvancedStorage contract that incorporates these storage concepts.

    use odra::{Sequence, Mapping};
    use crate::modules::Token;

    #[odra::module]
    pub struct AdvancedStorage {
    my_sequence: Sequence<u32>,
    my_mapping: Mapping<String, Mapping<String, Token>>,
    }

    impl AdvancedStorage {
    pub fn get_sequence_current_value(&self) -> u32 {
    self.my_sequence.get_current_value()
    }

    pub fn next_sequence_value(&mut self) -> u32 {
    self.my_sequence.next_value()
    }

    pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.set(&inner_key, value);
    }

    pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.get(&inner_key)
    }
    }

    Conclusion

    Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/advanced/attributes/index.html b/docs/docs/0.4.0/advanced/attributes/index.html new file mode 100644 index 000000000..c887bf7a2 --- /dev/null +++ b/docs/docs/0.4.0/advanced/attributes/index.html @@ -0,0 +1,18 @@ + + + + + +Attributes | Odra + + + + + +
    +
    Version: 0.4.0

    Attributes

    Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.

    Odra defines a few attributes that can be applied to functions to equip them with superpowers.

    Init

    If your contract needs initial setup, adding the #[odra(init)] attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed.

    It's important to note that a constructor function should not be invoked in any other context.

    Example

    examples/erc20.rs
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    Payable

    When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the #[odra(payable)] attribute can send and take money in the form of native tokens.

    Example

    examples/tlw.rs
    #[odra(payable)]
    pub fn deposit(&mut self) {
    // Extract values
    let caller: Address = contract_env::caller();
    let amount: Balance = contract_env::attached_value();
    let current_block_time: BlockTime = contract_env::get_block_time();

    // Multiple lock check
    if self.balances.get(&caller).is_some() {
    contract_env::revert(Error::CannotLockTwice)
    }

    // Update state, emit event
    self.balances.set(&caller, amount);
    self.lock_expiration_map
    .set(&caller, current_block_time + self.lock_duration());
    Deposit {
    address: caller,
    amount
    }
    .emit();
    }

    If you try to send tokens to a non-payable function, the transaction will be automatically rejected.

    Non Reentrant

    Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds.

    To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts.

    They can also use reentrancy guards to block recursive calls to sensitive functions.

    In Odra you can just apply the #[odra(non_reentrant)] attribute to your function.

    Mixing attributes

    A function can accept more than one attribute. The only exclusion is a constructor cannot be payable. +To apply multiple attributes, you can write:

    #[odra(payable, non_reentrant)]
    fn deposit() {
    // your logic...
    }

    or

    #[odra(payable)]
    #[odra(non_reentrant)]
    fn deposit() {
    // your logic...
    }

    In both cases attributes order does not matter.

    However, a constructor cannot be payable, so the below code would not compile.

    #[odra(payable)]
    #[odra(init)]
    fn initialize() {
    // your logic...
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/advanced/composer/index.html b/docs/docs/0.4.0/advanced/composer/index.html new file mode 100644 index 000000000..e13a36055 --- /dev/null +++ b/docs/docs/0.4.0/advanced/composer/index.html @@ -0,0 +1,17 @@ + + + + + +Module Composer | Odra + + + + + +
    +
    Version: 0.4.0

    Module Composer

    The Module Composer is a feature of the Odra Framework designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the Module Composer feature, complete with practical code examples.

    Conceptual Overview

    By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key.

    #[odra::module]
    struct Contract {
    value: Variable<u8>, // the default namespace would be "contract_value"
    module: Module
    }

    #[odra::module]
    struct Module {
    secret: Variable<String> // the default namespace would be "contract_module_secret"
    }

    While this isolation often proves useful, there are scenarios where shared storage is beneficial. Here, the Module Composer comes in.

    Additionally, the Module Composer shortens the storage key - a handy side effect of shared storage.

    For each module, Odra generates a corresponding Composer struct (e.g., MyContractComposer for MyContract module), which aids in manual module composition.

    Usage

    By default, the #[odra::module] macro generates an implementation of the odra::Instance trait, prefixing the storage key of child modules with the parent namespace. To disable this behavior, pass the skip_instance argument to the #[odra::module] macro.

    Let's write a simple code example. The example provided below introduces some additional complexity by featuring deeper module nesting.

    use odra::{Instance, Variable, Composer};

    #[odra::module]
    pub struct SharedStorage {
    pub value: Variable<String>
    }

    #[odra::module]
    pub struct MyStorage {
    pub shared: SharedStorage,
    pub version: Variable<u8>
    }

    #[odra::module]
    pub struct MoreStorage {
    pub my_storage: MyStorage,
    pub extra: Variable<u32>
    }

    #[odra::module(skip_instance)]
    pub struct ComplexContract {
    pub shared: SharedStorage,
    pub more_storage: MoreStorage
    }

    #[odra::module]
    impl ComplexContract {
    #[odra(init)]
    pub fn init(&mut self, version: u8, value: String, extra: u32) {
    self.more_storage.my_storage.version.set(version);
    self.shared.value.set(value);
    self.more_storage.extra.set(extra);
    }

    pub fn get_value(&self) -> String {
    self.shared.value.get_or_default()
    }

    pub fn get_value_via_storage(&self) -> String {
    self.more_storage.my_storage.shared.value.get_or_default()
    }

    pub fn get_extra_value(&self) -> u32 {
    self.more_storage.extra.get_or_default()
    }
    }

    impl Instance for ComplexContract {
    fn instance(namespace: &str) -> Self {
    let value = Composer::new(namespace, "v").compose();
    let shared = SharedStorageComposer::new(namespace, "shared")
    .with_value(&value)
    .compose();
    let my_storage = MyStorageComposer::new(namespace, "my_storage")
    .with_shared(&shared)
    .compose();
    let more_storage = MoreStorageComposer::new(namespace, "more_storage")
    .with_my_storage(&my_storage)
    .compose();
    Self { shared, more_storage }
    }
    }

    #[cfg(test)]
    mod test {
    use crate::composer::ComplexContractDeployer;

    #[test]
    fn t() {
    let shared_value = "shared_value".to_string();
    let extra_value: u32 = 314;
    let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);

    assert_eq!(token.get_value(), shared_value);
    assert_eq!(token.get_value_via_storage(), shared_value);
    assert_eq!(token.get_extra_value(), extra_value);
    }
    }

    In this example, we've introduced a new module, MoreStorage, which nests MyStorage and includes an extra value. The ComplexContract contains SharedStorage and MoreStorage, creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels.

    If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:

    1. On the contract level - contract_shared_value.
    2. On the MyStorage module level - contract_more_storage_shared_value.

    This example showcases how you can effectively use the Module Composer feature to build intricate and efficient smart contracts.

    note

    To customize the storage building block, you can use Composer which API matches to modules composers API.

    Conclusion

    The Module Composer in Odra provides developers with a high level of flexibility and control over module behavior in their smart contracts. This guide, complete with a practical example, should give you a good understanding of the feature. Embrace the power of the Module Composer and unleash the full potential of your smart contracts!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/advanced/delegate/index.html b/docs/docs/0.4.0/advanced/delegate/index.html new file mode 100644 index 000000000..4f45ce6c2 --- /dev/null +++ b/docs/docs/0.4.0/advanced/delegate/index.html @@ -0,0 +1,17 @@ + + + + + +Delegate | Odra + + + + + +
    +
    Version: 0.4.0

    Delegate

    Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.

    The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable.

    Overview

    To utilize the delegate feature in your contract, use the delegate! macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the delegate! macro, your parent module remains clean and easy to understand.

    You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself.

    Code Examples

    Consider the following basic example for better understanding:

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);
    pub fn approve(&mut self, spender: Address, amount: U256);
    pub fn name(&self) -> String;
    pub fn symbol(&self) -> String;
    pub fn decimals(&self) -> u8;
    pub fn total_supply(&self) -> U256;
    pub fn balance_of(&self, owner: Address) -> U256;
    pub fn allowance(&self, owner: Address, spender: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    pub fn change_ownership(&mut self, new_owner: Address);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    This OwnedToken contract includes two modules: Erc20 and Ownable. We delegate various functions from both modules using the delegate! macro. As a result, the contract retains its succinctness without compromising on functionality.

    The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities.

    Let's take a look at another example.

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};

    #[odra::module]
    pub struct DeFiPlatform {
    ownable: Ownable,
    erc20: Erc20,
    exchange: Exchange
    }

    #[odra::module]
    impl DeFiPlatform {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    self.exchange.init(exchange_rate);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn balance_of(&self, owner: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    }

    to self.exchange {
    pub fn swap(&mut self, sender: Address, recipient: Address);
    pub fn set_exchange_rate(&mut self, new_rate: u64);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    In this DeFiPlatform contract, we include Erc20, Ownable, and Exchange modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure.

    Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/backends/casper/index.html b/docs/docs/0.4.0/backends/casper/index.html new file mode 100644 index 000000000..bd94e72e3 --- /dev/null +++ b/docs/docs/0.4.0/backends/casper/index.html @@ -0,0 +1,37 @@ + + + + + +Casper | Odra + + + + + +
    +
    Version: 0.4.0

    Casper

    The Casper backend allows you to compile your contracts into WASM files which can be deployed +onto Casper Blockchain +and lets you to easily run them against Casper's Execution Engine locally.

    Types

    A struct to be written into the storage must implement OdraType which is defined as follow:

    pub trait OdraType: 
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    The other exposed types are:

    Contract Env

    As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances.

    Events

    An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've +already learned from the events article, in Odra you emit an event, similarly, you would do it in Solidity.

    Under the hood, Odra integrates with Casper Event Standard and creates a few URefs in the global state when a contract is being installed:

    1. __events - a dictionary that stores events' data.
    2. __events_length - the evens count.
    3. __events_ces_version - the version of Casper Event Standard.
    4. __events_schema - a dictionary that stores event schemas.

    Besides that, all the events the contract emits are registered - events schemas are written to the storage under the __events_schema key.

    note

    Don't forget to expose events in the module using #[odra::module(events = [...])].

    So, Events are nothing different from any other data stored by a contract.

    A struct to be an event must implement SerializableEvent which is defined as follow:

    pub trait SerializableEvent: 
    odra_types::event::OdraEvent +
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    Payable

    The first Odra idiom is a Contract Main Purse. It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper URef and a purse are created and stored under the __contract_main_purse key.

    Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a Cargo Purse. It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse.

    Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable. +If under the way something goes wrong with the transfer, the contract reverts.

    The transferred amount can be read inside the contract by calling contract_env::attached_value().

    note

    Odra expects the cargo_purse runtime argument to be attached to a contract call.

    Revert

    In Casper, we can stop the execution pretty straightforwardly - call the runtime::revert(). +Odra adds an extra abstraction layer - in a contract ExecutionErrors are defined, which ultimately are transformed into Casper's ApiError::User.

    Context

    Casper equips developers with very low-level tooling, which can be cumbersome for newcomers. +If you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack.

    The contract_env::self_address() function takes the first element of the callstack (runtime::get_call_stack()) and casts it to Address.

    The contract_env::caller() function takes the second element of the call stack (runtime::get_call_stack()) and casts it to Address.

    As mentioned in the [Payable] section, to store CSPR, each contract creates its purse. To read the contract balance, you call contract_env::self_balance, which checks the balance of the purse stored under __contract_main_purse.

    Test Env

    Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the Casper Execution Engine.

    In your test, you can freely switch execution context by setting as a caller (test_env::set_caller()) one of the 20 predefined accounts. Each account possesses the default amount of Motes (100_000_000_000_000_000).

    The Test Env internally keeps track of the current block time, error and attached value.

    Each test is executed on a fresh instance of the Test Env.

    Usage

    Name of the Casper backend in Odra is casper, so to run the tests against it, simply pass it as a -b +parameter:

    cargo odra test -b casper

    If you want to just generate a wasm file, simply run:

    cargo odra build -b casper

    Constructors

    Let's define a basic Odra module that includes a constructor:

    #[odra::module]
    struct Counter {
    value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub initialize(&mut self, value: u32) {
    self.value.set(value);
    }
    }

    Read more about constructors here.

    WASM arguments

    When deploying a new contract you have to specify following arguments.

    Required arguments:

    • odra_cfg_package_hash_key_name - String type. The key under which the package hash of the contract will be stored.
    • odra_cfg_allow_key_override - Bool type. If true and the key specified in odra_cfg_package_hash_key_name already exists, it will be overwritten.
    • odra_cfg_is_upgradable - Bool type. If true, the contract will be deployed as upgradable.

    Optional arguments:

    • odra_cfg_constructor - String type. If the contract has the constructor entry point marked with #[odra(init)], this should be set to the constructor name.
    • constructor arguments that match entry point set in odra_cfg_constructor.

    Example usage

    To deploy your contract with a constructor using casper-client, you need to pass the above arguments. +Additionally, you need to pass the value argument, which sets the arbitrary initial value for the counter.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 5000000000000 \
    --session-path ./wasm/counter.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'counter_package_hash'" \
    --session-arg "odra_cfg_allow_key_override:bool:'true'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'initialize'" \
    --session-arg "value:u32:42"

    For a more in-depth tutorial, please refer to the Casper's 'Writing On-Chain Code'.

    Sending CSPR to a contract

    Defining payable entry points is described in Native Token section.

    What is happening under the hood is that Odra creates a new cargo_purse argument for each payable +entry point. The cargo_purse needs to be top-upped with CSPR before calling the contract. +When a contract adds CSPR to another contract call, Odra handles it for you. +The problem arises when you want to call an entry point and attach CSPR as an account. +The only way of doing that is by executing code in the sessions context, that +top-ups the cargo_purse and then calls the contract.

    Odra provides a generic proxy_caller.wasm that does exactly that. +You can build it by yourself from the main Odra repository, or use the proxy_caller.wasm +we maintain.

    Using proxy_caller.wasm

    To use the proxy_caller.wasm you need to attach the following arguments:

    • contract_package_hash - BytesArray(32) type. The package hash of the contract you want to call. +Result of to_bytes on CasperPackageHash.
    • entry_point - String type. The name of the entry point you want to call.
    • args - Bytes type. It is a serialized RuntimeArgs with the arguments you want to pass +to the entry point. To be specific it is the result of to_bytes method wrapped with Bytes type.
    • attached_value. Option<U512> type. The amount of CSPR you want to attach to the call.
    • amount. U512 type. Should be the same value as attached_value if not None. +It is a special Casper argument that enables the access to account's main purse.

    Currently casper-client doesn't allow building such arguments. +You have to build it using your SDK.

    Execution

    First thing Odra does with your code, is similar to the one used in MockVM - +a list of entrypoints is generated, thanks to the #[odra::module] macro.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/backends/mock-vm/index.html b/docs/docs/0.4.0/backends/mock-vm/index.html new file mode 100644 index 000000000..2b1e259fa --- /dev/null +++ b/docs/docs/0.4.0/backends/mock-vm/index.html @@ -0,0 +1,26 @@ + + + + + +MockVM | Odra + + + + + +
    +
    Version: 0.4.0

    MockVM

    The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing +the code written in Odra without compiling the contract to the target architecture and spinning up the +blockchain.

    Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler.

    Usage

    The MockVM is the default backend for Odra framework, so each time you run

    cargo odra test

    You are running your code against it.

    Architecture

    MockVM consists of two main parts: the Contract Register and the State.

    The Contract Register is just a list of contracts deployed onto the MockVM, identified by an Address. +Each time we call the contract, we call its instance stored in the Contract Register.

    Contracts and Test Env functions can modify the State of the MockVM.

    Contrary to the "real" backend, which holds the whole history of the blockchain, +the MockVM State holds only the current state of the MockVM. +Thanks to this and the fact that we do not need the blockchain itself, +MockVM starts instantly and runs the tests in the native speed.

    Execution

    When the MockVM backend is enabled, the #[odra::module] macro is responsible for converting +your pub functions into a list of Entrypoints, which are put into a Contract Container. +When the contract is deployed, its Container registered into a Registry under an address. +During the contract call, MockVM finds an Entrypoint and executes the code.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/backends/what-is-a-backend/index.html b/docs/docs/0.4.0/backends/what-is-a-backend/index.html new file mode 100644 index 000000000..5dd47da09 --- /dev/null +++ b/docs/docs/0.4.0/backends/what-is-a-backend/index.html @@ -0,0 +1,27 @@ + + + + + +What is a backend? | Odra + + + + + +
    +
    Version: 0.4.0

    What is a backend?

    You can think of a backend as a target platform for your smart contract. +This can be a piece of code allowing you to quickly check your code - like MockVM, +or a complete virtual machine, spinning up a blockchain for you - like CasperVM.

    Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env.

    Contract Env

    The Contract Env is a simple interface that each backend needs to implement, +exposing features of the blockchain from the perspective of the contract.

    It gives Odra a set of functions, which allows implementing more complex concepts - +for example, to implement Mapping, +Odra requires some kind of storage integration. +The exact implementation of those functions is a responsibility of a backend, +making Odra and its user free to implement the contract logic, +instead of messing with the blockchain internals.

    Other functions from Contract Env include handling transfers, addresses, block time, errors and events.

    Test Env

    Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with +the backend from the outside world - really useful for implementing tests.

    This ranges from interacting with the blockchain - like deploying and calling the contracts, +to the more test-oriented - handling errors, forwarding the block time, etc.

    What's next

    We will take a look at backends Odra implements in more detail.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/cargo-odra/index.html b/docs/docs/0.4.0/basics/cargo-odra/index.html new file mode 100644 index 000000000..8bd5a1b2a --- /dev/null +++ b/docs/docs/0.4.0/basics/cargo-odra/index.html @@ -0,0 +1,38 @@ + + + + + +Cargo Odra | Odra + + + + + +
    +
    Version: 0.4.0

    Cargo Odra

    If you followed the Installation tutorial properly, +you should already be set up with the Cargo Odra tool. It is an executable that will help you with +managing your smart contracts project, testing and running them on multiple backends (blockchains).

    Let's take a look at all the possibilities that Cargo Odra gives you.

    Managing projects

    Two commands will help you create a new project. The first one is cargo odra new. +You need to pass one parameter, namely --name {PROJECT_NAME}:

    cargo odra new --name my-project

    This will create a new project in the my_project folder and name it my_project. You can see it +for yourself, for example by taking a look into a Cargo.toml file created in your project's folder:

    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    The project is created using the template located in Odra's main repository. +By default it uses full template, if you want, you can use minimalistic blank by running:

    cargo odra new -t blank --name my-project

    By default, the latest release of Odra will be used for the template and as a dependency. +You can pass a source of Odra you want to use, by using -s parameter:

    cargo odra new -n my-project -s ../odra # will use local folder of odra
    cargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release
    cargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io

    The second way of creating a project is by using init command:

    cargo odra init --name my-project

    It works in the same way as new, but instead of creating a new folder, it will create a project +in the current, empty directory.

    Generating code

    If you want to quickly create a new contract code, you can use the generate command:

    cargo odra generate -c counter 

    This will create a new file src/counter.rs with sample code, add appropriate use and mod sections +to src/lib.rs and update the Odra.toml file accordingly. To learn more about Odra.toml file, +visit Odra.toml.

    Testing

    Most used command during the development of your project should be this one:

    cargo odra test

    It will run your tests against Odra's MockVM. It is substantially faster than virtual machines +provided by blockchains developers and implements all the features Odra uses.

    When you want to run tests against a "real" VM, just provide the name of the backend using -b +option:

    cargo odra test -b casper

    In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files, +spin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat. +Keep in mind that this is a lot slower than MockVM and you cannot use the debugger. +This is why MockVM was created and should be your first choice when developing contracts. +Of course, testing all of your code against a blockchain VM is a must in the end.

    If you want to run only some of the tests, you can pass arguments to the cargo test command +(which is run in the background obviously):

    cargo odra test -- this-will-be-passed-to-cargo-test

    If you want to run tests which names contain the word two, you can execute:

    cargo odra test -- two

    Of course, you can do the same when using the backend:

    cargo odra test -b casper -- two

    Building code

    You can also build the code itself and generate the output contracts without running the tests. +To do so, simply run:

    cargo odra build -b casper

    Where casper is the name of the backend we are using in this example. If the build process +finishes successfully, wasm files will be located in wasm folder.

    Updating dependencies

    You will learn later, that the project using Odra contains more than one Rust project - your own and +one or more builders. To run cargo update on all of them at once instead of traversing all the folders +you can use this command:

    cargo odra update

    What's next

    In the next section, we will take a look at all the files and directories that cargo odra created +for us and explain their purpose.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/communicating-with-host/index.html b/docs/docs/0.4.0/basics/communicating-with-host/index.html new file mode 100644 index 000000000..7a1897421 --- /dev/null +++ b/docs/docs/0.4.0/basics/communicating-with-host/index.html @@ -0,0 +1,21 @@ + + + + + +Host Communication | Odra + + + + + +
    +
    Version: 0.4.0

    Host Communication

    One of the things that your contract will probably do is to query the host for some information - +what is the current time? Who called me? Following example shows how to do this:

    examples/src/docs/host.rs
    use odra::Variable;
    use odra::types::{BlockTime, Address};

    #[odra::module]
    pub struct HostContract {
    name: Variable<String>,
    created_at: Variable<BlockTime>,
    created_by: Variable<Address>,
    }

    #[odra::module]
    impl HostContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.created_at.set(odra::contract_env::get_block_time());
    self.created_by.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }
    }

    As you can see, we are calling functions from odra::contract_env. get_block_time() will return +the current block time wrapped in Odra type BlockTime. caller() will return an Odra Address of +a caller (this can be an external caller or another contract).

    info

    You will learn more functions that Odra exposes from host and types it uses in further articles.

    What's next

    In the next article, we'll dive into testing your contracts with Odra, so you can check that the code +we presented in fact works!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/cross-calls/index.html b/docs/docs/0.4.0/basics/cross-calls/index.html new file mode 100644 index 000000000..9d7526618 --- /dev/null +++ b/docs/docs/0.4.0/basics/cross-calls/index.html @@ -0,0 +1,25 @@ + + + + + +Cross calls | Odra + + + + + +
    +
    Version: 0.4.0

    Cross calls

    To show how to handle calls between contracts, first, let's implement two of them:

    examples/src/docs/cross_calls.rs
    use odra::Variable;
    use odra::types::{Address};

    #[odra::module]
    pub struct CrossContract {
    pub math_engine: Variable<Address>,
    }

    #[odra::module]
    impl CrossContract {
    #[odra(init)]
    pub fn init(&mut self, math_engine_address: Address) {
    self.math_engine.set(math_engine_address);
    }

    pub fn add_using_another(&self) -> u32 {
    let math_engine_address = self.math_engine.get().unwrap();
    MathEngineRef::at(math_engine_address).add(3, 5)
    }
    }

    #[odra::module]
    pub struct MathEngine {
    }

    #[odra::module]
    impl MathEngine {
    pub fn add(&self, n1: u32, n2: u32) -> u32 {
    n1 + n2
    }
    }

    MathEngine contract can add two numbers. CrossContract takes an Address in its init function and saves it in +storage for later use. If we deploy the MathEngine first and take note of its address, we can then deploy +CrossContract and use MathEngine to perform complicated calculations for us!

    To call the external contract, we use the Ref that was created for us by Odra:

    examples/src/docs/cross_calls.rs
    MathEngineRef::at(math_engine_address).add(3, 5)

    Contract Ref

    We mentioned Ref already in our Testing article. +It is a reference to already deployed - running contract. +Here we are going to take a deeper look at it.

    Similarly to a Deployer, the Ref is generated automatically, thanks to the #[odra::module] macro. +To get an instance of a reference, we can either deploy a contract (using Deployer) or by building it +directly, using ::at(address: Address) method, as shown above. +The reference implements all the public endpoints to the contract (those marked as pub in #[odra::module] +impl), alongside couple methods:

    • at(Address) -> Self - points the reference to an Address
    • address() -> Address - returns the Address the reference is currently pointing at
    • with_tokens(Amount) -> Self - attaches Amount of native tokens to the next call

    External Contracts

    Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI.

    For that purpose, we use #[odra:external_contract] macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of.

    Let's pretend the MathEngine we defined is an external contract. There is a contract with add() function that adds two numbers somewhere.

    examples/src/docs/cross_calls.rs
    #[odra::external_contract]
    pub trait Adder {
    fn add(&self, n1: u32, n2: u32) -> u32;
    }

    Analogously to modules, Odra creates the AdderRef struct (but do not create the AdderDeployer). Having an address we can call:

    examples/src/docs/cross_calls.rs
    AdderRef::at(address).add(3, 5)

    Testing

    Let's see how we can test our cross calls using this knowledge:

    examples/src/docs/cross_calls.rs
    use super::{CrossContractDeployer, MathEngineDeployer};

    #[test]
    fn test_cross_calls() {
    let math_engine_contract = MathEngineDeployer::default();
    let cross_contract = CrossContractDeployer::init(math_engine_contract.address());

    assert_eq!(cross_contract.add_using_another(), 8);
    }

    Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a MathEngine contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the add() function we want to use.

    examples/src/docs/cross_calls.rs
    #[cfg(test)]
    mod tests {
    use odra::types::Address;
    use crate::docs::cross_calls::{Adder, AdderRef};

    #[test]
    fn test_ext() {
    let adder = AdderRef::at(get_adder_address());

    assert_eq!(adder.add(1, 2), 3);
    }

    fn get_adder_address() -> Address {
    let contract = MathEngineDeployer::default();
    contract.address()
    }
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/directory-structure/index.html b/docs/docs/0.4.0/basics/directory-structure/index.html new file mode 100644 index 000000000..0ba9fe290 --- /dev/null +++ b/docs/docs/0.4.0/basics/directory-structure/index.html @@ -0,0 +1,27 @@ + + + + + +Directory structure | Odra + + + + + +
    +
    Version: 0.4.0

    Directory structure

    After creating a new project using Odra and running the tests, you will be presented with the +following files and directories:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── CHANGELOG.md
    ├── Odra.toml
    ├── README.md
    ├── .builder_casper/
    ├── src/
    │ ├── flipper.rs
    │ └── lib.rs
    ├── target/
    └── wasm/

    Cargo.toml

    Let's first take a look at Cargo.toml file:

    [package]
    name = "sample"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    By default, your project will use the latest odra version available at crates.io. We are using two features:

    • odra/mock-vm - it is responsible for running tests on Odra's MockVM
    • odra/casper - backend implementation of Casper blockchain +More backends will be released as features that will be possible to enable here.

    Odra.toml

    This is the file that holds information about contracts that will be generated when running cargo odra build and +cargo odra test:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    As we can see, we have a single contract, its fqn (Fully Qualified Name) corresponds to +the contract is located in src/flipper.rs. +More contracts can be added here by hand, or by using cargo odra generate command.

    .builder_* folders

    Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary +for building wasm files and running them against blockchain VMs. As it is not necessary to modify +files in those folders in any way, by default they are hidden (hence the . at the beginning of the +folder name).

    src/

    This is the folder where your smart contract files live.

    target/

    Files generated by cargo during the build process are put here.

    wasm/

    WASM files generated by cargo odra build and cargo odra test are put here. You can grab those WASM files +and deploy them on the blockchain of your choosing.

    What's next

    Now, let's take a look at one of the files mentioned above in more detail, +namely the Odra.toml file.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/errors/index.html b/docs/docs/0.4.0/basics/errors/index.html new file mode 100644 index 000000000..fbba1b2cd --- /dev/null +++ b/docs/docs/0.4.0/basics/errors/index.html @@ -0,0 +1,23 @@ + + + + + +Errors | Odra + + + + + +
    +
    Version: 0.4.0

    Errors

    Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the +following example of a simple owned contract:

    examples/src/docs/errors.rs
    use odra::{execution_error, Variable, UnwrapOrRevert};
    use odra::types::Address;

    #[odra::module]
    pub struct OwnedContract {
    name: Variable<String>,
    owner: Variable<Address>,
    }

    execution_error! {
    pub enum Error {
    OwnerNotSet => 1,
    NotAnOwner => 2,
    }
    }


    #[odra::module]
    impl OwnedContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.owner.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn owner(&self) -> Address {
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)
    }

    pub fn change_name(&mut self, name: String) {
    let caller = odra::contract_env::caller();
    if caller != self.owner() {
    odra::contract_env::revert(Error::NotAnOwner)
    }

    self.name.set(name);
    }
    }

    Firstly, we are using execution_error! macro to define our own set of Errors that our contract will +throw. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use +unwrap_or_revert_with and pass an error as an argument:

    examples/src/docs/errors.rs
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)

    You and the users of your contract will be thankful for a meaningful error message!

    You can also throw the error directly, by using revert:

    examples/src/docs/errors.rs
    odra::contract_env::revert(Error::NotAnOwner)

    Testing errors

    Okay, but how about testing it? We've already mentioned a function - assert_exception. This is how you will +use it:

    examples/src/docs/errors.rs
    use super::{OwnedContractDeployer, OwnedContractRef};
    use super::Error;

    #[test]
    fn test_owner_error() {
    let owner = odra::test_env::get_account(0);
    let not_an_owner = odra::test_env::get_account(1);

    odra::test_env::set_caller(owner);
    let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());

    odra::test_env::set_caller(not_an_owner);
    odra::test_env::assert_exception(Error::NotAnOwner, || {
    owned_contract.change_name("NewName".to_string());
    })
    }

    In the example above, because we are calling the change_name method as an address which is not an "owner", +we are expecting that "NotAnOwner" error will be thrown.

    note

    Here we are creating another reference to the already deployed contract using OwnedContractRef::at() and passing to it +its Address. Note that OwnedContractDeployer::init() returns the same type.

    What's next

    We will learn how to emit and test events using Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/events/index.html b/docs/docs/0.4.0/basics/events/index.html new file mode 100644 index 000000000..e37615ff4 --- /dev/null +++ b/docs/docs/0.4.0/basics/events/index.html @@ -0,0 +1,20 @@ + + + + + +Events | Odra + + + + + +
    +
    Version: 0.4.0

    Events

    Different blockchains implement events in different ways. Odra lets you forget about it by introducing +Odra Events. Take a look:

    examples/src/docs/events.rs
    use odra::{Event, contract_env};
    use odra::types::{Address, BlockTime, event::OdraEvent};

    #[odra::module(events = [PartyStarted])]
    pub struct PartyContract {
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    #[odra::module]
    impl PartyContract {
    #[odra(init)]
    pub fn init(&self) {
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();
    }
    }

    We defined a new contract, which emits an event called PartyStarted when the contract is deployed. +To define an event, we derive an Event macro like this:

    examples/src/docs/events.rs
    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    Among other things, it adds an emit() function to the struct, which allows you to emit the event simply +as that:

    examples/src/docs/events.rs
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();

    Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an events attribute to the struct's #[odra::module] macro.

    The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module.

    Testing events

    Odra's test_env comes with a handy macro assert_events! which lets you easily test the events that a given contract has emitted:

    examples/src/docs/events.rs
    use odra::{assert_events, test_env};
    use crate::docs::events::PartyStarted;
    use super::PartyContractDeployer;

    #[test]
    fn test_party() {
    let party_contract = PartyContractDeployer::init();
    assert_events!(
    party_contract,
    PartyStarted {
    caller: test_env::get_account(0),
    block_time: 0,
    }
    );
    }

    What's next

    Read the next article to learn how to call other contracts from the contract context.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/flipper-internals/index.html b/docs/docs/0.4.0/basics/flipper-internals/index.html new file mode 100644 index 000000000..975bb6558 --- /dev/null +++ b/docs/docs/0.4.0/basics/flipper-internals/index.html @@ -0,0 +1,35 @@ + + + + + +Flipper Internals | Odra + + + + + +
    +
    Version: 0.4.0

    Flipper Internals

    In this article, we take a deep dive into the code shown in the +Flipper example, where we will explain in more detail all +the Odra-specific sections of the code.

    flipper.rs
    use odra::Variable;

    Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation +that can be reused between targets. In the above case, we're importing Variable, which is responsible +for storing simple values on the blockchain's storage.

    Struct

    flipper.rs
    /// A module definition. Each module struct consists of Variables and Mappings
    /// or/and other modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    In Odra, all contracts are also modules, which can be reused between contracts. That's why we need +to mark the struct with the #[odra::module] macro. In the struct definition itself, we state all +the fields of the contract. Those fields can be regular Rust data types, however - those will not +be persisted on the blockchain. They can also be Odra modules - defined in your project or coming +from Odra itself. Finally, to make the data persistent on the blockchain, you can use something like +Variable<T> showed above. To learn more about storage interaction, take a look at the +next article.

    Impl

    flipper.rs
    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }
    ...

    Similarly to the struct, we mark the impl section with the #[odra::module] macro. Odra will take all +pub functions from this section and create contract endpoints from them. So, if you wish to have +functions that are not available for calling outside the contract, do not make them public. Alternatively, +you can create a separate impl section without the macro - all functions defined there, even marked +with pub will be not callable.

    The #[odra(init)] macro marks the constructor of the contract. This function will be limited to only +to a single call, all further calls to it will result in an error.

    flipper.rs
        ...
    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }
    ...

    The endpoints above show you how to interact with the simplest type of storage - Variable<T>. The data +saved there using set function will be persisted in the blockchain.

    Tests

    flipper.rs
    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }
    ...

    You can write tests in any way you prefer and know in Rust. In the example above we are deploying the +contract using FlipperDeployer - a piece of code generated automatically thanks to the macros. +The contract will be deployed on the VM you chose while running cargo odra test.

    What's next

    Now let's take a look at the different types of storage that Odra provides and how to use them.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/modules/index.html b/docs/docs/0.4.0/basics/modules/index.html new file mode 100644 index 000000000..ecd34899e --- /dev/null +++ b/docs/docs/0.4.0/basics/modules/index.html @@ -0,0 +1,20 @@ + + + + + +Modules | Odra + + + + + +
    +
    Version: 0.4.0

    Modules

    Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you +write is also a module, thanks to a macro #[odra::module]. This means that we can easily rewrite our math +example from the previous article, to use a single contract, but still separate our "math" code:

    examples/src/docs/modules.rs
    use crate::docs::cross_calls::MathEngine;

    #[odra::module]
    pub struct ModulesContract {
    pub math_engine: MathEngine,
    }

    #[odra::module]
    impl ModulesContract {
    pub fn add_using_module(&self) -> u32 {
    self.math_engine.add(3, 5)
    }
    }

    Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as +a module!

    info

    To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!

    Testing

    As we don't need to hold addresses, the test is really simple:

    examples/src/docs/modules.rs
    use super::ModulesContractDeployer;

    #[test]
    fn test_modules() {
    let modules_contract = ModulesContractDeployer::default();
    assert_eq!(modules_contract.add_using_module(), 8);
    }

    What's next

    We will see how to handle native token transfers.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/native-token/index.html b/docs/docs/0.4.0/basics/native-token/index.html new file mode 100644 index 000000000..96332247a --- /dev/null +++ b/docs/docs/0.4.0/basics/native-token/index.html @@ -0,0 +1,26 @@ + + + + + +Native token | Odra + + + + + +
    +
    Version: 0.4.0

    Native token

    Different blockchains come with different implementations of their native tokens. Odra wraps it all for you +in easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit +their funds and anyone can withdraw them:

    examples/src/docs/native_token.rs
    use odra::types::Balance;
    use odra::contract_env;

    #[odra::module]
    pub struct PublicWallet {
    }

    #[odra::module]
    impl PublicWallet {
    #[odra(payable)]
    pub fn deposit(&mut self) {
    }

    pub fn withdraw(&mut self, amount: Balance) {
    contract_env::transfer_tokens(contract_env::caller(), amount);
    }
    }
    danger

    The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make +any checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is +even possible.

    To see a more reasonable example, check out examples/src/tlw.rs in the odra main repository.

    You can see a new macro used here: #[odra(payable)] - it will add all the code needed for a function to +be able to receive the funds. Additionally, we are using a new function from contract_env - transfer_tokens. +It does exactly what you are expecting it to do - it will transfer native tokens from the contract to the +specified address.

    We are also using the Balance - an Odra type that wraps around the type that the underlying blockchain uses +for counting tokens.

    Testing

    To be able to test how many tokens a contract (or any address) has, test_env comes with a function - +token_balance:

    examples/src/docs/native_token.rs
    use odra::types::Balance;
    use odra::test_env;
    use super::PublicWalletDeployer;

    #[test]
    fn test_modules() {
    let mut my_contract = PublicWalletDeployer::default();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());

    my_contract.with_tokens(Balance::from(100)).deposit();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));

    my_contract.withdraw(Balance::from(25));
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/odra-toml/index.html b/docs/docs/0.4.0/basics/odra-toml/index.html new file mode 100644 index 000000000..38aebc4ee --- /dev/null +++ b/docs/docs/0.4.0/basics/odra-toml/index.html @@ -0,0 +1,23 @@ + + + + + +Odra.toml | Odra + + + + + +
    +
    Version: 0.4.0

    Odra.toml

    As mentioned in the previous article, Odra.toml is a file that contains information about all the contracts +that Odra will build. Let's take a look at the file structure again:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    The name will be used as a name for the contract - the generated wasm file will be in the above case named +flipper.wasm.

    The fqn (Fully Qualified Name) is used by the builder to locate the exact struct where +the contract is defined.

    Adding a new contract manually

    Besides using the cargo odra generate command, you can add a new contract to be compiled by hand. +To do this, add another [[contracts]] element, name it and make sure that the fqn is set correctly.

    For example, if you want to create a new contract called counter, your Odra.toml file should finally +look like this:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    [[contracts]]
    name = "counter"
    fqn = "sample::Counter"

    What's next

    In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous +Flipper contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/storage-interaction/index.html b/docs/docs/0.4.0/basics/storage-interaction/index.html new file mode 100644 index 000000000..29c9f6827 --- /dev/null +++ b/docs/docs/0.4.0/basics/storage-interaction/index.html @@ -0,0 +1,36 @@ + + + + + +Storage interaction | Odra + + + + + +
    +
    Version: 0.4.0

    Storage interaction

    The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go +through all of them and explain their pros and cons.

    Variable

    The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your +variable in the Variable type. Let's look at a "real world" example of a contract that represents a dog:

    examples/src/docs/variable.rs
    #[odra::module]
    pub struct DogContract {
    barks: Variable<bool>,
    weight: Variable<u32>,
    name: Variable<String>,
    walks: Variable<Vec<u32>>,
    }

    You can see the Variable wrapping the data. Even complex types like Vec can be wrapped (with some caveats)!

    Let's make this contract usable, by providing a constructor and some getter functions:

    examples/src/docs/variable.rs
    use odra::Variable;

    #[odra::module]
    impl DogContract {
    #[odra(init)]
    pub fn init(&mut self, barks: bool, weight: u32, name: String) {
    self.barks.set(barks);
    self.weight.set(weight);
    self.name.set(name);
    self.walks.set(Vec::<u32>::default());
    }

    pub fn barks(&self) -> bool {
    self.barks.get_or_default()
    }

    pub fn weight(&self) -> u32 {
    self.weight.get_or_default()
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.len() as u32
    }

    pub fn walks_total_length(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.iter().sum()
    }
    }

    As you can see, you can access the data, by using get_or_default function:

    examples/src/docs/variable.rs
    ...
    self.barks.get_or_default()
    ...
    note

    Keep in mind that using get() will result in an Option that you'll need to unwrap - the variable +doesn't have to be initialized!

    To modify the data, use the set() function:

    examples/src/docs/variable.rs
    self.barks.set(barks);

    A Variable is easy to use and efficient for simple data types. One of its downsides is that it +serializes the data as a whole, so when you're using complex types like Vec or HashMap, +each time you get or set the whole data is read and written to the blockchain storage.

    In the example above, if we want to see how many walks our dog had, we would use the function:

    examples/src/docs/variable.rs
    pub fn walks_amount(&self) -> usize {
    let walks = self.walks.get_or_default();
    walks.len()
    }

    But to do so, we need to extract the whole serialized vector from the storage, which would inefficient, +especially for larger sets of data.

    To tackle this issue following two types were created.

    Mapping

    The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to +pass two values - the key type and the value type. Let's look at the variation of the Dog contract, that +uses Mapping to store information about our dog's friends and how many times they visited:

    examples/src/docs/mapping.rs
    use odra::{Mapping, Variable};

    #[odra::module]
    pub struct DogContract2 {
    name: Variable<String>,
    friends: Mapping<String, u32>,
    }

    In the example above, our key is a String (it is a name of the friend) and we are storing u32 values +(amount of visits). To read and write values from and into a Mapping we use a similar approach +to the one shown in the Variables section with one difference - we need to pass a key:

    examples/src/docs/mapping.rs
    pub fn visit(&mut self, friend_name: String) {
    let visits = self.visits(friend_name.clone());
    self.friends.set(&friend_name, visits + 1);
    }

    pub fn visits(&self, friend_name: String) -> u32 {
    self.friends.get_or_default(&friend_name)
    }

    The biggest improvement over a Variable is that we can model functionality of a HashMap using Mapping. +The amount of data written to and read from the storage is minimal. However, we cannot iterate over Mapping. +We could implement such behavior by using a numeric type key and saving the length of the set in a +separate variable. Thankfully Odra comes with a prepared solution - the List type.

    note

    If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with +a Variable working together:

    core/src/list.rs
    use odra::{Variable, List};

    pub struct List<T> {
    values: Mapping<u32, T>,
    index: Variable<u32>
    }

    List

    Going back to our DogContract example - let's revisit the walk case. This time, instead of Vec, +we'll use the list:

    examples/src/docs/list.rs
    #[odra::module]
    pub struct DogContract3 {
    name: Variable<String>,
    walks: List<u32>,
    }

    As you can see, the notation is very similar to the Vec. To understand the usage, take a look +at the reimplementation of the functions with an additional function that takes our dog for a walk +(it writes the data to the storage):

    examples/src/docs/list.rs
    #[odra::module]
    impl DogContract3 {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    self.walks.len()
    }

    pub fn walks_total_length(&self) -> u32 {
    self.walks.iter().sum()
    }

    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }
    }

    Now, we can know how many walks our dog had without loading the whole vector from the storage. +We need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all +the cases for you.

    info

    All of the above examples, alongside the tests, are available in the odra repository in the examples/src/docs/ folder.

    Custom Types

    By default you can store only built-in types like numbers, Options, Results, Strings, Vectors.

    Implementing custom types is straightforward, your type must derive from OdraType:

    use odra::{Address, OdraType};

    #[derive(OdraType)]
    pub struct Dog {
    pub name: String,
    pub age: u8,
    pub owner: Option<Address>
    }
    note

    Each field of your struct must be an OdraType.

    What's next

    In the next article, we'll see how to query the host for information about the world and our contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/basics/testing/index.html b/docs/docs/0.4.0/basics/testing/index.html new file mode 100644 index 000000000..f70852e96 --- /dev/null +++ b/docs/docs/0.4.0/basics/testing/index.html @@ -0,0 +1,32 @@ + + + + + +Testing | Odra + + + + + +
    +
    Version: 0.4.0

    Testing

    Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write +regular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the +previous article:

    examples/src/docs/list.rs
    use odra::{Variable, List};

    #[cfg(test)]
    mod tests {
    use super::DogContract3Deployer;

    #[test]
    fn init_test() {
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());
    assert_eq!(dog_contract.walks_amount(), 0);
    assert_eq!(dog_contract.walks_total_length(), 0);
    dog_contract.walk_the_dog(5);
    dog_contract.walk_the_dog(10);
    assert_eq!(dog_contract.walks_amount(), 2);
    assert_eq!(dog_contract.walks_total_length(), 15);
    }
    }

    The #[odra(module)] macro created a Deployer code for us, which will deploy the contract on the +VM:

    examples/src/docs/list.rs
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());

    From now on, we can use dog_contract to interact with our deployed contract - in particular, all +pub functions from the impl section that was annotated with a macro are available to us:

    examples/src/docs/list.rs
    // Impl
    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }

    ...

    // Test
    dog_contract.walk_the_dog(5);

    Test env

    Odra gives us some additional functions that we can use to communicate with the host (outside the contract context) +and to configure how the contracts are deployed and called. Let's revisit the example from the previous +article about host communication and implement the tests that prove it works:

    examples/src/docs/testing.rs
    #[cfg(test)]
    mod tests {
    use super::TestingContractDeployer;

    #[test]
    fn test_env() {
    let testing_contract = TestingContractDeployer::init("MyContract".to_string());
    let creator = testing_contract.created_by();
    odra::test_env::set_caller(odra::test_env::get_account(1));
    let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());
    let creator2 = testing_contract2.created_by();
    assert!(creator != creator2);
    }
    }

    In the code above, we are deploying two instances of the same contract, but we're using odra::test_env::set_caller +to change the caller - so the Address which is deploying the contract. This changes the result of the odra::contract_env::caller() +the function we are calling inside the contract.

    Each test env comes with a set of functions that will let you write better tests:

    • fn set_caller(address: Address) - you've seen it in action just now
    • fn token_balance(address: Address) -> Balance - it returns the balance of the account associated with the given address
    • fn advance_block_time_by(seconds: BlockTime) - it increases the current value of block_time
    • fn get_account(n: usize) -> Address - it returns an nth address that was prepared for you by Odra in advance; +by default, you start with the 0th account
    • fn assert_exception<F, E>(err: E, block: F) - it executes the block code and expects err to happen
    • fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError> - returns +the event emitted by the contract

    Again, we'll see those used in the next articles.

    Deployer

    You may be wondering what is the TestingContractDeployer and where did it come from. +It is a piece of code generated automatically for you, thanks to the #[odra::module] macro. +If you used the #[odra(init)] on one of the methods, it will be the constructor of your contract. +Odra will make sure that it is called only once, so you can use it to initialize your data structures etc.

    If you do not provide the init method, you can deploy the contract using ::default() method. +In the end, you will get a Ref instance (in our case the TestingContractRef) which reimplements all +the methods you defined in the contract, but executes them on a blockchain!

    To learn more about the Ref contract, visit the Cross calls article.

    What's next

    We take a look at how Odra handles errors!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/category/advanced/index.html b/docs/docs/0.4.0/category/advanced/index.html new file mode 100644 index 000000000..1acadf75c --- /dev/null +++ b/docs/docs/0.4.0/category/advanced/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced | Odra + + + + + +
    +
    Version: 0.4.0

    Advanced

    Advanced concepts of Odra Framework

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/category/backends/index.html b/docs/docs/0.4.0/category/backends/index.html new file mode 100644 index 000000000..46c366015 --- /dev/null +++ b/docs/docs/0.4.0/category/backends/index.html @@ -0,0 +1,17 @@ + + + + + +Backends | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/category/basics/index.html b/docs/docs/0.4.0/category/basics/index.html new file mode 100644 index 000000000..f2c0e728f --- /dev/null +++ b/docs/docs/0.4.0/category/basics/index.html @@ -0,0 +1,17 @@ + + + + + +Basics | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/category/examples/index.html b/docs/docs/0.4.0/category/examples/index.html new file mode 100644 index 000000000..81c447dd9 --- /dev/null +++ b/docs/docs/0.4.0/category/examples/index.html @@ -0,0 +1,17 @@ + + + + + +Examples | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/category/getting-started/index.html b/docs/docs/0.4.0/category/getting-started/index.html new file mode 100644 index 000000000..309ab7faa --- /dev/null +++ b/docs/docs/0.4.0/category/getting-started/index.html @@ -0,0 +1,17 @@ + + + + + +Getting started | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/category/tutorials/index.html b/docs/docs/0.4.0/category/tutorials/index.html new file mode 100644 index 000000000..077798358 --- /dev/null +++ b/docs/docs/0.4.0/category/tutorials/index.html @@ -0,0 +1,17 @@ + + + + + +Tutorials | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/examples/odra-examples/index.html b/docs/docs/0.4.0/examples/odra-examples/index.html new file mode 100644 index 000000000..1aa76408f --- /dev/null +++ b/docs/docs/0.4.0/examples/odra-examples/index.html @@ -0,0 +1,17 @@ + + + + + +odra-examples | Odra + + + + + +
    +
    Version: 0.4.0

    odra-examples

    Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.

    The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.

    Don't worry if you find learning solely by reading the code challenging. Go to the Tutorial section, where we will review it together. We will break the code into pieces, leaving no space for further questions.

    What's next

    Read the next article to learn about reusable Odra components encapsulated in odra-modules.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/examples/using-odra-modules/index.html b/docs/docs/0.4.0/examples/using-odra-modules/index.html new file mode 100644 index 000000000..3b3a0ecfd --- /dev/null +++ b/docs/docs/0.4.0/examples/using-odra-modules/index.html @@ -0,0 +1,21 @@ + + + + + +Using odra-modules | Odra + + + + + +
    +
    Version: 0.4.0

    Using odra-modules

    Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.

    If you followed the Installation guide your Cargo.toml should look like:

    Cargo.toml
    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    To use odra-modules, edit your dependency and features sections.

    Cargo.toml
    [dependencies]
    odra = { path = "../core", default-features = false }
    odra-modules = { path = "../modules", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]
    casper = ["odra/casper", "odra-modules/casper"]
    danger

    odra-modules defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a casper feature in your project, add odra-modules/casperspecifically (it applies to each backend).

    Now, the only thing left is to add a module to your contract.

    Let's write an example of MyToken based on Erc20 module.

    use odra::types::{Address, U256};
    use odra_modules::erc20::Erc20;

    #[odra::module]
    pub struct MyToken {
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, initial_supply: U256) {
    let name = String::from("MyToken");
    let symbol = String::from("MT");
    let decimals = 9u8;
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    self.erc20.approve(spender, amount);
    }
    }
    info

    All available modules are placed in the main Odra repository.

    Available modules

    Odra modules comes with couple of ready-to-use modules and reusable extensions.

    Tokens

    Erc20

    The Erc20 module implements the ERC20 standard.

    Erc721

    The Erc721Base module implements the ERC721 standard, adjusted for the Odra framework.

    The Erc721Token module implements the ERC721Base and additionally uses +the Erc721Metadata and Ownable extensions.

    The Erc721Receiver trait lets you implement your own logic for receiving NFTs.

    The OwnedErc721WithMetadata trait is a combination of Erc721Token, Erc721Metadata and Ownable modules.

    Erc1155

    The Erc1155Base module implements the ERC1155 standard, adjusted for the Odra framework.

    The Erc1155Token module implements the ERC1155Base and additionally uses the Ownable extension.

    The OwnedErc1155 trait is a combination of Erc1155Token and Ownable modules.

    Wrapped native token

    The WrappedNativeToken module implements the Wrapper for the native token, +it was inspired by the WETH.

    Access

    AccessControl

    This module enables the implementation of role-based access control mechanisms for children +modules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API.

    Ownable

    This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner.

    The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the +transfer_ownership() function.

    Ownable2Step

    An extension of the Ownable module.

    Ownership can be transferred in a two-step process by using transfer_ownership() and accept_ownership() functions.

    Security

    Pauseable

    A module allowing to implement an emergency stop mechanism that can be triggered by any account.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/getting-started/flipper/index.html b/docs/docs/0.4.0/getting-started/flipper/index.html new file mode 100644 index 000000000..af66e9cc0 --- /dev/null +++ b/docs/docs/0.4.0/getting-started/flipper/index.html @@ -0,0 +1,18 @@ + + + + + +Flipper example | Odra + + + + + +
    +
    Version: 0.4.0

    Flipper example

    To quickly start working with Odra, take a look at the following code sample. If you followed the +Installation tutorial, you should have this file already at src/flipper.rs.

    For further explanation of how this code works, see Flipper Internals.

    Let's flip

    flipper.rs
    use odra::Variable;

    /// A module definition. Each module struct consists Variables and Mappings
    /// or/and another modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }

    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    /// Retrieves value from the storage.
    /// If the value has never been set, the default value is returned.
    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }

    #[test]
    fn test_two_flippers() {
    let mut contract1 = FlipperDeployer::initial_settings();
    let contract2 = FlipperDeployer::initial_settings();
    assert!(!contract1.get());
    assert!(!contract2.get());
    contract1.flip();
    assert!(contract1.get());
    assert!(!contract2.get());
    }
    }

    What's next

    In the next category of articles, we will go through basic concepts of Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/getting-started/installation/index.html b/docs/docs/0.4.0/getting-started/installation/index.html new file mode 100644 index 000000000..96068f203 --- /dev/null +++ b/docs/docs/0.4.0/getting-started/installation/index.html @@ -0,0 +1,22 @@ + + + + + +Installation | Odra + + + + + +
    +
    Version: 0.4.0

    Installation

    Hello fellow Odra user! This page will guide you through the installation process.

    Prerequisites

    To start working with Odra, you need to have the following installed on your machine:

    • Rust toolchain installed (see rustup.rs)
    • wasmstrip tool installed (see wabt)

    We do not provide exact commands for installing these tools, as they are different for different operating systems. +Please refer to the documentation of the tools themselves.

    With Rust toolchain ready, you can add a new target:

    rustup target add wasm32-unknown-unknown
    note

    wasm32-unknown-uknown is a target that will be used by Odra to compile your smart contracts to WASM files.

    Installing Cargo Odra

    Cargo Odra is a helpful tool that will help you to build and test your smart contracts. +It is not required to use Odra, but the documentation will assume that you have it installed.

    To install it, simply execute the following command:

    cargo install cargo-odra

    To check if it was installed correctly and see available commands, type:

    cargo odra --help

    If everything went fine, we can proceed to the next step.

    Creating a new Odra project

    To create a new project, simply execute:

    cargo odra new --name my-project && cd my_project

    This will create a new folder called "my_project" and initialize Odra there. Cargo Odra +will create a sample contract for you in src directory. You can run the tests of this contract +by executing:

    cargo odra test

    This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:

    cargo odra test -b casper

    Congratulations! Now you are ready to create contracts using Odra framework! If you had any problems during +the installation process, feel free to ask for help on our Discord.

    What's next?

    If you want to see the code that you just tested, continue to the description of Flipper example.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/index.html b/docs/docs/0.4.0/index.html new file mode 100644 index 000000000..d2c5e8720 --- /dev/null +++ b/docs/docs/0.4.0/index.html @@ -0,0 +1,25 @@ + + + + + +Odra framework | Odra + + + + + +
    +
    Version: 0.4.0

    Odra framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, +pragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract +development, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open +source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. We can do it +by abstracting over core concepts that all the above systems are built around. These are type system, +storage, entry points, execution context, and testing environment. We believe it will bring standardization +to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this +ecosystem.

    What's next

    See the Installation and our Flipper example +to find out how to start your new project with Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/tutorials/erc20/index.html b/docs/docs/0.4.0/tutorials/erc20/index.html new file mode 100644 index 000000000..fc6f21d68 --- /dev/null +++ b/docs/docs/0.4.0/tutorials/erc20/index.html @@ -0,0 +1,17 @@ + + + + + +ERC-20 | Odra + + + + + +
    +
    Version: 0.4.0

    ERC-20

    It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.

    The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • advanced storage - key-value pairs,
    • Odra types like Address or Balance,
    • advanced events assertion.

    Code

    Our module has a pretty complex storage layout in comparison to the previous example.

    We need to store the following data:

    1. Immutable metadata - name, symbol and decimals.
    2. Total supply.
    3. Users' balances.
    4. Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.

    Module definition

    #[odra::module(events = [Transfer, Approval])]
    pub struct Erc20 {
    decimals: Variable<u8>,
    symbol: Variable<String>,
    name: Variable<String>,
    total_supply: Variable<Balance>,
    balances: Mapping<Address, Balance>,
    allowances: Mapping<Address, Mapping<Address, Balance>>
    }
    • L6 - For the first time, we need to store key-value pairs. In order to do that, we use Mapping. The name is taken after Solidity's native type mapping. You may notice the balances property maps Address to Balance. If you deal with addresses or you operate on tokens, you should always choose Address over String and Balance over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform.
    • L7 - Odra allows nested Mappings, what we utilize to store allowances.

    Metadata

    #[odra::module]
    impl Erc20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn symbol(&self) -> String {
    self.symbol.get_or_default()
    }

    pub fn decimals(&self) -> u8 {
    self.decimals.get_or_default()
    }

    pub fn total_supply(&self) -> Balance {
    self.total_supply.get_or_default()
    }
    }

    impl Erc20 {
    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.balances.add(address, *amount);
    self.total_supply.add(amount);
    Transfer {
    from: None,
    to: Some(*address),
    amount: *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Transfer {
    pub from: Option<Address>,
    pub to: Option<Address>,
    pub amount: Balance
    }
    • L1 - The first impl block, marked as a module, contains functions defined in the ERC-20 standard.
    • L3-L10 - A constructor sets the token metadata and mints the initial supply.
    • L12-L14 - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the Ownable example, we used the get() function returning an Option<T>. If the type implements Default trait, you can call get_or_default() function and the contract does not fail even if the value is not initialized.
    • L29 - The second impl is not an odra module, in other words these function will not be a part of contract's ABI.
    • L30-L39 - Mint function is public, so like in a regular rust code will be accessible from the outside. mint() use notation self.balances.add(&address, amount);, which it is syntactic sugar for:
    let current_balance = self.balances.get(&address).unwrap_or_default();
    let new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();
    self.balances.set(&address, new_balance);

    Core

    For the sake of completeness, let's implement the remaining functionalities like transfer, transfer_from, or approve. They are not introducing any new concepts, so we leave them without additional remarks.

    erc20.rs
    #[odra::module]
    impl Erc20 {
    ...
    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    let caller = contract_env::caller();
    self.raw_transfer(&caller, recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let spender = contract_env::caller();
    self.spend_allowance(owner, &spender, amount);
    self.raw_transfer(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    let owner = contract_env::caller();
    self.allowances.get_instance(&owner).set(spender, *amount);
    Approval {
    owner,
    spender: *spender,
    value: *amount
    }
    .emit();
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.balances.get_or_default(&address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.allowances.get_instance(owner).get_or_default(spender)
    }
    }

    impl Erc20 {
    ...

    fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let owner_balance = self.balances.get_or_default(&owner);
    if *amount > owner_balance {
    contract_env::revert(Error::InsufficientBalance)
    }
    self.balances.set(owner, owner_balance - *amount);
    self.balances.add(recipient, *amount);
    Transfer {
    from: Some(*owner),
    to: Some(*recipient),
    amount: *amount
    }
    .emit();
    }

    fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {
    let allowance = self.allowances.get_instance(owner).get_or_default(spender);
    if allowance < *amount {
    contract_env::revert(Error::InsufficientAllowance)
    }
    let new_allowance = allowance - *amount;
    self.allowances
    .get_instance(owner)
    .set(spender, new_allowance);
    Approval {
    owner: *owner,
    spender: *spender,
    value: allowance - *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Approval {
    pub owner: Address,
    pub spender: Address,
    pub value: U256
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Now, compare the code we have written, with Open Zeppelin code. Out of 10, how Solidity-ish is our implementation?

    Test

    erc20.rs
    #[cfg(test)]
    pub mod tests {
    use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};
    use odra::{assert_events, test_env, types::U256};

    pub const NAME: &str = "Plascoin";
    pub const SYMBOL: &str = "PLS";
    pub const DECIMALS: u8 = 10;
    pub const INITIAL_SUPPLY: u32 = 10_000;

    pub fn setup() -> Erc20Ref {
    Erc20Deployer::init(
    String::from(NAME),
    String::from(SYMBOL),
    DECIMALS,
    INITIAL_SUPPLY.into()
    )
    }

    #[test]
    fn initialization() {
    let erc20 = setup();

    assert_eq!(&erc20.symbol(), SYMBOL);
    assert_eq!(&erc20.name(), NAME);
    assert_eq!(erc20.decimals(), DECIMALS);
    assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());
    assert_events!(
    erc20,
    Transfer {
    from: None,
    to: Some(test_env::get_account(0)),
    amount: INITIAL_SUPPLY.into()
    }
    );
    }

    #[test]
    fn transfer_works() {
    let mut erc20 = setup();
    let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    erc20.transfer(&recipient, &amount);

    assert_eq!(
    erc20.balance_of(&sender),
    U256::from(INITIAL_SUPPLY) - amount
    );
    assert_eq!(erc20.balance_of(&recipient), amount);
    assert_events!(
    erc20,
    Transfer {
    from: Some(sender),
    to: Some(recipient),
    amount
    }
    );
    }

    #[test]
    fn transfer_error() {
    let mut erc20 = setup();
    let recipient = test_env::get_account(1);
    let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);

    test_env::assert_exception(Error::InsufficientBalance, || {
    erc20.transfer(&recipient, &amount)
    });
    }

    #[test]
    fn transfer_from_and_approval_work() {
    let mut erc20 = setup();
    let (owner, recipient, spender) = (
    test_env::get_account(0),
    test_env::get_account(1),
    test_env::get_account(2)
    );
    let approved_amount = 3_000.into();
    let transfer_amount = 1_000.into();

    // Owner approves Spender.
    erc20.approve(&spender, &approved_amount);

    // Allowance was recorded.
    assert_eq!(erc20.allowance(&owner, &spender), approved_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount
    }
    );

    // Spender transfers tokens from Owner to Recipient.
    test_env::set_caller(spender);
    erc20.transfer_from(&owner, &recipient, &transfer_amount);

    // Tokens are transferred and allowance decremented.
    assert_eq!(
    erc20.balance_of(&owner),
    U256::from(INITIAL_SUPPLY) - transfer_amount
    );
    assert_eq!(erc20.balance_of(&recipient), transfer_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount - transfer_amount
    },
    Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount: transfer_amount
    }
    );

    assert_events!(erc20, Approval, Transfer);
    }

    #[test]
    fn transfer_from_error() {
    let mut erc20 = setup();
    let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    test_env::set_caller(spender);
    test_env::assert_exception(Error::InsufficientAllowance, || {
    erc20.transfer_from(&owner, &spender, &amount)
    });
    }
    }
    • L111-123 - assert_events!() macro accepts multiple events. You must pass them in the order they were emitted.
    • L125 - Alternatively, if you don't want to check the entire event, you may assert only its type.
    danger

    You can not mix both approaches, you pass full events or types only.

    What's next

    Having two modules: Ownable and Erc20, let's combine them, and create an ERC-20 on steroids.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/tutorials/ownable/index.html b/docs/docs/0.4.0/tutorials/ownable/index.html new file mode 100644 index 000000000..5d24e7d00 --- /dev/null +++ b/docs/docs/0.4.0/tutorials/ownable/index.html @@ -0,0 +1,17 @@ + + + + + +Ownable | Odra + + + + + +
    +
    Version: 0.4.0

    Ownable

    In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • storing a single value,
    • defining constructors,
    • error handling,
    • defining and emitting events.
    • registering a contact in a test environment,
    • interactions with the test environment,
    • assertions (value, events, errors assertions).

    Code

    Before we write any code, we define functionalities we would like to implement.

    1. Module has an initializer that should be called once.
    2. Only the current owner can set a new owner.
    3. Read the current owner.
    4. A function that fails if called by a non-owner account.

    Define a module

    use odra::{types::Address, Variable};

    #[odra::module]
    pub struct Ownable {
    owner: Variable<Address>
    }

    That was easy, but it is crucial to understand the basic before we move on.

    • L3 - Firstly, we need create a struct called Ownable and apply #[odra::module] to it above.
    • L5 - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with Variable.

    Init the module

    use odra::{
    execution_error, contract_env, Event, types::{Address, event::OdraEvent}
    };
    ...

    #[odra::module]
    impl Ownable {
    #[odra(init)]
    pub fn init(&mut self, owner: &Address) {
    if self.owner.get().is_some() {
    contract_env::revert(Error::OwnerIsAlreadyInitialized)
    }

    self.owner.set(*owner);

    OwnershipChanged {
    prev_owner: None,
    new_owner: *owner
    }
    .emit();
    }
    }

    execution_error! {
    pub enum Error {
    OwnerIsNotInitialized => 1,
    }
    }

    #[derive(Event, Debug, PartialEq, Eq)]
    pub struct OwnershipChanged {
    pub prev_owner: Option<Address>,
    pub new_owner: Address
    }

    Ok, we have done a couple of things, let's analyze them one by one:

    • L5 - The impl should be an odra module, so add #[odra::module].
    • L7 - The init function is marked as #[odra(init)] making it a constructor. It matters if we would like to deploy the Ownable module as a standalone contract.
    • L23 - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an Error enum. Notice that the Error enum is defined inside the execution_error macro. It generates, among others, the required Into<ExecutionError> binding.
    • L9-L11 - If the owner has been set already, we call contract_env::revert() function. As an argument we pass Error::OwnerIsNotInitialized.
    • L13 - Then we write the owner passed as an argument to the storage. To do so we call the set() on Variable.
    • L29-L33 - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from odra::Event. We highly recommend to derive Debug, PartialEq and Eq for testing purpose.
    • L23 - Finally, we create the OwnershipChanged struct and call emit() function on it (import odra::types::event::OdraEvent trait). Hence we set the first owner, we set the prev_owner value to None.

    Features implementation

    #[odra::module]
    impl Ownable {
    ...

    pub fn ensure_ownership(&self, address: &Address) {
    if Some(address) != self.owner.get().as_ref() {
    contract_env::revert(Error::NotOwner)
    }
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ensure_ownership(&contract_env::caller());
    let current_owner = self.get_owner();
    self.owner.set(*new_owner);
    OwnershipChanged {
    prev_owner: Some(current_owner),
    new_owner: *new_owner
    }
    .emit();
    }

    pub fn get_owner(&self) -> Address {
    match self.owner.get() {
    Some(owner) => owner,
    None => contract_env::revert(Error::OwnerIsNotInitialized)
    }
    }
    }

    execution_error! {
    pub enum Error {
    NotOwner => 1,
    OwnerIsAlreadyInitialized => 2,
    OwnerIsNotInitialized => 3,
    }
    }

    The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along.

    • L5,L32 - ensure_ownership() is reads the current owner, and reverts if is does not match the input Address. Also we need to update our Error enum adding a new variant NotOwner.
    • L11 - The function defined above can be reused in change_ownership() implementation. We pass to it the current caller, using the contract_env::caller() function. The we update the state, and emit OwnershipChanged.
    • L22,L34 - Lastly, a getter function. As the Variable get() function returns an Option, we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new Error variant OwnerIsNotInitialized.

    Test

    #[cfg(test)]
    mod tests {
    use super::*;
    use odra::{assert_events, test_env};

    fn setup() -> (Address, OwnableRef) {
    let owner = test_env::get_account(0);
    let ownable = OwnableDeployer::init(owner);
    (owner, ownable)
    }

    #[test]
    fn initialization_works() {
    let (owner, ownable) = setup();
    assert_eq!(ownable.get_owner(), owner);

    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    );
    }

    #[test]
    fn owner_can_change_ownership() {
    let (owner, mut ownable) = setup();
    let new_owner = test_env::get_account(1);

    test_env::set_caller(owner);
    ownable.change_ownership(&new_owner);
    assert_eq!(ownable.get_owner(), new_owner);
    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: Some(owner),
    new_owner
    }
    );
    }

    #[test]
    fn non_owner_cannot_change_ownership() {
    let (_, mut ownable) = setup();
    let new_owner = test_env::get_account(1);
    ownable.change_ownership(&new_owner);

    test_env::assert_exception(Error::NotOwner, || {
    ownable.change_ownership(&new_owner);
    });
    }
    }
    • L6 - Each test case starts with the same initialization process, so for convenience, we defined the setup() function we call as the first statement in each test. Take a look at the signature fn setup() -> (Address, OwnableRef). OwnableRef is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ensure_ownership(), change_ownership(), get_owner(), but not init() which is a constructor.
    • L7 - Now, the module needs an owner, the easiest way is to take one from the test_env. We choose the address of first account (which is the default one).
    • L8 - Odra created for us OwnableDeployer struct which implements all constructor functions. In this case there is just one function - init() which corresponds the function we have implemented in the module.
    • L12 - It is time to define the first test. As you see, it is a regular rust test.
    • L14-15 - Using the setup() function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.
      note

      You may have noticed, we use here the term module interchangeably with contract. The reason is once we deploy our module onto a virtual blockchain it may be considered a contract.

    • L17-23 - On the contract, only the init() function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro assert_events. As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred.
    • L30 - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the test env predefines 20 accounts.
    • L32 - As mentioned, the default is the 0-th account, if you want to change the executor call the test_env::set_caller() function.
      note

      The caller switch applies only the next contract interaction, the second call will be done as the default account.

    • L49-55 - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call test_env::assert_exception() with the error you expect and a failing block of code.

    Summary

    The Ownable module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract.

    What's next

    In the next tutorial we will implement a ERC20 standard.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.4.0/tutorials/owned-token/index.html b/docs/docs/0.4.0/tutorials/owned-token/index.html new file mode 100644 index 000000000..e7df8cd6c --- /dev/null +++ b/docs/docs/0.4.0/tutorials/owned-token/index.html @@ -0,0 +1,17 @@ + + + + + +OwnedToken | Odra + + + + + +
    +
    Version: 0.4.0

    OwnedToken

    This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.

    Code

    What should our module be capable of?

    1. Conform the Erc20 interface.
    2. Allow minting tokens but only the module owner.
    3. The current owner should be able to designate a new owner.

    Module definition

    Let's define a module called OwnedToken that is a composition of Ownable and Erc20 modules.

    owned_token.rs
    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!

    Delegation

    owned_token.rs
    use odra::types::{Address, Balance}

    ...

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> Balance {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    self.erc20.approve(spender, amount);
    }

    pub fn get_owner(&self) -> Address {
    self.ownable.get_owner()
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ownable.change_ownership(new_owner);
    }

    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.ownable.ensure_ownership(&contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    Easy. However, there are a few worth mentioning subtleness:

    • L10-L11 - A constructor is a great place to init both modules at once.
    • L14-L16 - Most of the entrypoints do not need any modification, so we simply delegates them to the erc20 module.
    • L50-L52 - The same we do with the ownable module.
    • L58-L61 - Minting should not be unconditional, we need some control over it. First, using ownable we make sure the caller really is the owner.

    Summary

    The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/advanced/advanced-storage/index.html b/docs/docs/0.5.0/advanced/advanced-storage/index.html new file mode 100644 index 000000000..97fb7ad9e --- /dev/null +++ b/docs/docs/0.5.0/advanced/advanced-storage/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced Storage Concepts | Odra + + + + + +
    +
    Version: 0.5.0

    Advanced Storage Concepts

    The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.

    Recap and Basic Concepts

    Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including Variable, Mapping, and List. These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values.

    Variable: A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract.

    Mapping: Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key.

    List: Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over.

    If you need a refresher on these topics, please refer to our guide on basic storage in Odra.

    Advanced Storage Concepts

    Sequence

    The Sequence in Odra is a basic module that holds a Variable which keeps track of the current value.

    pub struct Sequence<T>
    where
    T: Num + One + OdraType
    {
    value: Variable<T>
    }

    The Sequence module provides functions get_current_value and next_value to get the current value and increment the value respectively.

    Advanced Mapping

    In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility.

    Let's consider the following example:

    examples/src/features/storage/mapping.rs
    use odra::{map, types::U256, Mapping, UnwrapOrRevert};

    use crate::owned_token::OwnedToken;

    #[odra::module]
    pub struct NestedMapping {
    strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,
    tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>
    }

    #[odra::module]
    impl NestedMapping {

    ...

    pub fn set_token(
    &mut self,
    key1: String,
    key2: u32,
    key3: String,
    token_name: String,
    decimals: u8,
    symbol: String,
    initial_supply: &U256
    ) {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .init(token_name, symbol, decimals, initial_supply);
    }

    pub fn get_string_api(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    let mapping = self.strings.get_instance(&key1).get_instance(&key2);
    mapping.get(&key3).unwrap_or_revert()
    }

    pub fn total_supply(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> U256 {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .total_supply()
    }
    }
    note

    Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers.

    Instead of using the get() function, call get_instance(), which sets the correct namespace for nested modules.

    If the terminal value is deeply nested, a long chain of get_instance() calls is required.

    To keep the codebase consistent, a map! macro can be used:

    examples/src/features/storage/mapping.rs
    ...

    pub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {
    map!(self.strings[key1][key2][key3] = value);
    }

    pub fn get_string_macro(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    map!(self.strings[key1][key2][key3])
    }

    danger

    The terminal value must not be an Odra Module.

    AdvancedStorage Contract

    The given code snippet showcases the AdvancedStorage contract that incorporates these storage concepts.

    use odra::{Sequence, Mapping};
    use crate::modules::Token;

    #[odra::module]
    pub struct AdvancedStorage {
    my_sequence: Sequence<u32>,
    my_mapping: Mapping<String, Mapping<String, Token>>,
    }

    impl AdvancedStorage {
    pub fn get_sequence_current_value(&self) -> u32 {
    self.my_sequence.get_current_value()
    }

    pub fn next_sequence_value(&mut self) -> u32 {
    self.my_sequence.next_value()
    }

    pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.set(&inner_key, value);
    }

    pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.get(&inner_key)
    }
    }

    Conclusion

    Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/advanced/attributes/index.html b/docs/docs/0.5.0/advanced/attributes/index.html new file mode 100644 index 000000000..4ae44017f --- /dev/null +++ b/docs/docs/0.5.0/advanced/attributes/index.html @@ -0,0 +1,19 @@ + + + + + +Attributes | Odra + + + + + +
    +
    Version: 0.5.0

    Attributes

    Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.

    Odra defines a few attributes that can be applied to functions to equip them with superpowers.

    Init

    If your contract needs initial setup, adding the #[odra(init)] attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed.

    It's important to note that a constructor function should not be invoked in any other context.

    Example

    examples/src/contracts/erc20.rs
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    Using

    An attribute applicable to struct fields. The using attribute accepts multiple values, separated by ,. +Each value attribute must point at an existing field.

    Example

    #[odra::module]
    struct Contract {
    access_control: AccessControl,
    meta: Metadata,
    #[odra(using = "access_control, meta")]
    // #[odra(using = "access_control, metadata")] - would not compile - `metadata` field does not exist
    storage: Storage
    }

    #[odra::module]
    struct AccessControl {
    owner: Variable<Address>
    }

    #[odra::module]
    struct Metadata {
    version: Variable<String>
    }

    #[odra::module]
    struct Storage {
    value: Variable<u8>,
    access_control: AccessControl,
    meta: Metadata
    }

    Payable

    When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the #[odra(payable)] attribute can send and take money in the form of native tokens.

    Example

    examples/src/contracts/tlw.rs
    #[odra(payable)]
    pub fn deposit(&mut self) {
    // Extract values
    let caller: Address = contract_env::caller();
    let amount: Balance = contract_env::attached_value();
    let current_block_time: BlockTime = contract_env::get_block_time();

    // Multiple lock check
    if self.balances.get(&caller).is_some() {
    contract_env::revert(Error::CannotLockTwice)
    }

    // Update state, emit event
    self.balances.set(&caller, amount);
    self.lock_expiration_map
    .set(&caller, current_block_time + self.lock_duration());
    Deposit {
    address: caller,
    amount
    }
    .emit();
    }

    If you try to send tokens to a non-payable function, the transaction will be automatically rejected.

    Non Reentrant

    Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds.

    To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts.

    They can also use reentrancy guards to block recursive calls to sensitive functions.

    In Odra you can just apply the #[odra(non_reentrant)] attribute to your function.

    Mixing attributes

    A function can accept more than one attribute. The only exclusion is a constructor cannot be payable. +To apply multiple attributes, you can write:

    #[odra(payable, non_reentrant)]
    fn deposit() {
    // your logic...
    }

    or

    #[odra(payable)]
    #[odra(non_reentrant)]
    fn deposit() {
    // your logic...
    }

    In both cases attributes order does not matter.

    However, a constructor cannot be payable, so the below code would not compile.

    #[odra(payable)]
    #[odra(init)]
    fn initialize() {
    // your logic...
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/advanced/delegate/index.html b/docs/docs/0.5.0/advanced/delegate/index.html new file mode 100644 index 000000000..e90c81224 --- /dev/null +++ b/docs/docs/0.5.0/advanced/delegate/index.html @@ -0,0 +1,17 @@ + + + + + +Delegate | Odra + + + + + +
    +
    Version: 0.5.0

    Delegate

    Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.

    The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable.

    Overview

    To utilize the delegate feature in your contract, use the delegate! macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the delegate! macro, your parent module remains clean and easy to understand.

    You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself.

    Code Examples

    Consider the following basic example for better understanding:

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);
    pub fn approve(&mut self, spender: Address, amount: U256);
    pub fn name(&self) -> String;
    pub fn symbol(&self) -> String;
    pub fn decimals(&self) -> u8;
    pub fn total_supply(&self) -> U256;
    pub fn balance_of(&self, owner: Address) -> U256;
    pub fn allowance(&self, owner: Address, spender: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    pub fn change_ownership(&mut self, new_owner: Address);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    This OwnedToken contract includes two modules: Erc20 and Ownable. We delegate various functions from both modules using the delegate! macro. As a result, the contract retains its succinctness without compromising on functionality.

    The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities.

    Let's take a look at another example.

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};

    #[odra::module]
    pub struct DeFiPlatform {
    ownable: Ownable,
    erc20: Erc20,
    exchange: Exchange
    }

    #[odra::module]
    impl DeFiPlatform {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    self.exchange.init(exchange_rate);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn balance_of(&self, owner: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    }

    to self.exchange {
    pub fn swap(&mut self, sender: Address, recipient: Address);
    pub fn set_exchange_rate(&mut self, new_rate: u64);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    In this DeFiPlatform contract, we include Erc20, Ownable, and Exchange modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure.

    Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/advanced/signatures/index.html b/docs/docs/0.5.0/advanced/signatures/index.html new file mode 100644 index 000000000..1406718e1 --- /dev/null +++ b/docs/docs/0.5.0/advanced/signatures/index.html @@ -0,0 +1,29 @@ + + + + + +Signatures | Odra + + + + + +
    +
    Version: 0.5.0

    Signatures

    As each backend can use a different scheme for generating key pairs, +Odra Framework provides a generic function for signature verification inside the contract context. +Thanks to this, you can write your code once, without worrying about underlying cryptography.

    Signature verification

    Signature verification is conducted by a function in contract_env:

    pub fn verify_signature(message: &Bytes, signature: &Bytes, public_key: &PublicKey) -> bool;

    Here's the simplest example of this function used in a contract:

    examples/src/features/signature_verifier.rs
    #[odra::module]
    impl SignatureVerifier {
    pub fn verify_signature(
    &self,
    message: &Bytes,
    signature: &Bytes,
    public_key: &PublicKey
    ) -> bool {
    contract_env::verify_signature(message, signature, public_key)
    }
    }

    Testing

    Besides the above function in the contract context, Odra provides corresponding functions in the test_env:

    pub fn sign_message(message: &Bytes, address: &Address) -> Bytes;

    pub fn public_key(address: &Address) -> PublicKey;

    sign_message will return a signed message. The signing itself will be performed using a private key +of an account behind the address.

    public_key returns the PublicKey of an address account.

    Thanks to those, you can write generic tests, that will work with all backends, despite differences +in signature schemes they use.

    examples/src/features/signature_verifier.rs
    #[test]
    fn signature_verification_works() {
    let message = "Message to be signed";
    let message_bytes = &Bytes::from(message.as_bytes().to_vec());
    let account = test_env::get_account(0);

    let signature = test_env::sign_message(message_bytes, &account);

    let public_key = test_env::public_key(&account);

    let signature_verifier = SignatureVerifierDeployer::default();
    assert!(signature_verifier.verify_signature(message_bytes, &signature, &public_key));
    }

    If you want, you can also test signatures that were created outside Odra. +However, you will need to prepare separate tests for each backend:

    examples/src/features/signature_verifier.rs
    /// The following test checks that the signature verification works with the signature produced
    /// by the casper wallet.
    #[test]
    #[cfg(feature = "casper")]
    fn verify_signature_casper_wallet() {
    use odra::casper::casper_types::bytesrepr::FromBytes;
    // Casper Wallet for the message "Ahoj przygodo!" signed using SECP256K1 key
    // produces the following signature:
    // 1e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa
    // Casper Wallet adds "Casper Message:\n" prefix to the message:
    let message = "Casper Message:\nAhoj przygodo!";
    let message_bytes = &Bytes::from(message.as_bytes().to_vec());

    // Depending on the type of the key, we need to prefix the signature with a tag:
    // 0x01 for ED25519
    // 0x02 for SECP256K1
    let signature_hex = "021e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa";
    let signature: [u8; 65] = hex::decode(signature_hex).unwrap().try_into().unwrap();
    let signature_bytes = &Bytes::from(signature.to_vec());

    // Similar to the above, the public key is tagged:
    let public_key_hex = "02036d9b880e44254afaf34330e57703a63aec53b5918d4470059b67a4a906350105";
    let public_key_decoded = hex::decode(public_key_hex).unwrap();
    let (public_key, _) = odra::casper::casper_types::crypto::PublicKey::from_bytes(
    public_key_decoded.as_slice()
    )
    .unwrap();

    let signature_verifier = SignatureVerifierDeployer::default();
    assert!(signature_verifier.verify_signature(message_bytes, signature_bytes, &public_key));
    }

    ECRecover

    Odra Standard Library +part of the original Odra Proposal mentioned ECRecover as one of the functions that will be +implemented by the Odra Framework. We decided to add signatures verification instead.

    The reasoning behind this decision is that the ECRecover works only with one type of signature. +Odra tries to be backend-agnostic, which implies that it should also be signature-type-agnostic. +This was possible to achieve when implementing generic signature verification, but not with ECRecover.

    In short, the implementation of ECRecover would not depend on the backend, pushing it into some kind of +utils library, and those already exist, for example in +solana_program +crate.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/advanced/using/index.html b/docs/docs/0.5.0/advanced/using/index.html new file mode 100644 index 000000000..9d6cc8a77 --- /dev/null +++ b/docs/docs/0.5.0/advanced/using/index.html @@ -0,0 +1,17 @@ + + + + + +Module reusing | Odra + + + + + +
    +
    Version: 0.5.0

    Module reusing

    This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.

    Conceptual Overview

    By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key.

    #[odra::module]
    struct Contract {
    value: Variable<u8>, // the default namespace would be "value"
    module: Module
    }

    #[odra::module]
    struct Module {
    secret: Variable<String> // the default namespace would be "module_secret"
    }

    While this isolation often proves useful, there are scenarios where shared storage is beneficial.

    Usage

    Odra generates an array of keys, prefixing the storage key of child modules with the parent namespace, like in the example above. But what if you want to reuse the same instance of a module? Add a #[odra(using)] attribute to a module to override the default behavior. This is information for the module "Do not prefix storage keys for the given module." so effectively, the child and the parent use the same module instance.

    Let's illustrate it with a simple example. The example provided below introduces some additional complexity by featuring deeper module nesting.

    use odra::Variable;

    #[odra::module]
    pub struct SharedStorage {
    pub value: Variable<String>
    }

    #[odra::module]
    pub struct MyStorage {
    pub shared: SharedStorage,
    pub version: Variable<u8>
    }

    #[odra::module]
    pub struct ComposableContract {
    pub shared: SharedStorage,
    #[odra(using = "shared")]
    pub storage: MyStorage
    }

    #[odra::module]
    impl ComposableContract {
    #[odra(init)]
    pub fn init(&mut self, version: u8, value: String) {
    self.storage.version.set(version);
    self.shared.value.set(value);
    }

    pub fn get_value(&self) -> String {
    self.shared.value.get_or_default()
    }

    pub fn get_value_via_storage(&self) -> String {
    self.storage.shared.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod test {
    use crate::composer::ComplexContractDeployer;

    #[test]
    fn t() {
    let shared_value = "shared_value".to_string();
    let extra_value: u32 = 314;
    let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);

    assert_eq!(token.get_value(), shared_value);
    assert_eq!(token.get_value_via_storage(), shared_value);
    assert_eq!(token.get_extra_value(), extra_value);
    }
    }

    In this example, we've introduced a new module, MoreStorage, which nests MyStorage and includes an extra value. The ComplexContract contains SharedStorage and MoreStorage, creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels.

    If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:

    1. On the contract level - contract_shared_value.
    2. On the MyStorage module level - contract_more_storage_shared_value.

    This example showcases how you can effectively use the module reusing feature to build intricate and efficient smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/backends/casper/index.html b/docs/docs/0.5.0/backends/casper/index.html new file mode 100644 index 000000000..2b05cad28 --- /dev/null +++ b/docs/docs/0.5.0/backends/casper/index.html @@ -0,0 +1,44 @@ + + + + + +Casper | Odra + + + + + +
    +
    Version: 0.5.0

    Casper

    The Casper backend allows you to compile your contracts into WASM files which can be deployed +onto Casper Blockchain +and lets you to easily run them against Casper's Execution Engine locally.

    Types

    A struct to be written into the storage must implement OdraType which is defined as follow:

    pub trait OdraType: 
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    The other exposed types are:

    Contract Env

    As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances.

    Events

    An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've +already learned from the events article, in Odra you emit an event, similarly, you would do it in Solidity.

    Under the hood, Odra integrates with Casper Event Standard and creates a few URefs in the global state when a contract is being installed:

    1. __events - a dictionary that stores events' data.
    2. __events_length - the evens count.
    3. __events_ces_version - the version of Casper Event Standard.
    4. __events_schema - a dictionary that stores event schemas.

    Besides that, all the events the contract emits are registered - events schemas are written to the storage under the __events_schema key.

    note

    Don't forget to expose events in the module using #[odra::module(events = [...])].

    So, Events are nothing different from any other data stored by a contract.

    A struct to be an event must implement SerializableEvent which is defined as follow:

    pub trait SerializableEvent: 
    odra_types::event::OdraEvent +
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    Payable

    The first Odra idiom is a Contract Main Purse. It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper URef and a purse are created and stored under the __contract_main_purse key.

    Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a Cargo Purse. It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse.

    Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable. +If under the way something goes wrong with the transfer, the contract reverts.

    The transferred amount can be read inside the contract by calling contract_env::attached_value().

    note

    Odra expects the cargo_purse runtime argument to be attached to a contract call. +In case of its absence, the contract_env::attached_value() returns zero.

    Revert

    In Casper, we can stop the execution pretty straightforwardly - call the runtime::revert(). +Odra adds an extra abstraction layer - in a contract ExecutionErrors are defined, which ultimately are transformed into Casper's ApiError::User.

    Context

    Casper equips developers with very low-level tooling, which can be cumbersome for newcomers. +If you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack.

    The contract_env::self_address() function takes the first element of the callstack (runtime::get_call_stack()) and casts it to Address.

    The contract_env::caller() function takes the second element of the call stack (runtime::get_call_stack()) and casts it to Address.

    As mentioned in the [Payable] section, to store CSPR, each contract creates its purse. To read the contract balance, you call contract_env::self_balance, which checks the balance of the purse stored under __contract_main_purse.

    Test Env

    Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the Casper Execution Engine.

    In your test, you can freely switch execution context by setting as a caller (test_env::set_caller()) one of the 20 predefined accounts. Each account possesses the default amount of Motes (100_000_000_000_000_000).

    The Test Env internally keeps track of the current block time, error and attached value.

    Each test is executed on a fresh instance of the Test Env.

    Usage

    Name of the Casper backend in Odra is casper, so to run the tests against it, simply pass it as a -b +parameter:

    cargo odra test -b casper

    If you want to just generate a wasm file, simply run:

    cargo odra build -b casper

    Constructors

    Let's define a basic Odra module that includes a constructor:

    #[odra::module]
    struct Counter {
    value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub initialize(&mut self, value: u32) {
    self.value.set(value);
    }
    }

    Read more about constructors here.

    WASM arguments

    When deploying a new contract you have to specify following arguments.

    Required arguments:

    • odra_cfg_package_hash_key_name - String type. The key under which the package hash of the contract will be stored.
    • odra_cfg_allow_key_override - Bool type. If true and the key specified in odra_cfg_package_hash_key_name already exists, it will be overwritten.
    • odra_cfg_is_upgradable - Bool type. If true, the contract will be deployed as upgradable.

    Optional arguments:

    • odra_cfg_constructor - String type. If the contract has the constructor entry point marked with #[odra(init)], this should be set to the constructor name.
    • constructor arguments that match entry point set in odra_cfg_constructor.

    Contract Deploys

    Example: Deploy Counter

    To deploy your contract with a constructor using casper-client, you need to pass the above arguments. +Additionally, you need to pass the value argument, which sets the arbitrary initial value for the counter.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 5000000000000 \
    --session-path ./wasm/counter.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'counter_package_hash'" \
    --session-arg "odra_cfg_allow_key_override:bool:'true'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'initialize'" \
    --session-arg "value:u32:42"

    For a more in-depth tutorial, please refer to the Casper's 'Writing On-Chain Code'.

    Example: Deploy ERC721

    Odra comes with a standard ERC721 token implementation. +Clone the main Odra repo and navigate to the modules directory.

    Firstly contract needs to be compiled.

    cargo odra build -b casper -c erc721_token

    It produces the erc721_token.wasm file in the wasm directory.

    Now it's time to deploy the contract.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 300000000000 \
    --session-path ./wasm/erc721_token.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'my_nft'" \
    --session-arg "odra_cfg_allow_key_override:bool:'false'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \
    --session-arg "name:string:'MyNFT'" \
    --session-arg "symbol:string:'NFT'" \
    --session-arg "base_uri:string:'https://example.com/'"

    It's done. +The contract is deployed and ready to use. +Your account is the owner of the contract and you can mint and burn tokens. +For more details see the code of the ERC721 module.

    To obtain the package hash of the contract search for my_nft key +in your account's named keys.

    Example: Deploy ERC1155

    The process is similar to the one described in the previous section.

    Contract compilation:

    cargo odra build -b casper -c erc1155_token

    Contract deployment:

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 300000000000 \
    --session-path ./wasm/erc1155_token.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'my_tokens'" \
    --session-arg "odra_cfg_allow_key_override:bool:'false'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \

    As previously, your account is the owner and can mint and burn tokens. +For more details see the code of the ERC1155 module.

    Sending CSPR to a contract

    Defining payable entry points is described in Native Token section.

    What is happening under the hood is that Odra creates a new cargo_purse argument for each payable +entry point. The cargo_purse needs to be top-upped with CSPR before calling the contract. +When a contract adds CSPR to another contract call, Odra handles it for you. +The problem arises when you want to call an entry point and attach CSPR as an account. +The only way of doing that is by executing code in the sessions context, that +top-ups the cargo_purse and then calls the contract.

    Odra provides a generic proxy_caller.wasm that does exactly that. +You can build it by yourself from the main Odra repository, or use the proxy_caller.wasm +we maintain.

    Using proxy_caller.wasm

    To use the proxy_caller.wasm you need to attach the following arguments:

    • contract_package_hash - BytesArray(32) type. The package hash of the contract you want to call. +Result of to_bytes on CasperPackageHash.
    • entry_point - String type. The name of the entry point you want to call.
    • args - Bytes type. It is a serialized RuntimeArgs with the arguments you want to pass +to the entry point. To be specific it is the result of to_bytes method wrapped with Bytes type.
    • attached_value. Option<U512> type. The amount of CSPR you want to attach to the call.
    • amount. U512 type. Should be the same value as attached_value if not None. +It is a special Casper argument that enables the access to account's main purse.

    Currently casper-client doesn't allow building such arguments. +You have to build it using your SDK.

    Execution

    First thing Odra does with your code, is similar to the one used in MockVM - +a list of entrypoints is generated, thanks to the #[odra::module] macro.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/backends/mock-vm/index.html b/docs/docs/0.5.0/backends/mock-vm/index.html new file mode 100644 index 000000000..ed1f02c8c --- /dev/null +++ b/docs/docs/0.5.0/backends/mock-vm/index.html @@ -0,0 +1,26 @@ + + + + + +MockVM | Odra + + + + + +
    +
    Version: 0.5.0

    MockVM

    The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing +the code written in Odra without compiling the contract to the target architecture and spinning up the +blockchain.

    Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler.

    Usage

    The MockVM is the default backend for Odra framework, so each time you run

    cargo odra test

    You are running your code against it.

    Architecture

    MockVM consists of two main parts: the Contract Register and the State.

    The Contract Register is just a list of contracts deployed onto the MockVM, identified by an Address. +Each time we call the contract, we call its instance stored in the Contract Register.

    Contracts and Test Env functions can modify the State of the MockVM.

    Contrary to the "real" backend, which holds the whole history of the blockchain, +the MockVM State holds only the current state of the MockVM. +Thanks to this and the fact that we do not need the blockchain itself, +MockVM starts instantly and runs the tests in the native speed.

    Execution

    When the MockVM backend is enabled, the #[odra::module] macro is responsible for converting +your pub functions into a list of Entrypoints, which are put into a Contract Container. +When the contract is deployed, its Container registered into a Registry under an address. +During the contract call, MockVM finds an Entrypoint and executes the code.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/backends/what-is-a-backend/index.html b/docs/docs/0.5.0/backends/what-is-a-backend/index.html new file mode 100644 index 000000000..8960de074 --- /dev/null +++ b/docs/docs/0.5.0/backends/what-is-a-backend/index.html @@ -0,0 +1,27 @@ + + + + + +What is a backend? | Odra + + + + + +
    +
    Version: 0.5.0

    What is a backend?

    You can think of a backend as a target platform for your smart contract. +This can be a piece of code allowing you to quickly check your code - like MockVM, +or a complete virtual machine, spinning up a blockchain for you - like CasperVM.

    Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env.

    Contract Env

    The Contract Env is a simple interface that each backend needs to implement, +exposing features of the blockchain from the perspective of the contract.

    It gives Odra a set of functions, which allows implementing more complex concepts - +for example, to implement Mapping, +Odra requires some kind of storage integration. +The exact implementation of those functions is a responsibility of a backend, +making Odra and its user free to implement the contract logic, +instead of messing with the blockchain internals.

    Other functions from Contract Env include handling transfers, addresses, block time, errors and events.

    Test Env

    Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with +the backend from the outside world - really useful for implementing tests.

    This ranges from interacting with the blockchain - like deploying and calling the contracts, +to the more test-oriented - handling errors, forwarding the block time, etc.

    What's next

    We will take a look at backends Odra implements in more detail.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/cargo-odra/index.html b/docs/docs/0.5.0/basics/cargo-odra/index.html new file mode 100644 index 000000000..db3e07f39 --- /dev/null +++ b/docs/docs/0.5.0/basics/cargo-odra/index.html @@ -0,0 +1,38 @@ + + + + + +Cargo Odra | Odra + + + + + +
    +
    Version: 0.5.0

    Cargo Odra

    If you followed the Installation tutorial properly, +you should already be set up with the Cargo Odra tool. It is an executable that will help you with +managing your smart contracts project, testing and running them on multiple backends (blockchains).

    Let's take a look at all the possibilities that Cargo Odra gives you.

    Managing projects

    Two commands will help you create a new project. The first one is cargo odra new. +You need to pass one parameter, namely --name {PROJECT_NAME}:

    cargo odra new --name my-project

    This will create a new project in the my_project folder and name it my_project. You can see it +for yourself, for example by taking a look into a Cargo.toml file created in your project's folder:

    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    The project is created using the template located in Odra's main repository. +By default it uses full template, if you want, you can use minimalistic blank by running:

    cargo odra new -t blank --name my-project

    By default, the latest release of Odra will be used for the template and as a dependency. +You can pass a source of Odra you want to use, by using -s parameter:

    cargo odra new -n my-project -s ../odra # will use local folder of odra
    cargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release
    cargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io

    The second way of creating a project is by using init command:

    cargo odra init --name my-project

    It works in the same way as new, but instead of creating a new folder, it will create a project +in the current, empty directory.

    Generating code

    If you want to quickly create a new contract code, you can use the generate command:

    cargo odra generate -c counter 

    This will create a new file src/counter.rs with sample code, add appropriate use and mod sections +to src/lib.rs and update the Odra.toml file accordingly. To learn more about Odra.toml file, +visit Odra.toml.

    Testing

    Most used command during the development of your project should be this one:

    cargo odra test

    It will run your tests against Odra's MockVM. It is substantially faster than virtual machines +provided by blockchains developers and implements all the features Odra uses.

    When you want to run tests against a "real" VM, just provide the name of the backend using -b +option:

    cargo odra test -b casper

    In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files, +spin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat. +Keep in mind that this is a lot slower than MockVM and you cannot use the debugger. +This is why MockVM was created and should be your first choice when developing contracts. +Of course, testing all of your code against a blockchain VM is a must in the end.

    If you want to run only some of the tests, you can pass arguments to the cargo test command +(which is run in the background obviously):

    cargo odra test -- this-will-be-passed-to-cargo-test

    If you want to run tests which names contain the word two, you can execute:

    cargo odra test -- two

    Of course, you can do the same when using the backend:

    cargo odra test -b casper -- two

    Building code

    You can also build the code itself and generate the output contracts without running the tests. +To do so, simply run:

    cargo odra build -b casper

    Where casper is the name of the backend we are using in this example. If the build process +finishes successfully, wasm files will be located in wasm folder.

    Updating dependencies

    You will learn later, that the project using Odra contains more than one Rust project - your own and +one or more builders. To run cargo update on all of them at once instead of traversing all the folders +you can use this command:

    cargo odra update

    What's next

    In the next section, we will take a look at all the files and directories that cargo odra created +for us and explain their purpose.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/communicating-with-host/index.html b/docs/docs/0.5.0/basics/communicating-with-host/index.html new file mode 100644 index 000000000..db6dc1e45 --- /dev/null +++ b/docs/docs/0.5.0/basics/communicating-with-host/index.html @@ -0,0 +1,21 @@ + + + + + +Host Communication | Odra + + + + + +
    +
    Version: 0.5.0

    Host Communication

    One of the things that your contract will probably do is to query the host for some information - +what is the current time? Who called me? Following example shows how to do this:

    examples/src/features/host_functions.rs
    use odra::Variable;
    use odra::types::{BlockTime, Address};

    #[odra::module]
    pub struct HostContract {
    name: Variable<String>,
    created_at: Variable<BlockTime>,
    created_by: Variable<Address>,
    }

    #[odra::module]
    impl HostContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.created_at.set(odra::contract_env::get_block_time());
    self.created_by.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }
    }

    As you can see, we are calling functions from odra::contract_env. get_block_time() will return +the current block time wrapped in Odra type BlockTime. caller() will return an Odra Address of +a caller (this can be an external caller or another contract).

    info

    You will learn more functions that Odra exposes from host and types it uses in further articles.

    What's next

    In the next article, we'll dive into testing your contracts with Odra, so you can check that the code +we presented in fact works!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/cross-calls/index.html b/docs/docs/0.5.0/basics/cross-calls/index.html new file mode 100644 index 000000000..2a724c39e --- /dev/null +++ b/docs/docs/0.5.0/basics/cross-calls/index.html @@ -0,0 +1,25 @@ + + + + + +Cross calls | Odra + + + + + +
    +
    Version: 0.5.0

    Cross calls

    To show how to handle calls between contracts, first, let's implement two of them:

    examples/src/features/cross_calls.rs
    use odra::Variable;
    use odra::types::{Address};

    #[odra::module]
    pub struct CrossContract {
    pub math_engine: Variable<Address>,
    }

    #[odra::module]
    impl CrossContract {
    #[odra(init)]
    pub fn init(&mut self, math_engine_address: Address) {
    self.math_engine.set(math_engine_address);
    }

    pub fn add_using_another(&self) -> u32 {
    let math_engine_address = self.math_engine.get().unwrap();
    MathEngineRef::at(math_engine_address).add(3, 5)
    }
    }

    #[odra::module]
    pub struct MathEngine {
    }

    #[odra::module]
    impl MathEngine {
    pub fn add(&self, n1: u32, n2: u32) -> u32 {
    n1 + n2
    }
    }

    MathEngine contract can add two numbers. CrossContract takes an Address in its init function and saves it in +storage for later use. If we deploy the MathEngine first and take note of its address, we can then deploy +CrossContract and use MathEngine to perform complicated calculations for us!

    To call the external contract, we use the Ref that was created for us by Odra:

    examples/src/features/cross_calls.rs
    MathEngineRef::at(math_engine_address).add(3, 5)

    Contract Ref

    We mentioned Ref already in our Testing article. +It is a reference to already deployed - running contract. +Here we are going to take a deeper look at it.

    Similarly to a Deployer, the Ref is generated automatically, thanks to the #[odra::module] macro. +To get an instance of a reference, we can either deploy a contract (using Deployer) or by building it +directly, using ::at(address: Address) method, as shown above. +The reference implements all the public endpoints to the contract (those marked as pub in #[odra::module] +impl), alongside couple methods:

    • at(Address) -> Self - points the reference to an Address
    • address() -> Address - returns the Address the reference is currently pointing at
    • with_tokens(Amount) -> Self - attaches Amount of native tokens to the next call

    External Contracts

    Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI.

    For that purpose, we use #[odra:external_contract] macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of.

    Let's pretend the MathEngine we defined is an external contract. There is a contract with add() function that adds two numbers somewhere.

    examples/src/features/cross_calls.rs
    #[odra::external_contract]
    pub trait Adder {
    fn add(&self, n1: u32, n2: u32) -> u32;
    }

    Analogously to modules, Odra creates the AdderRef struct (but do not create the AdderDeployer). Having an address we can call:

    examples/src/features/cross_calls.rs
    AdderRef::at(address).add(3, 5)

    Testing

    Let's see how we can test our cross calls using this knowledge:

    examples/src/features/cross_calls.rs
    use super::{CrossContractDeployer, MathEngineDeployer};

    #[test]
    fn test_cross_calls() {
    let math_engine_contract = MathEngineDeployer::default();
    let cross_contract = CrossContractDeployer::init(math_engine_contract.address());

    assert_eq!(cross_contract.add_using_another(), 8);
    }

    Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a MathEngine contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the add() function we want to use.

    examples/src/features/cross_calls.rs
    #[cfg(test)]
    mod tests {
    use odra::types::Address;
    use crate::features::cross_calls::{Adder, AdderRef};

    #[test]
    fn test_ext() {
    let adder = AdderRef::at(get_adder_address());

    assert_eq!(adder.add(1, 2), 3);
    }

    fn get_adder_address() -> Address {
    let contract = MathEngineDeployer::default();
    contract.address()
    }
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/directory-structure/index.html b/docs/docs/0.5.0/basics/directory-structure/index.html new file mode 100644 index 000000000..15abd845f --- /dev/null +++ b/docs/docs/0.5.0/basics/directory-structure/index.html @@ -0,0 +1,27 @@ + + + + + +Directory structure | Odra + + + + + +
    +
    Version: 0.5.0

    Directory structure

    After creating a new project using Odra and running the tests, you will be presented with the +following files and directories:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── CHANGELOG.md
    ├── Odra.toml
    ├── README.md
    ├── .builder_casper/
    ├── src/
    │ ├── flipper.rs
    │ └── lib.rs
    ├── target/
    └── wasm/

    Cargo.toml

    Let's first take a look at Cargo.toml file:

    [package]
    name = "sample"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    By default, your project will use the latest odra version available at crates.io. We are using two features:

    • odra/mock-vm - it is responsible for running tests on Odra's MockVM
    • odra/casper - backend implementation of Casper blockchain +More backends will be released as features that will be possible to enable here.

    Odra.toml

    This is the file that holds information about contracts that will be generated when running cargo odra build and +cargo odra test:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    As we can see, we have a single contract, its fqn (Fully Qualified Name) corresponds to +the contract is located in src/flipper.rs. +More contracts can be added here by hand, or by using cargo odra generate command.

    .builder_* folders

    Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary +for building wasm files and running them against blockchain VMs. As it is not necessary to modify +files in those folders in any way, by default they are hidden (hence the . at the beginning of the +folder name).

    src/

    This is the folder where your smart contract files live.

    target/

    Files generated by cargo during the build process are put here.

    wasm/

    WASM files generated by cargo odra build and cargo odra test are put here. You can grab those WASM files +and deploy them on the blockchain of your choosing.

    What's next

    Now, let's take a look at one of the files mentioned above in more detail, +namely the Odra.toml file.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/errors/index.html b/docs/docs/0.5.0/basics/errors/index.html new file mode 100644 index 000000000..95d1207f7 --- /dev/null +++ b/docs/docs/0.5.0/basics/errors/index.html @@ -0,0 +1,23 @@ + + + + + +Errors | Odra + + + + + +
    +
    Version: 0.5.0

    Errors

    Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the +following example of a simple owned contract:

    examples/src/features/handling_errors.rs
    use odra::{execution_error, Variable, UnwrapOrRevert};
    use odra::types::Address;

    #[odra::module]
    pub struct OwnedContract {
    name: Variable<String>,
    owner: Variable<Address>,
    }

    execution_error! {
    pub enum Error {
    OwnerNotSet => 1,
    NotAnOwner => 2,
    }
    }


    #[odra::module]
    impl OwnedContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.owner.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn owner(&self) -> Address {
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)
    }

    pub fn change_name(&mut self, name: String) {
    let caller = odra::contract_env::caller();
    if caller != self.owner() {
    odra::contract_env::revert(Error::NotAnOwner)
    }

    self.name.set(name);
    }
    }

    Firstly, we are using execution_error! macro to define our own set of Errors that our contract will +throw. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use +unwrap_or_revert_with and pass an error as an argument:

    examples/src/features/handling_errors.rs
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)

    You and the users of your contract will be thankful for a meaningful error message!

    You can also throw the error directly, by using revert:

    examples/src/features/handling_errors.rs
    odra::contract_env::revert(Error::NotAnOwner)

    Testing errors

    Okay, but how about testing it? We've already mentioned a function - assert_exception. This is how you will +use it:

    examples/src/features/handling_errors.rs
    use super::{OwnedContractDeployer, OwnedContractRef};
    use super::Error;

    #[test]
    fn test_owner_error() {
    let owner = odra::test_env::get_account(0);
    let not_an_owner = odra::test_env::get_account(1);

    odra::test_env::set_caller(owner);
    let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());

    odra::test_env::set_caller(not_an_owner);
    odra::test_env::assert_exception(Error::NotAnOwner, || {
    owned_contract.change_name("NewName".to_string());
    })
    }

    In the example above, because we are calling the change_name method as an address which is not an "owner", +we are expecting that "NotAnOwner" error will be thrown.

    note

    Here we are creating another reference to the already deployed contract using OwnedContractRef::at() and passing to it +its Address. Note that OwnedContractDeployer::init() returns the same type.

    What's next

    We will learn how to emit and test events using Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/events/index.html b/docs/docs/0.5.0/basics/events/index.html new file mode 100644 index 000000000..8b9262411 --- /dev/null +++ b/docs/docs/0.5.0/basics/events/index.html @@ -0,0 +1,20 @@ + + + + + +Events | Odra + + + + + +
    +
    Version: 0.5.0

    Events

    Different blockchains implement events in different ways. Odra lets you forget about it by introducing +Odra Events. Take a look:

    examples/src/features/events.rs
    use odra::{Event, contract_env};
    use odra::types::{Address, BlockTime, event::OdraEvent};

    #[odra::module(events = [PartyStarted])]
    pub struct PartyContract {
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    #[odra::module]
    impl PartyContract {
    #[odra(init)]
    pub fn init(&self) {
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();
    }
    }

    We defined a new contract, which emits an event called PartyStarted when the contract is deployed. +To define an event, we derive an Event macro like this:

    examples/src/features/events.rs
    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    Among other things, it adds an emit() function to the struct, which allows you to emit the event simply +as that:

    examples/src/features/events.rs
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();

    Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an events attribute to the struct's #[odra::module] macro.

    The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module.

    Testing events

    Odra's test_env comes with a handy macro assert_events! which lets you easily test the events that a given contract has emitted:

    examples/src/features/events.rs
    use odra::{assert_events, test_env};
    use crate::features::events::PartyStarted;
    use super::PartyContractDeployer;

    #[test]
    fn test_party() {
    let party_contract = PartyContractDeployer::init();
    assert_events!(
    party_contract,
    PartyStarted {
    caller: test_env::get_account(0),
    block_time: 0,
    }
    );
    }

    What's next

    Read the next article to learn how to call other contracts from the contract context.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/flipper-internals/index.html b/docs/docs/0.5.0/basics/flipper-internals/index.html new file mode 100644 index 000000000..2a8ee97f1 --- /dev/null +++ b/docs/docs/0.5.0/basics/flipper-internals/index.html @@ -0,0 +1,35 @@ + + + + + +Flipper Internals | Odra + + + + + +
    +
    Version: 0.5.0

    Flipper Internals

    In this article, we take a deep dive into the code shown in the +Flipper example, where we will explain in more detail all +the Odra-specific sections of the code.

    flipper.rs
    use odra::Variable;

    Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation +that can be reused between targets. In the above case, we're importing Variable, which is responsible +for storing simple values on the blockchain's storage.

    Struct

    flipper.rs
    /// A module definition. Each module struct consists of Variables and Mappings
    /// or/and other modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    In Odra, all contracts are also modules, which can be reused between contracts. That's why we need +to mark the struct with the #[odra::module] macro. In the struct definition itself, we state all +the fields of the contract. Those fields can be regular Rust data types, however - those will not +be persisted on the blockchain. They can also be Odra modules - defined in your project or coming +from Odra itself. Finally, to make the data persistent on the blockchain, you can use something like +Variable<T> showed above. To learn more about storage interaction, take a look at the +next article.

    Impl

    flipper.rs
    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }
    ...

    Similarly to the struct, we mark the impl section with the #[odra::module] macro. Odra will take all +pub functions from this section and create contract endpoints from them. So, if you wish to have +functions that are not available for calling outside the contract, do not make them public. Alternatively, +you can create a separate impl section without the macro - all functions defined there, even marked +with pub will be not callable.

    The #[odra(init)] macro marks the constructor of the contract. This function will be limited to only +to a single call, all further calls to it will result in an error.

    flipper.rs
        ...
    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }
    ...

    The endpoints above show you how to interact with the simplest type of storage - Variable<T>. The data +saved there using set function will be persisted in the blockchain.

    Tests

    flipper.rs
    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }
    ...

    You can write tests in any way you prefer and know in Rust. In the example above we are deploying the +contract using FlipperDeployer - a piece of code generated automatically thanks to the macros. +The contract will be deployed on the VM you chose while running cargo odra test.

    What's next

    Now let's take a look at the different types of storage that Odra provides and how to use them.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/modules/index.html b/docs/docs/0.5.0/basics/modules/index.html new file mode 100644 index 000000000..e14e29c4f --- /dev/null +++ b/docs/docs/0.5.0/basics/modules/index.html @@ -0,0 +1,20 @@ + + + + + +Modules | Odra + + + + + +
    +
    Version: 0.5.0

    Modules

    Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you +write is also a module, thanks to a macro #[odra::module]. This means that we can easily rewrite our math +example from the previous article, to use a single contract, but still separate our "math" code:

    examples/src/features/modules.rs
    use crate::features::cross_calls::MathEngine;

    #[odra::module]
    pub struct ModulesContract {
    pub math_engine: MathEngine,
    }

    #[odra::module]
    impl ModulesContract {
    pub fn add_using_module(&self) -> u32 {
    self.math_engine.add(3, 5)
    }
    }

    Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as +a module!

    info

    To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!

    Testing

    As we don't need to hold addresses, the test is really simple:

    examples/src/features/modules.rs
    use super::ModulesContractDeployer;

    #[test]
    fn test_modules() {
    let modules_contract = ModulesContractDeployer::default();
    assert_eq!(modules_contract.add_using_module(), 8);
    }

    What's next

    We will see how to handle native token transfers.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/native-token/index.html b/docs/docs/0.5.0/basics/native-token/index.html new file mode 100644 index 000000000..365a83b5f --- /dev/null +++ b/docs/docs/0.5.0/basics/native-token/index.html @@ -0,0 +1,26 @@ + + + + + +Native token | Odra + + + + + +
    +
    Version: 0.5.0

    Native token

    Different blockchains come with different implementations of their native tokens. Odra wraps it all for you +in easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit +their funds and anyone can withdraw them:

    examples/src/features/native_token.rs
    use odra::types::Balance;
    use odra::contract_env;

    #[odra::module]
    pub struct PublicWallet {
    }

    #[odra::module]
    impl PublicWallet {
    #[odra(payable)]
    pub fn deposit(&mut self) {
    }

    pub fn withdraw(&mut self, amount: Balance) {
    contract_env::transfer_tokens(contract_env::caller(), amount);
    }
    }
    danger

    The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make +any checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is +even possible.

    To see a more reasonable example, check out examples/src/tlw.rs in the odra main repository.

    You can see a new macro used here: #[odra(payable)] - it will add all the code needed for a function to +be able to receive the funds. Additionally, we are using a new function from contract_env - transfer_tokens. +It does exactly what you are expecting it to do - it will transfer native tokens from the contract to the +specified address.

    We are also using the Balance - an Odra type that wraps around the type that the underlying blockchain uses +for counting tokens.

    Testing

    To be able to test how many tokens a contract (or any address) has, test_env comes with a function - +token_balance:

    examples/src/features/native_token.rs
    use odra::types::Balance;
    use odra::test_env;
    use super::PublicWalletDeployer;

    #[test]
    fn test_modules() {
    let mut my_contract = PublicWalletDeployer::default();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());

    my_contract.with_tokens(Balance::from(100)).deposit();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));

    my_contract.withdraw(Balance::from(25));
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/odra-toml/index.html b/docs/docs/0.5.0/basics/odra-toml/index.html new file mode 100644 index 000000000..a6b54a9f2 --- /dev/null +++ b/docs/docs/0.5.0/basics/odra-toml/index.html @@ -0,0 +1,23 @@ + + + + + +Odra.toml | Odra + + + + + +
    +
    Version: 0.5.0

    Odra.toml

    As mentioned in the previous article, Odra.toml is a file that contains information about all the contracts +that Odra will build. Let's take a look at the file structure again:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    The name will be used as a name for the contract - the generated wasm file will be in the above case named +flipper.wasm.

    The fqn (Fully Qualified Name) is used by the builder to locate the exact struct where +the contract is defined.

    Adding a new contract manually

    Besides using the cargo odra generate command, you can add a new contract to be compiled by hand. +To do this, add another [[contracts]] element, name it and make sure that the fqn is set correctly.

    For example, if you want to create a new contract called counter, your Odra.toml file should finally +look like this:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    [[contracts]]
    name = "counter"
    fqn = "sample::Counter"

    What's next

    In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous +Flipper contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/storage-interaction/index.html b/docs/docs/0.5.0/basics/storage-interaction/index.html new file mode 100644 index 000000000..f3bf2af05 --- /dev/null +++ b/docs/docs/0.5.0/basics/storage-interaction/index.html @@ -0,0 +1,36 @@ + + + + + +Storage interaction | Odra + + + + + +
    +
    Version: 0.5.0

    Storage interaction

    The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go +through all of them and explain their pros and cons.

    Variable

    The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your +variable in the Variable type. Let's look at a "real world" example of a contract that represents a dog:

    examples/src/features/storage/variable.rs
    #[odra::module]
    pub struct DogContract {
    barks: Variable<bool>,
    weight: Variable<u32>,
    name: Variable<String>,
    walks: Variable<Vec<u32>>,
    }

    You can see the Variable wrapping the data. Even complex types like Vec can be wrapped (with some caveats)!

    Let's make this contract usable, by providing a constructor and some getter functions:

    examples/src/features/storage/variable.rs
    use odra::Variable;

    #[odra::module]
    impl DogContract {
    #[odra(init)]
    pub fn init(&mut self, barks: bool, weight: u32, name: String) {
    self.barks.set(barks);
    self.weight.set(weight);
    self.name.set(name);
    self.walks.set(Vec::<u32>::default());
    }

    pub fn barks(&self) -> bool {
    self.barks.get_or_default()
    }

    pub fn weight(&self) -> u32 {
    self.weight.get_or_default()
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.len() as u32
    }

    pub fn walks_total_length(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.iter().sum()
    }
    }

    As you can see, you can access the data, by using get_or_default function:

    examples/src/features/storage/variable.rs
    ...
    self.barks.get_or_default()
    ...
    note

    Keep in mind that using get() will result in an Option that you'll need to unwrap - the variable +doesn't have to be initialized!

    To modify the data, use the set() function:

    examples/src/features/storage/variable.rs
    self.barks.set(barks);

    A Variable is easy to use and efficient for simple data types. One of its downsides is that it +serializes the data as a whole, so when you're using complex types like Vec or HashMap, +each time you get or set the whole data is read and written to the blockchain storage.

    In the example above, if we want to see how many walks our dog had, we would use the function:

    examples/src/features/storage/variable.rs
    pub fn walks_amount(&self) -> usize {
    let walks = self.walks.get_or_default();
    walks.len()
    }

    But to do so, we need to extract the whole serialized vector from the storage, which would inefficient, +especially for larger sets of data.

    To tackle this issue following two types were created.

    Mapping

    The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to +pass two values - the key type and the value type. Let's look at the variation of the Dog contract, that +uses Mapping to store information about our dog's friends and how many times they visited:

    examples/src/features/storage/mapping.rs
    use odra::{Mapping, Variable};

    #[odra::module]
    pub struct DogContract2 {
    name: Variable<String>,
    friends: Mapping<String, u32>,
    }

    In the example above, our key is a String (it is a name of the friend) and we are storing u32 values +(amount of visits). To read and write values from and into a Mapping we use a similar approach +to the one shown in the Variables section with one difference - we need to pass a key:

    examples/src/features/storage/mapping.rs
    pub fn visit(&mut self, friend_name: String) {
    let visits = self.visits(friend_name.clone());
    self.friends.set(&friend_name, visits + 1);
    }

    pub fn visits(&self, friend_name: String) -> u32 {
    self.friends.get_or_default(&friend_name)
    }

    The biggest improvement over a Variable is that we can model functionality of a HashMap using Mapping. +The amount of data written to and read from the storage is minimal. However, we cannot iterate over Mapping. +We could implement such behavior by using a numeric type key and saving the length of the set in a +separate variable. Thankfully Odra comes with a prepared solution - the List type.

    note

    If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with +a Variable working together:

    core/src/list.rs
    use odra::{Variable, List};

    pub struct List<T> {
    values: Mapping<u32, T>,
    index: Variable<u32>
    }

    List

    Going back to our DogContract example - let's revisit the walk case. This time, instead of Vec, +we'll use the list:

    examples/src/features/storage/list.rs
    #[odra::module]
    pub struct DogContract3 {
    name: Variable<String>,
    walks: List<u32>,
    }

    As you can see, the notation is very similar to the Vec. To understand the usage, take a look +at the reimplementation of the functions with an additional function that takes our dog for a walk +(it writes the data to the storage):

    examples/src/features/storage/list.rs
    #[odra::module]
    impl DogContract3 {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    self.walks.len()
    }

    pub fn walks_total_length(&self) -> u32 {
    self.walks.iter().sum()
    }

    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }
    }

    Now, we can know how many walks our dog had without loading the whole vector from the storage. +We need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all +the cases for you.

    info

    All of the above examples, alongside the tests, are available in the odra repository in the examples/src/docs/ folder.

    Custom Types

    By default you can store only built-in types like numbers, Options, Results, Strings, Vectors.

    Implementing custom types is straightforward, your type must derive from OdraType:

    use odra::{Address, OdraType};

    #[derive(OdraType)]
    pub struct Dog {
    pub name: String,
    pub age: u8,
    pub owner: Option<Address>
    }
    note

    Each field of your struct must be an OdraType.

    What's next

    In the next article, we'll see how to query the host for information about the world and our contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/basics/testing/index.html b/docs/docs/0.5.0/basics/testing/index.html new file mode 100644 index 000000000..193a9596c --- /dev/null +++ b/docs/docs/0.5.0/basics/testing/index.html @@ -0,0 +1,32 @@ + + + + + +Testing | Odra + + + + + +
    +
    Version: 0.5.0

    Testing

    Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write +regular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the +previous article:

    examples/src/features/storage/list.rs
    use odra::{Variable, List};

    #[cfg(test)]
    mod tests {
    use super::DogContract3Deployer;

    #[test]
    fn init_test() {
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());
    assert_eq!(dog_contract.walks_amount(), 0);
    assert_eq!(dog_contract.walks_total_length(), 0);
    dog_contract.walk_the_dog(5);
    dog_contract.walk_the_dog(10);
    assert_eq!(dog_contract.walks_amount(), 2);
    assert_eq!(dog_contract.walks_total_length(), 15);
    }
    }

    The #[odra(module)] macro created a Deployer code for us, which will deploy the contract on the +VM:

    examples/src/features/storage/list.rs
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());

    From now on, we can use dog_contract to interact with our deployed contract - in particular, all +pub functions from the impl section that was annotated with a macro are available to us:

    examples/src/features/storage/list.rs
    // Impl
    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }

    ...

    // Test
    dog_contract.walk_the_dog(5);

    Test env

    Odra gives us some additional functions that we can use to communicate with the host (outside the contract context) +and to configure how the contracts are deployed and called. Let's revisit the example from the previous +article about host communication and implement the tests that prove it works:

    examples/src/features/testing.rs
    #[cfg(test)]
    mod tests {
    use super::TestingContractDeployer;

    #[test]
    fn test_env() {
    let testing_contract = TestingContractDeployer::init("MyContract".to_string());
    let creator = testing_contract.created_by();
    odra::test_env::set_caller(odra::test_env::get_account(1));
    let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());
    let creator2 = testing_contract2.created_by();
    assert!(creator != creator2);
    }
    }

    In the code above, we are deploying two instances of the same contract, but we're using odra::test_env::set_caller +to change the caller - so the Address which is deploying the contract. This changes the result of the odra::contract_env::caller() +the function we are calling inside the contract.

    Each test env comes with a set of functions that will let you write better tests:

    • fn set_caller(address: Address) - you've seen it in action just now
    • fn token_balance(address: Address) -> Balance - it returns the balance of the account associated with the given address
    • fn advance_block_time_by(seconds: BlockTime) - it increases the current value of block_time
    • fn get_account(n: usize) -> Address - it returns an nth address that was prepared for you by Odra in advance; +by default, you start with the 0th account
    • fn assert_exception<F, E>(err: E, block: F) - it executes the block code and expects err to happen
    • fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError> - returns +the event emitted by the contract

    Again, we'll see those used in the next articles.

    Deployer

    You may be wondering what is the TestingContractDeployer and where did it come from. +It is a piece of code generated automatically for you, thanks to the #[odra::module] macro. +If you used the #[odra(init)] on one of the methods, it will be the constructor of your contract. +Odra will make sure that it is called only once, so you can use it to initialize your data structures etc.

    If you do not provide the init method, you can deploy the contract using ::default() method. +In the end, you will get a Ref instance (in our case the TestingContractRef) which reimplements all +the methods you defined in the contract, but executes them on a blockchain!

    To learn more about the Ref contract, visit the Cross calls article.

    What's next

    We take a look at how Odra handles errors!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/category/advanced/index.html b/docs/docs/0.5.0/category/advanced/index.html new file mode 100644 index 000000000..b58405cbc --- /dev/null +++ b/docs/docs/0.5.0/category/advanced/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced | Odra + + + + + +
    +
    Version: 0.5.0

    Advanced

    Advanced concepts of Odra Framework

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/category/backends/index.html b/docs/docs/0.5.0/category/backends/index.html new file mode 100644 index 000000000..3900b5c47 --- /dev/null +++ b/docs/docs/0.5.0/category/backends/index.html @@ -0,0 +1,17 @@ + + + + + +Backends | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/category/basics/index.html b/docs/docs/0.5.0/category/basics/index.html new file mode 100644 index 000000000..3e094bc69 --- /dev/null +++ b/docs/docs/0.5.0/category/basics/index.html @@ -0,0 +1,17 @@ + + + + + +Basics | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/category/examples/index.html b/docs/docs/0.5.0/category/examples/index.html new file mode 100644 index 000000000..873a8123a --- /dev/null +++ b/docs/docs/0.5.0/category/examples/index.html @@ -0,0 +1,17 @@ + + + + + +Examples | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/category/getting-started/index.html b/docs/docs/0.5.0/category/getting-started/index.html new file mode 100644 index 000000000..e855aa4da --- /dev/null +++ b/docs/docs/0.5.0/category/getting-started/index.html @@ -0,0 +1,17 @@ + + + + + +Getting started | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/category/tutorials/index.html b/docs/docs/0.5.0/category/tutorials/index.html new file mode 100644 index 000000000..ad99f4bb2 --- /dev/null +++ b/docs/docs/0.5.0/category/tutorials/index.html @@ -0,0 +1,17 @@ + + + + + +Tutorials | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/examples/odra-examples/index.html b/docs/docs/0.5.0/examples/odra-examples/index.html new file mode 100644 index 000000000..48497fe18 --- /dev/null +++ b/docs/docs/0.5.0/examples/odra-examples/index.html @@ -0,0 +1,17 @@ + + + + + +odra-examples | Odra + + + + + +
    +
    Version: 0.5.0

    odra-examples

    Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.

    The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.

    Don't worry if you find learning solely by reading the code challenging. Go to the Tutorial section, where we will review it together. We will break the code into pieces, leaving no space for further questions.

    What's next

    Read the next article to learn about reusable Odra components encapsulated in odra-modules.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/examples/using-odra-modules/index.html b/docs/docs/0.5.0/examples/using-odra-modules/index.html new file mode 100644 index 000000000..69a614d5f --- /dev/null +++ b/docs/docs/0.5.0/examples/using-odra-modules/index.html @@ -0,0 +1,21 @@ + + + + + +Using odra-modules | Odra + + + + + +
    +
    Version: 0.5.0

    Using odra-modules

    Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.

    If you followed the Installation guide your Cargo.toml should look like:

    Cargo.toml
    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    To use odra-modules, edit your dependency and features sections.

    Cargo.toml
    [dependencies]
    odra = { path = "../core", default-features = false }
    odra-modules = { path = "../modules", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]
    casper = ["odra/casper", "odra-modules/casper"]
    danger

    odra-modules defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a casper feature in your project, add odra-modules/casperspecifically (it applies to each backend).

    Now, the only thing left is to add a module to your contract.

    Let's write an example of MyToken based on Erc20 module.

    use odra::types::{Address, U256};
    use odra_modules::erc20::Erc20;

    #[odra::module]
    pub struct MyToken {
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, initial_supply: U256) {
    let name = String::from("MyToken");
    let symbol = String::from("MT");
    let decimals = 9u8;
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    self.erc20.approve(spender, amount);
    }
    }
    info

    All available modules are placed in the main Odra repository.

    Available modules

    Odra modules comes with couple of ready-to-use modules and reusable extensions.

    Tokens

    Erc20

    The Erc20 module implements the ERC20 standard.

    Erc721

    The Erc721Base module implements the ERC721 standard, adjusted for the Odra framework.

    The Erc721Token module implements the ERC721Base and additionally uses +the Erc721Metadata and Ownable extensions.

    The Erc721Receiver trait lets you implement your own logic for receiving NFTs.

    The OwnedErc721WithMetadata trait is a combination of Erc721Token, Erc721Metadata and Ownable modules.

    Erc1155

    The Erc1155Base module implements the ERC1155 standard, adjusted for the Odra framework.

    The Erc1155Token module implements the ERC1155Base and additionally uses the Ownable extension.

    The OwnedErc1155 trait is a combination of Erc1155Token and Ownable modules.

    Wrapped native token

    The WrappedNativeToken module implements the Wrapper for the native token, +it was inspired by the WETH.

    Access

    AccessControl

    This module enables the implementation of role-based access control mechanisms for children +modules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API.

    Ownable

    This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner.

    The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the +transfer_ownership() function.

    Ownable2Step

    An extension of the Ownable module.

    Ownership can be transferred in a two-step process by using transfer_ownership() and accept_ownership() functions.

    Security

    Pauseable

    A module allowing to implement an emergency stop mechanism that can be triggered by any account.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/getting-started/flipper/index.html b/docs/docs/0.5.0/getting-started/flipper/index.html new file mode 100644 index 000000000..b08a0dd1c --- /dev/null +++ b/docs/docs/0.5.0/getting-started/flipper/index.html @@ -0,0 +1,18 @@ + + + + + +Flipper example | Odra + + + + + +
    +
    Version: 0.5.0

    Flipper example

    To quickly start working with Odra, take a look at the following code sample. If you followed the +Installation tutorial, you should have this file already at src/flipper.rs.

    For further explanation of how this code works, see Flipper Internals.

    Let's flip

    flipper.rs
    use odra::Variable;

    /// A module definition. Each module struct consists Variables and Mappings
    /// or/and another modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }

    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    /// Retrieves value from the storage.
    /// If the value has never been set, the default value is returned.
    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }

    #[test]
    fn test_two_flippers() {
    let mut contract1 = FlipperDeployer::initial_settings();
    let contract2 = FlipperDeployer::initial_settings();
    assert!(!contract1.get());
    assert!(!contract2.get());
    contract1.flip();
    assert!(contract1.get());
    assert!(!contract2.get());
    }
    }

    What's next

    In the next category of articles, we will go through basic concepts of Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/getting-started/installation/index.html b/docs/docs/0.5.0/getting-started/installation/index.html new file mode 100644 index 000000000..09583754c --- /dev/null +++ b/docs/docs/0.5.0/getting-started/installation/index.html @@ -0,0 +1,22 @@ + + + + + +Installation | Odra + + + + + +
    +
    Version: 0.5.0

    Installation

    Hello fellow Odra user! This page will guide you through the installation process.

    Prerequisites

    To start working with Odra, you need to have the following installed on your machine:

    • Rust toolchain installed (see rustup.rs)
    • wasmstrip tool installed (see wabt)

    We do not provide exact commands for installing these tools, as they are different for different operating systems. +Please refer to the documentation of the tools themselves.

    With Rust toolchain ready, you can add a new target:

    rustup target add wasm32-unknown-unknown
    note

    wasm32-unknown-uknown is a target that will be used by Odra to compile your smart contracts to WASM files.

    Installing Cargo Odra

    Cargo Odra is a helpful tool that will help you to build and test your smart contracts. +It is not required to use Odra, but the documentation will assume that you have it installed.

    To install it, simply execute the following command:

    cargo install cargo-odra

    To check if it was installed correctly and see available commands, type:

    cargo odra --help

    If everything went fine, we can proceed to the next step.

    Creating a new Odra project

    To create a new project, simply execute:

    cargo odra new --name my-project && cd my_project

    This will create a new folder called "my_project" and initialize Odra there. Cargo Odra +will create a sample contract for you in src directory. You can run the tests of this contract +by executing:

    cargo odra test

    This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:

    cargo odra test -b casper

    Congratulations! Now you are ready to create contracts using Odra framework! If you had any problems during +the installation process, feel free to ask for help on our Discord.

    What's next?

    If you want to see the code that you just tested, continue to the description of Flipper example.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/index.html b/docs/docs/0.5.0/index.html new file mode 100644 index 000000000..6b128510d --- /dev/null +++ b/docs/docs/0.5.0/index.html @@ -0,0 +1,25 @@ + + + + + +Odra framework | Odra + + + + + +
    +
    Version: 0.5.0

    Odra framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, +pragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract +development, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open +source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. We can do it +by abstracting over core concepts that all the above systems are built around. These are type system, +storage, entry points, execution context, and testing environment. We believe it will bring standardization +to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this +ecosystem.

    What's next

    See the Installation and our Flipper example +to find out how to start your new project with Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/tutorials/erc20/index.html b/docs/docs/0.5.0/tutorials/erc20/index.html new file mode 100644 index 000000000..6555930f2 --- /dev/null +++ b/docs/docs/0.5.0/tutorials/erc20/index.html @@ -0,0 +1,17 @@ + + + + + +ERC-20 | Odra + + + + + +
    +
    Version: 0.5.0

    ERC-20

    It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.

    The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • advanced storage - key-value pairs,
    • Odra types like Address or Balance,
    • advanced events assertion.

    Code

    Our module has a pretty complex storage layout in comparison to the previous example.

    We need to store the following data:

    1. Immutable metadata - name, symbol and decimals.
    2. Total supply.
    3. Users' balances.
    4. Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.

    Module definition

    #[odra::module(events = [Transfer, Approval])]
    pub struct Erc20 {
    decimals: Variable<u8>,
    symbol: Variable<String>,
    name: Variable<String>,
    total_supply: Variable<Balance>,
    balances: Mapping<Address, Balance>,
    allowances: Mapping<Address, Mapping<Address, Balance>>
    }
    • L6 - For the first time, we need to store key-value pairs. In order to do that, we use Mapping. The name is taken after Solidity's native type mapping. You may notice the balances property maps Address to Balance. If you deal with addresses or you operate on tokens, you should always choose Address over String and Balance over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform.
    • L7 - Odra allows nested Mappings, what we utilize to store allowances.

    Metadata

    #[odra::module]
    impl Erc20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn symbol(&self) -> String {
    self.symbol.get_or_default()
    }

    pub fn decimals(&self) -> u8 {
    self.decimals.get_or_default()
    }

    pub fn total_supply(&self) -> Balance {
    self.total_supply.get_or_default()
    }
    }

    impl Erc20 {
    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.balances.add(address, *amount);
    self.total_supply.add(amount);
    Transfer {
    from: None,
    to: Some(*address),
    amount: *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Transfer {
    pub from: Option<Address>,
    pub to: Option<Address>,
    pub amount: Balance
    }
    • L1 - The first impl block, marked as a module, contains functions defined in the ERC-20 standard.
    • L3-L10 - A constructor sets the token metadata and mints the initial supply.
    • L12-L14 - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the Ownable example, we used the get() function returning an Option<T>. If the type implements Default trait, you can call get_or_default() function and the contract does not fail even if the value is not initialized.
    • L29 - The second impl is not an odra module, in other words these function will not be a part of contract's ABI.
    • L30-L39 - Mint function is public, so like in a regular rust code will be accessible from the outside. mint() use notation self.balances.add(&address, amount);, which it is syntactic sugar for:
    let current_balance = self.balances.get(&address).unwrap_or_default();
    let new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();
    self.balances.set(&address, new_balance);

    Core

    For the sake of completeness, let's implement the remaining functionalities like transfer, transfer_from, or approve. They are not introducing any new concepts, so we leave them without additional remarks.

    erc20.rs
    #[odra::module]
    impl Erc20 {
    ...
    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    let caller = contract_env::caller();
    self.raw_transfer(&caller, recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let spender = contract_env::caller();
    self.spend_allowance(owner, &spender, amount);
    self.raw_transfer(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    let owner = contract_env::caller();
    self.allowances.get_instance(&owner).set(spender, *amount);
    Approval {
    owner,
    spender: *spender,
    value: *amount
    }
    .emit();
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.balances.get_or_default(&address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.allowances.get_instance(owner).get_or_default(spender)
    }
    }

    impl Erc20 {
    ...

    fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let owner_balance = self.balances.get_or_default(&owner);
    if *amount > owner_balance {
    contract_env::revert(Error::InsufficientBalance)
    }
    self.balances.set(owner, owner_balance - *amount);
    self.balances.add(recipient, *amount);
    Transfer {
    from: Some(*owner),
    to: Some(*recipient),
    amount: *amount
    }
    .emit();
    }

    fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {
    let allowance = self.allowances.get_instance(owner).get_or_default(spender);
    if allowance < *amount {
    contract_env::revert(Error::InsufficientAllowance)
    }
    let new_allowance = allowance - *amount;
    self.allowances
    .get_instance(owner)
    .set(spender, new_allowance);
    Approval {
    owner: *owner,
    spender: *spender,
    value: allowance - *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Approval {
    pub owner: Address,
    pub spender: Address,
    pub value: U256
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Now, compare the code we have written, with Open Zeppelin code. Out of 10, how Solidity-ish is our implementation?

    Test

    erc20.rs
    #[cfg(test)]
    pub mod tests {
    use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};
    use odra::{assert_events, test_env, types::U256};

    pub const NAME: &str = "Plascoin";
    pub const SYMBOL: &str = "PLS";
    pub const DECIMALS: u8 = 10;
    pub const INITIAL_SUPPLY: u32 = 10_000;

    pub fn setup() -> Erc20Ref {
    Erc20Deployer::init(
    String::from(NAME),
    String::from(SYMBOL),
    DECIMALS,
    INITIAL_SUPPLY.into()
    )
    }

    #[test]
    fn initialization() {
    let erc20 = setup();

    assert_eq!(&erc20.symbol(), SYMBOL);
    assert_eq!(&erc20.name(), NAME);
    assert_eq!(erc20.decimals(), DECIMALS);
    assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());
    assert_events!(
    erc20,
    Transfer {
    from: None,
    to: Some(test_env::get_account(0)),
    amount: INITIAL_SUPPLY.into()
    }
    );
    }

    #[test]
    fn transfer_works() {
    let mut erc20 = setup();
    let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    erc20.transfer(&recipient, &amount);

    assert_eq!(
    erc20.balance_of(&sender),
    U256::from(INITIAL_SUPPLY) - amount
    );
    assert_eq!(erc20.balance_of(&recipient), amount);
    assert_events!(
    erc20,
    Transfer {
    from: Some(sender),
    to: Some(recipient),
    amount
    }
    );
    }

    #[test]
    fn transfer_error() {
    let mut erc20 = setup();
    let recipient = test_env::get_account(1);
    let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);

    test_env::assert_exception(Error::InsufficientBalance, || {
    erc20.transfer(&recipient, &amount)
    });
    }

    #[test]
    fn transfer_from_and_approval_work() {
    let mut erc20 = setup();
    let (owner, recipient, spender) = (
    test_env::get_account(0),
    test_env::get_account(1),
    test_env::get_account(2)
    );
    let approved_amount = 3_000.into();
    let transfer_amount = 1_000.into();

    // Owner approves Spender.
    erc20.approve(&spender, &approved_amount);

    // Allowance was recorded.
    assert_eq!(erc20.allowance(&owner, &spender), approved_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount
    }
    );

    // Spender transfers tokens from Owner to Recipient.
    test_env::set_caller(spender);
    erc20.transfer_from(&owner, &recipient, &transfer_amount);

    // Tokens are transferred and allowance decremented.
    assert_eq!(
    erc20.balance_of(&owner),
    U256::from(INITIAL_SUPPLY) - transfer_amount
    );
    assert_eq!(erc20.balance_of(&recipient), transfer_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount - transfer_amount
    },
    Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount: transfer_amount
    }
    );

    assert_events!(erc20, Approval, Transfer);
    }

    #[test]
    fn transfer_from_error() {
    let mut erc20 = setup();
    let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    test_env::set_caller(spender);
    test_env::assert_exception(Error::InsufficientAllowance, || {
    erc20.transfer_from(&owner, &spender, &amount)
    });
    }
    }
    • L111-123 - assert_events!() macro accepts multiple events. You must pass them in the order they were emitted.
    • L125 - Alternatively, if you don't want to check the entire event, you may assert only its type.
    danger

    You can not mix both approaches, you pass full events or types only.

    What's next

    Having two modules: Ownable and Erc20, let's combine them, and create an ERC-20 on steroids.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/tutorials/ownable/index.html b/docs/docs/0.5.0/tutorials/ownable/index.html new file mode 100644 index 000000000..63547e525 --- /dev/null +++ b/docs/docs/0.5.0/tutorials/ownable/index.html @@ -0,0 +1,17 @@ + + + + + +Ownable | Odra + + + + + +
    +
    Version: 0.5.0

    Ownable

    In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • storing a single value,
    • defining constructors,
    • error handling,
    • defining and emitting events.
    • registering a contact in a test environment,
    • interactions with the test environment,
    • assertions (value, events, errors assertions).

    Code

    Before we write any code, we define functionalities we would like to implement.

    1. Module has an initializer that should be called once.
    2. Only the current owner can set a new owner.
    3. Read the current owner.
    4. A function that fails if called by a non-owner account.

    Define a module

    use odra::{types::Address, Variable};

    #[odra::module]
    pub struct Ownable {
    owner: Variable<Address>
    }

    That was easy, but it is crucial to understand the basic before we move on.

    • L3 - Firstly, we need create a struct called Ownable and apply #[odra::module] to it above.
    • L5 - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with Variable.

    Init the module

    use odra::{
    execution_error, contract_env, Event, types::{Address, event::OdraEvent}
    };
    ...

    #[odra::module]
    impl Ownable {
    #[odra(init)]
    pub fn init(&mut self, owner: &Address) {
    if self.owner.get().is_some() {
    contract_env::revert(Error::OwnerIsAlreadyInitialized)
    }

    self.owner.set(*owner);

    OwnershipChanged {
    prev_owner: None,
    new_owner: *owner
    }
    .emit();
    }
    }

    execution_error! {
    pub enum Error {
    OwnerIsNotInitialized => 1,
    }
    }

    #[derive(Event, Debug, PartialEq, Eq)]
    pub struct OwnershipChanged {
    pub prev_owner: Option<Address>,
    pub new_owner: Address
    }

    Ok, we have done a couple of things, let's analyze them one by one:

    • L5 - The impl should be an odra module, so add #[odra::module].
    • L7 - The init function is marked as #[odra(init)] making it a constructor. It matters if we would like to deploy the Ownable module as a standalone contract.
    • L23 - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an Error enum. Notice that the Error enum is defined inside the execution_error macro. It generates, among others, the required Into<ExecutionError> binding.
    • L9-L11 - If the owner has been set already, we call contract_env::revert() function. As an argument we pass Error::OwnerIsNotInitialized.
    • L13 - Then we write the owner passed as an argument to the storage. To do so we call the set() on Variable.
    • L29-L33 - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from odra::Event. We highly recommend to derive Debug, PartialEq and Eq for testing purpose.
    • L23 - Finally, we create the OwnershipChanged struct and call emit() function on it (import odra::types::event::OdraEvent trait). Hence we set the first owner, we set the prev_owner value to None.

    Features implementation

    #[odra::module]
    impl Ownable {
    ...

    pub fn ensure_ownership(&self, address: &Address) {
    if Some(address) != self.owner.get().as_ref() {
    contract_env::revert(Error::NotOwner)
    }
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ensure_ownership(&contract_env::caller());
    let current_owner = self.get_owner();
    self.owner.set(*new_owner);
    OwnershipChanged {
    prev_owner: Some(current_owner),
    new_owner: *new_owner
    }
    .emit();
    }

    pub fn get_owner(&self) -> Address {
    match self.owner.get() {
    Some(owner) => owner,
    None => contract_env::revert(Error::OwnerIsNotInitialized)
    }
    }
    }

    execution_error! {
    pub enum Error {
    NotOwner => 1,
    OwnerIsAlreadyInitialized => 2,
    OwnerIsNotInitialized => 3,
    }
    }

    The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along.

    • L5,L32 - ensure_ownership() is reads the current owner, and reverts if is does not match the input Address. Also we need to update our Error enum adding a new variant NotOwner.
    • L11 - The function defined above can be reused in change_ownership() implementation. We pass to it the current caller, using the contract_env::caller() function. The we update the state, and emit OwnershipChanged.
    • L22,L34 - Lastly, a getter function. As the Variable get() function returns an Option, we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new Error variant OwnerIsNotInitialized.

    Test

    #[cfg(test)]
    mod tests {
    use super::*;
    use odra::{assert_events, test_env};

    fn setup() -> (Address, OwnableRef) {
    let owner = test_env::get_account(0);
    let ownable = OwnableDeployer::init(owner);
    (owner, ownable)
    }

    #[test]
    fn initialization_works() {
    let (owner, ownable) = setup();
    assert_eq!(ownable.get_owner(), owner);

    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    );
    }

    #[test]
    fn owner_can_change_ownership() {
    let (owner, mut ownable) = setup();
    let new_owner = test_env::get_account(1);

    test_env::set_caller(owner);
    ownable.change_ownership(&new_owner);
    assert_eq!(ownable.get_owner(), new_owner);
    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: Some(owner),
    new_owner
    }
    );
    }

    #[test]
    fn non_owner_cannot_change_ownership() {
    let (_, mut ownable) = setup();
    let new_owner = test_env::get_account(1);
    ownable.change_ownership(&new_owner);

    test_env::assert_exception(Error::NotOwner, || {
    ownable.change_ownership(&new_owner);
    });
    }
    }
    • L6 - Each test case starts with the same initialization process, so for convenience, we defined the setup() function we call as the first statement in each test. Take a look at the signature fn setup() -> (Address, OwnableRef). OwnableRef is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ensure_ownership(), change_ownership(), get_owner(), but not init() which is a constructor.
    • L7 - Now, the module needs an owner, the easiest way is to take one from the test_env. We choose the address of first account (which is the default one).
    • L8 - Odra created for us OwnableDeployer struct which implements all constructor functions. In this case there is just one function - init() which corresponds the function we have implemented in the module.
    • L12 - It is time to define the first test. As you see, it is a regular rust test.
    • L14-15 - Using the setup() function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.
      note

      You may have noticed, we use here the term module interchangeably with contract. The reason is once we deploy our module onto a virtual blockchain it may be considered a contract.

    • L17-23 - On the contract, only the init() function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro assert_events. As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred.
    • L30 - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the test env predefines 20 accounts.
    • L32 - As mentioned, the default is the 0-th account, if you want to change the executor call the test_env::set_caller() function.
      note

      The caller switch applies only the next contract interaction, the second call will be done as the default account.

    • L49-55 - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call test_env::assert_exception() with the error you expect and a failing block of code.

    Summary

    The Ownable module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract.

    What's next

    In the next tutorial we will implement a ERC20 standard.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.5.0/tutorials/owned-token/index.html b/docs/docs/0.5.0/tutorials/owned-token/index.html new file mode 100644 index 000000000..e1bd3ec05 --- /dev/null +++ b/docs/docs/0.5.0/tutorials/owned-token/index.html @@ -0,0 +1,17 @@ + + + + + +OwnedToken | Odra + + + + + +
    +
    Version: 0.5.0

    OwnedToken

    This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.

    Code

    What should our module be capable of?

    1. Conform the Erc20 interface.
    2. Allow minting tokens but only the module owner.
    3. The current owner should be able to designate a new owner.

    Module definition

    Let's define a module called OwnedToken that is a composition of Ownable and Erc20 modules.

    owned_token.rs
    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!

    Delegation

    owned_token.rs
    use odra::types::{Address, Balance}

    ...

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> Balance {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    self.erc20.approve(spender, amount);
    }

    pub fn get_owner(&self) -> Address {
    self.ownable.get_owner()
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ownable.change_ownership(new_owner);
    }

    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.ownable.ensure_ownership(&contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    Easy. However, there are a few worth mentioning subtleness:

    • L10-L11 - A constructor is a great place to init both modules at once.
    • L14-L16 - Most of the entrypoints do not need any modification, so we simply delegates them to the erc20 module.
    • L50-L52 - The same we do with the ownable module.
    • L58-L61 - Minting should not be unconditional, we need some control over it. First, using ownable we make sure the caller really is the owner.

    Summary

    The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/advanced/advanced-storage/index.html b/docs/docs/0.6.0/advanced/advanced-storage/index.html new file mode 100644 index 000000000..a5601145a --- /dev/null +++ b/docs/docs/0.6.0/advanced/advanced-storage/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced Storage Concepts | Odra + + + + + +
    +
    Version: 0.6.0

    Advanced Storage Concepts

    The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.

    Recap and Basic Concepts

    Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including Variable, Mapping, and List. These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values.

    Variable: A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract.

    Mapping: Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key.

    List: Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over.

    If you need a refresher on these topics, please refer to our guide on basic storage in Odra.

    Advanced Storage Concepts

    Sequence

    The Sequence in Odra is a basic module that holds a Variable which keeps track of the current value.

    pub struct Sequence<T>
    where
    T: Num + One + OdraType
    {
    value: Variable<T>
    }

    The Sequence module provides functions get_current_value and next_value to get the current value and increment the value respectively.

    Advanced Mapping

    In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility.

    Let's consider the following example:

    examples/src/features/storage/mapping.rs
    use odra::{map, types::U256, Mapping, UnwrapOrRevert};

    use crate::owned_token::OwnedToken;

    #[odra::module]
    pub struct NestedMapping {
    strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,
    tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>
    }

    #[odra::module]
    impl NestedMapping {

    ...

    pub fn set_token(
    &mut self,
    key1: String,
    key2: u32,
    key3: String,
    token_name: String,
    decimals: u8,
    symbol: String,
    initial_supply: &U256
    ) {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .init(token_name, symbol, decimals, initial_supply);
    }

    pub fn get_string_api(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    let mapping = self.strings.get_instance(&key1).get_instance(&key2);
    mapping.get(&key3).unwrap_or_revert()
    }

    pub fn total_supply(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> U256 {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .total_supply()
    }
    }
    note

    Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers.

    Instead of using the get() function, call get_instance(), which sets the correct namespace for nested modules.

    If the terminal value is deeply nested, a long chain of get_instance() calls is required.

    To keep the codebase consistent, a map! macro can be used:

    examples/src/features/storage/mapping.rs
    ...

    pub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {
    map!(self.strings[key1][key2][key3] = value);
    }

    pub fn get_string_macro(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    map!(self.strings[key1][key2][key3])
    }

    danger

    The terminal value must not be an Odra Module.

    AdvancedStorage Contract

    The given code snippet showcases the AdvancedStorage contract that incorporates these storage concepts.

    use odra::{Sequence, Mapping};
    use crate::modules::Token;

    #[odra::module]
    pub struct AdvancedStorage {
    my_sequence: Sequence<u32>,
    my_mapping: Mapping<String, Mapping<String, Token>>,
    }

    impl AdvancedStorage {
    pub fn get_sequence_current_value(&self) -> u32 {
    self.my_sequence.get_current_value()
    }

    pub fn next_sequence_value(&mut self) -> u32 {
    self.my_sequence.next_value()
    }

    pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.set(&inner_key, value);
    }

    pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.get(&inner_key)
    }
    }

    Conclusion

    Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/advanced/attributes/index.html b/docs/docs/0.6.0/advanced/attributes/index.html new file mode 100644 index 000000000..8e8191d8a --- /dev/null +++ b/docs/docs/0.6.0/advanced/attributes/index.html @@ -0,0 +1,19 @@ + + + + + +Attributes | Odra + + + + + +
    +
    Version: 0.6.0

    Attributes

    Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.

    Odra defines a few attributes that can be applied to functions to equip them with superpowers.

    Init

    If your contract needs initial setup, adding the #[odra(init)] attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed.

    It's important to note that a constructor function should not be invoked in any other context.

    Example

    examples/src/contracts/erc20.rs
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    Using

    An attribute applicable to struct fields. The using attribute accepts multiple values, separated by ,. +Each value attribute must point at an existing field.

    Example

    #[odra::module]
    struct Contract {
    access_control: AccessControl,
    meta: Metadata,
    #[odra(using = "access_control, meta")]
    // #[odra(using = "access_control, metadata")] - would not compile - `metadata` field does not exist
    storage: Storage
    }

    #[odra::module]
    struct AccessControl {
    owner: Variable<Address>
    }

    #[odra::module]
    struct Metadata {
    version: Variable<String>
    }

    #[odra::module]
    struct Storage {
    value: Variable<u8>,
    access_control: AccessControl,
    meta: Metadata
    }

    Payable

    When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the #[odra(payable)] attribute can send and take money in the form of native tokens.

    Example

    examples/src/contracts/tlw.rs
    #[odra(payable)]
    pub fn deposit(&mut self) {
    // Extract values
    let caller: Address = contract_env::caller();
    let amount: Balance = contract_env::attached_value();
    let current_block_time: BlockTime = contract_env::get_block_time();

    // Multiple lock check
    if self.balances.get(&caller).is_some() {
    contract_env::revert(Error::CannotLockTwice)
    }

    // Update state, emit event
    self.balances.set(&caller, amount);
    self.lock_expiration_map
    .set(&caller, current_block_time + self.lock_duration());
    Deposit {
    address: caller,
    amount
    }
    .emit();
    }

    If you try to send tokens to a non-payable function, the transaction will be automatically rejected.

    Non Reentrant

    Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds.

    To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts.

    They can also use reentrancy guards to block recursive calls to sensitive functions.

    In Odra you can just apply the #[odra(non_reentrant)] attribute to your function.

    Mixing attributes

    A function can accept more than one attribute. The only exclusion is a constructor cannot be payable. +To apply multiple attributes, you can write:

    #[odra(payable, non_reentrant)]
    fn deposit() {
    // your logic...
    }

    or

    #[odra(payable)]
    #[odra(non_reentrant)]
    fn deposit() {
    // your logic...
    }

    In both cases attributes order does not matter.

    However, a constructor cannot be payable, so the below code would not compile.

    #[odra(payable)]
    #[odra(init)]
    fn initialize() {
    // your logic...
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/advanced/delegate/index.html b/docs/docs/0.6.0/advanced/delegate/index.html new file mode 100644 index 000000000..8f0b2d101 --- /dev/null +++ b/docs/docs/0.6.0/advanced/delegate/index.html @@ -0,0 +1,17 @@ + + + + + +Delegate | Odra + + + + + +
    +
    Version: 0.6.0

    Delegate

    Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.

    The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable.

    Overview

    To utilize the delegate feature in your contract, use the delegate! macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the delegate! macro, your parent module remains clean and easy to understand.

    You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself.

    Code Examples

    Consider the following basic example for better understanding:

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);
    pub fn approve(&mut self, spender: Address, amount: U256);
    pub fn name(&self) -> String;
    pub fn symbol(&self) -> String;
    pub fn decimals(&self) -> u8;
    pub fn total_supply(&self) -> U256;
    pub fn balance_of(&self, owner: Address) -> U256;
    pub fn allowance(&self, owner: Address, spender: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    pub fn change_ownership(&mut self, new_owner: Address);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    This OwnedToken contract includes two modules: Erc20 and Ownable. We delegate various functions from both modules using the delegate! macro. As a result, the contract retains its succinctness without compromising on functionality.

    The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities.

    Let's take a look at another example.

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};

    #[odra::module]
    pub struct DeFiPlatform {
    ownable: Ownable,
    erc20: Erc20,
    exchange: Exchange
    }

    #[odra::module]
    impl DeFiPlatform {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    self.exchange.init(exchange_rate);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn balance_of(&self, owner: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    }

    to self.exchange {
    pub fn swap(&mut self, sender: Address, recipient: Address);
    pub fn set_exchange_rate(&mut self, new_rate: u64);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    In this DeFiPlatform contract, we include Erc20, Ownable, and Exchange modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure.

    Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/advanced/signatures/index.html b/docs/docs/0.6.0/advanced/signatures/index.html new file mode 100644 index 000000000..694498b03 --- /dev/null +++ b/docs/docs/0.6.0/advanced/signatures/index.html @@ -0,0 +1,29 @@ + + + + + +Signatures | Odra + + + + + +
    +
    Version: 0.6.0

    Signatures

    As each backend can use a different scheme for generating key pairs, +Odra Framework provides a generic function for signature verification inside the contract context. +Thanks to this, you can write your code once, without worrying about underlying cryptography.

    Signature verification

    Signature verification is conducted by a function in contract_env:

    pub fn verify_signature(message: &Bytes, signature: &Bytes, public_key: &PublicKey) -> bool;

    Here's the simplest example of this function used in a contract:

    examples/src/features/signature_verifier.rs
    #[odra::module]
    impl SignatureVerifier {
    pub fn verify_signature(
    &self,
    message: &Bytes,
    signature: &Bytes,
    public_key: &PublicKey
    ) -> bool {
    contract_env::verify_signature(message, signature, public_key)
    }
    }

    Testing

    Besides the above function in the contract context, Odra provides corresponding functions in the test_env:

    pub fn sign_message(message: &Bytes, address: &Address) -> Bytes;

    pub fn public_key(address: &Address) -> PublicKey;

    sign_message will return a signed message. The signing itself will be performed using a private key +of an account behind the address.

    public_key returns the PublicKey of an address account.

    Thanks to those, you can write generic tests, that will work with all backends, despite differences +in signature schemes they use.

    examples/src/features/signature_verifier.rs
    #[test]
    fn signature_verification_works() {
    let message = "Message to be signed";
    let message_bytes = &Bytes::from(message.as_bytes().to_vec());
    let account = test_env::get_account(0);

    let signature = test_env::sign_message(message_bytes, &account);

    let public_key = test_env::public_key(&account);

    let signature_verifier = SignatureVerifierDeployer::default();
    assert!(signature_verifier.verify_signature(message_bytes, &signature, &public_key));
    }

    If you want, you can also test signatures that were created outside Odra. +However, you will need to prepare separate tests for each backend:

    examples/src/features/signature_verifier.rs
    /// The following test checks that the signature verification works with the signature produced
    /// by the casper wallet.
    #[test]
    #[cfg(feature = "casper")]
    fn verify_signature_casper_wallet() {
    use odra::casper::casper_types::bytesrepr::FromBytes;
    // Casper Wallet for the message "Ahoj przygodo!" signed using SECP256K1 key
    // produces the following signature:
    // 1e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa
    // Casper Wallet adds "Casper Message:\n" prefix to the message:
    let message = "Casper Message:\nAhoj przygodo!";
    let message_bytes = &Bytes::from(message.as_bytes().to_vec());

    // Depending on the type of the key, we need to prefix the signature with a tag:
    // 0x01 for ED25519
    // 0x02 for SECP256K1
    let signature_hex = "021e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa";
    let signature: [u8; 65] = hex::decode(signature_hex).unwrap().try_into().unwrap();
    let signature_bytes = &Bytes::from(signature.to_vec());

    // Similar to the above, the public key is tagged:
    let public_key_hex = "02036d9b880e44254afaf34330e57703a63aec53b5918d4470059b67a4a906350105";
    let public_key_decoded = hex::decode(public_key_hex).unwrap();
    let (public_key, _) = odra::casper::casper_types::crypto::PublicKey::from_bytes(
    public_key_decoded.as_slice()
    )
    .unwrap();

    let signature_verifier = SignatureVerifierDeployer::default();
    assert!(signature_verifier.verify_signature(message_bytes, signature_bytes, &public_key));
    }

    ECRecover

    Odra Standard Library +part of the original Odra Proposal mentioned ECRecover as one of the functions that will be +implemented by the Odra Framework. We decided to add signatures verification instead.

    The reasoning behind this decision is that the ECRecover works only with one type of signature. +Odra tries to be backend-agnostic, which implies that it should also be signature-type-agnostic. +This was possible to achieve when implementing generic signature verification, but not with ECRecover.

    In short, the implementation of ECRecover would not depend on the backend, pushing it into some kind of +utils library, and those already exist, for example in +solana_program +crate.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/advanced/using/index.html b/docs/docs/0.6.0/advanced/using/index.html new file mode 100644 index 000000000..124b8ae08 --- /dev/null +++ b/docs/docs/0.6.0/advanced/using/index.html @@ -0,0 +1,17 @@ + + + + + +Module reusing | Odra + + + + + +
    +
    Version: 0.6.0

    Module reusing

    This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.

    Conceptual Overview

    By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key.

    #[odra::module]
    struct Contract {
    value: Variable<u8>, // the default namespace would be "value"
    module: Module
    }

    #[odra::module]
    struct Module {
    secret: Variable<String> // the default namespace would be "module_secret"
    }

    While this isolation often proves useful, there are scenarios where shared storage is beneficial.

    Usage

    Odra generates an array of keys, prefixing the storage key of child modules with the parent namespace, like in the example above. But what if you want to reuse the same instance of a module? Add a #[odra(using)] attribute to a module to override the default behavior. This is information for the module "Do not prefix storage keys for the given module." so effectively, the child and the parent use the same module instance.

    Let's illustrate it with a simple example. The example provided below introduces some additional complexity by featuring deeper module nesting.

    use odra::Variable;

    #[odra::module]
    pub struct SharedStorage {
    pub value: Variable<String>
    }

    #[odra::module]
    pub struct MyStorage {
    pub shared: SharedStorage,
    pub version: Variable<u8>
    }

    #[odra::module]
    pub struct ComposableContract {
    pub shared: SharedStorage,
    #[odra(using = "shared")]
    pub storage: MyStorage
    }

    #[odra::module]
    impl ComposableContract {
    #[odra(init)]
    pub fn init(&mut self, version: u8, value: String) {
    self.storage.version.set(version);
    self.shared.value.set(value);
    }

    pub fn get_value(&self) -> String {
    self.shared.value.get_or_default()
    }

    pub fn get_value_via_storage(&self) -> String {
    self.storage.shared.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod test {
    use crate::composer::ComplexContractDeployer;

    #[test]
    fn t() {
    let shared_value = "shared_value".to_string();
    let extra_value: u32 = 314;
    let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);

    assert_eq!(token.get_value(), shared_value);
    assert_eq!(token.get_value_via_storage(), shared_value);
    assert_eq!(token.get_extra_value(), extra_value);
    }
    }

    In this example, we've introduced a new module, MoreStorage, which nests MyStorage and includes an extra value. The ComplexContract contains SharedStorage and MoreStorage, creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels.

    If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:

    1. On the contract level - contract_shared_value.
    2. On the MyStorage module level - contract_more_storage_shared_value.

    This example showcases how you can effectively use the module reusing feature to build intricate and efficient smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/backends/casper/index.html b/docs/docs/0.6.0/backends/casper/index.html new file mode 100644 index 000000000..e7862172f --- /dev/null +++ b/docs/docs/0.6.0/backends/casper/index.html @@ -0,0 +1,44 @@ + + + + + +Casper | Odra + + + + + +
    +
    Version: 0.6.0

    Casper

    The Casper backend allows you to compile your contracts into WASM files which can be deployed +onto Casper Blockchain +and lets you to easily run them against Casper's Execution Engine locally.

    Types

    A struct to be written into the storage must implement OdraType which is defined as follow:

    pub trait OdraType: 
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    The other exposed types are:

    Contract Env

    As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances.

    Events

    An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've +already learned from the events article, in Odra you emit an event, similarly, you would do it in Solidity.

    Under the hood, Odra integrates with Casper Event Standard and creates a few URefs in the global state when a contract is being installed:

    1. __events - a dictionary that stores events' data.
    2. __events_length - the evens count.
    3. __events_ces_version - the version of Casper Event Standard.
    4. __events_schema - a dictionary that stores event schemas.

    Besides that, all the events the contract emits are registered - events schemas are written to the storage under the __events_schema key.

    note

    Don't forget to expose events in the module using #[odra::module(events = [...])].

    So, Events are nothing different from any other data stored by a contract.

    A struct to be an event must implement SerializableEvent which is defined as follow:

    pub trait SerializableEvent: 
    odra_types::event::OdraEvent +
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    Payable

    The first Odra idiom is a Contract Main Purse. It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper URef and a purse are created and stored under the __contract_main_purse key.

    Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a Cargo Purse. It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse.

    Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable. +If under the way something goes wrong with the transfer, the contract reverts.

    The transferred amount can be read inside the contract by calling contract_env::attached_value().

    note

    Odra expects the cargo_purse runtime argument to be attached to a contract call. +In case of its absence, the contract_env::attached_value() returns zero.

    Revert

    In Casper, we can stop the execution pretty straightforwardly - call the runtime::revert(). +Odra adds an extra abstraction layer - in a contract ExecutionErrors are defined, which ultimately are transformed into Casper's ApiError::User.

    Context

    Casper equips developers with very low-level tooling, which can be cumbersome for newcomers. +If you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack.

    The contract_env::self_address() function takes the first element of the callstack (runtime::get_call_stack()) and casts it to Address.

    The contract_env::caller() function takes the second element of the call stack (runtime::get_call_stack()) and casts it to Address.

    As mentioned in the [Payable] section, to store CSPR, each contract creates its purse. To read the contract balance, you call contract_env::self_balance, which checks the balance of the purse stored under __contract_main_purse.

    Test Env

    Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the Casper Execution Engine.

    In your test, you can freely switch execution context by setting as a caller (test_env::set_caller()) one of the 20 predefined accounts. Each account possesses the default amount of Motes (100_000_000_000_000_000).

    The Test Env internally keeps track of the current block time, error and attached value.

    Each test is executed on a fresh instance of the Test Env.

    Usage

    Name of the Casper backend in Odra is casper, so to run the tests against it, simply pass it as a -b +parameter:

    cargo odra test -b casper

    If you want to just generate a wasm file, simply run:

    cargo odra build -b casper

    Constructors

    Let's define a basic Odra module that includes a constructor:

    #[odra::module]
    struct Counter {
    value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub initialize(&mut self, value: u32) {
    self.value.set(value);
    }
    }

    Read more about constructors here.

    WASM arguments

    When deploying a new contract you have to specify following arguments.

    Required arguments:

    • odra_cfg_package_hash_key_name - String type. The key under which the package hash of the contract will be stored.
    • odra_cfg_allow_key_override - Bool type. If true and the key specified in odra_cfg_package_hash_key_name already exists, it will be overwritten.
    • odra_cfg_is_upgradable - Bool type. If true, the contract will be deployed as upgradable.

    Optional arguments:

    • odra_cfg_constructor - String type. If the contract has the constructor entry point marked with #[odra(init)], this should be set to the constructor name.
    • constructor arguments that match entry point set in odra_cfg_constructor.

    Contract Deploys

    Example: Deploy Counter

    To deploy your contract with a constructor using casper-client, you need to pass the above arguments. +Additionally, you need to pass the value argument, which sets the arbitrary initial value for the counter.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 5000000000000 \
    --session-path ./wasm/counter.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'counter_package_hash'" \
    --session-arg "odra_cfg_allow_key_override:bool:'true'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'initialize'" \
    --session-arg "value:u32:42"

    For a more in-depth tutorial, please refer to the Casper's 'Writing On-Chain Code'.

    Example: Deploy ERC721

    Odra comes with a standard ERC721 token implementation. +Clone the main Odra repo and navigate to the modules directory.

    Firstly contract needs to be compiled.

    cargo odra build -b casper -c erc721_token

    It produces the erc721_token.wasm file in the wasm directory.

    Now it's time to deploy the contract.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 300000000000 \
    --session-path ./wasm/erc721_token.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'my_nft'" \
    --session-arg "odra_cfg_allow_key_override:bool:'false'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \
    --session-arg "name:string:'MyNFT'" \
    --session-arg "symbol:string:'NFT'" \
    --session-arg "base_uri:string:'https://example.com/'"

    It's done. +The contract is deployed and ready to use. +Your account is the owner of the contract and you can mint and burn tokens. +For more details see the code of the ERC721 module.

    To obtain the package hash of the contract search for my_nft key +in your account's named keys.

    Example: Deploy ERC1155

    The process is similar to the one described in the previous section.

    Contract compilation:

    cargo odra build -b casper -c erc1155_token

    Contract deployment:

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 300000000000 \
    --session-path ./wasm/erc1155_token.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'my_tokens'" \
    --session-arg "odra_cfg_allow_key_override:bool:'false'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \

    As previously, your account is the owner and can mint and burn tokens. +For more details see the code of the ERC1155 module.

    Sending CSPR to a contract

    Defining payable entry points is described in Native Token section.

    What is happening under the hood is that Odra creates a new cargo_purse argument for each payable +entry point. The cargo_purse needs to be top-upped with CSPR before calling the contract. +When a contract adds CSPR to another contract call, Odra handles it for you. +The problem arises when you want to call an entry point and attach CSPR as an account. +The only way of doing that is by executing code in the sessions context, that +top-ups the cargo_purse and then calls the contract.

    Odra provides a generic proxy_caller.wasm that does exactly that. +You can build it by yourself from the main Odra repository, or use the proxy_caller.wasm +we maintain.

    Using proxy_caller.wasm

    To use the proxy_caller.wasm you need to attach the following arguments:

    • contract_package_hash - BytesArray(32) type. The package hash of the contract you want to call. +Result of to_bytes on CasperPackageHash.
    • entry_point - String type. The name of the entry point you want to call.
    • args - Bytes type. It is a serialized RuntimeArgs with the arguments you want to pass +to the entry point. To be specific it is the result of to_bytes method wrapped with Bytes type.
    • attached_value. Option<U512> type. The amount of CSPR you want to attach to the call.
    • amount. U512 type. Should be the same value as attached_value if not None. +It is a special Casper argument that enables the access to account's main purse.

    Currently casper-client doesn't allow building such arguments. +You have to build it using your SDK.

    Execution

    First thing Odra does with your code, is similar to the one used in MockVM - +a list of entrypoints is generated, thanks to the #[odra::module] macro.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/backends/mock-vm/index.html b/docs/docs/0.6.0/backends/mock-vm/index.html new file mode 100644 index 000000000..2b6d99934 --- /dev/null +++ b/docs/docs/0.6.0/backends/mock-vm/index.html @@ -0,0 +1,26 @@ + + + + + +MockVM | Odra + + + + + +
    +
    Version: 0.6.0

    MockVM

    The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing +the code written in Odra without compiling the contract to the target architecture and spinning up the +blockchain.

    Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler.

    Usage

    The MockVM is the default backend for Odra framework, so each time you run

    cargo odra test

    You are running your code against it.

    Architecture

    MockVM consists of two main parts: the Contract Register and the State.

    The Contract Register is just a list of contracts deployed onto the MockVM, identified by an Address. +Each time we call the contract, we call its instance stored in the Contract Register.

    Contracts and Test Env functions can modify the State of the MockVM.

    Contrary to the "real" backend, which holds the whole history of the blockchain, +the MockVM State holds only the current state of the MockVM. +Thanks to this and the fact that we do not need the blockchain itself, +MockVM starts instantly and runs the tests in the native speed.

    Execution

    When the MockVM backend is enabled, the #[odra::module] macro is responsible for converting +your pub functions into a list of Entrypoints, which are put into a Contract Container. +When the contract is deployed, its Container registered into a Registry under an address. +During the contract call, MockVM finds an Entrypoint and executes the code.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/backends/what-is-a-backend/index.html b/docs/docs/0.6.0/backends/what-is-a-backend/index.html new file mode 100644 index 000000000..a9bcd7f93 --- /dev/null +++ b/docs/docs/0.6.0/backends/what-is-a-backend/index.html @@ -0,0 +1,27 @@ + + + + + +What is a backend? | Odra + + + + + +
    +
    Version: 0.6.0

    What is a backend?

    You can think of a backend as a target platform for your smart contract. +This can be a piece of code allowing you to quickly check your code - like MockVM, +or a complete virtual machine, spinning up a blockchain for you - like CasperVM.

    Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env.

    Contract Env

    The Contract Env is a simple interface that each backend needs to implement, +exposing features of the blockchain from the perspective of the contract.

    It gives Odra a set of functions, which allows implementing more complex concepts - +for example, to implement Mapping, +Odra requires some kind of storage integration. +The exact implementation of those functions is a responsibility of a backend, +making Odra and its user free to implement the contract logic, +instead of messing with the blockchain internals.

    Other functions from Contract Env include handling transfers, addresses, block time, errors and events.

    Test Env

    Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with +the backend from the outside world - really useful for implementing tests.

    This ranges from interacting with the blockchain - like deploying and calling the contracts, +to the more test-oriented - handling errors, forwarding the block time, etc.

    What's next

    We will take a look at backends Odra implements in more detail.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/cargo-odra/index.html b/docs/docs/0.6.0/basics/cargo-odra/index.html new file mode 100644 index 000000000..45b60ff55 --- /dev/null +++ b/docs/docs/0.6.0/basics/cargo-odra/index.html @@ -0,0 +1,38 @@ + + + + + +Cargo Odra | Odra + + + + + +
    +
    Version: 0.6.0

    Cargo Odra

    If you followed the Installation tutorial properly, +you should already be set up with the Cargo Odra tool. It is an executable that will help you with +managing your smart contracts project, testing and running them on multiple backends (blockchains).

    Let's take a look at all the possibilities that Cargo Odra gives you.

    Managing projects

    Two commands will help you create a new project. The first one is cargo odra new. +You need to pass one parameter, namely --name {PROJECT_NAME}:

    cargo odra new --name my-project

    This will create a new project in the my_project folder and name it my_project. You can see it +for yourself, for example by taking a look into a Cargo.toml file created in your project's folder:

    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    The project is created using the template located in Odra's main repository. +By default it uses full template, if you want, you can use minimalistic blank by running:

    cargo odra new -t blank --name my-project

    By default, the latest release of Odra will be used for the template and as a dependency. +You can pass a source of Odra you want to use, by using -s parameter:

    cargo odra new -n my-project -s ../odra # will use local folder of odra
    cargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release
    cargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io

    The second way of creating a project is by using init command:

    cargo odra init --name my-project

    It works in the same way as new, but instead of creating a new folder, it will create a project +in the current, empty directory.

    Generating code

    If you want to quickly create a new contract code, you can use the generate command:

    cargo odra generate -c counter 

    This will create a new file src/counter.rs with sample code, add appropriate use and mod sections +to src/lib.rs and update the Odra.toml file accordingly. To learn more about Odra.toml file, +visit Odra.toml.

    Testing

    Most used command during the development of your project should be this one:

    cargo odra test

    It will run your tests against Odra's MockVM. It is substantially faster than virtual machines +provided by blockchains developers and implements all the features Odra uses.

    When you want to run tests against a "real" VM, just provide the name of the backend using -b +option:

    cargo odra test -b casper

    In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files, +spin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat. +Keep in mind that this is a lot slower than MockVM and you cannot use the debugger. +This is why MockVM was created and should be your first choice when developing contracts. +Of course, testing all of your code against a blockchain VM is a must in the end.

    If you want to run only some of the tests, you can pass arguments to the cargo test command +(which is run in the background obviously):

    cargo odra test -- this-will-be-passed-to-cargo-test

    If you want to run tests which names contain the word two, you can execute:

    cargo odra test -- two

    Of course, you can do the same when using the backend:

    cargo odra test -b casper -- two

    Building code

    You can also build the code itself and generate the output contracts without running the tests. +To do so, simply run:

    cargo odra build -b casper

    Where casper is the name of the backend we are using in this example. If the build process +finishes successfully, wasm files will be located in wasm folder.

    Updating dependencies

    You will learn later, that the project using Odra contains more than one Rust project - your own and +one or more builders. To run cargo update on all of them at once instead of traversing all the folders +you can use this command:

    cargo odra update

    What's next

    In the next section, we will take a look at all the files and directories that cargo odra created +for us and explain their purpose.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/communicating-with-host/index.html b/docs/docs/0.6.0/basics/communicating-with-host/index.html new file mode 100644 index 000000000..9119eb8ef --- /dev/null +++ b/docs/docs/0.6.0/basics/communicating-with-host/index.html @@ -0,0 +1,21 @@ + + + + + +Host Communication | Odra + + + + + +
    +
    Version: 0.6.0

    Host Communication

    One of the things that your contract will probably do is to query the host for some information - +what is the current time? Who called me? Following example shows how to do this:

    examples/src/features/host_functions.rs
    use odra::Variable;
    use odra::types::{BlockTime, Address};

    #[odra::module]
    pub struct HostContract {
    name: Variable<String>,
    created_at: Variable<BlockTime>,
    created_by: Variable<Address>,
    }

    #[odra::module]
    impl HostContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.created_at.set(odra::contract_env::get_block_time());
    self.created_by.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }
    }

    As you can see, we are calling functions from odra::contract_env. get_block_time() will return +the current block time wrapped in Odra type BlockTime. caller() will return an Odra Address of +a caller (this can be an external caller or another contract).

    info

    You will learn more functions that Odra exposes from host and types it uses in further articles.

    What's next

    In the next article, we'll dive into testing your contracts with Odra, so you can check that the code +we presented in fact works!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/cross-calls/index.html b/docs/docs/0.6.0/basics/cross-calls/index.html new file mode 100644 index 000000000..707ab34fb --- /dev/null +++ b/docs/docs/0.6.0/basics/cross-calls/index.html @@ -0,0 +1,25 @@ + + + + + +Cross calls | Odra + + + + + +
    +
    Version: 0.6.0

    Cross calls

    To show how to handle calls between contracts, first, let's implement two of them:

    examples/src/features/cross_calls.rs
    use odra::Variable;
    use odra::types::{Address};

    #[odra::module]
    pub struct CrossContract {
    pub math_engine: Variable<Address>,
    }

    #[odra::module]
    impl CrossContract {
    #[odra(init)]
    pub fn init(&mut self, math_engine_address: Address) {
    self.math_engine.set(math_engine_address);
    }

    pub fn add_using_another(&self) -> u32 {
    let math_engine_address = self.math_engine.get().unwrap();
    MathEngineRef::at(math_engine_address).add(3, 5)
    }
    }

    #[odra::module]
    pub struct MathEngine {
    }

    #[odra::module]
    impl MathEngine {
    pub fn add(&self, n1: u32, n2: u32) -> u32 {
    n1 + n2
    }
    }

    MathEngine contract can add two numbers. CrossContract takes an Address in its init function and saves it in +storage for later use. If we deploy the MathEngine first and take note of its address, we can then deploy +CrossContract and use MathEngine to perform complicated calculations for us!

    To call the external contract, we use the Ref that was created for us by Odra:

    examples/src/features/cross_calls.rs
    MathEngineRef::at(math_engine_address).add(3, 5)

    Contract Ref

    We mentioned Ref already in our Testing article. +It is a reference to already deployed - running contract. +Here we are going to take a deeper look at it.

    Similarly to a Deployer, the Ref is generated automatically, thanks to the #[odra::module] macro. +To get an instance of a reference, we can either deploy a contract (using Deployer) or by building it +directly, using ::at(address: Address) method, as shown above. +The reference implements all the public endpoints to the contract (those marked as pub in #[odra::module] +impl), alongside couple methods:

    • at(Address) -> Self - points the reference to an Address
    • address() -> Address - returns the Address the reference is currently pointing at
    • with_tokens(Amount) -> Self - attaches Amount of native tokens to the next call

    External Contracts

    Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI.

    For that purpose, we use #[odra:external_contract] macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of.

    Let's pretend the MathEngine we defined is an external contract. There is a contract with add() function that adds two numbers somewhere.

    examples/src/features/cross_calls.rs
    #[odra::external_contract]
    pub trait Adder {
    fn add(&self, n1: u32, n2: u32) -> u32;
    }

    Analogously to modules, Odra creates the AdderRef struct (but do not create the AdderDeployer). Having an address we can call:

    examples/src/features/cross_calls.rs
    AdderRef::at(address).add(3, 5)

    Testing

    Let's see how we can test our cross calls using this knowledge:

    examples/src/features/cross_calls.rs
    use super::{CrossContractDeployer, MathEngineDeployer};

    #[test]
    fn test_cross_calls() {
    let math_engine_contract = MathEngineDeployer::default();
    let cross_contract = CrossContractDeployer::init(math_engine_contract.address());

    assert_eq!(cross_contract.add_using_another(), 8);
    }

    Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a MathEngine contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the add() function we want to use.

    examples/src/features/cross_calls.rs
    #[cfg(test)]
    mod tests {
    use odra::types::Address;
    use crate::features::cross_calls::{Adder, AdderRef};

    #[test]
    fn test_ext() {
    let adder = AdderRef::at(get_adder_address());

    assert_eq!(adder.add(1, 2), 3);
    }

    fn get_adder_address() -> Address {
    let contract = MathEngineDeployer::default();
    contract.address()
    }
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/directory-structure/index.html b/docs/docs/0.6.0/basics/directory-structure/index.html new file mode 100644 index 000000000..bc323e54c --- /dev/null +++ b/docs/docs/0.6.0/basics/directory-structure/index.html @@ -0,0 +1,27 @@ + + + + + +Directory structure | Odra + + + + + +
    +
    Version: 0.6.0

    Directory structure

    After creating a new project using Odra and running the tests, you will be presented with the +following files and directories:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── CHANGELOG.md
    ├── Odra.toml
    ├── README.md
    ├── .builder_casper/
    ├── src/
    │ ├── flipper.rs
    │ └── lib.rs
    ├── target/
    └── wasm/

    Cargo.toml

    Let's first take a look at Cargo.toml file:

    [package]
    name = "sample"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    By default, your project will use the latest odra version available at crates.io. We are using two features:

    • odra/mock-vm - it is responsible for running tests on Odra's MockVM
    • odra/casper - backend implementation of Casper blockchain +More backends will be released as features that will be possible to enable here.

    Odra.toml

    This is the file that holds information about contracts that will be generated when running cargo odra build and +cargo odra test:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    As we can see, we have a single contract, its fqn (Fully Qualified Name) corresponds to +the contract is located in src/flipper.rs. +More contracts can be added here by hand, or by using cargo odra generate command.

    .builder_* folders

    Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary +for building wasm files and running them against blockchain VMs. As it is not necessary to modify +files in those folders in any way, by default they are hidden (hence the . at the beginning of the +folder name).

    src/

    This is the folder where your smart contract files live.

    target/

    Files generated by cargo during the build process are put here.

    wasm/

    WASM files generated by cargo odra build and cargo odra test are put here. You can grab those WASM files +and deploy them on the blockchain of your choosing.

    What's next

    Now, let's take a look at one of the files mentioned above in more detail, +namely the Odra.toml file.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/errors/index.html b/docs/docs/0.6.0/basics/errors/index.html new file mode 100644 index 000000000..3433c14a1 --- /dev/null +++ b/docs/docs/0.6.0/basics/errors/index.html @@ -0,0 +1,23 @@ + + + + + +Errors | Odra + + + + + +
    +
    Version: 0.6.0

    Errors

    Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the +following example of a simple owned contract:

    examples/src/features/handling_errors.rs
    use odra::{execution_error, Variable, UnwrapOrRevert};
    use odra::types::Address;

    #[odra::module]
    pub struct OwnedContract {
    name: Variable<String>,
    owner: Variable<Address>,
    }

    execution_error! {
    pub enum Error {
    OwnerNotSet => 1,
    NotAnOwner => 2,
    }
    }


    #[odra::module]
    impl OwnedContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.owner.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn owner(&self) -> Address {
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)
    }

    pub fn change_name(&mut self, name: String) {
    let caller = odra::contract_env::caller();
    if caller != self.owner() {
    odra::contract_env::revert(Error::NotAnOwner)
    }

    self.name.set(name);
    }
    }

    Firstly, we are using execution_error! macro to define our own set of Errors that our contract will +throw. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use +unwrap_or_revert_with and pass an error as an argument:

    examples/src/features/handling_errors.rs
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)

    You and the users of your contract will be thankful for a meaningful error message!

    You can also throw the error directly, by using revert:

    examples/src/features/handling_errors.rs
    odra::contract_env::revert(Error::NotAnOwner)

    Testing errors

    Okay, but how about testing it? We've already mentioned a function - assert_exception. This is how you will +use it:

    examples/src/features/handling_errors.rs
    use super::{OwnedContractDeployer, OwnedContractRef};
    use super::Error;

    #[test]
    fn test_owner_error() {
    let owner = odra::test_env::get_account(0);
    let not_an_owner = odra::test_env::get_account(1);

    odra::test_env::set_caller(owner);
    let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());

    odra::test_env::set_caller(not_an_owner);
    odra::test_env::assert_exception(Error::NotAnOwner, || {
    owned_contract.change_name("NewName".to_string());
    })
    }

    In the example above, because we are calling the change_name method as an address which is not an "owner", +we are expecting that "NotAnOwner" error will be thrown.

    note

    Here we are creating another reference to the already deployed contract using OwnedContractRef::at() and passing to it +its Address. Note that OwnedContractDeployer::init() returns the same type.

    What's next

    We will learn how to emit and test events using Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/events/index.html b/docs/docs/0.6.0/basics/events/index.html new file mode 100644 index 000000000..9046f64ff --- /dev/null +++ b/docs/docs/0.6.0/basics/events/index.html @@ -0,0 +1,20 @@ + + + + + +Events | Odra + + + + + +
    +
    Version: 0.6.0

    Events

    Different blockchains implement events in different ways. Odra lets you forget about it by introducing +Odra Events. Take a look:

    examples/src/features/events.rs
    use odra::{Event, contract_env};
    use odra::types::{Address, BlockTime, event::OdraEvent};

    #[odra::module(events = [PartyStarted])]
    pub struct PartyContract {
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    #[odra::module]
    impl PartyContract {
    #[odra(init)]
    pub fn init(&self) {
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();
    }
    }

    We defined a new contract, which emits an event called PartyStarted when the contract is deployed. +To define an event, we derive an Event macro like this:

    examples/src/features/events.rs
    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    Among other things, it adds an emit() function to the struct, which allows you to emit the event simply +as that:

    examples/src/features/events.rs
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();

    Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an events attribute to the struct's #[odra::module] macro.

    The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module.

    Testing events

    Odra's test_env comes with a handy macro assert_events! which lets you easily test the events that a given contract has emitted:

    examples/src/features/events.rs
    use odra::{assert_events, test_env};
    use crate::features::events::PartyStarted;
    use super::PartyContractDeployer;

    #[test]
    fn test_party() {
    let party_contract = PartyContractDeployer::init();
    assert_events!(
    party_contract,
    PartyStarted {
    caller: test_env::get_account(0),
    block_time: 0,
    }
    );
    }

    What's next

    Read the next article to learn how to call other contracts from the contract context.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/flipper-internals/index.html b/docs/docs/0.6.0/basics/flipper-internals/index.html new file mode 100644 index 000000000..4d84bfde6 --- /dev/null +++ b/docs/docs/0.6.0/basics/flipper-internals/index.html @@ -0,0 +1,35 @@ + + + + + +Flipper Internals | Odra + + + + + +
    +
    Version: 0.6.0

    Flipper Internals

    In this article, we take a deep dive into the code shown in the +Flipper example, where we will explain in more detail all +the Odra-specific sections of the code.

    flipper.rs
    use odra::Variable;

    Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation +that can be reused between targets. In the above case, we're importing Variable, which is responsible +for storing simple values on the blockchain's storage.

    Struct

    flipper.rs
    /// A module definition. Each module struct consists of Variables and Mappings
    /// or/and other modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    In Odra, all contracts are also modules, which can be reused between contracts. That's why we need +to mark the struct with the #[odra::module] macro. In the struct definition itself, we state all +the fields of the contract. Those fields can be regular Rust data types, however - those will not +be persisted on the blockchain. They can also be Odra modules - defined in your project or coming +from Odra itself. Finally, to make the data persistent on the blockchain, you can use something like +Variable<T> showed above. To learn more about storage interaction, take a look at the +next article.

    Impl

    flipper.rs
    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }
    ...

    Similarly to the struct, we mark the impl section with the #[odra::module] macro. Odra will take all +pub functions from this section and create contract endpoints from them. So, if you wish to have +functions that are not available for calling outside the contract, do not make them public. Alternatively, +you can create a separate impl section without the macro - all functions defined there, even marked +with pub will be not callable.

    The #[odra(init)] macro marks the constructor of the contract. This function will be limited to only +to a single call, all further calls to it will result in an error.

    flipper.rs
        ...
    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }
    ...

    The endpoints above show you how to interact with the simplest type of storage - Variable<T>. The data +saved there using set function will be persisted in the blockchain.

    Tests

    flipper.rs
    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }
    ...

    You can write tests in any way you prefer and know in Rust. In the example above we are deploying the +contract using FlipperDeployer - a piece of code generated automatically thanks to the macros. +The contract will be deployed on the VM you chose while running cargo odra test.

    What's next

    Now let's take a look at the different types of storage that Odra provides and how to use them.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/modules/index.html b/docs/docs/0.6.0/basics/modules/index.html new file mode 100644 index 000000000..3555dd1cd --- /dev/null +++ b/docs/docs/0.6.0/basics/modules/index.html @@ -0,0 +1,20 @@ + + + + + +Modules | Odra + + + + + +
    +
    Version: 0.6.0

    Modules

    Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you +write is also a module, thanks to a macro #[odra::module]. This means that we can easily rewrite our math +example from the previous article, to use a single contract, but still separate our "math" code:

    examples/src/features/modules.rs
    use crate::features::cross_calls::MathEngine;

    #[odra::module]
    pub struct ModulesContract {
    pub math_engine: MathEngine,
    }

    #[odra::module]
    impl ModulesContract {
    pub fn add_using_module(&self) -> u32 {
    self.math_engine.add(3, 5)
    }
    }

    Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as +a module!

    info

    To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!

    Testing

    As we don't need to hold addresses, the test is really simple:

    examples/src/features/modules.rs
    use super::ModulesContractDeployer;

    #[test]
    fn test_modules() {
    let modules_contract = ModulesContractDeployer::default();
    assert_eq!(modules_contract.add_using_module(), 8);
    }

    What's next

    We will see how to handle native token transfers.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/native-token/index.html b/docs/docs/0.6.0/basics/native-token/index.html new file mode 100644 index 000000000..f8049af29 --- /dev/null +++ b/docs/docs/0.6.0/basics/native-token/index.html @@ -0,0 +1,26 @@ + + + + + +Native token | Odra + + + + + +
    +
    Version: 0.6.0

    Native token

    Different blockchains come with different implementations of their native tokens. Odra wraps it all for you +in easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit +their funds and anyone can withdraw them:

    examples/src/features/native_token.rs
    use odra::types::Balance;
    use odra::contract_env;

    #[odra::module]
    pub struct PublicWallet {
    }

    #[odra::module]
    impl PublicWallet {
    #[odra(payable)]
    pub fn deposit(&mut self) {
    }

    pub fn withdraw(&mut self, amount: Balance) {
    contract_env::transfer_tokens(contract_env::caller(), amount);
    }
    }
    danger

    The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make +any checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is +even possible.

    To see a more reasonable example, check out examples/src/tlw.rs in the odra main repository.

    You can see a new macro used here: #[odra(payable)] - it will add all the code needed for a function to +be able to receive the funds. Additionally, we are using a new function from contract_env - transfer_tokens. +It does exactly what you are expecting it to do - it will transfer native tokens from the contract to the +specified address.

    We are also using the Balance - an Odra type that wraps around the type that the underlying blockchain uses +for counting tokens.

    Testing

    To be able to test how many tokens a contract (or any address) has, test_env comes with a function - +token_balance:

    examples/src/features/native_token.rs
    use odra::types::Balance;
    use odra::test_env;
    use super::PublicWalletDeployer;

    #[test]
    fn test_modules() {
    let mut my_contract = PublicWalletDeployer::default();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());

    my_contract.with_tokens(Balance::from(100)).deposit();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));

    my_contract.withdraw(Balance::from(25));
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/odra-toml/index.html b/docs/docs/0.6.0/basics/odra-toml/index.html new file mode 100644 index 000000000..54f46d72d --- /dev/null +++ b/docs/docs/0.6.0/basics/odra-toml/index.html @@ -0,0 +1,23 @@ + + + + + +Odra.toml | Odra + + + + + +
    +
    Version: 0.6.0

    Odra.toml

    As mentioned in the previous article, Odra.toml is a file that contains information about all the contracts +that Odra will build. Let's take a look at the file structure again:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    The name will be used as a name for the contract - the generated wasm file will be in the above case named +flipper.wasm.

    The fqn (Fully Qualified Name) is used by the builder to locate the exact struct where +the contract is defined.

    Adding a new contract manually

    Besides using the cargo odra generate command, you can add a new contract to be compiled by hand. +To do this, add another [[contracts]] element, name it and make sure that the fqn is set correctly.

    For example, if you want to create a new contract called counter, your Odra.toml file should finally +look like this:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    [[contracts]]
    name = "counter"
    fqn = "sample::Counter"

    What's next

    In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous +Flipper contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/storage-interaction/index.html b/docs/docs/0.6.0/basics/storage-interaction/index.html new file mode 100644 index 000000000..e96104eb4 --- /dev/null +++ b/docs/docs/0.6.0/basics/storage-interaction/index.html @@ -0,0 +1,36 @@ + + + + + +Storage interaction | Odra + + + + + +
    +
    Version: 0.6.0

    Storage interaction

    The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go +through all of them and explain their pros and cons.

    Variable

    The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your +variable in the Variable type. Let's look at a "real world" example of a contract that represents a dog:

    examples/src/features/storage/variable.rs
    #[odra::module]
    pub struct DogContract {
    barks: Variable<bool>,
    weight: Variable<u32>,
    name: Variable<String>,
    walks: Variable<Vec<u32>>,
    }

    You can see the Variable wrapping the data. Even complex types like Vec can be wrapped (with some caveats)!

    Let's make this contract usable, by providing a constructor and some getter functions:

    examples/src/features/storage/variable.rs
    use odra::Variable;

    #[odra::module]
    impl DogContract {
    #[odra(init)]
    pub fn init(&mut self, barks: bool, weight: u32, name: String) {
    self.barks.set(barks);
    self.weight.set(weight);
    self.name.set(name);
    self.walks.set(Vec::<u32>::default());
    }

    pub fn barks(&self) -> bool {
    self.barks.get_or_default()
    }

    pub fn weight(&self) -> u32 {
    self.weight.get_or_default()
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.len() as u32
    }

    pub fn walks_total_length(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.iter().sum()
    }
    }

    As you can see, you can access the data, by using get_or_default function:

    examples/src/features/storage/variable.rs
    ...
    self.barks.get_or_default()
    ...
    note

    Keep in mind that using get() will result in an Option that you'll need to unwrap - the variable +doesn't have to be initialized!

    To modify the data, use the set() function:

    examples/src/features/storage/variable.rs
    self.barks.set(barks);

    A Variable is easy to use and efficient for simple data types. One of its downsides is that it +serializes the data as a whole, so when you're using complex types like Vec or HashMap, +each time you get or set the whole data is read and written to the blockchain storage.

    In the example above, if we want to see how many walks our dog had, we would use the function:

    examples/src/features/storage/variable.rs
    pub fn walks_amount(&self) -> usize {
    let walks = self.walks.get_or_default();
    walks.len()
    }

    But to do so, we need to extract the whole serialized vector from the storage, which would inefficient, +especially for larger sets of data.

    To tackle this issue following two types were created.

    Mapping

    The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to +pass two values - the key type and the value type. Let's look at the variation of the Dog contract, that +uses Mapping to store information about our dog's friends and how many times they visited:

    examples/src/features/storage/mapping.rs
    use odra::{Mapping, Variable};

    #[odra::module]
    pub struct DogContract2 {
    name: Variable<String>,
    friends: Mapping<String, u32>,
    }

    In the example above, our key is a String (it is a name of the friend) and we are storing u32 values +(amount of visits). To read and write values from and into a Mapping we use a similar approach +to the one shown in the Variables section with one difference - we need to pass a key:

    examples/src/features/storage/mapping.rs
    pub fn visit(&mut self, friend_name: String) {
    let visits = self.visits(friend_name.clone());
    self.friends.set(&friend_name, visits + 1);
    }

    pub fn visits(&self, friend_name: String) -> u32 {
    self.friends.get_or_default(&friend_name)
    }

    The biggest improvement over a Variable is that we can model functionality of a HashMap using Mapping. +The amount of data written to and read from the storage is minimal. However, we cannot iterate over Mapping. +We could implement such behavior by using a numeric type key and saving the length of the set in a +separate variable. Thankfully Odra comes with a prepared solution - the List type.

    note

    If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with +a Variable working together:

    core/src/list.rs
    use odra::{Variable, List};

    pub struct List<T> {
    values: Mapping<u32, T>,
    index: Variable<u32>
    }

    List

    Going back to our DogContract example - let's revisit the walk case. This time, instead of Vec, +we'll use the list:

    examples/src/features/storage/list.rs
    #[odra::module]
    pub struct DogContract3 {
    name: Variable<String>,
    walks: List<u32>,
    }

    As you can see, the notation is very similar to the Vec. To understand the usage, take a look +at the reimplementation of the functions with an additional function that takes our dog for a walk +(it writes the data to the storage):

    examples/src/features/storage/list.rs
    #[odra::module]
    impl DogContract3 {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    self.walks.len()
    }

    pub fn walks_total_length(&self) -> u32 {
    self.walks.iter().sum()
    }

    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }
    }

    Now, we can know how many walks our dog had without loading the whole vector from the storage. +We need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all +the cases for you.

    info

    All of the above examples, alongside the tests, are available in the odra repository in the examples/src/docs/ folder.

    Custom Types

    By default you can store only built-in types like numbers, Options, Results, Strings, Vectors.

    Implementing custom types is straightforward, your type must derive from OdraType:

    use odra::{Address, OdraType};

    #[derive(OdraType)]
    pub struct Dog {
    pub name: String,
    pub age: u8,
    pub owner: Option<Address>
    }
    note

    Each field of your struct must be an OdraType.

    What's next

    In the next article, we'll see how to query the host for information about the world and our contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/basics/testing/index.html b/docs/docs/0.6.0/basics/testing/index.html new file mode 100644 index 000000000..69b375bc4 --- /dev/null +++ b/docs/docs/0.6.0/basics/testing/index.html @@ -0,0 +1,32 @@ + + + + + +Testing | Odra + + + + + +
    +
    Version: 0.6.0

    Testing

    Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write +regular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the +previous article:

    examples/src/features/storage/list.rs
    use odra::{Variable, List};

    #[cfg(test)]
    mod tests {
    use super::DogContract3Deployer;

    #[test]
    fn init_test() {
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());
    assert_eq!(dog_contract.walks_amount(), 0);
    assert_eq!(dog_contract.walks_total_length(), 0);
    dog_contract.walk_the_dog(5);
    dog_contract.walk_the_dog(10);
    assert_eq!(dog_contract.walks_amount(), 2);
    assert_eq!(dog_contract.walks_total_length(), 15);
    }
    }

    The #[odra(module)] macro created a Deployer code for us, which will deploy the contract on the +VM:

    examples/src/features/storage/list.rs
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());

    From now on, we can use dog_contract to interact with our deployed contract - in particular, all +pub functions from the impl section that was annotated with a macro are available to us:

    examples/src/features/storage/list.rs
    // Impl
    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }

    ...

    // Test
    dog_contract.walk_the_dog(5);

    Test env

    Odra gives us some additional functions that we can use to communicate with the host (outside the contract context) +and to configure how the contracts are deployed and called. Let's revisit the example from the previous +article about host communication and implement the tests that prove it works:

    examples/src/features/testing.rs
    #[cfg(test)]
    mod tests {
    use super::TestingContractDeployer;

    #[test]
    fn test_env() {
    let testing_contract = TestingContractDeployer::init("MyContract".to_string());
    let creator = testing_contract.created_by();
    odra::test_env::set_caller(odra::test_env::get_account(1));
    let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());
    let creator2 = testing_contract2.created_by();
    assert!(creator != creator2);
    }
    }

    In the code above, we are deploying two instances of the same contract, but we're using odra::test_env::set_caller +to change the caller - so the Address which is deploying the contract. This changes the result of the odra::contract_env::caller() +the function we are calling inside the contract.

    Each test env comes with a set of functions that will let you write better tests:

    • fn set_caller(address: Address) - you've seen it in action just now
    • fn token_balance(address: Address) -> Balance - it returns the balance of the account associated with the given address
    • fn advance_block_time_by(seconds: BlockTime) - it increases the current value of block_time
    • fn get_account(n: usize) -> Address - it returns an nth address that was prepared for you by Odra in advance; +by default, you start with the 0th account
    • fn assert_exception<F, E>(err: E, block: F) - it executes the block code and expects err to happen
    • fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError> - returns +the event emitted by the contract

    Again, we'll see those used in the next articles.

    Deployer

    You may be wondering what is the TestingContractDeployer and where did it come from. +It is a piece of code generated automatically for you, thanks to the #[odra::module] macro. +If you used the #[odra(init)] on one of the methods, it will be the constructor of your contract. +Odra will make sure that it is called only once, so you can use it to initialize your data structures etc.

    If you do not provide the init method, you can deploy the contract using ::default() method. +In the end, you will get a Ref instance (in our case the TestingContractRef) which reimplements all +the methods you defined in the contract, but executes them on a blockchain!

    To learn more about the Ref contract, visit the Cross calls article.

    What's next

    We take a look at how Odra handles errors!

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/category/advanced/index.html b/docs/docs/0.6.0/category/advanced/index.html new file mode 100644 index 000000000..ad7031193 --- /dev/null +++ b/docs/docs/0.6.0/category/advanced/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced | Odra + + + + + +
    +
    Version: 0.6.0

    Advanced

    Advanced concepts of Odra Framework

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/category/backends/index.html b/docs/docs/0.6.0/category/backends/index.html new file mode 100644 index 000000000..f940b6ced --- /dev/null +++ b/docs/docs/0.6.0/category/backends/index.html @@ -0,0 +1,17 @@ + + + + + +Backends | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/category/basics/index.html b/docs/docs/0.6.0/category/basics/index.html new file mode 100644 index 000000000..7e2f04714 --- /dev/null +++ b/docs/docs/0.6.0/category/basics/index.html @@ -0,0 +1,17 @@ + + + + + +Basics | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/category/examples/index.html b/docs/docs/0.6.0/category/examples/index.html new file mode 100644 index 000000000..a2e666fa1 --- /dev/null +++ b/docs/docs/0.6.0/category/examples/index.html @@ -0,0 +1,17 @@ + + + + + +Examples | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/category/getting-started/index.html b/docs/docs/0.6.0/category/getting-started/index.html new file mode 100644 index 000000000..ee740aee5 --- /dev/null +++ b/docs/docs/0.6.0/category/getting-started/index.html @@ -0,0 +1,17 @@ + + + + + +Getting started | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/category/tutorials/index.html b/docs/docs/0.6.0/category/tutorials/index.html new file mode 100644 index 000000000..e1de2e8b7 --- /dev/null +++ b/docs/docs/0.6.0/category/tutorials/index.html @@ -0,0 +1,17 @@ + + + + + +Tutorials | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/examples/odra-examples/index.html b/docs/docs/0.6.0/examples/odra-examples/index.html new file mode 100644 index 000000000..0b161d124 --- /dev/null +++ b/docs/docs/0.6.0/examples/odra-examples/index.html @@ -0,0 +1,17 @@ + + + + + +odra-examples | Odra + + + + + +
    +
    Version: 0.6.0

    odra-examples

    Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.

    The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.

    Don't worry if you find learning solely by reading the code challenging. Go to the Tutorial section, where we will review it together. We will break the code into pieces, leaving no space for further questions.

    What's next

    Read the next article to learn about reusable Odra components encapsulated in odra-modules.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/examples/using-odra-modules/index.html b/docs/docs/0.6.0/examples/using-odra-modules/index.html new file mode 100644 index 000000000..1b3916dc2 --- /dev/null +++ b/docs/docs/0.6.0/examples/using-odra-modules/index.html @@ -0,0 +1,21 @@ + + + + + +Using odra-modules | Odra + + + + + +
    +
    Version: 0.6.0

    Using odra-modules

    Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.

    If you followed the Installation guide your Cargo.toml should look like:

    Cargo.toml
    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    To use odra-modules, edit your dependency and features sections.

    Cargo.toml
    [dependencies]
    odra = { path = "../core", default-features = false }
    odra-modules = { path = "../modules", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]
    casper = ["odra/casper", "odra-modules/casper"]
    danger

    odra-modules defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a casper feature in your project, add odra-modules/casperspecifically (it applies to each backend).

    Now, the only thing left is to add a module to your contract.

    Let's write an example of MyToken based on Erc20 module.

    use odra::types::{Address, U256};
    use odra_modules::erc20::Erc20;

    #[odra::module]
    pub struct MyToken {
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, initial_supply: U256) {
    let name = String::from("MyToken");
    let symbol = String::from("MT");
    let decimals = 9u8;
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    self.erc20.approve(spender, amount);
    }
    }
    info

    All available modules are placed in the main Odra repository.

    Available modules

    Odra modules comes with couple of ready-to-use modules and reusable extensions.

    Tokens

    Erc20

    The Erc20 module implements the ERC20 standard.

    Erc721

    The Erc721Base module implements the ERC721 standard, adjusted for the Odra framework.

    The Erc721Token module implements the ERC721Base and additionally uses +the Erc721Metadata and Ownable extensions.

    The Erc721Receiver trait lets you implement your own logic for receiving NFTs.

    The OwnedErc721WithMetadata trait is a combination of Erc721Token, Erc721Metadata and Ownable modules.

    Erc1155

    The Erc1155Base module implements the ERC1155 standard, adjusted for the Odra framework.

    The Erc1155Token module implements the ERC1155Base and additionally uses the Ownable extension.

    The OwnedErc1155 trait is a combination of Erc1155Token and Ownable modules.

    Wrapped native token

    The WrappedNativeToken module implements the Wrapper for the native token, +it was inspired by the WETH.

    Access

    AccessControl

    This module enables the implementation of role-based access control mechanisms for children +modules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API.

    Ownable

    This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner.

    The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the +transfer_ownership() function.

    Ownable2Step

    An extension of the Ownable module.

    Ownership can be transferred in a two-step process by using transfer_ownership() and accept_ownership() functions.

    Security

    Pauseable

    A module allowing to implement an emergency stop mechanism that can be triggered by any account.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/getting-started/flipper/index.html b/docs/docs/0.6.0/getting-started/flipper/index.html new file mode 100644 index 000000000..e37197515 --- /dev/null +++ b/docs/docs/0.6.0/getting-started/flipper/index.html @@ -0,0 +1,18 @@ + + + + + +Flipper example | Odra + + + + + +
    +
    Version: 0.6.0

    Flipper example

    To quickly start working with Odra, take a look at the following code sample. If you followed the +Installation tutorial, you should have this file already at src/flipper.rs.

    For further explanation of how this code works, see Flipper Internals.

    Let's flip

    flipper.rs
    use odra::Variable;

    /// A module definition. Each module struct consists Variables and Mappings
    /// or/and another modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }

    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    /// Retrieves value from the storage.
    /// If the value has never been set, the default value is returned.
    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }

    #[test]
    fn test_two_flippers() {
    let mut contract1 = FlipperDeployer::initial_settings();
    let contract2 = FlipperDeployer::initial_settings();
    assert!(!contract1.get());
    assert!(!contract2.get());
    contract1.flip();
    assert!(contract1.get());
    assert!(!contract2.get());
    }
    }

    What's next

    In the next category of articles, we will go through basic concepts of Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/getting-started/installation/index.html b/docs/docs/0.6.0/getting-started/installation/index.html new file mode 100644 index 000000000..97200532d --- /dev/null +++ b/docs/docs/0.6.0/getting-started/installation/index.html @@ -0,0 +1,22 @@ + + + + + +Installation | Odra + + + + + +
    +
    Version: 0.6.0

    Installation

    Hello fellow Odra user! This page will guide you through the installation process.

    Prerequisites

    To start working with Odra, you need to have the following installed on your machine:

    • Rust toolchain installed (see rustup.rs)
    • wasmstrip tool installed (see wabt)

    We do not provide exact commands for installing these tools, as they are different for different operating systems. +Please refer to the documentation of the tools themselves.

    With Rust toolchain ready, you can add a new target:

    rustup target add wasm32-unknown-unknown
    note

    wasm32-unknown-uknown is a target that will be used by Odra to compile your smart contracts to WASM files.

    Installing Cargo Odra

    Cargo Odra is a helpful tool that will help you to build and test your smart contracts. +It is not required to use Odra, but the documentation will assume that you have it installed.

    To install it, simply execute the following command:

    cargo install cargo-odra

    To check if it was installed correctly and see available commands, type:

    cargo odra --help

    If everything went fine, we can proceed to the next step.

    Creating a new Odra project

    To create a new project, simply execute:

    cargo odra new --name my-project && cd my_project

    This will create a new folder called "my_project" and initialize Odra there. Cargo Odra +will create a sample contract for you in src directory. You can run the tests of this contract +by executing:

    cargo odra test

    This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:

    cargo odra test -b casper

    Congratulations! Now you are ready to create contracts using Odra framework! If you had any problems during +the installation process, feel free to ask for help on our Discord.

    What's next?

    If you want to see the code that you just tested, continue to the description of Flipper example.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/index.html b/docs/docs/0.6.0/index.html new file mode 100644 index 000000000..c621b5225 --- /dev/null +++ b/docs/docs/0.6.0/index.html @@ -0,0 +1,25 @@ + + + + + +Odra framework | Odra + + + + + +
    +
    Version: 0.6.0

    Odra framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, +pragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract +development, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open +source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. We can do it +by abstracting over core concepts that all the above systems are built around. These are type system, +storage, entry points, execution context, and testing environment. We believe it will bring standardization +to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this +ecosystem.

    What's next

    See the Installation and our Flipper example +to find out how to start your new project with Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/tutorials/erc20/index.html b/docs/docs/0.6.0/tutorials/erc20/index.html new file mode 100644 index 000000000..7d7b7a9ed --- /dev/null +++ b/docs/docs/0.6.0/tutorials/erc20/index.html @@ -0,0 +1,17 @@ + + + + + +ERC-20 | Odra + + + + + +
    +
    Version: 0.6.0

    ERC-20

    It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.

    The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • advanced storage - key-value pairs,
    • Odra types like Address or Balance,
    • advanced events assertion.

    Code

    Our module has a pretty complex storage layout in comparison to the previous example.

    We need to store the following data:

    1. Immutable metadata - name, symbol and decimals.
    2. Total supply.
    3. Users' balances.
    4. Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.

    Module definition

    #[odra::module(events = [Transfer, Approval])]
    pub struct Erc20 {
    decimals: Variable<u8>,
    symbol: Variable<String>,
    name: Variable<String>,
    total_supply: Variable<Balance>,
    balances: Mapping<Address, Balance>,
    allowances: Mapping<Address, Mapping<Address, Balance>>
    }
    • L6 - For the first time, we need to store key-value pairs. In order to do that, we use Mapping. The name is taken after Solidity's native type mapping. You may notice the balances property maps Address to Balance. If you deal with addresses or you operate on tokens, you should always choose Address over String and Balance over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform.
    • L7 - Odra allows nested Mappings, what we utilize to store allowances.

    Metadata

    #[odra::module]
    impl Erc20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn symbol(&self) -> String {
    self.symbol.get_or_default()
    }

    pub fn decimals(&self) -> u8 {
    self.decimals.get_or_default()
    }

    pub fn total_supply(&self) -> Balance {
    self.total_supply.get_or_default()
    }
    }

    impl Erc20 {
    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.balances.add(address, *amount);
    self.total_supply.add(amount);
    Transfer {
    from: None,
    to: Some(*address),
    amount: *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Transfer {
    pub from: Option<Address>,
    pub to: Option<Address>,
    pub amount: Balance
    }
    • L1 - The first impl block, marked as a module, contains functions defined in the ERC-20 standard.
    • L3-L10 - A constructor sets the token metadata and mints the initial supply.
    • L12-L14 - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the Ownable example, we used the get() function returning an Option<T>. If the type implements Default trait, you can call get_or_default() function and the contract does not fail even if the value is not initialized.
    • L29 - The second impl is not an odra module, in other words these function will not be a part of contract's ABI.
    • L30-L39 - Mint function is public, so like in a regular rust code will be accessible from the outside. mint() use notation self.balances.add(&address, amount);, which it is syntactic sugar for:
    let current_balance = self.balances.get(&address).unwrap_or_default();
    let new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();
    self.balances.set(&address, new_balance);

    Core

    For the sake of completeness, let's implement the remaining functionalities like transfer, transfer_from, or approve. They are not introducing any new concepts, so we leave them without additional remarks.

    erc20.rs
    #[odra::module]
    impl Erc20 {
    ...
    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    let caller = contract_env::caller();
    self.raw_transfer(&caller, recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let spender = contract_env::caller();
    self.spend_allowance(owner, &spender, amount);
    self.raw_transfer(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    let owner = contract_env::caller();
    self.allowances.get_instance(&owner).set(spender, *amount);
    Approval {
    owner,
    spender: *spender,
    value: *amount
    }
    .emit();
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.balances.get_or_default(&address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.allowances.get_instance(owner).get_or_default(spender)
    }
    }

    impl Erc20 {
    ...

    fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let owner_balance = self.balances.get_or_default(&owner);
    if *amount > owner_balance {
    contract_env::revert(Error::InsufficientBalance)
    }
    self.balances.set(owner, owner_balance - *amount);
    self.balances.add(recipient, *amount);
    Transfer {
    from: Some(*owner),
    to: Some(*recipient),
    amount: *amount
    }
    .emit();
    }

    fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {
    let allowance = self.allowances.get_instance(owner).get_or_default(spender);
    if allowance < *amount {
    contract_env::revert(Error::InsufficientAllowance)
    }
    let new_allowance = allowance - *amount;
    self.allowances
    .get_instance(owner)
    .set(spender, new_allowance);
    Approval {
    owner: *owner,
    spender: *spender,
    value: allowance - *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Approval {
    pub owner: Address,
    pub spender: Address,
    pub value: U256
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Now, compare the code we have written, with Open Zeppelin code. Out of 10, how Solidity-ish is our implementation?

    Test

    erc20.rs
    #[cfg(test)]
    pub mod tests {
    use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};
    use odra::{assert_events, test_env, types::U256};

    pub const NAME: &str = "Plascoin";
    pub const SYMBOL: &str = "PLS";
    pub const DECIMALS: u8 = 10;
    pub const INITIAL_SUPPLY: u32 = 10_000;

    pub fn setup() -> Erc20Ref {
    Erc20Deployer::init(
    String::from(NAME),
    String::from(SYMBOL),
    DECIMALS,
    INITIAL_SUPPLY.into()
    )
    }

    #[test]
    fn initialization() {
    let erc20 = setup();

    assert_eq!(&erc20.symbol(), SYMBOL);
    assert_eq!(&erc20.name(), NAME);
    assert_eq!(erc20.decimals(), DECIMALS);
    assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());
    assert_events!(
    erc20,
    Transfer {
    from: None,
    to: Some(test_env::get_account(0)),
    amount: INITIAL_SUPPLY.into()
    }
    );
    }

    #[test]
    fn transfer_works() {
    let mut erc20 = setup();
    let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    erc20.transfer(&recipient, &amount);

    assert_eq!(
    erc20.balance_of(&sender),
    U256::from(INITIAL_SUPPLY) - amount
    );
    assert_eq!(erc20.balance_of(&recipient), amount);
    assert_events!(
    erc20,
    Transfer {
    from: Some(sender),
    to: Some(recipient),
    amount
    }
    );
    }

    #[test]
    fn transfer_error() {
    let mut erc20 = setup();
    let recipient = test_env::get_account(1);
    let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);

    test_env::assert_exception(Error::InsufficientBalance, || {
    erc20.transfer(&recipient, &amount)
    });
    }

    #[test]
    fn transfer_from_and_approval_work() {
    let mut erc20 = setup();
    let (owner, recipient, spender) = (
    test_env::get_account(0),
    test_env::get_account(1),
    test_env::get_account(2)
    );
    let approved_amount = 3_000.into();
    let transfer_amount = 1_000.into();

    // Owner approves Spender.
    erc20.approve(&spender, &approved_amount);

    // Allowance was recorded.
    assert_eq!(erc20.allowance(&owner, &spender), approved_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount
    }
    );

    // Spender transfers tokens from Owner to Recipient.
    test_env::set_caller(spender);
    erc20.transfer_from(&owner, &recipient, &transfer_amount);

    // Tokens are transferred and allowance decremented.
    assert_eq!(
    erc20.balance_of(&owner),
    U256::from(INITIAL_SUPPLY) - transfer_amount
    );
    assert_eq!(erc20.balance_of(&recipient), transfer_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount - transfer_amount
    },
    Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount: transfer_amount
    }
    );

    assert_events!(erc20, Approval, Transfer);
    }

    #[test]
    fn transfer_from_error() {
    let mut erc20 = setup();
    let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    test_env::set_caller(spender);
    test_env::assert_exception(Error::InsufficientAllowance, || {
    erc20.transfer_from(&owner, &spender, &amount)
    });
    }
    }
    • L111-123 - assert_events!() macro accepts multiple events. You must pass them in the order they were emitted.
    • L125 - Alternatively, if you don't want to check the entire event, you may assert only its type.
    danger

    You can not mix both approaches, you pass full events or types only.

    What's next

    Having two modules: Ownable and Erc20, let's combine them, and create an ERC-20 on steroids.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/tutorials/ownable/index.html b/docs/docs/0.6.0/tutorials/ownable/index.html new file mode 100644 index 000000000..8d8bebed2 --- /dev/null +++ b/docs/docs/0.6.0/tutorials/ownable/index.html @@ -0,0 +1,17 @@ + + + + + +Ownable | Odra + + + + + +
    +
    Version: 0.6.0

    Ownable

    In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • storing a single value,
    • defining constructors,
    • error handling,
    • defining and emitting events.
    • registering a contact in a test environment,
    • interactions with the test environment,
    • assertions (value, events, errors assertions).

    Code

    Before we write any code, we define functionalities we would like to implement.

    1. Module has an initializer that should be called once.
    2. Only the current owner can set a new owner.
    3. Read the current owner.
    4. A function that fails if called by a non-owner account.

    Define a module

    use odra::{types::Address, Variable};

    #[odra::module]
    pub struct Ownable {
    owner: Variable<Address>
    }

    That was easy, but it is crucial to understand the basic before we move on.

    • L3 - Firstly, we need create a struct called Ownable and apply #[odra::module] to it above.
    • L5 - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with Variable.

    Init the module

    use odra::{
    execution_error, contract_env, Event, types::{Address, event::OdraEvent}
    };
    ...

    #[odra::module]
    impl Ownable {
    #[odra(init)]
    pub fn init(&mut self, owner: &Address) {
    if self.owner.get().is_some() {
    contract_env::revert(Error::OwnerIsAlreadyInitialized)
    }

    self.owner.set(*owner);

    OwnershipChanged {
    prev_owner: None,
    new_owner: *owner
    }
    .emit();
    }
    }

    execution_error! {
    pub enum Error {
    OwnerIsNotInitialized => 1,
    }
    }

    #[derive(Event, Debug, PartialEq, Eq)]
    pub struct OwnershipChanged {
    pub prev_owner: Option<Address>,
    pub new_owner: Address
    }

    Ok, we have done a couple of things, let's analyze them one by one:

    • L5 - The impl should be an odra module, so add #[odra::module].
    • L7 - The init function is marked as #[odra(init)] making it a constructor. It matters if we would like to deploy the Ownable module as a standalone contract.
    • L23 - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an Error enum. Notice that the Error enum is defined inside the execution_error macro. It generates, among others, the required Into<ExecutionError> binding.
    • L9-L11 - If the owner has been set already, we call contract_env::revert() function. As an argument we pass Error::OwnerIsNotInitialized.
    • L13 - Then we write the owner passed as an argument to the storage. To do so we call the set() on Variable.
    • L29-L33 - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from odra::Event. We highly recommend to derive Debug, PartialEq and Eq for testing purpose.
    • L23 - Finally, we create the OwnershipChanged struct and call emit() function on it (import odra::types::event::OdraEvent trait). Hence we set the first owner, we set the prev_owner value to None.

    Features implementation

    #[odra::module]
    impl Ownable {
    ...

    pub fn ensure_ownership(&self, address: &Address) {
    if Some(address) != self.owner.get().as_ref() {
    contract_env::revert(Error::NotOwner)
    }
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ensure_ownership(&contract_env::caller());
    let current_owner = self.get_owner();
    self.owner.set(*new_owner);
    OwnershipChanged {
    prev_owner: Some(current_owner),
    new_owner: *new_owner
    }
    .emit();
    }

    pub fn get_owner(&self) -> Address {
    match self.owner.get() {
    Some(owner) => owner,
    None => contract_env::revert(Error::OwnerIsNotInitialized)
    }
    }
    }

    execution_error! {
    pub enum Error {
    NotOwner => 1,
    OwnerIsAlreadyInitialized => 2,
    OwnerIsNotInitialized => 3,
    }
    }

    The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along.

    • L5,L32 - ensure_ownership() is reads the current owner, and reverts if is does not match the input Address. Also we need to update our Error enum adding a new variant NotOwner.
    • L11 - The function defined above can be reused in change_ownership() implementation. We pass to it the current caller, using the contract_env::caller() function. The we update the state, and emit OwnershipChanged.
    • L22,L34 - Lastly, a getter function. As the Variable get() function returns an Option, we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new Error variant OwnerIsNotInitialized.

    Test

    #[cfg(test)]
    mod tests {
    use super::*;
    use odra::{assert_events, test_env};

    fn setup() -> (Address, OwnableRef) {
    let owner = test_env::get_account(0);
    let ownable = OwnableDeployer::init(owner);
    (owner, ownable)
    }

    #[test]
    fn initialization_works() {
    let (owner, ownable) = setup();
    assert_eq!(ownable.get_owner(), owner);

    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    );
    }

    #[test]
    fn owner_can_change_ownership() {
    let (owner, mut ownable) = setup();
    let new_owner = test_env::get_account(1);

    test_env::set_caller(owner);
    ownable.change_ownership(&new_owner);
    assert_eq!(ownable.get_owner(), new_owner);
    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: Some(owner),
    new_owner
    }
    );
    }

    #[test]
    fn non_owner_cannot_change_ownership() {
    let (_, mut ownable) = setup();
    let new_owner = test_env::get_account(1);
    ownable.change_ownership(&new_owner);

    test_env::assert_exception(Error::NotOwner, || {
    ownable.change_ownership(&new_owner);
    });
    }
    }
    • L6 - Each test case starts with the same initialization process, so for convenience, we defined the setup() function we call as the first statement in each test. Take a look at the signature fn setup() -> (Address, OwnableRef). OwnableRef is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ensure_ownership(), change_ownership(), get_owner(), but not init() which is a constructor.
    • L7 - Now, the module needs an owner, the easiest way is to take one from the test_env. We choose the address of first account (which is the default one).
    • L8 - Odra created for us OwnableDeployer struct which implements all constructor functions. In this case there is just one function - init() which corresponds the function we have implemented in the module.
    • L12 - It is time to define the first test. As you see, it is a regular rust test.
    • L14-15 - Using the setup() function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.
      note

      You may have noticed, we use here the term module interchangeably with contract. The reason is once we deploy our module onto a virtual blockchain it may be considered a contract.

    • L17-23 - On the contract, only the init() function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro assert_events. As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred.
    • L30 - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the test env predefines 20 accounts.
    • L32 - As mentioned, the default is the 0-th account, if you want to change the executor call the test_env::set_caller() function.
      note

      The caller switch applies only the next contract interaction, the second call will be done as the default account.

    • L49-55 - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call test_env::assert_exception() with the error you expect and a failing block of code.

    Summary

    The Ownable module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract.

    What's next

    In the next tutorial we will implement a ERC20 standard.

    + + + + \ No newline at end of file diff --git a/docs/docs/0.6.0/tutorials/owned-token/index.html b/docs/docs/0.6.0/tutorials/owned-token/index.html new file mode 100644 index 000000000..011887787 --- /dev/null +++ b/docs/docs/0.6.0/tutorials/owned-token/index.html @@ -0,0 +1,17 @@ + + + + + +OwnedToken | Odra + + + + + +
    +
    Version: 0.6.0

    OwnedToken

    This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.

    Code

    What should our module be capable of?

    1. Conform the Erc20 interface.
    2. Allow minting tokens but only the module owner.
    3. The current owner should be able to designate a new owner.

    Module definition

    Let's define a module called OwnedToken that is a composition of Ownable and Erc20 modules.

    owned_token.rs
    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!

    Delegation

    owned_token.rs
    use odra::types::{Address, Balance}

    ...

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> Balance {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    self.erc20.approve(spender, amount);
    }

    pub fn get_owner(&self) -> Address {
    self.ownable.get_owner()
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ownable.change_ownership(new_owner);
    }

    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.ownable.ensure_ownership(&contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    Easy. However, there are a few worth mentioning subtleness:

    • L10-L11 - A constructor is a great place to init both modules at once.
    • L14-L16 - Most of the entrypoints do not need any modification, so we simply delegates them to the erc20 module.
    • L50-L52 - The same we do with the ownable module.
    • L58-L61 - Minting should not be unconditional, we need some control over it. First, using ownable we make sure the caller really is the owner.

    Summary

    The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that.

    + + + + \ No newline at end of file diff --git a/docs/docs/advanced/advanced-storage/index.html b/docs/docs/advanced/advanced-storage/index.html new file mode 100644 index 000000000..f34915edd --- /dev/null +++ b/docs/docs/advanced/advanced-storage/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced Storage Concepts | Odra + + + + + +
    +
    Version: 0.7.0

    Advanced Storage Concepts

    The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.

    Recap and Basic Concepts

    Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including Variable, Mapping, and List. These types enable contracts to store and retrieve data in a structured manner. The Variable type is used to store a single value, while the List and Mapping types store collections of values.

    Variable: A Variable in Odra is a fundamental building block used for storing single values. Each Variable is uniquely identified by its name in the contract.

    Mapping: Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key.

    List: Built on top of the Variable and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over.

    If you need a refresher on these topics, please refer to our guide on basic storage in Odra.

    Advanced Storage Concepts

    Sequence

    The Sequence in Odra is a basic module that holds a Variable which keeps track of the current value.

    pub struct Sequence<T>
    where
    T: Num + One + OdraType
    {
    value: Variable<T>
    }

    The Sequence module provides functions get_current_value and next_value to get the current value and increment the value respectively.

    Advanced Mapping

    In Odra, the Mapping is a key-value storage system where the key is associated with a value. However, the value of the Mapping can be another Mapping. This concept is referred to as nested mapping. Moreover, the value of the Mapping can be an Odra module, introducing a greater level of complexity and utility.

    Let's consider the following example:

    examples/src/features/storage/mapping.rs
    use odra::{map, types::U256, Mapping, UnwrapOrRevert};

    use crate::owned_token::OwnedToken;

    #[odra::module]
    pub struct NestedMapping {
    strings: Mapping<String, Mapping<u32, Mapping<String, String>>>,
    tokens: Mapping<String, Mapping<u32, Mapping<String, OwnedToken>>>
    }

    #[odra::module]
    impl NestedMapping {

    ...

    pub fn set_token(
    &mut self,
    key1: String,
    key2: u32,
    key3: String,
    token_name: String,
    decimals: u8,
    symbol: String,
    initial_supply: &U256
    ) {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .init(token_name, symbol, decimals, initial_supply);
    }

    pub fn get_string_api(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    let mapping = self.strings.get_instance(&key1).get_instance(&key2);
    mapping.get(&key3).unwrap_or_revert()
    }

    pub fn total_supply(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> U256 {
    self.tokens
    .get_instance(&key1)
    .get_instance(&key2)
    .get_instance(&key3)
    .total_supply()
    }
    }
    note

    Accessing Odra Modules and Mapping is a bit different from accessing regular values like strings or numbers.

    Instead of using the get() function, call get_instance(), which sets the correct namespace for nested modules.

    If the terminal value is deeply nested, a long chain of get_instance() calls is required.

    To keep the codebase consistent, a map! macro can be used:

    examples/src/features/storage/mapping.rs
    ...

    pub fn set_string(&mut self, key1: String, key2: u32, key3: String, value: String) {
    map!(self.strings[key1][key2][key3] = value);
    }

    pub fn get_string_macro(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    map!(self.strings[key1][key2][key3])
    }

    danger

    The terminal value must not be an Odra Module.

    AdvancedStorage Contract

    The given code snippet showcases the AdvancedStorage contract that incorporates these storage concepts.

    use odra::{Sequence, Mapping};
    use crate::modules::Token;

    #[odra::module]
    pub struct AdvancedStorage {
    my_sequence: Sequence<u32>,
    my_mapping: Mapping<String, Mapping<String, Token>>,
    }

    impl AdvancedStorage {
    pub fn get_sequence_current_value(&self) -> u32 {
    self.my_sequence.get_current_value()
    }

    pub fn next_sequence_value(&mut self) -> u32 {
    self.my_sequence.next_value()
    }

    pub fn set_in_mapping(&mut self, outer_key: String, inner_key: String, value: Token) {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.set(&inner_key, value);
    }

    pub fn get_from_mapping(&self, outer_key: String, inner_key: String) -> Option<Token> {
    let inner_mapping = self.my_mapping.get_instance(&outer_key);
    inner_mapping.get(&inner_key)
    }
    }

    Conclusion

    Advanced storage features in Odra offer robust options for managing contract state. Understanding these concepts can help developers design and implement more efficient and flexible smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/advanced/attributes/index.html b/docs/docs/advanced/attributes/index.html new file mode 100644 index 000000000..2baf0787f --- /dev/null +++ b/docs/docs/advanced/attributes/index.html @@ -0,0 +1,19 @@ + + + + + +Attributes | Odra + + + + + +
    +
    Version: 0.7.0

    Attributes

    Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that allows developers to embed common checks into function definitions in a readable and reusable manner. These are essentially prerequisites for function execution.

    Odra defines a few attributes that can be applied to functions to equip them with superpowers.

    Init

    If your contract needs initial setup, adding the #[odra(init)] attribute to your function operates similarly to a constructor in object-oriented programming. This constructor is called immediately after the contract is deployed.

    It's important to note that a constructor function should not be invoked in any other context.

    Example

    examples/src/contracts/erc20.rs
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    Using

    An attribute applicable to struct fields. The using attribute accepts multiple values, separated by ,. +Each value attribute must point at an existing field.

    Example

    #[odra::module]
    struct Contract {
    access_control: AccessControl,
    meta: Metadata,
    #[odra(using = "access_control, meta")]
    // #[odra(using = "access_control, metadata")] - would not compile - `metadata` field does not exist
    storage: Storage
    }

    #[odra::module]
    struct AccessControl {
    owner: Variable<Address>
    }

    #[odra::module]
    struct Metadata {
    version: Variable<String>
    }

    #[odra::module]
    struct Storage {
    value: Variable<u8>,
    access_control: AccessControl,
    meta: Metadata
    }

    Payable

    When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the #[odra(payable)] attribute can send and take money in the form of native tokens.

    Example

    examples/src/contracts/tlw.rs
    #[odra(payable)]
    pub fn deposit(&mut self) {
    // Extract values
    let caller: Address = contract_env::caller();
    let amount: Balance = contract_env::attached_value();
    let current_block_time: BlockTime = contract_env::get_block_time();

    // Multiple lock check
    if self.balances.get(&caller).is_some() {
    contract_env::revert(Error::CannotLockTwice)
    }

    // Update state, emit event
    self.balances.set(&caller, amount);
    self.lock_expiration_map
    .set(&caller, current_block_time + self.lock_duration());
    Deposit {
    address: caller,
    amount
    }
    .emit();
    }

    If you try to send tokens to a non-payable function, the transaction will be automatically rejected.

    Non Reentrant

    Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds.

    To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts.

    They can also use reentrancy guards to block recursive calls to sensitive functions.

    In Odra you can just apply the #[odra(non_reentrant)] attribute to your function.

    Example

    #[odra::module]
    pub struct NonReentrantCounter {
    counter: Variable<u32>
    }

    #[odra::module]
    impl NonReentrantCounter {
    #[odra(non_reentrant)]
    pub fn count_ref_recursive(&mut self, n: u32) {
    if n > 0 {
    self.count();
    ReentrancyMockRef::at(&contract_env::self_address()).count_ref_recursive(n - 1);
    }
    }
    }

    impl NonReentrantCounter {
    fn count(&mut self) {
    let c = self.counter.get_or_default();
    self.counter.set(c + 1);
    }
    }

    #[cfg(test)]
    mod test {
    use odra::{test_env, types::ExecutionError};

    #[test]
    fn ref_recursion_not_allowed() {
    test_env::assert_exception(ExecutionError::reentrant_call(), || {
    let mut contract = super::NonReentrantCounterDeployer::default();
    contract.count_ref_recursive(11);
    });
    }
    }

    Mixing attributes

    A function can accept more than one attribute. The only exclusion is a constructor cannot be payable. +To apply multiple attributes, you can write:

    #[odra(payable, non_reentrant)]
    fn deposit() {
    // your logic...
    }

    or

    #[odra(payable)]
    #[odra(non_reentrant)]
    fn deposit() {
    // your logic...
    }

    In both cases attributes order does not matter.

    However, a constructor cannot be payable, so the below code would not compile.

    #[odra(payable)]
    #[odra(init)]
    fn initialize() {
    // your logic...
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/advanced/delegate/index.html b/docs/docs/advanced/delegate/index.html new file mode 100644 index 000000000..53eaeb5cc --- /dev/null +++ b/docs/docs/advanced/delegate/index.html @@ -0,0 +1,17 @@ + + + + + +Delegate | Odra + + + + + +
    +
    Version: 0.7.0

    Delegate

    Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.

    The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable.

    Overview

    To utilize the delegate feature in your contract, use the delegate! macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the delegate! macro, your parent module remains clean and easy to understand.

    You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself.

    Code Examples

    Consider the following basic example for better understanding:

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);
    pub fn approve(&mut self, spender: Address, amount: U256);
    pub fn name(&self) -> String;
    pub fn symbol(&self) -> String;
    pub fn decimals(&self) -> u8;
    pub fn total_supply(&self) -> U256;
    pub fn balance_of(&self, owner: Address) -> U256;
    pub fn allowance(&self, owner: Address, spender: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    pub fn change_ownership(&mut self, new_owner: Address);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    This OwnedToken contract includes two modules: Erc20 and Ownable. We delegate various functions from both modules using the delegate! macro. As a result, the contract retains its succinctness without compromising on functionality.

    The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities.

    Let's take a look at another example.

    use odra::{
    contract_env,
    types::{Address, U256}
    };

    use crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};

    #[odra::module]
    pub struct DeFiPlatform {
    ownable: Ownable,
    erc20: Erc20,
    exchange: Exchange
    }

    #[odra::module]
    impl DeFiPlatform {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    self.exchange.init(exchange_rate);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn balance_of(&self, owner: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    }

    to self.exchange {
    pub fn swap(&mut self, sender: Address, recipient: Address);
    pub fn set_exchange_rate(&mut self, new_rate: u64);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    In this DeFiPlatform contract, we include Erc20, Ownable, and Exchange modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure.

    Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/advanced/signatures/index.html b/docs/docs/advanced/signatures/index.html new file mode 100644 index 000000000..7c0614446 --- /dev/null +++ b/docs/docs/advanced/signatures/index.html @@ -0,0 +1,29 @@ + + + + + +Signatures | Odra + + + + + +
    +
    Version: 0.7.0

    Signatures

    As each backend can use a different scheme for generating key pairs, +Odra Framework provides a generic function for signature verification inside the contract context. +Thanks to this, you can write your code once, without worrying about underlying cryptography.

    Signature verification

    Signature verification is conducted by a function in contract_env:

    pub fn verify_signature(message: &Bytes, signature: &Bytes, public_key: &PublicKey) -> bool;

    Here's the simplest example of this function used in a contract:

    examples/src/features/signature_verifier.rs
    #[odra::module]
    impl SignatureVerifier {
    pub fn verify_signature(
    &self,
    message: &Bytes,
    signature: &Bytes,
    public_key: &PublicKey
    ) -> bool {
    contract_env::verify_signature(message, signature, public_key)
    }
    }

    Testing

    Besides the above function in the contract context, Odra provides corresponding functions in the test_env:

    pub fn sign_message(message: &Bytes, address: &Address) -> Bytes;

    pub fn public_key(address: &Address) -> PublicKey;

    sign_message will return a signed message. The signing itself will be performed using a private key +of an account behind the address.

    public_key returns the PublicKey of an address account.

    Thanks to those, you can write generic tests, that will work with all backends, despite differences +in signature schemes they use.

    examples/src/features/signature_verifier.rs
    #[test]
    fn signature_verification_works() {
    let message = "Message to be signed";
    let message_bytes = &Bytes::from(message.as_bytes().to_vec());
    let account = test_env::get_account(0);

    let signature = test_env::sign_message(message_bytes, &account);

    let public_key = test_env::public_key(&account);

    let signature_verifier = SignatureVerifierDeployer::default();
    assert!(signature_verifier.verify_signature(message_bytes, &signature, &public_key));
    }

    If you want, you can also test signatures that were created outside Odra. +However, you will need to prepare separate tests for each backend:

    examples/src/features/signature_verifier.rs
    /// The following test checks that the signature verification works with the signature produced
    /// by the casper wallet.
    #[test]
    #[cfg(feature = "casper")]
    fn verify_signature_casper_wallet() {
    use odra::casper::casper_types::bytesrepr::FromBytes;
    // Casper Wallet for the message "Ahoj przygodo!" signed using SECP256K1 key
    // produces the following signature:
    // 1e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa
    // Casper Wallet adds "Casper Message:\n" prefix to the message:
    let message = "Casper Message:\nAhoj przygodo!";
    let message_bytes = &Bytes::from(message.as_bytes().to_vec());

    // Depending on the type of the key, we need to prefix the signature with a tag:
    // 0x01 for ED25519
    // 0x02 for SECP256K1
    let signature_hex = "021e87e186238fa1df9c222b387a79910388c6ef56285924c7e4f6d7e77ed1d6c61815312cf66a5318db204c693b79e020b1d392dafe8c1b3841e1f6b4c41ca0fa";
    let signature: [u8; 65] = hex::decode(signature_hex).unwrap().try_into().unwrap();
    let signature_bytes = &Bytes::from(signature.to_vec());

    // Similar to the above, the public key is tagged:
    let public_key_hex = "02036d9b880e44254afaf34330e57703a63aec53b5918d4470059b67a4a906350105";
    let public_key_decoded = hex::decode(public_key_hex).unwrap();
    let (public_key, _) = odra::casper::casper_types::crypto::PublicKey::from_bytes(
    public_key_decoded.as_slice()
    )
    .unwrap();

    let signature_verifier = SignatureVerifierDeployer::default();
    assert!(signature_verifier.verify_signature(message_bytes, signature_bytes, &public_key));
    }

    ECRecover

    Odra Standard Library +part of the original Odra Proposal mentioned ECRecover as one of the functions that will be +implemented by the Odra Framework. We decided to add signatures verification instead.

    The reasoning behind this decision is that the ECRecover works only with one type of signature. +Odra tries to be backend-agnostic, which implies that it should also be signature-type-agnostic. +This was possible to achieve when implementing generic signature verification, but not with ECRecover.

    In short, the implementation of ECRecover would not depend on the backend, pushing it into some kind of +utils library, and those already exist, for example in +solana_program +crate.

    + + + + \ No newline at end of file diff --git a/docs/docs/advanced/using/index.html b/docs/docs/advanced/using/index.html new file mode 100644 index 000000000..3fcd883ed --- /dev/null +++ b/docs/docs/advanced/using/index.html @@ -0,0 +1,17 @@ + + + + + +Module reusing | Odra + + + + + +
    +
    Version: 0.7.0

    Module reusing

    This feature of the Odra Framework is designed to enhance the reusability and modularity of your smart contracts. It empowers developers to reuse modules and override custom namespaces. This guide provides an in-depth look at the module reusing feature, complete with practical code examples.

    Conceptual Overview

    By default, each instance of a module has its own namespace, ensuring each internal value has a unique storage key.

    #[odra::module]
    struct Contract {
    value: Variable<u8>, // the default namespace would be "value"
    module: Module
    }

    #[odra::module]
    struct Module {
    secret: Variable<String> // the default namespace would be "module_secret"
    }

    While this isolation often proves useful, there are scenarios where shared storage is beneficial.

    Usage

    Odra generates an array of keys, prefixing the storage key of child modules with the parent namespace, like in the example above. But what if you want to reuse the same instance of a module? Add a #[odra(using)] attribute to a module to override the default behavior. This is information for the module "Do not prefix storage keys for the given module." so effectively, the child and the parent use the same module instance.

    Let's illustrate it with a simple example. The example provided below introduces some additional complexity by featuring deeper module nesting.

    use odra::Variable;

    #[odra::module]
    pub struct SharedStorage {
    pub value: Variable<String>
    }

    #[odra::module]
    pub struct MyStorage {
    pub shared: SharedStorage,
    pub version: Variable<u8>
    }

    #[odra::module]
    pub struct ComposableContract {
    pub shared: SharedStorage,
    #[odra(using = "shared")]
    pub storage: MyStorage
    }

    #[odra::module]
    impl ComposableContract {
    #[odra(init)]
    pub fn init(&mut self, version: u8, value: String) {
    self.storage.version.set(version);
    self.shared.value.set(value);
    }

    pub fn get_value(&self) -> String {
    self.shared.value.get_or_default()
    }

    pub fn get_value_via_storage(&self) -> String {
    self.storage.shared.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod test {
    use crate::composer::ComplexContractDeployer;

    #[test]
    fn t() {
    let shared_value = "shared_value".to_string();
    let extra_value: u32 = 314;
    let token = ComplexContractDeployer::init(1, shared_value.clone(), extra_value);

    assert_eq!(token.get_value(), shared_value);
    assert_eq!(token.get_value_via_storage(), shared_value);
    assert_eq!(token.get_extra_value(), extra_value);
    }
    }

    In this example, we've introduced a new module, MoreStorage, which nests MyStorage and includes an extra value. The ComplexContract contains SharedStorage and MoreStorage, creating a deeper nesting. Our test ensures that values can be successfully retrieved from different storage levels.

    If we had used the default behavior, would have been created (so, they would no longer be shared), each having distinct namespaces:

    1. On the contract level - contract_shared_value.
    2. On the MyStorage module level - contract_more_storage_shared_value.

    This example showcases how you can effectively use the module reusing feature to build intricate and efficient smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/backends/casper/index.html b/docs/docs/backends/casper/index.html new file mode 100644 index 000000000..09b1ff8d5 --- /dev/null +++ b/docs/docs/backends/casper/index.html @@ -0,0 +1,44 @@ + + + + + +Casper | Odra + + + + + +
    +
    Version: 0.7.0

    Casper

    The Casper backend allows you to compile your contracts into WASM files which can be deployed +onto Casper Blockchain +and lets you to easily run them against Casper's Execution Engine locally.

    Types

    A struct to be written into the storage must implement OdraType which is defined as follow:

    pub trait OdraType: 
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    The other exposed types are:

    Contract Env

    As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances.

    Events

    An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've +already learned from the events article, in Odra you emit an event, similarly, you would do it in Solidity.

    Under the hood, Odra integrates with Casper Event Standard and creates a few URefs in the global state when a contract is being installed:

    1. __events - a dictionary that stores events' data.
    2. __events_length - the evens count.
    3. __events_ces_version - the version of Casper Event Standard.
    4. __events_schema - a dictionary that stores event schemas.

    Besides that, all the events the contract emits are registered - events schemas are written to the storage under the __events_schema key.

    note

    Don't forget to expose events in the module using #[odra::module(events = [...])].

    So, Events are nothing different from any other data stored by a contract.

    A struct to be an event must implement SerializableEvent which is defined as follow:

    pub trait SerializableEvent: 
    odra_types::event::OdraEvent +
    casper_types::CLTyped +
    casper_types::bytesrepr::ToBytes +
    casper_types::bytesrepr::FromBytes {}

    Payable

    The first Odra idiom is a Contract Main Purse. It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper URef and a purse are created and stored under the __contract_main_purse key.

    Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a Cargo Purse. It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse.

    Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable. +If under the way something goes wrong with the transfer, the contract reverts.

    The transferred amount can be read inside the contract by calling contract_env::attached_value().

    note

    Odra expects the cargo_purse runtime argument to be attached to a contract call. +In case of its absence, the contract_env::attached_value() returns zero.

    Revert

    In Casper, we can stop the execution pretty straightforwardly - call the runtime::revert(). +Odra adds an extra abstraction layer - in a contract ExecutionErrors are defined, which ultimately are transformed into Casper's ApiError::User.

    Context

    Casper equips developers with very low-level tooling, which can be cumbersome for newcomers. +If you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack.

    The contract_env::self_address() function takes the first element of the callstack (runtime::get_call_stack()) and casts it to Address.

    The contract_env::caller() function takes the second element of the call stack (runtime::get_call_stack()) and casts it to Address.

    As mentioned in the [Payable] section, to store CSPR, each contract creates its purse. To read the contract balance, you call contract_env::self_balance, which checks the balance of the purse stored under __contract_main_purse.

    Test Env

    Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the Casper Execution Engine.

    In your test, you can freely switch execution context by setting as a caller (test_env::set_caller()) one of the 20 predefined accounts. Each account possesses the default amount of Motes (100_000_000_000_000_000).

    The Test Env internally keeps track of the current block time, error and attached value.

    Each test is executed on a fresh instance of the Test Env.

    Usage

    Name of the Casper backend in Odra is casper, so to run the tests against it, simply pass it as a -b +parameter:

    cargo odra test -b casper

    If you want to just generate a wasm file, simply run:

    cargo odra build -b casper

    Constructors

    Let's define a basic Odra module that includes a constructor:

    #[odra::module]
    struct Counter {
    value: Variable<u32>
    }

    #[odra::module]
    impl Counter {
    #[odra(init)]
    pub initialize(&mut self, value: u32) {
    self.value.set(value);
    }
    }

    Read more about constructors here.

    WASM arguments

    When deploying a new contract you have to specify following arguments.

    Required arguments:

    • odra_cfg_package_hash_key_name - String type. The key under which the package hash of the contract will be stored.
    • odra_cfg_allow_key_override - Bool type. If true and the key specified in odra_cfg_package_hash_key_name already exists, it will be overwritten.
    • odra_cfg_is_upgradable - Bool type. If true, the contract will be deployed as upgradable.

    Optional arguments:

    • odra_cfg_constructor - String type. If the contract has the constructor entry point marked with #[odra(init)], this should be set to the constructor name.
    • constructor arguments that match entry point set in odra_cfg_constructor.

    Contract Deploys

    Example: Deploy Counter

    To deploy your contract with a constructor using casper-client, you need to pass the above arguments. +Additionally, you need to pass the value argument, which sets the arbitrary initial value for the counter.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 5000000000000 \
    --session-path ./wasm/counter.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'counter_package_hash'" \
    --session-arg "odra_cfg_allow_key_override:bool:'true'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'initialize'" \
    --session-arg "value:u32:42"

    For a more in-depth tutorial, please refer to the Casper's 'Writing On-Chain Code'.

    Example: Deploy ERC721

    Odra comes with a standard ERC721 token implementation. +Clone the main Odra repo and navigate to the modules directory.

    Firstly contract needs to be compiled.

    cargo odra build -b casper -c erc721_token

    It produces the erc721_token.wasm file in the wasm directory.

    Now it's time to deploy the contract.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 300000000000 \
    --session-path ./wasm/erc721_token.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'my_nft'" \
    --session-arg "odra_cfg_allow_key_override:bool:'false'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \
    --session-arg "name:string:'MyNFT'" \
    --session-arg "symbol:string:'NFT'" \
    --session-arg "base_uri:string:'https://example.com/'"

    It's done. +The contract is deployed and ready to use. +Your account is the owner of the contract and you can mint and burn tokens. +For more details see the code of the ERC721 module.

    To obtain the package hash of the contract search for my_nft key +in your account's named keys.

    Example: Deploy ERC1155

    The process is similar to the one described in the previous section.

    Contract compilation:

    cargo odra build -b casper -c erc1155_token

    Contract deployment:

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 300000000000 \
    --session-path ./wasm/erc1155_token.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'my_tokens'" \
    --session-arg "odra_cfg_allow_key_override:bool:'false'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \

    As previously, your account is the owner and can mint and burn tokens. +For more details see the code of the ERC1155 module.

    Sending CSPR to a contract

    Defining payable entry points is described in Native Token section.

    What is happening under the hood is that Odra creates a new cargo_purse argument for each payable +entry point. The cargo_purse needs to be top-upped with CSPR before calling the contract. +When a contract adds CSPR to another contract call, Odra handles it for you. +The problem arises when you want to call an entry point and attach CSPR as an account. +The only way of doing that is by executing code in the sessions context, that +top-ups the cargo_purse and then calls the contract.

    Odra provides a generic proxy_caller.wasm that does exactly that. +You can build it by yourself from the main Odra repository, or use the proxy_caller.wasm +we maintain.

    Using proxy_caller.wasm

    To use the proxy_caller.wasm you need to attach the following arguments:

    • contract_package_hash - BytesArray(32) type. The package hash of the contract you want to call. +Result of to_bytes on CasperPackageHash.
    • entry_point - String type. The name of the entry point you want to call.
    • args - Bytes type. It is a serialized RuntimeArgs with the arguments you want to pass +to the entry point. To be specific it is the result of to_bytes method wrapped with Bytes type.
    • attached_value. Option<U512> type. The amount of CSPR you want to attach to the call.
    • amount. U512 type. Should be the same value as attached_value if not None. +It is a special Casper argument that enables the access to account's main purse.

    Currently casper-client doesn't allow building such arguments. +You have to build it using your SDK.

    Execution

    First thing Odra does with your code, is similar to the one used in MockVM - +a list of entrypoints is generated, thanks to the #[odra::module] macro.

    + + + + \ No newline at end of file diff --git a/docs/docs/backends/mock-vm/index.html b/docs/docs/backends/mock-vm/index.html new file mode 100644 index 000000000..4e4138515 --- /dev/null +++ b/docs/docs/backends/mock-vm/index.html @@ -0,0 +1,26 @@ + + + + + +MockVM | Odra + + + + + +
    +
    Version: 0.7.0

    MockVM

    The MockVM is a simple implementation of a mock backend with a minimal set of features that allows testing +the code written in Odra without compiling the contract to the target architecture and spinning up the +blockchain.

    Thanks to MockVM tests run a lot faster than other backends and debugging is a lot simpler.

    Usage

    The MockVM is the default backend for Odra framework, so each time you run

    cargo odra test

    You are running your code against it.

    Architecture

    MockVM consists of two main parts: the Contract Register and the State.

    The Contract Register is just a list of contracts deployed onto the MockVM, identified by an Address. +Each time we call the contract, we call its instance stored in the Contract Register.

    Contracts and Test Env functions can modify the State of the MockVM.

    Contrary to the "real" backend, which holds the whole history of the blockchain, +the MockVM State holds only the current state of the MockVM. +Thanks to this and the fact that we do not need the blockchain itself, +MockVM starts instantly and runs the tests in the native speed.

    Execution

    When the MockVM backend is enabled, the #[odra::module] macro is responsible for converting +your pub functions into a list of Entrypoints, which are put into a Contract Container. +When the contract is deployed, its Container registered into a Registry under an address. +During the contract call, MockVM finds an Entrypoint and executes the code.

    + + + + \ No newline at end of file diff --git a/docs/docs/backends/what-is-a-backend/index.html b/docs/docs/backends/what-is-a-backend/index.html new file mode 100644 index 000000000..ad06cc54d --- /dev/null +++ b/docs/docs/backends/what-is-a-backend/index.html @@ -0,0 +1,27 @@ + + + + + +What is a backend? | Odra + + + + + +
    +
    Version: 0.7.0

    What is a backend?

    You can think of a backend as a target platform for your smart contract. +This can be a piece of code allowing you to quickly check your code - like MockVM, +or a complete virtual machine, spinning up a blockchain for you - like CasperVM.

    Each backend has to come with two parts that Odra requires - the Contract Env and the Test Env.

    Contract Env

    The Contract Env is a simple interface that each backend needs to implement, +exposing features of the blockchain from the perspective of the contract.

    It gives Odra a set of functions, which allows implementing more complex concepts - +for example, to implement Mapping, +Odra requires some kind of storage integration. +The exact implementation of those functions is a responsibility of a backend, +making Odra and its user free to implement the contract logic, +instead of messing with the blockchain internals.

    Other functions from Contract Env include handling transfers, addresses, block time, errors and events.

    Test Env

    Similarly to the Contract Env, the Test Env exposes a set of functions that allows the communication with +the backend from the outside world - really useful for implementing tests.

    This ranges from interacting with the blockchain - like deploying and calling the contracts, +to the more test-oriented - handling errors, forwarding the block time, etc.

    What's next

    We will take a look at backends Odra implements in more detail.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/cargo-odra/index.html b/docs/docs/basics/cargo-odra/index.html new file mode 100644 index 000000000..8d5085f77 --- /dev/null +++ b/docs/docs/basics/cargo-odra/index.html @@ -0,0 +1,38 @@ + + + + + +Cargo Odra | Odra + + + + + +
    +
    Version: 0.7.0

    Cargo Odra

    If you followed the Installation tutorial properly, +you should already be set up with the Cargo Odra tool. It is an executable that will help you with +managing your smart contracts project, testing and running them on multiple backends (blockchains).

    Let's take a look at all the possibilities that Cargo Odra gives you.

    Managing projects

    Two commands will help you create a new project. The first one is cargo odra new. +You need to pass one parameter, namely --name {PROJECT_NAME}:

    cargo odra new --name my-project

    This will create a new project in the my_project folder and name it my_project. You can see it +for yourself, for example by taking a look into a Cargo.toml file created in your project's folder:

    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    The project is created using the template located in Odra's main repository. +By default it uses full template, if you want, you can use minimalistic blank by running:

    cargo odra new -t blank --name my-project

    By default, the latest release of Odra will be used for the template and as a dependency. +You can pass a source of Odra you want to use, by using -s parameter:

    cargo odra new -n my-project -s ../odra # will use local folder of odra
    cargo odra new -n my-project -s release/0.5.0 # will use github branch, e.g. if you want to test new release
    cargo odra new -n my-project -s 0.3.1 # will use a version released on crates.io

    The second way of creating a project is by using init command:

    cargo odra init --name my-project

    It works in the same way as new, but instead of creating a new folder, it will create a project +in the current, empty directory.

    Generating code

    If you want to quickly create a new contract code, you can use the generate command:

    cargo odra generate -c counter 

    This will create a new file src/counter.rs with sample code, add appropriate use and mod sections +to src/lib.rs and update the Odra.toml file accordingly. To learn more about Odra.toml file, +visit Odra.toml.

    Testing

    Most used command during the development of your project should be this one:

    cargo odra test

    It will run your tests against Odra's MockVM. It is substantially faster than virtual machines +provided by blockchains developers and implements all the features Odra uses.

    When you want to run tests against a "real" VM, just provide the name of the backend using -b +option:

    cargo odra test -b casper

    In the example above, Cargo Odra will build the project, the Casper builder, generate the wasm files, +spin up CasperVM instance, deploy the contracts onto it and run the tests against it. Pretty neat. +Keep in mind that this is a lot slower than MockVM and you cannot use the debugger. +This is why MockVM was created and should be your first choice when developing contracts. +Of course, testing all of your code against a blockchain VM is a must in the end.

    If you want to run only some of the tests, you can pass arguments to the cargo test command +(which is run in the background obviously):

    cargo odra test -- this-will-be-passed-to-cargo-test

    If you want to run tests which names contain the word two, you can execute:

    cargo odra test -- two

    Of course, you can do the same when using the backend:

    cargo odra test -b casper -- two

    Building code

    You can also build the code itself and generate the output contracts without running the tests. +To do so, simply run:

    cargo odra build -b casper

    Where casper is the name of the backend we are using in this example. If the build process +finishes successfully, wasm files will be located in wasm folder.

    Updating dependencies

    You will learn later, that the project using Odra contains more than one Rust project - your own and +one or more builders. To run cargo update on all of them at once instead of traversing all the folders +you can use this command:

    cargo odra update

    What's next

    In the next section, we will take a look at all the files and directories that cargo odra created +for us and explain their purpose.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/communicating-with-host/index.html b/docs/docs/basics/communicating-with-host/index.html new file mode 100644 index 000000000..1b2184d88 --- /dev/null +++ b/docs/docs/basics/communicating-with-host/index.html @@ -0,0 +1,21 @@ + + + + + +Host Communication | Odra + + + + + +
    +
    Version: 0.7.0

    Host Communication

    One of the things that your contract will probably do is to query the host for some information - +what is the current time? Who called me? Following example shows how to do this:

    examples/src/features/host_functions.rs
    use odra::Variable;
    use odra::types::{BlockTime, Address};

    #[odra::module]
    pub struct HostContract {
    name: Variable<String>,
    created_at: Variable<BlockTime>,
    created_by: Variable<Address>,
    }

    #[odra::module]
    impl HostContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.created_at.set(odra::contract_env::get_block_time());
    self.created_by.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }
    }

    As you can see, we are calling functions from odra::contract_env. get_block_time() will return +the current block time wrapped in Odra type BlockTime. caller() will return an Odra Address of +a caller (this can be an external caller or another contract).

    info

    You will learn more functions that Odra exposes from host and types it uses in further articles.

    What's next

    In the next article, we'll dive into testing your contracts with Odra, so you can check that the code +we presented in fact works!

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/cross-calls/index.html b/docs/docs/basics/cross-calls/index.html new file mode 100644 index 000000000..843a9b0c8 --- /dev/null +++ b/docs/docs/basics/cross-calls/index.html @@ -0,0 +1,25 @@ + + + + + +Cross calls | Odra + + + + + +
    +
    Version: 0.7.0

    Cross calls

    To show how to handle calls between contracts, first, let's implement two of them:

    examples/src/features/cross_calls.rs
    use odra::Variable;
    use odra::types::{Address};

    #[odra::module]
    pub struct CrossContract {
    pub math_engine: Variable<Address>,
    }

    #[odra::module]
    impl CrossContract {
    #[odra(init)]
    pub fn init(&mut self, math_engine_address: Address) {
    self.math_engine.set(math_engine_address);
    }

    pub fn add_using_another(&self) -> u32 {
    let math_engine_address = self.math_engine.get().unwrap();
    MathEngineRef::at(math_engine_address).add(3, 5)
    }
    }

    #[odra::module]
    pub struct MathEngine {
    }

    #[odra::module]
    impl MathEngine {
    pub fn add(&self, n1: u32, n2: u32) -> u32 {
    n1 + n2
    }
    }

    MathEngine contract can add two numbers. CrossContract takes an Address in its init function and saves it in +storage for later use. If we deploy the MathEngine first and take note of its address, we can then deploy +CrossContract and use MathEngine to perform complicated calculations for us!

    To call the external contract, we use the Ref that was created for us by Odra:

    examples/src/features/cross_calls.rs
    MathEngineRef::at(math_engine_address).add(3, 5)

    Contract Ref

    We mentioned Ref already in our Testing article. +It is a reference to already deployed - running contract. +Here we are going to take a deeper look at it.

    Similarly to a Deployer, the Ref is generated automatically, thanks to the #[odra::module] macro. +To get an instance of a reference, we can either deploy a contract (using Deployer) or by building it +directly, using ::at(address: Address) method, as shown above. +The reference implements all the public endpoints to the contract (those marked as pub in #[odra::module] +impl), alongside couple methods:

    • at(Address) -> Self - points the reference to an Address
    • address() -> Address - returns the Address the reference is currently pointing at
    • with_tokens(Amount) -> Self - attaches Amount of native tokens to the next call

    External Contracts

    Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI.

    For that purpose, we use #[odra:external_contract] macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of.

    Let's pretend the MathEngine we defined is an external contract. There is a contract with add() function that adds two numbers somewhere.

    examples/src/features/cross_calls.rs
    #[odra::external_contract]
    pub trait Adder {
    fn add(&self, n1: u32, n2: u32) -> u32;
    }

    Analogously to modules, Odra creates the AdderRef struct (but do not create the AdderDeployer). Having an address we can call:

    examples/src/features/cross_calls.rs
    AdderRef::at(address).add(3, 5)

    Testing

    Let's see how we can test our cross calls using this knowledge:

    examples/src/features/cross_calls.rs
    use super::{CrossContractDeployer, MathEngineDeployer};

    #[test]
    fn test_cross_calls() {
    let math_engine_contract = MathEngineDeployer::default();
    let cross_contract = CrossContractDeployer::init(math_engine_contract.address());

    assert_eq!(cross_contract.add_using_another(), 8);
    }

    Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a MathEngine contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the add() function we want to use.

    examples/src/features/cross_calls.rs
    #[cfg(test)]
    mod tests {
    use odra::types::Address;
    use crate::features::cross_calls::{Adder, AdderRef};

    #[test]
    fn test_ext() {
    let adder = AdderRef::at(get_adder_address());

    assert_eq!(adder.add(1, 2), 3);
    }

    fn get_adder_address() -> Address {
    let contract = MathEngineDeployer::default();
    contract.address()
    }
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/basics/directory-structure/index.html b/docs/docs/basics/directory-structure/index.html new file mode 100644 index 000000000..e49f737b3 --- /dev/null +++ b/docs/docs/basics/directory-structure/index.html @@ -0,0 +1,27 @@ + + + + + +Directory structure | Odra + + + + + +
    +
    Version: 0.7.0

    Directory structure

    After creating a new project using Odra and running the tests, you will be presented with the +following files and directories:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── CHANGELOG.md
    ├── Odra.toml
    ├── README.md
    ├── .builder_casper/
    ├── src/
    │ ├── flipper.rs
    │ └── lib.rs
    ├── target/
    └── wasm/

    Cargo.toml

    Let's first take a look at Cargo.toml file:

    [package]
    name = "sample"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    By default, your project will use the latest odra version available at crates.io. We are using two features:

    • odra/mock-vm - it is responsible for running tests on Odra's MockVM
    • odra/casper - backend implementation of Casper blockchain +More backends will be released as features that will be possible to enable here.

    Odra.toml

    This is the file that holds information about contracts that will be generated when running cargo odra build and +cargo odra test:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    As we can see, we have a single contract, its fqn (Fully Qualified Name) corresponds to +the contract is located in src/flipper.rs. +More contracts can be added here by hand, or by using cargo odra generate command.

    .builder_* folders

    Those folders will be created and managed automatically by Cargo Odra. They contain project files necessary +for building wasm files and running them against blockchain VMs. As it is not necessary to modify +files in those folders in any way, by default they are hidden (hence the . at the beginning of the +folder name).

    src/

    This is the folder where your smart contract files live.

    target/

    Files generated by cargo during the build process are put here.

    wasm/

    WASM files generated by cargo odra build and cargo odra test are put here. You can grab those WASM files +and deploy them on the blockchain of your choosing.

    What's next

    Now, let's take a look at one of the files mentioned above in more detail, +namely the Odra.toml file.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/errors/index.html b/docs/docs/basics/errors/index.html new file mode 100644 index 000000000..bec20f3f3 --- /dev/null +++ b/docs/docs/basics/errors/index.html @@ -0,0 +1,23 @@ + + + + + +Errors | Odra + + + + + +
    +
    Version: 0.7.0

    Errors

    Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the +following example of a simple owned contract:

    examples/src/features/handling_errors.rs
    use odra::{execution_error, Variable, UnwrapOrRevert};
    use odra::types::Address;

    #[odra::module]
    pub struct OwnedContract {
    name: Variable<String>,
    owner: Variable<Address>,
    }

    execution_error! {
    pub enum Error {
    OwnerNotSet => 1,
    NotAnOwner => 2,
    }
    }


    #[odra::module]
    impl OwnedContract {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.owner.set(odra::contract_env::caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn owner(&self) -> Address {
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)
    }

    pub fn change_name(&mut self, name: String) {
    let caller = odra::contract_env::caller();
    if caller != self.owner() {
    odra::contract_env::revert(Error::NotAnOwner)
    }

    self.name.set(name);
    }
    }

    Firstly, we are using execution_error! macro to define our own set of Errors that our contract will +throw. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use +unwrap_or_revert_with and pass an error as an argument:

    examples/src/features/handling_errors.rs
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)

    You and the users of your contract will be thankful for a meaningful error message!

    You can also throw the error directly, by using revert:

    examples/src/features/handling_errors.rs
    odra::contract_env::revert(Error::NotAnOwner)

    Testing errors

    Okay, but how about testing it? We've already mentioned a function - assert_exception. This is how you will +use it:

    examples/src/features/handling_errors.rs
    use super::{OwnedContractDeployer, OwnedContractRef};
    use super::Error;

    #[test]
    fn test_owner_error() {
    let owner = odra::test_env::get_account(0);
    let not_an_owner = odra::test_env::get_account(1);

    odra::test_env::set_caller(owner);
    let mut owned_contract = OwnedContractDeployer::init("OwnedContract".to_string());

    odra::test_env::set_caller(not_an_owner);
    odra::test_env::assert_exception(Error::NotAnOwner, || {
    owned_contract.change_name("NewName".to_string());
    })
    }

    In the example above, because we are calling the change_name method as an address which is not an "owner", +we are expecting that "NotAnOwner" error will be thrown.

    note

    Here we are creating another reference to the already deployed contract using OwnedContractRef::at() and passing to it +its Address. Note that OwnedContractDeployer::init() returns the same type.

    What's next

    We will learn how to emit and test events using Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/events/index.html b/docs/docs/basics/events/index.html new file mode 100644 index 000000000..096bb2641 --- /dev/null +++ b/docs/docs/basics/events/index.html @@ -0,0 +1,20 @@ + + + + + +Events | Odra + + + + + +
    +
    Version: 0.7.0

    Events

    Different blockchains implement events in different ways. Odra lets you forget about it by introducing +Odra Events. Take a look:

    examples/src/features/events.rs
    use odra::{Event, contract_env};
    use odra::types::{Address, BlockTime, event::OdraEvent};

    #[odra::module(events = [PartyStarted])]
    pub struct PartyContract {
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    #[odra::module]
    impl PartyContract {
    #[odra(init)]
    pub fn init(&self) {
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();
    }
    }

    We defined a new contract, which emits an event called PartyStarted when the contract is deployed. +To define an event, we derive an Event macro like this:

    examples/src/features/events.rs
    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: BlockTime,
    }

    Among other things, it adds an emit() function to the struct, which allows you to emit the event simply +as that:

    examples/src/features/events.rs
    PartyStarted {
    caller: contract_env::caller(),
    block_time: contract_env::get_block_time(),
    }.emit();

    Some backends may need to know all the events at compilation time to register them once the contract is deployed. To register events, add an events attribute to the struct's #[odra::module] macro.

    The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module.

    Testing events

    Odra's test_env comes with a handy macro assert_events! which lets you easily test the events that a given contract has emitted:

    examples/src/features/events.rs
    use odra::{assert_events, test_env};
    use crate::features::events::PartyStarted;
    use super::PartyContractDeployer;

    #[test]
    fn test_party() {
    let party_contract = PartyContractDeployer::init();
    assert_events!(
    party_contract,
    PartyStarted {
    caller: test_env::get_account(0),
    block_time: 0,
    }
    );
    }

    What's next

    Read the next article to learn how to call other contracts from the contract context.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/flipper-internals/index.html b/docs/docs/basics/flipper-internals/index.html new file mode 100644 index 000000000..4a0cfa6d8 --- /dev/null +++ b/docs/docs/basics/flipper-internals/index.html @@ -0,0 +1,35 @@ + + + + + +Flipper Internals | Odra + + + + + +
    +
    Version: 0.7.0

    Flipper Internals

    In this article, we take a deep dive into the code shown in the +Flipper example, where we will explain in more detail all +the Odra-specific sections of the code.

    flipper.rs
    use odra::Variable;

    Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation +that can be reused between targets. In the above case, we're importing Variable, which is responsible +for storing simple values on the blockchain's storage.

    Struct

    flipper.rs
    /// A module definition. Each module struct consists of Variables and Mappings
    /// or/and other modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    In Odra, all contracts are also modules, which can be reused between contracts. That's why we need +to mark the struct with the #[odra::module] macro. In the struct definition itself, we state all +the fields of the contract. Those fields can be regular Rust data types, however - those will not +be persisted on the blockchain. They can also be Odra modules - defined in your project or coming +from Odra itself. Finally, to make the data persistent on the blockchain, you can use something like +Variable<T> showed above. To learn more about storage interaction, take a look at the +next article.

    Impl

    flipper.rs
    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }
    ...

    Similarly to the struct, we mark the impl section with the #[odra::module] macro. Odra will take all +pub functions from this section and create contract endpoints from them. So, if you wish to have +functions that are not available for calling outside the contract, do not make them public. Alternatively, +you can create a separate impl section without the macro - all functions defined there, even marked +with pub will be not callable.

    The #[odra(init)] macro marks the constructor of the contract. This function will be limited to only +to a single call, all further calls to it will result in an error.

    flipper.rs
        ...
    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }
    ...

    The endpoints above show you how to interact with the simplest type of storage - Variable<T>. The data +saved there using set function will be persisted in the blockchain.

    Tests

    flipper.rs
    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }
    ...

    You can write tests in any way you prefer and know in Rust. In the example above we are deploying the +contract using FlipperDeployer - a piece of code generated automatically thanks to the macros. +The contract will be deployed on the VM you chose while running cargo odra test.

    What's next

    Now let's take a look at the different types of storage that Odra provides and how to use them.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/modules/index.html b/docs/docs/basics/modules/index.html new file mode 100644 index 000000000..9e00ab554 --- /dev/null +++ b/docs/docs/basics/modules/index.html @@ -0,0 +1,20 @@ + + + + + +Modules | Odra + + + + + +
    +
    Version: 0.7.0

    Modules

    Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you +write is also a module, thanks to a macro #[odra::module]. This means that we can easily rewrite our math +example from the previous article, to use a single contract, but still separate our "math" code:

    examples/src/features/modules.rs
    use crate::features::cross_calls::MathEngine;

    #[odra::module]
    pub struct ModulesContract {
    pub math_engine: MathEngine,
    }

    #[odra::module]
    impl ModulesContract {
    pub fn add_using_module(&self) -> u32 {
    self.math_engine.add(3, 5)
    }
    }

    Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as +a module!

    info

    To see how modules can be used in a real-world scenario, check out the ERC20 example in the main odra repository!

    Testing

    As we don't need to hold addresses, the test is really simple:

    examples/src/features/modules.rs
    use super::ModulesContractDeployer;

    #[test]
    fn test_modules() {
    let modules_contract = ModulesContractDeployer::default();
    assert_eq!(modules_contract.add_using_module(), 8);
    }

    What's next

    We will see how to handle native token transfers.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/native-token/index.html b/docs/docs/basics/native-token/index.html new file mode 100644 index 000000000..5102a7269 --- /dev/null +++ b/docs/docs/basics/native-token/index.html @@ -0,0 +1,26 @@ + + + + + +Native token | Odra + + + + + +
    +
    Version: 0.7.0

    Native token

    Different blockchains come with different implementations of their native tokens. Odra wraps it all for you +in easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit +their funds and anyone can withdraw them:

    examples/src/features/native_token.rs
    use odra::types::Balance;
    use odra::contract_env;

    #[odra::module]
    pub struct PublicWallet {
    }

    #[odra::module]
    impl PublicWallet {
    #[odra(payable)]
    pub fn deposit(&mut self) {
    }

    pub fn withdraw(&mut self, amount: Balance) {
    contract_env::transfer_tokens(contract_env::caller(), amount);
    }
    }
    danger

    The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make +any checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is +even possible.

    To see a more reasonable example, check out examples/src/tlw.rs in the odra main repository.

    You can see a new macro used here: #[odra(payable)] - it will add all the code needed for a function to +be able to receive the funds. Additionally, we are using a new function from contract_env - transfer_tokens. +It does exactly what you are expecting it to do - it will transfer native tokens from the contract to the +specified address.

    We are also using the Balance - an Odra type that wraps around the type that the underlying blockchain uses +for counting tokens.

    Testing

    To be able to test how many tokens a contract (or any address) has, test_env comes with a function - +token_balance:

    examples/src/features/native_token.rs
    use odra::types::Balance;
    use odra::test_env;
    use super::PublicWalletDeployer;

    #[test]
    fn test_modules() {
    let mut my_contract = PublicWalletDeployer::default();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::zero());

    my_contract.with_tokens(Balance::from(100)).deposit();
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(100));

    my_contract.withdraw(Balance::from(25));
    assert_eq!(test_env::token_balance(my_contract.address()), Balance::from(75));
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/basics/odra-toml/index.html b/docs/docs/basics/odra-toml/index.html new file mode 100644 index 000000000..b1986ba89 --- /dev/null +++ b/docs/docs/basics/odra-toml/index.html @@ -0,0 +1,23 @@ + + + + + +Odra.toml | Odra + + + + + +
    +
    Version: 0.7.0

    Odra.toml

    As mentioned in the previous article, Odra.toml is a file that contains information about all the contracts +that Odra will build. Let's take a look at the file structure again:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    The name will be used as a name for the contract - the generated wasm file will be in the above case named +flipper.wasm.

    The fqn (Fully Qualified Name) is used by the builder to locate the exact struct where +the contract is defined.

    Adding a new contract manually

    Besides using the cargo odra generate command, you can add a new contract to be compiled by hand. +To do this, add another [[contracts]] element, name it and make sure that the fqn is set correctly.

    For example, if you want to create a new contract called counter, your Odra.toml file should finally +look like this:

    [[contracts]]
    name = "flipper"
    fqn = "sample::Flipper"

    [[contracts]]
    name = "counter"
    fqn = "sample::Counter"

    What's next

    In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous +Flipper contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/storage-interaction/index.html b/docs/docs/basics/storage-interaction/index.html new file mode 100644 index 000000000..92ba3d489 --- /dev/null +++ b/docs/docs/basics/storage-interaction/index.html @@ -0,0 +1,36 @@ + + + + + +Storage interaction | Odra + + + + + +
    +
    Version: 0.7.0

    Storage interaction

    The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go +through all of them and explain their pros and cons.

    Variable

    The Variable is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your +variable in the Variable type. Let's look at a "real world" example of a contract that represents a dog:

    examples/src/features/storage/variable.rs
    #[odra::module]
    pub struct DogContract {
    barks: Variable<bool>,
    weight: Variable<u32>,
    name: Variable<String>,
    walks: Variable<Vec<u32>>,
    }

    You can see the Variable wrapping the data. Even complex types like Vec can be wrapped (with some caveats)!

    Let's make this contract usable, by providing a constructor and some getter functions:

    examples/src/features/storage/variable.rs
    use odra::Variable;

    #[odra::module]
    impl DogContract {
    #[odra(init)]
    pub fn init(&mut self, barks: bool, weight: u32, name: String) {
    self.barks.set(barks);
    self.weight.set(weight);
    self.name.set(name);
    self.walks.set(Vec::<u32>::default());
    }

    pub fn barks(&self) -> bool {
    self.barks.get_or_default()
    }

    pub fn weight(&self) -> u32 {
    self.weight.get_or_default()
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.len() as u32
    }

    pub fn walks_total_length(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.iter().sum()
    }
    }

    As you can see, you can access the data, by using get_or_default function:

    examples/src/features/storage/variable.rs
    ...
    self.barks.get_or_default()
    ...
    note

    Keep in mind that using get() will result in an Option that you'll need to unwrap - the variable +doesn't have to be initialized!

    To modify the data, use the set() function:

    examples/src/features/storage/variable.rs
    self.barks.set(barks);

    A Variable is easy to use and efficient for simple data types. One of its downsides is that it +serializes the data as a whole, so when you're using complex types like Vec or HashMap, +each time you get or set the whole data is read and written to the blockchain storage.

    In the example above, if we want to see how many walks our dog had, we would use the function:

    examples/src/features/storage/variable.rs
    pub fn walks_amount(&self) -> usize {
    let walks = self.walks.get_or_default();
    walks.len()
    }

    But to do so, we need to extract the whole serialized vector from the storage, which would inefficient, +especially for larger sets of data.

    To tackle this issue following two types were created.

    Mapping

    The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to +pass two values - the key type and the value type. Let's look at the variation of the Dog contract, that +uses Mapping to store information about our dog's friends and how many times they visited:

    examples/src/features/storage/mapping.rs
    use odra::{Mapping, Variable};

    #[odra::module]
    pub struct DogContract2 {
    name: Variable<String>,
    friends: Mapping<String, u32>,
    }

    In the example above, our key is a String (it is a name of the friend) and we are storing u32 values +(amount of visits). To read and write values from and into a Mapping we use a similar approach +to the one shown in the Variables section with one difference - we need to pass a key:

    examples/src/features/storage/mapping.rs
    pub fn visit(&mut self, friend_name: String) {
    let visits = self.visits(friend_name.clone());
    self.friends.set(&friend_name, visits + 1);
    }

    pub fn visits(&self, friend_name: String) -> u32 {
    self.friends.get_or_default(&friend_name)
    }

    The biggest improvement over a Variable is that we can model functionality of a HashMap using Mapping. +The amount of data written to and read from the storage is minimal. However, we cannot iterate over Mapping. +We could implement such behavior by using a numeric type key and saving the length of the set in a +separate variable. Thankfully Odra comes with a prepared solution - the List type.

    note

    If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with +a Variable working together:

    core/src/list.rs
    use odra::{Variable, List};

    pub struct List<T> {
    values: Mapping<u32, T>,
    index: Variable<u32>
    }

    List

    Going back to our DogContract example - let's revisit the walk case. This time, instead of Vec, +we'll use the list:

    examples/src/features/storage/list.rs
    #[odra::module]
    pub struct DogContract3 {
    name: Variable<String>,
    walks: List<u32>,
    }

    As you can see, the notation is very similar to the Vec. To understand the usage, take a look +at the reimplementation of the functions with an additional function that takes our dog for a walk +(it writes the data to the storage):

    examples/src/features/storage/list.rs
    #[odra::module]
    impl DogContract3 {
    #[odra(init)]
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    self.walks.len()
    }

    pub fn walks_total_length(&self) -> u32 {
    self.walks.iter().sum()
    }

    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }
    }

    Now, we can know how many walks our dog had without loading the whole vector from the storage. +We need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all +the cases for you.

    info

    All of the above examples, alongside the tests, are available in the odra repository in the examples/src/docs/ folder.

    Custom Types

    By default you can store only built-in types like numbers, Options, Results, Strings, Vectors.

    Implementing custom types is straightforward, your type must derive from OdraType:

    use odra::{Address, OdraType};

    #[derive(OdraType)]
    pub struct Dog {
    pub name: String,
    pub age: u8,
    pub owner: Option<Address>
    }
    note

    Each field of your struct must be an OdraType.

    What's next

    In the next article, we'll see how to query the host for information about the world and our contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/basics/testing/index.html b/docs/docs/basics/testing/index.html new file mode 100644 index 000000000..152d5ae86 --- /dev/null +++ b/docs/docs/basics/testing/index.html @@ -0,0 +1,32 @@ + + + + + +Testing | Odra + + + + + +
    +
    Version: 0.7.0

    Testing

    Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write +regular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the +previous article:

    examples/src/features/storage/list.rs
    use odra::{Variable, List};

    #[cfg(test)]
    mod tests {
    use super::DogContract3Deployer;

    #[test]
    fn init_test() {
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());
    assert_eq!(dog_contract.walks_amount(), 0);
    assert_eq!(dog_contract.walks_total_length(), 0);
    dog_contract.walk_the_dog(5);
    dog_contract.walk_the_dog(10);
    assert_eq!(dog_contract.walks_amount(), 2);
    assert_eq!(dog_contract.walks_total_length(), 15);
    }
    }

    The #[odra(module)] macro created a Deployer code for us, which will deploy the contract on the +VM:

    examples/src/features/storage/list.rs
    let mut dog_contract = DogContract3Deployer::init("Mantus".to_string());

    From now on, we can use dog_contract to interact with our deployed contract - in particular, all +pub functions from the impl section that was annotated with a macro are available to us:

    examples/src/features/storage/list.rs
    // Impl
    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }

    ...

    // Test
    dog_contract.walk_the_dog(5);

    Test env

    Odra gives us some additional functions that we can use to communicate with the host (outside the contract context) +and to configure how the contracts are deployed and called. Let's revisit the example from the previous +article about host communication and implement the tests that prove it works:

    examples/src/features/testing.rs
    #[cfg(test)]
    mod tests {
    use super::TestingContractDeployer;

    #[test]
    fn test_env() {
    let testing_contract = TestingContractDeployer::init("MyContract".to_string());
    let creator = testing_contract.created_by();
    odra::test_env::set_caller(odra::test_env::get_account(1));
    let testing_contract2 = TestingContractDeployer::init("MyContract2".to_string());
    let creator2 = testing_contract2.created_by();
    assert!(creator != creator2);
    }
    }

    In the code above, we are deploying two instances of the same contract, but we're using odra::test_env::set_caller +to change the caller - so the Address which is deploying the contract. This changes the result of the odra::contract_env::caller() +the function we are calling inside the contract.

    Each test env comes with a set of functions that will let you write better tests:

    • fn set_caller(address: Address) - you've seen it in action just now
    • fn token_balance(address: Address) -> Balance - it returns the balance of the account associated with the given address
    • fn advance_block_time_by(seconds: BlockTime) - it increases the current value of block_time
    • fn get_account(n: usize) -> Address - it returns an nth address that was prepared for you by Odra in advance; +by default, you start with the 0th account
    • fn assert_exception<F, E>(err: E, block: F) - it executes the block code and expects err to happen
    • fn get_event<T: MockVMType + OdraEvent>(address: Address, index: i32) -> Result<T, EventError> - returns +the event emitted by the contract

    Again, we'll see those used in the next articles.

    Deployer

    You may be wondering what is the TestingContractDeployer and where did it come from. +It is a piece of code generated automatically for you, thanks to the #[odra::module] macro. +If you used the #[odra(init)] on one of the methods, it will be the constructor of your contract. +Odra will make sure that it is called only once, so you can use it to initialize your data structures etc.

    If you do not provide the init method, you can deploy the contract using ::default() method. +In the end, you will get a Ref instance (in our case the TestingContractRef) which reimplements all +the methods you defined in the contract, but executes them on a blockchain!

    To learn more about the Ref contract, visit the Cross calls article.

    What's next

    We take a look at how Odra handles errors!

    + + + + \ No newline at end of file diff --git a/docs/docs/category/advanced/index.html b/docs/docs/category/advanced/index.html new file mode 100644 index 000000000..7062b0163 --- /dev/null +++ b/docs/docs/category/advanced/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced | Odra + + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/docs/category/backends/index.html b/docs/docs/category/backends/index.html new file mode 100644 index 000000000..d17134129 --- /dev/null +++ b/docs/docs/category/backends/index.html @@ -0,0 +1,17 @@ + + + + + +Backends | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/category/basics/index.html b/docs/docs/category/basics/index.html new file mode 100644 index 000000000..3c4d18c4e --- /dev/null +++ b/docs/docs/category/basics/index.html @@ -0,0 +1,17 @@ + + + + + +Basics | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/category/examples/index.html b/docs/docs/category/examples/index.html new file mode 100644 index 000000000..40ca1abd7 --- /dev/null +++ b/docs/docs/category/examples/index.html @@ -0,0 +1,17 @@ + + + + + +Examples | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/category/getting-started/index.html b/docs/docs/category/getting-started/index.html new file mode 100644 index 000000000..3baeb1fba --- /dev/null +++ b/docs/docs/category/getting-started/index.html @@ -0,0 +1,17 @@ + + + + + +Getting started | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/category/tutorials/index.html b/docs/docs/category/tutorials/index.html new file mode 100644 index 000000000..3b688707b --- /dev/null +++ b/docs/docs/category/tutorials/index.html @@ -0,0 +1,17 @@ + + + + + +Tutorials | Odra + + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/docs/examples/odra-examples/index.html b/docs/docs/examples/odra-examples/index.html new file mode 100644 index 000000000..4573a3951 --- /dev/null +++ b/docs/docs/examples/odra-examples/index.html @@ -0,0 +1,17 @@ + + + + + +odra-examples | Odra + + + + + +
    +
    Version: 0.7.0

    odra-examples

    Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.

    The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.

    Don't worry if you find learning solely by reading the code challenging. Go to the Tutorial section, where we will review it together. We will break the code into pieces, leaving no space for further questions.

    What's next

    Read the next article to learn about reusable Odra components encapsulated in odra-modules.

    + + + + \ No newline at end of file diff --git a/docs/docs/examples/using-odra-modules/index.html b/docs/docs/examples/using-odra-modules/index.html new file mode 100644 index 000000000..54a38da6b --- /dev/null +++ b/docs/docs/examples/using-odra-modules/index.html @@ -0,0 +1,21 @@ + + + + + +Using odra-modules | Odra + + + + + +
    +
    Version: 0.7.0

    Using odra-modules

    Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.

    If you followed the Installation guide your Cargo.toml should look like:

    Cargo.toml
    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = { version = "0.3.1", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm"]
    casper = ["odra/casper"]

    To use odra-modules, edit your dependency and features sections.

    Cargo.toml
    [dependencies]
    odra = { path = "../core", default-features = false }
    odra-modules = { path = "../modules", default-features = false }

    [features]
    default = ["mock-vm"]
    mock-vm = ["odra/mock-vm", "odra-modules/mock-vm"]
    casper = ["odra/casper", "odra-modules/casper"]
    danger

    odra-modules defines the same features as the core framework. It's essential to add the dependency without default features. And if you define a casper feature in your project, add odra-modules/casperspecifically (it applies to each backend).

    Now, the only thing left is to add a module to your contract.

    Let's write an example of MyToken based on Erc20 module.

    use odra::types::{Address, U256};
    use odra_modules::erc20::Erc20;

    #[odra::module]
    pub struct MyToken {
    erc20: Erc20
    }

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, initial_supply: U256) {
    let name = String::from("MyToken");
    let symbol = String::from("MT");
    let decimals = 9u8;
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    self.erc20.approve(spender, amount);
    }
    }
    info

    All available modules are placed in the main Odra repository.

    Available modules

    Odra modules comes with couple of ready-to-use modules and reusable extensions.

    Tokens

    Erc20

    The Erc20 module implements the ERC20 standard.

    Erc721

    The Erc721Base module implements the ERC721 standard, adjusted for the Odra framework.

    The Erc721Token module implements the ERC721Base and additionally uses +the Erc721Metadata and Ownable extensions.

    The Erc721Receiver trait lets you implement your own logic for receiving NFTs.

    The OwnedErc721WithMetadata trait is a combination of Erc721Token, Erc721Metadata and Ownable modules.

    Erc1155

    The Erc1155Base module implements the ERC1155 standard, adjusted for the Odra framework.

    The Erc1155Token module implements the ERC1155Base and additionally uses the Ownable extension.

    The OwnedErc1155 trait is a combination of Erc1155Token and Ownable modules.

    Wrapped native token

    The WrappedNativeToken module implements the Wrapper for the native token, +it was inspired by the WETH.

    Access

    AccessControl

    This module enables the implementation of role-based access control mechanisms for children +modules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API.

    Ownable

    This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner.

    The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the +transfer_ownership() function.

    Ownable2Step

    An extension of the Ownable module.

    Ownership can be transferred in a two-step process by using transfer_ownership() and accept_ownership() functions.

    Security

    Pauseable

    A module allowing to implement an emergency stop mechanism that can be triggered by any account.

    + + + + \ No newline at end of file diff --git a/docs/docs/getting-started/flipper/index.html b/docs/docs/getting-started/flipper/index.html new file mode 100644 index 000000000..90f9f7856 --- /dev/null +++ b/docs/docs/getting-started/flipper/index.html @@ -0,0 +1,18 @@ + + + + + +Flipper example | Odra + + + + + +
    +
    Version: 0.7.0

    Flipper example

    To quickly start working with Odra, take a look at the following code sample. If you followed the +Installation tutorial, you should have this file already at src/flipper.rs.

    For further explanation of how this code works, see Flipper Internals.

    Let's flip

    flipper.rs
    use odra::Variable;

    /// A module definition. Each module struct consists Variables and Mappings
    /// or/and another modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Variable<bool>,
    }

    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    #[odra(init)]
    pub fn initial_settings(&mut self) {
    self.value.set(false);
    }

    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    /// Retrieves value from the storage.
    /// If the value has never been set, the default value is returned.
    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperDeployer;

    #[test]
    fn flipping() {
    // To test a module we need to deploy it using autogenerated Deployer.
    let mut contract = FlipperDeployer::initial_settings();
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }

    #[test]
    fn test_two_flippers() {
    let mut contract1 = FlipperDeployer::initial_settings();
    let contract2 = FlipperDeployer::initial_settings();
    assert!(!contract1.get());
    assert!(!contract2.get());
    contract1.flip();
    assert!(contract1.get());
    assert!(!contract2.get());
    }
    }

    What's next

    In the next category of articles, we will go through basic concepts of Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/getting-started/installation/index.html b/docs/docs/getting-started/installation/index.html new file mode 100644 index 000000000..8a6ec6911 --- /dev/null +++ b/docs/docs/getting-started/installation/index.html @@ -0,0 +1,22 @@ + + + + + +Installation | Odra + + + + + +
    +
    Version: 0.7.0

    Installation

    Hello fellow Odra user! This page will guide you through the installation process.

    Prerequisites

    To start working with Odra, you need to have the following installed on your machine:

    • Rust toolchain installed (see rustup.rs)
    • wasmstrip tool installed (see wabt)

    We do not provide exact commands for installing these tools, as they are different for different operating systems. +Please refer to the documentation of the tools themselves.

    With Rust toolchain ready, you can add a new target:

    rustup target add wasm32-unknown-unknown
    note

    wasm32-unknown-uknown is a target that will be used by Odra to compile your smart contracts to WASM files.

    Installing Cargo Odra

    Cargo Odra is a helpful tool that will help you to build and test your smart contracts. +It is not required to use Odra, but the documentation will assume that you have it installed.

    To install it, simply execute the following command:

    cargo install cargo-odra

    To check if it was installed correctly and see available commands, type:

    cargo odra --help

    If everything went fine, we can proceed to the next step.

    Creating a new Odra project

    To create a new project, simply execute:

    cargo odra new --name my-project && cd my_project

    This will create a new folder called "my_project" and initialize Odra there. Cargo Odra +will create a sample contract for you in src directory. You can run the tests of this contract +by executing:

    cargo odra test

    This will run tests using Odra's internal MockVM. You can run those tests against a real backend, let's use CasperVM:

    cargo odra test -b casper

    Congratulations! Now you are ready to create contracts using Odra framework! If you had any problems during +the installation process, feel free to ask for help on our Discord.

    What's next?

    If you want to see the code that you just tested, continue to the description of Flipper example.

    + + + + \ No newline at end of file diff --git a/docs/docs/index.html b/docs/docs/index.html new file mode 100644 index 000000000..60e1eca5b --- /dev/null +++ b/docs/docs/index.html @@ -0,0 +1,25 @@ + + + + + +Odra framework | Odra + + + + + +
    +
    Version: 0.7.0

    Odra framework

    Odra is a high-level smart contract framework for Rust, which encourages rapid development and clean, +pragmatic design. Built by experienced developers, it takes care of much of the hassle of smart contract +development, enabling you to focus on writing your dapp without reinventing the wheel. It's free and open +source.

    Odra's goal is to become the go-to smart contract framework for all WebAssembly-based blockchains.

    A smart contract written using Odra can be executed on all integrated systems. We can do it +by abstracting over core concepts that all the above systems are built around. These are type system, +storage, entry points, execution context, and testing environment. We believe it will bring standardization +to the development of Rust-based smart contracts and enable code reusability we have not yet seen in this +ecosystem.

    What's next

    See the Installation and our Flipper example +to find out how to start your new project with Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/advanced/advanced-storage/index.html b/docs/docs/next/advanced/advanced-storage/index.html new file mode 100644 index 000000000..730589815 --- /dev/null +++ b/docs/docs/next/advanced/advanced-storage/index.html @@ -0,0 +1,18 @@ + + + + + +Advanced Storage Concepts | Odra + + + + + +
    +
    Version: 0.8.0

    Advanced Storage Concepts

    The Odra Framework provides advanced storage interaction capabilities that extend beyond the basic storage interaction. This document will focus on the Mapping and Sequence modules, which are key components of the advanced storage interaction in Odra.

    Recap and Basic Concepts

    Before we delve into the advanced features, let's recap some basic storage concepts in Odra. In the realm of basic storage interaction, Odra provides several types for interacting with contract storage, including Var, Mapping, and List. These types enable contracts to store and retrieve data in a structured manner. The Var type is used to store a single value, while the List and Mapping types store collections of values.

    Var: A Var in Odra is a fundamental building block used for storing single values. Each Var is uniquely identified by its name in the contract.

    Mapping: Mapping in Odra serves as a key-value storage system. It stores an association of unique keys to values, and the value can be retrieved using the key.

    List: Built on top of the Var and Mapping building blocks, List in Odra allows storing an ordered collection of values that can be iterated over.

    If you need a refresher on these topics, please refer to our guide on basic storage in Odra.

    Advanced Storage Concepts

    Sequence

    The Sequence in Odra is a basic module that holds a Var which keeps track of the current value.

    pub struct Sequence<T>
    where
    T: Num + One + OdraType
    {
    value: Var<T>
    }

    The Sequence module provides functions get_current_value and next_value to get the current value and increment the value respectively.

    Advanced Mapping

    In Odra, a Mapping is a key-value storage system where the key is associated with a value. +In previous examples, the value of the Mapping typically comprised a standard serializable type (such as number, string, or bool) or a custom type derived from odra::OdraType.

    However, there are more advanced scenarios where the value of the Mapping represents a module itself. This approach is beneficial when managing a collection of modules, each maintaining its unique state.

    Let's consider the following example:

    examples/src/features/storage/mapping.rs
    use odra::{map, types::U256, Mapping, UnwrapOrRevert};

    use crate::owned_token::OwnedToken;

    #[odra::module]
    pub struct Mappings {
    strings: Mapping<(String, u32, String), String>,
    tokens: Mapping<String, OwnedToken>
    }

    #[odra::module]
    impl Mappings {

    ...

    pub fn total_supply(&mut self, token_name: String) -> U256 {
    self.tokens.module(&token_name).total_supply()
    }

    pub fn get_string_api(
    &self,
    key1: String,
    key2: u32,
    key3: String
    ) -> String {
    let opt_string = self.strings.get(&(key1, key2, key3));
    opt_string.unwrap_or_revert(&self.env())
    }
    }

    As you can see, a Mapping key can consist of a tuple of values, not limited to a single value.

    note

    Accessing Odra modules differs from accessing regular values such as strings or numbers.

    Firstly, within a Mapping, you don't encapsulate the module with Submodule.

    Secondly, rather than utilizing the Mapping::get() function, call Mapping::module(), which returns SubModule<T> and sets the appropriate namespace for nested modules.

    AdvancedStorage Contract

    The given code snippet showcases the AdvancedStorage contract that incorporates these storage concepts.

    use odra::{Address, casper_types::U512, Sequence, Mapping};
    use crate::modules::Token;

    #[odra::module]
    pub struct AdvancedStorage {
    counter: Sequence<u32>,
    tokens: Mapping<(String, String), Token>>,
    }

    impl AdvancedStorage {
    pub fn current_value(&self) -> u32 {
    self.counter.get_current_value()
    }

    pub fn increment_and_get(&mut self) -> u32 {
    self.counter.next_value()
    }

    pub fn balance_of(&mut self, token_name: String, creator: String, address: Address) -> U512 {
    let token = self.tokens.module(&(token_name, creator));
    token.balance_of(&address)
    }

    pub fn mint(&self, outer_token_namekey: String, creator: String, amount: U512, to: Address) {
    let mut token = self.tokens.module(&(token_name, creator));
    token.mint(amount, to);
    }
    }

    Conclusion

    Advanced storage features in Odra offer robust options for managing contract state. Two key takeaways from this document are:

    1. Odra offers a Sequence module, enabling contracts to store and increment a single value.
    2. Mappings support composite keys expressed as tuples and can store modules as values.

    Understanding these concepts can help developers design and implement more efficient and flexible smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/advanced/attributes/index.html b/docs/docs/next/advanced/attributes/index.html new file mode 100644 index 000000000..bf723ce6d --- /dev/null +++ b/docs/docs/next/advanced/attributes/index.html @@ -0,0 +1,20 @@ + + + + + +Attributes | Odra + + + + + +
    +
    Version: 0.8.0

    Attributes

    Smart contract developers with Ethereum background are familiar with Solidity's concept of modifiers in Solidity - a feature that +allows developers to embed common checks into function definitions in a readable and reusable manner. +These are essentially prerequisites for function execution.

    Odra defines a few attributes that can be applied to functions to equip them with superpowers.

    Payable

    When writing a smart contract, you need to make sure that money can be both sent to and extracted from the contract. The 'payable' attribute helps wit this. Any function, except for a constructor, with the #[odra(payable)] attribute can send and take money in the form of native tokens.

    Example

    examples/src/contracts/tlw.rs
    #[odra(payable)]
    pub fn deposit(&mut self) {
    // Extract values
    let caller: Address = self.env().caller();
    let amount: U256 = self.env().attached_value();
    let current_block_time: u64 = self.env().get_block_time();

    // Multiple lock check
    if self.balances.get(&caller).is_some() {
    self.env.revert(Error::CannotLockTwice)
    }

    // Update state, emit event
    self.balances.set(&caller, amount);
    self.lock_expiration_map
    .set(&caller, current_block_time + self.lock_duration());
    self.env()
    .emit_event(Deposit {
    address: caller,
    amount
    });
    }

    If you try to send tokens to a non-payable function, the transaction will be automatically rejected.

    Non Reentrant

    Reentrancy attacks in smart contracts exploit the possibility of a function being called multiple times before its initial execution is completed, leading to the repeated unauthorized withdrawal of funds.

    To prevent such attacks, developers should ensure that all effects on the contract's state and balance checks occur before calling external contracts.

    They can also use reentrancy guards to block recursive calls to sensitive functions.

    In Odra you can just apply the #[odra(non_reentrant)] attribute to your function.

    Example

    #[odra::module]
    pub struct NonReentrantCounter {
    counter: Var<u32>
    }

    #[odra::module]
    impl NonReentrantCounter {
    #[odra(non_reentrant)]
    pub fn count_ref_recursive(&mut self, n: u32) {
    if n > 0 {
    self.count();
    ReentrancyMockRef::new(self.env(), self.env().self_address()).count_ref_recursive(n - 1);
    }
    }
    }

    impl NonReentrantCounter {
    fn count(&mut self) {
    let c = self.counter.get_or_default();
    self.counter.set(c + 1);
    }
    }

    #[cfg(test)]
    mod test {
    use super::*;
    use odra::{host::{Deployer, NoArgs}, ExecutionError};

    #[test]
    fn ref_recursion_not_allowed() {
    let test_env = odra_test::env();
    let mut contract = NonReentrantCounterHostRef::deploy(&test_env, NoArgs);

    let result = contract.count_ref_recursive(11);
    assert_eq!(result, ExecutionError::ReentrantCall.into());
    }
    }

    Mixing attributes

    A function can accept more than one attribute. The only exclusion is a constructor cannot be payable. +To apply multiple attributes, you can write:

    #[odra(payable, non_reentrant)]
    fn deposit() {
    // your logic...
    }

    or

    #[odra(payable)]
    #[odra(non_reentrant)]
    fn deposit() {
    // your logic...
    }

    In both cases attributes order does not matter.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/advanced/delegate/index.html b/docs/docs/next/advanced/delegate/index.html new file mode 100644 index 000000000..433db9994 --- /dev/null +++ b/docs/docs/next/advanced/delegate/index.html @@ -0,0 +1,17 @@ + + + + + +Delegate | Odra + + + + + +
    +
    Version: 0.8.0

    Delegate

    Managing boilerplate code can often lead to code that is cumbersome and challenging to comprehend. The Odra library introduces a solution to this issue with its Delegate feature. As the name implies, the Delegate feature permits the delegation of function calls to child modules, effectively minimizing the redundancy of boilerplate code and maintaining a lean and orderly parent module.

    The main advantage of this feature is that it allows you to inherit the default behavior of child modules seamlessly, making your contracts more readable.

    Overview

    To utilize the delegate feature in your contract, use the delegate! macro provided by Odra. This macro allows you to list the functions you wish to delegate to the child modules. By using the delegate! macro, your parent module remains clean and easy to understand.

    You can delegate functions to as many child modules as you like. The functions will be available as if they were implemented in the parent module itself.

    Code Examples

    Consider the following basic example for better understanding:

    use crate::{erc20::Erc20, ownable::Ownable};
    use odra::{
    Address, casper_types::U256,
    module::{Module, SubModule}
    };

    #[odra::module]
    pub struct OwnedToken {
    ownable: SubModule<Ownable>,
    erc20: SubModule<Erc20>
    }

    #[odra::module]
    impl OwnedToken {
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256) {
    let deployer = self.env().caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256);
    pub fn approve(&mut self, spender: Address, amount: U256);
    pub fn name(&self) -> String;
    pub fn symbol(&self) -> String;
    pub fn decimals(&self) -> u8;
    pub fn total_supply(&self) -> U256;
    pub fn balance_of(&self, owner: Address) -> U256;
    pub fn allowance(&self, owner: Address, spender: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    pub fn change_ownership(&mut self, new_owner: Address);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(self.env().caller());
    self.erc20.mint(address, amount);
    }
    }

    This OwnedToken contract includes two modules: Erc20 and Ownable. We delegate various functions from both modules using the delegate! macro. As a result, the contract retains its succinctness without compromising on functionality.

    The above example basically merges the functionalities of modules and adds some control over the minting process. But you can use delegation to build more complex contracts, cherry-picking just a few module functionalities.

    Let's take a look at another example.

    use crate::{erc20::Erc20, ownable::Ownable, exchange::Exchange};
    use odra::{
    Address, casper_types::U256,
    module::{Module, SubModule}
    };

    #[odra::module]
    pub struct DeFiPlatform {
    ownable: SubModule<Ownable>,
    erc20: SubModule<Erc20>,
    exchange: SubModule<Exchange>
    }

    #[odra::module]
    impl DeFiPlatform {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: U256, exchange_rate: u64) {
    let deployer = self.env().caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    self.exchange.init(exchange_rate);
    }

    delegate! {
    to self.erc20 {
    pub fn transfer(&mut self, recipient: Address, amount: U256);
    pub fn balance_of(&self, owner: Address) -> U256;
    }

    to self.ownable {
    pub fn get_owner(&self) -> Address;
    }

    to self.exchange {
    pub fn swap(&mut self, sender: Address, recipient: Address);
    pub fn set_exchange_rate(&mut self, new_rate: u64);
    }
    }

    pub fn mint(&mut self, address: Address, amount: U256) {
    self.ownable.ensure_ownership(self.env().caller());
    self.erc20.mint(address, amount);
    }
    }

    In this DeFiPlatform contract, we include Erc20, Ownable, and Exchange modules. By delegating functions from these modules, the parent contract becomes a powerhouse of functionality while retaining its readability and structure.

    Remember, the possibilities are endless with Odra's. By leveraging this feature, you can write cleaner, more efficient, and modular smart contracts.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/advanced/storage-layout/index.html b/docs/docs/next/advanced/storage-layout/index.html new file mode 100644 index 000000000..e8fab5791 --- /dev/null +++ b/docs/docs/next/advanced/storage-layout/index.html @@ -0,0 +1,44 @@ + + + + + +Storage Layout | Odra + + + + + +
    +
    Version: 0.8.0

    Storage Layout

    Odra's innovative modular design necessitates a unique storage layout. This +article explains step-by-step Odra's storage layout.

    Casper VM Perspective

    The Casper Execution Engine (VM) enables the storage of data in named keys or +dictionaries. However, a smart contract has a limited number of named keys, +making it unsuitable for storing substantial data volumes. Odra resolves this +issue by storing all user-generated data in a dictionary called state. This +dictionary operates as a key-value store, where keys are strings with a maximum +length of 64 characters, and values are arbitrary byte arrays.

    Here is an example of what the interface for reading and writing data could look +like:

    pub trait CasperStorage {
    fn read(key: &str) -> Option<Vec<u8>>;
    fn write(key: &str, value: Vec<u8>);
    }

    Odra Perspective

    Odra was conceived with modularity and code reusability in mind. Additionally, +we aimed to streamline storage definition through the struct object. Consider +this straightforward storage definition:

    #[odra::module]
    pub struct Token {
    name: Var<String>,
    balances: Mapping<Address, U256>
    }

    The Token structure contains two fields: name of type String and +balances, which functions as a key-value store with Address as keys and +U256 as values.

    The Token module can be reused in another module, as demonstrated in a more +complex example:

    #[odra::module]
    pub struct Loans {
    lenders: SubModule<Token>,
    borrowers: SubModule<Token>,
    }

    The Loans module has two fields: lenders and borrowers, both of which have +the same storage layout as defined by the Token module. Odra guarantees that +lenders and borrowers are stored under distinct keys within the storage +dictionary.

    Both Token and Loans serve as examples to show how Odra's storage layout +operates.

    Key generation.

    Every element of a module (struct) with N elements is associated with an index +ranging from 0 to N-1, represented as a u8 with a maximum of 256 elements. If an +element of a module is another module (SubModule<...>), the associated index +serves as a prefix for the indexes of the inner module.

    While this may initially appear complex, it is easily understood through an +example. In the example, indexes are presented as bytes, reflecting the actual +implementation.

    Loans {
    lenders: Token { // prefix: 0x0000
    name: 0, // key: 0x0000_0000
    balances: 1 // key: 0x0000_0001
    },
    borrowers: Token { // prefix: 0x0001
    name: 0, // key: 0x0001_0000
    balances: 1 // key: 0x0001_0001
    }
    }

    Additionally, it's worth mentioning how Mapping's keys are used in the +storage. They are simply concatenated with the index of the module, as +demonstrated in the example.

    For instance, triggering borrowers.balances.get(0x1234abcd) would result in a +key:

    0x0001_0001_1234_abcd

    Finally, the key must be hashed to fit within the 64-character limit and then +encoded in hexadecimal format.

    Value serialization

    Before being stored in the storage, each value is serialized into bytes using +the CLType serialization method and subsequently encapsulated with Casper's +Bytes types.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/backends/casper/index.html b/docs/docs/next/backends/casper/index.html new file mode 100644 index 000000000..0a2fe4fdf --- /dev/null +++ b/docs/docs/next/backends/casper/index.html @@ -0,0 +1,50 @@ + + + + + +Casper | Odra + + + + + +
    +
    Version: 0.8.0

    Casper

    The Casper backend allows you to compile your contracts into WASM files which can be deployed +onto Casper Blockchain +and lets you to easily run them against Casper's Execution Engine locally.

    Contract Env

    As with any other backend, Casper Backend must implement the same features, but some do not have native support. Let's take a closer look at how Odra overcomes these hindrances.

    Events

    An event is not a first-class citizen in Casper like in Ethereum, so Odra mimics it. As you've +already learned from the events article, in Odra you emit an event, similarly, you would do it in Solidity.

    Under the hood, Odra integrates with Casper Event Standard and creates a few URefs in the global state when a contract is being installed:

    1. __events - a dictionary that stores events' data.
    2. __events_length - the evens count.
    3. __events_ces_version - the version of Casper Event Standard.
    4. __events_schema - a dictionary that stores event schemas.

    Besides that, all the events the contract emits are registered - events schemas are written to the storage under the __events_schema key.

    So, Events are nothing different from any other data stored by a contract.

    A struct to be an event must implement traits defined by Casper Event Standard, thankfully you can derive them using #[derive(Event)].

    note

    Don't forget to expose events in the module using #[odra::module(events = [...])].

    Payable

    The first Odra idiom is a Contract Main Purse. It is a purse associated with a contract. The purse is created lazily - when the first transfer to the contract occurs, a proper URef and a purse are created and stored under the __contract_main_purse key.

    Casper does not allow direct transfers from an account to a contract, so Odra comes up with the second idiom - a Cargo Purse. It is a one-time-use purse proxy between an account and a contract. First, motes go from the account to the cargo purse and then to the contract's main purse.

    Behind the scenes, Odra handles an account-contract transfer via a cargo purse when a function is marked as payable. +If under the way something goes wrong with the transfer, the contract reverts.

    The transferred amount can be read inside the contract by calling self.env().attached_value().

    note

    Odra expects the cargo_purse runtime argument to be attached to a contract call. +In case of its absence, the contract_env::attached_value() returns zero.

    Revert

    In Casper, we can stop the execution pretty straightforwardly - call the runtime::revert(). +Odra adds an extra abstraction layer - in a contract ExecutionErrors are defined, which ultimately are transformed into Casper's ApiError::User.

    Context

    Casper equips developers with very low-level tooling, which can be cumbersome for newcomers. +If you want to check who called the contract or its address, you can not do it off-hand - you must analyze the call stack.

    The self.env().self_address() function takes the first element of the callstack (runtime::get_call_stack()) and casts it to Address.

    The self.env().caller() function takes the second element of the call stack (runtime::get_call_stack()) and casts it to Address.

    As mentioned in the [Payable] section, to store CSPR, each contract creates its purse. To read the contract balance, +you call self.env().self_balance(), which checks the balance of the purse stored under __contract_main_purse.

    Test Env

    Test environment allows you to test wasm contracts before you deploy them onto the testnet or livenet. It is built on top of the Casper Execution Engine.

    In your test, you can freely switch execution context by setting as a caller (test_env::set_caller()) one of the 20 predefined accounts. Each account possesses the default amount of Motes (100_000_000_000_000_000).

    The Test Env internally keeps track of the current block time, error and attached value.

    Each test is executed on a fresh instance of the Test Env.

    Usage

    Name of the Casper backend in Odra is casper, so to run the tests against it, simply pass it as a -b +parameter:

    cargo odra test -b casper

    If you want to just generate a wasm file, simply run:

    cargo odra build -b casper

    Deploying a contract to Casper network

    There would be no point in writing a contract if you couldn't deploy it to the blockchain. +You can do it in two ways: provided by the Casper itself: using the casper-client tool +or using the Odra's Livenet integration.

    Let's explore the first option to better understand the process.

    note

    If you wish, you can skip the following section and jump to the Livenet integration.

    WASM arguments

    When deploying a new contract you can pass some arguments to it. +Every contract written in Odra expects those arguments to be set:

    • odra_cfg_package_hash_key_name - String type. The key under which the package hash of the contract will be stored.
    • odra_cfg_allow_key_override - Bool type. If true and the key specified in odra_cfg_package_hash_key_name already exists, it will be overwritten.
    • odra_cfg_is_upgradable - Bool type. If true, the contract will be deployed as upgradable.

    Additionally, if required by the contract, you can pass constructor arguments.

    When working with the test env via cargo odra or when using +Livenet integration this is handled automatically. However, if you rather use +casper-client directly, you have to pass them manually:

    Example: Deploy Counter

    To deploy your contract with a constructor using casper-client, you need to pass the above arguments. +Additionally, you need to pass the value argument, which sets the arbitrary initial value for the counter.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 5000000000000 \
    --session-path ./wasm/counter.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'counter_package_hash'" \
    --session-arg "odra_cfg_allow_key_override:bool:'true'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "value:u32:42"

    For a more in-depth tutorial, please refer to the Casper's 'Writing On-Chain Code'.

    Example: Deploy ERC721

    Odra comes with a standard ERC721 token implementation. +Clone the main Odra repo and navigate to the modules directory.

    Firstly contract needs to be compiled.

    cargo odra build -b casper -c erc721_token

    It produces the erc721_token.wasm file in the wasm directory.

    Now it's time to deploy the contract.

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 300000000000 \
    --session-path ./wasm/erc721_token.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'my_nft'" \
    --session-arg "odra_cfg_allow_key_override:bool:'false'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "name:string:'MyNFT'" \
    --session-arg "symbol:string:'NFT'" \
    --session-arg "base_uri:string:'https://example.com/'"

    It's done. +The contract is deployed and ready to use. +Your account is the owner of the contract and you can mint and burn tokens. +For more details see the code of the ERC721 module.

    To obtain the package hash of the contract search for my_nft key +in your account's named keys.

    Example: Deploy ERC1155

    The process is similar to the one described in the previous section.

    Contract compilation:

    cargo odra build -b casper -c erc1155_token

    Contract deployment:

    casper-client put-deploy \
    --node-address [NODE_ADDRESS] \
    --chain-name casper-test \
    --secret-key [PATH_TO_YOUR_KEY]/secret_key.pem \
    --payment-amount 300000000000 \
    --session-path ./wasm/erc1155_token.wasm \
    --session-arg "odra_cfg_package_hash_key_name:string:'my_tokens'" \
    --session-arg "odra_cfg_allow_key_override:bool:'false'" \
    --session-arg "odra_cfg_is_upgradable:bool:'true'" \
    --session-arg "odra_cfg_constructor:string:'init'" \

    As previously, your account is the owner and can mint and burn tokens. +For more details see the code of the ERC1155 module.

    Sending CSPR to a contract

    Defining payable entry points is described in Native Token section.

    What is happening under the hood is that Odra creates a new cargo_purse argument for each payable +entry point. The cargo_purse needs to be top-upped with CSPR before calling the contract. +When a contract adds CSPR to another contract call, Odra handles it for you. +The problem arises when you want to call an entry point and attach CSPR as an account. +The only way of doing that is by executing code in the sessions context, that +top-ups the cargo_purse and then calls the contract.

    Odra provides a generic proxy_caller.wasm that does exactly that. +You can build it by yourself from the main Odra repository, or use the proxy_caller.wasm +we maintain.

    Using proxy_caller.wasm

    To use the proxy_caller.wasm you need to attach the following arguments:

    • contract_package_hash - BytesArray(32) type. The package hash of the contract you want to call. +Result of to_bytes on CasperPackageHash.
    • entry_point - String type. The name of the entry point you want to call.
    • args - Bytes type. It is a serialized RuntimeArgs with the arguments you want to pass +to the entry point. To be specific it is the result of to_bytes method wrapped with Bytes type.
    • attached_value. U512 type. The amount of CSPR you want to attach to the call.
    • amount. U512 type. Should be the same value as attached_value if not None. +It is a special Casper argument that enables the access to account's main purse.

    Currently casper-client doesn't allow building such arguments. +You have to build it using your SDK.

    Execution

    First thing Odra does with your code, is similar to the one used in OdraVM - +a list of entrypoints is generated, thanks to the #[odra::module] macro.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/backends/livenet/index.html b/docs/docs/next/backends/livenet/index.html new file mode 100644 index 000000000..3e13b884f --- /dev/null +++ b/docs/docs/next/backends/livenet/index.html @@ -0,0 +1,49 @@ + + + + + +Livenet | Odra + + + + + +
    +
    Version: 0.8.0

    Livenet

    The Livenet backend let us deploy and test the contracts on the real blockchain. It can be a local +test node, a testnet or even the mainnet. It is possible and even recommended using the Livenet backend +to handle the deployment of your contracts to the real blockchain.

    Furthermore, it is implemented in a similarly to Casper or OdraVM, +however, it uses a real blockchain to deploy contracts and store the state. +This lets us use Odra to deploy and test contracts on a real blockchain, but +on the other hand, it comes with some limitations on what can be done in the tests.

    The main differences between Livenet and e.g. CasperVM backend are:

    • Real CSPR tokens are used to deploy and call contracts. This also means that we need to +pay for each contract deployment and each contract call. Of course, we can use the faucet +to get some tokens for testing purposes, but we still need to specify the amount needed +for each action.
    • The contract state is stored on the real blockchain, so we can't just reset the state - +we can redeploy the contract, but we can't remove the old one.
    • Because of the above, we can load the existing contracts and use them in the tests.
    • We have no control over the block time. This means that for example, advance_block_time function +is implemented by waiting for the real time to pass.

    This is also a cause for the fact that the Livenet backend cannot be (yet) used for running +the regular Odra tests. Instead, we can create integration tests or binaries which will +use a slightly different workflow to test the contracts.

    Setup

    To use Livenet backend, we need to provide Odra with some information - the network address, our private +key and the name of the chain we want to use. Optionally, we can add multiple private keys to use +more than one account in our tests. Those values are passed using environment variables. We can use .env +file to store them - let's take a look at an example .env file, created from the .env.sample file from +examples folder:

    # Path to the secret key of the account that will be used
    # to deploy the contracts.
    # We're using .keys folder so we don't accidentally commit
    # the secret key to the repository.
    ODRA_CASPER_LIVENET_SECRET_KEY_PATH=.keys/secret_key.pem

    # RPC address of the node that will be used to deploy the contracts.
    ODRA_CASPER_LIVENET_NODE_ADDRESS=localhost:7777

    # Chain name of the network. Known values:
    # - integration-test
    ODRA_CASPER_LIVENET_CHAIN_NAME=integration-test

    # Paths to the secret keys of the additional accounts.
    # Main secret key will be 0th account.
    ODRA_CASPER_LIVENET_KEY_1=.keys/secret_key_1.pem
    ODRA_CASPER_LIVENET_KEY_2=.keys/secret_key_2.pem

    With the proper value in place, we can write our tests or deploy scenarios. In the examples, we can find +a simple binary that deploys a contract and calls it. The test is located in the erc20_on_livenet.rs file. +Let's go through the code:

    fn main() {
    // Similar to the OdraVM backend, we need to initialize
    // the environment:
    let env = odra_casper_livenet_env::env();

    // Most of the for the host env works the same as in the
    // OdraVM backend.
    let owner = env.caller();
    // Addresses are the real addresses on the blockchain,
    // so we need to provide them
    // if we did not import their secret keys.
    let recipient =
    "hash-2c4a6ce0da5d175e9638ec0830e01dd6cf5f4b1fbb0724f7d2d9de12b1e0f840";
    let recipient = Address::from_str(recipient).unwrap();

    // Arguments for the contract init method.
    let name = String::from("Plascoin");
    let symbol = String::from("PLS");
    let decimals = 10u8;
    let initial_supply: U256 = U256::from(10_000);

    // The main difference between other backends - we need to specify
    // the gas limit for each action.
    // The limit will be used for every consecutive action
    // until we change it.
    env.set_gas(100_000_000_000u64);

    // Deploy the contract. The API is the same as in the OdraVM backend.
    let init_args = Erc20InitArgs {
    name,
    symbol,
    decimals,
    initial_supply: Some(initial_supply)
    };
    let mut token = Erc20HostRef::deploy(env, init_args);

    // We can now use the contract as we would in the OdraVM backend.
    println!("Token address: {}", token.address().to_string());

    // Uncomment to load existing contract.
    // let address = "hash-d26fcbd2106e37be975d2045c580334a6d7b9d0a241c2358a4db970dfd516945";
    // let address = Address::from_str(address).unwrap();
    // We use the Livenet-specific `load` method to load the contract
    // that is already deployed.
    // let mut token = Erc20Deployer::load(env, address);

    // Non-mutable calls are free! Neat, huh? More on that later.
    println!("Token name: {}", token.name());

    // The next call is mutable, but the cost is lower that the deployment,
    // so we change the amount of gas
    env.set_gas(3_000_000_000u64);
    token.transfer(recipient, U256::from(1000));

    println!("Owner's balance: {:?}", token.balance_of(owner));
    println!("Recipient's balance: {:?}", token.balance_of(recipient));
    }
    note

    The above example is a rust binary, not a test. Note that it is also added as a section of the +Cargo.toml file:

    [bin]
    name = "erc20_on_livenet"
    path = "src/bin/erc20_on_livenet.rs"
    required-features = ["livenet"]
    test = false

    Usage

    To run the above code, we simply need to run the binary with the livenet feature enabled:

    cargo run --bin erc20_on_livenet --features=livenet

    A part of a sample output should look like this:

    ...
    💁 INFO : Calling "hash-d26fcbd210..." with entrypoint "transfer".
    🙄 WAIT : Waiting 15s for "65b1a5d21...".
    🙄 WAIT : Waiting 15s for "65b1a5d21...".
    💁 INFO : Deploy "65b1a5d21..." successfully executed.
    Owner's balance: 4004
    Recipient's balance: 4000

    Those logs are a result of the last 4 lines of the above listing. +Each deployment or a call to the blockchain will be noted and will take some time to execute. +We can see that the transfer call took over 15 seconds to execute. But calling balance_of was nearly instant +and cost us nothing. How it is possible?

    info

    You can see the deployment on http://cspr.live/ - the transfer from the example +can be seen here.

    How Livenet backend works

    All calls of entrypoints executed on a Casper blockchain cost gas - even if they do not change the state. +It is possible however to query the state of the blockchain for free.

    This principle is used in the Livenet backend - all calls that do not change the state of the blockchain are really executed offline - the only thing that is requested from the +node is the current state. This is why the balance_of call was almost instant and free.

    Basically, if the entrypoint function is not mutable or does not make a call to an unknown external contract +(see Cross Calls), it is executed offline and +node is used for the state query only. However, the Livenet needs to know the connection between the contracts +and the code, so make sure to deploy or load already deployed contracts

    Multiple enviroments

    It is possible to have multiple environments for the Livenet backend. This is useful if we want to easily switch between multiple accounts, +multiple nodes or even multiple chains.

    To do this, simply create a new .env file with a different prefix - for example, integration.env and mainnet.env. +Then, pass the ODRA_CASPER_LIVENET_ENV variable with value either integration or mainnet to select which file +has to be used first. If your integration.env file has a value that IS present in the .env file, it will +override the value from the .env file.

    ODRA_CASPER_LIVENET_ENV=integration cargo run --bin erc20_on_livenet --features=livene

    To sum up - this command will firstly load the integration.env file and then load the missing values from .env file.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/backends/odra-vm/index.html b/docs/docs/next/backends/odra-vm/index.html new file mode 100644 index 000000000..48242593e --- /dev/null +++ b/docs/docs/next/backends/odra-vm/index.html @@ -0,0 +1,26 @@ + + + + + +OdraVM | Odra + + + + + +
    +
    Version: 0.8.0

    OdraVM

    The OdraVM is a simple implementation of a mock backend with a minimal set of features that allows testing +the code written in Odra without compiling the contract to the target architecture and spinning up the +blockchain.

    Thanks to OdraVM tests run a lot faster than other backends. You can even debug the code in real time - +simply use your IDE's debug functionality.

    Usage

    The OdraVM is the default backend for Odra framework, so each time you run

    cargo odra test

    You are running your code against it.

    Architecture

    OdraVM consists of two main parts: the Contract Register and the State.

    The Contract Register is a list of contracts deployed onto the OdraVM, identified by an Address.

    Contracts and Test Env functions can modify the State of the OdraVM.

    Contrary to the "real" backend, which holds the whole history of the blockchain, +the OdraVM State holds only the current state of the OdraVM. +Thanks to this and the fact that we do not need the blockchain itself, +OdraVM starts instantly and runs the tests in the native speed.

    Execution

    When the OdraVM backend is enabled, the #[odra::module] macro is responsible for converting +your pub functions into a list of Entrypoints, which are put into a Contract Container. +When the contract is deployed, its Container registered into a Registry under an address. +During the contract call, OdraVM finds an Entrypoint and executes the code.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/backends/what-is-a-backend/index.html b/docs/docs/next/backends/what-is-a-backend/index.html new file mode 100644 index 000000000..cdc30de00 --- /dev/null +++ b/docs/docs/next/backends/what-is-a-backend/index.html @@ -0,0 +1,28 @@ + + + + + +What is a backend? | Odra + + + + + +
    +
    Version: 0.8.0

    What is a backend?

    You can think of a backend as a target platform for your smart contract. +This can be a piece of code allowing you to quickly check your code - like OdraVM, +a complete virtual machine, spinning up a blockchain for you - like CasperVM, +or even a real blockchain - when using Livenet backend.

    Each backend has to come with two parts that Odra requires - the Contract Env and the Host Env.

    Contract Env

    The Contract Env is a simple interface that each backend needs to implement, +exposing features of the blockchain from the perspective of the contract.

    It gives Odra a set of functions, which allows implementing more complex concepts - +for example, to implement Mapping, +Odra requires some kind of storage integration. +The exact implementation of those functions is a responsibility of a backend, +making Odra and its user free to implement the contract logic, +instead of messing with the blockchain internals.

    Other functions from Contract Env include handling transfers, addresses, block time, errors and events.

    Host Env

    Similarly to the Contract Env, the Host Env exposes a set of functions that allows the communication with +the backend from the outside world - really useful for implementing tests.

    This ranges from interacting with the blockchain - like deploying new, loading existing and calling the contracts, +to the more test-oriented - handling errors, forwarding the block time, etc.

    What's next

    We will take a look at backends Odra implements in more detail.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/cargo-odra/index.html b/docs/docs/next/basics/cargo-odra/index.html new file mode 100644 index 000000000..d765bef4b --- /dev/null +++ b/docs/docs/next/basics/cargo-odra/index.html @@ -0,0 +1,37 @@ + + + + + +Cargo Odra | Odra + + + + + +
    +
    Version: 0.8.0

    Cargo Odra

    If you followed the Installation tutorial properly, +you should already be set up with the Cargo Odra tool. It is an executable that will help you with +managing your smart contracts project, testing and running them with various configurations.

    Let's take a look at all the possibilities that Cargo Odra gives you.

    Managing projects

    Two commands help you create a new project. The first one is cargo odra new. +You need to pass one parameter, namely --name {PROJECT_NAME}:

    cargo odra new --name my-project

    This creates a new project in the my_project folder and name it my_project. You can see it +for yourself, for example by taking a look into a Cargo.toml file created in your project's folder:

    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    The project is created using the template located in Odra's main repository. +By default it uses full template, if you want, you can use minimalistic blank by running:

    cargo odra new -t blank --name my-project

    The third available template is workspace, which creates a workspace with two projects, similar to the one created +with the full template.

    By default, the latest release of Odra will be used for the template and as a dependency. +You can pass a source of Odra you want to use, by using -s parameter:

    cargo odra new -n my-project -s ../odra # will use local folder of odra
    cargo odra new -n my-project -s release/0.9.0 # will use github branch, e.g. if you want to test new release
    cargo odra new -n my-project -s 0.8.0 # will use a version released on crates.io

    The second way of creating a project is by using init command:

    cargo odra init --name my-project

    It works in the same way as new, but instead of creating a new folder, it creates a project +in the current, empty directory.

    Generating code

    If you want to quickly create a new contract code, you can use the generate command:

    cargo odra generate -c counter 

    This creates a new file src/counter.rs with sample code, add appropriate use and mod sections +to src/lib.rs and update the Odra.toml file accordingly. To learn more about Odra.toml file, +visit Odra.toml.

    Testing

    The most used command during the development of your project should be this one:

    cargo odra test

    It runs your tests against Odra's MockVM. It is substantially faster than CasperVM +and implements all the features Odra uses.

    When you want to run tests against a "real" VM, just provide the name of the backend using -b +option:

    cargo odra test -b casper

    In the example above, Cargo Odra builds the project, generates the wasm files, +spin up CasperVM instance, deploys the contracts onto it and runs the tests against it. Pretty neat.

    Keep in mind that this is a lot slower than OdraVM and you cannot use the debugger. +This is why OdraVM was created and should be your first choice when developing contracts. +Of course, testing all of your code against a blockchain VM is a must in the end.

    If you want to run only some of the tests, you can pass arguments to the cargo test command +(which is run in the background obviously):

    cargo odra test -- this-will-be-passed-to-cargo-test

    If you want to run tests which names contain the word two, you can execute:

    cargo odra test -- two

    Of course, you can do the same when using the backend:

    cargo odra test -b casper -- two

    Building code

    You can also build the code itself and generate the output contracts without running the tests. +To do so, simply run:

    cargo odra build

    If the build process finishes successfully, wasm files will be located in wasm folder. +Notice, that this command does not require the -b option.

    If you want to build specific contract, you can use -c option:

    cargo odra build -c counter # you pass many comma separated contracts

    Generating contract schema

    If you want to generate a schema (including the name, entrypoints, events, etc.) for your contract, you can use the schema command:

    cargo odra schema 

    This generates a schema file in JSON format for all your contracts and places them in the resources folder. +If the resources folder does not exist, it creates the folder for you.

    Like with the build command, you can use the -c option to generate a schema for a specific contract.

    What's next

    In the next section, we will take a look at all the files and directories that cargo odra created +for us and explain their purpose.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/communicating-with-host/index.html b/docs/docs/next/basics/communicating-with-host/index.html new file mode 100644 index 000000000..d1472f0ce --- /dev/null +++ b/docs/docs/next/basics/communicating-with-host/index.html @@ -0,0 +1,21 @@ + + + + + +Host Communication | Odra + + + + + +
    +
    Version: 0.8.0

    Host Communication

    One of the things that your contract will probably do is to query the host for some information - +what is the current time? Who called me? Following example shows how to do this:

    examples/src/features/host_functions.rs
    use odra::prelude::*;
    use odra::{Address, module::Module, Var};

    #[odra::module]
    pub struct HostContract {
    name: Var<String>,
    created_at: Var<u64>,
    created_by: Var<Address>
    }

    #[odra::module]
    impl HostContract {
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.created_at.set(self.env().get_block_time());
    self.created_by.set(self.env().caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }
    }

    As you can see, we are using self.env(). It is an implementation of Module::env(), autogenerated +by #[odra::module] macro. The function returns a reference to the ContractEnv (you can read more in +the Backend section). This is a structure that provides access to the host functions and variables.

    In this example, we use two of them:

    • get_block_time() - returns the current block time as u64.
    • caller() - returns an Odra Address of the caller (this can be an external caller or another contract).
    info

    You will learn more functions that Odra exposes from host and types it uses in further articles.

    What's next

    In the next article, we'll dive into testing your contracts with Odra, so you can check that the code +we presented in fact works!

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/cross-calls/index.html b/docs/docs/next/basics/cross-calls/index.html new file mode 100644 index 000000000..a709b9756 --- /dev/null +++ b/docs/docs/next/basics/cross-calls/index.html @@ -0,0 +1,22 @@ + + + + + +Cross calls | Odra + + + + + +
    +
    Version: 0.8.0

    Cross calls

    To show how to handle calls between contracts, first, let's implement two of them:

    examples/src/features/cross_calls.rs
    use odra::prelude::*;
    use odra::{Address, module::Module, UnwrapOrRevert, Var};

    #[odra::module]
    pub struct CrossContract {
    pub math_engine: Var<Address>
    }

    #[odra::module]
    impl CrossContract {
    pub fn init(&mut self, math_engine_address: Address) {
    self.math_engine.set(math_engine_address);
    }

    pub fn add_using_another(&self) -> u32 {
    let math_engine_address = self.math_engine.get().unwrap_or_revert(&self.env());
    MathEngineContractRef::new(self.env(), math_engine_address).add(3, 5)
    }
    }

    #[odra::module]
    pub struct MathEngine;

    #[odra::module]
    impl MathEngine {
    pub fn add(&self, n1: u32, n2: u32) -> u32 {
    n1 + n2
    }
    }

    MathEngine contract can add two numbers. CrossContract takes an Address in its init function and saves it in +storage for later use. If we deploy the MathEngine first and take note of its address, we can then deploy +CrossContract and use MathEngine to perform complicated calculations for us!

    To call the external contract, we use the {{ModuleName}}ContractRef that was created for us by Odra:

    examples/src/features/cross_calls.rs
    MathEngineContractRef::new(self.env(), math_engine_address).add(3, 5)

    Contract Ref

    We mentioned HostRef already in our Testing article - a host side reference to already deployed contract.

    In the module context we use a ContractRef instead, to call other contracts.

    Similarly to a {{ModuleName}}HostRef, the {{ModuleName}}ContractRef is generated automatically, +by the #[odra::module] macro.

    To get an instance of a contract reference, we the reference constructor function - {{ModuleName}}ContractRef::new(env: Rc<ContractEnv>, address: Address), as shown above.

    The reference implements all the public endpoints to the contract (those marked as pub in #[odra::module] +impl), and the {{ModuleName}}ContractRef::address() function, which returns the address of the contract.

    External Contracts

    Sometimes in our contract, we would like to interact with a someone else's contract, already deployed onto the blockchain. The only thing we know about the contract is the ABI.

    For that purpose, we use #[odra:external_contract] macro. This macro should be applied to a trait. The trait defines the part of the ABI we would like to take advantage of.

    Let's pretend the MathEngine we defined is an external contract. There is a contract with add() function that adds two numbers somewhere.

    examples/src/features/cross_calls.rs
    #[odra::external_contract]
    pub trait Adder {
    fn add(&self, n1: u32, n2: u32) -> u32;
    }

    Analogously to modules, Odra creates the AdderContractRef struct (and AdderHostRef to be used in tests, but do not implement the Deployer trait). Having an address, in the module context we can call:

    examples/src/features/cross_calls.rs
    AdderContractRef::new(self.env(), address).add(3, 5)

    Loading the contract

    Sometimes it is useful to load the deployed contract instead of deploying it by ourselves. This is especially useful when we want to test +our contracts in Livenet backend. We can load the contract using load method on the Deployer:

    examples/bin/erc20_on_livenet.rs
    fn _load(env: &HostEnv) -> Erc20HostRef {
    let address = "hash-d26fcbd2106e37be975d2045c580334a6d7b9d0a241c2358a4db970dfd516945";
    let address = Address::from_str(address).unwrap();
    <Erc20HostRef as HostRefLoader>::load(env, address)
    }

    Testing

    Let's see how we can test our cross calls using this knowledge:

    examples/src/features/cross_calls.rs
     use super::{CrossContractHostRef, CrossContractInitArgs, MathEngineHostRef};
    use odra::host::{Deployer, HostRef, NoArgs};

    #[test]
    fn test_cross_calls() {
    let test_env = odra_test::env();
    let math_engine_contract = MathEngineHostRef::deploy(&test_env, NoArgs);

    let init_args = CrossContractInitArgs {
    math_engine_address: *math_engine_contract.address()
    };
    let cross_contract = CrossContractHostRef::deploy(&test_env, init_args);

    assert_eq!(cross_contract.add_using_another(), 8);
    }

    Each test start with a fresh instance of blockchain - no contracts are deployed. To test an external contract we deploy a MathEngine contract first, but we are not going to use it directly. We take only its address. Let's keep pretending, there is a contract with the add() function we want to use.

    examples/src/features/cross_calls.rs
    #[cfg(test)]
    mod tests {
    use crate::features::cross_calls::{Adder, AdderHostRef};
    use odra::{Address, host::{Deployer, HostRef, NoArgs}};

    #[test]
    fn test_ext() {
    let adder = AdderHostRef::new(test_env, get_adder_address()).add(3, 5)
    assert_eq!(adder.add(1, 2), 3);
    }

    fn get_adder_address() -> Address {
    let contract = MathEngineHostRef::deploy(&odra_test::env(), NoArgs);
    *contract.address()
    }
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/directory-structure/index.html b/docs/docs/next/basics/directory-structure/index.html new file mode 100644 index 000000000..b1fae33c8 --- /dev/null +++ b/docs/docs/next/basics/directory-structure/index.html @@ -0,0 +1,26 @@ + + + + + +Directory structure | Odra + + + + + +
    +
    Version: 0.8.0

    Directory structure

    After creating a new project using Odra and running the tests, you will be presented with the +following files and directories:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── CHANGELOG.md
    ├── Odra.toml
    ├── README.md
    ├── rust-toolchain
    ├── src/
    │ ├── flipper.rs
    │ └── lib.rs
    ├── bin/
    | |── build_contract.rs
    | └── build_schema.rs
    ├── target/
    └── wasm/

    Cargo.toml

    Let's first take a look at Cargo.toml file:

    [package]
    name = "sample"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = "0.8.0"

    [dev-dependencies]
    odra-test = "0.8.0"

    [[bin]]
    name = "sample_build_contract"
    path = "bin/build_contract.rs"
    test = false

    [[bin]]
    name = "sample_build_schema"
    path = "bin/build_schema.rs"
    test = false

    [profile.release]
    codegen-units = 1
    lto = true

    [profile.dev.package."*"]
    opt-level = 3

    By default, your project will use the latest odra version available at crates.io. For testing purposes, odra-test is also +added as a dev dependency.

    Odra.toml

    This is the file that holds information about contracts that will be generated when running cargo odra build and +cargo odra test:

    [[contracts]]
    fqn = "sample::Flipper"

    As we can see, we have a single contract, its fqn (Fully Qualified Name) corresponds to +the contract is located in src/flipper.rs. +More contracts can be added here by hand, or by using cargo odra generate command.

    src/

    This is the folder where your smart contract files live.

    bin/

    This is the folder where scripts that will be used to generate code or schemas live. +You don't need to modify those files, they are generated by cargo odra new command and +are used by cargo odra build, cargo odra test and cargo odra schema commands.

    target/

    Files generated by cargo during the build process are put here.

    wasm/

    WASM files generated by cargo odra build and cargo odra test are put here. You can grab those WASM files +and deploy them on the blockchain.

    What's next

    Now, let's take a look at one of the files mentioned above in more detail, +namely the Odra.toml file.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/errors/index.html b/docs/docs/next/basics/errors/index.html new file mode 100644 index 000000000..f098932cc --- /dev/null +++ b/docs/docs/next/basics/errors/index.html @@ -0,0 +1,24 @@ + + + + + +Errors | Odra + + + + + +
    +
    Version: 0.8.0

    Errors

    Odra comes with tools that allow you to throw, handle and test for errors in execution. Take a look at the +following example of a simple owned contract:

    examples/src/features/handling_errors.rs
    use odra::prelude::*;
    use odra::{Address, module::Module, OdraError, Var};

    #[odra::module]
    pub struct OwnedContract {
    name: Var<String>,
    owner: Var<Address>
    }

    #[derive(OdraError)]
    pub enum Error {
    OwnerNotSet = 1,
    NotAnOwner = 2
    }

    #[odra::module]
    impl OwnedContract {
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    self.owner.set(self.env().caller())
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn owner(&self) -> Address {
    self.owner.get_or_revert_with(Error::OwnerNotSet)
    }

    pub fn change_name(&mut self, name: String) {
    let caller = self.env().caller();
    if caller != self.owner() {
    self.env().revert(Error::NotAnOwner)
    }

    self.name.set(name);
    }
    }

    Firstly, we are using the OdraError derive macro to define our own set of Errors that our contract will +throw. Then, you can use those errors in your code - for example, instead of unwrapping Options, you can use +unwrap_or_revert_with and pass an error as an argument:

    examples/src/features/handling_errors.rs
    self.owner.get().unwrap_or_revert_with(Error::OwnerNotSet)

    You can also throw the error directly, by using revert:

    examples/src/features/handling_errors.rs
    self.env().revert(Error::NotAnOwner)

    Defining an error in Odra, you must keep in mind a few rules:

    1. An error should be a field-less enum.
    2. The enum must derive from OdraError.
    3. Avoid implicit discriminants.
    note

    In your project you can define as many error enums as you wish, but you must ensure that the discriminants are unique across the project!

    Testing errors

    Okay, but how about testing it? Let's write a test that will check if the error is thrown when the caller is not an owner:

    examples/src/features/handling_errors.rs
    use super::{Error, OwnedContractHostRef, OwnedContractInitArgs};
    use odra::prelude::*;

    #[test]
    fn test_owner_error() {
    let test_env = odra_test::env();
    let owner = test_env.get_account(0);
    let not_an_owner = test_env.get_account(1);

    test_env.set_caller(owner);
    let init_args = OwnedContractInitArgs {
    name: "OwnedContract".to_string()
    };
    let mut owned_contract = OwnedContractHostRef::deploy(&test_env, init_args);

    test_env.set_caller(not_an_owner);
    assert_eq!(
    owned_contract.try_change_name("NewName".to_string()),
    Err(Error::NotAnOwner.into())
    );
    }

    Each {{ModuleName}}HostRef has try_{{entry_point_name}} functions that return an OdraResult. +OwnedContractHostRef implements regular entrypoints: name, owner, change_name, and +and safe its safe version: try_name, try_owner, try_change_name.

    In our example, we are calling try_change_name and expecting an error to be thrown. +For assertions, we are using a standard assert_eq! macro. As the contract call returns an OdraError, +we need to convert our custom error to OdraError using Into::into().

    What's next

    We will learn how to emit and test events using Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/events/index.html b/docs/docs/next/basics/events/index.html new file mode 100644 index 000000000..7aa276b14 --- /dev/null +++ b/docs/docs/next/basics/events/index.html @@ -0,0 +1,18 @@ + + + + + +Events | Odra + + + + + +
    +
    Version: 0.8.0

    Events

    In the EVM world events are stored as logs within the blockchain's transaction receipts. These logs can be accessed by external applications or other smart contracts to monitor and react to specific events. Casper does not support events natively, however, Odra mimics this feature. Take a look:

    examples/src/features/events.rs
    use casper_event_standard::Event;
    use odra::casper_event_standard;
    use odra::prelude::*;
    use odra::{Address, module::Module};

    #[odra::module(events = [PartyStarted])]
    pub struct PartyContract;

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: u64
    }

    #[odra::module]
    impl PartyContract {
    pub fn init(&self) {
    self.env().emit_event(PartyStarted {
    caller: self.env().caller(),
    block_time: self.env().get_block_time()
    });
    }
    }

    We defined a new contract, which emits an event called PartyStarted when the contract is deployed. +To define an event, we derive an Event macro like this:

    examples/src/features/events.rs
    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct PartyStarted {
    pub caller: Address,
    pub block_time: u64,
    }

    To emit an event, we use the emit_event function from the ContractEnv, passing the event as an argument:

    examples/src/features/events.rs
    PartyStarted {
    caller: self.env().caller(),
    block_time: self.env().get_block_time()
    }.emit();

    To determine all the events at compilation time to register them once the contract is deployed. To register events, add an events attribute to the struct's #[odra::module] macro.

    The event collection process is recursive; if your module consists of other modules, and they have already registered their events, you don't need to add them to the parent module.

    Testing events

    Odra's HostEnv comes with a few functions which lets you easily test the events that a given contract has emitted:

    examples/src/features/events.rs
    use super::{PartyContractHostRef, PartyStarted};
    use odra::host::{Deployer, HostEnv, HostRef, NoArgs};

    #[test]
    fn test_party() {
    let test_env: HostEnv = odra_test::env();
    let party_contract = PartyContractHostRef::deploy(&test_env, NoArgs);
    test_env.emitted_event(
    party_contract.address(),
    &PartyStarted {
    caller: test_env.get_account(0),
    block_time: 0
    }
    );
    // If you do not want to check the exact event, you can use `emitted` function
    test_env.emitted(party_contract.address(), "PartyStarted");
    // You can also check how many events were emitted.
    assert_eq!(test_env.events_count(party_contract.address()), 1);
    }

    To explore more event testing functions, check the HostEnv documentation.

    What's next

    Read the next article to learn how to call other contracts from the contract context.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/flipper-internals/index.html b/docs/docs/next/basics/flipper-internals/index.html new file mode 100644 index 000000000..d81f9342f --- /dev/null +++ b/docs/docs/next/basics/flipper-internals/index.html @@ -0,0 +1,38 @@ + + + + + +Flipper Internals | Odra + + + + + +
    +
    Version: 0.8.0

    Flipper Internals

    In this article, we take a deep dive into the code shown in the +Flipper example, where we will explain in more detail all +the Odra-specific sections of the code.

    flipper.rs
    use odra::Var;

    Pretty straightforward. Odra wraps the code of the specific blockchains SDKs into its own implementation +that can be reused between targets. In the above case, we're importing Var, which is responsible +for storing simple values on the blockchain's storage.

    Struct

    flipper.rs
    /// A module definition. Each module struct consists of Vars and Mappings
    /// or/and other modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Var<bool>,
    }

    In Odra, all contracts are also modules, which can be reused between contracts. That's why we need +to mark the struct with the #[odra::module] macro. In the struct definition itself, we state all +the fields of the contract. Those fields can be regular Rust data types, however - those will not +be persisted on the blockchain. They can also be Odra modules - defined in your project or coming +from Odra itself. Finally, to make the data persistent on the blockchain, you can use something like +Var<T> showed above. To learn more about storage interaction, take a look at the +next article.

    Impl

    flipper.rs
    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor.
    ///
    /// Initializes the contract with the value of value.
    pub fn init(&mut self) {
    self.value.set(false);
    }
    ...

    Similarly to the struct, we mark the impl section with the #[odra::module] macro. Odra will take all +pub functions from this section and create contract endpoints from them. So, if you wish to have +functions that are not available for calling outside the contract, do not make them public. Alternatively, +you can create a separate impl section without the macro - all functions defined there, even marked +with pub will be not callable.

    The function named init is the constructor of the contract. This function will be limited to only +to a single call, all further calls to it will result in an error. The init function is optional, +if your contract does not need any initialization, you can skip it.

    flipper.rs
        ...
    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }
    ...

    The endpoints above show you how to interact with the simplest type of storage - Var<T>. The data +saved there using set function will be persisted in the blockchain.

    Tests

    flipper.rs
    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperHostRef;
    use odra::host::{Deployer, NoArgs};

    #[test]
    fn flipping() {
    let env = odra_test::env();
    // To test a module we need to deploy it. Autogenerated `FlipperHostRef`
    // implements `Deployer` trait, so we can use it to deploy the module.
    let mut contract = FlipperHostRef::deploy(&env, NoArgs);
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }
    ...

    You can write tests in any way you prefer and know in Rust. In the example above we are deploying the +contract using Deployer::deploy function called on FlipperHostRef - a piece of code generated +by the #[odra::module]. Because the module implements the constructor but does not accept any arguments, +as the second argument of the deploy function, we pass NoArgs - one of the implementations of +the InitArgs trait provided with the framework.

    The contract will be deployed on the VM you chose while running cargo odra test.

    What's next

    Now let's take a look at the different types of storage that Odra provides and how to use them.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/modules/index.html b/docs/docs/next/basics/modules/index.html new file mode 100644 index 000000000..f54a2c7fe --- /dev/null +++ b/docs/docs/next/basics/modules/index.html @@ -0,0 +1,21 @@ + + + + + +Modules | Odra + + + + + +
    +
    Version: 0.8.0

    Modules

    Simply put, modules in Odra let you reuse your code between contracts or even projects. Every contract you +write is also a module, thanks to the macro #[odra::module]. This means that we can easily rewrite our math +example from the previous article, to use a single contract, but still separate our "math" code:

    examples/src/features/modules.rs
    use crate::features::cross_calls::MathEngine;
    use odra::module::SubModule;
    use odra::prelude::*;

    #[odra::module]
    pub struct ModulesContract {
    pub math_engine: SubModule<MathEngine>
    }

    #[odra::module]
    impl ModulesContract {
    pub fn add_using_module(&self) -> u32 {
    self.math_engine.add(3, 5)
    }
    }
    info

    To use a module as a component of another module, you need to use the SubModule type. This is a special type +that crates a keyspace (read more in Storage Layout) and provide access to its public methods.

    Note that we didn't need to rewrite the MathEngine - we are using the contract from cross calls example as +a module!

    info

    To see how modules can be used in a real-world scenario, check out the OwnedToken example in the main Odra repository!

    Testing

    As we don't need to hold addresses, the test is really simple:

    examples/src/features/modules.rs
    use super::ModulesContractHostRef;
    use odra::host::{Deployer, NoArgs};

    #[test]
    fn test_modules() {
    let test_env = odra_test::env();
    let modules_contract = ModulesContractHostRef::deploy(&test_env, NoArgs);
    assert_eq!(modules_contract.add_using_module(), 8);
    }

    What's next

    We will see how to handle native token transfers.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/native-token/index.html b/docs/docs/next/basics/native-token/index.html new file mode 100644 index 000000000..451ac92ab --- /dev/null +++ b/docs/docs/next/basics/native-token/index.html @@ -0,0 +1,25 @@ + + + + + +Native token | Odra + + + + + +
    +
    Version: 0.8.0

    Native token

    Different blockchains come with different implementations of their native tokens. Odra wraps it all for you +in easy-to-use code. Let's write a simple example of a public wallet - a contract where anyone can deposit +their funds and anyone can withdraw them:

    examples/src/features/native_token.rs
    use odra::prelude::*;
    use odra::{casper_types::U512, module::Module};

    #[odra::module]
    pub struct PublicWallet;

    #[odra::module]
    impl PublicWallet {
    #[odra(payable)]
    pub fn deposit(&mut self) {}

    pub fn withdraw(&mut self, amount: &U512) {
    self.env().transfer_tokens(&self.env().caller(), amount);
    }
    }
    danger

    The code above works, but is dangerous and unfinished - besides allowing you to lose your funds to anyone, it doesn't make +any checks. To keep the code simple, we skipped the part, where the contract checks if the transfer is +even possible.

    To see a more reasonable example, check out examples/src/contracts/tlw.rs in the odra main repository.

    You can see a new macro used here: #[odra(payable)] - it will add all the code needed for a function to +be able to receive the funds. Additionally, we are using a new function from ContractEnv::transfer_tokens(). +It does exactly what you are expecting it to do - it transfers native tokens from the contract to the +specified address.

    Testing

    To be able to test how many tokens a contract (or any address) has, HostEnv comes with a function - +balance_of:

    examples/src/features/native_token.rs
    use super::PublicWalletHostRef;
    use odra::{casper_types::U512, host::{Deployer, NoArgs}};

    #[test]
    fn test_modules() {
    let test_env = odra_test::env();
    let mut my_contract = PublicWalletHostRef::deploy(&test_env, NoArgs);
    assert_eq!(test_env.balance_of(my_contract.address()), U512::zero());

    my_contract.with_tokens(U512::from(100)).deposit();
    assert_eq!(test_env.balance_of(my_contract.address()), U512::from(100));

    my_contract.withdraw(U512::from(25));
    assert_eq!(test_env.balance_of(my_contract.address()), U512::from(75));
    }
    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/odra-toml/index.html b/docs/docs/next/basics/odra-toml/index.html new file mode 100644 index 000000000..5d211710c --- /dev/null +++ b/docs/docs/next/basics/odra-toml/index.html @@ -0,0 +1,23 @@ + + + + + +Odra.toml | Odra + + + + + +
    +
    Version: 0.8.0

    Odra.toml

    As mentioned in the previous article, Odra.toml is a file that contains information about all the contracts +that Odra will build. Let's take a look at the file structure again:

    [[contracts]]
    fqn = "sample::Flipper"

    The fqn (Fully Qualified Name) is used by the building tools to locate and build the contract. +The last segment of the fqn will be used as the name for your contract - the generated wasm file will +be in the above case named flipper.wasm.

    Adding a new contract manually

    Besides using the cargo odra generate command, you can add a new contract to be compiled by hand. +To do this, add another [[contracts]] element, name it and make sure that the fqn is set correctly.

    For example, if you want to create a new contract called counter, your Odra.toml file should finally +look like this:

    [[contracts]]
    fqn = "sample::Flipper"

    [[contracts]]
    fqn = "sample::Counter"

    What's next

    In the next section, we'll take a closer look at the code that was generated by Odra by default - the famous +Flipper contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/storage-interaction/index.html b/docs/docs/next/basics/storage-interaction/index.html new file mode 100644 index 000000000..541cab2d1 --- /dev/null +++ b/docs/docs/next/basics/storage-interaction/index.html @@ -0,0 +1,36 @@ + + + + + +Storage interaction | Odra + + + + + +
    +
    Version: 0.8.0

    Storage interaction

    The Odra framework implements multiple types of data that can be stored on the blockchain. Let's go +through all of them and explain their pros and cons.

    Var

    The Var is the simplest storage type available in the Odra framework. It serializes the data and stores it under a single key in the blockchain storage. To use it, just wrap your +variable in the Var type. Let's look at a "real world" example of a contract that represents a dog:

    examples/src/features/storage/variable.rs
    #[odra::module]
    pub struct DogContract {
    barks: Var<bool>,
    weight: Var<u32>,
    name: Var<String>,
    walks: Var<Vec<u32>>,
    }

    You can see the Var wrapping the data. Even complex types like Vec can be wrapped (with some caveats)!

    Let's make this contract usable, by providing a constructor and some getter functions:

    examples/src/features/storage/variable.rs
    use odra::Var;

    #[odra::module]
    impl DogContract {
    pub fn init(&mut self, barks: bool, weight: u32, name: String) {
    self.barks.set(barks);
    self.weight.set(weight);
    self.name.set(name);
    self.walks.set(Vec::<u32>::default());
    }

    pub fn barks(&self) -> bool {
    self.barks.get_or_default()
    }

    pub fn weight(&self) -> u32 {
    self.weight.get_or_default()
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.len() as u32
    }

    pub fn walks_total_length(&self) -> u32 {
    let walks = self.walks.get_or_default();
    walks.iter().sum()
    }
    }

    As you can see, you can access the data, by using get_or_default function:

    examples/src/features/storage/variable.rs
    ...
    self.barks.get_or_default()
    ...
    note

    Keep in mind that using get() will result in an Option that you'll need to unwrap - the variable +doesn't have to be initialized!

    To modify the data, use the set() function:

    examples/src/features/storage/variable.rs
    self.barks.set(barks);

    A Var is easy to use and efficient for simple data types. One of its downsides is that it +serializes the data as a whole, so when you're using complex types like Vec or HashMap, +each time you get or set the whole data is read and written to the blockchain storage.

    In the example above, if we want to see how many walks our dog had, we would use the function:

    examples/src/features/storage/variable.rs
    pub fn walks_amount(&self) -> usize {
    let walks = self.walks.get_or_default();
    walks.len()
    }

    But to do so, we need to extract the whole serialized vector from the storage, which would inefficient, +especially for larger sets of data.

    To tackle this issue following two types were created.

    Mapping

    The Mapping is used to store and access data as key-value pairs. To define a Mapping, you need to +pass two values - the key type and the value type. Let's look at the variation of the Dog contract, that +uses Mapping to store information about our dog's friends and how many times they visited:

    examples/src/features/storage/mapping.rs
    use odra::{Mapping, Var};

    #[odra::module]
    pub struct DogContract2 {
    name: Var<String>,
    friends: Mapping<String, u32>,
    }

    In the example above, our key is a String (it is a name of the friend) and we are storing u32 values +(amount of visits). To read and write values from and into a Mapping we use a similar approach +to the one shown in the Vars section with one difference - we need to pass a key:

    examples/src/features/storage/mapping.rs
    pub fn visit(&mut self, friend_name: String) {
    let visits = self.visits(friend_name.clone());
    self.friends.set(&friend_name, visits + 1);
    }

    pub fn visits(&self, friend_name: String) -> u32 {
    self.friends.get_or_default(&friend_name)
    }

    The biggest improvement over a Var is that we can model functionality of a HashMap using Mapping. +The amount of data written to and read from the storage is minimal. However, we cannot iterate over Mapping. +We could implement such behavior by using a numeric type key and saving the length of the set in a +separate variable. Thankfully Odra comes with a prepared solution - the List type.

    note

    If you take a look into List implementation in Odra, you'll see that in fact it is just a Mapping with +a Var working together:

    core/src/list.rs
    use odra::{List, Var};

    pub struct List<T> {
    values: Mapping<u32, T>,
    index: Var<u32>
    }

    List

    Going back to our DogContract example - let's revisit the walk case. This time, instead of Vec, +we'll use the list:

    examples/src/features/storage/list.rs
    #[odra::module]
    pub struct DogContract3 {
    name: Var<String>,
    walks: List<u32>,
    }

    As you can see, the notation is very similar to the Vec. To understand the usage, take a look +at the reimplementation of the functions with an additional function that takes our dog for a walk +(it writes the data to the storage):

    examples/src/features/storage/list.rs
    #[odra::module]
    impl DogContract3 {
    pub fn init(&mut self, name: String) {
    self.name.set(name);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn walks_amount(&self) -> u32 {
    self.walks.len()
    }

    pub fn walks_total_length(&self) -> u32 {
    self.walks.iter().sum()
    }

    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }
    }

    Now, we can know how many walks our dog had without loading the whole vector from the storage. +We need to do this to sum the length of all the walks, but the Odra framework cannot (yet) handle all +the cases for you.

    info

    All of the above examples, alongside the tests, are available in the Odra repository in the examples/src/features/ folder.

    Custom Types

    By default you can store only built-in types like numbers, Options, Results, Strings, Vectors.

    Implementing custom types is straightforward, your type must derive from OdraType:

    use odra::{Address, OdraType};

    #[derive(OdraType)]
    pub struct Dog {
    pub name: String,
    pub age: u8,
    pub owner: Option<Address>
    }
    note

    Each field of your struct must be an OdraType.

    What's next

    In the next article, we'll see how to query the host for information about the world and our contract.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/basics/testing/index.html b/docs/docs/next/basics/testing/index.html new file mode 100644 index 000000000..fe33ba2f5 --- /dev/null +++ b/docs/docs/next/basics/testing/index.html @@ -0,0 +1,32 @@ + + + + + +Testing | Odra + + + + + +
    +
    Version: 0.8.0

    Testing

    Thanks to the Odra framework, you can test your code in any way you are used to. This means you can write +regular Rust unit and integration tests. Have a look at how we test the Dog Contract we created in the +previous article:

    examples/src/features/storage/list.rs
    use odra::{List, Var};

    #[cfg(test)]
    mod tests {
    use super::{DogContract3HostRef, DogContract3InitArgs};
    use odra::{host::Deployer, prelude::*};

    #[test]
    fn init_test() {
    let test_env = odra_test::env();
    let init_args = DogContract3InitArgs {
    name: "DogContract".to_string()
    };
    let mut dog_contract = DogContract3HostRef::deploy(&test_env, init_args);
    assert_eq!(dog_contract.walks_amount(), 0);
    assert_eq!(dog_contract.walks_total_length(), 0);
    dog_contract.walk_the_dog(5);
    dog_contract.walk_the_dog(10);
    assert_eq!(dog_contract.walks_amount(), 2);
    assert_eq!(dog_contract.walks_total_length(), 15);
    }
    }

    The first interesting thing you may notice is placed the import section.

    use super::{DogContract3HostRef, DogContract3InitArgs};
    use odra::{host::Deployer, prelude::*};

    We are using super to import the DogContract3HostRef and DogContract3InitArgs from the parent module. +{{ModuleName}}HostRef and {{ModuleName}}InitArgs are types that was generated for us by Odra.

    DogContract3HostRef is a reference to the contract that we can use to interact with it (call entrypoints) +and implements HostRef trait.

    DogContract3InitArgs is a struct that we use to initialize the contract and implements InitArgs trait. +Considering the contract initialization, there three possible scenarios:

    1. The contract has a constructor with arguments, then Odra creates a struct named {{ModuleName}}InitArgs.
    2. The contract has a constructor with no arguments, then you can use odra::host::NoArgs.
    3. The contract does not have a constructor, then you can use odra::host::NoArgs. +All of those structs implement the odra::host::InitArgs trait, required to conform to the +Deployer::deploy method signature.

    The other import is odra::host::Deployer. This is a trait is used to deploy the contract and give us a reference to it.

    Let's take a look at the test itself. How to obtain a reference to the contract? +{{ModuleName}}HostRef implements the Deployer trait, which provides the deploy method:

    examples/src/features/storage/list.rs
    let mut dog_contract = DogContract3HostRef::deploy(&test_env, init_args);

    From now on, we can use dog_contract to interact with our deployed contract - in particular, all +pub functions from the impl section that was annotated with a macro are available to us:

    examples/src/features/storage/list.rs
    // Impl
    pub fn walk_the_dog(&mut self, length: u32) {
    self.walks.push(length);
    }

    ...

    // Test
    dog_contract.walk_the_dog(5);

    HostEnv

    Odra gives us some additional functions that we can use to communicate with the host (outside the contract context) +and to configure how the contracts are deployed and called. Let's revisit the example from the previous +article about host communication and implement the tests that prove it works:

    examples/src/features/testing.rs
    #[cfg(test)]
    mod tests {
    use crate::features::testing::{TestingContractHostRef, TestingContractInitArgs};
    use odra::{host::{Deployer, HostEnv}, prelude::*};

    #[test]
    fn env() {
    let test_env: HostEnv = odra_test::env();
    test_env.set_caller(test_env.get_account(0));
    let init_args = TestingContractInitArgs {
    name: "MyContract".to_string()
    };
    let testing_contract = TestingContractHostRef::deploy(&test_env, init_args);
    let creator = testing_contract.created_by();
    test_env.set_caller(test_env.get_account(1));
    let init_args = TestingContractInitArgs {
    name: "MyContract2".to_string()
    };
    let testing_contract2 = TestingContractHostRef::deploy(&test_env, init_args);
    let creator2 = testing_contract2.created_by();
    assert_ne!(creator, creator2);
    }
    }

    In the code above, at the beginning of the test, we are obtaining a HostEnv instance using odra_test::env(). +Next, we are deploying two instances of the same contract, but we're using HostEnv::set_caller +to change the caller - so the Address which is deploying the contract. This changes the result of the odra::ContractEnv::caller() +the function we are calling inside the contract.

    HostEnv comes with a set of functions that will let you write better tests:

    • fn set_caller(&self, address: Address) - you've seen it in action just now
    • fn balance_of(&self, address: &Address) -> U512 - returns the balance of the account associated with the given address
    • fn advance_block_time(&self, time_diff: u64) - increases the current value of block_time
    • fn get_account(&self, n: usize) -> Address - returns an n-th address that was prepared for you by Odra in advance; +by default, you start with the 0-th account
    • fn emitted_event<T: ToBytes + EventInstance>(&self, contract_address: &Address, event: &T) -> bool - verifies if the event was emitted by the contract

    Full list of functions can be found in the HostEnv documentation.

    What's next

    We take a look at how Odra handles errors!

    + + + + \ No newline at end of file diff --git a/docs/docs/next/category/advanced/index.html b/docs/docs/next/category/advanced/index.html new file mode 100644 index 000000000..4f81d3431 --- /dev/null +++ b/docs/docs/next/category/advanced/index.html @@ -0,0 +1,17 @@ + + + + + +Advanced | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/next/category/backends/index.html b/docs/docs/next/category/backends/index.html new file mode 100644 index 000000000..35c172192 --- /dev/null +++ b/docs/docs/next/category/backends/index.html @@ -0,0 +1,17 @@ + + + + + +Backends | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/next/category/basics/index.html b/docs/docs/next/category/basics/index.html new file mode 100644 index 000000000..c25918664 --- /dev/null +++ b/docs/docs/next/category/basics/index.html @@ -0,0 +1,17 @@ + + + + + +Basics | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/next/category/examples/index.html b/docs/docs/next/category/examples/index.html new file mode 100644 index 000000000..ca92d1000 --- /dev/null +++ b/docs/docs/next/category/examples/index.html @@ -0,0 +1,17 @@ + + + + + +Examples | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/next/category/getting-started/index.html b/docs/docs/next/category/getting-started/index.html new file mode 100644 index 000000000..fd7aa32df --- /dev/null +++ b/docs/docs/next/category/getting-started/index.html @@ -0,0 +1,17 @@ + + + + + +Getting started | Odra + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/next/category/migrations/index.html b/docs/docs/next/category/migrations/index.html new file mode 100644 index 000000000..5559dd5ff --- /dev/null +++ b/docs/docs/next/category/migrations/index.html @@ -0,0 +1,17 @@ + + + + + +Migrations | Odra + + + + + +
    +
    Version: 0.8.0

    Migrations

    How to keep your code in sync with the latest version of the Odra Framework.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/category/tutorials/index.html b/docs/docs/next/category/tutorials/index.html new file mode 100644 index 000000000..a8eef6c43 --- /dev/null +++ b/docs/docs/next/category/tutorials/index.html @@ -0,0 +1,17 @@ + + + + + +Tutorials | Odra + + + + + +
    +
    Version: 0.8.0

    Tutorials

    The theory is good, but the practice is even better. Let's go through a few examples summing up all the Odra concepts.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/examples/odra-examples/index.html b/docs/docs/next/examples/odra-examples/index.html new file mode 100644 index 000000000..5720e90d5 --- /dev/null +++ b/docs/docs/next/examples/odra-examples/index.html @@ -0,0 +1,17 @@ + + + + + +odra-examples | Odra + + + + + +
    +
    Version: 0.8.0

    odra-examples

    Odra repository provides rich source learning materials. We want to ensure you would feel comfortable with the framework from day one and make the learning curve as flat as possible. Are you a Solidity developer? Are you a Casper developer? Are you new to smart contracts development? To learn Odra from its creators, look at the examples in the Odra main repository.

    The examples we have prepared demonstrate in "real code" all the concepts you have read in this documentation, from a simple access control module ending up with a wallet where you can lock your native tokens for a certain amount of time.

    Don't worry if you find learning solely by reading the code challenging. Go to the Tutorial section, where we will review it together. We will break the code into pieces, leaving no space for further questions.

    What's next

    Read the next article to learn about reusable Odra components encapsulated in odra-modules.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/examples/using-odra-modules/index.html b/docs/docs/next/examples/using-odra-modules/index.html new file mode 100644 index 000000000..1618beebe --- /dev/null +++ b/docs/docs/next/examples/using-odra-modules/index.html @@ -0,0 +1,21 @@ + + + + + +Using odra-modules | Odra + + + + + +
    +
    Version: 0.8.0

    Using odra-modules

    Besides the Odra framework, you can attach to your project odra-module - a set of plug-and-play modules.

    If you followed the Installation guide your Cargo.toml should look like:

    Cargo.toml
    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]
    odra = "0.8.0"

    [dev-dependencies]
    odra-test = "0.8.0"

    [[bin]]
    name = "my_project_build_contract"
    path = "bin/build_contract.rs"
    test = false

    [[bin]]
    name = "my_project_build_schema"
    path = "bin/build_schema.rs"
    test = false

    [profile.release]
    codegen-units = 1
    lto = true

    [profile.dev.package."*"]
    opt-level = 3

    To use odra-modules, edit your dependency and features sections.

    Cargo.toml
    [dependencies]
    odra = "0.8.0"
    odra-modules = "0.8.0"

    Now, the only thing left is to add a module to your contract.

    Let's write an example of MyToken based on Erc20 module.

    use odra::prelude::*;
    use odra::{Address, casper_types::U256, module::SubModule};
    use odra_modules::erc20::Erc20;

    #[odra::module]
    pub struct MyToken {
    erc20: SubModule<Erc20>
    }

    #[odra::module]
    impl OwnedToken {
    pub fn init(&mut self, initial_supply: U256) {
    let name = String::from("MyToken");
    let symbol = String::from("MT");
    let decimals = 9u8;
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: Address, spender: Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: Address, amount: U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: Address, recipient: Address, amount: U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: Address, amount: U256) {
    self.erc20.approve(spender, amount);
    }
    }
    info

    All available modules are placed in the main Odra repository.

    Available modules

    Odra modules comes with couple of ready-to-use modules and reusable extensions.

    Tokens

    Erc20

    The Erc20 module implements the ERC20 standard.

    Erc721

    The Erc721Base module implements the ERC721 standard, adjusted for the Odra framework.

    The Erc721Token module implements the ERC721Base and additionally uses +the Erc721Metadata and Ownable extensions.

    The Erc721Receiver trait lets you implement your own logic for receiving NFTs.

    The OwnedErc721WithMetadata trait is a combination of Erc721Token, Erc721Metadata and Ownable modules.

    Erc1155

    The Erc1155Base module implements the ERC1155 standard, adjusted for the Odra framework.

    The Erc1155Token module implements the ERC1155Base and additionally uses the Ownable extension.

    The OwnedErc1155 trait is a combination of Erc1155Token and Ownable modules.

    Wrapped native token

    The WrappedNativeToken module implements the Wrapper for the native token, +it was inspired by the WETH.

    Access

    AccessControl

    This module enables the implementation of role-based access control mechanisms for children +modules. Roles are identified by their 32-bytes identifier, which should be unique and exposed in the external API.

    Ownable

    This module provides a straightforward access control feature that enables exclusive access to particular functions by an account, known as the owner.

    The account that initiates the module is automatically assigned as the owner. However, ownership can be transferred later by using the +transfer_ownership() function.

    Ownable2Step

    An extension of the Ownable module.

    Ownership can be transferred in a two-step process by using transfer_ownership() and accept_ownership() functions.

    Security

    Pauseable

    A module allowing to implement an emergency stop mechanism that can be triggered by any account.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/getting-started/flipper/index.html b/docs/docs/next/getting-started/flipper/index.html new file mode 100644 index 000000000..273539881 --- /dev/null +++ b/docs/docs/next/getting-started/flipper/index.html @@ -0,0 +1,18 @@ + + + + + +Flipper example | Odra + + + + + +
    +
    Version: 0.8.0

    Flipper example

    To quickly start working with Odra, take a look at the following code sample. If you followed the +Installation tutorial, you should have this file already at src/flipper.rs.

    For further explanation of how this code works, see Flipper Internals.

    Let's flip

    flipper.rs
    use odra::Var;

    /// A module definition. Each module struct consists Vars and Mappings
    /// or/and another modules.
    #[odra::module]
    pub struct Flipper {
    /// The module itself does not store the value,
    /// it's a proxy that writes/reads value to/from the host.
    value: Var<bool>,
    }

    /// Module implementation.
    ///
    /// To generate entrypoints,
    /// an implementation block must be marked as #[odra::module].
    #[odra::module]
    impl Flipper {
    /// Odra constructor, must be named `init`.
    ///
    /// Initializes the contract with the value of value.
    pub fn init(&mut self) {
    self.value.set(false);
    }

    /// Replaces the current value with the passed argument.
    pub fn set(&mut self, value: bool) {
    self.value.set(value);
    }

    /// Replaces the current value with the opposite value.
    pub fn flip(&mut self) {
    self.value.set(!self.get());
    }

    /// Retrieves value from the storage.
    /// If the value has never been set, the default value is returned.
    pub fn get(&self) -> bool {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod tests {
    use crate::flipper::FlipperHostRef;
    use odra::host::{Deployer, NoArgs};

    #[test]
    fn flipping() {
    let env = odra_test::env();
    // To test a module we need to deploy it. Autogenerated `FlipperHostRef`
    // implements `Deployer` trait, so we can use it to deploy the module.
    let mut contract = FlipperHostRef::deploy(&env, NoArgs);
    assert!(!contract.get());
    contract.flip();
    assert!(contract.get());
    }

    #[test]
    fn test_two_flippers() {
    let env = odra_test::env();
    let mut contract1 = FlipperHostRef::deploy(&env, NoArgs);
    let contract2 = FlipperHostRef::deploy(&env, NoArgs);
    assert!(!contract1.get());
    assert!(!contract2.get());
    contract1.flip();
    assert!(contract1.get());
    assert!(!contract2.get());
    }
    }

    Testing

    To run the tests, execute the following command:

    cargo odra test # or add the `-b casper` flag to run tests on the CasperVM

    What's next

    In the next category of articles, we will go through basic concepts of Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/getting-started/installation/index.html b/docs/docs/next/getting-started/installation/index.html new file mode 100644 index 000000000..84c12d819 --- /dev/null +++ b/docs/docs/next/getting-started/installation/index.html @@ -0,0 +1,22 @@ + + + + + +Installation | Odra + + + + + +
    +
    Version: 0.8.0

    Installation

    Hello fellow Odra user! This page will guide you through the installation process.

    Prerequisites

    To start working with Odra, you need to have the following installed on your machine:

    • Rust toolchain installed (see rustup.rs)
    • wasmstrip tool installed (see wabt)

    We do not provide exact commands for installing these tools, as they are different for different operating systems. +Please refer to the documentation of the tools themselves.

    With Rust toolchain ready, you can add a new target:

    rustup target add wasm32-unknown-unknown
    note

    wasm32-unknown-unknown is a target that will be used by Odra to compile your smart contracts to WASM files.

    Installing Cargo Odra

    Cargo Odra is a helpful tool that will help you to build and test your smart contracts. +It is not required to use Odra, but the documentation will assume that you have it installed.

    To install it, simply execute the following command:

    cargo install cargo-odra --locked

    To check if it was installed correctly and see available commands, type:

    cargo odra --help

    If everything went fine, we can proceed to the next step.

    Creating a new Odra project

    To create a new project, simply execute:

    cargo odra new --name my-project && cd my_project

    This will create a new folder called my_project and initialize Odra there. Cargo Odra +will create a sample contract for you in src directory. You can run the tests of this contract +by executing:

    cargo odra test

    This will run tests using Odra's internal OdraVM. You can run those tests against a real backend, let's use CasperVM:

    cargo odra test -b casper

    Congratulations! Now you are ready to create contracts using Odra framework! If you had any problems during +the installation process, feel free to ask for help on our Discord.

    What's next?

    If you want to see the code that you just tested, continue to the description of Flipper example.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/index.html b/docs/docs/next/index.html new file mode 100644 index 000000000..cfcf99ec7 --- /dev/null +++ b/docs/docs/next/index.html @@ -0,0 +1,19 @@ + + + + + +Odra framework | Odra + + + + + +
    +
    Version: 0.8.0

    Odra framework

    Odra is a Rust-based smart contract framework for Casper Network. Odra encourages rapid development and clean, +pragmatic design. Built by experienced developers, takes care of much of the hassle of smart contract +development, enabling you to focus on writing your dapp without reinventing the wheel.

    It's free and open source!

    What's next

    See the Installation and our Flipper example to find out how to start your new project with Odra.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/migrations/to-0.8.0/index.html b/docs/docs/next/migrations/to-0.8.0/index.html new file mode 100644 index 000000000..faf8fa817 --- /dev/null +++ b/docs/docs/next/migrations/to-0.8.0/index.html @@ -0,0 +1,17 @@ + + + + + +Migration guide to v0.8.0 | Odra + + + + + +
    +
    Version: 0.8.0

    Migration guide to v0.8.0

    1. Introduction:

    • Briefly introduce the migration guide.
    • Explain the reasons for the breaking changes, emphasizing any improvements or new features.

    2. Prerequisites:

    • List the prerequisites users need before attempting the migration.
    • Include information on the minimum version requirements for the new smart contract framework.

    3. Overview of Breaking Changes:

    • Clearly enumerate the breaking changes that users will encounter.
    • Provide a high-level explanation for each change.
    • Include links to more detailed sections for each breaking change.

    4. Migration Steps:

    • Outline step-by-step instructions for the migration process.
    • Use clear and concise language to guide users through each step.
    • Include code snippets and examples to illustrate the migration steps.
    • Highlight any potential pitfalls or common issues users might face.

    5. Code Examples:

    • Provide before-and-after code examples for the most common scenarios affected by the breaking changes.
    • Include annotations and comments to explain the modifications made in the code.
    • Consider creating a side-by-side comparison for easier understanding.

    6. Testing and Validation:

    • Emphasize the importance of thorough testing after the migration.
    • Provide a testing checklist or guide to help users validate their migrated code.
    • Recommend specific testing tools or frameworks if applicable.

    7. Common Issues and Troubleshooting:

    • Create a section addressing common issues users might face during the migration.
    • Offer troubleshooting tips and solutions for each issue.
    • Encourage users to check this section if they encounter problems.

    8. Rollback Plan:

    • Discuss the possibility of rolling back to the previous version in case the migration fails.
    • Provide instructions on how to revert changes if necessary.
    • Include a checklist or steps for a smooth rollback process.

    9. Documentation Updates:

    • Mention any updates to the official documentation that accompany the breaking changes.
    • Provide links to relevant sections of the updated documentation.

    10. Community Support:

    • Encourage users to seek help from the community or support channels.
    • Provide links to forums, chat rooms, or any dedicated support resources.

    11. Conclusion:

    • Summarize the key points of the migration guide.
    • Express gratitude for users' cooperation and understanding during the transition.

    12. Version Compatibility Table:

    • Include a table showing the compatibility between different versions of the smart contract framework.
    • Clearly indicate which versions are affected by the breaking changes.

    13. FAQ Section:

    • Anticipate common questions users might have and address them in a FAQ section.
    • Include questions related to the migration process, compatibility, and common issues.

    14. Glossary:

    • Include a glossary of terms related to the migration guide to help users understand specific terminology.

    15. Appendix:

    • Add any additional information that doesn't fit into the main sections but might be useful for users.

    Remember to make the documentation easily navigable with clear headings, subheadings, and a table of contents. Test the documentation with a sample user to ensure clarity and effectiveness. Lastly, keep the documentation updated as the framework evolves.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/tutorials/access-control/index.html b/docs/docs/next/tutorials/access-control/index.html new file mode 100644 index 000000000..b6c14533c --- /dev/null +++ b/docs/docs/next/tutorials/access-control/index.html @@ -0,0 +1,17 @@ + + + + + +Access Control | Odra + + + + + +
    +
    Version: 0.8.0

    Access Control

    In a previous tutorial, we introduced the Ownable module, which serves the purpose of securing access to specific contract features. While it establishes a fundamental security layer, there are numerous scenarios where this level of security is insufficient,

    In this article we design and implement a more fine-grained access control layer.

    Code

    Before we start writing code, we list the functionalities of our access control layer.

    1. A Role type is used across the module.
    2. A Role can be assigned to many Addresses.
    3. Each Role may have a corresponding admin role.
    4. Only an admin can grant/revoke a Role.
    5. A Role can be renounced.
    6. A Role cannot be renounced on someone's behalf.
    7. Each action triggers an event.
    8. Unauthorized access stops contract execution.

    Events and Errors

    There are three actions that can be performed concerning a Role: granting, revoking, and altering the admin role. Let us establish standard Odra events for each of these actions.

    events.rs
    use odra::casper_event_standard::{self, Event};
    use odra::casper_types::Address;
    use super::access_control::Role;

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct RoleGranted {
    pub role: Role,
    pub address: Address,
    pub sender: Address
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct RoleRevoked {
    pub role: Role,
    pub address: Address,
    pub sender: Address
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct RoleAdminChanged {
    pub role: Role,
    pub previous_admin_role: Role,
    pub new_admin_role: Role
    }
    • L5-L17 - to describe the grant or revoke actions, our events specify the Role, and Addresses indicating who receives or loses access and who provides or withdraws it.
    • L19-L24 - the event describing the admin role change, requires the subject Role, the previous and the current admin Role.
    errors.rs
    use odra::OdraError;

    #[derive(OdraError)]
    pub enum Error {
    MissingRole = 20_000,
    RoleRenounceForAnotherAddress = 20_001,
    }

    Errors definition is straightforward - there are only two invalid states:

    1. An action is triggered by an unauthorized actor.
    2. The caller is attempting to resign the Role on someone's behalf.

    Module

    Now, we are stepping into the most interesting part: the module definition and implementation.

    access_control.rs
    use super::events::*;
    use crate::access::errors::Error;
    use odra::prelude::*;
    use odra::{module::Module, Address, Mapping};

    pub type Role = [u8; 32];

    pub const DEFAULT_ADMIN_ROLE: Role = [0u8; 32];

    #[odra::module(events = [RoleAdminChanged, RoleGranted, RoleRevoked])]
    pub struct AccessControl {
    roles: Mapping<(Role, Address), bool>,
    role_admin: Mapping<Role, Role>
    }

    #[odra::module]
    impl AccessControl {
    pub1 fn has_role(&self, role: &Role, address: &Address) -> bool {
    self.roles.get_instance(role).get_or_default(address)
    }

    pub fn get_role_admin(&self, role: &Role) -> Role {
    let admin_role = self.role_admin.get(role);
    if let Some(admin) = admin_role {
    admin
    } else {
    DEFAULT_ADMIN_ROLE
    }
    }

    pub fn grant_role(&mut self, role: &Role, address: &Address) {
    self.check_role(&self.get_role_admin(role), &contract_env::caller());
    self.unchecked_grant_role(role, address);
    }

    pub fn revoke_role(&mut self, role: &Role, address: &Address) {
    self.check_role(&self.get_role_admin(role), &contract_env::caller());
    self.unchecked_revoke_role(role, address);
    }

    pub fn renounce_role(&mut self, role: &Role, address: &Address) {
    if address != &contract_env::caller() {
    self.env().revert(Error::RoleRenounceForAnotherAddress);
    }
    self.unchecked_revoke_role(role, address);
    }
    }

    impl AccessControl {
    pub fn check_role(&self, role: &Role, address: &Address) {
    if !self.has_role(role, address) {
    self.env().revert(Error::MissingRole);
    }
    }

    pub fn set_admin_role(&mut self, role: &Role, admin_role: &Role) {
    let previous_admin_role = self.get_role_admin(role);
    self.role_admin.set(role, *admin_role);
    self.env().emit_event(RoleAdminChanged {
    role: *role,
    previous_admin_role,
    new_admin_role: *admin_role
    });
    }

    pub fn unchecked_grant_role(&mut self, role: &Role, address: &Address) {
    if !self.has_role(role, address) {
    self.roles.get_instance(role).set(address, true);
    self.env().emit_event(RoleGranted {
    role: *role,
    address: *address,
    sender: self.env().caller()
    });
    }
    }

    pub fn unchecked_revoke_role(&mut self, role: &Role, address: &Address) {
    if self.has_role(role, address) {
    self.roles.get_instance(role).set(address, false);
    self.env().emit_event(RoleRevoked {
    role: *role,
    address: *address,
    sender: self.env().caller()
    });
    }
    }
    }
    • L6 - Firstly, we need the Role type. It is simply an alias for a 32-byte array.
    • L8 - The default role is an array filled with zeros.
    • L10-L13 - The storage consists of two mappings:
    1. roles - a nested mapping that stores information about whether a certain Role is granted to a given Address.
    2. role_admin - each Role can have a single admin Role.
    • L18-L20 - This is a simple check to determine if a Role has been granted to a given Address. It is an exposed entry point and an important building block widely used throughout the entire module.
    • L49 - This is a non-exported block containing helper functions.
    • L50-L54 - The check_role() function serves as a guard function. Before a Role is granted or revoked, we must ensure that the caller is allowed to do so. For this purpose, the function reads the roles mapping. If the role has not been granted to the address, the contract reverts with Error::MissingRole.
    • L56-L64 - The set_admin_role() function simply updates the role_admin mapping and emits the RoleAdminChanged event.
    • L66-L86 - The unchecked_grant_role() and unchecked_revoke_role() functions are mirror functions that update the roles mapping and post RoleGranted or RoleRevoked events. If the role is already granted, unchecked_grant_role() has no effect (the opposite check is made in the case of revoking a role).
    • L22-L29 - The get_role_admin() entry point reads the role_admin. If there is no admin role for a given role, it returns the default role.
    • L31-L46 - This is a combination of check_role() and unchecked_*_role(). Entry points fail on unauthorized access.
    + + + + \ No newline at end of file diff --git a/docs/docs/next/tutorials/erc20/index.html b/docs/docs/next/tutorials/erc20/index.html new file mode 100644 index 000000000..4c32713ca --- /dev/null +++ b/docs/docs/next/tutorials/erc20/index.html @@ -0,0 +1,17 @@ + + + + + +ERC-20 | Odra + + + + + +
    +
    Version: 0.8.0

    ERC-20

    It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.

    The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token shares attributes that make it indistinguishable from another token of the same type and value.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • Advanced storage using key-value pairs,
    • Odra types such as Address,
    • Advanced event assertion.

    Code

    Our module features a considerably more complex storage layout compared to the previous example.

    It is designed to store the following data:

    1. Immutable metadata - name, symbol, and decimals.
    2. Total supply.
    3. Balances of individual users.
    4. Allowances, essentially indicating who is permitted to spend tokens on behalf of another user.

    Module definition

    erc20.rs
    #[odra::module(events = [Transfer, Approval])]
    pub struct Erc20 {
    decimals: Var<u8>,
    symbol: Var<String>,
    name: Var<String>,
    total_supply: Var<U256>,
    balances: Mapping<Address, U256>,
    allowances: Mapping<(Address, Address), U256>
    }
    • L7 - For the first time, we need to store key-value pairs. In order to do that, we use Mapping. The name is taken after Solidity's native type mapping.
    • L8 - Odra does not allows nested Mappings as Solidity does. Instead, you can create a compound key using a tuple of keys.

    Metadata

    erc20.rs
    #[odra::module]
    impl Erc20 {
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {
    let caller = self.env().caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn symbol(&self) -> String {
    self.symbol.get_or_default()
    }

    pub fn decimals(&self) -> u8 {
    self.decimals.get_or_default()
    }

    pub fn total_supply(&self) -> U256 {
    self.total_supply.get_or_default()
    }
    }

    impl Erc20 {
    pub fn mint(&mut self, address: &Address, amount: &U256) {
    self.balances.add(address, *amount);
    self.total_supply.add(amount);

    self.env().emit_event(Transfer {
    from: None,
    to: Some(*address),
    amount: *amount
    });
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Transfer {
    pub from: Option<Address>,
    pub to: Option<Address>,
    pub amount: U256
    }
    • L1 - The first impl block, marked as a module, contains functions defined in the ERC-20 standard.
    • L3-L9 - A constructor sets the token metadata and mints the initial supply.
    • L11-L13 - Getter functions are straightforward, but there is one worth-mentioning subtlety. In the Ownable example, we used the get() function returning an Option<T>. If the type implements the Default trait, you can call the get_or_default() function, and the contract does not fail even if the value is not initialized.
    • L28 - The second impl is not an Odra module; in other words, these functions will not be part of the contract's ABI.
    • L29-L39 - The mint function is public, so, like in regular Rust code, it will be accessible from the outside. mint() uses the notation self.balances.add(&address, amount);, which is syntactic sugar for:
    let current_balance = self.balances.get(&address).unwrap_or_default();
    let new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();
    self.balances.set(&address, new_balance);

    Core

    To ensure comprehensive functionality, let's implement the remaining features such as transfer, transfer_from, and approve. Since they do not introduce any new concepts, we will present them without additional remarks.

    erc20.rs
    #[odra::module]
    impl Erc20 {
    ...
    pub fn transfer(&mut self, recipient: &Address, amount: &U256) {
    let caller = self.env().caller();
    self.raw_transfer(&caller, recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &U256) {
    let spender = self.env().caller();
    self.spend_allowance(owner, &spender, amount);
    self.raw_transfer(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &U256) {
    let owner = self.env().caller();
    self.allowances.get_instance(&owner).set(spender, *amount);
    Approval {
    owner,
    spender: *spender,
    value: *amount
    }
    .emit();
    }

    pub fn balance_of(&self, address: &Address) -> U256 {
    self.balances.get_or_default(&address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> U256 {
    self.allowances.get_instance(owner).get_or_default(spender)
    }
    }

    impl Erc20 {
    ...

    fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &U256) {
    let owner_balance = self.balances.get_or_default(&owner);
    if *amount > owner_balance {
    self.env().revert(Error::InsufficientBalance)
    }
    self.balances.set(owner, owner_balance - *amount);
    self.balances.add(recipient, *amount);
    Transfer {
    from: Some(*owner),
    to: Some(*recipient),
    amount: *amount
    }
    .emit();
    }

    fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &U256) {
    let allowance = self.allowances.get_instance(owner).get_or_default(spender);
    if allowance < *amount {
    self.env().revert(Error::InsufficientAllowance)
    }
    let new_allowance = allowance - *amount;
    self.allowances
    .get_instance(owner)
    .set(spender, new_allowance);
    Approval {
    owner: *owner,
    spender: *spender,
    value: allowance - *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Approval {
    pub owner: Address,
    pub spender: Address,
    pub value: U256
    }

    #[derive(OdraError)]
    pub enum Error {
    InsufficientBalance = 1,
    InsufficientAllowance = 2,
    }

    Now, compare the code we have written, with Open Zeppelin code. Out of 10, how Solidity-ish is our implementation?

    Test

    erc20.rs
    #[cfg(test)]
    pub mod tests {
    use super::{
    errors::Error,
    events::{Approval, Transfer},
    Erc20Deployer, Erc20HostRef
    };
    use odra::prelude::*;
    use odra::{casper_types::U256, HostEnv};

    const NAME: &str = "Plascoin";
    const SYMBOL: &str = "PLS";
    const DECIMALS: u8 = 10;
    const INITIAL_SUPPLY: u32 = 10_000;

    fn setup() -> (HostEnv, Erc20HostRef) {
    let env = odra_test::env();
    (
    env.clone(),
    Erc20Deployer::init(
    &env,
    SYMBOL.to_string(),
    NAME.to_string(),
    DECIMALS,
    Some(INITIAL_SUPPLY.into())
    )
    )
    }

    #[test]
    fn initialization() {
    // When deploy a contract with the initial supply.
    let (env, erc20) = setup();

    // Then the contract has the metadata set.
    assert_eq!(erc20.symbol(), SYMBOL.to_string());
    assert_eq!(erc20.name(), NAME.to_string());
    assert_eq!(erc20.decimals(), DECIMALS);

    // Then the total supply is updated.
    assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());

    // Then a Transfer event was emitted.
    assert!(env.emitted_event(
    erc20.address(),
    &Transfer {
    from: None,
    to: Some(env.get_account(0)),
    amount: INITIAL_SUPPLY.into()
    }
    ));
    }

    #[test]
    fn transfer_works() {
    // Given a new contract.
    let (env, mut erc20) = setup();

    // When transfer tokens to a recipient.
    let sender = env.get_account(0);
    let recipient = env.get_account(1);
    let amount = 1_000.into();
    erc20.transfer(recipient, amount);

    // Then the sender balance is deducted.
    assert_eq!(
    erc20.balance_of(sender),
    U256::from(INITIAL_SUPPLY) - amount
    );

    // Then the recipient balance is updated.
    assert_eq!(erc20.balance_of(recipient), amount);

    // Then Transfer event was emitted.
    assert!(env.emitted_event(
    erc20.address(),
    &Transfer {
    from: Some(sender),
    to: Some(recipient),
    amount
    }
    ));
    }

    #[test]
    fn transfer_error() {
    // Given a new contract.
    let (env, mut erc20) = setup();

    // When the transfer amount exceeds the sender balance.
    let recipient = env.get_account(1);
    let amount = U256::from(INITIAL_SUPPLY) + U256::one();

    // Then an error occurs.
    assert!(erc20.try_transfer(recipient, amount).is_err());
    }

    #[test]
    fn transfer_from_and_approval_work() {
    let (env, mut erc20) = setup();

    let (owner, recipient, spender) =
    (env.get_account(0), env.get_account(1), env.get_account(2));
    let approved_amount = 3_000.into();
    let transfer_amount = 1_000.into();

    assert_eq!(erc20.balance_of(owner), U256::from(INITIAL_SUPPLY));

    // Owner approves Spender.
    erc20.approve(spender, approved_amount);

    // Allowance was recorded.
    assert_eq!(erc20.allowance(owner, spender), approved_amount);
    assert!(env.emitted_event(
    erc20.address(),
    &Approval {
    owner,
    spender,
    value: approved_amount
    }
    ));

    // Spender transfers tokens from Owner to Recipient.
    env.set_caller(spender);
    erc20.transfer_from(owner, recipient, transfer_amount);

    // Tokens are transferred and allowance decremented.
    assert_eq!(
    erc20.balance_of(owner),
    U256::from(INITIAL_SUPPLY) - transfer_amount
    );
    assert_eq!(erc20.balance_of(recipient), transfer_amount);
    assert!(env.emitted_event(
    erc20.address(),
    &Approval {
    owner,
    spender,
    value: approved_amount - transfer_amount
    }
    ));
    assert!(env.emitted_event(
    erc20.address(),
    &Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount: transfer_amount
    }
    ));
    // assert!(env.emitted(erc20.address(), "Transfer"));
    }

    #[test]
    fn transfer_from_error() {
    // Given a new instance.
    let (env, mut erc20) = setup();

    // When the spender's allowance is zero.
    let (owner, spender, recipient) =
    (env.get_account(0), env.get_account(1), env.get_account(2));
    let amount = 1_000.into();
    env.set_caller(spender);

    // Then transfer fails.
    assert_eq!(
    erc20.try_transfer_from(owner, recipient, amount),
    Err(Error::InsufficientAllowance.into())
    );
    }
    }
    • L149 - Alternatively, if you don't want to check the entire event, you may assert only its type.

    What's next

    Having two modules: Ownable and Erc20, let's combine them, and create an ERC-20 on steroids.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/tutorials/ownable/index.html b/docs/docs/next/tutorials/ownable/index.html new file mode 100644 index 000000000..849fa2a7b --- /dev/null +++ b/docs/docs/next/tutorials/ownable/index.html @@ -0,0 +1,17 @@ + + + + + +Ownable | Odra + + + + + +
    +
    Version: 0.8.0

    Ownable

    In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • storing a single value,
    • defining a constructor,
    • error handling,
    • defining and emitting events.
    • registering a contact in a test environment,
    • interactions with the test environment,
    • assertions (value, events, errors assertions).

    Code

    Before we write any code, we define functionalities we would like to implement.

    1. Module has an initializer that should be called once.
    2. Only the current owner can set a new owner.
    3. Read the current owner.
    4. A function that fails if called by a non-owner account.

    Define a module

    use odra::{Address, Var};

    #[odra::module(events = [OwnershipTransferred])]
    pub struct Ownable {
    owner: Var<Option<Address>>
    }

    That was easy, but it is crucial to understand the basics before we move on.

    • L3 - Firstly, we need to create a struct called Ownable and apply #[odra::module(events = [OwnershipTransferred])] to it. The events attribute is optional but informs the Odra toolchain about the events that will be emitted by the module and includes them in the contract's metadata.
    • L5 - Then we can define the layout of our module. It is extremely simple - just a single state value. What is most important is that you can never leave a raw type; you must always wrap it with Var.

    Init the module

    use odra::prelude::*;
    use odra::{Address, module::Module, Var};
    use odra::casper_event_standard::{self, Event};
    ...

    #[odra::module]
    impl Ownable {
    pub fn init(&mut self, owner: &Address) {
    if self.owner.get().is_some() {
    self.env().revert(Error::OwnerIsAlreadyInitialized)
    }

    self.owner.set(*owner);

    self.env().emit_event(OwnershipChanged {
    prev_owner: None,
    new_owner: *owner
    });
    }
    }

    #[derive(OdraError)]
    pub enum Error {
    OwnerIsNotInitialized = 1,
    }

    #[derive(Event, Debug, PartialEq, Eq)]
    pub struct OwnershipChanged {
    pub prev_owner: Option<Address>,
    pub new_owner: Address
    }

    Ok, we have done a couple of things, let's analyze them one by one:

    • L6 - The impl should be an Odra module, so add #[odra::module].
    • L8 - The init function is a constructor. This matters if we would like to deploy the Ownable module as a standalone contract.
    • L22-25 - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose, we defined an Error enum. Notice that the OdraError derive macro is applied to the enum. It generates, among others, the required Into<odra::OdraError> binding.
    • L9-L11 - If the owner has been set already, we call ContractEnv::revert() function with an Error::OwnerIsNotInitialized argument.
    • L13 - Then we write the owner passed as an argument to the storage. To do so, we call the set() on Var.
    • L27-L31 - Once the owner is set, we would like to inform the outside world. The first step is to define an event struct. The struct must derive from casper_event_standard::Event. We highly recommend to derive Debug, PartialEq and Eq for testing purpose.
    • L15 - Finally, call ContractEnv::emit_event() passing the OwnershipChanged instance to the function. Hence, we set the first owner, we set the prev_owner value to None.
      note

      L3 use odra::casper_event_standard::{self, Event}; imports the Event macro, but also the whole casper_event_standard module, which is required by the code generated by the #[derive(Event)] macro.

    Features implementation

    #[odra::module]
    impl Ownable {
    ...

    pub fn ensure_ownership(&self, address: &Address) {
    if Some(address) != self.owner.get().as_ref() {
    self.env().revert(Error::NotOwner)
    }
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ensure_ownership(&self.env().caller());
    let current_owner = self.get_owner();
    self.owner.set(*new_owner);
    self.env().emit_event(OwnershipChanged {
    prev_owner: Some(current_owner),
    new_owner: *new_owner
    });
    }

    pub fn get_owner(&self) -> Address {
    match self.owner.get() {
    Some(owner) => owner,
    None => self.env().revert(Error::OwnerIsNotInitialized)
    }
    }
    }

    #[derive(OdraError)]
    pub enum Error {
    NotOwner = 1,
    OwnerIsAlreadyInitialized = 2,
    OwnerIsNotInitialized = 3,
    }

    The above implementation relies on the concepts we have already used in this tutorial, so it should be easy for you to get along.

    • L7,L31 - ensure_ownership() reads the current owner and reverts if it does not match the input Address. Also, we need to update our Error enum by adding a new variant NotOwner.
    • L11 - The function defined above can be reused in the change_ownership() implementation. We pass to it the current caller, using the ContractEnv::caller() function. Then we update the state and emit OwnershipChanged.
    • L21,L33 - Lastly, a getter function. As the Var::get() function returns an Option, we need to handle a possible error. If someone calls the getter on an uninitialized module, it should revert with a new Error variant OwnerIsNotInitialized.

    Test

    #[cfg(test)]
    mod tests {
    use super::*;
    use odra::HostEnv;

    fn setup() -> (OwnableHostRef, HostEnv, Address) {
    let env: HostEnv = odra_test::env();
    (OwnableDeployer::init(&env), env.clone(), env.get_account(0))
    }

    #[test]
    fn initialization_works() {
    let (ownable, _, owner) = setup();
    assert_eq!(ownable.get_owner(), owner);

    contract.env().emitted_event(
    ownable.address(),
    &OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    );
    }

    #[test]
    fn owner_can_change_ownership() {
    let (mut ownable, env, owner) = setup();
    let new_owner = env.get_account(1);

    env.set_caller(owner);
    ownable.change_ownership(&new_owner);
    assert_eq!(ownable.get_owner(), new_owner);

    contract.env().emitted_event(
    ownable.address(),
    &OwnershipChanged {
    prev_owner: Some(owner),
    new_owner
    }
    );
    }

    #[test]
    fn non_owner_cannot_change_ownership() {
    let (mut ownable, env, owner) = setup();
    let new_owner = env.get_account(1);
    ownable.change_ownership(&new_owner);

    assert_eq!(ownable.change_ownership(&new_owner), Err(Error::NotOwner.into()));
    }
    }
    • L6 - Each test case starts with the same initialization process, so for convenience, we have defined the setup() function, which we call as the first statement in each test. Take a look at the signature: fn setup() -> (OwnableHostRef, HostEnv, Address). OwnableHostRef is a contract reference generated by Odra. This reference allows us to call all the defined entrypoints, namely: ensure_ownership(), change_ownership(), get_owner(), but not init(), which is a constructor.
    • L7, L8 - The starting point of every test is getting an instance of HostEnv by calling odra_test::env(). Our function returns a triple: a contract ref, an env, and an address (the initial owner). Odra #[odra::module] macro generates a OwnableDeployer struct which exposes the init function, which deploys the contract, calls its constructor and returns a reference. Lastly, the module needs an owner. The easiest way is to take one from the HostEnv. We choose the address of first account (which is the default one).
    • L11 - It is time to define the first test. As you see, it is a regular Rust test.
    • L13-14 - Using the setup() function, we get the owner and a reference (in this test, we don't use the env, so we ignore it). We make a standard assertion, comparing the owner we know with the value returned from the contract.
      note

      You may have noticed, we use here the term module interchangeably with contract. The reason is once we deploy our module onto a virtual blockchain it may be considered a contract.

    • L16-22 - On the contract, only the init() function has been called, so we expect one event to have been emitted. To assert that, let's use HostEnv. To get the env, we call env() on the contract, then call HostEnv::emitted_event. As the first argument, pass the contract address you want to read events from, followed by an event as you expect it to have occurred.
    • L28 - Because we know the initial owner is the 0th account, we must select a different account. It could be any index from 1 to 19 - the HostEnv predefines 20 accounts.
    • L30 - As mentioned, the default is the 0th account, if you want to change the executor, call the HostEnv::set_caller() function.
      note

      The caller switch applies only the next contract interaction, the second call will be done as the default account.

    • L45-49 - If a non-owner account tries to change ownership, we expect it to fail. To capture the error, call HostEnv::try_change_ownership() instead of HostEnv::change_ownership(). HostEnv provides try functions for each contract's entrypoint. The `tryfunctions returnOdraResult(an alias forResult<T, OdraError>) instead of panicking and halting the execution. In our case, we expect the contract to revert with the Error::NotOwnererror. To compare the error, we use theError::into()function, which converts the error into theOdraError` type.

    Summary

    The Ownable module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract.

    What's next

    In the next tutorial we will implement a ERC20 standard.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/tutorials/owned-token/index.html b/docs/docs/next/tutorials/owned-token/index.html new file mode 100644 index 000000000..bcc561e83 --- /dev/null +++ b/docs/docs/next/tutorials/owned-token/index.html @@ -0,0 +1,17 @@ + + + + + +OwnedToken | Odra + + + + + +
    +
    Version: 0.8.0

    OwnedToken

    This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.

    Code

    What should our module be capable of?

    1. Conform the Erc20 interface.
    2. Allow only the module owner to mint tokens.
    3. Enable the current owner to designate a new owner.

    Module definition

    Let's define a module called OwnedToken that is a composition of Ownable and Erc20 modules.

    owned_token.rs
    use crate::{erc20::Erc20, ownable::Ownable};
    use odra::module::SubModule;

    #[odra::module]
    pub struct OwnedToken {
    ownable: SubModule<Ownable>,
    erc20: SubModule<Erc20>
    }

    As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!

    Delegation

    owned_token.rs
    use odra::prelude::*;
    use odra::{Address, casper_types::U256, module::Module};

    ...

    #[odra::module]
    impl OwnedToken {
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &U256) {
    let deployer = self.env().caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> U256 {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: &Address) -> U256 {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> U256 {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: &Address, amount: &U256) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &U256) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &U256) {
    self.erc20.approve(spender, amount);
    }

    pub fn get_owner(&self) -> Address {
    self.ownable.get_owner()
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ownable.change_ownership(new_owner);
    }

    pub fn mint(&mut self, address: &Address, amount: &U256) {
    self.ownable.ensure_ownership(&self.env().caller());
    self.erc20.mint(address, amount);
    }
    }

    Easy. However, there are a few worth mentioning subtleness:

    • L10-L11 - A constructor is an excellent place to initialize both modules at once.
    • L14-L16 - Most of the entrypoints do not need any modification, so we simply delegate them to the erc20 module.
    • L50-L52 - The same is done with the ownable module.
    • L58-L61 - Minting should not be unconditional, we need some control over it. First, using ownable we make sure the caller really is indeed the owner.

    Summary

    The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that.

    + + + + \ No newline at end of file diff --git a/docs/docs/next/tutorials/pauseable/index.html b/docs/docs/next/tutorials/pauseable/index.html new file mode 100644 index 000000000..6617955ff --- /dev/null +++ b/docs/docs/next/tutorials/pauseable/index.html @@ -0,0 +1,17 @@ + + + + + +Pauseable | Odra + + + + + +
    +
    Version: 0.8.0

    Pauseable

    The Pauseable module is like your smart contract's safety switch. It lets authorized users temporarily pause certain features if needed. It's a great way to boost security, but it's not meant to be used on its own. Think of it as an extra tool in your access control toolbox, giving you more control to manage your smart contract safely and efficiently.

    Code

    As always, we will start with defining functionalities of our module.

    1. Check the state - is it paused or not.
    2. State guards - a contract should stop execution if is in a state we don't expect.
    3. Switch the state.

    Events and Error

    There just two errors that may occur: PausedRequired, UnpausedRequired. We define them in a standard Odra way.

    Events definition is highly uncomplicated: Paused and Unpaused events holds only the address of the pauser.

    use odra::{Address, casper_event_standard::{self, Event}, OdraError};

    #[derive(OdraError)]
    pub enum Error {
    PausedRequired = 1_000,
    UnpausedRequired = 1_001,
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Paused {
    pub account: Address
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Unpaused {
    pub account: Address
    }

    Module definition

    The module storage is extremely simple - has a single Var of type bool, that indicates if a contract is paused.

    #[odra::module]
    pub struct Pauseable {
    is_paused: Var<bool>
    }

    Checks and guards

    Now, let's move to state checks and guards.

    pauseable.rs
    impl Pauseable {
    pub fn is_paused(&self) -> bool {
    self.is_paused.get_or_default()
    }

    pub fn require_not_paused(&self) {
    if self.is_paused() {
    self.env().revert(Error::UnpausedRequired);
    }
    }

    pub fn require_paused(&self) {
    if !self.is_paused() {
    self.env().revert(Error::PausedRequired);
    }
    }
    }
    • L1 - as mentioned in the intro, the module is not intended to be a standalone contract, so the only impl block is not annotated with odra::module and hence does not expose any entrypoint.
    • L2 - is_paused() checks the contract state, if the Var is_paused has not been initialized, the default value (false) is returned.
    • L6 - to guarantee the code is executed when the contract is not paused, require_not_paused() function reads the state and reverts if the contract is paused.
    • L12 - require_paused() is a mirror function - stops the contract execution if the contract is not paused.

    Actions

    Finally, we will add the ability to switch the module state.

    impl Pauseable {
    pub fn pause(&mut self) {
    self.require_not_paused();
    self.is_paused.set(true);

    self.env().emit_event(Paused {
    account: self.env().caller()
    });
    }

    pub fn unpause(&mut self) {
    self.require_paused();
    self.is_paused.set(false);

    self.env().emit_event(Unpaused {
    account: self.env().caller()
    });
    }
    }

    pause() and unpause() functions do three things: ensure the contract is the right state (unpaused for pause(), not paused for unpause()), updates the state, and finally emits events (Paused/Unpaused).

    Pauseable counter

    In the end, let's use the module in a contract. For this purpose, we will implement a mock contract called PauseableCounter. The contract consists of a Var value and a Pauseable module. The counter can only be incremented if the contract is in a normal state (is not paused).

    use odra::{module::SubModule, Var};
    use odra_modules::security::Pauseable;

    #[odra::module]
    pub struct PauseableCounter {
    value: Var<u32>,
    pauseable: SubModule<Pauseable>
    }

    #[odra::module]
    impl PauseableCounter {
    pub fn increment(&mut self) {
    self.pauseable.require_not_paused();

    let new_value = self.value.get_or_default() + 1;
    self.value.set(new_value);
    }

    pub fn pause(&mut self) {
    self.pauseable.pause();
    }

    pub fn unpause(&mut self) {
    self.pauseable.unpause();
    }

    pub fn get_value(&self) -> u32 {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod test {
    use super::*;

    #[test]
    fn increment_only_if_unpaused() {
    let test_env = odra_test::env();
    let mut contract = PauseableCounterDeployer::init(&test_env);
    contract.increment();
    contract.pause();

    assert_eq!(
    contract.try_increment().unwrap_err(),
    UnpausedRequired.into()
    );
    assert_eq!(contract.get_value(), 1);
    }
    }

    As we see in the test, in a simple way, using a single function call we can turn off the counter for a while and freeze the counter. Any time we want we can turn it back on. Easy!

    + + + + \ No newline at end of file diff --git a/docs/docs/tutorials/access-control/index.html b/docs/docs/tutorials/access-control/index.html new file mode 100644 index 000000000..178b1b729 --- /dev/null +++ b/docs/docs/tutorials/access-control/index.html @@ -0,0 +1,17 @@ + + + + + +Access Control | Odra + + + + + +
    +
    Version: 0.7.0

    Access Control

    In a previous tutorial, we introduced the Ownable module, which serves the purpose of securing access to specific contract features. While it establishes a fundamental security layer, there are numerous scenarios where this level of security is insufficient,

    In this article we design and implement a more fine-grained access control layer.

    Code

    Before we start writing code, we list the functionalities of our access control layer.

    1. A Role type is used across the module.
    2. A Role can be assigned to many Addresses.
    3. Each Role may have a corresponding admin role.
    4. Only an admin can grant/revoke a Role.
    5. A Role can be renounced.
    6. A Role cannot be renounced on someone's behalf.
    7. Each action triggers an event.
    8. Unauthorized access stops contract execution.

    Events and Errors

    There are three actions that can be performed concerning a Role: granting, revoking, and altering the admin role. Let us establish standard Odra events for each of these actions.

    events.rs
    use odra::{types::Address, Event};
    use super::access_control::Role;

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct RoleGranted {
    pub role: Role,
    pub address: Address,
    pub sender: Address
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct RoleRevoked {
    pub role: Role,
    pub address: Address,
    pub sender: Address
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct RoleAdminChanged {
    pub role: Role,
    pub previous_admin_role: Role,
    pub new_admin_role: Role
    }
    • L4-L16 - to describe the grant or revoke actions, our events specify the Role, and Addresses indicating who receives or loses access and who provides or withdraws it.
    • L18-L21 - the event describing the admin role change, requires the subject Role, the previous and the current admin Role.
    errors.rs
    use odra::execution_error;

    execution_error! {
    pub enum Error {
    MissingRole => 20_000,
    RoleRenounceForAnotherAddress => 20_001,
    }
    }

    Errors definition is straightforward - there are only two invalid states:

    1. An action is triggered by an unauthorized actor.
    2. The caller is attempting to resign the Role on someone's behalf.

    Module

    Now, we are stepping into the most interesting part: the module definition and implementation.

    access_control.rs
    use super::{
    errors::Error,
    events::{RoleAdminChanged, RoleGranted, RoleRevoked}
    };
    use odra::{
    contract_env,
    types::{event::OdraEvent, Address},
    Mapping
    };

    pub type Role = [u8; 32];

    pub const DEFAULT_ADMIN_ROLE: Role = [0u8; 32];

    #[odra::module(events = [RoleAdminChanged, RoleGranted, RoleRevoked])]
    pub struct AccessControl {
    roles: Mapping<Role, Mapping<Address, bool>>,
    role_admin: Mapping<Role, Role>
    }

    #[odra::module]
    impl AccessControl {
    pub fn has_role(&self, role: &Role, address: &Address) -> bool {
    self.roles.get_instance(role).get_or_default(address)
    }

    pub fn get_role_admin(&self, role: &Role) -> Role {
    let admin_role = self.role_admin.get(role);
    if let Some(admin) = admin_role {
    admin
    } else {
    DEFAULT_ADMIN_ROLE
    }
    }

    pub fn grant_role(&mut self, role: &Role, address: &Address) {
    self.check_role(&self.get_role_admin(role), &contract_env::caller());
    self.unchecked_grant_role(role, address);
    }

    pub fn revoke_role(&mut self, role: &Role, address: &Address) {
    self.check_role(&self.get_role_admin(role), &contract_env::caller());
    self.unchecked_revoke_role(role, address);
    }

    pub fn renounce_role(&mut self, role: &Role, address: &Address) {
    if address != &contract_env::caller() {
    contract_env::revert(Error::RoleRenounceForAnotherAddress);
    }
    self.unchecked_revoke_role(role, address);
    }
    }

    impl AccessControl {
    pub fn check_role(&self, role: &Role, address: &Address) {
    if !self.has_role(role, address) {
    contract_env::revert(Error::MissingRole);
    }
    }

    pub fn set_admin_role(&mut self, role: &Role, admin_role: &Role) {
    let previous_admin_role = self.get_role_admin(role);
    self.role_admin.set(role, *admin_role);
    RoleAdminChanged {
    role: *role,
    previous_admin_role,
    new_admin_role: *admin_role
    }
    .emit();
    }

    pub fn unchecked_grant_role(&mut self, role: &Role, address: &Address) {
    if !self.has_role(role, address) {
    self.roles.get_instance(role).set(address, true);
    RoleGranted {
    role: *role,
    address: *address,
    sender: contract_env::caller()
    }
    .emit();
    }
    }

    pub fn unchecked_revoke_role(&mut self, role: &Role, address: &Address) {
    if self.has_role(role, address) {
    self.roles.get_instance(role).set(address, false);
    RoleRevoked {
    role: *role,
    address: *address,
    sender: contract_env::caller()
    }
    .emit();
    }
    }
    }
    • L11 - Firstly, we need the Role type. It is simply an alias for a 32-byte array.
    • L13 - The default role is an array filled with zeros.
    • L15-L19 - The storage consists of two mappings:
    1. roles - a nested mapping that stores information about whether a certain Role is granted to a given Address.
    2. role_admin - each Role can have a single admin Role.
    • L23-L25 - This is a simple check to determine if a Role has been granted to a given Address. It is an exposed entry point and an important building block widely used throughout the entire module.
    • L54 - This is a non-exported block containing helper functions.
    • L55-L59 - The check_role() function serves as a guard function. Before a Role is granted or revoked, we must ensure that the caller is allowed to do so. For this purpose, the function reads the roles mapping. If the role has not been granted to the address, the contract reverts with Error::MissingRole.
    • L61-L70 - The set_admin_role() function simply updates the role_admin mapping and emits the RoleAdminChanged event.
    • L72-L94 - The unchecked_grant_role() and unchecked_revoke_role() functions are mirror functions that update the roles mapping and post RoleGranted or RoleRevoked events. If the role is already granted, unchecked_grant_role() has no effect (the opposite check is made in the case of revoking a role).
    • L27-L34 - The get_role_admin() entry point reads the role_admin. If there is no admin role for a given role, it returns the default role.
    • L36-L51 - This is a combination of check_role() and unchecked_*_role(). Entry points fail on unauthorized access.
    + + + + \ No newline at end of file diff --git a/docs/docs/tutorials/erc20/index.html b/docs/docs/tutorials/erc20/index.html new file mode 100644 index 000000000..90a654d95 --- /dev/null +++ b/docs/docs/tutorials/erc20/index.html @@ -0,0 +1,17 @@ + + + + + +ERC-20 | Odra + + + + + +
    +
    Version: 0.7.0

    ERC-20

    It's time for something that every smart contract developer has done at least once. Let's try to implement Erc20 standard. Of course, we are going to use the Odra Framework.

    The ERC-20 standard establishes a uniform specification for fungible tokens. This implies that each token possesses an attribute that renders it indistinguishable from another token of the same type and value.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • advanced storage - key-value pairs,
    • Odra types like Address or Balance,
    • advanced events assertion.

    Code

    Our module has a pretty complex storage layout in comparison to the previous example.

    We need to store the following data:

    1. Immutable metadata - name, symbol and decimals.
    2. Total supply.
    3. Users' balances.
    4. Allowances - in other words: who is allowed to spend whose tokens on his/her behalf.

    Module definition

    #[odra::module(events = [Transfer, Approval])]
    pub struct Erc20 {
    decimals: Variable<u8>,
    symbol: Variable<String>,
    name: Variable<String>,
    total_supply: Variable<Balance>,
    balances: Mapping<Address, Balance>,
    allowances: Mapping<Address, Mapping<Address, Balance>>
    }
    • L6 - For the first time, we need to store key-value pairs. In order to do that, we use Mapping. The name is taken after Solidity's native type mapping. You may notice the balances property maps Address to Balance. If you deal with addresses or you operate on tokens, you should always choose Address over String and Balance over any numeric type. Each blockchain may handle these values differently. Using Odra types guarantees proper behavior on each target platform.
    • L7 - Odra allows nested Mappings, what we utilize to store allowances.

    Metadata

    #[odra::module]
    impl Erc20 {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let caller = contract_env::caller();
    self.name.set(name);
    self.symbol.set(symbol);
    self.decimals.set(decimals);
    self.mint(&caller, initial_supply);
    }

    pub fn name(&self) -> String {
    self.name.get_or_default()
    }

    pub fn symbol(&self) -> String {
    self.symbol.get_or_default()
    }

    pub fn decimals(&self) -> u8 {
    self.decimals.get_or_default()
    }

    pub fn total_supply(&self) -> Balance {
    self.total_supply.get_or_default()
    }
    }

    impl Erc20 {
    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.balances.add(address, *amount);
    self.total_supply.add(amount);
    Transfer {
    from: None,
    to: Some(*address),
    amount: *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Transfer {
    pub from: Option<Address>,
    pub to: Option<Address>,
    pub amount: Balance
    }
    • L1 - The first impl block, marked as a module, contains functions defined in the ERC-20 standard.
    • L3-L10 - A constructor sets the token metadata and mints the initial supply.
    • L12-L14 - Getter functions are straightforward, but there is one worth-mentioning subtleness. In the Ownable example, we used the get() function returning an Option<T>. If the type implements Default trait, you can call get_or_default() function and the contract does not fail even if the value is not initialized.
    • L29 - The second impl is not an odra module, in other words these function will not be a part of contract's ABI.
    • L30-L39 - Mint function is public, so like in a regular rust code will be accessible from the outside. mint() use notation self.balances.add(&address, amount);, which it is syntactic sugar for:
    let current_balance = self.balances.get(&address).unwrap_or_default();
    let new_balance = current_balance.overflowing_add(current_balance).unwrap_or_revert();
    self.balances.set(&address, new_balance);

    Core

    For the sake of completeness, let's implement the remaining functionalities like transfer, transfer_from, or approve. They are not introducing any new concepts, so we leave them without additional remarks.

    erc20.rs
    #[odra::module]
    impl Erc20 {
    ...
    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    let caller = contract_env::caller();
    self.raw_transfer(&caller, recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let spender = contract_env::caller();
    self.spend_allowance(owner, &spender, amount);
    self.raw_transfer(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    let owner = contract_env::caller();
    self.allowances.get_instance(&owner).set(spender, *amount);
    Approval {
    owner,
    spender: *spender,
    value: *amount
    }
    .emit();
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.balances.get_or_default(&address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.allowances.get_instance(owner).get_or_default(spender)
    }
    }

    impl Erc20 {
    ...

    fn raw_transfer(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    let owner_balance = self.balances.get_or_default(&owner);
    if *amount > owner_balance {
    contract_env::revert(Error::InsufficientBalance)
    }
    self.balances.set(owner, owner_balance - *amount);
    self.balances.add(recipient, *amount);
    Transfer {
    from: Some(*owner),
    to: Some(*recipient),
    amount: *amount
    }
    .emit();
    }

    fn spend_allowance(&mut self, owner: &Address, spender: &Address, amount: &Balance) {
    let allowance = self.allowances.get_instance(owner).get_or_default(spender);
    if allowance < *amount {
    contract_env::revert(Error::InsufficientAllowance)
    }
    let new_allowance = allowance - *amount;
    self.allowances
    .get_instance(owner)
    .set(spender, new_allowance);
    Approval {
    owner: *owner,
    spender: *spender,
    value: allowance - *amount
    }
    .emit();
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Approval {
    pub owner: Address,
    pub spender: Address,
    pub value: U256
    }

    execution_error! {
    pub enum Error {
    InsufficientBalance => 1,
    InsufficientAllowance => 2,
    }
    }

    Now, compare the code we have written, with Open Zeppelin code. Out of 10, how Solidity-ish is our implementation?

    Test

    erc20.rs
    #[cfg(test)]
    pub mod tests {
    use super::{Approval, Erc20Deployer, Erc20Ref, Error, Transfer};
    use odra::{assert_events, test_env, types::U256};

    pub const NAME: &str = "Plascoin";
    pub const SYMBOL: &str = "PLS";
    pub const DECIMALS: u8 = 10;
    pub const INITIAL_SUPPLY: u32 = 10_000;

    pub fn setup() -> Erc20Ref {
    Erc20Deployer::init(
    String::from(NAME),
    String::from(SYMBOL),
    DECIMALS,
    INITIAL_SUPPLY.into()
    )
    }

    #[test]
    fn initialization() {
    let erc20 = setup();

    assert_eq!(&erc20.symbol(), SYMBOL);
    assert_eq!(&erc20.name(), NAME);
    assert_eq!(erc20.decimals(), DECIMALS);
    assert_eq!(erc20.total_supply(), INITIAL_SUPPLY.into());
    assert_events!(
    erc20,
    Transfer {
    from: None,
    to: Some(test_env::get_account(0)),
    amount: INITIAL_SUPPLY.into()
    }
    );
    }

    #[test]
    fn transfer_works() {
    let mut erc20 = setup();
    let (sender, recipient) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    erc20.transfer(&recipient, &amount);

    assert_eq!(
    erc20.balance_of(&sender),
    U256::from(INITIAL_SUPPLY) - amount
    );
    assert_eq!(erc20.balance_of(&recipient), amount);
    assert_events!(
    erc20,
    Transfer {
    from: Some(sender),
    to: Some(recipient),
    amount
    }
    );
    }

    #[test]
    fn transfer_error() {
    let mut erc20 = setup();
    let recipient = test_env::get_account(1);
    let amount = U256::from(INITIAL_SUPPLY) + U256::from(1);

    test_env::assert_exception(Error::InsufficientBalance, || {
    erc20.transfer(&recipient, &amount)
    });
    }

    #[test]
    fn transfer_from_and_approval_work() {
    let mut erc20 = setup();
    let (owner, recipient, spender) = (
    test_env::get_account(0),
    test_env::get_account(1),
    test_env::get_account(2)
    );
    let approved_amount = 3_000.into();
    let transfer_amount = 1_000.into();

    // Owner approves Spender.
    erc20.approve(&spender, &approved_amount);

    // Allowance was recorded.
    assert_eq!(erc20.allowance(&owner, &spender), approved_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount
    }
    );

    // Spender transfers tokens from Owner to Recipient.
    test_env::set_caller(spender);
    erc20.transfer_from(&owner, &recipient, &transfer_amount);

    // Tokens are transferred and allowance decremented.
    assert_eq!(
    erc20.balance_of(&owner),
    U256::from(INITIAL_SUPPLY) - transfer_amount
    );
    assert_eq!(erc20.balance_of(&recipient), transfer_amount);
    assert_events!(
    erc20,
    Approval {
    owner,
    spender,
    value: approved_amount - transfer_amount
    },
    Transfer {
    from: Some(owner),
    to: Some(recipient),
    amount: transfer_amount
    }
    );

    assert_events!(erc20, Approval, Transfer);
    }

    #[test]
    fn transfer_from_error() {
    let mut erc20 = setup();
    let (owner, spender) = (test_env::get_account(0), test_env::get_account(1));
    let amount = 1_000.into();

    test_env::set_caller(spender);
    test_env::assert_exception(Error::InsufficientAllowance, || {
    erc20.transfer_from(&owner, &spender, &amount)
    });
    }
    }
    • L111-123 - assert_events!() macro accepts multiple events. You must pass them in the order they were emitted.
    • L125 - Alternatively, if you don't want to check the entire event, you may assert only its type.
    danger

    You can not mix both approaches, you pass full events or types only.

    What's next

    Having two modules: Ownable and Erc20, let's combine them, and create an ERC-20 on steroids.

    + + + + \ No newline at end of file diff --git a/docs/docs/tutorials/ownable/index.html b/docs/docs/tutorials/ownable/index.html new file mode 100644 index 000000000..da54b1411 --- /dev/null +++ b/docs/docs/tutorials/ownable/index.html @@ -0,0 +1,17 @@ + + + + + +Ownable | Odra + + + + + +
    +
    Version: 0.7.0

    Ownable

    In this tutorial, we will write a simple module that allows us to set its owner. Later, it can be reused to limit access to the contract's critical features.

    Framework features

    A module we will write in a minute, will help you master a few Odra features:

    • storing a single value,
    • defining constructors,
    • error handling,
    • defining and emitting events.
    • registering a contact in a test environment,
    • interactions with the test environment,
    • assertions (value, events, errors assertions).

    Code

    Before we write any code, we define functionalities we would like to implement.

    1. Module has an initializer that should be called once.
    2. Only the current owner can set a new owner.
    3. Read the current owner.
    4. A function that fails if called by a non-owner account.

    Define a module

    use odra::{types::Address, Variable};

    #[odra::module]
    pub struct Ownable {
    owner: Variable<Address>
    }

    That was easy, but it is crucial to understand the basic before we move on.

    • L3 - Firstly, we need create a struct called Ownable and apply #[odra::module] to it above.
    • L5 - Then we can define a layout of our module. That is extremely simple - just a single state value. What is most important you can never leave a raw type, you must always wrap it with Variable.

    Init the module

    use odra::{
    execution_error, contract_env, Event, types::{Address, event::OdraEvent}
    };
    ...

    #[odra::module]
    impl Ownable {
    #[odra(init)]
    pub fn init(&mut self, owner: &Address) {
    if self.owner.get().is_some() {
    contract_env::revert(Error::OwnerIsAlreadyInitialized)
    }

    self.owner.set(*owner);

    OwnershipChanged {
    prev_owner: None,
    new_owner: *owner
    }
    .emit();
    }
    }

    execution_error! {
    pub enum Error {
    OwnerIsNotInitialized => 1,
    }
    }

    #[derive(Event, Debug, PartialEq, Eq)]
    pub struct OwnershipChanged {
    pub prev_owner: Option<Address>,
    pub new_owner: Address
    }

    Ok, we have done a couple of things, let's analyze them one by one:

    • L5 - The impl should be an odra module, so add #[odra::module].
    • L7 - The init function is marked as #[odra(init)] making it a constructor. It matters if we would like to deploy the Ownable module as a standalone contract.
    • L23 - Before we set a new owner, we must assert there was no owner before and raise an error otherwise. For that purpose we defined an Error enum. Notice that the Error enum is defined inside the execution_error macro. It generates, among others, the required Into<ExecutionError> binding.
    • L9-L11 - If the owner has been set already, we call contract_env::revert() function. As an argument we pass Error::OwnerIsNotInitialized.
    • L13 - Then we write the owner passed as an argument to the storage. To do so we call the set() on Variable.
    • L29-L33 - Once the owner is set, we would like to inform the outside world. First step is to define an event struct. The struct must derive from odra::Event. We highly recommend to derive Debug, PartialEq and Eq for testing purpose.
    • L23 - Finally, we create the OwnershipChanged struct and call emit() function on it (import odra::types::event::OdraEvent trait). Hence we set the first owner, we set the prev_owner value to None.

    Features implementation

    #[odra::module]
    impl Ownable {
    ...

    pub fn ensure_ownership(&self, address: &Address) {
    if Some(address) != self.owner.get().as_ref() {
    contract_env::revert(Error::NotOwner)
    }
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ensure_ownership(&contract_env::caller());
    let current_owner = self.get_owner();
    self.owner.set(*new_owner);
    OwnershipChanged {
    prev_owner: Some(current_owner),
    new_owner: *new_owner
    }
    .emit();
    }

    pub fn get_owner(&self) -> Address {
    match self.owner.get() {
    Some(owner) => owner,
    None => contract_env::revert(Error::OwnerIsNotInitialized)
    }
    }
    }

    execution_error! {
    pub enum Error {
    NotOwner => 1,
    OwnerIsAlreadyInitialized => 2,
    OwnerIsNotInitialized => 3,
    }
    }

    The above implementation relies on the concepts we have already used in this tutorial, so it should easy for you to get along.

    • L5,L32 - ensure_ownership() is reads the current owner, and reverts if is does not match the input Address. Also we need to update our Error enum adding a new variant NotOwner.
    • L11 - The function defined above can be reused in change_ownership() implementation. We pass to it the current caller, using the contract_env::caller() function. The we update the state, and emit OwnershipChanged.
    • L22,L34 - Lastly, a getter function. As the Variable get() function returns an Option, we need to handle a possible error. If someone call the getter on uninitialized module, it should revert with a new Error variant OwnerIsNotInitialized.

    Test

    #[cfg(test)]
    mod tests {
    use super::*;
    use odra::{assert_events, test_env};

    fn setup() -> (Address, OwnableRef) {
    let owner = test_env::get_account(0);
    let ownable = OwnableDeployer::init(owner);
    (owner, ownable)
    }

    #[test]
    fn initialization_works() {
    let (owner, ownable) = setup();
    assert_eq!(ownable.get_owner(), owner);

    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: None,
    new_owner: owner
    }
    );
    }

    #[test]
    fn owner_can_change_ownership() {
    let (owner, mut ownable) = setup();
    let new_owner = test_env::get_account(1);

    test_env::set_caller(owner);
    ownable.change_ownership(&new_owner);
    assert_eq!(ownable.get_owner(), new_owner);
    assert_events!(
    ownable,
    OwnershipChanged {
    prev_owner: Some(owner),
    new_owner
    }
    );
    }

    #[test]
    fn non_owner_cannot_change_ownership() {
    let (_, mut ownable) = setup();
    let new_owner = test_env::get_account(1);
    ownable.change_ownership(&new_owner);

    test_env::assert_exception(Error::NotOwner, || {
    ownable.change_ownership(&new_owner);
    });
    }
    }
    • L6 - Each test case starts with the same initialization process, so for convenience, we defined the setup() function we call as the first statement in each test. Take a look at the signature fn setup() -> (Address, OwnableRef). OwnableRef is a contract reference generated by Odra. This reference allows us call all the defined entrypoints namely: ensure_ownership(), change_ownership(), get_owner(), but not init() which is a constructor.
    • L7 - Now, the module needs an owner, the easiest way is to take one from the test_env. We choose the address of first account (which is the default one).
    • L8 - Odra created for us OwnableDeployer struct which implements all constructor functions. In this case there is just one function - init() which corresponds the function we have implemented in the module.
    • L12 - It is time to define the first test. As you see, it is a regular rust test.
    • L14-15 - Using the setup() function we get the owner, and a reference. We make a standard assertion comparing the owner we know, with the value returned from the contract.
      note

      You may have noticed, we use here the term module interchangeably with contract. The reason is once we deploy our module onto a virtual blockchain it may be considered a contract.

    • L17-23 - On the contract, only the init() function has been called, so we expect one event has been emitted. To assert that, let's use Odra's macro assert_events. As the first argument, pass the contract you want to read events from, followed by as many events as you expect have occurred.
    • L30 - Because we know the initial owner is the 0-th account, we must select a different account. It could be any index from 1 to 19 - the test env predefines 20 accounts.
    • L32 - As mentioned, the default is the 0-th account, if you want to change the executor call the test_env::set_caller() function.
      note

      The caller switch applies only the next contract interaction, the second call will be done as the default account.

    • L49-55 - If a non-owner account tries to change ownership we expect it to fail. To capture the error, call test_env::assert_exception() with the error you expect and a failing block of code.

    Summary

    The Ownable module is ready, and we can test it against any defined backend. Theoretically it can be deployed as a standalone contract, but in upcoming tutorials you will see how to use it to compose a more complex contract.

    What's next

    In the next tutorial we will implement a ERC20 standard.

    + + + + \ No newline at end of file diff --git a/docs/docs/tutorials/owned-token/index.html b/docs/docs/tutorials/owned-token/index.html new file mode 100644 index 000000000..afffbc6b8 --- /dev/null +++ b/docs/docs/tutorials/owned-token/index.html @@ -0,0 +1,17 @@ + + + + + +OwnedToken | Odra + + + + + +
    +
    Version: 0.7.0

    OwnedToken

    This tutorial shows the great power of the modularization-focused design of the Odra Framework. We are going to use the modules we built in the last two tutorials to build a new one.

    Code

    What should our module be capable of?

    1. Conform the Erc20 interface.
    2. Allow minting tokens but only the module owner.
    3. The current owner should be able to designate a new owner.

    Module definition

    Let's define a module called OwnedToken that is a composition of Ownable and Erc20 modules.

    owned_token.rs
    use crate::{erc20::Erc20, ownable::Ownable};

    #[odra::module]
    pub struct OwnedToken {
    ownable: Ownable,
    erc20: Erc20
    }

    As you can see, we do not need any storage definition - we just take advantage of the already-defined modules!

    Delegation

    owned_token.rs
    use odra::types::{Address, Balance}

    ...

    #[odra::module]
    impl OwnedToken {
    #[odra(init)]
    pub fn init(&mut self, name: String, symbol: String, decimals: u8, initial_supply: &Balance) {
    let deployer = contract_env::caller();
    self.ownable.init(deployer);
    self.erc20.init(name, symbol, decimals, initial_supply);
    }

    pub fn name(&self) -> String {
    self.erc20.name()
    }

    pub fn symbol(&self) -> String {
    self.erc20.symbol()
    }

    pub fn decimals(&self) -> u8 {
    self.erc20.decimals()
    }

    pub fn total_supply(&self) -> Balance {
    self.erc20.total_supply()
    }

    pub fn balance_of(&self, address: &Address) -> Balance {
    self.erc20.balance_of(address)
    }

    pub fn allowance(&self, owner: &Address, spender: &Address) -> Balance {
    self.erc20.allowance(owner, spender)
    }

    pub fn transfer(&mut self, recipient: &Address, amount: &Balance) {
    self.erc20.transfer(recipient, amount);
    }

    pub fn transfer_from(&mut self, owner: &Address, recipient: &Address, amount: &Balance) {
    self.erc20.transfer_from(owner, recipient, amount);
    }

    pub fn approve(&mut self, spender: &Address, amount: &Balance) {
    self.erc20.approve(spender, amount);
    }

    pub fn get_owner(&self) -> Address {
    self.ownable.get_owner()
    }

    pub fn change_ownership(&mut self, new_owner: &Address) {
    self.ownable.change_ownership(new_owner);
    }

    pub fn mint(&mut self, address: &Address, amount: &Balance) {
    self.ownable.ensure_ownership(&contract_env::caller());
    self.erc20.mint(address, amount);
    }
    }

    Easy. However, there are a few worth mentioning subtleness:

    • L10-L11 - A constructor is a great place to init both modules at once.
    • L14-L16 - Most of the entrypoints do not need any modification, so we simply delegates them to the erc20 module.
    • L50-L52 - The same we do with the ownable module.
    • L58-L61 - Minting should not be unconditional, we need some control over it. First, using ownable we make sure the caller really is the owner.

    Summary

    The Odra Framework encourages a modularized design of your smart contracts. You can encapsulate features in smaller units and test them in isolation, ensuring your project is easy to maintain. Finally, unleash their full potential by combining modules. You do not need any magic bindings for that.

    + + + + \ No newline at end of file diff --git a/docs/docs/tutorials/pauseable/index.html b/docs/docs/tutorials/pauseable/index.html new file mode 100644 index 000000000..cd3349d5c --- /dev/null +++ b/docs/docs/tutorials/pauseable/index.html @@ -0,0 +1,17 @@ + + + + + +Pauseable | Odra + + + + + +
    +
    Version: 0.7.0

    Pauseable

    The Pauseable module is like your smart contract's safety switch. It lets authorized users temporarily pause certain features if needed. It's a great way to boost security, but it's not meant to be used on its own. Think of it as an extra tool in your access control toolbox, giving you more control to manage your smart contract safely and efficiently.

    Code

    As always, we will start with defining functionalities of our module.

    1. Check the state - is it paused or not.
    2. State guards - a contract should stop execution if is in a state we don't expect.
    3. Switch the state.

    Events and Error

    There just two errors that may occur: PausedRequired, UnpausedRequired. We define them in a standard Odra way.

    Events definition is highly uncomplicated: Paused and Unpaused events holds only the address of the pauser.

    use odra::{Event, types::Address};

    odra::execution_error! {
    pub enum Error {
    PausedRequired => 1_000,
    UnpausedRequired => 1_001,
    }
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Paused {
    pub account: Address
    }

    #[derive(Event, PartialEq, Eq, Debug)]
    pub struct Unpaused {
    pub account: Address
    }

    Module definition

    The module storage is extremely simple - has a single Variable of type bool, that indicates if a contract is paused.

    #[odra::module]
    pub struct Pauseable {
    is_paused: Variable<bool>
    }

    Checks and guards

    Now, let's move to state checks and guards.

    pauseable.rs
    impl Pauseable {
    pub fn is_paused(&self) -> bool {
    self.is_paused.get_or_default()
    }

    pub fn require_not_paused(&self) {
    if self.is_paused() {
    contract_env::revert(Error::UnpausedRequired);
    }
    }

    pub fn require_paused(&self) {
    if !self.is_paused() {
    contract_env::revert(Error::PausedRequired);
    }
    }
    }
    • L1 - as mentioned in the intro, the module is not intended to be a standalone contract, so the only impl block is not annotated with odra::module and hence does not expose any entrypoint.
    • L2 - is_paused() checks the contract state, if the Variable is_paused has not been initialized, the default value (false) is returned.
    • L6 - to guarantee the code is executed when the contract is not paused, require_not_paused() function reads the state and reverts if the contract is paused.
    • L12 - require_paused() is a mirror function - stops the contract execution if the contract is not paused.

    Actions

    Finally, we will add the ability to switch the module state.

    impl Pauseable {
    pub fn pause(&mut self) {
    self.require_not_paused();
    self.is_paused.set(true);

    Paused {
    account: contract_env::caller()
    }
    .emit();
    }

    pub fn unpause(&mut self) {
    self.require_paused();
    self.is_paused.set(false);

    Unpaused {
    account: contract_env::caller()
    }
    .emit();
    }
    }

    pause() and unpause() functions do three things: ensure the contract is the right state (unpaused for pause(), not paused for unpause()), updates the state, and finally emits events (Paused/Unpaused).

    Pauseable counter

    In the end, let's use the module in a contract. For this purpose, we will implement a mock contract called PauseableCounter. The contract consists of a Variable value and a Pauseable module. The counter can only be incremented if the contract is in a normal state (is not paused).

    use odra::Variable;
    use odra_modules::security::Pauseable;

    #[odra::module]
    pub struct PauseableCounter {
    value: Variable<u32>,
    pauseable: Pauseable
    }

    #[odra::module]
    impl PauseableCounter {
    pub fn increment(&mut self) {
    self.pauseable.require_not_paused();

    let new_value = self.value.get_or_default() + 1;
    self.value.set(new_value);
    }

    pub fn pause(&mut self) {
    self.pauseable.pause();
    }

    pub fn unpause(&mut self) {
    self.pauseable.unpause();
    }

    pub fn get_value(&self) -> u32 {
    self.value.get_or_default()
    }
    }

    #[cfg(test)]
    mod test {
    use super::PauseableCounterDeployer;
    use odra_modules::security::errors::Error;

    #[test]
    fn increment_only_if_unpaused() {
    let mut contract = PauseableCounterDeployer::default();
    assert_eq!(contract.get_value(), 0);

    contract.increment();
    assert_eq!(contract.get_value(), 1);

    contract.pause();
    odra::test_env::assert_exception(
    Error::UnpausedRequired,
    || contract.increment()
    );
    assert_eq!(contract.get_value(), 1);

    contract.unpause();
    contract.increment();
    assert_eq!(contract.get_value(), 2);

    }
    }

    As we see in the test, in a simple way, using a single function call we can turn off the counter for a while and freeze the counter. Any time we want we can turn it back on. Easy!

    + + + + \ No newline at end of file diff --git a/docs/iAWriterMonoS-Regular.ttf b/docs/iAWriterMonoS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1308a4c30d2a5da6518e15bfafe1ff015bea0ccc GIT binary patch literal 97044 zcmbS!31D1R)&ITsy_w0LOeT|knJs&oeP7yXnxsv$G)>Z#wn@4|H%cj6K?G!9gbxAP zRNN2|u(DLBf~bg!D7bup>qq%eQPfYgDj=Euf9KryW+rJ_{5PFDGiUC*@7{CIJ^Q^+ zNFhWf3RC#{CI*+{n-uc=6uc)a?du;{^`X_x0M+32nWbYZCYr9;ktl?EUI@qN(uq~Q zV@>y;iK;#!5?8O7sB63~Jic8B_qn)!ddr@feOER;@mYL-33ckXoPEHTc6sn6A$LvV z_XoD`+p*`9t=T^la(9LhY2F<(XYK<$1HZ4ud%}+0=WTcUzqd_@`~)HM&pmb9%+~bw z-9Htw`6B$@dMW^pXU%>1{wThOPTh0h+;x9_F%RE=B}8id?$fu-q+Rj!S|NKe9_QVA zX3pK`{6fZ=LN0q4^?iG1_H4T--^c$ zE)eoy1?nFKW`rQj&_5-X;FSefwkSsF69JSV{7F$JT2Qu$g($;fG0G)k2<3=agL0j~ z9mJG42jzMAlj3}F3Cc^wWhk%2pA=V%J5hd8dh$&)3N7P~ISKLwSe%1jd`bQq<;xOSl&{J^qkKcYf%5P27|MUjf1!L!zAdD}A4*f1C|xQM zWw8Q=l}`b;s!Ua(tWixU!wPe!o>k8ZX&6SfFfcDPM@gbr927?1!0@EV+H&6h-NLtf z=D=Q211iVAO;)r+>zdkIU#^1AC=V2~?B3=@|!BzHkuLAl<#sS7bYa3-3mssog?B%k7O5B|w zy<9SPkd^$ofXf~(>$uG4vV}{mA6&JBOIk5fmT`Fwm(OxpLZx~|5iO?xb2M{>z+oXU zSRrafv*^U?35x+SZ1+`l@-+!uGM44l{8_ht1%D1uDgVjkTMW5VJ;?WX0PPBy`yalF z|HJz6?bEgY*{c)0;7ajPag(@R+$HW7_u=~`;z9g9%Ae?){(C|^75!|(o)OQB7sRi` zE8q}+5y$ZR^Wts1@P|d^lqui`ui%d%49x{Tuu8$uu-;G}0q$zJyo$?mE|+oX<+6dx zRxTU4?4VM7hCerRS;b`mwTafK?BKGN%StN6)m&$oAy;x)$7K(f`CQI$S;b`umz(5P zTx-)y2G&#tI55!+_5M}dDL|!a* zCcvB5i)pb3T=@cV5$54KaWiJ&)0l@Zh%bwWu&RCtKKvr{-oJ}u(ge3nm1)u|1F}K3 zfTJ#!gK|=?lI!Iua*N!FUP*8!3A$F03yaa>L%5!}uxT>30 z4_-;)7WL#De%j6abSrZ-;-~4TWeBH8#LT2)Eqg^SdS5L3kcZ`>Dy|;2?m~;Hm^Tk* zE)Vlig4rv@+N_SNr-VZ!h-8r_+>o+4;FLweCxXCXCHVM)nVH=OWCoYHT>7?b*|Sep za9Ph~`_{du?~!3H2e=&GzJF$m9OrT^mz(yUwP(NF%H>Wj_np3f>t1;_mltq($(eMo zE4lnAmp7ex+TQK*b}sMY^6oRwtZ$I_arq#ZkD_dpPjLAZm(QSVlFxJb0++u+*(_h- z@-;61g0e*(34}) zpxKQt9Sn&toeYUDnd|aAX{jkOkJL_l2@Mett2FM#=Vaq^Tz-;E=mR3fAg+^QJj3OW zP^KE+s0G$%nL^UEZL*kvXtrdG6KjgN}eVw2b| z_KLG1B`*h$y#*T9-H@Dz(GFTM9%c+l(~{g+|1@%kcpH4P80!X-o9f9vJ$^Z$zboiH z1XmAO@Ap~nG;)I9Gw=J$*7sMecknB&_q(~@%`_p+dh{s;BUp=jCTU)0^ay1*j4qT; zqZ?%+bP8ppqNl_cbFuD1Mwsg?I1?Jn zZ)Bltlp8R<0JudX_+PJBF2=!)H;bLnRt`dvT`g`Dx2v7PP^W>r@8b7%wTIt3)am@* zsm|p0E_D{acdN7cy+=VG#B~e#`YWyLuT=W_E0wspTqAx45#}OobFF>+z+c2*Q@d?;^6&!oBuxR&appc<)e1a;B0 zDtynEJLN99Tkes2<>_*V+$YbF`{kMPfIL;6CC`@U$aCds@;rGE_QD17L#jbFLLbM% zKs(#T$M6Z#R)x7mP>pH@AID_l)3{iMJB$nee|85*rw_}E4oMx{|@R2wzM0;ATbGx{Kf2aKi0GGowKZVVa2#)vU$tT4tPn_-tga{0hh z>cLaGL8Z&US0-6&AkLy#j+$zb3aeFW2z^|whEc9jBPiFZQIzY{3Y6>B7|K)BN|YOb z5v4Y&36z`EBy@suqrqszd&sCa%Fyb)SS66;h8sQ3c(4AkK9OJ~VJc%%oOBS_QTThE zN`tIc2^~ahA88QX8Ac{}G3g+%8fhX?mg0A>rG=1$F2jgzZE1L(zH}C>7F!#+!qS^Q zA!3>nq>qsXzN7UVy1Nn&!Oj3&wUSnkmDUaZMRe1GRYv#6Cww=cFMS_he+~OFNBLC% z{0+4*lK<1SB={iK3fE$2j_d-gkgq7>D~i!(3uaA$4t2dh;c8v4fa?`oiIHRE z2%nK>y% z8%7rJZZeJ?=((ZR${R?>QCBPSb`0rvxk+?OvZ3&k{&$y9r;iEW`PNslYG}=<2n*l8 z!K;slWQ{4M2ebk{)-#w=Ck^{B9-`;{91@woceobZT@@x5Bb09|C;|P|I+~#a0b!? znSuO3aiBV|EHE9|R{Bi2r+m2D{rd0!t)PF>nCl@m?h>Ep(cC4!EZ2`xxySbv-^0E~=Z$8}KjB~HKgEB8|BL=Z{=@zwaiej^jb^Jg znly|?(rA=5`H?pztV#VZ@=W9g`!jqPk>l?i|JU)q9{)?^fDp4E#_N8(zJk|7v0C## z9oq^w)@wq%g8KCDm36Ot?v<^tlpg&*{C)Ek=POCCklw`qj{f85Z;$>Fe=i)p`{<7e zbTt1ctp1~|M;ned;Z=FG;^pUF{_e})5aQ*-FW>j_T`ynw^0W}YF8$@NfBE?rU(6YH zUJAM+{oyr8kh7@;@Ut?|QX_wE#(HWudX44u&HhKSo!r)<0<25<7MNI#-EIT zV%AJE*DN+`Oz;eT_2T_+=0DB1?H1zS%|GIoH|PIm{?+^&)iVDYUsr#Qhnc|CoPSbX zq&}stQ1_^xs=uqduwt)Km#eR-3)Btje8|@isSDM&)Hl>O)g|h0;05nxW7^!3Y|JR1 zR3BAWsq5AE)lEh*I91HrBunn^;3+YC)3)Qt;*8px>RR=-x(=)N)9PY%w>qqjsDG<} z7=`Me@(Oi_`kwkP^)JJx-csLDGitMuqkf`}sY{J~H7&1Hcd9*Vr`oGN0$F1~cIUFT znFs5viEX%gF$h0qKm0L4crSN}8L(CEGfuKi8; zF3BVDD*R8sg#Ywy@elDY@uv70Jd!?{Epug!ELKm*D!Ekl%0AgIH^@40z%2MZP4Nh% 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 wD3QSbHCJrGhQ5_nH?{>{SYWMKcACCvH$=8 literal 0 HcmV?d00001 diff --git a/docs/img/docusaurus.png b/docs/img/docusaurus.png new file mode 100644 index 0000000000000000000000000000000000000000..f458149e3c8f53335f28fbc162ae67f55575c881 GIT binary patch literal 5142 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 F{0H{b<4^zq literal 0 HcmV?d00001 diff --git a/docs/img/favicon.ico b/docs/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f13ae05e9fa3f57a31ca54bff45c67205e07ca6c GIT binary patch literal 4286 zcmb_gTTfh76yBx}^;&!>-Vy;@0Rw5Nu?@8iV1c%BhfoFzAu7dIv7kje4Vo%em^zqN zOz1#K9gDs2Xwua50d)#BCdLSjRU4oB4=@@pcQd9NQ4QGPJozA_DH1IB?FU;z*tzu9xgF}4C} zer)=Yfvqec3j6`cnO6$rLa0QhhRWp2(HaX=L#5VSWKXX4hrUrK(+`J9X1G25PUyc) z&J$hPGCjOqzCYb8KTPg4;`HlVWqVzOyz^e|%VF5M!^Gh=2hKcTF4CDH zv7_6JeAA{=f$>n~==lPTyeeRKjvDRzO28En2^`;g=2<-5J# zbM&>Rab41N(}y>AZS=)YKj?!Uhgopl?)Cxe4s)*w%hxK^~ zIr+iO921@w9W$;?$JuNA^u5|ed99ah>;VV4fW_RzbCmhw)*abbBHty*Ir=s6TKN(^ zw;lJpotx1c`)<{>Kbf;`IljN#@|awT)F+I^`JpOlDbF|Rn{4g{7uL+0xdLEKwa$l0 zR?ofLQzT!V@IDi>(Iz>(XOk}<>NaQVJz%XKe=G2SFFpDa0>{OXI?s4akJQV7w!}4o zb_N1gKJvbp*n)MHXrLPG1~5}w)lSqzjTzZHp+N$n&!!4@_}<7yjr%z{VzQ$Bo=vf7G!4-Wn_Zzx>g3^;AdaCz?$gha=!;k^W@5h@#{U>U6fSMZD;R|I|zH9 zzQVo(jQ5XQ@2QG4aq<3QtRZD?+H~GOHh(5!AU&1I>rk+5y?j2}uo(aM`$|*tp{L5a zd#;0T@&2`a2(kZYLXY5Hx9PpVW205~uAXg?nPc_BcaxlRE>OJKe+-h-3HC(rX_h?_ zdnKn{qG#sc*#0Mk_utfTjqI*9pLddja)bTHC^*w z#96byf1u}Gxk}sjGvYkl2Ax6RI`f6~fpx>=L(`T#Id!ny%8UMIHduYEonwDPe*m_Y z`{6XnK%co81$b9j-y?!`8N&Oc>&b^C+_6T^9V(VH2MYCf4A%9ZZJoFrGuih$$65uO z%|HbB4EPBkm*$J%nV&%>{Vu \ No newline at end of file diff --git a/docs/img/small_logo.png b/docs/img/small_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6820058ba3c0fa8e08462820e35176f681f35368 GIT binary patch literal 19846 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

    XPX%FXyy+I@HfVE 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 + Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/img/undraw_docusaurus_react.svg b/docs/img/undraw_docusaurus_react.svg new file mode 100644 index 000000000..94b5cf08f --- /dev/null +++ b/docs/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/img/undraw_docusaurus_tree.svg b/docs/img/undraw_docusaurus_tree.svg new file mode 100644 index 000000000..d9161d339 --- /dev/null +++ b/docs/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 000000000..ddeea1b64 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,308 @@ + + + + + + + Odra Project + + + + + + + + + + + + + +

    + + +
    +

    PROJECTS

    +
    +
    + +

    Odra Framework

    +
    +
    + High-level smart contract framework for Rust, which encourages rapid development and clean, pragmatic design. +
    +
    + +
    + +

    MVPR DAO

    +
    +
    + Reusable smart contracts for building DAOs on top of Casper. +
    +
    + +
    + +

    Awesome Zero Knowledge

    +
    +
    + Curated list of Zero Knowledge links, mostly focusing on blockchain. +
    +
    + +
    + +

    ZK Newsletter

    +
    +
    + Weekly summary of the most important things, which happened in Zero Knowledge world. +
    +
    +
    + +

    MISSION

    +
    +
    + We bring cutting-edge smart contract development tools to professionals with deadlines. +
    +
    +
    + Our code is free and open source. +
    +
    + +

    INFO

    +
    +
    + See our code on Github
    . +
    +
    + Read more on our Blog
    . +
    +
    + Follow us on Twitter
    . +
    +
    + Join our Discord
    . +
    +
    + Write us at contact@odra.dev. +
    +
    +
    +
    + + + + diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 000000000..ecb941ec2 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1 @@ +https://odra.dev/blogweekly0.5https://odra.dev/blog/2023-02-27-openai-writes-erc20-in-odraweekly0.5https://odra.dev/blog/archiveweekly0.5https://odra.dev/blog/casper-zk-risc0weekly0.5https://odra.dev/blog/evm-at-risc0weekly0.5https://odra.dev/blog/its-all-about-the-communityweekly0.5https://odra.dev/blog/Nysaweekly0.5https://odra.dev/blog/odra-cosmwasmweekly0.5https://odra.dev/blog/release-020weekly0.5https://odra.dev/docs/0.2.0/weekly0.5https://odra.dev/docs/0.2.0/backends/casperweekly0.5https://odra.dev/docs/0.2.0/backends/mock-vmweekly0.5https://odra.dev/docs/0.2.0/backends/what-is-a-backendweekly0.5https://odra.dev/docs/0.2.0/basics/cargo-odraweekly0.5https://odra.dev/docs/0.2.0/basics/communicating-with-hostweekly0.5https://odra.dev/docs/0.2.0/basics/cross-callsweekly0.5https://odra.dev/docs/0.2.0/basics/directory-structureweekly0.5https://odra.dev/docs/0.2.0/basics/errorsweekly0.5https://odra.dev/docs/0.2.0/basics/eventsweekly0.5https://odra.dev/docs/0.2.0/basics/flipper-internalsweekly0.5https://odra.dev/docs/0.2.0/basics/modulesweekly0.5https://odra.dev/docs/0.2.0/basics/native-tokenweekly0.5https://odra.dev/docs/0.2.0/basics/odra-tomlweekly0.5https://odra.dev/docs/0.2.0/basics/storage-interactionweekly0.5https://odra.dev/docs/0.2.0/basics/testingweekly0.5https://odra.dev/docs/0.2.0/category/backendsweekly0.5https://odra.dev/docs/0.2.0/category/basicsweekly0.5https://odra.dev/docs/0.2.0/category/examplesweekly0.5https://odra.dev/docs/0.2.0/category/getting-startedweekly0.5https://odra.dev/docs/0.2.0/category/tutorialsweekly0.5https://odra.dev/docs/0.2.0/examples/odra-examplesweekly0.5https://odra.dev/docs/0.2.0/examples/using-odra-modulesweekly0.5https://odra.dev/docs/0.2.0/getting-started/flipperweekly0.5https://odra.dev/docs/0.2.0/getting-started/installationweekly0.5https://odra.dev/docs/0.2.0/tutorials/erc20weekly0.5https://odra.dev/docs/0.2.0/tutorials/ownableweekly0.5https://odra.dev/docs/0.2.0/tutorials/owned-tokenweekly0.5https://odra.dev/docs/0.3.0/weekly0.5https://odra.dev/docs/0.3.0/advanced/advanced-storageweekly0.5https://odra.dev/docs/0.3.0/advanced/attributesweekly0.5https://odra.dev/docs/0.3.0/advanced/composerweekly0.5https://odra.dev/docs/0.3.0/advanced/delegateweekly0.5https://odra.dev/docs/0.3.0/backends/casperweekly0.5https://odra.dev/docs/0.3.0/backends/mock-vmweekly0.5https://odra.dev/docs/0.3.0/backends/what-is-a-backendweekly0.5https://odra.dev/docs/0.3.0/basics/cargo-odraweekly0.5https://odra.dev/docs/0.3.0/basics/communicating-with-hostweekly0.5https://odra.dev/docs/0.3.0/basics/cross-callsweekly0.5https://odra.dev/docs/0.3.0/basics/directory-structureweekly0.5https://odra.dev/docs/0.3.0/basics/errorsweekly0.5https://odra.dev/docs/0.3.0/basics/eventsweekly0.5https://odra.dev/docs/0.3.0/basics/flipper-internalsweekly0.5https://odra.dev/docs/0.3.0/basics/modulesweekly0.5https://odra.dev/docs/0.3.0/basics/native-tokenweekly0.5https://odra.dev/docs/0.3.0/basics/odra-tomlweekly0.5https://odra.dev/docs/0.3.0/basics/storage-interactionweekly0.5https://odra.dev/docs/0.3.0/basics/testingweekly0.5https://odra.dev/docs/0.3.0/category/advancedweekly0.5https://odra.dev/docs/0.3.0/category/backendsweekly0.5https://odra.dev/docs/0.3.0/category/basicsweekly0.5https://odra.dev/docs/0.3.0/category/examplesweekly0.5https://odra.dev/docs/0.3.0/category/getting-startedweekly0.5https://odra.dev/docs/0.3.0/category/tutorialsweekly0.5https://odra.dev/docs/0.3.0/examples/odra-examplesweekly0.5https://odra.dev/docs/0.3.0/examples/using-odra-modulesweekly0.5https://odra.dev/docs/0.3.0/getting-started/flipperweekly0.5https://odra.dev/docs/0.3.0/getting-started/installationweekly0.5https://odra.dev/docs/0.3.0/tutorials/erc20weekly0.5https://odra.dev/docs/0.3.0/tutorials/ownableweekly0.5https://odra.dev/docs/0.3.0/tutorials/owned-tokenweekly0.5https://odra.dev/docs/0.3.1/weekly0.5https://odra.dev/docs/0.3.1/advanced/advanced-storageweekly0.5https://odra.dev/docs/0.3.1/advanced/attributesweekly0.5https://odra.dev/docs/0.3.1/advanced/composerweekly0.5https://odra.dev/docs/0.3.1/advanced/delegateweekly0.5https://odra.dev/docs/0.3.1/backends/casperweekly0.5https://odra.dev/docs/0.3.1/backends/mock-vmweekly0.5https://odra.dev/docs/0.3.1/backends/what-is-a-backendweekly0.5https://odra.dev/docs/0.3.1/basics/cargo-odraweekly0.5https://odra.dev/docs/0.3.1/basics/communicating-with-hostweekly0.5https://odra.dev/docs/0.3.1/basics/cross-callsweekly0.5https://odra.dev/docs/0.3.1/basics/directory-structureweekly0.5https://odra.dev/docs/0.3.1/basics/errorsweekly0.5https://odra.dev/docs/0.3.1/basics/eventsweekly0.5https://odra.dev/docs/0.3.1/basics/flipper-internalsweekly0.5https://odra.dev/docs/0.3.1/basics/modulesweekly0.5https://odra.dev/docs/0.3.1/basics/native-tokenweekly0.5https://odra.dev/docs/0.3.1/basics/odra-tomlweekly0.5https://odra.dev/docs/0.3.1/basics/storage-interactionweekly0.5https://odra.dev/docs/0.3.1/basics/testingweekly0.5https://odra.dev/docs/0.3.1/category/advancedweekly0.5https://odra.dev/docs/0.3.1/category/backendsweekly0.5https://odra.dev/docs/0.3.1/category/basicsweekly0.5https://odra.dev/docs/0.3.1/category/examplesweekly0.5https://odra.dev/docs/0.3.1/category/getting-startedweekly0.5https://odra.dev/docs/0.3.1/category/tutorialsweekly0.5https://odra.dev/docs/0.3.1/examples/odra-examplesweekly0.5https://odra.dev/docs/0.3.1/examples/using-odra-modulesweekly0.5https://odra.dev/docs/0.3.1/getting-started/flipperweekly0.5https://odra.dev/docs/0.3.1/getting-started/installationweekly0.5https://odra.dev/docs/0.3.1/tutorials/erc20weekly0.5https://odra.dev/docs/0.3.1/tutorials/ownableweekly0.5https://odra.dev/docs/0.3.1/tutorials/owned-tokenweekly0.5https://odra.dev/docs/0.4.0/weekly0.5https://odra.dev/docs/0.4.0/advanced/advanced-storageweekly0.5https://odra.dev/docs/0.4.0/advanced/attributesweekly0.5https://odra.dev/docs/0.4.0/advanced/composerweekly0.5https://odra.dev/docs/0.4.0/advanced/delegateweekly0.5https://odra.dev/docs/0.4.0/backends/casperweekly0.5https://odra.dev/docs/0.4.0/backends/mock-vmweekly0.5https://odra.dev/docs/0.4.0/backends/what-is-a-backendweekly0.5https://odra.dev/docs/0.4.0/basics/cargo-odraweekly0.5https://odra.dev/docs/0.4.0/basics/communicating-with-hostweekly0.5https://odra.dev/docs/0.4.0/basics/cross-callsweekly0.5https://odra.dev/docs/0.4.0/basics/directory-structureweekly0.5https://odra.dev/docs/0.4.0/basics/errorsweekly0.5https://odra.dev/docs/0.4.0/basics/eventsweekly0.5https://odra.dev/docs/0.4.0/basics/flipper-internalsweekly0.5https://odra.dev/docs/0.4.0/basics/modulesweekly0.5https://odra.dev/docs/0.4.0/basics/native-tokenweekly0.5https://odra.dev/docs/0.4.0/basics/odra-tomlweekly0.5https://odra.dev/docs/0.4.0/basics/storage-interactionweekly0.5https://odra.dev/docs/0.4.0/basics/testingweekly0.5https://odra.dev/docs/0.4.0/category/advancedweekly0.5https://odra.dev/docs/0.4.0/category/backendsweekly0.5https://odra.dev/docs/0.4.0/category/basicsweekly0.5https://odra.dev/docs/0.4.0/category/examplesweekly0.5https://odra.dev/docs/0.4.0/category/getting-startedweekly0.5https://odra.dev/docs/0.4.0/category/tutorialsweekly0.5https://odra.dev/docs/0.4.0/examples/odra-examplesweekly0.5https://odra.dev/docs/0.4.0/examples/using-odra-modulesweekly0.5https://odra.dev/docs/0.4.0/getting-started/flipperweekly0.5https://odra.dev/docs/0.4.0/getting-started/installationweekly0.5https://odra.dev/docs/0.4.0/tutorials/erc20weekly0.5https://odra.dev/docs/0.4.0/tutorials/ownableweekly0.5https://odra.dev/docs/0.4.0/tutorials/owned-tokenweekly0.5https://odra.dev/docs/0.5.0/weekly0.5https://odra.dev/docs/0.5.0/advanced/advanced-storageweekly0.5https://odra.dev/docs/0.5.0/advanced/attributesweekly0.5https://odra.dev/docs/0.5.0/advanced/delegateweekly0.5https://odra.dev/docs/0.5.0/advanced/signaturesweekly0.5https://odra.dev/docs/0.5.0/advanced/usingweekly0.5https://odra.dev/docs/0.5.0/backends/casperweekly0.5https://odra.dev/docs/0.5.0/backends/mock-vmweekly0.5https://odra.dev/docs/0.5.0/backends/what-is-a-backendweekly0.5https://odra.dev/docs/0.5.0/basics/cargo-odraweekly0.5https://odra.dev/docs/0.5.0/basics/communicating-with-hostweekly0.5https://odra.dev/docs/0.5.0/basics/cross-callsweekly0.5https://odra.dev/docs/0.5.0/basics/directory-structureweekly0.5https://odra.dev/docs/0.5.0/basics/errorsweekly0.5https://odra.dev/docs/0.5.0/basics/eventsweekly0.5https://odra.dev/docs/0.5.0/basics/flipper-internalsweekly0.5https://odra.dev/docs/0.5.0/basics/modulesweekly0.5https://odra.dev/docs/0.5.0/basics/native-tokenweekly0.5https://odra.dev/docs/0.5.0/basics/odra-tomlweekly0.5https://odra.dev/docs/0.5.0/basics/storage-interactionweekly0.5https://odra.dev/docs/0.5.0/basics/testingweekly0.5https://odra.dev/docs/0.5.0/category/advancedweekly0.5https://odra.dev/docs/0.5.0/category/backendsweekly0.5https://odra.dev/docs/0.5.0/category/basicsweekly0.5https://odra.dev/docs/0.5.0/category/examplesweekly0.5https://odra.dev/docs/0.5.0/category/getting-startedweekly0.5https://odra.dev/docs/0.5.0/category/tutorialsweekly0.5https://odra.dev/docs/0.5.0/examples/odra-examplesweekly0.5https://odra.dev/docs/0.5.0/examples/using-odra-modulesweekly0.5https://odra.dev/docs/0.5.0/getting-started/flipperweekly0.5https://odra.dev/docs/0.5.0/getting-started/installationweekly0.5https://odra.dev/docs/0.5.0/tutorials/erc20weekly0.5https://odra.dev/docs/0.5.0/tutorials/ownableweekly0.5https://odra.dev/docs/0.5.0/tutorials/owned-tokenweekly0.5https://odra.dev/docs/0.6.0/weekly0.5https://odra.dev/docs/0.6.0/advanced/advanced-storageweekly0.5https://odra.dev/docs/0.6.0/advanced/attributesweekly0.5https://odra.dev/docs/0.6.0/advanced/delegateweekly0.5https://odra.dev/docs/0.6.0/advanced/signaturesweekly0.5https://odra.dev/docs/0.6.0/advanced/usingweekly0.5https://odra.dev/docs/0.6.0/backends/casperweekly0.5https://odra.dev/docs/0.6.0/backends/mock-vmweekly0.5https://odra.dev/docs/0.6.0/backends/what-is-a-backendweekly0.5https://odra.dev/docs/0.6.0/basics/cargo-odraweekly0.5https://odra.dev/docs/0.6.0/basics/communicating-with-hostweekly0.5https://odra.dev/docs/0.6.0/basics/cross-callsweekly0.5https://odra.dev/docs/0.6.0/basics/directory-structureweekly0.5https://odra.dev/docs/0.6.0/basics/errorsweekly0.5https://odra.dev/docs/0.6.0/basics/eventsweekly0.5https://odra.dev/docs/0.6.0/basics/flipper-internalsweekly0.5https://odra.dev/docs/0.6.0/basics/modulesweekly0.5https://odra.dev/docs/0.6.0/basics/native-tokenweekly0.5https://odra.dev/docs/0.6.0/basics/odra-tomlweekly0.5https://odra.dev/docs/0.6.0/basics/storage-interactionweekly0.5https://odra.dev/docs/0.6.0/basics/testingweekly0.5https://odra.dev/docs/0.6.0/category/advancedweekly0.5https://odra.dev/docs/0.6.0/category/backendsweekly0.5https://odra.dev/docs/0.6.0/category/basicsweekly0.5https://odra.dev/docs/0.6.0/category/examplesweekly0.5https://odra.dev/docs/0.6.0/category/getting-startedweekly0.5https://odra.dev/docs/0.6.0/category/tutorialsweekly0.5https://odra.dev/docs/0.6.0/examples/odra-examplesweekly0.5https://odra.dev/docs/0.6.0/examples/using-odra-modulesweekly0.5https://odra.dev/docs/0.6.0/getting-started/flipperweekly0.5https://odra.dev/docs/0.6.0/getting-started/installationweekly0.5https://odra.dev/docs/0.6.0/tutorials/erc20weekly0.5https://odra.dev/docs/0.6.0/tutorials/ownableweekly0.5https://odra.dev/docs/0.6.0/tutorials/owned-tokenweekly0.5https://odra.dev/docs/next/weekly0.5https://odra.dev/docs/next/advanced/advanced-storageweekly0.5https://odra.dev/docs/next/advanced/attributesweekly0.5https://odra.dev/docs/next/advanced/delegateweekly0.5https://odra.dev/docs/next/advanced/storage-layoutweekly0.5https://odra.dev/docs/next/backends/casperweekly0.5https://odra.dev/docs/next/backends/livenetweekly0.5https://odra.dev/docs/next/backends/odra-vmweekly0.5https://odra.dev/docs/next/backends/what-is-a-backendweekly0.5https://odra.dev/docs/next/basics/cargo-odraweekly0.5https://odra.dev/docs/next/basics/communicating-with-hostweekly0.5https://odra.dev/docs/next/basics/cross-callsweekly0.5https://odra.dev/docs/next/basics/directory-structureweekly0.5https://odra.dev/docs/next/basics/errorsweekly0.5https://odra.dev/docs/next/basics/eventsweekly0.5https://odra.dev/docs/next/basics/flipper-internalsweekly0.5https://odra.dev/docs/next/basics/modulesweekly0.5https://odra.dev/docs/next/basics/native-tokenweekly0.5https://odra.dev/docs/next/basics/odra-tomlweekly0.5https://odra.dev/docs/next/basics/storage-interactionweekly0.5https://odra.dev/docs/next/basics/testingweekly0.5https://odra.dev/docs/next/category/advancedweekly0.5https://odra.dev/docs/next/category/backendsweekly0.5https://odra.dev/docs/next/category/basicsweekly0.5https://odra.dev/docs/next/category/examplesweekly0.5https://odra.dev/docs/next/category/getting-startedweekly0.5https://odra.dev/docs/next/category/migrationsweekly0.5https://odra.dev/docs/next/category/tutorialsweekly0.5https://odra.dev/docs/next/examples/odra-examplesweekly0.5https://odra.dev/docs/next/examples/using-odra-modulesweekly0.5https://odra.dev/docs/next/getting-started/flipperweekly0.5https://odra.dev/docs/next/getting-started/installationweekly0.5https://odra.dev/docs/next/migrations/to-0.8.0weekly0.5https://odra.dev/docs/next/tutorials/access-controlweekly0.5https://odra.dev/docs/next/tutorials/erc20weekly0.5https://odra.dev/docs/next/tutorials/ownableweekly0.5https://odra.dev/docs/next/tutorials/owned-tokenweekly0.5https://odra.dev/docs/next/tutorials/pauseableweekly0.5https://odra.dev/docs/weekly0.5https://odra.dev/docs/advanced/advanced-storageweekly0.5https://odra.dev/docs/advanced/attributesweekly0.5https://odra.dev/docs/advanced/delegateweekly0.5https://odra.dev/docs/advanced/signaturesweekly0.5https://odra.dev/docs/advanced/usingweekly0.5https://odra.dev/docs/backends/casperweekly0.5https://odra.dev/docs/backends/mock-vmweekly0.5https://odra.dev/docs/backends/what-is-a-backendweekly0.5https://odra.dev/docs/basics/cargo-odraweekly0.5https://odra.dev/docs/basics/communicating-with-hostweekly0.5https://odra.dev/docs/basics/cross-callsweekly0.5https://odra.dev/docs/basics/directory-structureweekly0.5https://odra.dev/docs/basics/errorsweekly0.5https://odra.dev/docs/basics/eventsweekly0.5https://odra.dev/docs/basics/flipper-internalsweekly0.5https://odra.dev/docs/basics/modulesweekly0.5https://odra.dev/docs/basics/native-tokenweekly0.5https://odra.dev/docs/basics/odra-tomlweekly0.5https://odra.dev/docs/basics/storage-interactionweekly0.5https://odra.dev/docs/basics/testingweekly0.5https://odra.dev/docs/category/advancedweekly0.5https://odra.dev/docs/category/backendsweekly0.5https://odra.dev/docs/category/basicsweekly0.5https://odra.dev/docs/category/examplesweekly0.5https://odra.dev/docs/category/getting-startedweekly0.5https://odra.dev/docs/category/tutorialsweekly0.5https://odra.dev/docs/examples/odra-examplesweekly0.5https://odra.dev/docs/examples/using-odra-modulesweekly0.5https://odra.dev/docs/getting-started/flipperweekly0.5https://odra.dev/docs/getting-started/installationweekly0.5https://odra.dev/docs/tutorials/access-controlweekly0.5https://odra.dev/docs/tutorials/erc20weekly0.5https://odra.dev/docs/tutorials/ownableweekly0.5https://odra.dev/docs/tutorials/owned-tokenweekly0.5https://odra.dev/docs/tutorials/pauseableweekly0.5https://odra.dev/weekly0.5 \ No newline at end of file

    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

  • 20!`Tle7 zNS-2d5W)++ys^a0)=bHRzo1~DgbNU2=gm0hr1LKpJYWj1H%p-H0z2j0s7^Tfgy65h z22%{7zxWc1G1J(jv{Fki#WYh*N%D*?t?oG|R8jpoNSzkLqYZ+14j?bPRI5D4rHw!p zHB?e5Iu)N(-}#4^dt}{6oqqaxRjhgVX;uFwRegHEpM6YwC!YiV*=MAu@bTxL1Awi| zo&%i)7Rj>I@wVB0Tw3P=BO&0*yl%fewDMp z>#xT?d+oR9zI*S#2S0rA$0xsh!O>YqcJtR~zkT=Le>$Ep;nzN$5?Jt*owOPy>CuDi z$KR$>7pm3K&wy)!U8vNzwRW6i9tS+0v=$gS2}%wpjf3Fm?st|rxl1g0*$bWarxpJR z1cZ>vRNwvdC=4(Tc`xe^`(+JQNh)Z;S(p&_bnNHBc#X&tN*q6^t{ zkJXR_9ift$=$@E0$6auJOkDq-UZCJX5m{{`>98MRh*HA3cu`Z5Qeql06E?Ac>Hx4g zM-v4Squ=<8IGIaHKji2}ILZ+MbbNpu*YOX3nBhKnRO4m#fyj;2Lm$Nwog*PBI4hcO zky+f!I!;KIbWAc)VpItkA<)UDp)rxCj0_vY(vC2JN>-jRjc2Si$9-IqBqdad`u#X+2bfIc385UL==Tj|gTBM)MRAClyq0+A;@pQA^F{Np(k z8P+;eA`h6|CYU^P2SWec!K!9GQfCL47Ct|%hf`7a?39WEfrn5z zL{y9%)iORMn86Uz4p#YtAVvbINI68(dqA`-3~d!z&3cfDw#uRs!)OgRYE_+ubfjXr zDNb8v(m=x0an6LmIu3&;X%dE;Z%N5C5mGg`Y_pmNc~e>fr5FCG z^hhZ6D3U-xEaHuzSj9As@QWKv84~-3U{RS$(ptozBT=Qm2VQS`-z$-^R5-mPWv_eT z%a&%**S;~v@qUBMU;#VXzzFsyhyUT>F~j(Cl!a^vKN%P>Dt04w7RXyPsm+^&k$;NX zvs&^Dn05d78Fl5w2~I<$jzlY((TZMlqjCCZNK@L;lCG7dCyi-QX*$!Kjx?mt;pt9; zdeo*Sb*L+iYF3Ln)u(nfs_XLJa~#00Vrl1CdNd=56>-rteUD76Tc~r;LnXTgQKC(C zjyaC^y8@X?myE?^qQFF#o=Gl^B!=IR{KH)=ZJD^nGMsO>R3QA^fwd1p?wgpKb{GWq zD5=fNt(I56veHjJzT=U2ls6^p9;LYv)^F2*Dx&gUR|BIs@T>tG+?BbvgZ1s*E>*-x z;!cUWXGU$6XdK%qK^WU2(d}}F+i1zr=RmyO?voczZ-kXIp79*#MsYJLqMW&6r`Z-L zz`XymDY+~<=_e0foP!s$#PxE;k`81=1t%KW$7(>u5R-Uh*a*=sNtpf*rynKiD=D65 zkjsu8a4uL1rO=MT!jS#w48M?k*a7AV0imeF?&{c3(T?pK-=wPUch7r(2BRIe2oCU%tyqtwL(+9f0g$_S>5NCp%Qo2^q5s`x@3?Vc{N8IkdkJ)U57b*XT z!1}3+kceS;rlKMbUXu*fv!iu4gRk03s&s1@~bUBCi zyTDpuyMx*Y#hW+$)1jwg43dHXADW1bsh0|@4M<}M77Q#V1HJN+!44D^7K;?yKnNAY zC6ZF636uu|1doWpB~kGp0!$JjM8JJoz6)`8^9VR zFN!{d;67_=6ziitIorPMQ!MV|Id=iSp7OWhqC?uML*cT+JjBC2#H~B*Lp}UMKGZEh z97I96SwK;x)2`H=@IVT*b|kCEHA^@0k)>A`@Nv3igX~xu~8>rOs<+F3Aq!flwb+PvAePmDV6XEdMf`QqtK;?(J!D- zLWGz=b_BtV&<}gyC%2i()4;t(8nvca7mQK~T#6zBoV<-GAjrGQ`#O<_z=_veJhSYv zZY;gFtPHfAyLJ@IT|B<8Tt}5iN~B=QlyJ&>j7qx0ODlv7vSiEL(I!oL6NVU!o^!rN zVXO;ahi4Lq%wz{V;h+l;EH#7x&wQpf6eGrZEOQdS@mnU@n1@Gn$C(V4z|^r{62GgP zqm)wz+w`SaLNud5L8(~4Y%|Q_SjMCPzMF^(r=_HAMz^*?6vVph? z+(6EQ*nzBBJg%6ejF^>{cnRmU%doIc(R)jXpt8E4HuH4P8sYy=n=FZwAPbg|6_}6- zns5(uL<*o-&aeoL0aXg-tSOmzPU3uy_M}Sc3=8u7itcP3EqW%NTTQu03%VFcw3rAG zN(&SU!wxOTgftAq$Ue(zP1hWs&FBo;#JZT!jY;W^I_gA5632a^QPQx{)CijFB_3F%97m4_QwU0n;db&lFjaC6k*qoe{OP5fXtZ9pMoldD9?qJtAQ;;*%04 z84EEj5MPpxDH#eU#gZu95-RP}D`m{bKvOoIQ_*n~4kG`QgD@002~|bU-mvmW|cA*Gw<(6j64pF_AlyRHum=V1sSi!AQ`O!4wT6kEJcW$F&85x33F8zhK(7W znO174R)@G&p|MwPWv+HDm5sI4sF|9~JT!;3)l7JG~+O8=b4nkF|QJttw zqXd#sOraeXdLF37TCL!nWI?;j0G^_a986U|*(&?Vi{HQm#Nm~+sFc0dPoPzQHFk9blv39YJ=3X`Zxs`Nxb+G#+^K&vi8 z#iSWF&vOql9Ydijx;0dPSO$o+%0001ZhrHrj#=}1>JO>MmKnE<2@S2IQ z9Kgkd4knz&3U=WahT+E$m41j#i6IUF=9_=~MLwOW2LK~=u?)UMKX{bK7&hV~M&gaY zsRuv_qp-w*4U4WM;Shld5DQ_;7)+8_$^^v-Pdds3E88R%<1sE=@OS_Kgn;m54f!Pt z2=!O0Xq`M}Gw&dF5TPjX62IN3K++0$J9YBD2Fb{%gkOxUqv9QuD zXq6dZAr_L*Wk~AfQ3mEU1qg8 z+i14tYX;qE#^!D2=5F@pZwBXZ7Uyv$=W;gZb4KTMR_AqQ=XQ4IcZTP9mgjk<=X$p1 zd&cK{*5`fZ=YIC*e+KA)7UO^b03rDV0096104x9i0052y;sF2%{{SHf97wRB!Gj1B zDqP60p~Hs|BTAe|v7*I`7&B_z$g!ixk03*e97(dI$&)Bks$9vkrOTHvW6GRKv!>0P zICJXU$+M@=pFo2O9ZIyQ(W6L{DqYI7sne%Wqe`7hwW`&tShH%~%C)Q4uVBN99ZR;X z*|TWVs$I*rt=qS7(BTJsF z7~Q&clrs;G_s%Rk1RUY%OBa$e*U#uSqE2dBYPu3EFb`x0r8blj3QIuoFz|J3lIzY1 zKZj2vy}&5n7KvX5u6$PVlXRUy=)@ljuOY;dW$x z0!dm@a8O2x)|3_^#11d#?1QD65BNAGlvCbAVnOVj{{xyp?Q|v(f&W3Usz6i5b8D)+ zo;uQ^UlA&iu@(_a6|xX9%agJ-)n=8B`Vo&pA5?q|XBcJwPx7 z0S{#GK*N2Qs1+4&jbDZwa^d{|7|qVW;0Dt$}30BP<1sA%(mTI`wX-{ zd?VhVKJ5N8T&EDEJto^8@7**-o&OUuL2j3Pa!=BhC~lM2LXhpYwVg|;kpmgPqkXW` zj_vIq;%9C{^cF_pqIB!VLW@@WcY~L=_n>Kd(`6|P^yPL5Ks@Bh3X*sIEO#(QIAMSO@t&g zVY}#t0DJ6XAk}eUJ~|{Dby$ss{dhpr|AMFw4}$P;=WvkO*agE9K43X1Twx1y_8oTo zgCE!N;Xi;V#IT(s6850eKdy7ZEov}s6p11WU3j4pI#D+3prH+M_{Dncu!2hZVLgI4 z#14KCa|c13JtA>4f;3TvC6eO}y||A-7Lr%oGobY?W6DNJe(N1D|{<~gu=O=~7oo80_nGrhS@a)z^<;54U_N_dU~ zd=4Y}dWikvL0d z*(ZesQq|n@tRTF|Y(dbmj|Xs#pv4&oLIo1!Bn}yL2R5W~VkI>gVYeXi=*K>ZGn?eF zE5il}^O&Oy0W&l-{~u3guXbb_9AsYS%LIwlaM;Bn49P~#NhGs<@mG-QSTal6Bn^ws zfm$wi*dk~KvzP+u42=zdIylB)0CvIz1 zNN^DBXGh1^C#jRAVM}~27#}3BD&8HWd`*xS)2Fad@DYs7?>Xd2eNJ;;;}z!@vCIU!e0b2}R@-7M9^A5oR_g_IKHbR6U%*Ep2%jc^Y$MCDzZ_&XeKag0ae(;L4GabW&&k;fF( zfst%M^$^?r4u4Ph{N-`7uH6 z@kECKJhkl@WjiLZ1D68Pe;2?G zO`;wbunyt^DFXO^hed4t_dAHyZa4N5rs5CtkZunQw)WK zScniz_;!6J{`09if2=7fI)k5Ay(8B{E2s z^MmN{G9F|#%TaK*cMtQhi}L^_ydYh4VkZ*vF?xuCqL^KnL`eVeAzCs~_E3Xy^M+Hx z3uZ76^}vG%QGxgnMiVoQ)p(6kxIzb{PqtDWN@O!}g>n0E4>mMJzBe^rWDgI6N8V_S zwx^BUSYRKOGd@%*?AR~nCuq$`CeTiCcD z=zRl`bPf59OossCXa?jMkgz8w_n>-s=nfckMh2Ng4k1v|rHssIGX$B4HsJy9{}L~G zmXjqQFBYU5EZ_koVt=>MJ3Q%=+5(h9sflWbb`fY}qv#c=Xb>2e9E((5yl@X$gE1kJ zd|Np{TX`$RR8I$WA}I3@Ss9kYr7^UnAo&0?<*^Q3$uq7ryHE*a8@K7`zax?@1m@d^ReR(r?h-yTYE9$VAftf3K zSR!+|4|PdpDg+Ukxk3YBnS$9jgvm38NgRl|m7mF&`{0=Gm=L4snmFK_7#DB>>aY$12t3Cam0K~DBcVTu|KTiQkq-ZG zbs#~WSb77?0AUi-HjwceYHlC=a7G{817+4bODHZaNN%asS zCD>*HYM%j^lS|2+!!dpiS`}4BKPK@}^(hzy+7D!QU9 z+M+J{qA(hxGCHF)TBA04qd1zQI=Z7g+M{V<1aJ_SaWJHDU<3yNr2Bbe|g{#Y6LnE66`RfK#(OwTBHV%rE##OiggcmLJ&66oj7r(dsz}2GMQ}&A|jHa zHH9EiTBnKu1YJ6$Z%PsBFr-%sUg*U%*%= zGjk2O+A4il}%|D{9g|455O(!VsfUDrlOiv}zY{ z;H3wl4pdsCAEK+bY6N%+2Y>phw_2od)TN+G5Tsge$XXD@TBUKht8ieY4ly@iqcuDe zXL=JfAL2KY2{=phIfMf>2$m2@6Rw$}G1t*j8g;H`17mk&5RgK_v`Ch7BN6g3 z(m4>C^ABtDl7WLZ`k*$P^D#kVEBX3M{~EAmgRTp~Q3&=?aV8K8V~PlYdZ7oa{lbB@ z`muGyW1-3jv#IvT;BfyV|9gQL;putOK#E?b58u|7x;iWU?}wu`0AiFXTpu z6h}ByLmHJscEm%&rAK^pU4C>#3!z0^WGfOCWt5kWTeL@AMsk|8SG%u|MDT}z=Hw>eF{-f#)Q1=cBzfq zzG;!NxjLji0;ZlCrVucs5P+vwx~wUSBCw0PqkFS5yR4)tvOe;^1wmhtqG0&dVA=s) z;+J0kWtRa}Tm%-u{snq+=nrMuU$gaJ3VgihK(ES+5I+Wg61G7Dh9VxUUMbui5vL>C zyLv4=!3lvHO~YNTNLAqX5X+$U;lHV~EuX9kCAnr3IL_obeOZ)!Y4*IRCz#(Q0xys5Rk z5r&Hb;b$_JY9pv;!r>!zR!oY9bgs5RGF(=M|Ln$u%n%pzmP^)T6`K%(R>$jW#F)$$ zFk4beoDNKEzfT+o`-`idytxCh#YbAj0)ff`yvklGva<2TwP(IL$8bycaO>c7KWBb^ z_HsnGyYe}7zdR5FWP830bI*qm1VX}hY{C(w$Lxg}qv=Z?H_Xmgb&0Hg#Cgmyw-9tf zBo9DJ{Pqz3mOz7>5FVS!>KqnTnqBg1K|@-jj z0x^9B5q{WMetqm+%;$#Sdk}Q&R`!4}b@|W)t!3i7Nk!9Xn1jN7T*(j@#vNT8(b0Z7 zl71^koC_Th97VQ;yT@%9P>BM;8!KQO|C7$^eA8Tkr(wDd>YxK+8o84j2cX-;1X0g% zpaz$rxu81`DXRnPAf~P?%AQIPP5smYv8=4D(>ALRWLVI1IDB=;Tbp@=D)rI^@t6sb zgl<@GrF9)@Z4g~e5IT$_IzlJ-a#24R#19~YX&8qJ@c?H)n7`I1y^-MOhjJxg#Te3M zorMm8CSRrw*vL>06)ZTSf{^`HHjUGmjTJ3Rq!0qLE?c=!t1jX8L`imjO00Nxd!TBT5}t5y0TM2*j*Jgq`q+T}*2Z~z1( zvJSgy1QQP765iVUe6yjg5Ucr@@p_qqc{j6JHCJPspxKzg{gNr3n~8)*bP`uBzLg(7 z8~Ok>rWsm0lh^BDoNTrZ(K$NE`6Dwv#Vnhs%}&q*M`lzADmF|tKL z7rd5MP7qZ&91R`dV6GMdO%gi54zs1x4sH@63K{Gf=57w=V?GilyVNPM=8AEk^^l6o4nmcgW% z&ZDhC7M~Fsqfr{~bQP+ymH@hExbh`)v@&h8}q;UBd=5%{T}212J=se%3E}QcA@6&*Wctb%x07rQu_Q=2ORnyeN@7?} z!oJtusu-FOR`Sev;w1|zCIDL|2T?IW+)j{Mrg9RD<<{_eQWErD74~j^FJhBZ5%PV^ zd5WqR^%qOY#W8Uw@Uo=n7XQ&~2mg2p|D~j2DxFfbl8u5O+G%2_s$!WduKLnE&r}AF z5g)%S@ct)FA1EX*6((=;Zjo!m#%pF5JJH@to%k-i(dq?}F585jsLnDQpA4n24XP@cK1WlvQH`eeNna7F)2JLpp;W^;NR?n~yh&_xRl^ znUXJH13Nf|Z#Zz6IFvJajqf;n^WCK~IhAuc3S;^Jd$67ZPpprvuFn&xgMeqJSMl*W z(2io@aywsN{qHg#z5ioMXKxVWCT`y*{^7Ph+;;xphW_NQ{^p85j0mT=yvV$jY9?JOc^V?@PKydv!`Sc^N14*HDJ|d7n zbp|ZZKm-#!=RgKOa`3?j8JsY|3JbhY!3P^$(83Ne{7^#)Lxhk-4mZrOL=;U-@k9v) z`sthl47*M(kA$MGod65k$RLXd;)v&h^z2Z7b*Idjc6duwQPp(@hBAgiN8m`~s{XKK%srv%uonkxaPMiL=H3wp}U5lWs#Dmxo3gSfllSK zPfc4SQ#s9h-%`&BY~`$(B+ppu%2q4qcpt~^yL8s^4hp`w^|n6$G&jgS%cbqMTyPCa z&jWBh582$I(1pBp*I$P{_Q&D*=Nuf>&9^$i3zBlk2bipsAawpYnwNn^LT8@`h%LxT zgQVo0K%fw>5x~6bvHeKs3`g_mg5>FENatB9aLbX00$+T53Nqt?FqvQbvvmM`Ffh3l zI+DOGnZ{nI^v|i?`ha#Qzn!BvB-s#OnAWep;7w(UtIqjG^1lGG&wcrTpV#C^KmP{V z&wJ$4pWPt9z}|!pfa8Ne``$M=tda0bI}#xS0n{k&ElYwTp&$xnr!M@kYFwg&54KFV zxy%v7bAiEJL5BFP@hnkXP=Jf-M#4IU(8G#XwBpmSh(#@KF^drJ;uph6k1l$#j9WY- z7r_|DG+wcdVr1hQ%_v7S(ov0Ld?Oj{=*B(5agKQGqaI0O51>Q>Yq+zWzF=4ob-1G) zN1_M>{E-kVT?B!VB+6+F0udis(m0NUB(tnHxcSAYhWGoPjNFNoT#>e8k{);UW7?vRI2 z$d5pNm>waHP9aOg(hq@X5QK6L0!u{4dO#*ckx=o0BU({LF}hI-vB;wu?I=h+BvKHO zR74@==txsq(icI%9ip+v?bemM94%5I_n->|^x?^h@rED_!IduWr4TY1HqwvRaU;7No1W1nW@^GS-WPCVkPbUYV-?hEQr zaOx$Ok}w}t8(a5AGF7-{b~Oy4u0hz#R{tPb2 z*i7+dtN@kg6;RE?!qh>qUN@Xr;#$X9+6m|rdF$aH<47GvhW~))oE5rsAh~n~HNb33 zAZ6xQw8vM*a+Y0ZhFL*wxsmZrR`M|qhCyH*uBlyo(czB=+ypE*8fC-oF%LS=BQ3lL znqn@d88l~@PQO(Wa$fU~kd-7%_Bb!gKIjo%m|-6E!0vjDf{(-;iqVdSv;Yxsl!*w* zFl@nxTgoJu+}y(|=KNq`5mPdW*{WWcZl`f6jgLc_3Ql?XN~upxPt5=&ABYCkEqPkp zNmrUqjehijIc)|{f2J*OG0rXbVd{OLT9_?V=c|*g>18)N#tPv_(C)z`6uZMEFsU77 zg1Bbjo<^M_$vVg;O-v(hvzyB?|CYH87 zp*t6#-bFi9kCw+@jLugq~vb;5uGsB{fw9uboYb%idKedy#J`Cv2g{F@bgfaL%rSBE{= z3@DJBcqH&RK-BSZyQLG|AV(iMeup`x2aq@GTi*wHUCeW!_*@}U@+ouBp7es0z3F&@ zx=Z#kbthRJ>sn`e*HazfwNtb2Q)Rl-126R$YIYsUI|;Ax6mEZ<7n20RyLI+{l*bSK z?-ob>vMz7|b*#g-RhD?_Wj}k`*9hY~tWxcDkN?ib?|!)H_y=YE$u!@?E>AyaRq%_y zeAoRL3M`-wfbOw_9h{u`*T+6_+d+L{$#jR-%>MF;AO6>wL14)pe(%Z8EO{iS9x1Ud zLCoI|^snFkk}*KN7Y=&@Y4-mA2S8@&osaN7*?|-53qXn+zXWU-eYl7E+o1(yK*@*) zq&o_=aX<*1zzyWU4)nke1i=s#!4V|E5;VaRM8OnP!4+h|7IeWEguxh;!5O5%8ni(g zM2Gpg!5!p56kMejWQPlD7kJPI4P=)eB*7qTFLqJF9waXFV1e6VhappoBqEO~E5LZ+ zARThTE)>85$->Rjks?_>3R6J|ToyEB7ymQ-KsBrpHH5k_^uj4KxbPYY&k3C=+>Xew zLOhHe>7zab^uj^R5$;Q*>TrjD@RfD2h?A(9qM#6w=%0c(I+t)cl}U+{I3z}FIh$)8 zHbg-;ytYq-pbiv8>p(+v_=ut-MCXGd<~TCZ5|IAjL)sE3S%e)cBg9?wl-om}2Uw(% z@CP%nhX=5(9WaArOh%JfLNwVkjFAz0IDm6_Mw`jA2Y5zdBt~Q0Ay7QQQ>+ef^b~L8 zKyhRaHLM4H@WfX9j{C4h$w-HFq$tqwuyxeJ*yF`~1hYew40fOwg$WLvf{X2%pmXRl zgqxEup%GyrFM@Qnp%TdKk{xm^LH~2)JtI^Xikv`;BrEmP$H?fRhZ>zEIuAWu5A<+2 z(~`3H$d*0q96Fp2QX#G9J2=VE#gAOUcd*Bq;>XBfhiaRreyGNOkSp@wB#|(Ko-_z} zFi3(Z8KXKBq1>dVnz@>*j&EtyI=Va+yF3ZJd`yD~%ds>V-kU0-B$dJ>9=McCe*n#9 zG6{XylG<5Cg@{a-m`rctlmEHo%Vo*TwnVwN+`S%>EnFl?a52f0WH^P`E$sl0=G>gh zaTbDezTT>+-vXrWj3e*-qwf^Y@FdSV0#EZCPxLI$J4#RXTu(kaPc>pQe|a2V9Ey1& zN{z@nf;hmDKnS$}s)vY(iKqxm%1<82JCDFeZ)&+rER=J54Ael2%W#UEY7WZ43ksbL z&8Usez>Tfwif9Xq!jMqa=*VXqwdlYM3w4eR^%_VCjIS6`P0EVlP>g?I3HrP4bHd?;RuZo6^t1*r) zzU$~w=#UNzoxSXQxc|&44=FO2{qV#1FcWDV0L0KIPLtWhp-m zR6yO+K{eDuMN}2hQ$-b21A&p+nGtzWO39d~+$&I#2p;@Fl0ZWoCxH^^v6;NP68%b1 z$>@?VVK7ZG6Gcmwgp3Sik&Ifol?NLz2$&RB$yBc^pa(6=@=_F7briyZQAt@9@(3PN z!4#cP)w>DP>Ht=?kX45X*1)LMTQyc!8AVq+$j(g2SuG%4Y083VE@TasVM(uLdDc*I z)ieDuXragFbSNf5IBj{?BFdcecp`F{M{inCoIJsKsTUGMBsmm`dD@tN37Gg(uyAdd z@Pe3D`!I`vM*ofJ7lic~q}fS@xS^*En|o3(vw;~#nwd+qnPD3V$Kjhuu(`5&Dz_n; zp8+~08QG<2Jh1YxyDY7il$<@;z1f*>Wt+^}8n_`Wx*^%W zaUiG(*_2(`wF4Yp(bBc!9;hls<}lia*&Et>kIDJ0g@RXmjn^d04kUWVI31lOLLIeT zoqqM#6QrFD3Za9}8L`5h9c=ED#SGiu}o35t>9>vE1&6YCIV-rLTRZ%~jpbt-X+JGFeH~4-}$}Y`o-V<)!#1~ zq(Z_->afp|XfA;OrE~Z^2>1ud;@1RrN=+(=#=KNUI$#IBO36KpQlg^yxJ)UDeuHzN~Nan@1#E~qG zjEr19t6e7Bb}YEh39Zq>7TdzD+Cr_@dcM(`tG5@vW z)dp*1BZif=tJQ>lXojAv1(U21doagq8uZFxO1v@V;OK(TXj-zb7CS^kq3EFq=H3Lk*M^F+`Jgg% zW>R$?K`v{ZckYcW9kVh!Gd>~er`%4!EV((Wvpc)SZ0s`_bG39nj-VN|Li06XW7Tbf zw@A~gVxzTVgEeluhfX7DP!qLHkv3{u;UgXnR`VZii?_q_>snj8TZ=Ybt2WIuv|md! zg;+Q0Xt%$9x4{0XZYyj63N>gWwQ1Wmi#|tW9_?)_?ZIZY)7EJo5jS#!ZU1v~j2$(I z&t{I$wlv7*>x!c{gTuGJ(6{7P?&sS-BN8}*TW)@H?#mJ1-m=2~NN24kM6Z^l1mU=U z@Hhmdxly*hlq-;x%S4ieIRvcAjP)j*)5@LexqbLK!t%SUK06CkI<`E$r#nl+tGdBN z8pPu|%B>Et6Fai=@8B4{oc0;FGw`_6JTt3r$5Iz1by~qQ+0LP61zq$g4JH^XZ zk%oZ${&2w~yxZ0c%o89Ndk4<*yt~tIXXS8$P;u@yBGz*~g|f-*=J77{?#HpzA8rje&&TcCf$kG79M*CtC&Bp(;Q!VU^8jqWdU(Ho zP*^h8^2fUAQe;CGMw65bYnEws^uV)mN1CT~))QGkw z35DNAd?rOEuSkz%7J7deDrP{DM@P{7$j*{>myt&{Mq5@{cXqkSg8$b%N4S4nq=Wm@Z$q~psYDu@i+MB4 z%B>Vv%Z!uL{L9UJ&FUD=vNXM|`yG%-94?$zSlwFMYl={Qu1F$knt>gK$mQcYN6o8QNsc z2qq9;LH*t&iQkmX;OxcEfBm$SJ>;A%G7ci<1belOPL`z3Z}~Co{4wopWA0qv{?()O zHUB(P|3F%Q^gsXdfB*K4fBK#O{H=ff)uZ{`ci~)ncwVFf1qcWb`1uo9@7z0q?9Ry( z=nz6bUJoZCILA)lzXK2un1OKMA4Yu-2|ko}j^V_V4%hwrhYw%NbqXK+y9e`}J%{}s z=(AVvUPFWS5Y+qkK&Hxx`p)^gS1(dMhxLXQJt}bB1Ap}p*xTpO-Z`lGXd+eTuV%fS z2?g%#`7>xzfnZ(UGkQ@dQKLv9EN%KUDg?0UApfxY$8RtMvuM@I4Qme{O~mYI+Wdzz zF6M`QokEpLRqxfTTf2S@TW{>YvS*z#X3Ntj(9D6)?Xwpt>%*yetwO-6m8;jrwQm;` zC~qEExQ!z{jx11}QGBN_%f`I;f4`* z*x-i}URdFT9+n8=i6Uy4B8DuIIAVw`!sud*FKU=rQRf`6)^~B4w4H42Bq$I`4t@08 zSqQk(PjC+{L{C!CX(Z4&_&}%*KIafwoc};aIyBh>cgZ$ZI|8-yKt5fD`5bi+H5r#X z=O7^4JZ-`$r*RgkB$z<&ge6cU|J;?1KTR_E9au&lY>wtB=0ki!;AbR&3MvqxhQ3*yswVBAlBp1wglcJs+4_)>%FV`U zg7=)`4y>YnM`~ud_V_Hc4v8lo3m2q!-n9nCH_^6)g@=@R_+`uOe&enap0yBk8yAAY zM*A+j@ya_dz4g{B4=?BN63@IpdKYX-=iI{%J3IK(k3&10^T5LJq*M{Fu=0~yviCr+ z4?hqXJD5oW7kuzU>ZsElPntad0slH^I<%mqZe}*v0~SB`(n})~3DV0D#N20CHm7Wk>L5LAvN@%kX4vmqo%7DC z_B<)jMh^Wz(MEsmvPw+X+$)=aDX6o|ton?1sCq*H@Xv^`EYJf}vZt(fXJbaSy^%|M zUOMZT2gP9Fj@zGsoIhkA=GTg=Zn+P|=Rvuk+q`a4?MnVS?6J!}d*tv~1|+opc1O5F zS)OFnlxIfu4nOBO{17h)r-aTv4}`{2v+DK9e%ony3TD*AfQ8x<{UCaa;;~H=YqmrSf>)#O@tm+yrLDQ zhD9uDaf?}mfET|QMtXG7i)Gy68Mz3?FsAW}Z4@IL*JwsLqLGej9OE0wXh%2h5sq`j zV;}Xn5_=dW5?hOw?zqFdrMaUW3+c$kBmygcWDJ3jRLTQ*gb~Gg1ZU4_sNt(bMrgs)NKxBH;mc7BH zE~%+Q7Ya+A4SZnBp0&*hcC(f{j8_j6^TYTEv2+tz;+K91#D^f%a}Zb}I_4uXDW-&q zE1MBUSCml>(Ws*vHPJ^=6jBv&bfhxUC`wD3Qjp#V0`5SKJ#dG}bI3FM2DErQU>{OLoCH@$r2+1fhR;f?O0epXZ~7EZ)cmSZCn8o_6_b2= zMVwXz!qr{Qb0PICtos&3w#DVMM|e%iVW;}fcipExmm3V~pl|`p859BrKo>g#W`=~z20B2MvzoBb_tgDYIw?1L%uIApvMS)H50sv>$z-a{xk z66HNa9ej0&NrIBysX2EdV2W5$a#|*rG7xGADVql|`;WJ37BdxTp+lm|US)1=K{89! zOc)i3a|kshgO!b{SS1ko?sb6g-Ba7(p)x@67r{XzUp~%D*@?{KACHpFfz>o!GaGn_B88;VWl7sL$L@Y~Wbaln#~c^q#Ywy{hL zJH-n#m_dBUlcC@gE3kRcc^+`#1>7K0$=;m##n?TGyP_1G+x)|3EJ2e!BHXh7>PlZ` zm`6RXo0Q`E10RoJlu6bMX=NgyDI6)@TIPa}x`4_ow7ExDc*JNEJ4PR5$&;odZA(g9 z8Xt^ORhV2SkAE9n>Z;XcghFAeKQ%UZFXHUp>|Ll?Us>C~x4XLnAV zY5!((`q|Nzr&jp^w|h+K#O|QXO)6{b?j+mR%ieTiwVV(-Bc{4F!<$VW>ev7L3mgeLoV^Qz+!)vW9z&?=e7#IjOC zp&O-8L3u|${NeNdf(0LEIl#%)VGpSn>f@`93p@@Wb(d_1=|oo!(wlzYVt#78TIc#c z#(U!4^!y(`pGcOtRGqXd-63XodY_^`_0m{9BU#@%(Y;>cxXk_UMGySg_d#`Fum7ZZ zI|cX4#qEy>Us51>_YU8i;`gBgzT&2b)&(x0j&-mW-v^5L>0>YZ+2@X?!YvZ*a}VHR z>R!0%_(x^``Ly24&QEWK74V6#eAxXM3M}9bg6^?{9h`jm*1vv_+cAA()l_!Z#QyS! z5B}Jh;b6$!q4>w2JL%K|Ce#&3`TKEx_0u0S2B^2ftK6V?*T4V%f0pl@MEAu`omAid zQC#{RV7%zVJ$bejo^jpa_m236`J#-xU!v(?%59**1R{xxPu)ub( z!;r;A60ygW4dA@o&q?s#5nf?;1fcC*nUKuG^4S#%Lg2HAA-sSg7QRl@Ng)YNnZbdV zN`TJjFyVM$#uLKf>_p%68Q>Z2VPO!lVq>;xBfTgjJm%Fm(qKR#R1&?19L@)P zG@NNk*?oA+9DWWP?gy%nmh&B)&COy&hTuD}BfMPP{`lG=72`wv1EbKSL)c_Wn87VR z1U#HWm$_O|-J~e$;B|Kg1b=6&}_d6_2C65H**yRJN zv;$O1Wpd@EKxC!QWsq1lU0JTmS(06K`Q<~rrBTFXDpDqU%>SI>Xv%YFCUzm_^q|*L zL`ZO0Mky*KQ#z$U047ZcCU>l*QM9G*^^k1E;zgEAMsj32K7?+G2YT#g=UmRT5M1-| zRz*b|AT4JcG3OsOCv-libk>n`QfG8p=XBoDb!umJ@=}ZRmkIYbOv4wXlVQfX)MQS zyjo(cMp|T&P5@|ZWQM4bnwaPYf(k@|0tTN{3SuY*Ye?v9Fb8D(gJkq)HgQLX3Mgpw zhG+msX^4e`ifDwY8igX{(m-fyoXG$gPxAK!IuvNGr;QJ9^YgiPW2t6icZT zozAJ9!fBo2>7B}{p7tr9{^?2Ose|B%W$ehk^kg5tkbQc|qFU9H2%6$l$(4*|qdH0a zxM50=iJ2_er`&})w8_^wgtNp2vtUN9?23c&j5uM+B*_Xf@n>8KM6Q%-;ehC+yb61G zrmA#GP;@Gr1Rvx1&?8i{!drr;7AccKhOvY?Xqj`+LhD=fpB~y*fwPIURK+eoGO?@6)N@%R# z7^~YLR@cnUs@aXp?b286P1-olL|~29WL3!yjj9}u#iAFqxNOGqjjAppS-nl%9L>rEMzP-+kj8Et_jE$!V$<$TscsjJw&Ym$Wr z620QsK3Um9!Rqj4a_Z>4ilFTv>a+B#O59WcT94;d&prtRbS+QwWY9bzY2NnjcVJI$ z&=mJvY39cgTPFz?k(dE7}e_HC^4c;sP32O zt_<<+mZGT-tzvE(NJE)UX&sTf3dHsHrW1un6uE7^y32QZ=XRQJclr@_t}l18FZ#N# z`nIq9zVH0TFa6%H{eICP6%r>_hux+GbEyL;okQmdup<%hLm)`!IfSce5`1!!mweIz zFR*tYZvA{8&N3Q1`BP>X?w_qvJ0&nYi4!%E(=VA5#u8T0;MWE#lLt43GeJ{1p)lrQ zaFW&#GktI}xzjp~FpQb7IjI`CCjaLNOH*HcQ#8@=3u}y)NNu+IEAk2se$8F$%&-x6 zt@Og8wGdQkbuagpmK@G2+IFwnM$~>xl=vpFZ@H*pxQ_q)A1YIaUA3E z9M=dRv+*6<%uCTkOwr5#P6TtI9B<%MB5#D`Choop4aKGeQc3JmG4R_s6{tehSy`b& zT$YY)vU~cKS3Q8#ylx8bUeJ_PW}%hG4hvhk)m{xR<}Fk4-c>8Fa=b0pUy*X@szj)& zgeh;TJ@Dk41+yn7uFcq$*yXOUSS`&`UR(ro^m>42ne9WN3uzfh>!p@&qSk9U-)PO& z=xp<<)u>7>4;-d?hrGvB!$79jr3gBRB3?jS#Z#m}ceJ3MtrRiCC)6l|U49>)IH1 zaCAeb7(`!`MCTVp6XOu41W5a`Buxxr%rr$Xv_L3KP}mh@h~uZimq3%(+C3O2zqIn5 zVvup^${^WuAeoW@Cy`ByOsK6uMA?2&nL5KQJ8K}9y-qyq3UZvon3Y+dwUC(w3PW3P zU)@8U*;yy&*)v|nS@Y96C&r-BgrNx=u`L?-Y#Y2)N4sH~qXqUxc$D78JPwfWj9 zTWG5}C}20+fH6g_-T&GM-Ox? zo58srJLsG15k|rRoWKzrcJrI_DV$Z4%fnSMS9kRlhIPg<$j1Fc$5kK98DK>iV9GVf z%1L6%u8ModT+t$Bciddg?Ofg6okfEj={?@wC7tLAgyTJ(;Mv{e(dFU6o#K5**o|FU z8hFzoxIlznQM--XAzs%pmM!tzWfC~`tY>C;_~>o8gGXM3U)_W!-eYIR+tD~yNlsAKzh9hEiHyiQ`;T?uBzlNssH{JEq?1wVwW+H+makSVxY1qBldH z;O_zJ13KiDkGX*S*z@V1^idy~pP?TDB5>L8m3Mgw#$W$Rj-0RgJKi5`<)1n;$Wi0@ z3u>V}Mos~)`JIoT1rFDt13IHOx}!fjq({1>PdcSnx}{$_rf0gQZ#t)UdZydppnJNg zk2WIG!yff}u zFivBnKe0;G!($R3#7``itvkDu<42k!I?`*{!V1O5OTO#-2F7zc0OUCcWP%XnLFUOL zFT{nFJj$K?$~Rg;?xVTitHT4j#W#CJmQMA8WIC_wL}2yh1gEhl*+`Z^Nq+ZMi@fQz zBv?Z`X8dGO4sGdP?c`1bPu3LGbEws$4^GnObNF|6bY;_hY%6;PNLtvIK4zZ&*{{TE zhB}tn=4^>^5b5U8r>ki-pV5b8fBcwn{upwOZ%UMJ{^}9)JOBAMe;!SLAW{GGTYvOJ zfBI@a{Bl2d#>~6dt<=ZGd&Xx+c!~MXr(m_`!$@xWqrU{%r%9N5iyr8U`o?H930Tl5 z#RTby;wV7qvsdq)JO~F7COoLl-@kkH`aO7eu-yZE2k$*#x3J;Eh!YR$JLm6Vq{fB5kETz4>MBzyQC{7a{hDFlWNAxb2A&i^P< zr3?RAte3B)O`JLv7CoADsnd>8K{i#Zu;+Jhz?uId$5* zZ~q>i`*`x+!G||be!cqi-P^-|Uw*#$`smN&KOdide*X6TyYD~!*b~sHz|J`!E!PN> z=bXV>Q|F%p5IP4R?bJ!>APX_nFd=r%p+_wVDctZv@jT?mpM(zh=fejyYX5DXy9jgV z90Y7SXCtO^D(fAp4vOTT9n=4T5fp#c*AfKtqiiga#mb9`-2zoro&7JN!#~mxZ9Fs3L?Zht5-R5L4Av4j0 zprSP)I3Px+XzVA+wWM4v%hf7{z`-5EI>$#KAsF;Zgd{ceQl=11lTkxiZI!9mVq@U~ z+-#$@I^Yz-RW8`#s_i&ib5#!5bzqwn0$ta-?oU^lZPwXmp^aABY1fj6mveZDCt3#~ zTrC}b;NtV1FZqEWPu|WMcb{_4O$Y%UoBB4~F4bk%Q%%!lhn*e#3I8)8b<}YUTyG(G zU|a}(j3nSr%WCw2gDe6V;7A@uazvnjTDV|*Bvyywg!cKzpK=k3SmKW%7`Q1eS<><# zFvWbcV0{wOr{X%hbU8zeH8y$ToA1pT;u3{M$WMm()Y4~EY0;Xd)^6j{S*JEAmhu%?=Bfic zq2l$U_Sg;_@I~ z{8b2a(Gx=5bd^xzE-Rv2ox3S{`q^&t(jhPd#(YKxbgFf(JO8gNwwVHvyB(7!uVKgZ zL@4_3z@~X++KYa&Wlx zK@iDDKa1_Icjx$>`ntm@-7$rCzLQ<>hF3f~nJp*C(;ozwr;zo*3u4-1%lHyf56)rk zS(`_%HlVKurOGBj!HJhLZ?J!!5oQ@JWA4Y|JGy zc|J}qGnfN(jW(I`%;S-;giwHvQ&0$;6(&w0G*ll7QnnwXZMi$vYl>hHBxO# zPfPaGg9KHWM4j1M;u;#eGNrBTY^Mi^v$v%%4hk308$BUlfMT)Zod=O@W7%OW*vM)f zET|PiE_(sW{>`43g;fiAC^N&ZmbI;QEra$kl6k^NvAyv@;{_;E|8 zK1x7C=%)7D%vVRN_ZC1)o`X(5cxo9sE=O`&t0!x_ge)p)nI0(4P zGTx>@w<$Zo&RLN{HbY`pmS@^1cGVgh_5bo{tfdQGX1t^h`g*l=`&G+4{xPN1WF%2G zIv7_#V%5NgjJk9U4SRVy-Mm_tY6s&bbGhqXwS;#q7*+^_?;G9Mwgy(Qc_$7}o1GR9 zMjbPT0O4SDxOCWfar88RXG;KN*7R`2MK)|ecWR*X(925FgfT#6Xj7AIar_-y^pl0na%j{pg$g9l9bdE9_Q$XJ?`O1epn>b zSg{Dj{;{z9-Zs&MmNbDkN*BA-GXG_yE>V6V?dm#Wa;~?{3O-Q1u%4*N9$ax*VBZ|) zIqUVVBdN5Tv88M}+ZoS#o=Ttp%n?EBT9mA!bel~L?4-yS$!hVy-dIoqV;zJY=vKD| zYr_H$!0`fmE5X9*z1eqvDBkl%oDCt%oWmsx&E+=u!4YocCKD!4;lZlbP(!v1MLd;> zN=U=I^YDrPL}Tyx2QThn@qhKBALJ&?Jizssti>Z_kJ-mg-jNSX|6?ED%?UmlasZL5 z!ycG6lEn`_qMo}PO^&H0QUE>lpC<(6Ss{t~^pO>sKNYAmSMfSR_Y>>o!zYm#%&Kpz z^nE01)$bU!Ke)0;>t(%ktN-S?&&RHilstSj>)`r7yv~!LBxN5|4=>A|{&E?m{ONXT zxshNlbH3Z$LOI{L*nvJu)-+w^TkkqZ6P|fiUEl)hSVw4wTyV{gp7f;;DdtJ2BGXIj ze5-do=6*zV%B91jub*7&ZJ+yuw-^d6Xw7x*v4b6mT=&H{K9buZ{5+xla`HPqt8o8( z>4!!h_^3xcf+AdMnW0~_oxY)>|9$aW&H(84cj&pp?D4Ok{jEv~cbIRv84BP7XdPOF485>b?m^2C0v)zv4NZ>^MehUi z@D6z|hghS=8cQK~L!b=DknqWJi0lp}QMZmTPY%Ey4&WTLY}9}v%M^l=M6VyL%n~tC z6BB|HtIT>t#tiJ?0km%t2?J)Dq8{|2|4NS*ZSezTu?vmEIX=r<`i~LwX(e(|S|Sk^ zC2`@_q8-vAPyZ6dxE!RU*x_1Y%MZ~?!I)8&&fyt%OT^6OQH%>2S7R5&(e}tu2~DV< z5=Vx7g9?S?Hv%rQfXp~{r3wcp$b{pi9?J>W%{l_H93$`@ijn%lkTp7O$snMsR*Kyu z&3+W(Nl@<~L!xfxMidj`A6QBqNNyk>>F~(s9%gPIB*-0F9!Oya6 zLEhmWbSf#9YeZa<488A57S9V@NO{RK_6x=AE3}C zvjQg(qA8zJABDsuLEmwe5hf+ykR`Ye*qXD>iP!9RqG}U0rv5@Ysq--+V=~IdB(#%3H^b1rb1zmS zKL7s#%ARWZNQGpw6EirJJh#k3uhRf8Q{et)5##aS6hb<%5IK+~H+=D(q=Py_54j`? zKr(8gEb2%x3P~fXNQqQQjWkK2bV;4GNu%^hrL;=L<3Kh?L0H8$#dDB21Vy-qBG3#( zM5JxN^hCTPMd+@O*sZx_#7op7Q#Pe3a3*1>gh`Sl=$JxO3gtpQMi6& z2q9&WNHr4jR8EehP7{##WTg>pl%E>&o}i#telb`1$v1GwScFl0tPvn9&|0vCy#H3i zOV>hP;({gW#ZuwOH}{Hz6cJpaHGS5FTJdEz_oZJH0;gKTYn~Nr#D*%!?R->fX;9`= zFNSCGs$<^uOGHM?+_hrNHFdb>tj^JBWTvnl)vDYE4mXBgfo3P~;;qigH*rRQ^0is^ z^=iTfVbqns8m3*-=4ZOCZMH_f{?(3-#J$MQY%~^O(^X+=)i&}*u@n=sc1TxX2v=Q* zv>FFC9;Ze#6Ine_a|*IrepW4BM}odebu!ftS*Iz6Hg>RyOMLKlnnkIKtAGyZAcRLv zBL0RqO)?gw!%sBk67Fx}~d5|JGt zYo8PcvSxM|55jYE^@dS&O7^Is52k)k%1awL)_DYw=EoM2U$ z#tE2CsbhbSd_$?ryosF37namwmh{$pV&+e{jF-SJwM?mf)vB1{w`~vCM9emS)7NRV z7hkydnk)&E!Z&WmSAbs$UcF8GKx7F0VS&ZzLD+YIw+wt?G;`r;bN|<|b8FOdsgPKI zm2`V-HvUOD0xEU;NJyEKK(JJXue64(^oFU_hI1H)X_$uxJV9xZ!=Ue7qRlKa2U(6bS1P#3$!LnvwF|5JnL{g`JGbOvSPIEn3HE2P|aqm zRhIZ)i0ij(`Iwj@xR?UBm<<{UO1U%$PAgf(JhasCTX9DmP1_=E(wq(44g%9O%}YA%(@O0WZ7tk_O`KV6+l;!u zV$C6DO(8h3s&TETUo9bc%{6Ko+HiW=_KMni`r7cpCI8WrtIwK|U1O?2&5?R1y7+9a zv&}5*8YJp$r>m`**6-Z(tsmQMvEi-v&hLfn4d2|YALXLo`X+HmmuCHOrZw6GXIUE^ z&XCNIY%r-ilH^_J597E)<4PMYKQ83jW+NGd@(K@94^QwAM)7El@o;WJ9uMv!k5%4| z=vwsXfEx0cZvUW8>iSM0>WnVfg6%ACDa(174pF)D719Hb?&`|TWol{=04jsIM4Gy4*;-0Prsx8n+QX@ za#Sw?39!IhBla$b_Grzp7M!*C!I37M!K1}i&o}sn55xaWF!^@CL|ZFw5%9u2ytu3n z`~Kk-rG@+Y!FVml#4qPBz{R;_{KQ?Q{5C7He<}TN90Yw3dF5{#74XJAT>qSo|1RhM zU_8dn#jKu+7&m$kE(#gb>eLBMEg6(EWV+@X-lrlPPkP-Qt`nu8YId&|r5%)2*itL7l+|ktqPtvlA}WC4Kq|@zDR}5v>GB zXYdyh(XuD!7+YNc58P5OF%vg2%(U^>O|dB~5+nZ-q!fc)q*c)$SkV=6oNaNj_@;f= zkFOUKJv7oG7+shKcSDPvMc1vp{dzqck)0cR%NxzzQt1ywu(275{J3(Yq|Wn}F`RA3 zox#)5o;Y_lBonnD=f{+T9{*h->a7W%kS8iTNb{Za1hS(IMIsaOiTxQ$m;xfzLgEz? zs*XK3Gm^Gl11O#DBh4})2Gb-LrY}_zFkdnu;!^79a+lvS9duGw4e2e5i!9$$OY9Q0 zbCWxsS1I%EC7kjrVLdDZvnq@JAHdRjvNA2V66h7eE1CYKS~BSy-n9VXb;1``TW5Y6A3^P@iDMYh(c{g}<*X{r19`1ctjOhOD?LP0%NblSJ?&qHG*GM*x z9%%Qx%XUOJ|EPHlAH0IokPp8&6F-kwD#6c8)eD0?p>skRqeZO~L#IMRRn#mRR6X+o zJUx3n9ke3M6R7=DG@P?Ncm5?}VnpXtQ@+AJQR6M*LO&N&JX?Q)6jVSZL@SJqJ~cJ? z%L4V4H|yC+q5FN-V>aM$)X`})aCnq(e6%@e{g+@^h=F)WhdBJdKZeKO`-6Cf%OCyE zUx&qCOA`dK39|49lxV_qO~(`~V#!QLBuzVnb|}Ak0Rn9!6?j!CgnQ@Qm09mc`aJTn~vYV+d}U_*vD_|#)P?dKSXd5 zVsYN*d;=HG(c(RJ>~{DwnoylOyt?aheBc{`$4J{1wuNxufxrj&v}=!~USP_V>hRfb zkC454b?}M)^A}ux?YY+<1l|8Z^ixo12~^Zkrmd$>Li)tlmQX!GP~Uy!L7*Rj6b>gB zS`Qqc;Dr#VWgdtYt~cO&@woO|M zWhSHtoEZs4c|fvM+FCVUiDi~rZV3TA|D1E1UAEzc&OQ&Ah0rXV)!n%E#jD3V%FLiK?8XjKq2hmfX}a$4%A=iyq~g)64@V6AET z)~Tnqa>;D7&Soi?0XhGH7UYjaLg3_*N+tv)l8GghtwNfG`xz7%O}SE)57EPJyX>L^ zfxGU)D{s5>)=SU5_3A4xzw^e6ufO&Jyf4B18vHN5`64{9!UDg`FvJc=yzs;p2TU=% zpxX0iB+Jq@=3NuMqtHJjB6Pq%53(o&pYz4 zm(V)(`1284kj^Tpn(sUfHA*VoRT@4}M~x72L<>~))laWSvqEH*NYtDPy~_1Du_|rZ zuZdFWwAWKXil?S)ubL3rbK8n%*K$7#c;JGo7Og<)P^%e`;XbtZK-5+X?zKTe7A`u1 zm7pEE5UERCujl`$BUG=Tdp^48p_f`Z>Zf~}I_s-f+B)p7QyM$%v-ep$?zexwd+xlG z-h1%C4==hv?lAR_Jz?Gza$U31rcinb35wA3D!1fexR)EP;{rS4h?Agj0Uce-0H9%qv=G8V6tW{Uf+@^8 zSnw?vw(y1H5>gBYBe`@H3xq^0q7fCck8}8A9v@>Kt?HtVttrGJVxgkpr1%hinC*%W zM2Hn3@Wub2Am?raDMM~5Gs&%b`TP91$;wb|f4yXX#5L_!IS8JYQlHn^=UhDIZx+3Hq|KP_GJKr_J^+A@}TQC?T*8GXWG-`3P(z!cSF7XY~d;HID5me(X|c!P+GqbjAONeDe(H zNUIeHbH?(EQKJqlx0yKUQ1g}*lIb{XI?wgc$E8`*s??*+S>gK>T=6dwA}Y(CDo z4v|2-WnbcRLP&1%GhX~pBDae^N;S2aXFMSeuWiI3aC1-PktIEcczOTYgg5a_+|Xfq z$I=06Ws&^jxCz;K$N#ampjT?>50MBN8R95`m^7Jr8GBtA=s$9+eeGKcHHq&%XUhn? z(pct*y5kPqeslTUT+_S0>0T8(`<*T~$7el6T0MIppdNp+H)QL9fP^Ydq{!l?ewp|YvwLrbHjl;`v3Qx-wgi;>7WL2a1frR4t53y zInil+_jmr5Z2N`~1~_+khGlA?4(I@ZEWs0XQ4s~#dRCi zgDW9E1B68{wNg-IGIpURp;I5KVt-xeg?}-3=!Rt&VQ0m5XApp85I|{dwr_K{AsHBf z3>b(0wr|T8Y8U~B5OE+`@g3nY9*lJ!-qRs2A~p1JABW~f`%xejA|f>Ng2lp!Ju!&< z@gf;wAB`k!lUN{sxDwQ6iHOLF3L$-H5r`jRD}uN{FJk|KPM8-S0X>Jbd&`j*vPc(k z^c-Z-Y+tC0yZ8|J*Nb(R6PhM$ah8T_2m$+chjX}h{w5G`xNnrUWp-8`dH4_!G)0Eu zCwQVLjN&Ngp%G2fE0@xQ5TGl4!YkpZQ@4UF3-XAwM>p$;j^wy0Jg5-KQYlrjC{Yo1 zzX5IK_<<0RkByQiWRs5HSdd_%P1ZvxDx*`D8)r5X0nf2Q73nyjeEj{yvUIq z$!`Ssi*ZmD=^%_}Sd5}}jORv@ASn>gxQr0tk`36Bbmn%=D2EWyGY|1IK{GTDWHd+v z5)8&PeseX2h!;eOHI`&I1o;$@s7b&TH$`a|t%m=UUjr&fBZ91`7eASmV{<`5Nh{|u zlxmX@2FZjhL2X&FNXe!@3L!Ij@s@URg(x$B9%+}nxMmNLjO2)AW*BGMp@t~AZ_!1!gfM@#0e{qn2!e(GS%jMMI>VFUodz zmu1@lcUdNPXIPlnS!tst7nQalD>n1Y8NJjQf8W_IVGj~#7{}ZrYTj0 z$AM3BTBQO3QX)lCRvJ(P1*lm1QtTm98^W1&YNmC;5HrDB&GAgoln@s2Al)RX=Tt1x z#A~?*qn)aD#|%z2#Gmgsi~2 zaN%Z6n)O={fmz==8Mq~^yX9G+bpU*|uEt7S#66x?CV&hkdwOD->SNz&Y zfTd`jO0Wehlg^?8?4TXY$)i`2Vn$S7LiVr>X0R1&u{1`FSweT+sU;ITI1d(KK;@7* z=CK}ou_ueN1D3H^0t5r+s$62Sfx}|8bq}YeVSa2Lm7jiEklA!RLcTlrW(moqEZVuBKAbif)w)r zv|+YXYO8i^t75=ZLnW|-ECD6BM2@bM6-iPgH$o$&aS#8MZDRW@1-1hRb{C0;h;q?r z%YwL<#xw}gxWuuzMUyfE>uiHYCoWe^d*-6P#<`)_VEbh*b}>ukm28^BB)C+%ecQQ$ z`>|!46|WX+vz8FMMorvyYqXo6)g-&PR=eONPXA#B_V55BduC}_YBpO$$-8#U3u7Ww zw|9{amxj8RK^)4P8foRaAH-g+a&6rPMsERbPw~AcrYSaYBIWCWEebv2gAri_Y-zc@ zMOHZ2A|!e%8CQEb5P|o15kp!uAl%f(XH$*8XuLuEiJ#}&pCBtG@az>1DDtE#xM=1$Z#Q$)_j+DfJArCst zf+WmyCXB*QS8>^K#p2<@9!I)YJjGSaHBPJ#P^`I19CKn!bGye>g>yqFWWBo-z**ZF z3h_gOp%{BCF8fs;wuH3^ye=4XF$J^82h+$2qsWoW$dc^Hlnlv}jLDUp$(O9joy^Jq z0#eh_7Z1!#?05f#@uz+Y;eLJeN2`eurwlXd_rVC^UX%L9gr`K9hj_86c#H?2!1a8R zH#d}LeHS%+y2p9o_jw6y%$SGFC$cr}+swp=5QV49Ycq;Hp?u}Xd=(LU#j+0DM_1SP z5vX^2P?US6M|nuzd~}lW;G?3GeUeT7gQ@bk1^6v z@IoSO(tNx*#UebWLp-W8)2>s~vUAh6lheAh)4wCrKTXp>ZPP-H(?m@>7{YkAM#tU; zyQDjpx8nb3xPx?#^wha>4)j1DPo0HQttYiimy>a#h(@Lm(ShMRw>o8nI9P-F2@z^N zH8MdHtT}>Qu@hshNI@u|X$gZ!SWy<#7Ar^>ZY@fH-GZ~(l%xq3GKhjT$QK((7iIl} z@zoI`DA@9$toymxD)HBEQP@d$*dPelm95dLR2X>-B$@*xS9=?J+sE6oOXU(8)mt>J ztH7@j8?#XxOR#JuO0sfK->!hu5sqgD@CDXcvi&bcovx-ixRrjVPKhxZa8AA%F4Q z_sahve)ti92q}X2-q>x38X_QyXo|C$lkEtC!@}KjMc}A(BRNt+XLZ^jeJ$OR$F0pI zl=CElAth$zGPGUWsNp5L?Sm%15*N8a};kEUYT2Q-gR8IQm`Drtj`IljY&&5sUZB?(zQVfl_$y(>yyDje}E>nJP&O5ar; z5u1_-iDxFJ)(b3w{IIg|7 zJd)w|o3%aU8G>;xAYP9{^vDfk$&kLulJ3cr{>he(=@Jv^nm*~AUg@5G>7btJ6@&jV z8`CklI7KKPGZ`%qRh`NbywoqV>bvLa^QR6tqceeWr{N1ULW4zI8IKsgz{tKz%&zN%VrxA4>sT4=Vu_H~UeK2v z;>0eM*?u<){^L94?QB)QtD89266gpK=vN!tImAmRT~>`@IgF7xj6T~56w^Vi@I$@u zMcwc^ZPYv+@jm_V5?}EY&+r-V@EQ;C7hfL7(^JZ$7o@BZ#ECK!j6Wv-sB^3G=z;R8 zsiEZ4+;$i!U-UsJk2puGQEzVH0qCAzG% z(Zmr;j`aP8OwzeD7?y$PF!W2oB=`tT_<4a$%B1R#dJmEMO`DoEkc$6Ju(E#hpZ@}( zskaLd5Fo6x7wO-*djb_gkazB!yoC`Z?mOoXpFMo~1UBSlW?sDq_yi*GcMpLXe&^l^ zw0G_wzI*>3uoI}x-?@GF?Co1Au-`t3K^NM@sgozmnF8BANC<&w&Ye9WP_&3qqdZcOW9akY#Ji#24woKXok6rBirLq)>%VjrMFwSD;;i?%v+Rckt^% zv@p#==v()$-l!38{=+-5;>C;`&vpD5a%9PqDfzmDDU+ttn^2GX1X@`lTM9C~;vSyX4E8M})rIgJ1uF7owMl3qiYb=FXod zXK@`u@)80)KuIq#xrgEF9vY`#-~N64`StJT-`~IHb%wjgAp$GPtFV{4gJ8e{4IJs5 zb|hl3Kz|PWCqaeY`G=Q#B7Ci%eiR&T9)4shNuhZ5F>xP=Ab2OAtp3?29)()M$De-= z@USL(vhru29e=7%ogN?fF~W5oI7}dXl5(oZBNrmk#HJu%M<1DFgeM}B28(E&ecrlj zpnNWjBtW^a^UXCPeFQR1$1+6ApM1_SG573kOiQEu?^OR(Q`PT+3)ET10OiDUO}-XY zwe?n9bJca%;Tl4dSB3Zy6j)*x;;mR@lSTENbGE!Soqv`j_E=?yW7gSfv(@%g<+@#t zIQj0`VTT>JHTPU}w{2(K0e=NnK55fMm0Ef0MOGes>f!32esDFzpMJ2Lb}oAv%6H#> z3s$&b1EMQW;L7A9aLk1(w)kSax+2hBUgv=j#)Tx+6ezR++8OQyyGw;D7raTHXX0z7QEh; z=4rHLd)qn3aETOWTsRp0#_Q$D2|m|x`T&nNKh6Ea+_=tDrF_@X2UnFHBk(pt2V2>} z8;DQy)>|UiNM43rR;hQn$B=L@*8$)Ykc`wvUAM2ZS_BOp|yg zoBe#Uk9biyZ6%@(^gThC1IdN)4y?qF61BefPmuM5tN4P;4J&tWVPThyP&8eb$aWLG@oe%2Et*2d3>hc&~&%F>2V=` zR0ud#7ZGl%&Ti9$!|LK=kbj(MA?^P-z(4#EiS@nX9`1V!F$HpuMIDnk@=%eH{JEfj zF2o)6G?EYn@{R+<2p{fJM@(XvHGT4Pn8GPwgD6!|neZcP3pJ5LA<)qR)etWry{JOq zp^q5l<23F#$3Y?BF@Xw&rZ&atNguF~2VA8%VNs@Q^zl=L1a*I&iAYOS^bdWU=A;H} z4N3{r8i-2NT_kO&h|~e12b!UJK@qFn4ARh^9AtZBq^ew=8dZgKMIoWH(W4+)8G@SV zpzDCAJe`82Xw_pwIaNqmKh;-v(bJyzTvA4}bWni4Wgmo9>^;}VQjrFxrcycwVIg4H zaw2w~^|Wkb_xadfCNwCrscZj^%H`O8rdF~!eQ8Xkx{-qV!=FyQ5L`KmRDmefI7Iy| zP&MK)11^q!Iclmu(xH!0R!f7DGiTlcRL2J5jV{xaU4W`9PKA&YjwnE|Yoqk-I9jHViPA!O$T)N?Zba)=lN^z7|OiBhj7>)>5 z@Io3gpP=-E7eW#9P}u)ck2)Pj9`k4k_aIPZDLaeFZW)$b1wvQSSairjDIkCaJP`I? zC_tUehZ)|20A37BA!ROSp#R}s_~OPV^tCU3^~+yK+a|t;Y4L;wf@6go*(YOe^h??+ zkoRg@(h#Wdg)Lp+{z@c{V`|Au^t@dH)7_!I8C75GE7hTvz+%w_84tAIu0(As}>)?;BaRPLNg-b#W%kpKyU2c4sU8u2Ri&6lm>ffDftk{0i2```KmN1G<_vrJSIhj zrm`V>CZ%7PH9-Fe800kR_|c*zKAcR7{LUrECC3HQOrfY80wiyZY~lgtdpw{!>0oMQ za=vq>+68duP=}p~qYmZ@N9YGMdS&P(n`ADenVFQ$$2H?}D?PxH&p8J@g3?K^_p-Bh zUSBc6oWoH<{TxL#I-VgdREw8gAqiK?0~p@Pl^j4L%(^Yu7ee=9+P&cqkGOCsKKRo> z{4g@7`9F1j=bodw>wkZM!UgYR!Y@fkt~opfH!qjBo80iJv^khBzFNygedq>^%hHM7 zbQUMwHLfrEITV5br0xUm3Ss%8n0e^~)%g?;o~GI3}#uRB+DA1c)&DLGQdfQec+t|xgYu| z5&xPigqR8qETx!(wj%Nih_k7wOFJWyKNmTNNO&Npc%UHTxEchi#SlMfQ5-jWITl30 z&4PfoD<9ryus0Hl^$Uvb^C>G)vU~svV_JwCOe(lLDhL2ShHJq5!;AL2!te{71gyUW zq(BIWKrWFsDqILF#6l3%ypy9K2rxgX3z!p}y9bDy&qJO#Yzo;3og`c`%Sl1kxIhtH z5EB37LJwrW5X?YB^ovM1p^b_N;!=ot2sQ$WE@dG%iO|HElOT3WzBpLE4YIzPAinUb zK7oine7;|oojmliesG9`7?VyS5UE(X}bcr=FG`k}# z-e`$+kQf8qnX#*2$A$j@ z$%_=pS|rKwlZcZvMv74!Y?;WhVl|U2#$FT^h_pze7}&#$czghYl!$tiD|Gm( zd{74-EVzYm3+zCLXtBS2@CO+z7I4}#PD}?+L_XzXK2q#Nc~gj1_2eP%*`aqF=>(tQWD}YO`cm4*?TtPI4TLOjMfx2p=c7+Qxl3=!G9dE zpBxC!e9RfLlc10fPm#P^EIWq0q1|l90qM(S?9IYF%#bXib=b&!=*Y3V$m0JT2#nlI zg}g~GOU!o|Op)MAEtC&@*i6o3k_R}=cp=Wbq)zkH!OK*Lh6v2@j68La2Z(u2G>JxB z!cX!f&ES$wee{iGTefC9OxonL5i5?_qzvRTpvT#kic`|!FiOZA6@{RwHABPEyHcrg!Qk4x5se7y(WMMZ87?i-;SekM zdq|3bQi)(weI(K|thgC$QY@9iIt82yJ)chMK_AP%OM%2X}%%Zd0=;fO!r0#FsX zR04$nL|slQUA+d0i!v3)FI|W*T`4jxRHa%6kC}&eXcEf&6`InebWl%Wd55qh76!7N zbx;Q#xE*stH+B0&6fIFTXvTQEH-*419ax9k5r}6ER}NY?2@==4bWys@F7S$;%G0c- zsFR++(Nle+9hHb6L&}%?2YkH?fgwav3cZlaB{DcVTj|`wuYFc?cMq5S4mA(c#SF@BI1B53tKY{-3^Vb)r^kiPMey}h^UR*kh{ci-#2UD-B45B z(+aK_R2Vy|M+?vVr3%cr3Zy&Tw}^|VRf_DCkNtHDwm{wPh$FjeUGTKe&A?rz0%6v5 zUE~#BN^}VAoyphe;0jjV5LV&34bRw(yaJk|mRMjd+gcnp;k#Jhsi@t|_|w_t(ev#g z@?F~S9pANz$t4~z01_a^E!3cB+;N*GY|0BR?hb4v*HKKJc8UXSk~K000)bfvE?(m_ z-mZ3iSLqwqh$)kJvYWz?ENsEpL%9@_#h;To5rO~c;~z;B7?CVWYAs0V6E~TZ`{)we zVB|~j5Jf>`eT|WyeGN%@)jPAN%<<$53Z9htsu1ZO15z|n9%WH34zZG31C~Ne=8{+@ zr5kar3^`;O5z|yY!@GijAnWB#F_KQflTd+WFF|5y#1cJz--r?uj@jjiAQV9+6EktI z`*qX@>E(5>W50rXe9L0Ei&ndxE7}omY@G&>5qPCnz`s)$u4hY8j^w5e?-JvD!|=o@~mlY|A!lk)a%B=?8tuhegUC`Wp_bA`k_s zlZL%))J|>HUTvkx?4CZy_B>m_1fwnr3N>P*|LIzRK!<)1Y1aO2;0|u#rWx11pG@MV zf9mSuh&qLm!{L5z=#FmbE*3@Jk?Q}ZQ3GP4NyII^k_c#t-onW0=^k(LE^qTjz4>(# z-@UargEA?bM@SvE0NY@)hTCR2Z~V@0{U+~#%(|=S@0gv#%0RjtJiW^3J^I1O{a$be zZ*a;k!aJN&IPFK|NyIHO!Jyb~iO>@V?{E+Q@Vn-X@e%RfY^J6ptW6aNt;7pD0dW_9 zaTv#JBMM0W)Fe!VP40_cVY*NyOyU^-aUc)!r%_c=Dbr2b)rg4IiKEzPnmi$Yaww1T zqM2KeqjCYypnT0+p#ZI*xVfj4axf2bF|U{&wg(2DB^WgGANE0gMTjTXBqLVT%4pRw zuX8)U^K{8)t#T=So+!{vXbS(45`p%iiVh3F#&bkZbVYv}n?UJBe{@KX^qx@%^IdC6 zzjRE`^oqf~$JTUD|8!8V7E2FxQZIE=KXp`3byZ(=R&RAzHyU(k##f(pRA(DJPlpm< z0e4{sZ)p#qc#pZt^$+ZiYxHqiHx7+)h+)^2&w264p_yl27*=BNTnCR5z`BUI0Of!W zY3%jN0QT(I_FM^GwZAmuZKZea9JZ=@x9yi&&u_TxXAOhXQVQiiO7&S~>Us@D%}>Z5EQDF-mR~+ITW^ zp)UgYV3}go^#?PshX?;CYQ1izAd=X6dHISN_@{w6n%VYs&~}I?j&yh+^mzD)pE;P{ zkBYbW{=j(QKyE|y5RP3WrS~Q3NTp(Oq^@py$2*N%I&7P_YnpeOtsfcXFaY&%`19EL zvQH0Q?-pNQh@X!L17HF65cjlKjFdjUM7rG=Y3&; zTwL}osu~SdR+AxhtO!`sdkme?#)(fOkRIf#YIZ4@dJCC4y48Q*-2aE&53Q0)E83UD-w%G(52;Qs4%@%u z(ORs068%U-sM-Ho?$-aO%jeY0-~2wOsNR1l>EB?+ZL8#Osf!8wfq;AQ0QaAtd$Ny+ zwpR#PIe7SR|GJM3Z|M%5_x8S*hy+zOfItU<9>IbH1sXJnFyX<04CyUo7%|~Qg$^ZN zq?pm-Lx>v-Rs{L6VaJdpADZ-7a->R>ECu>|aE~2?nl^9Z#3}FGx|}|7A~;7A!oLF$ z5SW2*;GfT+LvQxu_4BCEnnjN$U20X|O@97v?mQ=NYEFIU{N1Y;sh-Vx_7K$j_n;?) zbr1a2Ltt;8O?&6o=6mput~!7J()N4s&SqkL_UhdmOBO=m!}Ss`hS2T-zMA(Q46Te< zu}!mR)w2JEfbX2mbm#2Vgg4LdyxQ<;%A4m`vdwk>{^7&-o37tT_V5W#H<_~G(V2@M zPhL}Dq;tUVPP5+;xHx*4$;J#rJ??knuK^Y_!=nor2_*m!XCm+60A%AC_QK2~c=Y(}*EL zkWM-$`o!W*9+t4q1s;}|;)+n9C?bwBdT2mRFs^fBj^=T9lWXT7ndCX@9H}IdOgfn) zlu<6(q?1!diRG16Dye0cTuKS%lVVm$WtmiZ8K#+Oj=3h8Y@V6rn{QGU*Et7dw&6~6 zX-NN_Q8k@|&ynh^mXn`3v2zYRKOG9FpidSGfmb(aWfOa#WjGIfWVv$=0=QL`lV9Pz z^H)ug{4-QK{tyU3Kdokns;aEoWX3r=bo%M3sn)bAfttdWQ=}JJbLo9VLJS%N9;Yu@&o?? zxZ(9mG@mv(<efo61|*qGSyV@*xjL9(*Y0E#F^M) zM*??zu!bF6aBD*#_uO^gw9h~OByE%5blY9FPs6$vY)uUNR4z^q-lUJ+12=9Hp?dRu zxH^EJ8(!vp|4FRln!$`Ye4c|IG3BMfjn2HS;fr@pXCFPC-uUpXI9a%-{TJVTwOw!A zy#H;ttG4UTIZlw@#Jci1<4j{Z>x>A6awC_lOiw@=q_D zOTGN_(_g>+^~3W|&>8NjAv*g!KwLHn)J=v3f&T^2C%ga~P7o+SM-`AYHCg`+lH^i4 zh`r7y^5{ne30M;|JYZfA3?1>-@iHofM`4Ik(ojwqC8pUWT)i>V*|@Se37Rf&48)1# zW|*3q)FWsEgTOg*_c0dM#Dz{$&Jc@OmrafCS*a_Y6P2hWrg7+HKZHOK*O90nMp1=2 z;ov#+*O~PoF>W^0AQ{bAs}Sa6ghTX;32At@pCl?t0W;PPpNPWy&8$bgQknT`ADMov@wN5|3#F{N_7%nZmy3h3CKV~!AF!Kq>B!DKAb?(QiLqzO>zo82tX1YFcRA( zbCO9Txhbh=nv+uH)YL6K^-EDz(^99}rmAAqsab{UR;7xjnz$n{|FFl?%7e@01o3A$ zd0X_>nAV>}4JU71>+~{slh2e@Y#QPPQ+y)0=xtP;x*B3&1Y-YJoQSbJhdt;6>|v|h zsPQL!{Yenl7Dc6e#V3g}mt8FgOYGzN zdc5UK)~~khTVQJvl))CSuzg!&PH0=617x~=4w+@)9|gBic&!Z*J1oo~eUah7@5l7IV~j5)dM|_hC`(y`2x-4>rr#UCy6<%P)aT5uQlNSH`q{olL&%I8k4jdNdl?T@H+MA~-Fx6N^=o7G2n5Lm>OaxXY>WkC{y0h*9iA zGNmMYjTC1-spHNN5Ff?LmkvFr@1_PAZwUxpo}<1w(TZO5e9f?fn4Og@6|PNfc*6_M zAg6Ftxd)}^!5e)7rHGxjG^QV*>2=rxRY+DalHU6h`}zYP$Fbo~cwvTl)PtP}Knqg% zagOJd5g+%EOK7yYk9+JTPime@Va{>vWEaR@o5@|XpS_Pf!CKb%SYu4qvYOMu;~f34 z$339Q56+Z(I@PJ$Kh`E>{u&$E*B-40-O--+oKF8z=>F5Yt1WMbYIC<_p$=!*y*A&> z%O2R7twnow>sql~J({cj)4MOR3tT`Q>oD)3Vdnkwqd)x; zi~36^rGAp!^s>%i){=DoMnZU<vW+u#BGY|iDw1N%C?mwAV}`V2hL{0g^&a22;{DvC)KFu2KqGMYpgvxm zEtx@I@q@uYfLUY-5B&oJ!D9ar;zX(RLp@xFTJ@tek_AFu3A4CaF5(Oj6eA-3(TX2|Kd4S6S*uw#wLpG8{OlF#f*ahCO;yvjQeD#A) zGKNu3MLp<)4+>>TiJ(I!T2Z>oOO9f`#f(&P2vtr-+0nylv`RkK4_M*^PtIhN-N{Yn zWQLHXPU^#-Jbgd{`i8hs;y!s|VAxVkq9s!1L|o40Kw_9pphG{j8%N@d z4)h{Btb-1u`_p1ARjGPqWEEI zwPt-Cm{{f|9{x*KuA~3NVCHhL=2YHh#HOoy*c<05rp&;BG5Ul$@S-BF4SJTR5qKmVlq6)9 zry>GKF-GQ1P-bt~Cr-#`FB)Qc!htUy8mjc()3n1<_(O;}&O6)#UkSz!-2>k3gLL{t zr)-g?h>K?#4sn%7xKZat))j~TL^>qcxd_fb=)+TBWReibiXsVtyaRGY{$C$YLV%`F$tAYN zG4+K%q=P;%r1S|Y@$}uP{!)}!B?Mrqf=TJ^fNBAO$9U4rO3vUReq>KD=0_r;a-?T5 z_JpqXA|sk-6745``f7Lt<44}-`&?aml-a%M&ulr!eDH=__y>`Z#Xn?YrCbG4D22dr zS*UcYQHX0YO@)lrB9f-sUD(8g`~#&ymb}udv;YQzB+*^u#a=9@`NfA+q?y2~8)sYx zeB{P%;DrCZR)~qdYjQDZu=qvC5nFzo#eSs5c?8FB98o@i(39~(?gi{MMJvZf*kRxs zV_YkQ^v8WnE6P@@g^UM-cq^rlYl`(o$rcTJz%0J3EPVixef)<}eV(*Xti8C(&t|L8 z5}9{M$EuzNe>iO2B-cuWYgUje_L=KcT`@KgguP{GsUGc6Osud~ ztgFt(yw(PVQiY0MENbM0+2%z3+3L*nDhQS*9IyjB1TF+HCJ+Q89HfI9!~sp9q&hS! z9Q4Xb9;>oGtBT~OO+0R|4kH90q8g|JI%MutG|RKhPQ8Ri?fA=U=EP@M7CQyXpcv3{ zG|K;E#4e=Z5Lr;*!0g0_s-|DXX4@1Dz)Z!ZOxO`E$_gc~XUyqkA=FToBdAbk#FE*E ziD=&5X6edHv?R)68~|68O28z_@f%H?h>?dy*cut$jsX|76iL5`O55}MzyY%XLBH~aq>tn{jFd`xZc;qkUXRq?j=xT1| z_VBajCuOeWQ1Gx%yw(AoE@~~$WB|`(l!{uhtI;5h(gdf}IE~pj(bZ6~WunSC-pl_M zHRa<3FVnCU!3Ynt{bO8(TEN7X5~I$0HRZq@S!z(PQwrBkX6VvFZei z??mqxGjSGUO%>nH6{oV*tTKxgj+rj(ciM!Lg@*@^mT-NtmW6TC6pf_halG2HPZaG6 zN6g>mgfgcHNgl4}#(@p9Bn0H=5dW~TK5I?zaDIB^A~x&V6fsVKnn`&PL@n|Xvrz}J zpfTA{=qcHf<}O({P=mjqm=<0+qb2>Ql3`4UtrGZH)FF;;I-w}1YYB+Hv6zq%`}-Ev=STFM^RIWE{<7~sN>A4x=sZ!WyoU>a{)~c zB^q@Qzpt@gyTvAs5SL`NWH#GHIEVWi@H> zoH%9JSZ?Kag&)ykc#&7281{gvTx_ae6zdw2NO)-C^q?{VB*cyC`AU@gZG zfjE_G_)o7^O(6M?6A+!8_+iz!M{{P_n7F2{gQm>GJ0M3m@kyt+SUS9uSG>d6nEB-p z`SgS_iEnge13I%Q%6>JA7*^wF9sx7IryZIT(m}HF3zznaYRJ%G6wUq7H z(e!ab yw7`xj#OXIp>>v~~on3W+knx&b6*-p0S*p%TIzvFxVmht+S@&jp_J4vBA zn5p?YcUibE2e3y-u}=rFr#o?Oresvh*x&=f)=F!aMX8d?HZ?qG&$s3%_QdBzo#sTf z(5uxWipLUp~P}KGchT!jZoJ$VC(A`$zAz<2PmUd)h(+ z|F(VkR8%?5Lkwj0BC4ZjFRo3er}|t6XdJ+&QSl-i009=QLwXv4{m*~>8#t^hI4=SO z5C{Va79_YX-@kv6))icb@85%e``{7mx6dHKc>5yy+b1t$NC@fv`OByd;y--q465tb zk0rr-=V;b6Nzf(CmMK??3~A8#{hH2vH*Hf$Hor^_X^K z$+KlcCmih%_TbbaS+{kq@gD+%h7ps7aFIAi;~=LNJ!*I0lL0!oEF7weQ+ z(`Na`;dzS9r}}|%gD=5D(ASS3^SY$IE>g3#Da8SM;h$9XiLR^u>7G3ly9jn%Ru{yq5AVJ1y11Q&C-&)mA4&-~r8Cot4&FZ3WWP zTXo%)*Is@7Rl;0>9hTT)jXf6GWR+c(*=C)67TRc~otD~at-Y33bk_L~+it!67Tj7Mx=TiguwW0lX5R@PHt6)m2i>n!Yoa-z4!tk6S7^o2TDixe9pFgC|Xg z&w_1Dw_O%WV28pB+NJj|ci)Y7UV<$D?l?&`@7ZAoVI4j>#CAxY31LpzQmL_Yc#8C~ zx=4kfo^wd68Rmjy9xu{$4jAudlvlimpODa@i8@x7KBs9!8P3yNqd~j@L?^FY&#A$Uyw{7@`MB)*(z#h)c*h2LpwX99GwR1(->~hL zH!F80v)ZPv?XTLQeba(4i*WbzY)>14+y}bn0j+O;okh->&rtJko!_-x0|xRyY_bO` z9RhaUHQgZY4Kjd*cQ5Wd${LdgjL74vlC_sV`a3Fyz$Uh2*6UJCb9@6ngJ!H}q&k)2NLu(7=2J()>><29O zhzLK*1%Y?mgBOC~;MP>AH(90QC47mIYQj@P78)dj9hu?3>cuC06zCkP`A1D!Hc;zc&IZId8(w6kVr7d?k%U;q_ zmbv`pErZF+V*2u!z|5sClS#~F4ilEmjOH_?$xLcqQ<&9^B~$KEMGU&_LS)g}RUm+X zxC|{M;><`tc;ORuLV%p+gaA6>S;2uIsd!_g&=Eydk4W6H9`-;$JtCr*b?^}Z_TV8= z{+SPnC?-l#sYgFzWf20}qaOEY;z_J>kBL?k0_`~5@sc;2j()UU{PgHQ2SUWu@d+OD zu*y7WN*H;}gD93#-Z~urCluk-fS^YGqd{IY4;`Ek0-882|IY%UbDiNg? z6{H&4sY-f!nWjMhq+t}*2SznYkbn-fpc7K5KLILGf|Etgoy zy3ysx^dB^x2Vo-WQKOb2F)fT9=tbHwdVhh{Z)}*$yy)8|0i`(6*HnqLw?Qew(T-OGd zxXBG}cnErq1GJDr{Ik$f4{#mRqU0PWA*VqwLk}oz7XnDRu1oPrPp_7ALYktQPuu~a zfwaw=+~G@)A~BFBYHf$ZvCw@}=MjPcWe4qz5PwJFUkIo-BrY9E!vIvL&4hL!4mFEN z^C90)L0BaJ1kP`bE=--7d@y$F+Iqbrz+V>y$O)+#ZG(8{-dB%wfB?~MGGRH!8d!$4k6clsGC|@>v8(YWOFezo9 ztnz+plLs%(!Hcg%7n~GI2V@k(FsJMzX)}q`n(?|D9@Dwa=Xi6Rt<$z{vSSDSaBzt# z1Q`h#NcSqN@9yN$s-9QMSqs2v}8j)cHfka=L z)^_{<$Dy6A=&3TgJC1g?u+`D&2wHkJm?jTFR4wXmQ(96NOUF9mXOzWC8OmK&-^ci3 zWqF5BY}kX>$6^xijDR`JYJdJq@DZ5I0yP zBX-C+?uawDHCoSqk$Gu!j&!HsN!h-Zs*RFP^8yXELTV~{&enmMJBAqM1ra&Pv4feK zybt6+9Qiqxh@F$CydW#rnbpzra&UKV>7I5l-D`sNKuvNaXM4B$^c@n%(mTqbEBs^s z^R4A}Y0ckq!LT+dk4QA*}VdA3fV8|FZbUAAP@gJ^k$eHPw@% z{qaNBLfnt8=B{DD4&2%%`QBmq_9Y~C4fdQ%`M_^7oDceXO#1w<{=O|kj0^+053w|B zHUuxr2+zx|N6NgX$rR7a#HaAkVUtQE@`kQ;lblta0pLpAl%`u?4jU7?%=>9XU>cu4glSXZ3;!=oeClg4Z;csi05Piu3AEW z2qK0=f+Gfq0n4ez8qJ|%DeVd(>?9-(-RJ@A0VsZ?4k6$SLn3El;^z)SBrv0OKlI?FW|&w9}Hw3UT=S*5K1JFAeJYes6!pJu^{+i;=XYWxse;|g)EByu6t09$I>b3 zL@|~~F?D?A9a+w+DoBo~P!8|TC-M<++G$9H%D#fa9T$Wkc7S+(E^kOB#tag9%%Z)d zViN1aA2VVi=>nn{tRbiFItEf74PqXWgF+s13E%N8Zb-&Lf+ON_+a!c6400e=(i7*g zh$Ir6*rC-ba-H}QJQmU*bdps<2?Qr2v3v$=NP}xMrXf(tT|y@vj`H3hVDTV;eBPye zI7uV`E*j0n3=l{|Vh=oCQn2QsX$S>z_C_oPt7!z#`|e>Z%kpsYW^dNP9-inO#ZI3l zWE%YeAAqWY+J+a*U>@p$`Ih1y%!wZ|gF95BhO{P1lIR{3YOi?zQc#|6A0l%fjtad* zN-7@nG9{DT45Tmd!Je4npZ;aN9;6@a;U3KIZd!9Tm}=7gAtojgJUkOKk1GD`f=r?U ztk%nL@Buav(JpWkGz;SSM$w97QzBwwr&`P&oQf5cu+v3tV@H=%E7-y<;6g6wLM5PdHgwcb{$)zQLo}4MG=f7mDlIx%LqS1uL^VQ# zjsrzwLq(B-MR9{RoHRx$)18PEC$w}y4dMbWKpoZr7(wey_w;@mv`O&kSQ?E`fuu)- zG)PDSIGaUL7xhn;Ec^6~WK4!qjYeg5fMu!#>XcsAPyp4Ga_Q+ zU}BTSYL;YUS>$I_LRkyK9sVI*>t$xX2|KxtUztQ@5iTz!1gZvhAX?T>IyOmcwjkc( zBNdiscjZL9Bo2rbL(~C99=2Z6VNqJ5XqQFRgrsRT=V=zQX9{p4wZWsFKNFfWP9aoAtzNa z#2g8-KG=cGrmsG39R&^?)`|k-A26yzKS)Z>?*VLN zk2dHa*a%FuXo}vakV{C^jyxcr<8+nztq>v%QK=Q#|7kDN#b$Au}nrKE8M7 zCL|reu^<#^06Bt!s%VX%Xf}A)cX?sqAjyV)BF);XK&V4tn+Sh@Na{p_eZzx(3Cey4 zB6!7+c&+z%<#!;Imy4JeiJljR7U_8YXd4~aJ}NjPAYyMlSA^|^XyYJY;1y^a0&am8 zMU28xyrdyeIBr8Cc4atp3*v>lgfA}tc6JBx9P;7hl7km+;!`7NZ`O*XCWEIG!l$OH zssyqy086lbgs(EHY0m1cNCSyyD5hqrrX=Ja3WuKJ>710aKFAk5$k_HK1R()X4gr!o z_MtA@LUFi?iSZ7IB?1A4*rX)tu;v4f!(%KX!gg>9!wL(f1~??xN$K)fh>1AOzIKaC zV~OjmI;bkCB3O#QID#(9ip|Qc(h7hKWTm)xlLsp!8g+zMSyEQm??4w0*nu5j83N!I z2qG2^(m@U4fMT*l9WEA3Dl2vs<%W-Tn0)BF7H@jKQ+=Zx{Cg0Fn8`i?T)N&7#yY;u2x)=RR6=s_mZ47@aMoN4}zs7i`b?=2yW3jYY!E z0EEw!^@+lgqW5_=hz@*lFQSc_Gd#oGylpJf+8{)#647|B(Jib$!>%!-s4*h0X-}y) zrKw+$=MFK~7)+|c1JR`a;;=`$KCTp{D?6oII3rv+b&A%OV|u1j#HVM2rHR>YNt=dy zI%!YjLoPNZhFa;0I%x)bD%P2AMzIdrQu+{aK^i;c)~@Z^8V%DqBq%7tMlliX*(drs zB#!&k%C}1kLgF~GFP@IA%}QqgTccyUGx&}sA|<*P8Hyd6yR%KXzxy&2Gat13gBph= zROo?L5w}&=>GW=q?{4hauH;}5=)l7*EZe`s1cl>EvqyrnVH!m~yQXhA9Y%W~RQt3` zyTMWWh8?_w6~nd98@7-7gD`_&;^=|QkLile9&K~K=i>k&Pyv}Q6NCFg@&;^fl=hAf z_~Q9+f6uBD4BaIE4`GQj{6ze^(ObPc@cMKwB#6R|$ydn9PygBkVX-^CHT=9gyuKa{ z#C!bx8iK@m8!r=Z0jV53Fjsy5Tg;bahLx6=F9SthS|A9GrbD}XP(&;oJR{`XAn1G` zQu~JE7Hlp&qPq^tW3nGO<3~afu?s@6ce5Z|(Zp3!Ihl{pGeXfRq`hv+uD|fT$uQ`k zk=OyG(0zi{?Tn}=gJNX6!35n5Z~T1Sn#Zf~ zxn;By<&h6@eIO$JB+db%#~j(0h7IhY4xg>_&Z zGWN4mglvLG%VEYA6!91OcF zK0oM2IpaMeB7Wj`z29fV*Z+Yf3-c~N*xy$JsgoV&lO%`XTy|5qmSMWuL3`&xyIz1+ zEEe2Lj^60qoX&v&bWL~NW1ZwJV&(xvH2pF*4`()Ov)&{499DBU$rK6$(>t+4JF&jx z!M@5vLQ@V16yp+WsT0FuHXl$~?pwz!r8Z!}4Y#p$skFX1DW3g2!#&HT?+YV|#*%tp zvpvuM^Ek~g(eA;X`hMgGUk`620@nP$+)a%tgJ@bj|uQN3H674^qJw-9+S3gPW zHf}SvbmKNAs6E0HJa@muXb+-8-~dt_qG5w(_j@1D*S$l)y>i9V@*Sgh93xFjBS}ev z#LEd!H!&kh^f(Y?JMLoo4^20AVnfx#AfC^8!5=Kzqe6h-Nkvcp49edlGcL;W!vARq{Y(C(bOfe_}MYll$aJbwQk_`5f7UA}++BCQ)} z?_9cp=kPT|;P1gdiURxXYdA38zKH(z$wT-MCdz>%P2Lm;?;HY_K!XY$O0=laqezqg zDqYI7sne%Wqe`7hwW`&lM&cN`s#FI%b?Sh`iK9a*zXM#;s$I)gU^;*Q)HUSiuWeDf zc8TI;dN!}$q3ZnA{Y$v8;lqd%D_)#8>(<0$BgcUQ)gA(f>=}I2}6|tg$Dy&m|$qb~)}?TRNoOSRRHQvQR>1MqSV$i34%yA&5eW$Rq?x zj)>wp_w2AkdqQ>zRXbYVbB>QeJ!BF-p}B<*M)(Nl5I<+8*-$-W4rJy(Xd;x(ns~Yi z!8!-9DW{iI-NO%1=%_f;cZr^}C~iQa#-O3@d1xt;M5)u^1r4Qh;fEnwDUha6aLU$b zj}oftRPxkWl$ZzDbHF)=4g@DY_&iW61hC3VYf$~{+Uu;lLU3!YyAtP*8TNd(YE}F6 z6I4C=44NFZ*3uTKgV9zx;yP7MNmM%7LLefPK}o4+xmKb2?7L94N+wJH?NG?;a}cz; zXshuERPR7yw#SZ71N|#dzyj%;@HzeR`T&v&!wXfn5;L`JgA}XRp#cJU0IIp7o(qAK z9ioen$PF35!iP(aY^ljq68Ryfe~Ji&k){&mZpB@`!>&>CF4fZx0_pPrLJ#Nz)X*%M z;VMf^Ltr%0N<$DVLjP1fYCoVQCC^I|)dO%z*BvyFJAq16tw8S_KsG)zs&h|7{MZY@ zJNNJs(LZ7rB{$s^ro**xZ>==y+`8JGFWCO{4P%KxN*!a2hW`^|s-i`Lkwyc-qYv5n z&YLBlPN4oo68YW#dGFmfuVn9IHqeX@ ze^2qpLx46+Yv1kmnQ@bDH{N=iG`vvyOs=Bg5Y%3JavT4-vZ?BV3?j)NH-z#)23XoM z`!L&VX=qixY}C#O(c}OB{zC@@00=+<67YWpJRm(1ct8dc(18UUpaLO?KnXU`f)B)C z1QobI4OWnY6bzsTMF_$XcCdsfoS+E>Sdx2)4khK>!)S9sdvoJ>?rF#>pM2hZ)gGkO#2n9uFH8T;zC0dqGkEj#CuKcs$-A{Q7KCXMvqJqk)>__%I6^WB9I+6=>d5(ib5nM6n79T zUo-?tM}+eZWeP-dNGex+Nw9aoP@y+8hX2Rh?K($nOvW(~AitV+|-0$Hj+;(^Mcd{wFtkShe}x+pQ3&8!5eYg|1tS5)3LtW9C7zuwx@psK@`R1FGO zi!#)rOctpx%qwB<=2Wl#BdUm12~*Je)X!cuvbXUj3(yy`a*lH#<8;!3(kGDDqD*A# z*i>!VSx>?8Oi1$J#W{GRAkcWRid0BM^p#?_tt5 z17SA6eAy7NAVqIMc?r_+KJ@0iH;e*QK0@4X6zv!60rqfOHbWg0=mUjLp#iMhf-*47 zF?+(Tran--Z}m6>39hz&HLl0bBKoUbi4#V5!j@msmwfWa66VJe1*mifI78MqZP-VC zz!G>vv3?EVf4Q+F;1Xs35a2PT0%heCKc&JB@FWl-cmeESDn)Vu>##E7a)KndTV3`s zBB(z_QEz1iA^UI+{xA;`R}>VNNpkmgs1z~kFobgfb)$lW3$ri2l@2qsJtG5DnZ-k{ zwr&3)Kn&;>dg5wTH-%N>JH5Ak6bKYz2rNKkESL0D#y1jIh!8t~N`RFs+45LB;V`pd zR45UDMRA5d#(!tUeBm=zb|`jT$0B}MCjZb?M1eKN>(5un+gpMfPHfnL=~=$d7Rq zRBnY5_!yA;U@tr959NptT2m5J1S3S%6a8Qh_b_P2Vn-J_DxqXwalv&Uae&PSko%aB zAc<46M@yDNR2f;1E5(P}l#eB;I5ekmfYFgA5gNqtR`x(jZI@r@sE+I?lG{d(=D0BF zxQ^{O5%4IFgM}yds7Ep>kbuV&6lswwb&xZe93EgZID-)E;FTqiGaDizEZ_ltasf6| z0{A1AWH~bbW{H-RS7ln3b;MYV#i)!dAtv6#L@y;M0E16VG(+vdmy_d{e1c?m^AEgm z4_u-STvJ{RQ4SINtjQ&1b^#Zl4(o7&`*W9gS!R0K7CdDi?=_%T(Nw$173pAm0Fs~z>Kdx`b6BD! z`Z=NhgaRfzASSq%7Hfx~)25+MArGQd4{M@?S78R?^@I2!p(M%}2H=%)8K5yjlrefE zFcKpl$`#b{q9dB4OA!y|c@L5a75Z=wE()YeDx^;Oq)-~AQaYtnTBTNcrC6G!TDqlN z+NEClrNx*aJqo5|TBc^|7ZY-(hhZW!LO-E0C2V>nH>#!pvZFGx7&SttP|+jd!Kb+a zSbCZiGGioF$P(cKmNu9!qCzF= z!}2S(!j00%HW^_L-IInaaWw}+Qod3w$C9jnGGNT&ELCc15P&V=;jMogjXdON@xtoSjk1!FG=gH%p9hJ*D&1JhLob1$VH273Gm!o-_L!72FJ1MoaJaIbzkUAB?I{u&!u2Z!LAv>r;J6!upSIeFM{=z%H zBPm0xJvdu7Fm$sA!#oJFvt!${(}O2KYdZrmw|r9+-QzvrW3<^(J}n4&Aj2dggR$lK`YK1j)LpkJAZm|yW@U=kkLqW8%L}Wxhl{E-)psfM~<~k92ZQ11OW_&8is^Oio{5c)NyPQOM?{&m9$EJW4`lf zzn;XAb~H+*bV~cjzxcboe8h3QHouazAu4H0(e%B#L`;HManLJF5j?&Bf~ZA}!$sG- zOw-j&2i%VjoJ&N}zSi`<2JA|Pm#7e{PP@tyuXRr6x=!`;A?^fE@|1ZU_k^#PQL)!i zq!+}fC&a8r#IR??K8(abJj6^~#7%s}Pn^UEB~q4CQcID$&4+O{ zRELn?8rWs6b_ch+VhJN&W#Agdd}HC+0NyCkb) z%0)=c^<2{iUU&q?Lzh|C#mw5}%-w}0>;PWk)qL-&hDEVs>!nQYHEqbZWcQVtHl~>9 zoMZ!5U>Zhb;0zS&`*cA;V!+p8@nvEbc4Qg$UmV8I9~NSOh0n=UVILOHOh#w`cr-7D ze^FbNI+kAd>CZS8&J@iy~9m{A5f>0o3tz|OvhHf2_W$kKP zA7gG{w#z!>yu+LvXO_$?$J2=7W_&hkEYVafiDy4;XCW!n>Kh}1_7whiXwH^ZjV5hw z5^3EwIoHO1+NNvPRuK>2X-3!8^jFUV!L0_ZYpPZ!x%O)Rm=@NXR)4hiI|c1qxpvht z(xi5o*6Z+f`InkdZERSVY%42)hE{CHCe_iFc2%u*yOx@QEjokO)lJrly2vRl>~6y7 z(kZRW9f-Lz{cas1Z&jvw#Q3?gySk^{y0p96sU5o^)Y`8L+pPWCw7o*MZQ8Y6LJkLU zcs&qUTr>y_0V9{j2!U9-2A%qRaf6n|>R@sx=hPVK+jjR3Fo$>Rpm&jQ(7`8ZI`?<< zi4wCK2d=cN`S{=T_l&4&z6ES6+PS zH&zxnQxMkB4vuv~L4SOBf9l z=E;}nhUWnr_|l#If#U>&B?tj9sDd}cf-Z;bd8Hm;;6H{Zng96q!hgoVbPm>ePjxC`&A+ie#u1#-2uL2ob`O>_r5Q z0uhIcGKUXPhv4Xlv*(5KZC9kI-6*MDg7{cORfvj>=gw{?i+B{+?mUp_lo37Q?rez# zj*Y%9?<^8s+D`1Fc+BvQ6sU+0=Z@j>15falsN%MZy^8R+*r*3zi*t!C6&sA5YwF)| zj3e8lnb?fm7>&Dv5By*czTyvQa*a)nB^o~v(AbTlVGrM^iOnm_XJwQQiIhUQl<#N; z@i>oA84>qLl2qC6`8$;+nO6kKV_Nz13)zql`2Z0)R#&-^%d3%DiIX3xoI#I}^^NDA zaT2w}lD7i&FnRPtKM*yUQdF;#5s?r7J?ZB}n3O|l6iI)SNagl6-;_FEk327xSg+_u z@$^~g^JAYIU0Eb!36>pe_%~Cd0-=_dxA=$OByp+IGnm=!YL_ri@#}%bh8ZJ>nW}r0 zHWMKygt?c3S!0QrChx$QjtNIKixiZ3o^zF+i}DWa*_p`%nl==l*2(vNBcBZ6nq=iz zzE7Jrahti>p!WHjXCj=rMO}5;a+PAnQ=)IlB1N-o=|2Ek3$*nMR#=?x$XvX9*v!8js(<2mbD<3##v4 zT*N>PSH_%K^JdPSJ%0urTJ&hrrA?nkom%y3)~#K?h8Y}&PL-^QI=_iokb*8Sxj zT=;O}#c{`bXIy!@5-fm2U}qCbiH2=G3}o(H=-j%>y{F~d_j%QJ=jMHHozLI+&Fb0f zO?M6|deqI`mS7k0Le1;{1Ebrdjv?y?+7F8UfYOO4pXg(-DWrB#>b-;J;pc&W@PQ1w zt}dkPD6bHzXQ_cGv=Bpr(%BH7xYjw~p9?c=FsOU@IS3uP_#0Q@T#3X2)f6n>p zpnlNo^2;y@BGXJX)%3>Lw?P8BHCT+d+@f_ok) zQrAykf_2!D6!otESkr1UKp+pAgdkH(p_A@Xf~GCV02Zd>k6Hi=y1>5aiWF#_wxD34 zgem3P(O7o}dS_FKLd^)Cb9N9&p9ctfKp%qa@h2U90v*VVEe*04UkLQ&*Ix+UB_kTtO;tTMSmh`nr53V%-L6#MV@!##sa@*@R0{98SM;J zW*Hxsi=G+(f_G}ZIdF#bd77@MA&}eX&6tH?oo%O-w#ol$vbIua2QpyDCs%)6pmU|m zu)t~|>a-wweh2<{bRY;m_~DBO{&?i+Q6Bl`i+|pD;+Ky;`RSd%9{TL1U!M8xt?#~i z;lCe0eDb|FKYi-YA0Fg;zP^ZFj1V}d$bSxi00A=~Xp!*;Mjn`(c)<|**$;pEwgn0iDaaP_bU0_wq-zpUeM2(ZWJC}P2USm-b6@W(&yQICE+U}i1U zhdt_X4=XVQg(_sB3y<;uyZ8!N6ieX>TR5``uF!%4S(-qQ1&?{8a2`(-2?XRZ4~o>V zbS^6YlZ*Z`LVK9$A00Bt4TY#f2yoGhEl~$!w33g$O|gmvF{6dh7{nY_E+cBX(1!lP z4h!9*D}8%dzhp?mfnZRB9F*WWD0oDH7;=LT=->xKIF)md(1bw5;SdJ`!$Df{AWU>3 z6frqQJ0eDQmr7lLmV~W>uu>qbdsMd|u*%v+YdW!nLbD(MOD44rA-!W-=jfu2_z3eH z#5CqHiz!TG8nc{o61b)HoY0nZ;BI~&Map-!wI?# zp5p+ee2Dxcl1BUq#l0pEY2hk_81fndwMNl9m z985bNkdKR2L?H37DMCg%%a)!6s60~2;$#Ye@>tQRY#XXaJA%_4@|1rLRRp z7|nUNg}Q1>KTTFaHLv(|t9k}2EO5?j++2a@{g z%Yy*(UGI_yFV4Y>UPVNn5J|^k{t_R4?t?~3vB*5W*iVBL@F0=>$7FW`0n7Tzr&@X+ zJ9Z$Jf~W&y23ZVAAn*WwTCS3mGRy(?HCqh1RvnSp?Zeaxr81QXMm+TGZ-Yz!+JE>1 zO}tGma1)|Hn4W`aKVs`qg4!>FFszI|oh2X-THNFI*0s|8F3|e+fO>}aM@@wzc#(x% z-=cRT+#LwR(6Q6&ZgRLvnr&@CS6mZKSGKfG*=-Gy+uhRlyusb-LB?y`g0R)W${n47 z(qXQeSR|F#s^wq_QlOUbwXUs%*0ZQnpbXvhmq9(OyWp`VQ5od14nfC0{zs5|5@c!U zFo|#X;SWUd!k-Yx@s0`FLnKS;ydPUpzt!E<;y%}=ukl?xJ6K$7;zOtq;_G#4VK7-qBrkyT&NJm&QO5|p1$>2Ixq z>gPifS|fTU2%lvYIGL9DXjeYRnwT7Dx{yoGm&P)ax4cs?7rLinHYS<>`%ghvm|$=2 z3mEl6x>*YL!vj(AL0n1VzD6q7AP!Kj0}F*Bxwx<}Rv-3~t-WP)Z+*=M-?OEy>}fN* z+RmnSwymvgY;Rk8PO%4LA|dN4AM7Fevg7>}s=$dFb7nf(pFz-F5Ooh^p%imRJ7g8_ z`%0N0S~>u7ca+d1H7+;e72a5TFPFRN*tkOC zW%02JidP2FZNm=otMRy2A~r+F#`v{#%BR#YB^=(T31Vr8sJ>PYu!q5-INOO81oQ_9 zQHGYfGK9#=igNa@pGkiZ*QdP4@v*9V3F7og47ol;cwZ3cV}?JEI+sPBB_$49D|S-%c6EO(*wfozhhcK)d^OJp0qhPW|-3cm+p8(}Gk0HPCrQiluN6;)w7`q3Qd zXef(92>KB)g4meh(LNf`G+ni5={$KP!kGV4I~f zlTFF074)IOn5fzkzK0OP=3BCvf+UKmvn8ZLnA@n!V+hSkDK2>cC;T%u>KU#2uNDNq z?JEcsJP0*>!C8tyDBKc0szEO_i1d4iBrJ$2>1nOr`bgo{T6JJ*R6ma9cfM9PdYH-=FEiq3JM0mCABIYm_*41#FNr+LbQib{C- z2VS^`s*D?pc`bvW5RMVBcrYBH;gNSxkC16Biok~yIsmX#2Y_jeeW*%3Y>2u98KL75 zU?YAj7s~7*&E(6w1WO3ui>GA3%e0&4Sck3%nc34rwB(q5xWoxr48$A=+`P-RY|DSx zhqt^Zxui?Z%u8u(2*^|+C{fO&M2HKx0CiXg{^Omal+NuGE5(zEgqn@Z;Lex;3CE0y zl87kV5YO?PwIRWY>{O7|WX~9TkO-0g3PcM}o14#($cnA#iaS$@uo#QoSkL`b3$}2J zpv=y`m`DTll<@EisR#`Dbd3UaP>fIvvmDEjkcS-u6tlmX;YD%pvipin5CjrwF#gdmX@Igu2J3;KDQ zfHDX^8<7fOQw_nQ6={(>P0=7R2p!qY$^cXr9n{?bL@jMC!8(y%a*_kly6wA9>ljo`vSS*+aU_}ar7*lcoCpp2?SG<$v(i1*e(d>eNLjes|Wl>kvjrR*vl8_g* z6H-kXiUyR_+@RD^nHgLWD-nE4*E|SW2}4@}RaD79FZ`8YiPQ^K)m^1gTKlyR15#ZJ zF-bg^>$uht6BqnQ6PbibqYPAO-HgfOh+buggvl4jn;3lXL546G31QcTaaZemE(U@U zv5cRzL>$E-8I$n`l(C$ZDUrz$8-lo;zrh)Z2%Vn!8It;(hdmm9ZL&n;oX&}wweh67 zxf_9Sn}2{Chozi>2-%S>m#aA$wdo5hI@zzGSpKwFQvq1U5ms>LN;;w4*66Sf1qaT2_9s=EQsI|A-I0}ea{24Dpi-~x8w z1AgEHj^G8BCU#nrcgl#p4WoLyIfK$C#d-is|i?`C4WzmSZ^9zGEgX^5P8s*s%DsrT)<45PQU(>@Yu`=L5_&7W?Cd(A7f@jTvj? z#FL05E47tl&DZ@mle4`eBWNC5I(>rBDC-F5v$9azR8spFn+r2oqYG8*y)(#~dn zvxRg2G(F_B%HwFCx@kaS=5n^Do<3iwy zM1z1fxs6-9eOtDMYqy?T@saDcrt7kHxEtdBAvI0kun#Kn2>_E zgDC8Q;NS#`n|#~1i5A>lK{}-?xP!ytr$g$7b2;l{PRZ1`&wk8vAUdln73wPpkTd6j zXzBhvxtO*&gFZIT);Z&gIfZU*o!-KHL~Y7e%F7PFb!fWHHVmj6?b}x4oJj79i$a;( zZJO)t9{cU~)ul(}I&1N2NX#omHL;<@mRvi#=}0@Y7HunPI|eqV^-k{zZeR$8ZwZe7 zZwj98_m=Pbrf>YV@BHTPV zGwLdo@svRETOK`6q~X(hfYdW_(8h@3i$WWZZXBm1=j);N3k_Ly=lKgjSK>bdgq;HX zKXeJeZHbgC*QM}=maEm;uQgSjKu>$>oj+mAuC?!bSue-I46~ zZ-jS&7)P$CvvWkrR^g#`1f7G7M;P~AgAe$5bccOhlYWf&f8_Ln=f;7|G5xW3Qlz`PK}s5FY3AX7UE95F_jA8Ezri}!i(~zceWwlx^GX2RXA^lR(Z!~< zgEOk&!-b^^`F+E#%)x6oi^X#3`EDK#>?1^9J?!LS`8r2BhDPv%6Fv3D1`^0n(c08QIR*V{6RU zNw`xm%hM=WW&Azf#Gw1+cR&0R)#E-@p1}tNtb=^httEtM686b_iOCA$fOe*Us(9AD zxXFz`EM5Yq)Gpht#YvLW_ceEre27{%N6hiymlOE=1G%ZP+m|eBwFA#s`ka@P47C+` zcmUzJS|8h=xC6CHSYTyF;9yzc%`F@b1c8u%xNJ7(R6SwnMBEMs=hS^LTtRdEn8a@Xk7bDb#O*`-;QPwe2ABPr zYWrJ`55-ig)fV>7CgRmWSGXJwcbwaOQMdox4V;~HhN2lYYaH&mt+V&nNE`<7LfT%d zsLp-mrq+X}U#`pX%0BORM3iYa5W>!Q!d@dz(fmBSUQ-6{7O<|dj07%%k7=GC;Y7^d zXTI&S@XGx+9(yM%&8}yEpUFCWj%Mar14(~$2Hqas_?o`yX#>6-QP&a~Qnh;@?q5U> za=!T8tOL8fkq!q)0spe`6h!X<>DeKeLU-?7j(H=&V&l-oT(N(1uJIywhqvIstGj*j zXy%F*nlB%?1_)hGhz}WUPKdV$M+gjDhZrod{{SpaWnx(W(i9 zcX`yrk>3CMrle zA!MP^2tx9ZMDxMWhif!wDq7l3b6*I64fiDF4AO1~jT4;pK`lLl2ca#x+PjEkxW@DOcRv{+1SUy|rJjSC>0 zjYpFJa=}0pM$F6RE`Y3EbtOYuT(O5>gjHOFn8)orlcIS5T(R@vhR}}(ISrGd|9(XV ziQiJ0qKfagNB$OkUUHp8#N;~VoznmV$U>Vl{oTu#HuY)vD zWslnYs{hYlBeTq|z{ zIW0!A6&k*ce-&^&S{rUCoy_~c!1({;#Vhq1?AAvbD;K|;_C}K{HB~J)*!<_ko2plv zopwfYl$vYSe|lXVt&cW;|J@mcj6tFNf4uluOWn?30>+vp9LcSGW+vX^cjg0jv*|BvnKUr_c8yK6t}7?7kn8*E{&YCbqS2{?ozp(`(1m z{z+z|XWS3jqXkjP^bUeY*)!19JzTTq_MIak{gPn2gm3f7N|W<3#ZbVD{N}C4iH+`> zgYfe$9WYTCKBPG%1bn&ziyaaFh!bsplG>2C0WnR9Jc-nrhPH1NQHd=>gEk|{l76ha z&HJZs%Q1R1o6ByJgsD2AUZR*d9&r_8I}+ii#Mxiar+oE=oPcEFZ*w#)0&Rya%%mp+LHQ^uH4;zIp_TgQ9Rn=EP)}GxknPMfDP?W4B ziDS>zi2O^du36g-T3K!6i|z6}3)GevnWl0HN5- z2}O`Goz)@~s9^#k+tR{^ALr_cSFG^7>FInH^K=*&(~KRlE>18rgXcF$@$`m()?4xx6);1 zqE-(@TVj7j=qAPBBAejh+N>w=2%t4Ne>4>RdIFJqM=Dq7_Q%*{rBLMBr8p<6G`ZNz zlWR~F*Xv&oWo>?{m)LCFx$cGbD*UkF-sj-}yfIwn@+8zgb(y&xQofSlGtA)u2;V-r zE=u76>WAcc;L_xy4{_^FbMJniOs)m8mQA+6K_8g`roMt6{VsUMi7UEtqE~aG^sMGh z@V zcOS-8((9eL+wu;{S|TA|0^61H33a>Jxcpd(A}K*)si45uYsdoWP_E}cw#`=lKN%4Q z-^xP|cF0~@FkxuI3gViF#?x)lo=B9aZ6cb)sV1Ov>2hFZ*W%fJV zTc~i#{A_T9QyAwJw(v_g_;~7^lFzTJ@`Fu0|8uVpX4p3Jv@8y7bV3;Z$R@<10h^$H zDttev02Af1k7?T}gurhN`eGd~-x5P5DO~^?Tav8uu88xjnina%5@0cyj$-e9<=}|j z(Ox)FW+K!${yjo=Q4y#I6-js-TLE##QD# z+YIU}<{mYp`vBIb{EEty0EbdVJiSIEW+zv;P9aktEoDhW@F=;H$przp_K_$P;FS@5 zYC5N05@I9E@7;OpDgCuz!aDs4-n`t@7*?st6Z>+z1QDWGX<2yPbcQTv0XAZM zGRPW|JHZm@YBa5ZMx&ZKfv<&_wNgt}I2$gI%2;IqJvb>Eo_5Cd*htcGkd9nX5kogP z-c&avF&FkAm!Zhn?yu%XQjOHQDc`dg#D1!y2T7Mv2*UpTnKdy#8yU8$epGwe&&%(xZ)FC$2 z6Emv+U(ak#@#ycDxQ8lagyd$t@II_2EmCcA9r(e0jE{dDAOa;E6@RT7okusj zwkgQ9+DK(7b<|XqUFrB&_3AX_P8f`}srU;3wsc0OYhD@aju2B~2VYp{pgLm^iuv5k zL={y#lLK_BE*|KFjnqp$B#M$`PFa&d)0O!-e4(JCcwM0dHBnA{E^`Nk=A%)e3@j;A znJhRXIPbp2IYtsa+t2_we2PEOV$Qp3z`h)*62~1dSx^9R&xEHHM@;qI(5SQa7a5b!vyx?bBAvmlvT&g9WHX8t&W1avg?2jyaLTk&3b zGv;EH7?Gb;V^S7Z;YAo1Dyu*+2N`SBhSVd$8jHcOvxV7S_dA#IW8=pMpEgvF@8QqK zCs?aX{r^7HX7VQh8`*Hn3Sm+6`y({1MdTGnlz=C*&fo)0>HR4WDCVAucUnW2L%T;4 zE3Rb-=*?`oC@dMfE0f9p4Yjx`H~;atAhvlsNM>3{OfP+ z2~TL*Rr3ix*%sQ_nS_gRP*EfcIb3K-?V1UiCw^!Ze_qyffG=>`K zkJngS9nS!MzU}8wuBYWWv7z)`8SVJjQ2Bi7uvqfyx_bkcLi_MC|4H5{CHN}iB0WfW zS`DKi4!$Xt^c^pC_f(ouQ#okJVqmuICEd*Xxkkk%we$;&OC4qzK*jsHN+JF+XwJbv z8ACVAyZZ5dU8nU*T}4iWqBedvqWJ=*>iWk7?K-lH;wl6z3OyfWnfXd_n;r<7M49oq zrU<)Z`t0_D3Cnd`;^WWu=Ako;8NaRLKDAAAPB@BYh!pRVd9fRHF^g>=U108ioExRA?<84A zQiIBS-ix_I0vK5_{usnuv&c0$v03=y*+A}gf{@ii@^!7Kk;rQZG#-mN$&&!KME_nhDudK&jR0c;pHgA`Pyi0qWX z=av&(EC5#O!Dzo>aK5A>lnSSAhN0rTZ?}?zcTsE8sQv4bw}i`xZ;TQ%>G2iRCYWUdaRz|Qf1GU72>y#=-q_d+-T-PpAHNQdz%p~lr%SoXE?&|QtK*|A_F-{aJqSMf{+*CitEy6qS4)u?ZDR&krwUSD^ zmhb5o+pJ=OhkG09D!PGiMHWr86R^>d~&fHPW zyee0`mNsC9S#`DEFX)J1ks@j_DTw{DdRj;t2W`Z%nPz<&Fw0U2QR&sD_yoc!?P9aT^>7;ngB`2e0PbR-3rbf4hL#jU~I=xCR4w3 z$#3&zhApb4kw|6?b353k`8xlP?Vbu~ME)XDP9P?TdzMT*$W3@?>dA(aW8kcwM4~v? znq3B?EI zllU^Tdk~X$1qnpc#2B{Jc9@B;4qsI_3wvF@Iu7`kH#lr2|3WaIIIG}ITLIZh0mVZB z)tf>Zp+Y)?LIyj+w8UJ-wnBchH&z!U1zc}Rwp4WM-n=m@I+-Ee-4cp|2}u_gbq13m zjTDNj=d&2#j&-X-6Ky{r7F2i^5Oo)8ZWXWI(V$XO$h{%j3ZWpifxtA9JiY7^FH01X zC?BE4vSzslf>bCjRA}|o$QMu-U5J$jH3?EF`6czIf8WluaWzH=w0yGE>~I3#5Co%# z0l8>L1c|EPc=lMqZesO{mr%NdEV`bkZ_w%NYzF!?4SL-qdhRAPbZmAe%|-+miI$nc3+hRb*QnR9jWkl5Ye1IT6BqXIp&%7jNkpIF;Xd z#}GlCkq{BJ=ydNPDOX@(DQ!|$K1vH-T21b-9Y{tm-zQfK=TIIp4gLUcen|^KUsv8M z_bg@j4zH}Bz}H^eu1rCFi%$}G4ahixa4J3ud%kUS97d&jVGRBV9)6CWRGi1}d}!Ajtk+a{v4f0$du6gM!>D3?9xX!=En$@{5no&4ezwG~wj>C*CXtH#nJr1T$Vau2 zAbQL;s;@?!2Cx6~Q?sf=91wreG|f@+Lb?9F8zO;j9&Ruv@Dn5_!s}#SEQfI+ZyNS9 zNm|w~OxBK0-%$(9k8jlU_n_3?G4FKLn@&D^7*swFkRDieT@rafo<$oo?P zehg_hl$^w9f7>95b|d-ahpbGE9>eNdG_2rw;oicBvWzP_i)zj zq4VpZTJvBQ>0x!~VUOvdIqBgdQ(Bo5SntCD2txw@wC?{)#wcYu<2Bloec$-QLL|G5 zzC0NF;(awu7~i{ui#=_I5{Pk$8pAtv*c&Y=Z7m9`EOo2!p?xiFqZ-zJ>E#QJ0!yt; zsOG!NK8LU_46XstmX@Ah<&L|H&6v9JlgolxH41dFWVO;?gfp42YoU8UrCi$yuH5hR zq@C|UYo3~H_0Ha^L}yS4=AqZ2cI)N!?Ef0ZH9rf1w`d1#Onu4}chzS`*+7VbA8 zxIfn}f-|49CS`zEfLgA2DN&=X7l1rP?ewMsS^12%$}IyYoSPK_Aw1 zu&Z3Sy!w+)5s}+*^j1Eco0wf!U>i8S6Y}s!Z{pZY{wsL)5WH;pj!&w2BCK`dq@v>x;qO)uuxR1ZzjUJWQL?Z`B ze?np$Pm7w{Xv3!dawqYnX^H!SxIfzi`++HDO)loHEMY{?YRn5fp?8eH9E+q7du)@S z{b_A&HMZ^|7Oyh|@;gx=GLFn7;dJTb40hfM)4YbaBr*oZV8RohY%X447mNMv$ojD- zOY0El2)fSr@Wlj?vy8vJhIr*CglHYi@2;@B6Zw9hbBp28cvCRxCq0kc>|f^nHs_#+ zBpZk)Gu+<*o|&$U&Cu$q4qxyDF;jY|Q#AEcdUNx{KyCi}DRLyKLYlWbXk55Obq2$A zMrfI)<>?iNkg&tAJo61%!&#qpGWnI#!3`N+`fHfo=^n@#3E~-e(JruI*^KvDBQF_p zc$p~9WIss;3*dK_ty$Fy_xbwiMfzDA{u{NF*`EaOcU9=?^{wLWv74g4R=&>!Pv6{k9#ajiy7 zKWkj%K6fosZoSB;=iNBv!4vY%Uw5IW^Y#({{Vy1YEaXUeVVgkz7mTZKOGgv1{|Clj zy*SPVy-0IS(SY~<%70$`&q%~;1hEB)rnRj9t?5L{!6k!gF6++4<89Y(QFj#kzbBbm zhZ^5ha>T;lXdh`+Xjgye&(c2DsWJW)fI_NsqE~Ms1*)m-RvQz>%lso-m{<2-stxJ)CfF2fi@XYW zY=?5iBPm4HeE#JE&rX+|HSX`~PP=|%*iNsDd!sCp-`#>urh|_!`xhB=&3;`Y?O*sx zh&=!lfq8f5(4$|-z!NlqOLUf+B9OL=T1&dm&su6Xh}~ItO4SvnP}JPvNl3^{>q%Rr zbP+ZZZUJZAPgkMqTG`s&!_Tj$EF&@B{pI36>3#5#%6+@CG&es9uZ%JPRr2gVAih5w zjPM^2ui^#CQ%4z9^t@qQgDI!FmZyh*$~1 zWCeiZ=yD8jQuD}k*MEmNBS7iCx?UfO%`fC@#P#@G!7J3tRM&l9w5Z5-F0R$pNgdBM zNay=t+Hq5uW7=OV>D`JZFd;+81p4^$??D1r4wE5%|FLkfuYYxq!w3$L_Qdei^WCLG zds>NU(SPVTvij`5Pr=NA<@j%8s;DudJ;+f8)7%5s=Rw@GgCU!OAA!Nw-a+}mx$w=k z;2C=PoPdXmrULh+XU3$ZmEg%dd9Cox9A7WAqdcGdYsN1BwenXq9&)*F{+{RMqeaMC z@OvhH6rX*Bq>Ct(9N&=bQq45R8a+#xQO{srAodhE#8;j#lPVrcxZLa!z~{2Z?x+*9 z>jy6k4>F^o#EvT}3ZL<|i4~*(StaPkE&V|-!(KYfLQBfnMsVM7RDUY_*JfFZf@^5? zVDuocZUa}4R|6GdJK0e#YcKD`Her+Od>?L`&$qDHB|tI>K8;xx(Iy*0fHd@GUwsfS z{ruC4aiodLN9Uuz`>?_1XZI!JNK=m$$5Od}%kGgmw@dcT>z)hYouXcwp5h(1yMco_ zcWddC6c5{ppFce8^K?WWrF2!78M)mPz$gO&+ut>nP|niRBOwBE(%*16k&*5INOvO_ zz#bfJ2Qcq>o+5I4WH8l2y#MlRKyJRe=t(dFy}BLEgTSEL5e`}ob3(9E65%4mG#>7c z*+-8*CKq&9h@H1yL;?6gf_P&l0odCmyL2}A!L}qZE}<5Jj}Q91bO8=n3k!pDQlq$!I__ObL{z7l_QSo5a(Dkd9?qTuJI7 zOfDM;mdjM=7jD`&GVj3YpjV@enE(zAiTBw>Hdl?I!eM9F%e0C$tGB_2BPN&i89lt#obiV=^f@~S(WGd%OxvQ5IB?4Vj!P1x zwP`RLZlA`r(@-Kd=j#ALgPaoW_cOp{d|aeU3lFWpYvm%yuj(r2h}e{$ay!n|2Azi9 zwovM>oSDq_GmPIGh_iSD#wqEgT;JW3F}f5#&#B6Lx!)n3t?Q-04l~B`KY*glmLae4 z6cHhoNu&C(gi3btqs8_~LebUzRr~k_>WQRu(1Syo=%fVbLGRuP&0rS*9cm>H72JK) z>-^$SQg*Ou+4qO0xiIwn%8j&1TNzENi=+)wK}^l>7GOhC>g`nX&AaqC1((-k%l}PB z)#-vyHpxVM5JZT3I?}!&Gx@cSi&E9bGZp|D1VSo}4(*CVxGYWJfNmnd6m(L}n!OMb zJd6w&?Ps&Hm5@l3x8}#t6u~MjM)L0Ro2y%SErPDc6#V!R$eRsOjG!vSGWqHE5SK?y z-&kqo*kP1K4OD5$1!&mGNZ2!iY|^Zx*&HKw8P|RzH8-kMlqU)a=M}UakU7z+xyoS} zb6bP*oa~RCK5G;JWAIuLe+{{Cv2N5UGm_69VJhP?3zdJ0(_d{>&?&7DG(SY=T`hPY zC|)jJ&$mQNvJeB zA8}~)zKBNr%G|tE6tb z&$UOi3F0l539iJeOeSogS=1g?BCMZFq={V6ZHEItK7bsMcr0$?CIQoTHFHa~I{s)2 z93GwGM=b~v+u-`_^ONrs|xM#L*vgkNv_o4d{?qh)jO`8Qfo)n zp33W3h;K0bHksRRC(hfm{DnosNA-jHEt!>ys+|34RJknLkTGlgBI+rhbYPrOQqH^fIYAkc9; zc>V5Eq}mvD2<6ZqMvs`v^gqNT1zu?JNl#9;M{S$TsU7CotXtm>;$y9&>)FOS{_W!# zYu?ZvNyyz8f7k`y_v!;mZg0P$r^`@JQO$l4_}?oi=ufjC$IO;J&OA}r%{YC#?(S~Y zlca<$XV2RP5g@IHr3Te(CxWo~TsB74j-Go@z)g47;b9&}RiOu`KFObW@9Q>NtH_~c z#$mCXs0^wR29UVym`wlAcBz6k_6JrFy$@rQyzs?l>G)-lDq?%YUB=Y0c%*6GICn>2 zP}jUfbk`f2Xak~FSJ29=K$u-KP`Q0RLt=uIY~-k`b(U|{u>BDTcyoyV2XbWRVk< zk9elHCw+5|?=4W?X5nE5`598@Uua9l1iYqtWiJ_=JQa{W5?M zLm&?l8G2ZdmjLhsCo<0_7sP_^JR}G$J5nwi_+~47ZU&d*UdqF{M-$o^A&@jDR1}yW zPg%g|drmvr#!tr8=be$V>)HkC0n%<0Y4IX!KM4Sc(eEy5Rh`j@(a~|J3uIb>*gXPK zG&H_lL~y}WEu;Qmy-wXeV8BIe5+u`PEz*=MozVzOeGI5E#^li}5@jQ+r#zrq|R8Lnddy+wH16n8^Aoq$|nS=`BMTf~Ou$7aG&&DwvbsfH&J< z?Ky&79pPv5A>5X!=O7i`OR+Y%oZ73IFJ`s%tj*PPzS09HIqdL>y1VpC3sGaByA~%pO54hDAlb2>&YY|yGFbF zMqq+t{_@J+*Eo0f?>BEw%=f-uw~-Mhr*miy+5Rq72{ zzd`a=jPMRu(%e8l;br-$J@QN)*~P!-#><>oqR+9NXIFNPs3hj{q^F`j_HyuB=p3h+CdTxnm(lE&{gl6{)+O~XrR6$tYHpM`c;CeVEcoUzgRiXJo9E_jkiPWWap|virIlMcb zDxisiGCv5}MS zE8WBR=kymMw4(IvBjKO+NmiAV9JnLV0vUH|8Tod^RTm1`-lT(dU*iIN2`bnhOL({bdDU!+vA^`Q=1ADjh zvmJSjE;@4X6sorus#($|mlx=ASRl+fQg3u45*iH~8V?i^%%rLew_)xRZ@*#(j~*Z$R&Gjb~zM z;N;uXlq>~H^Zn)`g>>lhY2l!acg8H{w5%>gY<9+$e#UQ+iU@FvaL_(bS7gQa&L0wN z1gmXyC<}OH0P}*SA;~~d{A|kZwY$wP!Ym(7!i`Vg(LtbecI(L^zZOD*=oscrR91^m zhv?*wiW{_hDzE6vluQ8>3^j(Pz)zdi$(uDro4{OCjG9f*#HOVSy){zyM@fb5aMkC6 zwILNo`v+NWWJcALrWqbaLRK?7T8S=pnAc404hyr%NfT_TJaA+#=cxP=7aH|gW?95+ zzS~tYlahjK9=8%jlUtmBgC%*AK(keXw08xFS#E;4F2sMusGXDbF$qx^Ldo2f3 za9FU-Y!e7ahT*|JI>N5&w@yWCnA0>fxy{+HV@g*v%aPudx3OqH%fn|XR6|)rpSefb z7wb4HB{6&Yakc~(DErJKTe2!O6{?g2esWlYI+H$N(Xkb@LX-w}pJ#>BD$9nrIRrRH z&s{hslB!u1wj#Q!-^PUmnd+D+YcX#hN+JZ{I>FDy0g$Jxi22ao$cD*gU6=DrT z+-H~RaIO)qt$q6xg7n;Df)LTGXx~x&&N2wK4f!|*fT2({x+BYh0s6WNkBd48sjUt3 zstb0iOKT91V5-BTg(dN<@c$j9uowI?)U<|$M(X+}Mw3T&6_Z7&eY!VKhP9Q?u%2)& zN2kBQ%((- zqV+2yUdb4ZoyQBU=Qo>Y!9!2HsN#S_s^qkag^!t1y*Xcgezk+(WFO6;Ct$Vxk6~|hqtttWfKU@ zHm5(fBvH@=3EO%96mYQQ`y{*&#rdhZ?exVExX$n^`s(ygE>Gb2-{51*{sw`wf5MRx z@g)rQ;~aDI8xoV*r%gJaE^2-&x6Q_UyUWkZh~c0tm}2ss zBgr{oN0_2?z6QH}1B!nGF*>3CHU)vdeaC>*X-19h%`Yqel)67xlCM)pYCn9McuSBo-pjLDD=tK)N@W{0khT{5H47Wk3{E<{Wz|GWEsQYF;_e zegVehLOt32Yvvbuq)1_aqjbZicYUOndfzt&7t3z~A40lqHI3jyrnO$ye_`jB4>v)A z1%w%19eYH2o&YRRmrUWa6 zHDv3B)cS>V`T3_8_zM)|mZs z{gZ=>S1(TUKVH08-tWz1wbZ@yMym(Ms~6Xw*=UXC^SrbyJIkHOMRP_a_+Kxc&h2>g z|MTJo%`T_^mltPS`C+$M?|A%=eXZqxym&fQn>+j2<>~S5+s!VM9r!Oi2V%?DXpDd8 zmPB0UXyFi1Oy%|^CfQgruq$Du2JKGi>BRW)34dPal$mgxT@1S;>Aji@UOu$snV&-8$kwGN%cDWc^n|4o+d3iej$OQxj(mVWNowG?r~k{2xd<8KHEF zybHZK;Q6g5OVg?y1np>C73w2tRufXf1>l4M6`0iEsd8oqbQ$XIODoV*e1-(KG50%@ z$P3Vqy|4Q%`VirLD$ayVH_8uDuY8GP2|9H&LXK;z!fN#ExKxf%2#R%y`1n&wVif6?lmqiRBBk&ZnbI1!X?k+Wl8pk zqdXHiQRBr9_N0y^5qE?k18-d0vHN#((dys<{nmc#0|4)n8U;FCG6Ug@d%UQg^ATU; zUy!xXzs=Y~vbp0M4>2bK7ovM5crQ0Ks6Zjl9JK*U~N-grmy?9daWli%vo#>(k80p6J=b{iQt!aEOWE0R4J3@Kz#WQ0E+ zrDsRwstfJOEiC8X$sgZ;^3&o&u8{ltGiAcQeAT&NcE34VO2Ono& zUr|3nH2M(J6h-g>qbp;4e4D%=$B#T;C8+S|RiXJYHem>93m_C(s6;IG1HR{bMDe%-{E*evM*)WVNj~Hv|_8z6VUj(W$d(_Rx89Wp6$WAHC*5& z6Dd;~s_>RxRcE0b3D{+YtF$B)zOY(n+hY7*{oO31%SDNZ#!%~x;VgI;g8+5@Sm-9M zIuf&1rj|g$IoE!`J3eLjISp%SnqP!-+ zk|AUsEp73UNUBCuxl)scOGM@${_^9C&BA*A#z#3aO^!=f2=ea|?ZlNOgjEY9NEVTN z50m|UVx{EdN4rATh>fz29}k=^sx+Vnf5;9cay6i@BTm8&c(Qo=y%h-f=S+FXdqAc) zUok1qlCVK;S)skY1J`ZNn#9hGdyW4ECL+kPhpD{=6MG@(D7}f&Lvi!y?8y^Cs*IC= ziq>bzfkdl?(RHDx)dE`6#6R>cbqO_j^;mr5TpiNzdP7%$f<}lCNTB99!Cm)dT-8EG zNkdw6Gd0VYLGoTuBjArieJHzwyu>jpC?EM7>W^)+X4l2`H14`%vuP^=4V-pW*YBu@ z_A)5ut0Qmt0tRF>jKPJ5mRo78KNTX&X*3eKj^@e)>El%WvS#y;2GtX(C;S$^$}KZA zYM%!YXG-)aM&w&if+e!vqDhX%f&?0nwq%ShwoMQgU3ieX|9qSXW?$S(^Fn!5qTEPa zz^_{w_ohxJ&hWx?=n-8Jusm57JB36HmELzB;XIn8$p`~noby$M6Dsnx$klXQg#EBm z*EMrnBhjk~8I4;u&0CFJT)j%3!$qER#v*O5{NrEVIw)tA84|xWeeufQa2_@@4ypWJ zPLw)58M2+!6oD3|iJ^2`KOBm5#tMUb1JWqPjo_9=4SmTomD0KWOTHs@sqmiQU0{zayr-^8)@T!ZL~%5MG&~ z7&?kk*@b^Jd{pidgSiC=Lna8rhFu4;V6kMT;aWdeN5#11D%d_njSvoz*)}&?$?r47 z>kSi&R@FvTJBIrSkCx%LguV@Nu&N|Q8sCs_o+nxh!#7$uXmZs#S1v$7A&3p-7#bAT zE|9>Z+dW}-vz$WA>|$A=k|!@=wBS(8WKG(O`_W40955( zTl^%^M9ZRGK7d8uEx56&Oex*Vk{#xqtEjvda{s;p%|UKAJi-2yWoya9y0^Evx#s;U ztwZ_&@(EWJs?I9{@qF;Z_TdPdLkn0{(divlb`}KY(teLRv`3q{4O#m6m*f7?#Mt*w zZxWnb&suzF9ZSRe@B@X1%~|Ejnd04%58YKBJ;mlPq!P6#BBZzqHLr%^CiJ?{IHb&H zlqIu*6(dvftSsEW_9j{>zr|u?-39%RNsIk?KU0)4C{*n5JMEUMsV(d?iaQyN9D;Wr z&Xop_YWd17qOYkcY5!Wl>-Z;JZH1u}%k=WHD&XHbPK+pv0=*^+H zsJ#7PGvYWil8P;vCFK4m(`>rmOYgv9MpN}}ptl*_B6Fcl)InE$*y7otKm}s4wb9^& zNx_p|QK$Gm|1es~LONMI?)CQ{w9V=M_WtC|6F;FAlTd1wj#uo`slE;sT|*8h0Ke33 zhs8k5o_qZS@+Fw4nWGwp=j*M&+aCg zh=o)&rqG~5rhi+!sM}P8g(PI=H0D6s%Sl>~ZMpye-=!Jb_9WW`fsR*K`4T*$LRnGd z8+wjJpEN$ov8epo+>Xdhk+d2BKZ|Ub3qWX1Ey=w;gA?Y)ImStl?$@I1OSY)j4**|I zOHF7-)mRvM02d}Xm9}q=G+J&!d(O35#y|EP3$fAWr95pY zRWcBbL@7<~_CA~UOU*?{eEMe1w(lsL@#zwvJjYin;0t3=TeMY}?5cc(igT3t z`MyG5#yeCdQ?=5NH~ls#5ut4W`;`809UBu^v|~yhR6c5ZT*ZlusjPPT6T_g3jm<}i zL2P-su!>}N)4`;$NMHOg;iujY=wb0#(mq2>zA!oUu0h$6QvXf3+(?W};O;>_ez_xR zL1Y`Iy5k@@Ntv?)nYGimX!Ho850Pmu-EcO8cDBdfQ6^LBnD!_EU3w6sBAI2{n}M{n)t@J5^4h;=>yS0MOyU-XfqPMz z6;Xu~Q7-`Wv~T-4*cB=cc9Pr6`H8y0Z^Hakw#wB8%CIBL)&_j*jTJej{pq#T~NjLG|iE#PBiAz+0vW3`S&&gNr?Nym0Uq~}jC zf1MZ4?T&Wj<99h6hnLeKMv-1|#`NZ6`VT7`eHa^gk{Y#v+c%<157mwhrNoFI^bSkM zjKE?>gN|9EDyQ+S8{$TPNgmG@D|HT3P8h|$KTqtv3pG4?FC)!5M|Uzvht<8nY~&Yv z7Q6QTBBHpMrJzKGxS#@t-M1TepA+cQabKXHeWTi;;`TDFfnj4F>^Bh z;xM_*c5qPjCuJg8N2&Tv-~2N6`L2P(pR$(=?BltKv(1T0oOl~Wi*LAngye~F4AT%} zX*_o@KK1%tyBYzOJ-8KIrK%3>Hh$5=Um1YZ^Ty-E9#fF3Aw5eG&yb@-rwDx1v9>hn zjMOlwht?R(w?d|blBRfsAe%LicO;)sTiG$oapm3M)z?9%xTzycd?a`B>df>t1l6Zt zb^sDH1UZx0BE@z&ngeKDvu`*0PvDzD?a3gv38@Nmc}L=#;Df(4x@0&&@@4hBk(JxS zH3sI-O!wJWNb6VV#@D#y*E-*?4c^{-`2NrO?JdXIl)eUYjt0x2?o69<<+29V7VfW8 ztDKV=)SR=oC7(I1swxDf;BX=b(T&TOB;WohDzSu^h-rC^fU%PYWS0xw%5~ zMKUP1JFWDxLP;g1jcX2>`&?XbOtM@J`o}SDo>alC7IC#k(hZ-dfE+HHuljVR;K+&i z8X=L(5dHzb`u=-;>N(F%zw$i((DoeZ;U^1exb*u(Cj7#a5|DNZ#aUdVV^v(g#yf&% z|Gh6RXxjSP3Bd%q;pZPdkcS#^8CaznXafxELJhmM<&i3)$Y>?mbU!@5HHp%mQ_(eB zw{p%*`-8UNSYl$CnnR(h<3S<~5MTIu$+BxpZ)>beQA$X&n6_Jo|2uY?RlP2myqnL-!q&DKV~s_FQqU?_xKM7 z?$7a(YZ5;+uAh#lc=7%IshpP#Bf^s- z3-r~>NK%$BzN(yNBWiq!WsV_OUd6g>A%Js>E9mDuXC$+iq~l}?0x5Lpm)iv!c2WD2 z*RQ_E=BCAxM7q0*U#(`@N`JjD7R7Uciv@YqDkb~#DABpe9)xB3XBcm0;>E4y;+UMh z=yN=#3>T>6ksB1ETohX2l%TLrVY5&6{FrRxRT=#;Wf!N?$*X#Hy?^eewC|=;x=EI{ z;`JeeYc;DuEo1ibC_B~4rY=i^vPkH};JdLatKv@WFR42EH6b=K1pc*NXTy$g?nY?# z&z$wHt<^?tGAZi?sLHwU8L8NCgE;>|cGOMdyWI9*&Rm$2@o)D&efL`OY@PQex{Ry3 zx7vC@KK;M~z%^wQzcx{Kihhx)j_*@}_bpYNQ85w+inM~_?-32|~I z(x2V(z5V|Ha6pg0_ImI1!uD&s_V&tlZPRx5;j~ zah-)RwHH(N6jPn(fm`Rgj2a&p8;{#Da$iN36X-p_+Krwa4_-ptkKCbVu43MG>u4bH zHAT6l;>p$_>*7MZUE>|zJ}=%uuNyXpgz2SU+5I1Pi&f}hb9gJn-ko4Sj0RM8_jfnM z>U>~atlp_q#Ow85P6eOsK|t{Bo<#KC?~yF+(UD1C%IuwNFgx)ucLgXqpF;Aab|-3| zzz*I$)OL)nF&X(3H}*#q zpskX~F{a!2$$41~Ib8%H9UYp9cXSd0%o8r5o)S6{52O@UVHLh=ilfCA(rSdBUl`5< z9H!xm{Ovj9!#qGGJhPxzU3#XQVX4p|#2{dz3iCVZp*kk&A9CYn5aK-;A|m3GIATj9 zCYvP^Bb{5sFnUlXGS}#qV=iWutB>M9l%jC5R4T4wE1n1}mQpg(qL$lrvG;l+{xz2K zBE`?Oop58{Np?>fDo z39Z{Y=DGzu)`mUyhN~(bK0c>F>|+V^qrv|pJ1jgcx0g!$R6+=9q~C>c>j_2z%tS6p zvaLk-tPXZIR?g2ZATrBDi(Me#gR zdgoF$WnHqMR9@j(O6IzHIaneH(aU$!h$UGvy?R_bz)XFOHIGNg{9n@iU;@oy<~&Wh z4A&QUnlC+4S|rXVCfcthbF?Jc|EFbQre?M*if?>ebUaVcuU%*-fSzV*+C)06W>X0M zQt(47Dt@HTlx%txZSwtHu>YuwHibTuXHnOuJOt-(3Wag@!{+aV;~NF_P}S*_{xCOZ zK#qPnX9TuWzFI(NQ(Wh0mgj$Vr&3n;NQmcCs6J0f5L@QA>=(cBA3yRZzw$3X^Ebcq zKR@(Gzw}SPN$e-}UqAL|zjO|0i2eqZRz`weX>@8oSkQh{Olb6H=vb&f`BMdlvT8#B z?+|CQ1}!|)T1TW`TRPTY+18s(HfOkk>$N}2kadE#=DZbZ9y^{)Hp&y2kX{nAF3Ja!*sllAnGoGcWx=FOi$hZapV zsfTqJO1DhsSz*Xfoi;4a(YJBu)~$1`#g*;eDRkQ|;ab~k<0S+x{2XzK?9L%j zxIE$T;$o3kf6x?y@!j7yR|Y?xe0lS`lNw0q!D_(G5B15B$P}5D*N)Li{^z-Vy`1(ug zzt-A|$bhBzqt8B8q1XsDR!=?2L5b+eRo7h6fne8Nd;L|{V1=cJSYeO-HCbSNEq2*q zn?*KSWv6AfSYxY&_S$E8&9>WZy~P&Xah(mfS0C>ov_cbKLf{p{RCJ0Y;= zoQd;s$TxNT`6uFj9ypU_ee9{{9!XC^S><|Ima?4(@X?Mtn^$gGA%`KBILkKQj1vNQ z=1F;;r{O7X9+7EQ%pijP@lE7N?7{0FFjE2=XQ4wLxod~OR3}G#>d6OAsi~G|>$AUZ zGUcGpB7zfQ=Yj27n&)km+==cweai;(oskpb zle=`pRHz@2TarH^`av#nhxDZrzkkfHehWFDM5HH>142MNCTR!55>hhf>?|J%5gC}` z0l|~#FHCm2U_vrz8@B{Wfl5=320sXa5DJih_~Y9PVb~H_u|QN%&5m{on7%q{CL6HY9&cTc1xI}rX;YZf?caD27a3*d6n?SC}B!&E| zBKNJnY}lBQ&1 z7M1pZ=9MraqLkY!X$b*K8WNFB^d%EZla2!=1tEa@4-Xj^ky(KWh(nCXeb{rAS#1QF zw$k7)v6;=2zynWWR7n+ivX2LlP#B2=b6(@Y?@P!W~mcW znnWJ`unC@emJloVcS<&Vg-X=OCvtT+*s4wXSNda%ELpTlK0{zlzncY89+y6{}gvdRA(U z)E+sC1W!`}PL*&7dD%+{_#i;n%AKQLCDH4P@`+bFZ8pd6KmpARh0K2hTuK z4}ZYVf;Xi|LZ9~z&2H9yicCpZ@UdCWj`19jHBe?nE2YGm#4Smaq&sUWDUwD6q3u)1 zJU@$C(N-30^Mnq?XnI1Lp|oe9O)c_#n%wdLl`B!X4-bo4lIVu-h&WU#1g0C+qN2l8 zgskRXY4$tu`i{K9GjHn3i{A6LF1_qsZ|vF&-}l;1z4di(=@R0OlK=g~9^PDuTv0-i zDSoe)`xNj=$QY3WOXL6r-l%XM;7vlh#7ZZ@k%s~*5qAX;kR|KYK1B=zwv#PGJ19AzG@&(x8m88%RR5nxyq7Kta z#5>&)i=1^V5q`iH&-}!W2GilLlFDa%?88?|OM;_bsW_lt+}s{(OXwIy;v548jAv6q zX-h|hUk9rj1T=l zX;0G=FL;I+(vrK}dYY|C+~Z>|!!$}zRws(@qv7O(z|QuV@rhSlA^rY0J`CogiM7d-80v>T z?vc+-@+{^}TH7K2u@PGrO5z)Dc&r2J4u{->APby1K5A~;auToSB(druQj@4{sIQ%G;s2J1TQDbM;$clA%!xZ`of8qb z(@E~?pgT$4@ef|yBkz}*Q5{Xf5H*cD9yrp`K5X-jd?;xj0~Q%RQg(pCtHT~X5>wtq zyu8joo;VxxBwl_t`p-v1@j4ncJM?j-eWZAdO5*jW#A%R`=A%zc+IgW=zYpj9{v8eR zhuaQopxg)a_nh~<@Yx=H>6_#N7f{DKuAFw7O`rP^a{F1lmu5hAA42b=J^9g}{+GSCAcyU>LMDuY4714$hXNxWqI?=+4OyZi48qNza1QAZEr5Uv zhtLCmLLG+C3S}c5rqBqdrw?(kGtvU2h5`|NNfCcyF#Mt|-hwdxA|(#P-sLH-eMS2T7C!ADF};$#GA5FCx(KO0vWt=>#DmAbm>8eAa1FP~;^< zWF>BFMIKBSRdOWcL_#2G>4?V>||Awx(@N#%^vVXYA)gVrFKvJnraQfa1gzqDp#s1l1l#UrqWNnU0v zZR0KTGA>o(AN~TbNXyXtnMswJprC7#D~{H~)w^FU8=CgW@fxnn3jQ8j}z4j|wTt?(IV zk|d0?H*r%#i}D#skq==rA^$Sejyh8%@@S9x=#Ory!5FQOc&W2$hLP&7MO&%IXlk`Q z>f?qi$aV>n=1!F)f)RUEMN-s0<4i^YZ)8}5J(VtydW}VO$;J>V^b+kpP2zo~sML_h zj11F?x)dcIjf-GW4iU6Wn@}`M0!;;?4>wT@hj2pUph9~QL{KF*tULVa8~{oo25LSH>ZTA%r{;vAFm0vOlTmHrrD83n4rn`f)Ojp*p~8nw)I|{` z6_*aRpsIAnJT)Rlb)A^>piW9rE8^V};<8%g;?VOXU?hS{^qth{CEzI}Q9{;G%|Oj` zSe+0i^+iq7flVRwP5&wMPJ1y~Lo^}wlqZW)S~pZryAVWu<4-+A=JbuR9IHRqL9!^T zNiWN|QVT|10$q2jNqy@afNO!cv)AT{T}NvrKvlQy^;5_-5`xr9ZKYqC!?nz{Rl(+5 z;gz;bgi8MvCh%e^OiUvF$|WW?GXpDEi8W(;a3@=`L5J``wQ$0k^%?tAA*Qt?PF5mP zRz!R8WT|jBH`F9rEYUEwKS_(jZpy==6eSpTC5+70evDu{b+~{|#Zs~*lB6U8H6k`F z#(tt{O=>^Sr^6ngSE%;Gq*Pr^B57YDea=!nW0lrwhBX!}&O8H3jaFmTmIv=pHP=BM zbO1O>(=<`DP5&ceWaB^$66!T;Qz2$j2i5^Ntu;GWrK2g4Ruw6brYi0Y=fpO zmy~KZM)K3uSgmIj!gXCDFsQW89IDVR#bzTyd_3+tjzjI%ws~RjCW#Otbdm^V5<*Qj zPMsAG{cwNqkR+frdO4zdomFvr5(s#47^@X>ALir&E{X`w-~tNa?m^)guCg93M*A>@~S^JamQ&T$jY3>NN8R89b= zmQaxnfB)_GgFQ}dcn0T4f_Fvo`Ii8z{Dp){_O6BaH$;8~`j0&Go1=_AzDF2q4 zsYm1crehXk(ax54ie8Zxk5_$^L$95q&az`KJg&}quvYE50D&sHhU%il+UL9{}$ zl?kE=1SG;v`x=`lCIl$(`b0+LB-6GeN|HpJIwDfrw0Cx2{^C|;WR$5$8!6@;zJ-iBT%@9Tf#Ym3wL6Q6J?I z9PM$25oNpgu}QL9w3(Y5f5aOHG8}swB7eIdr$o5bk+|VoyRUns=CK|D<{nvFya^>B zfvMQKtcGrgRLYES@B>yZ`@n;URb=JZ%xwF(>RZODtI*2A)hewt9K$!9!v8Pa!!w-2 zMI6LCTwE%g#GwUUg4#w_nKCU1;Nx4#yJyUHY)tCgLx(PVUUtymhxgU zhAwv`DjS((s*>rhl5F-xD`iFur^hR?^5aY^KO?Tm&*UhLrn!U6G4&E|G{|c1q96uS zEk7-6sGMx(Ml5ZPXUbA(&N6Nk7R}RU&5;WxxI8Iil_`t-DUaMPD@(}@Q*5gI$zdkS zyHd*soo>bw&fP}N(UNHGTrLkCh9KO!qDpY^8JP^HqHPnIT*Gl7M{>R^+rlfp=ia{bk9J$QIMcZkP$4j|8Kv7o2NuKxx!dW4mD{lmyf=swP7lgzj+B*2UO4;*1n1jn>G~V4i8g zRyJThOx0*i?d*->$ekvvB{Zq6bqPh4v?KrtN{3Y3F9k^@*F}Alffl2ZSm}~fWav3c zXg}#B;vK|J@{|t9?|_s>t=>k@2S+iLXu;%0tNulQ0_#uWME{TE=>Pq$1gY(P6otjU zk)FOrmF`AoDedc??V%o#_CBT`B$$Q?3W`aeH@?$z2&pt(C&P` zD))_yNk1wT=M`2>$|7J&$RO&pICc4DO6w=SQhT3M5exPO^`B%dRTcL3U)A?f7*bp6 z`Kdqp`&~!X{bb9Vkby6$VXs|^bl z966|2v})Nhej9hL?z?#jJAMiQ@NdwCeM4{^6L#pzmv!FWi5)d>=d7ojKaYMo6etE_ zs#|{nLJ24(V$QFh(*ymW`tiqP2cLaVc%V~%JOAAmlY!{0SAsg~AoyEUxN&z*g%+Np zj%62GnBj&TYUp8y9%2aMh9ZVo;)N%gnBs>clKA3^Dz;dmj4qC7V~sSzh~thq@`z%L zF}ah^1OM0q6nZ`-`5RvG@N~cfIz6CIPEHDy7&|;&xl@!=R>{*n4>0MTI_L4iR8ae* z8Pj4sC5Aw2%Rx}2K~#bz9eQ_i_JBQRoC8lzd-8;)PnJhnC_J4d8Oty>Za#(I$L)+ zIV$RIkeW(tvBs|F!8#Yr2L(?0L2#-0m3j^w;?FH8g zh@XKFXuBSR(@AJ-yz3i?3k&oa4_trz!c>j~9@w3@Z1GB0V z!aaqmQ#y&s_Ui)=XgOVC_oNEbsU zc^uRZ6f2q&J`W)3aLGG~+0KwgQ=024Z+=5zdCo^`TqS|yMkl8j^OTAW;m1Y2@cc+ zhL4Ll@wLC$vn8D9EPto-cKKInb zu{v<=bB{gyK=<}<;-5pl`P*+CQ#%isyng%V=Y+iS%;)5fP4(b|H+Y<*ANIHhS!}iz z1G=Xs_=tp&5EV6u38jAJyC2i$<_;s>10TZs6au|>l?b|Ld=-RFOyHs_eep|w%{#~Q zqBp(jT`zmvJ4g4v2fw_L(0zXi40$dd4O3g zC_%UWLq#j@gdOu?fd~GzEdK@}DvVI5;uW!2#xG7TU6eZzU$+9leUgN=|pJZvt=w>naP@P@;~~h zi75kxm{RTy0_&Js_ZX9pfBYj7OcG%&VJS<#4KXM0P@+Hb@s+kX(>T_2B{o|L0RR#b zlbReR1UxCsP{w4Gr97o_RLM%M_%fR@p`~EdvCl)6vzwa)=TyXLByu* z3tT`Q>nPXe9tF{iYX5Yj94$*8>Bx_Db~In%8L3G%`VK&SE*(d*V@XdsPnE)SrYC(I z3(OOhd+cBb=%lGne+tx~v}31}AyX8i;=!O6>!nIigvW5Ev;!! zi(18^CAF*_slR@OfRLS*9kERhZS}fZd*#-lyT#XSA4*%4?G5ccd{?gni!~jL9BkK=2uSlVSep27Fj#y7 zvG6K5C>xF7b)R7>!AXuZy1e$}z;|#hbheTr3u|*TtqX1Dd8uG!=VJ#}#X^ zc`}*Mzk+4L-P5WW(!>wBKtLZj+DSX8I#M9`H@QNtmpYP*--@N9zRYzPmNg3F&uZpg zV|J<%@d3N(Oy&UgIKVj&ESNK=8K)2MA&S)$*39G?bp3#{PWpVFdg!CdWtLlt3ky*| zrzgy&V*hk{6y4&anktg?0HB?D3^+`GaL$5RbDQ669y#}JC;GU`1HiTeGpJhC(vcGD2SceX}47hYyn9D)Y^+p}d*+SDx*g%z-PhaqP}K zAvXSEo!@hSZHw9-_MSDZY0r6O+cTE5v4Cx!aW|UA#sXlH!i_IY8@p|SQFcz4{hN6s z`yZm|j63jHI-T%iAJ%>-9R3>=b<}sch*J2$jUZ(>Wck(yUv83+t6W^`gx8Gmuf`!j zar+*3;c&R`yMi}OGPPqV{#e==VU+Lt`3VWCHW0S^mNzBHY5C`?Xk`iDNI4fPB8Fz^=g;X8<)P%`~om|1sEC94d9 zKRs9SZ3$k`pCUXGlX~lXm*(GtMwwpKCY7r^K(mFTbBwJ6<KLcKK5zHBW*FfEzb}b`f9=7#6SAJ%5BU8pJ_X(+^Z)5A|>l6H*WMfB>;a zHBZMc_fQX!fH5IBf;Dk*n^X@7U_Q#Bf<^KVcC$(-xPj=yfgV_5JOK~$uu7|gOyXli z^{|670fRDVXF)iGs)I~jmxD-H6mk*?%VQ*V@egp86@syaN|7e@cRdi$h3AnazafTG zQHEjRGbY4$z_Up?;e`J{gfTIPbx0{SXe2MVb4=)Lar758<1&J{Kx)4^oblY+8AfoLX8K;aenU(_=&A}L>kzGw0IY`=z>u3OqJ+8 zm)K9q2!hO5f^>0(LW46ok%=g%f{+-8F_98!NQS{E7-#5(Nil|5!4B~-83+JR@gRO~ zM^`@g0RNVM93_Abc5raO4(!m6ASYn@1qbP%263PzT&4~I1_!gTWeezlAE#>^mlFyp zfCH9XYM>72K#^ckB!?tFyb>khqk&wvcHJfzb7gKjVRm5S6Z5D|DWzn=!!hX)OFcv^ z)<%=Fag!4Rlh=kGJDDgwi5>AkF=B!!dZ$)lGBmT{CWN6Oixhh1q5lr`_Zv`IBa`?W zOobgjQFnBMZPtbzGC6+d@RMtkL)=CWLE#l^d2i=%bLaIP)%I=6;gvC=m5JgjY6Af& zGb=%%l0os2@$&$k;uS`509BGw;@6fsF_;h#k})xoRRfDA85AuknK^VfwIP%?=|f2A zloHgKIq{g0NrswPlD~nO74tHD>6bVu7^_*76cd;a}X!cju zwiW=Y4gv}R`zaI!SD^LTCXEE342m52NdOMKT|= z47Ww?dFY5c;ujox=|OWjHg#ziGK!Z|2{hpmD`9b; z=ZPtIcbIe%82*MBW{G#)C?)F2D?mD+LXn>kpr!1YpcOhP9SQ*(TBSbvq*=P2qSvLp z1{uqw8ULcB4*(PXR2gxqO+eG6Hd-}p*K0axnvB93v;hsIw z4;3Ojtl||GGHtgKF|}$#mJ)dylMk~O9;6W!BVrf+l&cjokHmJY9%2`xSeUaH69u=d zR?18-f)i1LHGUTp(PSRpN+)artm!nBf`JZGL#<#@uDuBsVh5w6vNtp;mUF_F(mJf^ z!3)^7ub}ZMatVkv8Z6miGI^P#b0T9x!K>Nosy`8>`4Br)niKtMI}N)Iu9_>mQ=%5b$kPqr`8yl$;4s;smaQ`F#x)1&Ud3A(wFnOuzkg3$ksd12< z2*ffszG745g8L^%YR9-s-V$!#%eXuMN7kx7JGM|2NW^qa29t9F>V1DN+v`# zyAHkK7aD6S&PpEEArr_UxYeqEgHauaTTViwYq~TYmaBK4@|)#o9#s*p2egJ@AvEzi zH<0_FL~11;1-Qw9Q{lv_u=}wX1F%0>uUa!1>{+ZIrLcONvT^IM+CwK13zxQYP`{fS zg*&${>uh~n9NGG>-C?+okxmbAxk(ij$IGzEi&U{%w|q++3ZoA4pjEq@B;V`2ZemS8 zI|!LeawQyQEc0Zh2E> zJesB?v!&++EKqWa)^sQt+n?(v#UZS)862e-3z@|m6I5)(lA^)h+rcDk96t&)FU-F< zJdbLOo|7WS%$pf-yp?m}!?fhVf}&7bgDO4izPee&w{pNc!6if7CF^%5>o8aI@D4)5 z7ffPy$d(R{5mN7PwR9w90=5q7p#K8{){p-fkeaF!omyXNP`C%#kU1fMI&#ylVp{)4VtB z43i8a6aqaqCAgVdF+4%jl!oTMXZkaHxg2DfG4AZlNAm#1Y&2178)ysx1g#TDqcq1X zyj;4%eH_i-I?_Nh&i$0m3$te+&A%d@%zTVL(9F!-#1GdzmaZ$S%RHepYbh1Y(B-odJWaZa%OF#`VEH%SnA?5_iNPm^Imh{nyq!o|nFlT-qf1=Y$oW@-)J6)cArpHZ8 zZc5jj=6_{KJ5!H5K~Uc$yUa9Bt%B!D%nro_8u*+K5k5_Ug}ByDDm($jvDDkhs{D^ z>PmjkmOf1P3>J$-VQB8=Z^=h(uI5?+=ill>r#3TJJ*kiNwo#-5?BF1yJl2>6Z}K%( zHi_Sz6Yc{&<{`zQGNoDS&RFg)?(sfT*)BQ*ILn%K?((iw8T9Oblkc%>ZrxiJQ8iT^ z4p{=PSO~B03%^nH9y&lkay7nL|IY9}1rOAoX)S6jb5&Oy9~6gm>7guH9=}*5U-2i8 z@+q(KpL2RE@A5AX^D!^;Gf(q1Z}T^g^Et2cJJ0hy|5LvOU{Sn(Meg%OZ}dlx^efL* z;{^{lgZ~u%TQ7g2y-82?Rd4lIUs_AA@iEm8Qk4%a17s0qf+0ehLX7oikM?P=_KcmK5Bi}m`lGMg(uml*ZHGcghpMx#CJcBdxQUgH z_&SkNGfVonkNdfA_0V!g7e4 zVDXH~kNw%N{S_Y`A=dpLMWaJIdvqKVP&@qlyZz~}{_9U#<~z82DX=^Nx`MLV`HTKy z!T;dwumAhc|Bm&=Gz$<19zY-nVPC(33G1DUmyjT@e-0hGV<@qpx^wg_Zsgd}<42Go zMUEs{(&R~$DOIjy+0x}pm@#F}q*>GEO`JJ(?&Mj}-nn!H-<^v@@Mlm6LyHzXC{f)5 zd=?R$yT{SYxpf@lopaaI>sPR0#f~Lg*6dldY1OV}YxZX(d-@*y%L?Ib+_`lLHg!1l z-aNqbioS%-rV_f=+UK5r(S)hI{#h| z+F9q`-TQa&;l+>diQvII^6AyDXW!oad*9pP&!=DC{(b!U_3!83-~WFA0~ByT0t+1y6Ns+;? z+Bs()7Q@QN9~dXQF~_vhImezFy~2<~7D`|zqzgD4v7ik*{E(v%mxLfm5l^IQhaKb# zvc7h(T#ZMIVhc^3gwnz1AJdQ`NKDhnv}hr{*u=+8g3Lq{A2lIZ=YTuu+!BI&_^}8b z)&{eT&~prJ%SRy93skrcBR%pXbvV4hp>!_v5X348suYS#Z9-AeKk<_XEB}yIJHVa; z&JnaAexSnVfmZ=NXVq3~b*P_ORb|!Hgkr^K)>_y3#~(B7c_6n^Q*)>uef*>hT4~i{ zbUkN%Q*s?DrSvGBY6%MQ$&I2cGu)U)Emgl$!E~q{3T>6|R6|c~2m*KuT1`tPc`GPi zg7zhd-hnFu^npnUZkAaVuT?Kw&NwuHAP+W$z}$;BZIVNB6B<_{16c4-NeDK!xS$J$ z^l(yw)(H`cB182^-F2&b2i=g`EorwM2x6?D2NaWtXNj%?lV}KjCMalvcunXZp*_V7 zXN%-m0Hh?5A9X|buq;R3yp6wsF0o}T5kp9M6>$$j2=xe~mPKs>P%;tOTcWi(A zBYh4(CvgZ=?|U+d^%OZ&j6XKHXZGR9w^`zz^mWEKwqf zUTx|TiQLu09tfz%Z0fQOtRcW2)O$-k@{t!$`Qsn=s7F7}bDN;qqaOEYoJEwg#V&pk zUr-4c!m@})FUG5gTtp&423IHA!DAj;3=BL5Hjke)&RC{76J3l#6vWIWPa8QS7vp$H zxXkJwNKwaZ@L@&T$per>Ovqg%Nl7g_QjI4W6MQBYNZ`VEi~tIF1rBh_ z;TX3_1_5ktGh-$2CKM(Hfo^KbeHMWq9;J5RAbr)_`#Z zk6FbRCx3}nPO{aiClM<_$ZA#>+7u&MP3lLa>Jh9O)?Yo1p+$}&)TQVZsY(?I#3YNo z^09z>oyz7oEz;R0)dgeX5~uh+whl{?cAXMwXaCKpBM)AjgBSPWsJkqZ4%yVjM^)K} zpjMM7+#0ekjg?4nbxRe4_%^7g5+OTw;192=gK7?u%}0Xr0NW^~T8|}&K$bQq>8c|V z18Ev%FEXrQ(FrQy6)$=Bax7h~H@xE|NOdi;)to}iuXbIU4}Zp8u96hJ>IJWK=?m1m z(e42t1!qpd>JR`cxWMgA3DXL~7<81CaD+84rXYab^9~qRkLk#DvrCli2DQ87m9K%_ zTUaxqcTTAB>W3$M;K(Q`9WLWgP^{Up&W3NBR6@#VJ?k-xRqR7la#N7s$6wc02Of*F zt=~Ed5_Ih20lb5NiV{*%2xNK77U4yW!~d*hE_=BkC3O*NX2W2USh#BaaI=~rV1@^j zmCM`(>VoQt6d0p4MUz6&JJke5xwh=jANJvw&#~cz=(nz5x_hMOo$Qq#>;0E{l56CaJVSu#(c;aW&9>qw_fyx1y4Dy1yKeN3C!D)I8^71 zpFcgr4(GZxBg|HzrMJknWDlIF{c%E+{MjM*n6%!yHj137JaB z^`s)1&-}x1R?Va58fi0|+TZ7}bg@C*Wn9BN=M>_zmthU*e?htFQAzpIQPS#P`kBVN0lW~ z!jCM3wgvGn(4waLjok2A29v3K8Euh!?9w696$wN(;+TYly&zNJDW9)sKRHXJ>mNz} zyB=VVt331eWTv>Q-Bjw&Z2u&sjZ6N2QEg|jH~Oxcj*5=}+hDqG|I}(ybMsZweHJrV z)*S{u(2~9p-&>^q--TiEQGNXBvxwybiR^O-_roj?;FgyOii!ah9_twL0Tp&QCxVE; z3t)#(A(9JN2a)j>3!FgJq8N*b!1e)&)`~Lc*oVTHhk^SD)a!_+xW9s_7fy;nj^KwH zv%%BjB!wZ7sj#$?$+Mq=A=^NWf3P3^1E(_CG@}bbp_!f4ONasN2q@eL8mg~JA}ZRW zxlMD39pI!=o0V|Eh$3tw`Jf2fn7WUsLWxjAgV4R|$tf~iKl0PUD0GN<_y?Z)h}=8F zP0NRKpc}5EzazB2kN@xs{VT*I1TH4*s8o8wEtJBS>j*J)2sX3~YBHymp{9;Whw{;j zPw9}XV4n{07Eg?ntPmf)3mFd)nbmTL6GTDeFoT{!i5IjXst63hD2VJB7Frp;Tnr3F z!8$Jd3t{9%S^345v4_X$La!^GkWfLxKn$Td6<#odd8mhwLx9>~A$|zNLoyAynH1%i zo_m-gW12)WBDsAy$9-Trn<6XQD93h0N5YuK#3%^RKq42RtKH}ad$$euVkNrzA*d+Gqf;|_bV!FFx$5JHN`eZ6bQ5DKD|-M$4kNp3 z%tqn+y}~$*eE(#umDI)+;l_LLMsNfwahwfuY)E@7FO&GkfCQk>H`NpTGw#IskrA2YUdG zywQ>=gu%$9jeXb-D59%bA;-&{OxOU-+F%lWxSf5FK7!yzRf0t=GYx;s2iFi-l9#QcYSP)rqR%*Xu9+XPCJP|Yp62=d&^0l9z+P=|G}Koc~#vNX$r+liQh z4nC{TjTj2ll!@ zi7gciEVa_^7*mwm!>~{X>wMCUFakJWkadUyI*kJ(un0JPQJg5X^!N!H!A;1Jkw1Nx z8UG219T5o{?TAE;kwP5_K23>7MF~MAiAZIMMa_vztxyq_P2G@<6xyf`J%`_17j`fL zIyC|vpb2)MQy}=9I<-@jV%4&!RGYAqGzkeg!BKE3Bs?J@@LSYJ!988U2~3lSV)Y0_ zQLA9>q)q*ZOy!AV4GCH;iD@N?Xa$LC{RlIF28yda$BRa!JLQ)4*?dDYoP zy`n|(m0SUdq+MEdRm3pshlE@g9XM5XSO*u`DBPGRT)4ek ziI`h~@rcV^J>01)E_=pWgq3|rjd|7CuFBka*<6u0mC+475GxfpP+O-kRXcSPb%0Yl z4Olop*s`5nJAI;8HQR((SXZr6;)Q_UJykiiT{u8h6MP)ze4W^tovdmexBvOvfY}|z zvNW9P3Z)6akU*M_2;T!Nu9o}>$AB7^an}?{9QSRF#CZqgISsD?8-Fk!zC;(Jv55Zl zx6sMo(P12ih+o7xr1jMYmcg$^SxoV4UBb+r)|p;UDNWLAB3=mHJ1e*eZq9$H-d4ii z+sU1K;NA~D7VF)c%n3cBgN;OcDh`%j5B4h%zFz0iUfl^E4K_IkP9c5~;pf?29WIE| z>6{Vroxnk0G*RGMvc2==2=e6!^HmI-dZ$6H6Nxhle@F*?h+4+<;a~b<$GkAkMs!H>j+KWp-z^FF9cQfWk%W{;ywC@ zK04!7Ze^fCqS51}z>y-#Iu-hyp&AmvT{cLlz@$deq(CyAS9T@@M&%%4;Bdr;ajd1n zpd+{`B}UG*e84k3t^9H z=T&-SFhV9+DhOH9r5rI9T>FWgv?*7zXGy*^a-Lj7`Xn+oqB;VqeL&`d$e>W>WD_DT zP*$N$ej#>5PXFiqYX2vo8Lnf1VV7W@esr5e86FVNb z*@XjkV27Jl-Z%h)RfU6eP=h!)l7&@=LxzJoQCL7O2;)uIre^Bfwc}QW06J9zbwG!w z=7_#pBft^}avVg(5?qPMz3U4(k$Neg3yG8Zh_i+#Fyjad)h{*PA(vHK>?uf%8ky&fPM|?ZcUM%i{tE+-pxju)U zfheRKskgoyHr|M~CaJVGkG*K@y=ofU80kZ5WTCO`*?#N{G5jBnwJ2oRa zos>f++n%QCIDmkFP1UBhV>-!ds7_=EfbXU@UO1i<__hf63p39~KiuXB6Z?pvxR+9H zFy2xwwgso$vM%K6En6Yi$8jtb!w5_JSi4q}*3&MKM3+zILdzLD|BgDfGHgm};lxgB zhcUhfFjI@LFNxUiltPbu&>I=yvJT(x0DwS$zYIIS`TLd+tBM?lx)!6bq%fEQ_weBJ zuYvgSpEFMY?{ON-6BS3o%B&M72Q`OraXO5{?_RZrE^R z={`CDjB=*nP~#f0&Oq~xaLp~LX^Fsda5~tqZB;r|?>PTpZ?(Pe`2J)0rf;|g=1UJCa+9`5e`T>uYZRD*7bxIde+H{S?|Gr+2Mh<|we7k~K& z@#BWg_>!Sh^KMn%tN5m7bd6tXg7A2UfPI2!YL7qFOd)xMzp(g&I+ZVMifc)Wpa@N( z=+@gcld2ZjV=Kiyjv`5# z95@pK#dAJ?o>K<_rALMd)d|&D?_4~Q1CeSZN^l{Bb@R^6dx!7AyLamdx?`F!UDvYw z{Jj&3^JL1k1Emh!*H7fqrW$KH9T?WGNOkAvwsV+j+%Ar)L8#c*g1}lb(0A)X1y*n!PTu_k2W%pv2F;l8#nG9 z_}+tdde7Y(nD5-XffOyO%ovg*x~VS*_v5#cpuBVP26q2Wkllj^2%mn;OWu6K@Zh}@ zeg|KpTL?P|ZcVB&KmBuGA&_TOPR=2h(0b<)q@7a=YP8P-|M>;oQw4^^UqbcWx5IqT z4dj-5kr-GWf(9iQ5^=^s5LR;RFqcp}=eU#LTpFEtT#3sy$5TZYN!Q>%)j{+Ujs!v% ziC9i$w_QRECRAgJ6b`AQgi0nvoplMl!w+8_#stBKJhJrTl`su>ABi`0Y2S5uxd%a; z108r&dQQd3-F$7v6BGpa@Dl%$8U6*P&x~Xa^d+HQo&(}WgA%09oEn|!)Sv%}lxK{J zVVbF?n{ry%Xuvfl)H%3 z|18U8nQOvxPCxeCBN0LI&RZ{+|KM}auLvRF&pim3!B2~JmRr?1^@z02!XddM>^=DW zv*VH<>3grd^xBKzb^bgMNj>;jOj0EFIP?#tZu&HCT<7?Mk3IMp+~&Ja**Z9+eXBs9^)8jGyO z5Kw8S)6uS}kG%bzoHC_pzqj_B9&ZG*%rv_z)0%mmi%+)Owww@&;fl*_!hsJyP(3#B zqi91Z}%|84(!JA~OZ*d5h&}gUzwoX3({1eH_>rgE0KJY9ZQal_z;LkoT z2bRu1{)A02zxqAZPe1J61C&qbH|jq75U8U*KKBRq=az@62~r^YM~Mg$Fo|&qAO85q z0Z`e83OG^R40DNSo?)0^Tn zr#js!PkZXqp8|E6=rB!Ci)z%PA~mV=jK|iLiqmwIfCVdK2NbFbg%Sj&1W@q6M4~Fg zQabD>e{(8XO-Zt!eASpQnnzhl3ciP+L73)vB_f1PBVu1**!`@mTe$S=}l@ z`bz&;b|Pm7J6LI58;hxSC^mj@4T%jU$-Z>xZ+MkmpHr4Xsm=0nBANZ#0rm({$8PE# z>e2{03U|@gCM=$GEvjlw8d$6D)hX(z>IF2C4yXz?FIxR8{&>quhmjAp%H>pdCflTQ z9Kaq2ILB%szz=k-Hh$5aZgmrq9fD|Ay41ax;L@eT^O?aO4^ZcFGlfaI=;O5XtVew3 zN=~4@m!y7Ohhd2;m~=o?t5_B8VVxu2)*-jO3f@$63Db_9#ScYo>W*C=3|s1l74y{5Vue}{if=}Gov}mfqh>4fiQa6>;iLzRL0+dLoj5^9G#3(P+2wqArr43(wy;MnltxO&MO4rujagUk^tIdJY^RM`kqjb10C${Vn zq4~V6H3N-g6S0`vz0(>T;ejxe1tPlFmk zjV?7fH*G{0mDV3dl8~PP{f{=kS$lCFjGA!>Y&a*x9dq_ao!@ciNj8eqeg3lw1?`kd z1BKDjj%bUk!s8{&7y>k=Dv(8zV}cmqwuB{jRf8;UbtlEJHYQAy6GD%BK)ya3h z_sws8L*U;47dSoq{cnTw8{z#9xWE;TZ-)=O;S4|c#1mfeg%cd&1;6;iIUaF}XWZi( z4>`#0A!@=%`7j1S2m>KNu%Xz*g1PNSpPaJtfwcVPrNudxk;$^yRt{$OsE5c1QV)9| z;BgN!TKMXLfUI3EQT51&=AN>^q4$HMDp`m<>T!?chVAP0$a;?2F{cn)oq%K4It1J% zFrr8L9Fv9)Jm#^$aIsJx^B@WNip4MWZ7xwW6V~u_D|WJT>112^M^1z`b&Khp?{FJD zA|i>yZ;04mS1~Q=c(=+hdal=J$FKw4}o^`*T*~ouDb;seJHs2`Bz;B_353k zo@i1X;Fq8HHR+S`n;-q*A3spkPk#3Q#Qp7u|M}@36#L6R{`lX&`S0KV{MXL3mys+cG#t)7!meIPDmjHJRuKaiV^Y*(!2$G;7|YPwTnpL;I#N4#GJzk z9t4`?grRIr^ zMZGy$W61+AG|T@8M#>RJI^58IP(*UFz8sq*TV_S3yT}8y)xk$peg*bYnGinM|sNO@M0~ivCF!~lQ4kI@v zNX+GhNjyL!5CH!i4f;!bC zOs)wKp4B=0$^$9}JBoxn^n*`S%ypPSdE~>e)dxwKM*ro+9J0tyAVgSc(tyZb5E+eB zhM7}HBRNqc5V;K47#*NsNC8!)Ph6!}rlrD2NEMo6niL3D%1_}LhFLm}f3QfK&DI`R+>{T5`=1<^dJarpS7#Bqb*+*Vv zkY!{b`j=>SQ|jATea;y{GlY)Tw$f?WS?;^uAYrp4JNZ|0_N?k2|lrf>#l z$Mq(0TAU8q!>>fbW;z8XIuhnVKnB9x6} z$%C}4Lp@ZDul1~A?p8zr`0XFIS zJ?WA<>6Ah#l}c%qV(FD?>HI}0ms)B2=>`AQ{ewNQ2%;Dhb2>4g`}lO1XYmk{X1y)yZH)ijM$^LcD}1QpkY< z2s;`{o4)8_{40{w+zsW#z?LF~XoUZUh)0T9NYE(k9~FmavTh*hRMB_s|A5i|D49u3TxnP%aZd$~W%hfhW>F^E9*v(4>%)k`P!H@*M>={B(jn!a{*3@TS{O#3b zO@oS|*_BA)2JX&y>)xCW$cPNdh!ehWj7D5nzu1e|;7rBFq~QVX;d<^%M9k+^3<+j# z#>^4pif%$wjiVCouMAD+Rz?5WC`}lRXx$RVx<y4oFrq!Bb4h@g5_FJeU(YnHcMsfh>lrAg2i-XOjU?ulahPSV8iF{p7gP zl10JPAYU?J#Df9f0|9G_KHNhiJ2EPN@+z}(E4%V5!*VRk@+{MGE!*-f<8m(R@-Fjo zFZ=Q`fh%FK0|MOZFVB)XjIl8*^MdWl^?*wA5JWRCb3Ty-TMZ~yR4gs6Rbj~0y8Oh| zZgWxn$#_n4IlB})%uX!54m&gk^o$B{Kr?`}^Gwy2EY)+TVAdX~a605GvZNmM5Fim=Okjadd>{1x{-dO23XtqeDLw4MrO^ zNUequu)}P`v+MkpQ;78R(G*a-4pj&Aos6t{P$KF0^M_e9jfkO0XxOF-(^#Vtfrf-x zuai}?4oXK%%pP@IM-;F0#qB)Bt}qW{zyWQ@PGvAp>^-wcRMR^Lheq^ua9qzn8G$;7 zO$v?aS$7r^jfun7qYbnq=B}j2}W25+Ev7e zm5r)ku!H~Bpmm_gsiulVI=t*aOiI*oM41_xW z`8faQRrumvIPeMI){S0=n;wYQY1;{1gtw5GpSVV}@q5cTJ*~!OY6fO#24^@1JHtUb zpoT!?hB^#5Hib0v2)3b*MLO_Pps&VjG=>_e13E;tfj7qiFob*vgnU@DUu5S9ii8(J z01_%;7RH4-UGS4ElBYWbTZ7jFMCzQ(L<9oii@UVn$ofnM#vro@V32ipcnzqFy3P#6 zrMF=mS|G0{EGbF39pd4#z<6aMyRch2qGUQYk71{$A+W=vTaY>gjOD4Hp{lb)B2$F5 z&H1@c(`xiZV<5zU&xU6-#`1)Q@~nn_MD@KRdNd=tt;9D%OggAG2O@obDJr2~08Ob@ zX254e&*1AXGNjB6sG-*OLJs7>`<}@QyTH5rbV|p;Pke|jJUA+v!`mvv>tl%|{J0Co z2%-Dar#pU!M4dawN9RtwgT|`#M!)NOf9E@ZL$mVmhCIhXQvACQ1-!QOym|?Rzg!tf z3R*$GrGO6Vb0%g|#`dZwvPhJfa>QIr&bnZHyhZ>%u2&8a3z z-FsI-c87aenth;^NgI6xq%QwIS^932phWc?cFY{9fzVb0}gcVqusx_Ge~NtaG9 zQG^QDd3_kMpvs5v4D$N-^MSsN`W_S{X)-8;1O9lr|A*daunvVRV5y|Eq6p9pXB zrp}W)PwN{8KQ}BralgflL&H>Fkom}SC68w|4bwAB(7bb!7JC0Db5Wxf$ zT#&&A9keQ~vDQ&X2eKf5BMvy&VFyDvAP~z!xzu7S4mH+UM~w_O5=*UhLPQHI9l}~M zMi&bT492~%+R?3{$}{LNgWx%bpY|Xa?jD}*d7zzwP)kxi`XK*6&LDgq2(G1<^!o=L z(T+R^N}jC5(x`s;$uFkV((F#62OhW%J2hEi$4xk8>h4aX-jNfgGhs4r%AA&L5`rh2 zQwT`uA~`1>q5SOgA2JORFwBA$Z8X4h?BVHAgMKV1$byC}aw8;_WYS46Et?OsjmE@J zOO`~LnFc!%(+AnE2tk;Q#!{VeC)wTHg*2NDUt^wT~$gdMLnkr0 zi5D~GsYkoS*mW1)jfU*^-=kJLX9t#e!O6;o20n++nCAZhDW7>5Gf1Y6A-EWyjFI|B zV1qjPlhyhPl9yh4&-ygFh}7}toPF-GXCFkLJI5oIhTLbKq~|%eAbxO)xGbK123qLR z9=PWo>Ru+VTu^z1Al*tK*k|E)H6CS(lhTVoZZiDtK z7Vy9YADr;Qd)47sBSKUs@wl8d2wD>1XbTQ%Iieg0DW6MR^K~#U2}itGYU@Sty3To{ z)d)?!$OrrhbDezt`6m*Q@NL^51pKi#Of*@F2Q=6BVH1LRT7R7--FZJMoqsrENgaG< z$A?UH`ss&Eo;l`NVC%7mUiyEiN9s3BOFd_Gg8={4H}=_Um+16R)v;%HfA(2@xbzFE zXZ!7oc6lH63d;QIcfUC~O?pPvJ-3V%Wn4rNbXxfL*p%0(3vm!DPicyr}6sah~9tCSz9(syB5KtsIRS}F#amNF`M?p;uOCXyPRvMMU zMK6Z2DC)SF{@_?gJKhnG!I~kkfN(50WbP^Jn4JOhSjeBi;{hrx$ODDN$Y43rD1u}e z9Sezo2UN|FnbhPaIoU~1eiBHa6s3YFIZFRio)VR*ROKpJ*-BTw5|*)){zj_Eoy7|I<_#>R=M5hbWamI48FqzF{K?%MnlnXSInx1mzGov|8gWS`f3KGaY zcCdp|zO$R{DCj*xA~6JxuUg^5hvtkYKuPVdp^JPdmeL{7&K+QS7e%O1?x8W3po3$? zgCR;yR=9Sm@s%a5<362PPuw)~0xbE9G@&UJY38#mI9-rHR60_lrYW5;Vdw$uaR4H1 z#AzvefJv9y)Tefasxz^wNg)tbl~MoDd1kN&8IP(ImHeb0`VeUg)4JBcy)>3*g(E)K z0Z^b4B^@H=X+Q6pR|XNatbv7qOp?lyb_k83gv!%k83iiDE|7tWbjV{BD<_#?YDukG ztYC>ESI+VTuCVkh7@KK;f_Q+R5cp|9_R5ZZ_LL=iWr+b;@JxI%)0wa>$OYp0OgODW znoyW$PKyHA&%W{I7molV^K_EWK`HtJ3yOG}{)w%G2jdan))qi})d&*^rJc8$s z|J`GQ`(Th{SOIvdm?W@#V+W)baVG@y%in*TH@!?F%7R@7WP7Q1BkYyndwDEh@zHn2`Q7ileq59Y zOZdQ1j$vt^Q(NM$R<-)XgwQx&wmCqqV3G+KrdR+g^u*0C!J_PJ9^NSZnUN!E$K^hI@6!t z-913O+>9n=JP`PYMi4*{kcx*mEa?X?gp%r2AIa6B`7TtSShAuDCBm<(MT!=>LobN;xOTQ3lCaFqEZpN3TCl}U z?1DJBAfbiFJc6jSk*NkGDwSl)W@kH)MB-ic(p-Sjjcr8zJK+DI56$pVk9@cj-zG!2 zl@yL{Ya2X}(+i*N=)^(k?HJqo;I_97Vr&E;`vHZW47=K0>|-aJg3NaIs-it@i;ElM z=-PI-zwI!3|HIxlS2qmP3|lbEcBiS0t=#eZ1{wkl*aU^ah!I)N5Zn(pQP{@h1If-BwU}G&9(ds# zc)@%a@6?PU9g4(u+9^r)p&=Mbb3X7N!YS2s3Iv631WS-rWP;S#VF&!dCniO_hR8^M zq9m>czM%h2QUGN)bb@-!LLKTQ_HZL*QYJWX!U&IWyT-!f7acm*6KtOut{ z3*G;)Cu*Z(wg#g_Vtv8{A-3lmwGo4+BuUsv9TP?S5>Zvkv3~{*DclhP_@^+4h7SYg zC*Vaoi?;Z_OAn@TG`qD4^aL)MBFZ=R*?q)9slQ4B+8LKb&qHg$vksmn%A)o&Z z9{q8fVB# zFFUu>?Xb^$y4vlGdgf10GkpM;7x}+I5!Z(E?LV@G~?BO>?W;%YtKVX7? z;^H#_gn?8F55>?ji=smB5jomv{2a6W!s8=ObVI44M3Wk*s`LWbfw<&JN^9$`wDd|D z@U&8^O69D$TIv-~iER8~9T@d=bWQ5CEa-HIAX6Ribg?!o-iE`!4x&zu;#Pc= zR){d(HbMkfh2xatQhs7Wf8tR)gVwN+J|;DJ)P*H>Ku$h0SD;5zs}EHQMP1hCHCX~v zV^lN~gFwx%{U{|4SGD!-^C#xvA0&$?1|?OXL{q_6qTkfs5tjYB;w4O`f6KCF*#}LnQH&b0L795*VL2D zpt_i%@rVLRlx7~-1ZBSJOYVVQ*@PeqVqTTTUNL5>s4~MsHBHp?C)$)@WP@M~24QUF zby|%d$^|6EN5ooVXL{ymf(9^+B4ek9V@IO=vI9y!c4LJ`Va>)Mc8A!$sr?=XZdf9! zpoZbpCN4}hj-=*fH*{C!`Ewar^(Li1J6NzOHd4DmdQZ zA9&#&C@H*>B7$5eOh8C@y5k+r>B!6nB=8}K4j_F9NO)E!QUip3V)r>N)K$t4cI_v9 zLU)1=LLaDXA2ifoH%M&OA%GHyf@H^na1(d_t9E&pXM^G$oW>s>t}OvbfTnj+qL+|> zFG+`@g5Jkvr02*q)Hg}je%4i^NXQ`6SA=*Bby-GrPoi~S*L!6bT5HXCySIQ2s+=z1 z0@Pt0wA649*O(IbK|D{B00n`WVo!+IK$<6LKgod~*jE7XC~;p#zpAk!+$zy{&;gcC7^AH)FQR&eJ`n`-~qmXMKSNVq^CDU(o`hkxgI z?!iEvLLcryhG)2mix`TdSc<2ZimTX)uNaH7Sc|uqi@Vs1zZi@Ssh5B_jLX=J%ea`% zI6;s}naBf8e_{dIn2b%cf38-I>&S=Y^g+hyj*sG;<~VTvn4NyFk71&>=BdN7$h(N>M#(QpSygM9LryqN2oyqd3`RK#G)WSf*ftrPz0H zT6vHwc$HQ;jI1@0CnW-_MeEWP6d$=;{}!7NwvzEkfq$Z^oQkWwYGC1ucI+X-DiuGn zim8wpssz@g1j!%7imXz&3k#CTe5kErIj&q-ikSZt>IhM<2zMs?Dv1M0n1|VpikT-4 z3vwZ=PpS3U>Ioqvi=G*?vhd_S&yBHMIk39u0~QYKXrx7e&D4bWVJi<;JK z>v*fSe2XLe_JHBJg_7$jkR9-B`;;5)0 zfWtiOw^A&pSIoj(%&TW(t4%Y*tQu5uY*An;sQas?j|>?J?z-8; z88b~&P1!s#Me>Xxnq zs_yEtt~yy_C$aN8XM8+q{5)-ZJ#qiMJ$2mgcs%fWyvBq4#)Uk`iG0W54)H4N06aWS z0r~MTgYz0wKKMma5CZcm5Ar4o>^kp>(6UX+uPE5BDAW)2ctZ7VbN{06{`MDD`Oo_x z;P%un&5_#oWSJK~vzy^?BfziR#&7%9wfm$mW~dJWtZyH^P*p#O``otyAGs7$olI>~0C^e4 z-`S%F=K?bjK!-x4d9Vc?^92h%5ovHq%1D813I#(@RY*|SOF{-Wqy~jCH;jT*@Jc73 zWc3hHN`{aQp%Bz(1`^M(5{v)UAE*!wy&Vg2rM$V2ob_BlSsH`LFx)B83Qe@Y*ziV4 z&)t`A4$r+2nW9GZutjmy+I0|JE%C#rDHDT> z69>=})j1TMG{k4J0egxiRT0&RVkd9Cg<^5GX_1VHaU*n*7lHcsc)^8b{&|madzA4h zQgpByvLdMwBc%j2$F3u{!yC;A>0Ral$k85C^v)lX9f^k^LpdHF5+s>E991+QQ&Zn1 z&L6+N>6zl{LjoZ@bJF2b=!4=TW35Qpo+71@=o6h$M>1x7^X)@Y81epzOZ{3=GD=7O z)t?mPT~g#paXAMUnr#0PC)L?HF(0sJnC_g*moC+{g!xh?&6+cB+Prygr_P)- zeFg;zQ)p45IC=l}L>iOnQl&cI~VWd zfd>#D=p*}YA4CM_*qvP4mgC#Fb5GuTfR^FNv?qD}BfD=g!w2}r;zf|q-nn!Py`qC4 zH*G(=h);GV+wOrqGw0wv4xHHW-ku3t+Jkt&A6a%PIgU=K4=x1Dm=m6h9C|lL;0%XD zXqk_pY>2p5LPRc{xbe`~IkSe)JK=)^&d<$G_<3yOxWo}FX6%}C`n%^S|Gu30!RG4_ z%V+m%Tle<;00t;vLIQcP&IJZRftf=Cty2<223W+70T4=fkw7e5unr4QWW-Q}15KFF zgAi;40f_$sg_K=N(hcb1i!jD0%*;r;tSL9gnoKp`( z{Pc5@knb^cBm`4Bhu4zOJ@9~D+2M7MdH-zY9dSJ_cg~mdp~cQcB=Sh!7x({IqAu1>Yh@#0* zrNm82);#~nhuxx$qM6S*@5Ck^LvTXWn3(Qi=Ovi54!ImeEum?dnryl`R;&OLYA8ga z-l*(YDK<+X1nV@bqI1#~rcSjGTp(?SykbkDi6?Scg19RJy6m~=rmOC{>@sA=4l(}N z<(dEU)H_d$yg)`MKMdi+k3IGrpyRR7DtVHZ_TI}-zWD6R&^q=+@=u~=xzr+dIr@W- zJ@^D>7B6PZQ;)6)_;U{eX7IymW#{~Z&prQanW;bL>~oJj`?N|PXaK51v&}f`Y>&(k zl!m6yHQ$^wLm6+}F+=`55J^4wyvh(f=k#OGJ>W438P}P{j87zA9SbUUNCUm}d_6|$ z&R6%~Gx4Sn@bh)oXLI_q(mF%k@_y=wP4+*>t`l=U_N*!>u?c+~^2kv#rlZpyp98YU zB%6$~%0jpNa?D(&%{Qz(2Z*)SVC$W9(CyObL4qula8W|+z%DySwL`&z2W27{(y{-( z>wY_Q2JMd7w-0e-kcXkM*!uI(M=$;KKAx4`Jva5osoX9T9M1tUn@lhScrnTm_B3g) z4)^#F{LVkT++#jR>h#mk_}I;Z=L04)6i;LP+lO@Ck&md=WlomChd=&tfcbIC9#Qkh zKIX?bv_UX{j9Q0jAVR3nT~LA!)L-~K#SVSMtS+j#ivc~Akab+jWe>~8KmHMk!sIP9 z>iFOUS=P4nyu)t(Sd|$#;=->G=Y~0q;0`&cBLJ;KhBO4yI^_11eWVZq6@(At+F}3)SimYGa5xKWAViXgLDIdbWNlhkDffAphFw4{+NgGtOl8US{@^CV0nSIlNQ zGkR5f2`gJSk8_OjnTQ!CHn+)(a+PfXU4OX|tT@Os6{6$2TIU_>JuI7n5ID&%Fu>7^r0|{N8cby&vc9nNEJzu zNyf4~=UkLsDR~JqDN528Mbjk;jb1y>F^`fqvw$fjB}_~C9GB8^Tp0f<0hh3&EpAby zSsOh`M-$Rh=B4YCp}eL|mx`TK?qHQ(v|IOh#XfQtO_yX@OJVe9#POx0st{QR_@>HK z8r_3mCqakBf~i(>WwNFMJu5o51%;gk$s#PVX!1DfQ%>P^U4JaAV5=8XMV;dS0Xqj; z@1(B>EcRg&+a;YAi#@~&?6G!hm}4R94>Jr+vV(omK0phRdgudxr!*~U9SPTfj&`mc zI#7Z3laAGP1TjO6jct_`*wFeGF@{8C->_%CDVb$XciP8mPl6j$wPU!}Y#gADn~=e9 zsY<^M&~mezoz?<$yW14VvrIJ92W50x%G+x~3?Q!Ao>#pH;?Vy=?CPML_AxEJ^0P}{x+9A(l|FNC=-7i4$0H8mx1c7@Pa3Ah~ zh&#Z?ztbk<9knqckkkP)$4>Me_fX7NI2@!F^FwFpuwQV}Awk2~c%oF&FqWzop7H48 zCZL(vT8SvJC|*q;2F!&rewE503J~Oij>#*;~A}^$u)#XJHY3U zHVF#GGX4jLJzT{Q?tY1;xaP?&L^ZXS&mE-p0T*fK-Q#q zp~az#ly@QT4eE&0i=q@|B-81Y7Vx&E>9OP&0`y3=s#E{HnN_d4)vjhWs$)$LSjXDd zuEzDNXMJm4=i1l1rgg1>t!iBto7l1zwy~2<>tzpH*~or&v!m_o%|z`UQwGp~_k$NM zF_3&i1Rq1*7UBdC%T8qJc0#_5G6;wp0u*LaBF*Au#2ndV^_Ut%>R}HA)FWnS(cp#= zfU{4XV`^Uc2U>jgk9*Xk9}nmo#Pwm1dfek;WMR0&A+EF15XZVRYxu(>&X9XMT;C8N zva7}ek9jQ6UMZBvJS>B8!?}!mXt7KrIQA8*(rr=xge$ypj{IeE+_;O+VDwwy5 z=C!ifeWrG@oat+^-X|%4_Ia3)BuNK*cGg<(cO3L_f6}3U-}fT& z_kIshe{T^wTep4V27RG{e%LX7(Ki;<0ZIRnV1569eF-RmIHF((SUQp>Eg7330sFu&*n=6Q5*)n; zAJRvJ3g;?cl7t;bA7+7V?63pAL_ht-5qN?fnDGE;!hxvuD1YG|BQX+W<3@+lFbzX6 zkgZ96@_&fex3# zXT!%t5P%L~v4;EL5BS3i?uU&JppB6-DC?(wE)g?b^CI{mCH>Hj>1YO8k`LPWD8CX? zHxV3Jgc~oxCHzPeJ)%M9z-I#q6Jz)v{j!d&b&Cu!fDdCZ`({0rLP9VhkV=6W7g;cZ zB7l_GHeZsEFX408krFhfRk*=naFs>!Fpn*hjsWQrI~9+O1CtYz9`@LP`Php4xRIbZ z7BiU_wn$ne=@KTXNRzf4ctv;`pKqh?dwiwUH6Md5s zLv#{;$q|70Zkgf^?SLDH36Jl%mj@tG@}Mg%R1Y-Mf&7;cT9p#`@D8FmnzC3fp*fnO z2_KjVny8tYoH3b(^@#}qk?-eLC^;P#*^24tjKk5Iozp`Qu#&P_G$ENBk-?g+2_v^@ za0#__Eop+%RhjQ_nIjb!uqh>nWto@>Et*+#$cdVP2L;b^EjU<% zdj&2}xltKqX;lfIGx!m|LlRKgm6tbqRk3=a2cV?KdITDvtv8?sTA&EJp#OQG4XU6I znxGO|6I_vSVL@2?!59B-0b!ky4y}nu{KXLJrWV3N8yw1z9X57`@r4kv9$gI~u|v zMir;ef|VyCcqfT}(D+Xo!y|>nmqFsC(q$z0_k?$%U{FFN)8%F9a3#2-CDO+yEOdvt zLMFW8C_=a{g5`Q8ctz|5SLNV3#0Os?2zM`91YJH|^ za8PjVL|4ypgFw|S&0;Os(o@Z1RO#R?4*@Rhbr9t8r+F8s|MV{LVyJ0>F!q8k zjrCX%!Klj#ANPWJP;8)B0*HPb6>e5w|tsjMulI1s;^~bje?OqhQU6z#i->oxam{4 zGgONw20!w1DE7mm5b;I*(|;P)MS)gE2V`&x#6S+jMj&*y7NkTOv_btsG@`pi31PV; zWI|PRMHw4MVf8}k@kBF}X5YD+PCG}t>q9^!L_}n}zbi+k%Mn$RNX-L9y4yljghHgN zMVXtgW8u2~GrcFqx%+TNpQ}d3+eRZBAaK-h-#fa2ibs0HM>+_&*(JE_a(wc1PVDO< zkR-e3GD+z-Px3pz(!)v01WKaBzf0v*P$fOCq`$2wz&>(Ix#WH~(o4UjPy4IDt#eEm zl1%^QB2pAwQYYoF)D&Iuo4^~K9o{rTlp7=Bq?hnC!6V$lF8snU9K$j^!!%sOHhjZ4 zoWnZ2!#v!>KD;alMU6i^#6(=gMtn*Z#R3?Wu4$25Ni4)>woFG{PaO=!>#|ZUHN^rl zQ^CZ=Fzm(ngj2$EsV7lX(80uHky~aASZ9({T0Bn#?7^cVRgN1QVD+Ui0er8qRdnoC zcici_RmUwXS7{}&u+&!6tH6l7Pjp4bYxGynQF%?=SL}IT=kkni98d0RSeB(&Uc;~u zVUG!OP5nSwhm}~EHL#rJSr6dA0!*9W323yWS~5(_`lP07EQYqll`aUcCoChFoXP+1 zw8;?(UBwlt2&BBsMS(?Q%!w*peF1V2o5=GE%fdXvOG#cnWnO4ZgHTzo3G!*(oGoIk zQ(<+t>wC?x6rwOf%z77o4+a?hf^KQSU}WK7118T{G+`Asxfmv73_)jgp^YOJK7b}@ zDn@3I1`&uhW7+X&E*2X)=6#N4Xi@^u>i3C^1`|p45_xxKxmy@uhGl?b(IYKpS!U2& z=FuE+(*H1KKDN*^f@f?O(0e9ges<6)<}!sQ(z z)^F|BYc1E(rq*@+YuDz;z$M3_F{11iZmyvZ*LkY+d@w`_Z{X2x?-p;SIB$j=8fAxa z;2Cym2Q6&pb_R!Vau;$zXLl5bcRnk1Lg#U{3bLZzH<3ML4rw)e_YW|)bTmgqjf-7hB!_C{-Ep$)q)x8{yj<=sJxOi*4-a%Col2@mZC&|qtss5Q2 z4yxY}%HI}o_PWa;0P|@30~k(@p=<;0J0Yv?o2A(_MAM@vl_UC`tq2ttH5EN&JqUVt3vfgq@Tq)HY@UVust zfb18M#c6vui2{P@fX*3Z z$mx{QiU7JmMZcfE>bf}Uw214C*qM-6rA=PumYC~>tBA0~i@ta~+uY{tO^j0+=fap? z9H_k7YWP8rkp<^8g1qkrHo{uf8d` z3vq*6xu0O2cVs=+ah>&8zx8)b*VRUCV1M;puk~Zk^n8W@p$?7-nFK%B5i6b48CKoNnf3>sH7}m%8NT;@nvKt@=dhZL zPnxeu7T7bK8-Fnen9ZmVY+FdGfM;Hs@*il1Ub3LHOIb4u|in71^Ak@0wWD z<)QDJ#asG;NajCZtf_DN&9s!2JcEy?^j0aKc3z)PpY8|&5(hC7cW(FndEg3u{S0pX z*}vc0-{0N;-`H>9+%Nv#U!h-dp?+?~8tNA(N)~wtg|Bg}Y1pHJp`w}c%Rg$1UCK<8 z@trhU@Bq;7kY~^A-FUvY<(n26M`!3E^f?FlrFR=uqnc&Mz!vw=@TeOgG3J=MVk=pSh{uX-bDxniidR zzj-?G$~(7?uDSB$pavg|(4u+%!HO>ZxckRDrNA@jqwQWQ?>vG+JV-3} z)MMzw3NIum!~Y=Q@U00!#1S?lRSPXi#voWHNxeqv$;tA7loEmqoU9C}DmR0mvw{qu ztb{P>Dy^s^&qOm#HP>X5DKmCh4Yw(o(rz9*=P{F)-U8&OAO!fi#~!Z!nX5U)+{J94KGx#~@ovi-B=bnGA z>(QTc_6c+!R|&GwE_H0h)gE14q7?#%w)^$})?9amKvPaVEy$k-BB=)-4GDthoPO-N z=YWIw>8;xyXT>Ly2mTpQ$FY(Pc3241g}|M2@4<)CA0YrYR&U=OGAVYKJ;+w6GM(+& zPtOT;)KVchHPuyHeKpouu>%rVfO&1tSBr(+6<&G&q1WDT!`&C&e>rZmO%MKpf`t+u z8;WI@VUD?F55n{7$pLe2`DN<)QD(`)YdM6)g z|JesVe(~|=p9A0q(jIC3*$3`keRbUb?*!L*$e;izR;O~v8Nd7M4%zYg+Y)vl z*faykOlV1~8grI7MJm$IT2*uZ;nL=DjuKXJEJXBT7#R`|yrHUYXwt_$ggC?rHIR&= zJEIuoI7d3x(T;b-V;=RmM?Ut^kADPYAO$%{LKf1HheTu|6}d=8Hqw!ggrw8Zv5qW8 z(vp|NWF|GaNlw-z9b%djJCXz?qh+ZlplnlVqS#4R!sd#Xs-)A}agKSkl8S0{dg>Zyj>}52Yvces-ur7CNU)|D?wlziyBbD69 zl(4C_7IAZZ2auiGr0JS_^a&y8xRjY>2v4Q0Q<_+Uf-sq)j=>xx9iM~(DG!p&9`&=C z^|WU~nIg5ZQ0)NrIKVmo+)1B3Jz$~)na8>EVUIXMpdS-;C`2WCoQh6#9slr$8SL?Z zBr5bY`)H{_>Y8l0^vW5u6&ye>p`eLKr$tW>IZy&cTi0 zaHGbWn50C;YAP2A0@WfNh+@!5YNlcuRI|a$6AUS~stgLhY`aThH!lRG+TZ zu5kbA$FnktGB8tXK1z;{C240^5-3CbS`c~^*uVw$%7G7@U z0u6RBgz3TH22)tU7GCg!A&g-Ib2!2q)^LSGeBlviSi&BjaEUvt;tz}X#4Jwni=}lB z?AnE}**OQr6vwdPp%bH8#i@L1Vig^GOH~l?F$6Gs90Wecxphe{s_H?lg4Dwv2&l)b z%7eMjB0yN!qt>7>l(>7;qaP1o)|vHTk9yogo)-BP$jpppf;c28Uagg!&&;eSmzl~C zFs?^51dn^5&DmDr@C=NhCUTt~Dx$%yaJ8IV2q*`;4nM^$4C&61`|4 zZJN?~F7uw(8%O{bB)*>c=UZKE--0};FLLb(KuKwsTSH+rJ712l{{_8JKyjQ)3Zbt0oI75pEa`7ve-> zM*pCgZ!-qIu}muCza>aSb^!5$c-$i(-(m~{?H_}{)FQKdGgrpuke`r`An`ybLQLKh zki!N4=S86!X<6QodiuOSJJQf#UHLFiliwQ>Ru>-zI1W^oEJD~(^oPE4qD^q0$J9YrXxC!<+ z3Aad09w6iCo1+}Hwcb#^@{uPT7(=lpWWpzWu_y#FDRi+Zw8ARHLK34wExbZ5%t90E z!VH5Hdzh6-utA1EyP9AL;Tkw3lL~*BkAg@tf+!93Ifykph&G%_kkw!9B`Be%e9%dMhIAL8)V_rmMa# zxjLeeFLclubx1PJjIf%gxiNEBQk`5M}(M1%3_EEaiPhxi>F|SsIUnsVwkIFM1tT7 zuK>VGyo-mdvxkTX2$D#G)JKjGv>zFXl7PL&lD+q73W-z~wb;nEC_0gp$X&#vo$3pg z35>zeD=68Y%=i+=fQ*)zjAE+EB~eDt0F7fBiveTFLDH1kK#eq14n(y7l;G%(ErO5g z=n#AvtL11%ryMrvppJ#Zv8g1*6qyQ-Xb}dHHyMEd8Zn3mWD2zWo;a+J`zR7b@k)Z= zkD_=%Koby#2oeK95CtJiS%i?dyhWr4JstrPhucf+0Zg_m$~(fRCD}Tm^oS}cs3g%1 zV#2Q$*%JHmK`;rZF&RqlYfL_RlQ?n5Axo4y$&->Q2y~DZHcOmBp+&h=l+|<;iyFg8 zsg&k;GJ@HZPC1x_A(ffx#bF%rk(}q;jrh5o%u&5!p-~epqtPiH!hs-D z862-j%QlaN1`TcdKwt|BQph4BibR?i_<=BiYAJTCko9~^3z3nrPI_R ztt!(t>eDxRo)Rt8NR`w{rPNBb)Jw(GOx4s)<_!CCOA!pg^UABGgu;qeCs#Hkl=V^V65`Ri}vvK*ZHn`lX&>IELt{p^(*5 zs=j4i6K5i!Vx^-wMN|<17jgm$bAlb&(T6Mzr-B$Kb=uZ+3XgR_Cv6p@c3K*CwFumh zB6ocac|C~WiAQSPBz#KNxG^Z82)3FSDqrL)G$BfSog*(h?i^`Wr8JB<1AuWp! zka9PXVp!IsLzGe}mYSndY!i=V9SkiCHECLcz%%Y3S=4x11zEhC z%~xOJ3}AFR`O>eLg*wkUJyEeXtD#bjn4WS(1I@6p&jn3F7sLm<;s|Mn5|iX*n}Oe zgJ9geIh5own~X^Zrj#tp1+Mfet<&;{)Iu!ORh~{;+e>P%b$Bo8i@vW7Fj))A&>&m7 znl&f+FDLOjXk5ZA1j8>}G2~s|Fl=7sZ80yD-sGL$=dIr8rQYndUhT!+6`QerZHk;l zhwtn4L&qf!!$YsT`$WR z5a!^6NYmMkq*lXStn-L}{XtT)wPlU9WDKZY`?VaF;r@xnb2P_tEH@w?Vj&K*A4(uQff6EZ{NjZj)xrwYfqm!qnRm;*+NC?HRCy7+?t{urD3u!z{xy|cJWLAFtU zQi|$3+R=5rT$Y5Va|s>F=k@v2wCyR zud}UiWkFJOJ++hv0pzy_S;=N`z3SR#R4g`~Fu(^uK&fpC;KAo|UXpa^CmxjN`ht=m zeBqpiXJkB#Bdlj1K3?bT-lLBHF{4gu=w0gTZEEg)>g|ju&<8=c9eweLRSM zdScf%O(Yo zysVLF?vAib$P;hzI3f;K4UjWp%k24OyAW^Bu~)( z4inHsa3OD+(o_xctrOK`6pV!coC_5*5I_hTLE6-E3g_}j(apKUjeDNO*t%|B+0ACj zPG|uVaxoW`4eWsaPHyqN2Lu&S8BS81^Tyiq@MNxOhJZrfm-^h5;(VCcQgjrd@0;NVXq2hFNlb^S0Y`V9(ht0 zwVr!b9gu6WSE3I06WZc4soy2yhrZ4u-@^0x`4#j&_epKjq!FQMt@i=4 z*5HN>J5{19s}JzCBYD{@Rn?O$-FH6)R8fbbOF_tmhZvDC;iel{nJPN z)K~r0XZ_Z9{nv;6*q8m;r~TTu{X+@}03rDV0096104x9i0052y;sF2%{{SHf97wRB z!Gj1BDqP60p~Hs|BTAe|v7*I`7&B_z$g!ixk03*e97(dI$&)Bks$9vkrOTHvW6GRK zv!>0PICJXU$+M@=pFo2O9ZIyQ(W6L{DqYI7sne%Wqe`7hwW`&tShH%~%C)Q4uVBN9 z9ZR;X*|TWVs$I*rt=qS7( zBTJsF7~Q&clrwAI3^m?6&NI`MV1aocJ1D53lu%d#iid%sNt0Z6uJ$>6pv&U3eXg|2 zcIW2h_L$F~Z=l7G<4kwX-tdj1QL`w)&fx{ruT7^`&D!)uDw|Gu|lN4w`@+m*l9 z+u=NZ5B}j(M=%|}fAZ52d>?;4!g}oq#Gich!FFGM1g&!be*Qsr4?hQ?Q=2?ONq7#0 zJ2B_nSr0O`U24@aqz-Bq6qJr=+$Gdnb`XpRMTz2Fh~8Q91h^1;2iSAKIS>v6A3pdz z&?5vm>c}HP{R~;;jzdE5V~|6x^N&Af*z-U?k?n)!LG|cUU{GCtnUjWSY3ZSB>ww4N zLg|P}P;0BH7@k0FmP8wdGm=%KatO8anLzBF2SJS())KHvX{p6okg5e4|G2rC?4!$bmX??WBKi}gKP-#bvg zKNsjP!1xHP@xc(hlkmb=C!|lw=bYT)+CPm7!8)_T|A;CCsh3kO3chCwPj5 zCte_Uw>DI4LG)B^dFALpaQWq#Z*F<#p3?)m=c8|4I_H{)e){LBlis@NucIEi=&`dt z`|6n2p8M^()6VhQ-u*w>E-9ISx) zutz=au`+}NaDeqF;Gf#@0NfBMQv!J)0S!11^|8-=AUlW1HUy7(2yh-KgomZ(vA+gN zNj?WE&Hf@`k0AYnVhYh<1UU$S8P+g96jR5$|L{?dd{9juEJWWxd}zZU3UGsLlgJB! zgrCx|BR==I57n+mEd?@gAn=nP{TkxI_PsBD^Ls%3?w7wM@~?>h%it4tc)%_$uz}Vx z;XhC~4;8j(juP}q;#~DNSe?jlZ(^K42A8H;#m*V3f&iz1 z{u2}h^C1v-3M3wyM2J2sR#1yV0HYXUkJvtisEm3Pqyi-#ZH5G6rPbt=|1hbQin8Ds2nXSP7=ogzl8^ph-@6LSXG+8rAm>2I~8}< zL87Y?4k42>R#W7`i*xYeP+Z#efxhb*@A@ zhkj~QJa+8BA6q)tx)9RVwL;(lacvv_lI78u3Z#PS$gDad@vZAAwM9Sz(w8u+SQOpx1XScD<0&AW^nUGW)29{o_Ui3MVY2fWn7mEGTEL`kvi zTGKWmq75f;Xuoq{SjcqSu8U86-GRWjq${IM+yI1`%AO;#tKvi70MB)&hFz*<7ra&5 zuGO$cb*xoAYgWtp*0jd8t#b`Kmf7Q7k$AL()vAzaMNymQeJyU28RqC2#MlKvw)B*p zL3gyHQO>4FaS>9Z19(Or6--b){1MNJdYQ_!!N)t+&2H>|7Ob~nce@9oym0#}-tzv_ zwhzLdCJW@r$<-vA-B@KW&p09J&i9|JjGH(6JKzmuc$n3l?}`lE+&e~SoR!+`Z`)fT z`+o5;J$~oCjl0}k|HdJ@@hxw6PvocxuXs=N)}l#kwbEEEl_FW?)Jh{6!!u4$E=-aDZX6ywA&GaR=W)Xvm>!oPnP0BKEf{)>Y(Bll-S|QJ4z9l+ zMDhlq{bgT@Q+W(;T`fXgS39;Xwp@FAz-Q(;TKnkdl5S-DUj%2fE_TB&IR~3 zCkR-7`u=5p|B9j?Ifj(F!A04}Is7pXVKZdH2~o$#&4<2C$)ES*3vr9)Kafpr3O33U zH>+Y})`JkrgJq}n51F%jbW$H+)@4?7TT|n91TlOIF@Z>uJ+4JD7-$d&cn~{)KC%@g z>oQXactL`aPLU;X7btf=wR-=iMj3QYCa8L&Cr>Vj5cBX40mTsa@Bk_JfJPKCG^JGT zvVif$5FeO(3Rrs$C^9P;AXj8A9cXy(rVu1p5LE~ii4$piGf4IEA->@vseu`glNxK1 z4q`Z9I_D~~q8hXERST9;=tmT0fGrdOe+GDEd^8Vu!V47yC4hGieTXL)H;9Ee5P%3I zLgH&K|MP(KM~4Zae*SP$ z2a$^Vu!{SzaO6Zmkp+vgcrcV`iTEHs^x{6dfn3ef5B6{mEaoH?WQ-X!M4a^x1;T2F-L?}4EayOs%J@eCIg38w0l*?GsMnAsFf8KK8Z6)e zcBOo(@i-7Ek*h+H7RiR`^i+sXT&05HHCaD=AGa z|2Yuv@DIFj4>O50>9SZl*jDg@W%1xH@UjmW@(#sOFKM?w_#i+B@RRCb5A<>|GiiZ0 zW0gsH9`=J=L4t~0iIw|7le{~ zPk9?sNtJn-m9D5g0E1tKDEghwWMl4e&D-((e)l_&7TmLHK0V&@gR zS(_2TR1Ps7IMJ*`NOTp8y)50y>}sTA&7c zpa`0v3c8?Y;Tdbuex`u{NQf5fAfXXap-SPP8=;{t!J!?2p)XOP6WSFZ$|ybP66!#k z2xz&MH7XDmLYsYBX7b4pRH_nz|N5lobP;bV z5smr~k=hVupfFAIC5uWDo4QwcI;R2x9|YnMaf%=WVFt>^4?zV1b8|`#^$&?drZ1|i6`>92XG-VE(am54G|`@r+=M_sGxchiC5DLq% zsM>^t+7HeM89E@Q?63|xz^ou~A_%dp2cfdhDxDs>CkrG(&|0!~XGP4TtgT~{n z+BsV&(I_Ws8as6n@YSz78WTb*5%KD-Fgp=To22zR5xXHn6l)Sl%Tqb~s|HcCi?R?h z>vjwia30ow&QcKkun(aktKJD;UOOqua<=#)UXB3=Yx;^|8lwfG4lEj@!3qb+da`yK zqxGYvC`%A5%QA*r5P~bFkD0e{Fs72@GLHE)Q8P6NQd7Qfb2aGunccgi(c3&fX}F)J7YA)(={K{ zy7_$;J!X#5NFk8WcLcM#%!60)( zj$y2E5Mk>etTPM&BWuHPpdWdwrkGK~FnYKHk+{CHxQJ`R6l12sD#Q!MATcCP*_blz zXh&Zp5Mh)?gZd9m0zTaXJ=2yvJ*5y`{5|BD5FwaM`?C-Bz*#F-RwoGeu9_ zDEUxhJje?xiCr4#D^6TRP&`1|h+R~SCs#a114znJEJqL&NGP+#WqduKyf>lTSF4;w ztt>953`S_A$_XNu=Jv?s#6<~oN4_jZGFZny1j8h=K4!GMiM*1$Gsa&G5pb6f);vAz z5D)Bu0F@aJ#`B(YE4m>}%pu~)rU=P#tVewGzi?MZAXE_KY!JQa7&$C#b_)mWzz+M2 z!*KuvW(o)CpayYJ9m}c?N(={dqO5mY5JcS25e)$eox^Af0WYcs>VOUteGn~`T-Fs+ zs91zLHMIQp00oi`_6ALzv|%FR!Uw_9qvX;E|3RG|RU>!^wCDPQ?^JFz63GKt%&2!w zm`Bu#GQXz>DUx`!=7rNC)MPpa#S<(b@A}abm1UoC0M!CdHq$8BG!RxD(&#nP?Rc6u zCDJpvAsbasn3B@`=hXxe)-W~JY3*_gan`UQXHh+X;-i)L;(HW>QWy-gH+{Cc^kv-C z(kSK-)x;1oElrD!0N=6?c2`i?6h&$lEfCFp-sUab1zvgL;)=*U zkNsd*g7*Lm=+_M>Ud**2^Uc#UD1dua-O#5JO%u$2ziTirTV`+sx|QL!8@B&csX((RUlHGOEM{ z0^BUa-B#Qi4hP}JJ!dk8o&!-Xy-IDLN7D!~V*eY{C8y@k*2xn4ObGa`?5)|}3utYg z5FmySeZJ)ycTQwR;UG@uPYvOf|23%y(RzpIW}{fK5Tf57Mq7>U-oN5Nz%c zyiQ%{k`L!hm?$(|5@=@>w4Jw=`lNAB86 z9tX31x8Q!z17YPe3grT!?z-LXYbwK~q2;BHs2S&P?l^Mq0B&RsG7oSfi&y3>7EY(j zLk%Hq1fLK=qTSY5a&}(m5HP9haB{1fNnUzyfywFWO`A-8gMkIrgLa$Xa*Xv(aP|%9 zWV_{od5DB2W~t6G`p)lR{}$-Z5pyl)?*PAzw6XGB4uP~m^L7pM-nQ@am!fKxW3kS0 zF>h}y7;-k)@TL|#2;bue0c{R3^%%@aK>81+2Lb8CNuPoA1&2d>t<%qD@RvpM(bo0G z*YATNrUv2UtMa0)ji!0GCW!4&G+se1~<%!u?pW_wotocZd(+$LIAIVot`B&6z)4#Gm-H zxA^^DS&?snx|f7D|DIuyNA(hS*qEPqx8LPln?aX>2F0&*8p*=nOu%p#9>)y@FknO|K4EH^_3?boH zgy%dnoXilh|Kfs-3+@=)mG$g`g(DsG8@eC@*AAspg8*6mI`4c?A5CR*ky>j9Z0O#L$3rk#{PbSTmYC)Ej?vL;)CGA20G7V4mN)CL0CS;Ln5ZIa@Saw(-8 zipj}{*2(9eeATpLTsM^~!(y=|}T>_5__^X;8B*qQyuGsN)m=br9)8MP)gZtHCmb_$)g8|GTLT}w@WZ!X zoT0|ik6iux6Gw;En&I2;Y5Y7!vMjJ#^_zVKX zQi;!L41rXhf;~nw1M?Ut^kAHLsz~Bf-LKbpsTJ)ooQesF(VsTf* zv*H?sL@PMC4Oni$M?IeP4;eMGjFj}`kU$wqQkK$`epJVw5_n2hHWHD21VWMEfVWoG z(jxHC;T0trBt5ONmpW?Vs?uo7A^nn=6fx#8mAOo2BJTkQYi2a1IZbNz|7exf#AY_N zxlL|r^P1fRXE?<d9-vY|#aBgIfsRH3#i$jb1-gmu@j3IzC^moB(N>PM zmD~xbGz*$g7L-6Z61hM^AzBxOF0`Q!HAqZxx`2s*O0OtH#}lqk*TSG8GFg}xLb>PYAX z7?KWx+7u!VovCW#I!0PauB(3)(p!*9opT((9tSuFSRv57NagH>|AjqlVjr@W#~K!~ zie)U!W>q;e*y9161niKG*pPbYgR7@3?P(2()_RV%nlfF7PV*{}bPUs>487}4xuV*w z^)}|41b?90G2TT$|mCu$G?Non}G} zP!JE;6|V)k?Q&|0TZW{UAqHT--tW=I;Jg5*C1X@(G|BuFE=$&7UbzzZUUyk6R z58CC!t#5_#j)zEPG+EhgP)@OSnk=g+SNWwv*778wTtDY%)gS4B(~N73CJ~buaVDM! zh|yQ)5+B4JDE5bnd&lA;>LtrErm>ADqU6v8`Ow4^@2uhr;PXNty$G$ZL)>c+1F#jR zm`}E^*+0|y&J+Ay=;aY?^q0yb8pr=)be7hn25Ya=- z4S{gC3IgP2H;45YE5ANOW2>r%vkX!Xdmw;ksEOF)|LTE&g0;?B`S_S>a(9n<^y8Ue zd4N9bQIC7nTQ3W5_`}mR9_#)K;|@RAy&0}=2pqXStbxZoa+fIX$zvXfanzbhg}J14 z>@ok4+d}|WyNqkcXg8;g!|LHLM!j5CKSxv0Kd$i~$vjemOO0J>=PP-y-I>zsr=GbqJi`m6F!b6TWkXgB;=#r?|z3sPccX+~YiVdo4Z9-b%ZduA4px z;2{v|*v@x5brtn(3lD|y4t}BQKs>5t)s-0TNgb50{N*cedCbR9^PB&C<~tv{(0hLL zpesG;PtW~1aCo}<0yn9rycxC5ft(exkHbC7{B;KkO7P?=r}p&I646wjQ1lyAn8B- z1HgB~zSSr{hiJb%(LN45hweLv??a&#k-+$ilL)E^@H#;iEG1840ZQ8`z!N<5vMbC; zsMM%58%#X&vZ;00t5FlRhe)*n6DoP&g>&Eq;mNaZn}~EcpVa6K2-pWf`5d`{LZ&I6 zZOcL_ERHH1G1qwuZDWTW@CVTPB8xbm|0jfi2k;EvNS%^7fU9Xk)cGQHIFk+hmq>|} zD?y7p#6vnP2(s`8#rnfL%)`a9zJ^FX*2=$hk(G$EngIMUU_m}U^g}!RqC`XxlzM>T zW3Bz;m`Y@gL)=6`^btwyx~oBl3p5Wn@u0bC!`HaPK9r6{oSa$g4Ht<+6v99Q0mMX1 zL7n46)G-avs>5JJ#Z!{0bl|UqQjEU4K_S$%Y1Ap&*gJjFoCSpk+%d_ZI=j*5(-oU;gq*%`}V4iQ7Eh#bg*Y#Ei@6X6KRkReD?X&Hp% zmxc7jhP27hfk+pW$f7*Ph1tkfinQ(6D`~W^ZmdT8x<(tEEwJ21+yYA=go4lr$A&1v zf~dB*G&Z@Uwz;&+y2MLmqf5QKOTNrYX6sA9{L5(DOTkn&^|6OCi3FU45GOPdrYi{O zt3Im%KA41_hNzZ+l1zB}7k6j}=D5rs`A2~)EP#>+JXwc&2pFI#8Iz|M-ZihxpAwDb05{%?C-%)odMPaZSeP&4Yk8&G9(t6Q@n8SlO$`=ASy)dwXsIiC0 zn*D&$9V!`wGm9HNi1-xGj&zO(um=*EBO~QeTr9~CX+VSco`+x#M>)y{t4@i4QtP>t zuE+=Jtc#hvo-Y+m{|;-g-~34z{80m$h#n;n8@(t)3Bl*YiU%lCC8bS?xKf5dQ&xg4 z{DMXZC@%ngM*HeC0A+{9D~LtC0CoT{mb!p-h_Bg#)JEk&^0KQ%J+%NEM{?XJl$i&{ zY(jP1i#kQF!AMnzm=1&p&*{RJ1tpFfTaF5$2pjp10;$8zK(Z5xI#o=M6@?&-7}m*3 zxAUQmV||+IU zs;SE`HHDh3|8!tjZS+t0TB!IMLUANOQJp6hbb4z=u#YWTBRjgZLJDkp*s3wEMw`? zs(sp}J&1sj(zhCyvyB*eA-Z7<86_NnR&kZ`K#Wp>vCyzvwq;s~ z0NYSO+PkexQu2WQ`Y+%B-4Xz>x^O5K@Bq0X)P*Xw(JfufINj8>SpFnS$?I5;&90G+ zippCe|K!`M$BLmPN*>@0-WvMd-uMSzxQA70ArC{QV0w)S3ZdTk9mHXs+sU2X(F*~h zAl^Yzo#S2tniVGX$P5hMeK?*Ha-zD(9>kd=psgPDkskh7A2!2Na~+fOMUJ#(9_KlS z(2SV*z2BBm2mOT&8A7!MvL6SUqllE=3YrM@O`n2zV7l-f;JIGL$ll{A-~mG4%Y}&8 zsht4w;Gp8J3%CGvSO-Y8UEFnHdvVM>8l-UAr5D~BIocx1p}%yhVH++a7_5k%`Y99k z;gBk-9XKjJ8l`gT;Uc~WdB~(qB2KO`gEKT$b82EI?jr*LUD=g9i_+rX>cgRo>uJ|)BeDTnx|`=z5$rU;X&h%u8pQm!Ww z0bovcY8pkNX86E947pQh9wX=4qJnM+m<}b7 z)*5%-6>^2>owg-038b?5moSL~u^|be0Gp8*YO=#*z8Pw_S!$dR>ZEoXSu%oIZkOyS zQJ&!i9`Oe^k_u$eGl5f|HDjRe;j(}5vVveV(5VzTQ?%&nGq)%*2CF=NmX90LljyK8 zj+_W~Fc_JBOdI9XhDe84J%|YlK(g4d{UYmd#p;PmUK2yJ%0z7Wh#|T_<#u_r>AaDt zQisRZYOeO`2LS82o|VSlGBfMCx?Y|{qq7%^YkQgNwcZmI^c9Zg>D)FX|8tImj>2Ul zVG=3X2*oH8;GUJIW{6k%?WWdbDWQ#8RuYS5zH`V2gv20TIG`lH53uq&l5;wm3&3ds zx`If#l|z&Uwz{~>IEAP5H?}_*a#e%nX8@IiM2*8F2{GQB-z>Utmk913H zn|&Phxhn8xj_O7e1i7gInGAbGG*}V&Tiof=xp4bRAPzQ9-=;_{y1JI1Z$cw`G3f#Cc1ycot z5qtbz`Pd;d_t7af4#?n&@nDSOOTLNV?}x~9=?l(?XyWFxl($$gH2=RbWsWZY@)&Kw z>2|(mog)2{l}9&-K0lX8U-Wlt^e{h%G5=qL`9SQr)-=acHXlScw`({T^&M{Wi0BGi zZpv8pG9`FHfgcvJ^HXV2w7RXZbEE`QA=>>1Otse|Gl)sW&?du^q`9 zuRdKY{P)jv=15dEu+2*Vcq z^53GTXcxlQ^|MLCk=LS^_X(A!e6-PJEsFf7aB|I;`B}+}nm_&L00?*x2J-qh@ZiA* z`Vi`SFwow)bO+DjLwLX+!h`+xWgNKAV8V(J3U;)Ju_Q_e?#{`ZcaGh`0}c}|M5s<3 z%62SE-pnWyp~931&78wo62Z%i5G4+zI56nJh7j1Ddk0}1Or7o^Kt+iZX2y08M0TVq zFJsq|W{)O4NYyG<2wD&B>!(v7L69BON`x`4Ol{k|_tLRCkV^(8!V} zQ?6|JGUm*hH*@an`7`LyqDM~#5+@Fjb?S5g83-p19Cqwp!-1d!HA2%mAQ*|GX5Bh9 zuo2#lqhnp`gQktI+kLS3@#MXY3^Yw0!t&Fnucv&AaPB~O=lJP`fb?F;dk@+TT#4Rq zM8F8~Jur%}aL146LJmBilD>VE^}`Q-1Ie=!1P7kw)&mcK6&8XBvD4s#2_mTAWbZ_n z5rG~3)s#r;v8U2G=y`Y0T#=j;Pf8tjL|%Y4m6(x=ETZI?Jtev5R#o4fvsHNGmFHha zBDOapd`v;$)Ik7tR3Jk7@n;^AB{_*wJU^1QCI6RQdif=oVTw5>nVI#b-DxO#_`6coCl@DrhRv!nJ1oeUT2+huNfg|WG4;;-a!3S>Crj<;A0OyHL3H@Sdl#N zk5L~k8JKwe*mKVT8gbOofxMV8Pd#JN)##&*&D?Ykb_Rpvpt#eL29>xdaK$BK_DNcsUrKLLloU_k8_UvQTK+i^-k$C&e zv+g`V9>mXBpjPWGxZ;v~5U%&!Q`1$@W~42m5GeZIs*XY`DW&*Wis?hsZu;sup30kO zvj~-XYN}-I!|K5hODt=Y<&`-y$t9b7GXKgcpRB`~MkEJ;IxQP@+soL=*&7@NRV@SEGi*QmSzR35A=F#VYW0YsmIt{sB0}?!_kceHuanO||3ud47lJKsl)d_epg16 zjR+w{^+B4By>-`L4+L=3>eyqpKl@NUc}MjWUii5Ot+UUiWO)v{=>NjoIN9e=KGoBQ zMh&;^9mS2c)?9lHc9QZ*ZuUQDSFASMp}!5m?{gn-H^d02d_DHrYrj4B-BUIl$~v%f z({ej=#t+EetFLl8{xFOXKYE)SfB(w#XNLazqID~O{{8#^KL7*RJ@B23PPO5TJrF>i z3JI`*TXM$(5?8KsKUPC-05|gOJB{H#zU=pGeqxdB#O0kMo zydoB}sKqUEv5Q{(A{fIc#xatyjAlF|8q;V-bO1+H*q>z&`^zP{JHEp#nW91mKk{ zgQ_lXX0S&D_nDcxprju9ux9=|3exP2lZ+fip(@uQOL|5o9UvWKAmusBfw(kG_|zy) zdDTzJwBugB91(^rWTT!Q)3#VgMEZQk7-(<5>rCfl&goLhBeL6iV4n$=vj+WPHa+CvzZR zrbIlpf798<zU_9_dC?|hl(&5+u8oZ zv!E4iWP~d>`(7%v2yq8#{b5=NpcZ-fSZ#V?D_cs{S2FrY?zax|TlM;{t5;#`Ud0Ll zva+Lva+9TeWh!ggZ1=dXWCn|wuPirI z2rz?SMAo0S+=mw_Au|O2VP-T_bGeJPU$MfOk_Tt49+600JrYrSUh=cZGlNJyD{rS{B{)2gIzObLNDKtJ zVCk)>F5`BZhVCFl*@4*)GIxmA9eQMM64fD2_O1HJn~ollSn?6Jfn;gZH2TNe`~IQE z5C6oMK+3A_yg7LU?H%r$IsBm>pm@QE9Y=AGOx`2o5^|y>^=L1N+8Nz;$kV-9X`>9` zA<+50=a0lJ$nY!^zVNY1ysTi;F!4W}RY>G0KA%=io);n0{_|k_T*` zM9)5Uyl3so)YMOKh2PwS zI#|l-aayt@i+zj*0T$p)ctqYn6ax~V0Y+5*K|t3D9y#S+=Ap%6^~Hx^-r^+S0uJC! zRA2}m*8_kI=534SO-oiy;0ZopX7GhWpo8eS+5w`({t?UwD&V_ZAVT!uX))UWIsZ%m z%Af=8;NFm6M&zCnR$%WDQaap~A4!D472ohZUtGx&Qy?D~qF79URUpZdQEXvHNZ<60 z5j-&0_8o+nQ3g7&j%bYy1_mAk%;5vz7eUnDHqjwM*kJ}jlCe-q`d~&{@QR|G19Opu z88k>fh?b^61aOobQ{3L>oDNth5`-yBI|)jV;b%W|#{?FcVdz4(4HEf-GVq@<=SwL`uj5GLFq7ik>7o z3?+u*>0ILSD5J435aC&4;Q(9rSQy0FQx?V*8J0xCc_Hz!)Hy0#Je_0nLH_|*prNyb zla}4%lHp^PiY z?j#dN22SoIPu31h{v=S6i%O=4DGr_=c7!gfVr@|(Ek2A;5G7F7Y{PR-U=pUu7spev}7H zN)A$4rK9afBHjmHro?ih$OG5|Q4q^>j>H9;j#0EAV;q$?*`QV0Axc!IF)e&9^7C0QBdCtKikx8g9|X_`^I%WSG4sPZTE{ zUI>Dy1B=4XQc75iHdV1iCQ{VaR8R;&7vH{4j@PiUWwvNsgaP#dyJ=KL@7deDFm<%q>-It5X^Uq1ep5HKO|LTY^i$; zM6>0Vw_&1`1gT{BXvhGm0MgVD66sD&$dRr{k~XJMU}@VCssNFg#gz+*#Z@|>6Y>0I zE4j&v{Siw=YNdwZflAz30TNqnTuG?mh;ES?G*)KBVPu>KyUfGeAd9lB**&!C+W@1K z&MLdSYC#>;I@kkrO{s;5s9|u7t5}Gspo*xK%{`nMKRgXYG){JbMYnuQxQt6rM#i+( zi?#ZN*onn^WNWqFONq7$znIORK@vH^%EY`&yvT~OE&oiWs3(0Y4!wkHnzqN;bQ|kQ z)WnD>xY|obc#9BL-L95AygnhZ)*~dHl125cz4r!KUL=VBNjoi4+X<<@-MGi#Z zgZmr+<-AVYP>qt_$mgW(RYd1}lwRA04&`XATj&FW?E|q?EcK`k>(EZQ2#@C6t7M=p z-4ZT=!HYjM8%mbT--?8o!pz*t5a998R0=L1t^Whx^cS%hBiFW#;{}u4Y;E&+ErEe8 zvxqH4lP`7{JNq zEblIo`nnMz8cS=Ah7UDS`o?cZ#KYBO&HZ(TKHS6kqOZf~uK^!00w=HnFE9f)ume9Z z1V^w0PcQ{num$fE8`bXxZ!iaUa7NUT2ZKo-?U96lC`usT2y5`QozBCCFb&Ob_L2!D zxo~B0QUlrW`m`VopD+(=gGLG)dT} zB@ak3lhg8Jv^9`K1o9*okBs>A5&DhSQJK$uk)g!NHx$T=kWG=5h^+m zfj*pM)D${GABtt_|E|{^<1q^9aY+zWa&0Hcu8*Sk^&cmQ4iCC>zLdRsY_7{a1huSb?b)df^sA%ol^{=#3;8P3>0gNf_Ry|m9jf!}M6MGHMc9qvZoY!Pb*u8L2ETlpnWK<_4mJy^?GbC0|^;K(iR#$abbD30oHCKt@|c5|B=N2*U#3pJ-koTx5b!x=Gmi($oGT*Jk2h(;!7>fC9nH)yuEXu3CP!nbM4 zcW2T!d%rh+$9I0u_kPzm%N-qaDII30^^IU;)PY_wjK!EQ(FUbEa?>ggWs@!hCoct;SlQs#uOfL^GL-sbf+iPt3M zx!>iHT~mhXwB-1WfB)Wkgx=`MgtXSFh@W^$u((icc-l>ihod-%Uu#}Ma*$79EB&5! z3tv$epNSpcOc^tWhG9GcpQxr`DOWT0RNwXKW?IK^Nt7RMf8UsjpTo$XdPq?1sFR$p zANbk1M8KbH%-{I-1Z9v%Cv!#r8KJZ&NfMgi5`HXCBw!RrAq{?nKS&^?S0JKWNm6d$ zFQ+1JGQ>=zAO`(lrEhwv!=MVXAdjafZ>gZFbB1@~pn1lpP!M6YP`Z6|daf&a5k|rh zI{JIgx}+nZ6GjOnTl&DktQA5576zXdc6k>X=<~7E!YQUJncs0;f zVI2lWf|vB)@&Cdvn|mOld*IElA=0`x8^|*{A|y_ul2oHF8Y3)j;{<)2Cq4iu&SG`C zIH<$;^Vq6QwxW8zq9z7>Cr0Ir+~Rp^rBXb6zX<#a*OoAXC9adoy=xNNz(cuwy0Yc=Q_kCO-3bM<|JPpJMa2^RSG3pbfr!{McuD*R(eFJ_xJ=orNfI& z3-^oQ2mhs)VkIsXUdBs4<=f>8fhBy1<>E7J(z#@fqDA7HrRfJo-p}NsDM{aZKHyh| zURM6$`*fq$Q-X48!ts2k#+8X3X3!_*JGv5M&a65-rt0{LWZL)7-M4;6KYvTVe^Wp7 zPe1lofA(L$_IE$`fB*A`e`;O|YhK3K=VnI)pkko}vl!z_n{_0FjinC_gtg9rRsguw2c zJcJPk>U$v2-nn!G&*2k!5T(SHF9pVgz%k!Ijvfb+GNP$bo*B0(}``<8B9yKkXD@v!bfiM%g8 zx61LQCBvQARo!uWi-4>e*ZD$4el;e>mY=)NXM{Y4Jb>!sh{vlp7DBdmd;< zAa@Kb&#au7lPEu%9)v(A2=;m4JawcRh(q!QDhfh@CKPF&f5@T>K?NaTki2}(dH-jl z4k2($qN}_^Dnf+zyRo~hHadtS^2`&cI<`tg$VSryBygZ4VT)2E(5PGtf_13OOSGM` zJP!hOx`g0@EGhFTOwAzRY#;+BE1^xgNE=GZIq9s^&O7l`%8VUW!_7;jw3|oJdF14! zHv#z>2p@jzvFCumPjX`R6);)bZz>eeSVm9~lK&vaVocNLb2;e!VAA9bB>bTz01=d%5B6;8+0!6fN$AhYM7TJ0)bpJ=*d+-4j z!1~x#m*1oEy%r&1v3g6LcjKLxQ(yD32Sxyu{q3AqUyb!GQ@34pV^?84YSvnB&DFtO zdyO{XXOnf$v~tgF_e)`|g*ngGJn#z&7D{j|D4&5Adgz}$2(K?K30(T;pb=unFBX!9 z08KR|^2-A_N!{7&ufYym?9}{J@tm{K4hh(RcXcwJ1AL{`NeIMZ@t}LqPTNDa@p1B< ze|WjaZhZUcXYRM=vF`y|2a4ya#rGNNoqW9gXP@{S#K)h14j5b=d%X2$AGUT?bkxpMU;|#LI(C5C47ivTVB$f_L~? z97Zz`TIctpkOvm_|k&#wBZeL_?C9e5O06_8fi?J!_=fuh()X* zKI##!erM6r!`Sz{gXm`6SCk&k`!;~xPTNI?#gkcBklA^#DXNJTD^k&SfZBOw_{ zNlucIl~g1;)~IG? zd|&k1CM3SmQCdqB2}Zn>IC=F=oW#RNc-8^8aB9;v_t+Fd&~Y|72{E5tQz0=YX-_?0jD*wrw4pc9E$qO~#l8&ERt)b9t zrc!tIz?x3=Ef`fwJFtZ}7C8qun5)k|hAI(~q)1v>J!5nH(^Y{W$aT=6>RrP6R=NZ= zl5u5YUaW*Qh-xO4p|J>>4%4QiI@7NQ>C0pqYEZ%;vw<^_s$4huj-_5SH>W8VpCI5A zh|Hxt{z!*Da4L|7;PSEp(JVpOg3^QhgR|-=++-~xkH`6AQunCbKHPB-cff6NI~B+~ zK(fw1siS55809Y&9%RyqoYlXQsAL(WBrY~wZ^aYY3v`pDba+yg3oj`UN- z^AbGtQMr5=w7I@A?m*D1Ud4W@x5yH&KjSN}_5b3_x~y48dBr!7cEHUa>H!dPmHUs{ z-Zr-vo$Z3n*Wd;5)*rroUT}9c-2VPHxwvDlNWA-9nGx5$qqHGjuQVBRMkCVaYjJGb{rByw^HIRDP0|E8$)p=A$TLc&@MCSk(TK=)2 z&E2CO{dfSjOsx-l)Z-re6iKlDL26SYOaCE9VJomkUFuV(WHzLZGz7LgBcQ-z9-AAK z?&L9#mbjXvyJFjUS`vv=$%~u_fwio6?I39j=sxc1O+7Bw9A*16+SBg#&0?)<6Pu>l zAtl~Qz?kOU2PF! z8(UDiySBP>xZ@j_2~7(H>_I*b0WBG|Odhv!W*SOzD~+6?JRYe(Ir81JsUzkxr@72$ zUi0tX9Opc@xz6+E^PK}7Z9)$^(Q}UTj39mKN;i7Znf~;o_dM!Vce>Sk{v}JF;{fZf zYGv>8Fm>50=IRJ`jmXpIsGWlzum83)gvuUl41T0x=!q8M#w8L4r3g20b`VZN7zq;n z!*$b@S?QMYslroNwCC8t-k(JHjWFJfK?L?WxO))09z>U}MhlA+(v!angg6nGkmPs5 zcoCI;t>BlmDM-KA(^Wi2eXBqxbD40{Nv>{w>1qyG2A4_`xs!@WB6A zXltK(=YP%b5-i#e~;EAjawh+QTk_suvBk*{tUV864)Zqfv zAzr4!`OGe)*vSGhPy+|zD*yb!qk01aGjJt7s_wcc^F}bV62hOFLIp)6s5&sDoa6*U zkOm(FpdMiCV2|8-utRk40!1)2W)K3%y0i*D@JZ%CiqylvW z1&#kM5-%FnR=0_Bh@4nZ!))P$J`1P))$^wO`A z-~m+N@4CQ_F3=%EB+On~5FJVg1NXrn4u=s)c$5wbIjaSQP4i$-TDnG3a;mcUrFQZL z7H@I%a$-Axs0n@1)&GX^N{$gVfKk$NgCr&;sK8JjK=B+zF(`_0vt~jYL(zFiaraKK zLQ*jrTk#ut@%(VE+B^uwxFn(6@F1`T{I-OdaKii2<0iBFzjUFY?QR#~yqo65vrHqQAghlX}hZ-{}Cf*?_m2v~`f;8|! zDVK5}!~!Ut5-OAODMSKqn6V6FaG$2JEOaA#91AI}vM5Ky8ksTnh@wJtqAJTWHNMh8 zjuJqy5%_T90RMavC}-jaMdB{=5-iq1C_SyyYy+L#5-OSUG&b)rqwR>6us9_GL44=}?Sd<~<16%I zEX)!D&_XRd@gTr(FLROe7NQ~0=Q{<$I+-&gc5xu$!Xkv?Bsfd6#8Ny(0(p3X8RK&; zo98IdQ#FzhDS+_zt`kU>LOo-n?(|YQQ>0$Hb1h~fJeA@-X<|Ila4(z&Fa%?x>GMdRlt>kKA>@%L}Eqv?`g=#ix12sm{B9U@w1R?rkDCnw5Xf#yTDnS;c zLF!W^q!bwy5kvOvOUC6xWRES6;!FqPM93HzI~!;M8HD^;)yX zU*t_-8n9rt^Fo+)VYqQwAVyvYgrs)QV)&F0gY{2)^;CWptpe6$h&5%7m1UH*T63mZ zQ3G7bbzODFhI)pvsDo&rCS#FCX?&&xnnq(AOKLiHGkJ_3$I=f;m7ZoaI%O_{%+8&b zDo5+aWxoq%`NnSmM{sELweA9b7>D#`%YB~5ek=!nVq$YT2VV#%W=`XClqYpoM^Rj+ zX$1mkYv*>%2YrTBfX3%~f@gTli!hBMc~ECwwE}vi=Nxj*CBY>5ecLHA0AM>4bzVZ;(9qbH&DmU}!w933aoHo4iSEma%gy#C2~2iIk`pVZ(`_ zNRdw0cD)9RAVZ5pRhEEvmTU=C%jm3VHzbdDINseqe!D{s1Je)lMO z`S(tAiI)Hv_xxdiJ4l$imw^-Mn4V@xC1RSW1AkcwsVKObSeJ$lc#vRMdH+oWoW?L6 z#)(q$rtQ`LN=RDHsgMdXC(4F9 zn2$8~Zn$ox*2PvmiWDscn^ddyHtJDWs#SyMA7DzRbQg8G5(0dxio&>i$2gIWisb50 zDWD3*%#W$+aE&$Ch>uv0l32jZYO8J(f9h7Ov@;>@7_EFXK5lK%>v=#!*-*;psRPKueyF&RR3rh6WcSy@+Q2{ zCgT1pe9kMq^s9&YE1Ai~n*U+Hf``5;%)X)-A@Zx64T{7x#p_N3y9ln984Q=>Mwc5zVf0}qPs)_BbU6=Ar)Tn&Ig4|5wUGM_(*7;q1nx=*&fq%j(-aQZ7%tmt7&*{a8#o~(<$(XF}|ZBJMCRJNjPr;pa_|QA}`uO-Lq`irfzWXqa7_G!bw?_&C&+bJS*UQ&xvqA2L{h;kOfHaSq*h)$wsNno18} ze6|a@$2}+zq1!hHm=Y}!EY6N6KTHxW!q*St693Q6mNs!U{_{Duu^UCJ6wlE%((xS` zmycg@$E|(fYEj!)G0*3g&gn|Pf3Y}%F)Z1V7_%K3t^FBi_tQ)}h83O970<>P+dbW(kuD)z2%CrAw_V`Z+cBZQO4321>Tw`6v)0AL)%j5~ zQPeO365~@=A~bTPNgkz5KBifE%v65OR(|A9zU5sS=3!dqIg(R6@>{G|V+I%|SBn$L zJ0{hqB`t#I2SO%)z9w&yZJFJt(F!l$;U@u8Fo_aP4U;Sp^V+%QDc@37snY7Ba?@RQ zD|<1*X8R6Ii1kcl`*dpK>wM3(VQOY$4BbP_9Aiv?jiPjygu&N-rU<> z;melqS3Ke^H8R8RT55mor6V93wA!;8zrE>wRlLd_wJA=AGE960& zT|zCQ*%g8zL*Ur@f^z7y0KGQWnIekC#K24h)HKc#|4U|Xv*g@06 z_QA8l<&*pSQ#?cu-baG)M}++kA45^SA1#AJE8{W%!T^MU5DY+pa)I52fd^S!SjPg2 z2Z99;CKL#v1e6j3J!~9k@SsSJ6#q*STz5{M$(1Zyx_k*Urp%c%YudbtGbhe{=lsn} zcT?WEburaFz_(JUN(f32kc~ejcRh=KXe3- z4g^Xt9n^vLh7J^~Z(yWz@mTiTS95RQmHl`PgDSfFiqYRag)C48n$eTwM$ypO@f1ax$GFb?L6UFP!;bA9!UgpblgHOc z(j$8V5li%siPBQ!4M<>t2LB$2V1g!@v4c)Rz30+d^GrC8fV>=489xLez|TGQ5dk0%q`Y&O3CS z^AA4v{6p42>iBccJ|6C)E=#|_uvzworeM1C!*&(dKIH- zX89(QGqI^7k3#tfq>w}!i6odzItgW2u~CVpnp#RXlc%;O`kADZ*6Amvj;_`zt&J*( zEJYq@1O*EvEJP4H%>OzIZL}J(;K69}Fq!=d$!I4mR2UKIy%=J zGsgql#*V-t?gNjBDBISeYfYY%&p-b}@*b}+2~D%j!{%n%JAe9<&pBq4w2stQX)SZt zF+)Hn!!jA|v27s_O!7b`qpb36rMV0i?`0QnfC%yLsuRpN_hL^=i(K+^HvP-RrW?ZqidtBb&}YmdYDD?Iqdn zd+@@qL>~(>p>)p_|0ef*glFfF+NDy*pd`tP4Qo%vP|uX&ttf38W zm_c-`1AsW}p$~ru#2^ZBh&4%ve;~vT^ROpf^?Az?-G!2T<&TI|9FPC-#lv~E;~ev- zVgXNg-2w28EzC?OEpx)g6$y?@fmr_v? zCfD%~f0!Xm@SCMg_EAlW)I%S}eBL&@X-y&?!~^S?qfFA#P5i*IjgbLofnpiXcv7U6 zE@=m-?sc%N2xVnLiC|0EaSq@N#GVAf=Rouc9SCqnR#}m!Ot9(Di0bbk7(rLL)}_uQ zj{k&-O9V-O#t8w9uBRm5ipWMvxejoNt|jo4Xbs=tPMFYBCU|NP1oZI$iadZvx#Lkw z%%Dh<)N~*?)hUmVNs)i}G&UHEX-VWEGJljvp?q@(Mcg4tk8x9P2S6DA zyN4k|G*wfIl^0NR7*ssxB%;>3d5IlVzfzs#dhcDTo7ZgQQwT;diNy8pUW zZgr_EThhAp`k9oL^LbsF0JnBMVXf~-|u&GNV zbQB^ATFk{TUeb{(lNdoAr50X!?ypvpuY?**Hl)sa^SfCx!U>S9>V zK@XO&I#btqb*x)Q5&zz0Ea~mdUR?qjfeNMAxOqw>^zsi`#T8dLn+c4hE!TknbqC2N z$hF^+Z2@8rZZ>|)u^|A_m28o~AUYVC^6|BJTy`bjj!d?3Bk!f$%c_w%_qwwTmwZDT z+qepI35y4&PSX&+I zPv832Bx4+2otdQT=(e&&brH8)4fU^6Qn0@c9dHp~?Ng{39gZ2C3)y#ak7GWwl#0y zrGVqLfX&r_&-H-O#efs&fD{OU7AS!gsDT%_ff>kw&vg>^040$yf1vkyC4p0Q)oKIb zU;bbi1R-qe_c$mBW(2W<@5T!?D)$3gaYN~A?`u(f~6;&87Nd4V{9AAt_*0d)ts5-sIvoF;0K2#J%3 zXp&fol*nk7n2DGOX`0xHoM>sD7>c0CXP<##_HcqGDE||Q6ml%cbwt2ouVvc0L1CGUtpG0gQ-5Y361r zUBwarMPSb8c5KrU)981VBNy<7jm-Cc>qC3usD~mnPUXZbK;aPxad=Az5D@`@_lOayWl^lPQFx|t?TA7*@)JQ3dYEB^LAVrIAwYv67Em)4RS}Uh0vQeU z7G9B7Aw_J#0X1u~7Hx4A+JbVL(j3_r9#R+>31t%aHFk<2lN8YyCh-_c(SDU-Ox>{= zo$(o=p^mz78aFwPriX5?AtmPqlu1c@FR73pH2+HIF=lZQAFgB`M8QU_WglC4i2KnW z|ACNG*+LBBAP;F0Co&-^@=Gg15a<9WBIYt9@)c_d6%MUibvHsc%Ab(p+lV_N<`QBF2H6&2ZW+d5pypp zqvBCK#{(62G^01fM}Cw!*KP2VNENLVY<`gY_%0zTz zsdaRt%LAz#w4+fPOn^j5aREsXs{d33#DoOFNP%RklcX){AW5#8L6-zCw#pJhF-5p) zNxVc6Wz&kEIz*#XY*q0}adBsTN=JRTQV4Qe!m2?kiZG_OOuXbvz$7UD5Izt_7|BGf zx@4`+bP~}tO%Fh%`a_1ulCCEKo-47gI`OWm*AK7>tyJ`moB9&y)Te1iX6&S|P(+yZ zT0qiD5d<|52Bj4fnNUH}9Orfy#yC*-R9^{uPzl9i6q`ZudLZ$7vBPn$H=(hSBA5c( zL-uD;iuYP+c7Xh`5g?VaBqgbodJ@f9mLw}XFqM{u`dH^+Q*LJ*JOU$0HAO&`MMHH{ zub6#EWrIs~F&R@70;4+*#{Uca<`1sJ8KVJJ12a{F6`_WOSeiu;2G&=&@(yMNCE8k0 zRrOSNMO1r+E9tP2d^NUn)mc}SRsOJ5a;q@RNGT;~voaJ~qm^(?bXo_=eO;JG$bvxu*ME=T)q!rnBNn zbNkgN{gs1>lqK9alP|~^ulrxIdp7FWBjisd%j(UVp$?#^*~{` zvcB2-J2CpVK6I5ACI4}6k*t$f5^QFvXNGxl#zu9v5$o{3nMYucc!>|Zi4gpW5& zIx#2~V)7CIr6dQC7f(?ZPho4B@i^kP678m9=7?{f^sX^%65VE?4m*b4=c4OcZ_`$> ztE;j77Lxf}LkKsWlGnefHHc6EaqLvU=2CHlD1ZoPr(m2p9rtm;>Jli-6((nHQIT^B zwLXvW0O#-k3+lQxr^o%q$2tcTJm+&j#~oVg!?Fe#Tf}dy2LX?9FhsW!-q>`w(SA?N zj9g)KXral$=>L5|Ysw}OcK5D}h)ok*@KFFK{7z4?uir@v#se`? z0BDE=iHM4*4vZ*Rc_xY%9Ksd6*Lp3&f6do`?bm@#*n@4@8{F53E!c`(*o<9@5a14{ z*t&Q;5Vu$ox!4vwGBw`j)3qpm!HU^Gi=E+18;}f{>rfWs+MZv!z^&Bg+{F z1OFP!A=|ZA&LsiG#DS8oJF)}eleI&b2Tl=Esgg3H;42|-v$x$YRFy5VzxM~0S}77- zNgn`s&|oRoV!07yxunND;Rk}2IYHTMxt9acm)Hsc^5!FE;CnI`ekPKaD8iTG+9H4{ zBNc1n4@*|6ttCHBDsB=RgYufO+241PCwszcP<$$iX@p0FZ|M-6tO^K z!4Ed&x|rkV3j^r18Zi^YJWVTfkv!kCH>DKj%Pcrx639;PG;I>%bkw*EYnjUX(#Km5SdAQV^hS~^ow z+`P`EHF`hE2T>+*sCJ8kauZtwSwAm4td_|EVB?(hE&@BuII15fY@@;QO3rDHmT@Urkd z9PcPPr&|-p1<&tB00*sW@rG&yabN^Gp$2gP1l%L2zB5KNQSt@SehQNED`BNKaq=?( z4~X$Hd3bvNQ>9!a6OL*VFHiB%y76%U^gyo$(E{`#KNIXw^fR&X9iI~)Z~yc#!K>sE z_05i>n=|#WC%iJ@NfUn)D~}*v4{!yt^)>Mn{SZF+fa(Q1J)1DL7!O3(2g5AqKc&@}6Pj-zVBh&voEqvlAe=uFAmZJsDEX)puRXKnErAa6n(z=n`s4vkc|sAwrmvR87irCy)+-$DrNmNQn>=^o&#sZ#RGiTM7d(>t;9+KHKqZf-u&p1=Qe`uZj3RefVW ze$MkkSn8bkK;yYxdS~C>{d@TF<Htg_2_HMe2F`gRw ztFTDy!KbJQ*I^1D<^FjJ$9nQ9>M0lh@o*jxA&_UD!e(UWoP5kE3ISgH8R*Fy^v&6RwqpB^W8ndy^lJF_=FD{`Y?3^5T zTrMaMmGtm6AE^q`G$%`AFUcjFgrFXK5D@DDt4h=-tb4jrC(!>v>%8+!2rz|lpdHTH zEvXb&RBfVn&e62FLT7{kM;&=&&z%R#(rzMs4uJ2U@dn~Y%S~lP6FLe^ zX}7(7w$o@Sq|)(+Ceo0qDPj0z)Tu@YeDbWY2;+gy$T8b_AfJIah6>S%D6Xj;Lm`+F zr33QHRbrNXod|(*5MYSmh8`a1fCrFLr_Ji#Y!7Im|Kd4gpMSN~0<(vn2sfX|8o}Fl=5dT5I9k>~aI9$*}7kzZnOE;aNapOP^ z-vm)lsNdIJZ{0$J{)Rn4bkk`NFmex!<0&=xWlwJihEwNwbs~A-By>Q4dVhImTFKWdVz=2eF(?nz$(uSc|+gem_*jYAJS5U`JPV8=V8xd%Jgu>*fV zFIEqLoTgytywgQdic_Rw6~WaXbD1k$vtu3YW(TjH00<61;2XRi;va)e=y&^yQ1I?m z9lhN|Ee3>ul}2_xhOp3nh*KcOs@F9LoMUk}5!^uPVJScs#wvQOq4@F<9`nJ4k8fMl zXXa?QDHU>pfV(6VCz44M%26%M0puYUvOu8Rq<)*MA@>F%$nQ;rkP|WG*`7AM4sNL* z9@)xyAkaCDs4|q724Fcv(X9 zJ-{~a;D@dllFVgVQJw2#XFJ&m#*LhDi(dbXSL`O@5QLEHcJxf65&Zejbs40M!t+iX z4f76!CRCR7@CV9b89hE)&4jKDBynbWsD+gBmW&Lav>u7Rt4Y#kPMg(D@R3l33iE*) zf(JbK!H<^iswOH0AY=}T(mc`8X$z6)13|e`vPDp*hIyzZxv5B7Zg3;SBh3Ng@eX+m zhatfH`-hi*iwgA*#>h}xXA%yCu>`Ns(Dq7HYoV@hVoTX%XE zo}_>^67J+{U;X;mZoyL{@|=hn?Mact2Gb(@M67=n6bIWurgj5yGs4YM5OL?gTNso?y|;#t$VY2RtdXwE3D_fL$5)E7k0zx&DfwWEQx0{Q#Ej`?Q~5Duwmd^?2NjR&`1^Sd ziIqaC1MCme`#O~KcA45wsWy3hTQ#M4qA)%vQYlJRKIwML!zSC!JO^E6S$G=?I*+-8 z4BbOh6NPh~?|j||OZIUY?&50nOEx`k7B6eH7(? zABQd5J$7m>{Qdub01Q9@{HvR|haK2~?{hz$8bH312SFjWe_*|EX@>)}n#to92doDO zl)(5P7VT>fb>M|EV?YutK@&Vd6s!+X8aM@{oD`&@crdcuxCa*d7H{&13*43%WCZ0LDn` zH*PV;D)Pl|VaEDU2Q!fq{1QfuKn?R!5NuQuYoYf zk3h%jSO?eBhbCMHd(cL)AwE#l4>iKZXEX?@W2bspkEN18J(`b!R44Gzh*mNrfDE)L zLJ>IQz|bkkUwXxfYL55YkArkXWZagFTqlXtkB@8*?whxBuq#U3NR8M5Gg!%$WQsPc zj(Pu>4r^kFf7=m?1S-9-ngg(h12~6Pv=T7UJD^;WC-f4g(7=)qjhHlwnPdob=m-6~ zNBd}(fFh`E(V|JyqmXout&E~6Im3k1i;FZJGK(yNo1%jJN=`yaFw+*b)JSl7OOJ%e z{piZ~C=9a%N4p@6@f#vRazWDQ3erfviqwmC*bS@EyX&xv#e5Hmdx|NkA0i?~V(B}n zl#hc!EP=t741pINcshb%h|h$&r|_KsIWW-77g@Rpt?Ng-K&7A`CSxJwUc!}GLHHPrbg+!~BP!HsYjoBy)Zjy)EOOf%aE|Bt-+H5YoQw))m4ch-G zB;wS^jG4IKNDaAZ4LnlL?Ys@i*p1#848~E55h5?q;0wQ~pY`00!njVogU!#t4c&;& z_>>E}pwG5oPY8&LsklD$IL_bnPr&$!Y7z^w7zlsxEHdL8=VXaO0u8&1P0f&);8YFs zWX|z?yJfmi=*&&=WDgUymYTpBngP(qU=0#AvBXf20o{#sV3wMYF3f5c`3%qzZ7V-( zm2>Dz1v1I$LDGqkQ6b%#?Aot}(9v$Hq|2O-%#;_{>CD(koe1Gl$pR2A@=}+X5H7Ma zKO(I}5f)nPlIUoZOktE4VUo-l5j^>fTEP}Lbrd;;j5~EJo9NSt5EW9njE?`fwR#w~ z?@-d|Jeykd6+HnsXJZdRt%p*vQ){u6_K20WY85wql}+iCPYIQ%8C1YPm2;a@GkFVF z+0#Hp(m1&|RgsfaWj07nv_6_BgG-e}{UkNvH&m@trx`YwD@{P%)oH1cE6I|9u)wLZ zuRq&JHO!wX+xHT71(a&vO{_c=7NBG zT?`hxzbds-e(@dL5grOtmwnMvBdAJuIhVxh50Tw4HBbk1z_jT(Q)B--oEZsAt<0sR zaTtg>Si4{-)cS*e=E zo3pfwDIr><0gSr28=A)U8;Gk7TROTjrfrU`OSr*lw}F!Kq~ z@{_LZvW=8nk*HC}fgH)9oX3fr$zhx2qu0%$s>|i2MGQu(x>$^55C`GdE#2LX?cKsE zS>BZp$YQK+DqB}#rAeAuu|lEaA)o?96#OEdCwhGV}k6tgwV8om#ExSla4! zkN)DI=J=o#TUy}49_ED~!es~-b;|i!DFJHU)au>`NFe=8U!r;6f$*P+nqT&%sNxD= z|JqqcDxb4$D=Zrm?5&B@;?d)66Bb(9dn%p~YT%q@J#_#QAVCfcu8AWevk&xNoP;zG z(g;;E()M{D=bepu*nxNeA`n5b6$%flNe2=}+n%uCU^Ft(a0ed(A|dLb9||HhG~XA4 zoF;Od+JIphu8A44-T0Ugi75z>U9jLCHQAY`QA?wjVAS%Y_zJns#GE- zimD~pBxIsd+%Xl=!Gf`V|pdjVDc7o8qQg8sqk*V0i%KUV^UX zV4*4b2#GP}jmQ4Dc_6X*{8)~A7folw1o*-ThGz`rQPPr^m|OGTn%t;w`x=S~ezM zS-L5dTBwHFtM-Kqy^5ZHj$@4gu9+%5qa7*k<(nL94hr_?eQuAg%HWM?s;7#o?HZwE z#wvVPC_gUfPn6_FJ}I1fzMWc)vdw68yNQo}j6(n3XoMnZVEn3wzUNPLBuF~jDG|iE zu%LxK<-*CR8G~Bug}rldDySMOg0AQGNNTPm@f@RY7i)mJ~|W{N)Q^VkQIbQrwC>dSdj%!hdouHzYM^EyLh zDzBP&>^y?&iTl~)`rkQLY`eg0651{7Q8z#;uEBnw)y7HKE*{zbF2>~>@4cDjOUIoB zGL(p|P$oE*(G<&e;OMGfv$`$Q7U+`Gu7Uq(Zo8Q7>cDOpq6z)=jM|Iql(5Ghy$iU; zrpGOB-kzxNwr)cr@8)>4nvn1Ib~6ZwVzA zu~q8c;ScwYT*1Q*Um-SgZ^~XOE<^D;vv5!1hg^y>tIcqRl-mdAtvK^qbOZ82WHO~8 z@&ZEI@d$Bj>!84sE#>=Q5~tb`ys^T*ts2j9ji|ks9IGvV%?tOAGj9%$5gZ{$@*B7B zfq>72fpWw>yEF-*z@)COcyld_^Y;G%4DhrILwg}+F2*L?zW3lr>=*KxYVw=UJY0>i8XkG zbzj>pUr!2lJJoB~IC(4fBeAy!7&cLd0E=r^pAM#P$2e?f^+)BCbhPzXPm0?0WC+5e zUFths=k-!ewxW262q)5Qe{pDsIEnM6f5!**dG>+|qFr}*72^kc;K?9*2_G4mcJmB} zQ~0o+u5i!x{w0dAKn$x8K_LGz32*0kaQ}E|KMxWIldfpFmn-*HcR6#zd6-}Lfxx+y z+_{o}fRm58>Xvl&$V>>x%ynSRsKerORyxRFx=jDwQ{0HQqYbzl_0w~{z4N-SS3AJ? zy|FvKwj#_{7e2BpKN&aseMr8B7Dpa*UwqZtaa6hHi(+`-JgP7ab;v&F0bjRAd%Ykp z!cTj!_nPN?7~Jzya>@&} zpZqboPsG4Zs2F_VPQWWqZp3Xuxu3zgt2?VGc*GZbF^BZUzrBgL{aXvZ#D_^4EPk(1 z&>l>R)7O+3w!In2z8?SMe86}-%D?^}S)I%e{hts1uCN-cfEMaw2?Q~BI<6K$lYG#%(Lb+{1M{BO%izx?w~fPf%yAi;tL3%)xC?;t~l{QNbHC~;!M zgbM{eq^Qx}xpW!{X8Z{9fXI?2PohkzawW@_E?uhg2k|A%nl^9Z%tkkuAZ7x2h)W2071@pY9IK!=Tv3k!*Ct{gDiPqWw9Mg zcK*2T-@kp95u^W3tvV=z2k%zHjxBpO?b_fH}Bqvar+J~d^qvq#*ZUUu6#N3 z=FXo(k1l;W_3GBIW6!RAJNNG1zk?4iemwc|=Fg)~uYNuI_U_-qk1u~d{rdLrn4p3SGT5Ml4?-BBgcDL&p@kP>n4yLna@e7VAA%U7h$E6% zqKPM>n4*d+ve=@FFTxn3j5E?$qm4J>n4^w6^4Oz~KLQz~kV6t#q>)D=nWU0SGTEe) zPeK``lv7e!rIpj=>1}p)WmpsHBr7_s%`MWcE)z0^xJcKWX2D# z5V&(du67C}?6Bt)D^Rn~-btyp+oIOb1Nzug&pl*9(CMe4LcmcZ_TYmiS?aRuu0Zn4 z!x6ay!Q1XXWT}%`RQaI$5d!D1+7LYR`18*^3ttq|Kljw*t)lBdRu2O9R13ku2`@a) zMHKsEF~;1IT(VyMWK58`0)d*xKOR`)L$>RL?n+DXu&3XZwD>K*gIq zJnx|9gF8jy$79j~GZFMHMFTT7(ESqe&wBzKAVI)4kR8aZe3m<(`v{_r%Mql35a|D0 z+#Z-bhNy#XCuvuVxir;~aq4@=nfw7TGfX5;)570Gq=+UGs>2?oV%lNe zktH@rjt4WE=^H3ZY06WgGL@=a zB`aI$%2&cNmc&tq4rFP|xWGd#|2V*FTqPzWLLf_V6HqQm!^>8^3Yfxt$uj?)V*w!C zl9h0J$uvchkbX!dAN8Y`y$lj2%GIWtEfJ?qu9?kk)(e~v_$Dw;Vu zXgVGf`_UAGsKcmtTB(>uiY%X+)LAH<3{$D46shX!PDwp#LAJV7mjVx*z62*uXJylY zl(nYA9IM%6wJKZT3Z-Gh3p#WF1R&IMARgt~T|bJ+jVX*_OiUQWBnJPMid`&YfbG~t zBC^(Up${AF1n;^nS7uxmph;L&vS z)vuXkUD8;_w0S+vQ4*!dM%9Tk%F=9aHB>JIy34iig7&rqVaMsH1_Am$z`opFi+7tA z-h;4iY7N1!eF~A?&{rFYW*(7V(JjHjpwJ%b#`w@OWuVV!;0ij>iT$aYJ@|5F=l2 z#pi8ta04UbI6irw!lPN*)@I@8=2ake-7pZ;k=+kt(s`q!nd?$_U?oQc!4!4zRo zj;up;qazEB>nTw=PpfpNGjoy;QfAnxM9l_KFy!EjzBWrag1U2@S=c5R>{@^z&qRlH z@9JSNQ_^|(h@SM?sJ%$^Iid`KDT}8Z81cCoa;PrKra8^4I-^9>u3pwUJ{@X<)Vg}0 zW{IE+Lg-VUBh|nj=C9LtU*pM7FOZfr5Gei3XI>i9WBgx1^w-C8^iLqv#;B6ncMxwY zIxzU8^y0=10c#%w)=2IuDYrckbVnqB{^R38DWZe$bu|E%@;el+q(megLw8zN7f_N~JpCU*KRc1m_9~rtlh2YNOMqhm(`o7lA zI78}eV1CyZaUUlL%R|U43mV z9K->J??GTtEKayJ$OP_8LAit_Mc@X4hXuxwf_R|QvBV~M1qYg-cZ6UF8b}I44oiqq zWHj6f%HRyrU=7;f4dP%9>fjFYAal@C4~>XCP-B|RY?)VNo7^EjE>IR;83DUKO?+;4bRoS53<&LRBaVBUSaH^7NuTlo&z$Lsr}hX+*+K zH3TY#mDwyIE1K0!!J-5G;<5ylEf(WcAx2$E7qfi|#c?8mq*lXpmSNRa$RrkT$rfWx zL~ng#K>*j3#n5rhOhFRYY8BRJK|ud#h0C~bp6yXiJt|~t9hN@Amd5m>VCAF8+!pPD z*FnZ zn~7~tgYDW^!dF8Yo>ivC*6~$daTruaC4q!k-Tath2AN)B$J~Atu2Y+M5L%e3A}p8iaig z#awmgu1z=L5wMz22q&K8vxO1ZX#8? z(c8IwX+zi>1dQoKjOp3+Lp;bsKWx!)R^yQ}#F-A9k_tqcid(?(X+ywTmz2OR_o;hd@NXvoRl$Q51Eom|SzYI~t-y0vFns$5(S1gi=} z%@u^Is*ta8&CT`PTkfiT5i78AoUwXb3~G(ec}-@dLpq>IR@_5fSWD9}A_fgz)5$8* z1)Ezg9kUjY;R&lo=<2#6D??Bwc3EaaeI2RNqve%d^_(5#anag=k=xnphYkej_37xf zUh4T>=>eYV4W9qLLgwtTAxLV>zw#8m5?&T|)Kx{0=N(96jEgLpO zQ}W)@UMal>Nc!=V@DWn+A(F=J>mLE^`pDmV_Fwf~-_G3M^f{2!ZePPL1zTIxUm1AO;%B>6R`Os&0j-L!7}b z?9!}Byl(&O%I;0H?&|Vj?oJ3VcqcE|gzt_S@Y)3L>hAG2NPxn_@-iyn=n(z6dZ~Ch5`m%5Py6^kKZ~V&d{L*jz z+VB11Z~p4<{_=1C`tSb&Z~zPN026Ql8}I=mZ~`mv0yA&}J1`6VV0gsCTv^8in}-Fz z2L`)`2A>BzAOK9B1P5bCIJ(6qYR8o&MG{i5K^&n#kZ?($@KCg{YQ!*l)UZ&f@IcJ) z3&+I`t40n-Y7>gY3`c|tYJ?9H1Q82H8HxlGyG2jh&Y$Rn38#da)YR;z1`<_dM8vTdf5aJr&=yLK8XANX zzeF9Q1Rzs{9t#8?Qv@PQgb};V854veuY^1NLpzOUUbd=gWFjSM1Qm;+p74pE@P;5e z1l_cY6i>t;euN>Gry0MhNZ?&5r!pR{hA1DzEBlmm(6T|;vMEahDu<6OgQ$)QMK1TJ zOZf7V0`o+u@*=mON!0N&tAso}fO!R!C1;^F(9=SM;)n27b zWMU(?vPL)!Ip1n=h%YZuZb)!OFKA=KX_2`aBf5(=ezakL3rb$xb#5qaH(}wLzB%-=k!NwL{EF^ zL=<&4%2le&O0BdJuKdF`0@XxoN<}wgQvU-^3(Zb<N5GPa8x~7xj{zVl?s;QtJ&@6V+RTwOFq+Tp@0+YP6$u zG)r}^+A@S-uOe@$3azk8QOoq>>;q}&L%}e%UWfHkO9T(Qm1k1~JEUDYiv<5gPAqHT zqf+i;Y;g=nN`ym>Rz=>nZAo^r88tudHf@C@B^!j&?jA|g#K7F;&iv#s)dO0rb<|zt zQf7B<*S1Nzr4PAE@<1#@>=GB@k+bCFajQ;sBfxdXO&N1EQQ{+gfw$0%_d%356#?py z7Ofu}i*o@??ktzQ&}5q2 zw|j4QM$&cLBsjTrxS}-pgLkY(%bL&iLaD_`b+EIN^3ia>PE^1K!}ziGR0)|9Jm@H~B%v3zTbw zY=`Er(j{1?Ww(k%89An1YRzO@7(Y`TuSUeXb{#Zz7)=ljMKI<;xC5O^Cg-VTo0q2G z35~8Y#O{E~_-qZMM#P_I8(}Xe&7C=X$(W%h527E0qKk<-G=+&<9ptq!^B_Nrl#t}XZ%1vV*Xg!451CWD5|tW zyu91k$R8ZVbLtVJ{Di4IS+-q16pL`4Tf_&e$9v|!13QV|d&Jv3ap!y^I}XP4{Kkvt z%7?qZ$0X64?abGh$dkMyKlMQLG{0Bu z7c*FRr+$W~9=ec&e&>7+_eS?S+OGtKa+!q^JW6nm=WIlwjVo^TgP6FA`bcPff@d4; zeen>LJ^x=u1MHzv{^w^RM*)61aK6)<#OKpGg5FG{DUko~FdDKgY2^R?=F>jTum1eC z{(Swsn+WIW&&%YO-v3=b=o9|!=V$5@{z!6= zfe2g-|Iq=^Bh6n!r9JsHa!;c|HmSouOoV{k{zOYLA3q3C z-RqoptMI zpEBnPtP3HtZh^2#|0LefwQr0A;|@$-`6b=ua7{YKExIdPqtD$kr(8B_ai0hLIeefG zEP`_ghL$g0yW#ot>jiF9m;EaQv{f6Duc+?6z<|(!AsrS%2m*D0IItlAi`yuk;<^(k zp9c=w2Q>(sa!5V)IHXTQ^d5S^Gzb7Y$u6)Ccz_}Kz&dWY3^x>LzlUmUQAG1fJkhEY zjam`Mz;4VgAKfN|pg9*KVv)AI%*!#p9ku@xXdNGa0&*ZFAv!E3b{0Fwoe&|yu*L5f z>af0Z0^||CAV-ukznH8Xk4b^F^a;j+hCC}ghy05V%7)s^GSDpHG)hZ}(p+=OKOd@6 zygX^_Q@Xd1G;_}nJv=hWLhU>htV}sI^QY&;V+fxI0vsrkb0T!eQWMX)2US(ybF!gU zUu`H>o@j+&hdy~saLR#FUG=O79`F(@1K&z#K!FMpNI?RVT{bXvW(@2%{anQGAUi4R zb=IyJ@>L*RAIj$(ie$}?9c9}I?4zpc4J=P^vouqkavkb7PIVn(*WF>`ePCX&?)8Y$ zpZfjvs0ZuO$GDV28U;F4b? z`d^MK_KqQ=&pp@QQJ>zGA(5vB%j`{|D4t#Kd3O_vY#r=68l6vqdmX`|Jmm86*t{A3(mZRV0A#8%X>}#}LywPKMK?;6NleL;GFN zhWU$A(Hi)`f2^v7o}1DUg$My1l15Sj38HBhIFK<~?s+O48+DRczY0bXhhRBlTc&d< zh0Wt4`IrYh?8c$Z8E_!#u*c^7v5$nkBOia<2iwqCK!`yuhSVD50}6S_L>6$7XVJ&- z{;>}}o~3=jYe?Z7S+@Uv^aEKxLC5QK5H17_#94tnWhyI@ncCgbJwCYzKKv0Buf+pH zl-x&E5UI#r6%&(e6C@!GX%z%w@{?WJ2h@zB4g>;^mKBi{Fo##j-o<1e1tb+aLiwF# z3bSPEcxES~X`*Q|(kIsZ2R4hdj&O=nAn$0OKiFl4HQJF%`Iu)Ud=$9^O|p{CravpH6IDg=z!nyNuLQ_ zXhR?RvJUb|Cjku+G$9(&k(TtN(Rwg0JEVKP5lC{#^+-y88q}elwCZ|?4}RFg9tSvw zKUO6VJf1_3pG;x%L|toJ-&)V=m?Z{tY&c|%^_EVmY9?`AY-1lA*~wP+vYFj%XFnU- z(U$-Aw5eTfYhN4N+1B>9x!rAVe;eH47WcTxU2b!q8{O$v_qy5LZg;;M-tm_Ayy;zU zd*2)1`PTQo`Q2}S{~O=|7x=&lUT}jS9N`I9_`(_9aECt};t`kl#3^2Ji(ee$8Q1v6 zIo@%Pe;ni?7x~CZUUHM49OWrj`N~<|a+kjx<}sJ~%xPY8bQ=K0%DItAdR4NBcxIXb&mra7zB}ZINj-XftKAbtq#4z;qEa3eAE9Y zcKF1{bCdtDM?L<*i_Q8Ym%w>|rQ{JzfAnS@ausTd;GvH{=7Y-`CTm&qc@JK2vN!io zB%V9p&AF(atRi*$?(GZrzsI2?zYqLC^xkwh{6zSG?}$1UZ!P94U-63veu5THbUnek z&i_CFFWi%v6!pW08a7-#I!C2>if^8Fxkx1Jk*d5x03P$`7 zi48>j?t%Q~BL3!2cl?U?5|F;&uIdOR=iq=H*x>;MLhg)!9n@hR%#K%{PY2S$0|lb) z)L($H=vw2)eK z?mpzs?8I;&(2z8^Bp>pEF$99qfaM$#rnn#?QJ7>xh6M?A&s;=Dj55R_*iH%yQN0+@ z3Uxr|p2Z5$!3rUw_?~VIt?n$OZ~Cfk?|`6Jq>fjNPZN#84HY8}+rn0ahfp3REf``W zI)YOksShDS9{Qnn5{NSHbh1GTXn`vEGV>GkjsN)&~TEXGV6g&`t` zO!h?}60#y7@*OkMyuNN7^zJ|&Fajqq?g$S9d+sOfu1Y!(0@T0?Q_?OLWCTeN83h6* z*Fhy=5M2-eAbikk1Y#bFi;^G)s0J!U$nmIXDx@F+qr8bBQq#C*s+10sH<67W z3bQwZ6XN)mMO)NGUlc}TR7Pi%Mr+hYZxly!R7ZD|M|%p?M}HJZgS4&!0stZT1OOcX z001li0001v1L6Sy2>$>f2pmYTpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m$`$B!UG ziX2I@q{)*gQ>t9avZc$HFk{M`NwcQSn>cgo+{v@2&!0ep3LQ$csL`WHlPX=xw5ijl zP@_tnO0}xht5~yY-O9DA*RNp1iXBU~tl6_@)2dy|wyoQ@aO29IOSi7wyLj{J-OIPH z-@kwZ3m#0ku;Igq6DwZKxUu8MkRwZ;tQg(8b(Aw}-psjhx)Llf4`c_WG?WqwOF;23 z@N;OA>(0qOhp%&4e6!DqcG>RSJlh`g`P&UtIPu5Ezk)8!q69mK7fQ1pZTfWT)dQnr z9~t}JjveiQkN<7={hn@z^Y}gZhff{Bbol8>l`2- zfRNq8&q3(OCXY}Jp7UU25l+}ub*4SXkUFJZP*6IbS(lJ%(?P%?6drOXp?GM?!{0*Y z9bnG^=PWpodidb;fQm<6eZ+KAf;bY@AhS;!(;E*^(aJMRo+-jFU%=wdtr+2hYb z?3{zZKzQnT4xcMR@TWlcJfLBpkXbqBr3sa0fIuFINTNV$LO_~nYo;k8K?bmJnslO8 zSE@i4EdO_!h61gl8Whc?xKNy!GW8Cc64faYJm>5nkUkF(^ngAC;ls;9X1rJsvBpAx ztg_5PP$WVBWGj$5{qzIuLh|hM&jbF{qo+UX?c)wX?ih$}mk_*j0K4oFr_Md+@{{L4 z@7%-7x&NrUA-_BRn@+g&L6D9=`wX;izyA(Y?z!m-gj;Lp*mLZC=R^#_KeNeMYb5eT zvKu`5;F}Mv3r(ExKrFiq^ExQc`!C53PTTT&FB2rQzZqSOuE7x8gRi^r%Igok_Tr0= zz6cWyu)qW(tBUOD56M}GO^nN!}m<)337x#Xd9 zKKkZ}m!A6Rs*}$8>zcQoIJ@`243V%A*{9(@2S9*;84wsakUqUD)X%dB=`IlOz5_4( z$lgN0&!86f?2ta^_;XJ^ksw`^HpZZLfP8I|s)+1_5}?Lw-Smhd|^pkM)_% zN$e4jXx0}Ad+6vN4cnRm1IR%2vCo9-X_z|Bg^zmVqhlNFV50){!V}7Hg#x??_W!iU zJ@0`}d=DU>`OwG1_PsBG01To)@TWiiZ3u`hBq0n@_$?aR5QmP^p~`E3 z(8iML*qA_gagGP@q8=$64SorK8JwQO%NMMw02OU4t-}l%PA3hGNhf?%%%&u=}ibE zRGb4LXGBiAP=YqJQ4kH}L@P>=i)PfM@I)s^hmtoIylp#gj2qwV#ruU?15Frth$Mkgaw#kYL@1 zSY7I(+OcB?{uvKa3!$!UZm8h@MPQ#EYRHd$|Q>f97mfnky!AZ3#@F1C;5|Y)0pkp5o zh^RnlLy&tC#6?H5$cKVkJJ8D* zvSBJcNTFt?SZRJkKYpXQVBg&P8HRuLjP6tP#bL>bkJ?Fk~RpX@u|w1 zXEK#HxA`V`|v z<7a|U-5|}y)2GC+seu}6XE9!2a(5pyokwl+cF_ZQ&(Qz5YE z-v^E%GygA9(CUwQ$U2r%CuYK#?WcnZq?=8a9{-U|wEgOJ-(=~qPlTNbO@`Pf{O$fn z;&5xgV1Bj5%?xoQ&QbM(klvj9H+sm!RSmO${nvKzClEW(D0QYIe5DRsMi7xQB-JEX zinkC3cn}weVDOVq5D0%4n1Kl~5C7m!?iYatVJ`F6S#I(k5x730;Y`^gf^)Z00ca2# zm_*;=fhc%-wq!sws1$hva%`hU?|~t^aU!OH8GvINWs(j^SYIYrDyecBs!})h7FE(0 z6lPE@6hUhT@qR%v4;I1;1;ixc#t-*k4^6il@m3IG7$jwQhC9+~_JA@ycun4y5Y&ec zCX_8M!V6|F5A{H92%tT`!w={1FYCh|2>+uY@e?v@xDWS3cf>?(`!I=&2u%beSdo~C z=ukgo~6|5Y+Z}4l#=O0Ep)xh=gc}h-e0i$cX3Qi01-{n5c;nH%r@?i^K>4 zyf{C*Wa_#i(A5R&R3C@cSYk^koqH_0v#6CUL=Q91&NIQf$VVUp<5 zWb81J?Xq{`hA;594hY5`t(Ffdvm3U!HAT4(Lt=~XpdS8kL&;VvQ)xi9*poSFPuT+z zNU1#ok&+n0lHd1|ycUzRL6bJQl{#sO#H5$HIA&joE@D{_Qu!Z$DKUQ87#DB>>aY&T zcaR9#6$(ib%48LWbt&EClpv7~PRA0LsS}wQnFY~P4$&Ro5t5=Q738r4<^gpoVvbVr znVcaHHB=ArF@7Ck26=UTB_W$LL7VkpoBx2D2x$QCD3E_N8=RM#Pk|e=;hG{LO{f{0 zXl5Jnz*R{}k{Y28_rROIS)Da;ohSdPoy=LD=6RmznV#yop6uD4?)jeZ8K3ewpB!Ns z&`F>8nVcJjp0v`t=Ypymh1D0e1;U6d(AS+5B1~Q`w!dU}R zArN9cA}SL@c%cPxBLC<{1xZvTLZk$$g+HnjlZlZsLL;2DBz1U{Kw}SlwJnh1N=P!L zbl46vnSWoeN|Ui-dQLn zm?&GyD0~Vj&_pSZ;cj)>7l8k^XoJ=&q+)0#SB1C28vj`kv7#!oLLmMKnTtvizhV(j ziV)OtELRs|oY{8-5iL+xs@8I<*`lS(6FuM}F1MqS83QRxvtsdrF;H_a|3NhrLl6No zFzXRv#Dq3(!Z11|G0OU2xN0z?1xDC&A0opu-iI?+Ni#q54?)uqT*Iwq(`sR(4`bt_ z0^v2@3NzvQsTZ*}#rIRwAvYTupmpPXP6(-VV=5T(H%173-q&fXLu#IuY6ZJ$s+O<^ ztFQxWunmi_3mdTy%doCPuoKHUv?HYCa;FQSJR{RPzY{#lD4iyf5XX}c9?Lu-`#jyE zBo65)=(-R?^gu=wKI8vWD@&9v@GPj4^>k(A-j0d=}3;G^hkdo)1nQJ9dZiT;bHCOaeSL|?Cc{QYRdLyly5XSX=goT4>7Iw1rS=~6K)U|oD zC0xh*B%JkJ!bMzaxqA9UoLPo=*acqGluPC1!5YkB+NE0=*Lspi!dLgc4}o6l1qJK{ zRPI%fhqhjD3SV$Eg%F@$;hPY2%EKNJV47$AQ>R}cEdyYb4*JxrWW@e4YLu%Gzx+`N(R&HyCv(<~obPRjbT3RY>WEbak=OJgp zL}PrsXIlR@XI6H@*lSF4md8-+5P$}SC<3=ZwP;D49YzedN-Vwvi5ia#(T|u@~FQt4y(|^U4w{%dQ;Dwk$iiEU>h^%PYt>uV#wgNySrK5W&VR!={Y>fIO_* zw_`axOS?SBEHuW3Y-y}+*K`2R25t4W4ht6vaV!uH*KrgFS>E<=;nsP*G-eYQZUwiH zK~`tTi)DhWH82>CPHfKTMvVN1!W!p#9CvPPJIR?sgi4COe51((fzYG!y#s;J16gP; zcN#EP%6*G|ftz%Si_wv*(UdE>klWE5{m~-r(Ig$xC2dM54Y*1t5KOloPZtqY49+)b zbz=W#EfKsAFYB>{Jii#scVnl6Li50Wmv#|ce(3ypXcl^EypxNksuYEHdY4+Nig^YR zc-BjJc6@lzlX#V<5U{6ss%O21XHk`>#sbX{Yf5_rd3!;He9AWvZY_McLVT)HCT_h) zEVm~3x~~8`v}Y|5)MtGY5!32m)G&K~!+TZE6n^|Leucf9h>EDKp?(Fyej3Yl38+u< zw|OndF&4-lGWbn1?SFh}5J5-~Co4T^d)nxn*$X%!4fp^Ln1>U{(l6N63BlUo$bmaJ zQ6EUw{%lgC{nwP7H+%GG^=ipWC^1pkgmmO4QJB|oeT7%(slhZTKAad>#R!TAu21w$iUPqdr4F^((9*^m6V#4CO%LS{(U(9to2EGm>nHoo?AsxGI$<+{yx!}+{_DUV?81H)_BrgvP7{K?66z4-$Bq;ON*$5P zCMELhBB5sn+UyJA>h(Jk4Jsb%GrB1eEzOMWH&LO^0Ugh+uN2*(=?)U68KUG45u3j4 zGMeNnIv{u6Etn1gFxuw-k)lW*Oa&6U%y8prAqRp5+fhMd9y@fBwQ-;H$w8Y5~fl@>O%h!&mTeaW)tVdW)2=M-H1zWNv$0e05zJ_h67cFaM@+BLzR7T% zH$Gfxwem4S0C6soJ$w)TrGo$g z-aLQ*<~@X$5JJBP`s~%aCr@HMdkE_Nd$3NTzH|QW)r(Xw;lhRw=S57o!m5?MNg zm{48AlN4z}SogqRJp}gl*<^_GWzB@|&cS3FRq9l#RjppdnpNvou3f!;1shiESO`$e zo-HA<1QZVm*QSM#F5O$HbZeR|vF?J|wsGe|fvXmLOE~Y#DRr%bPWCKKI#kXUw8YlcsDsHEPbFL$j_7`?ddT)vZC-j!j!O?%B6@Ls0ke z+<~84<((6`Ro%Y>63^kgtPbBfoedGV>vxnXyL0rWE^nUjdGzTC`T47P;9pI44<4|? z%AMu`eGr_&cREk!IWr08owG-(d>&{gp>`g~Cn0;zK?s6)9II)cex%CoDtFF7z&`+~ zl2EDz8;q($rXu+VzPS9+?l=>r5^<`?R3a-z8E2%iMjLO$(Z;jRV&MX}*!poXyOGIwx+$F{c*`Dovg_&51hRAS1PBnGFfxaMK@iA z{wXu7Wxs~ zsQgJ#U7?32x@Z{-ODLTvx9zLQZ>g0wp=wjn}q9XD4{TMT&c=siXO4Y78@N1 z$R^utw8vI^ZF<^X8*a4aPWx=P>1NyRxb>c!@4DT7+wZ&q$GdF74JZ8Yz!PWuZpF=( zXdQb%iUh=~-qi}!;w*I-0`*AdMWS^4c{6hUq|%%z=F*!LICt9NuD`D!mYC9nxYN&{ zNNnxg^o}7|P^6H>yO(62C(@3o;|_@D9eHj|=z-puf>~i+fvu@AeBR-{`|RuSMFyNN9%V}}+mp^&obgzB#rf~(QN3!}WYF$h6MHwW|$0!O33 z(=c!~4z$ez6F5N$R<*s&JQgNFrhUPIuO~MmDz5SbWiovk>wv{55NS5HLWL*x|l} zl1WTk|tOAxof7tbmQ2{{*O3%&>#7Y|<*tbjduf#EV-Mq;w7nlNrpQ zGN^DYDhPGSLL2&khf0n_z5HY(t71z7+0JAjHC0LQL683ANIJ1 z!>lNgE$NSy;)96_u_;bFcd4n=^rktj&N=pR52O490VY9!8T_?5rz$l> zN(^XN#kxKZIEw`(kkakUiq`F{g#{k4+y$Iff?vs1kZfg-Tj9E`tld#C+NzRB$2wTT zdc~ksi4$h1D4l-@E1LiD;D>woK~P?5YKNOyEIt~GD{20N7x%F2qWaN~Xi|lw`ZB48 zLhBzi31wvK$VX!%0k4@d<*Ei5*-j-Ak9~jyMbw-}YfWNXf8e$zUc4c3jjI!T6cy8JI_E_p*D1i;U zVGfJc0A}5*c_*XF4wv|R3zN)(xAY$kr*9pN-A9YL3y%kEmskjRz~)T6V;=X|$3F&g zkdY;0EfHDBM@Ij0l9jwQRq;R97kp z-hqO(^6O-A8)d}2NA6>SJ!yzsfW#_2kQ(^X4B+iuqWs-!14iWjf zbnu`cGhY3euU0lLqZixsxDQBZuV3sBGgK^A%lXH&K?3r7_k3uumP^nfGsj}XxXuXo;(Fg ziOvhZF4HWciwg2%3iDGvvGWjrNC$nW6?_Ptt>}kao416BA&Gb)5Ar;J06n@R!DB(X zyURPK$Tw3%h`{qZAJVr{OO6#RwFXg#7>t8|g8;{iL8WV|q;LtC*a_^a2cJlYpcsmx zNS>PrLh~9n?{lyP8Hj>7h$GxA%}NtdNeK{24kpYA2#|+)SP*LBj(o_Oe?S0Un3?}D z977*UD3H*UA?%49yB*xptmeCl=VLWHWETgM!y=?Z;5i3j(L57@LY)8!e4w^cVMD=^ zLV_@e2JymqsFxQL7A#b;_lt^2gbI%Eh@CT;inxf3K*U>FL_g#SK>P_#ln9xiG$bSn zqmT-xxRb3DLq`+{NUTB&DHsa;6!@x&4U~xXf`E_t3GR3dSX9CiWX58l!8rI8xi~?I zfHif{0m_p`yORjVi?i{fHCS7RYb-bjxHC22vO9x=gz&p{Xti;?3YZ}g6B(Tp(GytF zwbG-Gq$!o*d635#5KTFdpcx*g*qtJpib)~EAfk_6SrLRJBMgym| z#KCBq#)LS*unfx`EHzph%YjP=8SFP`47}u+HG}h+Tger5*p;U66`HxnC(K7uiNaAq zHXQ;LQ2`MZ>dB}uN+SuPNI@;0Nz9r!kfWl@T)9hhfXSR}w{>v01JF#Kv&^9J%jm%s z%5x=|H9+$cgj7 zK%Ba0H_$wuJleV0Xm_piLyLF#~Zw| zT+32}10VpA@*KE!#KCZ^!GwrQtSFg3!wj6!8E`V5y?my=M7CjK6N}mikoifG?9Xcx zDcWhwTQatZ*hQdljdb9Sj8K4uwoy1QC>KlbYGk z0$ngo#2)2QnL&&q-6~Pc^w7xwk?N6|smK`w;ZITm&FDi>ks-Da%9VZa2Z%ckqO7#Z zXqcDe7k`0@AKjVn#8Mk6%bGAx6|}o9-9~K`oyaq_#QW0s^gI6}P*XLv#`%PR`g}(g z-Jb5@p6>~tf~-xg@F)2L(0%;LgCS5+5uTqE(L7~}#AHxhLak?8kj>E^I<3?XB`D9^JZFQ;k@E?V>NLig)!PH3A}3{nKI<9Y{TocYwHPB|PGUlOA#* zRSHfSs!3}#TCc#?gb+s^Scg>;*P2+`rcDSS00J&6JiB|^H}yBoWLkBM12|v@b&xzC zqzY?-p>bmhZBkLQ{jc+qiN^@gnoWpb@*t2x(Dpbgwp|nzJuO952NgAslsj8%gOnhe zREE_Gar+5miv+Y)$x$K5If2_!nV01FTengjalL~g=y*-8rj)g7RqOIrHJ_7UOyPKC6%3p9=hey7bkHL(NsblBD z<0I58Le|q)0-Dpw9!i#2C{m^BIpp?}3K(_Q zIo_?_y5lRkN&A3haqF~FelF$0uH$0e=%PPstEn<;H(K6Td*KS_e1}0Mss&Sr(Tb*b z@GQ`Z3doWy%CZkVrYS4ifag;jf(nO=Y8g9{Mxkv!;yC; zL3vO_4o0_Q!8UCx7J{BO&62vUpfLXn!wL)|kbbu4izY1mwArx`Xu5+e-?|5U#t};c zC*Ai*1pfPEl3LHaLjE3o$mg$)$ntHn>n#Spz*6E$*>7MrKp9bon7V4oU>MkL( zp+U2;60?zFX)Rgmo_=bgiE2txv!Xt_I6I$DJF-d9GzN?ct*+*D$uvsh>TFU@5BW)R zI|ofm+q1Tjvi7+PMHjhlBTmEOd{cui#*ua;+jJ?n&b_rA3T(0Pw(}`eFucWK`|G2e z&MrBQKr3uxiEO4g?6zKDpKNTfsB8ne>>AnZbeU`$3GJ>34vN68iKFY#^Njzpha`fR zbihLBa1pnTir|{PXi~SyV7LD%#*E!&40)rsjcM%+P6%-$+$_aGXv7h6J!7I-x$)6U z8S%Pv$-qN3w&$+pWGT5AMHZ*4ZnN&}$Ia}o`0l7k?HDO1y$cSL*$(ek zl&Jb{EM=;Sc~CujFedwTDEY3n;jo7T(507)If=-b1GfsC(>b8^kNu7&bU?Y3W=2(O zQ+Koxqno6IYwtK!AMPl#$6U6wMi#aUxpQGU5C?Fp=xDG|aq!NP7ay7qN4SUniUpCd z^Zq1rt_niQBv(2P!aeVHD2_O>EVYY3u6VnGO*9{$3bHF+%Hu|{9LE#nJ2w8iy({A^ z2Z|Jg+ASZUb$H|Eo{ImHbijW=KTDa6HM70R(2h2j49wF!0F(#={JdX*bE&HH5FEj= z<8x!Wzx>O&RRZRrhzc)Su*dZ3qtrg;u<1Y-<&Lp)5lrcH2v!Kl^W>SoJ+?pmi}c7L zk^UpRIWLY(KlDqJKI$9w<13ErTV#Cc)Ab8=5u`Lkhs@<`-0CCs*qbieE5JWLb<5?w z5c&vSs26{*FCGFBc_{S#b3NEwiPS^$6*2Xu@O1r?Kl zLRoCLl3&J9vvh^ ziimkqWM5NM;OY?hKm>VI$@%t>;Xb7LIsAzQ@p+Cc$r3)rsK9yl_+V75`mYxVYBLDH zBl_Gt`+_w?gGj@fQRszS_()udqz`(T--x9L#n7vHzgGyu&%=`F z``=-fctCUeN&CeALJuZVoJw ziKIsegqf`*6S2F=|Cn#?@a>X%Hspl6m93)OOAXQ#W6?YhZ0IZ2PaevmxOs1Sb~ zGLg%*etD!wK?I0(5FoI7pl=|)a|0oyJ7;g;y>spcHhj2{;5m914?JKuP@Thpk^XsP z=x^UZd*{*(e0MI=KzZj%UcAUIBkg8`$nazLYBm z#ycnP;=X=KA@oDJ^`g6T2#g}#n)U0~qZYTSJl9X%LXIUtt_3SL>B);DOQy@K^Z~zf z=l=f*9e563!*l8q4wO5z?!vHRYpVNq;3BVc4|vsMxiItQ&R->e^!E>eyRHkD1|D3v zX2W`DXVb22`!?>}x_9r6hca4_~gFIr59qr8{q)T%GTd(`PfL zh*YKLiWl2iHLKNp(g*m|u~!%ALCcqL(bsetY5r~d_%EtX%I_a-2+Wiec~=ow-bLW8 z_5eDy^;e&Kx{ZX^S!l8Jz+c+mrwd1sM&?YRfvLKSW$AWi5%wUBragxKDDQhD}Q zgWWNNREI2W9!)#E@qDTNYw6G8BgS38{36a@c$Wzhdc z`jB{JivyX+pH~*Tm|>OxQg|L^__(>=LRzB5&JOoH@D>C=>IfM_XVwJIIXiH;9*iXN z@=rZG#Iw&i@Z6Z;KKwusQ961C37el6rSqR~1Gxha0*v}Ibfhhz4i)Rb_)?_oORC)1VnYyAj(V#Ve~=cbFByZNX)(1r_fIU6tRF4XOT1}=ncJ?C_a zR=o?wJ1=ee__O9#^7JFvKZj{p=0f7GC7!tCmRq8}n6Z14Y(ZwM@l*f{41xc(Az8d< zP5Ih%PRKVtG_uAlVXKmG2XEzaPUq~DkEBti^Z;DzHw!Ix z!8JQuL}Wv)H@67Zw6&P}ii^)Xx$Az>I`#PT((D}%)cfx+-9|j{6K|CxTH+Sf?^gW& zJC#%ee?|51z9(NBJ|ucO_&Eo}^Nu{~DPL3FGKYJZ?z?mRmGiupg)#s8?eAnH_4o_a zdXVXdx&HHpH$RotuYEFFh|?;jJ>yl3C@=e2&?Le&q4O z3gm(aLowx$BL0vR1aR2H^u+LTR=gq>ca=E^=s;S{nvSxPRUOflj#;Oxj&F>Rj&xA# zD*>C&weoj1jQDFK3){*8?#Q8}1?Vnu(c@PHG#T6o@_a2j+KC2~l$+GCXN|-bM<}x& zdQmKpex!{V6!VolehZN!{A2W6Ld)TESMLgYT~7)g62?VCsmr@izRFmkF8ig4MvpQiDx>xleh5#XJ6Z@yT}eIr*aTfPp=3=prBkrUt|l?X z%0GPRBE3aRcy_Ek|A9E3&CgrR5Ymr#lax#M4 z%cc$47F!=U9tjQvP;%nYQZHgBEQJM495m@9L1~t##uKnKMJyo$`<1GM%≪tUlW{ zSF~w0DMz7aLC_=<1C4edmQ^1$F+0_dd=f1#dF*S&q}mbk?1oVMY?CmQl&bsc_F*U{sA{1_=S zt}&7EcPpcHB)|XVuK)$-qOZ|Co<Odlzj~3n3VX$DITKtfGT7g?~S_l@STM}qn_^BGtpFDG>Py0 zXvfZ@)blV90{F4srDPfcsa|!9g=1$&kFY8xHp9bUg$_$&+Ip!4F0g}LIfX(%p%C>A z9E_lYGbXo;7$goHG&j1ADu-CKVaGpPybu3a#W`Gk<0mSq>*8OEdsXVN2X#+^rFY~* z-1``7ew*Bqc555nUtzbq$BI1&%;P@~fNwCbG^YoHyJFv#8$9yZVtiOn9sR%)nYM!O zdc&);8!q=k7S-dE_zQcB`}bD^c!-&if))=NhSC&%>hh4aVm{fKt3O{Q_9S5f!Czp8(-Br^6`&thcA+s6s^xxyB1a?cxn_*wVHKR)siieBF*zxmEL zD6rxHhv!qjS1hc)ZdeR)E6M{O^|69M#-I$&APv@_4c;IQ=AaJl zAP@GS5B?w!2B8oRArTg#5gz{`5+(p%XqK6h@&GP9YUmp%q>s7G|LqZXp+T zp%;E37>1!3jv*PAp&6bb8m6Hdt|1$?p&Py-9LAv>&LJJvp&i~K9_FDQ?jaxcp&$Ms zAO@l!4k95Iq9Gn4A||3DE+Qi~q9Z;cBu1hnP9h~%q9tA;CT5~0ZXzdkq9=YLD2Ada zjv^_RqA8vtDyE_;t|BY8qAR{4EXJZN&LS<=qAlJcF6N>x?jkQ{VY~TSF9xG9+9Em# zMk85Kzb#y1p~XGeldm-6Fh-*^Zecy>!!lM*L>xe&or5#d#tG%hH%_BCj^i7)LlH#; z3M$tgTk~}KF|a{irYReM8p{5pXB2|{A0z8#J}l- z2-XImaNca_1Id($I&c|3)R#NNT|&+WL~2Z#T;#@C<2#0=NRD1V7{sOBgMrv%kr`Nv zd4`0skrFQPiG^?qZfwnvj7V8sEEAT;E!v1>g8hZh*_$YzzeGj5;QTYF4IezUFLD4ga9lVZ|9? ze&s?)jQ{);S`d+Lm}UXFPxchgYAVeF!6tGhr`REoCefxG$xWOwQfKBSuFMkI(8fIN zhBobyZ2(haFdtwkpmL6~fhQPTrl6>lbmIv#5FKLUZo!V{mS!vMNkhzzB z0oaY**NAZ#hz_WUW+nF6T+1ma)^yuC92|@4jn45LZA65|fG4?yoj?s;-|Zf~G2O+5 z-O|0=i5CB|DB#hg;kFS?)wSeu$kDKt_} zq2`85^uzb%13ArPO(sP##%c8(>N9pD7A5MUHY!cVX{7EcZ*(f43hJOTDLeiqlzzoh z*c6%VX*FJ{^Ob68o~oZdfT~6vtAga@v}&l1>XgFjV#?~b^we!0ps(IWvGU3Z4XYFe zDz7r>Mv{v}Qlv#%dH8k5%MF#N#|73VS|W zVmbfZ_Cdh43P!Y^>$HBPMn+_0P%Ex}guBw`zb?eQ?nt-lX?>7uVN7Ld9A#1t4^uj2nSd-&GNe$3>^#iNZ8~a( zNf=MYT9MUks~P1zAY}+@h)LE1O5SChVptuitjG$KY3yvthRexf<#)C0$}+80qHLWB zWYsp6(Y`Ea0?ww|q;;{HaL_E+#zfZ&)r56VOs?5Z_GIf_tPWVLwQX!Vbgajo=+?xg zNz5f)2J3DltEArMkq{Mb?q2fXZC{khz7<55p^s7VEnLc9-ZENUzE9OoZf-4ZQDOfs zbQ z_3|$KZczTjudPm}VSMHQb#JiEtp!{}pf*ULl5hDAC~(%00Vxo1+9mr&&+d}$KqQdK zti$ctPZ8ZOZ)7kE^UiU4unTuEvQ94ui*VBz@Qfr-0=wseVnocKuCPI{1Oxv81p`3^ zU$BX8Cp&d#=qYjTeuZ={5&FeGP{eh%*$i4Fg))xt1lFqnfu zm{er*;$m|(YqB&)*m^=hggP08g7Z6rk2_21SGXr&4~#k#FjEi@MephH)6^;om9uQ)0Cfwfxapjg)`8n!j%ROvmq>RQ*eUEeic=e1t%HDC9& zU;nk}ohe|OqMf?wlo)JV^=U8`Hl7~#K(B^kGoe%uwi{AvuUP-KZD1--YU-ob1gP2{ zX75U9ThVCeN@+8rrCyO{GwR)xt!F=W5>7T{v*EGUMs5FvTPv%s+TU$!4Y2x3Z@*=% zB2=o@@K)@$WCQYSr(tk2Z{O1J2sU>!Tak48uOb(e0ArzSFZUS^Y`p@;y=LSy2|6tF-=m_bi9)HN5J>K;_GRNML_JtI!jnBi2 zlkAXJk~g`K%ea+Gxy#-jP;U9uNtKWYg_PY2jJ4X0FL{nP z(vF)gkmJwS+APvKc?uV~fj~Lc8XrQFuiUOUi;v;mLhj*8u5e%Xg|DgtgYHljuA#e4 z;*#p2MrtfWWD!P>j#5@!QNI1$;V98U=kZ-qd2se82 zgs$<3I^s@~rYGMnGsO2Y>+23W8X|9@Jf?G-s;m#N4f`(kPF3>a6n)~cbpvm)6Ylb& zvGYc|@uG2K7D=|lvu*2((3nQ-ctj~VlWk;o=PLgwv(Lynb-VXa&9}!Mit}-x{;{wR zd;X%Yx$y7b+_t*c#QQq3{NfD#QjZEhHwNi%zrRbV8;rkC&iRr|!}ssQr@Ov@#11I# zr>sPRjqqm0x^b_2!Q-$aAH4m77yy@^5GynhGqj-RyBM;t4RNsOQqymP`{<6mS(9-7 zIL!&yyd?v7{%WvrhRX}DZw%i&{w}=H=g!hI5Kbd|O`L`q=z~7g!#n`U$LkNqCp*t8 zsL$uHzy$pU4}H|@Udy*`5g)P4m*E$ilO>5Uj!yR)zl;rEu@$?q+(Y{rN3SWRhc3;1 zG|h&0euT7paX|I`hBa~BC&d@5S3ksq!;Jsfxj*=(r?C|0y&La+gD^hYH@uLh!YE{^LK9FJ$w7!8SJ;uV9A2=&YhEI5&}w zozqz`=FFNqd;SbMv}MYbCS5))S(N`KLkJo9#k}L$OM^Q#9nD1P? zj1uuhdhkzOS(f|y+2!>>Aio& zBoH7vba*ys0mx_|7C5I?y_$7v*RNs6mOYzxZQHkT=hnTOcWs_??-^8Q&))-o``Q(J zm#_H0eQr(u{uf*|Uc2lNLNvK<-&}kZ@%j6AAUSyPsQxg{P~fa zQ@={wICAC8=X#DM>8M+-IRVp?kG=%&8!$iN_+#(C1EDL4K-MmVpdHF$It+q!^7-eV zNY-J^y0WnIZoBTZL+qUJ#%ur2AsEqva6SJXBZ(yg1FSGL`xX>VL6(4I4V}rOD{_)0hrHxc%rVK_5=^qrEK|)j*=*CzH{py^&N;74 z(^&~)t%jBt(DeWVeQq|Ux5u)*kOq+*4Sf_ zO;*`unQhkDXQ7Q&+G(k+*4k^a%~soOx$V~5Z@~>$+;Pb**W7c_O;_D@*=^U|cj1j! z-g)V**WP>a%~#)j`R)JL-+uuPSm1#PF4*9M5l&d)g&A(x;fEoPSmKE(uGr#>G0s@y zjXCbv%yPF4^RhQBGOqm051t<(FZOS>~B(uG!|Ban4!ioq6ur=bwQNTIivP zF52j$O;$$-XyakZ*rut4x?8EarMg;n5KwY9s}25#Q>m~d?b&qBv1dzo_!02{r^{ll z#FD(;3^uaO&eH8U>FzdfEzwqcsJr3*y3D=x?0dYw{dt=;z*RGKHNrV#yv=*~$&KFTGu zveBl12V{){OUI@Grlx`j?9~Q2)4|0pkSrJ^O9bzd7b}4fek#0;0+VOL*2u7N=V0LD zCa4-3)2{&X<}w)`lIM+D8##qYqJW zL^y>xAXER`aR7<<{KML zGNjcU$umn^QbE!on%l%=2dR0-0h)sk#X;a62jW#h61hlELLiu(T#z~psmYSGLy`W7 z1Q%1;pw#H&0VR2WUn*ltPSuTf=}f3y<|!f)8Dyle%;8Q^xz1@0@}`2D3O?te&u?0_B*hGAMfM>gee5%% z$|Pz_k4hGtUNxWlybef62^)CKLp<}aD?Ds6oqF`+0XkWSaq5A9j~HaGb-k-<_^JnA5ZmH5l8(K{Ui(@Qb^s@J(9BF~#k-saXFLRpD_0ysj+T-;1atWIwTVIFyKGDv<}tzPH~A{Y-7dqTgd+k zm$+X0?q@3_-sLv8GVC}g8){bVSe%1!&$gRu_QE`Pi0 zU&{a(o(vf;fh+S|yYlM1EFq*XF8Q1&0nZFoOO_N~xnSzLow7F47a#NEg*Qtdi?l=bm*gQtm zl4Z`8t@8o=tPW@n*UzbW5!ue6j>>YTj*f;jQNu~fN~>8%m|o1LAJA#ed^-OnqQ-D) zNZCYQ?JZ657@h*l(~bw^LnNp)$f_@$X;{m;GPDl$sL5jBkQ{&@uA>ODjSb94N17#g z)^N5VfbD{~IwQ+&Gg+K%Yc}#(oYxI!5XGG%O8+Cx$$oWOSpw{W2%Fd!CTT*k$mw&J z1&gHY^$$sjk~XIaCAADUz3JR)W#c=iU$$XEd~Lt7=ovOaOo%!_t`4~stT6IIfHM0IQ_E zZfV-vLk-eU_kf%1B8R%vGfZ{1-_Px0mNo?PL6QyKs_!kgIs}mJ@{)J^)`UyBLswq* zzoY$hYe(NX+Rn?jlbYRn*0aYm@AqPprSY4eI%n|i$e6~w>+q?13OByww_lcXOuy6H zH9gSQL*VSMhr7kS6h)4gc{_tliI);QY>yV?m_|vY z@wsi#(VgiJee@2gZa-4uweJ*U`_r#~l(U}>1E+M426<6QpzVtIOdjCxA^s25+zo8j zA^-Nz_+aAzf$Y{eC3yTt#3qX;`?1WShx%ic}}AwNTd8t_mZ-B&<~KArsO#l8XWqP^qHGBA_B7IcLdPl7eIb$vJ0`93%;n1r!tz5hO^Ij3f~ikeo$8luRAI zwZq!~Y3p0(Kl{30&YRKNY;BHl(dT&IhmnzjtxlOuFNBS>l~o66*A@P2Y>gp$J9}s2 z0P~T3A&xLilP~hd6~Vd9u^=WI3eIjk_Gl_h9UhZ#f*98;#@_o^*texaU*32*eEG~E z-482v{aL2T?yJ~bs;kjdmpdxheqDXmc;XPydutcG6M#xM@6BGj)1Y+v+B zB6HB-`Y}sp*cOPlkkPlS`4WM{F#V^DVnQI9OXL@chlwXfeq>XHw}5->>;MZ+f0ZM` z)qCJEnbfqdG>WQ~&pnZ8>uOo`+3m%jH%r?DKH9OU1arIMISc%Vx)Ku8b(t?%LBK^* z;AMqaZQ0FVu{W}K$8txm7HVNen1xH@YkJBz(v#BAxgzu`;<-t}X(PgE+#*E^v0cA5 z)qm*DQ^%c{3iymvl_B_as0kId1eJmX*|!Dt%tZJGE=9GARKDhu)*3*%-sJcp^*LDV zunM!0C;BE<2&?&v1JlW;A1tX7I(d_Por{&HH(56EwJayEV84Q7|CT(Ho6 zSujtv6g$ftXL_qVCFw-qP4-$Qj>u8WqmVZeD_I?6e{bLAnEf}0Z4b_;r(DbJUjNyqHkW=o(* z*L6N=l`l6X$nmbnwPK#RV(geWQ+A{`wbk-U)%22hadgxTr8UZ1Q8mhND$N3E$lK8mXm{ukpQGVdb1A%Is&?tnTpx&BXKh)4|%b^LinVE86dCFiPla zjb6>wk=vrge14Y7}*)nh#-$aV|$FqKb6 z#Z88{=MD?icU;D!Anw#?V@9M*%7e6Xx}pctmdWl6sWmnpT2>Bf;iHpeNle7ld&sNYXI71}+KyCSj#~4z zaPMw+V|uG>muBehVd70|Gr;OzM}U?wKMoD^#I|^r%AhxK-8Gje_Mdsyo$-2{cCUoi z^OLOS+fdXpqoZ+{PooF_ETetQ9Jx9s12U$U_=ze3j~XB z*M^7+7-LmALuQ^wHatid+Y8kYFdQ~T&CW0kB1j9$TAR7UY-+=wbTFE?s!u7**wse( z?dgx35{hYOHc{C5{)|Wzh>GoSi+hw(tsa#p@aSIAfQbMFhsL8yf#_fDzoxs#Qz;nV z2*h-Fs<^)9^0mibqD(!TBHLLTJL%~qPRg*?f<9WJKQfhk*?CWx^zQfC_+z@;Qn%0& zJ-$kI`FW5VIIW3=V$|0Z~lub+fk9 zd+nMHgtx!eJxLVITF}qRV?nhF-pW{ds#SyvBYK)4m=$D#3dG6HX@5G0lcV33OPQ&$ z=XLAi*BrNuTt<`JISGLnOjayL-E}&D4hJFO?6~Ch^gCPX^~^GXi-;Qs(ozObzssRi zg^DYU_(&m==*yd|A98f>QR? zpf}i!(N39p`{usx$l#YZ*D9=)D+QFVu*AIE9*7Hwe%T-Vil5UX=OB&sYi`=vteMkR zQpqaP;QZJ?)E+_Jh-8@?1|?CCxoSW@)>0&VP$m4X`iwz}$ffE=^V}JUH{xIEip#&U z^}8+RO;ov~Lp8qNB-lhC?BWzm>q(fr49OVYRod(4Gh(vbB+7U_pEKfQ#p1|{wDJB? z%qv%Y_lhZNEja(1a=j8>gZ|tmm0Ff(hv2D}+{gz{U z``E0(auoIYvf(51O&-6bgItgI9{TxTOrK+g5qKg9SCeLohUTTZca$Qn=Z&&rb31(| zxPox98ihNxI8#GK5YGo15)<`K2fEqac~z9yTaL8idX5^1iPLiuUz}| z!9*|WQs3vG0wtv?j&D`$?+W)rvpDe!4(DGpN|0yO4}br_d;43pQv>F*ABrn`L~7TRWuYOev~?Jbn@$#sX;GakC$lL z`wIoElhqyi1(jcktkZ6>UV0XrH5q0**`YuD6IHYpjN0+b(vr64oxpesi^y6f?u6KK zc(`%X2pmn=dtJ0vVw&mQohfFXQw$buj9X<-?U(S zvS2EvB~J=g;}o68k6k8x8NqIm%x~5%QnMs3vub$NV=rzjIA_*7ov+%zKEZJ5p!U`GRyWb_UdPWJjYR{Nn7I2^)w%RvbANm1N6PM(4P70W6ejVl9Q30YBj)no&l8zKJ`+!k{262t zmN?L1TS6z*KS%u9p}5rX=*RE%Z}kBb;!Q{UZZ5n#yBJMT-zH{GT6C7wkx1Z2QElw; zGdi;kkr0~H}+qBpw&K^T>8*4Sf1xvKRV1{hq%@yCzGW#I2 zDzZ24RWS1z7&>Wq8(K+lZ{`KQmi)=?q=H7te9oHPeoZh_1@?%mi?LKVxAL> zxNV&mj(%jFkL(Un6FodGc$}Z4dfTQb_3on;!>vu}!l=8JBo9jR<8D7FefIRxgXhm* z_B?p;vWdjDtZLx4ZF$YqBionnHhOGdHJy;yRkR|M>?%K?qwT7CPOBYW4~UW4R}W)V zmF(Y)-Ho=d`TDTe{_T`M>BHLDIHiYmi%+8;zFU3Sdpas^B6Vok9#C><{4*8p&~&iT z>+t^Mgw(Mak3!k8N9 zq)8_7NVTxF6*T3q0j-pe__@;B@nSh7+6{7p(k#dL&y`Y+|D?&6Xzb1X+B=qBjj%ty z_mzKCRJ!ZcsK4BH?k$-=5;0}H!#6 z(hWH}RBCeq^Fi~)F_Y~qA7m7RluLvTdO9ATW+-w=;=at36UANR3WJ*BEY*{}cI@Sc z5#p&D3gpGsGMrKpsN>~`efnSo3I~^nSt)Y6omZae0UKj}-K-T|Xna2LJla-DK`Lv! z6kiG_QC+)GDCM$P-kY{7C(Ej?4D*4k|@@X!#_c_XKXACu%U$Ux8 zFxcKo%_+=xaPCgvJs5ekZD%1hQKvjxp_%lG#Z=l|@Qqoj72EnbqRS4?KG>*Y=ku}c znX~>E`bn?aOIM@|?`AEjU%c2Jo}i7vSR`EMH|V#$f2tpBc8V|Jj!Kla z74MeFi=&(K-6Sf}L_`|V-UlPOs`DiW(~F{L-qEuc&X?k8JQq)2)eb7t5?Ox1sOCp9 z>P65K+)&U(?}q6lmXh#V>0*|DMpeM2Z((NI6ZJa`R;x+43Ct!grX?|8PxxVX7PLJ=!TpBQ=!Ab%p!M=f1nF zOocjGLXo2-oafot6D#E1PZCqy6ylVE3!m#$ejOhrA*doxva|hm<#F$-TMd@N=C&Bo zHU+^Z9$&GWos@*qcs>VBB{g?}M2unl3wMPVJr+F=*h!6zZtK-h&Da@`>l+?e^fzf5 zn>p8c-yNX$Xe>E%-38Td5Jj}B*nXZ)xkZ{4Le}*PXo&zpY)cZ^~TgI`QNfc1?*Y=X!IGf*G$cblUT}@P`cM;Z6pE*{PckNK2e$0c?xF6B}ToXhx?`h)B=aN3@5I~uDjQliz! zTQrOzCa#h=YOrJ{6%q=48kx67pZF|h87F&xedHHjjBv#+2FweL*rQz~ zXZsS=TrM#2YFk`Mn~>Jl6Z({v%9n^+zQQNu%9yx_E@GU1u*0)IMzi8JMju;!u_}`> zF=GJnNYvK+v(Pg{DPzsO7f55~%!s^}2%)KR1a(0vmqR%vdbK8HK$hvX=W3{NEaW-QdzCv%inMcVw6W2F|kD8w6klr5z-UQ-=5v)`%R4NTYtEax#ekrO;V=!eby;} zbgb=HK^IpKZ$?XaKGhAlqf1HMrK=OoRntHY>8`K3CUKG8i3=>-ARdxvrx zo#zAaA~0tKm$uYTkV;llIf^q!lIL1?MfuyOm`76vYtpC7jlAJ-c{EGWJ&ln}ogGw%PHf|611>d5l^ z^=!_*P#lv-Y~FMCzH@x(?E2$`wJbF(S^dPHACbdw9CU7eN5S3qfbTulznk6b=~>^m zpHH9sUJy$Cj^I<=3Mh>5Q%Iv(-!)#ErZ3&~Vj6OfIE|3Ch{j6$5>v8vwgmE12mbi% z7o3Jc?;(E{OBfEFzc+K38q0yvUWy!A;QaHl=;5Ts$E>~7;o>|Zs0@;cQIKh zgz1il+!0W?N6RR<92r97k56Z;BWdgr?rgW`ZaNb#LgyNA=Mgg=HX@EcXyL7oTAE*3 zv2UxNEW4`$l%&X-|@YOH3Jbm5$5TXIg}TVQZ9Pm3NO*1+Uy5X>9Aezk%s7vWX&f$F)XbyBs{TW=VE=U zT?}6%y3SE9jVu0MMjnpD`DzD_pXvuuaV{S5XHw!9)3r{QkgET~xxQ()je5MCumvRQyDhf+Jo#3qC7|3FBBDx6XLqr2WG(S(-IR-!$Vp1+ z*-BTglE)wE+>MCQ_c)OCTXgDkmSmKvl2Z26r#~BKVtWc4-A3sgI4C)*Q^YlHCb%ha zu<~ZJoSVr*-xc&q`ykb)%Um{Yo|Kw4+9GN9Svrs-p|ahTtTI(9HJ!wXmCHHy%uIUq znT*F_8EH1sVMTWJvX4V{aFW<8(L}c9-NC3R1*T^cf&h{XF zN_Z!8WF;l|R(7aYhH71Q_e#c8_fz^>-{F}o^bFG_XNzwO& z=B7(I3{*^9Ow0uD(vg7-2Q3VeHyL*wDSA9}BbE&avTs81t_T@V6Hg_@c;(SkR&NB4Pyss! zvM(eT&nfT1y8^O{xp(&pBp->%yt_ypls_U(sqT#-t-60)nQ0qp$o7X~3D=gCBvpoo_C=&N9TEo|2WduyQsCJ#F>Qhtt{q&Hx?ackVjIPC+*E^d?h)T{aL+0 z%)C@`qtDYiFi<6#HI#98F{lckdG63Ry4+S*o^ zSuoi+^+>ov&m~YKs*Nq7ZY#$-6+o z(NPwkSH2*_e%!-W=~~|ZRfl4>e5I12OaHl7TkM4{&@%>UVTgr2sFRe9M^^#cMU142Ipr8y>{*+m1E>&@NyizW>g5(gn^_7(> zvG}&70&j0w9C790YMD!Gxnbz*(>VFXUKaktN=8!bE0!mPhBGW}T?ks?myS$qH`mf{ ztW}?RQT_b@d6o3FqEE%P!b?HUDv~=jdP*;J4J);_%TBHYTRkYhdsuB|NXbUZ>RDg0 zefzq2HEqK=C%5~x?py5UKD1H7SK?l9C6L}oldAQ^rO=x5@^Y@jCe(4aT#nnuNYl|i z`Bs-I^{&_XUGfu-$3C>{5)|b1%r8mnSt~iRohe@TQdKEkc~{TX@Z#Nj(uNk!hBl>! z4%>##=!WhW4ZXb${c8;$4X-sxr)T0fezI*$Ns?&J%>UrsIJws7bwdWVL&v_;xM17l zhUco5(e%_@^O0-QPtx}_L3-&$`oDyY!+-0{pMQVYi+x{__b@5XBG=OVSgH9;AMJx; zYN7_}aI0qW^=7A;V8vG7gU?3_7k$ItMYb@IwbBH+XPi&gE7jU0dcj!M z%4zphH2leIudao%b zxw?~;yB`~Mt|pw#$T};kPP>+HR%(RuDOu0sVf@T2?Ah8iBohWN!dCwBbkAiB9!nxF zy9r*ZQA7F!{zh{o$reH^p<7fUy{MskW~leQa$l23AEE`nn4Tr)C}E(iuP=tJi>$9f zxxehlaq@f?^)K_mZILGm>x1y+?Rd0=O{nEqVHvP z!ebA_^$EgdP)}hQ`iQmbeIMLiVALbpj9;{lPcqXhnmf4M&`q3umXsSw$UStfA88#p zWS!JqaD+e|BQKH<5giYnM-8!xQZkhHSDFt@D^sox4wL2$&nk}m@;a{@3DGQ9h1{e>l4B~roqkYH)UK@XF5BeIAji^0F2K6JCo4<(m z$NoO*xxDG!RX$ECIaY+bAQKRcvljzlPlz3@EE7&?WeXxzwd~CX_oqgWITO| zFM{N_nf*xOCM5DH(*0QdarRd-$(bRe6e=_&ZIhABb>(_vO-yz_O@d zU7u;kU7DU*3~^dQ@+^r>&oZelT^|_q^PhETlFK+s>h0^#Wgh0)7&*s?_i}xrpBou} z6^|wXk@6BLdNMrM_|cXC?>H8>ntqBs0gJn3kGFb#N(Hrg2Z8(AZXQ{&%HW8*=7_5y zI>n~GHb;(!7c}*gdpi3mLfjvBMPmJ9;uKxr`suk(yZI3B;Z()I_iFT~mVwdsxPH^C zoMuzVrUq1dfA_h&J(1+N6HPy2uOeSG_B-GGvK%+FcojK6^_KH^NO5NAW+nfxyF(#& zzjVZ9Y^e8GSMcZjK;F1ZiB~Zva&<+beB$+7Pjl%Cwdv%(9Ufit3W@1t5BmFI%>3(# zQC-A5Qhf_)GFjhre!6j8fgE@Fc=d`JHJcj!WeUodSCP!(16SjJH0A#wJ>5qi77=1I zn7bQRsWU6+rEg6`WaK+P;%sdyhpn5j_+y9(%9$N?icLd}FY$UyNR-gV336q+2d^1P z;V>uUzj>d6a*G`AocQ-gTXVrFTgbrqyoYNCN29_)h+6^k>==vb{%ww*Q`{7v7zuxo z=Ka~V_wc0HJNEn4kn{_Q%Cvlm6#G7Hv$@A+ydSnPCi7~)GUa!o+CI5PPulmHuYHKs zvhIBB%ror1vh#1M%4OojC3^Dubo8I3yC0v&9KMLz6nME*brnfxf|v6W`Qjzgfnhg@ z;)nY2ZbbZ1N6tqdhCM&=UY2WU&!1b@O6M_yQ}zD4{jc02-|y88?;$JtGC21w?w&lK z{JM($7#cTQ&^I&x{)AEt%le{!We|(l&%ydkB0?3@4=9j7zV1tmTtyLtBFBon(gsc6 zg&u+wbvH7OSO@4@_QO}LMoQO|CNg;25Lp)>Nlgh)NDUjGQ6GlykDLIUs zX+IOXqMDUkNc&FAfTa(RpdBeED>-WaOx6cknZe;Awlt#=7gjX>1>t2*oqx&imr+xzs{Py`5KqzH-0fIuUbdZVQ+s5&<#4~tX&D7_RJ??rjet@hA|Miqn%p3`|!H*W{$ zwx-)@DFr5G%1H7@WU-X;aA+VUm^fm6dxfIXU6uvU^*ToiuY?O-uDkJs>f@C%`phf+ z*$tV?{WtoVU-u;~PmoB89q#;6lfXaksxHN@sopV6r6S$=;R;t-;g@s9)v}80MLRbm z1`|e^LT~D%jF1~AU)Gd$W8u@l%9(B7)KEt~=gD&=8Xo?nt;b#d=}vU@kj72#K~3I- z6y-G*jy$fb0+cas90DnKoV)NWABRP=J$cx(qO@@F+plNB;*kp3{Ne)kD%)Q}`S3H9 z_okWuTvs8&zoCMYCs_QBn*-$iGZ&tKFWJSclT=5713{*S>kmsT2| z^;f;O4(+N(PAg4=I^7THYvxjY9%A3E)f{fT?QZgMXgd6J=+JzAz;L~pl>f-FojTr- z@LI!Q%d3_)U0>%O&bLR~v6ntiL^m--TyhzdruB0j-Y>{=io94HbnT;($FbYEnY;+< z11iU@;Ddu!@m95`^9#2xA+-LUvyG}&E~6u}qInBu!@j@Y1YYy^UVZWQ>D*Vw`$t>p zaZ5%KoyqZ~?w^Jfl@8WM^aA|;Q0|E3@76E*`CogO6M1&K&Vl&&&*ARr7uaLrk!ALj zHlgOi)R2kWtXA}HgGtk|?A1W(LX$Jx0umAPs%-rsID{6?Lj6H1!89zU#3~Andp|;h zFhjW{#N(pdUbx;oGvA5rJ*DaIJ}mbsbuluK=xV!ABjX|@fKhmmF3rNG5#{5OySUCy zIp65$E95yV7gsC8WvLN;ufTY&q?X2YR5ie-ZkDFsQ|_h#ISOgYe2H-{=f*RQIF~}R z&il1>Jb&2Z+~&;~j=Nq7BX}fyj?5Uzy}F)LQYA*4n=_;K6%^z&ladR~S-HIwl`S=s zpUj)Hi|#9`hij%3uvl=Yc-_{1ruq1Vxdo^3{_Q&-G*e#}T5w0vAparQk(}anAlQLm z2Z9|4b|Bb+UM6l-s`W6g|Y{&)Oz+{Y_ec|G}Exo@XRofC$@$?B^M$pB?j_Z=^d7kefK6>(UHFQ8~x- zdlE!)NQvWUqBHwTB4pl-UetLlIJ@l03Y++hwPq&2Sv;lAJyQ>RVDogjb?Ho@{Rgj` z6~;K9hQ+U)tH81@tILaT=fzESOQV*pr%7TxWmv>2!VvmTmD>q}*n4E$bCZdGPg!;} zuxdmb&gXA()ly#yE{rm9WyGFc4%_Z9M-4ye6yDqlBrGq8G%hql{qPhx9vX16$;d~K zj8hG+V8XehIt9goDekhE$9eoE*md8c4}KUzwQ~2unUWC2;6ij#2+qPen^yV11iQY> zt&0)eZ*u268RnJ5{+J4lK6Z30JQeKh75Q8xWYXS^GUm{DDVdzrN~aYzTfXC!dk>+N z(QD3@`{;s#IP2?-kwQzp*K8`bmRe7~&0F#}?yES4Yh}%`SPAxfsk%PX%3d?K5}w>w z_57gq^w-5gE72cbYQBqFIfwIB;>Y`HfoHXI@yqokaQ?yN(E^u;Utk7Y9&mZUVL)M75^Vxp83Upa(UJNlFO_4Ke@aQ z2Jh$}j-PUQp0gvW5l)>}lO#MO2Z#FG0aYhBqvJ?xOM${LVr^_EsZ9Nr&@arj2>k{nA zD+}e`O-eIVjeD}!A6yL)u47a%SCC^r`51Ut;GXgrPoq}@J_CiP`XH5a`}IYQc%KGC zto2fD^_{JFdpqJ~S7b+O`y4$(3*oiVV0ke)&7|aY1BB#~WR&l<*fXQJY?7K3-I9UM z@#{>iDqgp>seX9IuFV?^28mE^voaiBN3E(0)M_tkrqwrG5W;Nt-lM5hPnfshiS_F9 zFXwTsWI4x^xUXz2=OWQ_v+#Wuhl<@Pm#1I9cfaU?32WTFkd4T2tng?he zpm~7i0h$MB9-w)E<^h@qXda+>faU?32WTFkd4T2tng?hepm~7i0h$MB9-w)E<^h@q zXda+>faU?32WTFkd4T2tng?hepm~7i0h$MB9-w)E<^h@qXda+>faU?32WTFkd4T2t zng?hepm~7i0h$MB9-w)E<^h@qXda+>faU?32WTFkd4T2tng?hepm~7i0h$MB9-w)E z<^h@qXda+>faU?32WTFkd4T2tng?hepm~7i0h$MB9-w)E=KUR-XVCn=Li6716JBc= z%oFE5k&MhyFn?gR*-IE<=rka_d*m`mXy@yCZEs`=CloCq!REH;G|3QPlp~Mo=chP! zpK$r?=MnKg487Vco;Q0loq1oqJWjlp3%(1XKA>{k3O+b!6>n90I@>;NS<+YXTI5SR z@!c8G6Q6Tcz>0EjP(KoXHWYR*I@@zYkTA&e&ptcaJ;uR{*kxUuNn=tSeTtHEXcKBKYz#?wp4V0)XiR8H&6P$ScSQ(YWv6hH z;NfPRpCJl4Mf1Xkyrf+f{+QnoC(6}eYr2%J+?>Y0#p)1&T+XBW;VCb2F)mEllu4nl zOP)z;Gx%=Bsj7$D^k1sptyWnfZ=U$%LUY!+MTu#_tK4>d=8T3ngi!RAtXl$|@|!KB zZzZbYQq3(mjlKBTmxSmC7ow9wa27NLJ9U~g)7x0s`b$0w7`;4$`t*YF z-gagDXt`>{!X+b~axWD-XEGFWhK>Ktc!i0jR@NK~d+u4qca|ioNekvy!jt?Ih?l=Ki*dhJgc3H|DR|cn|2{@d=RLx*O3T3^Rj(l<+4`iC_2jvp?0965FI zjJ1$nb6x%z6M&p$r^@)Mk=5Qttw+DnrNn>iI;!5YS%F`BXD9&l9W z_cUH=$;b6m2(7>8Y)EmCbL8dXnO6a;LCr27MrR`!qI}b=U5BGT`}=Iv7Yk)~bLO}) z_c&-pZ2x8Lp*xoJZ4XvIep$*1*fAw!TyOjw5O8v+Cy+hHc#V5mi3r!M_1!{w7;3Aw zQxJ)a-|v|7A1-(*jd)ApBQuM8(#)`Vv@3}WR}aM{VUS_7s!PWibQ7w`!ZD)~Tlk^E zP2`Cq^(QaBruic_I8r)NWS|nCXx<@In&m!aY%R@sIhH66nS0cY*PEgSal$XBD6(7` zZ=lz`&N!ykDVW9H&K#~0V@5EuZ=@%24P(!{T+p&@R6=v!TQVFY86k9#Na5zGie61G zPJ(9uT;_HRM`#``6)JVLxKOV7eohGZoCiCR|sMTM%UQixB z6Lq#VgVqQ2$iHwsS#?fB_Q7bHq=LV2z2n&-%PFz~HVYdiWAB>BP1?_Ri)>Wvy|uCy zwTp!pY}EV?v~thtlt{Ba(1`WcE@aawRkC=Xm3^RHBB%3QtLTAFxwlT4rOpe(h3A`i zc>jR<&H~g2P#-{j0QEVB;Q`bKP#-{j0QCXX2T&hCeE{_V)CW)>Kz#u90n`UjA3%Ko z^#RleP#-{j0QCXX2T&hCeE{_V)CW)>Kz#u90n`UjA3%Ko^#RleP#-{j0QCXX2T&hC zeE{_V)CW)>Kz#u90n`UjA3%Ko^#RleP#-{j0QCXX2T&hCeE{_V)CW)>Kz#u90n`Uj zA3%Ko^#RleP#-{j0QCXX2T&hCeE{_V)CW)>Kz#u90n`UjA3%Ko^#RleP#-{j0QCXX z2T&hCeE{_V)CW)>Kz#u90n`UjA3%Ko^#RleP#-{j0QCXX2T&hCeE{|SE!6k@-$H#p zwx>{Earys%`Y5YUp+2)!!}ZpGKz+=+dW6>+2J^&uPb4FA6wDu3IZ;ulH57HUr5>F^ zeR_Uw@2+@ElAi1c;^Yw`6BM((oOe5OCYJUUT$_}v{5)r)`A?iKUWq7izIbv_j3yGZ zQs(yGOC<8FxgBxnxlzA+;*&L!H?cj$`uymY+ZDBF_P2}rzE9sge}9tYcd{?f;7}*v95DL&pJtz%XZz-{c8n8w{r z$lt8+loweX@>vNn#%~O)?k|Zy+rO4);Jh4$2_`_TF3XFJZV7soFelznWV)0Vncy;* z7#aS$=JW3zE9$VzQ)Q=ZflnQ z1@#q?>Z~d96+7#cnX#^YX*JNTex_4yYhi0Rd7xYSLFc7Qk*)C$Z@q>^omV~!w)c(? z^qSA=R)nzHnUee5X=l@|jJB{dLml4flGCk9ASL<-`9})mACP}Q{sH+1PB0?0og z|A71h@(;*AApd~;1M&~ZKOp~r`~&h2$Uh+efcyjU56C|t|A71h@(;*AApd~;1M&~Z zKOp~r`~&h2$Uh+efcyjU56C|t|A71h@(;*AApd~;1M&~ZKOp~r`~&h2$Uh+efcyjU z56C|t|A71h@(;*AApd~;1M&~ZKOp~r`~&h2$Uh+efcyjU56C|t|A71h@(;*AApd~; z1M&~ZKOp~r`~&h2$Uh+efcyjU56C|t|A71h@(;*AApd~;1M&~ZKOp~r`~&h2$Uh+e zfcyjU56C|t|A71h@(;*AApd~;`#bVaXzt&Vf5Hz=$-kwS|AYKHetk;*&HWGZPwQWh zfAlZ^N&db0|0Mq&{wwmY{=dk-!V7H>>g9lkPhAwoBK{AJcdRk!A)&X@n?JJw8BWnlmCgRCIIb zeF&xk8zek$O5sPBwj~+roEF`UZ(1DED|?-7&TMLGG&qnDW6p43O-f81Eb5hIMi{Yz zk*c7Lcj=l7Y&|r+(C_&HeUXRh0ayOP#B$iSVCY$8mV9Lx z@hEB|XphI!UB=B~qNUB4QTtu9MHKGmcJPL86^LEDsTTEsC!aQph|0C3fMH*~b7?*= zPOYc?Q8-t(AW0O`YlqnmD?liACj+T>waOu3-r|~{qJW~%yzh-t48bFg*rn^AxUqY1_SUt*kkbOP4&V6cfmPWhHYlQ8xy*q?fh% z{la>7k~5sEjx9@i60!5_9A6sJUhZ|yG>eraxwm>Lxsz9_lF|)Yl8>pis)VU_#B}1p z6nAT7b0)Lc2v&Ey129{Db^EWNqqMk$6TV*}1pcmFBx1;$Bm4L%jb*gUI)K_{n$#o$RCD+>PN9 zGge!DY$zhKkgvRS^rB?{U*zALYa70kTHg#b>;5AD+(?aCSNYy<>ztB*T;K2v|KH?a za*>?{w~v0GrS9t|3wBnbhx&uzy43}&_BJX$2BXh(-@LG}C$%*`G#LM&TN6+AA3h)< z_<-O8f)5BjAozgb1CB>y!3P8%5PU%J0l^0Z9}s*%@BzUG1RoH5K=1*<2LvAwd_eF4 z!3P8%5PU%J0l^0Z9}s*%@BzUG1RoH5K=1*<2LvAwd_eF4!3P8%5PU%J0l^0Z9}s*% z@BzUG1RoH5K=1*<2LvAwd_eF4!3P8%5PU%J0l^0Z9}s*%@BzUG1RoH5K=1*<2LvAw zd_eF4!3P8%5PU%J0l^0Z9}s*%@BzUG1RoH5K=1*<2LvAwd_eF4!3P8%5PU%J0l^0Z z9}s*%@BzUG1RoH5K=1*<2LvAwd_eF4!3P8%5PU%J0l^0ZAMo#dz>7=&)(3oIdFlfa zUh~|^_-$YHlg8Jvm6ZR;v0+`%O1JJD_R?krWty*Z59eDE2~@+TRK!W&9wDPYQ(`Hq zOVL$itAjmQWV_eUA8F{ApH4+BKg*<+&@6HIJKz1L$l`m7jgO>cSYENfd zbk~x8ug~VkFH1QA%ONO4U4%G#Gv3efmBZO1d9kyR$hkLj40W722V9<#WR?lyD!pGg(yC;H9r#TUnaXPG!XF*R>M2xm!(L^Pkr>mXskZncp z37E*JcE$y4&SB1vnowu&$y}}}^h0*jFWqmI{I(M4f{sxcMUkb6 z5O+O$E72yVKxiPbv0q{ucelb!eZZ7Lpvf$l)pV9Y#p|}V>O=n;(mdLPnhOU*&E7`Z zq%@5vfiWfqw#mkBEa@=(U_=m8Z~JUMhB$S`S~iDjb+7{g&fAj2@fP=jp2np8O0yEGba$-qm=Ip2jU)vob^--s!?4LLu|GEW$Ess^$LS z0~*m72-n}Qsm%V%2NX{HIB@e}hN!*VUq0ZQN}8J2MfUdgK86#Ex^L?j>>d0L4X4lQ z)wZ!dbc*#cnrG9i>$Q03l6`2jET{Kwr0AhrxsUO>rC$BFg@+z|bVwY=eF7W`pap>z z1X>ViL7)YJ76e)l+hYr~Akcz93j!?&v>?!eKnnsb2(%#3f?!eKnnsb2(%#3f?!eKnnsb z2(%#3f?!eKnnsb2(%#3f?!eKnnsb2(%#3f?!e zKnnsb2(%#3f5=BHU}kGXAb0#9Q5pC-k*&N~|ChL((OVR?aaT z1u_uybxK~A(|Dwn5_yQJ68zZF9`bf1Xi0*OdRO1U;eli`KC+6!ui7GbUWPG5jBoCU%XsHS5#>qJy}q2R5J-XdMXP}2 zi$Z61mbA~4pl1Ay#LnETHnfW`;ThVMc2W|}$1ltmW|lqbDZO!Ro|H0>zuc95V>d)< zMnEhyIu!3)(&oCYPI%3tN=}_=o<2t=QsjWLCLjx+q1%;-m)4{G&0gi>Z}XP?{eOD) zx;5EYLU9BwZZv-FW(f%Tmb1&HsA6;L7d;_1vQv0|E6_%2+H-5P_%hbxw!ODjE9-VM?G|E2{S4~;j& z^%~|_9lR2bD1)F3f-<PzFI61Z5DEK~M%k83bhzltEAiK^X*P5R^es20PzFI61Z5DEK~M%k83bhzltEAiK^X*P5R^es20PzFI61Z5DEK~M%k z83bhzltEAiK^X*P5R^es20PzFI61Z5DEK~M%k83bhzltEAiK^X*P5R^es z20PzFI61Z5DEK~M%k83bhzltEAiK^X*P5R^es20PzFI61ZD8= zl);0wf3FOx|F<&u@_#6U{Qs#8ZoU1dGC21ymBGoY|D_E2IsUyexbol1VCml|gLVI@ z3^KI*uav=TpAt8{W32@**2f2!eL}z^yzi_gEW|vY~@Gu_h^sEX{;L>m6IkE)#Q% zZ{A)Y5}8H^lJy9#=XH9hBa?|0F;ec12rBOF#QJ%QYfEzPzhw`SDtuEuwssWdeJ&ew zSDjg5FfY!3UK;f*IYKCtgIchPigD=C)|w79#a@@FRB_kX zzUI?k*uvt^ffwGJ_7H?2$BUJp=?Q1dUvmtvp1IsBsOs=^4rj|VLIf?LN<>eQN9neJ zwTwc#pQFM%!JtG~_0$r=wF_mQ%&R65Q|+^s{0q| zwsH$TzAS?~-j}m_laX2lC4x?%sA-;~Kk_V=$EVe4Sk!qHWMKKjQn1yeCp3mur3)$h zS)(T5P0FKCYt%n*LgsRdPnIXDr8JK2BQG7k*;Jx(+NNJc4t_s; z?j0@ay+2%V2sl2xheLR$8K2EDh}_qNfc;Jjsik8G>d1sh{!T0PGsiG)UsE!xJ8hR1 z9V0}I(gJaC821Tq@Bu9Zv=GojKnnpa1hf#)LO=@vEj(Uz1GEs(LO=@vEd;a>&_X~9 z0WAcy5YR$E3jr+zv=GojKnnpa1hf#)LO=@vEd;a>&_X~90WAcy5YR$E3jr+zv=Goj zKnnpa1hf#)LO=@vEd;a>&_X~90WAcy5YR$E3jr+zv=GojKnnpa1hf#)LO=@vEd;a> z&_X~90WAcy5YR$E3jr+zv=GojKnnpa1hf#)LO=@vEd;a>&_X~90WAcy5YR$E3jr+z zv=GojKnnpa1hf#)LO=@vEd;a>&_X~90WAcy5YR$E3jr+zv=GojKnnpa1hf#)LO=`u z9xY5Cp!Bh;YPof2S3RQZV_!qedicZTYpTyf?7Ov^!wsA-k~pY_=^?AJ#_6k<99l{F zj~v@qYL@7m=L{OQ8VDGKoq9Om9y#}!{Y$hkTfDnt;K*&wNzwos9wxmR8*-I35@ITN(8FN%3kqJxF{ifex>Y>amrpm*n z!mC9^{>1vG$`3pm-&8Q8cLfOXW^tQ6C9Y$+k6pTE|Cq)rh%_@GN+U#(>hS?0)11-K zp`x2X&5?z1DC{)h5mKscWC!1ugcu{XN!eTySP^Q*Vs;^CNi5QCz=f?W2O*Ls)&C{# ztgjX+9y&0=Z@GY5M7e8q-YE`6|16x+oL*|y3E_pjfzm2tiW#VUpPki4M%3MjZ#f!A zIFFBa|E3wc=ze$WDMUy~$$BJ19CXm4!FJQ}-qI*l6t|^Ayy3bTBXenEzr-}|uDZGU zfGLGkQ%JC`s{$TnRftR9GOo9Bq}WE6qPm<`<_N*1&?kXw@xZ4{)JwwjW z%?w=v0*Z7?cStKrhe#^jI77G6jRFD!(u&fdbc3jrG)R}oyguhV&p8+GdEWp3;{9Lz z*ZSS>wf4=v_^!S8S|8+N(Uani6C?WC`7v^i4Lw!4!$Pu&0VU?;G(to`bduLT1?wSZ z12uc?K^FMIEA`NliR$a4L`dK&OQB)EgnM+7e~u0FXoR5cm1wLOFWW( zolI+=p(;b=GW%>z_q9m*YiY_fabn;FAHMHg{I#B#16mR_=B2C zS6qCq{?|IBxR}@WpLzioZ?~ID`9#lY%Y3o12>F&}dERUC@reRNdB^2PElmP~T1(So z{V!TL(v;2YRw}t=*k8OG3!_2@=T5owB_J7 z8_?u3lK)Tg5Fe0-fII}`As`O{c?ifuKpq0}5Riv}JalP>0rC)#hk!f; zLqHw^@(_@RfII}`As`O{c?ifuKpq0}5Riv}JOtz+AP)g~2*^V~9s=?ZkcWUg1mqzg z4*_`y$U{IL0`d@$hk!f;LqHw^@(_@RfII}`As`O{c?ifuKpq0}5Riv} zJOtz+AP)g~2*^V~9s=?ZkcWUg1mqzg4*_`y$U{IL0`d@$hk!f;LqHw^ z@(_@RfII}`As`O{c?ifuKpq0}5Riv}JOtz+AP)g~2*^V~9s=?ZkcWUg1mqzg4*_`y z$U{IL0`d@$hyR{DZ2mu!hi$X}A`h{a{);>u`WJbK`ET;jXTOt}`BHQR5qTc1{OTzO z_kqU;y*qlIwZhN-{3Q<|0bcWMi@N!^aDOc9%*o94XCYS?L3xQrO<#O*%n~i0uKgts zFA|()nTm#-&bRaZkvzG=4d+X$Y^$3@59EIq-oXSOPyFI%9+E&U6b?NxbU3Q_^>kqw zSU39;us<@lo*%Li!A#bIl4IFV400cNLU5%jOMr$?HLM_7Qq}jN=b`9Ib_%SxZm0d) z54|~EEO4IuOD$hTs#or!4cYh2H(n;u_C`LPwjh>T_DJ+XA~7tO*go8ePC3*KH^eEr z8~17{$$u6X`{cY2_hVhN+AJ;t5(nLyJ%9y&fU$~8Ys-Cn4aZu>MPOZhhCJj{q^Q%0 zaHkG9bCmIO_$WShhHu_AYr5Rb7RDH?GndhIOUl!!#Gz$p^F z`iqk{n;+3U^d|eWyUJuQuO`cKv-qhr5&;#q(Hk{Yyz|N+{Y|9>a~qu8yx;+g zonnN{us&DvIom1p;;xdULF(LB5yQm);(Vk@kwSVd~Ix8*l2i4c+4KF45qlV)jyJ z$;kc453#etTI*Qdi4KcBIf_Y zMAZ0eB3e$c&UbG}xJ~GnYwT6T+PT``a;k252nqwc<4n4O%K9$7Xk>s@ zV^X=TzGcCii^y1tY>6?_!yT{~w}VuuhpPN*dUd;3`n3r^A3q8DiZGe3F1vB%thr}u z#9?6MT~NB|guP{`eAr2HREBc8>oS90d|NKUTP9CAsT@dkfS44v=GZ#u=qB20+O~TV zuugIBtO}obcY^c5VJ+<2!QRV10dI6!Yr42DZ4fEmZhF-Ip>q}ZA)*@nl7}4%TD3|D zZDpi&$L4(!2h%R$zfz*~&QjZ7DUmAYOVpje|0xA(uiGWH3R3e}f0hI`-L_j41DiKhLfJy{ZBA^lhl?bRr zKqUey5m1SMN(59Qpb`O<2&hCrB?2lDP>Fy_1XLoR5&@M6s6;>|0xA(uiGWH3R3e}f z0hI`-L_j41DiKhLfJy{ZBA^lhl?bRrKqUey5m1SMN(59Qpb`O<2&hCrB?2lDP>Fy_ z1XLoR5&@M6s6;>|0xA(uiGWH3R3e}f0hI`-L_j41DiKhLfJy{ZBA^lhl?bRrKqUey z5m1SMN(59Qpb`O<2&hCrB?2lDP>Fy_1XLoR5&@M6sKkFyCAR&asl?`gQHl5D{+mjC z`%fy-Llz$)B_V7f20x-M*pG`oBaPRm3S`yUsPh)|4b!fbpJ^u=Ko)$5=D6b zNhJy~|9?a!3jPO`DD+P%(X4Ry{{odrmrBv9pZ>=7=lm93vdMUI@Vn!18uI@~D$(&v zLNcWP{3+>=9cD%Q{-)&V+}Cdqr&yJExPn z(^H-EazifRNGwe|HktVWypZrOtFW*Ey(pSvCJ4GuYV{yAO2jaOlyqx35~>|pgPRK9 z@7oZ}(l1oOM>$+^sdYLTRN5QAxr+Izvq+e7&e>m@J6BBWNSErf_=M$G#&Se>BY7xM z1BXOZJBA6zD2FE9U#)+1WiRkuLCxna_%RfLL^}nB|R3)qVDGxw6lz z1$f$eln46VA$onG$z^>IMycdJ8k3Jlr9#YKU*nb(t$Yj_=#%yCd;j3{Nwq>$J6ZNd zV$gZxdlDHex2fnR#0POax#e z022Y22*5-DCIT=KfQbN11YjZn69JeAz(fEh0x%JPi2zIlU?Kn$0hkEDL;xlNFcE-> z089j6A^;Nsm089j6A^;Nsm089j6 zA^;Nsmk#|xT0e0w;Bg}%=kHyw`4<6hnAYva-+LMV z1ty04H<;-2FEBCqUtr>4!~YB>n*Iw+9P#`2U}EThfr$$L226bLPcSjj)N7dand8yd z$vJ6(yoD^)L%-=mmMgE*i*-a$O&9Cgejo02Eo|?iDiqU?!XhtfeR{?IOoZ?|76P8^ zqr4oFEKVx>VkX0D)<$4!LshQKQ1+x$FN#0TO49jGTm7IAt4JK-Ze&_SMCVKr@mRifx4`i zE{N>)88xhvFVZC$HM^P&r>fIS@G2?(HVYvi@)6_`tj{Hrgmh)py!8(>B*tM0O$yp5 z7EsbcZ_PJHbnWkl#VM&t4(~41)FCvxc!(Kih^OLqN z%Cvo@_p-H_&7P8VXP*P_N?0-}Caqk5u8?7@++e!RsM3a$zu;*LWl%U?Fk!2c1Kws7 zW3MgqS$3aP<#|EDV~#>CfdM_%ML87D?Xut?OKFyx#E8$fh(A2c(iAv4s5q~Z^=49y zPa1MQ&l@VUf4VySPF3CV5EPIgeQar=D8)Saj`PJ86eH`q^rDSnOD(!(8ziT<@|P!H7I7C-fS_r;#nq?Ovs{I=Xsp%uI;u@Za0qnmlIUqR^iXrt!y zi&?R$w~tq&=-2dNUq6dAk+&z zoIcZD92JPNtLsWPO#*_FX;j1E$_ANuQq{oDwUh;2Koa%$DcF0aK9R7UWN>4~d{spU zkl1iLn0>Jb{+`luWp@*0HfY1;l{s|#--3zjW+MS>Uip8n9ONP9qY+%*g``1_%G~B- zf~3&@kQ5DoqzEKMASnV#5lD(aQUsDBkQ9NW2qZ-yDFR6mNQzCJ3_wx@k|K~4fusl| zMIb2xNfAhjKvD#fB9Ih;qzEKMASnV#5lD(aQUsDBkQ9NW2qZ-yDFR6mNQyvG1d<|< z6oI4&Bt;-80!a}_ia=5Xk|K~4fusl|MIb2xNfAhjKvD#fB9Ih;qzEKMASnV#5lD(a zQUsDBkQ9NW2qZ-yDFR6mNQyvG1d<|<6oI4&Bt;-80!a}_ia=5Xk|K~4fusl|MIb2x zNfAhjKvD#fB9Ih;qzEKMASnV#5lD(aQUsDBkQ9NW2qZ-yDFR6mNQyvG1d<|<6oI4& zBt;-80!i`TN{TLW|3^vD?I~OyBIJ9VNp0=3nhD*j`z3be-c4z;U>`7iAywUrIGc&{ z8cag(*V4`edJRk6v49AD7%h|&y;eZytJyk3yeQcFzWBr*NpQ2EZqk1BTJV|)dX}Yh z_Ko=ZSOTjM0#8!U^-DSH%U@l;fIfX+U_zH0d|fzv+Uz$I9I*HPEcN*)D^c$APuJy; z@F{x3SVS;KN?!FDf`#EyHv%+*0?$c|D_(ECNXLj{G%_G)GfU7pqplMaZoEpsy3nnNcdap(3L)2V5! zgz@Yp8oS!Kn32MDI&#lhK4ca4-!dxHOf0)mbCkEu;VjqNBOUq}xAdoEa z_+6vQ!LkTLO?I(B%lhP4_S1XscCwteTPs`kC4}tbhC-v4oi4{@qm#L z>boqDC>K<|dyx4eyHSd^w(QIUVi*NH@8VcO^03ztWAwsY*Ni{DPlks=khX|RM@PTwykVV?ROcr3@t%S69ze#z|b`=VZ~{{A?+9#0oEXz+YuH*xMEnxq#79BOtGf z@EY8}F402EDiVf0{G9as_F$pXbr|gKyjvErouiVAiu@wy7%_g7F}9Putae3D%Kd!~ zwb6%Nfn_#6hkB~2c8@fk&A$zXCacPIpC)=Csc=T6`ZO44dK+g~un{e&O{&hpn|bVf z*xIVXyUU5zl7@w3cFu;mmqKU)_aYH}HoOWx%KZx+E|sZ~5Jm)5eS87cTh8cmo*)hBMo+Q&1K)O8Exy#CV;i4n4i=0Y`Lb^00Ek0@)1Quy(-a`@3y*Sr_H0MHZ$c4l1H{X5da^k9rX*K&D zMT4`C#bvSRK^7c%?`@khTFTjf#FS#9QCPxWL;**$SDLc%g-5sys`N?Vmc-!Xr}7Hf_z?5>kW+oa8J zP`uqHqu;Mgdw6wF81Mai-p%Ji7qgIqI1?R6j2NrYtzx-TR!!VzG@Wp9EWfFgc6v@* z<_kyGe*lc4_DKx{A08@v3a}|9c-mvJ<{2}FO@1@tq8`1XN=O=Bl0cbf`o+rLE1U4k z09*KxyA8=(5l9KyeLBA;cdx&a;*Op;MrZh$g(}`z@+wZ4r-IqqZa(uLN3|o^SU|8v zi9nE(mV^03_L}!=nLkc?DD%l;E}wGkAZMf3=2LI%eco98aW?HUpMLksr|NN#i{-lc z%=kqfFe5FE?4;0>CbP}*ld_cEZmV`sEug%08vo!1V{Z8k(aSJ`+wl>xwCwNVD`(|Gsu2?I?sbte|h#G|03d~hC3->e?T=q=$yQM82gOA zY*OYb1Mi{Y;fDQaB;!LzJ=yhcue?X|wJOX?Ta`~06gJZutrTk>LKLF)a_GKG6b6~z zi|XL5|BijiC+?K8xQLu4Kd!?{(d^8d$#_;r;Ph_~ zssA2AJ#AWuf=_mp$nWIXBr2q{-Gmp#_dT`u(G!U`ULz@29FqJIu=8SAj@&PTA} z$Wf*U9DGOb(g?``O~sPzgw`#14OxfWwPJf>7p^gsPbq!Ph9D5Sk8|bUap1BialK%u z%OPMxj|eYgrHz(RzD`9*ADthKNUwISl(a&Bh&sxgA`4baMpWg3zAVP-UQ4eL*LO*% zP#R&*fBt@XUNVyip{vrOQ3{puJpJ_hXCm^KcpvWTwU@Qz{4Tv3s-Xtl;XQujUIez~5vwcM7^gnm zLysJHHLbZkx(ky&x#P;yQzGm zoxxXZw&Ou&yqTW7_H>|n=l#bH%v@~t#5N9JiuxmH*B9|im?%`9mqZ{i@yCjQ9p-+|tDJoS& zh2xjD+Vi~wMo1G$OHYk9$kc!nE9^2o=ow1c5+@H@V^_SE9>!f0tq-H4DqAnJE150U zlbWw6H2XHAq%;Mq^*^a98GO@s(>&?x=uNr4Y+J*FR(Ob>L0Ld~)^G};p~LPmlCiQ} zXxH0}ta_uaKe7`YY(A?+r0j)Os#-Ss(mYg4<5?a5*xByA`8=laX=8KMW49-7EP6Kk zSTtk0d8xxEBXhQ6-?O{y@w6t+{TV>06iu^{dM<<~c_4!VlcnbM%h&X}D;;G}gM7wJ zA@Ciq6)n?m5 zu}&XqFPAADw~%d>7=P^YEBH(_FBSRm&c~Lo>wF%C95{n(SzNk5Zr4H2}6 z?8>SqN$@K(dj#H$v{B-A@q2C}>|Fk?n}+>qfgUpMBbJmcRW5NQyV=v2`r>rLuwfDZ z$0URm1p#%i4Ictal|Szyh&}myr=f4~!UWUnDiVxGTz#wZNH?E<@*v5U*wQVDH6-=J*n;iVL+7kl1^9@5FhJha1g&m(%lSZ+~Hotx= ze7IBmq{6m)RJuBNc7??@{d7P`7N%ZUKY5)YA?rVLl+RCF0CAEW#rI7JTCfRIQIbD4 zGMN(6X!}GZdTu3cE#OKX$!sU2(8z<&NaHK-JW6!%Zv5k^b;Fp~_eW<6N8m1#Q;8q?Ii_#QnBDm8Nb9ji`X+LiLG5@!# zD{|QW{EM~Vag5;&r{Cz@06qdQuj)MHmrN0bdNM@Dn=TfF%g>PS$%!v_mCnlFw_(n& z&eqshacK4WB-z@u)>S$8*)DSR&&Ph0)rhPM=&NG7Ds_Xy9&FB}VubC8)MZf#>=aB=J9qO4t8lx_LsNxc13#%>1fuG_-ncw>%hS)F| zmIhxK7C~evLvt9DI4y-E1!6XgO+1{#G@Q#foF^lkuQ{BaHHfyB>=}XCxgCXQGknK7 zEX%{06r173Yy{UsJoolcLhMLIN4N?cqGC<%42Q_?Q$CMkgz!-Im_#P5!i>bpMU_L? zlA}lt?lTBSQDDPny(Rm7;6!Lf6Vs4^G5D7yD>(LZ*^LNQI*7L#$~lR_do~i*LFRW3 zSIvl|u8s8Xhcl#*N6jj(=(7lTpv|K^;g~S8gjsS+HHy?S_FDFd=qLi;Y&eDPq{!xLGK5D*-t_12cPY;7J6t<#YSFl5WwF7`<=ws zPD{?Y>0E^?mtGWw+d@lfX4-*)qHzmx<<(Fsp$ywesRV^&UQmb%7WdugNQo3O`Nh-; z96a~X$e?DpwxP(i_^rE#clSbXX>{GXIhjy8_1LdOw0Kfjh*E?oMfmkI5wCm54*hgv zZunj5Xw0LV@-J>;(ijI<)j33Y6qRm0m?R^4bpLxl{Bl%^gf+vA!tMC%rCGFpE2}JI z)Yrx=dV5q*y%?q<`tp_C3naV9P34f6PX3BCDQAc2F^>XcqeS>{5e>JpGUwzH%x>Xg zzm#|T;AHyqr6v|XRdlMKVHBM~)IrwvtcZlVh~4>CKRLowf-PM_LktBYmDD(_DI6@3 zS-?g7n8-h47lp>iocJUhsFxhk^X^h6trx>K4cR4Hi-pYd&v@bROZnf1&!Hvx#NKdn zBOT~iF_k%7-noEOfuA@v2Qn2z)FEYrBVCQFdi${Sw_mQeN1g{3H*ZQV&H-wx0N3#1 z^%pg`Hhtvy9drn$nJjWX4(=Z5j1{2@h2SiuT8X8TBx_)5G^!$F&R?sO&ppF`R!m}S zl3~Q2NTr@y;>BHT%|;)SS)v>Q>HOuC!!|C7OIj;S#v!h zBi+uc@lGYpB=bfyZ1D!s^25V7;>;TKnNRfJN*aVwlLteLaU`p%E9&muvqzrXS9?)) zYmEI zg^YJenTQ1_zsYmGAD8ekI{nHf6PSEMad$o27gGZATzHA~e!ng1k-1MpGJ!DcyN%%K zD%pN0mKtqM*}24#kuEN|&dRYon_VtpY_6JP((B2ZJ9BBvb2T)YD0eJ8@`>gz{is#H z+Qcjb^H=zr!$^(@(~vaS7ELwWqs}0}zOmB-j~u!8vwAnGvCh2kHsgJ5y9WFvE^^$~ zPswEI2AZClZsuva+qVloWHaU++^>$U6Y}Ogn)x8=QYB>)kZyY-6A{skNNmhw)s`n&1@zO7KR6 z(HXyqWpw+aT|HwZapqe_;V*C6BsJefd)~XlUv)djv;W{O(@qB-m(?-thihEeqkfp8 z)~nK!uK4;c=?`^-G4x#01)l;s7l@knV(h2*O=`b3uw<8QemehFip+SdHSTEKp+x4|Wlc&|a zE^U0NLPr;kdwRC~mA$1!gu;#7fdg7h@4QY1UWzDbSY%WW-Z#E7GT*LKC#p`De!O|u z2E!k0asBct@S}J=Jkzx=tkKTsgO{r`qx6;3cTafTbH8~tzOto8ctN9XZ(yiad$blj zu>yCy02TiswMTpe2OCcwD?<6A<~a#klMZsYQ&z^>vQt2&Pnb{W;ik>y#-r%g&^L;u z0sn2to_gN

    M3(zKrDX9{9=9W2BNRF=M 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