# elm-box-packing

### Efficiently pack 2D boxes together.
This is useful for creating texture atlases, sprite sheets, or just making some neat generative artwork.

![Generative artwork](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAEACAYAAADFkM5nAAAhwElEQVR4nO3dT8gl1Z3G8XvJZgSzarLIJltJwszGTJYG0k0kJBlmEByQQV24MIMB4yY4Q2ibMCPZGCEyceFCZRBGkBlGQ1C6A3GZ0c0MJrjNJovQKwVnI2/eh+pjnXvuOafOOfWrW3/u97MQ+72nfreq7qWe59bb/b773VuvX+wsfffB/e5fn7ed+U9P7nd3/ZvNzE/+cb/75ffHz/rOL/a7//+fcXP+4q/3uy/8vG3Gn36w3335x23bOr//yX736BvjZsjLD1y+Pt9tn/PJW/vdvbu27d/flW2rdW9/PLzOuf/u/e69V8rXO197ZL97+kfl2z370/r1X/lVfv3vvr3f3XrpeM3Vx/a7P/7s+OvyxR/uL/8L4IxQAFpRAHoUgB4FAMBKUABaUQB6FIAeBQDASlAAWlEAehSAHgUAwEpQAFpRAHoUgB4FAMBKUABaUQB6FIAeBQDASlAAWlEAehSA3tILAADcQQFoRQHoUQB6Sy8A3AEAcAcFoBUFoEcB6FEAAKwEBaAVBaBHAehRAACsBAWgFQWgRwHoqQBMjQIAwAAFoBUFoLfVAtCq9BO9Ps3Lb74+vP4bv+3WlqIAABhAAWhFAehttQDk7gDok34s6BXqsa/HaK3UFoCSOwApFAAAd1AAWm2lAFihAHQU6rGvx2itTFEA/hAJ+i8R8gB6FIBWWykALXcA9Il/SSgAhygAAApQAFpRAA7V3gHQp34XUgqmkhCPUbCXbKt1tSgAADaMAtCKAnBoDQWAOwD9DABnjwLQagkFwAIFII4CAGDjKACtllAAuAPQBXvJtlpHAehnADh70xSAKSyxAFigAHTBVBLiMQr2UhSAfgaAs8cFYQyLOwBjUAC6AvDMp8PbPvM57gDoPAPAHba36y1v1Ys+rTtWczXzvx4dP+tvX7b5FkBLiCu4pWVbn+ZQAOIoAAA2jgLQigJwiALQcaE+JQoAAAMUgFYUgEMUgI4KQOzrMVorQ3cA/E//pdy59ek8A8AdFIBWFIBDFICOQj329RitldoCkLsDoE//AFCAAtCKAnCIAtBRqMe+HqO1MkUBcOfWp/MMAHdQAFpRAA5RADoK9djXY7RWKAAAZkABaEUBOEQB6CjUY1+P0VqhAACYAQWgFQXg0DkWgBQKAIAVoAC0ogAcaikAVqYqAK0oAABWgALQigJwqKUAuJBSMLXcAdCnf5mqAPzd3wyv/8//7vbBRwEAsAIUgFZbKQBW1lAAalEAAGwYBaDVVgqA1R2AFi6kFEynKAAldwD0yd+hAADYMApAKwrAoTXcAaAAdI8BwCUKQCsKwCEKQDsKAIAZUABaLaEAWKAAHLIoALV3AGpRAAAYoAC0WkIB+Kt/rt/W+d9/6WZQAA7NUQBydwDCT/8AYIQC0IoCcIgC0Ju6AHAHAIABCkArCsChOQtAKQpA9xgAXKIAtFIBsEAB6IJpTAEY2tatowB0jwHAJfsCMBXLAmDlCz9v36c//aDbDwpAF0xDIR7jgn1oW7eOAtA9BgCXzvOCMPbWvej2vUUBGIMC0O3H0LZuHQWgewwALu13v/z+8YWi1Xd+YXN73dFtdouwFgW2YzFT8ywKAHcAumAaCvEYF+xD27p1FIDuMQC4RAFopXkUgN4WC0ArCgCAFaAAtNI8CkCvpQD4hkI8xgX70LZuXW0B4A4AgA2jALTSPApAr6UA7G9221xcO55XgwLQowAAKEQBaKV5FIDe2AIwFOIxLtiHtnXrTlUAalEAAMyAAtBK8ygAPQpAb+gOgPvk71AAAMyAAtBK8ygAPQpAbwkFAAAGUABaad4WCoCVNRSAWqcqAFO4677Dffjk3emfE8CqUABaad4WCkDNDLeNlVMXgPdeya/zfe2R/ckKwNAdAH8/9HxXvtr/OXT7g242BQDAAApAK82jAPRq7gDo079QADoUAAAzoAC00ry5C4AFCkAcBQDAxlEAWmne3AWgJrxDLsxrZrhtYigAPQoAgBWgALTSPApAjwLQowAAWAEKQCvNowD0KAA9CgCAFaAAtNI8CkCPAtBbQgEAgAEUgFaaRwHobbEAtKIAAFgBCkArzaMA9FoKgG8oxGNcsA9t69bVFoA334mv/963+hCOBS4FAMAK2BcA1DnnAnDjRrfN9evj7gCUogAAwGe4WIzBHYDenAXgmU/z2z7zuW7dqQpALQoAgBnY3GLX7XCLOWI5S6aY51AAemMLwBhLKwBvJe4AfDf45O/UFgAAMGATjgpFizliOUummOdYFIAxasI75MK8ZobbJmZsAai5A+A++TvnVgDcc8fE9gcAImzCUaFoMUcsZ8kU8xyLAvDgtfoZr9/stq0J75AL85oZbpuYNRSAWqcqAEMoAAAmYBOOCkWLOWI5S6aY51AAemsoAKV3APTpX05VALgDAGAGNuGoULSYI5azZIp5DgWgRwHoUQAArIBNOCoULeaI5SyZYp5DAehRAHoUAAArYBOOCkWLOWI5S6aY51AAehSAHgUAwArYhKNC0WKOWM6SKeY5FIAeBaBHAQCwAjbhqFC0mCOWs2SKec7cBcCCVQFoQQHoDBWAkHvumNj+AECETTgqFC3miOUsmWKeM3cBqAlvxzrEHe4A9KwLgP+4/uyeOya2PwAQYROOCkWLOWI5S6aY52yhADz6RvmMlx843NbXUgB8FIA4Bb7/uP7snjsmtj8AEGETjgpFizliOUummOdQAHotBeCu+7ptPnmXOwApCnz/cf3ZPXdMbH8AIMImHBWKFnPEcpZMMc+hAPQoAL2pCwAAGLAJR4WixRyxnCVTzHMoAL1zKwA5UxeAWy/1f/ZdfSw+HwAibMJRoWgxRyxnyRTzHApAjwLQowAAWAGbcFQoWswRy1kyxTyHAtCjAPQoAABWwCYcFYoWc0Sz1oIC0NtiAWhVWwCGUAAATMAmuNcU2pYoAL01FIBaqSAXhfn+5sXu4lrbbN/Tied59vI5hAIAYAJcMOZGAbj882UBOIXaOwCtBcD/0b0+/RjfGAoAgBnsR32KdfRp1mKOWM4S63mimV/+8fiZv//JngJwSQWg9A6APv27gHWBWnoHgAIAAJ+xCUcFosUcsZwl1vNEMykAh1oKgI8CcIwCAGBCNuGoQLSYI5azxHqeaKZVARhj7QXguavdNk/d4g5ADAUAwIRswlGBaDFHLGeJ9TzRTKsC8PbH9XPuv7u70FMAujkUgA4FAEAFm3BUIFrMEctZYj1PNJMCcIgC0HP7F3L7G6IAAJiBTTgqEC3miOUssZ4nmkkBOEQB6Ln9C7n9DdUWAAAwYBOOCkSLOWI5S6zniWZSAA5RAHpu/0Juf0O1BcD9IiJf7JcSAUCGTTgqEC3miOUssZ4nmkkBOEQB6Ln9C7n9DQ0VgBAFAIABm3BUIFrMEctZYj1PNHMJBcCCVQFoQQHoDBUA7gAAmIBNOCoQLeaI5SyxnieauYQCsMY7AO7Tv1AAOhQAADOwCUcFosUcsZwl1vNEM7dSAKy0FAAfBeAYBQDAhGzCUYFoMUcsZ4n1PNHMrRSA0jsAuU//0lIAuAPQoQAAmIFNOCoQLeaI5SyxnieaSQE4dI4FIMXtX8jtb4gCAGAGNuGoQLSYI5azxHqeaCYF4NAaCkCtoQJgdQdgCAUAwARswlGBaDFHLGeJ5k2BAnBoDQUgF+g+hXsJqwLwlV/F1//u2916CgCACdiErULWYo5o1hpQAA5tsQDk1mtNqgDUogAAmIFNcK8ltLeGAtDNWloBiP1dA/f3CmIoAABmwEVjzSgA3SwKAAUAQDWbOwA+3Q2wuD3u6Db5g9fs5r1+03aeaGZLGIcUzrHwiFGgtDynnsO3lAJQgwLQ/9mhAACoRAGwoJktYRxSOMfCI0aB0vKceg7fnAXAN+YOQKlcoPsU7pJbrzVzFQAAMEABsKCZLWEcUjjHwiNGgdLynHoO35wF4OEXum1efaLuWwChN9/Jb/u9b3Xb5ALdp3CX3HqtmasAcAcAgAEKgAXNbAnjkMI5Fh4xCpSW59Rz+NZYAFwgKgyFAkABAFCNAmBBM1vCOKRwjoVHjAKl5Tn1HD4KwDGFu+TWaw0FAMCKUQAsaGZLGIcUzrHwiFGgtDynnsNHATimcJfceq2hAABYMQqABc1sCeOQwjkWHjEKlJbn1HP4KADHFO6SW681FAAAK0YBsKCZLWEcUjjHwiNGgdLynHoOHwXgmMJdcuu15lQFIEQBAGCAAmBBM1vCOKRwjoVHjAKl5Tn1HD4KwDGFu+TWa82pCoD/uL5GAQBggAJgQTNbwjikcI6FR0wuUGrMWQB8pygAtYYKQErsNRzzelEAAEyAAmBBM+coALdeKlvru/rYYVBYFYAWH97unvueK6e5AzB0bnVOfUMF4LXnL3YPPXm4jcSeJ5ztiwW6uFCnAACYAAXAgmaeewFouQNAAejEAl1cqFMAAEzgPAvAFCgAZXMoAMdigS4u1CkAACawjgKwBmstAFa2WACGUAAArBgXjXP39sfHYRJz/93598oWC0BqvVtHAQCwYja313VbfewnYH36HTvDsZwl1vNkqpnuN+WV0G/TowD0wpBOrXfr5ioAAGCAAlDCep5MNXNNBcBHATiWKgCx9W4tABSiAJSwnidTzVxTAXj/9W6bex/c1h2AWrFAFxfqFAAAE6AAlLCeJ1PNpAAcO3UBiG3ntomJBbq4UKcAAJgABaCE9TyZauZaC0CNsACUigWzLwzp1Hq3jgIAYMUoACWs58lUM9daAMbcAcgdg7/fsWD2hSGdWu/WUQAArBgFoIT1PJlq5jkUgFDuGPz9jgWzLwzp1Hq3jgIAYMUoACWs58lUM9dUAHw1BcAFosJQcsfg73csmH1hSKfWh+tCse2Gtslxxys6ZgoAAAMUgBLW82SqmWsqAK13AFwgKgwldwz+fseC2ReGdGq9W8cdAAArRgEoYT1PpppJATjk73csmH1hSKfWu3WnKgCh2PrUWgBIoACUsJ4nU82kABzy9zsWzL4wpFPr3bpTFQB3vKJjjq13awGgEAWghOZtVS48fX6QxqyhANSKBbm4MKcAAFix7RYAlMmFp28oSNdQAHK/3tfRr/l1YkEuLswpAABWbFkFAKeXC0+fH6QxLQXARwE45kLdHa/omGPr3VoAKEQBOHe58PT5QRrTUgAe/6jb5sXPcwcgxoW6O15xxwwAI3ExwXwoAJ3aAnDrpf7PztXHurUAUGi/e/SN44tJrZcfGH8HIKQ7Ahb75mgfLeeJZpZ+8i2hT8elQThEQWm5b6L9Syl9Ln8GBaBDAQAwA5tQVBBSAMZTOJYG4RAFpeW+ifYvpfS5/BlLLwBDKAAAVswmFBWEFIDxFI6lQThEQWm5b6L9Syl9rtSM0uPWcblAVBjKVAUg9zMV9DMUKAAAVswmFBWEFIDxFI6lQThEQWm5b6L9Syl9rtSM0uPWcblAVBgKBYACAKCaTSgqCCkA4ykcS4NwiILSct9E+5dS+lypGaXHreNygagwlLkKQEptARjijld0zBQAAAZsQlFBSAEYT+FYGoRDFJSW+ybav5TS50rNKD1uHZcLRIWhzFUAnrt6sXvqVr/eqS0ATwf79ezlPugY3fHp/x19jQIAwIBNKCoIKQDjKRxLg3CIgtJy30T7l1L6XKkZpcet43KBqDCUpRWAWhQAADOwCUUFIQVgPIVjaRAOUVBa7pto/1JKnys3o5QLRIWhLK0AxJ7HnxuiAACYgU0oKggpAOMpHM+1AJQct45pjFgwh/ygpgAA2DCbUFQQUgDGUziWBGGJsWFZq/Q86BhjSo7bHZMLRIWhvPlO9+eY732rWyOxYA75QU0BALBhNqGoIFxDAcB01lAAai2lAIQoAAAM2IQs4Yo1FIBYMPvCkF5KAdDPG3BiP3cAABpQAGCDAtCLPU8421dbAPSYz60DgApcOGCDAtCLPU8420cBADADmzsAorsAlrNKAyVHYVMSLDkKnSXMEMs5z3w6bs4znzsMndLXS69JTMlxab/FBaALvrkKQErsecLZPgoAgBnYhrblrNJAyVHYlARLjkJnCTPEcg4F4FgY0kMF4OEXLnavPnG4jcSeJ5ztowAAmIFtaFvOKg2UHIVNSbDkKHSWMEMs51AAjoUhTQEAsGG2oW05qzRQchQ2JcGSo9BZwgyxnEMBOJYL6RgKAIAVsw1ty1mlgZKjsCkJlhyFzhJmiOUcCsCxMKS5AwBgw2xD23JWaaDkKGxKgiVHobOEGWI5x7oAjFVyXNpvcQHogo8C0K0DgAq2oW05iwJwzHKOdQHY3xyed3HtcBtfyXFpv8UFoAs+CkC3DgAq2Ia25SwKwDHLORSAY2FIL6UAhPSYL7UOADJsQ9tyFgXgmOUcCsCxMKRPVQBidIzu+O66r5/3ybtdOfC5dQBQwTa0LWdRAI5ZzqEAHAtDeqgApMSeJ5zti90B8FEAAEzANrQtZ1EAjlnOoQAcC0N6qAB8ePtid8+Vw20k9jzhbF+sAOgY3fFRAABMwDa0LWdtrQBsHQWgHQUAwAy4cGAZagpAqLQA1GotALHttD6FAgBgBuM/aetTtsWMkgBIUTBY3NIeO0M05+2P2+fcf/e824vVjDCoUk4VYLFgjnFhnVuvNXMVAAAwYBPeFjMoAB0F55zbi9UMhVgJBV0YgjEKxpjUvmoffLFgjnFhnVuvNXMVAD3mc+sAoIJNeFvMoAB0FFpzbi9WM8KgSlGAhSEYo2CMSe2r9sEXC+YYF9a59VpDAQCwYjbhbTGDAtBRaM25vVjNCIMqRQEWhmCMgjEmta/aB18smGNcWOfWa82pCkBIj/lS6wAgwya8LWZQADoKrTm3F6sZYVClKMDCEIxRMMak9lX74IsFc4wL69x6tyYmtl1ufXjsOk6dO50X4Q4AgAnYhLfFDApAR6E15/ZiNSMMqhQFWBiCMQrGmNS+ah98sWCOcWGdW681779+sbv3wW6tL7ad1qeEx67j1LnTeREKAIAJ2IS3xQwKQEehNef2YjUjDKoUBVgYgjEKxpjUvmoffLFgjsmFtY8CAGDFbMLbYgYFoKPQmnN7sZoRBlWKAiwMwRgFY0xqX7UPvlgwx7iwzq3XGgoAgBWzCW+LGRSAjkJrzu3FakYYVCkKsDAEYxSMMal91T74YsEc48I6t15rKAAAVswmvC1mUAA6Cq05txerGTXCEIxRMMak9jXch1gwx7iwzq3XGgoAgBWzCW+LGUsoAFZSgVRCoTV2+zUKQzBGwRiTOl/huYgFc4wL69x6raEAAFgxm/C2mDG2AGDdwhCMUTDGzFUAUmLb5daHx67jVMi7YKcAAJiATXhbzKAAnLcwBGMUjDGlBaBWLMgdBfqp7gCE9JgvtQ4AMrhwYP1KC4D1rwO2KgAxCnkX7M9d7ec9dasrBz63DgAq1H/vXN8rT11wU3Qhrt3GGbtt7lfF5ujXyI7Ztva85uicL3meTDXztefjMx96sg+91PtDr79vqQVg6A4ABQDABOov2roopy64KboQ127jjN12TIiP2bb2vObonC95nkw181wLgI8CAGAC9RdtXZRTF9wUXYhrt3HGbjsmxMdsW3tec3TOlzxPppq5xgJQK1YAFPIu2MMCAAAG6i/auiinLrgpuhDXbuOM3XZMiI/Ztva85uicL3meTDVzjQUgDHRRqKeE67U2VwCufLX/s9z+oFsHABXqL9q6KKcuuCm6ENdu44zddkyIj9m29rzm6JwveZ5MNXPJBSAlDHRRqKeE67WWAgBgYvUXbV2UUxfcFF2Ia7dxxm47JsTHbFt7XnN0zpc8T6aaueQCwB0AACtWf9HWRTl1wU3Rhbh2G2fstmNCfMy2tec1R+d8yfNkqpkUgGMUAAAG6i/auiinLrgpuhDXbuOM3XZMiI/Ztva85uicW887R2stAB/e7h+/5wp3AACYqA8WhUdtICuIa7dxxm47JsTHbIvTuXEj/Tpdv96/FrUFYAgFAMCKUQBSFOJjtsXpTFUAuAMAYMMoACkK8THb4nQoAN06AKiw/QKA7ZurAKSEgS4K9ZRwvdZSAABM7HQFAJjKXAXgiV9f7F745uE2Ega6KNRTwvVa6xeAEAUAgAEKANZv6wVA32pw9C0HCgAAA20FAFiS0gJQiwIAYMO4cOB85ALdp3CX3Hq3JiYMdFGop4TrtZYCAGBibbfzW/92vKO/JW8xo/buxRDd3ag9HzkW58rR8S51luU5E8vzJtpHyQW6z4V7br1bExMGuijUU8L1WksBADCx+ou3xcVZF2SLGRSANtazLM+ZWJ430T5KLtB9Ltxz692amDDQRaFewy8AADCB+ou3xcVZF2SLGRSANtazLM+ZWJ430T5KLtB9Ltxz692amNoC8JuvH67/xm/zdwBuvdT/Wa4+1q0DgAr1F2+Li7MuyBYzKABtrGdZnjOxPG+ifZRcoPtcuOfWuzUWKAAAZlB/8ba4OOuCbDGDAtDGepblORPL8ybaR8kFus+Fe269WxPz3iuH233tkfRaiRUAHwUAwATqL94WF2ddkC1mUADaWM+yPGdied5E+yi5QPe5cM+td2tiLAqAQt4FOwUAwATqL94WF2ddkC1mUADaWM9ai1yg+1y459a7NTHWBSCkx3ypdQCQUR94FqGm0LCYAdTIBbrPhXtuvVsTY10AuAMAYAIUAJyPXKD7cuFeggIAYAXaCgCwRhQAAPhMWwHQP1Fq5f5pU3iRHEsX2aFf9lJDvximNDCGKFAsZ8X+nXkt/bv0MHhqKajGvhcsXzPR65ZS+hroHI8Rvrf13swJXwedV4W8C3YKAIAJUABSFCSlgTFEgWI5iwKQptdtbuF7W+/NnPB10HlVyKeCXY/5UusAIIMCkKIgsQxty1kUgDS9bnML39t6b+aEr4POq0LeBTt3AABMgAKQoiCxDG3LWVsqAFsUvrf13swJXwedV4W8C3YKAIAJcOEArFEAAKzA/uhiVUoXtbH/lE/0z/la90G0H62f/Fs/5etTeOtzOnrusTNEc1qOwafjGXNXYczdBIWdxXnwWZwTn85PjfD9rPdoTnjudE4U8i7YwwIAAAbaw1cXNQpAOz332BmiOS3H4NPxUADSdH5qhO9nvUdzwnOnc+IXgJAe86XWAUBGe/jqokYBaKfnHjtDNKflGHw6HgpAms5PjfD9rPdoTnjudE4U8i7YH/+of/zFz3eP+dw6AKjQHr66qFEA2um5x84QzWk5Bp+OZ84CsDXh+1nv0VoKeRfsFAAAE2gPX13UKADt9NxjZ4jmtByDT8dDAbATvp/1Hs0J/yWF/nWEQt4FOwUAwATaw1cXNQpAOz332BmiOS3H4NPxUADshO9nvUdzhgpASI/5UusAIKM9fHVRowC003Njm8L3s96jObECkEMBAGCgPXx1UTvnAgCkhO9nvUdzYgXgDz+72H3ph/HtKAAADLSH79BFrUbrPoj2gwKAJQnfz3qP5lAAAMxgGQUAOGcUAAAz4MIBWAsDXRTqKeF6raUAAJjY8C1w3e4eWpOibVv/drn+ZvmYbVv+Vrr+Rnp4MR6ii3XLNle+Wr7N7Q/q14chkaLwUNgMURiVrHNOsb7lNQ7pNbea48TeD3rNU8L1WqtzoWOMCV9bvYYAUGk43BXiQ2tStO2YEB+zbctFXRfx8GI8RBfrlm1qA712fRgSKQoPhc0QhVHJOucU61te45Bec6s5Tuz9oNc8JVyvtToXOsaY8LXVawgAlYbDXSE+tCZF244J8THbtlzUdREPL8ZDdLFu2aY20GvXhyGRovBQ2AxRGJWsc06xvuU1Duk1t5rjxN4Pes1TwvVaq3OhY4wJX1u9hgBQaTjcFeJDa1K07ZgQH7Nty0VdF/HwYjxEF+uWbWoDvXZ9GBIpCg+FzRCFUck65xTrlyr2ftBrnhKu11qdiyUfI4DVGw53hfjQmhRtOybEx2xLAShbv+YCUHveU2pfjxSdd4ntl54jJVyvtToXOsaYGzcO11+/Hl8HABnD4a4QH1qTom3HhPiYbSkAZetrCgDKxN4Pes1TwvVaq9ckdc4pAAAMDIe7QnxoTYq2HRPiY7alAJStpwDYi70f9JqnhOu1Vq9J6pxTAAAYGA53hfjQmhRtC5ybMNBFoZ4SrtdaCgCAiQ2HOyEO1AkDXRTqNSgAACZWVgAsfumPT78AaC0zW39Ucox+fHLr7y0I6fcYtH6LxNG3SpjR04zSb504+hZKiAIAYAUoADmaSQHI29oMCgCAM0EByNFMCkDe1mYspQDkUAAAGKAA5GgmBSBvazMoAADOBAUgRzMpAHlbm2FRAKZGAQBggAsHAABnqP4H5uiH5ZT+UBr9QJolrC35VKdPcvqLVzn6S1n7m+k1F9fyjztaV3veY/RafHj7eM49V/a7918//Pq9D1L2tuKPwfv0i5fvSwCoVB9ECp2a8F3CWgoABWBLKAAADNQHkUKnJnyXsJYCQAHYEgoAAAP1QaTQqQnfJaxdYgEAWlEAABigADinLgDPXc2ve+rWfvfwC+k1rz6x3z3+0eHjL36+/GvX/r7/2s3/2O+e+HX35xe+efj/WB4KAAADFACHAtD9WaHv/z+WhwIAwAAFwLEqAMDUKAAADFAAHKsCUPJcOdqP3HPk6Plfe75u24eebNsmDKEcBdTQHQ/RXQ//zoTo7sSzd+6EPH1518P//7/8h4vd//37+YVfeO51fgGgEhcOAADO0D76c8tD+jnmQ59s9ck19wk69+lZn1xbHgvVrs3tb4yO4VTblB6H6FjCT4UhfUq86770mk/eTX9K1yfz2N9H0N9DSH09/OeJ+qeJsa+hXvha67UFgEoUgBo6hlNtU3ocomMJQyGkkKAAbEP4Wuu1BYBKFIAaOoZTbVN6HKJjCUMhpJCgAGxD+FrrtQWAShSAGjqGU21TehyiYwlDIaSQoABsQ/ha67UFgErnXQCANaIAADCwjgIAoEcBAGBgHQWgZB9ztP+lPzcgpvRnCcTovIzZNndOU3SuW7dLvQ4pen1atrlxo3yb69fLf1aBfkZB7lsdom93WK2JfQtEYt8GEX3bo+W1cfQaUQAAGCgLVwXoUIgNhZUuXKmgUCDkHivZxxztPwVgmLZLvQ4pen1atjnnAjAWBQCAgbJwVYAOhdhQWOXCRYGQe6xkH3O0/xSAYdou9Tqk6PVp2eacC0Dt+XJ03gDASFm4KkABAMBmEOwAAJyh9K1Y3XZNPebTuqHbs7otW7Im/N6mT9/nHPt47N+569+4p74OAMBGpUNewZ56zKd1JeFesmYowMc+ngr61NcBANiodMgr2FOP+bSuJNxL1gwF+NjHU0Gf+joAABuVDnkFe+oxn9aVhHvJmqEAH/t4KuhTXwcAYKPSIa9gTz3m07qScC9ZMxTgYx9PBX3q6wAAbFQ65BXsAABgk/IFYOgHoYh+GMrTPxpeV+rZn57fvJKfxTBEP6thaXNafwCStP4QJNEPNEq9r1P0fl/yNkN30Hy6mwYAA9IXI110KADHpphnFbhLm0MBONa6DQUAgDEuFAAAnKE/AwABJ8J42lXHAAAAAElFTkSuQmCC)

This is implemented with [binary tree bin packing](https://codeincomplete.com/articles/bin-packing/).
In the tests I've run this uses on average 80% of the space available.
Pull requests are welcome if you want to improve upon this!
