<snapdata remixID="10046005"><project name="Raycasting library v2" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes>Thanks to Wunder Wulfe for the original project</notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="flat" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAgAElEQVR4Xu2da8x9R1X/ORQKlDviBShEQKJBvBGNokKMyEUNxmhiDIiK4A0lXIyAqIgXFCRAodxb2tIKavBuSACDBvAFxldGUNQXCC1FgXKRXmkL//z36XrCXr+zzue7Zmafc57nWX3z9HdmzZo1a9as73xnZu+9+rqv+7ov3irx32q1kqRVOa8sWy8rb+1l65n8F7+4dldrfcl5W4Sy7fb6d3R9tf+9/Ty0dlR7Tpuczadd93tX7fa201vf+7VV30mtl+3XaPnVgx/8YAmAswlxKfms3tEAkm0/Kx8lolY9rfUoIY7SO0rPruyldqp8GQ9kE1+rFUu306u/t775pVXPSau3dH9IfwFwcqZmASMrXwCcHBBRfNQ4iM2V2GAPUCIb1dzS7fTq761fADyPlFZ/qvVIbvWQhzxkCAPuTXBUn8rVCUh6qFxtx+RIH5Vn21Pb3bfe49bvVn9VvWU9QAmutfWl9PYC4Kj6vVvTvf5R66ty0Tir9VW5rP9JbwGwG7nRwED6qLw1gRy63kO3r9XvVW+3HqAE12rNUnqzCbwXWNT+Z/ublW8F/ENtR7WL5Fbf+I3fWAz4S6JjFDCQHipXJ04kl9WflW+1b3Q7o/W19mupeqP6R4lgKftJb9S/rL1ZebJrFFBSO612t9YbZc+o9kkPlVN/1HHsbSeqT3oLgBdiwJQ4qVwNrAJg7VZ+rz/3VX9UnFAiOLT+Ze3Nyqv9XUqvCgy7YsBZe0b5hfRQ+ahx7G2nGYC/+Zu/WWLA1tEoIfQmCqpP5epAkB4qH9UO+VNt57gA8Ci/+v4upbe3HZrQu7K7N452XZ/8ptozSo/aXi9QLm1vVn8roGT9RXZRudreUv0h+6h8VQA8H8JRiVHVo8qpgdYK7EvZ0WqP2t+l7W61Hyee+Dy96oeTIkd+U/s5So/aXgFwm6donKhcbfVgAfihD32oxIDVRKfKtTKMVv1qIu3Vn+1Xtj0vHwVWVm/WP60To9WurF/VianKjbJbbe+kybXGS6sfdt3eSQHgUX5T9ahy3r9qPZLz5TbPqZ7Z0wvsqwLgZRhwFtDURFMAvPbUrgFx1+2p8XBc5NSENqo/u26vAHjuAdX/qtyJBeBv/dZv3cqA/YpATUQkt5ReFfhoopP9o9rJ6lHtov5F5ap+Va7VDqq36/Z33R71/7iVtybaQ+ln1n5VXpVTF95LAZU6Dmp/VLnWhU2rfrWeKkfjsSoA3jzEasJV5SiAVT2qHLVXAJzz0NJ+z1lz/KRbE9ah9DRrvyqvyhUA5xi26lcCyNYFgFpv9W3f9m0TA84mGFWe5Kh830Ch2qfK9fanlTFnA3Kp/kR6s/Zl/dCbyHv90dv+ca/fOr5qv0fHlbVLdlO5ar8qp7anylG7qh5VTvWrCmC9cll7sv0k/QXAEIFq4lXlCoA3P7fbGti9fqcEtGugV+05bnKt46v2swA4xxBVv6rjpsoRIJFdajuqXNaerF7Sv/r2b//22RlwNqGp8lk562i23iiA83pG2TE6oat2jW6XJsqo9rL9U+1qlTs0e1r7cVLrZRNkVn6U37LtqvIkZ/FLclROwKL6aXQ7qr6s/UvpLQAWI0VNvKPlyDy1vVGASPa0LlyWWjhl7SX5rL9JX5WP9cBSiXKslbe61VJ2kt4C4LadAvKrjw9VfvWwhz1s4y3o1kRD9ai8FyhG6fd6sow82w+yW504pCdrlyovB1znCyjU/mUT5lJ6s3Zk5Y+L3Wp8UP9b9bTWI/9m9S4tH/lPbXe0XKs9rXaoebJVfwS0re0WAAcRUgA8d8yoRER6KAH31j8uTJv8oC6MVD1Ly6kJj+xo1dNaj+Itq3dp+VbAs3qqfapcqz2qfi/XCoS9dra2u/qu7/quIW/C8gZQ4GYTiKpvKb3Z9v2AZuuTPJVTIqNy0k/l1H91gvXaSfVPGiC39ndf9UbFQXYcs+1m5bOAlvU/2UPlEZPL2qH2U7VHlcvar+pV5dR+k1wBsLglmgUcAiAKdGqPykk/lZN+Kqf+ZwM9m2Cpf1Se7R/pq/LNHhgVB9n4yLablafE2xsPZA+VZwGM7KX2qLzXX6Sfylvb79W7evjDHy4xYEqo2fLshDF5NTEeCiOPtiay/aAJMFpfFJBqO63j1dpPdSKQ/lFxnG3ntMmrcdQ7rq31qV5UrvYrm/DJnlZ9kb3UHpW32qPOg1Htq3qyCxZVbwGw86w6gbJyfkCy9SkwR+srAF57QPUrjU+Vzz2g+lVNZJF/W+tTvQJgjbeRH7NAnZWn9qm8Na5UvatHPOIRXc8Bq0wnmnDqRGxlzKp9u9JP/fXlSwN31j9kvzpBVD2940LA12sH6T80Rh3tyGT70SqvJqbWxJet1zv+an9UOXX+qP5X2yU5Ku+1e5R+Vc9oRkt52pfbvwuAIZLVCTpKrgBYSy2qv0nbKD3UTnaho+rLyhUAtzHxLLBnE3yv/NL2qcCmyrX2l/RTeaufSG8zAH/P93yPtJdgE3dUwlL1RO32bgFR+1ROiU+tP0pO1UN2twKF2r4ql50ovXoPjamq41RyOQ9QIm0FhlH1qDdkP5VnmaqqL9t/Va8qN7p9apcWshHjPSPPFABvDvnehK7WHyWn6qEJXgC89sBof6p+L7llPUCJNZvIswvF3t6R/VReALz2APmJyocB8Pd+7/dKDFhlCD5xjU5kpM8zZnJkFnDU9lsnGuk/NHuX7qcad6odqn93rU+NU9WuSK63/3RE0mrfqP6relQ56k/WH2q7S8uNtnu0vdmFELVP5TTOKqONFjjRvFsVAOcYDyUwKqeBVuuPklP1kN3Z8tZ2W+tlFy5qf3rtyTIS1a4C4O2e6k3IUTyRXirPxkOrvgLg3ExaDIAf+chHSt8D7k00WWbc256acD1jzk4AspPKs3ZSYlUn5Ci7Rtmv2k39z02rWFr1z6j2TquefY+72r4ql80fkd4o/siO3nLVfmrHx7P15wtf+MLWUCe9VK7Oo15AzS7AwnEuAF5/nza7IhwFPKP0mP1qgKoAM0qO9Kh2FwCrKeZ4yO173NX2VTkVwEiuAHhz/GbHIZoFBwPAj370oycGnF2JUUKlckoP+2LMWUCkfmb9Gq0ce4GH7KRy335vv1Q/Z/3R66el6quJgObFrsqz8ZBlBNSP3kSbrZ+VJ/t7x5vsoXICeLWc+kl29Jb7uIr0qYBK9qhEjPRE9pyBawXAm0OMElC0dT0aqFQ7aKKM0kMTl9rpBdSs/lag77WTxoP8qNZfSm6UnylR9QLVqPqtdmb9r7ZDclSuxpeqp9XPpJ/KTzwAP+Yxj0l9D1jd6owmcPb3bICrzLk1wZA9pLe3nNrPAg7Zo+ojPerKUu1fJEd2qPpH6VHbW7o/aqLrtbe1fq99veOltr8vOTXvqgxRJQpZOWtfHY9e5prdicv6h+zLHhV4fasC4NaU0cecl0646gQYJUd6CoDb4oz8qmpVgUPVN1qu175eP6nt70uuAHjz07LHHoC///u/f+MZcJapqvIUwL0MVg3U7Baj6R3Vz9b2KfFRIlLtb91yUhlztv+7lm/tB41Pr166Raq2T3IUR60LSJr/WcbVK2/1s3ZR/7NMS7VDtZPkqDyab9Qv0kvlFJfqeJOdS7dD43m0U1AAvHYVJZwC4LWf1AlE/tw1oGbt6QVKmuCt9hQAb/esGp9qIqdxbAWqSC/ZT+WU+NXy1n6RfVSe9XcWaFvbz7ZDfj4C4B/4gR+QvoZEW4iUULLMS91bH6WX7D9j7361fnyJ/iO9KuPPbrW0AlzW3mw7FEfkT7Wc+rFrPWp7JJftV2vCITtGlbfaR35Qd8LU9nctZ+3d+ta3nrk6CwRkd2s51VPzNwGVL6d21bgc7cfsgqoA2HmMJnQB8Nph5Kds+agJlV0IqBOV+qPqGSWXtWcp/47qT6t95IcC4PUIkX9by6leAfB2/x8B8A/+4A9KDNgm3CjGSRN4V+1EdqjMVLWTAjYLIGoCUvuXbV9duVLctLab1dsq32sfxfkou6idbPy1xk2WCYy2O9vPrDyNV5ZZqfOI7Owtp/FW++XlVLson5GfVPsiPerOXG87Z+STAuDNoVcArG2x0wSjhNULcOrEzdpBCYmAI1ue7UdWvzpOpLfVztb2s/WWlqc4yiZoApZdlVO8q/0qAJ57kuJx9bjHPU5iwNGWDk1IlSFSYKsrlKXa8wEaObbVH1H/s1s55Ee1XJVr7W9rvwggegG9NRGp/sraX/LbPdAaR5QYRwGfqofmkQqA1B71O9uOGvcqMLfaR/Mk26+svPe7jFcFwJuZXuuEoHrZ8tYEk22HgGd0eWu/aKIVAGc9dLzlW+OIEj0BmVquytF8zQJCVp7sJH9l7R9tH0Vxtr2sfDMA/9AP/VCKAauJmJho64CS3qUTMK34svaRH6i9bH+z9lH70c4I9YsmLLWrxiFNzF23o9pz3ORovLP96dXXWl+NSwIsKif7li6nvKECUCuzVf3caofvH+lRF3KkJ4rzcMe0AFhLDX6AskCmDnAvsFBgZ+0mgCoA1uLnpEsRYGT736uvtT7NHzWxFwDPPeXHQ/WzCng03qRHzc+kJw3AP/zDPywx4FZgyCZ8VV7dY1cBhFaEpIcmHAVca7nqr1771P5H40L9a9WfjUt1omUBY9fy5E9KSLu2NztOPh6oP1RO8a+WZ+Uor2QT+ih56kfI2OD9B6PsU8dTBbx92xXtFKwKgHNnwK2Jj+q1lhcAb56Co/xyKEBFiTzLzA6lX2rcU0KmcgIctTwrR+O2NDCQX7Lt03hl9WXl1bht3Rqn8SV/ZhcEqx/5kR/Z/JZrp4kcryY8Yq6j2okYFdmpOpj00MRTGR/Z0+ovtf1R/aR+qBNLtVv1f7bdpfXSePbam60/etzUBJW1MytPfm4FhtH1CBCoXN3xWcruaL7sGiCJ0av9V+XUBXEB8C2eis4yo4k9CphaE4EKRKS/tTzb/9GJnOxeGihV/48Ghqy+XvnR41YAvNkD5OfW8gLgtb8PFoB/9Ed/VDoDtoEkBqsmpmwCV+VV+8hOtb1IT9aOLGAQAPXa7/ulrljJr9l+qvpa/aHqJ3/0Al3WDlWeErdq9771tLafrZeV93EXLeSzzInsyOojpqwSDTUPtMpRXJPerF+y8tn5QvpXBcBjzoCjiTgq8LPAVQA891gvQBcASydVmJ8IWEYz5Gx7WfkCYO07vQREan47cQD8Yz/2Y0Nm1qiEr67E1AHrtUvdwiF7RtuRTRRk36hytZ+0JaTakx0f8hsBNSFMb33SX+VrD2T9nAUAWjgTEGTHSY3jbD+WlqdxUNtX5bLjQuOwr3aPFvQFwNuZkjoxCDBUYIq2YHq3tMm+UeVqPwuAKTVU+TYPUOL3dbOJNpvoaWFHo6nmmWw/lpancVDbV+Wy40J+31e7CMBqIjW57ECo+lVgoC3gqDz6wHnWPlWetqxoIpOflypX/TuKGVA//ELF2lXrRQsdmrC99VT9JEf9HL1gI3sobqk+Jdal69P8XTpRZ/X3+oviQ53HrXL0nWPSm/VXVp5wx/T5v9mF3ypiwBSQPhFRQvAOUPWTI1TGWAC89hSNkzoutJAYnSCiBGx2FADPPUQJVgU0Va4AeO6pbMLPyo+eX6MAT+1HAfD65Hf14z/+49P/tTIcmqBLJXxql5hK1q5WYMompqxdrf2k8aYJngU86ldrP1rreXtsJ4TspHKyR41bk1PtUheqrfZl41iVV+UoHiO/Lq2fxlNdCBEAUv9V4CM9ahyRvaPsyerxC3Lqb1Y/xRON9xlEtAB48xRSAYrkaMDUgKfEqS4QIj1RfQrQ0YCU7ccov6hAN7q/lMBVu0bF0a6BLDs/Dk2exo8ScgQQNO98u6Pk1TgqANZwg/y0esITnjC7BU0BTgnIl/utBjUgo8DOJmhVnoCUAj7rFxUISS+NFwGUOuFUP/qEkq2nymdXupQos35S9S2tN2vH0vIUr1QezTM1zonx0DzedXk0/9T4VoFXlSP/ncHg3LuhD91uNf6sn/6vGh/kp6O8UAC8dkUB8GY/EIAQc1YBNduOOtGzgKNO0EPRm7VjaXnyH5UXAK/fS6DGtwqsqlwB8NoDOwPgxz/+8akz4ChR0sSKAmDXCZoSPZX32ktAn13pk72t5Wo/CYBpxUjtZOMmYhQEPBS/VF9td3Q7Wbsi+da4G9U+xYnaTm8/svNTBTZVLguAJB/FZSvA05Yq2aP6wY9Da7tqexRfo/zl/bMqAN7segKG1oSbneAUGK0AS/ar/S8AHhM/6jgvJdcLXKPtarWntZ5KLHYFBFngUPtt83UUoIyyk7Zsd+X3KI5H+esMAH7iE5+49V3QEWCoA04AEen3gUIrK3JctpyAkiasOmDkn97ybD9aV54E6L3+j/xAE1e1S11wqOORBaRRzDg7L1X/RP1R2zvpcmr8EJCogKbKteZNdb5l+zPKbtOjzpvRW8o0b1S/rAqAtXdBqxMsu8JUEzoFWta+KIAKgOeeUf2aBVyawK36VKDLLogKgNceyB6JZOeTClCqXAHwfNw8EPu4zvq1d6Gy+qmf+qmNZ8DqRI6YKjGv7NZlL1CRPcRoyR9LAaRqN9k3KuG29pPGj/qp7sT4lTHZSytVFSipnVZA7a2n2tUaPzSuVE4ARQDSmjCpv0uXq3EV9Z/iNuuXrLwfV7/jl7VPbV+Vo3mj7lCO6ke4kC8A3s54ooHKTiCVSWWBiBKUGogkR4m0tzzbb5pA0cKQVryUeNVxVP25tFwB8GYP0zgvXZ7NH6OAIAtg5Idox28pe7P2E/HotZPqU14MGTAxwmx5ZCgliGzCM3l61RklvtZ2aWKpQNM7sDTwVE52quPvFwikV+03+ZnGl/qvlqvtLKUv275qByXe1nZpAUR6s/OS2ssm9KXlswvqyJ7sjlHULs3HUf6g+ezf2T/aLmo/2x7JH83DiAGrCZYSqspUaKVCDvL2FgCvPTJqgaMmvkjOApLiRQ1cNR5aE7oKVKR/lJ3Zdkie4qIAWPvOLQFmFqBIHy0oKG/T/OotJ/vVuPLxeWIB+ElPetKQ54BbHUsJOSonYFcTnwoslJCjLU8CJEqUaru9Cxh1HGiCUn8o8avjRn6JyqOFAOlTx1HtnypH/lTLs+2p81kFBNXOfbVL8e/t8oAQbcVGgETziMpHAR3FvdlB9mTLe+0fvfVN9qt5KdIT7lQUAGu3oClQC4C1FJsFApLPlhcAa+O0LyDcV7sFwJvzYAHw5vmiLsgj/x3hyZOf/OQZA6aE5ieIyiApwCMAy05Isp/soC2caOWWbVcFdNUeap/00ERr1a+uHKNxCVeOwTtoqZ/Rxw2i+FPHW/WPt09lVtl4IZglP9AOQpb50jymcu/fpbZ2yY7ecso/NA9bGfUoxhnF1Si71f5l5yUx3CxzJX0qQ18VAGsMmBIAJWB1oUIAopZHE4WALgos6h8BBJWTXQTklNisnIBHXdlSewSAVr8AeO0pAjaafwQwh1JOcTMKyLILlKz/owUYAROVnzoAfspTnrLxtoEKGBRQVK5ODNUen+j9SkRNsGoCJWBQAZP8RAlIZYpZe2nLthVYVb/4+FCZauQPu5xHiUBdcFD/KY7U8cjq2Ze8Ok/VeajGdS/g9NZX8xgBXRQPfsFG8evnrSrfC4DkB1poR3b6M/esnSoh2fUCaFUArK3A1UTZmoAKgNcepsRcALwvaNXabY3/bEKlBSkBAQFStj7Jq+UFwHM+aON0YgH4Z3/2ZzfeglYZSpQQoy02H/hZ4InkaWVFE0BNHMR41P702kt2ULna32x/aIs3m2ijhERxpC6YWuW8f3t3CjR4W04qmq9LtZhlgpEdpEeNXwLkbHk2zrMM3PtD3SmgvJztJ8ln/ZDNi9R+tpzyQaSvtZ1VAfB25qUC1a4WLBQgarnaLzWBmVwB8OY7BbQgWgroVL0FwJuZlwogKoCqckQYCoDX45UFPpKn/DkcgH/+538+9RywT7RkcBaYSF7deooSD53tEeBk7aMt1WyCzPaL+qPuKPiEQMwjYogqENE4tcZd1n9RP8iv6ri22hMl4OiMO2tPKyCrcZEFGLJfbVeVo3ke+Z8SfFROzJT8Re2S/6L+jgIc1b7e8bH6o+xWF2CRHOHVqgB4HppqYlWBqwB4zQiX2jImQFeBnOR8glTjRE186oIi0mf+LQDe7vHeBE/zmYCmAHg9PtmdAHWheuwA+KlPferEgKOtw9YERwnKygnIIoeqCUvdarXElT2DUO3I+lG1O/Kj+a3Vv9EEUYEq8ktkF/kxWkmqcUb+8OXkfy+v9ssDpe+3zcMoHv18iMbfr8i9fQTU0firt8gjhqj+7udLNmET0C5V3jrf/AKPgCQaX/Jv1o9+HKJ5GNkb9cv0WryrdtG4UR7p9esoO4/mYwHwesgKgLefgdECgsqJQdLEKQCeMwd1wRABdgHw5nc9e2CjHQc1bgmICoC1d2+fOAD+xV/8xSG3oKMErK4Io5WbynBa26cVYzQBVcBRJyjZT1tfUeIgxkr2qeXEGInRUJxE9aN6nkl6/1j5WWedNRXZxPb1Wplua9xQPYo7tX5WjuZh9JiIZ+itcezHT2XivYxFrZ/NIwQk2Z0Nry9aeHk/RvVoIUL1KG/QgiTLVCN7Iz9n45D8S+Mf2lEAPHcdTQwKLEqQlMhUIFIDrgD41rMh80BbAKxBMcVtAXAuj1CeKQBe9pbzwQDwL/3SL824P000FSCyZ8pZBuWBjuxSV2wEWL12qnbTSlVdCGQXBJG8Z4KRHI2D1cuedfrxU7ekI3hpHWfS9/CHP3wSuctd7jL9vemmm6a/73jHO2ZVqX2Cxd7+k/7e8mjnQNVL8yzqP32liOYV5YlRjDirh+af+cPiLdp58MxSZXZZv6j9I7whJtxrl2qnj5so/ii+ztBTADxPCZQYKTH0AlM0sOqKmQBCBW41wdMEilbyBcDbnxcmoFLHh/QsVV4APPcsAYVPzH5cCoA331Ehv2bLW8dBXcicAcBPe9rTUgyYJmwrQHngUpkUrURG2ZsF1qg/Zi8FRhZII/tG2U0rQFo4ZM9i1IXCUnK0ELN2H/KQh0z/+4AHPGD6e+c733lmEum58cYbJ/nrrrtu+nvNNddMf//hH/5ho54oEVOc76ucFo6qXa161Hp+nOyM2ce9mmj9PCcmpyb+yF/ZfBItjMlOtf+qPer4RHms1d7I30vb7fWvCoC1ryGNArIC4HkKIYCihUUBsAph+5HLJlgVYNTeqO0XAK892gpoBFzZrd5ofGmhry6YDgaAn/GMZ0wMuDVQe4HJ1yfmGwWImoijlV/rVioFnrojoAYcAVJrP3w9f5bm+0mPsajjocoRUPuFTavfyX9m7yMf+cjpf7/iK75i+qvWo/EjYLn55psnkeuvv376+/GPf3z6+773vW9r1WjhR4CnbnXTDseoBBwlTt8PNZ+R3BmM5ZbvUEfjrepTgU5dsFMeIv+r84Xsjph/KzCSPyl/kL1Zv5G8Gp9HeaAAeO0KSqC0ZRM5Xg3sAuDN46ACVgFwAfCXziE1cZNcAfB8h5AArQB4HYUUV0d57elPf3rTGbAKWD6BEsM1eXqsgVY+qn1kj7riIaBQgVi127dndqr9UfulMk9ibtT/rP3Uf8/QyS+0Qn/Ywx42idznPveZ/p599tkbF24UB2p5qz/9uN5www2TKjtjvvLKK6d//8u//Mv01/vJ6kdnoBEjixKv6aEdFZXp+XEiZk+JkMqjhTX9HpX7hXzkt2jnwQNgNI/V+R3ZqdanBUrUPwJyap/K1X5FeYTywaj2VwXA8xWenyCqoymxEgBF9VVAzgKY2q8C4PXIFACv1+kFwPOlEQF4K0AVAPd9nerYAPAzn/nMje8AUxO/+s5av6JvBaQsUEVbx1GAE/NYqh8qQzM5lVFQfwhgWxcWaj2/cIgYgn+uPGK4dkZqL9iwf0dx4FfiJme3mu2Wsz3X2zr+aj0ar6XK7Ta2nS1fe+21U1Pvete7pr8eSIg5+zeN2ThYPbV+FEcU/z6uaMEZAWlWjx8fatf3j3b+Ir9FjC2yn+zKlkeAF8U97XgszZBpvAlnaOeBdiqO9BcAr11BK9ko8Y1aSBQAr3ciCoCXgtjteguAt7+LmAAj8i4BWQHw9ud7Cegi4Ce/HwwAP+tZz5q9CzpKgNGKIAtcxKxp5eHLieG2TpxRwEr9Uc+EokAjBkv9iLauI7vJ/56p+vb9mWC05e8ZFH01JVppE5x5+x71qEdNVe5xj3tMf29729vOVJA/R9lBdo8qV+evX9H7s2V7fvm9732vZJraro+PaCfEGvVM289/34+IURIDi/RG85R+V4Ekii+zx/ofzVPfTsTUsgBG8tT/CBdoHKg86q/3o2p/FNzRjirZtyoA3uxSNdG2ykXAm53YBcC58SOALADe7M8C4LVfWrd0CYAKgDffxSEAo/KDB+Bf/dVf3cqAow6qK4FRABWt6CL96gqbVopU7ickbSXTSonog+pPbzcBD5VHTDZiFD7w6WyLmLgab1E/Iv3f+Z3fOVWx53nvdKc7bWyqdeeG/Jotp/hQy2l+tJb7evZuYn+2/LnPfW4y9Z//+Z9Vk2cASPHg7fALXn83ILr17duJGGN24axugWaZGcmrO26RnizgRf5TFxw077IMnvxD5epCKsq/Z8RlAfDaVdFWdgHw3D/mD7pEUwC8GSJadyxSKCUItwIsJaAC4Lav+KiAlB03WojQFr23qwB47REaBxmAn/vc5258E1bUAK1Iooapnroy62WAqh0EvN7e3p2CLBNS/aAy8ujsVp2gQs6fiRAQEcPpLX/c4x43qbB3N1NcqHEdyWXHN+vPUfKUWFqZWxZg7Iz5qquumqr+3//93/T3X//1X7d2lez3lSOAin63hae/be/nj7+zEM0j+z2649Dqb7VeFJdml/+6EgHLaCKTUqoAACAASURBVOa8K0Ya5W/1tj0tTMN8VQC8+eyhAHh+Kzna6mlN/AXAfV9DavU71SMAUxN7q5zVKwBej1SvH2nBUQA837Hw/l4cgJ/97Gd3vQkr2rqNGC2dlWSZDTEXtVxligREKjMlphTZY+339itacUfveI7apYSuAq0qR0w0svP7vu/7pqp3v/vdp790u5n8S3Zk43iUfKSHgDWbqFuZCdXLlhtD87ey3/3ud3cxZfIXAaN/3jlizN7IKOHTTlTWb8TYSB8Bt9cf5U1izJGd5H/qH+XfiBFT/ie/nbGzUgA8Z3oR86UJQAPaC8y+fQIIWhgVAG9/vIj8WwC8/U1FauLMJiwvXwA89sxZHbcC4Da/nwHAz3nOc2a3oCMAyv7uExhNNBWgKDGq5RFDzwagancWoCMApXf0envU52ezDJT6E03Q6Hdi9ioDtzdgfcM3fMPU1P3ud7/p7x3veMfprxofZP+ocV+a+WaZrSrfy0AoH/Qyo6j+5z//+amL/lb2P/3TP02/9zLfaDzPSLy3fFWJnmv25a3MMhrX1nGgOPHzQ33eunfcs/k7Gm+ff3sZcdSvVQHwZgZMgUkA1JugC4DXHibm7xNBAXAEAevfCWAosUYJrjfx0XyjBBgBk/+9AHgeB6rfs+NeAKz5efW85z1POgOmLU114o5iFmRPxHQiYMwmJhVgs4wrYuaUgFQGq8rROPkFSJbBemD1K2QDUhoXr8e+02tnvf5d5dnxiBZa6vjTQi2Cy9Zx2g6/xw+AWwFCrRfJ2da2fUXqYx/72OTa//iP/5i5mOKT7CBgi8Yz2gnz89Dnjejf6gKK+kP+oPmg2kf5sLU/Ub0obxBjJzsLgG/xuBo4FEDZBE8LBQ8w4VbGLVtalIBbEzsBTgHw2vPkJxofii+1fiSXjfNIXv29VY4SFyVYFSgKgPu+OkR+zi4wTx0A/8Zv/MZGBkwMM5ogWeakMgwVqCK7zd7oTEW1gxKkCsBZ//pAJyClcuoHjSNtDdP3eH0CNXn/3KH1O1rxf/d3f/ek6p73vOf09/a3v/1GIFTHpTcOyO9UTn5vBeBRwEvA5+2jBD2qXNVDjMX3z25Xf/azn52KPv7xj09/P/zhD8+6Su1Hfsv+ri5ofBz7uCNm7O1q7R/Vy/Yn6ldrfwjHyH7KF2TXqgB4njIoURNwUf1oi9nrpZUgJXIqp34QEBQArz1E401+JEBVx5H0FABvv7UaJdoCYO22r7owUwGN4tXnUQK6aEGxdwB+/vOfv/Fd0KpDaQVACSoCJGKy6gBRAlS3DFsZeMRco63lqF+UiKmcADcK6Kjf0VeN/E4DyRFw+PJv+ZZvmX66733vO/0955xzJCBU45DimeKJ/KyWR35Rx5nmR6Sf6mUZCyXc1nK1Xpbxml/s84z2Bq5PfepTU9EnP/nJ6e+HPvSh6e9d73rXmStHJXS1f34cafx8/EV5yMsRwEX9pt8jnBmFP6rdEUCrdqh5+wziUgC8+Y1EasKmBUQB8K2nGPZb/2qiKACee6AAWGNklPgJ4AqA13FHRIF26mgcTj0Av+AFL5idAUeBqQJStMKKfo8AjAaulbmqDCfLeGkFpTInlSGp/ad2yf++HXrHbcSsWn+39u1NVsY47JZ0a1y2xoFaj/yeLW/1H9WjhVC2XGXIBICt5Wq9SM7i25jvZz7zmcmFxnztDPijH/3o9Pu55547/aV2bRyid0b7cVKZ+ygAo3FWdySJcVKeHBU/lBfITtX/6riHRKwAeL7SowQbARYFVjbhEtMpAD5rtkKncRtVruoZPd4EpK3llHiz5aMSKCW23gRZADyPGBrnAuDczgstqI786begowTjf6cVBm3N+voR41UTmWoPJVCV+R4q4BKjjcbRM1t/dtua4NV63u/2nd573OMekwq63Txq/Ck+WuNRraf6ayk5SsQqwEbMrBVYSZ+ql4D7mmuumZoy5mtfYzLm+z//8z9T+RVXXDH9tTeu+XkX3dqPGLDf6qU32Kn9jfxG/qR6UZ7xdtNOJo0H2ZH1A+WJXTFja2dVALwe4miFd9wYbwHwfDxVQKWJmd1xaN3BWApYVb0FwAXAXxorUTwUAK+9RAsMWuis/BZ0NhER040SIDFesqM3sWYBN1oZRXaM+t2vjFWGbnK2IvUrclphqwm7Vc7360EPetCk6qu/+qunv3e5y12khZH3M8VNtlyNMxpvtdz7k4Bc9T8Bq9dD8ioTbpVTmc0oOXvjlT3va8z3E5/4xOQaz3ztDNjuJpC/fCK2cbW7DK3fE6a8RADQWh71x35f6t3PNN5qf6J5QzuzxNjJPl9eAOzeIEUMMlo4jGJIEUAcbVmI9hYAr6dYFnDVcVTlegG1AHjtQUp8lHgpMRYA596IVQA8j8tWJrz67d/+7a1fQ4oYhsogielSgupNoLSF7N8VrK4oidGoCbqV0apbQCpDysp5Buv94RcMZ6z8bllI2Fmvvbv57LPP3gqco+JBZbbqOLbGg7oSz45PJK8ytQjQRv1OgDiqnPTYizai532N+dpfewPWZZddNrniwgsvnLma/BvNg+irSP53v7A2ff7ORpTHyB+95bQQoniPGGj0nWTK1739iXAu69/IjgLgW6+fU/WAoi4cehN0AfB3Tv4vAJ6nplHM1yc8AghVPtKj/t6bGNX6JFcAnGO+5M8C4M3+DAH4d3/3d5veBe1XBurAtDKYLFCpgdALoEsxePraiV/5ZhMrMSq/IGkFBK/nm77pm6am73Wve01/b3e72y3CeLNxpjLiVqab9V9WnsaTmGuWMatAq85DVV+0MKb84+vZO8c/97nPTSZ++tOfnv7a2e///u//Tv+2ryB95CMfmf59+eWXT3/f8Y53TH8vuuii6S+137uw8fUtP9x8882z+RMxSGJsqv2RXHb8KB6j+dvaD+pfb7n1Rz37PsojBcDam7Ao8aoJXAWGAuDN32lW/afK+cRG9SgOsgu6CPgKgNeeURO+mkBNrgB4/lwr+Y8WUgXAaw+lAfiFL3yhxIAtIdiKK5uIKLFFe+3RWWcrAx+VcNX+WGBm+xet9Mj+KKH3JnrPZCN9/izq/ve//yR6v/vdb/p75zvfeRaoPo5Uv/bWa10wZeO+d7xGAXF2h4Tk1YRLiZuYEAFDlhHbWeLVV189Ne2f97Vbz1deeeVUbgz4v//7v6d///Vf//VsSC+++OLZv1W/qHJZ/0TzwuKInvenvKOWq+OuylFeUJnxqAWdajfl41UB8JwBqwyGAiLawlW30inQCQho4LP1C4DnHlXjpAB47QEVSL2/1HqqXAHwF2bjoV7e8oCTXfhkFxJ+PCnfHlsA/oM/+IOJAdOKV0045CgVgLxc623lVruzDImYOgWwfx6QALSVGVG9aOEQ2eO3yk3uoQ996PS/d7vb3aa/dtZLfm2NH9LbWq7WywItjQON/1LllAey5SrTUwFUZR6RvmuvvXZSYczXvnJkzNfeeGVvujLm+9a3vnWjyy+99NLUAqPVH60A5uMs+h56tKPYC2y940ULsihfHIrdNN6rAuD1ELcCNQGv1xsFRgFw35mvCpRZgFf1FgCvPUBAOiohUzsFwOuTxQLgzWfdoxh8Ng59/K9+//d/f+MZMCWUbCLzQOUTGwFZ5LCICbQCKiVc6gcdwmftpXEgJkR+ML+2jqfV/9qv/drJlC/7si+b/t7pTneaJQBVvypH49RartaL5FrHa1+MmBhtBJjETFSgVeWyic7LX3/99VNT0fO+duvZ/tqtZ3vj1Tvf+c6NU82eB478odpNTIn8Te2o4xjlZfud3vUc2UH2UbkaJ5Q/Ivu9/l31owDYvVmKEnAB8NpDfqu6AHjzUkgFVlWOFlzZ8gLgT04uKwCeR06U5wqA+56b9kB/tAVNwNNbTgyXtmqjxEIMr9fuaEUYBegopj6KSUVnut5v9NiTydsEvPe97z2ZeGi3m2kF3BoPUb3sOLUCbWs9FWCJYY0qJ6ajMkFVz4033jiZTt/39cz3Qx/60FQvYr5vectbpvKsvardpJf0qIwxkoviOsrT/p3z2TNY6o+6ZZztt5/XZLeqX+1PAfAtHqXETQsIPzBq4lMTa6tcAbD2nDeNfwHwPCVTfBOAqIlMlYsSXgHwdsZWALz2gM+TERD3xqOvv3rRi16Uehc0MYgokXkA8+/2pARHCXIUE7bLUNGAWLnZG72jNNufXiZFQGsB5c+oKfC8Xfb9U7vd7L/Tq46TKkfx1lqu1msdR3XBRPq9/0f/m4DUt6cCKyV2VY/KJHx79r4Ce9MVfeXIv+v5z//8z7e6+o/+6I9m5X5++XkWLdCzZ43kj9EAETmB4iaKf2KYWX+M6u8ZwAhHkxZfKjOP+lUA7BxdADy/NVgAPF8hqwulAuC1p1SgHZVIrb0C4L6zSgJYKi8A1vy/evGLX5xiwCrDpRXwKMZK9niGQVvJtPWgMhZKwNn+m13UXy8X3cr2QBLtSDzgAQ+YRO95z3tOf+1NVmSHyjBPChNW4yIrN5rxkj5KrDSvqVwFZGJ6kR7/oo3sV47sXdDR2a/1L2LAtEDzTNnsVb8L7POTuoPV6s/WelGcRTuhxIyjHYTRCzdvt+9/lK/I/mintAD4FgasBrKaQAuANzPHfQNuduFDCTVbrsYPAeVS5QXAV02uLQBeR1gB8JzJDgfgl7zkJVufA/Zbsn4Fo+6B7yrxEjNT7acEpyZyNUGr/vEM1+r5r6P4V8wRM/F2nnPOOdNP9tUiO/O97W1vO/1+m9vcZvpLXzOKAMePA8mp5apcdvyy8uq4t8YZ1aOVvFq/F5BVxhvFJwGAr3fddddNP9mZr//KEb3r+e/+7u8k17z5zW/eCFBZv3tGbHHmbxWbXv+7+liQOg7kbyqncaT8bPqpX74dsqu3nPJndsv9KE8VAG8/84xmY2tCVuvRSssDWAHwfKTUBY0KlOq4ZeOFsj3tpFB9ShxUvwB4s4cKgNd+yQJ7AbBj1C996UtnZ8A+sfcyRjVxqQmTBjBrPyUY1X6VeVHCJ/ujhOlXjJRYo3J788+55547idjZr912Pvvss6ff/V9jxv6vMWV/e1wdb9Wv6jipclG79LtaTnHQOn7ZehT/Xh/JqwmZFgbEWHz9G264YfrJbj1HXzmyrxv5rxy97W1vS7nOADiqNMpPPh/4dznTm/f8jlmUJ9SdTBoXdfzVs1Xzb/YNVlk7s/IUvz4P2Dh6P68KgOcrEjUxqomcGEx2QVEAvPYAAbgK3ASY6jircRONH8VJCh0SwgQUBcCbnVkAvPYLAVcEVAXAt7yr+7zzztvIgL3j1IlKibG1PAtU0Yoj6kc20bb2g1ZGEQOm73iqOZfG8T//8z8nVV/+5V8+/fVfMzLma2e/ESOOGLL9bszYGLPvtwqg6ripcq2ATPV6AVod3145ig915a8yIdJHCf6mm26aVPjnfaOvHNkOj33v90//9E+bXGZvwiL7ly6P8sUZTOuWy6bH9WzVz9/j1o8o768KgNeu6U3QrYDsFwoFwNu/z0x+VoGbADMbD6SvAHgzYyKAKgDe7rcC4M1fOyICSXGVLac4DgH4la985WwPNjoLoASiJixispGhYQduWdlFH5am5a1qNyXY1n55u2mlR/1pLbevutz//vefVBgDtq8aGeP1zJd+H82QW8eB4jerV9XXKtc6jqPqHToT9s/7+lvPn/zk+iMLduvZv+vZ3nyl3no2v/7xH//xRhePYvyUyFvHxfKKemZMZ8L+bJnko36pfiM5Wph7+/y/6Y2GWUBWx2lVAKy9KziboGlL1U+I6EPZoy5XUWIuAF57KLsgo7goAN58x4ISqvebly8A3j6jozPWAuDNjHlvAPyKV7xiIwOmxEErjmx59LyxXzn5wLJ6xNyziVWVJ+arbhGpKyYC0my5X8naO3Dtu753vOMdJ5X+7JeYL5Vnz5LplnXreBGARnqpXjQOpE8dv0jP6DhS9ZFcL+D6PHDNNddMP/mvHNmbrDzzveKKKyb5D3/4w9PfLPO19u3MOHpzXJbpEeOl8la/RwSBmKI/MovkVT9kmaWq189PP1+on8Tos3ZH47QqAO5jwAXAt2sC6AJgFWo3yxUAFwD//8goAF7PjxDg3JsOI0JHgExEMAvIRwsEu4QVrehbmYVtdSwNUMS0R/UrasczyIjx2u/0PJtPt72MKTqridL/G97whqnI3vlsb8TqZcDEiKOzZfUM2eQ8U/Y7K1lmSv6n8ij++uB3d7UpwXtLSL6XCdubrtRbz3bW+5GPfGQy9a/+6q+6nOdvTVPizTK20f4jBh0xRfuYBTHlaOu2l0GqfsvGU9RfAuDe/kRxcnQLehRQmZ4C4DWz9gFcALydMWeZMb0QpAC4C2+QYRUAt31vtxU4RtcrAF7n6b0BsN+CJkapXi6KBlY9E1XTBtmrLiyIqUf9ib77SWclav92LfeTP/mTG5t87GMfO/vdnuMlZqwyX/V2tQrQxoQ9M7Y3elm5f0NXlrESA6by7Piq+ohJZdtV9ZFcFkBM/sYbb5xMNuZrZ7/+Xc/GeP2tZ5NrPfs1f731rW+dJWwbD2OMEXPzO2BRflAXNFk/EhOmcetljr592jnIlquMOYp7IkqR/ZGdqv1nnAEToBUAz5ltAfD61ZQeaKN/E2BH5Z7p0otACoC3v+GtADjrgbV8AfA8/6nMsQB4807J0WNIKvASs6VyugZPKxRfTnZHjKaV8foFiAVgdCvSr3Sz/WtLE1wrsuuJT3wiV94g8ZjHPGb2qwGgCsxZwI6YMAGzZ8TR2bFn+FEckbNUxrpUXKjMhvqh6iG5bLkxy6uvvnoyMbr1bM/92juejQlffvnlU71e5mv++ZM/+ZOZq/xTGBEjzjI0YlCRPvqdytXxUXcyCaB7gVn1q7pjQHd9ov609qMA+BbPqcy+AHhzqi4A3uyXAuC5X9QEb7UKgNeeUAGEAJbK1fEpAN78FT26rOX9vzr//PNn74KOVvqRw728lxvFeKNERgxYLSdGTP2IArc3AUfjYe1l9Uf9NAb/Ez/xE0SGmso9QEdbzXZGu6+zY2LI/h3W9m+KsyanfUml7Dj79iixqvapekiOAMXKr7322sk0z3ztXc/+uV//vO/b3/52tWuSnGfAVMmPW8Rs/RlxFijJn9l4aB2/iMjQ5VMCrtYdgdZ63l8R8eplxAXAwXNi2YVEAfD2VFQATKl6e3kB8P9NDrLPDBYAt92+JmDvLS8A3jwu4cLrVa961VYG3Lo1Gw2kClSHwnitH6NeCdmbSD0jjphw9DudcTz+8Y/vQ4rG2o9+9KOnmmafMeA73OEO0++tl7dG366Ozoyj7yBHDLnRTeGrMomxRGf+WTuond4EbvWj533tNrOd+dpf+8qRnf3aZals/0g+ehd0NK/NX34HzY+HZ8B+/qpMK7J/1ww5YpA+Prx/6CtHxGijcrX/anxnGXEB8C0jry4obMIUAFNKGlNeAKz5kRJ9pKUAWPMvSRUArz2kApUnDAXAc/+tXv3qV2/8HjCdiUZnwrSX38pso4GkszcVcNUVDU3QLMONzohIT5RQ7Xf/lSW/oKBxesITnkBd3Wm5AbR/vIgYbm+5+viTt4tuVxsztr/EGLLOziZI0h8xMrWeysxuuOGGSVS99fzxj398krezX/v3qFvPZrf//i8thLLzl/KA+Z8+GuABLvp36++t9dR49Hm49+xY9UeWWXs8UvHD590CYHcG7IEtAipiGpSYaGWYncBeXwHw+o1bBcBqJG6XKwB+y8xBBcBjvnIVLTyjLXl1izkLqFn5YQD82te+dubJiNlmGS9Ne5W5Rh0lB0T2+s/+eTvUFSYBZCujIWYb9Zv65QMsem7Z5Ja6DU1x0Vr+qEc9aqpKzwfTc8n0IpDed1ZHLwix3z0ztn+rdydUptnqZ5XJZOVuuummySRjvv5dz3bb2X/n185+7fnf0beezU9vfvObN7rMz9dsXlAX4hEgRd9BJ0BZismqZ63emX6BZ+Xq0ye0ozeKCZPfoh3X6Ax/VQA8/xpSAfB6PVYAvJ1Bq6/EjN5Vnd2iLgC+aorLAuAvTH5QLy8RYGQBkxZWWX3ePr+AOfEA/LrXvW7rGbCK6NGKmphutAKks9ssA269xayuaFW5qL8RY45WhtFZSbQi9ivoaAVqvx83APb9sTNj7z+V4Y56M1fr15w8QEfPH/t3WRNQUwJVmbGqh+TsRRv2vK9nvnbr2R47snc821mvvenqb/7mb1TTm+Quu+yyqR7Nc7U8mtdqHiWgixgXATKVU7uR/a31ojwf9W9XW9RZP3m7jj4SUwC8fT7ShFIBNQJYmnAFwE358lYFwHO/RUcbbd7Vb8EWAG8fh9b8QoBWALz2+1Jb08MA+A1veIN0C9p/7YOYKwETMWNiwHRWTQGYBUTqjy9XV7jRBPT98xPOJ1SakGrAmJ7Wd0K3JvRd17MzYz9urWfEdDYcvaM6+l29VU3PH/t3FY/yMwGrbyeSN+ZrZ7+f/exnp6r+hRvGeP1ffzt5VP+8nksvvXT2kwqclDd6z5AjO6IdP5+XWgFKHV+KEzVvRX6Mdvx8vmvtZ8Soe/t/NA4FwGtXqhOK5LITqgB4qZS5XW8BcJ/fKbGqCaoAeP49WsovKnEoAF57iogYASyVq8Qmmg8rA2CviIBBXdlFchEDpt+J+dJzY2S3Wk5yvh/EiKN+2wrPdiDUSwnEkGlFGH0XuC9tH5/aHqCNSdIbueixp9bLW9nLXP5Wtdnlv4Psnw+nEcoCb5Sgoud9jQH7V03aG66MAdut53e+851k8pDySy65ZCsDJuCMFua0YKejgyhv+Pkd5SMC6l6AiZxPcaQy4wgP6IyYgDVb3uqnAuAgQmhCFQAPyWsHq6QAePPQUOJUE24B8Obv6hKgEgOOFt4FwPOvF2UBluSHAbA6wFm5pc58fccjRxGgLlWuMuFoJRcx+mhlHDFb1U++/k//9E8fLEju0zAP0HZLufcrTq0MOXq+mB53ip4/NsZv5dEWmjoGFlc33njjVOWaa66Z/tKtZ3vs6Morr5zk7Rb03/7t36pND5G76KKLtjLg1nwY7YwRM44IAO20ReNIjFEdf1qgqcxWbS/ye5R3aeePgJbKs0B8BgPOBlIUCCrg+vrZLWgVWJYC2Kj/2QlSADwkT+5MSQHw5jchRQNQADx/3wABLJVn8wuNSwHw9u/7RsCaXVB4+TMAuPXsd1eAG22x0MqLFhZLlxPA+vLRZzPqys/LPelJT9oZqJ2khjxAG5OkW9bZ29KtzxlHjDl63tifHZucfw45GkN705W/dOW/8+vfeGUM2N71/Bd/8Rc7DZMLLrhgak/NixGh8MyU9BEz9u2ckdhvecWu6iwVgFUGSExw6fLs2bBK5EYDcQFwEKGjGXMBsJoKToZcAfB8HAuA1wzL54Fo4V8AvPYMEauo/NgBcCuDJeYYBVzkoFbHUdoeDahqv/1K1T+35l99SWe7tHJUmW604vP1f+ZnfoZcW+UNHrAXhVhVf/Z7+9vffipSv8YUMeeIIbc+Z+zPjOkM2eLZmK8/+7Xnff13fj/xiU9M/bezXyt/xzve0eDt9iqvf/3rZ5UpT/r53poniDG3blF7e2gLNWK89DSGmqdUe0hfVo9/x/qoHQDy5xnx4J8DjgKoNfAKgNceNT8UALcnw5NUswD4c9NwFgBrZ8NR/qVLV0Q8CDAKgOd3HWgLnvx5BgBfcMEFszdhta7YCLizl6taz3op4GiF2lseLTjUr5b4lR4xYhrwKGBoxWflT37yk08S7h2bvhhA2/h7Rtx6VuzrRUw4uj0d/R4xY9vhsdvP119//TQGdvbr3/Vsz/kaA7avHe2a+VqgvOY1r0kxYDrb9fmlVT4681Xz36iJQHmEmGvrFnNkP+mLmLL3m+XrCIf8myEJmCM/rAqANw8lBTJNnGhA1ReF+JUtAWkUWFSPJlAB8KhUldNTALzegi4Anu+gRQtyOlvORZ8uTfmjAHjuyzMWThdeeOHG7wETo82Wq2e70dD3AmKrXmLEKrM3x9PnDmkFR4DqA149E44m0lOe8hR9NpbkzjxgAG1nWfT8cPaMmN68pTJhu3xlDNj+2os47NazvfnK3nhlDPgv//Ivd+bTTQ2df/75TQx4qSM79WyY8hZtXatOp3xEO3QRcaD2KU/21o/wivIr+cPbtSoAnp/BZIG6AJhCvcqX8EAB8BJePVNnAfB2PxPgFABvfr74aIH0xje+ceMT9bSCi8qPvnN4y3NoXo4YIK3cestp6/iMFUrQD3+pys4E/MpJZb7RVg0FsDoBsnI2Tj/3cz+3m0xXrQzxwGMe85iZHjrjHcWMfTtmhDHgiAlfd911k6id/dqt5z/7sz8b4o9eJeedd96kojUfRvmK8lCUR4iZ0Vb0KOZLfqWdtyjftTLiyJ5epuzHz787Pdo5jJiy/31VALx2iTohogEpAKYpWeW78EAB8FgvFwC3+bMAeO038sMRAKtbqR6AohVZdHuMVj67PutVV7ZRPw14ialGlycifxBjjVaKdCkiCojocpjJ/8Iv/ELbTKxaB+UBD9Dqc8bqG7eMCVs8EQO2M2E7C7az37e//e0H4beXvvSlKQZM+YQYsc8TlF+pvYjxUp6NnJ+tRwBEeLA0s80GmXqXKcrfIQMuAN7MhGkCFABnQ7jk9+mBAuCc9wuA5/4qAJ5/xSoimjIAX3TRRbPngAmIVQasrnxoQJcqp5UjnbVE72qmFZ1fkaoDlZXLMuFI3vr51Kc+NZe5SvpYeuCxj33szG71jNjk7Fa2LUwjBuzPhO254Le97W0H5bcXv/jFMwZMeYHOYNW8451ARCDaYYvsobwatd87OJTHKH/2tt9a39vt/Rq9Gcz35ww9BcA55msOLQBuDeWqd8geKACej04B8Ob82BrDBcDzO8+riy++eOObsNQVl19J0a0w1b/rLgAAIABJREFUz6CjgaQVWlSerUeM35f3Am/UX/XMl/zby3x9/+zfv/zLv9w656reCfKAAbSt+KPnhT3z9YzX/m1M+V3vetdBeel3fud3tjJf/6YkNV9GO4gq4/Tt+B01laGr7bXKqXk+2in17Y66zTw6yGjcKR8XALvPdlEAFwCPDuHSd5w8UAC8PgMsANailgjRqQfgSy65pIsBR3vc0YplFHPNrszUs5fozGQ08NJWDDFiOmOnlZeVR7ef/e9Pe9rTtBlXUqfaA/aCEHvT1bvf/e5j6Y/nP//5WxkwMZ/e8ohB+rNedQdvdN6lfEoMONpZ9Hhy3ILH+kXvkj7auSgAXg/xrplvAfBxm1plr+KBAuDNt2SzgFwAvPH9UEoI7lUmDcBvetObNr4LmgLmpDJfH/i7Yr4qIPeeAauM18s9/elP32tgV+PlgV164LnPfW7XVjPlT7qd3Frf56+onSxDJcarMmxVLhprypO7jJFtbXm/R7ekVwXA8xVrAfB6PVYAfChTuezYhwcKgDd/p5iYuR8rAm5aCHh9Jw6AL7300hQDprNH1aF0OD+63PTZu6rNTg80Vj6K+VLA0Fkv7TTQeKiMNzoT9vWf9axn7SMfVpvlgZ164Fd+5Vem9qItxYihRpeziJnSEViWERPwqeWqnArMpI/0qJe2dhosWxrDcSsA/sLkPhvYAuC5PwqAD2Uqlx279EAB8PadQQLK1nKqd2IBmJCamNbSzJdWTuptwIj50lYHTf6lmG6WAUdnxL1M2PRaYiJ/VHl54Dh74BnPeMZG89XHj/xXc9R6ah7LymXPnAkII0av/p7V7+Wjp2zU54Vph3V07Ib4agy4AHjucnUgPUBm/z16C7oAePTUKX2n0QMFwOtRV4kPLQh6AffEAvBll102ew44+73DXuZLKxE1AKKVl68fne0S4NKKy9rJAqrKcFW57PO9dPZr7dobi5797GefxnxcfT5lHogA2M9DAp4s841uz6rMks6Ss2fUal6ldrPlKmD7sKQ8HoUx4dDo8D/yRwHw2rU0cAXAN09+KgAePRVL3yF6oAB48y3o3q1stf6pAeA3v/nNG9+EZYDjPzTvJwutHFrLo3q04owGTj3DVldU2TPfiMFmmW0k33vGG9W38be/z3ve8w4xX5ZN5YGhHnjmM5+5UV/rQp2O+LLlnskSYGX1q/LEkEfpof75vNgaDIRXo/WuCoC3v3GFmG808FSPtqqjs9wC4NYpUPXKA7oHCoC1N3oVAGsxFRLKt7zlLRMC2ddJVIZLK4XW8izzjQLAfjdml10hEYCqwEvMuxWIvd5eBuzPgo3xml7792/+5m9qEVdS5YFj6AH/nHsr483mG5/H1LNjqjcKIKOzaZXhtspRfvd6abzUkCT8UvVEzP3o9wLgza4sAF6f+RYAZ6dayR9nDxQAa8xXXSC0Am/2qDG6BNsaizsDYP8iDkLs3nLqWOT4qN3oUD/LfEcDrl8BZ5luVH/ULWevx/zlAdf/+wUveEFrTFe98sDBe4De9EYMq7c8Ys69QNZaPwLa7O9R+3SWTXZHDJnGgQKRcGpU/VUB8NqVBcDrN2AVANPUqvKT7IEC4DkDzgJtlhkXAAfvgo4mGa0MWsuzZ7/EfNUV0GjgJaZLzDa6fBX93nv26wHXn/1GzPiFL3zhSc7D1bdT6gH/prfRecS7lfRTuddHjNHKVWD1ctl/U3uqvSQXMeFoR6EV34bXi94F3dpQAfD8VrV6CSsLvKO2oguATynSVLc3eqAA+NaTXyLgLADePHEI90I89a+ibAVevwLJ6uk9+6WvF9FKKGKu0Yp1FNNVGXHEdCMg9mfgvr5/vjfaejb9Xv5FL3pRpfDywInzAL3rXGWk6s4a5SUqj9rxl5LoFrMBqwqwkRzV3xcjXipQW4H3CC8LgNeuKABenwH7LegC4KWmbuk9RA8UAGsMuAB4Hb0HA8CqIdmzXs+s/UqOmG/vSrSX6aoMV92C7j3zjZ7v9We9dBnrJS95ySHmz7KpPNDlAf+qVZsvkVJixL35x+cPAz4iDFTumahnwMSISZ6YMF3WonKPA9bf6Ky4Kyg2VFbxjto9ugVNCnvLPZB6w9Qt6ALg+fd6s2fBBcA0Jar8NHugAHjNgAuAt88CwkN1Dq3sYwxUgRpsLSdGTLedsytTWhmq5cSMey9fZZluxKAJcKNbz1TvZS97GYVMlZcHjp0HnvOc50w2R8y1lRETE/bMVs1D3sHUTkR8PCM+66yzUkDs5SOGrV7uolvPajkRPdrBIFyjAKf6BcBf3Hxr2W/9+H8XABcA0+Sr8uPngQLgNQMuAF7HLgEoRTjVRwAmBWYAyRHTjfSoW860ksmuKFX5XqZLZ78qEzb/0dltdNZL9fzK/+UvfznFXpWXB46NBwx4e3fUbB5F+U7NF0QAeu2MmKHfelaBWJWjs+GIIauMN9oxjX4n3FADmPAv0lMAfItnVMCNmHCWERPwZs92C4DVqVJy5YEzPVAAvH4DVgFw2+w4eABWXzlGt5q9e7JnHirQEqCOAmJ6vpeA2JerZ7pWT30eOArLYsJtE7ZqHZYHnvvc584MUvMKyVEesbyYZbytZ9RR/vQM0TNa+3d0tjv6VnT2FjQxZL/DGl369e9PWCpKj+ylS1gqspNcAfD6rNkz3wLgpUK89JYHdA8UAM/fAV0ArMdOi6QMwH7lQI35FV200lDPdnfFeCNGO4rp9m45t95yzj7fGy0I/DjY+NVtaJoRVX4cPPDrv/7rG830O0WeeUa3l4n5Rj4hRh3Vo9vZansRk1VvOfcy4dFnwIQ/Eb75eqp/iYiekUeJARcArz0QASABtAq86laz10ePCxUAH4f0Xzbu2wMFwOsRKABe++HgAXjUreboVmAr81VXkK23EVVANfvVLWZVL91Wzt5y9vr8goIWYMWA9w0d1f4ID/jvXNt8vPHGG7cuwCmPRPOJbPZ5zJ9NRnku0ktnm+rZbutZcKTf74TS2S+V+3yVvRUdMeZoHMmvNM54C1ql6Kqcd0gB8Oaz4QiQC4AppKu8PJD3QAHw5lvQ0a1oFbDVd0arW8+nDoBVpksAnAVelclGK5NRt53pLEdlrq2Xr/zWNH2vt3fL2acuOtMoBpxP9lXj8Dxg37f288fP289//vMbjfd54qabbmrqpHrWSEw3y5BVQI0YsFr/0J4Djhgy7fzRzobqf2TABcDbv+9bAFxvxGrKtFXpoDxQANzHgAuA5+F8sACsMlY/O4nRkl5isr5+K7C21qM3XkVbz6POfLPM1ybcS1/60oNKpGVMeaDFA+eff/5U7XOf+9z01+L7uuuu26jOzoajtogBZ88O6f0IlPCpXL293MuAo61m2lr2TDX7b89o6ayXyrM7tFGc7JwBE1BGhhYAb/5ebwFwS7qtOuWBuQcKgDd/BUk9A1YZcAHwPO4WA+BoBbH0patRTHcUI87eglbPcKOzKvWxpHBFtlpvRanlxYALyo6zBy6//PLJ/Kuuumr6++53v3v6e/XVV09/DYCuv/76WTeNAVueM8arPr4SMSj1tnMrA4vqWT+jdzr78uj2cvYzhtlb0CrzjRgvMVsqVwmiOicKgG/5GhI9TjB6a5luOXuApctXpq8AWA39kisP3OpWBcDrKCgAXvvh4ADYryT8pI0Mzt56Nr0nfas5Al4C2N6tZjoDotvOUbmtmP/wD/+w8nl54Nh64P3vf/9k+3ve857pr50F+1vPxnyjM16bxypDpbPdKC+2/u7rRVvHxITpNjOdKY967EjFn4gRR/iWvXysjvcZ+Nn7JizVAa1bz2rHVAbrA7CV2Y6uVwB8bHN3GX4CPFAAPD8DLgDefBQXAbOKU2cA8KWXXjo9Z9PKgAiAiXmphhMzVgGYzohHAyttNWeBN9pqplvS2RWduvNhK91iwCcAhU5hF2wL2pjue9/73skLn/70p6e/dvZ7ww03TP+Obj/Treco76hnvq2Ml/KvenlKfRe0qk9lwOqZbyTXy3zVvEn4FE2tVQFw7k1UowCaADPaci4APoUoUV1ezAMFwLnnf9U3W43agj41AKwynjMo9C23ZolBj1rBHTem6+3NAq/Vp3qeSVs9Ghd1hefjw3/1qhjwYhhRihf0gAHw3//938+Y77XXXjtjvDafIgacPfulN16pO4OtedXq0WNG0VZ0xGAJeKPnfUc9BxwxXrpcReWEjzQOUfkRA6YGKFFToicD1YArAL55ciXdki4AXjBrl+oT44EC4M1nv5bPC4DnoU44R1v+vvwMAM4Csd8iiGZmFmAjwPZ66Dlbr2fUFnJWj/p8r2e8BLTR88DZcSR5K7cJ6ce5GPCJwaRT0ZErrrhi6qed7drZ72c+85npd3sDlp0N+68imZM8k1Xz3L4ZsHpWGz3/S1vRxITp7lBkX4Q3+z4DVvHKT64C4OA54CzAknwB8KnI69XJY+KBAmDt7LcAuO82NDHiEIAjRkQrF2pQXSF6uWilmb3VvCtGTM/t9pb7M98zVlbBG63oKCHKn35F6uPjxS9+8TFJvWVmeeBWtzIA/sAHPjC544Mf/OD0185+o+d/o7yUzXuHwoDVx42yb7iKGHDvpSpfPzo79vmJznipnHYIrb56G/roiNBuQVPiJUCODPB6C4DX73QuAC4YKA/szwMFwGtmVwC8jsFjD8Aq0HoG6v9Nz8VFW727YrbRCqcXUOnxokj/vpmvb7+Y8P5ApVpmDxjwGsO1N19FZ7+m0Z8BRwxWJRi7YsA+L0YMUgViOjumcs9YI6YaMWWV8VI7RChVxhtFnBoHw7agC4D7mG0BMCfPkigP9HqgAHjNfD1QFgCPYcIRwYx+X73pTW+afXGezgjpGrYKxBHTpT10uuyUZcJkB7WXZb50y5luPUcrKxq3KHFRPf+8L60cX/SiF/XmyKpfHljMAx/96Ecn3Xb2++///u/Tv9WzX5sv0ZuvVOZD74BW9aj59ujM8Za7IYfy/G+09XtozwUTI/blhGNH8gXAa+aaBe4skPoJpwJ39IINP/EISAuAF8vppfgYeaAAePPtZ2PAu37+twDYMWBiOOplqwjQIipOt5lbAZIYbPZMWQXOCHBbt5oPlfn6eCkGfIzQ6BSZasAbPfdLDNjnn9YzYGK+UX6k39Vy9YyW3v2s6oluT/u8Mfp2tPq8cGRHlvFGU4l2Ms7Ygi4Anu3I38oDdAHw9ufiCoBPEaodo64WAK8HSwXOAuC5v7I7iLQgOjoS8FvQBMDeEEJ4kvcAR0yXylsZb2THKMCNznaJEbcOfOuWdPSmK1VfAfAxQqVTZGrr1rN3UetXj7ye1lvQamKnvKFeutrV878qI6bbzcSks4xXfTwpwk06C04zYALUbIAUAK8Zd/RZQppI2XK6RFcAfIpQ6RR1tQB4zugKgOe3wVXiSfnTlyMAX3LJJVu/B0wNEiCTAVkAprNifzmKGHHEqFXmG13Gyl7Soq+peD+rjDQKrEifv/WcbacY8ClCtWPQVdp6tnc+29mwdWn0d38PhQFHt5/Vdzf3MmKV6RKTpXJqp5cJq3k1IqRHW9AFwGsXtZ71FgDPU0sB8DFApVNkYgHwfLALgOd3WOiyFgGtSlAj4rgyAFYp+CjGGzHP6Hdisq3l1t4oxktnulE70Vn6cWG+tqX1whe+8BSl9+rqoXtg1Naz9XPp538jxkR5l+odyuWr6EyVGG1reZYJqziY3RksAA6+elQAPH8usHXFVwB86FB0Ou0rAF6PewHw/MyXLldlyylvIgBHbzwiZqbeglbPekcx4Og7wV4/MV91izlivsSIj84Cgq8X0cDSFgiV+0tX2ZXdbW5zm8lE34/f+73fO50Zv3p9EB648sorJzvsbDd65/NSZ78RI+19DpiYbpSP6Yx36c8OEoMlpkr1qTzSr/7ug5oAOpoEfnyOtqALgDe/y7kAeL6C9oFVAHwQeFNGOA8UAM8dUgA8z2O0FZ4lPkR0ooVT+BgSrbSicvXWc8R0WxlwxHijs2E6i/Xl0e1qYtDUTnagSV4t733cKGLOt73tbScTfuu3fqtAoTywNw8YAL///e+fbPDvfLaEedIZsGeGnukSMKtb1/T936UZLgEqlUd5U2W62Z1Dw4UC4C/MmW+W8RYAz1eWBcB7w5xq+Es8UAC8mfEVAGtMWAVkIjwRMJ8BwOpZLjFjek6XmHPEWK2eynT9V44IKAl4s8/19n6/t3Vg1Xqtz/sS87X2iwEXHu7DA7T1rL7z2Wyn5/OzeXPXZ8CewfqPLkSAHDHfLCOOzmaXZsSknwBWZbSqnJ8LR36xV1FmA0mVp8tXHpALgOdD1TvA0cAXAO8DHqrNpT1QADx/l30BcNvtZzXvqnIhANtzwCqgEoOlcmLIBNh0puvL6QxWPeul28zUTpR4sgNIh/1R+egzX+vP2WefPeua/fvXfu3Xls61pb88cIYH/NbzBz/4wUnmmmuumf5mz35bGbDPg35HrvXpkii/Rr/TGe++bz/T2SzdbqbyiAmrvxNTjoBVzfdHt6ALgNdnwdFlqwLgszbGVAFwoeAheaAAeM6AC4DX0emB+mAA+OKLL55GTAVgkiOG61dqrYyXgJIYKX2v15f7jyXQmTCtcLPMN1qJ0e9W3sqAo3p22cr03+52t5v+9w53uMP09xnPeMYh5eWy5YR7gLae7Z3Pn//852cL7eidz+au7NePvJt9niAGS+WUV6zcA0724wvZs959ffc3AtKlATebv0P5AuD1ipEAuQB4nloKgE84oh2z7hUArwesAFg786XHi7LlRIRCAL7ooou6GHAv46X6vWe+dLs5ulVNt6bVW85RHhu1gqKBzzJf02cv2PD2E/De7W53m6o8/OEPn/4+8IEPPGapvMw9jh7Y9dYzMVVfPuoMOMuAaQvaM+NRzPek3H5W83Tr3ZxVAfD87Je2lgmY1eSlDiwBLJUXAKsjUnLH2QMFwJsZcAFw7ru/xHyjfNsMwG984xubGHDEXP3Kr/eMN7rVTMxYvd0cbT1H9aOtaL/1M4r5EsBGA28TLwv0HrCNCZueiAHf+c53nkx9xCMeMf21f9/3vvc9znm9bD9wD7RuPdvZbsQo6fZzlgGbvOmN3KoyXBoWlclGzwW31qdbybtixj5v0m1rFViz+RSBuQB48+3nAuB1SBYAU6qr8n16oAB4s/dbAdQv3FUG3Qq8BIyteo8NAF944YUbGbDKcJdmvBHTpa1iOvv1elsvWanMt5XJUj0rj7aaqb6v5/9t/bPHjezfduv5jne849TEV33VV01/v+M7vmP6e7/73W+febnaPiUeMAD+wAc+MPXY3vnc+9wvMVx6GiRy/64Z8K5uP7cCZWu9CGB3ffs5y4h9XKwKgNe3oAuA16FRAHxKkOuEdLMAeDsDLgBe+4eAOSIqdCbcDcAXXHBBigHTrWVixMRorT6985nOeOmxImLQ9BzxGSsZ+J4vMVE8K3D6o89HeruIGdNzvn687Tlf88+d7nSnqcmv/MqvnP4++MEPnv7e/e53n/7WGfAJQboD64a69ey/drT02W/EjJd+B7QfHnXrmLac/VZ2BOhLbSUTQ25lwlE9FYhH5fNVAfDm7wAXAK8/K1gAfGDIU+ZMHigA3h4IBcBjbz9nma5KqFZveMMbmhgwMWFiutn6SzNes8ffflRXruRwWjH5cpXhWr2sfPScr+nzt53td2PA9m87A7aV8b3vfe8ZEz7nnHNmmaIYcSHoCA9EW882j1vffEW3n1tvKat5pFV/lD8IiKM3WLXWI8Y6+hZ0lP9oyzm7tUzy2fx+JF8APL8FXQC8Do0C4BEwUTqW8kAB8GbPqrefI4Btrd8KvL1b18cegF//+tdvZcBZpmoOIQZscupZL91qjhgynfVSeTaBREw4y1BH6TH7PeMlxu4/shBNMGO4Vm5M2N6Ida973Wsy4Wu+5mumv6bX5M8999ysi0v+FHtA3Xq2dz77fBS9+9nfTm695bzvM+DozNbPz0NhvgTcnln2MuiIqRLDpfJmBlwAPH8XtAfybK4bBZyj9BQAZ0ew5A/ZAwXA868d+bEqAN78LmgC0N7yZgB+3eteN2PAxHhVhusZMNVT38msMmHfPr1CMmpfdWyW4UZJzk8gkssmS7+1rAaet8vXs+eCzR47Kza5u971rlOR/duYsd2a9v0oZpwd2dMhv6+tZ5+/Im/7/Lmrd0CbPerZbe8bsHw7KlMlxkvl1A4xXJVBU96nvBktjM74vQB4fgs6WjjQlm0B8PpzhAXApwMI99XLAuDtni8AXvsne7ZMwE2ASvgQla9e+9rXphiwerZrBtMZr2e09G96vpfe7dx65jsKYP1AR3ppQGmFRgGlBii1E13W8ozY/O7PjNWz4vvc5z77yvnV7gF4gLaer7322slKO+P1TPS0nf2qQOx3ttR6/vlhzyyJqRLTpfJIv/p7lNd8PlaZbgiw8H6IAuAvzBlwlGsKgNdnK/6/AuADQKdTYEIBcO7sVwXSAuB5Xts5AL/61a+ejWz27DYrT2e9SzPg6La0yjizua71c4Bkj7riilaS/mwq0kfPC/uVZATIJudvV/uzYmPEJm9nxV//9V+/0fXFjLMReTzlT+vWs40WPR+sAunos19iqtnyLHNWGS8xWbVczbu0c3hUXgC8Xn8Q4LWmrQLguecKgFsj6XTXKwAew4ALgNfzSAVcAngCWsKV1ate9aqtDDg68/XpQD3rJYZL5eoZML05i1aUUbojh1o9egdz70rK+tcaSBQ4UXm2X1lGbO36N2hFZ8X+rLkY8ckC6n1vPasMdKnbz2r76pbzcXn+t/WOCtWL8lo2j5qe7js8BcC5hFUAfNZWh3n/FADn4quk5x4oAF77gwhDAfD2dz9nAZbkhwHw+eefn2LAfkVGt6IjRktMN/u8L308ofc5X58YCYiJKS7FYHuZdZb5Uz+zgGyM1ieciBGbvf6s2Ldr76gugDteHjAAfv/73z8Z/sEPfnAGSPbOZ//Vo+jWs/We3vmsMk8vl33uV20nC8B+q9l/xcifGatnyBGD9swye/ZL8qQ/KifGq+ZLFZB9PyifrgqA1y4iQC0A3nwLugD4eAHacbO2ALiNARcAz/OVujVNgB2V0wIgwo/VK1/5yqHvgibGm2W+xITpuV5ivllgpQGgclpJqeV+pe3bpev0S/U7C8hmB21Ve2bsGbH5zd64ZYz4QQ960NSEPysuRnzYUKxuPft3PluvdsWA933228pc6TvAtKXdy1ipflSeZcIEjGq+VfMl6TvDngLguWtVJkxyo7Y2ogEtAJ5/5rAA+LABNWtdAbDGfAuAl/3ur5rHVeZ8BgC/4hWv2HgGbILqGW8r8yVGnH1umM6CKRG0Amsr8/Xt0VlPNiB8f1sZqroC9HLqc8S+XpYRW/3orNj8Fj1XXIyYZsZuy4/71rPPn5H3aL5TuQfg6DGj6PdWJtzKYFuZbXS22vq7CpjZfEv4ccbOZAFwjgGTg9UBiwJHnXCtgFgAvP48on+xRwHwbgGWWisAbmPABcBrvxEwHwwAn3feeRMDNoOzjNfL0/PAWUZLzJoYr28vmvijgJUGNrr9nGXQrf2wersGYmt3aUbsmQfdnjbgte8V11kxQeOy5R/96EenBuxs9z3vec/078985jPTX3vnc/bsV/3er8pcvVz29jMttFU76KzWyj0w925d+3y1a0ZM7VMeHlVOeZvKVwXA8xVTFtiyjLcA+DZNGVzdki4AbnLvwVQqAJ4PBQF1AfDm7/+OAtjspao0ftgWdC/z7WXCKjPOnhnTylQFUFzJuK9eRBNnNNP2A076owDZFyNuZcYEyKZX/SqTvz1tfqyt6t1iswHwBz7wganhj33sYzMGfGjP/Zp31J02ldmq+SMCYIvfev43d0krm+dJnspXBcCbn2/tBWZ1AqkAqgKrKufbLQC+6+QSu6RVALxb4LXWCoDXnlDzRwHwfAczYqzEZKkcgZQ+OxiUH21Bj2bAdHZL5cSI/cqT3hFNWzm0ZUFbxzRAuypX2yHg737HKQQkbdXQgiCqHzFjm2D+YxAWF3VWvB/A9cBrb7R673vfO2O+dvZr46i++Wr02W+UR/bNgLOXr6Iz4Oj36AyZAG/U2bDPa9SuKk95n/Ik5VsiRAXAzsPRwBYAz1ealK4p8AqAyYOnq9yYbwFwGwMuAF72XdCtQEt5cPXyl79cehOWypDpFjQxX7WczoI9Q/b2e4cSQ0ZHioxvV3ooYAgArTxiwln91G9aaY5ixJEd0WcSfT/rTVvLLAwOdeuZ8gLdMfHeIn1U7uelegmLbj1TuX9eWGW2ERNV6xPTpXKV4dIWdPZIUs2PBcC3ACcFPgEIlcsDMgjI1fYI+AqA58y/ALgA+Es9UAC8+RYyAWMB8C15xTNglen2yo1iyr122GQ6qQA8CoiJEY9agKjMfNeMmM6Krf92iaueK9aA+tC3nunMV80fqpyah1TGOur53yxgqvJZhhzJq7+PYsSUV+V8WAC8dqUa+CpAtMrJAycyZQqUrJ37vpxl9hYAawB36FIFwPMRUvNQAfCyZ760JU15Vc7jL3vZy4aeAauMVGXApM8cQV89ivT4lSlNgCxgtcrLA3hgQEyB6f2h9pPqtQKytW9v6CJ7Rp8VW79O66sw/dmvvYLys5/97OSafT/3O4oBq3mF5FTgjb7beyjvfvYMWWXCJEcMl4A1e9ablT/D/gLgOQOmCdAKqAQg2fIs0I2W39fZcNSPAuBD57qb7SsAbmPA6uWrCHCzQK5uKbfKEbCqZ8rHHoA9ABED3Xd5xGCjW8/q75EfdgXAWcAk5tYK8Gq93q3pbH9V+Sww9zLiOivWFgJXXHHFJGjvdB793C8tpFvLs5eufH6KvEP2+HiP3vFMv2eBN/queCvQUr1eII7qEzBTPiHmrOZJZMAFwOuvMxYAb04VEdAXAK/9VQDJR0ZbAAAXkUlEQVRcALzJAwSwVF4A3HbmS8BJ5SpwDwfgXQOxymQJGNWzXmpPLdfSTSylMtfRcrTio36RPdHKmfRmAzkrn2XE3k90VuzPiK3+He5wh5mp5j/1sSarfFLOio0B/9u//dvUNTv7ta8e2dmv/+rRjTfeuDWEbrrpJinECPB8uWe+Pj9EjVI7qh6T2/XWs9/C9vOBGG1rObUTlau/q8CaPeOlvHgG4Psz4OwW7agtaAI8sovqR4GuAnbUvjTbtwjRgGWBUtWX1ZsFugLguccKgOf+KACe+0MF6gLg+bv71ctcrYB77ACYgLAV8FTmG7Wf/T27A9AKxEsB5lJ6jwsQqwuMpRmx2dH6Dmp7rvhBD3rQpMrruc997tMaenupt9TZr3WGGDABXVR+aGe/dJarPv9LeugNWMRUWxkwXbpSmS5tMWfLKa9Q3l2cARcA5/IaDVgW8ChAIuuydqjt7IsJq/YVAOfitVe6ALiN+XqgJOAsAB7zGcK9MWACUiqnLWO1XGWuXs4nCtoqV9vJ6lETVhYAj6v8oQOyjVcrMPuvMUXjpDLi6Kw4etOW2X+ozLi2nscAsLoVnQXu6PnhpZisqndfjLcA+BbPE2AXAG+H+kMB7ALg9TgVANflq/8fB7Ql7oFHBd5De/63d6v61AAwMdtWppitp8pHwBsFdpbBqmfBWb9FcHkoQKlu4fb2I7plqe4ceLms/9T6rYzY7LHb05FfLc5ud7vbzUyix5pMmN5BvW9GbMzXPjf4j//4j5Ppduu59Xu/1v/RZ7+tt56JCKjlUVzSc770Bqzsm7BUhtoqpwJzAfAX18/HqsBIjJWATW2nAHh+K5CAKwtQWfkscBcArz1WAHzt5AeLNwNqi6fex4+IaY567EgFWLKnAHg/z/3SpSzKb5Qv8RIWAdoo4Bx1qzkL1Kp8623tSD89xuT9QQMZTVACYAqgqH7WntZ2Rr3Qo7V91a+tjNj0+7PiyO8qI7b6d7vb3ab/9Yw4ej753HPPVUOmS+7yyy+f6ttzvx/72Memfy/93C8B3a5vPasA7Z291NYzXeba1Zuw/Hz1jDoqV3/PykX5I3smTHloRe+CzgJWr3x2AaC25wNaZehZuQLguaezwF0APPdfAXDfizcKgG89BVQEtAXA6/mmAqsq5/EmrGcAnAU+lcGqctQ+lfe2owJn6w6Ayqi7aMaWQIr0ZgGSVnRkf9QefdxBDejW9qme2v6umbGPx3POOWdmqjFi+5GY8WhGbMzXv/PZvnZ0zTXXzBJg9OYr66fFD535RvkiWojb74d+9qsC5lKXsPz8bz37jepF+pf6nfJZ75Y06i8Ank9JuqRVALx9xUhAVgC83UPZrekC4O3+zDLgAuA1Y45ewFEAvPnODRGZkAG//OUv3/o9YGKeuyqPGKr6u2pnpE9lsATQrVvaBGwqQyM9FEij2qGVocqIs/ZG/e/VE9XfNSP28WuvwPT2+bPiBz7wgVNVv+Xdy4hHnf1mGfChAa/KyKP5FZ0B27hanEXAqd6OpueA9wXAxERbz4wpD1G7VJ/KVwXA89vdBcDL3qpWAbwAeO2pLCMuAF57oAB4fou4AHjzO6QRIFfb61F9Kj8CYJUhRoHdewabnTAqk2ztFzFZFaiXkiMmqwLdaEa4FJM8boBME29XzDi6/ezPiu2rTDZ+dlZszNjrue9977sxdIzxWuHVV189/e/73ve+6a+d/frnfked/WbzSO+Ws8psyS6vxzO6fd2Czp7V9p4JE8OOyqP5RsyY6ql5lPIebkG3AlVrPQJs3/FWQBxtH9mhLgx65QqAN3uAJoLqt6X1FADPn/stAF5Hpt9qz166yl6+Iv0FwPOMEQKpY8oycJ933nmzPVgCxlEMOAJG66AKUBHDzAJvb79bL29F9pM+deWtBkIETL1AtFT948qIoxV3LyCbXtqyVr9XHN2ejs6Krf1PfepT0//auP/Xf/3X9O+rrrpq+mu3nq+//vrp3wS83l90+5mYpi/vZcDUXnaeegCms1+1nICWzn6J2fpxIvlWYI/aieZVdIZLZ7tZoKU8F+orAF6vPwqAl2GUFJjESKP6BcCbPVcAvPlORwSEBcDzW8/RJS4C1ALg7XdnQgB+xSteId2CppUcARgxUht42uJVGS/ZQwyb7KXyiMES46VysltdkbcCY2u9aIVKAOzLDwWQR/Un6r/1s5cZEyBb+/RxCLPnLne5y1TFmOg97nGP6d8333zz9NcD2ic+8Ynpd+vHddddN/3bmK9/5aTp9XFs+iN/UdwfN+brGavKYKmeqqf1DVi9QEz1o/JoPqpMl+RovmcZ85G+AuDN77gmgKXyAuDNqXIpAN81I6YJmV1YRAuNAuC1ZwqA1wyLLmMVAOduO3tmT/M6C7SU71YGwD4BqGe9BESR3ojxkr5RDNm3sxRjjtrJnvGOAvQo0bcCBgVYpLe1XtZ+AuZRdmTtavW31fNfV8rqI2YcMWJ7rtiYrv3bM2CLV/O/3Xo25mvy5n/62IIHYGK8UR7p3XKO9Eb+z9rpAUE946Uz3NbHkDwg0VY0nblSfWovKo+Ak5gt2avO6ywwH9lbAJw7A1aBOlp4EPDSAkPdgiY7aaWnJvRWAGutp04IkysA3jySBcBzv6hAWQA8f744AlQC0tZ6Jw6AX/nKV269Ba0GnMqYfeJV6xGgqMC0K+abtZeAWWXSJEfj2QqMrfVGLQRUPacVkC2+onEiQLb69qYs+7fVi86A/ULIznxtHOzMN7rdHG09E2BSuTFhkosW0rRAVfV6OZUBEzOmrWiVERND7GW0WSAuAA4iTwXSAuC1Awlw1QVFVq4AeH3rM/qvdyGxa73WHm1JFwDPR6YAePM7nyNgXorRnnoAPv/887sYMK30aOJHgEAMcjSTpfYI6FrtIcZK7Wa3rCN90Ti0AlJrPZXJEgPJ6jltzDhiXt6vBOxWbkzVM2TTZ7ef/WMuVs8YsI+bUWe/ZsehAq+PV2K4anmWCUePIbUCcCuDVplu6xlvlB+y+ijPUB5cFQAvcwasAnoB8GYopcAtANY8EAFoAfD254W9d4lo0M6Sqs8DprpVrL4Bi/QXAOduUXcD8Kte9aqNzwGrARMFZpRA1a1qArDIPqrXyihVhqu2T8w/2qJWAZvksuW9gLjv+jRRIjiLmHFvfwg+l9ZvwKwCi9nrz4qNUZo++3d029hvORrzNXnfb3rzlZqnlma+owA4AtIIiO0xtejsOAJcAuLs1vDos+BDYcBkB+UVmserAuC1CwmYC4BzX0nyiZECcVeAlLWjAHg+MgXA2yNVXdBEcgXAmxkobWVHQJjdUo7yg19gqPmN8s0RAEdhRQGlbmXRCjHLHEfpozNUFXhVuWw/yb6IKWfrqYyYgJLKKSCpPq041fq9evYFzL12R/5pfeGHPwP2zDrKH/7M1zNgevHG0syX8ovavioXMVgVkKOtY3Vrmp4jJgAkBpytT8wzAsRewKX6ZJcKzEd6jAEXAK89QExYBVACwGiCZ/UXAGchdy7fuiAoAF77sQB4njcoGunIrnXLuAB47XkC0N7y4QD86le/euNtBGK+HkDozVa0olSBh/TQijMLjFl5b1+2fqsfWs+MI3tVYKeEQ+WtAJhdaZIdo/Tt6za1TwzZ/kbyxIwtTkzOn7XalrXJ+Tde2fh7BhydIdP89uVZJt2bXyI/Uj71wNsKxNmzYGLI+zoLJqA7MQy4AHj7LegsgBYA51J/AXDOXyQ9yp/WTgHwdo8TsKqAXgA8f8PWqQHg17zmNdJzwNHKU2W+FIitzK91xZkF1n3Jq4Ae+ZeYrLrlTnoIGNTyUQAySs8oZknMeFQ75OdRfvHAbPFh/VRvHZs9/t3QnhkfGvOlfJa1N2K86hmwynyz7WSBkM6CI33EaOkMOZo/vVvO0Xwhvep8XhUAr12lApEKiKMAW22vAHie8kYBjTqRCPgKgDd7qAB47ZcsMNKlKdpaVl/kUQC8+emPYQD82te+VnoOOEpE6hYMrRh7GbBqB8kdKhCP8g8xWbX/pIcASS0fBaSj9Hi7R+lVAXrUgoD8T/2y8fe3no35GkOO4inyo2fC6lmw6Vv6zJfyWJb5mjwxXRWgaSub9Hg7iLFSucpsVTl1QUByrYxZnX9Rf86I+wLguUtUAFKZ6SgmXABMkLG9nAClVfsovQXAa6ZRALz5u78EnKO2oAuAt78JazEApgTkEw0xSXUlGOnpBZxRK9WlAXSUfnVBEMmpjJbkaAFDcUblowBPnUhkT1Q+ys5DA2byhz8D9kw4qu+fC/ZnwKo/l2bAat5T5TwDjraWacs4y3xVQCeGS+Uqs1XliNmqZ8UHx4BpYhUArz1EADMKULN6CoApgjeXq4k9q32U3gLgL0yuV/1ZALz+ylEWkCPgJ4ClchVYVbkTB8Cve93rtr6VvBd4iYkS043qUz1agY4qzwIlyVM5+WNUfWK6o5h0Fti8vJqY1XZG61vK3iwwRyt+1S+qnH8qwp8JEwOOEiy9W/pQgJfyXRQPKiMlhqxuRatnzirAqnLEUKn8uAEwzbtVAfDmlKACdBbwSJ7KC4Dn4zUaMEfrKwBeM1h6nth/dMEDSQGwdjZcAKy9SzoCxmgBkJ3Hsp7Xv/71G58Dzj7fG61s1TNeAhavv5UBq8Da25/erWq1fwTYVE5+JyZM+ql+ljEQE1sKQJfSm53Y1H8rzzLk3v75OPBnwX6cPSBHDNbsonmbvS1N+ijfZPNDJB9tFfuvHHnGGn0FqXXrOapHjFQtV7eYSd9xZcAh4BcAz6cGTUx1QVEAPH/DWATEBcDLMPoC4O1LFZrnBcDam6kIMD3wqvIq0BLTjIB/1wwYAbh3BawmUhXAiJnRBCEG2Wtvtr7KFKN+qYCebYfkfT+J0ZI+qq/6VWWCo+J6Kaaq9iOawNn6rQw5246Ns99Ji+KY/Gv1ovFUGfChAK8fT7rlTOXq1nN01nxcGLAKuATg+wLgM+wyBjwqUVGAFwCvh4AYIQHf6PJIH7VD/SDApYVFNvFTIu/VNxoIs/aMmqdZhpy1swBY81gEiHRJypcXAK/9TQyb8gMBvDr/aZ4ejdcFF1yw9RY0hREBrq/fy0xb66v1POBE/ad+qwsNYowqAJJcFmCz8qOBODteFKc08bL1I3maeKPaIT2tdowC5l4A9onO+uO/mmRyEQOmedo6vymv0fhYuXqrWWXA2VdQEvMlQFPLR50BE0CSPZQHSH8B8Bfn64VeoGudgDSxe+0iYCbmqJZngZaAXm1XZcbqgkhNeOoEyupbWm/WngLgtcdonrbO/wLg3BlxAfA8Yo78ceGFF25lwK0BrAaoynRaAS1K4Kq+1n701msFMgLI1vIsUBcj3pzaW4ExC8BZedUuYsjRfI7OgslOb1eWAZN+dZ6OAmqvh5gtlfduPdNWNjFKtTwLwKQ3WvBSO97/xHijeUHzRS1fFQDPh4QWHLsC7gLgzbeojxsjpgmfBYil5ClhWLsFwLl8QeNFAEvlBcDac78qkBIgR8CfnecyA6YAal0ZqkCmyvUy3Ww7KhCoelXg39XWNLWzb0ZM7bfGbXYiHbd2RtlreqLvAvvxaWXAPuH5s15/NtzaP5p/o5iyCph0CYv0+LNd0ufLvd+Jkarlo+RODQNeKqB7gWl0fVVfdiKqeikBFCOeM+IC4NaZObZeAbDmT5u/BJx0KSvaMqbfC4DbvuurMufswv0oDt74xjd23YJWAUkFGNKnAtpSjJiYb6991H/qF11uioCLGC+V99pF+lv7paXHvJS6ZZvXvLnGrttrtTvaovYARPMoaj9ivK1MmPKSOh/JXwTAEfCqTFYF9kifHzevT2WuEXMere/EMOAC4PVQRgAQTaxRQEsJQG2HAEoFuFaALgCmFNxXXgC89l8B8PavHXmApX974CcA7S33QNyq78QA8EUXXbSRARMwqOlEBRB1panqU+UIOHrtopV+r51kfwTMBLS9gN1qV+tWu1pPjdtWuX0B5b7ajfzkGZUfH38mnPV3dBua8haVZxfcZLdvTwVEYqoRo+zV3wqIKkM+FABWt5ZVOR8HNB+P/FAAnGPAWcAsAN783PYoxp5dYFDC7C2niderP6q/r3YLgLePaAHw/HnhAuD5Ts4qAuDWREErzH0BWLZddUt6dH977WxlniedEavj2Rr3VG/fALmv9n27EROmnSavJ7oNbXrUd0PTuNECOsuYs2e6Sz2GFNkRMWBixsWA55FA8w0ZsBqYNHHU8qWBrBfYsvVp4mb19coT4ywAbo14rR5NSE1Lu9S+2i8A3pyY6bZz6xa0+irKAuC2W9F+IdK6I3UEwBdffHHXLWgCzlYgaq2nApUqt7Qdu9KvAqx69qvKRe22MvXslnN24dEOcX019wWQrQkky/yi54Cjs2LyZnQGbH7sZcBqXlMJRnRm2wrEpK/1LJiYLDFhKq8t6LWHCoDdO6V3BYT7Av4C4N2+WYsAxJcXAK89ogJfAfDms1WVAZNcBKQEsFReADwYgLMr4Vaga63XC3i99fdlN7V76ICsMuyTyoh9IssC+qHJ05uwWm9FjwZidQGgMt8IkAgAe89+98WAiUFHzD0L+NH8IICneRXZn10w04J6GAMuAJ574LgAdgHwYTNiShSHBrBkTwHwnLEWAGtfU1KBuVWOgDUCUhVgo3lxBMCXXHLJXs+AianRivRQAG9fdo7qfxaQVYZKeqPy7O/Zs16Sp1vTvpwmJAFUa/m+2h1lr3orOmovOuv1Z8GRn2jeqv0kPZ6Z7evsl5gxMdgI6Ih5Rsy3tb0Tw4ALgNdD2QtkNAF79UcLlVF6CShbt3pJbxZoSV+rnWq9aBz2BYT7alcFJmIYBcDb32xFr6hUAVVl3K2AWAA8j3Sal8MYcDQRWwHppDDi1n70Amq2vgrsrYxRBTYvR3apDLy1fbUejTNNxFYgy9bbtx3mT3pDlvUreqe07/fNN988/URbhb23olvznGdq9FEElSlHwDsKkCOmSww4Gr+lGTCd3VI5MWpaSLaWr3oZcGtgtgL06HpZwDp0+ax9BHRZxqnKkxzZVQCcg+AC4C/kHCZKUz4qAF57oAB4HlBH/njTm9500GfAxDBoAmQB6bTIZ/3WCngEtKreSI8K1MTgVTuzTJ3y+L6BMVr5k91qeRRn6qUsmv9WTm/Gonjv7Q/V98xU3RJWt6Aj5kyMOPqMYcR0o98jhtn7laWsHVE8tzJgmh+084JxUQA8d1EB8NofETBmgUqVJ7kCYJrKfeVLLQQKgNfjUgA894N6ZlwAnJzX6kqT5FrLR9crQN4OyCqDJeY4qjxiTMSAs+2TPj9tKC6jabYUMCan9XBxYsDmL/UsmG5Dq0w66mjr+Jm+3rPfiKkS8903A6atZ7r0RcyVgFxlxKOZrjpvV70MuDXRUEC3lo+uVwBcAPylOwIEvNl4IWRTJzLpObTyAuD17ecIWLMv4mi9lLX0FnQB8PaZt7r00kubzoAJ6LIrTtK3VDlttar9yCbebH9G6Vf1tNq3FCMmvUtvUVP7BMxqHGWB8rgDtNlP85CYsHob2vy71K3oaPyyz/3SlnUEbOrZMgF2lnmqTJYAWd1ybpXbFdNV52UBsHsntApQKvMfpS+rp1e+AFh7UxYBLwFLFnC9vDrRe9tZqn4B8JjngGmrWS3PbumSPAGuWp+2ktUFw4kBYBWAlpLLAgTZkQUsYjSt9ql2qHKtdqrAQXZ4gIqYagRkJJ8tj/xhjChrL7Wv9mtpgFtKf6te80v0DmgfV8SAzQ5jwpSwd8WAozPa0UxVBVhqlwAxYp5ZBmx6vD2tzLYAOPi6EAFfNIFbAYwAJyonIMna2Wq/aocqR/5Q9ahyBEhUPhoA1fEuAG6F0rZ6BcAa81W3iguA59/3zQLyrpixny2ryy67LHUGTMBCCT8LZKo+sksFkFY9ZGerXtVuFWiydva2rwKuKhcxcxW4yU8RY1X1j5Jrg7X2Wrvayo7iybcfjfNZZ501dTLSo96GtvaWZsIEjOolLNrKJT1kR6RfZaStDNjb1dse7XzsCmjV+fT/ADVPRcPhLM7xAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="240" y="-180" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="167.6185356663551,167.6185356663551,167.6185356663551,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="19" y="10"><block s="receiveGo"></block><block s="show"></block><block s="doWarp"><script><custom-block s="Initialize Datatypes"></custom-block><custom-block s="let %upvar be %s"><l>map</l><custom-block s="map"></custom-block></custom-block><custom-block s="let %upvar be %s"><l>lights</l><block s="reportNewList"><list></list></block></custom-block><custom-block s="let %upvar be %s"><l>campos</l><custom-block s="vector x: %n y: %n z: %n"><l>2</l><l>3</l><l>-4</l></custom-block></custom-block><block s="doAddToList"><custom-block s="rounded cube %br $- size: %l %br $- position: %l %br $- rounding: %n"><custom-block s="vector x: %n y: %n z: %n"><l>1</l><l>1</l><l>1</l></custom-block><custom-block s="vector x: %n y: %n z: %n"><l>0</l><l>0</l><l>0</l></custom-block><l>.1</l></custom-block><block var="map"/></block><block s="doAddToList"><custom-block s="cube %br $- size: %l %br $- position: %l"><custom-block s="vector x: %n y: %n z: %n"><l>100</l><l>1</l><l>100</l></custom-block><custom-block s="vector x: %n y: %n z: %n"><l>0</l><l>-2</l><l>0</l></custom-block></custom-block><block var="map"/></block><block s="doAddToList"><custom-block s="point light %br $- color: %n %br $- position: %l %br $- range: %n"><custom-block s="color %clr"><color>255,255,255,1</color></custom-block><custom-block s="vector x: %n y: %n z: %n"><l>0</l><l>3</l><l>0</l></custom-block><l>50</l></custom-block><block var="lights"/></block><block s="clear"></block><custom-block s="render scene %br $- quality: %n %br $- camera position: %l %br $- camera rotation: %l %br $- on map: %obj %br $- with lights: %l %br $- trace mode: %mlt %br $- draw distance: %n units %br $- skybox: %n %br $- view scaling: %n %br $- shadows: %b soft %n"><l>50</l><block var="campos"/><custom-block s="rotation from position %l looking at %l"><block var="campos"/><custom-block s="vector x: %n y: %n z: %n"><l>0</l><l>0</l><l>0</l></custom-block></custom-block><block var="map"/><block var="lights"/><l>Quality</l><l>80</l><custom-block s="%n % amount of color %n"><l>25</l><custom-block s="color %clr"><color>255,255,255,1</color></custom-block></custom-block><l>1.3</l><l><bool>true</bool></l><l>0.4</l></custom-block></script></block><block s="hide"></block></script><script x="630" y="198.66666666666666"><custom-block s="color %clr"><color>255,255,255,1</color></custom-block></script></scripts></sprite></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="vector x: %&apos;x&apos; y: %&apos;y&apos; z: %&apos;z&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>x</l><l>y</l><l>z</l></list><l>return new Vector3(x, y, z);</l></block><list><block var="x"/><block var="y"/><block var="z"/></list></block></block></script></block-definition><block-definition s="vector: %&apos;a&apos; %&apos;op&apos; vector: %&apos;b&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%mlt" readonly="true">+<options>Addition (+)=+&#xD;Subtraction (-)=-&#xD;Multiplication (x)=x&#xD;Division (/)=/&#xD;Power (^)=^&#xD;Modulus (mod)=mod&#xD;Distance (|b-a|)=|b-a|&#xD;Direction ((b-a)/|b-a|)=(b-a)/|b-a|&#xD;Dot (᛫)=᛫</options></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>op</l><l>b</l></list><l>switch (op) {&#xD;    case "+":&#xD;        return a.add(b);&#xD;    case "-":&#xD;        return a.sub(b);&#xD;    case "x":&#xD;        return a.mul(b);&#xD;    case "/":&#xD;        return a.div(b);&#xD;    case "^":&#xD;        return a.pow(b);&#xD;    case "mod":&#xD;        return a.mod(b);&#xD;    case "|b-a|":&#xD;        return b.sub(a).length();&#xD;    case "(b-a)/|b-a|":&#xD;        return b.sub(a).normalized()&#xD;    case "᛫":&#xD;        return a.dot(b);&#xD;}</l></block><list><block var="a"/><block var="op"/><block var="b"/></list></block></block></script></block-definition><block-definition s="%&apos;op&apos; of vector %&apos;v&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">x<options>x&#xD;y&#xD;z&#xD;normalized&#xD;length&#xD;neg</options></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>op</l></list><l>switch (op) {&#xD;    case "x":&#xD;    case "y":&#xD;    case "z":&#xD;        return a[op];&#xD;    case "normalized":&#xD;    case "length":&#xD;        return a[op]();&#xD;    case "neg":&#xD;        return a.unm();&#xD;}</l></block><list><block var="v"/><block var="op"/></list></block></block></script></block-definition><block-definition s="vector: %&apos;a&apos; %&apos;op&apos; %&apos;b&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%mlt" readonly="true">+<options>Addition (+)=+&#xD;Subtraction (-)=-&#xD;Multiplication (x)=x&#xD;Division (/)=/&#xD;Power (^)=^&#xD;Modulus (mod)=mod&#xD;Distance (|b-a|)=|b-a|&#xD;Direction ((b-a)/|b-a|)=(b-a)/|b-a|&#xD;Dot (᛫)=᛫</options></input><input type="%n">0</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>op</l><l>b</l></list><l>switch (op) {&#xD;    case "+":&#xD;        return a.adds(b);&#xD;    case "-":&#xD;        return a.subs(b);&#xD;    case "x":&#xD;        return a.muls(b);&#xD;    case "/":&#xD;        return a.divs(b);&#xD;    case "^":&#xD;        return a.pows(b);&#xD;    case "mod":&#xD;        return a.mods(b);&#xD;    case "|b-a|":&#xD;        return a.subs(b).length();&#xD;    case "(b-a)/|b-a|":&#xD;        return a.subs(b).unm().normalized()&#xD;    case "᛫":&#xD;        return a.dots(b);&#xD;}</l></block><list><block var="a"/><block var="op"/><block var="b"/></list></block></block></script></block-definition><block-definition s="set %&apos;item&apos; of vector %&apos;v&apos; to %&apos;val&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">x<options>x&#xD;y&#xD;z</options></input><input type="%l"></input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>v</l><l>op</l><l>r</l></list><l>v[op] = r;</l></block><list><block var="v"/><block var="item"/><block var="val"/></list></block></script></block-definition><block-definition s="change %&apos;item&apos; of vector %&apos;v&apos; by %&apos;val&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">x<options>x&#xD;y&#xD;z</options></input><input type="%l"></input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>v</l><l>op</l><l>r</l></list><l>v[op] += r;</l></block><list><block var="v"/><block var="item"/><block var="val"/></list></block></script></block-definition><block-definition s="combine vector %&apos;vec&apos; using %&apos;map&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="evaluate"><block var="map"/><list><block s="evaluate"><block var="map"/><list><custom-block s="%mlt of vector %l"><l>x</l><block var="vec"/></custom-block><custom-block s="%mlt of vector %l"><l>y</l><block var="vec"/></custom-block></list></block><custom-block s="%mlt of vector %l"><l>z</l><block var="vec"/></custom-block></list></block></block></script></block-definition><block-definition s="map %&apos;map&apos; over vector %&apos;vec&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="vector x: %n y: %n z: %n"><block s="evaluate"><block var="map"/><list><custom-block s="%mlt of vector %l"><l>x</l><block var="vec"/></custom-block></list></block><block s="evaluate"><block var="map"/><list><custom-block s="%mlt of vector %l"><l>y</l><block var="vec"/></custom-block></list></block><block s="evaluate"><block var="map"/><list><custom-block s="%mlt of vector %l"><l>z</l><block var="vec"/></custom-block></list></block></custom-block></block></script></block-definition><block-definition s="for each %&apos;key&apos; %&apos;value&apos; pairs in %&apos;list&apos; %&apos;do&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="list"/></block><script><block s="doSetVar"><l>key</l><block var="i"/></block><block s="doSetVar"><l>value</l><block s="reportListItem"><block var="i"/><block var="list"/></block></block><block s="doRun"><block var="do"/><list></list></block></script></block></script></block-definition><block-definition s="null" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return null;</l></block><list></list></block></block></script></block-definition><block-definition s="for each %&apos;slot&apos; %&apos;value&apos; in vector %&apos;vec&apos; %&apos;do&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doSetVar"><l>slot</l><l>x</l></block><block s="doSetVar"><l>value</l><custom-block s="%mlt of vector %l"><block var="slot"/><block var="vec"/></custom-block></block><block s="doRun"><block var="do"/><list></list></block><block s="doSetVar"><l>slot</l><l>y</l></block><block s="doSetVar"><l>value</l><custom-block s="%mlt of vector %l"><block var="slot"/><block var="vec"/></custom-block></block><block s="doRun"><block var="do"/><list></list></block><block s="doSetVar"><l>slot</l><l>z</l></block><block s="doSetVar"><l>value</l><custom-block s="%mlt of vector %l"><block var="slot"/><block var="vec"/></custom-block></block><block s="doRun"><block var="do"/><list></list></block></script></block-definition><block-definition s="iterate over %&apos;func&apos; with %&apos;result&apos; %&apos;do&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%upvar"></input><input type="%ca"></input></inputs><script><block s="doSetVar"><l>result</l><block s="evaluate"><block var="func"/><list></list></block></block><block s="doUntil"><block s="reportIsIdentical"><block var="result"/><custom-block s="null"></custom-block></block><script><block s="doRun"><block var="do"/><list></list></block><block s="doSetVar"><l>result</l><block s="evaluate"><block var="func"/><list><block var="result"/></list></block></block></script></block></script></block-definition><block-definition s="aspect ratio" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block></block></block></script></block-definition><block-definition s="aspect ratio string" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="let %upvar be %s"><l>gcd</l><custom-block s="gcd %n %n"><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block></custom-block></custom-block><block s="doReport"><block s="reportJoinWords"><list><block s="reportQuotient"><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block><block var="gcd"/></block><l>:</l><block s="reportQuotient"><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block><block var="gcd"/></block></list></block></block></script></block-definition><block-definition s="gcd %&apos;a&apos; %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doFor"><l>i</l><block s="reportIfElse"><block s="reportLessThan"><block var="a"/><block var="b"/></block><block var="a"/><block var="b"/></block><l>2</l><script><block s="doIf"><block s="reportEquals"><block s="reportSum"><block s="reportModulus"><block var="a"/><block var="i"/></block><block s="reportModulus"><block var="b"/><block var="i"/></block></block><l>0</l></block><script><block s="doReport"><block var="i"/></block></script></block></script></block><block s="doReport"><l>1</l></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%s">0</input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;low&apos; to %&apos;high&apos; by %&apos;step&apos; %&apos;do&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%n">1</input><input type="%ca"></input></inputs><script><block s="doSetVar"><l>i</l><block var="low"/></block><block s="doRepeat"><block s="reportSum"><block s="reportQuotient"><block s="reportDifference"><block var="high"/><block var="low"/></block><block var="step"/></block><l>1</l></block><script><block s="doRun"><block var="do"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block></script></block-definition><block-definition s="lerp from: %&apos;from&apos; to: %&apos;to&apos; by %&apos;percent&apos; %" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">10</input><input type="%n">0</input></inputs><script><block s="doReport"><block s="reportSum"><block var="from"/><block s="reportProduct"><block s="reportDifference"><block var="to"/><block var="from"/></block><block s="reportQuotient"><block var="percent"/><l>100</l></block></block></block></block></script></block-definition><block-definition s="clamp %&apos;num&apos; between %&apos;low&apos; and %&apos;high&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">-1</input><input type="%n">1</input></inputs><script><block s="doIfElse"><block s="reportLessThan"><block var="num"/><block var="low"/></block><script><block s="doReport"><block var="low"/></block></script><script><block s="doIfElse"><block s="reportGreaterThan"><block var="num"/><block var="high"/></block><script><block s="doReport"><block var="high"/></block></script><script><block s="doReport"><block var="num"/></block></script></block></script></block></script></block-definition><block-definition s="color %&apos;clr&apos;" type="reporter" category="pen"><comment x="0" y="0" w="90" collapsed="false">Returns a color.</comment><header></header><code></code><translations></translations><inputs><input type="%clr"></input></inputs><script><block s="doReport"><block var="clr"/></block></script></block-definition><block-definition s="%&apos;item&apos; of color %&apos;col&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">red<options>redgreenbluealpha</options></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>sw</l><l>color</l></list><l>switch (sw) {    case "red":        return color.r;    case "green":        return color.g;    case "blue":        return color.b;    default:        return color.a;}</l></block><list><block var="item"/><block var="col"/></list></block></block></script></block-definition><block-definition s="color from red: %&apos;r&apos; green: %&apos;g&apos; blue: %&apos;b&apos; alpha: %&apos;a&apos;" type="reporter" category="pen"><comment x="0" y="0" w="154" collapsed="false">Creates a new color with RGB.</comment><header></header><code></code><translations></translations><inputs><input type="%n">255</input><input type="%n">255</input><input type="%n">255</input><input type="%n">1</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>r</l><l>g</l><l>b</l><l>a</l></list><l>return new Color(r, g, b, a);</l></block><list><block var="r"/><block var="g"/><block var="b"/><block var="a"/></list></block></block></script></block-definition><block-definition s="saturate %&apos;color&apos; to %&apos;percent&apos; %" type="reporter" category="pen"><comment x="0" y="0" w="265" collapsed="false">Saturates a color based on common luminance values.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n">100</input></inputs><script><block s="doDeclareVariables"><list><l>luminosity</l></list></block><block s="doSetVar"><l>luminosity</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><custom-block s="%mlt of color %n"><l>red</l><block var="color"/></custom-block><l>0.2989</l></block><block s="reportProduct"><custom-block s="%mlt of color %n"><l>green</l><block var="color"/></custom-block><l>0.5870</l></block></block><block s="reportProduct"><custom-block s="%mlt of color %n"><l>blue</l><block var="color"/></custom-block><l>0.1140</l></block></block></block><block s="doReport"><custom-block s="color from red: %n green: %n blue: %n alpha: %n"><custom-block s="clamp %n between %n and %n"><custom-block s="lerp from: %n to: %n by %n %"><block var="luminosity"/><custom-block s="%mlt of color %n"><l>red</l><block var="color"/></custom-block><block var="percent"/></custom-block><l>0</l><l>255</l></custom-block><custom-block s="clamp %n between %n and %n"><custom-block s="lerp from: %n to: %n by %n %"><block var="luminosity"/><custom-block s="%mlt of color %n"><l>green</l><block var="color"/></custom-block><block var="percent"/></custom-block><l>0</l><l>255</l></custom-block><custom-block s="clamp %n between %n and %n"><custom-block s="lerp from: %n to: %n by %n %"><block var="luminosity"/><custom-block s="%mlt of color %n"><l>blue</l><block var="color"/></custom-block><block var="percent"/></custom-block><l>0</l><l>255</l></custom-block><custom-block s="%mlt of color %n"><l>alpha</l><block var="color"/></custom-block></custom-block></block></script></block-definition><block-definition s="set pen color to %&apos;color&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>color</l></list><l>this.setColor(color);</l></block><list><block var="color"/></list></block></script></block-definition><block-definition s="pen color" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.color;</l></block><list></list></block></block></script></block-definition><block-definition s="draw pixel %&apos;size&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doWarp"><script><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><l><bool>true</bool></l></block><block s="down"></block><block s="forward"><block var="size"/></block><block s="up"></block><block s="forward"><block s="reportMonadic"><l><option>neg</option></l><block var="size"/></block></block></script></block></script></block-definition><block-definition s="minimum distance $nl $- from vector %&apos;vec&apos; $nl $- on map %&apos;map&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%obj"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vec</l><l>map</l></list><l>const args = new List([vec]);&#xD;var lowest = Infinity;&#xD;var temp;&#xD;for (item of map.contents) {&#xD;    temp = invoke(item, args);&#xD;    if (temp &lt; lowest)&#xD;        lowest = temp;&#xD;}&#xD;return lowest;</l></block><list><block var="vec"/><block var="map"/></list></block></block></script></block-definition><block-definition s="map" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="ray $nl $- from vector %&apos;v&apos; $nl $- in direction %&apos;d&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>pos</l><l>dir</l></list><l>return new Ray(pos, dir);</l></block><list><block var="v"/><block var="d"/></list></block></block></script></block-definition><block-definition s="march $nl $- ray %&apos;ray&apos; $nl $- for %&apos;dist&apos; units $nl $- on map %&apos;map&apos; $nl $nl mode %&apos;mode&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%n">1000</input><input type="%obj"></input><input type="%mlt" readonly="true">Normal<options>Fastest&#xD;Faster&#xD;Fast&#xD;Normal&#xD;Slow&#xD;Slower&#xD;Slowest</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ray</l><l>dist</l><l>map</l><l>mode</l><l>mindist</l></list><l>var MAX_STEP = 400;&#xD;var HIT_MIN = 0.06;&#xD;switch (mode) {&#xD;    case "Sonic":&#xD;        MAX_STEP = 50;&#xD;        HIT_MIN = 0.4;&#xD;        break;&#xD;    case "Fastest":&#xD;        MAX_STEP = 100;&#xD;        HIT_MIN = 0.2;&#xD;        break;&#xD;    case "Faster":&#xD;        MAX_STEP = 200;&#xD;        HIT_MIN = 0.1;&#xD;        break;&#xD;    case "Fast":&#xD;        MAX_STEP = 300;&#xD;        HIT_MIN = 0.08;&#xD;        break;&#xD;    case "Slow":&#xD;        MAX_STEP = 500;&#xD;        HIT_MIN = 0.06;&#xD;        break;&#xD;    case "Slower":&#xD;        MAX_STEP = 600;&#xD;        HIT_MIN = 0.05;&#xD;        break;&#xD;    case "Slowest":&#xD;        MAX_STEP = 800;&#xD;        HIT_MIN = 0.05;&#xD;        break;&#xD;    case "Quality":&#xD;        MAX_STEP = 1600;&#xD;        HIT_MIN = 0.02;&#xD;        break;&#xD;}&#xD;&#xD;const args = new List([ray.Origin, map]);&#xD;&#xD;var travelled = 0;&#xD;ray.Distance = 0;&#xD;ray.End = ray.Origin;&#xD;ray.Hit = false;&#xD;ray.Attenuation = Infinity;&#xD;for (var i = 0; i &lt; MAX_STEP; i++) {&#xD;    args.contents[0] = ray.End;&#xD;    travelled = invoke(mindist, args);&#xD;    if (travelled &lt; ray.Attenuation)&#xD;        ray.Attenuation = travelled;&#xD;    ray.Distance += travelled;&#xD;    ray.End = ray.Origin.add(&#xD;        ray.Direction.muls(ray.Distance)&#xD;    );&#xD;    if (travelled &lt;= HIT_MIN) {&#xD;        ray.Hit = true;&#xD;        break;&#xD;    }&#xD;    else if (ray.Distance &gt;= dist)&#xD;        break;&#xD;}</l></block><list><block var="ray"/><block var="dist"/><block var="map"/><block var="mode"/><block s="reifyReporter"><autolambda><custom-block s="minimum distance %br $- from vector %l %br $- on map %obj"><l/><l/></custom-block></autolambda><list></list></block></list></block></script></block-definition><block-definition s="normals at vector %&apos;vec&apos; on map %&apos;map&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%obj"></input></inputs><script><custom-block s="let %upvar be %s"><l>var</l><custom-block s="minimum distance %br $- from vector %l %br $- on map %obj"><block var="vec"/><block var="map"/></custom-block></custom-block><block s="doReport"><custom-block s="%mlt of vector %l"><l>normalized</l><custom-block s="vector: %l %mlt vector: %l"><custom-block s="vector x: %n y: %n z: %n"><block var="var"/><block var="var"/><block var="var"/></custom-block><l>-</l><custom-block s="vector x: %n y: %n z: %n"><custom-block s="minimum distance %br $- from vector %l %br $- on map %obj"><custom-block s="vector: %l %mlt vector: %l"><block var="vec"/><l>-</l><custom-block s="vector x: %n y: %n z: %n"><l>0.001</l><l>0</l><l>0</l></custom-block></custom-block><block var="map"/></custom-block><custom-block s="minimum distance %br $- from vector %l %br $- on map %obj"><custom-block s="vector: %l %mlt vector: %l"><block var="vec"/><l>-</l><custom-block s="vector x: %n y: %n z: %n"><l>0</l><l>0.001</l><l>0</l></custom-block></custom-block><block var="map"/></custom-block><custom-block s="minimum distance %br $- from vector %l %br $- on map %obj"><custom-block s="vector: %l %mlt vector: %l"><block var="vec"/><l>-</l><custom-block s="vector x: %n y: %n z: %n"><l>0</l><l>0</l><l>0.001</l></custom-block></custom-block><block var="map"/></custom-block></custom-block></custom-block></custom-block></block></script></block-definition><block-definition s="%&apos;item&apos; of ray %&apos;ray&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">hit<options>origin&#xD;direction&#xD;end&#xD;hit&#xD;distance&#xD;attenuation</options></input><input type="%obj"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ray</l><l>prop</l></list><l>return ray[prop[0].toUpperCase() + prop.slice(1)];</l></block><list><block var="ray"/><block var="item"/></list></block></block></script></block-definition><block-definition s="ray %&apos;ray&apos; hit?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doReport"><custom-block s="%mlt of ray %obj"><l>hit</l><block var="ray"/></custom-block></block></script></block-definition><block-definition s="scale x: %&apos;x&apos; y: %&apos;y&apos; using aspect ratio" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><custom-block s="let %upvar be %s"><l>ratio</l><custom-block s="aspect ratio"></custom-block></custom-block><block s="doIfElse"><block s="reportGreaterThan"><block var="ratio"/><l>1</l></block><script><block s="doReport"><custom-block s="vector x: %n y: %n z: %n"><block s="reportQuotient"><block var="x"/><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block></block><block s="reportQuotient"><block s="reportQuotient"><block var="y"/><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block></block><block var="ratio"/></block><l>0</l></custom-block></block></script><script><block s="doReport"><custom-block s="vector x: %n y: %n z: %n"><block s="reportProduct"><block s="reportQuotient"><block var="x"/><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block></block><block var="ratio"/></block><block s="reportQuotient"><block var="y"/><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block></block><l>0</l></custom-block></block></script></block></script></block-definition><block-definition s="render scene $nl $- quality: %&apos;level&apos; $nl $- camera position: %&apos;pos&apos; $nl $- camera rotation: %&apos;rot&apos; $nl $- on map: %&apos;map&apos; $nl $- with lights: %&apos;lights&apos; $nl $- trace mode: %&apos;mode&apos; $nl $- draw distance: %&apos;draw&apos; units $nl $- skybox: %&apos;sky&apos; $nl $- view scaling: %&apos;scale&apos; $nl $- shadows: %&apos;shadow&apos; soft %&apos;soft&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">5</input><input type="%l"></input><input type="%l"></input><input type="%obj"></input><input type="%l"></input><input type="%mlt" readonly="true">Normal<options>Sonic&#xD;Fastest&#xD;Faster&#xD;Fast&#xD;Normal&#xD;Slow&#xD;Slower&#xD;Slowest&#xD;Quality</options></input><input type="%n">1000</input><input type="%n"></input><input type="%n">1</input><input type="%b">false</input><input type="%n">0.5</input></inputs><script><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><l><bool>true</bool></l></block><block s="doSetGlobalFlag"><l><option>turbo mode</option></l><l><bool>true</bool></l></block><block s="doDeclareVariables"><list><l>scaled</l><l>raytrace</l><l>real end</l><l>current</l><l>normals</l><l>this</l></list></block><custom-block s="let %upvar be %s"><l>resolution scale</l><block s="reportQuotient"><block var="level"/><l>100</l></block></custom-block><custom-block s="let %upvar be %s"><l>step</l><block s="reportQuotient"><l>1</l><block var="resolution scale"/></block></custom-block><block s="setSize"><block var="step"/></block><custom-block s="for %upvar = %n to %n by %n %ca"><l>y</l><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>bottom</option></l><l>Stage</l></block><block s="reportMonadic"><l><option>neg</option></l><block var="step"/></block><script><custom-block s="for %upvar = %n to %n by %n %ca"><l>x</l><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block><block var="step"/><script><block s="doSetVar"><l>scaled</l><custom-block s="scale x: %n y: %n using aspect ratio"><block var="x"/><block var="y"/></custom-block></block><block s="doSetVar"><l>raytrace</l><custom-block s="ray %br $- from vector %l %br $- in direction %l"><block var="pos"/><custom-block s="rotate vector %l by rotation %l"><custom-block s="%mlt of vector %l"><l>normalized</l><custom-block s="vector x: %n y: %n z: %n"><custom-block s="%mlt of vector %l"><l>x</l><block var="scaled"/></custom-block><custom-block s="%mlt of vector %l"><l>y</l><block var="scaled"/></custom-block><block var="scale"/></custom-block></custom-block><block var="rot"/></custom-block></custom-block></block><custom-block s="march %br $- ray %obj %br $- for %n units %br $- on map %obj %br %br mode %mlt"><block var="raytrace"/><block var="draw"/><block var="map"/><block var="mode"/></custom-block><block s="doIfElse"><custom-block s="ray %obj hit?"><block var="raytrace"/></custom-block><script><block s="doIfElse"><block var="shadow"/><script><block s="doSetVar"><l>real end</l><custom-block s="%mlt of ray %obj"><l>end</l><block var="raytrace"/></custom-block></block><block s="doSetVar"><l>current</l><custom-block s="color from red: %n green: %n blue: %n alpha: %n"><l>0</l><l>0</l><l>0</l><l>1</l></custom-block></block><block s="doSetVar"><l>this</l><custom-block s="who vector %l is closest to in map %obj"><block var="real end"/><block var="map"/></custom-block></block><block s="doForEach"><l>light</l><block var="lights"/><script><block s="doIfElse"><custom-block s="is vector %l all %n s?"><block s="reportListItem"><l><option>last</option></l><block var="light"/></block><l>0</l></custom-block><script><block s="doSetVar"><l>current</l><custom-block s="add color %n to color %n"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="light"/></block><list><block var="real end"/><block var="map"/></list></block><block var="current"/></custom-block></block></script><script><block s="doSetVar"><l>normals</l><custom-block s="%mlt of vector %l"><l>neg</l><block s="evaluate"><block s="reportListItem"><l><option>last</option></l><block var="light"/></block><list><block var="real end"/><block var="map"/></list></block></custom-block></block><block s="doSetVar"><l>raytrace</l><custom-block s="ray %br $- from vector %l %br $- in direction %l"><custom-block s="vector: %l %mlt vector: %l"><block var="real end"/><l>+</l><custom-block s="vector: %l %mlt %n"><block var="normals"/><l>x</l><l>.1</l></custom-block></custom-block><block var="normals"/></custom-block></block><custom-block s="march %br $- ray %obj %br $- for %n units %br $- on map %obj %br %br mode %mlt %br $- $SHADOW $MODE %n"><block var="raytrace"/><block var="draw"/><block var="map"/><block var="mode"/><block var="soft"/></custom-block><block s="doSetVar"><l>current</l><custom-block s="add color %n to color %n"><custom-block s="%n times the amount of color %n"><custom-block s="%mlt of ray %obj"><l>attenuation</l><block var="raytrace"/></custom-block><block s="evaluate"><block s="reportListItem"><l>1</l><block var="light"/></block><list><block var="real end"/><block var="map"/></list></block></custom-block><block var="current"/></custom-block></block></script></block></script></block><custom-block s="set pen color to %n"><block var="current"/></custom-block></script><script><custom-block s="set pen color to %n"><custom-block s="combine light data %l at vector %l and map %l"><block var="lights"/><custom-block s="%mlt of ray %obj"><l>end</l><block var="raytrace"/></custom-block><block var="map"/></custom-block></custom-block></script></block></script><script><custom-block s="set pen color to %n"><block var="sky"/></custom-block></script></block><block s="doWarp"><script><block s="gotoXY"><block var="x"/><block var="y"/></block><custom-block s="draw pixel %n"><block var="step"/></custom-block></script></block></script></custom-block></script></custom-block></script></block-definition><block-definition s="combine light data %&apos;lights&apos; at vector %&apos;vec&apos; and map %&apos;map&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>lights</l><l>vec</l><l>map</l></list><l>const args = new List([vec, map]);&#xD;const count = lights.length();&#xD;var col = new Color(0,0,0);&#xD;var temp;&#xD;for (var i = 1; i &lt;= count; i++) {&#xD;    temp = invoke(lights.get(1,i), args);&#xD;    col.r += temp.r;&#xD;    col.g += temp.g;&#xD;    col.b += temp.b;&#xD;}&#xD;return col;</l></block><list><block var="lights"/><block var="vec"/><block var="map"/></list></block></block></script></block-definition><block-definition s="point light $nl $- color: %&apos;clr&apos; $nl $- position: %&apos;pos&apos; $nl $- range: %&apos;range&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input><input type="%n">100</input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reifyReporter"><autolambda><custom-block s="%n times the amount of color %n"><block s="evaluate"><block s="reportJSFunction"><list><l>inpos</l><l>pos</l><l>norm</l><l>range</l></list><l>var temp = pos.sub(inpos);&#xD;return (norm.dot(temp.normalized())*0.5+0.5) * Math.min(Math.max(1 - temp.length() / range, 0), 1);</l></block><list><block var="in pos"/><block var="pos"/><custom-block s="normals at vector %l on map %obj"><block var="in pos"/><block var="map"/></custom-block><block var="range"/></list></block><block var="clr"/></custom-block></autolambda><list><l>in pos</l><l>map</l></list></block><block s="reifyReporter"><autolambda><custom-block s="vector: %l %mlt vector: %l"><block var="pos"/><l>(b-a)/|b-a|</l><block var="in pos"/></custom-block></autolambda><list><l>in pos</l><l>map</l></list></block></list></block></block></script></block-definition><block-definition s="%&apos;d&apos; % amount of color %&apos;color&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>col</l><l>f</l></list><l>return new Color(col.r * f, col.g * f, col.b * f);</l></block><list><block var="color"/><block s="reportQuotient"><block var="d"/><l>100</l></block></list></block></block></script></block-definition><block-definition s="%&apos;d&apos; times the amount of color %&apos;color&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>col</l><l>f</l></list><l>return new Color(col.r * f, col.g * f, col.b * f);</l></block><list><block var="color"/><block var="d"/></list></block></block></script></block-definition><block-definition s="directional light $nl $- color: %&apos;clr&apos; $nl $- direction: %&apos;dir&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reifyReporter"><autolambda><custom-block s="%n times the amount of color %n"><block s="reportSum"><block s="reportProduct"><custom-block s="vector: %l %mlt vector: %l"><custom-block s="normals at vector %l on map %obj"><block var="in pos"/><block var="map"/></custom-block><l>᛫</l><block var="dir"/></custom-block><l>-0.5</l></block><l>0.5</l></block><block var="clr"/></custom-block></autolambda><list><l>in pos</l><l>map</l></list></block><block s="reifyReporter"><autolambda><block var="dir"/></autolambda><list><l>in pos</l><l>map</l></list></block></list></block></block></script></block-definition><block-definition s="who vector %&apos;vec&apos; is closest to in map %&apos;map&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%obj"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vec</l><l>map</l></list><l>const args = new List([vec]);&#xD;var lowest = Infinity;&#xD;var lowidx = -1;&#xD;var item, temp;&#xD;for (var i = 0; i &lt; map.contents.length; i++) {&#xD;    item = map.contents[i];&#xD;    temp = invoke(item, args);&#xD;    if (temp &lt; lowest) {&#xD;        lowest = temp;&#xD;        lowidx = i;&#xD;    }&#xD;}&#xD;return lowidx + 1;</l></block><list><block var="vec"/><block var="map"/></list></block></block></script></block-definition><block-definition s="is vector %&apos;vec&apos; all %&apos;num&apos; s?" type="predicate" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n">0</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vec</l><l>num</l></list><l>return vec.x == num &amp;&amp; vec.y ==num &amp;&amp; vec.z == num;</l></block><list><block var="vec"/><block var="num"/></list></block></block></script></block-definition><block-definition s="sphere $nl $- radius: %&apos;r&apos; $nl $- position: %&apos;pos&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%l"></input></inputs><script><block s="doIfElse"><custom-block s="is vector %l all %n s?"><block var="pos"/><l>0</l></custom-block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportDifference"><custom-block s="%mlt of vector %l"><l>length</l><block var="in pos"/></custom-block><block var="r"/></block></autolambda><list><l>in pos</l></list></block></block></script><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportDifference"><custom-block s="vector: %l %mlt vector: %l"><block var="in pos"/><l>|b-a|</l><block var="pos"/></custom-block><block var="r"/></block></autolambda><list><l>in pos</l></list></block></block></script></block></script></block-definition><block-definition s="add color %&apos;a&apos; to color %&apos;b&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>c1</l><l>c2</l></list><l>return new Color(c1.r+c2.r, c1.g+c2.g, c1.b+c2.b);</l></block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="min %&apos;a&apos; %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doIfElse"><block s="reportLessThan"><block var="b"/><block var="a"/></block><script><block s="doReport"><block var="b"/></block></script><script><block s="doReport"><block var="a"/></block></script></block></script></block-definition><block-definition s="max %&apos;a&apos; %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doIfElse"><block s="reportGreaterThan"><block var="b"/><block var="a"/></block><script><block s="doReport"><block var="b"/></block></script><script><block s="doReport"><block var="a"/></block></script></block></script></block-definition><block-definition s="spot light $nl $- color: %&apos;clr&apos; $nl $- position: %&apos;pos&apos; $nl $- direction: %&apos;dir&apos; $nl $- angle: %&apos;deg&apos; $nl $- range: %&apos;range&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input><input type="%l"></input><input type="%n">60<options>§_directionDialMenu</options></input><input type="%n">100</input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reifyReporter"><autolambda><custom-block s="%n times the amount of color %n"><block s="reportProduct"><custom-block s="clamp %n between %n and %n"><block s="reportDifference"><l>1</l><block s="reportQuotient"><block s="reportMonadic"><l><option>acos</option></l><block s="reportMonadic"><l><option>neg</option></l><custom-block s="vector: %l %mlt vector: %l"><block var="dir"/><l>᛫</l><custom-block s="normals at vector %l on map %obj"><block var="in pos"/><block var="map"/></custom-block></custom-block></block></block><block var="deg"/></block></block><l>0</l><l>1</l></custom-block><custom-block s="clamp %n between %n and %n"><block s="reportDifference"><l>1</l><block s="reportQuotient"><custom-block s="vector: %l %mlt vector: %l"><block var="in pos"/><l>|b-a|</l><block var="pos"/></custom-block><block var="range"/></block></block><l>0</l><l>1</l></custom-block></block><block var="clr"/></custom-block></autolambda><list><l>in pos</l><l>map</l></list></block><block s="reifyReporter"><autolambda><custom-block s="vector: %l %mlt vector: %l"><block var="pos"/><l>(b-a)/|b-a|</l><block var="in pos"/></custom-block></autolambda><list><l>in pos</l><l>map</l></list></block></list></block></block></script></block-definition><block-definition s="ambient light $nl $- color: %&apos;clr&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reifyReporter"><autolambda><block var="clr"/></autolambda><list><l>in pos</l><l>map</l></list></block><block s="reifyReporter"><autolambda><custom-block s="vector x: %n y: %n z: %n"><l>0</l><l>0</l><l>0</l></custom-block></autolambda><list><l>in pos</l><l>map</l></list></block></list></block></block></script></block-definition><block-definition s="cube $nl $- size: %&apos;r&apos; $nl $- position: %&apos;pos&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l">1</input><input type="%l"></input></inputs><script><block s="doIfElse"><custom-block s="is vector %l all %n s?"><block var="pos"/><l>0</l></custom-block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reportJSFunction"><list><l>p</l><l>size</l></list><l>var q = p.map(Math.abs).sub(size);&#xD;return Math.sqrt(&#xD;    Math.pow(Math.max(q.x, 0), 2)&#xD;    + Math.pow(Math.max(q.y, 0), 2)&#xD;    + Math.pow(Math.max(q.z, 0), 2)&#xD;) + Math.min(Math.max(q.x, Math.max(q.y, q.z)), 0);</l></block><list><block var="in pos"/><block var="r"/></list></block></autolambda><list><l>in pos</l></list></block></block></script><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reportJSFunction"><list><l>p</l><l>size</l><l>pos</l></list><l>var q = p.sub(pos).map(Math.abs).sub(size);&#xD;return Math.sqrt(&#xD;    Math.pow(Math.max(q.x, 0), 2)&#xD;    + Math.pow(Math.max(q.y, 0), 2)&#xD;    + Math.pow(Math.max(q.z, 0), 2)&#xD;) + Math.min(Math.max(q.x, Math.max(q.y, q.z)), 0);</l></block><list><block var="in pos"/><block var="r"/><block var="pos"/></list></block></autolambda><list><l>in pos</l></list></block></block></script></block></script></block-definition><block-definition s="rounded cube $nl $- size: %&apos;r&apos; $nl $- position: %&apos;pos&apos; $nl $- rounding: %&apos;round&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l">1</input><input type="%l"></input><input type="%n">2</input></inputs><script><block s="doIfElse"><custom-block s="is vector %l all %n s?"><block var="pos"/><l>0</l></custom-block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reportJSFunction"><list><l>p</l><l>size</l><l>round</l></list><l>var q = p.map(Math.abs).sub(size.subs(round));&#xD;return Math.sqrt(&#xD;    Math.pow(Math.max(q.x, 0), 2)&#xD;    + Math.pow(Math.max(q.y, 0), 2)&#xD;    + Math.pow(Math.max(q.z, 0), 2)&#xD;) + Math.min(Math.max(q.x, Math.max(q.y, q.z)), 0) - round;</l></block><list><block var="in pos"/><block var="r"/><block var="round"/></list></block></autolambda><list><l>in pos</l></list></block></block></script><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reportJSFunction"><list><l>p</l><l>size</l><l>round</l><l>pos</l></list><l>var q = p.sub(pos).map(Math.abs).sub(size.subs(round));&#xD;return Math.sqrt(&#xD;    Math.pow(Math.max(q.x, 0), 2)&#xD;    + Math.pow(Math.max(q.y, 0), 2)&#xD;    + Math.pow(Math.max(q.z, 0), 2)&#xD;) + Math.min(Math.max(q.x, Math.max(q.y, q.z)), 0) - round;</l></block><list><block var="in pos"/><block var="r"/><block var="round"/><block var="pos"/></list></block></autolambda><list><l>in pos</l></list></block></block></script></block></script></block-definition><block-definition s="repeat shape infinitely $nl $- shape: %&apos;shape&apos; $nl $- padding: %&apos;pad&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%l">5</input></inputs><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="shape"/><list><custom-block s="vector: %l %mlt vector: %l"><custom-block s="vector: %l %mlt vector: %l"><custom-block s="vector: %l %mlt vector: %l"><block var="in pos"/><l>+</l><custom-block s="vector: %l %mlt %n"><block var="pad"/><l>/</l><l>2</l></custom-block></custom-block><l>mod</l><block var="pad"/></custom-block><l>-</l><custom-block s="vector: %l %mlt %n"><block var="pad"/><l>/</l><l>2</l></custom-block></custom-block></list></block></autolambda><list><l>in pos</l></list></block></block></script></block-definition><block-definition s="offset shape $nl $- shape: %&apos;shape&apos; $nl $- position: %&apos;pos&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="shape"/><list><custom-block s="vector: %l %mlt vector: %l"><block var="in pos"/><l>-</l><block var="pos"/></custom-block></list></block></autolambda><list><l>in pos</l></list></block></block></script></block-definition><block-definition s="sigmoid %&apos;val&apos; $nl $- offset %&apos;offset&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%b">false</input></inputs><script><block s="doIfElse"><block var="offset"/><script><block s="doReport"><block s="reportDifference"><block s="reportQuotient"><l>2</l><block s="reportSum"><l>1</l><block s="reportMonadic"><l><option>e^</option></l><block s="reportMonadic"><l><option>neg</option></l><block var="val"/></block></block></block></block><l>1</l></block></block></script><script><block s="doReport"><block s="reportQuotient"><l>1</l><block s="reportSum"><l>1</l><block s="reportMonadic"><l><option>e^</option></l><block s="reportMonadic"><l><option>neg</option></l><block var="val"/></block></block></block></block></block></script></block></script></block-definition><block-definition s="minimum distance $nl $- from vector %&apos;vec&apos; $nl $- on map %&apos;map&apos; $nl $- ignoring %&apos;idx&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%obj"></input><input type="%n">1</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vec</l><l>map</l><l>idx</l></list><l>const args = new List([vec]);&#xD;var lowest = Infinity;&#xD;var temp, item;&#xD;for (var i = 0; i &lt; map.length(); i++)&#xD;    if (i != idx) {&#xD;    item = map.contents[i];&#xD;    temp = invoke(item, args);&#xD;    if (temp &lt; lowest)&#xD;        lowest = temp;&#xD;    }&#xD;}&#xD;return lowest;</l></block><list><block var="vec"/><block var="map"/><block var="idx"/></list></block></block></script></block-definition><block-definition s="march $nl $- ray %&apos;ray&apos; $nl $- for %&apos;dist&apos; units $nl $- on map %&apos;map&apos; $nl $nl mode %&apos;mode&apos; $nl $- $SHADOW $MODE %&apos;soft&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%n">1000</input><input type="%obj"></input><input type="%mlt" readonly="true">Normal<options>Fastest&#xD;Faster&#xD;Fast&#xD;Normal&#xD;Slow&#xD;Slower&#xD;Slowest</options></input><input type="%n">0.5</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ray</l><l>dist</l><l>map</l><l>mode</l><l>mindist</l><l>softness</l></list><l>var MAX_STEP = 400;&#xD;var HIT_MIN = 0.06;&#xD;switch (mode) {&#xD;    case "Sonic":&#xD;        MAX_STEP = 50;&#xD;        HIT_MIN = 0.4;&#xD;        break;&#xD;    case "Fastest":&#xD;        MAX_STEP = 100;&#xD;        HIT_MIN = 0.2;&#xD;        break;&#xD;    case "Faster":&#xD;        MAX_STEP = 200;&#xD;        HIT_MIN = 0.1;&#xD;        break;&#xD;    case "Fast":&#xD;        MAX_STEP = 300;&#xD;        HIT_MIN = 0.08;&#xD;        break;&#xD;    case "Slow":&#xD;        MAX_STEP = 500;&#xD;        HIT_MIN = 0.06;&#xD;        break;&#xD;    case "Slower":&#xD;        MAX_STEP = 600;&#xD;        HIT_MIN = 0.05;&#xD;        break;&#xD;    case "Slowest":&#xD;        MAX_STEP = 800;&#xD;        HIT_MIN = 0.05;&#xD;        break;&#xD;    case "Quality":&#xD;        MAX_STEP = 1600;&#xD;        HIT_MIN = 0.02;&#xD;        break;&#xD;}&#xD;&#xD;const args = new List([ray.Origin, map]);&#xD;&#xD;var travelled = 0;&#xD;ray.Distance = 0;&#xD;ray.End = ray.Origin;&#xD;ray.Hit = false;&#xD;ray.Attenuation = 1;&#xD;for (var i = 0; i &lt; MAX_STEP; i++) {&#xD;    args.contents[0] = ray.End;&#xD;    travelled = invoke(mindist, args);&#xD;    ray.Attenuation = Math.min(ray.Attenuation, 0.5 + 0.5*travelled/(ray.Distance * softness));&#xD;    if (ray.Attenuation &lt; 0) break;&#xD;    ray.Distance += travelled;&#xD;    ray.End = ray.Origin.add(&#xD;        ray.Direction.muls(ray.Distance)&#xD;    );&#xD;    if (travelled &lt;= HIT_MIN) {&#xD;        ray.Hit = true;&#xD;        break;&#xD;    }&#xD;    else if (ray.Distance &gt;= dist)&#xD;        break;&#xD;}&#xD;ray.Attenuation = Math.max(ray.Attenuation, 0);&#xD;ray.Attenuation = ray.Attenuation*ray.Attenuation*(3 - 2*ray.Attenuation);&#xD;//console.log(ray.Attenuation);</l></block><list><block var="ray"/><block var="dist"/><block var="map"/><block var="mode"/><block s="reifyReporter"><autolambda><custom-block s="minimum distance %br $- from vector %l %br $- on map %obj"><l/><l/></custom-block></autolambda><list></list></block><block var="soft"/></list></block></script></block-definition><block-definition s="rotation matrix $nl $- %&apos;r00&apos; %&apos;r01&apos; %&apos;r02&apos; $nl $- %&apos;r10&apos; %&apos;r11&apos; %&apos;r12&apos; $nl $- %&apos;r20&apos; %&apos;r21&apos; %&apos;r22&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">1</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">1</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>r00</l><l>r01</l><l>r02</l><l>r10</l><l>r11</l><l>r12</l><l>r20</l><l>r21</l><l>r22</l></list><l>return new RotationMatrix(&#xD;    r00, r01, r02,&#xD;    r10, r11, r12,&#xD;    r20, r21, r22&#xD;); </l></block><list><block var="r00"/><block var="r01"/><block var="r02"/><block var="r10"/><block var="r11"/><block var="r12"/><block var="r20"/><block var="r21"/><block var="r22"/></list></block></block></script></block-definition><block-definition s="%&apos;axis&apos; axis rotation of %&apos;deg&apos; °" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">x<options>x&#xD;y&#xD;z</options></input><input type="%n">0<options>§_directionDialMenu</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>axis</l><l>num</l></list><l>const deg = radians(num);&#xD;const s = Math.sin(deg);&#xD;const c = Math.cos(deg);&#xD;switch (axis) {&#xD;  case "x":&#xD;    return new RotationMatrix(&#xD;      1,0,0,&#xD;      0,c,-s,&#xD;      0,s,c&#xD;    );&#xD;  case "y":&#xD;    return new RotationMatrix(&#xD;      c,0,s,&#xD;      0,1,0,&#xD;      -s,0,c&#xD;    );&#xD;  case "z":&#xD;    return new RotationMatrix(&#xD;      c,-s,0,&#xD;      s,c,0,&#xD;      0,0,1&#xD;    );&#xD;}</l></block><list><block var="axis"/><block var="deg"/></list></block></block></script></block-definition><block-definition s="%&apos;axis&apos; axis of rotation %&apos;rot&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">x<options>x&#xD;y&#xD;z</options></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>axis</l><l>rot</l></list><l>switch (axis) {&#xD;  case "x":&#xD;    return new Vector3(rot.data[0], rot.data[3], rot.data[6]);&#xD;  case "y":&#xD;    return new Vector3(rot.data[1], rot.data[4], rot.data[7]);&#xD;  case "z":&#xD;    return new Vector3(rot.data[2], rot.data[5], rot.data[8]);&#xD;}</l></block><list><block var="axis"/><block var="rot"/></list></block></block></script></block-definition><block-definition s="%&apos;item&apos; of rotation %&apos;rot&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">r00<options>r00&#xD;r01&#xD;r02&#xD;r10&#xD;r11&#xD;r12&#xD;r20&#xD;r21&#xD;r22</options></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>item</l><l>rot</l></list><l>switch (item) {&#xD;  case "r00":&#xD;    return rot.data[0];&#xD;  case "r01":&#xD;    return rot.data[1];&#xD;  case "r02":&#xD;    return rot.data[2];&#xD;&#xD;  case "r10":&#xD;    return rot.data[3];&#xD;  case "r11":&#xD;    return rot.data[4];&#xD;  case "r12":&#xD;    return rot.data[5];&#xD;&#xD;  case "r20":&#xD;    return rot.data[6];&#xD;  case "r21":&#xD;    return rot.data[7];&#xD;  case "r22":&#xD;    return rot.data[8];&#xD;}</l></block><list><block var="item"/><block var="rot"/></list></block></block></script></block-definition><block-definition s="rotate vector %&apos;vec&apos; by rotation %&apos;matrix&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vec</l><l>mat</l></list><l>return mat.rotateVector(vec);</l></block><list><block var="vec"/><block var="matrix"/></list></block></block></script></block-definition><block-definition s="rotate shape $nl $- shape: %&apos;shape&apos; $nl $- rotation: %&apos;rot&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="shape"/><list><custom-block s="rotate vector %l by rotation %l"><block var="in pos"/><block var="rot"/></custom-block></list></block></autolambda><list><l>in pos</l></list></block></block></script></block-definition><block-definition s="Initialize Datatypes" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>//VECTOR//&#xD;const fmod = (value, fact) =&gt; ((value%fact)+fact)%fact;&#xD;class Vector3 {&#xD;    constructor(x = 0, y = 0, z = 0) {&#xD;        this.x = x;&#xD;        this.y = y;&#xD;        this.z = z;&#xD;    }&#xD;}&#xD;Vector3.prototype.toString = function() {&#xD;    return `&lt;${this.x}, ${this.y}, ${this.z}&gt;`;&#xD;}&#xD;Vector3.prototype.unm = function() {&#xD;    return new Vector3(-this.x, -this.y, -this.z);&#xD;}&#xD;Vector3.prototype.add = function(b) {&#xD;    return new Vector3(this.x + b.x, this.y + b.y, this.z + b.z);&#xD;}&#xD;Vector3.prototype.adds = function(b) {&#xD;    return new Vector3(this.x + b, this.y + b, this.z + b);&#xD;}&#xD;Vector3.prototype.sub = function(b) {&#xD;    return new Vector3(this.x - b.x, this.y - b.y, this.z - b.z);&#xD;}&#xD;Vector3.prototype.subs = function(b) {&#xD;    return new Vector3(this.x - b, this.y - b, this.z - b);&#xD;}&#xD;Vector3.prototype.mul = function(b) {&#xD;    return new Vector3(this.x * b.x, this.y * b.y, this.z * b.z);&#xD;}&#xD;Vector3.prototype.muls = function(b) {&#xD;    return new Vector3(this.x * b, this.y * b, this.z * b);&#xD;}&#xD;Vector3.prototype.div = function(b) {&#xD;    return new Vector3(this.x / b.x, this.y / b.y, this.z / b.z);&#xD;}&#xD;Vector3.prototype.divs = function(b) {&#xD;    return new Vector3(this.x / b, this.y / b, this.z / b);&#xD;}&#xD;Vector3.prototype.pow = function(b) {&#xD;    return new Vector3(Math.pow(this.x,b.x), Math.pow(this.y,b.y), Math.pow(this.z,b.z));&#xD;}&#xD;Vector3.prototype.pows = function(b) {&#xD;    return new Vector3(Math.pow(this.x,b), Math.pow(this.y,b), Math.pow(this.z,b));&#xD;}&#xD;Vector3.prototype.mod = function(b) {&#xD;    return new Vector3(fmod(this.x,b.x), fmod(this.y,b.y), fmod(this.z,b.z));&#xD;}&#xD;Vector3.prototype.mods = function(b) {&#xD;    return new Vector3(fmod(this.x,b), fmod(this.y,b), fmod(this.z,b));&#xD;}&#xD;Vector3.prototype.length = function() {&#xD;    return Math.sqrt(this.x*this.x + this.y*this.y + this.z*this.z);&#xD;}&#xD;Vector3.prototype.normalized = function() {&#xD;    var len = this.length();&#xD;    return new Vector3(this.x / len, this.y / len, this.z / len);&#xD;}&#xD;Vector3.prototype.dot = function(b) {&#xD;    return this.x * b.x + this.y * b.y + this.z * b.z;&#xD;}&#xD;Vector3.prototype.dots = function(b) {&#xD;    return this.x * b + this.y * b + this.z * b;&#xD;}&#xD;Vector3.prototype.cross = function(b) {&#xD;    return new Vector3(&#xD;        this.y * b.z - this.z * b.y,&#xD;        this.z * b.x - this.x * b.z,&#xD;        this.x * b.y - this.y * b.x&#xD;    );&#xD;}&#xD;Vector3.prototype.map = function(item) {&#xD;    return new Vector3(item(this.x), item(this.y), item(this.z));&#xD;}&#xD;window.Vector3 = Vector3;&#xD;&#xD;//ROTATION MATRIX//&#xD;    class RotationMatrix {&#xD;        constructor(&#xD;            r00=1,r01=0,r02=0,&#xD;            r10=0,r11=1,r12=0,&#xD;            r20=0,r21=0,r22=1&#xD;        ) {&#xD;            this.data = [&#xD;                r00,r01,r02,&#xD;                r10,r11,r12,&#xD;                r20,r21,r22&#xD;            ];&#xD;        }&#xD;    }&#xD;&#xD;    RotationMatrix.prototype.toString = function() {&#xD;        return `[${this.data[0]}, ${this.data[1]}, ${this.data[2]}]\n[${this.data[3]}, ${this.data[4]}, ${this.data[5]}]\n[${this.data[6]}, ${this.data[7]}, ${this.data[8]}]`&#xD;    }&#xD;    RotationMatrix.prototype.rotate = function(b) {&#xD;      return new RotationMatrix(&#xD;        this.data[0] * b.data[0]&#xD;          + this.data[1] * b.data[3]&#xD;          + this.data[2] * b.data[6],&#xD;        this.data[0] * b.data[1]&#xD;          + this.data[1] * b.data[4]&#xD;          + this.data[2] * b.data[7],&#xD;        this.data[0] * b.data[2]&#xD;          + this.data[1] * b.data[5]&#xD;          + this.data[2] * b.data[8],&#xD;&#xD;        this.data[3] * b.data[0]&#xD;          + this.data[4] * b.data[3]&#xD;          + this.data[5] * b.data[6],&#xD;        this.data[3] * b.data[1]&#xD;          + this.data[4] * b.data[4]&#xD;          + this.data[5] * b.data[7],&#xD;        this.data[3] * b.data[2]&#xD;          + this.data[4] * b.data[5]&#xD;          + this.data[5] * b.data[8],&#xD;&#xD;        this.data[6] * b.data[0]&#xD;          + this.data[7] * b.data[3]&#xD;          + this.data[8] * b.data[6],&#xD;        this.data[6] * b.data[1]&#xD;          + this.data[7] * b.data[4]&#xD;          + this.data[8] * b.data[7],&#xD;        this.data[6] * b.data[2]&#xD;          + this.data[7] * b.data[5]&#xD;          + this.data[8] * b.data[8],&#xD;      );&#xD;    }&#xD;    RotationMatrix.prototype.rotateVector = function(b) {&#xD;      return new Vector3(&#xD;        b.x * this.data[0] + b.y * this.data[1] + b.z * this.data[2],&#xD;        b.x * this.data[3] + b.y * this.data[4] + b.z * this.data[5],&#xD;        b.x * this.data[6] + b.y * this.data[7] + b.z * this.data[8], &#xD;      );&#xD;    }&#xD;&#xD;    window.RotationMatrix = RotationMatrix;&#xD;&#xD;//RAY//&#xD;class Ray {&#xD;    constructor(pos, dir) {&#xD;        this.Origin = pos;&#xD;        this.Direction = dir;&#xD;        this.End = pos;&#xD;        this.Length = 0;&#xD;        this.Hit = null;&#xD;        this.Attenuation = 1; &#xD;    }&#xD;}&#xD;Ray.prototype.toString = function() {&#xD;    return `Ray from ${this.Origin} in direction ${this.Direction}`;&#xD;}&#xD;window.Ray = Ray;</l></block><list></list></block></script></block-definition><block-definition s="rotate rotation %&apos;a&apos; by rotation %&apos;b&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>b</l></list><l>return a.rotate(b);</l></block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="%&apos;mode&apos; rotation x: %&apos;x&apos; y: %&apos;y&apos; z: %&apos;z&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">xyz<options>X First={&#xD;Y Next=xyz&#xD;Z Next=xzy&#xD;}&#xD;Y First={&#xD;X Next=yxz&#xD;Z Next=yzx&#xD;}&#xD;Z First={&#xD;X Next=zxy&#xD;Y Next=zyx&#xD;}</options></input><input type="%n">0<options>§_directionDialMenu</options></input><input type="%n">0<options>§_directionDialMenu</options></input><input type="%n">0<options>§_directionDialMenu</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>mode</l><l>x</l><l>y</l><l>z</l><l>func</l></list><l>const args = new List([0,0]);&#xD;var cur = new RotationMatrix();&#xD;for (var i = 0; i &lt; 3; i++) {&#xD;  args.contents[0] = mode[i];&#xD;  args.contents[1] = mode[i] == "x" ? x : (mode[i] == "y" ? y : z)&#xD;  if (args.contents[1] != 0)&#xD;    cur = cur.rotate(invoke(func, args));&#xD;}&#xD;return cur;</l></block><list><block var="mode"/><block var="x"/><block var="y"/><block var="z"/><block s="reifyReporter"><autolambda><custom-block s="%mlt axis rotation of %n °"><l></l><l></l></custom-block></autolambda><list></list></block></list></block></block></script></block-definition><block-definition s="average colors %&apos;cols&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>cols</l></list><l>const count = cols.length();&#xD;var total = new Color();&#xD;for (color of cols.contents) {&#xD;    total.r += color.r;&#xD;    total.g += color.g;&#xD;    total.b += color.b;&#xD;}&#xD;total.r /= count;&#xD;total.g /= count;&#xD;total.b /= count; &#xD;return total;</l></block><list><block var="cols"/></list></block></block></script></block-definition><block-definition s="rotation from direction %&apos;dir&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vec</l></list><l>const look = vec;&#xD;const right = (new Vector3(0, 1, 0)).cross(vec);&#xD;const up = vec.cross(right);&#xD;return new RotationMatrix(&#xD;    right.x, up.x, look.x,&#xD;    right.y, up.y, look.y,&#xD;    right.z, up.z, look.z&#xD;); </l></block><list><block var="dir"/></list></block></block></script></block-definition><block-definition s="rotation from position %&apos;p&apos; looking at %&apos;pos&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="rotation from direction %l"><custom-block s="vector: %l %mlt vector: %l"><block var="p"/><l>(b-a)/|b-a|</l><block var="pos"/></custom-block></custom-block></block></script></block-definition></blocks><variables></variables></project><media name="Raycasting library v2" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>