Repository: Helmholtz-AI-Energy/propulate (language: python)

Issue:
Add pre-commit hooks
I would like to add pre-commit hooks to the repo to enforce linting and code formatting with ruff before pushing and things like       trailing-whitespace and end-of-file fixer, etc.



Discussion / hints:

Fix patch:
diff --git a/.figs/hai_kit_logos.svg b/.figs/hai_kit_logos.svg
index 47440fb1..31778803 100644
--- a/.figs/hai_kit_logos.svg
+++ b/.figs/hai_kit_logos.svg
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Do not edit this file with editors other than draw.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1645px" height="224px" viewBox="-0.5 -0.5 1645 224" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2023-08-28T11:02:48.329Z&quot; agent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/116.0&quot; etag=&quot;AZ-NWfF5aXEYaojAeGJP&quot; version=&quot;21.6.8&quot; type=&quot;device&quot;&gt;&lt;diagram name=&quot;Page-1&quot; id=&quot;eryS7HI5FcQ9b5fUF0Cc&quot;&gt;7X1bc9tIk+yvmYg9D2cDN3rGjzBJy/CqwaEJWqbeJEgfTFAXH5MyCfz6zcxq8CKRc4kd64s4sTExYQkiQXR3VVZWVnXzl7h/vzn7fvXtq3u8ub37JQpuNr/Eg1+iKA56Mf7hlcauREH8m12pvs9v7Fq4uzCZt7f+YuCvPs1vbpcHL1w9Pt6t5t8OL5aPDw+35erg2tX374/rw5f96/Hu8FO/XVW3Ly5Myqu7l1cv5jerr3b1t16wu/7hdl597T45DPxf7q+6F/sLy69XN4/rvUvx8Je4//3xcWU/3W/6t3ecvW5e7H3vT/x1+2Dfbx9Wf+UNjz8+vvn97N3iY/j/Fg9venfJl0H2f/3y/Li6e/ID9g+7aroZ+P749HBzy5sEv8Tv1l/nq9vJt6uSf11j0XHt6+r+Dr+F+PFf87u7/uPd43f8/vD4gBe9W66+Py5un130H3v7fXW7OTmecDtLsK/bx/vb1fcGL/FvSPy8dpYVesNa75YpfNO96OveGm1X5MrbRrW992768IOfwb8xm+Gfzyas4Bt/nN/L8N5xCuYwt/Or69u73x+X89X88QF/v35crR7v8YI7/uHdVbmotBDdPN7c/uvq6W61d4f0bl7xnatHrsnV8pu5w7/mGy7eO31g2l0Nuiu81dXq6pc4tV+j98sf1S/Ruw2WNOr//iGPLpt30eWXj+3Vxdun3yfZ5rxO59mHm2+XHz498nc3SNfZ/N3j5cXdw9WH8dusnq5dP6tuz8Ll9YN7m91/DW4+pG/Om7fxTVw+3bTu6Tr++HDeZmu890cZXz7g/dHVxed4fP82wT3X2SCtXJHiPmmI18x/n8/q27Phrx/neTIrltXvZ+Hdzdn7xezLp6/P/5b1n/+e3mfx16+jxq7j9yo7u1vNLm7uzmOOb5VcX6xfvublfSr/s3/tsdc8e87+29UlnvHy7H0wK5LDzxhs1nj+x+zs8tv12fptNnecj7n/fVU+fF5eFsH88svl3fX928Ul5vRyEMyvi0WS95MQ8xOeD7LwvB5v8mIRuUnQuDZ9yoth4Ops6frr9fmgTM7r6cYV43Y0WUd5k7SjokzchH9Ll64u1+f1LMrrIe61wL3KzWiwaPW3ftDkvB/+7orpMq/LJ9cu4nxQ2b2LvXt/+bY6L7LQNUmQF1WDz2rxuqfRYJiMik+P54W/dzHs3cyDg7+NiulT3g57rriLXDvGPSs+Q3B7H6xcMYS9VRjrtIdnwu9phPHGrq1C+z3D79NgVFSb82LY5pMkwTNHbq7ni/GZvZxzNBg2bp5EbjBr8kmwce2U84TxjZe4Zw+vw9zPIrvnGJ+ZBaOBw+/DGPfE/IyjfLLe5IPh06iY4XmGeF/Zavz1IrqdZz9e2OiHd19vzqrq8v5ueY11y9pUfqHf+2Fzc7G5+33y8e7m/vPTdfRpAR9Y4PeVa2e4b9bivkvXlgF/zgcLv56p//fdm2wOwHv3zCJ/K2FpV/1391cXmyU8qfbeqd/Pv3wMr8+m8MjP0eVF78fl2RjWBo+9x4rU7snVzlauHfPnYDTZ/0T8++Fxft7+qRW37n7IFfxTSy6Kxdqst2pHfcxugWcY4PfBxxqrCUvIEqxU4po1V6+BtW4craefrPOibPIaVjmYwUKJEtMVf3ZcqWIcwPIbrGqMe7bXA7cZTfCe2sFLuIrVE1YygVWtcM+GFkergQU3bpLASjH2f3ys+OwGY2gzWLKLMQb8PMbP2QY/w2tomesQHhrBM2CNOeZA1t2MirSlBZ/X8JjBNMmbIHT9pAeLhXWuG7ynwdjXo34Q4zNg3S7K++sAlstxwQNu4OlE7gXQmp+fxRhnO8LP+Ze/NM6/iEynxpg+cR3xjKt9D78CwuDnKG/LdtYEzaifwOqHodCpmAIxFg2QbYl7hhg3nnexwjNj7aYBPJKeC3txCd4TXw8qeApQsF1s8NmwpyQeDdLYPbzK+J5551/2lX/X5/4Nu6XdZFgHzDn8cETkJnIOLmGfiAjFrAd7DWhTRE34YgLfhV+XIfyM7wlhhz1XTxF9gLywSQf/wvMvsaawC9x78OkR9gHUA0oPyt51nxEiw9pi/drpau91f4x6wk/EAuA5RkhcH4xDIEect3iSyK3w6UFOj5uvMSrGHIe4McWIpuGImN7Q+/HkTYB7VHjKNMaMY5SIe0W5wkhgiYwltFCOctpqJYoxn5DWxxj1RNQBZtvPNS0fI6wzxDx8dntZI7Zu4MGYTdfkGC1QEPEGFizUS8O8XXAWYdFDoNYiPry+wMxktHrGaKIHVmAaM74zjo0KxG+9FzyhKDEHQ1xHHGvJF1J5TT5IE8X0CSxpMI6FvuAGuAaExc/zJMQYcO3gOjwyA7qWjJNLXAc6lxuuqq4PeJ1zQsRxmBOuIOJv+zHSHINX5A/iCXgNrBgWcW7xHfE7S2bkGvBmzO8KY9pYjLc5I1KPhHhCNvIOcAfOC60xbYkGORG+BbIY72GcpoUvGS3AE9r9a9t7nVVYI0QQjG80uHxzDW6gSNHCkhEp9HOx2BCZ8Zy9ndcFLWwJY5uBVwXP/rbe/Q28CHOJSLWI8nlARMa4FwG4GtZkFuRz81q8JiKCY473r6+21zVvmLN5EriiEhfBHHKuMC57/o7T6T1tuca6MHoYV/nwjbwG6zHEWpZ8xt3fNF+MomWM9VrZ2mNdwDGuZXe4XhB5EFXxmfg5OR/49Sw8L5G9ASHACbGOXKu1o02DTZhtg7+Bn8E2AkQt3Lsi58Prx3guRX3YOZ4F8611afhMGf0OtsHnhT3U416u+8HPGBkH9DPM8YcZ/RJzjAh4IR8HWjlEwgB2lnGMZosFfK3OVo7RFqzI/K4CX3ThuXxijM/G85Aj4xlzRSHMS1sCbfEMc17HGkyChPgCnAk4D+KbRf7Ie+C58LyfI+IBMKUdwb6IGZjzxsWzA7ug7YLrYT0ZFRHVWkc/5uth2y7ytkT/jmG3vfzMya7xPMFIz56u8frmnDZQD7Hm8HNgA/4la1pqXotZzPuLCcA3YYP0PfgW+LiNDffQmOGzC8wvbYZ2ICzakJ3h5xCcvcOEJr+oumcMR1/gT8Qfcn49H9YV+AsfxTMxMnCt+XwlxjkFlvKewtLk8PqYUR2fNeaYaXN43jLUusFm8rryuFUaXg/GwK27x61dfJjBB1NE/FlwZWuC99xhPpx9Xv2Jvk3bx9+mwIvZcm/Ol9vxmA/JV2CbwNuvxGpiL6IP/dvRToCriwO7JdvAe5D/ANcbYMYgFdPkGmGNE63lnLFl3BM+1YygWAPGlnqGMcjGQzDUBHNtOAscnRm2hrC/VvalfAufPSc+wg9k42P4VIr1cpiXShHz0MZdgmeMPJ4gDiCfQCSXL7ecY9oh50EYGtM/XVSttnP7ZUY87mHtEzC2kDkP73FTd3PresjVyLqfmIfhuWDPzJNKxcOcMbcYx+bTKfEY75m1ZovdPLwj4+fagP118RC2zXsOKsyZfS7Wt7cXd2PaArAK4wMzZJ5WTA07hEdgt2AthjXIeWtnGFgvYMdkjzM84wJ2lHmby2iXZot4P+3CKTcVHnFdsSZ4L32S89TO9FpgJsa3vQfZd6ix1GB3hTO7bTPEkcrPY9ZcDYQVwIXPkTF2ZC2RMxxuq0ZzyEygqBKLqQusleMYEbemPdqWU9x3bcc9tL4NcTdjTForq6kZh+lzsPlGbBu2myZgWMz7gYdYQ/oLGPVo8Lk2nEh7TvwIPAgZB+cPGIBnmXkbnq41H1xXrALmg5kJxpV6/8Zag1MY18B4sH602S13asQv8HkLxNeAc9k6xpIvxEFiOm3qs2Kx+Ek7jfE8ynKA5SFwcIup8lfjALCNbBcHhNELzH/V2PizxDAn3bdHPPeCjLW11yA7kp/s7ofPE9vFOJY+jivGYx3IUBHHyQsQa4sUOAxe1o5hz9QGMmY8wLMp7YKZDLAka8xH4X/tUHYBn4uU1ezux3VlppRYjCArHifUWPw4MB9ugxjLZ9hwHHucYSP/LoaW5c45r1w/8r8S80UsXnB+W9l/X6/B/RaMJ2Dv0x5w1vNF2FAxJgfde2/K54xtTsk5MnDN0vhTCxxkHCuYgTvEkurgOt+nbMx4M+5J36iWnb3mFl/2nxeYNo2IK/RLrjsxAliM38Fd4XPCYnJcxExbJ/hh7bqsELh8eN2vX2LcakEu2BtteR3Hvb22sTg9hm/ytT7Gc0yNuGHomu414PZz5goL+Ae4kH0e7HxGrO1Rl8v7Xa6QYnwzxV1gPt5brY48a+h5aEM7wBxG8pcJfb1i3uKfdxp6HhrYHDoqI8/+tt79TfxxbDkPuO055xNzAX+MjtoS5uHQbro1K8Nj9uTqA3sCzzlmT8y1/tCeMKeB2fAAuY7ZRHe//evU62ADi8BiNeazTRGTpsfsKc4n6917Hzwfb2FDsANyVfy+pm3uOMvYYya1zlnrcxph1OH1bh3Fob0NzDoukcCOttcO7LPvMUOZMjkE+eWh7RDnmTPs+FIVnSteYU4Ly/scOXYLrBbPzyLqujs723tWvJdaai7lBHhTWFxjbHG75z3kPi2ee/CJ/haLD7bAH3IVKVOesxezkPfq1pBrxFiWc93lV0NwO8ZF5o9ZbLGtBCa6pfgmMDNXHsL8QgqX8U3g7Q1xWPnJLL7a5hrkc8xHwFPrWezzDMzXIqYqaGtHziBeCZtMw916MU7uXxffxLzPlsbvwDepkFnOEcrXjW8yn9YcgdOs8/s9XmR5B3POmHzJc6fmGS9CTCO/SjXXtvby0S6P7Ph9In4vfloiFmiOMNe4T/9gXnum0WcbGw94P7V1KiTFeC1bO5zvtTTu5/Mt/Pzj+R4Nvv6F+a5kC+ABjTvE4YPrpnDSLy1ew/7gc+VSGKqcfquHbAyTXYP7tFf9HUdkDkKO5/jM0UEO8gznSuoj4BnK0clROu0Htp8RS8h9pNkgF8NzDX3OOGVtIKbdwqdpL+TbIf7v4lfimv34VUpT0Ge1sz0ccsu92OexAbyFirTybOYVpX8NuDTz3hfv9dfF873eNLCcMtfzUwmmPqKaTOLH0FLNzi/W4v/UT6gUm2ZTBZZLUHmVTkM7Z+2Ca4P3gQuK81EJd4FiFNYuZz5G28dYc+MICfNLX4t5kk0WrtM44pGto2zSmdrnY6Tl0vCrzh4ZLxPVYnaxdl8TO7hO3oocZ+Pzhw3zIcXVetxKNyMWg8fkxFFyqRZ89Yx/n2Kdhm2XR7j20vJAxrt6yKpDQzWVlQGbH+RSqoX5+WmHtDPmEYlpGUOOJ2aejTjB+LKvGTJHSUwrSXc6YJF1c0xezjGGzBHgQ36uqiA/q1jhkJJtOEAcZ/UjU17HnBPzgnuSi0+BF5XlMkUa8Z4jq4gwT+oxVyXH7LAcr4XPZuQ/8PsF40WnGSZe69sIJ4T//FzgyGBomILce0Qsok+1w1B4bnpZ62tg2+vGvaVDmv42cLFyVV0H355rfYFR4+AvaIPtcW1wekQbHB/TBqNj2qBxv04HLI9og+UJbTAXJ+N9gAPr0aE26ONv1dVNWX2A78A35pY3Ys3C3MfXLnfJaYcN86Bhu9Xutn/bvq/nfN6sOALsGBWmU7qB8r5EsWIbV7zWwNqt8qV0jfdjTpBfdjkZOCNiQESb5xyBywT5oPQ6nvMcQboH9T5wJWpM9PUMz7Ngjgl7AsZ3PAbrorhVVLHHC3KEtdtqeLyH29fwmIc28IfIKkNl5Ir3/DtxnrqdPR+e13ySOj2rc8yZMcZBSf0j4HN6PQv2MrbcqsD9m/1rpjNKvzNsimHTsfET6kXUVVStYOUhtCpbBf/MNjfU6wvO992jjS8DvnyKtvrFfUU8xDOXAV4bK/cfpK1iPmvlnFdWGPe0kBHjINbCeX13RN+AXbqthkxegNfLN8QrcV9pMyuf/67d/LmOsrbPVg5qmiE+J6JG1mkKwsZaWIX3DKkV94gvI1Z3BoZltAE+D3yxMe2K/DA1HdK0CGKWYerAcw5we8eqHnIV4Ct82DgR/KZx907XqVcaVk8jaT3FlmMtVQ3i52jN040z/O6uNYzTsE9vs3hPnXrsQD5Wd7pURp3L22IZSaukXwGH86jytg9eNt/Z/W6NslZ6XPFMz2ZFi70D9aJlfpRz3lrk4ZOt7tr+Ld21Oaa7Tne6a3+ru4Ynddez47qrrfEL3bX5H+iu0THd1Q0UC4E3yPvPqo6XtTc17aBM8jp/NA48jtnjcah1O6zPjL0j6tvY+sHklB+Mmz/xg81LPbHzg2H8F/1gfcwPYJtH/CAL9vyAfPWlH1ht4Q/9QON97gfkiC/8QLofNUKL+3N+rnpQ1r62wDng9bV6Wuadfwylj0v/bi/J3zEn4x54Hni9x/r6feS5b7TlQ6Zt4jN3ucu2xtP1nhR7fyue/W1wqAVbPJzxc+iXfPaN7B5r7tfGdIY67Tixvx5sr1v/D+2T2mm2tHxiAc6VdfYT5/3/AY5OTuLo5q/Zj3TSl/ZTH7Wf8E/tp6j+zH5CX/MCtk1XXT3BtNohK/OmBcO/82b/WkadLMgtBnZ2khzB0c3oT3EUse4ZjuamgTM/XlK/Zd6mGrdsdsZ8jniGz8x8vQy5LnVx1ULZtSLcYV1UPi+7RGzY1iLk58QvxppKfNgpLpfSTDBHqmFJM2kXVv81/rzxmgjrfNT8e12tI6e+Li0WvEx1euYH1KsUaxh3WnApdspQx2/UKdRwbUobA7gFeefuGp6jrbie0t1kg9IsqfGCH0tXy6gdthqj8kdxHsTBIf3X9BLY60xxj3lzGqsuaTkacsZpj1yf9aCc9iTujViA/GIvf43U+4D3G/9nDkv+P/N5CmvHyq0adRLJfpF/SM9KxX25Jr7ekeSmh2rt2YFhsQNzKR3c11gGrsNG3KeKTBvA80tPYS0Fa0veTqwChwCGsVbMeOrrJMCRljoR5yDdmNbFmsmUY1qp/wBjx30bjR0xxeoXjKezwPIUxNt4G2eApZn8H3PYSPv9WxpXCpwoj2pc+TGNC5zVeCzWsen0lYX0adZKqI1a3S1lfFbdhPHLPcx8bAeHiCqPW5d/QXOZ9Y5rXMyrXmpcuepbncZFvD2icQ2y4xrXl6Ma1wbXn8V3aiKwrbqKfQ+C9AAfo4ERxO4Zu7tWz/623P3tPWNRaJpQSVsnHiNfrOJdbi4u8zw3Z031ZW5OvHuRm4sb7PXoHM3Ng7+fmw+P5eaxaaW768wZ4Y+N6SFdjw7zIHJC2F3htjm7sIiaSUF7Uh1pI12HdQDZXrbOLWdhbNuwn9W09inGwP6N/evykdD0Qca5ijWo2DQuxFvqoKpFML6NxSvgH7GzOKR+BOPMlq/l6nNifCW3YK4ovcnzl2Gr2qnNGbHNanHyVc9TsXZ7ObvPxaaJ7yuC7WeMC8aF6L+7a9t7XfU7bjyMzQbBGWEjsEHOA3UQ9nSFOx7T5bgdt68C6f/i9ljzZm3cvhAH39NWO25/qHt33F7xiVhUl52fJ9anQh/Lgk6HtXrykJ2n4Bgfo05byOubxz1eL3uhfoHrvveAekap/Fb1K/K+Y5qrYRNwDHYx4Tow5rrE8+0N677GRxaB1mJrx079POwuzNv9PpZPxKKe6sTAfav9i5vHN+Be1JmIecbTVMdqqJU+q/1zXJZjqR7scbcAKssOGRvYuy3cZY32IH/yuKvuYMNdYFgXK1kzKIS7LfnQFmMb4iT7hhbBNtdSnVJzj3Vgf07nJ1mwN67kpjbsBR7GqosZ9u5qjezJ1tyza7ncq9lMD66b3u1to+t1Gqhvg/120cj7stWh9PnAtjTxfQHqIfK4GznFBnKyWfsyr5o21r+Pz9/N+//2s+z6el72s3z4S/0sXh8QV7dxI0bMWnFpcGZpF6xpNF4HA5eYtfv8lXPIehdjvvHlNNnVkjPDc+nQwD7pCuyHW8Q7rlv2FMuKssdaedczyl7UkdWEsG7T0PCV/Whls+O66q0kDw2Vh9EGuP+hddFI+hvjrXvJaeddT5x0vHakOfe1hwG7x5lLsR4wbaz+yRgnzSZi/cJddJr72GsfGNuF8lfm1T3Le3zthbZKnnVQe0FMrqn17WovquO2Wcfru16Onu/LTbraOXku9f+RNIqudk8s5XoYrrBPFlz8JZ8l/7TeIHUmu37XtzgT7lr38XRpPFxYyz4E60fa47hWY0JMm5umhPkKFdNpC+Ds2zEWC8u/yIPrfNnhGOfddPTSdERpmqrZeF2VPrLtRe203iM9AN3fnvcAZIaddaeFb3WvTrveaIzkK+I65C5ZoDzf+H3Y1faeYQXn6lgvZ6Kfux6hgfqnjuCFeOMf9nOSM0gjhg3AX3g/9h1EVs87xAytxQvMSH2/UNfTSW2TfTrkQuovbqnPYb2O4MZ0c7wPbhi/7Ot01udaE38D1pdi9muDOxpGAV9M28Sz+ZwY8SsSV+D8IbfwOQc1DfAW5ZncCdHr+pCZhxt/Zt2CnCWLunoI6wHkS8xjMLdLG1cVWf+X2zAu2pxpDYJD3by75nsbpKF3MWnseyX83iSzFc5ron6iOXNZ5SbEHWKgeuW2nHpifcbqYWBORBxhzqAcFJhGriHsKxvy7lF//zr5yWKt3gWr8TTqY9KY2FtFbCVWske+8v231Gnf73pEB9LurXZ4UXXrF7rI7WKD2U1PNVXNEcddIV57TaAehxa3xszDkm6ewGciw96swVo0Pm+jX8Rmf3xN1fMcrVEPImPrnBhOfcH0CKeexXKlHU4t8nDF0V3d1fq+u/y/64PM2A/ouesiuR50WMJ41GHQe/Zys7aN+WRvAOsc1K3KUPq2NDD2U3b9KJn6/uQ/VrcgVxcOjJSDKGaZPk8drPEaOvdRTIK9OvL2mvIVy7FVA4tY9x9ZLoK5mfl+dfGk0OwAXK5lz8LBdfoHY0TsOUio5y0O6kvMgSNqINJLu/4B238BXJHmGaqXsl30VDOmRsY6HPcLdH1iiP1dLc3vG6FewrofuSX5wBL5DflTQ33F91BZHxjfY72S2rXkaptX5Vm1cC60fD1TPARmbnkL4pnva8L8kxfKt8nDaYuZ13UWskFqzi+fdx2YPgm7+vI4/7PdRtf3b59u7z83182LPYy/aX9sm3Dr8j+yZzsKwsNN22+CF5u2o7dH9myHSe8n7dmO/n/ds/18PzW1f/bNIa4mGXcB1uPkcN/29lp8dfEpuBoE84P3zN9xn/SbMn73dRZN32YP75rLL/ld+XB5h799424x7uV286y6gT2V0d2P6zqYk+PaezdPZRvMrz58CsrB44/z+Ca+aXqxa3o/yvvyhyPH7r9tb+7L+e/1ZrdvemL3vr74HMwuPn29ORsmWd37dn3x/uFyotd/517zZ3utf7s8+3xfNvZe/dzOuDPuN8xNUN6/fyqjS3xu8Da7D7/efPj47bZfbaSd2n+mFYj7H1xr5P997py7436zB+ShfN6H7MOnZnbRay/v3zbX8Csw/q/XZ1PFn/+aZNXVBXfacgdrhrXqdgfr6oN+RjTNqjL+1LM9uvLSNxlVxYth77JY2R7ei7fr2UX+7ebD4o3rrtm+3jdbT25XLUb04yqya5cTv49wkm4sA1ekbaVwDabVzRwRnJGodtWkTwWWqD2sPs9TVsNjMv9sWFXOlBMg4LuLbMBddmMqTXxPYJnMeJO9n1WKai1Y6ORdRsvjfbTzokiTDGPOpeDN8J53UYZstPvsq37K/atS6m2f39FZmv/0WaJ2+KR92ORTDWNMxVla+Sfnk65G0vhm/rryupajGykHdAlnYkTtaIAYrZnIAsX+geOMBIrxA426R16SzzmrjFFlwtnHrFJDZyyPsjNXnUtvY96Yam+Aei2wgphZ5EbpSlys8D1j9XCNVVpmlie2tg/BqQ8Rn1Nnsuvp2nJT9i0sKqtHDm2/4wAcdZJaXm56hnJNrS5zVHAQPpOz3BbcMV1Ld5eGNkO8pOWoRksu2Iz6eBblWm7jrLbAZ6pmTbqRjql6FfL4ftqqf1U5Kt+fKofd/f7uEffZSBsZlPJnv/fT8Ic/D4bEKqztne1o1f77x5o1uFlxdzeKLP5dC8fugtvicdNds5j47ek66r25/PLxxyjOgRVvv/trd90e/Yz9LcxvWtM5vbX7eeV41+vMeF9g+siMXDPJVH+rQsvBua8g7WVn68q4497cIJZ3a54bX3uyNd2tifpDW3imuOl2rpn7n/I42aTV68beVtW/nbz02u34Tsxxtv7Jc5xng7Ilv8MzkWeRA69hR899BHxLuh7HvBEfA+fOhuuKvWjnlueG6o0E4nRzSt3iXPPGPothZdoqOG/ftENw8sr6FZH/712j34N3cS02di/tISNfq5TvSxfhM7C/T/pU63ewM7do9VxFZXyevWHd876Y/2mgvZ51dhI9aTe5arh6RvaLSCvAe6U3sS68vbZvA6eQtXE/H1mxaqmfsePx58rHEjDdF/EH/7JTCyjxIv4k6kQsyujlTJaxKo9A8JNe8WGG1atUwXJCGJ3sEY76YMR1t3de0V4/wwLm2Yc8uLUTPDQHozkrAJ+/ji6mv/oTPn7AU+qrL596o3r46/6pH6P73o/rh2935f1vv2K+m+toZdfup915HDz9JuFZEOzY7iIF5qmnjg9EnRkRVx0OWcWM1O9ex3xWHskzj9rD6ppWq8wu81FgGO+hC5Uadr9VpnS5LoJ0Fr39XdbfMoMXcq/UGTzvkM7RCrlTDTzGR6PJetW9d/8ZOrQDmneRaOm9svVo5r2OkcAj3nzdRTiu43ZONA8d6mIuFBHxWqFom22ygc2FdQAjg2+6SJSa16jLvkwUzdh92axX+reYRplFwqWfzwToK4Q9988Ie+SctNzp4ziWwTZCE/lb65qEnTcpVbfQKq+8z94z2L9U+rtouPEIgjGnNhf2HKGPqo2psRrLm+wsqNgVP9K5JlREqzjj7gBkh+eWuYpx4N7sDIjOlU27MJ/w1JsFEY/RlJ3gvA/VfI9wWAtGC2ahxaIF8mJ86VKnDxTgiHNjIZrrgt2+YLYTdeLs3cOtc2MhyqBHtAchXtqOLFoePhN5n38e2L3da5AGinq633hpiniFtdfcr3iWC1iL7JEZuCExqzieyahKJqRm10FrKpG9XzZZq5pM9UyMCBFV9+qQ2/8bZOqsXiQj2/1JxbK3d62xMzlSz5Bmssfcz5mdKDCuNF+qIHG+kGnZsyTnVP6ojsg2M3W8Ijo8WztfJUZUy9idXY/9zqQsBvtrdCKU76CnLRFHWfUTK+HOxAn8VBXhaRfl6KfW/c71kqpV/kF0eAXevWF/iK3SLsZvkabZcqrQexZrg5X37OO8d3KMTzlDPHKvDm2ec975n3KpAw7PrInnQD2LPo96DuuxOMWjXoGrAqmEvKxRlvQ0WAYyr4H2A0YckyO3VxTcXTtnDaleNEfGZNme8pVhLA8ZVOaN2qOWnRir+9mckWNlredJe3CJuLXW1GxASKXo13q0byxyMP9In0ed7vcuf+FYEzuPo6oKZcmuMZTnuRhgLWIOQIVjNkDtcS8/MJQi55y+zOFO5AYWKdwatt75RGO9f/v5m3ueF7QWLbj/gGtO3XfMehDRL1E/iiIHWRm5sp63pzrj5LmNZNqX5efOIr/q4mPVr9hrmNlnLbtc8iSatMe5ZrWeRezc+WfQhKe4iJcMrLsKmEsr5dlZoc2sRtSzs8IydlxVt/N3Oa3aqeujWjJb4okRI94PWQArEr5LDLx06GOQYwWQM0r9gl0Wjd6vndsL4yjE/Ya8gNyXswTPV0fptKuEeC5BvGZWwaoZeQOsa5tVbmO4nbYyf+dklToVZLjsuMzWS6ml9A0N9RlANXVd8qwwe00MCwjz5gTPbY/y3MSd5QvE1X+I5y6sk91XMGiFhj6yPHEQy/7GCcby6C3Srm/He+r5Z6/A0xc9IiAri/bcVI7G5OqNcYu0UdQAAlnekp5Cx1eIBOymY0WIGXWqDmFFPFWiyZFdT55eq6JNX1jRRv0OaqoO+NvCezzzJXYleoRjxdEiL20UPpKpuyg3O2OFNDKf44kQi6VVPrZ/V+eSqURUoac8IWh3fyDfSSQJ3M9XTXn+g2U4Fu/YE06v7skbdVYpZ9DZHqZiXPlzQ8gzyLTpxdpzidkPMuvD1zlN8KJKvey2T4y1ycr2ck09N3G+/2xa+bq19RwNgMPGhVrLAoG1mnmdKCh9g7OqfYHqjWGM00wT8VqL9VmiWuvcsgjruS2XjAXiMsR5678nErHulYjZ62S9ISzBxqg4Vgw3mZj4Ymk1+EXPMhz831edk30rlfV2KaNqdMblxLI3q69ZxomMY2l9Z+Oesgz1yQ35HrJWxLyOJTveu2V/Q2dF2p8yN8TTeTD9dauYOvDajeL/QpotvFR9oua1iq09zstI/XrDwGIe1mp+HF0wLz8fXbiPgrVZnoApbmU6tHrZ4I2mR5Ere3261T7wYDcmIVFsvTjj7evzOuP1jexTvGXKvrcTyIT7/XxkakbWQ0+FYq1+sTn5B1GAPVSGAkSGnVrjrxt6hKeiAHztFdbJaV8gudSIPf/FrGfPqbN3Yh+RzRat6tEyW4UnPrfLRPt0C89UuJfZXr9bK7P5nuanr/4S+Y7Yg+5/ah6q15iHxMkHgWctcWQWvfQp4oXsb7V/3ex12pxE+vA1kD7nKcC1ds/1bLeo17rY+WLdLOxUrqwzquvQFvpucuN+21jpT3CMje0TvRBz+77rox3uX+MOrEaoKu0kVZdwplOSGWvZUTQMmaWoC5avaYmk0gLYKRFaFCqJ3P4UlLFHr7WdJGMWYki8zUSyTiPiyczeWiuhKpV3xW12ezBzYufjZIs2VoVqmRWX0jOAho23zJCVCHlDrWjGncjIDHRCYMQTOc+tkuGR286pZQbj78N78yzY9ajTJZC1GC+YSXvTPPsqnO9CP4FctKafjlzsjHqyXfJ/iFzNSeQ6FWGKV9CZ6ynPHObJJ2vbhSg7YHRWNqw8QfoUbO3DYwUfYef0zu5tXZijJDrxaA/RRl57lkLQyA6568jryIxgi+7vWteDv6ubuuLfWXFnBXD//pi3U3P2GmjPXW2Jzl7ej8o++hoSS3HYQ+527BUS7kp6gfTiv6fyMDCiVxhTudaOjeYnIHf0KsjNcwrEx3m+L1XotBWKTNYrZPasfQcc0fZn0zTYs39iRIuNZSwuYf32XJFhGPtVjezcjM7at/c5WFXG5pOWWr8Gf6xi9axO/p38cfYa/JF7fqk9Apm4N30RjfZ5U9tVr6RPqVass/xtTK3pYMe8FWPtP0dz1ldduM/vbL6Q9TJvstwqUE+y0NNJSz7tHa+grDdkpOd1uucdGq2trEbFp3fN/qh8jArVwXUMC9rq1Iq/gpbh1uRA6jzW6VULX8ct1eGuZ1QXT7Zv8d6yuYLDoxh8quabt+nP91Z25/RVffjnMTh+hep+y71a5zozdGin1BdDn2tP1ZdvNZiFr+RJCYp8rs4zSVZ2vpf6MdjTTwbS8/1EVgHUPshUZ6rlOmuDe3TcJrMzd2KxSZ1tNOyYJ88FNB3DWCn7mGQZ7J/KvTaeqZI2i41FL5SHeh0jMfZTSYVVbzgwVGdE99e2LxtjFMZaxbKxam+p2oLtT3I7plpstfuePw8pHqnXhH38zp/Lt2i8dtNuz34sMp9NcL9Jl03MIp9N8Ayh/WuH2YT2kAODqSpLn7E9fWDgsWptfZ1rxDPyKlPx1rbPAe8Xy2HlveGe5XHluyyWOg8HjF7qoHQveU9j/ek8+ys1VddrWVZvooo7i32NQX11viahPvbcmKb235224lfokWSXf88i/jBx2hG/2McQr097VFe9d6yTqgxzeDr/8BjmNMcUJvFBz0AOonKrE6nsOvXYwXhj95fFnsDdMnoF3OUJbV2FzXCXJ0Bxd5uxotYNNJ7tzz7vjPNdv2eHuT5PyKwW3ypf3TIrMZJaO6Abj3H8TpfwJSZqfk7NyWvEIp5W+6RvZNB32pSNs96WRvMiCy8T5s9SZA81AnWp+W9pYMej3z1eGtJp5wDVT51MFRsSdteoC2SJV1Eb5epAoxFR7kAjyKQfeGTgDtVKO+bUQZrSExvbicF+AHmuOhRf6AbbzlEpuHYy12Sbg/N58IzTffTudATtoO+6InWCmH3jhDrcjDlx9zcrqWWjblJ9n4hXoHlKqU64THvGU6h3bHUEu4+qkUSPtHfenY4Ku7J6hSqSvhvQ591UqU7E+tHgNWI9T5NK4tFfUwxZfQ7smcXVyOU2R7kaosFxjJn+QxhTvYamsrGOi3KZM9vg7ssj/uQUFQ90uNZpjOyvGT67Rp+qjvtUcVSLa6zfKVtbl2gmv1J/mPxqHOST53qcrtG2dJqiRTyeREKWIt9+5ltp3GWh9APPDNo9TS7obNU+l7uUFtwt1bzQ5nbX/8DXeFL+EX+rpxHmyPscd9dmh37HU2gbr9fNpddxR31s4xurmwGZpuqK3JW2pwl5rY7d4tVWXzwZ3ZNXiO48yycwhXdsZ4nPu842rjTPoplWOgfHrzTPfc3nWunAW0eifiJ52My4D6Ob9rjyTG2iltWs7But0iAbWB0t1341sIDuvYWiRmCVfZ7Lyo4E7nubib86ndswa63TjGcHecQXZ6TFAsFpeUA210UOQ3Wz8rr03Zbax+ffk8UemdmNu1X1nNUvWN9rcT3y/f24j+qOsd1/6ld5rLNLeJaBvEuZ1vDldXnvdKcWWw/Sk86UqmedYhx4FTjS/r06M+5uZwL0rNuN+9547yHPSOkyO/F3VuAdlXGqjNaTEnddE4q24r7ba4GvB57udEteIx/HSC1G/q8V/huscHzcCvt/aoWbl1Y4/ElWOHoNLGyd7xkYa3+F70L2q5xW/nwT39fg/CzovELrqdS+J3WQ80yg2CpW0z0Ls9+tvlmyg9q+40QdwKmd42rfpbDWPgjtdebZHkM7D0OVNmc5JnW5geXKfr/5mucc+lwysD1COnPJtDt2nGi/i3o32V1yZX0OOnNsSf2P+xvVl6fv0UqtYtZmSzt3DdF8rg7Z1lknO8/+2+bEyndZ9dKclO0uF6enba+pPst5Nu8WW0u0N4RnDMx9tY/7hvvestux73XQfOkcDXVO63wuMb51VwljNxmypn32sr3m54B6tfbMOO6cGIwP6s2f52kilGkzz0RUgTvB/BavsOcn49lE6iuh9srzbKzPlBk2v1dk+kLHFRK2095+9m07RzKe6baXfY9fjLdjxp+pcUvjSJsDLVcd8Nvn+HMtt/cKKlujU7+4W3/A79KcxXi6rhsp3HUjDZ95bel3JvF7Rg86ktiFk9jvVHP4LRzd7/JCvt6+BYUniZvXtv6bCOQRzzqT7DXsdW/8ifKY+a7vy05AKjcvupO8Qq9vA2q04tuxXbAPTXtLeHot42bW7bcItvxTp75V5rktT8dNTdXqy1MDnkRpHUpe2UNsoUqlrit1BouDY5X3rtXba3tdStPWuqjUR79RbbKr/89Vp1TMQ2wJfT/bYacSkGirgDGfa3bdStw96ePC9jVSGid/x4NPdyyNXqmerNPPm7V9F23h2qzrAFOuoh1pgeWxp+rKjr2uje/gks490vf9znaa0a7XMPG9hvR237nOk5ymvW2/4cRQ1uZvdry+PN/Wl72nMzf8AyWy97NZYkFPlxLJ/RA8f3WhjoqXWJXpe71833mj77vYdRcEwjCxHp4druv2XdjqUlA8AuMRrnLl/mDEP5uR2Ihnvmt9Z+8vbVwdh0dQ3neIndw77l5D2eFZbXMhW+DPy+l2qTV2tkwZZrYv0yt4lXr6iRqdkuDZvs4S7RA9t73GPeuz1/l1jb6bjef99VOPhFtupe9ZOveslXsWVIvgt0Vb9i4+Iq/g2UO2e4rfzdapH9qJp2zjgO0PtddhV4MQi+920fX8e5rcqxXcsZn7XWp5nW65Fc/yyXcZj8bJOol9L5WUZF/H4RnknWKhHYbPrtP2S/88nl1LlVg0OvdrvmP82qOvM1RmjY3dIw0VRI7dakc8H6n11dBDtq+9+FJlu5zVn+05i/K9a1ZTGrcnd4/Sb3++gsbI+aQz/WVrUlUP+yFq7U9hBhnZWUDDnVLfPx5xjiv13Bdz7PXWE/HSe5mFulN799evoQGN7CSLA1xVtUG74BbtNuvUvpZ0jWi01k6RrtMd0V/jVf+z6lo8F4z4G1Op03cMDhbNroOvUiXIse8APnxu53rGOVXFSZcxiqUF9p2SOguhY0g75iGlONvHAVUKcjt/LOx+t/OswaWF8dOOMflONGd7lFqd7xQZk0qfqaGpdgbbOZmzwHYHZ95/M8thxPzGyqUsJxm2eV16H55tfP1z4793l+/nbskj1w+6JL3WMzXO7RVN7gTtKiQ6J3Ke2lma2+/xGHZ78f15dLvfbcdp5fczTe38/Xpb8Q/+KFq8Qi9Zm651InSz3nmJ1dN6vp7WaP9717lU+11l4idlcCLq8zWOOuxI30wB9Ku52jzR89BTecoIT1i200o6pND9GVFOa7U8W+Dnzs5CsxPrTFvl9j7Sv3xS63w4PhMnuyv5HQA/P5/l+csW6/ee+YKnEnRVBawAz0KhbZ9gNOMTnG8mq7CKDrO6rg+r6jhc/+3D7/X6xyWQ9uAkr/Ju/u33Kx24NX9Y3q7+I/gl6v0SBUnyn3FsPwa7f/7PP3P219vnZ3/99uuLs7/eRL2XZ3/9Gv5nGP7t07/w6/fHx9Xe386+X3376h5vbvmK/wY=&lt;/diagram&gt;&lt;/mxfile&gt;"><defs><clipPath id="mx-clippath-inset-0-44-33-0-0-1" clipPathUnits="objectBoundingBox"><rect x="0" y="0" width="0.5567" height="1"/></clipPath></defs><g><rect x="2" y="2" width="1640" height="220" fill="none" stroke="none" pointer-events="all"/><image x="162.5" y="43.5" width="290" height="145" xlink:href="data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjAiIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjUwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwMCA1MDAiPiYjeGE7JiN4YTsgPG1ldGFkYXRhPiYjeGE7JiN4YTsgICYjeGE7JiN4YTsgICAmI3hhOyYjeGE7ICAgIGltYWdlL3N2Zyt4bWwmI3hhOyYjeGE7ICAgICYjeGE7JiN4YTsgICAgJiN4YTsmI3hhOyAgICYjeGE7JiN4YTsgICYjeGE7JiN4YTsgPC9tZXRhZGF0YT4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0ibTk4NC41MTA1LDI1LjQxNTk2MS0yMzAuNTE0MjIsMCwwLDc4LjUxMTQzOSw2Ny4zOTc4MSwwLDAsMjcwLjY2NjE1LDk1LjcxODkzLDAsMC0yNzAuNjY2MTUsNjcuMzk3NDgsMCwwLTc4LjUxMTQzOXptLTI1My40NTgyOSwzNDguODE4OTRoLTk1LjcxOTE5di0zNDguODE4OTRoOTUuNzE5MTl2MzQ4LjgxODk0em0tMTExLjg1MTU5LDAtMTA2LjQ3Mzg1LDAtMTI2LjU0OTgxLTEzNS44NzA2MiwwLTc3Ljc5NDI1LDEyMi42MDYyNS0xMzUuNTEyNzQsMTA5LjcwMDY2LDAtMTQxLjI0ODM2LDE3NS42NjQ2NSwxNDEuOTY1MTEsMTczLjUxMjk2eiIvPiYjeGE7JiN4YTsgPHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJtMzYzLjIzMjksMzc0LjIzNDksMCwwLDAsMCwwLDB6Ii8+JiN4YTsmI3hhOyA8cGF0aCBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zNjMuMjMyOSwzNzQuMjM0OSwwLDAsMCwwLDAsMHoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMzMmExODkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTkwLjQxNTgzOCwxNTMuMDQxNDJjLTE4LjI4MzU4MywyMi4yMjcxMi0zNC4wNTcyNjUsNDYuNjA1MDUtNDYuMjQ2NTQ0LDcyLjc3NTMzbDMxOS4wNjM2MSwxNDguNDE4MTUtMjcyLjgxNzA2LTIyMS4xOTM0OHoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMzMmExODkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTM2My4yMzI5LDM3NC4yMzQ5LDIxNC40NTYyNSw1Ny42ODEwMDNjLTI2LjUyOTAzLDEyLjE4ODU4Ny01MC45MDY3NSwyNy4yNDYwOC03My4xMzM2NCw0NS4xNzA5NDdsMjIxLjkxMDI5LDI3MS4zODI5NXoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0ibTM2My4yMzI5LDM3NC4yMzQ5LDAuMzU4NDYtMzQ4LjgxODk0aC0yLjg2NzczYy0yOC4zMjE1MSwwLTU1LjkyNTksMy41ODUzODktODIuNDU0NjQsMTAuMDM4MjE3bDg0Ljk2MzkxLDMzOC43ODA3MnoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0ibTM2My4yMzI5LDM3NC4yMzQ5LDAsMCwwLDAsMCwwLDAsMHoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0ibTM2My4yMzI5LDM3NC4yMzQ5LDAsMCwwLDAsMCwwLDAsMHoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMzMmExODkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxLjIyNTU0NywyODguOTEyNDZjLTcuMTY5ODE0LDI3LjI0NjA4LTEwLjc1NDg0Nyw1NS45MjU2Ny0xMS4xMTM0MzQsODUuMzIyNDRoMzUzLjEyMDc5bC0zNDIuMDA3MzUtODUuMzIyNDR6Ii8+JiN4YTsmI3hhOyA8cGF0aCBkPSJtOTg5LjMzMTA5LDQ1Mi43Nzg0N2MtMS40NDIxNiwxLjE5MTMxLTUuOTU1OTEsMy4xOTc1Ny05Ljg0MzA3LDMuMTk3NTctNS41ODEyMiwwLTEwLjUzMzQ5LTQuMzI2MzktMTAuNTMzNDktMTAuNjU4NDRoMjIuODIxNzZjMC0xMC4yODMyNC0zLjQ0ODg0LTE4LjA1Nzk4LTE0LjEwNjk3LTE4LjA1Nzk4LTkuMDI4MjEsMC0xNC45ODU3OSw2LjcwOTkzLTE0Ljk4NTc5LDE2LjE3NzA1LDAsMTAuNDA4MTUsNS4yMDQ3OCwxNy4zMTUxMiwxNi41NTMxNywxNy4zMTUxMiw1LjI2NTc2LDAsNy44MzcxNy0xLjI2NDc2LDEwLjA5NDM5LTIuMDc5NzJ2LTUuODkzNnptLTIwLjM3NjU2LTExLjg0OTI4YzAuNDM4ODEtNC4xMzg1LDIuODIxMTUtOC45MDM2NCw4LjU4OTk3LTguOTAzNjQsNS4wNzgxOCwwLDcuOTYxODksNC4wMTIzLDcuOTYxODksOC45MDM2NGgtMTYuNTUxODZ6bS0xOS4wNzI0NSwxOS4wNTkxNSw1Ljg5MzQ5LDAsMC0zMS45NzYzOS01Ljg5MzQ5LDAsMCwzMS45NzYzOXptNi4yNjk2Ni00NS43Njk0MS02LjY0NiwwLDAsNi42NDYwMiw2LjY0NiwwLDAtNi42NDYwMnptLTM3Ni40MTg2NSwxLjM4ODEzLDYuNTUxMSwwLDAsNi42NzcwNy02LjU1MTEsMHptMTQuMDEzMTcsMCw2LjU1MTEsMCwwLDYuNjc3MDctNi41NTExLDB6bTE4Ljc3MTI5LDQ0LjM4MTI4LDUuODkzNTksMCwwLTE0LjU0NTc4YzAtOC4wMjQ0OSwzLjQ0ODU5LTEzLjA0MDYxLDguNzE0NTQtMTMuMDQwNjEsMS4wMDM2NywwLDIuMTk0OTcsMC4xMjQ5NSwzLjI2MTI2LDAuNTYzOHYtNS4yNjYwOWMtMS4yNTM3My0wLjI1MTE5LTIuMTMyNjItMC40NDAwNC0zLjg4NzM1LTAuNDQwMDQtMy4zODYxNSwwLTYuNzcyMzcsMi4zODM3NS04LjMzOTg0LDUuNzA2MTNoLTAuMTI0OTV2LTQuOTUzOGgtNS41MTcyM3YzMS45NzYzOXptLTguMzY0MTYtMzIuNzM5ODUtNS44OTM2LDAsMCwxNC43OTY5NGMwLDcuNzc0OC0zLjAwODUyLDEzLjE2NzE2LTkuNzE4MzUsMTMuMTY3MTYtNS4xNDEwNi0wLjMxMzk1LTYuNzcwODQtMy45NDk5NS02Ljc3MDg0LTExLjQxMDg1di0xNi41NTMyNWgtNS44OTM1OXYxOC45OTgyOGMwLDguNTg5NCwzLjY5ODYxLDEzLjc0MTU3LDExLjk3NTc4LDEzLjc0MTU3LDQuNDUxMDQsMCw4LjcxNDc1LTIuMjA0NjgsMTAuNDcxLTUuODQyMDloMC4xMjQ5NHY1LjA3ODY0aDUuNzA0Njl2LTMxLjk3NjR6bS0zMTcuNzUzNjYsMzIuNzM5ODUsNS44OTM1OSwwLDAtMTQuNTQ1NzhjMC04LjAyNDQ5LDMuNDQ4NTktMTMuMDQwNjEsOC43MTQ1My0xMy4wNDA2MSwxLjAwMzY4LDAsMi4xOTQ5OCwwLjEyNDk1LDMuMjYxMjcsMC41NjM4di01LjI2NjA5Yy0xLjI1MzczLTAuMjUxMTktMi4xMzI2My0wLjQ0MDA0LTMuODg3MzUtMC40NDAwNC0zLjM4NjE2LDAtNi43NzIzNywyLjM4Mzc1LTguMzM5ODQsNS43MDYxM2gtMC4xMjQ5NXYtNC45NTM4aC01LjUxNzIzdjMxLjk3NjM5em02NTQuOTgxMzItMzEuOTc2MzktNS40NTQ3NywwLDAsNC43NjYzNi0wLjEyNDk1LDBjLTEuNzU1MS0zLjQ0ODUyLTQuODg5OC01LjUxODY5LTEwLjUzMzQ3LTUuNTE4NjktOS42NTU2NywwLTE0LjI5NTU0LDguNzc4MjMtMTQuMjk1NTQsMTYuOTkyMDIsMCw4LjI3NTc3LDQuNTE0ODUsMTUuNzM2NywxMy42Njk1NCwxNS43MzY3LDQuMDc0NTIsMCw4LjIxMzM1LTEuNjMwMTMsMTAuNzIwNTgtNC45NTIyaDAuMTI1MTV2My4xMzQ2N2MwLDYuNzgyMzItMy42OTg4LDEwLjk4MzMtOS45MDU5MSwxMC45ODMzLTQuMzI2LDAtNy4wMjIzOS0wLjgxNjM5LTExLjUzNy0yLjg4NTA4bC0wLjYyNjMxLDUuNDU0ODVjNS4xNDA5MiwxLjc1NjE4LDguMDg2OTYsMi4xOTUwNywxMS40NzMzNCwyLjE5NTA3LDExLjQ3NDQ3LDAsMTYuNDg5MTktNS41ODEyMywxNi40ODkxOS0xNS4zMDkzNXYtMzAuNTk3NjV6bS0xNS4yMzU3MiwyNy4yMTE1NGMtNS41MTcyOSwwLTguOTAxODItNS4yNjYwOS04LjkwMTgyLTExLjI4NTc4LDAtNS40NTQ3NywyLjk0NjAzLTExLjkxMjE2LDguOTAxODItMTEuOTEyMTYsNi4yNjk5LDAsOS4zNDI0MSw1LjcwNTAyLDkuMzQyNDEsMTIuMzUxMDUsMCw1Ljk1NzIyLTMuODIzNzEsMTAuODQ2ODktOS4zNDI0MSwxMC44NDY4OXptLTUzLjQ4MTQzLTExLjIyMzMxYzAsOS4xNTQ3Miw2LjY0NiwxNi43NTE2MSwxNi4zMDE4LDE2Ljc1MTYxLDkuNTkzNTQsMCwxNi4yMzk0OC03LjU5Njg5LDE2LjIzOTQ4LTE2Ljc1MTYxLDAtOS43MTgyLTYuNTIwOTctMTYuNzQwNTYtMTYuMjM5NDgtMTYuNzQwNTYtOS43ODA3MiwwLTE2LjMwMTgsNy4wMjIzNi0xNi4zMDE4LDE2Ljc0MDU2em02LjI3MTE1LDBjMC02LjA4MDc0LDMuNjk4NDUtMTEuOTc0NjMsMTAuMDMwNjUtMTEuOTc0NjMsNi4yNjk4NiwwLDkuOTY5OSw1Ljg5Mzg5LDkuOTY5OSwxMS45NzQ2MywwLDUuNzA2MDgtMy4wNzI1MywxMS45NzU4Ni05Ljk2OTksMTEuOTc1ODYtNi45NTk2NCwwLTEwLjAzMDY1LTYuMjY5NzgtMTAuMDMwNjUtMTEuOTc1ODZ6bS0yMC44MTY2MywxNS45ODgxNiw1Ljg5MzU1LDAsMC00Ny4wMjMxMi01Ljg5MzU1LDAsMCw0Ny4wMjMxMnptLTQxLjE5MzI0LTE1Ljk4ODE2YzAsOS4xNTQ3Miw2LjY0NTY5LDE2Ljc1MTYxLDE2LjMwMTc1LDE2Ljc1MTYxLDkuNTkzMjQsMCwxNi4yMzkzMS03LjU5Njg5LDE2LjIzOTMxLTE2Ljc1MTYxLDAtOS43MTgyLTYuNTIxMS0xNi43NDA1Ni0xNi4yMzkzMS0xNi43NDA1Ni05Ljc4MDk0LDAtMTYuMzAxNzUsNy4wMjIzNi0xNi4zMDE3NSwxNi43NDA1NnptNi4yNzA4MiwwYzAtNi4wODA3NCwzLjY5ODQ5LTExLjk3NDYzLDEwLjAzMDkzLTExLjk3NDYzLDYuMjY5NzEsMCw5Ljk2OTYsNS44OTM4OSw5Ljk2OTYsMTEuOTc0NjMsMCw1LjcwNjA4LTMuMDcyMzksMTEuOTc1ODYtOS45Njk2LDExLjk3NTg2LTYuOTU5NTEsMC0xMC4wMzA5My02LjI2OTc4LTEwLjAzMDkzLTExLjk3NTg2em0tNDIuNDQ2OTUsMTUuOTg4MTYsNS44OTM1OSwwLDAtMTQuNzk2ODRjMC03Ljc3MzQzLDMuMDEwMDQtMTMuMTY1OTUsOS43MTgyMS0xMy4xNjU5NSw1LjE0MTIsMC4zMTI3LDYuNzcxMDMsMy45NTAyNCw2Ljc3MTAzLDExLjQxMTEydjE2LjU1MTY3aDUuODkzNTl2LTE4Ljk5NjY3YzAtOC41ODk3Mi0zLjY5ODUyLTEzLjczMjA1LTExLjk3NDMzLTEzLjczMjA1LTQuNDUyMzYsMC04LjcxNjIxLDIuMTk1MDgtMTAuNDcwOTksNS44MzEwNmgtMC4xMjQ5NHYtNS4wNzg3M2gtNS43MDYydjMxLjk3NjM5em0tMzguMzA4MTYsMCw1Ljg5MzU5LDAsMC0xNC43OTY4NGMwLTcuNzczNDMsMy4wMDk3NC0xMy4xNjU5NSw5LjcxODIxLTEzLjE2NTk1LDUuMTQwOTYsMC4zMTI3LDYuNzcwNzQsMy45NTAyNCw2Ljc3MDc0LDExLjQxMTEydjE2LjU1MTY3aDUuODkzODh2LTE4Ljk5NjY3YzAtOC41ODk3Mi0zLjY5ODgtMTMuNzMyMDUtMTEuOTc0NjMtMTMuNzMyMDUtNC40NTIzNiwwLTguMTUwODcsMS45NDM2NC0xMC4yODMxOSw1LjMyOTczaC0wLjEyNDk1di0xOS42MjQxM2gtNS44OTM1OXY0Ny4wMjMxMnptLTcuMDIyMy0zMS40NzM0N2MtMS42OTIzMS0wLjY5LTQuNzY0NTEtMS4yNTUyNS03LjE0NzEzLTEuMjU1MjUtOS43ODA4MywwLTE2LjMwMTczLDcuMDIyMzYtMTYuMzAxNzMsMTYuNzQwNTYsMCw5LjE1NDcyLDYuNjQ1NzcsMTYuNzUxNjEsMTYuMzAxNzMsMTYuNzUxNjEsMi4xMzEyMiwwLDQuOTUzNS0wLjE4ODg1LDcuMzk4NTEtMS4zMjcyNWwtMC40Mzg1Ny01LjI2NTg0Yy0xLjgxODc2LDEuMTkxMjktNC4zMjYyNiwxLjgxNzM0LTYuMzMyNDQsMS44MTczNC03LjU4NzE4LDAtMTAuNjU5NTMtNi4yNjk3OC0xMC42NTk1My0xMS45NzU4NiwwLTYuMDgwNzQsMy42OTk4NS0xMS45NzQ2MywxMC4yODMyNC0xMS45NzQ2MywxLjg4MDAxLDAsNC4xMzczNCwwLjQzODg0LDYuMzk0NzksMS4zNzg2OGwwLjUwMTEzLTQuODg5MzZ6bS0zMS4xNjEzOCwyNC4yNjM2Yy0xLjQ0MjE1LDEuMTkxMzEtNS45NTU4OSwzLjE5NzU3LTkuODQzMDEsMy4xOTc1Ny01LjU4MTI5LDAtMTAuNTMzNTItNC4zMjYzOS0xMC41MzM1Mi0xMC42NTg0NGgyMi44MjE3NGMwLTEwLjI4MzI0LTMuNDQ4ODMtMTguMDU3OTgtMTQuMTA2OS0xOC4wNTc5OC05LjAyODIzLDAtMTQuOTg1ODIsNi43MDk5My0xNC45ODU4MiwxNi4xNzcwNSwwLDEwLjQwODE1LDUuMjA0ODMsMTcuMzE1MTIsMTYuNTUzMTEsMTcuMzE1MTIsNS4yNjU3OSwwLDcuODM3MTktMS4yNjQ3NiwxMC4wOTQ0LTIuMDc5NzJ2LTUuODkzNnptLTIwLjM3NjUzLTExLjg0OTI4YzAuNDM4ODUtNC4xMzg1LDIuODIxMTQtOC45MDM2NCw4LjU4OTk2LTguOTAzNjQsNS4wNzgxNiwwLDcuOTYxODcsNC4wMTIzLDcuOTYxODcsOC45MDM2NGgtMTYuNTUxODN6bS0yNS4wODAwOSwxOS4wNTkxNSw2LjI2OTgzLDAsMC0zOC4yNDU5NiwxMy42MDU1NSwwLDAtNS41MTcyNS0zMy40ODEzMSwwLDAsNS41MTcyNSwxMy42MDU5MywwLDAsMzguMjQ1OTZ6bS0xMDQuMzI4NDMsMCw1Ljg5MzY4LDAsMC0yNy4yMTAwMyw4LjQ2NDQ3LDAsMC00Ljc2NjM2LTguNDY0NDcsMCwwLTMuNDQ2OThjMC00LjMyNzUyLDAuNjI2MDktNy41ODc0NCw1LjcwNDM4LTcuNTg3NDQsMS4wMDQwMywwLDIuMTMyNzMsMC4xMjQ5NSwyLjgyMjY2LDAuMzc2MTFsMC4yNDk3My00Ljc2NDQ3Yy0xLjE5MTA2LTAuMTg5MDctMi40NDQ2Ni0wLjM3NjQyLTMuOTQ5Ny0wLjM3NjQyLTguNzE0MzcsMC0xMC43MjA3NSw1LjA3ODczLTEwLjcyMDc1LDEyLjg1MzIxdjIuOTQ1OTloLTcuNTI0NzR2NC43NjYzNmg3LjUyNDc0djI3LjIxMDAzem0tMjcuMDY0NTUtMzEuOTc2MzktOC40NjQ2MiwwLDAtOS4yNzgxMS01Ljg5MzU5LDEuODc5NzEsMCw3LjM5ODQtNy4yMTEwMiwwLDAsNC43NjYzNiw3LjIxMTAyLDAsMCwxOC42ODQyN2MwLDYuMzk0NjEsMy43NjExMSw5LjI4OTIxLDkuODQzNDcsOS4yODkyMSwxLjg4MTA2LDAsMy42OTg1Mi0wLjUwMDk1LDUuMDE2MDYtMC44ODgzNnYtNS4wMTYyMmMtMC44Nzc0NCwwLjU2NDk1LTIuMTk1MDgsMS4xMjg4My00LjAxMzksMS4xMjg4My0yLjY5NDYsMC00Ljk1MjA0LTIuMDA2MjYtNC45NTIwNC01LjcwNDc2di0xNy40OTI5N2g4LjQ2NDYydi00Ljc2NjM2em0tMjcuMDIzOCwwLTUuODkzNTksMCwwLDE0Ljc5NjkzYzAsNy43NzQ4MS0zLjAwODUzLDEzLjE2NzE2LTkuNzE4MzUsMTMuMTY3MTYtNS4xNDEwNy0wLjMxMzk1LTYuNzcwODUtMy45NDk5NC02Ljc3MDg1LTExLjQxMDg1di0xNi41NTMyNGgtNS44OTM1OXYxOC45OTgyN2MwLDguNTg5NCwzLjY5ODYyLDEzLjc0MTU3LDExLjk3NTc4LDEzLjc0MTU3LDQuNDUxMDQsMCw4LjcxNDc2LTIuMjA0NjgsMTAuNDcxMDEtNS44NDIwOGgwLjEyNDkzdjUuMDc4NjNoNS43MDQ3di0zMS45NzYzOXptLTM1LjY3NDg1LDAtOC40NjQ2MSwwLDAtOS4yNzgxMS01Ljg5MzQyLDEuODc5NzEsMCw3LjM5ODQtNy4yMTExNywwLDAsNC43NjYzNiw3LjIxMTE3LDAsMCwxOC42ODQyN2MwLDYuMzk0NjEsMy43NjEwMSw5LjI4OTIxLDkuODQzMTksOS4yODkyMSwxLjg4MTI0LDAsMy42OTg2NC0wLjUwMDk1LDUuMDE2MjItMC44ODgzNnYtNS4wMTYyMmMtMC44Nzc0MSwwLjU2NDk1LTIuMTk1MTYsMS4xMjg4My00LjAxMzg4LDEuMTI4ODMtMi42OTQ2NSwwLTQuOTUyMTEtMi4wMDYyNi00Ljk1MjExLTUuNzA0NzZ2LTE3LjQ5Mjk3aDguNDY0NjF2LTQuNzY2MzZ6bS0zMy42Njk4LDMxLjk3NjM5LDUuODkzNDksMCwwLTMxLjk3NjM5LTUuODkzNDksMCwwLDMxLjk3NjM5em02LjI2OTY2LTQ1Ljc2OTQxLTYuNjQ2LDAsMCw2LjY0NjAyLDYuNjQ2LDAsMC02LjY0NjAyem0tMTQuNDIwNTIsMTMuNzkzMDItOC40NjQ3NCwwLDAtOS4yNzgxMS01Ljg5MzU5LDEuODc5NzEsMCw3LjM5ODQtNy4yMTEwMSwwLDAsNC43NjYzNiw3LjIxMTAxLDAsMCwxOC42ODQyN2MwLDYuMzk0NjEsMy43NjA5Miw5LjI4OTIxLDkuODQzMjksOS4yODkyMSwxLjg4MTI1LDAsMy42OTg2NC0wLjUwMDk1LDUuMDE2MTgtMC44ODgzNnYtNS4wMTYyMmMtMC44Nzc1LDAuNTY0OTUtMi4xOTQ5MiwxLjEyODgzLTQuMDEzNywxLjEyODgzLTIuNjk0NzcsMC00Ljk1MjE4LTIuMDA2MjYtNC45NTIxOC01LjcwNDc2di0xNy40OTI5N2g4LjQ2NDc0di00Ljc2NjM2em0tNDQuMDc4MzEsMzAuOTczNzZjMi42OTYxOSwxLjQ1MjI0LDUuNzY4NTMsMS43NjYwOCw4Ljc3NjkyLDEuNzY2MDgsNS43MDYxMywwLDExLjE2MDg0LTMuMTQ1OTcsMTEuMTYwODQtOS45NzkxOCwwLTEwLjIxOTc4LTEzLjg1NTQ5LTguMzM5NzItMTMuODU1NDktMTQuODU5NjYsMC0yLjYzMzY5LDIuNjMyMTUtMy44ODc0LDUuNjQyMTQtMy44ODc0LDEuMzgwMDksMCw0Ljg5MTE1LDAuODE1Miw2LjIwNzIzLDEuNjMwMTFsMC41MDEyNi01LjE0MDc5Yy0yLjMyMDA3LTAuNjktNC41NzU5OS0xLjI1NTI1LTcuMzM1OTItMS4yNTUyNS02LjMzMjMyLDAtMTEuMjg1ODYsMy4xOTg2NS0xMS4yODU4Niw5Ljg0NDYzLDAsOC45NjYwNywxMy44NTY5OSw4LjQ2MzIyLDEzLjg1Njk5LDE0LjI5NDM0LDAsMy40NDg2Mi0zLjMyMjIxLDQuNTc3NDUtNi4wMTg1NSw0LjU3NzQ1LTEuNjkzNzIsMC01LjAxNTg2LTAuNzUyNTUtNy4zMzU5Mi0yLjI1NzYzbC0wLjMxMzY0LDUuMjY3M3ptLTM1LjYxMjI5LDEuMDAyNjMsNS44OTM1OSwwLDAtMTQuNzk2ODRjMC03Ljc3MzQzLDMuMDA5ODctMTMuMTY1OTUsOS43MTgyNS0xMy4xNjU5NSw1LjE0MDk3LDAuMzEyNyw2Ljc3MDk0LDMuOTUwMjQsNi43NzA5NCwxMS40MTExMnYxNi41NTE2N2g1Ljg5MzZ2LTE4Ljk5NjY3YzAtOC41ODk3Mi0zLjY5ODY5LTEzLjczMjA1LTExLjk3NDQ0LTEzLjczMjA1LTQuNDUyNDIsMC04LjcxNjAyLDIuMTk1MDgtMTAuNDcwODIsNS44MzEwNmgtMC4xMjQ5NXYtNS4wNzg3M2gtNS43MDYxNXYzMS45NzYzOXptLTE2Ljg2Njg3LDAsNi4yNjk3NywwLDAtNDMuNzYzMjEtNi4yNjk3NywwLDAsNDMuNzYzMjF6bS01MS45NDc5OS03LjIwOTg3Yy0xLjQ0MjU3LDEuMTkxMzEtNS45NTU5OCwzLjE5NzU3LTkuODQzMzcsMy4xOTc1Ny01LjU4MTE3LDAtMTAuNTMzNDItNC4zMjYzOS0xMC41MzM0Mi0xMC42NTg0NGgyMi44MjE3NGMwLTEwLjI4MzI0LTMuNDQ4ODEtMTguMDU3OTgtMTQuMTA3MDQtMTguMDU3OTgtOS4wMjgyNiwwLTE0Ljk4NTY2LDYuNzA5OTMtMTQuOTg1NjYsMTYuMTc3MDUsMCwxMC40MDgxNSw1LjIwNDc1LDE3LjMxNTEyLDE2LjU1MzExLDE3LjMxNTEyLDUuMjY1OTYsMCw3LjgzNzE3LTEuMjY0NzYsMTAuMDk0NjQtMi4wNzk3MnYtNS44OTM2em0tMjAuMzc2NzktMTEuODQ5MjhjMC40Mzg4My00LjEzODUsMi44MjEyNi04LjkwMzY0LDguNTg5NzEtOC45MDM2NCw1LjA3ODU4LDAsNy45NjIwOCw0LjAxMjMsNy45NjIwOCw4LjkwMzY0aC0xNi41NTE3OXptLTQyLjQ0NjgyLDE5LjA1OTE1LDUuODkzNDcsMCwwLTE0Ljc5Njg0YzAtNy43NzM0MywzLjAwOTg1LTEzLjE2NTk1LDkuNzE4MzQtMTMuMTY1OTUsNS4xNDEwMywwLjMxMjcsNi43NzA4NSwzLjk1MDI0LDYuNzcwODUsMTEuNDExMTJ2MTYuNTUxNjdoNS44OTM1OXYtMTguOTk2NjdjMC04LjU4OTcyLTMuNjk4NTEtMTMuNzMyMDUtMTEuOTc0NS0xMy43MzIwNS00LjQ1MjM4LDAtOC4xNTA4MSwxLjk0MzY0LTEwLjI4MzM4LDUuMzI5NzNoLTAuMTI0OTR2LTE5LjYyNDEzaC01Ljg5MzQ3djQ3LjAyMzEyem0tMTAuMDMyMjUtMzEuOTc2MzktNS44OTMzOCwwLDAsMTQuNzk2OTNjMCw3Ljc3NDgxLTMuMDA4NTcsMTMuMTY3MTYtOS43MTgzOCwxMy4xNjcxNi01LjE0MTAzLTAuMzEzOTUtNi43NzA5Ny0zLjk0OTk0LTYuNzcwOTctMTEuNDEwODV2LTE2LjU1MzI0aC01Ljg5MzQ4djE4Ljk5ODI3YzAsOC41ODk0LDMuNjk4NjksMTMuNzQxNTcsMTEuOTc1ODUsMTMuNzQxNTcsNC40NTEwMywwLDguNzE0NDktMi4yMDQ2OCwxMC40NzA4Mi01Ljg0MjA4aDAuMTI0OTV2NS4wNzg2M2g1LjcwNDYzdi0zMS45NzYzOXptLTUyLjY2NjUsMzEuOTc2MzksNS44OTM1OSwwLDAtMTQuNTQ1NzhjMC04LjAyNDQ5LDMuNDQ4NTktMTMuMDQwNjEsOC43MTQ1My0xMy4wNDA2MSwxLjAwMzY4LDAsMi4xOTQ5OCwwLjEyNDk1LDMuMjYxMjcsMC41NjM4di01LjI2NjA5Yy0xLjI1MzczLTAuMjUxMTktMi4xMzI2My0wLjQ0MDA0LTMuODg3MzUtMC40NDAwNC0zLjM4NjE2LDAtNi43NzIzNywyLjM4Mzc1LTguMzM5ODUsNS43MDYxM2gtMC4xMjQ5NHYtNC45NTM4aC01LjUxNzIzdjMxLjk3NjM5em0tMjcuMDg2NC0xLjAwMjYzYzIuNjk2MjgsMS40NTIyNCw1Ljc2ODYzLDEuNzY2MDgsOC43NzcxNCwxLjc2NjA4LDUuNzA2MDIsMCwxMS4xNjA3OS0zLjE0NTk3LDExLjE2MDc5LTkuOTc5MTgsMC0xMC4yMTk3OC0xMy44NTU1Ni04LjMzOTcyLTEzLjg1NTU2LTE0Ljg1OTY2LDAtMi42MzM2OSwyLjYzMjMtMy44ODc0LDUuNjQyMi0zLjg4NzQsMS4zODAwNCwwLDQuODkxMDEsMC44MTUyLDYuMjA3MDksMS42MzAxMWwwLjUwMTQtNS4xNDA3OWMtMi4zMTk5NC0wLjY5LTQuNTc2MDctMS4yNTUyNS03LjMzNjA2LTEuMjU1MjUtNi4zMzIxOCwwLTExLjI4NTc5LDMuMTk4NjUtMTEuMjg1NzksOS44NDQ2MywwLDguOTY2MDcsMTMuODU3Miw4LjQ2MzIyLDEzLjg1NzIsMTQuMjk0MzQsMCwzLjQ0ODYyLTMuMzIyNDUsNC41Nzc0NS02LjAxODY5LDQuNTc3NDUtMS42OTM2NiwwLTUuMDE1OTMtMC43NTI1NS03LjMzNTk4LTIuMjU3NjNsLTAuMzEzNzQsNS4yNjczem0tMTMuOTgxODcsMS4wMDI2Myw1Ljg5MzQ4LDAsMC00Ny4wMjMxMi01Ljg5MzQ4LDAsMCw0Ny4wMjMxMnptLTI1LjE0MjgxNiwwLDUuODkzNTkzLDAsMC0xNC41NDU3OGMwLTguMDI0NDksMy40NDg1NjMtMTMuMDQwNjEsOC43MTQ0ODYtMTMuMDQwNjEsMS4wMDM4NjEsMCwyLjE5NDk1NCwwLjEyNDk1LDMuMjYxMjg3LDAuNTYzOHYtNS4yNjYwOWMtMS4yNTM3NzEtMC4yNTExOS0yLjEzMjQ2MS0wLjQ0MDA0LTMuODg3NDUtMC40NDAwNC0zLjM4NjAyOSwwLTYuNzcyMzA2LDIuMzgzNzUtOC4zMzk1OTMsNS43MDYxM2gtMC4xMjUxNXYtNC45NTM4aC01LjUxNzE3M3YzMS45NzYzOXptLTMzLjA0MjM1OS0yNC43MDI4NGMyLjM4MjM5My0yLjAwNjI0LDUuOTU2MDI0LTMuMjU5OTUsOS4yNzgzNDQtMy4yNTk5NSw1Ljg5NDc0NywwLDcuOTAwOTI2LDIuODIxNDMsNy45MDA5MjYsOC4zMzg2Ny0yLjMxOTk0MS0wLjEyNDk0LTMuOTQ5Ny0wLjEyNDk0LTYuMjY5NjQyLTAuMTI0OTQtNi4wODIzMjksMC0xNC44NjA4NTQsMi41MDY5LTE0Ljg2MDg1NCwxMC41MzM0MSwwLDYuOTU5NjQsNC44Mjg2Niw5Ljk3OTE5LDExLjcyNTg0OCw5Ljk3OTE5LDUuMzkwOTUsMCw4LjUyNTkzNy0yLjk1NzA4LDkuOTA1Nzg2LTQuOTAwODFoMC4xMjQ5NDR2NC4xMzczNWg1LjUxNzE1M2MtMC4xMjQ5NDUtMC45Mzk4NS0wLjI0OTg2OC0yLjYzMjQ1LTAuMjQ5ODY4LTYuMjY5OTN2LTEzLjIyOTIyYzAtOC43MTQ3NC0zLjY5OTg5NS0xMy4yMjk1Ny0xMi44NTMyMTItMTMuMjI5NTctNC4wNzYwNjcsMC03LjU4NzE4NSwxLjI1NTI1LTEwLjUzMzI5MSwzLjAwOTk4bDAuMzEzNzYzLDUuMDE1OTF6bTE3LjE3OTI3LDEyLjI4OTc1YzAsNC43NjQ3LTMuMDcyMzI4LDguNDAwNzktOC45MDM0NDksOC40MDA3OS0yLjY5NjA5MywwLTUuOTU1OS0xLjgxNzM0LTUuOTU1OS01LjIwMzQzLDAtNS42NDM2OCw3Ljg5OTYwNy02LjE0NDk1LDExLjA5NzAyNC02LjE0NDk1LDEuMjUzNjA3LDAsMi41MDcyMTMsMC4xMjQ5NSwzLjc2MjMyNSwwLjEyNDk1djIuODIyNjZ6bS01OS45Mzk5NzksMTIuNDEzMDksNi4yNjk4NDg2LDAsMC0yMS40NDI4NiwxOS40OTkwMjYsMjEuNDQyODYsOS4xNTQ2OTksMC0yMi4xOTUzODktMjMuMDcyNzYsMjAuNTY1NDQ0LTIwLjY5MDQ1LTguMzM5NjU0LDAtMTguNjg0MTI2LDE5LjI0OTIyLDAtMTkuMjQ5MjItNi4yNjk4NDg2LDAsMCw0My43NjMyMXoiIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0ibm9uemVybyIvPiYjeGE7JiN4YTs8L3N2Zz4=" preserveAspectRatio="none"/><image x="862.5" y="70.5" width="1122.6872642356745" height="71.11" xlink:href="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNDY0Ljc4NjY4IDI5LjQ4IiBoZWlnaHQ9IjI5LjQ4IiB3aWR0aD0iNDY0Ljc4NjY4IiB4bWw6c3BhY2U9InByZXNlcnZlIiBpZD0ic3ZnMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxtZXRhZGF0YSBpZD0ibWV0YWRhdGE4Ij5pbWFnZS9zdmcreG1sPC9tZXRhZGF0YT48ZGVmcyBpZD0iZGVmczYiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMzMzMzMzMsMCwwLC0xLjMzMzMzMzMsMCwyOS40OCkiIGlkPSJnMTAiPjxnIHRyYW5zZm9ybT0ic2NhbGUoMC4xKSIgaWQ9ImcxMiI+PHBhdGggaWQ9InBhdGgxNCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAxMTQuNzE5LDEzMC42NDUgdiA4Ni44NjMgSCAxNTUuOTEgViAyLjg3ODkxIEggMTE0LjcxOSBWIDg5LjQ1MzEgSCA0MS4xNjQxIFYgMi44Nzg5MSBIIDAgViAyMTcuNTA4IGggNDEuMTY0MSB2IC04Ni44NjMgaCA3My41NTQ5Ii8+PHBhdGggaWQ9InBhdGgxNiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAzMzcuMzYzLDIxNy41MDggdiAtNDEuMTYgaCAtOTQuMTYgdiAtNDUuNzAzIGggODEuNzM4IFYgODkuNDUzMSBIIDI0My4yMDMgViA0NC4wNDMgaCA5NC4xNiBWIDIuODc4OTEgSCAyMjIuMzE2IGMgLTEuODIsMCAtMy42NDQsMC42MTcxOCAtNC44NTEsMi4xMjEwOSBsIC0xMy4zMTMsMTMuMzA4NiBjIC0xLjUwNCwxLjIxMDkgLTIuMTE3LDMuMDM5MSAtMi4xMTcsNC44NTU1IFYgMTk3LjI1IGMgMCwxLjc5NyAwLjYxMywzLjYyMSAyLjExNyw0LjgyOCBsIDEzLjMxMywxMy4zMTMgYyAxLjIwNywxLjIzNCAzLjAzMSwyLjExNyA0Ljg1MSwyLjExNyBoIDExNS4wNDciLz48cGF0aCBpZD0icGF0aDE4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDQwMS4wMzUsMi44Nzg5MSBjIC0xLjgyOCwwIC0zLjY0OCwwLjYxNzE4IC00Ljg1OSwyLjEyMTA5IGwgLTEzLjMxMywxMy4zMDg2IGMgLTEuNTI3LDEuMjEwOSAtMi4xMTcsMy4wMzkxIC0yLjExNyw0Ljg1NTUgViAyMTcuNTA4IGggNDEuMTY4IFYgNDQuMDQzIGggODkuNTk4IFYgMi44Nzg5MSBIIDQwMS4wMzUiLz48cGF0aCBpZD0icGF0aDIwIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJNIDczMi41NzgsMjE3LjUwOCBWIDIuODc4OTEgSCA2OTEuNDEgViAxMjEuNTQ3IEwgNjU3LjgxNiw1MS4zMTY0IGMgLTEuMjA3LC0yLjQxMDEgLTMuNjI4LC0zLjk0NTMgLTYuMDYyLC0zLjk0NTMgaCAtMjQuMjExIGMgLTIuNzM0LDAgLTUuMTUyLDEuNTM1MiAtNi4zNTksMy45NDUzIEwgNTg3LjU4NiwxMjEuNTQ3IFYgMi44Nzg5MSBIIDU0Ni40MjIgViAyMTcuNTA4IGggNDEuMTY0IGwgNTIuMDYyLC0xMDguOTgxIDUxLjc2MiwxMDguOTgxIGggNDEuMTY4Ii8+PHBhdGggaWQ9InBhdGgyMiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSA4OTAuNzM0LDEzMC42NDUgdiA4Ni44NjMgaCA0MS4xOTIgViAyLjg3ODkxIEggODkwLjczNCBWIDg5LjQ1MzEgSCA4MTcuMTc2IFYgMi44Nzg5MSBIIDc3Ni4wMDggViAyMTcuNTA4IGggNDEuMTY4IHYgLTg2Ljg2MyBoIDczLjU1OCIvPjxwYXRoIGlkPSJwYXRoMjQiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMTA4Ny42NCw2NC4wNDMgdiA5Mi4wMTYgYyAwLDEuODIgLTAuOTEsMy42NDggLTIuMTIsNC44NTEgbCAtMTMuMDIsMTMuMzE3IGMgLTEuNTIsMS4yMDcgLTMuMzMsMi4xMjEgLTUuMTUsMi4xMjEgaCAtMzYuOTMgYyAtMS44MiwwIC0zLjMyLC0wLjkxNCAtNC44NSwtMi4xMjEgbCAtMTMuMDIsLTEzLjMxNyBjIC0xLjUsLTEuMjAzIC0yLjEyLC0zLjAzMSAtMi4xMiwtNC44NTEgViA2NC4wNDMgYyAwLC0xLjgyODIgMC42MiwtMy4zMzIxIDIuMTIsLTQuODYzMyBsIDEzLjAyLC0xMy4wMDc4IGMgMS41MywtMS41MTU2IDMuMDMsLTIuMTI4OSA0Ljg1LC0yLjEyODkgaCAzNi45MyBjIDEuODIsMCAzLjYzLDAuNjEzMyA1LjE1LDIuMTI4OSBsIDEzLjAyLDEzLjAwNzggYyAxLjIxLDEuNTMxMiAyLjEyLDMuMDM1MSAyLjEyLDQuODYzMyB6IG0gOS42OSwxNDMuMTg3IDIxLjQ5LC0yMS4yMDMgYyA2LjM2LC02LjM1NSA5Ljk4LC0xNS4xMjkgOS45OCwtMjQuMjAzIFYgNTguNTkzOCBjIDAsLTkuMTAxNiAtMy42MiwtMTcuODcxMSAtOS45OCwtMjQuMjMwNSBsIC0yMS40OSwtMjEuNTAzOSBjIC02LjM2LC02LjM1NTQ5IC0xNS4xNCwtOS45ODA0OSAtMjQuMjQsLTkuOTgwNDkgaCAtNDguMTEgYyAtOS4xLDAgLTE4LjE3LDMuMzMyMDMgLTI0LjUzLDkuOTgwNDkgbCAtMjEuMTk2LDIxLjUwMzkgYyAtNi4zNTksNi4zNTk0IC05Ljk4OCwxNS4xMjg5IC05Ljk4OCwyNC4yMzA1IFYgMTYxLjgyNCBjIDAsOS4wNzQgMy42MjksMTcuODQ4IDkuOTg4LDI0LjIwMyBsIDIxLjE5NiwyMS4yMDMgYyA2LjY2LDYuNjU3IDE1LjQzLDEwLjI3OCAyNC41MywxMC4yNzggaCA0OC4xMSBjIDkuMSwwIDE3LjU4LC0zLjkxNCAyNC4yNCwtMTAuMjc4Ii8+PHBhdGggaWQ9InBhdGgyNiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAxMTg1LjUzLDIuODc4OTEgYyAtMS44MywwIC0zLjY1LDAuNjE3MTggLTQuODYsMi4xMjEwOSBsIC0xMy4zMSwxMy4zMDg2IGMgLTEuNTMsMS4yMTA5IC0yLjEyLDMuMDM5MSAtMi4xMiw0Ljg1NTUgViAyMTcuNTA4IGggNDEuMTYgViA0NC4wNDMgSCAxMjk2IFYgMi44Nzg5MSBoIC0xMTAuNDciLz48cGF0aCBpZD0icGF0aDI4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDEyOTMuMDUsMTc2LjM0OCB2IDQxLjE2IGggMTU1IHYgLTQxLjE2IGggLTU2LjkyIFYgMi44Nzg5MSBoIC00MS4xNiBWIDE3Ni4zNDggaCAtNTYuOTIiLz48cGF0aCBpZD0icGF0aDMwIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDE2MDcuNDEsMjE1LjM5MSAxMy4zMiwtMTMuMzEzIGMgMS4yLC0xLjIwNyAyLjEyLC0zLjAzMSAyLjEyLC00LjgyOCBWIDE4Ni42NDggTCAxNTMyLjYzLDQ0LjA0MyBoIDg5IFYgMi44Nzg5MSBoIC0xMjIuOSBjIC0xLjgyLDAgLTMuNjUsMC42MTcxOCAtNC44NSwyLjEyMTA5IGwgLTEzLjMxLDEzLjMwODYgYyAtMS4yMiwxLjIxMDkgLTIuMTMsMy4wMzkxIC0yLjEzLDQuODU1NSB2IDEyLjQwMjMgbCA4OS4wMSwxNDAuNzgxNiBoIC05MC4yMSB2IDQxLjE2IGggMTI1LjMyIGMgMS44MiwwIDMuNjQsLTAuODgzIDQuODUsLTIuMTE3Ii8+PHBhdGggaWQ9InBhdGgzMiIgc3R5bGU9ImZpbGw6IzgwY2QzMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAxNzI0LjMyLDg1Ljg5ODQgaCA1MC41IGwgLTI1LjM5LDcyLjI5NjYgeiBNIDE3MDkuNzgsNDQuNzUzOSAxNjk0Ljk3LDMuMDA3ODEgaCAtNDMuNTcgbCA3My44MSwyMDkuNjQ4MTkgYyAwLjksMyAzLjM0LDQuODI4IDYuMzUsNC44MjggaCAzNiBjIDIuNzEsMCA1LjQ0LC0xLjgyOCA2LjM2LC00LjU0NiBMIDE4NDcuNzEsMy4wMDc4MSBoIC00My41NCBsIC0xNC44Miw0MS43NDYwOSBoIC03OS41NyIvPjxwYXRoIGlkPSJwYXRoMzQiIHN0eWxlPSJmaWxsOiM4MGNkMzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMTkxOC45OSwzLjAwNzgxIGggLTQxLjEzIFYgMjE3LjQ4NCBoIDQxLjEzIFYgMy4wMDc4MSIvPjxwYXRoIGlkPSJwYXRoMzYiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMTk5Ni4zOSwwIGggLTcuMzQgdiAyMjEuMTAyIGggNy4zNCBWIDAiLz48cGF0aCBpZD0icGF0aDM4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDIwOTUuMDgsMjAxLjEyMSAtMTIuMjIsLTM5IGggMjQuNTcgeiBtIDYuNSwxNi4xMTcgMjkuNjQsLTg2Ljk3MiBoIC0xMy45MSBsIC02LjM3LDIwLjI4NSBoIC0zMS42IGwgLTYuNDksLTIwLjI4NSBoIC0xMy43OCBsIDI5LjUxLDg2Ljk3MiBoIDEzIi8+PHBhdGggaWQ9InBhdGg0MCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyMTYzLjMyLDE3Ni42ODQgYyA5LjM2LDAgMTIuMjMsMC4yNTQgMTUuNzMsMS41NSA1LjQ2LDEuOTU0IDguNDYsNi42MzMgOC40NiwxMy4xMzcgMCw1LjU5IC0yLjM1LDkuNzUgLTYuNzcsMTEuODMyIC0zLjYzLDEuODE3IC02LjQ5LDIuMjA3IC0xOC4wNywyLjIwNyBoIC01LjMzIHYgLTI4LjcyNiB6IG0gLTAuNzcsNDAuMjk2IGMgMTQuNDIsMCAxOS44OCwtMC43ODEgMjUuNzMsLTMuNTExIDguMTksLTMuODk5IDEzLjEzLC0xMi4yMTkgMTMuMTMsLTIyLjIzMSAwLC0xMS40NDEgLTUuNTgsLTE5LjQ5NiAtMTYuNTEsLTIzLjkyMiBsIDIxLjMzLC0zNy4wNSBoIC0xNS44NiBsIC0xOS42NCwzNC44NDMgaCAtMTMuMzkgdiAtMzQuODQzIGggLTEzLjM5IHYgODYuNzE0IGggMTguNiIvPjxwYXRoIGlkPSJwYXRoNDIiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjI2OC43NywyMTYuOTggdiAtMTEuNTcgaCAtMjIuODggdiAtNzUuMTQ0IGggLTEzLjQgdiA3NS4xNDQgaCAtMjIuNjIgdiAxMS41NyBoIDU4LjkiLz48cGF0aCBpZD0icGF0aDQ0IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDIyODEuMzgsMTMwLjI2NiB2IDg2LjcxNCBoIDEzLjUxIHYgLTg2LjcxNCBoIC0xMy41MSIvPjxwYXRoIGlkPSJwYXRoNDYiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjM2NC43MSwxODAuOTY5IHYgLTExLjU3MSBoIC0zNC44NSB2IC0zOS4xMzIgaCAtMTMuMzkgdiA4Ni43MTQgaCA1MS4zNSB2IC0xMS41NyBoIC0zNy45NiB2IC0yNC40NDEgaCAzNC44NSIvPjxwYXRoIGlkPSJwYXRoNDgiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjM4MS44NiwxMzAuMjY2IHYgODYuNzE0IGggMTMuNTIgdiAtODYuNzE0IGggLTEzLjUyIi8+PHBhdGggaWQ9InBhdGg1MCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyNDY2LjYyLDE5MC43MjMgYyAtMi4wOCwxMC43ODUgLTguMDYsMTYuMTE3IC0xNy44MSwxNi4xMTcgLTE0LjE3LDAgLTIzLjAxLC0xMi44NzEgLTIzLjAxLC0zMy4yODEgMCwtMjAuNDExIDguODQsLTMzLjE1NyAyMy4xNCwtMzMuMTU3IDExLjA1LDAgMTcuMjksNy4wMjQgMTguNiwyMC44MDEgaCAxMi4yMSBjIC0xLjI5LC0yMS4xOTEgLTExLjgzLC0zMi41IC0zMC40MiwtMzIuNSAtMjIuODgsMCAtMzcuNTcsMTcuNDIyIC0zNy41Nyw0NC43MjcgMCwyNy4zIDE0LjU2LDQ1LjEwOSAzNy4wNSw0NS4xMDkgMTcuNDIsMCAyOC4wOCwtMTAuMDEyIDI5LjY1LC0yNy44MTYgaCAtMTEuODQiLz48cGF0aCBpZD0icGF0aDUyIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDI0OTQuODMsMTMwLjI2NiB2IDg2LjcxNCBoIDEzLjUyIHYgLTg2LjcxNCBoIC0xMy41MiIvPjxwYXRoIGlkPSJwYXRoNTQiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjU1Ny4xLDIwMS4xMjEgLTEyLjIyLC0zOSBoIDI0LjU3IHogbSA2LjUsMTYuMTE3IDI5LjY0LC04Ni45NzIgaCAtMTMuOTEgbCAtNi4zNywyMC4yODUgaCAtMzEuNTkgbCAtNi41LC0yMC4yODUgaCAtMTMuNzggbCAyOS41MSw4Ni45NzIgaCAxMyIvPjxwYXRoIGlkPSJwYXRoNTYiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjYxOS43NSwyMTYuOTggdiAtNzUuMTQgaCAzNy4zMiB2IC0xMS41NzQgaCAtNTEuMDkgdiA4Ni43MTQgaCAxMy43NyIvPjxwYXRoIGlkPSJwYXRoNTgiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjcwMi44MywxMzAuMjY2IHYgODYuNzE0IGggMTMuNTIgdiAtODYuNzE0IGggLTEzLjUyIi8+PHBhdGggaWQ9InBhdGg2MCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyNzUyLjM2LDIxNi45OCAzOC4wOSwtNjYuMzA0IHYgNjYuMzA0IGggMTIuNzQgdiAtODYuNzE0IGggLTEzLjkxIGwgLTM4LjYxLDY2LjE3MiB2IC02Ni4xNzIgaCAtMTIuNzQgdiA4Ni43MTQgaCAxNC40MyIvPjxwYXRoIGlkPSJwYXRoNjIiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjg3NC45NSwyMTYuOTggdiAtMTEuNTcgaCAtMjIuODggdiAtNzUuMTQ0IGggLTEzLjQgdiA3NS4xNDQgaCAtMjIuNjIgdiAxMS41NyBoIDU4LjkiLz48cGF0aCBpZD0icGF0aDY0IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDI5MzUuOTIsMTgwLjk2OSB2IC0xMS41NzEgaCAtMzQuODUgViAxNDEuODQgaCAzOS4wMSB2IC0xMS41NzQgaCAtNTIuNCB2IDg2LjcxNCBoIDUxLjM1IHYgLTExLjU3IGggLTM3Ljk2IHYgLTI0LjQ0MSBoIDM0Ljg1Ii8+PHBhdGggaWQ9InBhdGg2NiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyOTY5LjA2LDIxNi45OCB2IC03NS4xNCBoIDM3LjMyIHYgLTExLjU3NCBoIC01MS4xIHYgODYuNzE0IGggMTMuNzgiLz48cGF0aCBpZD0icGF0aDY4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDMwMzMuNTQsMjE2Ljk4IHYgLTc1LjE0IGggMzcuMzIgdiAtMTEuNTc0IGggLTUxLjEgdiA4Ni43MTQgaCAxMy43OCIvPjxwYXRoIGlkPSJwYXRoNzAiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMzA4NC4xMiwxMzAuMjY2IHYgODYuNzE0IGggMTMuNTIgdiAtODYuNzE0IGggLTEzLjUyIi8+PHBhdGggaWQ9InBhdGg3MiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAzMTgzLjE4LDE3NC4yMTEgdiAtMzUuODg3IGMgLTkuMjQsLTYuNDk2IC0xOS4xMSwtOS42MjEgLTMwLjQyLC05LjYyMSAtMjQuMDUsMCAtMzguNzUsMTcuMDMxIC0zOC43NSw0NC45ODEgMCwyNy4xNzUgMTQuNyw0NC44NTUgMzcuNDQsNDQuODU1IDEwLjY3LDAgMTkuMzgsLTMuODk4IDI0Ljg0LC0xMC45MTggMy4zOCwtNC41NTEgNC45NCwtOS4yMyA1LjcyLC0xNi43NzMgaCAtMTEuOTYgYyAtMS45NiwxMC43OTMgLTcuOTMsMTUuOTkyIC0xOC4zMywxNS45OTIgLTE0LjY5LDAgLTIzLjY2LC0xMi40ODEgLTIzLjY2LC0zMy4yODEgMCwtMTAuNjY0IDIuNTksLTE5LjYyOSA3LjUzLC0yNS43NDMgMy45MSwtNC45NDEgOS43NiwtNy40MTQgMTcuMTcsLTcuNDE0IDYuNjMsMCAxMy4yNSwxLjk1MyAxOC45OCw1LjU5OCB2IDE3LjY3NiBoIC0xNy41NSB2IDEwLjUzNSBoIDI4Ljk5Ii8+PHBhdGggaWQ9InBhdGg3NCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAzMjQ5LjYxLDE4MC45NjkgdiAtMTEuNTcxIGggLTM0Ljg1IFYgMTQxLjg0IGggMzkuMDEgdiAtMTEuNTc0IGggLTUyLjM5IHYgODYuNzE0IGggNTEuMzQgdiAtMTEuNTcgaCAtMzcuOTYgdiAtMjQuNDQxIGggMzQuODUiLz48cGF0aCBpZD0icGF0aDc2IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDMyODMuNDEsMjE2Ljk4IDM4LjA4LC02Ni4zMDQgdiA2Ni4zMDQgaCAxMi43NSB2IC04Ni43MTQgaCAtMTMuOTIgbCAtMzguNiw2Ni4xNzIgdiAtNjYuMTcyIGggLTEyLjc1IHYgODYuNzE0IGggMTQuNDQiLz48cGF0aCBpZD0icGF0aDc4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDM0MDUuMjEsMTkwLjcyMyBjIC0yLjA4LDEwLjc4NSAtOC4wNSwxNi4xMTcgLTE3LjgxLDE2LjExNyAtMTQuMTcsMCAtMjMuMDEsLTEyLjg3MSAtMjMuMDEsLTMzLjI4MSAwLC0yMC40MTEgOC44NCwtMzMuMTU3IDIzLjE1LC0zMy4xNTcgMTEuMDQsMCAxNy4yOCw3LjAyNCAxOC41OSwyMC44MDEgaCAxMi4yMiBjIC0xLjMsLTIxLjE5MSAtMTEuODQsLTMyLjUgLTMwLjQyLC0zMi41IC0yMi44OCwwIC0zNy41OCwxNy40MjIgLTM3LjU4LDQ0LjcyNyAwLDI3LjMgMTQuNTYsNDUuMTA5IDM3LjA1LDQ1LjEwOSAxNy40MiwwIDI4LjA5LC0xMC4wMTIgMjkuNjUsLTI3LjgxNiBoIC0xMS44NCIvPjxwYXRoIGlkPSJwYXRoODAiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMzQ4MS43OSwxODAuOTY5IHYgLTExLjU3MSBoIC0zNC44NSBWIDE0MS44NCBoIDM5LjAxIHYgLTExLjU3NCBoIC01Mi40IHYgODYuNzE0IGggNTEuMzUgdiAtMTEuNTcgaCAtMzcuOTYgdiAtMjQuNDQxIGggMzQuODUiLz48cGF0aCBpZD0icGF0aDgyIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDIxMTcuNTcsNjIuNzIyNyBjIC0yLjA4LDEwLjc4MTIgLTguMDYsMTYuMTEzMiAtMTcuODEsMTYuMTEzMiAtMTQuMTgsMCAtMjMuMDEsLTEyLjg3MTEgLTIzLjAxLC0zMy4yODEyIDAsLTIwLjQxMDIgOC44MywtMzMuMTQ0NSAyMy4xNCwtMzMuMTQ0NSAxMS4wNSwwIDE3LjI5LDcuMDExNyAxOC41OSwyMC44MDA3IGggMTIuMjIgYyAtMS4zLC0yMS4xOTE0IC0xMS44MywtMzIuNDk5OTYyIC0zMC40MiwtMzIuNDk5OTYyIC0yMi44OCwwIC0zNy41OCwxNy40MjE4NjIgLTM3LjU4LDQ0LjcyNjU2MiAwLDI3LjI4NTIgMTQuNTYsNDUuMDk3NyAzNy4wNiw0NS4wOTc3IDE3LjQyLDAgMjguMDgsLTEwIDI5LjY0LC0yNy44MTI1IGggLTExLjgzIi8+PHBhdGggaWQ9InBhdGg4NCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyMTU0LjYyLDQ2LjA4MiBjIDAsLTIwLjkzNzUgOC45NywtMzMuODA4NiAyMy40LC0zMy44MDg2IDYuNzYsMCAxMi43NCwyLjk4ODMgMTYuNTEsOC4zMjA0IDQuNDIsNi41MDM5IDYuNzYsMTUuMjE0OCA2Ljc2LDI1LjA5NzYgMCwyMC4xNTYzIC05LjIzLDMzLjI4MTMgLTIzLjQsMzMuMjgxMyAtMTQuMDQsMCAtMjMuMjcsLTEzLjAwNzkgLTIzLjI3LC0zMi44OTA3IHogbSA2MC43MSwtMC4zOTA2IGMgMCwtMjYuNzc3MyAtMTUuMDgsLTQ0Ljk4MDQ2MiAtMzcuMzEsLTQ0Ljk4MDQ2MiAtMjIuNzUsMCAtMzcuNDUsMTcuOTI5NjYyIC0zNy40NSw0NS42MjQ5NjIgMCwyNi4xMzI5IDE1LjIyLDQ0LjE5OTMgMzcuMzIsNDQuMTk5MyAyMi4zNiwwIDM3LjQ0LC0xOC4wNjY0IDM3LjQ0LC00NC44NDM4Ii8+PHBhdGggaWQ9InBhdGg4NiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyMjQwLjQyLDQ2LjA4MiBjIDAsLTIwLjkzNzUgOC45NywtMzMuODA4NiAyMy40LC0zMy44MDg2IDYuNzYsMCAxMi43NCwyLjk4ODMgMTYuNTEsOC4zMjA0IDQuNDIsNi41MDM5IDYuNzYsMTUuMjE0OCA2Ljc2LDI1LjA5NzYgMCwyMC4xNTYzIC05LjIzLDMzLjI4MTMgLTIzLjQsMzMuMjgxMyAtMTQuMDQsMCAtMjMuMjcsLTEzLjAwNzkgLTIzLjI3LC0zMi44OTA3IHogbSA2MC43MSwtMC4zOTA2IGMgMCwtMjYuNzc3MyAtMTUuMDgsLTQ0Ljk4MDQ2MiAtMzcuMzEsLTQ0Ljk4MDQ2MiAtMjIuNzUsMCAtMzcuNDQsMTcuOTI5NjYyIC0zNy40NCw0NS42MjQ5NjIgMCwyNi4xMzI5IDE1LjIxLDQ0LjE5OTMgMzcuMzEsNDQuMTk5MyAyMi4zNiwwIDM3LjQ0LC0xOC4wNjY0IDM3LjQ0LC00NC44NDM4Ii8+PHBhdGggaWQ9InBhdGg4OCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyMzM2LjQ5LDQ3LjUwNzggYyA5LjIzLDAgMTEuOTcsMC4yNTM5IDE1LjYsMS4zMDg2IDUuNzIsMS42Nzk3IDguODUsNi41MDM5IDguODUsMTMuMzc4OSAwLDYuNTAzOSAtMi40NywxMS4wNTQ3IC03LjE2LDEzLjE0NDUgLTMuNjMsMS41NDMgLTcuNTQsMi4wNzA0IC0xNy40MSwyLjA3MDQgaCAtNS42IFYgNDcuNTA3OCBaIG0gLTEuNjksNDEuNDY0OSBjIDEzLDAgMTguNzIsLTAuNjQ0NiAyNC4zMSwtMi40NjEgOS43NiwtMy4yNDIyIDE1LjczLC0xMi40ODA0IDE1LjczLC0yNC40MzM2IDAsLTExLjU4MiAtNS43MiwtMjAuNTQ2OCAtMTUuMzQsLTIzLjc4OSAtNS4xOSwtMS44MzYgLTEwLjY1LC0yLjM0MzggLTIzLjAxLC0yLjM0MzggaCAtNS43MiBWIDIuMjczNDQgaCAtMTMuMzkgViA4OC45NzI3IGggMTcuNDIiLz48cGF0aCBpZD0icGF0aDkwIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJNIDI0MzYuNzMsNTIuOTc2NiBWIDQxLjM5NDUgaCAtMzQuODUgViAxMy44MzU5IGggMzkuMDEgViAyLjI3MzQ0IGggLTUyLjQgViA4OC45NzI3IGggNTEuMzUgViA3Ny40MTAyIGggLTM3Ljk2IFYgNTIuOTc2NiBoIDM0Ljg1Ii8+PHBhdGggaWQ9InBhdGg5MiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyNDc1LjQ3LDQ4LjY3OTcgYyA5LjM1LDAgMTIuMjEsMC4yNTM5IDE1LjcyLDEuNTYyNSA1LjQ2LDEuOTUzMSA4LjQ2LDYuNjIxMSA4LjQ2LDEzLjEyNSAwLDUuNTg1OSAtMi4zNSw5Ljc0NjEgLTYuNzcsMTEuODM1OSAtMy42MywxLjgxNjQgLTYuNDksMi4yMDcxIC0xOC4wNywyLjIwNzEgaCAtNS4zMyBWIDQ4LjY3OTcgWiBtIC0wLjc4LDQwLjI5MyBjIDE0LjQyLDAgMTkuODgsLTAuNzYxOCAyNS43NCwtMy40OTYxIDguMTgsLTMuOTA2MyAxMy4xMiwtMTIuMjI2NiAxMy4xMiwtMjIuMjI2NiAwLC0xMS40NDUzIC01LjU4LC0xOS41MTE3IC0xNi41MSwtMjMuOTI1OCBsIDIxLjMzLC0zNy4wNTA3NiBoIC0xNS44NyBsIC0xOS42MywzNC44NDM3NiBoIC0xMy4zOSBWIDIuMjczNDQgaCAtMTMuMzkgViA4OC45NzI3IGggMTguNiIvPjxwYXRoIGlkPSJwYXRoOTQiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjU1OC4yNyw3My4xMTMzIC0xMi4yMiwtMzguOTg0NCBoIDI0LjU3IHogbSA2LjUsMTYuMTMyOCAyOS42NCwtODYuOTcyNjYgaCAtMTMuOSBsIC02LjM4LDIwLjI3MzQ2IGggLTMxLjU5IGwgLTYuNSwtMjAuMjczNDYgaCAtMTMuNzggbCAyOS41Miw4Ni45NzI2NiBoIDEyLjk5Ii8+PHBhdGggaWQ9InBhdGg5NiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0iTSAyNjQ5LjUzLDg4Ljk3MjcgViA3Ny40MTAyIGggLTIyLjg4IFYgMi4yNzM0NCBoIC0xMy40IFYgNzcuNDEwMiBoIC0yMi42MiB2IDExLjU2MjUgaCA1OC45Ii8+PHBhdGggaWQ9InBhdGg5OCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0iTSAyNjYyLjEzLDIuMjczNDQgViA4OC45NzI3IGggMTMuNTEgViAyLjI3MzQ0IGggLTEzLjUxIi8+PHBhdGggaWQ9InBhdGgxMDAiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjcwNi4wNyw0Ni4wODIgYyAwLC0yMC45Mzc1IDguOTgsLTMzLjgwODYgMjMuNCwtMzMuODA4NiA2Ljc3LDAgMTIuNzUsMi45ODgzIDE2LjUyLDguMzIwNCA0LjQyLDYuNTAzOSA2Ljc1LDE1LjIxNDggNi43NSwyNS4wOTc2IDAsMjAuMTU2MyAtOS4yMywzMy4yODEzIC0yMy40LDMzLjI4MTMgLTE0LjA0LDAgLTIzLjI3LC0xMy4wMDc5IC0yMy4yNywtMzIuODkwNyB6IG0gNjAuNzIsLTAuMzkwNiBjIDAsLTI2Ljc3NzMgLTE1LjA4LC00NC45ODA0NjIgLTM3LjMyLC00NC45ODA0NjIgLTIyLjc0LDAgLTM3LjQ0LDE3LjkyOTY2MiAtMzcuNDQsNDUuNjI0OTYyIDAsMjYuMTMyOSAxNS4yMSw0NC4xOTkzIDM3LjMxLDQ0LjE5OTMgMjIuMzcsMCAzNy40NSwtMTguMDY2NCAzNy40NSwtNDQuODQzOCIvPjxwYXRoIGlkPSJwYXRoMTAyIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDI3OTcuNDcsODguOTcyNyAzOC4wOSwtNjYuMjg5MSB2IDY2LjI4OTEgaCAxMi43NCBWIDIuMjczNDQgaCAtMTMuOTIgbCAtMzguNiw2Ni4xNzE4NiBWIDIuMjczNDQgaCAtMTIuNzQgViA4OC45NzI3IGggMTQuNDMiLz48cGF0aCBpZD0icGF0aDEwNCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyOTE0LjczLDg4Ljk3MjcgdiAtNTAuMjkzIGMgMCwtMTAuODAwOCAwLjM5LC0xMy45MjU4IDIuMzMsLTE3LjY5NTMgMi43MywtNS40NDkyIDguODQsLTguNTc0MiAxNi45LC04LjU3NDIgOS4zNiwwIDE1Ljc0LDQuMDIzNCAxOC4wNywxMS40NDUzIDAuOTIsMi45ODgzIDEuMTcsNS45NzY1IDEuMTcsMTQuODI0MiB2IDUwLjI5MyBoIDEzLjM5IFYgMzguNDA2MyBjIDAsLTEyLjg3MTEgLTAuNTIsLTE2LjY0MDcgLTIuNzIsLTIxLjU4MjEgLTQuNjksLTEwLjEzNjcgLTE1LjYxLC0xNi4xMTMyNjIgLTI5LjkxLC0xNi4xMTMyNjIgLTE0LjE3LDAgLTI1LjIyLDUuOTc2NTYyIC0yOS45LDE2LjExMzI2MiAtMi4yMSw1LjA3ODEgLTIuNzMsOC43MTEgLTIuNzMsMjEuNTgyMSB2IDUwLjU2NjQgaCAxMy40Ii8+PHBhdGggaWQ9InBhdGgxMDYiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMzAwMS40Myw4OC45NzI3IDM4LjA5LC02Ni4yODkxIHYgNjYuMjg5MSBoIDEyLjc0IFYgMi4yNzM0NCBoIC0xMy45MSBMIDI5OTkuNzQsNjguNDQ1MyBWIDIuMjczNDQgSCAyOTg3IFYgODguOTcyNyBoIDE0LjQzIi8+PHBhdGggaWQ9InBhdGgxMDgiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Ik0gMzA3My43MSwyLjI3MzQ0IFYgODguOTcyNyBoIDEzLjUyIFYgMi4yNzM0NCBoIC0xMy41MiIvPjxwYXRoIGlkPSJwYXRoMTEwIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJNIDMxNTguOTgsODguOTcyNyBWIDc3LjQxMDIgSCAzMTM2LjEgViAyLjI3MzQ0IGggLTEzLjQgViA3Ny40MTAyIGggLTIyLjYxIHYgMTEuNTYyNSBoIDU4Ljg5Ii8+PC9nPjwvZz48L3N2Zz4=" preserveAspectRatio="none" clip-path="url(#mx-clippath-inset-0-44-33-0-0-1)"/></g></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1645px" height="224px" viewBox="-0.5 -0.5 1645 224" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2023-08-28T11:02:48.329Z&quot; agent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/116.0&quot; etag=&quot;AZ-NWfF5aXEYaojAeGJP&quot; version=&quot;21.6.8&quot; type=&quot;device&quot;&gt;&lt;diagram name=&quot;Page-1&quot; id=&quot;eryS7HI5FcQ9b5fUF0Cc&quot;&gt;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&lt;/diagram&gt;&lt;/mxfile&gt;"><defs><clipPath id="mx-clippath-inset-0-44-33-0-0-1" clipPathUnits="objectBoundingBox"><rect x="0" y="0" width="0.5567" height="1"/></clipPath></defs><g><rect x="2" y="2" width="1640" height="220" fill="none" stroke="none" pointer-events="all"/><image x="162.5" y="43.5" width="290" height="145" xlink:href="data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjAiIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjUwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwMCA1MDAiPiYjeGE7JiN4YTsgPG1ldGFkYXRhPiYjeGE7JiN4YTsgICYjeGE7JiN4YTsgICAmI3hhOyYjeGE7ICAgIGltYWdlL3N2Zyt4bWwmI3hhOyYjeGE7ICAgICYjeGE7JiN4YTsgICAgJiN4YTsmI3hhOyAgICYjeGE7JiN4YTsgICYjeGE7JiN4YTsgPC9tZXRhZGF0YT4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0ibTk4NC41MTA1LDI1LjQxNTk2MS0yMzAuNTE0MjIsMCwwLDc4LjUxMTQzOSw2Ny4zOTc4MSwwLDAsMjcwLjY2NjE1LDk1LjcxODkzLDAsMC0yNzAuNjY2MTUsNjcuMzk3NDgsMCwwLTc4LjUxMTQzOXptLTI1My40NTgyOSwzNDguODE4OTRoLTk1LjcxOTE5di0zNDguODE4OTRoOTUuNzE5MTl2MzQ4LjgxODk0em0tMTExLjg1MTU5LDAtMTA2LjQ3Mzg1LDAtMTI2LjU0OTgxLTEzNS44NzA2MiwwLTc3Ljc5NDI1LDEyMi42MDYyNS0xMzUuNTEyNzQsMTA5LjcwMDY2LDAtMTQxLjI0ODM2LDE3NS42NjQ2NSwxNDEuOTY1MTEsMTczLjUxMjk2eiIvPiYjeGE7JiN4YTsgPHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJtMzYzLjIzMjksMzc0LjIzNDksMCwwLDAsMCwwLDB6Ii8+JiN4YTsmI3hhOyA8cGF0aCBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zNjMuMjMyOSwzNzQuMjM0OSwwLDAsMCwwLDAsMHoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMzMmExODkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTkwLjQxNTgzOCwxNTMuMDQxNDJjLTE4LjI4MzU4MywyMi4yMjcxMi0zNC4wNTcyNjUsNDYuNjA1MDUtNDYuMjQ2NTQ0LDcyLjc3NTMzbDMxOS4wNjM2MSwxNDguNDE4MTUtMjcyLjgxNzA2LTIyMS4xOTM0OHoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMzMmExODkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTM2My4yMzI5LDM3NC4yMzQ5LDIxNC40NTYyNSw1Ny42ODEwMDNjLTI2LjUyOTAzLDEyLjE4ODU4Ny01MC45MDY3NSwyNy4yNDYwOC03My4xMzM2NCw0NS4xNzA5NDdsMjIxLjkxMDI5LDI3MS4zODI5NXoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0ibTM2My4yMzI5LDM3NC4yMzQ5LDAuMzU4NDYtMzQ4LjgxODk0aC0yLjg2NzczYy0yOC4zMjE1MSwwLTU1LjkyNTksMy41ODUzODktODIuNDU0NjQsMTAuMDM4MjE3bDg0Ljk2MzkxLDMzOC43ODA3MnoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0ibTM2My4yMzI5LDM3NC4yMzQ5LDAsMCwwLDAsMCwwLDAsMHoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0ibTM2My4yMzI5LDM3NC4yMzQ5LDAsMCwwLDAsMCwwLDAsMHoiLz4mI3hhOyYjeGE7IDxwYXRoIGZpbGw9IiMzMmExODkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxLjIyNTU0NywyODguOTEyNDZjLTcuMTY5ODE0LDI3LjI0NjA4LTEwLjc1NDg0Nyw1NS45MjU2Ny0xMS4xMTM0MzQsODUuMzIyNDRoMzUzLjEyMDc5bC0zNDIuMDA3MzUtODUuMzIyNDR6Ii8+JiN4YTsmI3hhOyA8cGF0aCBkPSJtOTg5LjMzMTA5LDQ1Mi43Nzg0N2MtMS40NDIxNiwxLjE5MTMxLTUuOTU1OTEsMy4xOTc1Ny05Ljg0MzA3LDMuMTk3NTctNS41ODEyMiwwLTEwLjUzMzQ5LTQuMzI2MzktMTAuNTMzNDktMTAuNjU4NDRoMjIuODIxNzZjMC0xMC4yODMyNC0zLjQ0ODg0LTE4LjA1Nzk4LTE0LjEwNjk3LTE4LjA1Nzk4LTkuMDI4MjEsMC0xNC45ODU3OSw2LjcwOTkzLTE0Ljk4NTc5LDE2LjE3NzA1LDAsMTAuNDA4MTUsNS4yMDQ3OCwxNy4zMTUxMiwxNi41NTMxNywxNy4zMTUxMiw1LjI2NTc2LDAsNy44MzcxNy0xLjI2NDc2LDEwLjA5NDM5LTIuMDc5NzJ2LTUuODkzNnptLTIwLjM3NjU2LTExLjg0OTI4YzAuNDM4ODEtNC4xMzg1LDIuODIxMTUtOC45MDM2NCw4LjU4OTk3LTguOTAzNjQsNS4wNzgxOCwwLDcuOTYxODksNC4wMTIzLDcuOTYxODksOC45MDM2NGgtMTYuNTUxODZ6bS0xOS4wNzI0NSwxOS4wNTkxNSw1Ljg5MzQ5LDAsMC0zMS45NzYzOS01Ljg5MzQ5LDAsMCwzMS45NzYzOXptNi4yNjk2Ni00NS43Njk0MS02LjY0NiwwLDAsNi42NDYwMiw2LjY0NiwwLDAtNi42NDYwMnptLTM3Ni40MTg2NSwxLjM4ODEzLDYuNTUxMSwwLDAsNi42NzcwNy02LjU1MTEsMHptMTQuMDEzMTcsMCw2LjU1MTEsMCwwLDYuNjc3MDctNi41NTExLDB6bTE4Ljc3MTI5LDQ0LjM4MTI4LDUuODkzNTksMCwwLTE0LjU0NTc4YzAtOC4wMjQ0OSwzLjQ0ODU5LTEzLjA0MDYxLDguNzE0NTQtMTMuMDQwNjEsMS4wMDM2NywwLDIuMTk0OTcsMC4xMjQ5NSwzLjI2MTI2LDAuNTYzOHYtNS4yNjYwOWMtMS4yNTM3My0wLjI1MTE5LTIuMTMyNjItMC40NDAwNC0zLjg4NzM1LTAuNDQwMDQtMy4zODYxNSwwLTYuNzcyMzcsMi4zODM3NS04LjMzOTg0LDUuNzA2MTNoLTAuMTI0OTV2LTQuOTUzOGgtNS41MTcyM3YzMS45NzYzOXptLTguMzY0MTYtMzIuNzM5ODUtNS44OTM2LDAsMCwxNC43OTY5NGMwLDcuNzc0OC0zLjAwODUyLDEzLjE2NzE2LTkuNzE4MzUsMTMuMTY3MTYtNS4xNDEwNi0wLjMxMzk1LTYuNzcwODQtMy45NDk5NS02Ljc3MDg0LTExLjQxMDg1di0xNi41NTMyNWgtNS44OTM1OXYxOC45OTgyOGMwLDguNTg5NCwzLjY5ODYxLDEzLjc0MTU3LDExLjk3NTc4LDEzLjc0MTU3LDQuNDUxMDQsMCw4LjcxNDc1LTIuMjA0NjgsMTAuNDcxLTUuODQyMDloMC4xMjQ5NHY1LjA3ODY0aDUuNzA0Njl2LTMxLjk3NjR6bS0zMTcuNzUzNjYsMzIuNzM5ODUsNS44OTM1OSwwLDAtMTQuNTQ1NzhjMC04LjAyNDQ5LDMuNDQ4NTktMTMuMDQwNjEsOC43MTQ1My0xMy4wNDA2MSwxLjAwMzY4LDAsMi4xOTQ5OCwwLjEyNDk1LDMuMjYxMjcsMC41NjM4di01LjI2NjA5Yy0xLjI1MzczLTAuMjUxMTktMi4xMzI2My0wLjQ0MDA0LTMuODg3MzUtMC40NDAwNC0zLjM4NjE2LDAtNi43NzIzNywyLjM4Mzc1LTguMzM5ODQsNS43MDYxM2gtMC4xMjQ5NXYtNC45NTM4aC01LjUxNzIzdjMxLjk3NjM5em02NTQuOTgxMzItMzEuOTc2MzktNS40NTQ3NywwLDAsNC43NjYzNi0wLjEyNDk1LDBjLTEuNzU1MS0zLjQ0ODUyLTQuODg5OC01LjUxODY5LTEwLjUzMzQ3LTUuNTE4NjktOS42NTU2NywwLTE0LjI5NTU0LDguNzc4MjMtMTQuMjk1NTQsMTYuOTkyMDIsMCw4LjI3NTc3LDQuNTE0ODUsMTUuNzM2NywxMy42Njk1NCwxNS43MzY3LDQuMDc0NTIsMCw4LjIxMzM1LTEuNjMwMTMsMTAuNzIwNTgtNC45NTIyaDAuMTI1MTV2My4xMzQ2N2MwLDYuNzgyMzItMy42OTg4LDEwLjk4MzMtOS45MDU5MSwxMC45ODMzLTQuMzI2LDAtNy4wMjIzOS0wLjgxNjM5LTExLjUzNy0yLjg4NTA4bC0wLjYyNjMxLDUuNDU0ODVjNS4xNDA5MiwxLjc1NjE4LDguMDg2OTYsMi4xOTUwNywxMS40NzMzNCwyLjE5NTA3LDExLjQ3NDQ3LDAsMTYuNDg5MTktNS41ODEyMywxNi40ODkxOS0xNS4zMDkzNXYtMzAuNTk3NjV6bS0xNS4yMzU3MiwyNy4yMTE1NGMtNS41MTcyOSwwLTguOTAxODItNS4yNjYwOS04LjkwMTgyLTExLjI4NTc4LDAtNS40NTQ3NywyLjk0NjAzLTExLjkxMjE2LDguOTAxODItMTEuOTEyMTYsNi4yNjk5LDAsOS4zNDI0MSw1LjcwNTAyLDkuMzQyNDEsMTIuMzUxMDUsMCw1Ljk1NzIyLTMuODIzNzEsMTAuODQ2ODktOS4zNDI0MSwxMC44NDY4OXptLTUzLjQ4MTQzLTExLjIyMzMxYzAsOS4xNTQ3Miw2LjY0NiwxNi43NTE2MSwxNi4zMDE4LDE2Ljc1MTYxLDkuNTkzNTQsMCwxNi4yMzk0OC03LjU5Njg5LDE2LjIzOTQ4LTE2Ljc1MTYxLDAtOS43MTgyLTYuNTIwOTctMTYuNzQwNTYtMTYuMjM5NDgtMTYuNzQwNTYtOS43ODA3MiwwLTE2LjMwMTgsNy4wMjIzNi0xNi4zMDE4LDE2Ljc0MDU2em02LjI3MTE1LDBjMC02LjA4MDc0LDMuNjk4NDUtMTEuOTc0NjMsMTAuMDMwNjUtMTEuOTc0NjMsNi4yNjk4NiwwLDkuOTY5OSw1Ljg5Mzg5LDkuOTY5OSwxMS45NzQ2MywwLDUuNzA2MDgtMy4wNzI1MywxMS45NzU4Ni05Ljk2OTksMTEuOTc1ODYtNi45NTk2NCwwLTEwLjAzMDY1LTYuMjY5NzgtMTAuMDMwNjUtMTEuOTc1ODZ6bS0yMC44MTY2MywxNS45ODgxNiw1Ljg5MzU1LDAsMC00Ny4wMjMxMi01Ljg5MzU1LDAsMCw0Ny4wMjMxMnptLTQxLjE5MzI0LTE1Ljk4ODE2YzAsOS4xNTQ3Miw2LjY0NTY5LDE2Ljc1MTYxLDE2LjMwMTc1LDE2Ljc1MTYxLDkuNTkzMjQsMCwxNi4yMzkzMS03LjU5Njg5LDE2LjIzOTMxLTE2Ljc1MTYxLDAtOS43MTgyLTYuNTIxMS0xNi43NDA1Ni0xNi4yMzkzMS0xNi43NDA1Ni05Ljc4MDk0LDAtMTYuMzAxNzUsNy4wMjIzNi0xNi4zMDE3NSwxNi43NDA1NnptNi4yNzA4MiwwYzAtNi4wODA3NCwzLjY5ODQ5LTExLjk3NDYzLDEwLjAzMDkzLTExLjk3NDYzLDYuMjY5NzEsMCw5Ljk2OTYsNS44OTM4OSw5Ljk2OTYsMTEuOTc0NjMsMCw1LjcwNjA4LTMuMDcyMzksMTEuOTc1ODYtOS45Njk2LDExLjk3NTg2LTYuOTU5NTEsMC0xMC4wMzA5My02LjI2OTc4LTEwLjAzMDkzLTExLjk3NTg2em0tNDIuNDQ2OTUsMTUuOTg4MTYsNS44OTM1OSwwLDAtMTQuNzk2ODRjMC03Ljc3MzQzLDMuMDEwMDQtMTMuMTY1OTUsOS43MTgyMS0xMy4xNjU5NSw1LjE0MTIsMC4zMTI3LDYuNzcxMDMsMy45NTAyNCw2Ljc3MTAzLDExLjQxMTEydjE2LjU1MTY3aDUuODkzNTl2LTE4Ljk5NjY3YzAtOC41ODk3Mi0zLjY5ODUyLTEzLjczMjA1LTExLjk3NDMzLTEzLjczMjA1LTQuNDUyMzYsMC04LjcxNjIxLDIuMTk1MDgtMTAuNDcwOTksNS44MzEwNmgtMC4xMjQ5NHYtNS4wNzg3M2gtNS43MDYydjMxLjk3NjM5em0tMzguMzA4MTYsMCw1Ljg5MzU5LDAsMC0xNC43OTY4NGMwLTcuNzczNDMsMy4wMDk3NC0xMy4xNjU5NSw5LjcxODIxLTEzLjE2NTk1LDUuMTQwOTYsMC4zMTI3LDYuNzcwNzQsMy45NTAyNCw2Ljc3MDc0LDExLjQxMTEydjE2LjU1MTY3aDUuODkzODh2LTE4Ljk5NjY3YzAtOC41ODk3Mi0zLjY5ODgtMTMuNzMyMDUtMTEuOTc0NjMtMTMuNzMyMDUtNC40NTIzNiwwLTguMTUwODcsMS45NDM2NC0xMC4yODMxOSw1LjMyOTczaC0wLjEyNDk1di0xOS42MjQxM2gtNS44OTM1OXY0Ny4wMjMxMnptLTcuMDIyMy0zMS40NzM0N2MtMS42OTIzMS0wLjY5LTQuNzY0NTEtMS4yNTUyNS03LjE0NzEzLTEuMjU1MjUtOS43ODA4MywwLTE2LjMwMTczLDcuMDIyMzYtMTYuMzAxNzMsMTYuNzQwNTYsMCw5LjE1NDcyLDYuNjQ1NzcsMTYuNzUxNjEsMTYuMzAxNzMsMTYuNzUxNjEsMi4xMzEyMiwwLDQuOTUzNS0wLjE4ODg1LDcuMzk4NTEtMS4zMjcyNWwtMC40Mzg1Ny01LjI2NTg0Yy0xLjgxODc2LDEuMTkxMjktNC4zMjYyNiwxLjgxNzM0LTYuMzMyNDQsMS44MTczNC03LjU4NzE4LDAtMTAuNjU5NTMtNi4yNjk3OC0xMC42NTk1My0xMS45NzU4NiwwLTYuMDgwNzQsMy42OTk4NS0xMS45NzQ2MywxMC4yODMyNC0xMS45NzQ2MywxLjg4MDAxLDAsNC4xMzczNCwwLjQzODg0LDYuMzk0NzksMS4zNzg2OGwwLjUwMTEzLTQuODg5MzZ6bS0zMS4xNjEzOCwyNC4yNjM2Yy0xLjQ0MjE1LDEuMTkxMzEtNS45NTU4OSwzLjE5NzU3LTkuODQzMDEsMy4xOTc1Ny01LjU4MTI5LDAtMTAuNTMzNTItNC4zMjYzOS0xMC41MzM1Mi0xMC42NTg0NGgyMi44MjE3NGMwLTEwLjI4MzI0LTMuNDQ4ODMtMTguMDU3OTgtMTQuMTA2OS0xOC4wNTc5OC05LjAyODIzLDAtMTQuOTg1ODIsNi43MDk5My0xNC45ODU4MiwxNi4xNzcwNSwwLDEwLjQwODE1LDUuMjA0ODMsMTcuMzE1MTIsMTYuNTUzMTEsMTcuMzE1MTIsNS4yNjU3OSwwLDcuODM3MTktMS4yNjQ3NiwxMC4wOTQ0LTIuMDc5NzJ2LTUuODkzNnptLTIwLjM3NjUzLTExLjg0OTI4YzAuNDM4ODUtNC4xMzg1LDIuODIxMTQtOC45MDM2NCw4LjU4OTk2LTguOTAzNjQsNS4wNzgxNiwwLDcuOTYxODcsNC4wMTIzLDcuOTYxODcsOC45MDM2NGgtMTYuNTUxODN6bS0yNS4wODAwOSwxOS4wNTkxNSw2LjI2OTgzLDAsMC0zOC4yNDU5NiwxMy42MDU1NSwwLDAtNS41MTcyNS0zMy40ODEzMSwwLDAsNS41MTcyNSwxMy42MDU5MywwLDAsMzguMjQ1OTZ6bS0xMDQuMzI4NDMsMCw1Ljg5MzY4LDAsMC0yNy4yMTAwMyw4LjQ2NDQ3LDAsMC00Ljc2NjM2LTguNDY0NDcsMCwwLTMuNDQ2OThjMC00LjMyNzUyLDAuNjI2MDktNy41ODc0NCw1LjcwNDM4LTcuNTg3NDQsMS4wMDQwMywwLDIuMTMyNzMsMC4xMjQ5NSwyLjgyMjY2LDAuMzc2MTFsMC4yNDk3My00Ljc2NDQ3Yy0xLjE5MTA2LTAuMTg5MDctMi40NDQ2Ni0wLjM3NjQyLTMuOTQ5Ny0wLjM3NjQyLTguNzE0MzcsMC0xMC43MjA3NSw1LjA3ODczLTEwLjcyMDc1LDEyLjg1MzIxdjIuOTQ1OTloLTcuNTI0NzR2NC43NjYzNmg3LjUyNDc0djI3LjIxMDAzem0tMjcuMDY0NTUtMzEuOTc2MzktOC40NjQ2MiwwLDAtOS4yNzgxMS01Ljg5MzU5LDEuODc5NzEsMCw3LjM5ODQtNy4yMTEwMiwwLDAsNC43NjYzNiw3LjIxMTAyLDAsMCwxOC42ODQyN2MwLDYuMzk0NjEsMy43NjExMSw5LjI4OTIxLDkuODQzNDcsOS4yODkyMSwxLjg4MTA2LDAsMy42OTg1Mi0wLjUwMDk1LDUuMDE2MDYtMC44ODgzNnYtNS4wMTYyMmMtMC44Nzc0NCwwLjU2NDk1LTIuMTk1MDgsMS4xMjg4My00LjAxMzksMS4xMjg4My0yLjY5NDYsMC00Ljk1MjA0LTIuMDA2MjYtNC45NTIwNC01LjcwNDc2di0xNy40OTI5N2g4LjQ2NDYydi00Ljc2NjM2em0tMjcuMDIzOCwwLTUuODkzNTksMCwwLDE0Ljc5NjkzYzAsNy43NzQ4MS0zLjAwODUzLDEzLjE2NzE2LTkuNzE4MzUsMTMuMTY3MTYtNS4xNDEwNy0wLjMxMzk1LTYuNzcwODUtMy45NDk5NC02Ljc3MDg1LTExLjQxMDg1di0xNi41NTMyNGgtNS44OTM1OXYxOC45OTgyN2MwLDguNTg5NCwzLjY5ODYyLDEzLjc0MTU3LDExLjk3NTc4LDEzLjc0MTU3LDQuNDUxMDQsMCw4LjcxNDc2LTIuMjA0NjgsMTAuNDcxMDEtNS44NDIwOGgwLjEyNDkzdjUuMDc4NjNoNS43MDQ3di0zMS45NzYzOXptLTM1LjY3NDg1LDAtOC40NjQ2MSwwLDAtOS4yNzgxMS01Ljg5MzQyLDEuODc5NzEsMCw3LjM5ODQtNy4yMTExNywwLDAsNC43NjYzNiw3LjIxMTE3LDAsMCwxOC42ODQyN2MwLDYuMzk0NjEsMy43NjEwMSw5LjI4OTIxLDkuODQzMTksOS4yODkyMSwxLjg4MTI0LDAsMy42OTg2NC0wLjUwMDk1LDUuMDE2MjItMC44ODgzNnYtNS4wMTYyMmMtMC44Nzc0MSwwLjU2NDk1LTIuMTk1MTYsMS4xMjg4My00LjAxMzg4LDEuMTI4ODMtMi42OTQ2NSwwLTQuOTUyMTEtMi4wMDYyNi00Ljk1MjExLTUuNzA0NzZ2LTE3LjQ5Mjk3aDguNDY0NjF2LTQuNzY2MzZ6bS0zMy42Njk4LDMxLjk3NjM5LDUuODkzNDksMCwwLTMxLjk3NjM5LTUuODkzNDksMCwwLDMxLjk3NjM5em02LjI2OTY2LTQ1Ljc2OTQxLTYuNjQ2LDAsMCw2LjY0NjAyLDYuNjQ2LDAsMC02LjY0NjAyem0tMTQuNDIwNTIsMTMuNzkzMDItOC40NjQ3NCwwLDAtOS4yNzgxMS01Ljg5MzU5LDEuODc5NzEsMCw3LjM5ODQtNy4yMTEwMSwwLDAsNC43NjYzNiw3LjIxMTAxLDAsMCwxOC42ODQyN2MwLDYuMzk0NjEsMy43NjA5Miw5LjI4OTIxLDkuODQzMjksOS4yODkyMSwxLjg4MTI1LDAsMy42OTg2NC0wLjUwMDk1LDUuMDE2MTgtMC44ODgzNnYtNS4wMTYyMmMtMC44Nzc1LDAuNTY0OTUtMi4xOTQ5MiwxLjEyODgzLTQuMDEzNywxLjEyODgzLTIuNjk0NzcsMC00Ljk1MjE4LTIuMDA2MjYtNC45NTIxOC01LjcwNDc2di0xNy40OTI5N2g4LjQ2NDc0di00Ljc2NjM2em0tNDQuMDc4MzEsMzAuOTczNzZjMi42OTYxOSwxLjQ1MjI0LDUuNzY4NTMsMS43NjYwOCw4Ljc3NjkyLDEuNzY2MDgsNS43MDYxMywwLDExLjE2MDg0LTMuMTQ1OTcsMTEuMTYwODQtOS45NzkxOCwwLTEwLjIxOTc4LTEzLjg1NTQ5LTguMzM5NzItMTMuODU1NDktMTQuODU5NjYsMC0yLjYzMzY5LDIuNjMyMTUtMy44ODc0LDUuNjQyMTQtMy44ODc0LDEuMzgwMDksMCw0Ljg5MTE1LDAuODE1Miw2LjIwNzIzLDEuNjMwMTFsMC41MDEyNi01LjE0MDc5Yy0yLjMyMDA3LTAuNjktNC41NzU5OS0xLjI1NTI1LTcuMzM1OTItMS4yNTUyNS02LjMzMjMyLDAtMTEuMjg1ODYsMy4xOTg2NS0xMS4yODU4Niw5Ljg0NDYzLDAsOC45NjYwNywxMy44NTY5OSw4LjQ2MzIyLDEzLjg1Njk5LDE0LjI5NDM0LDAsMy40NDg2Mi0zLjMyMjIxLDQuNTc3NDUtNi4wMTg1NSw0LjU3NzQ1LTEuNjkzNzIsMC01LjAxNTg2LTAuNzUyNTUtNy4zMzU5Mi0yLjI1NzYzbC0wLjMxMzY0LDUuMjY3M3ptLTM1LjYxMjI5LDEuMDAyNjMsNS44OTM1OSwwLDAtMTQuNzk2ODRjMC03Ljc3MzQzLDMuMDA5ODctMTMuMTY1OTUsOS43MTgyNS0xMy4xNjU5NSw1LjE0MDk3LDAuMzEyNyw2Ljc3MDk0LDMuOTUwMjQsNi43NzA5NCwxMS40MTExMnYxNi41NTE2N2g1Ljg5MzZ2LTE4Ljk5NjY3YzAtOC41ODk3Mi0zLjY5ODY5LTEzLjczMjA1LTExLjk3NDQ0LTEzLjczMjA1LTQuNDUyNDIsMC04LjcxNjAyLDIuMTk1MDgtMTAuNDcwODIsNS44MzEwNmgtMC4xMjQ5NXYtNS4wNzg3M2gtNS43MDYxNXYzMS45NzYzOXptLTE2Ljg2Njg3LDAsNi4yNjk3NywwLDAtNDMuNzYzMjEtNi4yNjk3NywwLDAsNDMuNzYzMjF6bS01MS45NDc5OS03LjIwOTg3Yy0xLjQ0MjU3LDEuMTkxMzEtNS45NTU5OCwzLjE5NzU3LTkuODQzMzcsMy4xOTc1Ny01LjU4MTE3LDAtMTAuNTMzNDItNC4zMjYzOS0xMC41MzM0Mi0xMC42NTg0NGgyMi44MjE3NGMwLTEwLjI4MzI0LTMuNDQ4ODEtMTguMDU3OTgtMTQuMTA3MDQtMTguMDU3OTgtOS4wMjgyNiwwLTE0Ljk4NTY2LDYuNzA5OTMtMTQuOTg1NjYsMTYuMTc3MDUsMCwxMC40MDgxNSw1LjIwNDc1LDE3LjMxNTEyLDE2LjU1MzExLDE3LjMxNTEyLDUuMjY1OTYsMCw3LjgzNzE3LTEuMjY0NzYsMTAuMDk0NjQtMi4wNzk3MnYtNS44OTM2em0tMjAuMzc2NzktMTEuODQ5MjhjMC40Mzg4My00LjEzODUsMi44MjEyNi04LjkwMzY0LDguNTg5NzEtOC45MDM2NCw1LjA3ODU4LDAsNy45NjIwOCw0LjAxMjMsNy45NjIwOCw4LjkwMzY0aC0xNi41NTE3OXptLTQyLjQ0NjgyLDE5LjA1OTE1LDUuODkzNDcsMCwwLTE0Ljc5Njg0YzAtNy43NzM0MywzLjAwOTg1LTEzLjE2NTk1LDkuNzE4MzQtMTMuMTY1OTUsNS4xNDEwMywwLjMxMjcsNi43NzA4NSwzLjk1MDI0LDYuNzcwODUsMTEuNDExMTJ2MTYuNTUxNjdoNS44OTM1OXYtMTguOTk2NjdjMC04LjU4OTcyLTMuNjk4NTEtMTMuNzMyMDUtMTEuOTc0NS0xMy43MzIwNS00LjQ1MjM4LDAtOC4xNTA4MSwxLjk0MzY0LTEwLjI4MzM4LDUuMzI5NzNoLTAuMTI0OTR2LTE5LjYyNDEzaC01Ljg5MzQ3djQ3LjAyMzEyem0tMTAuMDMyMjUtMzEuOTc2MzktNS44OTMzOCwwLDAsMTQuNzk2OTNjMCw3Ljc3NDgxLTMuMDA4NTcsMTMuMTY3MTYtOS43MTgzOCwxMy4xNjcxNi01LjE0MTAzLTAuMzEzOTUtNi43NzA5Ny0zLjk0OTk0LTYuNzcwOTctMTEuNDEwODV2LTE2LjU1MzI0aC01Ljg5MzQ4djE4Ljk5ODI3YzAsOC41ODk0LDMuNjk4NjksMTMuNzQxNTcsMTEuOTc1ODUsMTMuNzQxNTcsNC40NTEwMywwLDguNzE0NDktMi4yMDQ2OCwxMC40NzA4Mi01Ljg0MjA4aDAuMTI0OTV2NS4wNzg2M2g1LjcwNDYzdi0zMS45NzYzOXptLTUyLjY2NjUsMzEuOTc2MzksNS44OTM1OSwwLDAtMTQuNTQ1NzhjMC04LjAyNDQ5LDMuNDQ4NTktMTMuMDQwNjEsOC43MTQ1My0xMy4wNDA2MSwxLjAwMzY4LDAsMi4xOTQ5OCwwLjEyNDk1LDMuMjYxMjcsMC41NjM4di01LjI2NjA5Yy0xLjI1MzczLTAuMjUxMTktMi4xMzI2My0wLjQ0MDA0LTMuODg3MzUtMC40NDAwNC0zLjM4NjE2LDAtNi43NzIzNywyLjM4Mzc1LTguMzM5ODUsNS43MDYxM2gtMC4xMjQ5NHYtNC45NTM4aC01LjUxNzIzdjMxLjk3NjM5em0tMjcuMDg2NC0xLjAwMjYzYzIuNjk2MjgsMS40NTIyNCw1Ljc2ODYzLDEuNzY2MDgsOC43NzcxNCwxLjc2NjA4LDUuNzA2MDIsMCwxMS4xNjA3OS0zLjE0NTk3LDExLjE2MDc5LTkuOTc5MTgsMC0xMC4yMTk3OC0xMy44NTU1Ni04LjMzOTcyLTEzLjg1NTU2LTE0Ljg1OTY2LDAtMi42MzM2OSwyLjYzMjMtMy44ODc0LDUuNjQyMi0zLjg4NzQsMS4zODAwNCwwLDQuODkxMDEsMC44MTUyLDYuMjA3MDksMS42MzAxMWwwLjUwMTQtNS4xNDA3OWMtMi4zMTk5NC0wLjY5LTQuNTc2MDctMS4yNTUyNS03LjMzNjA2LTEuMjU1MjUtNi4zMzIxOCwwLTExLjI4NTc5LDMuMTk4NjUtMTEuMjg1NzksOS44NDQ2MywwLDguOTY2MDcsMTMuODU3Miw4LjQ2MzIyLDEzLjg1NzIsMTQuMjk0MzQsMCwzLjQ0ODYyLTMuMzIyNDUsNC41Nzc0NS02LjAxODY5LDQuNTc3NDUtMS42OTM2NiwwLTUuMDE1OTMtMC43NTI1NS03LjMzNTk4LTIuMjU3NjNsLTAuMzEzNzQsNS4yNjczem0tMTMuOTgxODcsMS4wMDI2Myw1Ljg5MzQ4LDAsMC00Ny4wMjMxMi01Ljg5MzQ4LDAsMCw0Ny4wMjMxMnptLTI1LjE0MjgxNiwwLDUuODkzNTkzLDAsMC0xNC41NDU3OGMwLTguMDI0NDksMy40NDg1NjMtMTMuMDQwNjEsOC43MTQ0ODYtMTMuMDQwNjEsMS4wMDM4NjEsMCwyLjE5NDk1NCwwLjEyNDk1LDMuMjYxMjg3LDAuNTYzOHYtNS4yNjYwOWMtMS4yNTM3NzEtMC4yNTExOS0yLjEzMjQ2MS0wLjQ0MDA0LTMuODg3NDUtMC40NDAwNC0zLjM4NjAyOSwwLTYuNzcyMzA2LDIuMzgzNzUtOC4zMzk1OTMsNS43MDYxM2gtMC4xMjUxNXYtNC45NTM4aC01LjUxNzE3M3YzMS45NzYzOXptLTMzLjA0MjM1OS0yNC43MDI4NGMyLjM4MjM5My0yLjAwNjI0LDUuOTU2MDI0LTMuMjU5OTUsOS4yNzgzNDQtMy4yNTk5NSw1Ljg5NDc0NywwLDcuOTAwOTI2LDIuODIxNDMsNy45MDA5MjYsOC4zMzg2Ny0yLjMxOTk0MS0wLjEyNDk0LTMuOTQ5Ny0wLjEyNDk0LTYuMjY5NjQyLTAuMTI0OTQtNi4wODIzMjksMC0xNC44NjA4NTQsMi41MDY5LTE0Ljg2MDg1NCwxMC41MzM0MSwwLDYuOTU5NjQsNC44Mjg2Niw5Ljk3OTE5LDExLjcyNTg0OCw5Ljk3OTE5LDUuMzkwOTUsMCw4LjUyNTkzNy0yLjk1NzA4LDkuOTA1Nzg2LTQuOTAwODFoMC4xMjQ5NDR2NC4xMzczNWg1LjUxNzE1M2MtMC4xMjQ5NDUtMC45Mzk4NS0wLjI0OTg2OC0yLjYzMjQ1LTAuMjQ5ODY4LTYuMjY5OTN2LTEzLjIyOTIyYzAtOC43MTQ3NC0zLjY5OTg5NS0xMy4yMjk1Ny0xMi44NTMyMTItMTMuMjI5NTctNC4wNzYwNjcsMC03LjU4NzE4NSwxLjI1NTI1LTEwLjUzMzI5MSwzLjAwOTk4bDAuMzEzNzYzLDUuMDE1OTF6bTE3LjE3OTI3LDEyLjI4OTc1YzAsNC43NjQ3LTMuMDcyMzI4LDguNDAwNzktOC45MDM0NDksOC40MDA3OS0yLjY5NjA5MywwLTUuOTU1OS0xLjgxNzM0LTUuOTU1OS01LjIwMzQzLDAtNS42NDM2OCw3Ljg5OTYwNy02LjE0NDk1LDExLjA5NzAyNC02LjE0NDk1LDEuMjUzNjA3LDAsMi41MDcyMTMsMC4xMjQ5NSwzLjc2MjMyNSwwLjEyNDk1djIuODIyNjZ6bS01OS45Mzk5NzksMTIuNDEzMDksNi4yNjk4NDg2LDAsMC0yMS40NDI4NiwxOS40OTkwMjYsMjEuNDQyODYsOS4xNTQ2OTksMC0yMi4xOTUzODktMjMuMDcyNzYsMjAuNTY1NDQ0LTIwLjY5MDQ1LTguMzM5NjU0LDAtMTguNjg0MTI2LDE5LjI0OTIyLDAtMTkuMjQ5MjItNi4yNjk4NDg2LDAsMCw0My43NjMyMXoiIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0ibm9uemVybyIvPiYjeGE7JiN4YTs8L3N2Zz4=" preserveAspectRatio="none"/><image x="862.5" y="70.5" width="1122.6872642356745" height="71.11" xlink:href="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNDY0Ljc4NjY4IDI5LjQ4IiBoZWlnaHQ9IjI5LjQ4IiB3aWR0aD0iNDY0Ljc4NjY4IiB4bWw6c3BhY2U9InByZXNlcnZlIiBpZD0ic3ZnMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxtZXRhZGF0YSBpZD0ibWV0YWRhdGE4Ij5pbWFnZS9zdmcreG1sPC9tZXRhZGF0YT48ZGVmcyBpZD0iZGVmczYiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMzMzMzMzMsMCwwLC0xLjMzMzMzMzMsMCwyOS40OCkiIGlkPSJnMTAiPjxnIHRyYW5zZm9ybT0ic2NhbGUoMC4xKSIgaWQ9ImcxMiI+PHBhdGggaWQ9InBhdGgxNCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAxMTQuNzE5LDEzMC42NDUgdiA4Ni44NjMgSCAxNTUuOTEgViAyLjg3ODkxIEggMTE0LjcxOSBWIDg5LjQ1MzEgSCA0MS4xNjQxIFYgMi44Nzg5MSBIIDAgViAyMTcuNTA4IGggNDEuMTY0MSB2IC04Ni44NjMgaCA3My41NTQ5Ii8+PHBhdGggaWQ9InBhdGgxNiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAzMzcuMzYzLDIxNy41MDggdiAtNDEuMTYgaCAtOTQuMTYgdiAtNDUuNzAzIGggODEuNzM4IFYgODkuNDUzMSBIIDI0My4yMDMgViA0NC4wNDMgaCA5NC4xNiBWIDIuODc4OTEgSCAyMjIuMzE2IGMgLTEuODIsMCAtMy42NDQsMC42MTcxOCAtNC44NTEsMi4xMjEwOSBsIC0xMy4zMTMsMTMuMzA4NiBjIC0xLjUwNCwxLjIxMDkgLTIuMTE3LDMuMDM5MSAtMi4xMTcsNC44NTU1IFYgMTk3LjI1IGMgMCwxLjc5NyAwLjYxMywzLjYyMSAyLjExNyw0LjgyOCBsIDEzLjMxMywxMy4zMTMgYyAxLjIwNywxLjIzNCAzLjAzMSwyLjExNyA0Ljg1MSwyLjExNyBoIDExNS4wNDciLz48cGF0aCBpZD0icGF0aDE4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDQwMS4wMzUsMi44Nzg5MSBjIC0xLjgyOCwwIC0zLjY0OCwwLjYxNzE4IC00Ljg1OSwyLjEyMTA5IGwgLTEzLjMxMywxMy4zMDg2IGMgLTEuNTI3LDEuMjEwOSAtMi4xMTcsMy4wMzkxIC0yLjExNyw0Ljg1NTUgViAyMTcuNTA4IGggNDEuMTY4IFYgNDQuMDQzIGggODkuNTk4IFYgMi44Nzg5MSBIIDQwMS4wMzUiLz48cGF0aCBpZD0icGF0aDIwIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJNIDczMi41NzgsMjE3LjUwOCBWIDIuODc4OTEgSCA2OTEuNDEgViAxMjEuNTQ3IEwgNjU3LjgxNiw1MS4zMTY0IGMgLTEuMjA3LC0yLjQxMDEgLTMuNjI4LC0zLjk0NTMgLTYuMDYyLC0zLjk0NTMgaCAtMjQuMjExIGMgLTIuNzM0LDAgLTUuMTUyLDEuNTM1MiAtNi4zNTksMy45NDUzIEwgNTg3LjU4NiwxMjEuNTQ3IFYgMi44Nzg5MSBIIDU0Ni40MjIgViAyMTcuNTA4IGggNDEuMTY0IGwgNTIuMDYyLC0xMDguOTgxIDUxLjc2MiwxMDguOTgxIGggNDEuMTY4Ii8+PHBhdGggaWQ9InBhdGgyMiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSA4OTAuNzM0LDEzMC42NDUgdiA4Ni44NjMgaCA0MS4xOTIgViAyLjg3ODkxIEggODkwLjczNCBWIDg5LjQ1MzEgSCA4MTcuMTc2IFYgMi44Nzg5MSBIIDc3Ni4wMDggViAyMTcuNTA4IGggNDEuMTY4IHYgLTg2Ljg2MyBoIDczLjU1OCIvPjxwYXRoIGlkPSJwYXRoMjQiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMTA4Ny42NCw2NC4wNDMgdiA5Mi4wMTYgYyAwLDEuODIgLTAuOTEsMy42NDggLTIuMTIsNC44NTEgbCAtMTMuMDIsMTMuMzE3IGMgLTEuNTIsMS4yMDcgLTMuMzMsMi4xMjEgLTUuMTUsMi4xMjEgaCAtMzYuOTMgYyAtMS44MiwwIC0zLjMyLC0wLjkxNCAtNC44NSwtMi4xMjEgbCAtMTMuMDIsLTEzLjMxNyBjIC0xLjUsLTEuMjAzIC0yLjEyLC0zLjAzMSAtMi4xMiwtNC44NTEgViA2NC4wNDMgYyAwLC0xLjgyODIgMC42MiwtMy4zMzIxIDIuMTIsLTQuODYzMyBsIDEzLjAyLC0xMy4wMDc4IGMgMS41MywtMS41MTU2IDMuMDMsLTIuMTI4OSA0Ljg1LC0yLjEyODkgaCAzNi45MyBjIDEuODIsMCAzLjYzLDAuNjEzMyA1LjE1LDIuMTI4OSBsIDEzLjAyLDEzLjAwNzggYyAxLjIxLDEuNTMxMiAyLjEyLDMuMDM1MSAyLjEyLDQuODYzMyB6IG0gOS42OSwxNDMuMTg3IDIxLjQ5LC0yMS4yMDMgYyA2LjM2LC02LjM1NSA5Ljk4LC0xNS4xMjkgOS45OCwtMjQuMjAzIFYgNTguNTkzOCBjIDAsLTkuMTAxNiAtMy42MiwtMTcuODcxMSAtOS45OCwtMjQuMjMwNSBsIC0yMS40OSwtMjEuNTAzOSBjIC02LjM2LC02LjM1NTQ5IC0xNS4xNCwtOS45ODA0OSAtMjQuMjQsLTkuOTgwNDkgaCAtNDguMTEgYyAtOS4xLDAgLTE4LjE3LDMuMzMyMDMgLTI0LjUzLDkuOTgwNDkgbCAtMjEuMTk2LDIxLjUwMzkgYyAtNi4zNTksNi4zNTk0IC05Ljk4OCwxNS4xMjg5IC05Ljk4OCwyNC4yMzA1IFYgMTYxLjgyNCBjIDAsOS4wNzQgMy42MjksMTcuODQ4IDkuOTg4LDI0LjIwMyBsIDIxLjE5NiwyMS4yMDMgYyA2LjY2LDYuNjU3IDE1LjQzLDEwLjI3OCAyNC41MywxMC4yNzggaCA0OC4xMSBjIDkuMSwwIDE3LjU4LC0zLjkxNCAyNC4yNCwtMTAuMjc4Ii8+PHBhdGggaWQ9InBhdGgyNiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAxMTg1LjUzLDIuODc4OTEgYyAtMS44MywwIC0zLjY1LDAuNjE3MTggLTQuODYsMi4xMjEwOSBsIC0xMy4zMSwxMy4zMDg2IGMgLTEuNTMsMS4yMTA5IC0yLjEyLDMuMDM5MSAtMi4xMiw0Ljg1NTUgViAyMTcuNTA4IGggNDEuMTYgViA0NC4wNDMgSCAxMjk2IFYgMi44Nzg5MSBoIC0xMTAuNDciLz48cGF0aCBpZD0icGF0aDI4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDEyOTMuMDUsMTc2LjM0OCB2IDQxLjE2IGggMTU1IHYgLTQxLjE2IGggLTU2LjkyIFYgMi44Nzg5MSBoIC00MS4xNiBWIDE3Ni4zNDggaCAtNTYuOTIiLz48cGF0aCBpZD0icGF0aDMwIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDE2MDcuNDEsMjE1LjM5MSAxMy4zMiwtMTMuMzEzIGMgMS4yLC0xLjIwNyAyLjEyLC0zLjAzMSAyLjEyLC00LjgyOCBWIDE4Ni42NDggTCAxNTMyLjYzLDQ0LjA0MyBoIDg5IFYgMi44Nzg5MSBoIC0xMjIuOSBjIC0xLjgyLDAgLTMuNjUsMC42MTcxOCAtNC44NSwyLjEyMTA5IGwgLTEzLjMxLDEzLjMwODYgYyAtMS4yMiwxLjIxMDkgLTIuMTMsMy4wMzkxIC0yLjEzLDQuODU1NSB2IDEyLjQwMjMgbCA4OS4wMSwxNDAuNzgxNiBoIC05MC4yMSB2IDQxLjE2IGggMTI1LjMyIGMgMS44MiwwIDMuNjQsLTAuODgzIDQuODUsLTIuMTE3Ii8+PHBhdGggaWQ9InBhdGgzMiIgc3R5bGU9ImZpbGw6IzgwY2QzMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAxNzI0LjMyLDg1Ljg5ODQgaCA1MC41IGwgLTI1LjM5LDcyLjI5NjYgeiBNIDE3MDkuNzgsNDQuNzUzOSAxNjk0Ljk3LDMuMDA3ODEgaCAtNDMuNTcgbCA3My44MSwyMDkuNjQ4MTkgYyAwLjksMyAzLjM0LDQuODI4IDYuMzUsNC44MjggaCAzNiBjIDIuNzEsMCA1LjQ0LC0xLjgyOCA2LjM2LC00LjU0NiBMIDE4NDcuNzEsMy4wMDc4MSBoIC00My41NCBsIC0xNC44Miw0MS43NDYwOSBoIC03OS41NyIvPjxwYXRoIGlkPSJwYXRoMzQiIHN0eWxlPSJmaWxsOiM4MGNkMzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMTkxOC45OSwzLjAwNzgxIGggLTQxLjEzIFYgMjE3LjQ4NCBoIDQxLjEzIFYgMy4wMDc4MSIvPjxwYXRoIGlkPSJwYXRoMzYiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMTk5Ni4zOSwwIGggLTcuMzQgdiAyMjEuMTAyIGggNy4zNCBWIDAiLz48cGF0aCBpZD0icGF0aDM4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDIwOTUuMDgsMjAxLjEyMSAtMTIuMjIsLTM5IGggMjQuNTcgeiBtIDYuNSwxNi4xMTcgMjkuNjQsLTg2Ljk3MiBoIC0xMy45MSBsIC02LjM3LDIwLjI4NSBoIC0zMS42IGwgLTYuNDksLTIwLjI4NSBoIC0xMy43OCBsIDI5LjUxLDg2Ljk3MiBoIDEzIi8+PHBhdGggaWQ9InBhdGg0MCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyMTYzLjMyLDE3Ni42ODQgYyA5LjM2LDAgMTIuMjMsMC4yNTQgMTUuNzMsMS41NSA1LjQ2LDEuOTU0IDguNDYsNi42MzMgOC40NiwxMy4xMzcgMCw1LjU5IC0yLjM1LDkuNzUgLTYuNzcsMTEuODMyIC0zLjYzLDEuODE3IC02LjQ5LDIuMjA3IC0xOC4wNywyLjIwNyBoIC01LjMzIHYgLTI4LjcyNiB6IG0gLTAuNzcsNDAuMjk2IGMgMTQuNDIsMCAxOS44OCwtMC43ODEgMjUuNzMsLTMuNTExIDguMTksLTMuODk5IDEzLjEzLC0xMi4yMTkgMTMuMTMsLTIyLjIzMSAwLC0xMS40NDEgLTUuNTgsLTE5LjQ5NiAtMTYuNTEsLTIzLjkyMiBsIDIxLjMzLC0zNy4wNSBoIC0xNS44NiBsIC0xOS42NCwzNC44NDMgaCAtMTMuMzkgdiAtMzQuODQzIGggLTEzLjM5IHYgODYuNzE0IGggMTguNiIvPjxwYXRoIGlkPSJwYXRoNDIiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjI2OC43NywyMTYuOTggdiAtMTEuNTcgaCAtMjIuODggdiAtNzUuMTQ0IGggLTEzLjQgdiA3NS4xNDQgaCAtMjIuNjIgdiAxMS41NyBoIDU4LjkiLz48cGF0aCBpZD0icGF0aDQ0IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDIyODEuMzgsMTMwLjI2NiB2IDg2LjcxNCBoIDEzLjUxIHYgLTg2LjcxNCBoIC0xMy41MSIvPjxwYXRoIGlkPSJwYXRoNDYiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjM2NC43MSwxODAuOTY5IHYgLTExLjU3MSBoIC0zNC44NSB2IC0zOS4xMzIgaCAtMTMuMzkgdiA4Ni43MTQgaCA1MS4zNSB2IC0xMS41NyBoIC0zNy45NiB2IC0yNC40NDEgaCAzNC44NSIvPjxwYXRoIGlkPSJwYXRoNDgiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjM4MS44NiwxMzAuMjY2IHYgODYuNzE0IGggMTMuNTIgdiAtODYuNzE0IGggLTEzLjUyIi8+PHBhdGggaWQ9InBhdGg1MCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyNDY2LjYyLDE5MC43MjMgYyAtMi4wOCwxMC43ODUgLTguMDYsMTYuMTE3IC0xNy44MSwxNi4xMTcgLTE0LjE3LDAgLTIzLjAxLC0xMi44NzEgLTIzLjAxLC0zMy4yODEgMCwtMjAuNDExIDguODQsLTMzLjE1NyAyMy4xNCwtMzMuMTU3IDExLjA1LDAgMTcuMjksNy4wMjQgMTguNiwyMC44MDEgaCAxMi4yMSBjIC0xLjI5LC0yMS4xOTEgLTExLjgzLC0zMi41IC0zMC40MiwtMzIuNSAtMjIuODgsMCAtMzcuNTcsMTcuNDIyIC0zNy41Nyw0NC43MjcgMCwyNy4zIDE0LjU2LDQ1LjEwOSAzNy4wNSw0NS4xMDkgMTcuNDIsMCAyOC4wOCwtMTAuMDEyIDI5LjY1LC0yNy44MTYgaCAtMTEuODQiLz48cGF0aCBpZD0icGF0aDUyIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDI0OTQuODMsMTMwLjI2NiB2IDg2LjcxNCBoIDEzLjUyIHYgLTg2LjcxNCBoIC0xMy41MiIvPjxwYXRoIGlkPSJwYXRoNTQiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjU1Ny4xLDIwMS4xMjEgLTEyLjIyLC0zOSBoIDI0LjU3IHogbSA2LjUsMTYuMTE3IDI5LjY0LC04Ni45NzIgaCAtMTMuOTEgbCAtNi4zNywyMC4yODUgaCAtMzEuNTkgbCAtNi41LC0yMC4yODUgaCAtMTMuNzggbCAyOS41MSw4Ni45NzIgaCAxMyIvPjxwYXRoIGlkPSJwYXRoNTYiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjYxOS43NSwyMTYuOTggdiAtNzUuMTQgaCAzNy4zMiB2IC0xMS41NzQgaCAtNTEuMDkgdiA4Ni43MTQgaCAxMy43NyIvPjxwYXRoIGlkPSJwYXRoNTgiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjcwMi44MywxMzAuMjY2IHYgODYuNzE0IGggMTMuNTIgdiAtODYuNzE0IGggLTEzLjUyIi8+PHBhdGggaWQ9InBhdGg2MCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyNzUyLjM2LDIxNi45OCAzOC4wOSwtNjYuMzA0IHYgNjYuMzA0IGggMTIuNzQgdiAtODYuNzE0IGggLTEzLjkxIGwgLTM4LjYxLDY2LjE3MiB2IC02Ni4xNzIgaCAtMTIuNzQgdiA4Ni43MTQgaCAxNC40MyIvPjxwYXRoIGlkPSJwYXRoNjIiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjg3NC45NSwyMTYuOTggdiAtMTEuNTcgaCAtMjIuODggdiAtNzUuMTQ0IGggLTEzLjQgdiA3NS4xNDQgaCAtMjIuNjIgdiAxMS41NyBoIDU4LjkiLz48cGF0aCBpZD0icGF0aDY0IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDI5MzUuOTIsMTgwLjk2OSB2IC0xMS41NzEgaCAtMzQuODUgViAxNDEuODQgaCAzOS4wMSB2IC0xMS41NzQgaCAtNTIuNCB2IDg2LjcxNCBoIDUxLjM1IHYgLTExLjU3IGggLTM3Ljk2IHYgLTI0LjQ0MSBoIDM0Ljg1Ii8+PHBhdGggaWQ9InBhdGg2NiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyOTY5LjA2LDIxNi45OCB2IC03NS4xNCBoIDM3LjMyIHYgLTExLjU3NCBoIC01MS4xIHYgODYuNzE0IGggMTMuNzgiLz48cGF0aCBpZD0icGF0aDY4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDMwMzMuNTQsMjE2Ljk4IHYgLTc1LjE0IGggMzcuMzIgdiAtMTEuNTc0IGggLTUxLjEgdiA4Ni43MTQgaCAxMy43OCIvPjxwYXRoIGlkPSJwYXRoNzAiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMzA4NC4xMiwxMzAuMjY2IHYgODYuNzE0IGggMTMuNTIgdiAtODYuNzE0IGggLTEzLjUyIi8+PHBhdGggaWQ9InBhdGg3MiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAzMTgzLjE4LDE3NC4yMTEgdiAtMzUuODg3IGMgLTkuMjQsLTYuNDk2IC0xOS4xMSwtOS42MjEgLTMwLjQyLC05LjYyMSAtMjQuMDUsMCAtMzguNzUsMTcuMDMxIC0zOC43NSw0NC45ODEgMCwyNy4xNzUgMTQuNyw0NC44NTUgMzcuNDQsNDQuODU1IDEwLjY3LDAgMTkuMzgsLTMuODk4IDI0Ljg0LC0xMC45MTggMy4zOCwtNC41NTEgNC45NCwtOS4yMyA1LjcyLC0xNi43NzMgaCAtMTEuOTYgYyAtMS45NiwxMC43OTMgLTcuOTMsMTUuOTkyIC0xOC4zMywxNS45OTIgLTE0LjY5LDAgLTIzLjY2LC0xMi40ODEgLTIzLjY2LC0zMy4yODEgMCwtMTAuNjY0IDIuNTksLTE5LjYyOSA3LjUzLC0yNS43NDMgMy45MSwtNC45NDEgOS43NiwtNy40MTQgMTcuMTcsLTcuNDE0IDYuNjMsMCAxMy4yNSwxLjk1MyAxOC45OCw1LjU5OCB2IDE3LjY3NiBoIC0xNy41NSB2IDEwLjUzNSBoIDI4Ljk5Ii8+PHBhdGggaWQ9InBhdGg3NCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAzMjQ5LjYxLDE4MC45NjkgdiAtMTEuNTcxIGggLTM0Ljg1IFYgMTQxLjg0IGggMzkuMDEgdiAtMTEuNTc0IGggLTUyLjM5IHYgODYuNzE0IGggNTEuMzQgdiAtMTEuNTcgaCAtMzcuOTYgdiAtMjQuNDQxIGggMzQuODUiLz48cGF0aCBpZD0icGF0aDc2IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDMyODMuNDEsMjE2Ljk4IDM4LjA4LC02Ni4zMDQgdiA2Ni4zMDQgaCAxMi43NSB2IC04Ni43MTQgaCAtMTMuOTIgbCAtMzguNiw2Ni4xNzIgdiAtNjYuMTcyIGggLTEyLjc1IHYgODYuNzE0IGggMTQuNDQiLz48cGF0aCBpZD0icGF0aDc4IiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDM0MDUuMjEsMTkwLjcyMyBjIC0yLjA4LDEwLjc4NSAtOC4wNSwxNi4xMTcgLTE3LjgxLDE2LjExNyAtMTQuMTcsMCAtMjMuMDEsLTEyLjg3MSAtMjMuMDEsLTMzLjI4MSAwLC0yMC40MTEgOC44NCwtMzMuMTU3IDIzLjE1LC0zMy4xNTcgMTEuMDQsMCAxNy4yOCw3LjAyNCAxOC41OSwyMC44MDEgaCAxMi4yMiBjIC0xLjMsLTIxLjE5MSAtMTEuODQsLTMyLjUgLTMwLjQyLC0zMi41IC0yMi44OCwwIC0zNy41OCwxNy40MjIgLTM3LjU4LDQ0LjcyNyAwLDI3LjMgMTQuNTYsNDUuMTA5IDM3LjA1LDQ1LjEwOSAxNy40MiwwIDI4LjA5LC0xMC4wMTIgMjkuNjUsLTI3LjgxNiBoIC0xMS44NCIvPjxwYXRoIGlkPSJwYXRoODAiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMzQ4MS43OSwxODAuOTY5IHYgLTExLjU3MSBoIC0zNC44NSBWIDE0MS44NCBoIDM5LjAxIHYgLTExLjU3NCBoIC01Mi40IHYgODYuNzE0IGggNTEuMzUgdiAtMTEuNTcgaCAtMzcuOTYgdiAtMjQuNDQxIGggMzQuODUiLz48cGF0aCBpZD0icGF0aDgyIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDIxMTcuNTcsNjIuNzIyNyBjIC0yLjA4LDEwLjc4MTIgLTguMDYsMTYuMTEzMiAtMTcuODEsMTYuMTEzMiAtMTQuMTgsMCAtMjMuMDEsLTEyLjg3MTEgLTIzLjAxLC0zMy4yODEyIDAsLTIwLjQxMDIgOC44MywtMzMuMTQ0NSAyMy4xNCwtMzMuMTQ0NSAxMS4wNSwwIDE3LjI5LDcuMDExNyAxOC41OSwyMC44MDA3IGggMTIuMjIgYyAtMS4zLC0yMS4xOTE0IC0xMS44MywtMzIuNDk5OTYyIC0zMC40MiwtMzIuNDk5OTYyIC0yMi44OCwwIC0zNy41OCwxNy40MjE4NjIgLTM3LjU4LDQ0LjcyNjU2MiAwLDI3LjI4NTIgMTQuNTYsNDUuMDk3NyAzNy4wNiw0NS4wOTc3IDE3LjQyLDAgMjguMDgsLTEwIDI5LjY0LC0yNy44MTI1IGggLTExLjgzIi8+PHBhdGggaWQ9InBhdGg4NCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyMTU0LjYyLDQ2LjA4MiBjIDAsLTIwLjkzNzUgOC45NywtMzMuODA4NiAyMy40LC0zMy44MDg2IDYuNzYsMCAxMi43NCwyLjk4ODMgMTYuNTEsOC4zMjA0IDQuNDIsNi41MDM5IDYuNzYsMTUuMjE0OCA2Ljc2LDI1LjA5NzYgMCwyMC4xNTYzIC05LjIzLDMzLjI4MTMgLTIzLjQsMzMuMjgxMyAtMTQuMDQsMCAtMjMuMjcsLTEzLjAwNzkgLTIzLjI3LC0zMi44OTA3IHogbSA2MC43MSwtMC4zOTA2IGMgMCwtMjYuNzc3MyAtMTUuMDgsLTQ0Ljk4MDQ2MiAtMzcuMzEsLTQ0Ljk4MDQ2MiAtMjIuNzUsMCAtMzcuNDUsMTcuOTI5NjYyIC0zNy40NSw0NS42MjQ5NjIgMCwyNi4xMzI5IDE1LjIyLDQ0LjE5OTMgMzcuMzIsNDQuMTk5MyAyMi4zNiwwIDM3LjQ0LC0xOC4wNjY0IDM3LjQ0LC00NC44NDM4Ii8+PHBhdGggaWQ9InBhdGg4NiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyMjQwLjQyLDQ2LjA4MiBjIDAsLTIwLjkzNzUgOC45NywtMzMuODA4NiAyMy40LC0zMy44MDg2IDYuNzYsMCAxMi43NCwyLjk4ODMgMTYuNTEsOC4zMjA0IDQuNDIsNi41MDM5IDYuNzYsMTUuMjE0OCA2Ljc2LDI1LjA5NzYgMCwyMC4xNTYzIC05LjIzLDMzLjI4MTMgLTIzLjQsMzMuMjgxMyAtMTQuMDQsMCAtMjMuMjcsLTEzLjAwNzkgLTIzLjI3LC0zMi44OTA3IHogbSA2MC43MSwtMC4zOTA2IGMgMCwtMjYuNzc3MyAtMTUuMDgsLTQ0Ljk4MDQ2MiAtMzcuMzEsLTQ0Ljk4MDQ2MiAtMjIuNzUsMCAtMzcuNDQsMTcuOTI5NjYyIC0zNy40NCw0NS42MjQ5NjIgMCwyNi4xMzI5IDE1LjIxLDQ0LjE5OTMgMzcuMzEsNDQuMTk5MyAyMi4zNiwwIDM3LjQ0LC0xOC4wNjY0IDM3LjQ0LC00NC44NDM4Ii8+PHBhdGggaWQ9InBhdGg4OCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyMzM2LjQ5LDQ3LjUwNzggYyA5LjIzLDAgMTEuOTcsMC4yNTM5IDE1LjYsMS4zMDg2IDUuNzIsMS42Nzk3IDguODUsNi41MDM5IDguODUsMTMuMzc4OSAwLDYuNTAzOSAtMi40NywxMS4wNTQ3IC03LjE2LDEzLjE0NDUgLTMuNjMsMS41NDMgLTcuNTQsMi4wNzA0IC0xNy40MSwyLjA3MDQgaCAtNS42IFYgNDcuNTA3OCBaIG0gLTEuNjksNDEuNDY0OSBjIDEzLDAgMTguNzIsLTAuNjQ0NiAyNC4zMSwtMi40NjEgOS43NiwtMy4yNDIyIDE1LjczLC0xMi40ODA0IDE1LjczLC0yNC40MzM2IDAsLTExLjU4MiAtNS43MiwtMjAuNTQ2OCAtMTUuMzQsLTIzLjc4OSAtNS4xOSwtMS44MzYgLTEwLjY1LC0yLjM0MzggLTIzLjAxLC0yLjM0MzggaCAtNS43MiBWIDIuMjczNDQgaCAtMTMuMzkgViA4OC45NzI3IGggMTcuNDIiLz48cGF0aCBpZD0icGF0aDkwIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJNIDI0MzYuNzMsNTIuOTc2NiBWIDQxLjM5NDUgaCAtMzQuODUgViAxMy44MzU5IGggMzkuMDEgViAyLjI3MzQ0IGggLTUyLjQgViA4OC45NzI3IGggNTEuMzUgViA3Ny40MTAyIGggLTM3Ljk2IFYgNTIuOTc2NiBoIDM0Ljg1Ii8+PHBhdGggaWQ9InBhdGg5MiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyNDc1LjQ3LDQ4LjY3OTcgYyA5LjM1LDAgMTIuMjEsMC4yNTM5IDE1LjcyLDEuNTYyNSA1LjQ2LDEuOTUzMSA4LjQ2LDYuNjIxMSA4LjQ2LDEzLjEyNSAwLDUuNTg1OSAtMi4zNSw5Ljc0NjEgLTYuNzcsMTEuODM1OSAtMy42MywxLjgxNjQgLTYuNDksMi4yMDcxIC0xOC4wNywyLjIwNzEgaCAtNS4zMyBWIDQ4LjY3OTcgWiBtIC0wLjc4LDQwLjI5MyBjIDE0LjQyLDAgMTkuODgsLTAuNzYxOCAyNS43NCwtMy40OTYxIDguMTgsLTMuOTA2MyAxMy4xMiwtMTIuMjI2NiAxMy4xMiwtMjIuMjI2NiAwLC0xMS40NDUzIC01LjU4LC0xOS41MTE3IC0xNi41MSwtMjMuOTI1OCBsIDIxLjMzLC0zNy4wNTA3NiBoIC0xNS44NyBsIC0xOS42MywzNC44NDM3NiBoIC0xMy4zOSBWIDIuMjczNDQgaCAtMTMuMzkgViA4OC45NzI3IGggMTguNiIvPjxwYXRoIGlkPSJwYXRoOTQiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjU1OC4yNyw3My4xMTMzIC0xMi4yMiwtMzguOTg0NCBoIDI0LjU3IHogbSA2LjUsMTYuMTMyOCAyOS42NCwtODYuOTcyNjYgaCAtMTMuOSBsIC02LjM4LDIwLjI3MzQ2IGggLTMxLjU5IGwgLTYuNSwtMjAuMjczNDYgaCAtMTMuNzggbCAyOS41Miw4Ni45NzI2NiBoIDEyLjk5Ii8+PHBhdGggaWQ9InBhdGg5NiIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0iTSAyNjQ5LjUzLDg4Ljk3MjcgViA3Ny40MTAyIGggLTIyLjg4IFYgMi4yNzM0NCBoIC0xMy40IFYgNzcuNDEwMiBoIC0yMi42MiB2IDExLjU2MjUgaCA1OC45Ii8+PHBhdGggaWQ9InBhdGg5OCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0iTSAyNjYyLjEzLDIuMjczNDQgViA4OC45NzI3IGggMTMuNTEgViAyLjI3MzQ0IGggLTEzLjUxIi8+PHBhdGggaWQ9InBhdGgxMDAiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMjcwNi4wNyw0Ni4wODIgYyAwLC0yMC45Mzc1IDguOTgsLTMzLjgwODYgMjMuNCwtMzMuODA4NiA2Ljc3LDAgMTIuNzUsMi45ODgzIDE2LjUyLDguMzIwNCA0LjQyLDYuNTAzOSA2Ljc1LDE1LjIxNDggNi43NSwyNS4wOTc2IDAsMjAuMTU2MyAtOS4yMywzMy4yODEzIC0yMy40LDMzLjI4MTMgLTE0LjA0LDAgLTIzLjI3LC0xMy4wMDc5IC0yMy4yNywtMzIuODkwNyB6IG0gNjAuNzIsLTAuMzkwNiBjIDAsLTI2Ljc3NzMgLTE1LjA4LC00NC45ODA0NjIgLTM3LjMyLC00NC45ODA0NjIgLTIyLjc0LDAgLTM3LjQ0LDE3LjkyOTY2MiAtMzcuNDQsNDUuNjI0OTYyIDAsMjYuMTMyOSAxNS4yMSw0NC4xOTkzIDM3LjMxLDQ0LjE5OTMgMjIuMzcsMCAzNy40NSwtMTguMDY2NCAzNy40NSwtNDQuODQzOCIvPjxwYXRoIGlkPSJwYXRoMTAyIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDI3OTcuNDcsODguOTcyNyAzOC4wOSwtNjYuMjg5MSB2IDY2LjI4OTEgaCAxMi43NCBWIDIuMjczNDQgaCAtMTMuOTIgbCAtMzguNiw2Ni4xNzE4NiBWIDIuMjczNDQgaCAtMTIuNzQgViA4OC45NzI3IGggMTQuNDMiLz48cGF0aCBpZD0icGF0aDEwNCIgc3R5bGU9ImZpbGw6IzEyNWE5ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyOTE0LjczLDg4Ljk3MjcgdiAtNTAuMjkzIGMgMCwtMTAuODAwOCAwLjM5LC0xMy45MjU4IDIuMzMsLTE3LjY5NTMgMi43MywtNS40NDkyIDguODQsLTguNTc0MiAxNi45LC04LjU3NDIgOS4zNiwwIDE1Ljc0LDQuMDIzNCAxOC4wNywxMS40NDUzIDAuOTIsMi45ODgzIDEuMTcsNS45NzY1IDEuMTcsMTQuODI0MiB2IDUwLjI5MyBoIDEzLjM5IFYgMzguNDA2MyBjIDAsLTEyLjg3MTEgLTAuNTIsLTE2LjY0MDcgLTIuNzIsLTIxLjU4MjEgLTQuNjksLTEwLjEzNjcgLTE1LjYxLC0xNi4xMTMyNjIgLTI5LjkxLC0xNi4xMTMyNjIgLTE0LjE3LDAgLTI1LjIyLDUuOTc2NTYyIC0yOS45LDE2LjExMzI2MiAtMi4yMSw1LjA3ODEgLTIuNzMsOC43MTEgLTIuNzMsMjEuNTgyMSB2IDUwLjU2NjQgaCAxMy40Ii8+PHBhdGggaWQ9InBhdGgxMDYiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMzAwMS40Myw4OC45NzI3IDM4LjA5LC02Ni4yODkxIHYgNjYuMjg5MSBoIDEyLjc0IFYgMi4yNzM0NCBoIC0xMy45MSBMIDI5OTkuNzQsNjguNDQ1MyBWIDIuMjczNDQgSCAyOTg3IFYgODguOTcyNyBoIDE0LjQzIi8+PHBhdGggaWQ9InBhdGgxMDgiIHN0eWxlPSJmaWxsOiMxMjVhOWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Ik0gMzA3My43MSwyLjI3MzQ0IFYgODguOTcyNyBoIDEzLjUyIFYgMi4yNzM0NCBoIC0xMy41MiIvPjxwYXRoIGlkPSJwYXRoMTEwIiBzdHlsZT0iZmlsbDojMTI1YTllO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJNIDMxNTguOTgsODguOTcyNyBWIDc3LjQxMDIgSCAzMTM2LjEgViAyLjI3MzQ0IGggLTEzLjQgViA3Ny40MTAyIGggLTIyLjYxIHYgMTEuNTYyNSBoIDU4Ljg5Ii8+PC9nPjwvZz48L3N2Zz4=" preserveAspectRatio="none" clip-path="url(#mx-clippath-inset-0-44-33-0-0-1)"/></g></svg>
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index a83edc84..7afecfda 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,34 +1,15 @@
-default_stages: [push]
-fail_fast: true
+fail_fast: false
 repos:
