Exciting times, Tenzir v4.3 is out! The headlining feature is Fluent
Bit support with the fluent-bit
source and sink operators. Imagine
you can use all Fluent Bit connectors plus what Tenzir already offers. What a
treat!
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO19a3fiypLl9/srzqr52LfoVGbq1bPmXHUwMDAzXHUwMDA2XFyFy1x1MDAxMoUtbMOsWWeBwJiHXHUwMDFmx8ZcdTAwMDY0q//7xI5cdTAwMTQgnoVd5pTrzq3TtzFCmcpHxI5cdTAwMWSRkan/+48//vg0mj50Pv3XXHUwMDFmnzqTuDnstVx1MDAxZpvjT//E9ZfO41Pv/o5+kvz96f75MeY7b0ajh6f/+s//bD485Fx1MDAxNqVy8f2tKdlcdTAwMTl2bjt3oye693/T9z/++L/8/7PPXHUwMDFhXHUwMDBle1x1MDAwZk9cdTAwMWS+nX9YPMzS7urV8P6OXHUwMDFm7GjtSddcdTAwMTHW/IbeU5FcdTAwMWU26rTp1+vm8Kmz+Fx1MDAwNZc+yX6ppD8/nzw9uv5JOJLx9Oa6sXjqdW84PFx1MDAxZk2HplfN+Ob5MdOmp9Hj/aBz2WuPbtCulevzck/31P9Fqcf75+7NXefpaanM/UMz7o2muCbE/Grzrst1LK5M6NtnqVx1MDAxN1x1MDAxN7iIJcXK01x1MDAwYvfD+0c8/X9YXHUwMDFk/Ld4fqtcdTAwMTlcdTAwMGa61Ii79uKept32rq9cdTAwMTf3jNM+aUfkRPafM7/lptPr3ox23/PU4YH3XHUwMDFjmlx1MDAxM6Ez04LnP5TbLFx1MDAwMP9nMdqPzdtOXHUwMDE5Je6eh8PsgN2101x1MDAwMVv6oYVcdTAwMWZKq7KUlafMTPeqg29HYX5QO1cv30686aB3XirOe7wkfM3Hx/vxp/kv//3PXfU2XHUwMDFi3l+NZuf8z9v46alXLJalXbp4h3qj0/Na9foqro+L7UqzXFyRlav7wTvUeze6fnD15LT5pSuPb0pWuVltjN6h3vPHzkWQb5+VOlx1MDAwZuPkbnp3e6nDxn71pn8tXHUwMDA04fmh3TQ6azm+rX3p+bbl+vPfh727waowXGbv48FCzf+RafCrwEV428DFVp4rbOXae4OLiEbP385Pg/ClfTRcZv68tIffVfmjg4vy3lx1MDAxOVs6fifuXHUwMDFjXGZbpHCl53pa/VJwOajwu9JyMoD/k8Lfu212t4i+3Cb6UtBcdTAwMThL1/bU3rL/lL9++Nr6fPJcXPnabJWfnr9dl86jjy772lqRfWVtlf3RY/Pu6aH5SOLxRvnPNGcu8K6f85f+rcq77Vx1MDAxM1x1MDAxNFx1MDAxMlxuXHUwMDFkWtp3yKMvPDejbj+Wx8xcdTAwMTA2R89PPHXNl057SVx1MDAxY0xrP1mq1VTNdrttqc61cKzY95yOXHUwMDEzi3ZsS9lpSmnbjpBcdTAwMWRt237r2pKW58RttyVEs2N7jiVcdTAwMWPV6sjY67S8tuM3Zafl2J52rY6KpYxjK1ZcdTAwMTkhI17aWVJsa6Gw1kwtd+rSYydcdTAwMWVcdTAwMTlJ2qBPyrO36ZPvK0/6tr2/OtW808LL4Pmvfml88vnq5aZTv7utf3R18ldNiS1cdTAwMGVjSrJ8eK5KmYenukPi4bietP13sFx1MDAxNVx1MDAwYiMwk1x1MDAwNpVe+e/tSrXZhMykadSZrFx1MDAxMDEz98XPrW/f/Fx1MDAxN33pn/e1++ydjoOu9avpqVx1MDAxYkXXf1x1MDAxNS7+qlx1MDAwZoaeN2jLp1thyfeyeGTu3Fxmz/pJi7c0rktcbqq2KagtfIv8XHUwMDE1f39HcvMkfXBcdTAwMDUlk2/naMSFXCKG7fo08iv6KmXOPojGWtrL0Vx1MDAxOPtKS0FW17I3kD9lrymwLYWtXcf/ef19s/V7tWwuWnV/NzrvJUyovKWrx83b3nC6NI0stJArkrl4RKL59Gnpt/yw14VcdTAwMTB/iqnNnccl+Vx1MDAxZfXItM1vuO2121lcdTAwMGJcdTAwMTXTXHUwMDAzm727zmN5XHUwMDFmy3L/2Ov27prDaEd7aFxmOl9ns2blpJ1cdTAwMTGJp1x1MDAwZX5Fl+23m1K9PeTjk+z6JENcdTAwMGKR+JGmTvW3jm61O2fR9Ono6rbUVGfB8UfX1DVTmnXTfoEptV1ccldY/l6W9L5abFxcXHUwMDE07vXly3j67UaftU7L48K+XHUwMDE271BcdTAwMDGk80TLycu9Xbt/PPoup9botlXS71BvzbKjqFYo9Vx1MDAwNo/3T4Pnc5lcZlx1MDAxZeN3qPfxtlfuNE+G30ffjs+eJtf+g6rcvkO916dcdTAwMGZ/XT+N89//eujclU/V09f7k+hcdTAwMWTq/bN1Ulx1MDAxY43FQ//iYXJ6+1RccpI/T94j4PXw/aaYL1xybi6Pbr91S3radu28/3sxINvf6vIrolx1MDAwNsIjt39vXFzdrFxcXHUwMDFmXHUwMDFlV92c7Wth25Zru561QoC0OFx1MDAxNFx1MDAwMZJS5zzL8jzf0Z7ORlx1MDAxNXfwXHUwMDFmutnT5L78f8R/XCKEWa7vXHUwMDFmb5uHJEE/4Fx1MDAwNKskaGujXHUwMDBlzoSk76xenWms5SjH8n0h91x1MDAwZlA/Vf760r6f/KXvokr93u1Z0dVx7eOr7GqAWv9SKqS17dE/61x1MDAxZEJyfyNcdTAwMTWqnN5FcePu2HEuJ+PWZW/QObO//6uuTd2UrZdG50pdlSx9NFx1MDAxYZ+f90qWeod6k2EricqteuXi7LqgJ8/9WE7eg2Ldvlx1MDAwNL2/qv3nZtOpNW/r7c6le1r/vaiFXHUwMDEyelx1MDAxYlB5wrdcdMfU/sGVzcL6wXHKXHUwMDEy0slZrieU5Uvy15xcdTAwMDVAXHUwMDE42HJcdTAwMGVcdTAwMTdcXHFzjlY+2Vx1MDAwM9uV0tkzuKIt13dsyz74StrHYVx1MDAxN4X7uzsyt/ePh1wiXHUwMDE2P7Cwq8RiU3tcdTAwMGXOKZS1VVUtXHUwMDEyXWV7vr//SkWp/1ehdZzYxYd25co7XHUwMDFiXHUwMDA2XHLhnH50XV3jXHUwMDE00vm1K1x1MDAxNfRP2bajXHUwMDE24/47kFxu+X3QuPY8u6/u2+Wv+eaXYvJ9b1JxKOP/XHUwMDEzfvrOer+L9nUsLu78glx1MDAxNdmnN6OmKH2xP3A8qJgkzZI66lxcXGavh9ex33y4tmX+18aZPlxmWVFbV4IssoiusIS9v1e1WVx1MDAwYj44XHUwMDAyWkLrnHZcdTAwMWQhhWdJ38usjVx1MDAxOUD0XHUwMDBlxlYsKye069uecrWQSi+s0a5QiOspR7vvXHUwMDExgP5dyMoxXHUwMDA3XHUwMDFjXHUwMDBlxVR+YLdXmcpaY96Dplx1MDAxOHzYoKBSKrF6eZ70a5FcdTAwMWN43v5cdTAwMGJAu1x1MDAwM/lcdTAwMWZUP33Hy9nKXHUwMDExribRo/4uKL1cdFRafs51XHUwMDFky6ffhG0pudKwd1JVqXPC97SltCeV42dcdTAwMDZ9rqqWzrmEJbYkh0f6rr+WsWfZ5JS4vs4g6jtyXHUwMDFi+WNus0ujXHUwMDFk7SgnK9OvSG16XHUwMDFjXHUwMDFk9e7avbvucsOu72POefosctJTlsszpJFekMk3+tRtPjBcdTAwMTbmqFx1MDAwMb60XHUwMDA1XHJcdTAwMGY5jY7O3JJmze+KWK51vnPX3tkokbPIRdWWjSi05ZJPut4mkfPIXHKwbWq0p1xin71tbdqc77rWpmHzaVS4v73tjWjsv9/37karY8yDmVx1MDAwN1x1MDAxONx0mmtcdTAwMDJAfdr621x1MDAwM6pbZrCLv/5Y6Fx1MDAxNH+Z//1//rnx7s/b5d38vCrqi1xu/5H9fDXcWZ6/3SVDuobvknu/N+Dtzlx1MDAwMfqogOdaOd9cdTAwMTG277jCXHUwMDE3XCJcdTAwMTNOMqkpWuVsTfqqXHUwMDA0JNg/XHUwMDEwN1Eq50jPczX5wISv3oZIim/lXFxcdTAwMDUhsX1BXHUwMDEwXCJcdTAwMTfEaVx1MDAwNniKtF7ZWlx1MDAxZcSZ+9CA51x1MDAxMkNTNoGHci3EXHUwMDEy1sDFy5EwI//IXHUwMDE3vu87eivebU5TeTXeUZss34FcXJHIwJYu7NO8TVJsa8S/XHUwMDFlwG2Vb/55TbTfXHLgXFx3a0aPXHUwMDE0tvC171j7Lz3vXo/4oFx1MDAwMOcpkfOVjygtyb/jLvxcdTAwMDDjcNHUXGKLPDJX21x1MDAxOfB7X3TzyfNcIt/LUcTIXHUwMDEwK15HN+3mfOn70rNg6FxcL0MsZ1x1MDAxYjBcdTAwMDBvjjjM+teHRjeLJk1YQlqaXFxBx8ti1zshyY/pmyZPnZiiJ8lKKmKM9lojiL9cdIu8a9eWxDlcdTAwMTHg39aozcHq31x1MDAxN962yzf+fV5cdTAwMTPt90O37fRNaltcdNu192dvu+OiXHUwMDFmXHUwMDE13Gydc1xiXHUwMDE3LEE64pKBX1x1MDAwNjdleeRcZtmecHytiFx1MDAxOXgrXHJ7r8hcdTAwMTKsvYKvRc6LtjKhloW7St6NUNRcXIsgWHlcdTAwMTmzlOJcdTAwMWK52oTF77Lj5jeDN1x1MDAwMnZSXGbXtlx1MDAxNbmFynHcdapkOTmaX3J/fFx1MDAwZjt8paMyt1x1MDAxY1x1MDAwNvBIWrTnXHUwMDEy74d7XGbruN4oO0deNvDOsT3L20opN0e8fmO42yru+Pd5TdJfXHR324LncvuWWYSllFSvXHTOffveuox6Ve/88qr22W5ZLfe8XHUwMDFlfHS0I7Orc1x1MDAwNPqKjI2QXCLLklxml5N+Tto2cVx1MDAwNc+V+kBkzrJytk2Gnoizw7mM62C3XHUwMDFlRpdCuo7jUaGfh7ef2D57oCWvn1iim6nEXHUwMDBl9P17o//fm49/PXcyXHUwMDFhuFx1MDAxNP1cdTAwMWZ2rpeVczn2P7p/2Fx1MDAxNvhfavBqlH/toe9cdTAwMTHl354ytNUntFx1MDAwNIGWVO4rNt87pcmfyf3RX7X+U77/V7E9VOXB5ONcdTAwMDOJQ8aL5Usp2/dXfUJHXHUwMDEybZKWK5TvODLjcr0rklxiNydcXMvXhCZk031nQ5R/XHUwMDEzkmBnsFLvXHUwMDEw1X87kPwrKfxxpzm6ya7o/Vx1MDAxZFxuv/bQQyq8rXYwXHUwMDA3z/GV8Pz9g0Bccj1cdTAwMWGOyvrb6Lr2xaqQ8vRGXe/jK7wnc5r4s4VcclxiwvZXl919K1x1MDAwN9LgWtLWtpM9/+I9j+Igb0wrn1x1MDAxZeN6SlxutVx1MDAxN3UgZSd+TS37lVxu/1x1MDAxM0ktXHUwMDFmTuGvzi/+XmVfeuBB1+8tS22P97rEm6XKZHL8SNN371x1MDAxNPuwmo7FREdKl9TZJ8a9sKrphk5kXHUwMDBiw4/2pFKZ1b33VHTfySnHR1IyOdDEtzbsOlwi71x1MDAxOc4+QZHlKWrUpoivXHUwMDE0XHUwMDA0zvo9NP8tIZGlyt5RabdcdTAwMDdFlsJcdTAwMDZepFxuk8rZWX7shsPK2W1ZxqNWXHUwMDA2ctIohJMjwfbIXHTXWtMw2m7mjkU0Q1x0R1xi31bSVeQlWuud31x1MDAxNlx1MDAxMNkjXHUwMDE5YK1Jbo6mjSTVcWxbOpa1uUnkXHUwMDExSmmThNpkgpGmsdam3yZcIvJ5q7zj37qkL+r7R/bz9XAnrK3pSlx1MDAxNtY7hcquXHUwMDA2/1xi73az2o+Kd1JcdTAwMTHeXHRcdTAwMWF7W9J4KHstodDLuUpcdTAwMTDnUY52XHUwMDBlXHUwMDE1XHUwMDEzcXJcdTAwMWWJsatcXGU79H+b8Fx1MDAwZWk5XHUwMDBl0Vx1MDAxZcd2pJbaXyM6LsTDssRHXFy+PzTY7c5cbpwji7U81dLZXHUwMDAyLVx1MDAxNlx1MDAwZfvwXHRcdTAwMTiRN4PY4NvwbneQMNsqVyqf/Fnb9Vx0iL1cco36bMHq2kIjXHUwMDFmwIeI6N9cdTAwMTfvtss7/n1eXHUwMDE39VdcdTAwMDLeNkdO6637yFx1MDAxZFx1MDAwZlxiK19zJKtfK1x1MDAxZNdH7uNXXHUwMDE1RtXSs1x1MDAxNbVKw1x1MDAwZo92Slg5X5tMMaFWt3pJlfNcXJJ6y1x1MDAxNfSfc6DsTEHWzrV8mnjiXHUwMDE07p7bvrQjbVx1MDAxN7GbX+nG/cRcdTAwMDbNmeB+XHUwMDE4N67RebxcdTAwMGaqf68nt/rMQ0ZtXGK7t3JcdTAwMWIhtE1m4Fx1MDAxNadGxF+/6+6dKlx1MDAwNuG0WPt+d359c++6v4G2y1x1MDAxY+mZJk3DYr9a4TaWY+VoXHUwMDEwXHUwMDA08mVdT1x1MDAxZSZMa7s5S7s+/adcdTAwMWMlydPY61xiXHSsRVx1MDAxMbO3rF9cdTAwMWG2+YmN01x1MDAxZk7fv1x1MDAxNM7/XmVfeuBhwzbuXHUwMDBlP0ZoWFx1MDAxYcvbf0lmN8p/VF2X0suRnktFXlx1MDAxYvJ4XHUwMDE3/TW6bmvoulwi5kvIKO3Vlr2Pslx1MDAxM6BcdTAwMTBn81x1MDAxZNJ2z9fkj2yw7eTPYoWZsMD20dRMUs1sh7d0XHUwMDFk4uiH2VX6wT2Z3Tux/1gkJGfnWi9twMg4Mlx1MDAxZTkxgvx4h1x1MDAxYU5Uy13r+15+zG6qu/BjZE4o4SvHXHUwMDEzPvFpy5NcdTAwMWJcdTAwMWJlu5blOogvQFx1MDAwMPT6fPw2fsx2ace/z2uCvqjvXHUwMDFm2c837LvYXHUwMDFlpia31lPC9dz9PZndVu4j41x1MDAxZFx1MDAxZj3tISpGvttcbt7hiGppXHUwMDBix3fpN/8w3MbROctcdTAwMTckzzTFtrT8XHJoJ3PIXHUwMDFkxKmlXGI5aL12UjYhs+s4rvVcdTAwMWUr0r9hmHpvvMvOteVnXHUwMDEz+LJJd1x1MDAxZVwiI1x1MDAxYSFtx5LCW+v9Xni3m+zP24StjNKV2vPpYfhvY5uk4FCqXCKgcCVY+G+Md9vEXHUwMDFk/z6vSfor4W5rvo2zdde7XHUwMDE0tu17yn/FXHTlf0ZcdTAwMGatxnfHe2mM/eDz5aB9+/lz78ODXHUwMDFkXHUwMDEx2Fx1MDAxY5lcdTAwMTnfXCKvSNlSrzhyOFx1MDAwMFx1MDAxOVx1MDAwNtcjSyTI2ztM4MZVObItvuPjTCBL+HttgLe0Jyy8XHUwMDFk4pdcdTAwMDZuPtYx4D/nyJ33urfNv9eVW3nkYffQa22tXp6fd+5cdTAwMTOmO/YrzjvfPfFcdTAwMWZW3ZWbw/q7qzwpcZj4irprK+cri9RcbvCXWfB53zCtzLnadlx1MDAxNE1cYrH0bGh8oe45hc38QjtCkqMh1lxcOVJcdTAwMGVb+Zl8+/+vuM1uW7Pwm1TOw1x1MDAxOPl4j4tQrrPJb8I+LtdcdTAwMWN/L6VDc+K5zlr/92I3u09S/yOzPUFoy9FI/Vx1MDAxMr5nq02UXHUwMDBircKatK2ImGnygsju/7785vN2meef18T9nVx1MDAxOI6rt2+j93xfa8d291x1MDAwZlVcdTAwMTdcdTAwMWHPf9ZcdTAwMWZ7wWm7et5IqoXa/Vx1MDAxN/vx40OeTfImXHUwMDE0KVx1MDAwMlFcdTAwMThiXHUwMDE3K5Cnlcpp4tnas3Hgs3uonaY65yrb15x64u55xlx1MDAwZtkkT2pfiF9KcX7ivPNcdTAwMGZHcZ6eb2+bjyj1t9KcXHKPPSzVsb2tik/iXHUwMDA0Od9b63dP/4fVeu2S045DXTxPL+1eNFqP/UpkXqRQXHUwMDAy73U7TNDawi5PbGlcdTAwMTCCnHglM97kXCJo7ec8alx03aQ95Vx1MDAxMkKsR62Fp3A8+3tsUXr3qLXtZlO93p/pVL61r+5P4uC+UG3df79cdTAwMWbdxvplKUKcXHT/4lWINs5Fw+lKmZNqXHUwMDE2bEgqV1x1MDAxMe1Q2vJcYvPfXHUwMDE4xPlhsmGWw4B5OVx1MDAwZTIgXHUwMDA1iYFa30Hq5XwhqUVIv5N0+2/NcrbKu/l5TdTfieb41taotWuTjtuOt79jt1viPi7eyZzSNO7gy9TflTiOdtycT0NOkq94y/lh8M61c1q7vnC0j124zobzNDatyGvpSZV91+MvYDmHekvKYdmTrezMesyh2dPDU+e5fX93f/u3XHUwMDEzqM1PPjCHsraGi3A8slJcYlx1MDAxMO9cciu7t/h+VFiRXG454lrgyHoh11OYRU6T3bJsQlx1MDAxY3KdXHUwMDBltFx1MDAxZNNcImjz8OpK3yGxzyzRZFBF51x1MDAxY892bYJB11wiN3pccmNwXHUwMDEyvOv48iOeYvFRcpiXppq85c1L/5J8UodE31wio4oz3da3R7xnXG6zy9nJvlx1MDAwNVwi7yrp+1x1MDAxYttkI7lUusRGiUf9xvs1tos6/n1elfJ3ok/Zg+nWw0SCk9ZfXHUwMDExJtq9P+ijXCKdUlwip5QrfFx1MDAwMlxujVx1MDAxNMFlqFNYonR9xTEkhPBcdTAwMGVcdTAwMDN1SPywcSSaTaq450uxcFK+lrYv3mGd/+386SfeXrdcdTAwMDfP+ZujRCTf8eiff7RcdTAwMWazdOVvXHRcdTAwMTRtfPJheU72pJS1nFx1MDAxZm0rR75mXWz3huRcdTAwMGar/a5cIv+IpMzBrpE190lcdD/nkIJpz1fkTlqH2YVOvltOSO07rot33GdcdTAwMTe3XHUwMDE24VwivDXY9anBRL7IaVx1MDAxMlx1MDAxYuBcdTAwMDBcdTAwMDFcdTAwMDfh/qrtWr94aWz3KVxifyzCLtonV9mzXHUwMDE1YTpSXHUwMDBiN/Bcblx1MDAxY1x1MDAwMUackVx1MDAxY1qfhlx1MDAxYskn1tu4zv5cdTAwMDTM174lPE+TjNmOvznNXHUwMDExSXpSe7hBke6ut+m3oTuft0u8+XlN2N+J8exYXHUwMDE3w+u4lcq+XHUwMDA06keIXHUwMDE3hlx1MDAxM69d+lxcPlx1MDAxMldTKziuPb7Us69E/KiIR55cdTAwMWRONVx1MDAxN1x1MDAwMnlkXHUwMDE5Vzc9n9DNXHUwMDEx29bCclx0/W19mExcdTAwMDCXJlgh0UBK7ZBcdTAwMTJuOJ5wU95cdTAwMGbO7LJcXP1cdTAwMGX49na6c6iXXHUwMDBi/yud51HPXHUwMDA3p38vfVp+4mFpXHUwMDEzeclbaZPA5lP9msN7dsvTh1x1MDAwNVx1MDAxMVx1MDAxY+nB+EFKvPaCP6VUjshcdTAwMTTRJUlOjVx1MDAxMoc55NTTObw/WFxuXHUwMDA3b+5cdTAwMTGbdoH5Oe0qfrtcdTAwMWbe8mOvRYfInJJTp72PuMB2aL6023otuFx0tolLhUUqXHUwMDFhQrJcdTAwMGKbgkNY8Fwi7qJwuFx1MDAwM3lcdTAwMGWeXHUwMDE0b1xmXHUwMDBl7UuYfGqUo8lcdTAwMDF2XHUwMDA0L/Js2uCOY6phxqjp5Mfg4JbfmDBtXHUwMDE1dv51Vc5fyZZ2uYjb31x1MDAwZkZcdTAwMWHuXHUwMDEyN3ZfkSm9c6nlw2KdwrtpbJe8K5zg4K5mXHUwMDE0eFx1MDAxNqBcdTAwMTChU5LFXHUwMDAzXHUwMDFkX0TTmnOJKmliQK7tZFx1MDAxYrHYXHUwMDE3QkqBN07gRDVcdTAwMGZcdTAwMTOz7iA6vFFKfUS4e/OC1nvlXHUwMDEzLN75Q1xmU7jETCX5XHUwMDFk23JcdTAwMTSxko1cdTAwMTOOXHUwMDE03sFiW+uL9+95fJGTw+FcdTAwMDaOg/dcclxi37c3xcLhs5KUSkmOXHUwMDEzXHUwMDBlXHUwMDE2V5a3ns35++DddoHnn9dk/ZWItzVcIq62XHUwMDFmYE9Mh2yO6+zP7a7q05d756/uuZ943/9cdTAwMTT56tMgOv74eGfj5SfCoVFcdTAwMTfKU9bKUaxaXGJcdTAwMWN542vXtoUnnMN4iFLizC7b8/lIODJ9e7mIeD+c7zneOyz2fbwznVx1MDAwZvU611x1MDAwM6d56uwrvVx1MDAwZe15XHUwMDEyMj12/vlcdTAwMDfw6Z9/kPM4/Hvd0Fx1MDAxZI8/7HFcdTAwMDUys1x1MDAwYnSNp1l4vagl98et3ZL2YXFLi5yDI55cdTAwMDT2h3j+SmRLW16O+DFcdTAwMWNcdTAwMDZ+s/fh3rzhmVxyXGaEXV42QS1cdTAwMTPKd4jIu5Zj42g+7WTyO1NcdTAwMWOz8d43vMnhXHUwMDAzXHUwMDEyNfil7/zqjSVOtNtoZv1SQVx1MDAxNpnsXHUwMDBm3oshXHUwMDFkuSWQb7l4KYTZ4kv3W4fK/Zxt4MVcdTAwMWIjXHUwMDFkepxCXpuzbYdcdTAwMGKoOPFcdTAwMWFb4z0wJFx1MDAwMb8zU9sq8ebnNWF/J6qWXYxbe3W15dl4RfIrIG94d39SXHUwMDBmK9+rXHUwMDBmxVGj2Fx1MDAxNbXrsy9cdTAwMWZcdTAwMWXypO/ltO0qj2SNXGKbv3pCi+/kXHUwMDFjTchHTlx1MDAwMVx1MDAwMeNhUlx1MDAxN4gtKklcdTAwMTRccrzLXCJ02OvsNZpcdTAwMWTeZP1LidrtS9D7q9p/bjadWvO23u5cXLqn9fcjPm/FyTdcdTAwMTGfsFxc+HupztJcdTAwMDNcdTAwMGZLbrLniK3lY/qCfF3f2j9cdTAwMWZz96x/WE1XXCLnXHUwMDEywno4XHUwMDA3QfvuiqZLcso8z3dd8oqdpXfYv6uqezmb3HHhuTbe0mhtjLh7XHUwMDE2ssBcdHY8SaCztqmFdMNHdulHjEFcdTAwMWSa2ux5Mom1MtVbSISwXFxcdTAwMTJ/hfVcdTAwMTdwWu2sx7f3oja7TV+G2liOcolD+TRU2Fu1hdpcYt9XRF5JL33ES3/joPtWcce/NUHfk9akMYLHzkWQb5+VOlx1MDAwZuPkbnp3e6nDRlx1MDAwNsA3Y1wikEBqsaz6ylx1MDAxMWuKarGvQzTUs5XMOEJzNd2FN29BXGbf7/jX205BWEHDw2PoQVx1MDAxMWV2XHUwMDBlXHUwMDAxcS6CXHK5lkL3XHQny261V75yXFy8zWifs1x1MDAwM1+XYEWqpp03LVx1MDAxOL5zJvNG0Vspu8af9lx1MDAwNIU9Tpbrl0r68/PJ06Prn4QjXHUwMDE5T2+uXHUwMDFiWTTLnGWnccCAdFxiQH3byUzlXHUwMDFj8yTeK+j7XHUwMDEybibNnNBv9Fx1MDAxZTe/XHUwMDAzclx1MDAwYqz/uFXEsFx1MDAxNF57K1xi/i3Xs9ZcdTAwMGbhezWC7sCq4y/HlbujJ1x1MDAxZMuhW71oXHUwMDBlTmtcdTAwMDPrbFx1MDAxZKt6t81uZ1x1MDAxOas++9pcdTAwMWOyNf+3ylpcdTAwMTbyuthKhvBy5t+mXFzI7ff8XHUwMDEwzkaPzbunh+Yjzc1uSGvabe/6+reHtGVcdTAwMWRKXHUwMDE3XHUwMDAybVs5lsy++3BcdTAwMDFe21d8pfQkXHUwMDBlNd+Ha79cdTAwMTK7bJV9LczrmNeINefTU/Ol016aLjMyn5RQtotoQIdIUqdFzoJrdeJWuymlS0rtu6pcdTAwMTmLdtuxdNNtI4XW19fKsVstv+O2m62O3fKbvidsuyVcdTAwMWTCgI60PL9jXbealidcYssz57g+kWPVWcLRjPLO4lx1MDAxZbtoQXTUv2u9PDvu90hcdTAwMGXqR1O/czT8c13VlkNcIqxpNJA5XHUwMDBm71TH28Ns11ndxZAhXHUwMDAxM01Tlo9cdTAwMTPAPFx1MDAxN+9EtWy1yXP3Vlx1MDAxNM3ZX9H24lxy/8pKhvNmXHUwMDA1zqfexFx1MDAxMLZ7tDh6WO+Zef9KLVNEy9+0xj5/M9/wmZ70x1Evm7WxXGJXOHqbtOyIXrwpUJFcdCvY9rKN8Vx1MDAxNk99zev/NvRsLaphNPdcdTAwMWYpb/nUfHg4J/jpzFxy/6eXXmd8tEHMr/lcdTAwMWbiR6z3XGZOXHUwMDBivvnJUq2marbbbUt1roVjxdSJjkOgXHUwMDE021J2XGKnbNtcdTAwMTGyo23bb11bhD9O3HZbQjQ7tueQXHUwMDE3olpcdTAwMWRcdTAwMTl7nZbXdvym7LTIedSEcSqWMo6tWGWYyafb3m0nyprs/3x66f7H5DazVGWw6OCNmj+PxLRZOzvFQ/Hnfy01639iqlx1MDAxZP3P719D2ZhcdTAwMWXp1uXkOU5Er/n1TMTF+5dT1Vbtqa2Cqf1cdTAwMTLfxi9BPz9cdTAwMGVcbn7Svo175a/th8bXs/vv5+UkjPK98pebYfOyfd8uil6Y0PevjYfGVbvQUl2/3M93g0JcdTAwMWX3dfm3L42H1pexX761X1q3td737r1cdTAwMTd/OVx1MDAxNs3C0eD7+UlcdTAwMTj066JcXKzK037VqiZlXHUwMDE5TLVcYs/zXCLs8ec07Fx1MDAwN89BUuqGxfpzXHUwMDEwVbt0f3Lar2sqY532Y1x1MDAxMVx1MDAxNcuycq6toJdP6HNcdTAwMWGIgMpcZp4rxUE3SLr0WaYy8ZjqV+VioE/7JXpeWVx1MDAwNVx1MDAwNa2DKbVzqlUwXHUwMDE4TyvFXHUwMDEyPSege2v0nEYx6HcnVP8kLFBcdTAwMWJcblrS8yWV08G5toMkpvuqz0ExXHUwMDE4o40oW4lwXHJtXHUwMDFkXlx1MDAwNlFMv12kdVxm6Lkl6l+sw2K3a651JZWbUFx1MDAxZq0gyYu0Xlx1MDAxOaLeiPqZVKeVWsD1huhcdTAwMDeuRTVcdTAwMGJt4Xb2XHUwMDAzy9SZt7hsQdvhlOtcdTAwMWKHte6Uxv457Fx1MDAxZtPza9TvQKTP4rbit2ClTnpcdTAwMDa1P5+YOmlcdTAwMDT7Qypbtbn/y+1cdTAwMTQ0xjIw11SlWNVL16b0jIs6xovGNOB6w36Jx6pcdTAwMTJ1MUfmWlJCu2n+ykklqnfNs1x1MDAwNmOaj2l4run58YRkwaJ+jSvnfE3S3GP8cS1cdIs1nqcwwdyij/WJqS+entMntUNcdTAwMDa1MclBncavbu7l8agrXHUwMDFhs/ReLiPpXupcdTAwMGI/w+b2oUyCecI8nFx1MDAwNPRJ9Vx1MDAwZqjvwZTmLWFcdTAwMTktaKtCMk6yOuXxizB+kLeAPrlN1J86jWcgaDytyIzRJDBybVNcdTAwMWSigjHq10muY2pjKTHz0H1cdTAwMGV5XHUwMDFlqiSnNNdmbLSRXXzW1UW/ZqXlXHUwMDA1zblF7aY216Y8XHUwMDBm1K4wqXXDiPpcdTAwMWKVbO5cdTAwMTfqTNCWXHUwMDFhxmdcdTAwMWMmXHUwMDE4XHUwMDA31DWwzLWubcZcYnNQhoxY4WyeijHV1ShcdTAwMWKZzeO5kNOE5Iau11NZrqnlelhvrLRtKijyXFyy3mDesm0j3SRZNNdoLFg+XHUwMDE21y4uMTZBclx1MDAwNj2aXHUwMDFhWa9i/tRCj1x1MDAwNjOs0IRXMz1SIelcIvCCsGOhR7NrhFx1MDAxYnM9YjmsssynZcdpfUlYXCI9SsqEXHUwMDFmx0FcdTAwMTajLnvlbuN2+NRcIuwrJ6VpXHUwMDEwlSdBr/yyhmtJXHUwMDFlcqlmekpyaUNugE9cdTAwMTXWt1hndZgxzOiwoN/U0jWjV1x1MDAxOM8x9Fxu5cMoSMcynkJvXHUwMDE2ddZQJ+TBPFx1MDAwZvPQQ7luXHUwMDEyXHUwMDE0gVx1MDAwYu1cIrWNxq48pfE2v1x1MDAxMXZcdTAwMDZcdTAwMTijfpytc+laUDxZ4Fx1MDAxYZef9a1qM24t6pxhTfq8XHUwMDE004pcdTAwMTfNcu/otnk5eVwiO9LnceuXpuWe91x1MDAxZoX+ZFxcvzq7L3+p+uWBmEKPgqhcdTAwMDTZo7lnvVx1MDAxYtOcof82YU7XXFyrjcOeuUY4XGZsSIKeRlnTh6QuSO5cdTAwMTKWu37JXFzrl1x1MDAwNeae5lx1MDAxZNgxMXJLWMvyXHUwMDE0QJZTPSnZpLPoXHUwMDA3zVx1MDAwMdlcYsJcdTAwMWOqXHUwMDBi3+k5XHUwMDAx2Z8u5GXCcjJlXHUwMDFjsEm3p+hnWOD7RUg2hb9j/ElcdTAwMDbnfy/0lXG1XHUwMDEyLetcdTAwMDTfV8yrZX3FOJeny3pWor9cdTAwMDdypq9cdTAwMDHqQP2D7jSA3lx1MDAxNG+oXFyeynUn83sg/6S3eFx1MDAxZcmLmF0je7aCXHUwMDBmKFfSXFxcdTAwMGUyXHUwMDE4XHIwvmPMa6Ww1IfFtYv6JCTZ5vownuhHXHUwMDEyXHUwMDEwJqXPIPxP5UVcdTAwMDc8h3hGoFKZJ6wrXHUwMDAzXHUwMDE3UVx1MDAxZtqKa1x1MDAxM8JcdTAwMDGRPkNcdTAwMDNzXHUwMDAyxpw8MIB151x1MDAxY2NIdjwsXHUwMDA13H+yXHUwMDExM32bhEk1XHUwMDFko6qY2UbSXHUwMDBmM2/ApX5g5JLwmedcdTAwMTayXHUwMDE1dVP7XHUwMDFiT8N0Plx0XHUwMDE3p6bOmjS4w31cdTAwMTDm2lxyYUNcdTAwMDBcdTAwMWJL91x1MDAwNOiPzTJHfFx1MDAwMTqFdvNcdTAwMTgneVx1MDAxYW96XoIxXHUwMDE5dE2Z7sSUKYPDJKyrsKFcdTAwMThDup/kYXlcZnGtX1pcdTAwMTlDrme8Moaoy66cL40h9GDKdpPHkGV9ko6hoPsnzJtIX4NkwM8om+sznjKrRzBvmvGU/oDxNVx1MDAwNJaSTV1uW5WeUUo5RZyYsZtfm9uxXHUwMDAwdnHFjlx1MDAwMYfJhq7YMVx1MDAxZcNcdTAwMTW9qFx1MDAwMmNX7Vx1MDAxOObDXtgx6lx1MDAxM2Ml7Fx1MDAxOHS3NNlcdTAwMWLDozpwTiwwvFx1MDAwNJ6Q0Fx1MDAxY01cZk/MZ3hYacqymI5cdTAwMTe1XaTXZDiTNcPrJuBDZNvSsrWExysqgyssc8XFNci8ddFcdTAwMDdvXHRcYte4XmCP4UZFjFx1MDAxYl9cdTAwMTOw/2hbpVjDuJlnMVx1MDAxNymjnYLHjeuFPuJcdTAwMWFxeoxbhLpLhiNcdTAwMDLXXG5500fmumj7WZnGXHUwMDEx80tYWIJsS2CX+Vxy7cdvg7RO0rmIrynMN7eT7lx1MDAwZlx1MDAxMsgnvlx1MDAxM4fom7JcdTAwMTXoN56VgFx1MDAwN4F/XHUwMDAzu2LI/PK15OySOEHR1FlN8Yr4XHUwMDFi+Fx1MDAxNl+rJct4VTLcvj+zXHUwMDA3eVx1MDAxNWDsqc5KVMpi4Fx1MDAwNH5cdTAwMDLNXHUwMDBm5IjLgVtcdTAwMDVcdTAwMDZLJ4aTkc2MwJm6SSpXXHUwMDEz8CPw6Gw9fK1cdTAwMWYvy2hcdTAwMDReVZUrbVx1MDAwM1x1MDAxZrSW7UHmXHUwMDFhOPRcdTAwMTRcdTAwMWMk4DpD9i1cdTAwMTbjYnh1nI418Fx1MDAxZWON53RlsDzWzKHTOVx1MDAxNSHrMF9LgmJ27sChwePKzIVIziX7I3h+XHUwMDFmvk3emv1cdTAwMDb5XGZ6KWdme1x1MDAwYl7O11x1MDAxMvBFrpN4XHUwMDFhxprsLXhKyvW7XHUwMDE289moPjU6xVx1MDAxY3xs5i97LVx1MDAxMFx1MDAxN30j79R+1CshXHUwMDFmXHUwMDBif4OvkT9SM/hcdTAwMThcdTAwMDUsP3hcdTAwMTa1RS35MFxcb0maayXLyCR0ejDO+ETcx7BffS1PSSCbzI2iMCDeXHUwMDAxjk740sDfmH96LvCuTPpcdTAwMTIk0FOaW8Y25lxmSY19I8Y16Fx1MDAxMZepwa9cdTAwMDWm67SMxfyLsa+mmKehXHUwMDFjbLjBw0kwXb2GcUvL9vLAa0X+XGZ836X6XGInpuzDcNlueo16tNRcdTAwMGXwXHUwMDAyLlx1MDAwNzuNuizmdVSG7Fx1MDAwYr4nlVKw/J3rJL0usD9cdTAwMGW+lbDOUTnSqzHNXGZ9XHUwMDFmsFx1MDAwZZoxXHUwMDAwb1x1MDAwZlxm5kN+XHUwMDEyyEyN+SPZXHUwMDE1kieSdXpGamOmKWaNXHUwMDExXHUwMDEzoJog81x1MDAxYfhCXHUwMDFjjGxUfcrtnZKNYvmGzeymz2R/XHUwMDExekZ6TD5cInQmMT5daj+B0yg/rZi5YptKYznluMI0xXX0v981dpx96DLaTHVcdTAwMDaprcvb56ijwLGIXHUwMDA0ejvnXHUwMDFmXFw2flx1MDAwZYxcdTAwMWVcdTAwMTg/PEF/6pNM2Vx07DGPK3P6mc3P29S2Mbct5UdcdTAwMTW2MXyNcH1mY7qwMVxcNujPOFx1MDAxN8lcdTAwMGX3N2+D15lr3SnbmMU16Jxt7DLXOVnmenyNuPKSXebnkN4v80euXHUwMDEz8ZKMXeZrg1x1MDAxOVx1MDAxNyVcdTAwMWZcdTAwMTJ2uWvsclKywenouZPKufHv2b/k60t8lcohftBdxli+b6CWMZZ4VGGVr2auXdSFmVx1MDAxZsRDuvC5IVx1MDAwYpLjRcRD2W5Bf1xid0LmNlxcdkrySLpSXHUwMDA2Xtjz8ixXKF+zON7B5avAasFYRTKblrdm1yAjkGuOI0XANS5cdTAwMGZOXGI7PmVcdTAwMWJVZF2QrOPMXHUwMDE5gGW4r05jRPw+gVx1MDAxZK9RfaadZFx1MDAwN5O0POJVXFy+wnw3LZ+UzbXoXCIwcle1jV9bJ1x1MDAwZVx1MDAxYTBcdTAwMDdNfapxOIDOXHUwMDAwXHUwMDEz8uncgtszTiFcdTAwMWWCWFx1MDAwNo+10e9cdTAwMTJkOr2vTv5gXHUwMDAztVx1MDAxMfZVJ+mcaOpcdTAwMDf6XHUwMDA2XHUwMDFlSrJocLNcdTAwMTJVUzwpp98hXHUwMDBi6Fx1MDAxZnh0gD6JXG7LXGJ+XHUwMDFijNm34rEvpb7QQHNcZojLxDN5tcMoPyuvqd9p+ZIwmIL+l2ayKYhcdTAwMWKl5Vx1MDAwNzrloYpkT3B5+N2pjaf7XGanL1x1MDAwNpCXtDzNN3AgXHUwMDAx7ufhK6I87Kw9K494XHUwMDEw24gkMDiHOlN/NED8i/s0tyPNKKL567FPqc+NzEx4LlhOa8r4n7HNPM/IfeqTxtZCZ1x1MDAxOFx1MDAxM1FcdTAwMDfJc5jqR3dcdTAwMTKamJUk3UNboGuKcYP8bdLn6UK/YnOteHzJsTP44VxcR6xmMbqQfSmuQ5u4LPpYs2d1kE+t0lx1MDAxOJ9cdTAwMGWhJ1x1MDAxYyMzsTiyp8YuzPvE3FMxJzS6J2fXWE96szGgtpl44MTYUNi7kuGRjMMzv6pMbT0rpt/T2F15hu1cIlx1MDAxZFx1MDAxYs26ko71/j7BXHUwMDAw8bip0Zs8+U8lxWNAPlx1MDAwMclcdTAwMDJ0TMx+K5vfJM2ziV/z97y5j31VxLBcdTAwMDfEVUiXo1x1MDAxODxcdTAwMTE2XrC+9Dk+hPLgooLl0tiJ7DVcdTAwMTlcdTAwMGXr7KdcdTAwMTFXMtdcdTAwMTH/gC1cdTAwMDdeTtNnXHUwMDE1mYtcdTAwMTi/iLlcIp5Vs9Jr07SsZF2Bv9RnvZz1J72vzD6ZKct4SddOyCdcdTAwMTjgt1x01YF4XHUwMDEz+1x1MDAxZlxcXHUwMDA32ahcbuLQaXuClCPjXHUwMDFh6Vx1MDAxZuSYY76GI1x1MDAwZiap71x1MDAwMc6gUo5sw2dccs5TXHUwMDFlYThy9tr0gv1Y+O+L6+BcdTAwMTEpT7TZt2TMYq7EPDHzfPiOKU9cdTAwMWPMuFx1MDAwZXA75YlcdTAwMDNeM2B8gq91bspcdTAwMDaM78D8i/JsLNLxU1x1MDAxOD/z22yc6lPmbMy3YzudO4t5Mu5DfLJcdTAwMTTM5mhqnk88XHUwMDE18WcjXHUwMDBmaZvyxq7Mr0G+XHUwMDA38Fx1MDAwNyXLeXo95f5kO2pqJidhUjecPFx1MDAxYcj5nDJcdTAwMTajLMk5sDpta+onXHUwMDEwJ8/PynOM2nD6Umbu2ZeckOzbaD9hNMdvZ9cx9ohFXHUwMDA3s7h6kX1cdTAwMDSbY97sI4CLldhHQFmy7amPUDMx72hgp9ihjH8w+56fZHyDWYxj5lx1MDAxN6B+XYmW/Vx1MDAwMtRcdTAwMGbfb9kvgFx1MDAwZdemy35cdTAwMDGulWXWL5jHg4qY6zri75BzWZmtQfBv/Klccj9b8jNUuqZh4oRF9sck+6TRqu9cdTAwMTKbdVx1MDAxMo73dI2PN7/GMdfU90Wd9cmy74tr8WTFv8Rz7Jmdnfm+xIXXfVZcXEuqM99cdTAwMTd9k2zbyfflsSuepONV1zPfl+csqi7VQ/ZcdTAwMTlcXHjF91x1MDAxZJC8XHUwMDA0q22zXHUwMDE5p3pLvu/iXHUwMDFh8TKOd1x1MDAwZlx1MDAwMq6Txo2xk/BcdTAwMWQ2zTwnXHUwMDE5pFx1MDAxOFx1MDAxYtuVopFcdTAwMTde5ypw7Fx1MDAxZetoiZFcdTAwMGboQtXE/aPa7NlTxljjXHUwMDBm6/RcdTAwMWH5eGZ9IIBfVDPPpvFLn1Oeya9tMJLjmXImX+RzJeY+4oz94/l4pes9Y8RiZjpcdTAwMTFG6VqmafeSLdl/bVx1MDAwMWNcdTAwMDI+eFx1MDAxMVBcdTAwMWZ4fZS4Q9H8XZfQXHUwMDBicFx1MDAxZsLidJ2UcJ8xhbhTUp2ktkNcdTAwMDRcdTAwMWNnLk3ZXHUwMDBmJz6J8oTVXHTHRDA+5COk5ZVcdTAwMTln+NjBlNdIsFx1MDAwZcSxfbpGba8m1VRfa+ZcdTAwMWHhXXpcdTAwMWbGXGLjN+F4NeSvyLEzcEj6XHUwMDFmbN0gMeXz5NfhOYjPx4hcdTAwMWJcdMTUKiZWhlhcdTAwMWN0XHUwMDFl11x1MDAxNLdcdTAwMTH2r4Z553iHNvfUWCbM+FxmYE9xn2XWXHUwMDFjq4inpW2pXHUwMDExt8BnXHUwMDE39lx1MDAwZnWPOeaEe1x1MDAxOVx1MDAxZnGNxq3fNe0hfpfWRfNcdTAwMTKnbSRujZhcdTAwMTJ811x1MDAwNPjN9Zk4XGLsTHGgXHUwMDAzM1x1MDAxN+Tbglx1MDAxN5TAR6ZmzE9cdTAwMDK23+fp+vKA/W6yz1x1MDAxY2tcdTAwMTcmXHUwMDA2SPrLPntNp+vQtomjs78vQl7bxtpMTZAvgfJkw2dYWTL6T+WpXHUwMDFk8PWnZs7QN/BZ4ub9gcHiXCL527XAcHfmU7xcdTAwMDZkgc8y54uwLsLxXHUwMDFhwleuXHUwMDEzc2bWPs+Bv1x1MDAwMflu4Nj1NCZcYlxciMGnIdc6SJ9Dv4GjQ5/Y/lRcdTAwMTPoW8D839iYXHUwMDFhZEtyvCyaxVx1MDAxMvNcbmvrZu2Fv1x1MDAxMy8uw0eg8vgku1x1MDAxNc3KI8ZcZp8nttP41KSSxr+hX2FSSmNeMcetef3WrCtzfD+NqT9cdTAwMDepzawgJlfg2ELC9YHPl1x1MDAwMvOd56Gs0Fx1MDAxN7NcdTAwMGWNcoHJXHUwMDE34N8hj3guf1wiZqkjnn/kXHUwMDFmYH1cdTAwMTg4YXxP+Fx1MDAxZIxLfbZjbO/Zz2Ssq7Gd4zhcdTAwMWXbZZStklxcXHUwMDBl0/JVyIbF/I1jeXmOXHUwMDEzpnUqYCbH9zlnXHUwMDAyZclcdTAwMWbvN0xZsudUXHUwMDE269njgGNcdTAwMWZ4dtliztbnuPmsPPVcdTAwMDdcdTAwMTiGtfByYvgqOGZccj6VZH7DeoJ1i1x1MDAxOLFBXFwjfCmba1PznXVcdTAwMDXrXHUwMDA3XHUwMDFjK0FdtZRTclxmXGbyxmvrgcmZmFx1MDAxOJvK9yXnjEM1bXBcIrZcdTAwMTlcdTAwMDNcdTAwMTHfiapihrMkP2m9VV3heJhZd1xuzPNcdTAwMTPCPuJccrzey7aT+0g6x3jIfjqwXHUwMDAx5fPMI4zd6PI8VIrDgLBcdTAwMWJxLcHxa9JcdTAwMTfGLsYzxHS6bL/4XHUwMDFhry3yWrVg2UW5Yl1VjH2y4e+TvnBcdTAwMWVcYuaMn5OQLSuY8oTneuaXQ2ZDg4dcIi1P41NVpjyNddJN17Uhp1xcXsJcdTAwMDakdstmu4byUSDTcZpircaUrybhfJxKs/JcdORcIrVJgttcdTAwMTfBv0c/XHUwMDFiRf67WOdYJvvajM2IXHUwMDFmXHUwMDBmXHUwMDEytr/ge32OXHUwMDE5XHUwMDAw61x1MDAxOOsrXHUwMDEx+Vx0WEuP4JPBf0/7YnIusG4rzPo95lx1MDAxNjH3OsdcdTAwMDGZXHUwMDFmXHUwMDFiXHUwMDFiXCJNTlxi/Lg8ry1cdTAwMThbXHUwMDE1XHUwMDE4f1x1MDAxM+0opLaG10KCicnZXHUwMDAw3lx1MDAwZlx1MDAxMMPD96npK+IgjPWmXFxcdTAwMTF8XG731cfGV5jb1r3jwMyTzzm2K4NcdTAwMWHkjfpDeM6+Nq/fIFx1MDAwZVxcn1x1MDAxOD8/QEwm4ThcdTAwMTDbXHUwMDFhxCxrhFx1MDAxM1x1MDAwM1x1MDAxYrhcdTAwMTNyzlx1MDAwZs1cdTAwMGKVXHUwMDBm4fuzrqA8Yid5y8SGqmmdxNd4bavK6zQmlnxcdTAwMTOwXFyn6zZhclJkPaGxTf1cdTAwMDPk8qhUr1x1MDAxNK/PMybWU12LXHUwMDA1x8JxXHJrnqVcdTAwMDC6Y1x1MDAwN9xO9lx1MDAxOUgmaF77kInSbL1cdTAwMDFcdTAwMWOHZFx1MDAxNrH1IL1cdTAwMGaxzJg4L3xcdTAwMDbwXHUwMDE4g8eEV/RcdTAwMWP2V6ZcdTAwMTnch10wPmgxSG1FoFx0L9hcdTAwMDeh8dLpXHUwMDFhwpTzXHUwMDFlOH5cXJ7McoNcYnNI3rtjc09VRsUu7Fx1MDAxZvCMeFx1MDAwNf9t+lx1MDAxObFtgF+iwT2Rm2JsMeEl2b1cbnhcdLVcdTAwMWKcXHUwMDFk61x1MDAwZdSWiSlP7Y9cZv8xeWBcXKfmdVx1MDAxOcOJTNmI/jLcaVxu7mjKkv2bcSfyw6mfmvM4imU140TglOTDYJ1FLDhRTHLbXHUwMDE1nPvAnIoxgPqEa2SH2Y9cdTAwMDcvXHUwMDE5aHOtlvKaumXKkVxm9VOeXHUwMDEycWxUh+yHpuWiXHUwMDE4volmXHUwMDE5m6a8R3RZ/yF78J3NXHUwMDFhJO6tYW3aYjlI6inPXCJcdTAwMWRcdTAwMDI3Z1x1MDAxZr+W9iUmbnRRXGaNXHUwMDFkmHEvbdZlgFx1MDAwN9WE4zU8XHUwMDE24DN5k8+VjlnE+XmYXHUwMDEzji1cdTAwMTSxLlx1MDAxN2J9NF1bMGvxuIf8ao6psFxy4lhcdTAwMTf7LdEgjUtcdTAwMTCPimblWUZ5XHUwMDFkxOAql1x1MDAxN0FUTddL6uzjozzrXHUwMDEy69BcdTAwMDDxP826gFg01lx1MDAxZaLyOL1PXHUwMDA3bMPN2lx1MDAwZa/TI88wKumKwVx1MDAwMMSlXGKfXHUwMDEx34B/VU11usxxXFz2NUxMZcL2L41lcKxcdTAwMTlzUFx1MDAwYjjeQfM0TXFjXHUwMDFj8DPYb0dbXHLOcC5AYKfjxfiyf1xmK59gjEhfRcpDXHUwMDEyxKupLeTTzPIkSmPwI46/mlxcR8nzifgnjzPyMIlXRo20PMc/kb+pTW5cdTAwMDVfS+8j28cynL1WSy6wjkI+cFCctSFcdTAwMGad1lx1MDAxYztf3I+x0Wyzk/qsXVx1MDAxY5fFXHUwMDFhXHUwMDBiODavqXNcXFx1MDAxNjFcdTAwMWPEXCLQ92pavlx1MDAwNH+H8z6hz2n5XHTivliPXCIsXHUwMDAx/+e+XHUwMDA2/Fx1MDAxY2pcdTAwMDPLaJ65XHUwMDFiPVx1MDAxYn48yVx1MDAwNuctjFMuqNjeReAjfM3YSfa5y+zzoz0kXHUwMDFi1N5cdTAwMTixUGF00Yw7zaHiXHUwMDE4LcleWlx1MDAxZX1Deeg1rz1x+Vx1MDAwNDqN9Wrk0MzGXHUwMDE08Vx1MDAxN1xcI/tcdTAwMTDdpOPGsfHVdlwiJzTbXHUwMDFmwWNZ4Gs0XHUwMDFm8Ov5mlxuV8ZcdTAwMDeYXHUwMDAwXHUwMDFmh9ewXCLk2KA9vE4xMePbJVx1MDAxZmuYli9JU+diflx1MDAxOFOIt3COXCLHdtJrPL7Id0BcdTAwMWPHyFx1MDAwMPqf/iZNvJpxm69cdTAwMTk5Iczvl9O+XHUwMDBmbOZyXHUwMDE451x1MDAwNNjM/dTs77GMzuY8nsnybL6ZW+L7Llx1MDAxZDlVoWwk+n9lNvI/drK5//Sf7WkpsltPXHUwMDBlvy/mLVnnf99mnTdknT9oQqHn2PKHna9nw9Zt1SWmNfvtIf3tplx1MDAxOT31yl9vRq0vdlK5bU/rV0f36W938e3xuPk1yJTbN5M9re/u5ql5aT9Sffftr2fjSs97oVLq9C5OTm/9aWPqIVx1MDAwMmSfKnNcdTAwMWY9RzauTpLmpf9MbFx1MDAxMMyrV/4yXHUwMDA0mlx1MDAwNvWr4TBcdTAwMWV6XHUwMDEztIV+XHUwMDFix1+79JyBX+5cdTAwMWaNO4Vyt307XHUwMDFjtsXJS4ckLijkx5BIWFx1MDAxYtJiTWWS9tfhUyNcdTAwMTK9xqV9U7+dXGZPL09u6nJEffQtXHUwMDFhXHUwMDFip3V7QdaTs+pJXHUwMDBiXHQxXHR9KsV0bIpcdTAwMGZcdCF7XHUwMDFm5eOvJ8NYXkzbt7Vsxj5Z2HK3+eXioSFvRPr9P1xuvbxcdTAwMTerM7v1pdal549Rvv3lQrdcdTAwMGI+/H1k6XfLXHUwMDA1O2lcdTAwMTePXFyjLVx1MDAwZlZ8O74n3/DyTFxmS1fJ8fW3aORcdTAwMTe6g+dYVSdcdTAwMWTJWf5O++rk6VshjC5cdTAwMDbtk7Njb3o1XHUwMDFkuNfV+5PTu1BcdTAwMDR3o1x1MDAxN7S1eXVmV/qwvCNm15W7i2mr0O3XrMbX89rZdWB5XHUwMDBmXHUwMDE1efFcXL88eWqcW736ZfjYUCcv7Ut7ULm1h+1pntqWX9Sr9qs3PH5dveHXPeu9eGW9V1vqXHUwMDE5Uj1KfCucY9xcdTAwMWJuS1x1MDAxZJFcdTAwMWNcZkUnuocntWVcdTAwMWXamFx1MDAwN9Kh41x1MDAxZc3lqH5L7ZXtaUtdPDeKXHUwMDBmz42rXHUwMDE4z+4u6m2v1Fx1MDAxYmyp9+aV9d7sWe/wlfVcdTAwMGX3rLc0hqzt1CGqt1xcXFzIbLAyv0GyRVx1MDAxZaPjV7a5tE1cdTAwMWYmwdJcdTAwMWOXplx1MDAxZOmPSV5cdTAwMWXaX1x1MDAwN1x1MDAwZWfPbCv3Wp2Iwj3lpyReO26kXHUwMDE3W8bpYlx0XHUwMDEztsl5XHUwMDEwNZbvu0vv6yGz/eSY2DT60f1cdTAwMGXMZmzU38rFyahxdXbTIFx1MDAxNlvH91x1MDAwMuGXbKhcdTAwMTmep3YhadzFbrnPv3fJ5lx1MDAxMHaHwzhJv1N9rS/DfuMqXHUwMDAw/lGfJub7RfhC491v1Mx4xtOjXkudiZa0gsZlQ0TqhLBzSLh/XCLiu4shYfZ943J41/xK3n+fMVxcNWk0m8D3XGJcZqdO+Nv1yz0x4chcdTAwMTAxjlx1MDAwZeErXCLy87bN2rL6bNNWMJHbNv4ujl9al1x1MDAxN6J+eXbT/lJi3G6k91D558bl8fRMndC4XGaHrbtqt3lJbVx1MDAxYS4wmtpcdTAwMDZbOWheXjy3jy+eSdYxVlx1MDAxNuxEjeXj4ntreJE0zqmNxVx1MDAxMvWnNOEsXHUwMDEweJW9I/L6eYdcdTAwMTdWe2zuR7FM98B7XHUwMDFiaNMvfEeWXHUwMDFkVvjJ7nwhO3159kDyJC6+nty07sLbljpcdTAwMTnRM0f1q7Np86p7T8xsXGZ7dlxur1x1MDAwNjYtSrNcdTAwMGbOXHUwMDA3qd1h2/RcdTAwMTJcdTAwMTeOXlx1MDAxYbeNpHGFcUakbkBsvNxN7ZZfJjlvqfyoLv2nlio75SRPnku7eHZeTud3/ML1XHUwMDE05/KA+7st2bil/sNcdTAwMTaOeWUjXCJbTr91LidDamfS/uKPTy/Dl9ZcdTAwMTd/SjI5XHUwMDA2XHUwMDBmqCa1edtoblDPXFyGcH/5i3/buFx1MDAwYodttvFY6SrZWdtu+mP1W3LyXHUwMDEy9+/75L3aZ6XjUlZcdTAwMWVQz67+XHUwMDEzw5WV8139r06rUaDPeq/pf4xI9a7+W2gnefqv6b9NXHUwMDFl4M7+V6PjXCJnM+zd/11zXHUwMDE0XHUwMDE2zmqEI1GwsY1UNzjcsH518nWuXHUwMDBixVx1MDAxNEOMV9xvfTlOwCFcdI/G1O6Zl1xmr+aJV2BlMELW1ilcIlx1MDAxYlx1MDAwNaH581xcTLBcIniK3X9f6Hfy/E+R6TBcdTAwMTVYlXiCXHUwMDFjnFwi2nc+pnE+659cIpJSXHUwMDEwiKCjLjutQ/B3qlx1MDAwN+NQn1xueYroXGLVjWtpmVx0vFx1MDAxY677kp+j8HflXFzAQ31C5u0pXCKA0zF9XHUwMDFm8nMqhTGyyUaIjp1cIqpcdTAwMWYhslx1MDAxZlNfTvqon9qEyNMo7KFMd4SoximiyLez+lFcdTAwMDf6UX5C1O40QkbnmFdcdTAwMDLSdlwi4oTflKmb2oHoXHUwMDE4tVx1MDAxYlx1MDAxMW4qr+hcdTAwMWVgYVqed6s8UZ280+K0eMNcdTAwMTlBQW+MiN2TyVx1MDAxOEGd7X5cdTAwMTDVR1glP+VVMGpcdTAwMGayiHtjzmw45Sz1YUBe4lPQv+nPx6iH/tZHZpyqaV11koWjvplcdTAwMDfMXHUwMDBi9ZnHXHUwMDFjfS9hzGVcdTAwMWSZaz3MSVx1MDAxZOMoUFdwjjGpY1x1MDAxY6x6XHUwMDEyp/OJsatizJEpRn93MS90X1g0clx1MDAxMrOcYFxcmaPTs6hcdTAwMGbi1HD95JSzK0MnlXeSzyPC866Rzy+TXHUwMDA3srM38WCBnalvkeHR5LXOcf7sonU7XHUwMDE0kNf2XHUwMDE12bdhXGJcdTAwMGUxjKR9XHUwMDExS3D/7oR0XHUwMDFiY5FUkFWS4rhZoScveDrDcfKMOVx1MDAwM4y8dtzTN1iPLNhg+Xk10ptnsrfkT1x0v3xr3bS/njx0XG7ItGK/ZGQwXHUwMDFkkVx1MDAxNmBf2fo2x+B1fKgguzVcdTAwMWGMg+LRkOZjulx1MDAxMydFVYa14y+vwUnsilx0d+JkOVx0k5NCpfBcdTAwMWGcrI3DqLvTTlx1MDAwNKWyrlx1MDAwZTbj5CsxaPLLMVxi+mH0XHUwMDE23JF1gf5cdTAwMDZWoM5cdN0zYZln/Vx1MDAwYqDH4Fx1MDAwMKOQZZ2eZ3CKdJExweK2RCQnvFx1MDAxYUg6QjiDVeRTZKcssM60XHUwMDBiWSXAiVx1MDAwNdZMuVxyrP+1tL1VYFx1MDAwNJfHs7Bcbk1cdTAwMTg44mh1TyjWX+hjgetWVezwmDImPmFFXHUwMDFj41x1MDAxNTJGVtFcdTAwMDdEXHUwMDAwgblcdTAwMDbHXG5mXGbpd6zWPqHv1ST/xP1cdTAwMDGOnKNcXNeMLVaKwI9LwfSUfXNgx8BgYW8suTyyempcdTAwMDEwXHUwMDE1UbYn4GiFMZbuw86DL9glPHji/vBcbizGqoY5n/0+YVx1MDAxOeC5LadYR/0o4FmN/lxmr833KnCMvtcwJ2jLXGZcdTAwMDOnLFx1MDAxN8A+9K1cdTAwMDdcZqTnXFyibu6z5LqBkahjmtpcdTAwMDC0XHKf52Od1o02mv7T33XsaONxXHUwMDAy/vPYT0z/XHUwMDE5gy3IXHUwMDFjVlx1MDAxMljueNxIrmCn6PdwMNZcdTAwMTjLXG7G71x1MDAwYmdcdTAwMTVDZkw7eoJlXHKrXXzvLX6vjczcMHbzXHUwMDFjmjlrpM9YwnaBekhcdTAwMGbo95s+Y3Fk+lx1MDAxN7K9XGZ4XGYqPKdnXHUwMDE4XHUwMDFmjMtT5nNq5nrWNq5zYsZQXHUwMDE4uSiYZ1x1MDAwNmibkVx1MDAwYvPJ9oTv58hyxbRV8fixPleNPk+NrVxijK1IOilvI6zg1UXGkeJkXHUwMDFkN1xuR1x1MDAwZlxywtFMvGSZd1/a5E9cdTAwMDaEe8Trr05cIo5cdTAwMGbV/OdcdTAwMGKyXHUwMDE1iFHBXHUwMDE2MF/oV8ewXHUwMDA3XHLqj+HyKf/nXHUwMDE15FLC98ImcFx1MDAwNlx1MDAxYbKdZnx/XHUwMDAwuUamyWH5flS2Yat28f2giNjeq/j+NEzi3TiOXHUwMDFkJKVX8V0rwG6fXXasmMfq1Ph1fD9mO7yr/6FoXHUwMDE0qq/j+8jc/kH/b46q4l249HRux1x1MDAxOGuPi/w5wyHGUHy2i0a3mLdcdTAwMWHd6tEn9Pfq3rRcdTAwMDN9Q/3FfX3fs7f4voJXfPrgUFx1MDAwM3CoiVnxrVrh3PdFtiX5wn2O8U5X7zlcdTAwMTRnMlx1MDAxOTxcdTAwMDP1XHUwMDAzXHUwMDE5Y314XHUwMDE1V0rK6oc6llx1MDAxMFx1MDAwYnuVjNVIx+o/kLE6sqlfo2MyJN72g/6rs8FJ4VU6ltC8/aD/ldIx1mI39d87levcPcXtNEMkfKpfhVx0j0GRUNZkjLC9XHUwMDBmarD7pFx1MDAwM+djMedS4Fx1MDAxM2SXqkmV/S18N75aXHS8hXUk4ExB5iX0vZZ+mvveakPCi9fbXHUwMDEw3nFfrE+D8yXbgVxmbzm3XHUwMDFkvCuzJitz27F0T0Y/z+jZdtK49actqrt1eSzi26H+VmSbMS5cdTAwMTOPY71hXHUwMDBlWsPO5IdMnG+DXGaWppVcdTAwMWbiXHUwMDFj68trZDDh3b27ZTBcdJKz18lgRDr4g7hWiGzOV9m5OnY+/6D/7S/b/JUt/Vchduvs7r+u1sLixv4jlrmO20Zev7I/3K3LyU2sXHUwMDAyXHUwMDFlXHUwMDAz8FxyyGjEJ2dAXHUwMDA3bvrbeFx1MDAxNn+/XGZcdTAwMTa8jH2g8ey7xd9cdTAwMDfYod41PL44q7NrYlx1MDAxOLA9X99qa1x1MDAxYW+wNbxDP8O7XHUwMDA2vIPD4GZcdTAwMTd2xeJcdTAwMWT+/a6c+eZcdTAwMTXOTs+zb/tL7VxmTnhcdTAwMTCB9So7XHUwMDEzkTzulPGyqCC7cDPObpXx3XpTtqv949Lr4qGDXHUwMDFmxUOn1UEwPYu678GPrFx1MDAxOT/iTCbyi+DH1pOZv15/qmR9K/a5XHUwMDExv1x1MDAwYuBcdTAwMDMn7G/DXHUwMDFmwy6UqcCOoFHqd8vUz09SP16xXHUwMDBmxWWGqVx1MDAwZa3oznlcdTAwMWFcdTAwMTOg76nPjWwt40chO5djXHUwMDA2XHUwMDFjXHUwMDEzY5+HnzPzfzJlXHUwMDE3eonsq4B1jPqQgO/BbzVxRvAsnOpk4pDBLD5cdTAwMDadxHeOv7X7aWxizDFA/qylfUN72Oe20/gn1TmY++UmXHUwMDFlQpxcZnvhyJZip8MpZ0qR34WsbrK3wDK6Rna0/daYnHpDTFx1MDAwZVx1MDAxOWHY7bngl3y6RE1Vzmf8XHUwMDEypzdhXHUwMDFkLF7wy8w9/+aX/+aX2/llfcYvx1x1MDAxY08ycSvooLWI8VRTXHUwMDFmq4rYiuDfe3P+aeJGjD2m/Fv5ZOX4XHJ8srDEI3FcdTAwMTKfPeeRyFx1MDAwMo6qKuxcdTAwMGZnMWO2iYSLXHUwMDEz3lx0d9hYxC5Zk5XiSfGVsiYq0U75pfFoXHUwMDE3q/3B/nXuineLxpezXHUwMDAx/W+zjr1SxuKFjME/lyuxL5ZcdTAwMWRcdTAwMTMrg2xcdTAwMTlMLqecrPw89+vVW7nW8FxyXFyrPDWZiPX5WlxidjvwiVx1MDAxMcXajG8h4zHNNs74Kj1tQ4dcdTAwMGbpq+zCnJB3p70yboRcdTAwMWRkO+qskK2tirL9TmuvRrZcdTAwMDb19+BDelx1MDAxZS/qpZy9XHUwMDE2JKn8XGJeV2D5ioFdhGXHRWSCnqbcaXFcdTAwMWbWXHUwMDFjcN/xW237JHhcdTAwMDN+8clcdTAwMTRcdHHjrD/MmbC8XHUwMDA2xzjG8fykq8KsP7y4598ydnhcdTAwMTmzl2OSIWKSZs2M10viVIaqOHXIcG9eXHUwMDBiyT+xP/lT2FWavIEzTs0pRoFVWY6zYOfXPM5cdTAwMTLw+jp2XHUwMDEyLsVZZvf8W65cdTAwMGUvV5NgXHUwMDFlr+ima3SN+VpcItY7mX9xXHUwMDFlXHUwMDAy/LjZd7PuWkWeXHUwMDAxbGUxTtcpS1hcdTAwMGa0WN5cdTAwMDY43W5g8jywXtQz65aV2Zrd3Zvl8a15XHUwMDA14MpqkVeA3TE48Wrmw/BcdEUqYD+afVx1MDAxOIU1MOxs+MUxv6RK7arWqq9a21x0f1x1MDAxOFx1MDAwZimTTFx1MDAxZVx1MDAxZr1GzrF7Y3c8pDQhv+BoS47CKzlbKZNPUON1b+SGkG5CliaVdM0+RH7PuVknJjtrYV2V1+jZX8daNV9PsMZt1vmxa/Jmsbbcy64tXHUwMDEzjpq1U/xtYlx1MDAxMFx1MDAxY6NcdTAwMTYmn4HX7oFZbbMjtMB1Qp4x109cdTAwMDHW2zNtffPaaFx1MDAxNL5lXHUwMDFkKOFT6HGSyVx1MDAxMl/EXHUwMDFh3pwvKpaNZHlcdTAwMWRcYn7nYeNzu2Smrlx0K15cdTAwMTknrtq7Y2jdXHRcIrGV/XMqJ7t0xeBtY3M+zyvjw4wvxlx1MDAxN5FcdTAwMWPbIVx1MDAxZjEyeVx1MDAwZlx1MDAxYydbWdNPfVx1MDAxM+OL4LSCWa6DkVfOZeNcXIfw7fZdvFx1MDAwMU+VOZ2sbmdiwXxcdTAwMTJDsIhcdTAwMDWTv5jnk1x1MDAwM8hcdTAwMDeeyZuN3D7CkV+Nqf9eR/ng6yhkm2d6ksZCgbFhv8J6UU9zXHUwMDE1Z9jPJ7By/lx1MDAxMk43rJj7JeN/UmZMJn6iUz6iTZxcdTAwMThrLPNcdTAwMTjwJOU4+M65R5nvI44xzThcdTAwMTDiu7XA5MX0xsrEcsdmLaa0aa0mho6a3C1cdTAwMTHIWW5cdTAwMTZiVrxWSu02/SvN+Fx1MDAxNvR+U5x6gjElXGZYWjtlzj/ltdc0XHUwMDE2XHUwMDE2pGtInPckU390ktZhcsTO09/ZXHUwMDA2cq7WeI41xflcdTAwMWFcdTAwMTX7XHUwMDE0i7Ga41KSflr1ZCn3aJKJpaT5W8bvnT+nMG/XpJ7M7q3O+aaJ8XH/cPpBxrZcdTAwMGY43yjNSbVMTDz4XHUwMDE5n8Z6XHUwMDEzh+RcdTAwMTOKu9bCvub5XHJcdTAwMGbBXCJcdTAwMWWDk1x1MDAxMnVcdTAwMWErx3dtToFj/+3XcsiIOGT/VXhHXHUwMDFjsrw7zzWpIbb8qv1cdTAwMDA/5pDEyaOjYvgucb+S2MQh68irPEeeY2zyXHUwMDE14Vx1MDAwYiBXm3NcdTAwMTVLxr/GzvVcdTAwMDLnb9unOImR5S6Yr9Nw3upCVzPrUcHKelQw/z2cZteFLoom17pcZp9paj55vbhcdTAwMTiafEXog2kj50rW0zzBdpFz04ucm2ileJNcdTAwMDBPwsI4XWvLxjZX18x4XHIqzUNcdTAwMWNcdTAwMWKOPMvlQG7HPC5cdTAwMTUs4lI9jktcdTAwMTVZXHUwMDE3o9lcdTAwMWF1Lf095dDImZzlQZn1v3nuYbhcdTAwMTirXHUwMDA1xkzNZ3i5gj2ZPEVcdTAwMWVDgzFq8ZzqvF2ZtXOxWDuf5bhyzonJLTXza1x1MDAxYlx1MDAxYpHmLi5sypvjbeHwXHLxNvNcdTAwMDYjXHUwMDE1zuNcIlx1MDAwMz5FPOzXXHUwMDE3MV3sXHUwMDA1QM7ffK+SOemwcui9SlE8XHJ3cvWz47BcdTAwMTZu8++2rU3jzVO7sGlyRvNE0vMu8Vxm9mM4nrG0h4H3j5h12erIrFx1MDAwYtdGkFx1MDAwNZOndMM55kZ+OF9dXHUwMDFhOylMXrSxg5N0bXlq9qKYOsJUryrGb1x1MDAxY/G6blRK88Sho/BcdTAwMWQ5XHUwMDE3XZic8FlcdTAwMGUuy7HJJZ+Op2n9aW56OZN3XGZZXHUwMDBljFx1MDAwZe3OTVx1MDAxN1xcN8eWkY9cdTAwMWRcdTAwMDBXgFx1MDAxM5L3w5ynmFx1MDAwNFx1MDAxZlwizXeunKd7ZMx6NvWji5xlk4vMmFNO1+PT3GrsJeHc61x1MDAwMfVzbPa5cPtQXHUwMDA38sPO+jjxjPdcdTAwMDL1OGdZLnKWOTdcdTAwMWG84Of3nmzki/N1RGX26oBcdTAwMTNe9FxyrpRS7O1cdTAwMWEsjThHXHUwMDFj+4tGZlx1MDAwZXjfkPH5z5lcdTAwMWZcdTAwMWFcXJ/tWSqk+1x1MDAwNui3alx1MDAxMlx1MDAwYuZ8feZdKizMnkW+XHUwMDE4nyjPdmTjXHUwMDFhJP19t9eJXHK+9FxcoeTi3ZR4QfJZZ/TY67ys3zV/MeF//+O//1x1MDAxZtlcdTAwMDZTXCIifQ==Detections Transformations Connectors Formats Parquet Feather XSV ZeroMQ GCS Sigma summarize pseudonomize select, drop YAML where, head, tail NIC Fluent Bit
Fluent Bit on Steroids Fluent Bit is a remarkable piece of open source software that
offers observability pipelines—quite similar to Tenzir actually. That said, our
target audience is different: rather than targeting observability, we focus on
the intersection of the security and data.
By bringing the two ecosystems together, you, dear user, benefit from the union
of features. Before diving into some examples, let's briefly compare the tech.
Fluent Bit features inputs and outputs to get data in and
out of the ecosystem. These are equivalent to Tenzir's connectors. Fluent Bit
also has parsers that map to the equally named concept of Tenzir
parsers. Fluent Bit's filters would be implemented as
transformations in Tenzir, i.e., operators that have a non-void input and
output. The diagram illustrates these relationships:
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nN1dW1fiSFx1MDAxN33vX+FyXlx1MDAwN7rul3lcdTAwMDNcdTAwMTVF7Vx1MDAxNtRW4VuzekVcYpc2XHUwMDEwXGZcdTAwMDGBWfPfp4JKQkhCgFx1MDAwNNJcdTAwMWa9XHUwMDFhJVx1MDAxN6pSOfvss0+div98OTo6tqdcdTAwMDP9+K+jY33S0Ixu09Lejv90to91a9g1+2pcdTAwMTeaf1x1MDAxZZojqzE/smPbg+FfX79qg0HePSvfMHvvZ+qG3tP79lBcdTAwMWT7P/X56Oif+bunLUtv2Fq/bejzXHUwMDEz5rvc5lx1MDAxOFx1MDAxMP6t383+vGlIOZVISEJcdTAwMTdHdIenqj1bb6rdLc1cdTAwMTjq7lx1MDAxZWfT8XWz/oAnZNKEs+qgcv794dJcdTAwMTght9lW1zDu7KnxfmFaozOyPJ1cdTAwMWHalvmiP3abdsdp3bd9cd7QVEPgnmWZo3anr1x1MDAwZodL55hcdTAwMDOt0bWnzjZcdTAwMDBcdTAwMTZb30fhryN3y2Q+XHUwMDA07mfnXGZEka/tXHUwMDEz0zAtp+0/wPzltv6sNV7aqlx1MDAwYv3m4lx1MDAxONvS+sOBZqmb4lx1MDAxZff2cVWIuG119G67YztcdTAwMWI9XHUwMDFkXHUwMDE46vPBhYRcYo5cYpV4scdpZlBuzm/03+6QWlpPLzun9EeG4Vx1MDAxZJV+82NUlnY8OzvO/DbjtZsl27H1iXtcdTAwMTWeXHUwMDFi/fzSmD3NJjend4XbaSfXb1e1KTpeXHUwMDFj9++fwV/7fvJcdII9Y9BmuN/v3lx1MDAxOcVcdTAwMWMsViu+Vj7b1yzLfIv7vdX7++rb9ajGxGVneH51Plx1MDAxOJ9f9eN978dv7riOXHUwMDA2Te3dziGTlDDJoGDQvVx1MDAxYka3/+JcdTAwMWZbw2y8uND44unwXG4ml8bVXHUwMDAzR0xkXHUwMDE4XHUwMDFjmYCAXG7osYh1aFxmvklZRyNcdTAwMDV5hlx1MDAwMcCUqDdcdNhcdTAwMTI2MSapYVx1MDAxM2KR51hKJKF6g4LTVahitoJUyIHAXHUwMDAySJ42UqOMXHUwMDEzSMDFXHUwMDA2xun2yuzbd92Zc1x1MDAxZpBY2lrSel1junRcdTAwMWbnVquG8WagW5ptWsPjpV1cdTAwMDWj23aM+LihuqxbS/Ztd1x1MDAxNXUtXHUwMDBl6HWbTS9cdTAwMWY1VHtat69b5Tg0YlrddrevXHUwMDE59+HdUSOgX3zeNJhHgnJIXHUwMDE278JjI0PdOXbu9iNcdTAwMTFcdTAwMWLJotRjKz7YXCJcdTAwMGWoVH48Pon2fujTybXx9DSQ/VpcdJt2r3/fyDpsXHUwMDExy1x1MDAxZYlyRaKIXGLhXtFeOfSDlIqsUn22v2tcZl9ouZPJzZVdKiZAdr9OKGTGQ6dxe2uL89LztHx/cb7T967j/Kb2NiyW6d11pTernj6e1V5nNt2MQ1x1MDAxZDfFvSBNhUMjQlomXHUwMDE0sVx1MDAwMFx1MDAwZWVsNFx1MDAwNl91xtGIMcorQlx1MDAwMFBAIVxiZ5T5wMlTXHUwMDAzp6R5QbBkmCFcZlxiXHUwMDEzYlx1MDAxNaqrJCqJ4lCIPMHP/z2Hlkyrp9nbXHUwMDEyqG1cdTAwMGVC2XNccn/42dPfkT1Tp4r3QqlTME5cdTAwMDBcIu7grVx1MDAwM2vxrNkpat9LtcvhWZ1XXHUwMDA2rdJcdTAwMTU7zTpYc1wiPnVC3fm3XHUwMDA3/SmIioBcdTAwMTlCbtiSKf1JRvq9aVx1MDAxNeSjPZixV9O0XHUwMDFh3/TxhnpcdTAwMGWp2CB1LvJcdTAwMDRcdTAwMWY+6+aAXHUwMDAxXHUwMDA2JY1v3cFcdTAwMTeddetGLI+UoOKAXHUwMDAz5eKpz9TDiWhXU4eKXHUwMDAzXHUwMDE1XHUwMDExSVx1MDAwMlx0YCielkNcdTAwMDBcIkywSN3qkzTM3XjoxOz3lX82rTSoaI0/9lNRQF+SZ6NQqIZcdTAwMTNcdTAwMTFkWGCEIImfe8lpXHUwMDA2M39OJqCpPVVlpWqMbzqZZ1wi6PFW82xcdTAwMGLheVx1MDAwMDhcdTAwMTJCOSsmhb8nyUWN1I38XFxaclH4gU9cZiFmkNCDp1o20TCB8Fx1MDAwNEtbI+BZnNp6WJrF0Fv2dsBcXOquXHUwMDFmhb4m/VxipJ6bvMBcdTAwMWNcdTAwMTSRmHtXoFx1MDAwMaBT8oT7Ny9QXHUwMDA3XHUwMDEwJVx1MDAxY9NcclIn0WJ7I9T5Y7BcdTAwMTRRh3yowzAvXHUwMDE3L1x1MDAwZdJLpEBcdTAwMWWgzpRyJEq9YSWGpJBAXGKq56BcdTAwMDf571BEkCqipOCgTLk1XHUwMDE0h7Zm2cVuv9ntt9VON/T8nE57py9W/l5r0fN6a/TQ1jT7VVx1MDAxZvFhzlx1MDAxM44q8DZGQ+9ccnXGQVx1MDAxYjhd/NiwSLZcdTAwMWPr/eb6XHUwMDE2XHUwMDBi9Nv420lccp1cdTAwMGVcdTAwMWKvjclFo1p4rDe3bdHQhvaJ2et1bTVsXHUwMDE1s9u3/cMzXHUwMDFmh4JcdTAwMDPOjq6t3CTVY+8+ZUtdn4xcdTAwMWI4X7pcdTAwMWPGu79cdTAwMWR5O6k+LH7/+8/Aoz3W6LyC7dD9ki/en5s7XHUwMDFl78yC3/FcdTAwMTBcdCWTgMZ3PNHZuN/F8cg9u5pV2Vx0MZHKtVx1MDAxYzZcdTAwMDBP263o18Z9eTzVXHUwMDFi5aqlXHUwMDE00Mts9FafpOpWzipG+fLu+eqcnNTP6vXT0pD8XHUwMDE479GtXHUwMDA0uFx1MDAwZZ9zWTo/TbfiOT6WXHUwMDA3iUxeeXNTPidcIlxiXHUwMDAwSPD4ieZo159RxYB9tVx1MDAxM0rh7+JC/mjoTdLUXHUwMDAy3Fx1MDAwN1x1MDAwYshbkVx1MDAxNf8hXHUwMDEwY1jpg9RcdTAwMDXCwog2ylrdfLts0lx1MDAxYjp+ql08XHUwMDFhtaeHS+NuPItd3ZDSRNJcdTAwMGXVXHUwMDE4n1x1MDAwMErQl0ZiMUy6I1x1MDAxNCpcIohjXHKc4Pg4XGa+SVnHoVLqXGJcdTAwMDGAIcdcdTAwMDJcdH+eXHJDmae7XHUwMDAwM5LbXHUwMDE5zVMqJWbUSZ5cdTAwMDWVTaxKeUKxIIRcdTAwMWae6HfOtMWW8lx1MDAxNc1cdTAwMWHqW6fZ1pRMrGFcdTAwMGa/xvf3JVx0kb+GKcMnZZXGhYRgXHUwMDExP7tcdTAwMTZcdTAwMWTPZFx1MDAxNaN+ruRcdTAwMDflSi4pXHUwMDEw3KtcdTAwMDEyxZX602Q2eby6bl2OZ1x1MDAxNfJ6XHUwMDA1T2fWzeGKI/ZRYbhcdTAwMWauJChcZohcdTAwMTgzXHUwMDA2KFx1MDAwMPG5MvgmZVx1MDAxZIeE5Vx1MDAwNXQqXGa5kviMXHUwMDExXHUwMDFmKlOlSpZXXHJIZ+pCXGLmrUOJ4ErIOGaKWFnqUM1cdTAwMTBZWt1lQkyULdfwx1xuW/o7kz5dUuzfuqiKQFx1MDAxOFx1MDAwM/U/fnIqOo2ZUZTmSHxlXHUwMDE5Y6p4V7bEXHUwMDEwK1x1MDAwMMqsKkv4aMIx4mx227k0flx1MDAxNXLlp1wiqe1BWcZgNUixZ1xuIy1Ww6HZXFxcdTAwMDFcdTAwMThcdTAwMTVKXHUwMDFmxY8ug1x1MDAwNzPjeFHE4mScmKBq1L216+v1366VXHUwMDE2jOdVXHUwMDAzkjAkZHCpRVx1MDAwMKdRQLlSrDj1XHUwMDA1Lkna5m6cdm1qzdQobY2T91Oavy97YLRQhCpcdTAwMTGCXHUwMDA0k1x1MDAxYlRXRGfQM4rQXHUwMDE1RovQf3tgNIlcdTAwMTWnXHUwMDExcqjq+HWMNq3K8bBcXCmUemNcdTAwMDE7uHKVy4GLPei/zDBcdTAwMWFccp1agFRIgSDYgNKCRzPjgIFI+SHFaUhpJSgwlZsotV1JjdI8kVLdcFx1MDAxNW8zjDwwiWI1zlx1MDAwNXV4+KBKbb+sdqeNUyO1NX7eT2q+rqRbucR5KECRgiahQMD4XHUwMDFhLXpcdTAwMTYmo1x1MDAwNVx1MDAwNIT5XG5cYnCKXHUwMDA1XHUwMDA0OCBXslpAIFx1MDAxOcJcboFcdTAwMDefVkizfiDRXCKhWPVcdTAwMDPRXHUwMDBiMr0t5lGMNn+3wiTX9HzHf/H+3MKFeFwitZVJXHUwMDExyaVgm5RcdTAwMWNHJ6d/XHUwMDE3XHUwMDE3kmZcclx1MDAxMo5VgySRuuFcYqaf6jmkXHUwMDBmSbRcIihZXHUwMDFmklx1MDAwM3lcdTAwMTKj0d+tXGZcdO9Uhlx1MDAxNCZcdTAwMTNcYlx0r59W8Vx1MDAwN2VcZrhcdTAwMDesnVa9O7+9vcadXHUwMDExr1fGlbpWeKvpmU9cdTAwMTTDZVWwtJgt6VVcbq5vilxcRSRcdTAwMDXh3CvPfidcdTAwMDey1Sqi8tebXHUwMDEwXHSQ0lwihaVcdTAwMDb3t0iIwPAyXHUwMDA2obhcZqjQM37QXHUwMDBmnk+FXHUwMDE4lfsnv/TXmXVcdMdWryWzjjdcbn2PZNnbXCIhXHUwMDE2tFphdZGQQMr2QepLyVx1MDAxN1x1MDAwZTzzNXWB0I6t78/G8yveK7r9bSah5EMhLUJcdTAwMWa5RJjCtGLR+Fx1MDAwNVx1MDAxMYOTTqlVsuBorNHx+Lpr9KbDb1lHNOIrXHUwMDE06kU0XHUwMDE3zNeVXHUwMDA0XHUwMDFm5Vx1MDAwMmNSKlx1MDAxN8r1isM/ZGl/lOqU6KmI+uu8+MBcdK33isDw1vdHtlx1MDAxNIWWKildzJBjm/HJ9qnNrLuLn1x1MDAwNu2cX1x1MDAxNC5cdTAwMGK/jFwilUbWocnw/qJbXHUwMDE4xK+rWCRcYjMh2eGf1bI/KCqZOVx1MDAxONma7ZjlXlFcdTAwMTjYcHJcdTAwMDB8XHUwMDA3xuMpQuNWp97k7Vx1MDAxYb4xfo7s+qlH9UXM7k6W7HVun0LmXHUwMDExoEp0XG6GJPHGip9mJlx1MDAwMmYncVx1MDAxNFx1MDAwZbaZXHUwMDFilVKXrbBnXHUwMDFk+lCaPra3XHUwMDA2iCeX8nFcdTAwMWLwx1x1MDAxNjdcdTAwMGbyuSDXWfmCJFuZlHD2hTtSXHUwMDA0MVx1MDAwMFx1MDAxMPJYj5VMaGq3XepXvr9Wz9/ss5uLm9c74yFX/bFBXGLMXHUwMDAxooyDnVx1MDAxZt5cdTAwMTLVm1x1MDAxNfNfJqn3xEOeUlx1MDAwNFx1MDAxMFGhXHRcdTAwMDbCPz2pzH9cdTAwMWRcdTAwMTQoyFx1MDAwYkklXSzbXGLQN0kjQ5d6Q29lh/eSIY/PmnaGhYBSrFx1MDAxNE/OLT1UulPOoaKUWHG+XHUwMDFmXHUwMDAzS93Y3VBXuKfcV1xm4JFCXHUwMDFlXHUwMDAy81hUXHUwMDA0gW0/XHUwMDE569VWrm37pmjXsMdK3sZ3OSvKLjJSjKwwgix8RbdcdTAwMDCKXHUwMDFlMdpgQrY8wMPq9M04rdVbpavHq+ZtqWlmhVBCXG6MYH657I9cdTAwMDCaR5JiRJR3UfSAfV3ZjVNcdTAwMTeE7n5tXHUwMDEwoX/yXHUwMDEzYFxiKmgmMDNcdTAwMWKHXHUwMDE1k1qxab48iVx1MDAxOVx1MDAxYlx1MDAxNX/iXHUwMDE3865cZmun17XbzahKmZ0gXntPo1oowvYlXHUwMDAyRMn4XHJWdVx1MDAwNF90Zlx1MDAxOCPY+Hmec1x1MDAwNlx1MDAxMFx1MDAxNoxwoq52mYxcdFx1MDAwNFx0XCLBz6GLXHUwMDA0JclcdTAwMTPCpdKtXHUwMDFjUMX70Xz+qac4XHUwMDAyUHrTxunoqTVEtamZbk9Ic1x1MDAxM1x1MDAxYtnLPJBo2dBcdTAwMWHfvfL8aH9n4qVcdTAwMWLJLlRcdTAwMTVcdTAwMWGQO89BXHUwMDE1zPtcYrq1z1x1MDAxZZE3zcKk8XBSXHUwMDFi93KTq3NDk8ZLtplKXHUwMDAx0EdVXHUwMDExwjFJruKxuMqJ24iEXCKBXHS8PXJV90acYDitQ/3qvP14XG5cdTAwMWbq0nw4gKxaz1Xhc2hIKvPnm8yhXHUwMDA1X3XGyVxuU7xEV8s1MFx1MDAxMcoxSbaiaFx1MDAwYrZSoOBcdTAwMTg5pnJYutpaV21FV6ku3V/jv5NZur9cdTAwMGJZiXBdpcyHMU5x/Fx1MDAxYZPr21+j5vVjXHUwMDEx5UitU+C5+tXDqJdttmKeda975CpPOFx1MDAxNqWrIKUwmUfW7pGrRo/22/3b6LX2o/DcRtPiZXf6vMnfXHUwMDEy2Fx1MDAxN1d551tWKjQxYpxv8lx1MDAwMOfgq844VzHFRoI7eU6KmaNcdTAwMTJcdTAwMGXCVUq+USdTKlx1MDAxMedhXHUwMDBmmVx0ICtOXHTCiSRcdTAwMWS2nKvaO1WVuoZio9T+Mk+0917521x1MDAwMv7ObERWXz5cdTAwMWPAsTZcdTAwMTjc2WpUXHUwMDE3Pup43NXfilx1MDAwMfbTmr9cdTAwMWNHMke6XHUwMDAzKX3u2v798u9/nZ2wXHUwMDEyIn0=Operators Format Connector Bytes Parser Printer Loader Saver I/O Events Parsing/Printing Computation Inputs Outputs Parser Filters
It's important to note that Tenzir pipelines separate I/O and computation.
Connectors do I/O and formats are responsible for (un)structuring data. The data
paths are symmetric in that a loader ships bytes to a parser that in turn
produces events, and a printer accepts events and turns them in to bytes that
a corresponding saver sends away.
We implemented the fluent-bit
operator as a fusion of connector and format. We
did not integrate Fluent Bit's powerful parser abstraction, as we have an
existing framework in place for that. Similarly, we did not integrate Fluent
Bit's filters, as we have a variety of transformation operators for that.
How do I use it? The fluent-bit
source and sink operators are where the action happens. They
have the following syntax:
fluent-bit <plugin> [<key=value>..]
Both operators are very similar to the fluent-bit
command line tool, which
has the usage fluent-bit -i <input> -o <output> -p key=value
. In Tenzir, the
source operator implies the options -i
and the sink -o
, so you don't have to
write them. Similarly, appending properties in the form of key-value pairs is
so common that you can omit the -p
options.
Let's walk through some examples. Say you want to sample three values with
Fluent Bit's random
input:
tenzir 'fluent-bit random | head 3 | write json -c'
This prints:
{ "timestamp" : "2023-09-23T07:56:47.957369" , "message" : { "rand_value" : 8106944690543729752 }}
{ "timestamp" : "2023-09-23T07:56:48.959997" , "message" : { "rand_value" : 2072095294278847853 }}
{ "timestamp" : "2023-09-23T07:56:49.959988" , "message" : { "rand_value" : 5606209024700423100 }}
Regarding the framing: Fluent Bit's event format produces events
in the form of an array that can have one of two possible shapes:
[[TIMESTAMP, METADATA], MESSAGE]
[TIMESTAMP, MESSAGE]
We convert this into an event record with 3 fields:
timestamp
: the event timestampmetadata
: object with key-value pairsmessage
: arbitrary object with inferred schemaThe field metadata
is optional, as shown in the above example.
Many Fluent Bit inputs perform network I/O. Here's a TCP socket example:
# Terminal A
tenzir 'fluent-bit tcp'
# Terminal B
echo '{"foo": {"bar": 42}}' | nc 127.0.0.1 5170
This outputs in terminal A:
{
"timestamp" : "2023-09-23T09:35:10.623745" ,
"message" : {
"foo" : {
"bar" : 42
}
}
}
Let's pick another input, opentelemetry
:
tenzir 'fluent-bit opentelemetry'
This opens a socket on port 4318 that you can send now telemetry to. Instead of
curl
, we're using our own HTTPie-like http
connector to issue a POST
request:
tenzir 'from http POST 127.0.0.1:4318/v1/logs resourceLogs:=[{"resource":{},"scopeLogs":[{"scope":{},"logRecords":[{"timeUnixNano":"1660296023390371588","body":{"stringValue":"{\"message\":\"dummy\"}"},"traceId":"","spanId":""}]}]}]'
You should then see:
{
"timestamp" : "2022-08-12T09:20:24.698112" ,
"message" : {
"log" : {
"message" : "dummy"
}
}
}
More powerful inputs mimic other applications, like Splunk or
ElasticSearch . Want Tenzir to be like Splunk via Fluent Bit?
Here you go:
tenzir 'fluent-bit splunk'
You just got a Splunk HEC API waiting for you at port 9880. This is one of the
most amazing things about this integration. The entire Fluent Bit connector
ecosystem is now at your fingertips!
This extends to the outputs as well. Most mundanely, you can use the stdout
output from Fluent Bit as follows:
tenzir 'show operators | head 3 | fluent-bit stdout'
This yields:
[0] lib.0: [[1695494117.866096973, {}], {"name"=>"batch", "source"=>false, "transformation"=>true, "sink"=>false}] [1] lib.0: [[1695494117.866101980, {}], {"name"=>"compress", "source"=>false, "transformation"=>true, "sink"=>false}] [2] lib.0: [[1695494117.866103887, {}], {"name"=>"decapsulate", "source"=>false, "transformation"=>true, "sink"=>false}]
Want to send Suricata alerts to Slack? Here is your pipeline:
from file --follow eve.json | where #schema == "suricata.alert" | fluent-bit slack webhook=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Or send 'em to Splunk by changing the sink to:
fluent-bit splunk host=127.0.0.1 port=8088 tls=on tls.verify=off
Oh wait, Elastic? Here you go:
fluent-bit es host=192.168.2.3 port=9200 index=my_index type=my_type
Hopefully the general pattern is clear now.
Finally, there's a cool property of Fluent Bit: it's symmetric like Tenzir.
Remember how you can use ZeroMQ sockets to bridge pipelines?
# Terminal A
tenzir 'from zmq'
# Terminal B
tenzir 'show version | to zmq'
You can do the same with Fluent Bit's Forward protocol:
# Terminal A
tenzir 'fluent-bit forward'
# Terminal B
tenzir 'show version | fluent-bit forward'
(We'll leave it to you to do the same with Kafka.)
Implementation: MsgPack vs. Arrow
Fluent Bit uses MsgPack internally, a binary version of
JSON with a slightly richer set of types. Once a Fluent Bit input onboards
data into the internal format, all operations compute on MsgPack. And before
data exits Fluent Bit, it gets converted from MsgPack to the native format of
the output.
Incidentally, Tenzir also had an optional MsgPack implementation of its data
plane. However, we dropped the MsgPack encoding and switched to Apache
Arrow exclusively. The reason is that most of our
workloads are analytical, where a columnar representation (especially with large
batching) outperforms due data locality and the ability to tap into vectorized
computations. Moreover, our objective is to soon integrate natively with several
data tools, such as DuckDB, pandas, polars, etc.—all of which speak Arrow.
Want to try it yourself? Head over to app.tenzir.com
where you start for free and manage Tenzir nodes and run Tenzir and Fluent Bit
pipelines.
Tidbits Besides Fluent Bit, the team at Tenzir has been working on some other
noteworthy improvements and features that we would like to share:
JSON Parser Improvements We've revamped our JSON parser to be a lot faster and more accurate in type
inference.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1cXFlX28hcdTAwMTJ+51f4cN/mXGZK78u8QXBcYiSA2cJyZ1x1MDAwZUdYsi2wJSHJNiST/35LXHUwMDAyrFx1MDAwNcuRXHUwMDAxY5OLOVx1MDAwN9vdLfWi+qq+qu7yj6VabTm69e3lv2rL9k3T7DpWYFx1MDAwZZf/jMtcdTAwMDd2XHUwMDEwOp5cdTAwMGJVJPlcdTAwMWV6/aCZtOxEkVx1MDAxZv714YPp+0Z6ldH0endX2l27Z7tRXGJt/1x1MDAwYt9rtVx1MDAxZsn/TF9mXHUwMDEweHfdJMVpV5xcdTAwMTVcdTAwMGJ3PDfpXHUwMDE1U0o0VVTJUVx1MDAwYidcXIeuXCLbguqW2Vxy7bTGSmY0tFx1MDAwNifqVvblRjNQjTX6za2fpb22nG73ILrtJiNcbj2YRVpcdTAwMTdGgXdlXHUwMDFmO1bUifsulJddXHUwMDE1eP12x7XDMHeN55tNJ7qNy1x1MDAxMFx1MDAxYZWabju5R1pyXHUwMDAz36hKv8dXiMxcdTAwMTV3fX/0ul5cdTAwMTD3/Vx1MDAxZmzHf2nvXHUwMDE3ZvOqXHJDcK20TSt5pW2G9zOiXCK9b8d22p0oN5TQTlx1MDAxNlx1MDAxNWvCuJZIpGtcdTAwMWV34G9aybP9J13KwOzZm/Elbr/bza6Ha92vR67iXCKuqGfEJL1V37fMu0eKhVx1MDAxNkpQrrVcInRU33Xcq+Ltul7zaoxcdTAwMTSEkVx1MDAxOURrjms5brt4ie1aac2DfKaym8xl+ex8bd8+plvfbrxT7PZbUlx1MDAwZj09Wsx43l6zXHUwMDFmj59cdTAwMThcdTAwMDQxgaTAUmiONJaZRm3Tj2dDjHxcdTAwMTN93+JnOlxyM4w+er2eXHUwMDEzwVx1MDAwMjQ8x42Ko05mtFx1MDAxYYOnY5uPllx1MDAxYuaUrVuOXHUwMDAy507KRi38+KYpLuNX+qmWXG5A8mX0+Z8/x7bOyFCh/VL2/X5+1XWAxMXCnFx1MDAwZWBcXFx1MDAxMF1ZXHUwMDA3nHhbzVxyd3B5feqfoGibrXz+zNdcdTAwMTdbXHUwMDA3MFTQXHUwMDAxZDY6YIxcdTAwMDagbIxcdTAwMGVgXHUwMDE0M1x1MDAxMFk+R1x1MDAxZFx1MDAwMGpQZ1x1MDAxZfosdED+Zm9cdTAwMGKJudYr8Fx1MDAxMKeEYmTfROOQiDEqlo6gKOGhaEloKlx1MDAxNr+CXCJf7a1cdTAwMDXmYE1s15u9S5s318x1c8GhSJCB4IU54UoqjURcdTAwMGWZRM1cdTAwMDaZQlx1MDAxYVx1MDAxMsyeoFppwqVKXHUwMDA3P0IqXHUwMDE5XHUwMDAzVKGYXHUwMDAwg/0mbXXLc6NcdTAwMDPne1wiWlwiV/rJ7Dnd29wjTOQ1JniDeExcdTAwMWbC5VxczWrXacfSu9yEWjvIXHR25Fx1MDAwMF1cdTAwMWQ1iDw/rW1CX6bj2sHjtfFcdTAwMDKn7bhm97C0X5ip/fnh2WCD8MxzXHUwMDBm7bg2LmdcdTAwMTNRmLRcdTAwMWGDQlpcdTAwMGVCpTmhLCsgv1x1MDAwMqHXcFnYXolcdTAwMGVXdi53XHUwMDBmqEvNelx1MDAwMy02XGKpzttDLmaDOlxchVx1MDAxMlx1MDAwYoVcdTAwMDWTSP7mjHiW1jBX96J2XHUwMDEwP4uQlllBRYuFXHUwMDBm+CNIgiwoxavjb9Dd8qW3s7l9uMqcT/XLlW3rcmPB8ceoocHUIY2AfyOa3iVBIyczQSNlXHUwMDA2ZmBcdTAwMDCxpiDwVKZcdTAwMWF1glxyXHUwMDA0VSFcdTAwMTVjOlx1MDAxZOJbQueTbCA8v6vXtn/5Pl/C9pUyUFrqXGZSiVx1MDAxMSGYVcfeitj/3F1t9Fx1MDAwNlxy64jUr+3gmJy1XHUwMDE2XHUwMDFke1xiqCBBWCAhOWKpXHUwMDBmdJuIe3EkL4Q9bYDDXHUwMDE3SzOR4HeJtNdcdNhcdTAwMTNCYqIl+j/CXHUwMDFln1x1MDAwM/b4i2OvjHfyXHTOXHUwMDFmoyBcdTAwMWGcVo/DXFwqcnO51lx1MDAxMNtNfUq7u1x1MDAxN7t7jnu44NhT2qCEgFx1MDAxMeJYKJ1xrFx1MDAxMrtcdTAwMDeuIZNcdTAwMDCP2DukLLPyr85JMWZEMozfOelvx0nLsMlksXBkXHUwMDE2saJYI1Q9LlP3tkJ0/XXny1x1MDAxZTlcdTAwMGZcdTAwMDZWcIE8b+G3SSZBk6lcdTAwMDI0aWFgr4pNXHUwMDE0h/tVZlxm7+D8zcHJyzkrxVgpjauDsz3crm9cZvZW9s9cdTAwMWR1dDqs97rOLl1wcGo0XHScbJHAiWFcdTAwMWOUirdcdTAwMTkzfVx1MDAwN2ftXHTgJMXCXHUwMDA3cIK4KoayXHUwMDAy+UuH8thcdCypbrZPjr643tFV+2tr6C04OCdbTrRA4KRcdTAwMTh8XGaFyNt0KN/BWXtJl1NcdFx1MDAwNZpaoOrgvO5L/8JZ/f7Ziq6Pvl20qFx1MDAxNbi7i1x1MDAwZU41XHUwMDAxnDD7hVx1MDAwMafGXGZ0pX6jwZ53bNZe1HBiXCLjKGF1bF6c9U9xI7iS8mtTmEd+p3NcdTAwMWKsvGlsXHUwMDE2o0HzNJxEUKb5O6v9XHLBWbpHqcrAiTlCSvDqkdrbj91N0UF7/PzmvL7b3fvY3DxcdTAwMTkuNja54lx1MDAwNtYg8JJcbqopye9QXG4kXHKCXHUwMDE1XHUwMDExXHUwMDE4sThcdTAwMTgzXHUwMDFiaILTy8GdZFLEXHUwMDExOK7Tg8yTzuxcdTAwMTCtwI6K+Vx1MDAxZtpJhzvrTZND2/3uXHUwMDA0tVx1MDAwMTMycYzX2TtcdTAwMTnb9Sy3L1XpcXZwbOLDXbi6zfzqb52Z11x1MDAxYmF388rcXm18Zyt7PX+xcclcYjGEVFprXHUwMDAwhsJUpstxXHUwMDA3TGVwQIDESilKM7tJL1xuTGwgJDVcdTAwMDMh11x1MDAxOKxzKqhcdTAwMTOAyYXkYO313KO288AlmVx1MDAxZi7Jy+IysJtR4eBt5mxcdTAwMDErTzYhXHUwMDE4TKZgonqySZ3qbVx1MDAxMthfhig8jdBcdTAwMTE77PfPXHUwMDBmSuDZMZudfmDPXHUwMDFmoFxcIVx1MDAwM1x1MDAwM3dlXHUwMDE4nEsgXG75461cdTAwMTRLQ0kuXHUwMDEwJlx1MDAwNFx1MDAxNkQ/z3Ca3FLjOe1cdTAwMThSmztZe1x1MDAwN0kmQF9oTWZuKkeULE1cdTAwMGJcdTAwMTk95fVvvnbDK3eLfzpcdTAwMGLcW+tMOv5lJiMkI3t3+Vxyo5qfXHUwMDBm/K5cdTAwMWPwXHUwMDAyS4Sn4cxcdTAwMTNlvzS/Qmf2XHUwMDA2XHUwMDFmXHUwMDFkaFx1MDAwMz9OoGnkfvKKTCX3xYNkVeSePE3uXHUwMDExUFx1MDAwMFx1MDAxOVNGXCJcdTAwMTRcdTAwMDZFm5P7eP9Q4MSrhVrCRKnc24hiip8m93E0h4CrXHUwMDA2PiUjVGjyXHUwMDE4XHUwMDA1wN1cci24YFx1MDAxOPxKlOHwo/1cdTAwMGJgmlhqPs+d/6mltszTK8vCOt8/vdw/PnM2r1fcTdxcdTAwMTmuYz/g47KwkIFgRWBEUijEuErpRm2UhSVcZlxuLaRcdTAwMTAxXHUwMDE1QILfN0iTsColhk1W9pkhYVx1MDAwM4RcdTAwMTErXHJcdTAwMWU5yFx1MDAxMVx1MDAxMWluUzokblBgRpIooEhcYj6xR2N6Y+kopZJcdTAwMWS/VopCnd5tKfs+LdXWpaFjeNJcdTAwMTJcdTAwMGKsWHWu3T9fv7iJtj5cdTAwMWTUd7gl6S3p2DvWois1xrlcdTAwMTFcdTAwMWbYXHUwMDEzjHJcdFx1MDAxMi5cdTAwMGLWnEuDU8GU5lxcY3CKZ6PVWJK6QimDNZdjj1x1MDAwZfJHpl1cdTAwMDFcdTAwMGZcdTAwMDHMyjfvXHUwMDA1Z1x1MDAxY4lfsG1iqJu/3Vx1MDAxNlx1MDAwMDvLqF+Hbo/vu1x1MDAxMt9m9EngxJnkvTHxKVx1MDAxMFx1MDAxNDJFTufB7efW+tHXi/21+qrpXHUwMDFkXHUwMDFjNPabuL3o6ORYg+nhQoCjS4FcXFx1MDAxNMApwfchnGlcIjBYLoZZYWAvg05cdTAwMDWPNU4sk8D4Y1d4XGbneOxcdTAwMGJLhjBcdTAwMTKKzP144ev5wn+8NiT/mFx1MDAxModPjEdlWWbxaFx1MDAxMiwzU5JMXHUwMDExkDpq2Fx1MDAxN6vhRuPEaVxy16+vw0CYx4tcdTAwMGVDScFIXHUwMDAyXHUwMDE5kMD9KFCUfERcbiTdkFxirKdEXHUwMDEyXHUwMDE4XGZS5TB8jstLqDKApVx1MDAwMkFcdTAwMDWwcyTT4H1K/dHjYDGinCuh53/O9/WA2LPNXHUwMDEw5Maq9UNg5LWoY9d8x09Q8LdcdTAwMWL/eW5SuM1l7aBcdTAwMWZcdTAwMDBcdTAwMTYjs1x1MDAwNkNcdTAwMDakRGDiXHUwMDAyr5dUW0DH49mZUYyD8dju2q1oXHUwMDA2yJ7tXGYqKVx1MDAwYv00ZUFI6aZcdTAwMTJ4xYJJJarb7Mk/pbGQ0WtJqYHjmWowy5qLwq5S8Vx1MDAwNz2epSlKM3EwuFJUXHUwMDAzPcYkTj8nldLgMGFcdTAwMTRcdPBcdTAwMDDmXHUwMDFhK5v88zs5XHUwMDExnD5W9sp6KHJ69mtzgnyfz6FcdTAwMDX3v7/gXHK2vP2gu02uNnrt8LpvXnWyof6x6iBcdTAwMDFcdTAwMDJcdTAwMTOTbCYlhsBIUinAmFGc2eRcdTAwMTnZOySMcZJcdTAwMGKUmExcdTAwMDDhU4Bka7tpL0xS38ug7lx1MDAwMdVcZiFFQVx1MDAxZD06Xp4scWlQl2pEsCaVjudcdTAwMTRcdTAwMDGeXHUwMDFix1x1MDAwYoLwXHUwMDAxV4FtWrXwwez9W3N6vlx1MDAxN2TEr1x1MDAwMlhp7qZPMudZXHUwMDA0pcs4XHUwMDA1VH81jVwieCfa44mbVkSXZv5gwkmcgsmqXHUwMDA37yeHVlx1MDAxN3TTilx1MDAxMWFoxZSS4C9Tnlx06yXqSEtcdTAwMDMhYNVUSfBZ+TNcdTAwMTPzptq1XHUwMDFhQ9pcdFwiXHUwMDFjvH41843kSZZ4xrtWXGbzaZTA0sONk5sum75/XHUwMDAwtDbu/W7oy1x1MDAwM8dcdTAwMWWulZOkpXvoxOJpx3P/8XPp5/9cdTAwMDDeL1x1MDAwNC0ifQ==events/s 100k 500k Tenzir v4.3 Tenzir v4.2 2.8x faster * measured using the pipeline on the M57 Suricata dataset from the documentation time read suricata | import
Schema inference now supports empty records and empty lists. Previously both
were indistinguishable from null
values. This is best illustrated on an
example:
{ "foo" : [], "bar" : {}, "baz" : "127.0.0.1" }
{ "foo" : [ null ], "bar" : null , "baz" : "::1" }
{ "foo" : null , "bar" : {}, "baz" : "localhost" }
With Tenzir v4.2, The fields foo
and bar
would've been dropped from the
input, and baz
had the type string
for all three events.
With Tenzir v4.3, foo
is of type list<null>
, bar
of type record {}
, and
baz of type ip
for the first two events, and of type string
for the third.
The new yaml
format supports reading and writing YAML documents and document
streams.
For example, you can now render the configuration of the current node as valid
YAML:
This yields:
---
tenzir :
allow-unsafe-pipelines : true
operators :
suricata : "shell 'suricata -r /dev/stdin --set outputs.1.eve-log.filename=/dev/stdout --set logging.outputs.0.console.enabled=no' | read suricata \n "
zeek : "shell 'eval \" $(zkg env) \" && zeek -r - LogAscii::output_to_stdout=T JSONStreaming::disable_default_logs=T JSONStreaming::enable_log_rotation=F json-streaming-logs' | read zeek-json --no-infer \n "
...
Another example, perhaps just a party tricks, is converting YAML to JSON:
tenzir 'read yaml | write json' < input.json
Pipeline Labels Nodes now support setting labels for pipelines. This feature isn't yet enabled
in the app, but will be available soon for all nodes updated to v4.3 or newer.