I have been trying to learn Rust for a while now, as I always ended up in it. Like: Github projects and repositories that interest me, trying to understand how to build scalable and reliable systems, low level controls for example on inferences runtime or good hardware and GPU integrations. So, I decided it was better to understand it early or at least start rather than wait till much later.
Around the time I was starting to learn rust, my roommate left for Chicago for easter break, before leaving he asked me what I was doing for break, Since we are in DSA class together. I told him I have been learning to build some projects in Rust, and also currently strengthening my concepts and understanding. I talked about memory efficiency, performancy and how the language forces you to thing more carefully as we write, and even said I might like it more than python. He said, ‘bro they are all the same.’ I said, ‘no, she is different ’. Cringey, lol.
Anyway, I kept building projects in Rust over the next few days, applying what I had learned and reinforcing my concepts. I’d already spent time with Python and JavaScript, and just enough C++ to understand that memory management is handled very differently in each language. Python abstracts it entirely and JavaScript gives you flexibility with almost no constraints. C++ on the other hand gives you full manual control with no guardrails, and Rust sits in its own category. We get the performance of C++ without undefined behavior, because the compiler enforces memory safety. It felt bit challenging at first, but over time I came to prefer it as I actually like the fact that everyone in the community tends to follow the same standards for code for Rust, which is a really nice thing.
I set up Rust using rustup for toolchain management. I used VS Code as my editor, with the rust-analyzer extension for autocomplete, inline error messages, and type hints. The project structure was one Cargo project per concept, so it could be well managed and accessible and connected to GitHub so I could save my progress.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO2d3Y7bxlx1MDAxNYDv/Vx1MDAxNFx1MDAwYiWXLT0zZ37O8Z3tOKnbOkGzbdO0KFx1MDAwNFqitIy1okBRtreGgT6EL/t0eZLOyLtcInd3ZHNGNFwigfRcdTAwMWFcdTAwMGIsf0ec83G++dW7XHUwMDA3Z2ej6mqVjVx1MDAxZZ2NsreTdJFPy/TN6Hdu++usXFznxdLuXHUwMDEy27/XxaacbI+8qKrV+tHDh/VcdTAwMTnJpLj8eFa2yC6zZbW2x/3L/n129m772+7Jp+7caVq+ejnfXHUwMDFlu916c/cym1Tpcr7I6l1v3a0pYYaYkoaMXHUwMDExRuNu75XdyylcdTAwMTFaMEFAjIBcdTAwMTlmdrvf5NPqwlx1MDAxZWJcdTAwMTBcdTAwMTNlryCUICU5k7sjLrJ8flHZQ+zJiZRcXEgwhFrYO+2O+ZiiR2dst2VdlcWr7GmxKEqX7KpMl+tVWtqPXFwn/GU6eTUvi81yujvuK565n/qYWb5YnFdX26vbR2tcdTAwMWbj6M49frr+XHUwMDA04s72fWfZXHUwMDFizi+W2do9er7bWqzSSV5tXHUwMDFmXHUwMDE2qz+FS93q+XSbS/+u01Sml9lzl03LzWKx25wvp5nLi1HKbt1tOb2+201cdTAwMTbX2Vx011ve12nPMndhro1EXHKA9aeq48ygurv1+2K5jTlOXHUwMDAywCBh/cny9Tc22KrtZWfpYp3Vz9+l7VkjXHUwMDEw64+4WU3Tj6dwY5RUQmtQVF90kS9f3f38i2Lyqr7Lg8bnulx1MDAxM9uTy+n9wK6yt9XtmNYqYVxmtbSBXHKCI1e3Ylx1MDAxYTBcdTAwMDHgaHcxzoHBvYjmUiQoXHJqQlx1MDAwM0xqxPsh7cBoXHUwMDFmxF9Npfv5ZFx1MDAwMHtcdTAwMDP9JINY+IP41tE30WqzSSlcdTAwMTQkPdFcbnxfsGqbJ4pJozqOVcVBaVxiiNU6XHUwMDE4XVx1MDAxMG5zMcvOys26+v0v9m2+zK5cdTAwMWU2MrNYVuf5f7a06Vtbv00v84V7+urWXHUwMDA1XHUwMDFmL/K5e1x1MDAxMKNFNmtcdTAwMDSFfVx1MDAxOFVuXHUwMDBiht3uqljVeyf2emm+zMr7WVSU+Txfpou/tkhsuqmKXHUwMDFms/XH5FblJms+lexcdTAwMGY7XHUwMDBlXHUwMDEy8Vx0XsuiqNpcdTAwMDCrblx1MDAxM2rqXHUwMDEw3DHJZMKlLUhs/pCWKD3FTCCTs/QlY6onTMr2TFx1MDAxYSaEXHUwMDAwo3Uz4K6RvLetLj7A6lx1MDAwMerG67QjJIlcdTAwMWaI5KnQ+CVBnPJJXHUwMDA0h824q1x1MDAwYkeZSDSGcck1s3lTXHUwMDA3+VA4tlx1MDAwMFG3XHUwMDA3UVx1MDAxYlxywtpcdTAwMGJrxtpN2bhcdTAwMTdEI8G6dtOxO1x1MDAwMlHal4JoXHUwMDA2XyiIv374369cdTAwMWb+a/+fMT5+nZZ5+nKRrY9cdTAwMTnJz6a4Izgv28BpTfazdCqeoLNeo4WwtbWGQcXCSZPpZJb1XHUwMDA0TtNcdTAwMWVOQjKcWzJcdTAwMDLhXHUwMDE0RjIlOi8lrVx1MDAwYquD4Ly0SCTl+ohhvJfCjuBrZahcdTAwMDI/XzRcIkuM4sRcZrhcdTAwMWG4wMPhy9DQjHpcdTAwMDJcdTAwMWZcdTAwMDZUXHUwMDFipbJVXHUwMDAwIOFz1P30SSaYreJ13cKhpJaCXHUwMDBlge9pWs6LpCouXHUwMDE3R8yfL5HdICii5Fx1MDAxNDxyqmSi0GqKJPs+REWH11x1MDAxMnslp4/bI4hISmtcdTAwMTUmp9qeYitcdTAwMGWy83ZcdTAwMWLJXHUwMDA168pNxXi2WU4qm+xTcVN/ijtiM85NPXAqWzxcIlx1MDAxN/VTXHUwMDFhlLRcdTAwMDWST1x1MDAwMkpFXHUwMDAwXHUwMDBlXHUwMDA0gnxM3utcdTAwMGW4YVKi4sioXHUwMDAxcjdMciFAXHUwMDFkVCr2VklFnJJ6mDMmIbJwmsOp65WLPm1PnWBIXHUwMDE2ISV9XHUwMDFkbnup46iZVLYwPD7sei6jXHUwMDEwJaPaL6NEZIRcdTAwMDLXXHUwMDFlN3QjXHUwMDA2MvgsoOQjqYnQeFx1MDAxOdxro8JcdTAwMDBjKFXnjTFgc102g+9cdTAwMDBcdTAwMWKFcfHGXHUwMDEysb7IVydio/5cdTAwMTR3XHUwMDA0Z5yNeuhcdTAwMWNsNIbJb1x1MDAwM5jkjFx1MDAxM5PNXHUwMDEyrk25yGxdTnMm66g+lnKxtzpcbnE66oFu0NE47L5cdTAwMGLBXHUwMDBlQG6HLYVgZ1DYlyFnx0ddz21URtkoeWxcdTAwMTRw2zTKyHA92Ggwgs9cdTAwMDNcdTAwMTBcdTAwMTTc2LhcdTAwMTeBfYNcZpVEN9S2a1x1MDAxZFXGiK50VI5tTmwm1ak0jfrS21x1MDAxMZmtVJRT/fbbh+agojFA/jGku1x1MDAxMLir6HmB3Fsmgq1QKq3h+Fpoemuisp2JNoYu7mNuMNE46v5cdTAwMTRAnTGaMUaNyni77lxikGRcdTAwMDZcdTAwMTM9Nlx1MDAxM1UxJiqEx0SFSjRaJ0FEjjB00lx1MDAwN1wi+FwiXHUwMDAwQWRaSy0xbJxcZlx1MDAxMUnQyLrupteMa3HQWO6G2alxttxcXJ6Kh95PbUdUtrNQrKNuXHUwMDFmloOFxsD4fYiFamJuUlqQhXKUII2hI+wo7K2GqnZcdTAwMWEq6yH4+6BcdTAwMWI0NFx1MDAwZbtcdTAwMWaCXHUwMDFhRCXYiFx1MDAwZmtcdTAwMTDlQlxuYWzFsYb1WLDruYfqKFx1MDAwZlVcdTAwMWVcdTAwMGYlliCQNopcdTAwMTiAaMxcXFx1MDAxYjS0XHUwMDA1gn9cdNFQ++7TUlx1MDAxYV9X4P7ueXuClqQ7XHUwMDFmLFxuqOggXHUwMDAyXHUwMDFiXqfHWVlcdTAwMTbl+FwiXU7tleYnoqOfSHZHlLbrqL/TUuPDdPDSXHUwMDE4On9sT6dcdTAwMDIwXHUwMDEy0LtgxP5mXHUwMDFhcrXEZlx1MDAxN8exXHUwMDE0j721Ut3KSlx1MDAwMepcdTAwMTfuPuRcdTAwMDYrjYPuvD10hKSZIO8k+73QXHTLqX1lNmY6XHUwMDFjXHUwMDBidD13Ulx1MDAxM+Wk6HFSzVx1MDAxMlxyXFxcdTAwMTNqZt20i2UueiWlf2tPIHKwVUPkYZ306NbAXHUwMDAy0aClq056N/ymIyk140mxWGQnNYdpX5o7XHUwMDAytJ2Owp1cdTAwMTZcdTAwMWJcdTAwMGahg47GcPn39lxcXG7lxqIxXG7rNbRYXG5cdTAwMDQz6Oj13t9eR007XHUwMDFkbaxcdTAwMTe4XHUwMDBmuUFH46D7KaCFXHUwMDA2pLRZXHUwMDEx2FdcdTAwMGaARipcdTAwMWN89Nh8XHUwMDE0Y3xcdTAwMTS4x0dcdTAwMTV3y65Z51x1MDAxMUZcdTAwMDGxYbWnMFx1MDAwNH9cdTAwMGVAkLhbtFx1MDAwMFx1MDAwMpd7UmRcZndzzDpcdTAwMTdSoVx1MDAxYlx1MDAwYmdcdTAwMWUmpDjOq6xMq6I8XHUwMDE1XHUwMDFk9ae4IzqjJjH58Fx1MDAxY2Q0XHUwMDA2yn9cdTAwMDbIKGlbL4OwgaNcdTAwMGVHyWyBWmdgd+WiPqiS2FtcdTAwMWLFqDlMPuZcdTAwMDZcdTAwMWKNoy5tT922691gYI+9W/uCaeBfolx1MDAwZXhcdTAwMTh1PbdRirJR6Vt71NqoXHUwMDE1XHUwMDFlbiv6inMzyGhcdTAwMTCBk/ZcdTAwMDS6QTOoXHUwMDE0+tfl3oegXHUwMDAyXHK2PvhcdTAwMDVmMNmKZleNozSuLsosnZ6KifrS21x1MDAxMZdRM5h8YFx1MDAwZVx1MDAxZVx1MDAxYcPjNKBE1ChRyLA1ZrRCRq7D4uhcbsTeaihFTWDyITdoaFx1MDAxY3RZSCHIrU1KXGJcXNlJXHUwMDFhQK7MXHUwMDE3XHUwMDE5XHUwMDFhM3joISv9sihcdTAwMTH1fVx1MDAxYoVgiVtcdTAwMGVcdTAwMWS0MkLoYVx1MDAxMfxAXGLnXHUwMDAxXHUwMDEwXCIxYlx1MDAxY4JEVDC1nV9cdTAwMDadL4JvnbixrnOUiX64NjvOxun6ajk5blx1MDAwZv1EaruiMmpcbpNcdTAwMGbLQUNjYLxoXHUwMDBmo9FcdTAwMTKUXHUwMDA075iZ/aPWhNGCXHUwMDE0XHJcdTAwMWF6vfe311DOomYw+ZhcdTAwMWI8NI66PKBcdTAwMTNcdTAwMDKYXHUwMDAyiSysOdRJKDk9OTrs+q2h+bn45upcdJuV6sVcdTAwMGZ/frb67vE/fsZcdTAwMTdtaFSQcIXuXHUwMDBiXHKRjNFK3vFUSjTTSrlBworx5ryZnbbyRIFcIlJcdTAwMTLBXHIuhcPXgFx1MDAxMjPKZF+09Zf2zCpGoIRotJ01mGX3tjbGl6I9SXc/vpRcdTAwMWJcdTAwMDZcdTAwMDdR+/VcdTAwMTHD+nU8o/b39rGN0tXqvLJcdTAwMGZtdPN1q6PXefbmieebZmfbf6NcdTAwMDfXhLtYztzzf/f+wfv/XHUwMDAzjP+wviJ9 tree rust-journey/ rust-journey/ ├── 01_variables/ main.rs Cargo.toml ├── 02_functions/ main.rs Cargo.toml ├── 03_ownership/ main.rs Cargo.toml ├── 04_structs/ main.rs Cargo.toml ├── 05_enums/ main.rs Cargo.toml ├── 06_error_handling/ main.rs Cargo.toml ├── 07_collections/ main.rs Cargo.toml ├── 08_iterators/ main.rs Cargo.toml ├── 09_threads/ main.rs Cargo.toml └── 10_async/ main.rs Cargo.toml $
Figure: One folder per concept. Each has its own Cargo.toml and main.rs.
Cargo is the Rust build and package manager. Running cargo new creates a project and cargo run compiles and executes it. Dependencies, tests, and builds all go through this one tool, which keeps things simple. One thing though, add **/target/ to your .gitignore before your first push. That folder can get huge, hundreds of megabytes, and once it’s tracked you’ll have to go back and untrack it manually so it would be way easier to just ignore it from the start.
I used the rust-analyzer extension to get inline error messages, type hints, and faster feedback*. It underlines errors as you type and explains them inline, which makes the feedback loop much faster than the usual write-compile-debug cycle.*
In Rust, every variable is immutable by default. Once you set a value, it stays that value. To allow a variable to change, you mark it explicitly with mut. This is the opposite of Python, where any variable can be reassigned at any time without declaration.
let name = "Sandesh" ; // immutable - cannot be changed
let mut age = 20 ; // mutable - can be changed
age = 21 ; // fine because of mut
// name = "someone"; // compile error - name is immutable
What this is used for
Immutability by default prevents accidental changes to data. In a large codebase, knowing a variable cannot change unless it is explicitly marked mut makes the code easier to reason about. When you see mut, it signals intent: this variable is supposed to change. Without it, you can be confident it will not.
Functions in Rust use the fn keyword. Unlike Python’s def, you have to declare the type of every argument and the return type. The return type comes after an arrow. There is no return keyword. The last expression without a semicolon is returned automatically.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dW3NcdTAwMWJHdn73r5iVqlJUXCKP+3T36YudbFx1MDAxNU1Ja+3asiPJ2WwutTUkhlx1MDAxMlYgwFx1MDAwNUBd1uWqfck+p7a2KnnIr/MvyWlIXCJcdTAwMDaDXHUwMDFloFx1MDAxYmhcdTAwMWEtXHUwMDAxtC2LuJCNme/r853T5/LDJ0Vxa/rmsr71eXGrfn1WXHL6vXH16tZd9/jLejzpj4b0XHUwMDE0n30/XHUwMDE5XY3PZq98Pp1eTj7/7LP5O8qz0cXbd9WD+qJcdTAwMWVOJ/S6f6fvi+KH2Z/0TL/n3nv6bPa62SPvf/O4PptWw2eDev7Ua3r8U1YqLoVcdTAwMTEgLVPKSqGun39Dz4uSXHUwMDFibjQqNFpYI6+ffNXvTZ/TXHUwMDBigDP3I7hFaUFcdK7M9Uue1/1nz6f0XHUwMDFhY02pwNLv4dxYJfH6JW9X9HnBrlx1MDAxZplMx6NcdTAwMTf1yWgwXHUwMDFhu2VPx9VwclmN6ePOXHUwMDE3flqdvXg2XHUwMDFlXVxye9evu1xyXHUwMDE1LZTNX3PeXHUwMDFmXGaeTN/MfjpdVrqEt1q/47fvPlx1MDAwMW893vUu+oXPnlx1MDAwZuvJZGG9o8vqrD91l1xu2PxRt7rLh73ZXHUwMDFk+s/5msbVRf3Q3aLh1WBw/XB/2KvdvbhVsYXfNuy9+23vb+/8dop3j/w4X3tdu1x1MDAxZlxmXHUwMDEylTGavq6faWDMLD36aDSc4VxyjKFbx5SZX43+5Fx1MDAxZVx1MDAwMW06+7Hn1WBSz6+/W9v9XHUwMDA2XGLnXHUwMDFm8eqyV719XHUwMDBiaI2EJrBCWbh+ftBcdTAwMWa+aH/+wejsxfy3fNL4XFxtXFyPxr16XHUwMDFjjG1gXHUwMDBiUG58e1xyXjDMXHUwMDAzV23CXHUwMDAxelveu2eP2UpwekF8s1x1MDAwMOU3XHUwMDAzUJ5cdTAwMDCglmlpXGb48NmFTk5Lt8xaXHUwMDBladEptLaoeFx1MDAxYXRO+9MmXHUwMDAy34NzWr+eLuJSqEVgcr5cdTAwMDRMaXhpXHUwMDE4KqWEQk4k0sswXHUwMDE1otRcdTAwMTE76e3anLM6O6DCzVx1MDAwMFX4gbrw6veItFxcXGK0XHUwMDE2vZA0nZhEepdcdTAwMDYtXHUwMDEzQ9LQetBEQHKOOIc0+vCPrybT4sHV8GxKy51cdTAwMTQ//flvxfGwmo4u3jRu6mg4fdL/0+yD6IVHXHUwMDFmVFx1MDAxN/2Bu1x1MDAwYrjwg49cdTAwMDf9Z+6C3Fx1MDAxYdTnXHJw0EWZ9kmhXFw/PVx1MDAxZF3Onz2jn1f1h/V4+VaNxv1n/WE1eFx1MDAxYbHo6mo6elxcT94ue/Gz02Wqv3rPXGYoOa5cIurVINiGiMatmF2UZVx1MDAwNURcdTAwMWKah5w3IHHaluaDlDgynJhCaiWZXHUwMDE2XinTSUsmOVx1MDAwN81NzqbibNSrI0R6w0C4u9CQ2HMhg2pcdTAwMTmEmoej8DavkcnV5uE260FccvJcdTAwMDPXMLi1hkFcdTAwMTLSlnHEXHUwMDE4YII2pGCcpclcdTAwMTiY58NcdTAwMTBcdTAwMDEj5Vx1MDAwMlx1MDAxZe2ysOayVMyKhj5pylx1MDAxNlx1MDAxNVx1MDAwMUtU9uSe2lx1MDAxM9WiwjdHcqY1XHUwMDFh6/fzOjFcYlx1MDAxYVx1MDAxMSzDXUNwSbM0gdfUJmbh0Vx1MDAxZGmT5uJcdTAwMTY0yHR81S1BVtKMgFx1MDAxMMI0s1x1MDAxOI3xME3qknOu6PJvz7V7J/dOjo/3hGs6nGuSK6WhuZtcdTAwMDVwTVnFmeFi59v9XHUwMDEy16peL2OyLawuXHLbZniFXHUwMDEwvlx1MDAwMV+U+1x1MDAxZcKZUkrLwSSwbT1z1js1e8I3XHUwMDEzzjeQXHUwMDA2ybhcdFx1MDAxNk04q0n7Z0e4o4zpdpSabFVcdTAwMTDP1ktIkCWXiUQkSciTXHUwMDA39/eEaDaCaEojXHUwMDE35DJHqUhcIpowyu7ekVm2bFx1MDAxOVx1MDAxM61KTbQzgm6gVVOLXHUwMDAxXHUwMDA0XHUwMDBm21TJNFx1MDAxM5BARO6VUTuO4Vx1MDAxYXd7XHUwMDE5t1FcXNNCXGJELfPz2D7PmGufp+ZaX/Awpum1+lGo0qpcdTAwMTTqUd4/sV/uy3nOl1x1MDAxMZFcdTAwMTFcdTAwMTDCXGLy11wi1aOkt3A1XHUwMDBm3OdCNMJexlRbWF0qw3ZxXHUwMDExpFwiyVx1MDAwYjvYtVx1MDAxYqHbSTjdUCqFzIJoYmttIJLeRfTQmFx1MDAxZt3uZky2u6mpdlx1MDAxYUQzsZZmgCVcbmut4EbRLmpgflx1MDAwYlx1MDAwZT5bXHUwMDAw3+5F6EhO3Fx1MDAxMUZ6fbYlXHUwMDEyXlx1MDAxM85l31x0i40kqET5XdLd8m1cYneaMeFO09s2ctp4XHUwMDEw63Bt7P9g3DZcItv9XGKykXFcdTAwMDNcdTAwMTL1xjaxtda6WVx0mGUkct+ctjCm6bXhkYPTtlx00Vx1MDAxZYRcdTAwMTNNoWD0paN4hlK6dDmRX3Bk73y2XHUwMDE5XoPYJmAt21x1MDAwZUdsm/HtV1x1MDAxMUFcdTAwMTJcdTAwMDaGXHUwMDFipuJSmDgy8tsk5mfY7mRMtzupyVaNx6NXQVxcXHUwMDEza4/ZXHUwMDA0K1x1MDAwNUKS9JG9StX6KkZEolLWeKpvVotIXHUwMDBimnOEnSeyLpHt019mzLbm4tLQbVxcT4PIplx1MDAxN8s6XHUwMDBlMjJcdTAwMTHVXHUwMDFlxlx1MDAwNEc4Wo5cIjJcdTAwMWGpJVx1MDAxOFx1MDAwYqDyO9HeOyF5Oq7O6qCzNlx0a/l2XHUwMDEwkpsx7tdcdTAwMTHhf1x1MDAwM4JQXHUwMDFld9hGXGY1XG7J3cuObz9kzLZcdTAwMWZSc62qX196ymk9VFuvI1x1MDAwZulaXHUwMDFicu034Vxck4icQ7NcbjYkg0Qrhlqy/GzbXmVrXVx1MDAwZa4mQVTDteFcdTAwMTGwJaDkaZTkXtm1r8O5ZpVUikfWeFx010tDXHUwMDAyz8+u/UPGXFz7h9RcXDtccrZr6122w8n2u0c3pNw3XHUwMDExzpvghHRAr33rPtmWXG64NKjmtyDRybawvJF3eTjZXHUwMDBlcNyCTlx1MDAwMKRdqyZcdTAwMGaO22Zse1x1MDAxNMM2a0GKjrZcdTAwMTddbFOcXHTJhckvb+vHjMn2Y2qyuVx1MDAxNMlcdTAwMDW0drNccuVaXHUwMDFiR1xcKzkwQZ48WTmtPSaOzym7nnLq2FrEPaHct1x1MDAxMZQzSjp1qHyn3KKTc9JcdTAwMTFcdTAwMDSaqeWJOs04eaub+Ivl3GefXHUwMDE1w1ExqS/6s7ym4qe//LXoX1xcXHUwMDBl+nR5i3E9vVx1MDAxYXeUdbOFR3fEyqjVR/SeWUFcXGckX9TT3/v6LHQ0/2hVykHDP5xcdTAwMWYrLFx1MDAxM7ZcdTAwMTFcdTAwMWNdT9hcdTAwMDdcdTAwMGa0Pcnu5O6G+n98XHUwMDE3TljBJUPOILLRh+KAjLbTXdvIVUB8QVx1MDAxOPx9eFx1MDAxZqQ2XG7lclx1MDAwZlx1MDAxYY/VgFxiq1x1MDAxMdxcdTAwMDapXHLWXHUwMDBmXHUwMDEyhI8jUqMsU4L+iTo9NtxqJXdcdTAwMWWHWIvA8G6OWlx1MDAxZFx1MDAxMJhcdTAwMTKBT1widItcdTAwMDZcdTAwMGLWxpXjXHUwMDAzXHRKjdbsPvC8XHUwMDE2hFx1MDAxZVx1MDAxZL35Ntg4Kpmr51x1MDAwM1xi/SB8XHUwMDFhXHUwMDBlQqOMXHUwMDA10/Q8QzJEOZNcIvOeW9V47NWDrSwvd8FaddygeIlLXHUwMDAw9HUj1OFcdTAwMDDcLzH4fcQuyFBcdTAwMDGZ4bhtXHUwMDEwtbSorcknR/ly1G/2XHUwMDBld1/zv1x1MDAxNXNgzL65/vt/3l3/aqHnL/+k9bZbg2oyPVx1MDAxOV1cXPSn9Dm+c2tYus7Tajz9ku5Nf/is/VxcPex1PDN717HjyvO6WrrT9L7mc21S1YPT0asgllx1MDAwZU5cdTAwMDcxXpuAkrluNIyTeJOGzXetWcdfhqVcdTAwMTZSklOvrHF3conF0pQgmDDSkv5cdTAwMDOpff1cdTAwMWR5TJ/qXHUwMDAwWt/mXHUwMDE1q8BsQmloPb5DSv+Ln9IxPaqVXCKua/DamkbweknxXGLrNlximfgkgkDAVVSgZlx1MDAwNY79sVx1MDAwN985dKmU5Vx1MDAwMqTrfobYylx1MDAwMOHMlkYjfVpgXFxb1SjkvVbjorT0ZaSWwIHZRlx1MDAxNelcXJ6buFx1MDAxZdZ52qZcdTAwMWKKLP423DZxV1x1MDAxMUr3yGualqKN81x1MDAxNGMmtVx1MDAxNpynXHUwMDA3rLaNOPNcdTAwMDaRxVx1MDAxN7W/WXUjXHUwMDE0s8PI4cLqwiP6q5pSkycyvIhcYsiYfNzhdtvIXHUwMDBmUlxi/muEXHUwMDEwRMZcdTAwMTSgictccjGGgyHG7fzkbC1cYiMmbFxidkBhSlx1MDAxNP4uXHUwMDAyhYpJaayKLOFcdTAwMTKSXGaxwKwnabyFYXhUJmAvlD75fEChXHUwMDFmhf9cdTAwMTaVs8Ncckpmo1CoXHUwMDE1SvJpst5cdTAwMGJdWGZ4XHUwMDExXHUwMDE0llx1MDAwMbbYIOVm4jJ5dme+IVxiVuFcdTAwMTBUgjwuXHUwMDE5t1xykl8uafdcdTAwMTS731x1MDAwNq9cdTAwMWY+hGU2XHLL+FjaZSlcdTAwMTaJytly4Fx1MDAwNT1ualSgJYCntzmDim1cdTAwMTS8zyjQcurnaEygxTLLuIls+2CZU+BcdTAwMWF3zt1cdTAwMTW4nHpRuVx1MDAxY2axi9KFN9KLXHUwMDFiRaOGXHUwMDFj6o5cdTAwMTb/sVx1MDAxMZQ8rchcckVQzlwiXCIoXHUwMDAyXHJncWPpwFx1MDAxOEDLmd35OftcdTAwMWNp71wiXHUwMDE0i1x1MDAwMyayXHUwMDBioCwuL1lcdTAwMDTlMlwigJKT79quXGL4ICVbL5xsoCS3ptnaICT1XHUwMDE4jWao9c5P0tZhMDx+XCIgnyjeR4HBOlx1MDAwMoNWXHTgXHUwMDEy4tpxS4GaN0fSZYrB8OBJyD5cYsYnilx1MDAwZiD0g/A8XHUwMDAyhNK6wcvNXFzRsHG4KLTJP35yuYxCT/iE81ZW1Y2ET/KsurshXGI+i4AgME3bII+UvrM6dIlq507Y9cOHXHUwMDAwyqZcdTAwMDFcdTAwMTRcdTAwMGZNu4xcdTAwMDWuXHUwMDBmoIDvoD8qglx1MDAxMkDV2+SqXHUwMDE5/qGnqjzfPoLCNDNSaFx1MDAxZSVjLCjNXHUwMDE42p2Td1x1MDAwNTCnPlj6Ztusj6BcdTAwMDDXJXP91LhcdTAwMDar3bBEj6aOjKPkaU5uKI7SXHUwMDBmNydaKXDNfeK6kzNcdTAwMDKxe1taPCqSV6KRsr1BXHUwMDFjxVx1MDAwMa9X0E2kKzSlRWdcdTAwMWNT6V5qsvjKOFwivlwiXHUwMDFhXHUwMDA1jbv2bdvt8j5ITfeHcFx1MDAxMkolOLNGRHYt1y5XXHUwMDE5s/YqZiBcZlx1MDAwZrC0e8RcdTAwMWRAuCVcYl/ERNQtXG5cdTAwMWJVruF0XGZoyFx1MDAxZYDh0ZWQXdB4XFzbm1xirnxcdTAwMTRcdTAwMDBcdTAwMWOEXHUwMDAzXHUwMDEwXGaQpuCAcdugstZlVmVdPOmCK55d0Fx1MDAxM1xcXHUwMDExreFcdTAwMDY3XHUwMDEzXFzJs1x1MDAxZu1cckHwXCJiXHUwMDBmJFx1MDAxYmxcdTAwMTDiOvZJNMzojJrRXHUwMDFlXCIrm0ZWXCKOglhAZIX7LEVMZCWApy6yUkO1XHRHM4qsXGb9XHUwMDFjjYisXHUwMDE41FxumWJxTdulllx1MDAxMqTafWfbXHUwMDE1wJz6YOlcdTAwMWLUsT6yYnhptMsotkq6MFSCXHUwMDA0lTxNyVxyXHUwMDA1VkYxPlx1MDAxZFd0idEnqDtcdTAwMDMr5Fx1MDAwNVqFXG5RpsWjXCKg20ZDolxyXCIrb1x1MDAxYuxcdTAwMTQz/M0vWG5BXHUwMDE17yqTxVNOYzqwZOTK6l5tqlx1MDAwZt2TuIzgXHUwMDFlU1JJqaKcWS2IsNrCznXcOlxmhotcdTAwMTRk+cT0PlxuXGb+McKbZVx1MDAwMqXpqvHsXHUwMDAyodJMuKrknPXIXGaEXHUwMDExPVhcdTAwMDI2QvszNWH5KEA4jlx1MDAwMCFcdTAwMTdcdTAwMDBcdTAwMDZ4XFy5XHUwMDBmXHUwMDE45vKm9O5HXHUwMDE5rUChXHUwMDBiqXjGIXtCKrI1mfVmQiptaOWhg29cYoKTcFxiXHUwMDFhY1xyKIhcdTAwMGIsI7NcXGeVqH2IqWxcdTAwMWFT8ZC0y1K4VtFuYoaWdLfsclx1MDAwZlx1MDAwYk/1j6/3rS6l5FqgZVxuhZUxrXBcdTAwMDNYfJtVUMNGRiSjgMvUz+CIgIu0mjGjvFX1sjtYXG7CIFx1MDAxOJvYwVx1MDAxNUYxjGphsVx1MDAwMrVTXHUwMDFmZn1TdlohQF8xXHUwMDEwIdpcdTAwMWEtmPRP/4iNtuRpZW4o2nJcdTAwMTUhdFC5XHJD2bi8Kk5vI6OQj5m5XHUwMDFlRTDq5dxQZXF5aeIrvf5Lz1x1MDAxY7lcdTAwMGVTwVx1MDAxN1x1MDAxZFvuS4JcdTAwMDdvXHUwMDBmrlx1MDAxYvAqeI1MfuhexctcYrJZi8AwNl+F01x1MDAwZa1J1+VcdTAwMWNgXHUwMDE5X1xyajh9tjFcdTAwMGUxXHUwMDE0hyrmXHUwMDE4qFxyMK8q6ZEqkVx1MDAxZrgqebW1Klx1MDAwMUO6ZLGNbVAulXFcdTAwMTPtSTTmjM3T8P2xVSTElVxcxqXe+nTy3j17vFx1MDAxNpZ0WT90sfx6e1gqw1x1MDAxNCd9XHUwMDEy1/ZcdTAwMDJQatHcZzNE5ZScvKBcdTAwMDGwbbncwF9cdTAwMDOTpVx1MDAxNW5cdTAwMWUwSiBcdTAwMWErX1x1MDAwZkJdXHUwMDFlXHUwMDE0c1x1MDAwN1DfhFx1MDAxYnHOpGTkXHUwMDFj+1x1MDAxNfNSXHUwMDAyzPVOiVx1MDAwNEkjm5tHXCJcdTAwMDdOg5RcdTAwMTCBySXN/PCb775+ePLwafH4/tPvXHUwMDFmP/LLZ7nw6I7kc+dKI6aWrJLSM1x1MDAxNVOFcJJDK8ailmMstFx1MDAwYpWGNiGraC9cdTAwMDKtPG4sd1x1MDAwYoog5V5ccvn6Uzgp3ZhQ1lFdatpcdTAwMGbOpzNzbZCnZiRaKzlu5cV+XU2mhVx1MDAxYu5In9h9XG4vI/XCoztiZOdKUzIyKKok2i1mPIxEXVx1MDAwMidnqqPHzIGN3Ww8ZSycjpq8LoFGxqWDkjFTVmRcdTAwMThUetWfPlx1MDAxZl1NM6bh0lxu04SWZuw7XHUwMDBiYZ80bcfJ0+q9dFx1MDAxMyq8yXNRY/f2qTn2KYNcYitoUCCIyHYzXHUwMDAw9K/duau0xLovvHzLY6TeXHUwMDE3mzBtXHUwMDFk0XohRGunJvmIJlx1MDAwNFGNM1x1MDAwNHBcdTAwMTO1JDvYuljS8XDSXHUwMDAxQ6Zdo1dfhGI5i3U+uMyNvOBcIvl5nmFCxpznLfGuP3k3XHUwMDE0su5cdTAwMTVcdTAwMGXcXHUwMDE31YwzgzfFT3/+WzFcdTAwMWNlbFx1MDAwNsOXnlKe1iG8Nbiet1x1MDAxMkuJhCZcdTAwMDNexrIyxkqisif39sZKinDCKnD9cDFuwFx1MDAxNsxK90VcdTAwMDaHMEt8XTF/Nlx1MDAwZlauXHUwMDFjMbuVxTxcdTAwMGZhnm2fNXmYXHUwMDA3lpdkKK1cdTAwMTKz81xmbX3pMVx1MDAwN4u5goAywmJyLYRcdTAwMTXMeI+aOiOotDOCgeRcdTAwMTVcdTAwMWVsVjqyXHJcdTAwMDFf1G9ejca9YkhcdTAwMWav7mVMxK6FJjWG4WfA7bM26+ElSN9h203k2buJYKz+uWg4X29aXHUwMDFhYjhcclGQn8Bl5NBnLlx1MDAxNWdcdTAwMGLncVx1MDAxOVx1MDAxZa29XHUwMDA1YtDhWmvSKW84wtfulFUlaqOkRjcnW4MvXHUwMDFmzZZcdTAwMTFcdTAwMTkye9VV6bTZXHUwMDAwflx1MDAxZChd/E9y7o1cdTAwMWM2toKl0KFcdTAwMDRcdTAwMDDVSFwiSVx1MDAxNcnXTG5V/Xc+LCZ/vKK7ePT686Iv+J3i01+6/1x1MDAxNz9cdTAwMTTF6+Lv6b/iR7/FUFx1MDAwYo/uyGLELT/CjqxnL1x1MDAwZmEvsrZcclmmL4AuXf9RXHUwMDAxSljLeCOjflP67tPZ+CnTMcFcdTAwMTCLwnDtXHUwMDFm4t5pVcgh49yy1Fx1MDAwMyVJ27HmcMtccvg7XHUwMDAzecZcdTAwMDRtrS8pXHUwMDAzRVx1MDAxMFx1MDAwMy1Rh75cdTAwMTh3wzN5K1dFMFFcIml2KVx1MDAwNe3QRtnldCphZGk0IUDR/bJofHWVcexUx9ZcIu5cdTAwMGI7TTg73U1y/Vx1MDAwYqTP8VqeTTKPfSjJwehGcUIqerpz+23o+dNf/rtcdTAwMTiOikl90T+jezu8W0yf9yfFy2pwVVx1MDAxN/SX6fO6WFx1MDAxNVx1MDAxZsmCw5t8iDRE7/VfesxsWMquXHUwMDEwntTIQ+p4XHUwMDE0d22EZTVak4OqTFxcn1x1MDAxNpBIllx1MDAxNdTOXHUwMDBm1deYXHUwMDFivnnueLPz6c+cO1x1MDAwZbVgu23ObLZcdTAwMDfhsVx1MDAxZoRcdTAwMTFJuqSsJUhcdTAwMTM3YsJcYsFQNFNcdTAwMTczROZp+PbYimZcdPRm6Xp2x9TD7UXF6J9dgjLF1vjl1qjUiJYrXHUwMDEzN3JCWSClmndcdTAwMDX/LHM8yD1uq3H0RFjRllx1MDAxMrWyVoHkjHFPR4nIzPH9ys85ibDhpLyFVUx4j1x1MDAxZbu7hiurlGBgXHUwMDEzh7eEUaZ5vzfQ30/uf/Pw5Nuvv31UPH18/J1fY2eROd610IRHXHUwMDFmfKPEcdHIXHUwMDBiuHaJWWnp3pBVZYc81WhC3ouINnPa9Fx1MDAxNiZshmlqrminzDBcdTAwMTXguJfz8ePC6tIlqPKg9PBmpXNcdTAwMTfvXHUwMDBlXHSqm/DtfoRcdTAwMDFELZhcdTAwMDVgcWeOSKKMgeE7P3NcXFwi3L7lqPKgZHCu1nNcclx1MDAwNJacXHUwMDE5w0FYXHSMW98wpYOdW8G7XHUwMDA3McEjRlx1MDAxZbo1y1x1MDAxYdM92U08xixzc1xuXHUwMDEyV0gpxo1cdTAwMTJbXHUwMDEx76e//PVdTLRjVE1cdTAwMTZcdTAwMTbPu8qUkjMoZVxcmFx1MDAwMDqyclVhVFxc6uk+tTY+Zb+KyXxTyFx1MDAwNVdxhVGAzDBhXHUwMDA0y8/+XHUwMDFk3cmYfc3FpbOAQdnekq/38jiyknZXXHUwMDE0YLSQtCNcdTAwMWVyTiOZ91VcdTAwMDTzNElPSVx1MDAwNtB39Nlwyds5p8C1RJG6SoNcZqAweqvEhKOrYX9afFa8XHUwMDFj9Xt3iv5wMq2rXjE6z5mPa5ec0jRcdTAwMDblhmvWjtp7eMpLSVx1MDAxOEhRk7FfhvFhjGFkSLYxcoBcZqCQgFx1MDAwYsO3cjGMfcEzZuLC6tKZRs9cdTAwMTGuh3JcIsA0XG4opeaaXHUwMDExLLRrqpzAOdyvoMyvozJcdTAwMGJcdTAwMDRI7XdcdTAwMGVFN/mksa7eOH3SXHUwMDFlZ8puZVx1MDAxYp3bdTa6uOxcdTAwMGbqolx1MDAxZY9H419kzMVVi01pXHUwMDBmNy/MXHUwMDEwxpdg8bNcdTAwMTVmcLbpeXZOhVx1MDAxOb+JICRTLu081kuUILTSXHUwMDE5NGVdj8RNKjNEI/NpXuguStfpjVn3XHUwMDA3SPRcdTAwMWReXHUwMDFmKjO6Ufl1XGYqrUIu/elcdTAwMTQrQoioNFwiQvJcdTAwMTBcIqBmW7U9W1vb8MVcdTAwMDdem/HFXHJcdTAwMTVn8FxyizP8XGYuO07cXCJ5u1/y7ptcYt4qwbVxs0yirFx0iTulQZmdJ0It8fYttjMmZnuBXHRjj2E1XHUwMDE5XG5aXHUwMDAxf1x1MDAxZvGULH1cdTAwMTGNXHUwMDAz7VbQ7lFcdTAwMDTtXHUwMDEwjGRWxzVjXCJcdTAwMTmDRvLdj9VcXGKdK1K4rlAoLqpcdTAwMTf15G2ZQlVMpvTL3CqKxnlXcXSnKH76v//JmKfbf6QkzO71X3pYXHUwMDFklvsuXHUwMDFiqVx1MDAwNodcIozNSP1tXGapheGLSeshpJ6dvOc9m86ZXHUwMDE3sXlccoZcdTAwMTShODz07/eC8Ds/XGKjOqVcdTAwMGLN6d+44Z2guLKzSvecwXlcdTAwMWG+QbZiV+QpLlx1MDAwM1NtW4Zx7+TeyfHxOlxcfvhccvxP2T9vj0t3SGM551E5f1x1MDAxYbQkUKqsYenqMIJcdTAwMDR5q1x1MDAwZUPK5SNcdTAwMGaQUIJU1syGxFi9fVx1MDAxOUZcdTAwMDBIP1wiaf44JpJFeLTgnynRnVx1MDAwYqCV1Jyb1O3CXTmIbOxIXHUwMDFiaPP7x4+//l3+3fv9y0x4xiHCKjDYYmC5ebo4P4DkpbVCXHUwMDFio6RcdTAwMTJcdTAwMWN8VVGH3JxVfHxcdTAwMTJz+C9cdTAwMDCRMW/9aMNVXFxcbi1zjahV+tCyULwx3WNcdTAwMDNC/m50VZxVQ3Ij6d5cdTAwMTVXk9q1yFx1MDAxZvTp8mZ8XHUwMDEwXHUwMDE5suiUZFxym1x1MDAxNalcdTAwMTa7+vvIemibujFLn8b4vswgV0rH+b5WKFx1MDAwYlxm80td3d+2qVwiqIiD7nWAmbTl7MxZSWM56kNcckck/76PsZLkSVkr0Wclu2uH0c2ERiVcdTAwMTLXXHUwMDBlk5G0yLdSrdNcdTAwMTFcdTAwMTmY/rSoq/HgTXE+XHUwMDFlXVx1MDAxNFVxfjU8m+Y98iZw3elcblx1MDAxY8XmqTtS+eZq/sw9VYsno5f9+mfj6k1l8PxLXHUwMDA0V6Wki2xBRMU80KJhJGN2ns26XHUwMDFlj1x1MDAxMZHiXHUwMDFjXHUwMDEx+aFD8bdcdTAwMTFQJC9WSdnRc6JcdTAwMGKK2lx1MDAxYTRcdTAwMWOyzyVcdTAwMTOb5ZLJhoi99lwipCi5tVx1MDAwNoiGWotGJvohlSxcdTAwMDST/1x1MDAxYY5JdFx1MDAxZT9Yb9tcdTAwMDVYrtCZd4xcdTAwMDKmXSfCxKAk6WqZilx1MDAwMOWSlHGpWNV5/fte/+VRNUvGulucLiVl9c+L0+Kf/qlgxVx1MDAwZlx1MDAxOZ+Kb/FZ0qWYidBcdTAwMTQz0XJSfMTmZUdoIJLP+1x1MDAxNVx1MDAxYfhd1LG4m1x1MDAxY85YVGiAz2paXHUwMDA1ZFjWmn3L0JuLXHJcdTAwMDS3/W3JOlx1MDAwZvFcYlx1MDAxNiUqiVJJTVx1MDAxYrdt1JJcdTAwMWNMalxiXHUwMDA1/y3G41x1MDAwMK1cZtlHr03tbu1LTDFcXDb7MqeyqVqarVr7Mpe+XFyQa/1cdTAwMTlZmqxcdTAwMTOxO1ea1Fx1MDAxZcpcdTAwMTBaarWellx1MDAxY3lcdMo1RudMc9HIXHUwMDBiPjTcXHUwMDBlYWVcdTAwMTXBSlCWIbHS23elm5WCK9T0ztSz4i2jm791XHUwMDFh6PtjoXdcdTAwMTGw7I1lwJqTtdP2sDQsg1x1MDAwZZlv+tEhkzOGmadcdTAwMTHMNEIhVzyynTa5oGhcZsjcQ3Ry81ROhFAgXHUwMDFl2mn7QHjmXHUwMDA3YUTGnDLacqX84/G6oEkvl4rj7lshrELmafj22FxuXHUwMDFiN81WujzOXHUwMDAwd8JFjD+CPM7e1qh0M99cdTAwMTD9SXMripJdZa4gXHUwMDA3MGdYujzOIHndyuNE7jnLYFii0UajUIpcdTAwMDOz2ydy7pfTW8dcdTAwMThxTkBcdTAwMTAs7kjcjYqzSqSfZqPcqd824vr7R1x1MDAwZp/mn8bpXWW60265UVx1MDAxMidyz2QpIUqjuGYgnb/r1dKH7JRcdTAwMTVUPI+gomRcdTAwMTKVXHUwMDEx3lx1MDAxM+/u7Fx1MDAxNMGtXHUwMDA1XHUwMDA2JnlcdTAwMGZcdTAwMTl0O8M2XFx8eO5mMr31XHUwMDEzXHUwMDBih0M3iWlyWZ/1z/t1r/gw+o9u8iFcdTAwMTIyOSjDU7G2UfV0mzl0J92Uw89cIjisXHUwMDAxjFxc6CBcdTAwMTM0x4fI5vbXXSu8JVxu719zUlx1MDAxOZTZqWTL4/cxTorS1T1cdTAwMTh7XHUwMDE4QVx1MDAxMU+65zGk46Ri0d99rZt0RkhFK925W7VMOtfk824x6L+oZ40+i/6wOMmaiGtcdTAwMTac0Fx1MDAxZW6ex4m401x1MDAxNmxcdTAwMWZH1lxcP5yVQktcdTAwMTBcdTAwMDZcIi0hoDVugNiuSblcdTAwMWWHmyTNIS53keHSlLREw7Ql7W+NPDRgi8PkXHUwMDFmoo4shJVoI10s0GQrUKr04Vx1MDAwZfLBtypcdTAwMDA4XHUwMDFmXHUwMDE2z8Z1PT1cdTAwMWHSVfq8+Du6XHUwMDFid1xcbtnluD+cXHUwMDBlhr84yvhMMWLt6dRdYFKcxLbxWCauNqVcdTAwMTZoQbmmkVx1MDAxNsX22a4n9y1BbV94+1winLfKoJvba3yZOd205Vx1MDAxMsnm3kCUklx1MDAxNtOYtbNcdTAwMDFt/+PWV/VgMLpb/PDjL/7jVsZcdTAwMWPtWmhKQoYly+lWiMNHSFEqqS1t8a7thf/Y4GBIu1x0OYjJyiGHXHUwMDBijH8ybCcjXHUwMDE1MmJcdTAwMTAz6e0o47CVy3W3cEbozlx1MDAxN1knyflcdTAwMTaZkohB53fNPMcuXCKCJJpZZVx1MDAxMvQk3a+8uItwXHUwMDA2XHUwMDFhjlJK2uU8XHUwMDA07D5L1ppryKAl0Fx1MDAxMlx1MDAwMV2CWf/ibYLZdXKZa1x1MDAxN5gxXHUwMDFmXHUwMDAz1pyquyEuUzMwXHUwMDE1yXqSPlx1MDAwZTlxUaxcdTAwMWOGs1JxXHUwMDA0UEzGpcQhZ0JcdTAwMTEtd1x1MDAxZYpcXFx1MDAwMcJJ/9np6PWmMCRcdTAwMDNcdTAwMWRcbsNGc6hE3Vxyf9bI202BcJQgJ05YXHUwMDE1m1x1MDAxM1x1MDAwN7MxkzyDwXmrsTmlLbjevKS62Vx1MDAwMWk+tGrb3Dh57549Xtt782PocXi5NTrJTXcl1ioymVhZ2jCY2PnJaVx1MDAwMDo3yI5TvkRiY2dF1i5cdTAwMDZcdTAwMDFuqppHY5tSx5wsXHUwMDA24PQjXHUwMDEy2X9cZjfnbuIhKOMtyuyOO1x1MDAxOSmNUFx1MDAxMpP3i1FcdTAwMDZcdTAwMWEhsFxyVPaD71x1MDAxZp08ffjto+LJw189On76/eP7T/z6XHUwMDFhXHUwMDE3XHUwMDFl3ZG+XrnaNGeKXHUwMDEzXGJKlWtcdTAwMWTjKFxctlx1MDAxNqQxStRoyMJay8Hr+3Io0Ta/XHUwMDEyJ1p/RCRcdTAwMWRHxKKs5oooXHUwMDA3cYc6ZG/oLTo9SW3T50p0puNnqVl4NKNjnMRcdTAwMGXwXHUwMDA0gtLguGmJOlx1MDAxZk25KJWrq1VcXDIukoxFNKaqzN5cdTAwMWPbTMKZyVx1MDAwMbhcdTAwMDWOMoqZSlx0Qztpema6+vmtepTMXHUwMDEzQV9Wg6vaT8osMnI6V5rKbFx1MDAwNvY/XFxPSEs2UaFcdTAwMDXdXHUwMDExLz5kpq7g4jTGSipGXHUwMDE3mvuHz3VxUZOWsUaJXHUwMDFjXHUwMDAzxn8t1oaJs+Bi50rT2Ea+kYI1y44l+d8l0t3WSjNjTZdpPCjYXCKIm1fh3KRrLsi180bmVlxiWMbd2L9cdTAwMWKwk0zDVn1HSFx1MDAxMla9Xkfrq7ylbMi6XHUwMDEz8TZI04pWN1x1MDAxMlx1MDAxZnFnx63MXHUwMDE4xVx1MDAwNZNcdTAwMWRW9CBpV1D1ZcRcdTAwMDFcdTAwMGZaZlhzulxcXHUwMDAwVcnqctftN3GHIGKq2jJcdTAwMTHpvVmqhkV/OK2f1eOMXHLpqsUm0rU8TNfaXHUwMDAwUjJRalx1MDAwNKkkWdKDsI1k5KtcYmGrhLawUGJcdTAwMTNUVc+FsVxud9+edbWy7TSYWTCye6lpbGTYNJqWttWePlx1MDAxN9yoUlx0MFxmJbjwrKdh10Havl/TWna+jmCn4aitVHFcdTAwMDZTklx1MDAwMKU3qeQ1zfRzXHUwMDFiQcLNpC3dw0l9NHmfsU7q8NtL17f+XHUwMDFmiVx1MDAwML/MW91cdTAwMDYuPVx1MDAxMXnDptO0Jpz72Fx1MDAwYkaUKI1xTVx1MDAxMYU2zU7DXHUwMDA3hVx1MDAxYsTYN1x1MDAxMUFbxlEx9NZtdVx1MDAxMpaDQU23KflcdTAwMWMp7c64tyHsRfWmXHUwMDE4jVx1MDAwYve/4Wi6stNeXHUwMDE2JnXNelx1MDAxM+ncsPk1ylx1MDAwNHBcdTAwMTM56Vxcy7VcdTAwMTZpdO5e5Vwi/Cmcl4JcdTAwMTlUgsVcdTAwMTU5W61B6eabslK5T0ZcdTAwMTf10fCOXHUwMDAzPK0451x1MDAwM5XVy01jMMPa9rTVLi430Fx1MDAxMihLqYmNZDN5x0i3g9p9t6Z1XHUwMDFjXHUwMDA1XHUwMDE2zlEwUiHJXHUwMDE09JG003hcbis4sORDXHUwMDE5yHhcbmCiXHTFjYYyvKyP6Fx1MDAwN1dcctFIUL9cdTAwMWFM//Hozt3i/ng8XHUwMDFhZ656Iz9CXCIyh6nftoX1sFmJklx1MDAxOWWlfDvaqIvOXHUwMDA39dvJYFxiZzBdaORcbniU+jXSXG7rKttSXHUwMDEz2DCxnbvqZOR51Vx1MDAxZmRsWZeXmEjjXHUwMDA2dvJp+59cdTAwMWVcdTAwMDaCglIhN1YwpWRHN584mbtXk8WBh1x1MDAxM1BwN1x1MDAwYpN7+1EuRXivXHSIXHUwMDAwXGYhvftJzN7ugGWmXHUwMDFiv31xdHRnJlx1MDAxYsnWXHUwMDFj1dknK3SvN4lt7Fx1MDAwZifudZtXa+jG+cvqVj7pi4nOoVx1MDAwNrVcdFx1MDAxZjMq11x1MDAwMOHnY0S5XHUwMDA2oEZXTFx1MDAxNJdO5OI5gumsXHUwMDBi3VxinWGtfVx1MDAxNsdmXHUwMDE5toxJgyWiXHUwMDAy5F2hkUjVtlexXHUwMDExkOFGXHUwMDAz0LhupdbEnVx1MDAwMSqthfORd149tGQ2flO/Kd5tk59nbC38y0yj3+jnXHUwMDA2teqBllx1MDAwYuUjXCKR0IU7mLDKXHUwMDEyXHUwMDFmVYKk773qxlxiXHUwMDE4wUVjUHIjrDebzbRcdTAwMWa8jlS6XHUwMDA0OFx1MDAxMKnbXHUwMDE4o2VcXJqtsr5cdTAwMWZfTaZcdTAwMDVhfFhNr8b1pKBcdTAwMWJaTOrB+ae90dmVW0J/+Kz46c9/K/7gXjiuq1x1MDAxZT2QMWm3/DxcdTAwMTFzftbQO6jxj5KiZMK1X9NcdTAwMDZ1Y1x1MDAwNO9brlx1MDAxM6+J1CBIpzPbXHUwMDE4OHtcdTAwMWRcblWiRFx1MDAwM65DjFx1MDAwNC7l4YBcIo74KoL4pFx0uUR/XHUwMDFhq+0u9+Caa5U8OVx1MDAwZV1TdNw2+nk+XHUwMDFhXHUwMDFkNc/Jn3aEOrMg9pr1plx1MDAxOdBFvFxy6lx1MDAxM2SELpVraa9cXM5NY07xO1x1MDAxYl0y+lx1MDAxMqTarLSNWVDzZHRdolwi3ktDd9I0S+pcdTAwMGUmO4i5OoK5TINcIo0kvWeLy4l111x1MDAwN1x1MDAxN1q6PDqbOOxCN1x1MDAxY/V2NntaXHUwMDBmXHUwMDA2k+LN6CpjunrWmM62elx1MDAxYVx1MDAwNq13YflyXHUwMDFhq1x1MDAwNlFqRkyUzoKi9vTUO9BwXHUwMDE1XHJNXHUwMDA0XHJcdTAwMDXXqMiIepWzaj84b+qFYJnUqftcclx1MDAxMK+dJt+Khs/7k+KsXHUwMDFhzlx1MDAwMvzFs3F1Vp/T29+URfFoVEyuxpfj/qSevP3W/eDicuRSu8dF/fqsnpmwSZkzhdN+vnT0n0yrcchcdTAwMGVcdTAwMDBuSIE03FpNQltCO7nAmlJcdTAwMTjOwFpS2HKOy3lmXim4XHUwMDAy3dHvIG5I14NcdTAwMDfanuzLcHiwMSl5tDXQXVx1MDAxMr6NXHUwMDAxlk5KrpU1KDZcdTAwMWKMkHpfXHUwMDAwbvV2yT//+19eVjfyy3Z5XHUwMDA20lxcXZpg1jdn4unl04vnf/z+jbisXl18q//0laeZ2jJBrcWSK2NcZqI1tM+3dLTgpeZKXHUwMDEwQY021vw8OrpmXHUwMDAyXHUwMDA07Fx1MDAwYk+PI1xmuJuHa1xcwbSHp1J1XHUwMDBlq7ZSK/KXXHUwMDFhPfLSXHUwMDFjX5JHbuxWlZyfXHUwMDE2Tyq6XHUwMDE0k+fFl8/pL9W4n7E1XrXYeNNKf84u7a3q8vLJlC7srfdcdTAwMDdkt17261dfelx1MDAwZVx1MDAwN89nX7c+ebdcdTAwMGI4wNezc7VcdTAwMWY/+fH/XHUwMDAxj3dBhiJ9 Rust Functions — Anatomy fn add ( a : i32 , b : i32 ) -> i32 { a + b } // no semicolon → implicit return key name typed parameters return type body IMPLICIT RETURN Last expression without ; is returned automatically — no return keyword needed fn square(x: i32) -> i32 { x * x } x * x ← no semicolon, this value is the return SEMICOLON TRAP Add ; → returns () (unit / void) instead of i32 → compile error! fn square(x: i32) -> i32 { x * x; } x * x; ← semicolon makes this a statement → returns () ✗ EARLY RETURN You can still use explicit return to exit early from a function fn safe_div(a: i32, b: i32) -> i32 { if b == 0 { return 0; } a / b } ← explicit early return UNIT RETURN If no return type is specified → returns () (unit, like void in C) fn greet(name: &str) { println!( "Hello, {}!" , name); } ← implicitly returns () FUNCTION SIGNATURES fn greet(name: &str) no return value → returns () fn add(a: i32, b: i32) -> i32 returns an integer → returns i32 fn parse(s: &str) -> Option<i32> may or may not return → Some(n) or None fn save(data: &str) -> Result<(), Error> may fail → Ok(()) or Err(e) Key insight: Rust signatures are self-documenting — just reading fn foo() -> Option<T> tells you this can fail gracefully. No surprises. No null pointer exceptions. ★ - Sandesh Bhandari
Figure: Function signatures in Rust include explicit parameter types and return type.
println! ( "Hello, {}!" , name);
fn add (a : i32 , b : i32 ) -> i32 {
a + b // no semicolon: this value is returned
// a + b; with a semicolon returns nothing
That semicolon rule took the most getting used to. Adding one changes a return expression into a void statement. The compiler error is clear: “mismatched types: expected i32, found ()”. Declaring types up front also makes functions self-documenting. You can read a signature and know exactly what it expects and gives back, without reading through the implementation.
Ownership is what makes Rust fundamentally different from every other mainstream language. Every value has exactly one owner at any time. When you assign a value to another variable, ownership moves to the new one and the original is no longer valid.
let name = String :: from ( "Sandesh" );
let name2 = name; // ownership moves to name2
println! ( "{}" , name2); // works
// println!("{}", name); // compile error - name was moved
// To keep both, use clone:
let name3 = name2 . clone ();
// Or borrow - lend without moving:
fn print_name (n : & String ) { println! ( "{}" , n); }
print_name ( & name2); // lend temporarily
println! ( "{}" , name2); // original still alive
This eliminates use-after-free and double-free errors, which are common in C and C++ and cause crashes and security vulnerabilities. In Rust these cannot happen because the compiler enforces ownership rules at build time. You get memory safety without a garbage collector, which is why Rust is used in operating systems, game engines, and embedded systems.
Structs group related data together under a single name. They are similar to classes in Python but without inheritance. Rust does not support class-based inheritance. Methods are added separately through impl blocks.
let mut person = Person {
name : String :: from ( "Sandesh" ),
email : String :: from ( "sandesh@example.com" ),
person . age = 22 ; // works because person is mut
Structs are the primary way to model data in Rust. A network packet, a database record, a user account, a game entity: all of these get represented as structs.
An enum defines a type that can only be one of a fixed set of variants. In Python you might use strings to represent states, but nothing prevents an invalid value. In Rust the options are defined at the type level and the compiler enforces them.
enum Direction { Up , Down , Left , Right }
let dir = Direction :: Down ;
Direction :: Up => println! ( "Going up" ),
Direction :: Down => println! ( "Going down" ),
Direction :: Left => println! ( "Going left" ),
Direction :: Right => println! ( "Going right" ),
The match statement forces you to handle every variant. If you add a new one later, the compiler gives you an error until you handle it. This is the feature, not a bug.
Rust has no exceptions and no try/except. Every function that can fail returns a Result type, either Ok with a value or Err with an error. For values that might not exist, Rust uses Option. The compiler warns you if you ignore either.
fn divide (a : f64 , b : f64 ) -> Result < f64 , String > {
if b == 0.0 { Err ( "cannot divide by zero" . into ()) }
match divide ( 10.0 , 0.0 ) {
Ok (result) => println! ( "Result: {}" , result),
Err (e) => println! ( "Error: {}" , e),
Failure is part of the function signature, not a hidden possibility. Anyone reading the code knows immediately whether a function can fail and must decide what to do about it.
The two main collection types in Rust are Vec and HashMap. Vec is a growable list, equivalent to a Python list. HashMap is a key-value store, equivalent to a Python dictionary. HashMap does not preserve insertion order because it is optimized for fast lookup, not ordering.
let mut numbers = Vec :: new ();
numbers . push ( 1 ); numbers . push ( 2 ); numbers . push ( 3 );
println! ( "First: {}" , numbers[ 0 ]);
use std :: collections :: HashMap ;
let mut scores = HashMap :: new ();
scores . insert ( "Sandesh" , 95 );
scores . insert ( "Alice" , 87 );
println! ( "{}" , scores[ "Sandesh" ]);
Rust iterators let you transform and filter collections by chaining operations. Call iter() on a collection, chain map and filter, then call collect() to get the result back as a Vec. Iterators are lazy, meaning no work happens until collect() is called.
let numbers = vec! [ 1 , 2 , 3 , 4 , 5 ];
let doubled : Vec < i32 > = numbers . iter ()
. map ( | x | x * 2 ) . collect ();
let evens : Vec < & i32 > = numbers . iter ()
. filter ( | x | * x % 2 == 0 ) . collect ();
let result : Vec < i32 > = numbers . iter ()
. map ( | x | x * 2 ) . collect (); // [4, 8]
Lazy evaluation means you can chain many operations without creating intermediate collections in memory, which matters for performance with large datasets.
Threads let you run multiple pieces of code at the same time. The output order between threads is not predictable, and that is expected, not a bug.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dXXNcdTAwMWLHlX33r5ilXHUwMDFmYlfJ47793XLiKpqibCW2pEh0XHUwMDFjZ53aXHUwMDFhXHUwMDAyQ3FiXHUwMDEwYFx1MDAwNkPRiuOqfUmet1L7kN/nX7K3QVx1MDAxMlx1MDAxOFxmesBuTHM5NCBVXHUwMDFjcfDBXHUwMDA25p4+9/P0j+8lyV717jzfe5zs5T9cZrJRMSyzy71H9vrbvJxcdTAwMTaTMT5EZz9PJ1x1MDAxN+Vg9szTqjqfPv7448Ur0sHk7OpV+Sg/y8fVXHUwMDE0n/ef+HOS/Dj7Lz5SXGbta4/fzJ43u3Lzm8t8UGXjN6N88dBcdTAwMGZ4naWKciNcdTAwMTlcdTAwMTBqjFx1MDAxNFTo+cPv8OGPSMoo0YJLRbhcdTAwMDRgZPH4ZTGsTvE5XHUwMDAwRqZGXGLKXHUwMDE0XHUwMDA1XCKFnD/jNC/enFb4XHUwMDE0bURqXHUwMDE0k1x1MDAxY7hcdTAwMTGSXHUwMDAwzJ9ytaTHXHSZX5lW5eT7/GAympR23VWZjafnWYmfd7Hy42zw/ZtycjFcdTAwMWXOn/c+ZFRTsnjOSTFcdTAwMWG9rt7N3lx1MDAxZL9X/Fx1MDAwZfdcdTAwMWG/45vrXHUwMDBmQFx1MDAxYtfbXoW/8M3pOJ9Ol9Y7Oc9cdTAwMDZFZb8sIIurdnXnz4azW/TnxZrK7Cx/Zu/R+GI0ml8uxsPc3oy9jCz9tvHw+rfd3N/F/WTXV35arD3P7Vx1MDAxYlPAe8U5V4vbsDAyXHUwMDA2K1efT8Yzg2NaU7z7fPGEYvpcdTAwMDRccq2avetJNprmi6/fLu2wZoSLT3hxPsyuXlx1MDAwMkpcdM5cdTAwMDRQXHUwMDBlYvG9jIrx982PP5pcZr5f/Jb3alx1MDAxZqtp15NymJfetlxyZMmWaz8uTFdcdTAwMTOHtSrtb5/v8ydPzD5Za5tOXHUwMDFivlv7pHdjn7SzfWqujFa41zjMk7ZcdTAwMTmnXCJcdTAwMTItmkpcdTAwMWTXODmhXG6IimOcVVHVXHLwxjar/IeqseWyZbukq3bJXHJLXHUwMDA1XHUwMDEwhFx1MDAwZsF/ck7VqpUy3LpFgJ3m+oTkvbNTuFx1MDAxYjtlbjtdeva1QeKXy1x07n4uezRtXHUwMDA2XHRcXFNFhFwikVxyXHUwMDEyKFx1MDAxM7Ut+HaDXFzYm7Uz/OivLqZVcnRa5tlwmvz83/+bXHUwMDFjlVx1MDAxN3nyMiuz0ShcdTAwMWZcdTAwMTXTs9qdnYyr18Xf7OepXHUwMDE5mL36NDsrRvZWiKX331x1MDAxZlx1MDAxNW/s97I3yk9qXHUwMDE2gt9NVaCXMn+4mpwvXHUwMDFlXHUwMDFk4PtlxTgvV+/XpCzeXHUwMDE042x0XHUwMDE0vvbsopq8yqdXq1/+JvBLy7+4QVx0pFSsXHUwMDAz7cXI31Wiy76RWNj7XHJuXHUwMDA1XzxlXHUwMDAx1Dtwdpqk8yCdXHUwMDFk7lx1MDAwZlJcdTAwMTBMXHUwMDFh9EGlXHUwMDEzpm0olVx1MDAxYTdQJVwiuzRRWWNgl3peXHUwMDA1eOyULlmh5Fx1MDAwZa/G5YPXrt1OXHUwMDE2NEfmWU9cdTAwMTbvkyHkwDexQdjAXHUwMDA278ihXHUwMDExnVx1MDAxZFx1MDAxYdBglMD/rZjhOtPUlHNh6vtFXHUwMDBmbVx1MDAxMzIvf2Z5W6w5JXODpDTlXHUwMDFh0KHRUlLBXHUwMDFjmyQ+I8SZXHUwMDE56sHwWG+JMyP990mhJCNU1lxcylrwt3Lxxlx1MDAxOI2hhuLeSiNcdTAwMWKjUmBcYlxyMEa3N3OaTZ1OXHUwMDBi6KWr9+m0LC0xkm8ygGNcdTAwMWb4XHUwMDAxWzBAXHUwMDBi/qRIJe42UqB5gFx1MDAwMt1cdTAwMWR/T58qcyC3XHUwMDA0f8pcdTAwMWZ/lFx1MDAxMGGYpi43hTWvzYNcdEqM0orXbmRcdTAwMTT8SWGIZKxufKH4e/5cIvn82Zc9Rl9zgUvYqzB82Fx1MDAxMHpcdTAwMDNcdTAwMWbo0YYv5qI+o1NDXHUwMDA0RnWCXHUwMDE49Fx1MDAxMlx1MDAxNlx1MDAxMeWO+jygp4Ogp5lG6uN1K7s1kpecU26Tn7G5T0tcIk3d+kKx99GnSXVcdTAwMWRcdTAwMGKXXHUwMDE346RcdTAwMTj3XHUwMDE4hmvWXHUwMDFhjVxyhz6QxJt5KySFSlx1MDAxNTNSXG6b90GHeXHrN8WkXHUwMDFh5jrbltya8cekJlpy1Vx1MDAxMlx1MDAxYUHz4pxcdTAwMGZtXHUwMDE1XHSQvlwi8yFi0nAt6uZcdTAwMTeKScsoyfl1QqrHeGxZZzQseiW66+nRXHUwMDE2LDKtUqpcdTAwMDRhs/utdvRcdTAwMThcdTAwMDbF/ZBcZppGXHUwMDAwXHUwMDEwJl30yFvzXHUwMDE0hkmitYTYeVxuZVx1MDAxOK+96Vx1MDAwNlCcjJOzi1FVnI/y5ODl18lgUubTZFrYi9k4n1xcTFx1MDAxMXf9RWjY8mNcdTAwMDGXbpLRMTyVXHUwMDA0XHUwMDAzXHUwMDE0ZoBodJdcdTAwMTZcdTAwMTHFXHKMqZQpzMzLZlx1MDAxMdBedjBcdTAwMGWB8Wf+MGZAuVBMu1x1MDAxMjx0XHUwMDA12vNso5DaXHUwMDE4XHUwMDFlu7hvc3pKQN1cdTAwMTRDUfziXHUwMDEy0TI9Lc6T6btplZ8l52X+dvab+1x1MDAwYl2PNUfDq1dcboiR5TjUiFx1MDAxNHd7Q1xmU1xuhKnd9rlcdTAwMGbMZWpcdTAwMWQs+yhGTUR294G3KiV0XHUwMDEw4Fx1MDAwM1x1MDAwYipcdTAwMTgh7n6cVt5cdTAwMDVmXHUwMDFislxmhdhcdTAwMTVmjXt0N+LFN8ySMlx1MDAxYuR9xqhrkdFA6ZVcdTAwMWPidNn7RVx1MDAxNlx1MDAwNU6kwY1YXGKJN2FcdTAwMDWU3HbJ2cJcdTAwMTDlXHUwMDA079GCZnck6lx1MDAwMcknXHUwMDAxqVwiQaCtYsdE8+JcdTAwMWOSQtiKXHUwMDFkjZ0qwuiHXHUwMDE46JQqyir0XHUwMDFmz85cdTAwMGL0JaviLJ/1Tlx1MDAxNCdJMb88fYQ//Gp6naT5aJqd5Eny87//0WNcdTAwMDRH+EyxXHUwMDAwP60yR9eho1x1MDAxNFPvdGzLPslUSjQ/SVx1MDAxN48t8Fx1MDAxZNbQNdC31Oh/Oeg+XGaIdFxyo+j3MFx1MDAxMdRiKDUotuRY31NBflx1MDAwNdxtMK3xyz3CtFx1MDAxZHBcdTAwMWJXX4bFW7Jcbje/dlx1MDAxOKCuXHUwMDA2dVc/zOJ18dqymm0zXHUwMDBmssf3aUhSiUpBQTmTSu2+LVx1MDAxMVx1MDAxMv1Q2uvel8kw37wpXHUwMDBimK9cdTAwMTWCXHSwQ7+2rFxmNMk3scFcdTAwMWW1ZX3evS2LXG6JJOvshGm3TEmMUoayfrdcZlx1MDAwZfNZs3nImE9jXHUwMDE0gju6XHUwMDA2pWNcdTAwMTSCRp6EeJ9cZjGw3WiH7JF1ftHdOolQQjFcdTAwMTnWz1xu+DJAP4XGLozdiXlukGmu+89zu2Q8ZVxcMiNcdTAwMThcdTAwMThghjj8ZtBhs1x1MDAxMP2c2bkj1/lZXGKfo20pXHUwMDE1XHUwMDE4XHUwMDE426YnzTlRsc1SgzRBs2MrvvPRXHUwMDE3h8nBiyeHTlx1MDAwN1x1MDAxYcTS1XtyoFeXXHUwMDE4K2xcdTAwMWSCV55quWFcdTAwMDLUquvCgKZGcUZcdTAwMTTGSFo6q7QkXbzPLjO1XHUwMDA0wN9cdTAwMDZcdTAwMDDQJn1cclx1MDAwMXd9p7WDkFx1MDAxMU143emMlJiyI2idYteLaZ5Mq+Hjx1dJmk/cOOzF8FH7Ulx1MDAwM/C4XHUwMDE2jnRcdTAwMDM4UrLKiHhPUuBcdTAwMDB2oFpcdTAwMWFFndHtXHUwMDBlj614/F1IU6FkyG5uQmwttyomXHUwMDA0JfUyeCw8cso6JYpcdTAwMTdGXpzlj1x1MDAxZj+5KLNcblx1MDAxN/4wcNm25Fj4ZJvgs1bCm3us6I1KTaTkxJ3lXHLDppDm4Mm2XHUwMDE0Vr/0xyZcdTAwMTeMMlGP1b1cInz0KqmgXHUwMDEwu9+3e55cdTAwMTfX0GNcdTAwMTgurc4/z7tcdTAwMWVwXt1ccup2xGFwmFx1MDAxMmBKKiFcdTAwMTVcdTAwMThn6XRHiK2g+yrAQVWEguDK6aDKVnVcdTAwMTGM3ylnjMRnRCVop1x1MDAwNqTTbDxcdTAwMWPlyW+uy4iPXHUwMDFm4y29XHUwMDFjf/D3vyc/9lx1MDAxOI1eq47Fi9xcdTAwMDelcjlcdTAwMDNOxWqGkYpUXG5qNJdgYMeNwTB9XHUwMDFlUlx1MDAwM9VcdTAwMThFUkNcXDBtXHIjXHUwMDE1V0TEb1x1MDAxM5SSaGp43fhCUXoyKXuMxqXVReJG7sWNpiEl40JcdTAwMWRNXHUwMDA12KlP1Vx1MDAxZG5bxYovQuDGqZJcdTAwMDCr8lprfVHA8FJBXHUwMDBmZI1W8Fa0jpv1XHUwMDAycEX7hFlcdTAwMDfEebX1QVO9qYXobO9mXGbI8cNcdTAwMDPz2baUKl76Q05cYs2RrFZ73tchTlx1MDAxMyM1XHUwMDE3pH+AgzRcdTAwMTU9XHUwMDA23PLyYlx1MDAwMc5rolx1MDAxM5SHZ6lVqlx1MDAwNCF4J1xmRoBcXO4yokG4+31IXHUwMDAwaCfZW7rreGuNUGttXHUwMDE1QmO3s2NcdTAwMDBoTK0hd1x1MDAwM+T9mJyXxbhcdTAwMWGN/+ODXHUwMDFlXHUwMDAz0LnKaFx1MDAwMZ5frZ7cXHUwMDBlROAm1YJrzoBcdTAwMTmJ/794yqZAPDg0oLZcdTAwMDWIr1x1MDAwMoCI7qM0JFBqXHUwMDA0KGdKqNilXHQp8c5Dp0TMd3vXuYxkgL+3Sn786bu9XHUwMDFlXHUwMDAzcv1yYzHkiVx1MDAwZjBcdTAwMDXc7pJyRlPNiDJCXHUwMDBiO/BFulx1MDAwM3OrXHUwMDE48nVAzVx1MDAxMIity3Jn6kU1L85L+FJcdTAwMGImIXaG1CquXHUwMDE51in38igpPvxkkWhcdTAwMWPl+flcdTAwMDc3VbjHj0/Kydl/IVx1MDAwMkfFtM/8ucmHiEavjj5NVyrndlx1MDAxNOP2nUrKXGJH/OKWK/nC2jdF8VaNbVx1MDAxZYWkdDBMXHUwMDE0XHUwMDAwxMWvsHJx7udcdTAwMDKnXHUwMDAwXCL+2CZu2aRcdTAwMTO/Qo/RXHR3XHUwMDAwulMv0NUydu2gYykx0spLoUeL8aVrVnpHna2g+zqAOin6JkI7m/bbNUqAXG4jXHUwMDE0J1widlpHq6U53VxyQPchks5PyU9cdTAwMWb2ucHGscZYIFx1MDAxND5cdTAwMThsdtSoVblcdTAwMDJcbilcdTAwMTjQhlx1MDAwYlx1MDAwNruqYVx1MDAxOPz+XHUwMDEwwHlMaSYoXHRsqWFMIz2Z+59KWIHf9pVccoVfS00jk+OC3K5suFx1MDAxOd6+XHTAXHUwMDFigkZxxcOG1NBcdTAwMTORRtRTa32B2zZWXHKFX9VcdTAwMTA8XHUwMDEwt6tcdTAwMWFuhrg/XHUwMDA2IE6AsjlcdTAwMTFcdTAwMWVWNkS/X1x1MDAxMX7/XHUwMDAzyyuI28ayofArXHUwMDFiitvdSsZlqo1No+DNoEKxXVI0XGJ431x1MDAwNlx1MDAwME9cdTAwMGJDkLWcriVvP2fJXHUwMDBlfWrFTezRJlxcXHUwMDBmMZ1ksHZ1w6Hwqlx1MDAxYlJ9O1x1MDAxMoGa1IrgXHUwMDBiLsFcItF1QsGubNhcbsQ/hcR4UnOQZlV6bm9N3VDa7lxuqWJP+Ep7XHUwMDFjXHUwMDA16XTe2Xd7Z1xihVx1MDAwN1M0bF9sLHb0K1x1MDAxOVx1MDAxMnxcdTAwMWauOYb7imgwi1x1MDAxYt/unaqUXHUwMDE5aVxiXHUwMDAxXHUwMDA2wtBcYmmYreLKzFx1MDAxZqKccJglNFx1MDAxZFxi1SuO68JJNUB4bM10JEpcbjJ6/TBNU5t17DFUvVZcdTAwMWSLSKVcdTAwMGZmuUZcdTAwMDBSoJKgzypEcyzKyJRcdTAwMWEws1umqXCIvjLOU4V7uEEsS612iZ0wXHUwMDA0XHUwMDFmXHUwMDA3kCxBbqNcdTAwMTheuCCsWntcdTAwMDBAXG5cdTAwMDApdfxBfsrxhndcdTAwMDHx1cBR+pdJMf7gw/RifFlm51x1MDAxZvS6rHHriqOB1ytcdTAwMDPEmk06xqGzoXjKZnLMxOpDMt59jlHuW7nZLUHoIFx1MDAwNKFKSkq1U5ZcdTAwMTnaXHUwMDExKnDnNUzFb9NcdTAwMTGadJO6+fjj5DIrquRkUiazacB8eE1fSTVJTopxMT3tMVxcw5ZcdTAwMWZcdTAwMDe7w+KtQ1wix0/ij3lL/O2EJlvgOvSHq1x1MDAxMFrY82GCXG6TmnFKXGbcv6TrXHUwMDFhXHUwMDEzfFv8bZRcdTAwMWTnjlOob1x1MDAxNUtjXHUwMDBlsTTKMEpD3jBcdTAwMDBcZncp7nLxrGxUXHUwMDAwg2yVVlrub5JaUdxcdTAwMDPcuv5rzrbCyJtRTlX0Xlx1MDAxNUOE6HTW4+FcdTAwMWZcdTAwMGZcdTAwMGa+Pnr24nly9Oyrwy+fPW9RTetcdTAwMDVdrFtsJP20XHUwMDFiaIZcdTAwMWNcdTAwMTHfQKhyIJQ6KGJ3RHxcdTAwMGJcdTAwMWVP/PGoXHUwMDE0aCMluPKarVx1MDAxNCE4MYxcYn3vlb01dmhThqNjP4ZYjjGYcXUz6lRxe75cdTAwMWWhxlxu4bhqXpBcblP/XHUwMDEzolx1MDAwMrtVOYE3/vZcdHbqQlxuXCJcXFx1MDAwNlxurYNzyFx1MDAxNlx1MDAxMlxm07ErYEhcdTAwMTjMdFx1MDAxM/ezhummiF5cdTAwMWMgsby8OFx1MDAxMcOZf7xcdTAwMDCN819Y7eTJXHUwMDA1XHUwMDE5ODSXeUDA8D7PXHUwMDEwbsP1TFx1MDAwMFx1MDAxOSPyoVx1MDAwN1x1MDAwYqdupFx1MDAwNWguU6M14atcdPR1/GDsII9R/eZcdTAwMDeofLhcdTAwMDFEwzlxJKCA0NT2uVx1MDAxM6J0jEZbc/Dk4OnhlnBBXHUwMDExwlx1MDAwNcYwXHUwMDEwgUeU4N1hSmrdQ72Qelmzz4MmLeuMUns9c+i7tsVcdKKRTNpxw+zqhsj7S2duXHUwMDAwwTWT2t1cdTAwMTXRXG5ILlx1MDAxOFx1MDAwM8NrN7OH7EC92IGZZuiwY4eoNvq9PztQ2yeHdFx1MDAxZHZ0XHRXyFx1MDAwZZrQe892riVcdTAwMDf6QMiBxiZcdTAwMDeHuHBcdTAwMGI5iEa/3I5cdTAwMWOurm5cYrxRd3LgUnFKpVNqo51cdTAwMWOI0KZcdTAwMDc6w2uN0otcdTAwMWJks/S144a4JnpcdTAwMTZcdTAwMTI5XGJ7yrpcYotcdTAwMWOUkkpcbq7u/VirtdzAXHUwMDFlXGI3sNjc4Fx1MDAxMNht4Vx1MDAwNt2YV99xw9XVXHKBN+7MXHKCaiqYXG6LXHUwMDFi7Fx1MDAxOV5G1bVcdTAwMDd6yFxy3ItcdTAwMWJ0Y8zGzVxyOpVAtea23KA5697dv1X0MFx0oFx1MDAwN1x1MDAxMERcdTAwMDJxXHUwMDBllLaLglx1MDAxMVx1MDAwMMLq7Vx1MDAwNJGa+6mStZV0ZFx1MDAwN/5A2IFHZodiXFzl5SjP3uaeRUCql0N57jjsUVKe4l1HNOL2pUhtXHUwMDFlfOM+XHUwMDExrbNMb0vd79xcdTAwMWaSXG7RoKk0ToZo7eZcdTAwMDdllaGZiH6mnjGC6U5cdTAwMTM3P//zf5KFUVx1MDAwZWdcdTAwMDezTy6q84sqmZTDvEzGkyo5L/NhgS7M8ShPjt8lQ0TBmz7Phsf4UJH6Tq66XHUwMDFlN6v481x1MDAxYfbr+kVylt9EN2WpkLwr+Fx1MDAwN1x1MDAwM/+vXHUwMDAxPYtagZ1cdTAwMWJ3cXF7vZ9cdTAwMTJqaVPEZmOujeK00+FhV4bZ44p/c4Fxav7V5jV/Lle94e7hmT5cdTAwMTaDk/XyRe/TXGZcdTAwMWV+eFa6wVx1MDAxNpK6M8Cskl+Y3lx1MDAwMzBcZlUkQiYyXHUwMDA0Y8ZnlWfVny9X/bmGXHUwMDE1i1x1MDAwNElT4IpjSGpcYlx1MDAxMGPUqoFcdTAwMDbGZ1x1MDAwM34sTtZnXHUwMDEwfjmcMFxyiM+4XHUwMDE1VcJgy+lccrZHaJIoye/gRElAK5dcIsBcIltI4SHU/ltXXHUwMDFhiSY2L//vaOLq6ob4qzrTXHUwMDA0esZGg3aOa7brcHGO5ELvX1x1MDAxNWitUfpV/5VKOeeSXHUwMDFiSTBChNpo8DVppJJpZZhiTFx1MDAxOELYqrlcdTAwMTJcZjJcdTAwMTTYwUViOCjdXUpnqzjkXCKAQ8T1tKCrXHUwMDFjKVonT65kiaWU0TlEIDN1mjxZ3pn73Fwi0LrSSFx1MDAxY7J5l8COQ66uboi/tzFCXHKtNSVhXHLGXHUwMDE4MVxu9L3rXHUwMDEyXHUwMDFiPWRcdTAwMTHPPoGGyKEr1qDEpFYh3crIMEK5c0Jxx1x1MDAxM612elx1MDAxOcBcdTAwMTPEUKaWXHUwMDFjlFpcdTAwMDKqXXJNgpRMqsj5J6RcdEV5JyGZ5c23z91cdTAwMDKtK41EXHUwMDEzmzdcZuxo4urqhvD7oXvDXHUwMDAwQ9eNXHUwMDA1TrJLY1x1MDAwN/b6PcleeTZcZjTk3t1cdCmdXG5mJY5cdTAwMTXjoE2EfrKtXCKJd1x1MDAwMdVJqmanuTudlpVweFGdxHhcdTAwMTlj39jVSYFcdTAwMDEkdDvOb3nr7XPTQOtKI5FEcZbbp6+CMivLyeUyKtFcck2XY37BViuJhi28hjlcdTAwMTBcdTAwMTdPe6g9XHUwMDAyd8RcdTAwMTV/XHUwMDBicNWkMEZcdTAwMDA4Jf/aO4yZXHUwMDE2oEQtl3zfXZ3nk+L67eeEuPhXsjCM2Vx1MDAwZvN///mR89k1a2s8/73G6/ZG2bQ6mJydXHUwMDE1XHUwMDE1fpCXdlx1MDAxMStfdJWV1Wd4c4rxm+Zj+XjY8sjsVftcdTAwMTYup7awuPq6+mNNXFzlo+PJpVx1MDAxZnVaqPrV+9GHWi7oiFpz9lxcR1xmUt5+VMqDx+vdsOYxIf6AXHUwMDE1XHUwMDA2mYorXHUwMDE5XHUwMDE061OiiVx1MDAxMbQ+gnzfgJ2zJlqgmyrl0tX7osql5fm31a1tsylcdTAwMDbfk1XIeVb2XHUwMDA1XW2qczTRQUBcdTAwMTTlrezSROVDVHY5Jlx1MDAxMECP1i1cdTAwMDT3iZrtmTUgRoEx/c6soVx1MDAxMfq3lzTrhjsj7GqENMBcYpFpuVx1MDAxNtxcdTAwMWQqtfpoklApe+Cj3WKE/sXrZuFhZ4RdjZD5XHUwMDFioVwi6O/zwElE0ERxqmSvZ1x1MDAxMa1cdTAwMTH6V7+aac2dXHUwMDExdjVCXHUwMDFlsFx1MDAxM1wir1p5+rCmOkFcdLG65X1cdTAwMWV6skbon1tcdTAwMDfCm7HYzlxuu1mhXGKxQqRVxiBQQ4eiXHUwMDA1XG7eczMkvtmARsVV8NWkXHUwMDFkVanVqybCSsA7XHUwMDEyXHUwMDAyVlx1MDAwZnA359NmkDLAIJkwwIy73romTKFcdTAwMTRfJ3p4eio5q3W21nNcdTAwMDJi6eo95Vx1MDAwNJZWXHUwMDE3KSVcdTAwMDC+UzeNXCLWXHUwMDBld7Fxp0Jwp/ns4PBA3NleRdFHvVx1MDAxY+g17uBcdTAwMGVwRz1xJ1TD7d/hLjLudFx1MDAwMO6optQw6lZAb8NcdTAwMWRcIlx1MDAxNYNcdTAwMDDSw9OLaa9hR+9cdTAwMDB2zFx1MDAxM3aaNOKcXHUwMDFk7Fwiw874w05cbiWY4e558jbUXHUwMDE5JYxcdTAwMDZz/1xyRCuoY71GXHUwMDFku1x1MDAwM9Rx71Ivb9ScdrCLXGa7fX/YUTtxQXRcdTAwMTjswGpOS3X/yYZcdTAwMTXY8V7DjseH3bB461/jaFxi3lx0R9Ps7qynMKh9XHUwMDE24FgqXHUwMDBlQpFQqFx0rVx1MDAxOWG9LveWk0s4frOxXHUwMDE5Kl8zlCH6XHUwMDFkTfty2SBcdTAwMTlCXHUwMDBlfFx1MDAxM1x1MDAxYoRcdTAwMWXZ4IHbXHUwMDA2g6RANTpSRoZNilpcdTAwMDVcdTAwMDK5fPZAXHUwMDBmbfM4oFx1MDAxMaHhmGjHie61r2ixPYbYpcfBY2iXjNCN9sY+2eWTznZJgVxiIYBcdTAwMDSefqQpeiiM9HmCXHUwMDE5zdJvhLlcdTAwMTGi1thjbpJMpszqW6BTht+XMo5cdTAwMTllUGmIu6yGuc625HC8Y3Loz+FcdTAwMDbjXHUwMDExopRzRnnVSG9cZpJRsMcmk9iNXG5cdTAwMDa0qlxytG3gLz9/kTzZP9pPXu1cdTAwMWZcdTAwMWO+dnvOfOnqPXnOLeuMJE1WQuaDRUpcdTAwMWHlXHUwMDExs1x1MDAxYbhcbis5IIjtTVGSMebSnFx0VCDcJiGyY/I0IGVElFZcdTAwMTKcojOi/axjrkHZmmZkr0VKe/BYJ8GAXHUwMDE3l1xihulpcZ6UXHUwMDE3o3yanOXZOJmMR++SXHUwMDE3z1x1MDAwZm+OXHJcdTAwMWXgNfzz0aeJXHUwMDFir71cdTAwMThcdTAwMDLa+JNEQ/SxXHUwMDBmouVcbr2uXCKaQaqllMZQcKaidlx1MDAwN8+ug/PnIfExXHUwMDE4qUVd2svH2TN2mpL2sPAyueyzMujS6uLkokpcdTAwMTh4gU7dXHUwMDBlOtxOU61cdPrxXGY0l2JHo4G4+1wiIFx1MDAwNUy01twwcFx1MDAxNTxXyXVcdTAwMTH9Uy654DqyV4t7LatrPW+APHzDLMmqJEvshM0nyfQ0K4vxm6TM/3pRlEhH+Vx1MDAwZuejXHUwMDAyv+1cdTAwMWXjc4PPXHUwMDEwjTuHPjBcdTAwMDbSXHUwMDEw5Ha6wzJF6uRWXos5yTNs3J1cdTAwMWZcdTAwMWWYz7aGO5/5Y5hcdTAwMGJpp/BcdTAwMDJTy8RIK17RO+bcL1x1MDAwN78++rTH4GwuMIpcIn5cdI6h9tujUFx0q93ZXHUwMDFhdIq+XHUwMDE0IVx1MDAwMqgxqiZst9PB94Leb/2hx5Ti0riPSlx1MDAxMSuu7DwlxFx1MDAxNVjx6tjgM8pQ1kn59NlJ8m5ygVb8LqkmM9rJk1x1MDAxOVx1MDAxOV2Mp9lJjiHcz//8VzKYnJ1cdTAwMTejvEQ+OrmY5tM0eWKfU2ZcdTAwMDOkJvuS4ux8Mp1cdTAwMTZWU1x1MDAxZd/msiyqPO0xov9fPnUkglx1MDAxZVx1MDAxNm/9R4pcdTAwMWHFNilWd4tdzTdsc/hdQEyLTlx1MDAxMUimwmZ8qcRtW/WAmdex1eSSbl7zldLXXGaj13whZ4RuNFFcdTAwMTSrtqa7m+CX3Uu+VFx1MDAwYi1cdTAwMTlcdGtz1UZcdTAwMWLQ/Vx1MDAxZTMqj1x1MDAwMySrl0NcdTAwMTipXHUwMDFj5TXVteL79KkyXHUwMDA3t8jIsYzg34de8f2qu1mCslx0gPrh0z6hjDJWOFizntvlJiVf6WqPXHUwMDExKjXcznlIQSUzNVXDTUu+XHUwMDFlRvpcdTAwMGLy75+HpMdcdTAwMTQz0qrguixyZfdcXOiNMvxLTeyzXHK4IcZ0O+nq5bdHX7x4nrydJq++fn3U46pv20JjJbqoX9lcdTAwMTdcdTAwMWFcdTAwMDG3Wm1cdTAwMGLSgqRMXHUwMDEwQbkxRONtclDGLl+9XHUwMDA2kC9cdTAwMDJ8aivTaM+gcs3pr3awzVx1MDAwMYl3hVHGXCI71VJcbtPxrJGX76rTyTj5/NmX9ii2t/Z3zpJIXHTe2mw0ykfF9Cw5mZTJwcuvP5otXHJcdTAwMDPRYf7JVUF1Ms5vXG6qJVx1MDAwNquLnHGPo+07/8TRdlxirzIyXHUwMDA1SFx1MDAwNVxiXHUwMDAwNC+zpE832y+MSe3hc1xu41x1MDAxYmpcdTAwMTh3nTKBdI6PcK5w89CU7spdgdvHy4BcdTAwMTYu9Fx1MDAxNVx0cUfktWOnV0TuiKRM3MHBlVx1MDAxMr3WTufXvbqYVslpNk3Gk1x1MDAxOaJ+/ue/elxm/bWrjVx1MDAwNluvQnR9tNp+XHUwMDEx9TNccufdXHUwMDFmTKc2SJagqSDc2VxcXHUwMDE5XG7N7equ/H1cdTAwMDCzXHUwMDFiqVxil8x5tiRt7ehi9oBcdTAwMWabzohcck1lldG6QFx1MDAxM7nsmqmmlqosxyF/TYuzi1GVjfPJxXT0rsdYXHJbfjTwepWf62BtXHUwMDA1L0GvnIuZ46eJ2TnlgdB9XHUwMDE1UFx1MDAwNSOUXHUwMDBiUp/ErfWQtFx1MDAxZt5kh0fsOTHRy2Do59fOjNqke2ucTHPrjla59ULR/yzzltnCXmD1lvXGKz35XHUwMDBiiTVy/sox57srPYUh8nVcdTAwMDCZXHUwMDEyO3AoeViCX1x1MDAwMu6Tot5j0MNE6uSSbV56UsLXXGZ344ZOXHUwMDFiPHLbYECS31x1MDAxMFx1MDAwNVLq4CPFXHUwMDE0/jG9Pr64PPavzDdqT0o48vy8a+3JXHUwMDFjPDl4eniLWWbwXHUwMDBimDb8urNZipnUXHUwMDFkhJ1hpCSjVlx1MDAwM7TXXHUwMDFi5rHfSXeNypNyXHUwMDE16Vx1MDAwNUmJ1lx1MDAwNpRcdTAwMDEuuCTdh1xyPUz0XHUwMDE35FP/IYTBkYu1kU5p7vaT7mw/N1xiXHUwMDFh/VRtboCpbpWn11/svzp8krw+2j86dPvSvag7uZdcdTAwMTkrvmVeVSdo6JErudqaQFWqNJ2VQtzd1bvodlxyXHUwMDEyv1x0qFx1MDAwMVx1MDAwM5NcdTAwMDJcdTAwMWSWQH1cdTAwMDSlNFx1MDAxN1T2cDbp62mfy0NLq4s0m8Q8KzlNXG50NFx1MDAwNFGTXHUwMDFhrlxmkdxw9NCko/liN9ewXHUwMDA2eH9cZqBAXHUwMDBljHLhXHUwMDA2XHUwMDFla16rycJcdTAwMDFjLPqAr1wi+K5dYGfnXHUwMDA2vrrAn3599Gnf51x1MDAxYlx1MDAxY+uMM+bAPIszjfDIgUSmaUql4dRWXHKElFx1MDAwYoPdUaBcdTAwMTdcdTAwMTK/XHJAoqaCcSHdM0atdVNObUOfptF9UUFMTeN4k7PBJsl1Z/9Vt//ZRZXZvv2rwbtBOZlOb4pcdTAwMWY9RupGn1wimifrV6mRtyOZ8lRcdTAwMTCGlFx1MDAxYeFM3CdcdTAwMThP7u9vXHUwMDBihP/kXHUwMDBmYYxcdTAwMTUgdEZQgNBAdFx1MDAwZl1Y5KhcdTAwMWXjcml1kXjTazxQXHUwMDE5k1r9d3RQpZRcXDWS35Km0lx1MDAxOCHQXHUwMDEyiFp8U1x1MDAwYlx1MDAxY/JUScVBayOUXHUwMDAxXHUwMDE1od1huyg1XHUwMDBioFRFrdK4cI5cdTAwMGWadlx1MDAwMVx1MDAxYilAXHUwMDBirWpN37GKpkbWnOZccjD5mytcdTAwMTZcdTAwMWEmk1x1MDAxYv2XRz3G6NrVRuPIXHUwMDEzXHUwMDFm1Fx1MDAxYVx1MDAwZm+Xq5RcdTAwMTIpODVuTeRcdTAwMWRNroHlcVx1MDAwMCzxXHUwMDBilqBcdTAwMDN1aJAnOSXol977XGLKXG4qZ5FcXI9x2FhfJLZ0XHUwMDE0iF1cIlx1MDAxNmyFIFeAZ1x1MDAwNVx1MDAxNm1XP+XS6Loo6I5cdTAwMTK9sDfwx57kTFx1MDAxMXBDXHUwMDBm2lx1MDAxOVx1MDAxMVx1MDAxODqpSsafpue0LpK9XHUwMDExI9on9Fx1MDAxOHzNXHUwMDA1RuO9042qXHUwMDFjXHUwMDBlyV2mIOVEXHUwMDExQZmSTFx1MDAxM1x1MDAxN/7CqG+7Ko7DXHUwMDAw6lx1MDAxM4pcdTAwMDJ1V8ChVctCXHUwMDExY18noqNPSMU6MVx1MDAxZq4hXHUwMDE54G+s8jL5TYIx2ePH4/zyg1x1MDAxOeFcXP2TfPjhJz1GZ+hcdTAwMDdcYkDvWvBcdTAwMTY+4Fx1MDAxNY2DPFxc4EXQpkRLgzeUK0Wd5Fx1MDAxOVx1MDAwNl65b+PXbVx1MDAwMW9cdTAwMWVcdTAwMDBexVxi7qduJZr2XGatnVrUXHUwMDA24keTXFyybuLEXHUwMDFmf5xcZkZXw165tf3ZRFieXHJOrzOaj2bUlVx1MDAxY+d4Pb9cdTAwMTJb6TGUO32aOLhcdTAwMWVPqnzzxsl6XHUwMDEyf33jZG14P5JcdTAwMWV+XHUwMDA2XHUwMDE5PPjm3Vx1MDAxMzeWw/TwNVAlnepcYu1t9owqpZmIXHJxKaSp14M69ahZ23Sc1OAoXGaalFwiXHUwMDAzcIV/KedcdTAwMTSWjZTRVFx0jCAwgpdcdTAwMWPkaopzXHUwMDE2zYHhSlNiNHVJJ+wkfdeZ8Vx1MDAxYn9KwpBM2UOpXVxybKsx3ryBzVx1MDAxMMmkii3QjUSH4X6n/Obv8ndJMZ5aM3ncY6pxLzNSZGeB6lx1MDAxMNhxxHZcdTAwMDJShKPUxnCjSOOwRc1YKlx1MDAxMZ9cdTAwMTQ9XHUwMDA1SrirJqhVSlx1MDAxMabSbl1cXEGEvEuuXHUwMDA3+pYm/V9cdTAwMTBQT/2BKqkkuJW68y7tk5cgrFxct+BcdTAwMTC5J19cdTAwMTAuZDdcdTAwMTnD76ykX1HdSPZNXHUwMDFm4Vx1MDAwZr+6qYV/ZGvm3+31XHUwMDE4wmHLj1xibcf8wiq0OSe281RcdTAwMGKbnmZiOYdTV2Gah4Gcp0jKlq61JiB3zaqBWC78sTyjT3AraIFobVx1MDAxYlx1MDAwN42+JVxiXHUwMDFhPVx1MDAxMETSVd30vGch01xcezNcdTAwMWZjhGRcdTAwMDU3LVxuqndW/uP6sZlcYsijXHUwMDA0zdheLC/GPZdBifS5XCKi3zHc6WrNS1x1MDAwNUdcdTAwMWLDbVx1MDAxYVx0QDcqKLgppFx1MDAwMighYPCfVDnUiYVIpUDPUDOlXHUwMDE4uPtnXHUwMDAzdoLtkib+S0hGiCgr8Sicyv5rXHUwMDFhXGZcdTAwMDC3ddxGYu9cdTAwMDRkRu1ddoLnk+TMpkes4i6iYzwsKlxc+DRcdTAwMTlcdTAwMTbTwVx1MDAwND9GPkTHNzkvJ0OLXHUwMDE0lp2lyUxwZJBVg9Pc8md+llhZg+s0y7vJRTmTXHUwMDE2Smz5f9qiUCyXrt7XXHUwMDExWP9vXHUwMDFmPeJ+Mq2y0itWQOJJicJ4nlx1MDAxMUtcdTAwMTeNI0I0NXbqjMxO1FLgUkTUKYZcdTAwMWGgWs7o2Wkhtm8o3/tvKFxmv15NuHNcdTAwMWVt5eJcIkiwhzgyXHUwMDExO57nwKTmnbaTn//9XHUwMDBmJ+Jrmc97RPzS6uKMwXz7h69cdTAwMGXJXHUwMDBi8/Sbb/cvv8yefjlcdTAwMWV+c3DoXHUwMDA1UEJEyjjVoO2wK9OLOYhcdTAwMWLSl5pcdTAwMTjOqNFoJY5ontq8XHUwMDFkpdooXHUwMDAzksQ4kiAnXGZcdTAwMThsXHUwMDBiTEf+MNU2OcoocVx1MDAwZTKT9lx1MDAxNiabV6VLRbpIeWIr8tJcdKhcdTAwMWYlrzP8KqanyWen+I+sLNxM3Vx1MDAwYrd+3WLDuVx1MDAxNf87+2r3svPz11x1MDAxNX6xezclg723RX75maNcXHIy+7P33vUuYFxyPp9VXHUwMDFhfnrvp/9cdTAwMDNdTHB8In0= Rust Threads — True Parallelism Rust has NO GIL -> threads run in true parallel on multiple CPU cores simultaneously Ownership system prevents data races at compile time — if it compiles, it's thread-safe ★ ★ THE CODE use std::thread; use std::time::Duration; let handle = thread::spawn(|| { for i in 1..5 { println!( "thread: count {}" , i); thread::sleep(Duration::from_millis( 1 )); } }); for i in 1..5 { println!( "main: count {}" , i); thread::sleep(...); } handle.join().unwrap(); // wait for spawned thread to finish EXECUTION TIMELINE main main: count 1 main: count 2 main: count 3 main: count 4 ← interleaved — output order not predictable by design thread thread: count 1 thread: count 2 thread: count 3 thread: count 4 time 0ms 1ms 2ms 3ms 4ms NO DATA RACES Ownership rules mean only ONE thread can -> own data at a time; sharing requires explicit Arc<T> If you try to share data unsafely → compiler refuses. Data races are impossible to write. PYTHON vs RUST Python GIL prevents true parallelism for CPU-bound code; only one thread runs at a time Rust has no GIL → all threads run truly simultaneously on separate CPU cores SHARED STATE Use Arc<Mutex<T>> to safely share mutable data across threads Arc = shared ownership, Mutex = lock let counter = Arc::new(Mutex::new(0)); // clone the Arc for each thread, lock before write Key insight: "If it compiles, it's thread-safe" the compiler enforces safety at compile time, not at runtime No more race conditions discovered in prod at 3am. Rust catches them all before your code ships. ★ - Sandesh Bhandari
Figure: Rust threads run in true parallel. Ownership prevents data races at compile time.
let handle = thread :: spawn ( || {
println! ( "thread: count {}" , i);
thread :: sleep ( Duration :: from_millis ( 1 ));
println! ( "main: count {}" , i);
thread :: sleep ( Duration :: from_millis ( 1 ));
In Python, the Global Interpreter Lock prevents multiple threads from running Python code in parallel on CPU-intensive tasks. Rust has no such restriction. The ownership system guarantees that two threads cannot accidentally modify the same data at the same time.
Async is about waiting efficiently, not running in parallel. Threads run things simultaneously on different CPU cores. Async runs tasks on the same thread but switches between them while they wait for I/O.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1d23JcdTAwMWLHtX33V0zohyPXsUe9d9+VcqpkSo6VxJIj2XGSU6nUXHUwMDEwXHUwMDE4ijBBgMZFspJyVV5OPiCVh/N9/pKzXHUwMDFikojBTFx1MDAwZtiNaZrDXHUwMDAwcpmScFx1MDAxMVx1MDAxYTN79V77tvrvXHUwMDFmZNnR4s1lefQgOyp/XHUwMDE4XHUwMDE049FwVrw++tg9/qqczUfTXHQ9hau/z6fL2WD1yrPF4nL+4P799TvywfTi7bvKcXlRTlx1MDAxNnN63f/Q37Ps76uf9Mxo6N578nL1utUj7z95Vlx1MDAwZVx1MDAxNsXk5bhcXD/1XHUwMDAzPVx1MDAwZblBXHUwMDEwWjBruFx1MDAwNWGZuXr6zeppJsFwIdAyYELKq2dfj4aLM/dcbmSYM5DIpdFcZoCLq5eclaOXZ1x1MDAwYnqNsSZcdTAwMDchtWTGcs0qL3m7olx1MDAwN1x1MDAxObt6ZL6YTc/L4+l4OnPLXsyKyfyymNHXXS/8pFx1MDAxOJy/nE2Xk+HV6z6EXHUwMDAyXHKy9WtOR+Pxi8Wb1b9Ol5Uu4VHtM75991xysPZ427voXHUwMDAzX55Nyvl8Y73Ty2IwWqyuXHUwMDE1Wz/qVnf5ZLi6Q39Zr2lWXFyUT9wtmizH46uHR5Nh6e7FUcE2Pm0yfPdp72/v+nbyd4/8uF57WVx1MDAwZVe3Q9P95Frpq2cqNoZQf/TpdLKyN26AKyXWd380f0Rmtlj9o6fFeF6ur75b2eOKXHSuv+Dycli8fVx1MDAwYmgtXHUwMDA1VyhRVYxmPJqc17/9eDo4X3/KXHUwMDA3lW9Vt+rpbFjOwi2bbVoya5ouXHUwMDE45jFWbcLN80Px6JF9yLaapteEb9Y88WbMXHUwMDEzu5sncC6tNtr6zLPVOIEjvZHJtNYpUGumRFx1MDAxYetcXIxcdTAwMTZVXHUwMDBifG+ci/KHxaZd0k66YZjYNExpec604bSdglx1MDAxMFxuZNNKOc+1jLDT0pyysnd2XG43Y6fcb6dcdTAwMWKvfmeQyMBcdTAwMWGlQPlcZlx1MDAxMkybRVqrXHUwMDE1WaRKvF9cblxyxjJcdTAwMWVhkWuDc4ZGX/7h/M1kkN3PXHUwMDFlvi5Gi+ynf/w7e1F+v6SPXHUwMDFlXHUwMDE14+zVPDumb7Cc1W7ydLJ4Mfqb+2KoN1x1MDAxZf28uFx1MDAxOI3dXZFcdTAwMWJcdTAwMWb0cDx66S7Q0bg8rfw7dJFcdTAwMTYjoitXTy+ml+tnXHUwMDA39O9cdTAwMTWjSTlr3rrpbPRyNCnGX3f4XHUwMDEyxXIxfV7O336NzWtDl7H84j1yIEe5XHLHy3Gwi0GzyZbkXHUwMDFhXHUwMDAz76Gs+Pola/DeXHUwMDAw/6k7ojvJf0Q4cC3TKDWvgCXAkUjD0Fou12/qnyNcdTAwMTm4tV4uXCI4POKGXHUwMDE1Vlx1MDAxNrJmOlI1zbBirtc7XHUwMDEwLCVcdTAwMTPbXHUwMDFkyIdsXGIliF1sXHUwMDEwdrDBXHUwMDFiXCI5sjPJkYYjt0JEcVx1MDAxY2SMXHUwMDE5obW1fbbNXCKE4Vxi2mJBgOKoXHUwMDE4RYeVoGNlnjpHLSlWY5KiTVxuO5rWqojcaLJZbSlypFx1MDAwMFx1MDAwMpu2i5BLW/1cdTAwMTVF2lx1MDAxZlx1MDAxZtvP9oVcZqnwPVUwXHUwMDAzmluf3Vxu0Wa4UqNCZjQmtlvFhTQ2wm5cdTAwMWJUqHAs4n7hOISX61To3S1yXHUwMDFk7yojyMw2uJ6EwFx1MDAxNZTJhbTALUhJoVx1MDAwN26SXHUwMDFhJXPhnjKcIG10hShfhStS5Vx1MDAwMq3gXHUwMDEyXHUwMDA1p5h6bchruGJcdTAwMWVcdTAwMTOtXGbNYHhi9lx1MDAwNKA6XHUwMDFjoMAk3Vx1MDAwNLDgYz2mXHUwMDE1oshcdTAwMDTdXHUwMDFhbSprTYRRyaGSMdxcdTAwMDGjtIZ59ma6zF7PRosym0wnn5y4t4wmL7PBdFhmi7NikY2n0/N55oByNptOpst59smvelxm6Vx1MDAxNF8qUTgzXHUwMDE4hGxcdTAwMDGatlx1MDAwMDIrXHUwMDA2SCFccjNcdTAwMTWMvyWUzp9cdTAwMGJUmry5XHUwMDA03UxcdTAwMDJcdTAwMGLtUsDWXHUwMDAyXHUwMDAys1xce/JcdTAwMTWd/LVU9viR2pPtwIRvXHUwMDA3XHUwMDA2hVKcKW9cZtS6XHUwMDFiWCmkXHUwMDEyXHUwMDE2XHUwMDEzb1x1MDAwNlxuNXLdzWH33VVvcdKL2XI3XHUwMDFmPVxmXHUwMDAxqMHNpCE5Zce6XHUwMDA0XHUwMDAxVinyXG5NSNL9IJ6tmEHCnVLSrFx1MDAxMztcdTAwMDevXHUwMDFjXHUwMDAwQ1x1MDAxYuGVpeTGXHUwMDE10WTV5N7nXHUwMDEwWStcdTAwMTCBUEgs15jUWUROe7BSVWuMReJlsZyXc/JT5KuK+fnH5MNcdTAwMTZv/3Y2K4thjzFcdTAwMWG88lRcdTAwMGU2KOnPeS6R2LFcdTAwMDBhKFx1MDAxY5d2bVx1MDAxNO5cdTAwMTJZzJlC4Ti4IC9cdTAwMGLre/dcdTAwMWXOaHNiftZcIlx1MDAxOK97PSC5XHUwMDE1yVx1MDAwZiOQTFx1MDAwMHJ7pfBVT9tDYFx1MDAxMIpxTT9S82tB4Xg3IH8zL3tcZtaN1YW70614PFxyXCK8POd0iYm0XG6kgFVvZlBcdI5gXHUwMDA1SGbpPlx1MDAxOFNJ4V+lqJjKuaCwipizdW54TcHSUN5Hx4+OXHUwMDFmPtxcdTAwMTOEflx1MDAxNlx1MDAxM1x1MDAwMSsjXGJcdTAwMWHoS1Lxhlx1MDAwM75CKFx1MDAxM4ZprJDiRFx1MDAwMEVmVUx/Q1x1MDAwM6CL6flo+uDBd9PR5Fx1MDAxNz1Gqn+ZidJUnlKHJ01l7SqtLOguXHUwMDAyWKXXkHOXw1x1MDAxOHKhoOhhRoA1vjRcdTAwMTU5SWus26dbYtSDXHUwMDEzbYXocVx1MDAwNES5XHUwMDA1XCIz2jaajY42ilN1iErOpVBSJk8ka1RcdTAwMWOrhlx1MDAxOY/R7HQ0K7OL5Xgxulx1MDAxY5fZ6XKxnFx1MDAxMcssXHUwMDE2mVt9VkyG2apUfTqdZcV4/MtcdTAwMTXjPC/fZItpr0Gd5HslctxnQY5b6pxJbo3RxnLLNnm00bmVKHFVWFx1MDAwMiGbm1x1MDAwMFlmLoQlKyPP78h0521AXHUwMDBmS1PsSzHpUcQ2YLhj07bZc+i2gdbOXHUwMDFhepuhXdykbkVcdTAwMTSC/EK3bWBw1XWSPbn/rMe4bltoopB3OHq1sbK49lx1MDAwNMDQ/oSI9oTgNpl6XHUwMDFiw53sw3xcdTAwMWOBQlx1MDAwNGSOXHUwMDEyRTUjgFx1MDAwNFRAe2hiXGam7EV4RWY4imlcYpZW1VxmsZlm8YRxstIkfLDDXHI7/Dymz1JwxZRlvlx1MDAxY2m7XHUwMDFkgjZSSNlnO1x1MDAxY5+VxXD3bi3gnv5f7Vx1MDAxOaLg6lx1MDAwNsyQXHUwMDE1YFj5c5nhXHJ1XHL+OmI7XHUwMDE0jElcblxivNNcdTAwMTFtVohcdTAwMWFdZ5bqc2fWylxugzLRtU3Qk9xC4ESjtZRcdTAwMWNcciovRY6Y4PlQPbTEt/eEIH9cdTAwMTFui9xaLSR4ezkq5b6aMVx1MDAxYS7JnVerSqnarVx1MDAxOMpOqeb797P5VZe2l1x1MDAxZFe+1S2y45Z1psllrXBcdTAwMTjRQl6Ho2q2kENlYORGW8jrQL2TzuBJOFx1MDAwMOnLao1cXES1kINcdTAwMTWMXHUwMDEzI7F97iGfRXJcdTAwMTJpNzt+/KTEeszwQEpa7PA3XHUwMDExpESRJUpjvTNI7UNxRpGj1qb3dlx1MDAxOMJKXHUwMDE0iJpcdTAwMDF6aIk0OaGVMVxunNAyXHUwMDA2vpTBgZi02ONvY0gycVx1MDAwMbrM6NtcdTAwMTj5lqRcdTAwMDFRXHUwMDEzoJBNJbZIgVaZTpk7cvmrNussu7fOjX3Ub46ydcFpyMoskqw0UOphK6h+poG3/1xitvK7mFxmyipcbrU6KnZ1WLbIqvXO/rmJ8VxmxidcdTAwMWUzvD561c1cdTAwMTSegdxSaIXKdeQpZj2pXHUwMDE0dFx07lxiR3H82ILel0rvl1x1MDAxMSZJ1iWsRuYzyYbzWCf1yH6Sj04rVJKJTlx1MDAwMexzXHUwMDE3XHUwMDE1zlx1MDAxN1x1MDAxOfhLO72YjPasMU35lTC4c9Bqm2RNXG6PXHUwMDFiiFx1MDAxYThcdTAwMWRcdTAwMTDNu27gVFx1MDAxNiDhZ/NcdTAwMDE3lEV/6lx1MDAwN1xcxMCpXHUwMDExXHUwMDE0k1xuw6LiXHUwMDA3hYYj6H7n1mewXGJxXHUwMDBiXGKbM2veXHUwMDBlWrA5rjpTlOLg2q49jiHGK5yeXHUwMDE29GtPvMKzcK9AhF1YyY03rdIqQFx1MDAwNIacOefp6/5cbqzoNkfKXHUwMDE5u5hnrbMp/YhcdTAwMTh8i0xU71x1MDAxZs9wN3qGPilcdTAwMDKK4qVcdTAwMTVAxMxcdTAwMTgu5YGexVx1MDAwMfGriDhcdTAwMWU0I1xu7O+Vba8wgFx1MDAxYlx1MDAwM0fLbOo4XoHSglVNcFeGhneAoeFN4HBXioam6Vx1MDAxMFx1MDAwZlx1MDAxNC1cdTAwMTh0v+9M0ZApbiRjkX04nFx1MDAxM2FB22vlMzLLnUhcdTAwMWFnTe+ATORSIVmMMlpqrX1zXHUwMDE1XHUwMDA3ktZips8jfINcdTAwMDVcdTAwMGVcdTAwMDaZrzlcdTAwMTNcdTAwMWE2ulx1MDAxZaOQSqGupt5cdTAwMTO5XHUwMDA2ikSwk+5cdTAwMTneXHUwMDA1kuZbZDLnwHcjadyjWoZEwcDiSuPOSmH9XHUwMDAyPFx1MDAwN5LWXHUwMDA2xFx1MDAxN1x1MDAxMUVoN8xcIpj2XHUwMDAxkTfyamsgMjCGVedcdTAwMWFScTTi5LpqgbtyNH5cdTAwMDc4XHUwMDFhv1x0XHUwMDE47srRuG76w1x1MDAwM0dcdTAwMGLG3NfdOVx1MDAxYVxiK1x1MDAwNMjIflx1MDAxMMaEMFVcdIY+UjRcdTAwMWVG0VDkXGal5EQ6iYRtXG63cWNya8hN085jtFx1MDAxMNKj3Mb09cWXXHUwMDAzfWux4G9cIuhcdTAwMWIjdsyk1b526mZcdTAwMWbJOp6wUqPkiembovDSmE6RPdxcdTAwMDX65ltkourLfHlxXHUwMDEx0bBVc1x1MDAxZEI0OZzfdcTMoO+N5OdcdTAwMWY6u1x1MDAwZVx1MDAwNyxrXHUwMDA18jjfwYV0illcdTAwMTWx/lx1MDAxZfqOOVx1MDAwNKl+yk2FXCLhXHQr6Crl0qAxoGnr4lxc+YawWX7o4Wqx029jerhcZnJWnZypXGKZtKd+lVMxwuSCRIpcdTAwMTlcIlZd/MP9+9nX00UxftDjqMKzxkRN5XNcYlTy3OzP8mFQrmY7rELGKdZD41x1MDAxM+uMg+Dnn2t7vC/qfH+MSbFcdTAwMTEpstJ4fUJ7d1xm08o1Uqbvj7GCs05cdTAwMThUjv70XHUwMDE4f7X1JZHnI+hcdTAwMDUpaFwiv979XHUwMDEx8c41rrr4wJ3Qg77o6OD+WrH3p1xi7EnXNmyM9I6btqbVULi4VibvYFbEo1mnrNq9slx1MDAxOJytQo/5Sozjcla+XHUwMDFhTZdzf1x1MDAxM3M/8Fx1MDAxOLDmVP7RU1x1MDAxOL2eoXqaR1x1MDAwNcfcVcyBjMDph7BcdTAwMDNDjYLonyMgqplAwcB4IarqXHUwMDBmVpS8UDuJoeSZbzfx0KlPiPifk5ycZ7PlJJtOyqw4XZSzrJhMXHUwMDE3Z/R79tM//5Vl74Wge4zbXHUwMDFkv0dcIixcdTAwMTez2fT13+hjd02GSFxizKNX4qBkY1x0t1x1MDAwMOVcdTAwMWJcdTAwMWFNKGKgjOBcdTAwMGXR8p5cdTAwMWPRflx1MDAxOI+kXHUwMDE4xGKvp+pcdTAwMTeji9JcdTAwMTlv01x1MDAxNldmWrfDinDU2/OgfI3Rnnn6XGJD/NCYojC9K6TeUGbuJNxcYt0wgnJcdTAwMWSkcVxuI0ZZ4O68nts2w6uHL6ej6tmu7tf6T9naMlZ/ufrzXz72vrpibrXXf1B7XHUwMDFm7bzzxfH04mK0oC/ylVtE40ovitniM7o7bt+vPVdOhi3PrN710MFlNVxy2nxf9bk6rsrxyfR1KFZcdTAwMDfnLIRcdTAwMDdWiuYrlHJPs7iL1Fx1MDAwMCxcYqbQw1x1MDAwMUHFdT/0XHUwMDEztDdEXHUwMDAyXHUwMDA3XHUwMDExoNXSab35w7QtjkNaVPbWs+Zcclx1MDAwNtiaXHUwMDFm4Vx1MDAxYo/eXHUwMDEyr9sxO7K1buVA51x1MDAxOVx1MDAxY/LJt27mJn2o4zrXXFxcdTAwMTlQXHUwMDA31MWjblx1MDAxOMHXhFJcdTAwMTR4oY1cdTAwMWEl5UwrI5nuj6fc6P3rMfBw18TktdBcdTAwMGLKe1Q7/Fx1MDAwZdB7d4tSQq+MgVx1MDAxZZNuXCIpqk5Mvk5yY8Stj+o1kCd6jjxxY8jztPl5Mo5QS038XGbI26ty3GlcdTAwMDTyXFxxmynp1SPeop8g+eq8gf6RzS3luF5gb+dy3Hbs+WK8wMQgempyXHUwMDFlwN2E7nDdXHUwMDFm3smU4MtwtFx0VK5B0dt/slx1MDAwNWyMM07h4K2DbbtcdTAwMDWGKyXUZ55cdTAwMGUm2NFcdTAwMDTPwk3Qgpu4i1xmclxmXHUwMDE5jGRG3zrV2m6B4YOggrGDXHUwMDA1prTAUVx1MDAwNOVgTDGNtjlQt3VcdTAwMTdcdTAwMDTBgWu8fbq/3Vx1MDAwNsNcdTAwMDddqtW327bBOj2+kzb4XcQuKInzaohTXHJzqusobK+1YWbBomFcctk6T+NcdTAwMDcolbtkv1HGWm258tjjYeRxi0mex5SLhZOXlMzbXHUwMDE42d6cTHfGXGJ3nkViq1SGV/W091Q5bPeZx1mEdFhcdTAwMDOLPu0w5TuGI2bokVx1MDAxN0WhrptcXDnlXHUwMDA13vVcdTAwMTM4xn7UxUyuIFdSWsS4srlGQ+9cdTAwMTG9nnqcXHUwMDA1qofpWu8uVlx1MDAwNlx1MDAxZq+ydMBzwyVYKzRcdTAwMTjm65o/XHUwMDFjXHUwMDFh1mKkXHUwMDE34a5BXHTk7jBtnzFuOd2T2FxuX1x1MDAxZHae2Fx1MDAxYd2BzaZTz/xbWa4su1eMx1x1MDAxOX973N5i+rJ0nXR9XHUwMDE2IFx1MDAwZVxcdzJcdTAwMGZcdTAwMTKqMFb3XHUwMDFmXokxJXKCKdE44TRkXHUwMDEwXHUwMDBlXFwuXHUwMDBlsJNcYi6nLDIrmPAm+tr9XHUwMDA3Q2DaqvRUTkrZSUdmvyXGZlx1MDAxMVx1MDAxMmNccih6NMa85+xcdTAwMWWonFx1MDAwZnTT7lROacM3OzSC0k1MWiDo9JvKhWmMaXG9xlx1MDAxOHlcdTAwMDelKcjXgjYvi+A51uTA5dqs9DLCNXBpmOBWeaWN2j1cdTAwMDNXymiVelx1MDAwNlmhXHUwMDAxzTvpg7e3XHUwMDE59YOz3Uib0SxYV6zuXHUwMDBmfMJijpqBRG1RKYbIfIdFXHUwMDFjqNlcdTAwMTb8fVx1MDAxZo4/XG6KXHUwMDE4Sq9cZvNcdTAwMTaFP8OctIxJLyxmrOhcdTAwMDa//Vx1MDAxNlx1MDAxNptFXGKLNZDoUVx1MDAxNlx1MDAwM5/++YGZ+TA368zMtNZcdTAwMGVXfiHmNihS3CqIv/RbWWxcdTAwMTaoLKZkzSRt0zlIm1x1MDAxM1x1MDAxYrOaacbB11xud6BlbSY6XHUwMDBmd1x1MDAwYloh1yC9ymGtrIxs0U1KVUW+UrEyLlUnt1x1MDAwMD1nZXAjrCxSL6zuXHUwMDExvIJh3rLLQTDMXHUwMDAzt0Vnj1x1MDAwMCCNO68orjvJKq45XGLotUdcYtRcdTAwMGJTuFx1MDAxOap7XHUwMDA1w0DkjDZcdTAwMWTOkS6V5V6ncJBjaLXTZUxRninGRVWLrlx1MDAxMi+0yjFcdTAwMTiXZKdQLvlx1Fx1MDAxNiXvpJiy14phs0DFMF3xXHUwMDAzbSBcdTAwMTQ258KAXHUwMDEzfPWzsjhcdTAwMDDuXHUwMDE1L3tcdTAwMTVcdTAwMGVAXHUwMDBlzJJPiFRcdTAwMWZm7j/Vw5k83nOxMH5cdTAwMDNiYbNAsTDDrnd9yE0uNTCOVqFwoeDB9cUg73WE65Pk/Jx+q/cwjPauXHUwMDAzYdz9YclPLFx1MDAxM5z+YVk1wGi1MCe6tdLcmo+nr11CajpcdTAwMTm/6bVW2HUrTuVcdTAwMTeDJmZcdTAwMWLc1CdcdTAwMTVmTe60bCVxJsnoxlx1MDAxZNT8olx1MDAwMPpDOECdeFx1MDAxZVx1MDAwM1x1MDAwMJ9rbE5cdTAwMThVXHUwMDBlq1x1MDAwMY6QXimMgmeiQlx1MDAxZLmp66t5q7K10kfJ5qOL5ZhC93K6nI/ffJw9uf8sXHUwMDFiTst5Npku3opt9Vx1MDAxOL1cdTAwMWS/T1wibEeJNSlcbi1cdTAwMDPUmnx94Fx1MDAwN7WmXHUwMDE2SL9cdIc0MiaVXHUwMDA13Wzq20Z3jVx1MDAxMuSlq1x1MDAxNeXbprtpxZrW1lZ7/Vx1MDAwN7X33XWxplmwWJOC2vzaQa0pLWj/XHUwMDE2kyNcdTAwMTJMcPpcdTAwMTE11StcdTAwMTnFMsBv/5CDhlx1MDAxYu73/PxNlFxyguWaTH1s9GdQrtinzNBcdGPhuLOCglOGKjI1pKRT+L/9MdJcdTAwMDbutuSGeoG8nXND12Jv6NW19ailXHUwMDAxXHUwMDBmwFx1MDAxZs9cdTAwMDGxtVp+gN82+EGE27NcdTAwMTLI9o2I66tVTrHJ9qBY18Cfs8Jf9Fx1MDAxOH+19aXCX4RyTL1eflBN6Io3jHB3xClAMlx1MDAxYlx1MDAxNVx1MDAxYXJCmkapbr1cdTAwMTKy3Vx1MDAwNMMnZVxyw96YYN013E1cdTAwMTPk4SYoLDKnaFx1MDAxZSeQaY11SY0+m+Bw9Oqiet2v0y+q2WBlYGvdoyFV01xmb8JcbuvtRXcxR3bCRFxm8VBCXHUwMDFhXHUwMDE1Oc8jXHUwMDE1l4rshvfYXGZcdTAwMDfTYVx1MDAxOdG+VjdDXHUwMDFkaoZV1eFE/WtcdTAwMDVcdTAwMThW7mKE/elfO2HSb4RRhyWDksYw4zXO9vFcdTAwMWV0xTI3rp3YOoXlXHUwMDAwMVxyQ9dY59jT1twmM1hcdTAwMGLVdLOOXHUwMDAwlY1zvUfG9FaKR4/sw2t7Kznbrdu+T7apOtsmgKBcdTAwMGKuqipuIcVcdTAwMDXGOVx1MDAwNWzQ931zvPhrUMs9r4luXHUwMDE5z1x1MDAxMIjQuZRgrJO0QFqpp8lcdTAwMDR0fshcIrTZqo6peGlhXHUwMDE0cv84pGi1SmGJh7LKWtNYpbSK6U5NJi9cdTAwMWX//pvHT79+8vB3/lSC2Hj0llJcdL5FJprIXHUwMDFhzIMy6WIzk6DAIz4mZW6ssIZuilx1MDAwMJPgTFZcbkOOXHUwMDFm7YlcYvRcdDNcdTAwMTGUmnOjJFxu5ovseGubMzJ3LKTLXHUwMDAxJochM9hcdIbF/M1kkJ1O/CDsRXtIc4lpOj5cdTAwMDZh3VxcUFNh90JQ8dzl0t3sK8ExRaPz0Fxmhid7UkU+YTZcdTAwMWODnGmunFx1MDAwMINcdTAwMDeCot1cdTAwMTFcdTAwMTJcdTAwMDRpocknXHIk0cRujvC0XFxcZs7+WozH9z7K/t5jXHUwMDE4tqwzXHUwMDE1XHUwMDE2g05EUJuRvOKeWInLXFxbXHTCcGGF0F75plx1MDAwM1x1MDAxNNuh+DBcItVO+55sacJq11xiQFx1MDAxN2o7XHLP5FBk1XL1XHUwMDBlUKQ1ZDPIPu0xXG6bS0xcdTAwMDVAXHUwMDEx5Fxma4dcIvhcdTAwMTCIwHJwQVx1MDAwN6BcdTAwMWLvqjaj74pAoqPHnz/eXHUwMDE3XHUwMDA0flx1MDAxNkFIlbaao/XP/Ww5t1x1MDAxMqVGy2zqo8qlVtWhsF3d4b3lbFxmXHUwMDFm5YVr6/9lj9G4bbGpcClDcMlrWURcdTAwMWYuOaePYtLNXHUwMDFhXHUwMDE42ri5T7nqMHHQXHUwMDBly+OY0otVWjHulUnYXHUwMDA2SyGZXHUwMDEyMrlGtVSodSedhPv337bdz7OzclZmy8liNHaOaLMlqXdcdTAwMDBcclt2KqiqXHUwMDEwqNY5rKcoKkWujVx1MDAwNOntizyQ1y1cdTAwMTh9XHUwMDE0gVGgXHUwMDE4wVxiv/RoK0KlNFJcdMX711x1MDAxNrlihth/8oqt5HXXwdnBXFyHXHUwMDAwr8FdPchDpnPjbolW6Irn3afy9ou6Plx1MDAwZcdcdTAwMWb5ObojzVrv0TbBXGLHW1x1MDAxNGdV3eZUxFUwm4a44l1cIq6exabyhiZcdTAwMDSUXHLi6lx1MDAwM6U2XHUwMDE0UCouKZg0QFZzmJWNQ+XnXHUwMDExdUYjXHIjVHpcdTAwMGZXac3pXHUwMDE4qyxHlVx1MDAxZZWKVtNVx2VxVk7es0A3XCI+67M49zXrTYVNXHUwMDFigs06UzVcdTAwMWXVr1x1MDAwM1PdXHUwMDExk79cdTAwMGXHpDt/XHUwMDBiXGb3XG5MbDn1mUs3N3fr7aR+osr7T1T5XHJcdTAwMTBVXGKaWm0wVVx1MDAwZvJcdTAwMTCQnKIlb8glV8KnlH9gqlvw90VEpEi0XHUwMDAzXHUwMDA1/Vx1MDAxN5nN0UC3RYr0hVx1MDAwZc2Y7XRMxVx1MDAxNf3jd4mrelx1MDAxNpvKXHUwMDFmQlAzToOsenApXHUwMDE0z1x1MDAxNThcbuV6cXTlMOJdcblPR7KfsCfhuHTFXYZ+zcF2rsqNQc1E+tOerEbVKYL0cT+eZT/9819Zxlx1MDAxOftvpP/pXHUwMDEyZ59mW1x1MDAwZW/vXHUwMDA1ZHf+JsnwXHUwMDFj1NpTa67TnuM+ZFx1MDAwZWjJYsyhpydcdTAwMTbJv4nwsILYrcNk1KyKofBcdTAwMTAsmv5JQ/zYY2z+2IK2nUntdEhLa8KtdTY2YN5B/EzzXHUwMDBlO54u0Kd5h9/6UVx1MDAxNjPvYNFJ5npPTdw2n665q6DceiHkWtNcZpt3UHD9wIM1OTJrQYJcdTAwMDLg6Ou0Psw7bLHV30V4XHUwMDA0p1x1MDAxOIycKZ9Vtlx1MDAxZjTAiHgrpVL3tShOP00nl3D87OnxN8+fP376td839GLewbfINPpcdFx1MDAwM98pz76U4/XzXHUwMDBlXG5yUCxNznG/Jlx1MDAxZL6MwVx1MDAxZjNSIHiDqy1cciwgnIqC6Z9qyd1cdTAwMWZ02Jmg+U7l9EDPXj/ngEbmLuJcdTAwMDZNP1x1MDAwNcfuqtL7XHUwMDE1XHUwMDEyPY1cdTAwMDCgNPRLtVx1MDAxY43bQOX6jFx1MDAwZjfKnD7nKISqnjbSZc7hr1x1MDAwNInBcubu511cdTAwMTl5aF1yonyF73Q2XHUwMDBmQkXA+IPluStcYoCwZDpVdfFcdTAwMDNCQ1x1MDAxMPosXHUwMDAyocZotjqj1EdRW1x1MDAxMWpcdTAwMDQ5SLxcdTAwMDFcdFx1MDAwM4nVLXzHwty9XHUwMDE5fJzNkP7nXHUwMDFm9b5E17bYVKhcZlx1MDAxYYmoa116UakxXHUwMDE3Ulxi5Fx1MDAxYyhutlx0hpJcdTAwMWVcdTAwMWQ/On74cF9g+VVMLlFIqylg87awsPqD64SGVUxxllx1MDAxZZdOdLpcdTAwMTN1XUzPR9NcdTAwMDdcdTAwMGa+m44mLbp7vUCkf5mpsFx1MDAxODRcdTAwMDZhQzykNrlcdTAwMDRF0SMxJaG1T7Xi4Fwit2Dx91x1MDAxMVikIFIyrv0lOlN/8KpEx9A1kyVcdTAwMWbWXHUwMDE1UspuhfN7PcbfvfSgXHUwMDBiXHUwMDFiaFA1XHUwMDA36GvhtCw35PqkXHUwMDAyxqVf8+3QrdKOuecxtNRcdTAwMWS0ajmLypxKZVxcvJDa+5FD1VVVzW5cdTAwMDOBXHUwMDFmZ5W+5cpfeJ/PJopcXH+ilE/QRITmLFx1MDAwNyuEsUpxlFgvh/NcdTAwMWOUdKPaXFzpaqf+VXGcidy4qFx1MDAwM2jDNlLr7o3Z+1VcdTAwMTB5XHUwMDExXHUwMDBla6VF7Vx1MDAxY4RcbqqxldYqLVxyWJa+M5tpJTrpXnz0y+zdwT/83aE/T599u2pcdTAwMTFxPV7zjdO8Ps36fiBgp2+Tyl1cdTAwMDdNXFzUSyyHrpekkP46wlNLJlxymYKOOpmBXHUwMDBiV4OuXHUwMDFlN9iXXHUwMDEyyz51vVxmR69OpuFdLzVcdFqtfadVXHUwMDFmlJBjgPZNONCQXHQhwNpm2WRcdTAwMWLQXGKeiphRtSmtfy0uk+mig1x1MDAxNLL2NDD77TBKXHQ5qPuqgFx1MDAwMu68XHUwMDEx/qFz95Ve6Zkx/2xBq2m6U30103DrTmCbaZ6EXHUwMDFmV1BrrNfWI9Fdec1BXHUwMDA0ebtZftvZLC23WohcdTAwMTZcdTAwMDGT1mBcdTAwMDPl6kTxW+/+2G6Vu+hcdTAwMWZr61F9XHUwMDA0naNVxrVDXHUwMDE47oTzm1x1MDAwNlx1MDAxYdlcdTAwMGZcdTAwMThgov9BXFz5j1H9SFxcobHoPWW7XWxOo3BHOyY/xZfCauSdqq2/ffyn7MnTXHUwMDE3T379RZ87XHUwMDAyvatMJIE8gVwiXHUwMDA0iaBrXHUwMDAxq22SXHUwMDE2bnOh2o/wPHRcdTAwMDVuQeGfXCKSUEJoosQyjqxwa90pc/bWpfFcdTAwMWJcdTAwMThcXI1cdTAwMTP2OGqtrS9J5DqBk1x1MDAxMNRhPU3kQVx1MDAxZGiZo1GGtkMnRKiMr9tcYuLOXHUwMDEx3K9s0Z9jPKBiXHUwMDE2W1x1MDAxYVx1MDAwMttPTLGG3iertyZRYVx1MDAwN+jOs6pcdTAwMDHGgm++nF+Wk+HcjVxuZu+663qMxe3LTdMlP4FBXGI2ha6HS1x1MDAxZY/IclxuLCm6XHUwMDE0ynjFXHUwMDAxXCJxuV+FmVwiXHUwMDFjl0RcdTAwMDUpNJUyTkfOOFx1MDAxNSstdf9mXHUwMDE3XHUwMDE3xfy8xzDcXFxeKth5zrRrwk7WTlx1MDAwMvDBTqHNiYJaJcgmhFZcdJC3X1x1MDAxZfEkXHUwMDFjeciEsZLxpta4uzlccjyu87rkRV1TUmLoueZcIuzUXCJ/bzJdrNzLs1x1MDAxN/TbrCyGXHUwMDFmZT/949/ZlFx1MDAxZZtlzvLn2XlZXmaz5WQymrzMXp+NxuWqwuj+5mqMT+4/6zF4U3/BVIEo7lx1MDAxNIhcdTAwMWHwiJ9bm1x1MDAwM1xuIPBzXHUwMDEwWpjDXHUwMDA2XHUwMDEwuVx1MDAwMVxmwjdcdTAwMDDuUpTGf1Bb8/DVqyylcEdcdTAwMGZcIiTHP7dGdHK9L8rvl/RBo2KcrVwiv+xTMv05fUi2XHUwMDE4XZR5j4FcdTAwMWS88mSIXHJcbmKF3Mzi+lx1MDAxMFx1MDAwYihzziVcdTAwMWGthEX6/dCbXHUwMDFmXHUwMDA32GE4YIGD4lx1MDAxNMJ6O1x1MDAxZXirx1YgXHUwMDAxaFdNLqRFcSx0imFcdTAwMGat+Vx1MDAwNMWgmFWazdKzXHUwMDBmilJhXHUwMDBlsFx1MDAxYcIw7tBCXHUwMDFmXHUwMDEyXHUwMDBmvnNcdTAwMGJcdTAwMTTLXGIouvM6XHUwMDFkrnxIbI9bKdBcdTAwMTXKJX9cdTAwMTJD0ZXBWad6yqfZlFx1MDAxNjsuLi/J61x1MDAxMEvMPvnVimo+X85cdTAwMTfkjN5ki2k2nGbrSc5sUi5eT2fnxCx7XGbdNF8rldvlQUS5XHUwMDEy9a6gLppcdTAwMWSGdNtzXG7cXHUwMDE4KmtXp15018k7fmxB71xy1E8jqjZKXCKK6vh2hSa3XHUwMDFm1GWMXHUwMDAwzoVInjlGbVinKZyv3izOppNspZcwmvZcdTAwMTi8bVx1MDAwYk3keXlYJadSXHUwMDFlb4MjcpNcdTAwMWLBkFuxOseae6SNXHUwMDBlrndcdTAwMWJcdTAwMWVfRrheY6RcdTAwMTHcelx1MDAwNZ23XHUwMDAwXHUwMDEyXHUwMDE4OV5cdTAwMGXVhu2+INI5nLeVkTldqJVf+ulcdTAwMWb/7jEyr1twModcdTAwMTlW0KlcdTAwMTT1WiHKXHUwMDFjOZYoXHSizFx1MDAxZK7XfYZuvzzmWVxmQi2zzvX5MsvbXHUwMDEwyrXQXHUwMDEy++cx33mg/GXhMq33+jwv177UVF4zqNijIFx1MDAwMJKCIGnIVlxmXHUwMDE3XFxKa33zb1x1MDAwN6+5XHUwMDA1k6NcYlx1MDAxNitcdFxc3N/DXHUwMDBm7YJIhGKtjEwuXGLYXHUwMDE5kqN59pZcdTAwMWX+1zwrv1+OXlx1MDAxNWNcdTAwMTe9TU97jM2ANSdznGVcYkqNWF+X1lDTslx1MDAxY7VcdTAwMDaKM7VlynTXe9iv/O53XHUwMDExflNcdTAwMGLDtZLe2XNcdTAwMTCNR9e6ndpajclcdTAwMTVcdTAwMWZcdTAwMTLA9JDhPZq4gdagXHUwMDAyKVxikys3XHUwMDEwLpzwXHUwMDA38Pq0kc5cdTAwMTlzXHUwMDAykYxrVqmMXiHV5Fx1MDAxY1x1MDAxNWjwdyzFtdLv17FcdOdcdTAwMTEgdepjllx1MDAwMYs7M1pcdTAwMWJXab2BXCKMXHUwMDA0JjpB9Kf/+18vMivf5Vx1MDAxNpG5sbo0/Urnf3r+eD568me4eHbxJUxcdTAwMWV/8+pLXHUwMDE1dKKXtTx3hz9bqTlTULns75xnriwywiDj3FY62m5Qx6xkLqexLzBcdTAwMWRHwFx1MDAxNGlcdTAwMTetqpBXQFpcdTAwMDFhPVx1MDAwMnVqXHUwMDFknHbZxDB1ZduOQi6fZC9cbrpcdTAwMTLzs+yzM/pDMVx1MDAxYvXYn25bbLRXpZ+rK3tUXFxevljQdT16P4t39GpUvv7MM4d4uvp19MG7LcCZe7lcdTAwMWHh+/GDXHUwMDFm/1x1MDAxZsJcdTAwMWHQziJ9 Async / Await — Sequential vs Concurrent async/await lets you write non-blocking code that looks synchronous -> await pauses the task, not the thread Use tokio::join! to fire multiple futures at once and wait for all; the key to concurrent I/O // sequential // async (concurrent) Request 1 300ms wait Request 2 200ms wait Request 3 100ms wait // Total: 600ms (each waits for previous) // tasks run one after another → blocking 0ms 200ms 400ms 600ms Request 1 300ms (all 3 fire together) Request 2 200ms Request 3 100ms // Total: 300ms (wait for slowest only) // all tasks start simultaneously, I/O does not block 0ms 300ms done! SEQUENTIAL async fn fetch_all() { let r1 = fetch(url1).await; // blocks here until r1 done let r2 = fetch(url2).await; // then blocks for r2 let r3 = fetch(url3).await; // then blocks for r3 → 300+200+100 = 600ms } CONCURRENT async fn fetch_all_concurrent() { let (r1, r2, r3) = tokio::join! ( fetch(url1), fetch(url2), fetch(url3) ); // all 3 start NOW → waits for slowest = 300ms } KEY INSIGHT await suspends the current task (not the OS thread) — other tasks keep running while waiting for I/O Sequential await = wasted time. tokio::join! = overlapped I/O -> the Rust way to do concurrent networking Python asyncio works the same way — asyncio.gather() is Python's equivalent of tokio::join! ★ - Sandesh Bhandari
Figure: Tokio runtime for async tasks. Task 2 finishes first because it waits less.
use tokio :: time :: {sleep, Duration };
// Both tasks start at the same time
let t1 = tokio :: spawn ( async {
sleep ( Duration :: from_millis ( 100 )) .await ;
println! ( "Task 1 done" ); // prints second
let t2 = tokio :: spawn ( async {
sleep ( Duration :: from_millis ( 50 )) .await ;
println! ( "Task 2 done" ); // prints first
Rust needs a runtime to execute async code. The most widely used one is Tokio. Async is the standard approach for high-performance network services in Rust: web servers, database drivers, message queue consumers, and gRPC services all use it because most of their time is spent waiting on I/O rather than doing CPU work.
Coming from Python, these were the concepts that required the most adjustment.
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1d3XJcdTAwMWLHlb73U0zJXHUwMDE3m63I4+5zuk93p5JUyVx1MDAxMi0xlimZlO0oW3sxXHUwMDA0hiRWIMBcdTAwMDVAyUzKVbnZN8jFPl+eZE9DXHUwMDE2MVx1MDAwMHrAaUwrXHUwMDFhL4dly1x1MDAxNv54MPN9ff7P+dtnWfZgcXNVPvhd9qD8aVCMR8NZ8e7BQ//423I2XHUwMDFmTSf8XHUwMDE0LP8+n17PXHUwMDA2y1deLFx1MDAxNlfz33355epcdTAwMWT5YHr5/l3luLwsJ4s5v+4/+O9Z9rfln/zMaOjfe3q+fN3ykVx1MDAwZr95Vlx1MDAwZVx1MDAxNsXkfFxcrp76iVx1MDAxZlx1MDAxN7lcdTAwMDIn+Vx1MDAxZqOctUZcdTAwMDDePn3DT38hcpKAXHUwMDAyQWhrXGZKQbfPv1x1MDAxYlxyXHUwMDE3XHUwMDE3/Fx1MDAxYVx0QuRSgVx1MDAxNSQlWins7UsuytH5xYJfY53NldRCkJKO+Of2Je9lYkFuXHUwMDFmmS9m0zfl4+l4OvOCfy5cdTAwMDZWO7dcdTAwMTL7tFx1MDAxOLw5n02vJ8PVa2RcdTAwMDFcdTAwMTbE6jVno/H4ZHGz/GS+qHxcdTAwMDFcdTAwMWZsfP6Pv0hcdTAwMGZcdTAwMWKP172Lf+H5xaScz9dknV5cdTAwMTWD0cJfKSlWj3rprlx1MDAwZYfL+/OfK5lmxWV56G/Q5Ho8vn14NFx1MDAxOZb+TjwoxNpvm1xmf/ltXHUwMDFmbu7qZuIvj/y8kr0s/Vx1MDAwN1uNjoxWK1FWXHUwMDAwU1x1MDAxMjZcdTAwMWY9mk6WYJNKgCBccuBWUs2fMMpcdTAwMTbLTz0rxvNydfm9aFx1MDAwN1x1MDAxNVx1MDAwNK6+4fXVsHj/XHUwMDE2aVhcbtSWP1x1MDAxM+Tt8+PR5M3m11x1MDAxZk9cdTAwMDdvVr/ls8rX2lx1MDAwNPV0NixnjYEtxVx1MDAxYZArf73FrbRcIoBUYyOwqZ48cY/ETmwuZsVkflXM+HL9q/BcdFx1MDAxZlx1MDAwN5/QXHUwMDFhnyAlXHUwMDEwSIJcdTAwMTBA6+FpXHUwMDEwnURcdTAwMDCbXHUwMDE0ntI56azUaeC5XHUwMDE4LapcdTAwMTD8gM5F+dNiXHUwMDFkmOBEblxyIflcdTAwMDNTWJTrOHW5scJJhVx1MDAxMlx1MDAwNVx1MDAxZsvabOGWOZ5cdTAwMDPwWWxcdDS/RG2DXHUwMDE4MTc6XHUwMDAyxqU9XHUwMDEzZedgLD9cdTAwMGWMMVxm47VXfzhPXHUwMDA1n1+klFxuwFVTLV4tWkd8d2RSvFwi33hrK1xu+m68ruDoYchf/uXN4mI6ybK38yw7vp4vsuyff/9Hln1T3mRPRmdnJd/eQTmv3ODpZHEy+qv/VmDWXHUwMDFl/bq4XHUwMDFjjf1cdTAwMWTRa7/k0Xh07q/Og3F5Vlx1MDAwMVxuX6HFiFxymdunXHUwMDE306vVs1x1MDAwM/68YjQpZ9u3bTpcdTAwMWKdjybF+NWeX6C4XkyPy/n7r7B+Tfjylc8+MEbmoHex+3rcWPOAXZ1Ty1x1MDAwYrTC/lx1MDAwN1xuM3FcdTAwMDOkbU7YIFx1MDAxOUN20aZ++lXaRSqCsMpoNLpyXHUwMDA3muhcdTAwMTdhXHUwMDA1W7ai0/rlYjZ919z4WUcghYxcdTAwMWZcbumNXGK7vDFcdTAwMDbFXHUwMDEwXG45+JVjUDfHoHSA7Os4XHUwMDE1XHUwMDA1QnDOoVx1MDAwMaG6jMGBbGThwDr67Db6kHIgdKzUjGKvU8A2XHUwMDE2wVx1MDAxZsm/elP8I9kw1Fx1MDAxY46OzzY2XHUwMDFizJa54iWptWFI8dvAXHUwMDE5TFxuR9SKtWPldN7DhHn84ujxwctXQVx1MDAxYkV2wkbZkjCRXHUwMDExcjGARvSreFx1MDAwNDX8I83+gVBcZlx1MDAwYitDpkjPvVx1MDAxZNwzXHUwMDExqsCgNlxiJk5cdTAwMTVIPrOVQVVR259IXHUwMDE3bPtcdTAwMGavXz17cdRh7m1cbrhGvcXsel/mYVx1MDAxM+bpjaBTjeZj6lx0/ldcboegevbFsc9GsE9Z4TRjPsS+etUnJUjDXHUwMDFjXHUwMDE0K0An0n2aXHUwMDE0ttJ9x9+fdFnxrYuXTOupJtyzXHUwMDE1XHUwMDAzp4Z7IEzOhHNKIVojqadeXHUwMDFj9VxcXHUwMDA09bQzXHUwMDA22bhcYkXOdlDPWm3J6dTMQ8cuhqrCL5Z531x1MDAxY7zOXHUwMDBlj05cdTAwMGWfPusyXHUwMDAxg1Km4uFw9HbfXHUwMDAwhFx1MDAwYmRccsNcdTAwMDGI5tzraFxm7CPlXlx1MDAxZUVwz1wisdHpbFSShb0yY5WoJFx0u1x1MDAxN394O1xmxFx1MDAxZuqisGJDXHUwMDFmbEdhcVx1MDAxYn+2kplKh0Ao2dn6tSPwq+ZcYmRFq4GcXHUwMDEzIVx1MDAwNGJcdTAwMWRcdTAwMDLZ7tJcdTAwMWGlosRZaCTFZ02M3bVcdTAwMTOCXHUwMDAxXHUwMDFmvFx1MDAwNoJaQFx1MDAwZsGUXHUwMDEwfFx1MDAxY3FcYlx1MDAxMp+CjKVg6q5cdTAwMWWCqIRcdTAwMDGHKrFcdTAwMDGSXHUwMDE4glx1MDAwMWe0XHUwMDA2gpbsXVx1MDAxMFxmhF4/XHUwMDEyXHUwMDA0XHUwMDE1lvhrh+CT5lx1MDAxMPQ1XHUwMDBiQtN22c0uNWxcdTAwMWO/jVB98tDPXHUwMDBlXHUwMDAwzuRpMTxcdTAwMGZcdTAwMTQ71KriNVxmVlx1MDAxZOtbazBUilx1MDAwM4krcT5cdTAwMTdDXHUwMDE0+1WJye4g8KB1XHUwMDE1js9NaclcbjpcbplcdTAwMTKsc8pp221oNkxRudxcdTAwMDKyW0jWXG5LWuh1iErchijpXFyAXHUwMDA0VitGabZSXHUwMDAy7ou0cXU3Zlja4r6EXHUwMDBmvm5+dFx1MDAxYWI1bDSFlLd1dVxiRSml1U6kLrshXHUwMDA1plx1MDAxMovfI3rww6Pjw0dfPT84XHTHXHUwMDBl9Nqjnyh2XHUwMDEwkDFR5IBJuVfiKsRCkCZcdTAwMDe+IYh8hFlWlFx0MsdDO1x1MDAxOJ7ae8LCp1x1MDAxMTY0aINK1eiJXYrCLFx1MDAwM3mpq4mVMo5axc+/vV5cdTAwMTSn4zI7vcmG5VlxPV6EXHTZiWDeLmHTMVx1MDAxM4t9MlshXHUwMDFizofXpVx1MDAwNo1Evl1A24CC7Km5g5rPXCKoKVx1MDAwNeskpkWwqkNvPriipjDaqIqNkoiZXHUwMDAyqjXdezDz8PJyXHUwMDBi7lx1MDAwZjtMzjvkTcjP0734XHSB1LOhnC1/icYwTSXKXnXG8fMwJlx1MDAwMlxuWlx1MDAxMtVEQGvzXyAkv83p9Kln4Sy6Klx1MDAwNmNcdDq9WmSjyWKaZVxm/Fx1MDAwZVx1MDAxM7NGzoSEXHUwMDFjNCEk3/vcoNHsZ1x1MDAxYo2iktF8T0/KnVD8rFx1MDAxNuxIhrJjJldKKGWN9n53JWXa56qbcPVPMWYuWL7GXHUwMDEwNHPlXHUwMDBlZWpcdTAwMDFcdTAwMWRaxOR2LlvP2KpM64s/Zl3n6baIySg6msy3KVpcdTAwMTcgN1x1MDAxYj5nJVx1MDAxMnRr2NpcdTAwMDD7cPW+u6k3sMVa4DHcwipcdTAwMGJR7EO7XHUwMDBlXHUwMDA1J79pXHUwMDFknPStcYZ0UHHWupxkWdNcdTAwMWFru1xcPM+qo1khk13PXHUwMDFhykpU5Fx1MDAxNpFcdTAwMWFzUFY7iSSAT1x1MDAwYrNcctDYWGRpXHUwMDA3Vt1cdTAwMTf18DzClLOOlNPBXHUwMDEyXtxcblDeWnKoLCqDqevn0SoyrSqZJtOsXHUwMDE4XGZGQ/5lxdifwMXCf5mgpuhEYPIugVPpjYjiko3yJqlcdTAwMDPeVrC+aUWBhHnV4v9BXvXbmNpCrYzFartesyY/56zTXHUwMDE1S7qDOlx1MDAwMopqlC9cdTAwMTKFjdv8zMdo85OlvyX/Klx1MDAxOIba/Cq19Hui8Kg5XG7JoPBDT0IpqnpcdTAwMTBqZKdPWOw2XGLbpfdNXHUwMDAwhn16vylcdTAwMDRftLagQViD2lx1MDAxMcWdj1I5h0pUvOAuQrNZelx1MDAxZjchXHUwMDE5iLBonaOS6Fx1MDAwNEhLJHSfzo9cdTAwMDPqy5hshUZ2WfR24b+/V/WQJGctSevSJ/Q1USsj+tXrl1x1MDAwN9nJ65NXXHUwMDA333bYclx1MDAwZUqZylxchj2T+lx1MDAwMS6CXHUwMDExuULjjG9VXHUwMDA2gj4xXHUwMDExR8XvYupil+WtXHUwMDE4bFx1MDAwZcCtXHUwMDA3P1BRXHRCYyk5XHUwMDEzldLViNtcdTAwMWVMfHIzYXJccrLfXGYuSv/CrFhks+vJYnRZ/nuHw5/NxE7H1Yb9qyZcdTAwMTfg01x1MDAxMlYhXGKzMZrKQK6sIWfAStK4XZyD/H6jlDP8UrbEQoNcdTAwMDB7XHUwMDFl7+DxcUSFnFx1MDAxZv6lKehcdTAwMDO7+vp2Yu5LJJk6LGXAWWOq4Izl8YlcdTAwMGbrrPNhML28XHUwMDFhjcus61xcbi56Mj63SnGEWmP7XHUwMDE0x1x1MDAwN5nuXCLpSZikMSlcdTAwMGVfXHUwMDE4YEVk6MBcdKYtfPqZXHUwMDEwu/XMfilcdTAwMGVcdTAwMTOoJjMyXHUwMDE3TmnrXHUwMDA30UjjtuHZJzh2oPRVc1VCfmKasdtVKf5cdTAwMWLVJjh8hzex72xSZ7+RzUzbSpWcXp/Ps0HB13ixeVx1MDAxNnfYWWskdbJcXEfzLsaNKDNg017uPtdRw83vI5KPXHUwMDA2wPmR2TGqwpeQIYpOj5KbYasgM4Rqpvogc1NcdTAwMDT+0NqGkcjGiHBcdTAwMTgsQN7RXHUwMDFhQEKDY1x1MDAwZrLT0NwryFxmgTmvXHUwMDEyRY5eQu2sUyBVXHUwMDFmZI5cdTAwMDPqj82PSi1IXHUwMDBiacPttltu8irtoVx1MDAxNVvWyqSuuOWPrE7g2KdZ5eDbXHUwMDE3x687bLFsXG6YyjjB/Vwiy0FcdTAwMDI6lbNJSWBcdTAwMTVcYlx0KWZcdTAwMWTeq4jUnyNMXHUwMDE1ZVxilTZB/pnNXHUwMDA3K26tZpNcdTAwMWZVajeCjNKiVcX702J2WpyXbImPx2yUlMMwXHUwMDE1O1x1MDAxMYLaIWs6Vu41XHUwMDAzMcRKXHUwMDA0yFx1MDAwMVx1MDAxNVx1MDAxOFx1MDAwYoJcclVcZjj3PSt3sPJ1c1YyXHKUXHUwMDEyXHUwMDEwXHUwMDFjg1wi6+PEfjWFsqJSUZMqTiycjFlcYrPFylx1MDAxN++YXHUwMDEw84vRVfbb7HQ6m03fjSbnXHUwMDBms8k0e/q4w1x1MDAwNG0mdjKutolcdTAwMGZXwdLHh6PJ+ZfWvtVyqUt46UitZ+V8+tw67LhjtVd4XHUwMDE4dGBcdTAwMGWAMLlcdTAwMDYlXHUwMDExJTlGZ1x1MDAwMsfqXsWHi+YqxFx1MDAxYe3HpOiQYSdr48NERjMkIbVcdTAwMDZRJHW78PDyzM2uiut5OV+ewOOyeFx1MDAxM95501xyP+sugZNcdTAwMDWFm89cdTAwMTXbXGJcbmOgR6VcdTAwMGZcbkdcdTAwMTHytDkhpXZAXHUwMDE2wjU89ZPFjFx1MDAxNJJkt+vfVYv6d5RNM1x1MDAxM339e1xyXGJcdTAwMDfNQag0aVwiXHUwMDFkh0Fp/d46rV23QdgqNYHQpyZaQHDY2nxm29lKdmpElFx1MDAwMU3CXHUwMDE4Q9WRY11EZuPpduxpe/ddklbaru/0RcTcV/Cxi+839lZbzW/xqlxc7nyRnzHVuel9zqJcdILL5oeoL0Mna4JcdTAwMGIqdO3gXHUwMDAx54R2ViffzURamso8tT1M66Pvnz/Pfnj0/PtOT7pcdTAwMGJKmcqIVlx1MDAwM2g0UWsze4G4XHUwMDFkJ1Uyl9Yqfyz1W5pcIll4XHUwMDE2YU9cdTAwMGKtjVx1MDAwZU+brFx1MDAwZrg4yee6/fT1eNsknE5q6pw6XHUwMDExXHRdXHUwMDE3L81+Js+6RnOygNZDSyHWgdS5b4Yz6Id2o8DAkPY+PbGDeudcdTAwMTFJQ+3Qz/xcdTAwMGZ6XHUwMDExOybvXGLjs7qYOrhEhqxrRb6H2aCYZMXVVVnMsmJy8+6inHWZjXfIm04r7jdnMsRPqSBHa/mwNGBcZojQ8JNeNe7g50VMqEkjIIVcdTAwMTdcdTAwMTjW51x1MDAwZpVxQvmURGJ+XHUwMDFhSVx1MDAwNlpNgH1x5YeH/P7VXHUwMDFmO8zJgIxcdHnYSE+SXFzfnlx1MDAxM+ShtbnWIMhYMICmnydcdTAwMTnJw1FcdTAwMDRcdTAwMGalU4r99WDPyI5cdTAwMTF1XHUwMDFh/Yhcbkw+hshIpamVq/gwu7yeL7LTMrsoJsNxp6trdsiajJhtMvZcYn3GPtufh//VOuTIzrw0uNad1ailiznEXHUwMDA2Z7c3aqj9kvZcdTAwMTjoXHUwMDBmXHUwMDA2VDmSVWxjO/7aWlx1MDAwNSDaZ+13IPVNVJJQ83VcdTAwMTbhqab1sUUySFqp1FxuXHUwMDAzwFxiaFWO6V+bXHJmxfyinGd/yEaXV9P5fHQ67nJPV1x1MDAwM5mTJe9cdTAwMDMsbZg3dVx1MDAwMduuT97H8HLcnJdOWk2quq24Ud+MZDvbyW73zehWeVMlQi5GnzdtXGLBy9ZGXGYrXHUwMDBiUK4mXHUwMDE2V4tMo/x01Oq83i5cInOvji4lXHUwMDAyYz2VylxyslYlofnHhlx1MDAwNu+avM+N1qB0XHUwMDEyYcCgXHUwMDAx51x1MDAxY4pg6Km+ocshSCtcdTAwMWSkz476XHUwMDA2lzZcdTAwMTbMwfHxi+Ps2aOjJ89cdTAwMGaPnobNXHUwMDE2tfboJzJb6lx1MDAwNE1lq+g9c6QhQlqXK9K+kUT23V2RbJxGlHvxkaeljVxcXHUwMDE56fyERahcdTAwMWE7XUmSXHUwMDFl/DQol2HWefabXHUwMDBlR57CYiZKmuqGSVPUXHL0XCLqXHUwMDFj/VBm6YQyujI6rM/JNKHiVXMqgiPht1x1MDAxZITsNFm7XHUwMDFjU1rlK7qcSN5oadk7aaVcdTAwMTdcdTAwMTezmy/LJdA7zMSQkFx09WGjpUKK1rMyIVwi6lxcgrNcdTAwMTZsr1x1MDAwZWM5+N8xJUNKOSUhPDSpjoNO+X3g1EF12OXxenXz89oovv2qXHUwMDExgopcdTAwMGZM7k1Po1x1MDAxZLvBhDrB0Mt7pflmXHUwMDExmo9AXHUwMDE5a7YnRntJapfqSSOlRKLUXHUwMDEzPoxcdTAwMTTVXHUwMDFkinuwjqF8PV78/tXDgy6XI1x1MDAwNKVMp/pcdTAwMWFcdTAwMTYkwN2qXHUwMDBmXGJzzapP+NVIqGxfj1x1MDAxMMfEeVx1MDAwNFx1MDAxM1lcdTAwMDFa9uwgXHUwMDE4LKylopV+npnTqev2tLHV271XOVx1MDAwMt/CRTY9y+ZMl2Jx3fGqvVx1MDAxZNImo2abklx1MDAwNFWBY1+SXHUwMDEwTcVFmIpcdTAwMTHRfEJr2E2Mm1wiIJU17F12fJGe3q9cIkFVXFzfW0gql3uvWJNcdTAwMDLS1YFBfUFCXHUwMDEznF5HuExKKm2wxmXaXHUwMDAxSTRoybjkK5GX9GijM8rZbDrzM1sn/7YsXHUwMDBl46N4OqsrZOtEPcKdXHUwMDEyJ6tG0PtWI6jQ+qi+XHUwMDFhIYaUb2NIaVx1MDAxNLFcdTAwMWJcdTAwMTOs766PYzB/nOlAWH9cdTAwMTdcdTAwMDSpxShcdTAwMDFlmpbEuH6UQFx1MDAxOITvmoPQ996JyI2/0oFghd3xulx1MDAwM2pXXHUwMDExXHUwMDEzKszqK2KaXCLwp1x1MDAwNFx1MDAxNTFIJCOnb7Oloq2rXHUwMDFh3l1cdTAwMDTmflx1MDAwNTEutOfW5eTQWnLg51x1MDAxY4tA5q9cdTAwMWZcdTAwMTewXHUwMDAzpjdcdTAwMTFcdTAwMDclXGIpUVx1MDAwN8dcdTAwMDXI2lx1MDAxMat+hYaV1Vx1MDAxZOGpXG5irKpcdTAwMDBkny16z45cdTAwMGZcdTAwMWU96fKogC1cdFNcdTAwMTnI1HTGscuBrNJK8EX3I4w3XHSZa8tPStLstdP2JFx1MDAwZlx1MDAxZlx1MDAxM7VK+cFPhlx1MDAxZHvqV3LFsfOvMbY0XHUwMDAy+6nhmKitt2SYmvwm/Vx1MDAxMVx1MDAxMvNcdTAwMDSmVcn989HliD8yO73Jnlx1MDAxZT7Pzqaz7PHL77N309mbMGc7XHUwMDExXHUwMDFjbSR1Olx1MDAxZe+ZSrSBli0jc1x1MDAxNE5cdTAwMGKp/ET64LaAnqz1ZD1cdTAwMTVcIoatvplYUbhcdTAwMTBfbj54q0yFXHUwMDE0qNElz2BYrI7m20eZzq5Ln1x1MDAxNijG43L8MJt+XHUwMDE4ONxhpt4tckKaNkozbtJUi+1hbihMLlx1MDAxZLIpZo1GhH48SCRLZXOWKvaBa7fM1G6rlSA8sWXyXHRZ2lxusq1q3cpcdOujQTnPXHUwMDE2XHUwMDE3s7JcdTAwMThm8+KsXFzcdJijd1x0nIyhrbKNdjtSXHUwMDEyzDbqPttcdTAwMThiJIRcdTAwMTlcdTAwMTmTblSgwFG4XHUwMDFloJanzi9cdTAwMTNWqlx1MDAxMr/qZKxENTLxtvKNlW3Zq/BcdTAwMWTkKLVcdTAwMTHsJ1x1MDAxMLIpsVxy0T7fuFx1MDAwYqlcdTAwMThh4Vx0TWxOu3Bgub5QWrI7xq5yat2hzFq5zFx1MDAxZbqDP7DIZoU/jP/Q4ZhJWMx0lpxqZMk5K3Ik5diZksKZjeoxJ3NhjHOK2O9WcjtuXCKty1x1MDAwNYLVkpRC/k97on79tXGP6b5cdTAwMTBVRVx1MDAxMFX5hkqrgpVcdTAwMDFUX9eJXHUwMDEyiKg6ViBcclMtSWFbXHUwMDA1Tj4sb13m2ztM1Vx1MDAxYTmTVVx1MDAwMVBji24jXHUwMDAxq1x1MDAwMzvK+yqAOFx1MDAwNurmXGYkXHUwMDBifl1h3EZyQ1x1MDAwMFx1MDAxNsWnn4C6XHUwMDBigqZVXHUwMDA2VptcdTAwMDBcZvtcZmxjXGJSXHUwMDE4gjHD3LWv969ZYLYrpi5cZnXdsTB7JWF1IHIsXHUwMDA15Fx1MDAxNlEvV126Plx0XHUwMDFij1RcdTAwMTNjrlx1MDAxMHu77CZcdTAwMDTbUOpcdTAwMDdcdTAwMTNcdTAwMDBcdLJ+4n5ic4WI/6dV8fujk9dHNcvzOmGmbMiXyjwx++2ZXHJcdTAwMTFcdTAwMTC0y1x1MDAxZFnSQFo67DdaxvLPNudcdTAwMWbwXHLQXHUwMDA2g1U525xcXHlcdTAwMGJowUhIPzPagVCt/PpifjNcdTAwMTmMpln2m/mI+VXMssvpsFx1MDAxY3e5J/NukdORdL9cdTAwMDRrUE2CyX0pXHUwMDA1+P5oq5NMdr9PvZqnwkWoSWBcdTAwMDOM70p4ZG39Qmhj+YesTD47WoAzrWZHL0H/ZfGuXHUwMDE4dXlQQVDKhGxs1q7ZxGh1lFx1MDAwYqudJmG9zqx0XHUwMDA19kqzXHUwMDExXHUwMDFiXHUwMDFmNWejRitcdTAwMTBqhmnt2NfmrNFW2vRkXHUwMDE0ul3v9LvR4lwiezV9w0podj1ZjC673K+5S9hk1GyTQNVmu86hb9dszsSv2lx1MDAwNzosXHUwMDFhY1x1MDAxNcRtrVOCtZpcdTAwMTLU8TjHXv2a2lx1MDAwNspZnc7Fcp6wb0Bcbtlvffp0XHUwMDE3Tlx1MDAxZsfYb8b5UVPBvc96K6e6mnFDXHUwMDAwKvmwXHJlJVKrnMxiefz+IbuaTYfXXHUwMDAzP1Mtm/PROCxmXe7YbCR1snyNaaxANvI1pFx1MDAwMvZdn6+J4uaTiFx1MDAxMIhcdTAwMTBGgVx072Svt+aInNKsMDo9Rdq26Nsk1a+Ablx1MDAwYsODXGJcdTAwMTXBXHUwMDFhgthfj5uCtpzHpNFht2HYKnFIul9cdTAwMDLdXHUwMDA2hF8nSFx1MDAxY/rB5Fx1MDAxNFx1MDAwZVx1MDAxM9fb08osXHUwMDE3k3TanrZ75VxyqbKvaXU2ilxck5/g6byrLyoj+Pu8YSOgPo04LYVw2ungfP36hSxIoPxcdTAwMWGv9FlDZV2r8SeHR89cdTAwMGWOXHUwMDBmXz06enzQYVx1MDAwMzooZSqD2e6XQVxmUVx1MDAxMdDmXHUwMDAwIFx1MDAxMbWwmozsm79cIqn4rDlcdTAwMTVccnNAW1x1MDAwMcFo6FZcdTAwMDDmtvdcdTAwMGJYs2rUyVx1MDAxYqmdXHUwMDAy0cq3fTwu5vMvTot5OcxGk4tyNmJcdTAwMWJl0OWI6J1cdTAwMTKnoyg2oehm+jBEUfSjXHUwMDBllEU2elx1MDAxNZDfQdxTNI6ih1x1MDAxMdrSofRTPMNcdTAwMWJcdTAwMDd2XHUwMDA0RFx0lZXJ+zOJ7bd22cOjaVx1MDAxNehcdTAwMGaz63mZ8a1cdTAwMWQt5vz4fFFcdTAwMTZd3oBcdTAwMTkjfDLmtklokFx1MDAwZVx1MDAxNOn0XHSNXHUwMDBmMt3J1D+1d8DIeZ8nuKZg1/BcdTAwMWMjtFx1MDAxM1x1MDAxZPe/9spnXHUwMDEwXHUwMDA1NmJqnVx1MDAwYqWtXHUwMDAzXHKKrOo3YsZcdTAwMDL1m6hwXHUwMDE1oqxcdTAwMTlajLVcdTAwMTlcciNcZlx1MDAxYueCUntgyupqlcuebSbT+WiZXHUwMDE1mLLUd9t+nXDJmomdLKlhXHUwMDFiK5GNaLKBUMSkT2rE0PN5TFLDKkNsaEXNopToyFx1MDAxOHCyy8MoJ9NFeXq+bzDZVM6mXG5cdTAwMGVcdTAwMDPRZKlcItJcdTAwMWGfQ6nFXHUwMDFkiuJzUchSwq9cdTAwMWSF37a2ZvyISmXDqqM2YCBR+6ZcZutSq1x1MDAwZa2Vhpjg3S5sjovTctzEoEGdO7/jSzs/XHRDa9pAKeVcdTAwMTLBXHUwMDBmeVx1MDAxNppcdLlt7EjQOVx1MDAxOVx1MDAxMMh/XHUwMDE4gVYlKN+4X+W3RzHGjveCjd7ei+LvZG33uzJcdTAwMTb4rZS84M8qKUxcdTAwMDRit4ydb1x1MDAwZV5nh0cnh0+fveqwbVx1MDAxM5QykSnznqnXXHUwMDAxrtbpkVxyeyaUlMRQUvIjmDObRP3X58ZTXHUwMDEw8EVcdTAwMDRcdTAwMDE1SU+lyM5FXCK2ME31VnXQnGmUf9xEXHUwMDFmbUdkXGJMbpz0jZpGXG5WLlx1MDAwMSyK5mC8Z9HUlzG2tVx1MDAxNmhAXHUwMDA267+xXHUwMDBljCR9mjB1x1x1MDAxNKmlXHUwMDAx0UZcdTAwMTe8vFlcXLDzOJpnZ+Pyp9HpuMx+yy+dL7LFNHvHrmSZ/fPv/8jOZ2WxWFx1MDAwZYCcXHUwMDBmZqOrxfxhtlx1MDAxY04yXHUwMDFmjMplXHUwMDE482o2XUw9gudhlUJrj35cIpXyMb9smoV6k4brnDdcdTAwMGWEwHhzdv9yXHUwMDBifFSw3VwiwFag11x1MDAxZlxid1x1MDAxZlxi30VcdTAwMWNcYlaTpnBbff1cdTAwMTJZi857XHUwMDFmlDq7YoxcdTAwMDLdKrtyfM18YIr48XRcdTAwMTV6zK4nm+S4mS/KSybH4+eH/IrpmP/3x/L00XxeXp6OaybxdeJcdTAwMWNI/1x1MDAxNVPZpc06NJXKlfPzXHUwMDEz/fJi66Pda8dcdTAwMDG7K7lcdTAwMDZribRb2yi8qp+zOYJcdTAwMDEl+b1sNdhQIK4/XHUwMDFj6lx1MDAwZYfjXHUwMDE4a4H8ZFNHQdO1PvnqSFwiXG7rko/dXHUwMDA0XHUwMDBilVx0XFx7XHUwMDFjXHUwMDBmJ3x1soFcdTAwMTfzavGww1x1MDAxY6+RM1x1MDAxOVFcdTAwMWI1b0rSOVx1MDAxOEsgtZRcboxYz2NZaXNfwIt+bVx1MDAxYbjQ6E0gfoVcdTAwMDNErVx1MDAxY/pp1i2Zer9SWifNmcpcdTAwMTdZKVx1MDAwMSZYVOjqXHUwMDA35Eo+iFx1MDAxNbuEqUuZNFx1MDAxZu6iXHUwMDE1U1nSm2w4Ojsr/a3Mri5G4+l8enVx87tcdTAwMGXTtonQyTjcbFW8wNyw1+eAz86N3ble01xutrlcdTAwMTClXHUwMDA1NrxcdTAwMDJrXHUwMDEx+Vx1MDAwNFBcYpJcdTAwMTWx0NZRKC3dq9paXHUwMDAyv4ogMPjAjKJgJ4/E+tRcdTAwMDJor6UlJlx1MDAwZtRcdTAwMWEjK1x1MDAxYX5/55y9yflint1Mr7uscHdcdJuMscMmjNUkc1LgfCDMXHUwMDFhtTqZP1BW8lx1MDAwZljHnMTQXHUwMDA0XCJ0OVpknYtKXHUwMDE4bYN76GMoe7/q+L9vTllfl8iWXHUwMDExXHUwMDA0XWdbW8ivNFx1MDAxMVL1tE1cdTAwMTRNU8rpVjPpl47l4KJcdTAwMWO8WTIgXHUwMDFiT8dcdTAwMWRm7E5pU1F2vihmTUgrJdqcLCCAXyBMldrf9zlRk5NGp7RzylXbXHUwMDAwVk4t+7Qkjd8lXHUwMDExIKzJ+1x0w3WU/SFGy1xuK31mOqRl6yu/2PJcdTAwMDFmdPLNTIo/XHUwMDE4Wy17+ef//k+Qolx1MDAxNc39XHQpuiZdolx1MDAxMLNnZKNmXHUwMDFi77LmbPb6/Df/qStDXCLep6FEbqTk6y9cdTAwMTT/XHUwMDA3Vnp2lVx1MDAxMmVKWlx0bWPP98tp/THGabVCeFMzWNpfO1x1MDAxOVxm2Nc1azmBRGx0UG2kT8jGbijMj8DGi1x1MDAxN8NjKVx1MDAwZlx1MDAwZZ+8XHUwMDFkXFx+h38pbt5+5/7ciJxCLPdcdTAwMTFatIb1JeCGmatULtm+MoakNk5cdTAwMDfImTpcYlxcXG7k33hfWPrn5ixd5nmQcMug9basqC9g0NKgn+qW2sxlM4laXHUwMDE1XHUwMDEwfZGdXHUwMDE0fCXmXHUwMDE32VdcdTAwMTfLXHQqo1x1MDAwZZN2l7DxRi7/uby0XHUwMDBmiqurk1x1MDAwNV/YXHUwMDA3XHUwMDFmilx1MDAxZlx1MDAxZrxcdTAwMWSV775cbtTrnC1/XHUwMDFlfPbLXHUwMDEx4PFeLmsmf/7s5/9cdTAwMDPvUMhcdTAwMDUifQ== Python vs Rust — Key Differences CONCEPT PYTHON RUST KEY INSIGHT VARIABLES Mutable by default Immutable by default, opt into mut -> mut no accidental mutation TYPE SYSTEM Dynamic (checked at runtime) Static (checked at compile time) bugs caught at compile time MEMORY Garbage collected Ownership + borrowing, no GC no GC pauses, no leaks NULL VALUES None , can appear anywhere Option<T> , must be handled null crashes = impossible ERROR HANDLING Exceptions ( try/except ) Result<T,E> , part of signature errors can't be ignored THREADS Limited by GIL for CPU work True parallel, ownership enforces thread safety data races = compile error ASYNC asyncio (similar model) async/await with Tokio runtime tokio = production standard INHERITANCE Class-based inheritance No inheritance, use traits instead composition over inheritance KEY INSIGHT Python is flexible + fast to write — great for scripts, data science, prototypes Rust is safe + fast to run — great for systems, CLI tools, WebAssembly Same concept, very different philosophy: Python trusts you, Rust checks you lol ★ ★ - Sandesh Bhandari
Figure: Key differences between Python and Rust.
The first issue was that Rust’s build folder, called target, got committed to GitHub on the first push. The target folder contains all compiled output and can be hundreds of megabytes. It should never be tracked.
# . gitignore - ignore target / at any depth
# Remove already - committed files :
git rm - r -- cached 01_variables / target
git commit - m "chore: remove tracked build files"
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO19XXNcdTAwMWJHku37/IpeKWLX2pVblVnfcowj9Dn+9oylWe/s9Y2JJtEkMVwiXHUwMDAxLlx1MDAxYVx1MDAxNKVxOGJe9j7fiJ2Hfdhf51+yWVx1MDAwMFx0NNDVYFx1MDAxNbpotlxmSFx1MDAwZVpcdTAwMDRAolx1MDAxYZ2n8mRWZp5cdTAwMWZ/k2X3pu/Py3uPs3vlu8PidDiYXHUwMDE0l/dcdTAwMWW6x9+Wk2o4XHUwMDFl0VM4+75cdTAwMWFfTFx1MDAwZWevPJlOz6vHj1x1MDAxZS1/XCI/XHUwMDFjn81/qjwtz8rRtKLX/Vx1MDAxZvo+y36cfaVnhlx1MDAwM/ezXHUwMDA3x7PXzVx1MDAxZbl+50l5OC1Gx6fl8ql39PjHPDdcXKJcdTAwMDWGSknNjV48/d49XHKQXHUwMDBiXHJMKiY5MOCWL56/XHUwMDFjXHUwMDBlpif0XHUwMDFhoOdy0Fx1MDAxMrgyYFx1MDAxNcDiXHUwMDE1J+Xw+GTqXoL0e5TRQqNQ9Fx1MDAxZjeL18zX9Dhji0eq6WT8pnw2Plx1MDAxZE/cwqeTYlSdXHUwMDE3XHUwMDEzuuDl0lx1MDAwZorDN8eT8cVosHjdfSjQIFu+5mh4evpq+n722+mDpVx1MDAwZvHe2nt8f3VcdTAwMDW49njbT9FcdTAwMWJcdTAwMWWfjMqqWlnv+Lw4XHUwMDFjTt2nXHUwMDA1bPmoW93554PZPfq/yzVNirPyc3eTRlx1MDAxN6eni4eHo0Hp7sa9gq2822hw9W7XN3h5Q/nVIz8t116W7lx1MDAxN1x1MDAwM1xiVMJqJlx1MDAxNs8srcwqvv7oN+PRzOKAXHRrpdLCLpdVPSdTm85+7VFxWpXLz9+t7UXNXGaXl3hxPijmP1x1MDAwMlpLIVx1MDAxMFxmXHUwMDE51/IjPlx1MDAxZI7erF//6fjwzfJdflO7rnXLXHUwMDFlT1x1MDAwNuUk2LqBrVhz7duF8UrDPPZcbjrCQu+L58/tXHUwMDEzttE6vVZ8u1x1MDAxNoq3Y6HY2UJpm2FWS608XHUwMDA2amSrfYIg40RcdTAwMDE8rX2C0EpzkcY+p8Np3Vx1MDAwNq/Nc1q+m65apmCrpllcdTAwMDPItWkqzXLBLe2pnEvLtWzaKde5jLDT0lx1MDAxY7Gyd3Zcbrdjp9xvpyuvvt4ymdH0+SrmM8iGlS5cZpK2NnKctFekNkhcdTAwMDOAOsIgl/bm7Iwu/tn47Gw8yr67qKbZ18NqWrwpq+znv/09+8fss/FlNlx1MDAxZGcvh++y1yflWe0mj0fTV8O/zpDLVlx1MDAxZX1ZnFxyT91dkStv9OR0eOw+oXun5VHNWOhTmlx1MDAwZYmzLJ6ejs+Xz1x1MDAxZdLvK4ajctK8dePJ8Hg4Kk5fd7iI4mI6/q6s5pcxnVxclPVPsfxssb/nKDeh+OI02MVwVLlChVx1MDAxYVx1MDAxNJL3tKv8SS7dyDWsXHLzXHUwMDAx+Vx1MDAxNvjQulf6IPmQXGJHsUCmkTNh6qZ4hWLgrX6Ftn+QVsnlNpRcdTAwMDbFVlx1MDAxOGFM3f62dyvVxUGwZ6lvY+4mKNUwQc5Fzo3Ujpv53FxuYpRbMaYojNlcdTAwMTG3XCLDXHKSglx1MDAxZVx1MDAxN/NI9PlcdTAwMTXZeLDmV6yUPDXNkUxcdTAwMDLE2GPDq3xVXHUwMDE2k1E2PSkzikTPh6flJCsnk/GkyoajrFx1MDAxYZ6dn5bZZfHe61Jq73yHLiX6XG7S+JPB8O3Kim9wKTUu6D5cIuuLWuRcdTAwMTLVS9jeglx1MDAxM8FSMvGLOZFbXG5ZVFx1MDAwNGaZ4VxmpDa+6Fx1MDAxOddcdTAwMWZbQlZcbist4NLKU4CW9mhjoXb/OzmRM4jIXHUwMDBirdlg/SbcYIRcIiZyXjcvn1x0slx1MDAwMZQgtjFB6I9cdOrueVx1MDAxZEvkXHUwMDA2lZC+sLndMulHjODCqn5bZjE49rCbVs69apy+vI7wpHVqcc3NpvnypbbP1GbT5Fx1MDAwNaO/XHUwMDFm+O5oupsmMVx1MDAxNq5RezM6raapyKCJefd9z3SW+edpXGLzXHUwMDE262apXHUwMDFiZml0jkJbwZjiXHUwMDE0eHg30MRG+uuh3jbcjWviuoL7c+CtXHUwMDE5cMNcdTAwMTi3XHUwMDAyaynIRMxcdTAwMWJcdTAwMThcdTAwMDVbXZj315+/ev3ky1x1MDAxN1x1MDAxOfi5tVp59I64tWeNadjzXHUwMDE5XHUwMDA0x75QXHUwMDBiuOdcdTAwMTBsXHUwMDFlV3HJckuBr1x1MDAxMMIgRcDL444lXHUwMDA0Y9OqXHUwMDAzdrAradUn4SDktFx1MDAxOSPFslxyXHUwMDBmsFx0hORLXGaTmsvUWVXJLFx1MDAxNzFuoYHCV+XZ8JDu6KjKxqNsUk4vKJgs351P6COgK6i84KxcdTAwMTHpO1x1MDAwNGf40lNh9nIynE7LUUTIsc7qpC/k4Fx1MDAxZY8pXCJcdTAwMDLf+1hgIYrNtM6ROtiK1vUo4njamdZZXHUwMDE0zFxi9CZU21x1MDAwM1x1MDAwZSu1dtxmeVx1MDAwMX2kdZdxXHUwMDExh2BrttnM61tPwIFcIsIy7bPnz16+uKnGXHUwMDAxXG7+oVvms+5cdTAwMDFcdTAwMDcz2lx1MDAxOFTMl1ltN01tlVJWY89N8/TAc/zkXHQ31riOXHUwMDEyXHKbJKojJbeLQ2TRNFGI4zpcdTAwMDFG+uvhOs8jXHUwMDAyXHUwMDBlxYldMG9yppXrXHUwMDEwK+FcdTAwMTJZ8opcdTAwMDZcdFxcXHUwMDFiXHUwMDFlYY9ccqrz/dx7+8NccrHy6Fx1MDAxZDGaxlxuk1x1MDAxMVx1MDAxN1xiXHUwMDAxXHUwMDFmrFx1MDAwN/tqaYNcdTAwMGK2YnK6wdYoZIpJoWrBydJDQC5t/U9M9lQqguOuRP8vwsGoXHUwMDE0XHUwMDE3wLSNXHUwMDBiPKQg9IC0yVx1MDAwM1x1MDAwZtBcdTAwMTB1XHUwMDEw3EDjUVx1MDAwYlx1MDAxMHtxpna0XHUwMDE1XHUwMDA2N0NcdTAwMTCDIKhvhiDHXHUwMDFjhLbWlTZcdTAwMDLdXHUwMDA3X7DfXHUwMDA1gc/JXHUwMDFkPnmyI1xifFx1MDAxOXGMhlxuXGaoOHco6YdA4i24Q4XS1k0xXHUwMDE2gMVg0GNcdTAwMDSurC5cdTAwMTVcdTAwMDR5XGJcdTAwMDTJsd1cYkHkOZPaXHUwMDFhTp5QeKtcdTAwMTg7IXBgXHUwMDBlXHUwMDA3XHUwMDA3u1J88ruYg2xtJONcIipcdTAwMDNOTlNZrnR6XHUwMDE3KFF2coFcdTAwMWZcdTAwMTWPe4zAldWlQqBcYkIglzlcbpRSue5cZlmvjp5cdTAwMDOS5YZcdTAwMTHuXHUwMDEwgdGLPGXGwuZCSi24ov1XJcenePHMPt2V5Phn4fikd+PEXGaVL7lWc1bN7DhFXHUwMDEyyFlyhHLFVKeQccixx1xiXVndXG5CV68mXHUwMDBlojJcYqI6yEly0NygXHUwMDAx3HvIbHtcdTAwMDR+XHUwMDFlgUDJhFRcdTAwMTSVx+W3pTLgSoaXr7ijJGJcdTAwMDOBXHUwMDBms4M+O8nV5aXykipcdTAwMDSCXHUwMDFjgiDoXG4yksNvp1x1MDAxY+BcdTAwMTdcdTAwMTHwXHUwMDAzazRcdTAwMTk9jypcdTAwMWHSXHUwMDE0zKMw4s5T+L9cdTAwMWH/11x1MDAwMXs6XGJ78uY0XHLa3GjBkO9cdTAwMDPEq0e3xN+XXHUwMDEx+ONCaibQRuFcdTAwMGbp9oGRPfR+XHUwMDBmso8/7TFcdTAwMDBXl5dcboEmXGKBdu/9flx1MDAxMfR9XHUwMDE1gT7BiHpqXHS+M4pccsVcdTAwMTWcwj+J8s6ruffuXHUwMDBmLm1cYvjEelmTXHUwMDA3fMpVJFqrXHUwMDEwpEHG9yHg/NEtUfh1OFxuLWpBYFx1MDAxMr4ykvZjXG6rubZGJj+m4Fx1MDAxNrqd2v+YXHUwMDE12b9kXHUwMDA3PcZhY4WJsFiVZ8M/n4R3bUsucia5QVx1MDAwMPrk9XrZsMua0lxycWdR1lxi5Vx1MDAxYnrjO8uPqfZcbmkvkYXLnH/g1V7fxFBSMFYgcu/BfSNNs1x1MDAwMKSiW1Qv5E7UwK2A1ao8ulZ1XHUwMDAxXHUwMDBicVx1MDAxN3K90tB3qJ3b21x0lXaqm+TbiLM0QK2MgrjOO1x1MDAwNYhcdTAwMWF4rZO0L1xc7ZNcdTAwMWV7iE/S8zRcYqroktLQpk/8WllyxYIvzW6OQ567g1GmOVx1MDAwNc62ntNfXHUwMDE0W6qcca5QaU7UXinlqbbcs7jrNd1cdTAwMDTP30e4XHI0mjnm7KNxQq8/uEhluO5DRlFvcr/BRW1r3lx1MDAwMp8/ZT1cdTAwMDZofXHJXHUwMDBl0iCo4kuxm50jOmbHhLZcdTAwMTRF2VlKw4tCjCl63im/+Idw4Fx1MDAxOSNcdTAwMDSX/rlZ7eFcdTAwMTNwN0kyfX+XRCU7ucWf/9//z6YnwyqrrrulMvrGTVx1MDAwYjm4OP5cdTAwMDc/JPXKo3dcdTAwMDTJ0IWnKpEuJ5Pt+7rQO0rC19dcdTAwMTUzJfT+IVx1MDAxMzdOkqC3Nsxsg89cdTAwMWXFU9/58Vx1MDAxOdE9oyiqtS1jiTakXHUwMDFlraDV452z2Vx1MDAxYi2zS2NXvaBxObDN40FSh/q8+Fx1MDAxNZjmq86mSfxaXHRjdFRWXFxZS+RcdTAwMWRqpVQ9Nc3tXHUwMDFhu1x1MDAxMJpFe1xc5oqBlVx1MDAxNtFI8J/bRHZ27Vx1MDAxNMl5XHUwMDFkU6gnuLZcdTAwMTIxqpJcdTAwMTaFlbw+6jFcdTAwMTHJUcbITrHFXHUwMDBiN+/Mz2V60de1tr6ElCVcdTAwMDR60CArzUZfrkTuRphz10xq/Vx1MDAwMyS6hPlHR/SLd1x1MDAwNYh/XGZcdTAwMDei1toyw9FXrteKQ9pcIqVrXHUwMDE0Tlx1MDAwZkSha5Put1x1MDAwMOLZsDorpocn5SBz9lg9dvNcdTAwMTiIpND3Q7LC7MitJvvoQY9TXHUwMDAx8ZeQKKVHaD5cZktcdTAwMTisZvF8cFbM5Nb1SNOTrkPF36RcdTAwMTmVL9ipRN2/RrhSRaFcdTAwMDdBh3mL3tsgTIhcdTAwMTdcdTAwMWNuoS1Moand7W1cdTAwMTJcdTAwMDZ/+/unszB7XHUwMDE5d7vBKvPQezldJVx1MDAxYo6m46zIqiktwK3salx1MDAwMMtwdJxdjIbTVpD3I7lwXHUwMDBiXHUwMDE3mcqrXHUwMDFmXHLfdUhEiGas509E1IKAm8HPi6JQN420LJCxclx1MDAxYuD3KNr7vnO052pduFx1MDAxYrdcdTAwMWFXXHUwMDA0Ja0xXHUwMDA25d1cdTAwMWas3WibnVJcdTAwMTHSM8/DO3A1wjhcdTAwMDOUSu6zXHUwMDAxZ9vp6PTIOP+tu3FywV3XeJxtzsSNVH30QE9tc8tcXIRqJm+R5ZY+KjdYp6WCNDJcdTAwMTPRTzmdW6JPf4qgT2RcdNZcdTAwMTB7ioqAQDKg/VKlXHUwMDFma6m07FaH8HL4rseZiJXVJWQsQbNkga1cdTAwMDHP41xyNMfcgGlcdTAwMTNcdTAwMDfaRy1cdTAwMWJg9+9cdTAwMTFFotZI5iw+XG51RqCloLJcdTAwMTaAJkKdZmBjqtJcdTAwMWGo+648XHUwMDFivy1XKX2efT5X2nlYn1xueT0okl46nGRvi9OL8pNsyfCr7KNyNHBcdTAwMDT/ckj3t78hzK1fccrdIWz2zfr2oD15ypz2fDd2yrs5sDzxXHUwMDEx1q9nbyjC91x1MDAwNsOFUkzHkUQkPqeUZXdcdTAwMWW/NLaGlsLAXoA4fWGgQ1vQmJu6rkdcdTAwMWLalMiZoXiBSddcdTAwMWJen7uyd8ghoDuIcMhKSVwiwXFcdTAwMDdyRFc5guQ6eVx1MDAxYVGD1Z3SiFx1MDAwZq68To/B11xcYkqXXHUwMDE3OOlmeb/bQFxiLL+u+uvu83aqdfEwXHUwMDFjflx1MDAxNOWTm5FebYVccn3DyLWAXHUwMDFlzN5twK/X2fdbODxziFx1MDAwYlx1MDAxYlxco252e8Lw3EhONFx1MDAxM1x1MDAwNEptPOLfe7e3XHUwMDAxd4NcYtwxZpD2tjhRXHUwMDEzpSVjoNJ7PfrS6fz7I3cq9CDPsm/G11HXm/L95XgyyEZ0weUgO1x1MDAxYU9mMdtpUU1rQVreZ7gmuKiEnvXPh+NBXHUwMDE5Ns94LaDkrFl0Rq41XHUwMDA3YEi7uFx1MDAxNob++DhunI/dqXHiZTjWwUqpNX3UvpYzaGxcdTAwMDDL41x1MDAwN2XIyd5C1skg71x1MDAwNvejUVZcZlx1MDAwNlx1MDAxZlx1MDAxNY/npSFcdTAwMDez/7fP7OhcdTAwMDWaXHUwMDAz1pyqXHUwMDAz5lx1MDAxYaxB2Vx1MDAxZm5cdTAwMDLAqnJuuDVaILlcdTAwMDByzL4+mD0hblx1MDAwNetRXHUwMDA0WIUkjCjjLWtpr0xj2ljBkutO072uXHUwMDBi8aVcdTAwMWPl0Vx1MDAwYlDexiiPa/RcdTAwMDVlg1x1MDAwNK5cdTAwMDaiPvRpnkuL1s3TVYqBX+dv7ynbwHdcdTAwMWNcdTAwMGU+KyRHobxcIkXtySDLhZKCJZ9cdTAwMTngtI+SzPDIfuoxXHUwMDA0PWtMXHUwMDA0xPGb4HJcdTAwMTkp12HYLE0wPqdcdTAwMTeDOj0oTbFcdTAwMGL1Mid+xMVcdTAwMTVzccmZjctcdTAwMGJcdTAwMDGbacBiz/WJx2+CTu3r3cZzm/SOXHTgiChcdTAwMTlXXG6BJdBkXG4w0l+Pa1x1MDAxOEbwMlx1MDAxNFx1MDAwNEwmY1x1MDAwNShccsVPIGXyelx1MDAxOS2t6XRy//P//FeWXHUwMDExVylb1Ch6UTbjW2SalMZg+NaTy1xiXHUwMDEzsOee+plcdTAwMTZcdTAwMDH7cOR5UeVtPF6Tuf8gdcL/XHUwMDEyjjxcdTAwMGVu841cdTAwMWMtXG7WKCfqp+78XFx8kyvAiILzdVx1MDAxYlTNQKHFXHUwMDA2RUzD2Lp1eYUjS1wiKXfaX2w6XHUwMDFi4JvOXHUwMDFjXHUwMDA1pNHMaKGiOIpwP1Wf/tRLs4yqNV9rheDaY5m1evTlSIbE4vSu753+fuA742lnw7RKO1x1MDAxZexVrNswYUxcdTAwMTjFjeh13/vcMP9cdTAwMWNEn8W6VdqGVVrIXHUwMDE1fVBcdTAwMTJcXHe18SqaYmJcdTAwMWL99XDns3BcdTAwMGYuNUdcdTAwMGLcK0/T3vRcdTAwMGWcLNJQUJOaOlx1MDAxYlnXZdyCOn/9+avXT758kbVkNtXKo3fEnD1rTHRcdTAwMTaI0+H01ONcdTAwMWQ854DrR1x1MDAwYrXi0cXRXHUwMDAy8Jwpa4xEyS3z19rEhbClXHUwMDE5sINdXHRhR+EwNJpzrvw611x1MDAxYmSFXHKTXHUwMDFhVfpDQM1EJ1x1MDAxZMU/Vq52ushcXDn2YF5e7cVjjTjfIVx1MDAxZTeuNlx1MDAxNTJcdTAwMDdlXHUwMDE11Mq+XHUwMDBlTOFJd1rOckRkRFg3aC1GXHUwMDE141x1MDAxOFNcdTAwMTRmV4pxxlx1MDAxMbkljZoxw+Nm39FNVFx1MDAwNE1IPnNSXHUwMDFh4mydXHUwMDBl/VxcK0Q2u5VHtOZsfElcdTAwMTCpTobn2eVJOcrejy+yoqpcYlDZeFRcdTAwMTJcdTAwMTYmw+LgtMxcXMv3aDw9KSd59uRoWs5rW1x1MDAxY2BcdTAwMWXO/nVccqnlT1xmq+yYfkWfi3ju7qNItalcXM7F0bfvja+fcW7ujVx1MDAxN1x1MDAxMfmy+1hgIYqNu8l9XHUwMDE3XHUwMDBmwlZcdTAwMTFhj45Tzv07SUyqXHUwMDAyJVx1MDAxYViJ7pZcdTAwMWJMuz4kMlDG1ufPJtpgrMGog83N9tmpM74uqbFwfV2H9Fx1MDAwNZyv31x1MDAwNzJM/qGb5n90N02iXHUwMDE2mqJD7ySmXHLZXG6DwlUj9Tu9e7ldY3x9btDipI/lUrrJQlx1MDAwNizn3lxcReRJ305cdTAwMTWBTMLZXHUwMDE4fciKolHv2MhcckUg6CpHZPqOIIuCdVwiY9/P/XePT/lcdTAwMWErTEZdwsqV11KFgnskWpyoIDJ9XHUwMDFigkpSXHUwMDExXHUwMDE0dyVtWIVcdTAwMDNRWGNcdTAwMTX3T1x1MDAwNG/1XGZWIMg+OIZcdTAwMDZcdTAwMGVpXHJ+XGb2YvzeyurSXHUwMDE0YOFlWPu5Xq298sKPq1xcXGLioopzYThti4kxuFN9QtNwXGaCXHUwMDEwzJBcdTAwMGLyqppBe6NcdTAwMTBcdTAwMDVcdTAwMWPWSdIn94ZS1Fx1MDAwZb63QGGF2W+zXG76rFrTXFxiosZcdTAwMDC8XGaqSUa7TkebgFSYz/pcdTAwMDD2OMy2x+FFOFx1MDAwZVx1MDAxNVx1MDAxOKmJ+8dcdTAwMTXBcMlcdTAwMDChh22y55PhaHo6+oePelxmQ89cdTAwMWFT+cWgXHUwMDFldVx1MDAwMTf7RTS5mVx1MDAxZF2n12979sKC3lx1MDAxNSS+jThFk1xcScW9XHUwMDEznNqRqFx1MDAxOVx1MDAwNYdOjaB3UPzh3o8//XDvYY+B2FhhXCJcdTAwMThWXHUwMDEwIfIp9LpT9MhF7XU8r9Z0XHUwMDEz3i7D8eY6n1x1MDAwNFx1MDAxN95T61a8cYEzXHUwMDAx3F5PzsTLoMlcdMKsZ6w98ZHO6SO6XHUwMDFkveedqmp6XHUwMDE3bpjCTfJDXHUwMDFip3wkXHUwMDE1WLVSM9pcdTAwMTc/UEGPXUB9calImFxuXHUwMDAxX31kbyv4RI7KdVxy3oKK7k7FQ+8jvIJgmmnQcfGQUVJYZeSdV1830Pfgkz7LdK6sLlx1MDAxNf50XHUwMDEw/iTmRihU3FjLXHUwMDA0X1x1MDAwZolMrrRcdTAwMWJcdTAwMWSs0Frg0Cw04JrlmktcIt+aXHUwMDFibM1Y7CU820D514iTM+5cdTAwMTQ8NfeCsrXMwOD89qTOXHUwMDE1KmZ0t+G2Tlxus4LssqiuyvZmslx1MDAxNFx1MDAxNT7MhtNsNM5Ox6PjcpKV74bVtOq7puc2XHUwMDE3kupcdTAwMWOuk8an0KHlQ3uNT1x1MDAwZoBcdTAwMGZcdTAwMTjzIzimSINcdTAwMGJcdTAwMDVcdTAwMDQrP7Jb3S1qVIyxu0963GicnSqIavHZXuYz2jqhs3VS1KuI1kVGYpbR35U5Oz01zi1riExzWlx1MDAwMNrcjVx1MDAwMWtcdTAwMGJU9lx1MDAxYZ9cdTAwMWLMXHUwMDE0w2mQ5MCJgMTpzjohc1glT32JTXZT5Vx1MDAxM7dU+Vx1MDAxNLWxXGZcdTAwMGLgoaR3XHUwMDAzXG5kyDSEXHUwMDFiKexcckL2Mp9ZXHUwMDEwXHUwMDE2eThcdTAwMTZBgZDM+iufN1TzXHRNWyT9TVx1MDAxZJNcdTAwMTAnqrVBblx1MDAwMcaDMVn7ZTY+qndcdTAwMTI9znqdvVx1MDAwYlhzoqRCqJZnI6fuXHUwMDAxreQ81+QrgW86YN1PI26FqYiAqUGObmJHXHUwMDE0TLUxIJRO3lx1MDAwMGW1XHUwMDE2qlPN7c9/+3tLwL1sXHUwMDAwum5cbpqUg4fuxcOKQvFLeiXBo36r+pdNSHhxqZx1J/FOic1cYs6fYahtXHUwMDEze/HOJdKlXHUwMDFm6VHDVKRlKFTcMFx1MDAxNVx1MDAwNEC0K5qffVxm4rqqd0r09IPs1TtDrVN1t05B63CC8VFcdTAwMTlcdTAwMDawXHUwMDA2XGbjpnZcdD21zu1SXGaSe1x1MDAxMrMqV06xKEWCYZekO1x1MDAwZpiOYEuCc0ZcdTAwMTFKXFzCi8JPocTKXFygvmRcdTAwMTh2T7tcdTAwMTPH59N6Y3K4mILPXHUwMDE5oOQ5oEVJ0SWFLDV6s3WoUppDc8PxyK9cYnwmXHUwMDFjfDOdcav947Vqslx1MDAwNlxyyTCNgFx1MDAxNF2kblx1MDAxMFSgOrZEfHs+pYVmTzJH7Fx1MDAwZk/Ho/Jxj6OPjauNaJS4XHUwMDE5nlx1MDAwN1vBUzYzXHRcXItcdTAwMWM1MI5CIFx1MDAwM1xcmsB+gHtcYjpthGvkhFx1MDAwN2xcdTAwMTFcdTAwMTSDhr9cXGRcdTAwMTJcdTAwMDT9iCtDSFx1MDAwZU6jWacpR7SG7KohKJ9Z+0dcdTAwMGY+ybJFb8JVbTQ9+6DPeptbXUWqrieH5aCsoMRlUNWGZadbhIboLWFcdTAwMTlEy7yyODCrJ9ZKuStgflx1MDAxMlx1MDAwZWZjjVx1MDAwMW28k383jEWSlinQPPXEMormXHUwMDAwOs1ccnz0yKXCqindt2yWXHUwMDA3e5hccsryPDtcdTAwMWOfv8/OioF/flk/XHUwMDEwXHUwMDFjsfZEufzxm/BcdTAwMDHddq1XSsq9fkNcdTAwMDeMPu2eMUGn7Kn9UzTaQ1SpiCahVP0uyiDLXGZcdTAwMWFBa9dmdtfHc+9cdTAwMTVcdTAwMWPSmOqzXGJuiGRcYkKyuFx1MDAwMZhgaJmo6yNjXHUwMDEzcUPiXHUwMDBmptNZ8I5LOMyYXHUwMDFkXHUwMDA2JlHw5pQ6cYacYnSjXHUwMDE4MC2wPiRzn0ZcdFx1MDAwMuPzmDRcbjPCdej5TnxbNSlccrNMurGXqbHIXHLqTlJbV2mJpy4t8Wk2r3j4XHUwMDAw0iht602J0MA8yjpCPcGXXHUwMDE1+cZyjH1cdTAwMTKlXHUwMDFkmy9cIrBcdGBcdTAwMTBs5Eg+mFx1MDAxNUzVz8j6crywyD78Y+vgl15gsmWdqeIpgmLYdGjQN0OR9u+cXGKVtkJcdTAwMTKtVfVcdTAwMTl1+zxIXGJcdTAwMWVfhuNRXHUwMDE5RVx1MDAwZSpyPLSmXHUwMDFmQGFsavlcdTAwMDTFXHSNneD46NGVv3m4TCm4yqE+1zxcdTAwMDWsOVx1MDAxMUyJKlx1MDAwN1x1MDAwNZeNg1x1MDAwN+1htKhygSzZXHUwMDAw992qX/xdOEKF1K7sIdZjMsMtXHUwMDE3dy9X2YDo7yflUTm5Mvnh6LjHyGxfasLawmnQJEPUN0NSsFx1MDAxY11smYC/7pKE+lx1MDAwMfssXCLRo2fMXHUwMDA0onKPRlxuQiOI/k3m+Ijo4INcdTAwMWUjcG19XHT9YNC4Qo46t1JobiztwUaujVx1MDAxM5Wa55ZZyYBzRS9ryoBxjTnMqjpcZlhHb/aOMlx1MDAwZZqfR0BTMWVsS1xudoOnXHUwMDA0XHR0fyF5pb8xSnY601vIeIxHp++zXHUwMDExXaVcdTAwMTPvmJTFIM+yP1Z9PtJcdTAwMGJferKyXHUwMDFhXHUwMDA36qDhh1xuYFx1MDAxNdRrmMac7pyxXHUwMDAyUYLyXGJOXHUwMDFhzDXFPtydrNiWhrs4b/v82fNnT57sXG6kv4jJ5EqJSjHvUVx1MDAxZrSmcmlD1sBcdTAwMTFcdTAwMTLHp8hcdTAwMTiobvVw11x1MDAxNSrZx5/2XHUwMDE4vd5VJvS9QbPpNFs74bzR2VxuYXMtpJBKcMk5U/uwNFx1MDAxMppfRkDT0lx1MDAxZVxiyLxdda2lqshQXHUwMDE4XHUwMDA2wiT3tlx1MDAxNozoRIVcdTAwMTcua+6tLseZ+2DOS/oyms5cdTAwMTMy8+7Sqs+aYFtdRVwiXHUwMDFmPFx1MDAxOL71xLJhmuN12eq97v126P0qgitLikbNyoiSkJ44csdS9GHq9yZcdTAwMTfDI7o1163QKyfn74eLmaGwbl/+8i4oQWxjg30q7/q6e3lcdTAwMTeQRShXXHUwMDA1XHUwMDFiY5qaW/It9SxpLy0zqlVzrZVY+Xriaj5vOasssbC4m1x1MDAwNkV/P/Tt8Zvupim5XHUwMDEw0kDkrDJphVac97vycG6bf1x1MDAwZTpcdTAwMWZaXHUwMDEztVKiOa9cXMucsTZcdTAwMTWPxPb5K1wi4N+Gu3CrKcq1yjvWYkNXO3Jlmbx7XHUwMDBm3uDf16ry3M+u1cqjd8SuPWtMdFx1MDAxMsS3Vr4nV9lAXHUwMDFmxcc5WFCS7XXvt0Dh7yOINFfaMC29XHUwMDA3Qq1cdCptaZluoG1SXHUwMDE0XG5QSqHuhEJa4cflu5PioppcdTAwMGXfltlZMT08mdfxXHUwMDFkjSfH46lL455cdTAwMTSjwWlJXHUwMDEx5mVWji7O5kLRK3d9idtcdTAwMWHBvkPcJrmqVEhcdTAwMWaUVVit1DrQVTNcdTAwMTdcclxmIFx1MDAxN1e6rUnqMIwpXG6zM1x0rz9EIJ1J2lC5vzm7tVRKXHUwMDEwJMFqkzxcdTAwMTWtmIVOc6T+5PThXHUwMDA3g3KQXHUwMDE1M6O/sve5PvxcdTAwMWNcdTAwMDJcdTAwMDdcdTAwMTfTbDBcdTAwMWOM/mmazVx1MDAxN5CVdHnvr/Bz4N4gm55cdTAwMTT0bFVW2XCaZzNJ+kP3ND0wPVx1MDAxOVZcdTAwMTk9ezg+O1x1MDAxZjrl+eFZ2efc2Z1/XCKpdpjLuejt9lOr6qxyyeg9aVx1MDAxMFx1MDAxMZGNu49cdTAwMDVcdTAwMTai2Li13HeBJnzg0uVcdTAwMDfsu86hJnJjUcfp01x1MDAwMt02hqj6LU3ELztccqxStpkotp4kSFT7ZUC5/n0gu+RcdTAwMWa8Zb7qnlx1MDAwNEGjrCv7jDFNqdywS+z3RGx+ud2wqvpJ5eIsUuZWmtZcdTAwMTRIZN/lbrWTvI4gZZZJ60b7xVXHKkTjqmr7l1x1MDAwNWno1feu6bKxwmSsxdOT74mK1pOPtpn+4NrkynBccvJ2ZOt2qyjgj1EleFxcXHUwMDE5UF5J79ZcdTAwMTjJStBKUXiVOkai6LjW9L5cdTAwMDVcdTAwMWFnnP/50DFcdTAwMTPX0fhj9s14Mj15mL1cdTAwMWFfuP+9KKrpw+z7kr76XHUwMDAx24tcdTAwMTHZ21xcRJpiXHUwMDFmTlFUhFx1MDAwZao061Rv+UEtXHUwMDFiqX9cdPmTX4NcdTAwMTDqXHUwMDAx+9eYw1x1MDAwNM6NiCR1tL9ypnquwcMvg/orpFx1MDAxMWu213QrludcdTAwMDDcXCJcdTAwMDLY2XymxG5lt466vo9wK0KDQeMvXHUwMDAzbXUrXFyxWZlv8qmIglxcnIwwz4ZbmW3Abt/tsdfwrDGRU7hcZmq9qKeb2lx1MDAwMClzwVx1MDAxZNnwn3DtXHUwMDE53tWaboTiv8VAXHUwMDExXFz9rY5rR1x1MDAxNExo4TTx7tpTNKD4U48h+FNy6M3S1Fx1MDAxMWlhbddA6MtcdTAwMGJrj1x1MDAxZozKXHUwMDBiXHUwMDA3yiVcdTAwMTbwwVx1MDAwZj/7U/e8MFx1MDAwM6BNT8cxNdDC6fnV+V1cdTAwMWap2tlBUFxuwLCbuZqk7d/15lx1MDAxOIpIicon52q75SD+PcJBaItWXCKLk9sheFx1MDAwYmGsSj1SguCiUXXqwptcdTAwMWbtXHKGk+vIOfvtp1meX8XP1984pnT9b1x1MDAxN0vP/5312b2kurBUvukgKFAj9oG5nVxySVdMu4astb3A5sZoXHUwMDAxQlx1MDAxMPJcdTAwMTE9XHUwMDE5XHUwMDA0K3NggvYt0Vo0XHUwMDAxJtcx+fndityKiN3ASPI9YLxNucBcdTAwMWF1tIv9gDZcdTAwMTFlUCbfXHUwMDBlkItcdTAwMWF13VK4e1x1MDAxMVx1MDAxYmWj8fSqcGjQXCLSLVdcdTAwMWW9Q5Hum1x1MDAxNp0qjd9JkFtzz6SZvSB3ODZcdTAwMGY6M0xccq67knknY28gmIwrsPbuR1xc3GibXYpcdTAwMGa0aLZg7PW4g43zsLNxXHUwMDAy01x1MDAxY7mKnYZkhLKGW3Xn+YebrHPLXHUwMDAyXHUwMDA0z0jyvSD39nY6XGInOC7WUULGdVx1MDAwNFx1MDAxOVx1MDAwZYqh7qFa1m7qcfMt9bi18FxmXVx1MDAwN5sjeU8ptVx1MDAwMt026Hkvx51cdTAwMDUhsYxAXCJzMmVcdTAwMTa8rqG99sA6j1wiVGpFXHUwMDBmZVx1MDAxNHZcdTAwMWJcdTAwMTUyWu1ZOC+m03Iyqlx1MDAxZS+P8lx1MDAxZj9e5fSHY7q4tlGXvUg5JLimRNmGUDXveuTaXHUwMDA2edTkTJlWllx0XHUwMDE3te6nYcai/ChcIqHApKJ7gl65VLn+2KL81N1cdTAwMWVcdCa1zoLlxLA6aXB9fNU6cObaXHUwMDA0rlqQnnz11XXvQeVcdTAwMDdzL9olwpeeyk13UuKuXHUwMDFmmdygxFx1MDAxZNOfvDtK3Md+lEZpXHUwMDFka6tcdTAwMDV56KjoTStypbbvteNdhbjr0cBeiDvaOE+6XHUwMDFiJ3BDvN3GKVx1MDAxZrsjXHUwMDA2onpw53OWbzLOLTNcdTAwMGK2mY9FllvB6ZPSqKS39GYvxr3BUocxxTZ2Jlx1MDAxNuQ762+NaJRcdTAwMDKumUg+nJ+Yb0e90d2T4nbAm4a1NbB14HmavZXNpVx1MDAwNScnZFG6zqJ9oFx1MDAxMYe9v0Rgz1wiXG5juIhcdTAwMDRcdTAwMWZTXHUwMDA0XHUwMDE3kz6dYCTvXHUwMDA0vieDQTY9KbOzYVVcckfHWTE567OG1OblpoLn4XhQblx1MDAwNU/jXHUwMDE5VyhcZuTMWoGOrsqWtqO9jFQ7Ot9EoFx1MDAxM5FcdTAwMTP/wDi9RWRcdTAwMWFccnJhk8PTMqU6lYR3KcZpaT7qXHUwMDA1jlx1MDAxM11XoqxcdTAwMWa544h+JLU27t+AJ4NQI2d76d/N+D5ccse3duVZKDCuytVabo2Enlx1MDAwZoF0Tieo1E3pm51cdTAwMGUgcUKpjFx1MDAxNG6wslDe86Y4p7NbXCK/Z+FGKaziTiEySjOe070ht5NeK82i1Z2aW5dcdTAwMDcts922x06kdaWJ3IJDZFBTkrQmN5pcdTAwMDHdUiHVes+gXHUwMDBmnzbXZq6+vZdcdTAwMTWNheYoglx1MDAwZjJcboyJ3HkzyzWFj0ZhkCurgvTxXHUwMDFhRehSdlx1MDAxMv39KesxIOuLS0fNwpTQ7PqJrC9x7mrEQUrUPI064W5pbY8jfFwi17RcdTAwMTmqqCRcdEhhyZFcbp56/KVcdTAwMDYrdaeheK/dgLZhNUs9vHzx5PVcdTAwMWa/e+HmRM6nuFx1MDAxZI0nh2U1U1dYzoucz387LKpej7ZLdF0p06JBXHUwMDBld1x1MDAxZOw+XHUwMDE3y6XNOVx1MDAxYVx1MDAwNfSlbdbLPifaXG7281xisKOwrlx1MDAxNz+qXHLfXHUwMDE1V1x1MDAxMV1K3oVvXHUwMDA1XHUwMDA1Pd34b1Zcck+dLMrBxXGVXHUwMDFkTcZn2cXoqjFcIqum9H5V74XWtrmIlChcdTAwMGVSXFxcdTAwMDNcdTAwMTRcIucgtVx1MDAxMFx1MDAwNrnUa6pcdTAwMWJcdTAwMDTqXFy52aruuEvbWi3espszV0paZlxmcLGXXFyLxvh/RGDcnfQxy3xcdTAwMWVcdTAwMWSa6dYlk3b5WC1U8mNHoF/cKbXqvul5gNtcXGJCVlx1MDAxZKS2XHUwMDA2XHUwMDFjbva0XHUwMDAwOnedXHUwMDE0mrj1fLL83tnGXHUwMDAxcVx1MDAxMlx1MDAwZUQ3XCKeqE3cuGnaXFxcdTAwMTlcYslTx7NcdTAwMTal6lx1MDAxNs9cdTAwMTZVVsznIH9cXJye9lx1MDAxOYytK03jN1x1MDAwN8O3XHUwMDFl6lx1MDAxYqZPZTyq33uVtDhcYlbhXHUwMDEwXHUwMDA0qSyRXHUwMDEyP1x1MDAwNluPIVx1MDAxNNNcdTAwMTJNz0vCxPZcImnGXHUwMDA0S/UlXHUwMDE3SYOSM7zTPkjT3Vx1MDAwMqd+XHUwMDBijKlVJFx1MDAxYtOGqaas9SbDRGCSM6i39vbSMruIpFx1MDAxOc948L1IWrhtXnS3TVSa85bSjFxyXHLkyunC8n636IrtRdIs41xywzQ2p0Vabq2Atil2e620NlN9XHUwMDFi7shRWiGVt5qgPUutXHUwMDE5XHUwMDAzqblI3TSkhVx1MDAwNNkpor2WIVx1MDAxM35cdTAwMTbdK6k0kZo/n4mtpdKMbYqGa1x1MDAwNblVVjEhLIK/eW+vldaOwsuYs1wig8Jyb4NFa+tcdTAwMWUyXHUwMDAxXFxrYMmng2te7+feXHUwMDAyhk/Hk8n4Mjs8Kellk2w8yj4rqpOvi/Ps4+zsYlpcdTAwMWOcltm/ZMOz639cdTAwMWbMX19Ms4o+1Zn4j1x1MDAxN8D90ExLenWpoL+tdpr1XHQ7My5z5MxK3S5cdTAwMTKw105rRf67XGL/y4D2XvT3VrV6YFx1MDAwM4LujIHkxVx1MDAxOYJL0SmZ5ZTCTsanXHUwMDAzp1x1MDAwYrZEwKQ8KunGXHUwMDFlljPFsFx1MDAwNVxc3lx1MDAxNqdk7+7odUSm/9496X5iWs5OY2dguXppnr0+WVx1MDAwMOlcdTAwMWF4M1GxuXRYn7Nmd/+RpNpjOqunWc84XHUwMDFlf6fxXj7Nu7O871x1MDAxZYRqJjhq/5jc9qmDXHUwMDAwRlx0J0WSesfRXHUwMDE2o7jGZlx1MDAwM+3UaGxlM4e8XHUwMDE3UFx1MDAwYrbNvyZI3knJLcO45Fx1MDAxZDjBT9B3L1m12TS3azO2qknPJMvd58Ttlbqtp89ir6LWbqj1Yek3yzYhXHUwMDFhTlx1MDAxMXBcdTAwMTQ9c9rD9F/yvVJcIlx1MDAxNzFcdTAwMDbZYGe7q6EmttNQs7KZXHUwMDE3sVwi55zcXHUwMDE20Ivbe433XHUwMDAz1LMgMEJcdTAwMDRcdTAwMTiN0U5lI67xXHUwMDE43Fx1MDAxZuHKzpPDkYtug8xoXHJZdTielNlv/ZDsxWgy7yrTVOGIMFx0KlRrTtGHSpMrJH+NQs21XHJcdTAwMTOjcrdcXCSGo5I2QKtlXFzlqzFOq+M2ICnqIeZcdTAwMTaQnFx1MDAxOXqVXHUwMDFml9OPelxmSe8qU0EyqPyc25shSTyVK26VNtaNmTOpIfnshVx1MDAwNb0zjpJHQFK6bo/IdkzN3Mg+nVx1MDAxZZIrlXpbQPKHe4SXw/KHez1cdTAwMDakZ42p4Fx1MDAxOFRHLvTNcFx1MDAwNJGjXHUwMDEyqm3u9Z6zXq/pRiiKcChSIIhGuuGnXHUwMDFlLG6o+ZCCXHUwMDE2Ktmdi1x1MDAwNjTQ+OCTlvbLXuBwZXWpXHUwMDEwXHUwMDE4VCYu4WZcdTAwMDSikjmC0m2jcONcdTAwMWE11Fx1MDAxM0t+dVcwJyMwRzucUIZF+j9XVi4phEjuXHUwMDAwybN20tl69Kh5mFxcTYvJtMpOykmfe7CCV55cYqr0Vlx1MDAxMVNsXGYjwNFdXHUwMDE3yDWzrHFWJXOrXHUwMDAxUTJcdTAwMGKm3rO+XHUwMDE4a2UxZ/U/3kLf3HDazKVcdTAwMWJ/xjnUzrr2gtxLdKtwdGulXHUwMDE03S2/blx1MDAxNm+42YVLRTdcdTAwMDNBXG6TnOBaLlm6XHUwMDEzLFx1MDAxNeJs1nVcdTAwMWW9zlx1MDAwNnhuXHUwMDEwXGZcdTAwMDVeV1xywIk5307VVIKOOTSwyJmrnInxP2S7XFzTLsTTOyCLplNV5VW6YTiqyDF89MO9p+ODXHUwMDFm7j3MXHUwMDA0Pvikx1xcMGjVqTiiXHUwMDBlgS0wwNxSXFyuuXbaOHZpXGbzsz7IyWhAXHUwMDFig5z8UnN6XHUwMDA3ashcdTAwMTlnXHUwMDA2UctZl2GC0qzdgrFcdIexsdpo4ddTQLv+4KLP0HCOgrHUXf1aaYBOc06JjK1RMTfn4tm337z86vNnr1tEXHUwMDFh+0Ijw1ae6rCwk1Ij1LnJXqpxXHUwMDBikNrOlSRau2SH9Z5cdTAwMTS2Z10k8vlI4aTYTV1J0lWqXHUwMDEx6oHKXqsx2jqfdLZOQIpcdFHqOG088vlcdTAwMTJcdTAwMDX0vM5pa6lGR45cdTAwMWFmyWWuXHUwMDE4UHhD0dtMrH4v2Fx1MDAxOGesT8P5XHUwMDBl+Vx1MDAwZU3EJUokXHUwMDBluFwiz2bSXHUwMDA3LYZxKyDCKFx1MDAxYnRnN1x1MDAwNVx1MDAxYsWWgo1Qv/HX6FNyXHUwMDE2rsiNfSB7wcYsXGKJz8KRKLTmIFwie0KU09ZkXGaSXHUwMDA3XHUwMDFl1lx1MDAwMnQ6MjosRk6w8Dr/O1x1MDAwYsuzolpy+vKwuKjKbDh1g/joV4yvXltcdTAwMGXcy1x1MDAxNlx1MDAxOeRcdTAwMWXnXHUwMDFh0l9iosREJ2E4YFx1MDAxZU3HvTJcXFx1MDAwNOifd+eKoITgNlLWXHUwMDFiXGZt2bre191HrthVXHUwMDE5XHUwMDBlmPRUx++l4UKt80Vn67TkcChg1lFcclx1MDAxYlJcdTAwMWHpdL77XHUwMDFkZm+tXGZcdTAwMDdMefI/KleufD+F5PxOqcLBy4ijQVxuXHUwMDE1bYvOdfteyZ0mXHUwMDExan3ns39cdTAwMWHEafdk4cTWsnBeX6CMzjkq2qFYS/JgP5RxXHUwMDEz9n5cdTAwMTdx6MmkXHUwMDE0KOtTplx1MDAwMoJcdTAwMTahOZNcblTqoMWdestORTfPJ+PzWc91o4Dl6YuX3373Yt6WPVx1MDAxY1x1MDAxZOfZd2UxIFI/XHUwMDFhZK5Buqzmus8uXHUwMDFlcFx1MDAxMu2nxXmfu9Nv6TpT7Vx1MDAwN1x1MDAxNEqdl1x1MDAxMTU9XHUwMDAwq5VcdTAwMTHAtE+Prmu2O0yaXG5L+OA54uedOaJCy1xyYJxiXHUwMDE1uqYt95N37pU3mudMJvEgyF/Bur/yTCxcdTAwMTVS5UZcdTAwMGKpN53v74Vx2q31i4gkXHUwMDFis8aSr/CRRWg93lx1MDAwN82sIKqRfPSKddn3TlU6P2a1Tr2s1lwitGhOePBJ9uifM5eHmr/K1WBm//wo+6nH/inJVSVKpoXr0+F6osJcdTAwMDN2ZJBbgVx1MDAwNilcdTAwMTjW3NSilr0+XVxi1r+MIKdoXHUwMDE1R+BxeuGzXHUwMDFlXGZ37JicnFr2XHUwMDBiXHUwMDE35PVcdTAwMDLKv2RBXrBwnTHrOW9cdTAwMWZUrcqd2oJmsz7GXHUwMDA0bnm3mje+ioAql8xaUN6JXHUwMDFiXHL4Llx1MDAxYYpcdTAwMTWF965SIDVUnZx8p4Foj1x1MDAxZS3m/51OKIB6n1xyKOI6L1x1MDAwN66G7dOsKo7KnpfeRSw/XHUwMDExeMdvmshti/d409U2XHUwMDAzPkRf8ftei9iH1a+7XHUwMDFmWTnhSGiZKtyeh3WqrWhqR1x0fVxm+MZvgkZcXFx1MDAwM+frZmk85dzM5ihcctNuXHUwMDA25GzQddNKI89cdTAwMDZ2i1x1MDAwMn5cdTAwMTPuV6TbKbg/XHUwMDBi0T6nQkkp8Vx1MDAxNtKTIHi39OTP//NfWTZZT8hVJd3X2Vt5PUovjlxygleeTFTG00FcdTAwMWam51x1MDAwMXV9hL2qzHZcdTAwMTj9NoL7KWasUCw2VcjdXHUwMDEw7Lvvld9ghaPxtNxeV4bsMFTdKKqjIKjSoYBiuyx2n4zw991JjTKaWyG9KVx1MDAwNGiKXHUwMDAyLmiNVag11jXC0kxpXHUwMDA3p1lcdTAwMTNTIXuDeVx1MDAwNp268rUkNnhGplx1MDAxYZmTaUJrtUPsketulTv8IXy75KCUtlx1MDAxOFd8Y4UxSveg+KZBab4s32fDUeWs5HGPI2L/MtOQXHUwMDE1h8OgXHUwMDA0M+hcdTAwMTAgcsiZJf66YeTPvvihXHUwMDE1id+FI1Fx2t9cdTAwMTG9Z0lNXHUwMDA1+KVrXHUwMDEwXHUwMDFjXGI+6cNcdTAwMGI3nrRTeOHUz/+pylx1MDAwZcdn58PTcpJ9/sqJoE9m+Z7p+2xUTvMsezFcdTAwMTNCL11cdTAwMWZDVlx1MDAxY4zfulx1MDAwM5pcIptcXIycwkV2OCmqk4yeOrg4JsBk4+lcdP2iU7Kyi+LYSS/3XHUwMDE447/s5afbO9xslbDiKaZyl2vhXHUwMDEylOW2dsRxtZuI3LjDXHUwMDBmZO7gnnuqwI0rrFx1MDAwMp1EXHUwMDE3aLdasl5FXHUwMDA0RNZaacHv4ptcdTAwMGYuRlx1MDAxOWnukuHJtW5ccv2vm9btz//9n17Y90PYZ2V1aVB5/vozXHUwMDE4XHUwMDFmyI/fnLw4/kp88Zc/ffXki6dBXHUwMDEwXHUwMDE1zNWCXHUwMDE4tIJxzXBtVlx1MDAwNEHU5k6PXFw5qk1A9UBUkfuX2lBArdrmxMcygJJxMqtdQerrcKRcdTAwMWFcdTAwMDWGXHUwMDE5qE20rUWHtUbGdTbOne5o+mpcdTAwMTJjUGInNv5x9qqgT4J82NNcdTAwMTP6RzFcdTAwMTn22F9vWmw0junr7JO9V5yfv3LSO/euXHUwMDEzXHUwMDA1995cdTAwMGXLy6eeJMnR7M+931xc7Vx1MDAwMs7cy1l+4aff/PS/QcCL9CJ9 Common Rust Mistakes — & How to Fix Them Learn the compiler errors in simple way MISTAKE 1 Semicolons on return expressions Written fn add (a: i32 , b: i32 ) -> i32 { a + b ; } ← this semicolon is the bug! Error mismatched types: expected i32, found () —> the semicolon turns the expression into a statement returning unit () Fix Remove the semicolon. In Rust, expressions return their value; statements (ending with ; ) return () (unit). No return keyword needed for the last expression. fn add(a: i32, b: i32) -> i32 { a + b } ✓ fixed MISTAKE 2 Using a moved value Rust transfers ownership when you assign one variable to another. After the move, the original variable is gone. Written let s2 = s1; println!( "{}", s1 ); ← s1 was moved into s2, it no longer exists! Error borrow of moved value: s1 — s1 was moved into s2, ownership transferred, s1 is now invalid Fix Option A — clone: let s2 = s1.clone(); println!("{}", s1); // s1 still valid, deep copy made ✓ fixed Option B —> borrow: let s2 = &s1; // borrow, s1 still owned Prefer borrowing (&s1) when you only need to read. Use .clone() -> when you need two independent owned values. MISTAKE 3 Non-exhaustive match —> forgot to handle new enum variant You added a new variant to an enum but didn't update every match block that uses it. Rust catches this at compile time. Written enum Direction { North, South, East, West, NorthEast } match dir { North => .., South => .., East => .., West => .. } ← NorthEast not handled! Error non-exhaustive patterns: Direction::NorthEast not covered - match must handle ALL variants Fix Add the missing arm: match dir { North => .., South => .., East => .., West => .., NorthEast => .. } This is the FEATURE — Rust forces you to handle every case. No silent bugs from unhandled states. Use > .. as a catch-all. MISTAKE 4 Borrow checker on HashMap - mutable + immutable borrow at same time You hold an immutable reference to a HashMap value, then try to mutate the same HashMap. The borrow checker blocks this. Written let score = scores.get( "Alice" ); // immutable borrow starts here scores.insert("Bob", 42); // mutable borrow — CONFLICT! Error cannot borrow scores as mutable because it is also borrowed as immutable Fix Drop the immutable borrow BEFORE mutating. Reads and writes must not overlap. { let score = scores.get("Alice"); /* use score here */ } scores.insert("Bob", 42); // borrow already dropped —> safe! ✓ reads and writes separated Key insight: Rust's compiler IS your safety net. Every error above = a runtime crash or bug in other languages. ★ - Sandesh Bhandari
Figure: Four common Rust mistakes and how to fix them: semicolons on return expressions, moved values, non-exhaustive match, and the borrow checker on HashMap.
The compiler changed how I think about code. Coming from JavaScript where you find out something is wrong when it throws at runtime in the browser, or Python where it crashes mid-execution, having a compiler stop you before anything runs and then explain itself precisely is a different experience. And yes we have AI now, Copilot predicts half of what we are about to type, but that is different, that is autocomplete. The compiler actually understands what your code means and tells you why it is wrong. The errors are not vague and they tell you what broke, which line, why the rule exists, and sometimes exactly what to change.
The ownership model was the hardest shift and the most lasting one. A value belongs to exactly one thing at a time and moving it transfers that ownership completely, the original is just gone. It can feel like hassle at first, but that constraint is intentional and helpful. Rust makes memory ownership visible in a way nothing else.
If you are starting out the official Rust book is genuinely the best place to begin, it is free, well written, and takes you through everything properly. You can find it at doc.rust-lang.org/book .
Source code: github.com/sandesh-8622/my-rust-progress
Sandesh Bhandari, 2026