-  - repo: local
-    hooks:
-      - id: pytest-check
-        name: pytest-check
-        entry: pytest
-        language: system
-        pass_filenames: false
-        always_run: true
-  - repo: https://github.com/asottile/seed-isort-config
-    rev: v1.9.3
-    hooks:
-    - id: seed-isort-config
-  - repo: https://github.com/pycqa/isort
-    rev: 5.10.1
-    hooks:
-      - id: isort
-        name: isort (python)
-        args: ["--profile", "black"]
-  - repo: https://github.com/psf/black
-    rev: 22.6.0
-    hooks:
-    - id: black
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v2.0.0
-    hooks:
-    - id: trailing-whitespace
-    - id: end-of-file-fixer
-    - id: check-yaml
-    - id: check-added-large-files
-    - id: flake8
-      args: ["--ignore=E203,E501,W503"]
+    rev: v4.5.0
+    hooks:
+      - id: trailing-whitespace
+      - id: end-of-file-fixer
+      - id: check-yaml
+      - id: check-added-large-files
+  - repo: https://github.com/astral-sh/ruff-pre-commit
+    rev: v0.2.1
+    hooks:
+      - id: ruff
+        args: [ --fix ]
+      - id: ruff-format
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4b53b112..1a57c23d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,7 +1,7 @@
 # Contributing to Propulate
 
