0xac52…fb1f

All memos sent from and to 0xac52…fb1f.

/* minimizer, 2024. https://minimizer.art/ */ document.title = "Scribble Party - Generating..." const append = (parent, xml) => { const t = document.createElement("template") t.innerHTML = xml const e = t.content.firstChild parent.append(e) return e } append(document.head, `<style>@keyframes spin { 0% {transform:rotate(0deg);} 100% {transform:rotate(360deg);}</style>`) const loading = append(document.body, `<div style="display:flex;justify-content:center;align-items:center;height:100vh;margin:0;background-color:#fff;font-family:sans-serif;"> <div style="text-align:center;"> <h2>Generating...</h2> <div style="width:50px;height:50px;border:5px solid #fff;border-top:5px solid #000;border-radius:50%;animation:spin 1s linear infinite;margin:20px auto;"></div> <p style="color:#777;">Use 's' to save SVG once generated</p> </div> </div>`) const compressedArtCode = 'H4sIAAAAAAAAE5V8CXfbNtPuX7H1uTqANIJIyvICGfbxpiRt0viNm6atjm5CS5DEmgIVELKlyvzv9wxAUrTjfu+9XWQS+zKY5ZkBH0K9I8VmzIkCQ8XpZpJo8hDqHb0TqR1DJTPEgKb1+i4+Kvv48e5vOTJsLCeRkjc6WUht1pgHG6mWc6nDu1jyXQ+m0nAz0MOMZmA4kaCoOM1rL3RiErNeSDYL04+PqmiHjcI4tkUzUGKT9SQbEwWbhBMqTr/LjPZGiUrNZhInieYGRjKKuQadLNWYJzCPFI9gHq54CuFdykNIo6niMaSR4iMYJSlfQoh/xhCaUAV8Cjfv+ALS79rwSSY+hGYGM5GPlsifVFPRnxTMbZJdJdkgfsvQpmoY6G+T5/aJ+K0lMY0Fpe2Awk2l1ok6U1yemjPDJdwWPQwYY+dah2si6ZDNwwUhRNoKihhKKayEFKeSaTlejqTNxGqyqSh4FNbClwdwiWUSIhtr2l7DOb5tYmkGCgxoSIZCsnloRjPSZpujrD2lriMpThehTuU7ZYgE/4BS2tPSLLXCxd6oJ+GBwR+NP8mT8HqxNDtSENU0Tx5tJk9eXmEnEUnTf/JACfN/zOnp6TEYoZtEn5x06JMHWuiTk8B/0qenp76Pr0355AGRp6enHm3vB8f7xweHwfFBlsF9vmigcQc2K59LWPtcwSrgBtYB1/DIL4lpSQoRvyS6pWhG4UG8WjaDhIrTeyJbCahWAqaZgG4mFD6Vm7xZ8UsiKaz5JbFNvS+yNpbYdoyQbNVSbAVaSLZuKbYu5n1JJsQ0TFM3NKUZ7G03/BOZE8lWgNUMBXxZg2JrMJTCIw4Wx8pVls/0E5HNJTG0oUE1R/aBwrtiJJKliTYV4pC0lVPIRZWWJEvjaCSJolB580DRIdwhYRhyQyR4EHS7lDKT3BodqSnxDyhbhONbE2pDAqh5NQrXjvRK0gn+V9KBKzFgwfExsO7RITDf3x/CxxdbWV1n0LiJFGLcQlz1N/991SERkummYrqZEsliUCym263IN6KVNBJ64mXw4UWLiSCWsi0Vg3KsZEcLmyjFYAhKDIZZT5OczewkbskuiWwfeZRCZM+Wy1MiJR7I7QgGCW54SzKkSLAvTTtc97Ku5qzznGEGoSDFErmWBwmkEEI8FBFRtIdMGUcciaQXnYi0FzWbtJyRHETDXjQhCS3KSRH25ImIe3JbLhLJQNpykS3nUuVOMtmJaDQhyNwlaErdTHa9LMsg3hLzG7uQ9brBjRuVJ+f/ZcMU0zjxf90lahuB5bazTTQhrsNi+Fr8965+6IDmTffIrmHLpyfDFqcowIhhS6HAsIXQNMvyepuZFTEK5tyUG6HBbgVuhNluhBK6p05E0lPNZrnqWqQ9fSLCnm42qRyo4dMTwT9iMKSADwNdJA30s1S2WKYzbF8VTxn0rby0hLnrUXEaEgkxLtMNl+5tROGWV4lxU8xkB7OXWFixZQaXXGcZJRS3M+eQq4ArZJMJcsgYHvkIIr7MYAzT7RIvkNSR8McUZkKTBRlRCnP7tKTUir5K95rIdieguOHycedzpEwncIJNFedjc44D3t0lycC40sO6f3Iif8J6D88mk+fj7v7UCXoJrqfwT040zgdXJWGTKI6JR3Fus8acWtF0IwqBtPnEkd+MYM2XoPkMYn6b4eRm4pLMmrftoDjiK3FJUjJqzUBSFKiXJCKj5gypD85t3rI1g4RSuLd5y+YMYlqlhhVSw7qnmmJcEGwsLklIVAuX7FagkJg1Zq24EVuJ7hq9hfOyw2XzFu4pCjFDFkS1cCif7POqhV2/t8u+ts974qExb77vbc87vn/CM79nz/y0Xp+y9+ycSPr01M//kj57QOZ70xTjRiOgWQbveT9fzU2fXRJUV7wM9mzKTWZPT4CSAzYzPoI+X8INH2cisUs9Fbt+sdZ5I4ltZFqvk9g9iV2fZvDO7mzC5tj9tF6P2SciaQaVRuHCtkCmT09kRJyMidkn24RHIWZ7BAUMf8kEFPuI5ZFOgoZibwhtLCzLwacG6zaIQe5TiohHYhUimsGHsq1oQnbHRJa8xoiE3RJJkVmaLQN6byUvJAJbVBCJlOhWAp4tF516tKRdYqwQWNFG1NaQ4Duy/rV9L0byyUoHBSgJEpplWZ4uM/hi1+IDnnjcpX8E2dxwCRdcwRU38MHqNMhAUKTecCVOUdzX67sJS5O5tMJZsj5RKJT/5km+uIrQ1ookpfyW7IJQK7fzRil82WoloLnJANmFdpxiFfAI2UWKp0i2zKmu12XTnET1umqZ06ReV01zksLfVZFvJW0ivF4hhewuJ+KGJE3Nfie0YcBy/4RWyNnryRPfs6QckXLvogx+38oIUmrcBvf/bSGSUsKCbkNCwA4bisKvWyXvLZfwK1cZhd/sMH4lSFqDz/Advg7FwIcAOkP4sxy+1RvJ5jcu4TNX8J0b+Mo1/MmTjMIvyBw9IeSZx2dEQufAo/BHXlcMWj74dn/kMw2/6Vd0fBwVbhFRuU6lxKlxT0acmoZqSNweNolDQyiyOyO1q2lXwBNCPT3tmoqKZ2v/QlmkRvFyLFPyC7FtwM84MsaYXYmqqrGTiIj4uGSGfQbDfmNf20cUUhGRTiPZJoRiTlAUajxZKErUlo6I3hoOOyrfdFNuuhZhW1XsCklMswkah2Pp+z+4lC80INRriEHCiERildlU/EH8LnQaiv1CPAi2psrmDy7hZ67gL26ybQuhiKzMS4h8ZtXkmo/QRBFKmyGhzXhLZIak5WaoJi7eGZMSlaG/xH/Iz8Tqjx4uqZR5QmngNZtt9VNwKvyzluGGAi5OtyHZL+QA/MDug6pWwukaYqtZXR/Ldw68NtbYhyNbwbzspeRHsk2ChqI/BcXQ9Yl/NictYxeSz4mBlgHd8lG1fjYU17J+dfyNF+PuHNjCiXym97pcHzoUjOjYlw50X1lmVM5+IS1lj7j4243OtH0Pnm2KbiYESSGSldMHERKrVYS3DY5Eyj4SjeriH2QEpj3CpsfilQUy7BenWdqOO9ABH8yPvVLSiqAVtQNIUdzckNDSfNAK2WfwcIoLsVGSp1amJI0pmPwFtOQh+9wOspIUq2TolELvx0VJxJggYceWAiEVuplAKAxZbs9UM2qmlMLCSpdwK1tClsgWwcxy24VGPELSJkmbijYkhI5iM0iliCTxwbEj8I88GHQ82O/CgQfH+N8QPEQRwlcK+t0h+NBB6WtzPcwdIqOr5o2KvB+zls9p5g/ie0h7lbUy8BeKnVJMGPKMhCSzg/I91NkTsUcMoZAAO6a0lCeYlIopSdi6FaG5wVatiK1oe9Hwj0pwQpMKu8KFLU/1WP5gdJLcVEVGI9nKB8lWARqtLmGNCesAT1VuOBYc5ZJ0DjynhWxnuUJN21GERLG9tT/t2PV/rXVJptZ2NGAtnnxmTU1LdR+VoEEClbFEYk6YD+wQXLsNyR4hFOywEaEVoNzCduhZwjXdWnROsG4QNwDNFcTcg1RyA6HkGkWrB6qFepCmtGHaKEqXYjB8XXKXy4K7umTyQeq1Zavv0dSkp0EjpLReXzqbZ0QkRIArvN+FY482FGoHlJZqES5ETCRtLrdQmBuwahoWShR04FGaDXFCGUzLjUXDhKi2j+b74sftHgxBC9ShBjdEgbXnpZqaWcun25mhCpOcFFm9pJzfZoVaEU9B8zATcpAMIRZhS7UDGAlNkpaPa6RJ0vSRTU3Jkq1bI7aGJVu1RmxFm4t2ABPxSGzdMcT2xCdbfVIKw0JDsCEtppLg+k8oqKoB4vfUibbWqHHLuYeFQLURk0I11qVOkBcKUZlhySynksSNxfNWvbLVkqzGrUVDtXUvbzAfdYT20FaFNRlMKox8E0uewB88gpHkKSwlj2Es+QimEm3OisU5wc2Y2SMyycforEy0gGeEnsqzyWBGaMtvySFXyzjOcdRSXSsH+ojJbf/Iayy2TH/nI4nYCpBPOCPAYqvWis0LzAg9CZ6eiBISjOjbA9onuHXkBgmOrVoGFXui86cmUXg2UbknOn+i7WrRRlAp0whys6RswObrF/kUkBFT2iD+kdde0FPR7dIeAvN2qmiZ0Xpd2d9CldzVrE8koO7oTJWTEPddtlTTp40IW6Vo0Um2kGdnM2JNT5IbQLi4yXab+8RDttonFbU8FH4vPElafi/cUgQyE5GCEWE7gY9kjhw2oq+DnvZFg2K6eLHwHcKhtBezhRQRDjeEFYlpva7ZO4L6Ic7abnFmzc5LkRK0y+MSoru3YganJWaEwsSRpqSALUgKlRoZgsQvzr/b5FuChkgEl3BuIYyzy4ZiSnIPT+OKWNgoOYmenlbEFU1gTi5xMhIUM5KiLV+gZzs626LLmy3cZhBuk9uD/WBVXOxB5jU3UnIJieQGhdOe+GgRZFxDHBiWVGSP0s092SumL8UUVeAIfuZ9+It/gonkD5mDQ5TdvV5xmE6W9fquITgXJSTKG3qP3H9NSj5bFD0Vo3p9ksGsPMgJKmIwKpduM5N8CXPJx9CX6EWRfAK3ks9gJfk8EzHciBEqf34X/C6iIA64os0bWOFBX2PLBlsVIQogq1jnwnFaWg8L8ZZEBHVAmKFHZSJS4oMmpr2waBRWm7bJBPnjjZhI54SxuJmP2sJmLfmuj6yHOJtpehbyPjYIczwDS5exbI7hD75AxjRBxjSBWHIvA4J6isQ1VVludeJ5mTabMD2ZbCGDW4Lr2RyROanYQgjlZdv3GyQiNiO0YoMvpGgFCAo5sr2hFG4yuNzKY+RkBPGIpqIlQ4PNpeTncC75PdxL/gAPkn+CT5LvwXvJ72BP8mt4lPwK3kn+Bi4k/wB3kv+TiSlBM//SugAcRa3JF/tMK4qMTWnNWszvNsh5E5EpJdbEVbun8Anu4cHR43YNXK7Puo09PFIqF1uuj0uiUeV8aN1RuII7uIYPxEcFwGW1Xua1ykyD9e5b7NC2+wb24Br+IZXs1mv5WL84ji/XPBaIX07OtvjloLQ5IB0KCSESaFwxmgsBEbptYoxVLA6n6avScCR4jBVcSy63iMx7yw9O0AVg2gGlGaXPnAySXUtcql3t6iTF8AdqWKq7mk0iNX6nxnKFvNnbFVG9/p6ogTeEYr3piWkH9TrR4oJoiMpeUjEYDJ1K4w4wjg9wpFky2dFUnqV5CwUP8Or11M13MKS8zLUpJai7k5bQhFvcvC7OkKgcvUCxJIFUIDe/oojkE/0B4reqmfWZtANIUEfRjUUj+FFLyaH4Un61ggbqKUlFT4EItdatikKJtItWrI4RC+nMRY1P1pU2ZBrV1lQSq2/l28EYM0gWGszAGw4zSgzMcvLaOvXQ1W0pZNYOYG6N6Bl1MtxkMFjCeChG7EoS9DEMy8WMUakdeEMKMYlgi+10cAQQk/RFGkSYugSDlIuPY/cIS3wxWABRG0govOJBKY4E2XxEWniDrDKz4ACufZIL1jdS7Hqgc7nKPiJ2a/1gu5gHaSHp3hNZkEiusCo7k1DkTsvU6SXIIZxkSoida884ko9ojybkHTEFRUUOjEiJBtsvpbZ4oXtUzctBhbKdX0tTb1eonMTq9dCaHWfqGRXjLlOuCpWhZNwZjFBfQKfUqKBoH9sYwQiHcBaTCzJCFY2P6Kv0j+ZG0ZwvxLIyjiUssY16Hf+4rvHJrtUyoySEGZ6dFeWDYaFU7/oZzCtK9SCBaAgpaspLNTJRohqkoP9QKPbF+XvQc4Qwb1Ph76kpz80IBewJgraYccKOG6Y3wiPkrJ3BELCE1R5GFuK1xUxvi0R4QiT5pM40uyISUso1+0D6kiBGk1BIwfcQxAQj1pGMxwMFMYTDnjkjicBzlOA5MjmPsF1SPmo2IUT3AWpAffm6n9ywDwg7giqeKNxg0Vsk43+Q+X5Bo+NvycOsCh8tRUQS9ggJi5yGNC4VjamIC7MYJiLOIS1Yi1tp1UdDlo05YV4ALIDYORgC6xSKCOs2lqg4PryGQ92SEiyzegmp4uOFALglvm9p3T0YO822j8DAY1MhCmHcW9RUbI2yrUSGIRLviK4In5Ar+F3yEus3aDv/cPpn5NhrqRZiPQhetypwySUxJ/h+ZpqdA48bpEYPJMGYF+qmbcUXOIr/XdpzycIKBoyYbTPKKBlLe+4ATetb0rFV/MBz2Daq2j8MrEQnEF9BDVEL3+Igc/uW+3b0Fi1JINzWj0XS0IgasQBhjcrLUsQNTdiRexu7LNYF33LSqXB5CPcVTxORtIMTCTMxOZM8JUk7gE5DWl0WBitYD8XkbLDrwdchJ6/boS/hzE2EFHqDFPoWkZVfJdfwG9LqZ8mjzDJL6/MFy94QhT4VEkbFy4mQiLlECKbt+vAZPkNM9imEFCLSsWnfbZp/kCdiQc8WDCEmSLER6WLS92dJPiZ9tUmjbRL28B1icpQ31nVtfbcVO9W2fkj6apNGpEvpsOSQSWVpVNtAKByoFDSIaWpK26aMJ2K/SiFkvZ6w31Ay4MNnSUIkPNjcoNnxVvJpJhL2kSxzSoxkSRWDMUxRNofsO8xAwi3Kz0vc2n1YnbEDjlb2ue1+1iKrs6BBZPOWcg8Dt+BerJ6e1kJ8PosISi1renQbkvK1EN/PJPfgoSzi8ciSBuZv7T60zuG99VAOAg8Qd0UGv4c7+Ykg0rU687jvwXsK1vUjTvt4yhoKTMNZ6/DoCg8i0jlo3NhKrQ4cUvCQNa3O/COP+12Pgjnzu6VnhHtDIARVWnRBaRuw1idzcuyBAnbYpdb30CT6VLDumcEp0yLSSPisa0Pc8NioSmzRO/u3HcAdgmUpUXgS2oFbmWvxWwndbr5L/icJIYE1nMM1ha+S436twDLnleS3MEO7ZY52S9+ZX6VUuSMXZGlPKEoNfIutOoJP6EsPxTsyRhsDbT9Urfpicjbnd+QSPRc35YvGQ5qSyVmngZvlvFnvyBRBx3Kkl3gMz/EY3uMxfJA8RBuqjzbUDdpQc7ShbtGGekcWjVvHOS7QyrqT/DGz/6D6t3VmvOBliVMpcU0iXIg0E6ayThH8KXlhX/+LLE+cvyMWBin8hhj09CrWx9CpkUCtiX22DUgY+J4HvjeEhBK6VYcGtoNhMtkZbcX3TNqIEs9a4Cn6X1W9TqyY3vyC6/KH5AbtpozCiCm5wsiffMIxWJb+Ppd2FYYXvmTniUAiCXNGbov+bp9/MJ+M5euqNIn+Jn5bgd+W4LcJuuLQa/TMf0N0UySEwsiZBbQdNFkXZRVyW2W9lLni+XshOVAK4DFRViIfUHQuwFjEqAgOyNTyXmVF/xHFkJkpoUMXeJfr7tNeAVXGxG93wC8HFMPoefTMCL1IMBMxGgAiFkJCX8Rt9P1sfkay+o/kq0zMz56F0dwQ2fIxPI82kna3oJWfcUf+I3nSVLgBU8qLdSaYF1l8G2QbecF/3HvXvWaUkgXMUJGZPz1Z2Rog8v8bofxXsuvDLbLFP8kIAZGzr/wz9GGNnHEG92J+NuM3ZEJoY5Yf95jC5g/+gDjJJ8RJ3iNOspfZbY+qdPCWSDQ6YvSz5upPQ7bD8uz9wUNsJMZGUhIDBvyEDdJpNIr9cexsSd1/LRIhu0RMNDrz7RN6pjimdhqI8Yc2FOge5sg3z9sPtiGHPb0Tj/YtwC2/EPMzX3a43+5UjuIl/CU5gkVzxIpCcg/n8AjvLEAUkltYwWPjAt41Lii8Mn97LBI8FPHzqKitXzvvKpKcJEJB0iC5fyvw6Jnv4YzKpH1Mkvs4SZCKG1CK68wSYJKBKVQEXTBnU7ZP8CCh/9Kwz/QU5ac+EcrWdFEjCr3oGnVbhHhRMSOHyAPsUwAG4vJpZJ86tnRgHXo2xwNNurb6X/ju47vv2QQpX6aovIcywdiE7jZBSzoszlDuiEbr4blRJZWLZtmKeaZUzkEsGl608FwBczz2L8t3wzwPRqLQSZcCjewR/ReOrF/lyMlrjDjMGXE7eM6KvSHof+HF4db5YlHLxNZEw72nq5w4ZWt5NtBDPhhWeXLoePLurq7XB3r4gjXvbRXPCEKrP5cOdHn2wN9bkbTEyY4zMbJUGlLYGMWnoBVfZK9ZMoMhROJD4RRwK/yLde7gCiO2TRBvMBBTQqkuTWw0Ba0pErF3W791BWVas1ShkMP+NfYf4VzGOHoLHy7Z913xtV5fWCu2Gmr14yDt+ErP6Bb0wyfN3iEV3ZF/iAFcNZBIPujxXEKouMxgCgsKm7eomnOdiSX704JypopRvexQvtphiTlWYqogxuihAhrSkJLE+j9odXja8hLU0Qq4apE5VVCyUD09SfZbvf5IJPvN6mfKWhcp7k51pzef+QhixZe4leplyI9CczVFVW7LOJK2ajTYIT2RDbR3DNG0YByIh/bGySaHP1MS5rvX9CnNHmdRLEmYIyu7YrseYWmWBg2iMFyq4zj35jNPrVqj+IqEJaSFJsCKOE6OZh0sxCMWm4l/iEKAay4ismxYNAJmNoANt2ckhNwShWbfhfiOYViMsdQGPat6PTz1Czw4LZUMVa/7QoRYhCRPTzY4Mbc+0UuyZiNFNqHiu15GofSt7nowAg0zNwIEc6FEa3fSXllrkW0DFRBQiAscoIO855ZEDhDYQzEsQcM/ZIbYvm0VgdttVFJ5lJYUTFYC9eMTFjSusPjT0+j0/unJTf3pKS7k/HYw8ulpOx4j0EPsJjGnPVmvk3FTGLegxZDt8oEpuPPORU5qEYRNH8N17gR5cRYicg7WTGdfgXWbFiZpb2O1bBPIWDO4Fn8S68G1P59RyF+9dpznCHSiTeQCzxIb1uNtg412IgvXa4z0go2LdIzYYyNiEdzwZ+GMELtoky/VVDQATUs3YtoMM0A788uLGMioEnjqDLeIrfymhIitAryD4pLWLmkd2NjdD7yKW9maeO3C1jSuJtoryC+xpnE1DaVOykdoTbszANsLDnfkCg2qNVsq9GXeymo0SYFjWSg0F2hL5SI/nwvTcQGKUgojhcG5OQDqIj/GCnFHCqnCQPgSLx0XhaaKy2YTFqiXTPD4mqprJW+YZkggKxsCVEvtFZOaEHjhC8UErKVjZzP19LSS1ktrU+zzmeTfTvY2mJvtbfILY1IZHUm89DEv4iUJClM0cb/t7G1kJmp7G5XVvlHK/k4iRWo1mu1tMEaT9YsZn9XaNV6rZaffmjYV27mU2wpNUil86p19O2nnAzn9xms1CueyGkm5mSkuYa547ucInmHBu2sblUJf3t3K1xkbsWBGRqH/ShNrlE1wn4O+CJRScXqOqsImGiNZ2SR4qI7oXJLaMpU12My0nPBv/4ML8y1z2fDJrvG3pY6JzaDf4L0Um9pqHquUR+o+HYULWeO1mTEL3m4/Pj6yIpUletpW4Vymi3Ak03ZZOoM9KWoTHc5lDR6lqI3iaFGDd7Yve0eoHyehIZKZpB+t5NiiSxdSOPDdjXksJ2kNFZc7N0Q3bri2b3fOgXZHgi5CLEzLhQwNYk026OdKbmN8U6OTe4QZau6p9RiNzazG39kY0iIxjpQchYsar9lrg7VnGUgK2xy8ZMBrKlGyllH4aMdDNkX5ZBGOIrO27dvdevPDbtUWoZnV4Cp3Lrk9+yC3/t1b9O8SyyGMtXpWPkZPBChv8HWNr2sXPvpPpV5pNucyBUH70tMXEcUeQbGItgOvcoHI60Un0t4fckHr9bpBSaFhv+L+TQrHbeJOvAtVt0B7Sm3Aev5MaSbjVO6U5f7LBEpsL4Mv+UqOudyeVgp/2+QvksiX/jQ752/2PJuz2ocar72vZUglgKf+G67O79WTcC9JbR7qe6lrIGHzEMnHi2TFa96Ot+N79v8aaDn5g3c9/Psn/nUVviDNcFTg3ftbGU1nxiYkOpLK8Fq4NEmtOFZvt0FlhbwWH3C/7xF6huNjOD627rsvsuCVz/yE3z6U84g98HAuhZ/wV9e0sHeALK7xDOrGozIP0/uv7riMhM86jRCWIim6uUEGdau4QrZu4wmraUbxckALVH/R+tqGnJfuwYrftmDxJ51C4ZGlTjFAl+owN0ufi/H3RSjue6syQFjcp4hFSlq+RZuJbuhm0khaYSOkGN2sG0mFasYkLgOiskpknl+JzGv5ldg8DA8tPJGpi80L8U/TH/beE/SXnqgzjQ8Q0hP/wJ4Gp99SXj5lz3UwOdj2NURljNq7WLlDZCpKW4MUoWWlrVLdc3wx7i6kcXdOtfiR2CWGiFnKwPCw7FuJMm7VdiMqbwN0s6NbeyO5DT7JL4G6LX4GRBQXSclmpbjFqosqCGjqapTgmUHIQg5000cD0IANUCUJWzVtqG0Aa3xbNyO2pu0gK+g3gSijdJjTsmXWzy4/4AWGMyT+F8ehcqqJZBKluC+EKUU4HhIrxb/xb9/3NhrZE3rNVcsfYvEdlyYrSVWloDIeN6htFkzE8uXJMXhKrN6ILGVquUmtkH58qpPlYp6MUWrG4Rq5zTYzDu9kXEOr8o0kd9ICBaDONnhk+Sdp41lpxjcZbMZ8ai/BUmfQ7KridE16D0SDZo/bC2sz4ctOm4Rt/widcTAXhYMRmX1OCReS/I7SR6oaDAbsCJjv8IgBO0QPpt+1z11g+xB43rC4l+IiYVCreiPJtcRAQAUf7djfoqDI/XbVZVLlMiVZyXnT+xrEKHQfJNmTUEhmJ0qdWL2WxG/Nndgk7gWdCaFbjepFJWcetvapPWdF8f+taLAtmncZwiYXCK15NK7h+tvVoWA1lpaV05j6iPENf0vyQZIZFBPGeKFhBr+hk3mNlHGJ8/4HfQe30l7IsoEWL+4qkKqOkz5Ma7BxulZVw3rsWN0q8DyvjWWsWJGUkvcVufVtb2PYykfaNmyd/310f6LsG1g9h0uYOVmlYKFlKvWDPE8XcmQ+hSZKeG31IRr/+SEa78ylNDVIzTqWvPZYyLuferNS1P3Uq2VwIQnuppYjUwPcxRXHUSDTQrHuKhr2WHSLY0GVldglvbGaz6N0JIBL+O+0UPufWjNl5yoDXCoTmVjWYJAMqQtjSUFTQATPRvGUfmpJRjSDz1IMBoPah2ikE0vtNc/+U4PaRRyO7msQDGFQuzjePzw+qEHtU4Iaso9p15f+QXCNaXKcFzs89w/9PtZd6ulSjdc1YF3MON/vdjodzNDJoypSD4KOH3RrULuViyisAetgar9/3O8c1aD2UYdqWvTWP7o+6BzXoPanjOPksSh8eHlx0b2qQa2vZTrbeaOlLJvfvzzfPw5qUMtTbTvBQfeyi+28XSoj9fMane7h4eWVnfuy6NjzOtfnl3bq6zDeqeZcBgfdi7z0Tr5crqFuEBwf4ULcLPUCtyMYDqGGlzh6vgcB/nTwZx9/uvhzgD+HPd/HIshu8DfAnw7+7ONPF38O8Oew5wdYMLAFAywYYMEACwZYMMCCARbsYMEOFulgkQ4W6WCRDhbpuCJHPX/ftrWPifuYuO8Sj3sH4PUO7f+d3iHs9w6h2zsCr3cEfu8Igt4RdHpHsN87sukHvWPwe8cQ9I6h0zuG/d4xdHvHcFDDhXkT/DuRHR35Bx3vFeo57h8EAS70ZYimUlwDZitcX/mXQecZBV753f75fk6oOzeRKrek7x0cHuPGu0RHVIfHHf/qJamdH132O+c1qL2P5rIkEEtuXvf8wJJblaQ872C/G/xAUjbv+OCif40H50bq6DFS90gMbkCed3R5jnT+mwzjbVMHF53nBNi5CvrHnu0TbUaXeHjZ9c+DCoH5SGC4/YGjpxeEdlBS1r/QVE5O/0JIVfJ5RjQdOP4vNOP3DiF4RjuHcPD/TztDJJu+/acGtS+zyEhLUFd9/Ndu1nRmdt7ocG3T+1f9iyskhEstw7lL2u9713iSz+PwLkyN1Db5+uD6oG+3O3yQapynXgXXl/1u2a7dD9vI5bXf75TplpgcefX7fdylt4mS67F8dKndfvcKu7yQ0dQ1cH3eP+/7lQEjsdiM66uDiwNH/vH6MUnGron+df8KB3ITLsJ1uPNlFi1cee9q/xJ7/GUW3kd5Ur4+ru3LdaiKNvbtIl0mOozz8V57tvZtqMa14XAI31E+m+ReqndjlIZhOuMKJjI0Sy3Tjypecy0wxrEChtduRzq6u4vlzk2ozXrnf2pN+RN+VSfMvxZS2MX2SyCynZJjvM7Z8OU+RkVLcmw/U0B8+/EDifeP7XdCMFbMRuGIe+KBZwH9AphbK147jlQN1YiaH+DT3+hIuUUP1D8Yh/BF8gcSQiuh5ccb6EuDorhCqppEN/0WXv5zd+HLj8TgjUcMGXL3zjCmI6BnPkeDy/m6iQe+PKRtXx66QM7i+xulx2NHkWeXospbvc6sMD/AW8WnidDNQBvahtmlwnsRslvepVIOjEib+M2HgRpSSE5EWnZeyPrtCMoPdvzCFUQYuPE7T+ANj+CD5PY7SLSBPUv4mHvynFfEBR2X05KD1A54WJmQUx5zLMUGPxYhjicGb6QUuGBvC5ZgbKoqoRIMC2bpwjYjMTw020Ie96pAkbcGIiKYaHtFhA4p3X7ix5Ya+EMh1MAfnslBMGypQTDkmNjCNFoJaMfIUcTBuHzR9r81+6wFMpBDZ/cjpT2nsOpL5UNAne2XgM5dHKURfjUywwi/ZUANzJDQ3EH74pKgPLC3BBWpBN1ivLjbAlTf8U6Ig3hfhtWlooR+yeYctfEHZS/2h5ULmQPlPqGD8TPShgKyX6wJDEvxjmBq6NzJg2BIYeRmkzoXc4Hj4KTPFbRW5Lq8pV8sYxvRyCsk2NzcRTD3WZEc5/2keEQCjHluY8SwxQnGIrZkYkitV0PYYJP1wu12OLRlOpBDscmgzDBDZ8FjxsAMxe54e9P/GxrMsLfR2Tf0Sz/P0YU9nVmcorxaY7ElDz1luJaFhY1uOlNc2CwiDIrPSjV9WrnLuQW8FEwHuFjDgcHfwsjGq7YDg85rviy/TGXxpQ92Tm5fF9hLM2n64KLr9dAaXKIIGF3YTydgCL2YFL1Xg62Fvw3qeo+G2R5+7O1R8SW8U3wCF4rPMnd/LEY3ZixCUrgtd2N2UdwCwMojrLzEymOsPM1EXGl6tM2AO4Uxoewjhibg0fksoQOHECMPRk/2El0o4+zHU2QN5y3d5jjMbZEAN8rae9nXURIn+uveBq+ZLeJwJEltpwYIlX4r3DTbiRusmlom8wx6U/bOiPuiAbtFJ6z1oyFZsBuVfcW/pUsIMaZnrp7EOnrQm5NRMmKP+Dml1wKYX3HdvQyG236gyC3CD34cgwRP8PfszLOxxrAiuf/nIYyXMkVxU7K9RqODRj5ya8RZLboRYiS17EBVcifbRUc/KK6cdhicfb1GEPQKodmPRLF3aqArAN/LE32FNT4qrgfKLr49zZGoIhDXahuaHVqn1hbN/liArGyC8SztgoJtnFSCt82u8xKDss5VWedclVgV1NAelsje7UXjCBzLZ1cKOZZkHxWbIG9yt4+BbCdrQbaBB/KM+K0URZb6satPODzaCInCcNItkb1RfICRbsshNoVhGqiaFOc0wta2Pn/F3igULtRx86JU+u+lXsQN2PX8gIfmjXq+EbIVI+ttk9FADd2z7aVa8R+s+OF5Rb9lv5XQaCR5lWc1viiBm/WPchnP5Sb7olqKfVEu2P0axdUNSnmN513ZP72kutFwlS+2IfmmLJQlGRLCyF31Lq4eLLefd9mMy03YXqWChRgMajdSpTUYsfcKtd8bqXYuk6UyNZjmRYcIHd2SQ0cM31yJONHoH2362TeQJ0XRMxQi7EHx2gnCMKc1pJUBKuhSu0rY051iD2pY+JN3PSGEPtugG5AnEBqjo7ulkSlfZLxITR+m/DdpA4CXtgX4FZFODN6a2Ds15bdPthr4nTWgo9fuAmAIX8cr6e9vxQetAAJ7QXpY0lAhh7QT2IkwDQXXRG+5xR2RzYS+hIE1JEjBvyvuejqi7X14q6yv51fFA9naR76n8MZ9KnS7Y7/TEbFfFX5SoSFZ1MZbV+IBtT3Pa6SI0j5HYO+mNYjY39vIoGKSDhNG5Y/9biFWDGp+K21n9qZ2xN7aU2gBNedGxCst9m7aB2mvsE7QJ5g/DXOELUFnY46tpfQV1PNu+jroSZGjPd9Vu0gT9+erFIolPblaJNpsvsqdMN0ZaRka+XFpFkuT9f4vwe+izU9WAAA=' const workerCode = `self.onmessage = async e => self.postMessage((await import('data:text/javascript;charset=utf-8,'+encodeURIComponent(await new Response(new Blob([Uint8Array.from(atob('${compressedArtCode}'), c => c.charCodeAt(0))]).stream().pipeThrough(new DecompressionStream('gzip'))).text()))).createOutput(e.data))` const worker = new Worker(URL.createObjectURL(new Blob([workerCode], {type:'application/javascript'}))) const downloadSVG = (svg, filename) => { const url = URL.createObjectURL(new Blob([svg], {type:'image/svg+xml'})) const a = document.createElement('a') a.href = url a.download = filename document.body.appendChild(a) a.click() document.body.removeChild(a) URL.revokeObjectURL(url) } worker.onmessage = ({data:{name, svg}}) => { document.title = name document.body.removeChild(loading) append(document.body, svg) window.generatedSVG = svg document.addEventListener('keydown', e => e.code == 'KeyS' && downloadSVG(svg, name.replace('#','')+'.svg')) } worker.postMessage(tokenData)
It’s a party! Scribble Party continues my exploration of recursive scribbling and plottable works, introducing figures drawn in dynamic, flowing forms that often resemble dance-like movements. Each piece also represents the minter's participation in the game. Inspired by party games, a countdown clock starts with the first mint of the game. Subsequent mints will extend the game by resetting the clock to a minimum time threshold if less time remains. No more mints can occur once the clock reaches zero. Each mint also contributes to a prize, which can be withdrawn by whoever holds the last minted piece. As the game progresses, the contribution of each mint to the prize diminishes, and the clock extensions shorten, accelerating the game towards a conclusion. The artwork is designed to be plotted on Arch A (9"x12") paper with 0.45mm or 0.5mm pens. The pen colors are selected from popular commercially available sets, ensuring easy replication.
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId="b f e f 0 381 1 7 h 0 1 1 j1 db4 96 66 0b2h 25 ei1 5g b5 jh1d 10c j 9b 50c9 fi a7aa 1d b d ac05h115a f1 9033032 0c 6 1j 9f2j 31 a c caa 6f 7 dc5 8 a a3 gfa 52 hd2fb8 h a1 j0 c1921 dj c5 2f36d9 5 5 99 d 5h43gf7bdiaf0 e91 de jh 0 c0 0 d7 b2j8 8 2 7 i 052080ei567f5jh h95h a8 9df5 e ija3f8j 4f1 19g020e55 b4 c5 1 i ac aj b";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId="b f 0 1 1 1 j1 db 9 66 0b2h 5 e 1 b5 jh5d 10c j 9b 50c9 fi a7aa 1d b d ac05h1i5a f1 203303 6 1j f j 31 a d 8aa 6f 7 c5 8 a a3 gfa 52 hd2fb a c1921 dj c5 2f36d9 5 5 99 d h43gf7bdiaf0 e91 de jh 0 c0 0 d7 b2j8 8 i 0b2 10ei5 jh h9 a8 9df5 4f1 2 ";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId="b f 0 1 1 1 j1 db 9 66 0b2h 5 e 1 b5 jh5d 10c j 9 50c9 fi a7aa 1d b d ac05h1i5a f1 203303 6 1j f j 31 d 8aa 6f 7 c5 8 a a3 gfa 52 hd2fb a c1921 dj c5 2f36d9 5 5 9 d h43gf7bdiaf0 e91 de jh 0 c0 0 d7 b2j8 8 i 0b2 10ei5 jh h9 a8 9df";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId="b f 0 1 1 1 j1 db 9 66 0b2h 5 e 1 b5 jh5d 10c j 9 50c9 fi a7aa 1d b d ac05h1i5a f1 203303 6 1j f j 31 d 8aa 6f 7 c5 8 a a3 gfa 52 hd2fb a c1921 dj c5 2f36d9 5 5 9 d h43gf7bdiaf0 e91 de jh 0 c0 0 d7 b2j8 8 i 0b 0ei5";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId="b f 0 1 1 1 j1 db 9 66 0b2h 5 e 1 b5 j d 10c 50c9 fi a7aa 1d b d ac05h1i5a f1 203303 6 1j f j 31 d 8aa 6f 7 c5 8 a a3 gfa 52 hd2fb a c1921 dj c5 2f36d9 5 5 9 d h43gf7bdiaf0 e91 de jh 0 c0 0 d7 b2j8 8";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId="b f 0 1 1 1 j1 db 9 66 0b2h 5 e 1 b5 j d 10c fi a7aa 1d b d ac05h1i5a f1 203303 6 1j f j 31 d 8aa 6f 7 c5 8 a a3 gfa 52 hd2fb a c1921 dj c5 2f36d9 5 5 9 d de jh 0 c0 0 ";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId="b f 0 1 1 1 j1 db 9 66 0b2h 5 e 1 b5 j d 10c fi a7aa 1d b d ac05h1i5a f1 203303 6 1j f j 31 d 8aa 6f 7 c5 8 a a3 gfa 52 hd2fb a c1921 dj c5 2f36d9 5 5 9 d de jh 0 c";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId=" f 0 1 1 1 j1 db 9 66 0b2h 5 e b5 j d 10c fi a7aa 1d b d ac05h1i5a f1 20330 6 1j j 31 d 8aa f 7 c5 8 a a3 gf fb 1 21 2f36d9 5 de jh 0 c";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId=" f 0 1 1 1 j1 db 9 66 0b2h 5 e b5 j d 10c fi a7aa 1d b d ac05h1i a f1 20330 6 1j j 31 d 8aa f 7 c5 8 a a3 gf fb ";
/* minimizer, 2024. https://minimizer.art/ */ let paletteOverridesByTokenId=" f 0 1 1 1 j1 db 66 0b h 5 e b5 j d 10c fi a7aa 1d b d ac05h1i a f1 20330 1j j 31 aa 7 5 8 a a3 gf fb ";
What’s a great way to have fun with friends? Scribbling! Scribble Together is an experiment in collaborative creation. I designed a scribbling algorithm without knowing what the eventual colors will be. I’ve then asked friends to create palettes using a custom palette tool. The palettes may allow for some variety such as choosing from multiple paper colors or selecting a subsample from a set of pen colors. Additionally, palette creators were able to create more than one palette. When a piece is minted, it is randomly assigned a palette. However, for a limited time, collectors can change the palette for their pieces. Collector’s choices during this time will affect how primary sales are distributed to palette creators. The artwork is designed to be plotted on 9"x12" paper using 0.45mm or 0.5mm pens. Whether the specific palette for a given piece allows for plotting is a choice left to the palette creator.
What’s a great way to have fun with friends? Scribbling! Scribble Together is an experiment in collaborative creation. I designed a scribbling algorithm without knowing what the eventual colors will be. I’ve then asked friends to create palettes using a custom palette tool. The palettes may allow for some variety such as choosing from multiple paper colors or selecting a subsample from a set of pen colors. Additionally, palette creators were able to create more than one palette. When a piece is minted, it is randomly assigned a palette. However, for a limited time, collectors can change the palette for their pieces. Collector’s choices during this time will affect how primary sales are distributed to palette creators. The artwork is designed to be plotted on 9"x12" paper using 0.45mm or 0.5mm pens. Whether the specific palette for a given piece is allows for plotting is a choice left to the palette creator.
/* minimizer, 2024. https://minimizer.art/ */ (()=>{let m=Math,G=Array,c=Object,v=parseInt,u={AD:(e,t,r,a)=>({x1:e,y1:t,x2:r,y2:a,w:r-e,h:a-t})},h=(()=>{{let r=G.isArray,t=e=>"string"==typeof e?e:`<${e.tag}${c.entries(e.values).map(([e,t])=>` ${e}="${t}"`).join("")}${0==e.$0.length?"/":""}>`+e.$0.map(t).join("")+(0<e.$0.length?`</${e.tag}>`:"");return{AO:(e,...t)=>({tag:e,values:t.filter(e=>!r(e)).reduce((e,t)=>({...e,...t}),{}),$0:t.filter(e=>r(e)).flat()}),toXML:t}}})();var{tokenId:e,hash:t}=tokenData,e=(({tokenId:e,hash:t,paletteOptions:r,paletteOverridesByTokenId:a,Ae:n,featuresOnly:l})=>{o=n,(n={$F:{$e:(n=u.AD)(0,0,7500,1e4),$p:n(400,400,7100,9600),$c:400,$o:18},Ah:(e,t)=>o?t:e}).$x=(()=>{var{floor:e,ceil:t,min:r,max:a,abs:n,AM:l,sin:i,cos:o,acos:s,atan2:p,PI:d}=m;return{floor:e,ceil:t,min:r,max:a,abs:n,mod:(e,t)=>(e%t+t)%t,AM:l,sin:i,cos:o,acos:s,atan2:p,PI:d,AK:(e,t,r)=>e*(1-r)+t*r,$y:(e,t,r)=>e<t?t:r<e?r:e,AP:e=>[...G(e+1)].map((e,t)=>t),sum:e=>e.reduce((e,t)=>e+t,0)}})(),n.rng=(()=>{let a=e=>{let[t,r,a,n]=e.match(/.{8}/g).map(e=>v(e,16));return()=>{t|=0,r|=0,a|=0,n|=0;var e=(t+r|0)+n|0;return n=n+1|0,t=r^r>>>9,r=a+(a<<3)|0,a=(a=a<<21|a>>>11)+e|0,(e>>>0)/4294967296}},t=r=>{let l=(e,t)=>m.floor(e+(t+1-e)*r()),e=(e,t)=>l(1,t)<=e,t=()=>e(1,2)?1:-1,i=()=>l(0,1e7)/1e7,o=(t,r)=>{if(!r)return l(0,t.length-1);var e=t.map(r).reduce((e,t)=>e+t,0),a=i()*e;let n=0;for(let e=0;e<t.length;e++)if(a<=(n+=r(t[e])))return e;return t.length-1};return{U:l,$u:e,AM:t,$O:i,$_:e=>t()*i()*e,$P:(e,t,r=1)=>{if(1==r)return e[o(e,t)];for(var a=e.slice(),n=[];n.length<r&&0<a.length;){var l=o(a,t);n.push(...a.splice(l,1))}return n},$H:(e,t)=>e.map(e=>[e,t(e),i()]).sort((e,t)=>e[1]==t[1]?e[2]-t[2]:e[1]-t[1]).map(e=>e[0]),AB:e=>e.map(e=>[e,i()]).sort((e,t)=>e[1]-t[1]).map(([e])=>e)}};return{$S:r=>t((()=>{var t=(()=>{let e=r.slice(2).match(/.{32}/g).map(a),t=1;return()=>(t=1-t,e[t]())})();for(let e=0;e<1e6;e++)t();return t})()),AE:e=>t(a(e.toString(16).padStart(32,"0")))}})(),n.$g=(({$x:e})=>{let{$y:i,sin:l,PI:o}=e,s=(e,t,r,a)=>{let n=0;var l=()=>n=i(n+a.AM()*r,e,t);for(let e=0;e<10;e++)l();return l};return{$E:(e,t,r)=>{let a=r.$O()*t,n=s(1/t,1/e,1/(t+e)/10,r);return()=>(a+=n(),l(a*o*2)/2+.5)},$C:s}})(n),n.$2=(({$x:e,$F:t})=>{let{floor:v,ceil:k,min:w,max:S,abs:C,sin:o,cos:s,PI:p,$y:i}=e,d=t.$p,m=(e,t,r,a)=>({x:v(e),y:v(t),r:v(r),p:v(a)}),c=(e,t)=>((e.x-t.x)**2+(e.y-t.y)**2)**.5,u=(e,t)=>c(e,t)-e.r-t.r-S(e.p,t.p),h=e=>{let l=(()=>{let a,e;var t=()=>{a=[],e=[]};t();let l=e=>v(e/150),n=(r,a)=>{var n=S(0,r.p);for(let t=l(r.x-r.r-n);t<=l(r.x+r.r+n);t++)for(let e=l(r.y-r.r-n);e<=l(r.y+r.r+n);e++)if(a(t,e))return!0},i=(e,t)=>!!e&&t(e),o=(e,r)=>n(e,(e,t)=>i(!!a[e]&&a[e][t],r));return{$T:()=>e,AJ:r=>{n(r,(e,t)=>{a[e]||(a[e]=[]),a[e][t]||(a[e][t]=[]),a[e][t].push(r)}),e.push(r)},J:(t,r=()=>!0)=>o(t,e=>e.some(e=>u(t,e)<0&&r(e))),q:r=>o(r,e=>e.some(e=>{return t=r,c(t,e)<e.r-t.r;var t})),$8:r=>{let a=!1,n;return o(r,e=>e.filter(e=>{var t;u(r,e)<0&&(t=c(r,e),!a||n>t)&&(a=e,n=t)})),a},$f:t}})(),t=(({x1:c,x2:e,y1:u,y2:h,w:t,h:r},g)=>{t=k(t/20);let x=k(r/20),f=(e=>{e=k(e/32);let r=new Uint32Array(e);return{get:e=>0!=(r[v(e/32)]&1<<e%32),set:e=>{var t=v(e/32),e=e%32;r[t]|=1<<e},$f:()=>r.fill(0)}})(t*x),y=0;return{A8:({x:t,y:r,r:a,p:n})=>{a+=S(0,n/4);var n=S(t-a,c),l=w(t+a,e),i=S(r-a,u),o=w(r+a,h);for(let e=n;e<=l;e+=20){var s=(a**2-C(e-t)**2)**.5,p=S(r-s,i),s=w(r+s,o),d=v((e-c)/20),p=v((p-u)/20),s=k((s-u)/20),p=d*x+p,m=d*x+s;for(let e=p;e<=m;e++)g&&g.AY.get(e)||f.get(e)||(f.set(e),y+=400)}},AY:f,$f:()=>{f.$f(),y=0},$n:()=>y}})(d,e),i=l.$T;var{J:e,q:r}=l,a=t.$n;return{$f:()=>{l.$f(),t.$f()},$I:e=>{l.AJ(e),t.A8(e)},$2:i,J:e,q:r,$:a,X:(e,t,r)=>{var a=r.$P(i()),n=2*r.$O()*p,r=r.$O()**.5*(a.r-e);return m(a.x+o(n)*r,a.y+s(n)*r,e,t)},Z:e=>{var t=l.$8(e);if(t){var r,a=c(e,t),n=t.r-e.r;if(0<(n=S(a-n,0)))return r=(t.x-e.x)*n/a,t=(t.y-e.y)*n/a,m(e.x+r,e.y+t,e.r,e.p)}return e},$B:()=>h(t)}},g=({x:e,y:t,r},{x1:a,y1:n,x2:l,y2:i})=>a<e-r&&e+r<l&&n<t-r&&t+r<i;return{A9:m,$M:c,$K:h,Q:(e,n)=>{let t=h();return e.map(e=>e.$2().map(({x:e,y:t,r,p:a})=>m(e,t,r,S(a,n))).map(t.$I)),t},$b:(n,l)=>({$:()=>d.w*d.h,q:({x:e,y:t,r,p:a})=>g({x:e,y:t,r:S(0,r-a*l)+n},d)&&g({x:e,y:t,r:r},d),X:(e,t,r)=>m(r.U(d.x1+e,d.x2-e),r.U(d.y1+e,d.y2-e),e,t),Z:({x:e,y:t,r,p:a})=>m(i(e,d.x1+r,d.x2-r),i(t,d.y1+r,d.y2-r),r,a)})}})(n),n.$q=(({$x:e,$2:t,$g:i})=>{let{abs:w,$y:S,sin:C,cos:b,acos:I,PI:P,AK:R}=e,{A9:A,$M:O,$K:y}=t,u=(e,t,r,a,n)=>{let l=i.$E(r,a,n);return()=>R(e,t,l())};return{A$:(r,a,n,t,l)=>{let{$R:e,$7:i}=l,o=y();var s={$q:[],AF:o,$R:e};let p=o.$B();var d,m,c,u,h=e=>t(e)&&!o.J(e),g=e=>p.$()+o.$()>r||e.$T.length>=i.AI;for(let e=0;e<100&&o.$()<.9*r;e++){let e=[],t=0;for(;t<300&&o.$()<r;){var x=i.$h(),f=i.$Z();(x=((e,t,r,i,{$7:o,$v:n})=>{let s=[];var a={$T:s};let p=()=>s.length,d=e=>p()>e?s[p()-1-e]:null,l=(e,t,r,a,n)=>A(e.x+b(t/180*P)*r,e.y+C(t/180*P)*r,a,n),m=e=>{return p()<2||(t=d(0),r=d(1),55<=I(S(((e.x-t.x)*(r.x-t.x)+(e.y-t.y)*(r.y-t.y))/(((e.x-t.x)**2+(e.y-t.y)**2)**.5*((r.x-t.x)**2+(r.y-t.y)**2)**.5),-1,1))*(180/P));var t,r},c=(t,r)=>!i.J(t,e=>O(t,e)<w(e.A_-r+1)*o.AL*.5),u=e=>m(e)&&t(e)&&c(e,e.A_??p()),h,g;var x=t=>{if(t.A_=p(),s.push(t),i.$I(t),d(1),p()>o.$3){var r=d(o.$3);for(let e=1;e<o.$3-1;e++){var a=t,n=r,l=e/o.$3;(a=A(R(a.x,n.x,l),R(a.y,n.y,l),R(a.r,n.r,l),R(a.p,n.p,l))).A_=t.A_-e,u(a)&&i.$I(a)}}h=o.$h(),g=o.$Z()};let f=e=>{var t=d(0),r=l(t,e,o.AL,h,g),a=h*n.$s.$W;if(u(r)&&(a<o.AL||u(l(t,e,a,R(h,o.$U,n.$s.$Q),g))))return r};var y=n.$5(d,f,e=>{for(var t of e)if(t=f(t))return t});if(u(e))for(x(e);!r(a);){var{done:v,value:k}=y.next();if(v)break;x(k)}return a})(0==e.length?a.X(x,f,n):a.Z(([{x,y:f},d,m,c,u=10]=[n.$P(e),x,f,n],A(x+c.$_(u)*d,f+c.$_(u)*d,d,m))),h,g,p,l)).$T.length>=i.AH?(e=[...e,...x.$T],s.$q.push(x),p.$2().map(o.$I),t=0):t++,p.$f()}}return s},$Y:(e,t,r,a,n,l,i,o,s,p,d)=>{var m=t/r*d.U(5,15),c=m*d.U(2,6);return{AU:e,$U:t,$h:u(e,t,m,c,d),AL:r,AH:a,AI:n,A4:i,AQ:o,$Z:u(i,o,m*s,c*s,d),E:p,$3:l}}}})(n),n.Ac=(({$x:e,$2:t,$F:r})=>{let{max:i,atan2:n,PI:l,AK:o}=e,s=t.$M,p=r.$e,d=e=>({x:e.U(p.x1,p.x2),y:e.U(p.y1,p.y2)}),m=e=>{let r=d(e),a=360*e.$O();return({x:e,y:t})=>n(r.y-t,r.x-e)/l*180+a},a=r=>{var a=o(.1,.7,r.$O())*p.w;let n=.7*a,e=(r.$u(1,3)?m:e=>{let t=360*e.$O();return({})=>t})(r),l=[];for(let e=0;e<10;e++){let t=d(r);l.every(e=>s(e,t)>2*n)&&l.push((({x:t,y:r},a,n)=>({x:t,y:r,r:a,p:0,t:n,AR:e=>i(0,a-((e.x-t)**2+(e.y-r)**2)**.5)*n/a}))(t,a,r.U(45,90)*r.AM()))}return r=>e(r)+l.reduce((e,t)=>e+t.AR(r),0)};return{$m:e=>e.$P([m,a])(e)}})(n),n.AX=(({$x:e,$2:t,$g:c,Ac:r})=>{let{floor:n,min:l,mod:a,atan2:o,PI:s,AK:p,AP:i,sum:u}=e;var{}=t;let h=r.$m,d=e=>0==e?0:a(e,360),m=(r,e,a=[-1,1])=>i(e).map(t=>a.map(e=>e*t*r)).flat().filter((e,t,r)=>0==t||!r.slice(0,t).map(d).includes(d(e))),g=(e,t)=>{var r=l(2.5*e.$U,e.$4/4),a=l(3*r,e.$4/4);return p(r,a,t.$O())/e.AL},x=(e,t)=>()=>()=>0,f=(e,t)=>{let r=g(e,t),a=5*t.U(6,12);return()=>{let e=0;return()=>1<=e++/r%2?-a:a}},y=(e,t)=>{let r=g(e,t),a=360/t.U(4,8);return()=>{let e=0;return()=>n(e++/r)*a}},v=(e,t)=>{let r=g(e,t),a=5*t.U(6,18);return()=>{let t=0;return()=>{var e=++t/(2*r)%2;return e<1?p(-a,a,e):p(a,-a,e-1)}}},k=(e,t)=>{let r=g(e,t),a=5*t.U(6,36);return()=>{let e=0;return()=>e++/r*a}},w=(l,i,o,s,p,d)=>(e,t)=>{var r=e.$P(s);let a=m(r,o/r,i);var n=((p,e)=>{let d=((e,t,r)=>{let a=r.U(e,t);return[()=>a,c.$C(-.1,.1,.1/3,r)]})(-p.AC,-p.AC/2,e),m=h(e);return(o,s,e)=>function*(){let e=0,t=!1;for(;!t;){t=!0;var r,a=u(d.map(e=>e())),n=m(o(0)),l=e+a;for(r of p.$A(n+l)){var i=s(n+l+r);if(i){yield i,t=!1,e=e*(1-p.$k)+(l+r)*p.$k;break}}}}()})(r={$A:e=>a,$k:l,E:p,AC:d},e),r=R(e.$O()*r.E*t.E,e.$O());return A(n,r)},S=l=>{let i=m(10,18);return A((a,e,n)=>function*(){let e=a(0);for(;;){l.$u(1,10)&&(e={x:p(a(0).x,e.x,.9),y:p(a(0).y,e.y,.9)});var r=a(0);let t=o(e.y-r.y,e.x-r.x)/s*180;if(!(r=n(i.map(e=>e+t))))break;yield r}}(),R(0))},C=(e,t,r)=>b(e,t,(e,t)=>{let i=h(e),o=((e,t,r)=>{let a=[(()=>{let t=5*r.U(1,3);return()=>{let e=r.U(-t,t);return()=>e}})(),(()=>{let e=3*r.U(3,5);return()=>c.$C(-e,e,e/10,r)})(),e(t,r)];return()=>{let e=a.map(e=>e());return()=>u(e.map(e=>e()))}})(r,t,e),s=m(15,3*e.U(0,2));return A((n,e,l)=>function*(){for(var e=o();;){var r=n(0),a=e();let t=i(r)+a;if(!(r=l(s.map(e=>e+t))))break;yield r}}(),R(0))}),b=(e,t,r)=>({$u:e,$N:t,$t:r}),I=()=>!0,P=(r,a)=>({$4:e,$U:t})=>r<e/t&&e/t<a,R=(e,t)=>({$W:e,$Q:t}),A=(e,t)=>({$5:e,$s:t});return{A5:t=>{var e=e=>e*(t.$u(1,20)?100:1)*(t.$u(1,40)?1e4:1);return{Ad:b(e(15),P(3,50),w(1,[-1,1],180,[30,45,60,90,90],0,0)),A2:b(e(7),I,w(1,[-1,1],180,[15],3,30)),AA:b(e(2),I,w(0,[-1],360,[15],3,30)),A1:b(e(2),I,w(0,[1],360,[15],3,30)),AS:b(e(3),P(3,20),S),AZ:C(e(5),P(5,50),x),Aa:C(e(10),P(10,50),f),AT:C(e(10),P(10,50),y),Ag:C(e(7),P(10,50),v),Af:C(e(5),P(10,50),k)}}}})(n),n.AG=(({$x:e,$2:t,$q:r,AX:a,$F:n})=>{let{floor:$,ceil:B,min:D,max:j,$y:V,AK:N,sum:o}=e,i=t.$b,H=r.$Y,s=a.A5,{$o:p,$p:d,$c:m}=n;return{$X:k=>{let t=(e,t)=>({AV:e,AW:t,$d:()=>N(e,t,k.$O())});var e=e=>t(...[e(),e()].sort());let w=D(d.w,d.h)/2,S=$(p/2),C=2.5*S,b=1.5*S;var r=N(0,m,k.$O()),a=k.U(0,5),n=k.U(5,20),l=w*N(.015,.08,k.$O()**1.8);let I=k.U(k.U(1,6),10),P=e(()=>k.U(3,8)),R=t(1,1),A=t(.6,1),O=e(()=>1+2*k.$O()),z=t(.8,1.2),W=(k.U(3,5),e=>$(e<2*S?S:e)),M=c.values(s(k)),T=M,L=0,F=(x,e,t,f,y)=>{let v=((e,t)=>{var r,a,n;let l=e=1==t?[e]:(r=S,a=e,n=t,[...G(n)].map((e,t)=>r*(a/r)**(t/(n-1))).reverse().map(W)),i=o(l);return e.map((e,t)=>({Ab:e,AN:l[t]/i}))})(e,t);return v.map(({Ab:e,AN:t})=>{var r=L++,a=e==S,n=e,l=x,i=y,n=((u=a)?A:R).$d()*n,o=(u?z:O).$d(),o=D(.75*l,n*o),s=j(.25*n,S),p=B(k.U(1,3)*n/s),d=j(p,$(n/s*(3**k.U(k.U(k.U(0,I),I),I)-(u?0:1))*(u?10:1))),m=u?0:3*B(n/s),c=l==w?C:b,i=u?k.$O()*S*.25+(i?0:-S/2):j(.3*n,c),c=u?S+i:V(l/10*.3,c,2*i),u=u?1e3:1/3,h=V(l-5*o,0,1);(n=H(n,o,s,p,d,m,i,c,u,h,k)).$4=l;let g=n;return o=k.$P((a?T:M).filter(e=>e.$N(g)),e=>e.$u).$t(k,g),s=(y?1:t)*(e==S?k.U(5,6)/6:1),p=a||k.$u(1,3),m=(d=W(N(S,e/P.$d(),.5+k.$O()/2)))==S?k.$u(1,3)?1:2:k.U(1==v.length?2:1,2),i=d>S||a||f||2!=m,c=d==S&&2==m,u=!i&&(c||k.$u(2,4)),h=a?[]:F(e,d,m,f||u,u),{$R:r,$i:a,$7:g,$v:o,$a:s,$l:p,K:u,$0:h}})};return[F(w,l,n,!1,!1),i(r,a)]}}})(n),n.$j=(({$x:e})=>{let{floor:u,$y:h,min:g,mod:x,AP:l}=e,f=e=>({values:e}),y=e=>e.flat(1e9).map(e=>e.values);return{Y:([e,t,r,n,a,l],i)=>{var o=([e,t])=>({$1:e,name:t});let s=i.$H(i.$H(n,e=>e[2]?0:1).slice(0,r),e=>e[3]).map(o),p=a.split(";"),d={},m=(n.map(([r],a)=>{d[r]={},n.map(([e],t)=>{d[r][e]=!p.includes(a+","+t)&&!p.includes(t+","+a)})}),o(i.$P(l))),c=i.U(5,16);return r={A3:[-2,-1,1,2].map(e=>{return r=c*e,m.$1.match(/.{2}/g).map(e=>{return t=r,u(h(v(e,16)+t,0,255)).toString(16).padStart(2,"0");var t}).join("");var r}),$z:i.U(5,8)/4,A0:500*i.U(2,6)},[{$r:s,$L:(e,t)=>d[e.$1][t.$1],A7:m,$6:r},[["Palette Name",t],["Palette By",e],["Paper Color",m.name],...[...G(5)].map((e,t)=>["Pen Color "+(t+1),t<s.length?s[t].name:"<none>"])]]},$9:(e,d,m)=>{e={K:!1,$0:e,$i:!1};let a=({$R:e,K:t,$0:r})=>0==r.length?f([e]):t?f(r.map(e=>e.$R)):r.map(a),c=y(a(e)),r=e=>g(e,2),t=l(99).map(e=>{{var t=c,p=m;let{$r:a,$L:r}=d,n=p.AB(y(a.map((t,e)=>a.slice(e).filter(e=>r(t,e)).map(e=>f(p.AB([t,e])))))),l={},i={},o=e=>i[e.$1]??0,s=(e,t)=>{i[t.$1]=(i[t.$1]??0)+1,l[e]=t};return p.$H(t,e=>-e.length).forEach((e,t)=>{var r;2==e.length?([t,r]=n[x(t,n.length)],s(e[0],t),s(e[1],r)):(t=p.$H(a,e=>g(2,o(e)))[0],s(e[0],t))}),t=g(...a.map(o)),{$J:l,$w:t}}}).sort((e,t)=>r(t.$w)-r(e.$w))[0].$J,n=e=>e.$i?e.color=t[e.$R]:e.$0.map(n);n(e)}}})(n),n.svg=h;let i=n;var o,e="Scribble Together #"+(n=e%1e6),s=()=>i.rng.$S(t),[p,d]=i.AG.$X(s()),[r,n]=((e,t,r,a)=>{var[t,n]=a.$j.Y(t,r);return a.$j.$9(e,t,r),[t,n]})(p,((e,t,r,a,n)=>{var l=e.length;let i=e[v(r.slice(-8),16)%l];return(r=a[t])&&" "!=r&&(l=v(r,36),i=e[l]),n.$P(i)})(r,n,t,a,s()),s(),i);return!0===l?[e,"",n]:[e,((e,t,r,a,{$F:n,svg:l,$x:i})=>{let o=i.floor,{$o:s,$e:p}=n,{AO:d,toXML:m}=l,c=(e,t,...r)=>d(e,{id:t},...r),u=(e,...t)=>d("use",{href:"#"+e},...t),h=(i=e=>`url(#${e})`,e=>({stroke:"#"+e,"stroke-linecap":"round","stroke-linejoin":"round",fill:"none"})),g=e=>({"stroke-width":e}),x=(e,t)=>({d:[...G(e).keys()].map(t).join("")}),f=({x:e,y:t})=>o(e)+","+o(t);return n=d("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:inkscape":"http://www.inkscape.org/namespaces/inkscape",viewBox:`${p.x1} ${p.y1} ${p.w} `+p.h,width:"100vw",height:"100vh"},[d("defs",[c("rect","frame",{x:p.x1,y:p.y1,width:p.w,height:p.h}),c("marker","dots",{viewBox:"0 0 100 100",refX:50,refY:50,markerWidth:100,markerHeight:100,orient:"auto"},t.$6.A3.map(e=>d("path",h(e),g(t.$6.$z),x(40,()=>`M${r.U(1,99)},${r.U(1,99)}l0,0`)))),c("path","back",x(t.$6.A0,e=>(0<e?"L":"M")+r.U(p.x1,p.x2)+","+r.U(p.y1,p.y2))),c("clipPath","clip",[u("frame")])]),u("frame",{stroke:"none",fill:"#"+t.A7.$1},[d("title",[a])]),u("back",h("none"),g(10),{"marker-mid":i("dots"),"clip-path":i("clip")}),...e.map(e=>c("g",e.A6,{"inkscape:groupmode":"layer","inkscape:label":e.A6},h(e.$G),g(s-4),{"stroke-opacity":"100%"},e.$D.map(e=>c("path",e.$V,{d:e.$q.map(e=>{return(r=e.$T).map((e,t)=>0==t?"M"+f(r[0])+(1==r.length?"l0,0":""):`Q${f(e)} `+(t==r.length-1?f(e):(t=r[t+1],o((t.x+e.x)/2)+","+o((t.y+e.y)/2)))).join("");var r}).join("")})))),d("g",e.map(t=>t.$D.map(e=>u(e.$V,h(t.$G),g(s-2),{"stroke-opacity":"25%"}))).flat(),e.map(t=>t.$D.map(e=>u(e.$V,h(t.$G),g(s),{"stroke-opacity":"25%"}))).flat())]),m(n)})(((e,t,r,m,a)=>{let c=a.$2.Q,u=a.$q.A$,h=r.$r.map(({$1:e,name:t},r)=>({$G:e,A6:r+"_color_"+t,$D:[]})),g=(e,t,r,a)=>{let n=[];var l,i=r?()=>!1:t=>n.some(e=>e.J(t));let o=0,s=0;for(l of e){r&&(o=0,s=0);var p=(o+=t.$()*l.$a)-s,p=((e,t,r,a,n)=>{var l,{$l:i,K:o,$0:s,color:p,$7:d}=e,r=u(r,t,m,e=>t.q(e)&&!a(e),e);return p&&([l,e]=[p.$1,r],p=h.find(e=>e.$G==l),e.$V=p.A6+"_"+p.$D.length,p.$D.push(e)),0<r.$q.length&&(p=g(s,r.AF,o,n+1),!i)?c(p,d.A4):r.AF})(l,t,p,i,a);s+=p.$(),n.push(p)}return n};return g(e,t,!1,0),h})(p,d,r,s(),i),r,s(),e,i),n]})({tokenId:e,hash:t,paletteOptions:paletteOptions,paletteOverridesByTokenId:paletteOverridesByTokenId})[1];(t=document.createElement("template")).innerHTML=e,document.body.append(t.content.firstChild)})();
/* minimizer, 2024. https://minimizer.art/ */ let paletteOptions=[[["Alex - Generative Artworks","Dusk",2,[["083D77","Dark blue",1,0],["DA4167","Cerise",!1,0],["F4D35E","Yellow",!1,0],["F78764","Coral",!1,0]],"",[["EBEBD3","Beige"]]],["Alex - Generative Artworks","Saxi",4,[["0A0A0A","Blackest black",0,0],["141414","More black",!1,0],["1F1F1F","Less black",!1,0],["292929","Least black",!1,0]],"",[["FFFBFC","White"]]]],[["Bryan Brinkman","Brinkman",4,[["f2668b","Pink",!1,0],["23c7d9","Blue",!1,0],["48d9a4","Green",!1,0],["f2bf27","Yellow",!1,0]],"",[["f2f1df","Tan"]]]],[["Emily Edelman","30Rack Reds",5,[["EA5949","Red Sand",1,0],["ED1B35","Red Flame",1,0],["C52D2C","Red River",1,0],["EF3A33","Red Rothko",1,0],["AF2C2B","Red House",1,0]],"",[["EB4442","Red Sand Paper"],["D71B35","Red Flame Paper"],["A3231F","Red River Paper"],["D33430","Red Rothko Paper"],["BF2F2D","Red House Paper"]]],["Emily Edelman","Grains",5,[["EAE5DA","Grain Pen 1",0,0],["E2E2D8","Grain Pen 2",0,0],["DDDCD0","Grain Pen 3",0,0],["E8E7DF","Grain Pen 4",0,0],["EFEBE2","Grain Pen 5",0,0],["E6DFD3","Grain Pen 6",0,0],["E1DCD7"," Grain Pen 7",0,0],["F4F4F1","Grain Pen 8",0,0]],"",[["DAD9CC","Grain Paper 1"],["F1EFEB","Grain Paper 2"],["6A5F5B","Grain Paper 3"]]],["Emily Edelman","Threshold",3,[["1E1E1E","Almost Black",0,0],["F8F8F8","Almost White",0,0],["F9F9F9","AImost White",!1,0]],"",[["1E1E1E","Almost Black"],["F8F8F8","Almost White"],["F9F9F9","AImost White"]]]],[["fingacode","regal",3,[["191716","dark grey",!1,0],["e6af2e","old gold",!1,0],["e0e2db","matte ivory",!1,0]],"",[["ffffff","white"]]]],[["Genlight","Libby",5,[["ef709d","Princess",!1,0],["ffee88","Sun Is Open",!1,0],["f038ff","Ice Cream",!1,0],["3772ff","Mermaid",!1,0],["42033d","Sun Is Closed",!1,0]],"",[["8f2d56","I Can Sleep In Your Bed?"],["fcbf49","This Is My Best Life"]]]],[["Haiver","Latter Days",5,[["2D3B5A","Shadow of Myself",!1,0],["465A86","Not What It Seems",!1,0],["793144","Beautiful Piece of Heartache",0,0],["C27085","Graceful Dance",0,0],["C39F5D","I'll Be Okay",0,0]],";4,4",[["fffdee","Light Warm"],["0c0c36","Dark Cool"]]],["Haiver","People Eater",3,[["1A6455","Tail",!1,0],["EB869C","Tongue",!1,0],["4D317E","Tentacle",0,0]],"",[["f7f9fc","Light Cool"],["fffdee","Light Warm"]]],["Haiver","Wine-Dark Sea",3,[["2B2D78","Mediterranean Blue",0,1],["86011C","Oxen Red",0,2],["084768","Drunken Dregs",0,3]],"",[["fffdee","Light Warm"],["2e000a","Dark Warm"]]]],[["heylinds","fresh_step_crystals",4,[["00a7fa","antifreeze",!1,0],["e5e7fb","white_almost",!1,0],["0000cc","dark_blue",!1,0],["ffffff","white",!1,0]],"",[["ade4ff","antifreeze_lite"]]]],[["Heeey","Black, White & Bright",2,[["ff3d3d","Red",!1,0],["ff3dae","Fuchsia",!1,0],["b13dff","Purple",!1,0],["3d44ff","Blue",!1,0],["3dbeff","Light Blue",!1,0],["3dff9b","Light Green",!1,0],["54ff3d","Lime",!1,0],["fcff3d","Yellow",!1,0],["ffae3d","Orange",!1,0],["ffffff","White",1,9]],"1,0;2,0;2,1;3,0;3,1;3,2;4,0;4,1;4,2;4,3;5,0;5,1;5,2;5,3;5,4;6,0;6,1;6,2;6,3;6,4;6,5;7,0;7,1;7,2;7,3;7,4;7,5;7,6;8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7",[["1c1c1c","Dark"]]]],[["ixnayokay","Comfort Prism",5,[["f25145","Grapefruit",0,0],["4b4686","Evening",0,0],["64a070","Shamrock",0,0],["eade2e","Lemon",!1,0],["f67d74","Salmon",!1,0],["7770c2","Cool Blue",!1,0],["99cca3","Fuzzy Green",!1,0],["ffe18f","Faded Melon",!1,0]],"1,0;2,0;4,1;4,2;4,4;5,0;5,5;6,0;6,4;6,6;7,7",[["000000","Black"],["212121","Charcoal"]]]],[["Jess Hewitt","Newspaper",3,[["726e6e","Dark gray",!1,0],["c02121","Red",!1,0],["e8e8e8","Light gray",!1,0]],"1,0;2,0;2,1",[["1f1e1e","Black"]]],["Jess Hewitt","Primary",3,[["fff705","Yellow",!1,0],["ff004c","Red",0,0],["00eeff","Blue",0,0]],"",[["2a2c7a","Blue"]]]],[["Jos Vromans","Primary",5,[["ffffff","White",0,0],["2211ff","Blue",0,0],["f33214","Red",0,0],["f3cd24","Yellow",0,0],["fffffe","Also White",0,0]],"1,0;2,0;2,1;3,0;3,1;3,2;4,0;4,1;4,2;4,3",[["000000","Black"]]],["Jos Vromans","Vivid",4,[["ffffff","White",1,1],["fffffe","Also White",0,8],["f33214","Red",1,2],["f3cd24","Yellow",1,7],["d3ad94","Pinky Sand",0,0]],"3,1;4,1;4,2;4,3;4,4",[["005555","Deep Teal"]]]],[["Lars Wander","Cadmium Red/Hansa Yellow",5,[["e23800","10:1",1,0],["f04c02","5:3",1,1],["ff6a01","1:1",1,2],["ff8d00","3:5",1,3],["ffad11","1:10",1,4]],"",[["f1f5ee","Titanium White"]]]],[["Matto","Sunriser",3,[["ff622e","Blood Orange Burst",!1,5],["ff9a42","Nectarine Glow",!1,4],["ffd561","Golden Flare",!1,3],["feffa8","Sunrays",!1,2],["2c851f","Maple Leaves",!1,0]],"4,0;4,1",[["fffce5","Morning Mist"]]],["Matto","Sunsetter",3,[["f72585","Sailor's Delight",!1,1],["7209b7","Amethyst",!1,0],["3a0ca3","Zaffre",!1,0],["4361ee","Dusky Blue",!1,0],["4cc9f0","Vivid Sky",!1,2],["b5179e","Fuchsia Bloom",!1,0]],"5,0",[["0e0075","Twilight"]]]],[["mikegee","Umbra",5,[["0c0c0e","95%",1,0],["17171c","90% ",1,0],["22222a","85%",1,0],["2f2f37","80%",1,0],["9191a1","40%",1,0]],"",[["000000","Totality"]]],["mikegee","Umbra [Cosmic]",5,[["0c0c0e","95%",!1,0],["17171c","90%",0,9],["22222a","85%",0,9],["2f2f37","80%",0,9],["3b3b45","75%",0,9],["464653","70%",!1,0],["8000ff","Nebula",1,0],["ff007b","Supernova",1,1]],"6,1;6,2;6,3;6,4;6,5;7,1;7,2;7,3;7,4;7,5;7,6",[["000000","Totality"]]],["mikegee","Verdant",3,[["00ff6e","Lush",!1,0],["00d5ff","Glade",0,0],["083b4e","Benthic",0,0]],"",[["083b4e","Benthic"]]]],[["nathaniel stern","giverny of the midwest",5,[["477b4f","pad",0,2],["93d714","giverny",1,2],["A0a7a7","shadow",!1,1],["e4c487","underleaf",!1,1],["f7bfc5","floral",0,1],["eadce5","petal",!1,1],["f2e421","pistil",1,1],["cd1d1d","saturated",0,0],["5081e2","bbb",!1,0],["ffc800","pop",!1,0]],"",[["221b22","somerset"]]]],[["Piter Pasma","THE THREE LITTLE PIGMENTS (DAY)",5,[["303ccc","BLUE",0,0],["f0bb00","YELLOW",!1,0],["000000","BLACK",0,0],["ffffff","WHITE",0,0],["990210","RED",!1,0]],"1,0;2,0;2,1;3,0;3,1;3,2;4,0;4,1;4,2;4,3",[["ffffff","WHITE"]]],["Piter Pasma","THE THREE LITTLE PIGMENTS (NIGHT)",5,[["4455d8","BLUE",0,0],["ffcc00","YELLOW",!1,0],["000000","BLACK",0,0],["ffffff","WHITE",0,0],["bb4422","RED",!1,0]],"1,0;2,0;2,1;3,0;3,1;3,2;4,0;4,1;4,2;4,3",[["000000","BLACK"]]]],[["rahul iyer","Sticky Sole",3,[["FDB1BF","Dubble Bubble",0,0],["FB0006","Big Red",1,1],["2749FF","Hubba Bubba",1,2]],"2,1",[["ffffff","White Sole"]]]],[["raptornews","trapper keeper",3,[["04c4c7","Turquoise",1,0],["2b1d7c","Meteorite",1,1],["9e4bb3","Purple",1,2]],"",[["ffffff","White"]]]],[["Stephen - Generative Artworks","CxYK",3,[["F37EF7","Magenta",0,0],["9A5EEA","Purple",!1,0],["526DF1","Blue",!1,0],["47D4F7","Cyan",1,0],["FFE76D","Yellow",1,0]],"0,0;1,1;2,2;3,3;4,4",[["303030","Black"]]]],[["steviep","sexy",3,[["ff00c7","primary",1,0],["fff8ff","light",!1,0],["df1a1b","statement",!1,0],["7202c6","secondary",!1,0],["ff66ff","medium",!1,0],["00ffef","link",!1,0],["00ff98","help1",!1,0],["f3ba00","gold",!1,0],["06974e","green",!1,0],["b40066","help2",!1,0]],"",[["120211","dark"]]]]];
const project = "Time Between the Lines is Thread Through the Mind"; console.log(`${project} v5.0 © Matto 2024`); console.log(`TOKEN ENTROPY: ${tokenData.hash}`); let skeuomorphic = tokenData.plot == true ? false : true; const tokenId = tokenData.tokenId; const attributes = {}; const urlParams = new URLSearchParams(window.location.search); const customSig = urlParams.get("signature"); let customOp = urlParams.get("optimization"); if (customOp) { customOp = customOp.toUpperCase(); } const altMode = urlParams.get("alternate"); const skeuMode = urlParams.get("skeuomorphic"); let modeDesc = ["SKEUOMORPHIC", "SIMPLE"]; let spreadDesc = ["MINIMUM", "SOME", "MORE", "MAXIMUM"]; let penSuggestion = []; if (skeuMode == "true") { skeuomorphic = true; console.log(`CUSTOM MODE: ${modeDesc[0]}`); } else if (skeuMode == "false") { skeuomorphic = false; console.log(`CUSTOM MODE: ${modeDesc[1]}`); } else { console.log("DEFAULT MODE: " + (skeuomorphic ? modeDesc[0] : modeDesc[1])); } console.log(""); let seed = makeSeed(tokenData.hash); let nonce = 0; let showSignature = customSig == "false" ? false : true; let circlesCount = 0; const numGroups = selectByProbs([5,6,4,7,3], fractionalRand()); const m = (rand(0, 200) / 100) - 1; let svg, sig; let groupedLines = ""; let texturedLines = ""; let gappedPoints = []; let palettes = []; let points = []; const allOptDesc = ["ANTI", "LAPS", "STANDARD", "MAXIMUM"]; const defaultOpt = selectByProbs([3, 2, 1, 0], fractionalRand()); let optimization = allOptDesc.indexOf(customOp); if (optimization === -1) { optimization = defaultOpt; } let optDesc = allOptDesc[optimization]; let dark = selectByProbs([0, 1], fractionalRand()); if (altMode == "true") { console.log("Alternate Mode selected, switching paper and pens."); dark = dark == 1 ? 0 : 1; } let perpGap = selectByProbs([true, false], fractionalRand()); const bkg = dark == 1 ? 22 : 250; const penCollection = dark == 0 ? "Stabilo" : "Gelly Roll"; const paletteArray = [ [ { hex: "#83553b", name: "Brown", id: 45 }, { hex: "#d74143", name: "Dark Red", id: 50 }, { hex: "#f75c45", name: "Carmine", id: 48 }, { hex: "#ff8b15", name: "Pale Vermillion", id: 30 }, { hex: "#ffb814", name: "Orange", id: 54 }, { hex: "#ffd913", name: "Yellow", id: 44 }, { hex: "#fff248", name: "Lemon Yellow", id: 24 }, { hex: "#b7c800", name: "Light Green", id: 33 }, { hex: "#4c8b06", name: "Leaf Green", id: 43 }, { hex: "#1c6a27", name: "Green", id: 36 }, { hex: "#3d47b3", name: "Ultramarine", id: 32 }, { hex: "#3074e5", name: "Dark Blue", id: 41 }, { hex: "#3093f8", name: "Light Blue", id: 31 }, { hex: "#58b6ff", name: "Azure", id: 57 }, { hex: "#c9c4c4", name: "Light Cold Gray", id: 94 }, { hex: "#a59da5", name: "Medium Cold Gray", id: 95 }, { hex: "#665e61", name: "Dark Gray", id: 96 }, { hex: "#2d2828", name: "Black", id: 46 }, ], [ { hex: "#E9E9E9", name: "Platinum", id: 50 }, { hex: "#85CFF5", name: "Pale Azure", id: 425 }, { hex: "#7696DC", name: "Vista Blue", id: "437p" }, { hex: "#2A6CD0", name: "Celtic Blue", id: 438 }, { hex: "#109EE0", name: "Celestial Blue", id: 436 }, { hex: "#97DCD6", name: "Tiffany Blue", id: "426p" }, { hex: "#28DBD5", name: "Turquoise", id: 429 }, { hex: "#85D18A", name: "Emerald", id: 428 }, { hex: "#E1EC7A", name: "Mindaro", id: "403p" }, { hex: "#E7B968", name: "Earth Yellow", id: "405p" }, { hex: "#D0866D", name: "Burnt Sienna", id: 412 }, { hex: "#DB5D6E", name: "Indian Red", id: 419 }, { hex: "#CE6ABC", name: "Sky Magenta", id: 421 }, { hex: "#9774D3", name: "Amethyst", id: 424 }, { hex: "#AB98E0", name: "Wisteria", id: 423 }, { hex: "#D2AFDB", name: "Lilac", id: "420p" }, { hex: "#838A93", name: "Slate Gray", id: 444 }, { hex: "#513E3A", name: "Van Dyke", id: 417 }, ], [ { hex: "#EDECE4", name: "Metallic Silver", id: 553 }, { hex: "#FFD062", name: "Metallic Gold", id: 551 }, { hex: "#F8BEB6", name: "Metallic Red", id: 519 }, ] ]; if (dark == 1 && numGroups == 3) { dark = 2; } const startingColor = rand(0, paletteArray[dark].length - 1); const paletteSpread = dark < 2 ? selectByProbs([1,2,3,4], fractionalRand()) : 1; console.log("EXTENDED ATTRIBUTES:"); for (let i = 0; i < numGroups + 1; i++) { palettes[i] = paletteArray[dark][(startingColor + (i * paletteSpread)) % paletteArray[dark].length]; let name = `Group ${i + 1} Color`; if (i == numGroups) { name = "Signature Color"; } penSuggestion[i] = `Suggested Pen Color: ${penCollection} #${palettes[i].id}`; console.log(`${name}: ${palettes[i].name} (${palettes[i].hex}) - ${penSuggestion[i]}`); } addAttribute("COLOR GROUPS", `${numGroups}`); addAttribute("COLOR SPREAD", spreadDesc[paletteSpread - 1]); addAttribute("PAPER", dark > 0 ? "DARK" : "LIGHT"); addAttribute("COMPOSITION", perpGap ? "BISECTED" : "WHOLE"); addAttribute("SLOPE", -1 * m.toFixed(2)); addAttribute("OPTIMIZATION", optDesc); const svgStart = `<?xml version="1.0" encoding="utf-8"?><svg viewBox="0 0 1000 1000" style="background-color:rgb(${bkg},${bkg},${bkg})" xmlns="http://www.w3.org/2000/svg">`; const suggestedThickness = "Suggested line thickness: plot side length (mm) divided by 400."; draw(); function setup() { noCanvas(); noLoop(); } function draw() { const ySpacing = 2.6 - (1 - Math.abs(m)) / 3; let lineNum = 0; for (let b = -2000; b < 2000; b += ySpacing ) { const x0 = Math.max(0, -b / m); const x1 = Math.min(1000, (1000 - b) / m); const y0 = b + x0 * m; const y1 = b + x1 * m; const clipped = getClippedLine(x0, y0, x1, y1); if (clipped) { lineWithGaps(clipped.x0, clipped.y0, clipped.x1, clipped.y1, lineNum); } lineNum++; } // 0: anti, 1: laps (handled elsewhere), 2: normal, 3: maximum if (optimization == 0) { points = sortPointPairs(points, true, false); } else if (optimization == 2) { points = sortPointPairs(points, false, true); } else if (optimization == 3) { points = sortPointPairs(points, true, true); } const linesPerGroup = Math.ceil(points.length / numGroups); let pointIndex = 0; for (let i = 0; i < numGroups; i++) { groupedLines += G(i + 1, palettes[i].hex, 2.5, palettes[i].name, penSuggestion[i]); texturedLines += G(i + 1, palettes[i].hex, 1.5, palettes[i].name, penSuggestion[i]); for (let j = 0; j < linesPerGroup && pointIndex < points.length; j++) { if (isNaN(points[pointIndex].y2)) { break; } groupedLines += P([points[pointIndex].x1, points[pointIndex].y1, points[pointIndex].x2, points[pointIndex].y2]); if (skeuomorphic) { texturedLines += line2dots(points[pointIndex].x1, points[pointIndex].y1, points[pointIndex].x2, points[pointIndex].y2); } pointIndex++; } groupedLines += "</g>"; texturedLines +="</g>"; } console.log(`Background Line Segments: ${pointIndex}`); if (skeuomorphic) { console.log(`Composing Circles: ${circlesCount}`); } console.log(suggestedThickness); console.log("License: CC BY-NC 4.0"); sig = signature(); svg = skeuomorphic ? svgStart + texturedLines : svgStart + groupedLines; updateSVG(); } function signature() { let sigLinePoints = [ [924,956,920,956], [920,956,920,860], [920,860,940,872], [940,872,960,860], [960,860,960,956], [960,956,956,956], [928,902,940,872], [940,872,952,902], [934,888,946,888], [920,902,960,902], [932,902,932,926], [948,902,948,926] ]; let str; if (skeuomorphic) { str = G("signature", palettes[numGroups].hex, 1.5, palettes[numGroups].name, penSuggestion[numGroups]); for (let i=0; i<sigLinePoints.length; i++) { str += line2dots(sigLinePoints[i][0], sigLinePoints[i][1], sigLinePoints[i][2], sigLinePoints[i][3]); } str += circle2dots(940, 940, 15); } else { str = G("signature", palettes[numGroups].hex, 2.5, palettes[numGroups].name, penSuggestion[numGroups]); str += `<polyline points="924,956 920,956 920,860 940,872 960,860 960,956 956,956" stroke-linecap="round" stroke-linejoin="round"/>`; str += `<polyline points="928,902 940,872 952,902" stroke-linejoin="bevel" />`; str = str + P(sigLinePoints[8]) + P(sigLinePoints[9]) + P(sigLinePoints[10]) + P(sigLinePoints[11]); str += C([940, 940, 15]); } str += "</g>"; return str; } function G(groupNum, hex, strokeW, paletteName, penSuggestion) { return `<g id="group-${groupNum}-${hex}-${paletteName}" style="stroke:${hex}; stroke-width: ${strokeW}px; stroke-opacity:1; fill-opacity:0"><desc>${paletteName} - ${penSuggestion}. ${suggestedThickness}</desc>`; } function P(vars) { return `<path d="M ${vars[0]} ${vars[1]} L ${vars[2]} ${vars[3]}" stroke-linecap="round" />` } function C(vars) { return `<circle cx="${vars[0]}" cy="${vars[1]}" r="${vars[2]}" />`; } function crossesBisector(x1, y1, x2, y2) { const xIntersection = ((500 + 500 / m + m * x1 - y1) / (m + 1 / m)); const yIntersection = 500 - (1 / m) * (xIntersection - 500); return xIntersection >= Math.min(x1, x2) && xIntersection <= Math.max(x1, x2) && yIntersection >= Math.min(y1, y2) && yIntersection <= Math.max(y1, y2); } function addAttribute(trait_type, value) { console.log(`${trait_type}: ${value}`); attributes[trait_type] = value; } function makeSeed(input) { let s = 1; for (let i = 0; i < (input.length - 2) / 2; i++) { let v = parseInt(input.slice(2 + i * 2, 4 + i * 2), 16); s = ((s * v) % 999999999999) + 1 } return s; } function fractionalRand() { return rand(1,100)/100; } function rand(min, max) { const range = max - min + 1; const v = (seed % range) + min; newSeed(); return Math.floor(v); } function newSeed() { nonce++; let bigSeed = BigInt(seed); const bigNonce = BigInt(nonce); const bigMultiplier = BigInt(35932678341237); const bigModulus = BigInt(999999999999); bigSeed = (bigSeed * bigMultiplier + bigNonce) % bigModulus + BigInt(1); if (bigSeed <= Number.MAX_SAFE_INTEGER) { seed = Number(bigSeed); } else { console.log("Seed exceeded safe range, reseeding..."); seed %= 999999999999; } } document.addEventListener("keydown", function (event) { if (!tokenData.plot) { const k = event.key.toUpperCase(); if (k === "H") { console.log(`Toggling signature, please be patient. ${circlesCount} circles need to be redrawn...`); showSignature = !showSignature; document.body.innerHTML = ''; updateSVG(); } else if (k === "S") { let mS = skeuomorphic ? modeDesc[0] : modeDesc[1]; console.log(`Saving ${mS}-mode SVG with ${optDesc} Optimization...`) saveStrings([assembleComp() + "</svg>"], `TBTLITTTM-${tokenId}-${mS}-${optDesc}`, "svg"); } } }); function saveStrings(data, filename, extension) { const blob = new Blob([data], {type: 'text/plain'}); let anchor = document.createElement('a'); anchor.download = `${filename}.${extension}`; anchor.href = window.URL.createObjectURL(blob); anchor.style.display = 'none'; document.body.appendChild(anchor); anchor.click(); document.body.removeChild(anchor); } function assembleComp() { let comp = svg; if (showSignature) { comp += sig; } return comp; } function updateSVG() { document.body.insertAdjacentHTML('beforeend', assembleComp() + "</svg>"); } function selectByProbs(list, randomValue) { const totalWeight = list.reduce(function(acc, item, index) { return acc + (1 / (index + 2)); }, 0); const threshold = totalWeight * randomValue; let currentSum = 0; for (let i = 0; i < list.length; i++) { currentSum += 1 / (i + 2); if (currentSum >= threshold) { return list[i]; } } return list[list.length - 1]; } function getY(x0, y0, x1, y1, x) { const m = (y1 - y0) / (x1 - x0); const b = y0 - m * x0; const y = m * x + b; return y; } function lineWithGaps(x0, y0, x1, y1, lineNum) { let xT, yT, xE, yE; let tempPoints = []; if(x0 > x1) { xT = x0; yT = y0; x0 = x1; y0 = y1; x1 = xT; y1 = yT; } let xS = x0; let yS = y0; let lfg = true; while (lfg) { let dS; let dnm = [[60,4,48,12],[80,12,40,8]]; dS = 0; let lSeg = rand((1000 / dnm[dS][0]), (1000 / dnm[dS][1])); let gSeg = rand((1000 / dnm[dS][2]), (1000 / dnm[dS][3])); xS + lSeg > x1 ? xE = x1 : xE = xS + lSeg; yE = getY(x0, y0, x1, y1, xE); if (!perpGap || !crossesBisector(xS, yS, xE, yE)) { tempPoints.push({x1: xS, y1: yS, x2: xE, y2: yE}); } xE + gSeg > x1 ? lfg = false : xS = xE + gSeg; xS = xE + gSeg; yS = getY(x0, y0, x1, y1, xS); } for (let i = 0; i < tempPoints.length; i++) { if (optimization == 1 && lineNum % 2 == 1) { // laps optimization const j = tempPoints.length - i - 1; points.push({x1: tempPoints[j].x2, y1: tempPoints[j].y2, x2: tempPoints[j].x1, y2: tempPoints[j].y1}); } else { points.push(tempPoints[i]); } } } function getClippedLine(x0, y0, x1, y1) { const xmin = rand(1, 100) < 33 ? rand(4, 100) : rand(4, 20); const ymin = rand(1, 100) < 33 ? rand(4, 100) : rand(4, 20); const xmax = 1000 - rand(4, 20); const ymax = rand(1,100) < 33 ? 1000 - rand(4, 60) : 1000 - rand(4, 20); const inside = (x, y) => x >= xmin && x <= xmax && y >= ymin && y <= ymax; if (inside(x0, y0) && inside(x1, y1)) { return { x0, y0, x1, y1 }; } const m = (y1 - y0) / (x1 - x0); const b = y0 - m * x0; const xLeft = xmin; const yLeft = m * xLeft + b; const xRight = xmax; const yRight = m * xRight + b; const yTop = ymin; const xTop = (yTop - b) / m; const yBottom = ymax; const xBottom = (yBottom - b) / m; const intersections = [ { x: xLeft, y: yLeft }, { x: xRight, y: yRight }, { x: xTop, y: yTop }, { x: xBottom, y: yBottom } ]; const validIntersections = intersections.filter(p => inside(p.x, p.y)); if (validIntersections.length >= 2) { return { x0: validIntersections[0].x, y0: validIntersections[0].y, x1: validIntersections[1].x, y1: validIntersections[1].y }; } return null; } function distance(x1, y1, x2, y2) { return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); } function sortPointPairs(pointPairs, allowReverse, optimize) { const sortedPairs = [pointPairs.shift()]; while (pointPairs.length > 0) { let selectedPairIndex = 0; let selectedDistance = optimize ? Infinity : -Infinity; let reverse = false; for (let i = 0; i < pointPairs.length; i++) { const pair = pointPairs[i]; const lastPair = sortedPairs[sortedPairs.length - 1]; const distances = [ distance(lastPair.x2, lastPair.y2, pair.x1, pair.y1), distance(lastPair.x2, lastPair.y2, pair.x2, pair.y2) ]; if (allowReverse) { distances.push( distance(lastPair.x2, lastPair.y2, pair.x2, pair.y2), distance(lastPair.x2, lastPair.y2, pair.x1, pair.y1) ); } distances.forEach((dist, index) => { if (optimize ? dist < selectedDistance : dist > selectedDistance) { selectedDistance = dist; selectedPairIndex = i; reverse = index % 2 !== 0; } }); } let selectedPair = pointPairs.splice(selectedPairIndex, 1)[0]; if (reverse && allowReverse) { [selectedPair.x1, selectedPair.x2] = [selectedPair.x2, selectedPair.x1]; [selectedPair.y1, selectedPair.y2] = [selectedPair.y2, selectedPair.y1]; } sortedPairs.push(selectedPair); } return sortedPairs; } function line2dots(x1, y1, x2, y2) { const d = .4; let texture = ""; const totalDistance = distance(x1, y1, x2, y2); const steps = totalDistance / d; const xStep = (x2 - x1) / steps; const yStep = (y2 - y1) / steps; for (let i = 0; i <= steps; i++) { const r = fractionalRand() * .75; let tempX = x1 + i * xStep; let tempY = y1 + i * yStep; if (i === steps) { tempX = x2; tempY = y2; } texture += C([tempX.toFixed(2), tempY.toFixed(2), r]); circlesCount++; } return texture; } function circle2dots(cx, cy, r) { const d = 0.4; let texture = ""; const circumference = 2 * Math.PI * r; const steps = circumference / d; for (let i = 0; i < steps; i++) { const theta = (i / steps) * 2 * Math.PI; const dotX = cx + r * Math.cos(theta); const dotY = cy + r * Math.sin(theta); const dotR = fractionalRand() * 0.75; texture += C([dotX.toFixed(2), dotY.toFixed(2), dotR]); circlesCount++; } return texture; }
Time Between the Lines is Thread Through the Mind is a meditative plotter-performance art project, where each experience is uniquely recorded using specific pen colors on either dark or light paper. As the fourth project in the Zenerative series of Zen-inspired generative art by Matto, it explores the value of time and the interplay between efficiency, order, and aesthetics. Outputs: The default live-code outputs are skeuomorphic, each drawn with 500,000 to 1,000,000 circles, while the default live-plot modes use a few thousand simplified lines. Using URL parameters, these live modes can be displayed digitally or plotted. Each token has one default output and includes a total of eight canonical versions: - two pen and paper sets (pen suggestions are embedded in the SVG code) - four optimization settings to change the line drawing order Interactivity: - 'S' saves an SVG (Scalable Vector Graphics) file - 'H' hides the signature (patience required in skeuomorphic mode) URL Parameter Options: - alternate = true / false (switches paper and pens from default) - optimization = laps / standard / maximum / anti (changes line drawing order and visual output) - skeuomorphic = true / false (toggles skeuomorphic circles / simple lines) - signature = true / false (toggles the signature) Plotter Notes: - Please maintain the drawing order for canonical outputs - avoid reordering or optimizing the paths during plotting. - On light paper, the signature stamp's legibility will vary with the ink colors used. Opaque inks of similar colors are acceptable alternatives. - Physical outputs may differ from digital versions due to pen and paper variability. Plotters have the discretion to use different pens, paper, or multiple passes. - For color hex values and corresponding pens, check the console when running the live code.