-Welcome to ``Propulate``! We're thrilled that you're interested in contributing to our open-source project. 
-By participating, you can help improve the project and make it even better. 
+Welcome to ``Propulate``! We're thrilled that you're interested in contributing to our open-source project.
+By participating, you can help improve the project and make it even better.
 
 ## How to Contribute
 
@@ -17,13 +17,13 @@ By participating, you can help improve the project and make it even better.
    git checkout -b your-feature-name
    ```
 
-4. **Make Changes**: Make your desired changes to the codebase. Please stick to the following guidelines: 
+4. **Make Changes**: Make your desired changes to the codebase. Please stick to the following guidelines:
    * `Propulate` uses [*Black*](https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html) code style and so should you if you would like to contribute.
    * Please use type hints in all function definitions.
    * Please use American English for all comments and docstrings in the code.
-   * `Propulate` uses Sphinx autoapi to automatically create API reference documentation from docstrings in the code. 
+   * `Propulate` uses Sphinx autoapi to automatically create API reference documentation from docstrings in the code.
      Please use the [NumPy Docstring Standard](https://numpydoc.readthedocs.io/en/latest/format.html) for your docstrings:
-      
+
      ```python
      """
      Short Description
@@ -72,7 +72,7 @@ By participating, you can help improve the project and make it even better.
      ```
      When applicable, please make references to parent modules and classes using ```:class:`ParentClassName` ```
 as follows:
-   
+
      ```python
      """
      This is the docstring for MyClass.
@@ -97,26 +97,26 @@ as follows:
          """
          The docstring for the parent class.
          """
-    
+
      class MyClass(ParentClassName):
          """
          The docstring for MyClass.
-    
+
          Parameters
          ----------
          param2 : type
                   Description of param2.
-        
+
          Attributes
          ----------
          attr2 : type
                  Description of attr2.
          """
      ```
-     In the example above, ``` :class:`ParentClassName` ``` is used to create a reference to the parent class `ParentClassName`. 
+     In the example above, ``` :class:`ParentClassName` ``` is used to create a reference to the parent class `ParentClassName`.
      Sphinx autoapi will automatically generate links to the parent class documentation.
-   
-        
+
+
 5. **Commit Changes**: Commit your changes with a clear and concise commit message:
    ```bash
    git commit -m "Add your commit message here"
diff --git a/README.md b/README.md
index 00157bd2..4919c8b2 100644
--- a/README.md
+++ b/README.md
@@ -14,38 +14,38 @@
 [![Documentation Status](https://readthedocs.org/projects/propulate/badge/?version=latest)](https://propulate.readthedocs.io/en/latest/?badge=latest)
 ![](./coverage.svg)
 
-# **Click [here](https://www.scc.kit.edu/en/aboutus/16956.php) to watch our 3 min introduction video!** 
+# **Click [here](https://www.scc.kit.edu/en/aboutus/16956.php) to watch our 3 min introduction video!**
 
 ## What `Propulate` can do for you
 
-`Propulate` is an HPC-tailored software for solving optimization problems in parallel. It is openly accessible and easy 
-to use. Compared to a widely used competitor, `Propulate` is consistently faster - at least an order of magnitude for a 
+`Propulate` is an HPC-tailored software for solving optimization problems in parallel. It is openly accessible and easy
+to use. Compared to a widely used competitor, `Propulate` is consistently faster - at least an order of magnitude for a
 set of typical benchmarks - and in some cases even more accurate.
 
-Inspired by biology, `Propulate` borrows mechanisms from biological evolution, such as selection, recombination, and 
-mutation. Evolution begins with a population of solution candidates, each with randomly initialized genes. It is an 
-iterative "survival of the fittest" process where the population at each iteration can be viewed as a generation. For 
-each generation, the fitness of each candidate in the population is evaluated. The genes of the fittest candidates are 
+Inspired by biology, `Propulate` borrows mechanisms from biological evolution, such as selection, recombination, and
+mutation. Evolution begins with a population of solution candidates, each with randomly initialized genes. It is an
+iterative "survival of the fittest" process where the population at each iteration can be viewed as a generation. For
+each generation, the fitness of each candidate in the population is evaluated. The genes of the fittest candidates are
 incorporated in the next generation.
 
-Like in nature, `Propulate` does not wait for all compute units to finish the evaluation of the current generation. 
-Instead, the compute units communicate the currently available information and use that to breed the next candidate 
+Like in nature, `Propulate` does not wait for all compute units to finish the evaluation of the current generation.
+Instead, the compute units communicate the currently available information and use that to breed the next candidate
 immediately. This avoids waiting idly for other units and thus a load imbalance.
-Each unit is responsible for evaluating a single candidate. The result is a fitness level corresponding with that 
-candidate’s genes, allowing us to compare and rank all candidates. This information is sent to other compute units as 
+Each unit is responsible for evaluating a single candidate. The result is a fitness level corresponding with that
+candidate’s genes, allowing us to compare and rank all candidates. This information is sent to other compute units as
 soon as it becomes available.
-When a unit is finished evaluating a candidate and communicating the resulting fitness, it breeds the candidate for the 
-next generation using the fitness values of all candidates it evaluated and received from other units so far. 
+When a unit is finished evaluating a candidate and communicating the resulting fitness, it breeds the candidate for the
+next generation using the fitness values of all candidates it evaluated and received from other units so far.
 
-`Propulate` can be used for hyperparameter optimization and neural architecture search. 
-It was already successfully applied in several accepted scientific publications. Applications include grid load 
+`Propulate` can be used for hyperparameter optimization and neural architecture search.
+It was already successfully applied in several accepted scientific publications. Applications include grid load
 forecasting, remote sensing, and structural molecular biology.
 
 ## In more technical terms
 
-``Propulate`` is a massively parallel evolutionary hyperparameter optimizer based on the island model with asynchronous 
+``Propulate`` is a massively parallel evolutionary hyperparameter optimizer based on the island model with asynchronous
 propagation of populations and asynchronous migration.
-In contrast to classical GAs, ``Propulate`` maintains a continuous population of already evaluated individuals with a 
+In contrast to classical GAs, ``Propulate`` maintains a continuous population of already evaluated individuals with a
 softened notion of the typically strictly separated, discrete generations.
 Our contributions include:
 - A novel parallel genetic algorithm based on a fully asynchronized island model with independently processing workers.
@@ -53,40 +53,40 @@ Our contributions include:
 - Optimized use efficiency of parallel hardware by minimizing idle times in distributed computing environments.
 
 To be more efficient, the generations are less well separated than they usually are in evolutionary algorithms.
-New individuals are generated from a pool of currently active, already evaluated individuals that may be from any 
+New individuals are generated from a pool of currently active, already evaluated individuals that may be from any
 generation.
 Individuals may be removed from the breeding population based on different criteria.
 
-You can find the corresponding publication [here](https://doi.org/10.1007/978-3-031-32041-5_6):  
-> Taubert, O. *et al.* (2023). Massively Parallel Genetic Optimization Through Asynchronous Propagation of Populations. 
-> In: Bhatele, A., Hammond, J., Baboulin, M., Kruse, C. (eds) High Performance Computing. ISC High Performance 2023. 
-> Lecture Notes in Computer Science, vol 13948. Springer, Cham. 
+You can find the corresponding publication [here](https://doi.org/10.1007/978-3-031-32041-5_6):
+> Taubert, O. *et al.* (2023). Massively Parallel Genetic Optimization Through Asynchronous Propagation of Populations.
+> In: Bhatele, A., Hammond, J., Baboulin, M., Kruse, C. (eds) High Performance Computing. ISC High Performance 2023.
+> Lecture Notes in Computer Science, vol 13948. Springer, Cham.
 > [doi.org/10.1007/978-3-031-32041-5_6](https://doi.org/10.1007/978-3-031-32041-5_6)
 
 ## Documentation
 
-Check out the full documentation at [https://propulate.readthedocs.io/](https://propulate.readthedocs.io/) :rocket:! Here you can find installation 
+Check out the full documentation at [https://propulate.readthedocs.io/](https://propulate.readthedocs.io/) :rocket:! Here you can find installation
 instructions, tutorials, theoretical background, and API references.
 
-**:point_right: If you have any questions or run into any challenges while using `Propulate`, don't hesitate to post an 
-[issue](https://github.com/Helmholtz-AI-Energy/propulate/issues) :bookmark:, reach out via [GitHub 
-discussions](https://github.com/Helmholtz-AI-Energy/propulate/discussions) :octocat:, or contact us directly via e-mail 
-:email: to [propulate@lists.kit.edu](mailto:propulate@lists.kit.edu).** 
+**:point_right: If you have any questions or run into any challenges while using `Propulate`, don't hesitate to post an
+[issue](https://github.com/Helmholtz-AI-Energy/propulate/issues) :bookmark:, reach out via [GitHub
+discussions](https://github.com/Helmholtz-AI-Energy/propulate/discussions) :octocat:, or contact us directly via e-mail
+:email: to [propulate@lists.kit.edu](mailto:propulate@lists.kit.edu).**
 
 ## Installation
 
-You can install the latest stable release from PyPI: ``pip install propulate``  
+You can install the latest stable release from PyPI: ``pip install propulate``
 If you need the latest updates, you can also install ``Propulate`` directly from the master branch at you own risk.
-Pull and run ``pip install -e .`` or ``python setup.py develop``.  
-``Propulate`` depends on [``mpi4py``](https://mpi4py.readthedocs.io/en/stable/) and requires an MPI implementation under 
+Pull and run ``pip install -e .`` or ``python setup.py develop``.
+``Propulate`` depends on [``mpi4py``](https://mpi4py.readthedocs.io/en/stable/) and requires an MPI implementation under
 the hood. Currently, it is only tested with [OpenMPI](https://www.open-mpi.org/).
 
 ## Quickstart
-*Below, you can find a quick recipe for how to use `Propulate` in general. Check out the official 
-[ReadTheDocs](https://propulate.readthedocs.io/en/latest/tut_propulator.html) documentation for more detailed tutorials 
+*Below, you can find a quick recipe for how to use `Propulate` in general. Check out the official
+[ReadTheDocs](https://propulate.readthedocs.io/en/latest/tut_propulator.html) documentation for more detailed tutorials
 and explanations.*
 
-Let's minimize the sphere function $f_\text{sphere}\left(x,y\right)=x^2 +y^2$ with `Propulate` as a quick example. The 
+Let's minimize the sphere function $f_\text{sphere}\left(x,y\right)=x^2 +y^2$ with `Propulate` as a quick example. The
 minimum is at $\left(x, y\right)=\left(0,0\right)$ at the orange star.
 ![](./docs/images/sphere.png)
 First, we need to define the key ingredients that define our optimization problem:
@@ -95,7 +95,7 @@ First, we need to define the key ingredients that define our optimization proble
     - A tuple of `float` for a continuous parameter, e.g., `{"learning_rate": (0.0001, 0.01)}`
     - A tuple of `int` for an ordinal parameter, e.g., `{"conv_layers": (2, 10)}`
     - A tuple of `str` for a categorical parameter, e.g., `{"activation": ("relu", "sigmoid", "tanh")}`
-  
+
   Thus, an exemplary search space might look like this:
   ```python
   search_space = {
@@ -105,19 +105,19 @@ First, we need to define the key ingredients that define our optimization proble
   }
   ```
 
-  The sphere function has two continuous parameters, $x$ and $y$, and we consider $x,y\in\left[-5.12,5.12\right]$. The 
+  The sphere function has two continuous parameters, $x$ and $y$, and we consider $x,y\in\left[-5.12,5.12\right]$. The
   search space in our example thus looks like this:
   ```python
   limits = {
       "x": (-5.12, 5.12),
       "y": (-5.12, 5.12)
-  } 
+  }
   ```
-- The **loss function**. This is the function we want to minimize in order to find the best parameters. It can be any 
+- The **loss function**. This is the function we want to minimize in order to find the best parameters. It can be any
   `Python` function that
   - takes a set of parameters as a `Python` dictionary as an input.
   - returns a scalar loss value that determines how good the tested parameter set is.
-  
+
   In this example, the loss function whose minimum we want to find is the sphere function:
   ```python
   def sphere(params: Dict[str, float]) -> float:
@@ -131,7 +131,7 @@ First, we need to define the key ingredients that define our optimization proble
     ----------
     params: Dict[str, float]
         The function parameters.
-  
+
     Returns
     -------
     float
@@ -139,7 +139,7 @@ First, we need to define the key ingredients that define our optimization proble
     """
     return numpy.sum(numpy.array(list(params.values())) ** 2).item()
   ```
-Next, we need to define the **evolutionary operator** or propagator that we want to use to breed new individuals during the 
+Next, we need to define the **evolutionary operator** or propagator that we want to use to breed new individuals during the
 optimization process. `Propulate` provides a reasonable default propagator via a utility function:
 ```python
 # Set up logger for Propulate optimization.
@@ -166,7 +166,7 @@ propulator = propulate.Propulator(
     checkpoint_path=config.checkpoint,
 )
 ```
-Now we can run the actual optimization. Overall, ``generations * mpi4py.MPI.COMM_WORLD.size`` evaluations will be 
+Now we can run the actual optimization. Overall, ``generations * mpi4py.MPI.COMM_WORLD.size`` evaluations will be
 performed:
 ```python
 # Run optimization and print summary of results.
@@ -219,9 +219,3 @@ Do the following to run the [example script](https://github.com/Helmholtz-AI-Ene
 ## Acknowledgments
 *This work is supported by the Helmholtz AI platform grant.*
 ![](./.figs/hai_kit_logos.svg)
-
-
-
-
-
-
diff --git a/RELEASE.md b/RELEASE.md
index 2e461c05..1f961e7a 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -5,4 +5,4 @@ The current workflow for releasing a new version of `Propulate` is as follows:
 2. On the master branch, update the version number in `setup.cfg`. We use semantic versioning.
 3. Rebase release branch onto current master branch.
 4. Make Github release from current master, including corresponding version tag.
-5. Push release branch. This will trigger a Github action publishing the new release on PyPI.
\ No newline at end of file
+5. Push release branch. This will trigger a Github action publishing the new release on PyPI.
diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css
index 82a5c4b4..b2a4b4ad 100644
--- a/docs/_static/css/custom.css
+++ b/docs/_static/css/custom.css
@@ -7493,4 +7493,4 @@ span[id*='MathJax-Span'] {
  */
 .rst-content dl.field-list > dd {margin-top: 5px !important; margin-bottom: 4px !important}
 .rst-content dl.field-list > dt {margin-top: 5px !important; margin-bottom: 4px !important}
-.rst-content dl dd > p:last-child {margin-top: 4px !important}
\ No newline at end of file
+.rst-content dl dd > p:last-child {margin-top: 4px !important}
diff --git a/docs/algos_explained.rst b/docs/algos_explained.rst
index 7058d163..6d39181b 100644
--- a/docs/algos_explained.rst
+++ b/docs/algos_explained.rst
@@ -28,4 +28,4 @@ in ``Propulate``.
    overview_pop
    eas
    pso
-   cmaes
\ No newline at end of file
+   cmaes
diff --git a/docs/cmaes.rst b/docs/cmaes.rst
index b6644c52..5966a70a 100644
--- a/docs/cmaes.rst
+++ b/docs/cmaes.rst
@@ -4,4 +4,4 @@ Covariance Matrix Adaption Evolution Strategy
 =============================================
 
 .. note::
-   The documentation for Covariance Matrix Adaption Evolution Strategy (CMA-ES) will be available soon.
\ No newline at end of file
+   The documentation for Covariance Matrix Adaption Evolution Strategy (CMA-ES) will be available soon.
diff --git a/docs/eas.rst b/docs/eas.rst
index faaeecf8..b6a00441 100644
--- a/docs/eas.rst
+++ b/docs/eas.rst
@@ -68,4 +68,4 @@ Mutation
    :width: 76 %
    :align: center
 
-|
\ No newline at end of file
+|
diff --git a/docs/install.rst b/docs/install.rst
index fe97aba8..e3e40478 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -30,7 +30,7 @@ with ``pip`` or via ``setup.py``:
 
     $ git clone https://github.com/Helmholtz-AI-Energy/propulate
     $ pip install -e .
-   
+
 Alternatively:
 
 .. code-block:: console
diff --git a/docs/island_model.rst b/docs/island_model.rst
index 73fcbc73..e919bbec 100644
--- a/docs/island_model.rst
+++ b/docs/island_model.rst
@@ -41,4 +41,4 @@ from island 2.
    :width: 100 %
    :align: center
 
-|
\ No newline at end of file
+|
diff --git a/docs/overview_pop.rst b/docs/overview_pop.rst
index 7b5de319..518d8f0f 100644
--- a/docs/overview_pop.rst
+++ b/docs/overview_pop.rst
@@ -51,4 +51,4 @@ Cuckoo Search (CS)
     Cuckoo search simulates the behavior of cuckoo birds' reproduction strategy. Each solution corresponds to a cuckoo
     egg, and each nest represents a potential solution. Cuckoos lay eggs in nests, and the nests with better eggs
     (solutions) survive and reproduce. The algorithm involves creating new solutions by combining existing ones and
-    occasionally replacing solutions to maintain diversity.
\ No newline at end of file
+    occasionally replacing solutions to maintain diversity.
diff --git a/docs/parallel_pop.rst b/docs/parallel_pop.rst
index 724dbbe5..a3520f60 100644
--- a/docs/parallel_pop.rst
+++ b/docs/parallel_pop.rst
@@ -56,4 +56,4 @@ Worker 2 receives light the blue :math:`\small\mathrm{ind}_{g3}` only after fini
    :width: 100 %
    :align: center
 
-|
\ No newline at end of file
+|
diff --git a/docs/pop.rst b/docs/pop.rst
index d9fe7c6a..c3ee9fb2 100644
--- a/docs/pop.rst
+++ b/docs/pop.rst
@@ -32,4 +32,4 @@ HOW?
 .. warning::
 
    As with all metaheuristics, these algorithms have hyperparameters themselves and their effectiveness strongly depends
-   on choosing proper hyperparameters and problem-specific considerations.
\ No newline at end of file
+   on choosing proper hyperparameters and problem-specific considerations.
diff --git a/docs/pso.rst b/docs/pso.rst
index c393557c..05ba149d 100644
--- a/docs/pso.rst
+++ b/docs/pso.rst
@@ -4,4 +4,4 @@ Particle Swarm Optimization
 ===========================
 
 .. note::
-   The documentation for particle swarm optimization (PSO) will be available soon.
\ No newline at end of file
+   The documentation for particle swarm optimization (PSO) will be available soon.
diff --git a/docs/quickstart.rst b/docs/quickstart.rst
index 2795f526..dbec9ced 100644
--- a/docs/quickstart.rst
+++ b/docs/quickstart.rst
@@ -66,4 +66,4 @@ documentation |:raised_hands:|.
 
 
 .. Links
-.. _subfolder: https://github.com/Helmholtz-AI-Energy/propulate/tree/master/tutorials
\ No newline at end of file
+.. _subfolder: https://github.com/Helmholtz-AI-Energy/propulate/tree/master/tutorials
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 7fbf53e4..802fef4f 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,4 +1,4 @@
 sphinx-autoapi==3.0.0
 sphinx-rtd-theme==1.2.0
 sphinxcontrib-napoleon
-sphinxemoji
\ No newline at end of file
+sphinxemoji
diff --git a/docs/tut_islands.rst b/docs/tut_islands.rst
index 02a7c6ed..14d8a507 100644
--- a/docs/tut_islands.rst
+++ b/docs/tut_islands.rst
@@ -145,4 +145,3 @@ With ten MPI ranks and two islands with five workers each, the output looks like
 
     [2024-03-13 12:30:46,611][propulate.propulator][INFO] - Top 1 result(s) on island 0:
     (1): [{'a': '-2.83E-4', 'b': '1.04E-3'}, loss 1.16E-6, island 0, worker 3, generation 901]
-
diff --git a/docs/tut_multi_rank_worker.rst b/docs/tut_multi_rank_worker.rst
index 2db2fabc..0f2d9a3f 100644
--- a/docs/tut_multi_rank_worker.rst
+++ b/docs/tut_multi_rank_worker.rst
@@ -11,4 +11,4 @@ In addition to the already explained functionality, ``Propulate`` enables using
 parallelized evaluation of the loss function. This is useful for, e.g., data-parallel training of neural networks during
 the hyperparameter optimization, where each individual network is trained on multiple GPUs.
 
-A more detailed explanation of the tutorial will be available soon |:rocket:|.
\ No newline at end of file
+A more detailed explanation of the tutorial will be available soon |:rocket:|.
diff --git a/docs/tut_propulator.rst b/docs/tut_propulator.rst
index d7e1d0fb..4cd705a8 100644
--- a/docs/tut_propulator.rst
+++ b/docs/tut_propulator.rst
@@ -88,7 +88,7 @@ As the very first step, we need to define the key ingredients that define the op
         ----------
         params: Dict[str, float]
             The function parameters.
-            
+
         Returns
         -------
         float
@@ -223,4 +223,4 @@ will use your current working directory.
 .. warning::
     If you start an optimization run from existing checkpoints, those checkpoints must be compatible with your current
     parallel computing environment. This means that if you use a checkpoint created in a setting with 20 processing
-    elements in a different computing environment with, e.g., 10 processing elements, the behaviour is undefined.
\ No newline at end of file
+    elements in a different computing environment with, e.g., 10 processing elements, the behaviour is undefined.
diff --git a/docs/usage.rst b/docs/usage.rst
index 876b4b6c..d61cfda9 100644
--- a/docs/usage.rst
+++ b/docs/usage.rst
@@ -15,4 +15,4 @@ If you want to use ``Propulate`` for your own applications, you can use these sc
    tut_multi_rank_worker
 
 .. Links
-.. _Github: https://github.com/Helmholtz-AI-Energy/propulate
\ No newline at end of file
+.. _Github: https://github.com/Helmholtz-AI-Energy/propulate
diff --git a/propulate/__init__.py b/propulate/__init__.py
index 68384b3a..172eef6e 100644
--- a/propulate/__init__.py
+++ b/propulate/__init__.py
@@ -10,16 +10,15 @@
 finally:
     del get_distribution, DistributionNotFound
 
+from . import propagators
 from .islands import Islands
-from .population import Individual, Particle
-from .propulator import Propulator
 from .migrator import Migrator
 from .pollinator import Pollinator
+from .population import Individual, Particle
+from .propulator import Propulator
 from .surrogate import Surrogate
 from .utils import get_default_propagator, set_logger_config
 
-from . import propagators
-
 __all__ = [
     "Islands",
     "Individual",
diff --git a/propulate/islands.py b/propulate/islands.py
index 4207c170..d6a846f1 100644
--- a/propulate/islands.py
+++ b/propulate/islands.py
@@ -10,7 +10,7 @@
 from .migrator import Migrator
 from .pollinator import Pollinator
 from .population import Individual
-from .propagators import Propagator, SelectMin, SelectMax
+from .propagators import Propagator, SelectMax, SelectMin
 from .surrogate import Surrogate
 
 log = logging.getLogger(__name__)  # Get logger instance.
diff --git a/propulate/migrator.py b/propulate/migrator.py
index 17c7edf4..313230c5 100644
--- a/propulate/migrator.py
+++ b/propulate/migrator.py
@@ -1,17 +1,16 @@
 import copy
-import random
 import logging
+import random
 from pathlib import Path
 from typing import Callable, Generator, Optional, Type, Union
 
 import numpy as np
 from mpi4py import MPI
 
+from ._globals import MIGRATION_TAG, SYNCHRONIZATION_TAG
 from .propagators import Propagator, SelectMin
 from .propulator import Propulator
 from .surrogate import Surrogate
-from ._globals import MIGRATION_TAG, SYNCHRONIZATION_TAG
-
 
 log = logging.getLogger(__name__)
 
diff --git a/propulate/pollinator.py b/propulate/pollinator.py
index 99ec8e55..89b05b87 100644
--- a/propulate/pollinator.py
+++ b/propulate/pollinator.py
@@ -10,7 +10,7 @@
 
 from ._globals import MIGRATION_TAG, SYNCHRONIZATION_TAG
 from .population import Individual
-from .propagators import Propagator, SelectMin, SelectMax
+from .propagators import Propagator, SelectMax, SelectMin
 from .propulator import Propulator
 from .surrogate import Surrogate
 
diff --git a/propulate/population.py b/propulate/population.py
index 8100c893..253a70dd 100644
--- a/propulate/population.py
+++ b/propulate/population.py
@@ -4,9 +4,7 @@
 
 
 class Individual(dict):
-    """
-    An individual represents a candidate solution to the considered optimization problem.
-    """
+    """An individual represents a candidate solution to the considered optimization problem."""
 
     def __init__(self, generation: int = -1, rank: int = -1) -> None:
         """
@@ -14,10 +12,10 @@ def __init__(self, generation: int = -1, rank: int = -1) -> None:
 
         Parameters
         ----------
-        generation: int
-            current generation (-1 if unset)
-        rank: int
-            rank (-1 if unset)
+        generation : int
+            The current generation (-1 if unset).
+        rank : int
+            The rank (-1 if unset).
         """
         super(Individual, self).__init__(list())
         self.generation = generation  # Equals each worker's iteration for continuous population in Propulate.
@@ -32,9 +30,7 @@ def __init__(self, generation: int = -1, rank: int = -1) -> None:
         self.evalperiod = None  # evaluation duration
 
     def __repr__(self) -> str:
-        """
-        String representation of an ``Individual`` instance.
-        """
+        """Return string representation of an ``Individual`` instance."""
         rep = {
             key: (
                 f"{Decimal(self[key]):.2E}"
@@ -139,13 +135,12 @@ def equals(self, other) -> bool:
 
 class Particle(Individual):
     """
-    Child class of ``Individual`` with additional properties required for PSO, i.e., an array-type velocity field and
-    a (redundant) array-type position field.
-
-    Note that Propulate relies on ``Individual``s being dictionaries.
+    Child class of ``Individual`` with additional properties required for PSO.
 
-    When defining new propagators, users of the ``Particle`` class thus need to ensure that a ``Particle``'s position
-    always matches its dict contents and vice versa.
+    Particles additionally feature an array-type velocity field and a (redundant) array-type position field.
+    Note that Propulate relies on individuals being dictionaries. When defining new propagators, users of the
+    ``Particle`` class thus need to ensure that a ``Particle``'s position always matches its dict contents and vice
+    versa.
 
     This class also contains an attribute field called ``global_rank``. It contains the global rank of the propagator
     that created it. This is for purposes of better (or at all) retrieval in multi swarm case.
diff --git a/propulate/propagators/__init__.py b/propulate/propagators/__init__.py
index 1293e952..f6c81b14 100644
--- a/propulate/propagators/__init__.py
+++ b/propulate/propagators/__init__.py
@@ -1,39 +1,36 @@
 """This package bundles all classes that are used as propagators in Propulate's optimization routine."""
 
 from .base import (
-    Propagator,
-    Stochastic,
-    Conditional,
     Compose,
-    SelectMin,
+    Conditional,
+    InitUniform,
+    Propagator,
     SelectMax,
+    SelectMin,
     SelectUniform,
-    InitUniform,
+    Stochastic,
+)
+from .cmaes import (
+    ActiveCMA,
+    BasicCMA,
+    CMAAdapter,
+    CMAParameter,
+    CMAPropagator,
 )
-
 from .ga import (
-    PointMutation,
-    RandomPointMutation,
-    IntervalMutationNormal,
-    CrossoverUniform,
     CrossoverMultiple,
     CrossoverSigmoid,
+    CrossoverUniform,
+    IntervalMutationNormal,
+    PointMutation,
+    RandomPointMutation,
 )
-
 from .pso import (
     BasicPSO,
-    VelocityClampingPSO,
-    ConstrictionPSO,
     CanonicalPSO,
+    ConstrictionPSO,
     StatelessPSO,
-)
-
-from .cmaes import (
-    CMAAdapter,
-    CMAParameter,
-    CMAPropagator,
-    BasicCMA,
-    ActiveCMA,
+    VelocityClampingPSO,
 )
 
 __all__ = [
diff --git a/propulate/propagators/base.py b/propulate/propagators/base.py
index a5402731..7f711dd8 100644
--- a/propulate/propagators/base.py
+++ b/propulate/propagators/base.py
@@ -1,5 +1,5 @@
 import random
-from typing import List, Dict, Optional, Tuple, Union
+from typing import Dict, List, Optional, Tuple, Union
 
 from ..population import Individual
 
diff --git a/propulate/propagators/cmaes.py b/propulate/propagators/cmaes.py
index c3107202..cd0b5d0c 100644
--- a/propulate/propagators/cmaes.py
+++ b/propulate/propagators/cmaes.py
@@ -1,10 +1,10 @@
 import random
-from typing import List, Dict, Optional, Tuple
+from typing import Dict, List, Optional, Tuple
 
 import numpy as np
 
-from .base import Propagator, SelectMax, SelectMin, SelectUniform
 from ..population import Individual
+from .base import Propagator, SelectMax, SelectMin, SelectUniform
 
 
 class CMAParameter:
@@ -268,8 +268,7 @@ def _decompose_co_matrix(self, new_co_matrix: np.ndarray) -> None:
 
     def _limit_condition(self, limit: float) -> None:
         """
-        Limit the condition (square of ratio largest to smallest eigenvalue) of the covariance matrix if it exceeds a
-        threshold.
+        Limit the condition (squared ratio largest / smallest eigenvalue) of the cov. matrix if it exceeds a threshold.
 
         Credits on how to limit the condition: https://github.com/CMA-ES/pycma/blob/development/cma/sampler.py
 
@@ -795,14 +794,14 @@ def __init__(
 
     def __call__(self, inds: List[Individual]) -> Individual:
         """
-        The skeleton of the CMA-ES algorithm using the template method design pattern.
+        Define the skeleton of the CMA-ES algorithm using the template method design pattern.
 
         Sampling individuals and adapting the strategy parameters. Template methods are ``update_mean``,
         ``update_covariance_matrix``, and ``update_step_size``.
 
         Parameters
         ----------
-        inds: List[propulate.Individual]
+        inds : List[propulate.Individual]
             Available individuals.
 
         Returns
diff --git a/propulate/propagators/ga.py b/propulate/propagators/ga.py
index 4f136142..a67949ab 100644
--- a/propulate/propagators/ga.py
+++ b/propulate/propagators/ga.py
@@ -4,8 +4,8 @@
 
 import numpy as np
 
-from .base import Stochastic
 from ..population import Individual
+from .base import Stochastic
 
 
 class PointMutation(Stochastic):
@@ -310,8 +310,8 @@ def __call__(self, ind: Individual) -> Individual:
             for i in to_mutate:
                 min_val, max_val = self.limits[i]  # Determine interval boundaries.
                 sigma = (
-                    max_val - min_val
-                ) * self.sigma_factor  # Determine std from interval boundaries and sigma factor.
+                    (max_val - min_val) * self.sigma_factor
+                )  # Determine std from interval boundaries and sigma factor.
                 ind[i] = self.rng.gauss(
                     ind[i], sigma
                 )  # Sample new value from Gaussian centered around current value.
diff --git a/propulate/propagators/pso.py b/propulate/propagators/pso.py
index 8fe1999f..cc54bc9f 100644
--- a/propulate/propagators/pso.py
+++ b/propulate/propagators/pso.py
@@ -1,11 +1,11 @@
 import logging
 from random import Random
-from typing import Dict, Tuple, Union, List
+from typing import Dict, List, Tuple, Union
 
 import numpy as np
 
+from ..population import Individual, Particle
 from ..propagators import Propagator, Stochastic
-from ..population import Particle, Individual
 from ..utils import make_particle
 
 
@@ -126,6 +126,8 @@ def _prepare_data(
         self, individuals: List[Individual]
     ) -> Tuple[Particle, Particle, Particle]:
         """
+        Get the particle to be updated on this rank, its current personal best, and the swarm's current global best.
+
         Given a list of ``Individual`` or ``Particle`` objects, determine the particle to be updated on this rank, its
         current personal best, and the currently known global best of the swarm to perform a particle update step.
 
@@ -598,12 +600,10 @@ def __call__(self, individuals: List[Individual]) -> Particle:
 
 class StatelessPSO(Propagator):
     """
-    This propagator performs PSO without the need of Particles, but as a consequence, also without velocity.
-    Thus, it is called stateless.
-
-    As this propagator works without velocity, there is also no inertia weight used.
+    The stateless propagator performs PSO without the need of Particles, but as a consequence, also without velocity.
 
-    It uses only classes provided by vanilla Propulate.
+    As this propagator works without velocity, there is also no inertia weight used. It uses only classes provided by
+    vanilla Propulate.
 
     Attributes
     ----------
diff --git a/propulate/propulator.py b/propulate/propulator.py
index e73fa765..d0ffad8d 100644
--- a/propulate/propulator.py
+++ b/propulate/propulator.py
@@ -1,10 +1,10 @@
 import copy
+import inspect
 import logging
 import os
 import pickle
 import random
 import time
-import inspect
 from operator import attrgetter
 from pathlib import Path
 from typing import Callable, Final, Generator, List, Optional, Tuple, Type, Union
diff --git a/propulate/surrogate.py b/propulate/surrogate.py
index 29ea4edd..3854db04 100644
--- a/propulate/surrogate.py
+++ b/propulate/surrogate.py
@@ -1,5 +1,5 @@
-from typing import TypeVar, Generic
 from abc import ABC, abstractmethod
+from typing import Generic, TypeVar
 
 from propulate.population import Individual
 
@@ -36,13 +36,11 @@ def __init__(self) -> None:
     @abstractmethod
     def start_run(self, ind: Individual) -> None:
         """
-        Signals that a new run is about to start.
-        This is called before the first yield from the ``loss_fn``.
-        It is assumed that the individual is freshly created.
-        Keep in mind that there might be (private) keys
-        that are not related to limits, like the surrogate key '_s';
-        key names related to limits could be provided to
-        the Surrogate constructor if necessary.
+        Signal that a new run is about to start.
+
+        This is called before the first yield from the ``loss_fn``. It is assumed that the individual is freshly
+        created. Keep in mind that there might be (private) keys that are not related to limits, like the surrogate key
+        ``_s``; key names related to limits could be provided to the ``Surrogate`` constructor if necessary.
 
         Parameters
         ----------
@@ -55,6 +53,7 @@ def start_run(self, ind: Individual) -> None:
     def update(self, loss: float) -> None:
         """
         Update the surrogate model with the final loss.
+
         Indicative that the current run has finished.
 
         Parameters
@@ -68,6 +67,7 @@ def update(self, loss: float) -> None:
     def cancel(self, loss: float) -> bool:
         """
         Evaluate surrogate to check if the current run should be cancelled.
+
         This will be called after every yield from the ``loss_fn``.
 
         Parameters
@@ -86,34 +86,29 @@ def cancel(self, loss: float) -> bool:
     @abstractmethod
     def merge(self, data: T) -> None:
         """
-        Merges the results of another surrogate model into itself.
+        Merge the results of another surrogate model into itself.
+
         Used to synchronize surrogate models from different Propulators.
 
-        Implementation of merge has to be commutative!
-        Otherwise the different surrogate models will diverge.
+        Implementation of merge has to be commutative! Otherwise, the different surrogate models will diverge.
 
         Parameters
         ----------
         data : T
-            All relevant information to update its model
-            to the same state as the origin of the data.
+            All relevant information to update its model to the same state as the origin of the data.
         """
         pass
 
     @abstractmethod
     def data(self) -> T:
         """
-        Returns all relevant information about the surrogate model
-        for merging with another surrogate
+        Return all relevant information about the surrogate model for merging with another surrogate.
 
-        It most likely only needs to return the most recent loss
-        from ``update()``.
+        It most likely only needs to return the most recent loss from ``update()``.
 
         Returns
         -------
         T
-            All relevant information to convey the current state
-            of the surrogate model.
-
+            All relevant information to convey the current state of the surrogate model.
         """
         pass
diff --git a/propulate/utils.py b/propulate/utils.py
index 6efaa117..52b05436 100644
--- a/propulate/utils.py
+++ b/propulate/utils.py
@@ -3,7 +3,7 @@
 import random
 import sys
 from pathlib import Path
-from typing import Dict, Optional, Union, Tuple
+from typing import Dict, Optional, Tuple, Union
 
 import colorlog
 import numpy as np
@@ -13,9 +13,9 @@
 from .propagators import (
     Compose,
     Conditional,
+    CrossoverUniform,
     InitUniform,
     IntervalMutationNormal,
-    CrossoverUniform,
     PointMutation,
     Propagator,
     SelectMin,
@@ -164,7 +164,7 @@ def make_particle(individual: Individual) -> Particle:
         An individual to be converted to a particle.
 
     Returns
-    --------
+    -------
     propulate.Particle
         The converted individual.
     """
diff --git a/pyproject.toml b/pyproject.toml
index c8f9c4c0..37c2abab 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,7 +1,51 @@
-[tool.ruff]
-select = ["E", "F"]
-ignore = ["E501"]
+[build-system]
+requires = ["setuptools >= 61.0"]
+build-backend = "setuptools.build_meta"
+
+[tool.setuptools]
+packages = ["propulate"]
+
+[project]
+name = "propulate"
+version = "1.1.0"
+authors = [
+  { name="Marie Weiel, Oskar Taubert, Helmholtz AI", email="propulate@lists.kit.edu" },
+]
+description = "Massively parallel genetic optimization through asynchronous propagation of populations"
+readme = "README.md"
+requires-python = ">=3.8"
+classifiers = [
+    "Programming Language :: Python :: 3",
+    "License :: TBD",
+    "Development Status :: 1 - Planning",
+]
+dependencies = [
+	"deepdiff",
+	"mpi4py",
+	"numpy",
+    "colorlog",
+    "Gpy",
+]
 
+[project.optional-dependencies]
+dev = [
+    "pre-commit",
+    "black",
+    "ruff",
+    "pytest",
+    "pytest-cov",
+    "sphinx-autoapi",
+    "sphinx-rtd-theme",
+    "sphinxcontrib-napoleon",
+    "sphinxemoji",
+]
+
+[project.urls]
+Homepage = "https://github.com/Helmholtz-AI-Energy/propulate"
+Issues = "https://github.com/Helmholtz-AI-Energy/propulate/issues"
+
+[tool.ruff]
+# Exclude a variety of commonly ignored directories.
 exclude = [
     ".bzr",
     ".direnv",
@@ -9,21 +53,82 @@ exclude = [
     ".git",
     ".git-rewrite",
     ".hg",
+    ".ipynb_checkpoints",
     ".mypy_cache",
     ".nox",
     ".pants.d",
+    ".pyenv",
+    ".pytest_cache",
     ".pytype",
     ".ruff_cache",
     ".svn",
     ".tox",
     ".venv",
+    ".vscode",
     "__pypackages__",
     "_build",
     "buck-out",
     "build",
     "dist",
     "node_modules",
+    "site-packages",
     "venv",
 ]
 
+# Same as Black.
 line-length = 88
+indent-width = 4
+
+# Assume Python 3.8.
+target-version = "py38"
+
+[tool.ruff.lint]
+# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`)  codes by default.
+# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
+# McCabe complexity (`C901`) by default.
+select = ["N", "E4", "E7", "E9", "F", "D"]
+ignore = ["D100", "D104", "D404"]
+# Enable import sorting
+extend-select = ["I"]
+
+# Allow fix for all enabled rules (when `--fix`) is provided.
+fixable = ["ALL"]
+unfixable = []
+
+# Allow unused variables when underscore-prefixed.
+dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
+
+[tool.ruff.format]
+# Like Black, use double quotes for strings.
+quote-style = "double"
+
+# Like Black, indent with spaces, rather than tabs.
+indent-style = "space"
+
+# Like Black, respect magic trailing commas.
+skip-magic-trailing-comma = false
+
+# Like Black, automatically detect the appropriate line ending.
+line-ending = "auto"
+
+# Enable auto-formatting of code examples in docstrings. Markdown,
+# reStructuredText code/literal blocks and doctests are all supported.
+#
+# This is currently disabled by default, but it is planned for this
+# to be opt-out in the future.
+docstring-code-format = false
+
+# Set the line length limit used when formatting code snippets in
+# docstrings.
+#
+# This only has an effect when the `docstring-code-format` setting is
+# enabled.
+docstring-code-line-length = "dynamic"
+
+[tool.ruff.lint.pydocstyle]
+convention = "numpy"
+
+[tool.pytest.ini_options]
+testpaths = [
+    "tests",
+]
diff --git a/requirements.txt b/requirements.txt
index 5f683401..8bd0597e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,11 +1,5 @@
-cycler==0.11.0
 deepdiff>=5.8.0
-kiwisolver==1.4.2
 mpi4py==3.0.3
 numpy
-ordered-set==4.1.0
-pyparsing>=3.0.7
-python-dateutil==2.8.2
-six==1.16.0
 colorlog
-
+GPy
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 81863bae..00000000
--- a/setup.cfg
+++ /dev/null
@@ -1,115 +0,0 @@
-# This file is used to configure your project.
-# Read more about the various options under:
-# http://setuptools.readthedocs.io/en/latest/setuptools.html#configuring-setup-using-setup-cfg-files
-
-[metadata]
-name = propulate
-version = 1.1.0
-description = Massively parallel genetic optimization through asynchronous propagation of populations
-author = Oskar Taubert, Marie Weiel, Helmholtz AI
-author_email = oskar.taubert@kit.edu, marie.weiel@kit.edu
-license = "BSD 3-Clause"
-long_description = file: README.md
-long_description_content_type = text/markdown; charset=UTF-8
-# Change if running only on Windows, Mac or Linux (comma-separated)
-# Add here all kinds of additional classifiers as defined under
-# https://pypi.python.org/pypi?%3Aaction=list_classifiers
-classifiers =
-    Development Status :: 4 - Beta
-    Programming Language :: Python
-
-[options]
-zip_safe = False
-packages = find:
-include_package_data = True
-package_dir =
-    =.
-
-# Add dependencies of your project (semicolon/line-separated):
-install_requires =
-	cycler #==0.11.0
-	deepdiff #==5.8.0
-	kiwisolver #==1.4.2
-	mpi4py #==3.0.3
-	numpy #==1.22.3
-	ordered-set #==4.1.0
-	pyparsing #==3.0.7
-	python-dateutil #==2.8.2
-	six #==1.16.0
-    colorlog
-
-# The usage of test_requires is discouraged, see `Dependency Management` docs
-# tests_require = pytest; pytest-cov
-# Require a specific Python version, e.g. Python 2.7 or >= 3.4
-# python_requires = >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*
-
-[options.extras_require]
-testing =
-    pytest
-    pytest-cov
-
-[options.entry_points]
-# Add here console scripts like:
-# console_scripts =
-#     script_name = propulate.module:function
-# For example:
-# console_scripts =
-#     fibonacci = propulate.skeleton:run
-# And any other entry points, for example:
-# pyscaffold.cli =
-#     awesome = pyscaffoldext.awesome.extension:AwesomeExtension
-
-[test]
-# py.test options when running `python setup.py test`
-# addopts = --verbose
-extras = True
-
-[tool:pytest]
-# Options for py.test:
-# Specify command line options as you would do when invoking py.test directly.
-# e.g. --cov-report html (or xml) for html/xml output or --junitxml junit.xml
-# in order to write a coverage file that can be read by Jenkins.
-#norecursedirs =
-#    dist
-#    build
-#    .tox
-testpaths = tests
-
-[aliases]
-dists = bdist_wheel
-
-[bdist_wheel]
-# Use this option if your package is pure-python
-universal = 1
-
-# Automatically build docs from doc strings.
-[build_sphinx]
-source_dir = docs
-build_dir = build/sphinx
-
-[devpi:upload]
-# Options for the devpi: PyPI server and packaging tool
-# VCS export must be deactivated since we are using setuptools-scm
-no-vcs = 1
-formats = bdist_wheel
-
-[flake8]
-# Some sane defaults for the code style checker flake8
-exclude =
-    .tox
-    build
-    dist
-    .eggs
-    docs/conf.py
-max-line-length = 88
-extend-ignore = E203, E501
-
-[semantic_release]
-branch = "release"
-upload_to_pypi=true
-upload_to_release=true
-commit_message= "{version} [skip ci]"
-
-version_variable = "setup.cfg:version"
-
-build_command = "python -m build"
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 60cd2822..00000000
--- a/setup.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    Setup file for propulate.
-    Use setup.cfg to configure your project.
-"""
-import sys
-
-from pkg_resources import VersionConflict, require
-from setuptools import setup
-
-try:
-    require("setuptools>=38.3")
-except VersionConflict:
-    print("Error: version of setuptools is too old (<38.3)!")
-    sys.exit(1)
-
-
-if __name__ == "__main__":
-    setup()
diff --git a/tutorials/cmaes_example.py b/tutorials/cmaes_example.py
index aca7765f..02a1628b 100644
--- a/tutorials/cmaes_example.py
+++ b/tutorials/cmaes_example.py
@@ -1,14 +1,13 @@
-"""Simple example script using CMA-ES"""
-import random
+"""Simple example script using CMA-ES."""
 import pathlib
+import random
 
+from function_benchmark import get_function_search_space, parse_arguments
 from mpi4py import MPI
 
 from propulate import Propulator
-from propulate.propagators import BasicCMA, ActiveCMA, CMAPropagator
+from propulate.propagators import ActiveCMA, BasicCMA, CMAPropagator
 from propulate.utils import set_logger_config
-from function_benchmark import get_function_search_space, parse_arguments
-
 
 if __name__ == "__main__":
     comm = MPI.COMM_WORLD
diff --git a/tutorials/function_benchmark.py b/tutorials/function_benchmark.py
index 8a704d40..05d277b2 100644
--- a/tutorials/function_benchmark.py
+++ b/tutorials/function_benchmark.py
@@ -3,8 +3,8 @@
 import logging
 from typing import Callable, Dict, Tuple
 
-from mpi4py import MPI
 import numpy as np
+from mpi4py import MPI
 
 
 def rosenbrock(params: Dict[str, float]) -> float:
@@ -83,7 +83,7 @@ def quartic(params: Dict[str, float]) -> float:
 
 def rastrigin(params: Dict[str, float]) -> float:
     """
-    Rastrigin function: continuous, non-convex, separable, differentiable, multimodal
+    Rastrigin function: continuous, non-convex, separable, differentiable, multimodal.
 
     A non-linear and highly multimodal function. Its surface is determined by two external variables, controlling
     the modulation’s amplitude and frequency. The local minima are located at a rectangular grid with size 1.
@@ -137,7 +137,7 @@ def griewank(params: Dict[str, float]) -> float:
 
 def schwefel(params: Dict[str, float]) -> float:
     """
-    Schwefel 2.20 function: continuous, convex, separable, non-differentiable, non-multimodal
+    Schwefel 2.20 function: continuous, convex, separable, non-differentiable, non-multimodal.
 
     This function has a second-best minimum far away from the global optimum.
 
@@ -238,7 +238,7 @@ def birastrigin(params: Dict[str, float]) -> float:
 
 def bukin_n6(params: Dict[str, float]) -> float:
     """
-    Bukin N.6 function: continuous, convex, non-separable, non-differentiable, multimodal
+    Bukin N.6 function: continuous, convex, non-separable, non-differentiable, multimodal.
 
     Input domain: -15 <= x <= -5, -3 <= y <= 3
     Global minimum 0 at (x, y) = (-10, 1)
@@ -261,7 +261,7 @@ def bukin_n6(params: Dict[str, float]) -> float:
 
 def egg_crate(params: Dict[str, float]) -> float:
     """
-    Egg-crate function: continuous, non-convex, separable, differentiable, multimodal
+    Egg-crate function: continuous, non-convex, separable, differentiable, multimodal.
 
     Input domain: -5 <= x, y <= 5
     Global minimum -1 at (x, y) = (0, 0)
@@ -286,7 +286,7 @@ def egg_crate(params: Dict[str, float]) -> float:
 
 def himmelblau(params: Dict[str, float]) -> float:
     """
-    Himmelblau function: continuous, non-convex, non-separable, differentiable, multimodal
+    Himmelblau function: continuous, non-convex, non-separable, differentiable, multimodal.
 
     Input domain: -6 <= x, y <= 6
     Global minimum 0 at (x, y) = (3, 2)
@@ -309,13 +309,13 @@ def himmelblau(params: Dict[str, float]) -> float:
 
 def keane(params: Dict[str, float]) -> float:
     """
-    Keane function: continuous, non-convex, non-separable, differentiable, multimodal
+    Keane function: continuous, non-convex, non-separable, differentiable, multimodal.
 
     Input domain: -10 <= x, y <= 10
     Global minimum 0.6736675 at (x, y) = (1.3932491, 0) and (x, y) = (0, 1.3932491)
 
     Parameters
-    ------
+    ----------
     params : Dict[str, float]
         The function parameters.
 
@@ -326,7 +326,7 @@ def keane(params: Dict[str, float]) -> float:
     """
     params = np.array(list(params.values()))
     return (
-        -np.sin(params[0] - params[1]) ** 2
+        -(np.sin(params[0] - params[1]) ** 2)
         * np.sin(params[0] + params[1]) ** 2
         / np.sqrt(params[0] ** 2 + params[1] ** 2)
     )
@@ -334,7 +334,7 @@ def keane(params: Dict[str, float]) -> float:
 
 def leon(params: Dict[str, float]) -> float:
     """
-    Leon function: continuous, non-convex, non-separable, differentiable, non-multimodal, non-random, non-parametric
+    Leon function: continuous, non-convex, non-separable, differentiable, non-multimodal, non-random, non-parametric.
 
     Input domain: 0 <= x, y <= 10
     Global minimum 0 at (x, y) =(1, 1)
@@ -355,7 +355,7 @@ def leon(params: Dict[str, float]) -> float:
 
 def sphere(params: Dict[str, float]) -> float:
     """
-    Sphere function: continuous, convex, separable, differentiable, unimodal
+    Sphere function: continuous, convex, separable, differentiable, unimodal.
 
     Input domain: -5.12 <= x, y <= 5.12
     Global minimum 0 at (x, y) = (0, 0)
@@ -694,10 +694,7 @@ def parse_arguments(
     }
 
     class ParamSettingCatcher(argparse.Action):
-        """
-        This class extends ``argparse``'s ``Action`` class in order to allow for an action that logs if one of the PSO
-        hyperparameters was actually set.
-        """
+        """Extend ``argparse``'s ``Action`` class to enable logging if one of the PSO hyperparameters was set."""
 
         def __call__(self, parser, namespace, values, option_string=None):
             hp_set[self.dest] = True
diff --git a/tutorials/islands_example.py b/tutorials/islands_example.py
index 71720391..9799c45a 100755
--- a/tutorials/islands_example.py
+++ b/tutorials/islands_example.py
@@ -3,12 +3,12 @@
 import random
 
 import numpy as np
+from function_benchmark import get_function_search_space, parse_arguments
 from mpi4py import MPI
 
 from propulate import Islands
-from propulate.propagators import SelectMin, SelectMax
+from propulate.propagators import SelectMax, SelectMin
 from propulate.utils import get_default_propagator, set_logger_config
-from function_benchmark import get_function_search_space, parse_arguments
 
 if __name__ == "__main__":
     comm = MPI.COMM_WORLD
diff --git a/tutorials/minimum_working_example.py b/tutorials/minimum_working_example.py
index 1b5e081f..f7b07635 100644
--- a/tutorials/minimum_working_example.py
+++ b/tutorials/minimum_working_example.py
@@ -1,8 +1,10 @@
 """Minimum working example showing how to use Propulate."""
-import propulate
-from mpi4py import MPI
 import random
 
+from mpi4py import MPI
+
+import propulate
+
 # Set the communicator and the optimization parameters
 comm = MPI.COMM_WORLD
 rng = random.Random(MPI.COMM_WORLD.rank)
diff --git a/tutorials/multi_rank_workers_example.py b/tutorials/multi_rank_workers_example.py
index 446d46f0..c72937d9 100644
--- a/tutorials/multi_rank_workers_example.py
+++ b/tutorials/multi_rank_workers_example.py
@@ -1,20 +1,21 @@
 """
 Multi-rank workers in Propulate using the example of a parallel sphere function.
+
 Tested with 8 processes overall, 2 islands, and 2 ranks per worker, where each worker calculates one of the squared
 terms in the (in this case) two-dimensional sphere function. In general, the parallel sphere function's dimension
 should equal the number of ranks per worker.
 """
-import random
 import pathlib
+import random
 from typing import Dict
 
 import numpy as np
+from function_benchmark import parse_arguments
 from mpi4py import MPI
 
 from propulate import Islands
-from propulate.propagators import SelectMin, SelectMax
+from propulate.propagators import SelectMax, SelectMin
 from propulate.utils import get_default_propagator, set_logger_config
-from function_benchmark import parse_arguments
 
 
 def parallel_sphere(params: Dict[str, float], comm: MPI.Comm = MPI.COMM_SELF) -> float:
diff --git a/tutorials/propulator_example.py b/tutorials/propulator_example.py
index f0d13cf3..c58d7853 100755
--- a/tutorials/propulator_example.py
+++ b/tutorials/propulator_example.py
@@ -1,11 +1,12 @@
 """Simple Propulator example script using the default genetic propagator."""
-import random
 import pathlib
+import random
 
+from function_benchmark import get_function_search_space, parse_arguments
 from mpi4py import MPI
+
 from propulate import Propulator
 from propulate.utils import get_default_propagator, set_logger_config
-from function_benchmark import get_function_search_space, parse_arguments
 
 if __name__ == "__main__":
     comm = MPI.COMM_WORLD
diff --git a/tutorials/pso_example.py b/tutorials/pso_example.py
index 5f70f576..51015ec7 100644
--- a/tutorials/pso_example.py
+++ b/tutorials/pso_example.py
@@ -1,22 +1,24 @@
 """
-This files contains an example use case for the PSO propagators. Here, you can choose between benchmark functions and
-optimize them. The example shows how to set up Propulate in order to use it with PSO.
+Example use case for the PSO propagators.
+
+You can choose between benchmark functions and optimize them. The example shows how to set up Propulate in order to use
+it with PSO.
 """
 import pathlib
 import random
 
+from function_benchmark import get_function_search_space, parse_arguments
 from mpi4py import MPI
 
-from propulate import set_logger_config, Propulator
+from propulate import Propulator, set_logger_config
 from propulate.propagators import Conditional, Propagator
 from propulate.propagators.pso import (
     BasicPSO,
-    VelocityClampingPSO,
-    ConstrictionPSO,
     CanonicalPSO,
+    ConstrictionPSO,
     InitUniformPSO,
+    VelocityClampingPSO,
 )
-from function_benchmark import get_function_search_space, parse_arguments
 
 if __name__ == "__main__":
     comm = MPI.COMM_WORLD
diff --git a/tutorials/surrogate/__init__.py b/tutorials/surrogate/__init__.py
index 410175ab..4295c527 100644
--- a/tutorials/surrogate/__init__.py
+++ b/tutorials/surrogate/__init__.py
@@ -1,7 +1,7 @@
-from .mock_surrogate import MockSurrogate
+from .dynamic_surrogate import DynamicSurrogate
 from .log_surrogate import LogSurrogate
+from .mock_surrogate import MockSurrogate
 from .static_surrogate import StaticSurrogate
-from .dynamic_surrogate import DynamicSurrogate
 
 __all__ = [
     "MockSurrogate",
diff --git a/tutorials/surrogate/cifar10_example.py b/tutorials/surrogate/cifar10_example.py
index 2a45240e..7db00c99 100755
--- a/tutorials/surrogate/cifar10_example.py
+++ b/tutorials/surrogate/cifar10_example.py
@@ -1,26 +1,22 @@
+import enum
 import logging
-import random
 import os
+import random
 import sys
-import enum
-from typing import Union, Dict, Tuple, Generator
+from typing import Dict, Generator, Tuple, Union
 
 import torch
+from mpi4py import MPI
 from torch import nn
 from torch.utils.data import DataLoader, TensorDataset
-
-from torchvision.datasets import CIFAR10
-from torchvision.transforms import Compose, ToTensor, Normalize
 from torchmetrics import Accuracy
+from torchvision.datasets import CIFAR10
+from torchvision.transforms import Compose, Normalize, ToTensor
 
-from mpi4py import MPI
-
+import tutorials.surrogate
 from propulate import Islands
 from propulate.utils import get_default_propagator
 
-import tutorials.surrogate
-
-
 GPUS_PER_NODE: int = 1
 
 log_path = "torch_ckpts"
@@ -32,8 +28,8 @@
 class Permutation(enum.Enum):
     """
     Enum class for permutations of layers in convolution block.
-    Each letter represents a layer in the block.
-    The default permutation is ABC.
+
+    Each letter represents a layer in the block. The default permutation is "ABC".
     """
 
     ABC = (0, 1, 2)
@@ -90,7 +86,8 @@ def conv_block(
     pool: bool = False,
 ) -> nn.Sequential:
     """
-    Create a ResNet block. The block consists of the convolution layer, batch normalization, and ReLU activation function.
+    Create a ResNet block, consisting of the convolution layer, batch normalization, and ReLU activation function.
+
     The order of these layers can be shuffled according to a given permutation.
 
     Parameters
@@ -131,6 +128,8 @@ def conv_block(
 
 
 class Net(nn.Module):
+    """Residual neural network class."""
+
     def __init__(
         self,
         in_channels: int,
@@ -437,9 +436,7 @@ def ind_loss(
 
 
 def set_seeds(seed_value=42):
-    """
-    Set seed for reproducibility.
-    """
+    """Set seed for reproducibility."""
     random.seed(seed_value)  # Python random module
     torch.manual_seed(seed_value)  # pytorch random number generator for CPU
     torch.cuda.manual_seed(seed_value)  # pytorch random number generator for all GPUs
diff --git a/tutorials/surrogate/dynamic_surrogate.py b/tutorials/surrogate/dynamic_surrogate.py
index 0a02c524..b94e84b9 100644
--- a/tutorials/surrogate/dynamic_surrogate.py
+++ b/tutorials/surrogate/dynamic_surrogate.py
@@ -1,8 +1,10 @@
 import random
+from typing import Dict, Tuple, Union
+
 import GPy
-from mpi4py import MPI
 import numpy as np
-from typing import Tuple, Dict, Union
+from mpi4py import MPI
+
 from propulate import Surrogate
 from propulate.population import Individual
 
@@ -10,8 +12,8 @@
 # Gaussian Process Regression with an Exponential Decay Kernel Surrogate
 class DynamicSurrogate(Surrogate):
     """
-    Surrogate model using a two-step Gaussian Process Regression
-    to predict the final loss of a configuration.
+    Surrogate model using a two-step Gaussian Process Regression to predict the final loss of a configuration.
+
     The first global model is trained on the configurations with their final losses.
     The second local model is trained on the interim losses of the current run.
     The local model uses the global model's prediction as the mean function.
@@ -85,9 +87,10 @@ def __init__(
         ],
     ) -> None:
         """
-        Initialize the DynamicSurrogate with the configuration space limits.
-        Set the global and local kernels for Gaussian Process Regression.
-        All other needed attributes are initialized as empty arrays or None.
+        Initialize a dynamic surrogate with the configuration space limits.
+
+        Set the global and local kernels for Gaussian process regression. All other needed attributes are initialized as
+        empty arrays or None.
 
         Parameters
         ----------
@@ -130,12 +133,11 @@ def __init__(
 
     def start_run(self, ind: Individual) -> None:
         """
-        Encode the configuration given as individual and create the mean function
-        for the local model by using the global model's prediction.
+        Encode the config. given as individual and create the local GP's mean function from the global GP's prediction.
 
         Parameters
         ----------
-        ind : Individual
+        ind : propulate.Individual
             The individual containing the current configuration.
         """
         self.current_encoding = self.encode_configuration(ind)
@@ -155,8 +157,7 @@ def start_run(self, ind: Individual) -> None:
 
     def update(self, loss: float) -> None:
         """
-        Update the model with the final loss of the current run
-        and retrain the global Gaussian Process with the new data.
+        Update the model with the current run's final loss and retrain the global Gaussian Process with the new data.
 
         Parameters
         ----------
@@ -202,8 +203,7 @@ def update(self, loss: float) -> None:
 
     def cancel(self, loss: float) -> bool:
         """
-        Cancel the current run if the local Gaussian Process predicts a final loss
-        that is higher than the best known loss with an allowed margin.
+        Cancel the run if the local GP predicts a final loss higher than the best known loss with an allowed margin.
 
         Parameters
         ----------
@@ -255,8 +255,7 @@ def cancel(self, loss: float) -> bool:
 
     def merge(self, data: Tuple[np.ndarray, float]) -> None:
         """
-        Merge a configuration and loss tuple into the history arrays.
-        Then retrain the global Gaussian Process with the new data.
+        Merge a configuration and loss tuple into the history arrays and retrain the global GP with the new data.
 
         Parameters
         ----------
@@ -314,8 +313,7 @@ def _create_encoding(
         ],
     ) -> Dict[str, Dict[str, int]]:
         """
-        Create a mapping from categorical values to integers.
-        Gaussian Process Regression only accepts numerical values.
+        Create a mapping from categorical values to integers. Gaussian Process Regression only accepts numerical values.
 
         Parameters
         ----------
@@ -343,8 +341,7 @@ def encode_configuration(
         ],
     ) -> np.ndarray:
         """
-        Encode a configuration dictionary into a 2D array.
-        This is the format required by the Gaussian Process Regression model.
+        Encode a configuration dictionary into a 2D array (required by the Gaussian Process Regression model).
 
         Parameters
         ----------
diff --git a/tutorials/surrogate/log_surrogate.py b/tutorials/surrogate/log_surrogate.py
index 55f25c60..87ad3679 100644
--- a/tutorials/surrogate/log_surrogate.py
+++ b/tutorials/surrogate/log_surrogate.py
@@ -4,11 +4,10 @@
 
 class LogSurrogate(Surrogate):
     """
-    Surrogate model with just a few debug prints to see what's going on
-    when debugging. Prints once for every method call.
-    Additionally it keeps track of the best final loss so far
-    and an id that increments for every cancel call.
-    This makes it easier to read the debug prints.
+    Surrogate model with just a few debug prints to see what's going on when debugging.
+
+    Prints once for every method call. Additionally, it keeps track of the best final loss so far and an id that
+    increments for every cancel call. This makes it easier to read the debug prints.
 
     Attributes
     ----------
@@ -40,9 +39,7 @@ class LogSurrogate(Surrogate):
     """
 
     def __init__(self) -> None:
-        """
-        Initialize the LogSurrogate with a synthetic id and a high best loss.
-        """
+        """Initialize the ``LogSurrogate`` with a synthetic id and a high best loss."""
         super().__init__()
         self.synthetic_id: int = 0
         self.best_loss: float = 10000.0
diff --git a/tutorials/surrogate/mnist_example.py b/tutorials/surrogate/mnist_example.py
index 47c2969a..a444aa65 100755
--- a/tutorials/surrogate/mnist_example.py
+++ b/tutorials/surrogate/mnist_example.py
@@ -1,25 +1,21 @@
 import logging
-import random
 import os
+import random
 import sys
-from typing import Union, Dict, Tuple, Generator
+from typing import Dict, Generator, Tuple, Union
 
 import torch
+from mpi4py import MPI
 from torch import nn
 from torch.utils.data import DataLoader, TensorDataset
-
-from torchvision.datasets import MNIST
-from torchvision.transforms import Compose, ToTensor, Normalize
 from torchmetrics import Accuracy
+from torchvision.datasets import MNIST
+from torchvision.transforms import Compose, Normalize, ToTensor
 
-from mpi4py import MPI
-
+import tutorials.surrogate
 from propulate import Islands
 from propulate.utils import get_default_propagator
 
-import tutorials.surrogate
-
-
 GPUS_PER_NODE: int = 1
 
 log_path = "torch_ckpts"
@@ -29,6 +25,8 @@
 
 
 class Net(nn.Module):
+    """Convolutional neural network class."""
+
     def __init__(
         self, conv_layers: int, activation: nn.Module, lr: float, loss_fn: nn.Module
     ) -> None:
@@ -51,9 +49,7 @@ def __init__(
         self.lr = lr  # Set learning rate.
         self.loss_fn = loss_fn  # Set the loss function used for training the model.
         self.best_accuracy = 0.0  # Initialize the model's best validation accuracy.
-        layers = (
-            []
-        )  # Set up the model architecture (depending on number of convolutional layers specified).
+        layers = []  # Set up the model architecture (depending on number of convolutional layers specified).
         layers += [
             nn.Sequential(
                 nn.Conv2d(in_channels=1, out_channels=10, kernel_size=3, padding=1),
@@ -93,9 +89,7 @@ def forward(self, x: torch.Tensor) -> torch.Tensor:
         x = self.fc(x)
         return x
 
-    def training_step(
-        self, batch: Tuple[torch.Tensor, torch.Tensor]
-    ) -> torch.Tensor:
+    def training_step(self, batch: Tuple[torch.Tensor, torch.Tensor]) -> torch.Tensor:
         """
         Calculate loss for training step in Lightning train loop.
 
@@ -114,9 +108,7 @@ def training_step(
         loss_val = self.loss_fn(pred, y)
         return loss_val
 
-    def validation_step(
-        self, batch: Tuple[torch.Tensor, torch.Tensor]
-    ) -> torch.Tensor:
+    def validation_step(self, batch: Tuple[torch.Tensor, torch.Tensor]) -> torch.Tensor:
         """
         Calculate loss for validation step in Lightning validation loop during training.
 
diff --git a/tutorials/surrogate/mock_surrogate.py b/tutorials/surrogate/mock_surrogate.py
index edc1a0f2..aab520b5 100644
--- a/tutorials/surrogate/mock_surrogate.py
+++ b/tutorials/surrogate/mock_surrogate.py
@@ -5,8 +5,8 @@
 class MockSurrogate(Surrogate):
     """
     This surrogate model does nothing.
-    It exists for testing purposes and comparing performance decline
-    due to the additional overhead of using a surrogate.
+
+    It exists for testing purposes and comparing performance decline due to the overhead caused by using a surrogate.
 
     Methods
     -------
@@ -34,16 +34,21 @@ def __init__(self) -> None:
         super().__init__()
 
     def start_run(self, ind: Individual) -> None:
+        """Do nothing."""
         pass
 
     def update(self, loss: float) -> None:
+        """Do nothing."""
         pass
 
     def cancel(self, loss: float) -> bool:
+        """Never cancel."""
         return False
 
     def merge(self, data: float) -> None:
+        """Do nothing."""
         pass
 
     def data(self) -> float:
+        """Do nothing."""
         return 0.0
diff --git a/tutorials/surrogate/static_surrogate.py b/tutorials/surrogate/static_surrogate.py
index e4743774..a429f6e1 100644
--- a/tutorials/surrogate/static_surrogate.py
+++ b/tutorials/surrogate/static_surrogate.py
@@ -1,4 +1,5 @@
 import numpy as np
+
 from propulate import Surrogate
 from propulate.population import Individual
 
@@ -6,12 +7,12 @@
 class StaticSurrogate(Surrogate):
     """
     Surrogate model using the best known run as baseline.
-    After the first run, each subsequent loss is compared to the baseline.
-    Every run with a loss outside the margin of the baseline is cancelled.
 
-    This model creates an internal index for the yielded losses during each run.
-    That means the yield order and frquency has to be consistent between runs.
-    Otherwise, the indices of the baseline run won't match.
+    After the first run, each subsequent loss is compared to the baseline. Every run with a loss outside the margin of
+    the baseline is cancelled.
+
+    This model creates an internal index for the yielded losses during each run. That means the yield order and
+    frequency has to be consistent between runs. Otherwise, the indices of the baseline run won't match.
 
     Loosely based on the paper:
     Use of Static Surrogates in Hyperparameter Optimization
@@ -22,7 +23,7 @@ class StaticSurrogate(Surrogate):
     synthetic_id : int
         An internal running index to keep track of the current runs loss index.
     margin : float
-        A margin that gets multiplied with the the new incoming losses to compare them to the baseline.
+        A margin to be multiplied with the new incoming losses to compare them to the baseline.
     first_run : bool
         Flag for the first complete run.
     baseline : np.ndarray
@@ -45,7 +46,6 @@ class StaticSurrogate(Surrogate):
     data()
         Return the loss series of the best known run so far.
 
-
     Notes
     -----
     The ``StaticSurrogate`` class implements all methods from the ``Surrogate`` class.
@@ -57,8 +57,7 @@ class StaticSurrogate(Surrogate):
 
     def __init__(self, margin: float = 0.8) -> None:
         """
-        Initialize the StaticSurrogate with a synthetic id, a margin
-        and empty arrays for the baseline and the current run.
+        Initialize a static surrogate with a synthetic id, a margin, and empty arrays for baseline and current run.
 
         Parameters
         ----------
@@ -95,8 +94,7 @@ def start_run(self, ind: Individual) -> None:
 
     def update(self, loss: float) -> None:
         """
-        Replace the baseline with the current run if the final loss is better,
-        or if there is no prior run.
+        Replace the baseline with the current run if the final loss is better, or if there is no prior run.
 
         Parameters
         ----------
@@ -144,8 +142,7 @@ def cancel(self, loss: float) -> bool:
 
     def merge(self, data: np.ndarray) -> None:
         """
-        Replace the baseline with the incoming run if the final loss is better,
-        or if there is no prior run.
+        Replace the baseline with the incoming run if the final loss is better, or if there is no prior run.
 
         Parameters
         ----------
diff --git a/tutorials/torch_example.py b/tutorials/torch_example.py
index d6ceb16d..850e9317 100755
--- a/tutorials/torch_example.py
+++ b/tutorials/torch_example.py
@@ -1,27 +1,26 @@
 """
-Toy example for hyperparameter optimization / NAS in Propulate, using a simple convolutional network trained on the
-MNIST dataset.
+Toy example for HP optimization / NAS in Propulate, using a simple CNN trained on the MNIST dataset.
 
 This script was tested on a single compute node with 4 GPUs. Note that you need to adapt ``GPUS_PER_NODE`` (see ll. 25).
 """
 import logging
 import pathlib
 import random
-from typing import Union, Dict, Tuple
+from typing import Dict, Tuple, Union
 
 import torch
-from torch import nn
-from torch.utils.data import DataLoader
 from lightning.pytorch import LightningModule, Trainer, loggers
 from lightning.pytorch.callbacks.early_stopping import EarlyStopping
+from mpi4py import MPI
+from torch import nn
+from torch.utils.data import DataLoader
 from torchmetrics import Accuracy
 from torchvision.datasets import MNIST
-from torchvision.transforms import Compose, ToTensor, Normalize
-from mpi4py import MPI
+from torchvision.transforms import Compose, Normalize, ToTensor
+
 from propulate import Propulator
 from propulate.utils import get_default_propagator, set_logger_config
 
-
 GPUS_PER_NODE: int = 4  # This example script was tested on a single node with 4 GPUs.
 NUM_WORKERS: int = (
     2  # Set this to the recommended number of workers in the PyTorch dataloader.
@@ -91,9 +90,7 @@ def __init__(
         self.lr = lr  # Set learning rate.
         self.loss_fn = loss_fn  # Set the loss function used for training the model.
         self.best_accuracy = 0.0  # Initialize the model's best validation accuracy.
-        layers = (
-            []
-        )  # Set up the model architecture (depending on number of convolutional layers specified).
+        layers = []  # Set up the model architecture (depending on number of convolutional layers specified).
         layers += [
             nn.Sequential(
                 nn.Conv2d(in_channels=1, out_channels=10, kernel_size=3, padding=1),
@@ -365,8 +362,10 @@ def ind_loss(params: Dict[str, Union[int, float, str]]) -> float:
 
     # Run optimization and print summary of results.
     propulator.propulate(
-        logging_interval=1, debug=2  # Logging interval and verbosity level
+        logging_interval=1,
+        debug=2,  # Logging interval and verbosity level
     )
     propulator.summarize(
-        top_n=1, debug=2  # Print top-n best individuals on each island in summary.
+        top_n=1,
+        debug=2,  # Print top-n best individuals on each island in summary.
     )


Test patch:
diff --git a/tests/test_cmaes.py b/tests/test_cmaes.py
index bb0ac39b..34638d39 100644
--- a/tests/test_cmaes.py
+++ b/tests/test_cmaes.py
@@ -5,12 +5,12 @@
 import numpy as np
 
 from propulate import Propulator
-from propulate.propagators import CMAPropagator, BasicCMA
+from propulate.propagators import BasicCMA, CMAPropagator
 
 
 def sphere(params: Dict[str, float]) -> float:
     """
-    Sphere function: continuous, convex, separable, differentiable, unimodal
+    Sphere function: continuous, convex, separable, differentiable, unimodal.
 
     Input domain: -5.12 <= x, y <= 5.12
     Global minimum 0 at (x, y) = (0, 0)
diff --git a/tests/test_propulator_sphere.py b/tests/test_propulator_sphere.py
index d843d5f0..d7b8e97a 100644
--- a/tests/test_propulator_sphere.py
+++ b/tests/test_propulator_sphere.py
@@ -1,7 +1,7 @@
+import logging
 import random
 import tempfile
 from typing import Dict
-import logging
 
 import numpy as np
 
@@ -11,7 +11,7 @@
 
 def sphere(params: Dict[str, float]) -> float:
     """
-    Sphere function: continuous, convex, separable, differentiable, unimodal
+    Sphere function: continuous, convex, separable, differentiable, unimodal.
 
     Input domain: -5.12 <= x, y <= 5.12
     Global minimum 0 at (x, y) = (0, 0)
diff --git a/tests/test_pso.py b/tests/test_pso.py
index e89289f9..a19da15d 100644
--- a/tests/test_pso.py
+++ b/tests/test_pso.py
@@ -2,8 +2,8 @@
 import tempfile
 from typing import Dict
 
-from mpi4py import MPI
 import numpy as np
+from mpi4py import MPI
 
 from propulate import Propulator
 from propulate.propagators import Conditional
@@ -12,7 +12,7 @@
 
 def sphere(params: Dict[str, float]) -> float:
     """
-    Sphere function: continuous, convex, separable, differentiable, unimodal
+    Sphere function: continuous, convex, separable, differentiable, unimodal.
 
     Input domain: -5.12 <= x, y <= 5.12
     Global minimum 0 at (x, y) = (0, 0)
@@ -21,6 +21,7 @@ def sphere(params: Dict[str, float]) -> float:
     ----------
     params : Dict[str, float]
         The function parameters.
+
     Returns
     -------
     float