# Null Prototypes (TypeScript)

These are types that makes TypeScript report sane errors when trying to access properties defined in `Object.prototype` on objects with a null-prototype.

## Usage

### Basic Usage

The basic types with defined properties behaves correctly

```ts
import NullProto from "null-proto-ts";


// Correct behavior when toString is missing:
const objWithTyping: NullProto<{a?: string; b?: number}> = Object.create(null);

console.log(objWithTyping.a);
// Works as expected

console.log(objWithTyping.b);
// Works as expected

console.log(objWithTyping.toString()); 
// Gives expected typescript error:
// Property 'toString' does not exist on type 'NullProto<{ a?: string | undefined; b?: number | undefined; }>'.ts(2339)

// Incorrect behavior when toString is missing:
const objWithoutTyping: {a?: string; b?: number} = Object.create(null);

console.log(objWithoutTyping.a);
// Works as expected

console.log(objWithoutTyping.b);
// Works as expected

console.log(objWithoutTyping.toString()); 
// Erroneously gives no errors. Typescript makes all properties from Object.prototype accessible from the type {a?: string; b?: number}

```

### Mapped keys

Mapped keys are a bit tricky, due to how you want the Object.prototype keys to be accessible with the correct mapped type.

```ts
import NullProto from "null-proto-ts";

// Correct behavior when having a mapped key:
const objWithTyping: NullProto<{[k: string]: string}> = Object.create(null);

console.log(objWithTyping.anyNormalKey);
// Works as expected

console.log(objWithTyping.anyOtherNormalKey);
// Works as expected

console.log(objWithTyping.toString()); 
// Gives expected typescript error:
// This expression is not callable.
//  Type 'String' has no call signatures.ts(2349)

// Incorrect behavior when having mapped keys:
const objWithoutTyping: {[k: string]: string} = Object.create(null);

console.log(objWithTyping.anyNormalKey);
// Works as expected

console.log(objWithTyping.anyOtherNormalKey);
// Works as expected

console.log(objWithoutTyping.toString()); 
// Erroneously gives no errors. Typescript makes the properties from Object.prototype take priority over the mapped key in {[k: string]: string}
```

## Links

* [TS Playground link](https://www.typescriptlang.org/play?#code/PTAEGEHsCdoUwMYBdQCM4AsCGA3AljKAO4ZwB2oSkAyktHmQOah4DOoAtm6w4wFwAoBJDKsUXVjyYAVGnV4B1PEgzSAngAdefUADkArgBtDABWiQqAHgDeWAPw6x9JgG40D0GX0d00AL4AfKAAvKAA8qgAVohIAHQI8FhIcAAUXsYAlC4CQiKskIZwsYaQjCkSUoyytM6MSirqWkyxWFkCIKAKMADW7FjscAAeGjFwACY5wqIFRSVlFbzV8kz1qpq8sahtHV3QvaD9oEMjyOOTeTPFpeXci3K1q40bVDW8KRlZoO1gAOJ4OHABsNRmNKJpAQk8BoUHBYDBBB0zJARtAkGpQAByF7LRgY0BjSCAzwWI6DNgoERgkaYgzGJFWawHBxOXigAA+oH0ZDGcAAZgxxm5UA4vD5YezOdy+QKxm5AhjYkhWCkAEwAZjVAE4MjkOgBJMjCWAxNCYXAEaDEUgUbG1FjsBZMQRTMScW4ye6KZQYSD6JBPJ2gWweFmudw6UW+PwhcJRGLxRLJNJGQxtXLTQpXebuqqelbe33+9bNVrZHY9PpAk7JCbp-KZuY3SR3V75lSFgOMTbbMC7faHY4g84Z2bXR251t1At+zuKvNlD5ub6gACicLIcF9rEM6MY-yJZEgRzh0FYsVAjQh9GhnCw3SJWGMoA05hRSDwRN55g4seiyFiL4WBY4IHAgCCAjwqCFKAX6QD+KhwFSiHBnwoaMEKIreFGupgFAxrIKa2D4IQJDkKARGslgt4aCMoL3mozp5OIWA0eMADScBqI8xb8HoKb0pANgANrdKhOIALqODigQxhEf5xAkcBJKk6SptkdaXI2HAsbRHFcd6s5YGQai6DA2mGHpPadBWBxVkOGkNmOOnsZx3FNF2RlqGECHQKZ0DmZZZa9jZA7AqctYuppTmsWMeluc887vJ8y5-ACdnhUhrCQjesLmNACJgNIGBsKSL4QQQFAlYeKAII+hhYFBRTLheIEYpOeLYOwh6gLVT48IwZBJPo8BnkqqpqgALNqOGgAaRrwAR6AUSR1rkeaTDUbRoD0awjGiMxMVxdORbuTo1giWJtSSaAaHRqEcnxopynJpk6mRY58zObFrnHYZxl+QFnFWX2lalfZ72jp9h0-e2M48S0xneaQvlmY+gXLiDtlg+Fw71pD5RfUdsMnQlk5JUuHRruYG5bjuoB7mlxLHnlZ4tSMWXXsx97sAhz6vrC76ft+v7xoBVBotSSB3ohL4Wso6KQAClq89pMXbZxLAUOdoloZJt0zQAxEbxsm6bZvmxblsm8uBugAAQiuAAyYQKLN1AXgAEiuoAAGorgASgAmqAzu6D8s0ALImI7K4RyuujSAAgtIephLoACE9srgoif+97Bs21bRfFyXRsCBLiF215cbIJY0iksk3LsJANdIAEwS0qY5hUBHLF1wEQmdwJen9+JLgV+EdsAFIruA0gAPpsSugfUMEWLzhibLr47kC9XA7Vby6dD6MgMCbxiOCPvocBhLy5+dWERBkEib5qOfbACRXt-n4Br96qwK5RSwgaoUDE48QIPWQHpVg-dgjaw1gwSeM856L2XtQSS9EG7kDGOweikBeQXjsNIESnFJIbiVn4cB1I9I+0fHXAANGxLBTckGzwXkvFe7dIFIGgf3ISbEx48gQPVeAPUmKgAjrnJe-s+BcjwAAR2vjdNQPgChUMQv7OAHBFZwANDyQYsDzpMMQXggh9dDhoWYTg0AbE7DkNhHwSM4ohiN2sbY+x+VWAqNQAUKx7B3FwCVnwARfBiECMoRPEwSQEBrBGLAyxLjsG4M4vgwh8D0QmJSbyFI0gABk6TNasJQRw92kliG6z8BkDBGtEksLCNPNhqCV52EwbU6xpjQCaO0QCPRQx+5EJIWoMpQldahMGbkjp0hxJ+D4AUzJahUlTL4K0wYrj2D1OQewtBAz6ITKyReYZ9FpnqNAAAMTwMYS8-cYwJNWUk9WCyzGgDsEGQZhTTE5PyUJSR-tpFlL8F8zBiCNmNJKcMipVTlk1LuXUhpxTtnlIknwT550fl-NCZU8ZHy8moqkQHf5VSZlzIoNi-JoBvl4v9mU0AlTqnojaesuFWyV7PIvFirJKKKW-PxRiyFnK0U8ukJi3ZHT+WUoJWPShxwYAoAnkPbuglpBBFCPXBlZyLmGCuQwXk4oACKAQ2RV24ZYKJSAYlarIDqy0+qAh2HOZc8Elh9WGurvJE10TYlwCdQEAIfB7WasdUql1xrTXmsDT6lw0rUSeCwBwQEGgsDgT4nSBVQYo2ypArIO2-Q8AIGuSqvxyau5AUsNqvVtrdWhMjcMGVSFZpkA3NAOuhb5Uls8j6mMqqYXWNbVYMt1qgh2ErR4lwfh011qzTmvNSqYy9sgLESdPBp0BGrRoWtE8DSNubWqudlh23KqLQJWIm7YT9xcEIkRiEGpOETTVeqkhD0KuzawL1SrrAG20nsBx0gXCDNQt4goesAOGELZMgZXjVGGDIYE2Ev76KXV4GyJx0BJIpFuWsh5izwNIo8RkNkyYxSWjVWB4hyHoNKzwzQuh0h6EgvhZw0dcr+IKpHnJA9AADAAJNYde7VQP7LknYDEABGDEfAMQAAYMR+G49vXej5944jxMRgTUQhOifE1JmTPGj7QBPlQaAynu3JMeb+dTYnJPSdk5fQw19v78dM4JkTFmtOyYfk-F+As34OdSU5jTlntMYg-vzVEXk74+YIX5lzVmeO-y8--QB3hgGNSMxhjpUXNPSfY+exAl6DioBvQRYR-R2C6BMBJ-uO7mNAWfa+gI1hZaX2SJQecjiYPQBcI15SLWd570nG1pWnX6BNbgEJDEun9Nn3I7BrrzWbN2d5ANmbw3uvuefiFtES2OuzcQsFoCX9Fsjp23zZE8WAFAOgCAuAW3R0XqwKI69dBb09XvaVkwwnKvGcfTV-odWGsrea7abQR2AeISoL1hT-WQf-GUmNibp9DPTe26D0A82b6Hfa0NmHzW1uedCzd47e3xbglvgTjbagEsXau8EzitDDAMIxHF0LlOkuXZSyuvwd2HsFae0V17egTAqk+xhudtX+7-ex2D1r0ORs9fk4UKHmOdtw6YnphHGIkdY9l2j0nMvVv9Efut07+OR1E+AiMUnVH6c0aC6wT+JO74ruO0ztELO41s8KDdznuX7tXp55dvnJWBdqmF-c0Xv3xfHaB06PXgPIAQ4VziMnkuVf7TVwZjXyftdX3R1n-XrBDd4826bu3CqDs07UHThnZuDsYid+Tt3yXPdW4Zy7in53WdXbr7dn33PCt3qD2ViaoeWHh5fZHlH0f+Cx6lwnxTtQ8-JFT04SbiPF+IR1xjwbuPycV6rzbnfxu0Td8J6X-bDv18nb-h3931OR3e+K333nA+H1lYAKwj57dVqgYu31R+l0rpPvHvLvPsDoASnuNqrqvpnjPqjjnrrpjofq-HvtRvQhiEgV5ifijjXhfiDkfu3olrfo1CgdbmgW3o3h7nAN3g-nlo9gHi-m9gAGyf6lbf6QC-71b-6K6Db-5z7cHLYQHw4Z6a7Hab43YYH44t4H4G4ebk7d44EW6LZSFoEKHo5YGS5X5naEFN7Xb35c5+794vaD4mAADsLB32P+Eef+QB-ByOGh4OIBthWusOkBae0BIhKOYhI6Ehm2yh6BMhRur88hZ+xOihJB1eIR5uah9e+BFB1Ofh5BN+Oh1B+h+WhhxWr+JgAAHOYWPn9lwUnrAQ4X1oUeASNsvsfOrprmIX4ZvuobLj4QxLAaoQgTwSjokdoZQV7qkXQc9hkW9pqLkWwRwRLrLlPpfsUZDqUW0YIVAVUTdjUbTqgRfPAY7s4TjgEUXk0WUd1i0VvstrEUkV0QkQ3kcV3hzj0f7n0fzmVsJhVkqlVimj9uPtYfYQATMWMcASUQvjPhUenlNgsaseETbnUfXhoY0TdnscCSoZEbXmCbLh0VTsQXob3gYc-kYZkcJh9g8V9nkRPm8U4bwY4dMQIeUa4SvvMSOosZXssaCesYhBCSXvbmEX4XsVgYcZ0fEUsaQYzqcZyezj3o-mifQRiW9sJkLjiSLsMVYZwTYSSXYZ8XwfKfSX8e4YCbZrnrUasd3hCX4Y0fUbsbCbgTsc1oiZ3siZjjQb7mkeif0QLsJiHpKWHtKS8bKQScqUSd8WAR8S4UIQCVSUCVqRqd-CurqdyQzvqfCYacybnngdfvyc3uGTbmaUQaAhcaiTaSKXabccPk6aPi6fkXKT8SabPsScWT6UvuSZUcIeqQttCSscGWsWGTSTyZGS4FCayUaYoQaaaXyUiZ7iiUKZmdccYcJh-nmV-k8ZYa6aMd1uMUUV8VMeWaSb6XMTWQGY2fWXSc2fvmgW2R2UmTCTGSGUNhyf2ddicWeeaWmYKbQVcYHpicwROawVOewTKbOXHoSUAUqcuR1qqfMX4X6YZlGXNkCbAYySWfaMefsQqd1imTod0Rmb0Q+WKWYc+RYW+TOQUb+fSXLl6THpjv+TWYBWuWfCBRvmBZBRBRWbtl2bGYAVeamReYebyYxckemUOchQwfaTkehXia8Z8V+W8T+d6bBkRQCSRW4eruRXAZueBZsbvkyWXhfp2dBT2TLH2deboZaZcekTce9oMXxQWfiYJR6d+WWaJX+VWf8WvpJRSRnjJV4VRQpfgZCXRZbixWyTEfGeefWfBZQSkUhfedxWViqPcQEI8cWtOYWe6ThZ6UuZZb+tZWqXZdWWRbhU5dvi5cgXqdlZgTJVCbAf5XfjpUFXpcYSqNiRFbicZQJXOe8SuXHiJQRYNuJbZSxUBepbJXWd4XlZISxW2aftBWTmxccSxcVQKVaU-lmfpSqBKdVVKa+SMdhYlfFYnjhW1ZnqlTZV1ZlbBjucsfue5UoZ5cdV1RNQOaVZxcFaKQLuqEMUte+StS1Y1aWfhdPoRclQBR1aRcBRlZRVlQXrIa5blUDYEfle2cdfWV5aeT5VpX5ZpUxYFddeVZkSqLmQtc6Y9VhUWateZe9TdptZJNtdASutSbuQ2Qtl1dRa9VBcpWEUVYjQhYOXeajW9iqOOZjfmdjTFaZXFfjQlS9VZZ1cTT9VJQ5S4OTbSdqTJTTbBc1oVQxXDUxQjaNecbedaVxbdaFU+VzZOVFZhbzfVUJYqRZULUlSLfWZ1WTYGSxXScdnLZDcNapfTdEbhRddpYNlNcKSOWjWhXrS+QbctbjebWtaAebUTVbb9d3lLTyfbSjo7QeS2REWpd5Vob5ZecrexRrdNb7ezbxQHRhcHbFXjcJWbR9a1V9cRWLfZelbHQztuX1b4QNU3W-AVVDYzWrRaV7bpbabNYZYXfxW6XzaXabQTSOpHSTdJZLbbcnSCTLS4Ada2a3V1YrW0V3YmXPWQUzQFRxazX3cYWqOFZFQJMXSPaHQLetYlZPTXWlX9fXfPY2Tqa3fWUdc7adane7TvSVT3WVQfZkWqFVSfU+k9SHRXbTZMVfRHVXRJbfTtTbZuUGVTaGS-aDYXnISuknRTTDR7arVnbvTnT7ShcHvNcA88UbZ+cqZA+HfwH4dQ+1ORZHbAXtfLQyS-c0R3ZBbgyzZrTddmSYBqA9UHaAyXebfQ0nnQ4uVA7iIwzA2vswwDbTY7UNa7a0Qcfg1yVvaxRo5Nb3TNYfRjWQ9FSZcbVQ1IzQ-WeI7UOpUw5BSw7hYnVDS7eft2TJdw1dfvfowA5zUY4bSY5QzhVY9oJI81TIyqXIzAXY4o6w2tGDVsW5e-Vozg9-cQZnenVpcjZ43ncHrrb42faY4E+Y-1iE+XTYxEx4RofY0vRGSve3cNZ3To5db-Sjf-W9mqP7XkyI+feAx1kE06CU+9WU5bQo3JYgagy3XExg7hWveo+kyrWk8zmcbo3-V420wXZ0zjaIz0+PEUxIyxX02E8ruU5flU+M1o2-aoydUk2dW4yk007Bt7cOcQ2VlqEI6fV0wU4lQc5Y7s9Y7I8M1E6M4DegyDRMyC0EZg04x-Zc+yY08xVox7Zk7w2zQLhNMfTVTzf41Lk4d8wM4LYc6DrY4Ng-WgfHeCew5BTMzE+4801k88yYBNEAxi8I5s90zdri-s787wEM9HdUbPRTWSw0RSzRXTS4-RevXC3g3M9nY81rfwxNKQ8y+86y582I1y-05y6Ezy+Lf6ZjiS5TW7Q7cK7Blg8sckxoTSw83o9k0Po6YPbVcPaq9sxy1owc9q7XfI3q-y9LU-bLcax1qazyckxvfCxTYi3vci606i4Y0qyAyqwE18+q7Q5q6U-87y7WZqXbQvdU9IZM-gavZwyK5ax1rK3w-pRND47G+Q1iy1ji0mz81q2mzq568S963Hdm2cxTYNdgYW7M4swmaG8seG4Q08yFQy7k1W8Y3VQm2q6Ew26m+EwC624g1m764vZ24dbU07Zc9DTc1-SG4hS06s6ix05O349O9i2Y3O3i9I+63fZE8u3WUg27Tm3uVu4GynTC2nf2xneNXc1QRG7nfSxNOs2e-kzO86-WzezQ93jfVo9bf9UC0o-69M729S-+4e3S2O1NG83GxQ5e4U9eym4MyunBxTQh6IdEw4yhyo2K2o8jgews67kszeaWyi+-ui4tSy-h7W1e+XfOyRxbem1PRLZR0hzE444k9g3u87hhzw0B2O2-ky1x8qzx-OZji6xTW66R8cyJ+lWJz1c5Xm8gUpXR1c9J5-bg0xwQeeUiwp9rSYG-oqyp3hzW+p4Npp8sdp0J821tXA6TYh4Z8C8DTlWCyFxDbR6EeK7TcWyO3K-pW-naxs2pw1b01B8R-i7B7p-59PQZ9Fx1q+-4cZxFz2-U0rdK2NQi-+3Z0Q4pzGy59Wxe7x4R-x9Bwwz5x635-B9HY5VR4Vxc2Z7u5Z+0XJx45G8e+-pWw11O46xB+y+l660m1l5bXp39Xl-R+u8V-1ec++1C9c8N4x3+yGzV6Ow52-hO9N+e7NwR4m0R4t42x1-e6Ld175wg0+6u8g9R1t8XpS2h-u5K-J7V2d6e5d+Bzd7O61xl7ezpytzlxLfq4K-nuC15pflS7DRV5o2G9V4B0D-w2-qB6Dx83NyOp5zyd52R8sQhwjwvUa999sYNh+zbuawiaN7S+Nza45wPcl256lzs3d1p0tzD8J3D3XW2w3TTwnSh4z0eV++jz+-DdZ3Ecs0exz4wZx1jdxzz3W-z154L49ztc9+Rz1zPSu1o43XT6-Vu5F1ERt7Jwe4D6d-w4wcpxr6p1r3xwTW10pkL754b5T8b9T2u-11b6Vzu3GRj6k0d3Cyd-F8YYwc5676501+57BqTwzuT9ly951295m2bx2xb2g+F6FsEVJ2azJyN-b2N-Z070l2B0T+D5Bzr2T3rxTzyVT2L4-Z98H3TyXzu841FyeVZ1HxH6x9a-S4wfV4n41-VuMZI+12HSbaub7yc1R7T8jybr92V0W6z1ays6r1N1PzN9YLP5y-P5fRY78ccyM0F8hxbxw1v328xwO1K-L0jTj47-pYwRd4f1d8f61nP971wrfNL+S7WmvYzX5F8fuDPPbhZ1l528AeVfXHp-xB4-8RiJ-RbmfzLrj0SyRLMAav0l539Mc0vW3Ad0laK8WOAHOLmWzj4E9UB75dAQL0wFj18W6+XATE1OYF8wu4NYvnUzD5cMd+JbMfmO0YJc86+M5BgbryYH1U52IA9Ntf3y6bd1+zdHbj314GDdw+r-BCuQIHYx9qBmREwur25qa830Eg5vlIKar8dZBy-eQRt275KC2627Qbv3xt5rF4BI-T2rvxV70sTCLvIwW7xMH-9T+gAhfmZVmLWDAWN-Arhu2XqqDHBA-czmX1IHuCX+T-Wzu-1j76CE+fgpPjP0CEYDgh5-RfpWVAEdZA+n3CAdwKgG000ebgzQV0Qd4ZC3sJhWvoT3EF5DGBBQrASwKsGdc+WpvAVhL3JaECRWNQjDtoLSFUD2OphSftkOn5-9imQQv5kAPrY9CnuGbDynnzXYVD4mpneIUNzgEV8EBbPavvpRMIH9ZhR-Uwenw3gyVgBOAq-l636E+tyhBA+wQkz77QszOsLZIeMIybpC9BTQ7-hcN-5XCbcU+LqncJopsCTe73TYV32iE1NYh1vcvA02SENCARAuEwigOBFoD2hkgzocwOkasCHhj7XPgMKD4Ijc29ggtg-wY5kDh+dQ9WmxyjZlYTCtAnEfQLxFmCCR0gywfcJKEwiyRzwl9pSLfaxDiBzPOCgIMmEsjTCog1oX9lBFoFwRtwlYfyLkGPDYR5I+EZwJUHUjIWpfINuX0O5Vdju-wqYVkUMH61-BuQhYfkKWEhCNqmfI3q90C4KDthilTfnwO36V9jhSA4wlkV8HWich8wvZvaO5aqiZBn1WHln3va9dxOX3N4ff29GP8bOCvBkakL+EyiJu2RLIcGLmFKjeMPIiwdgMroxiXR2fN0bb1eGQD6eJrGAYkIOEWtpRzInMVkRaF0C2hdojoQ6MKHKlW+DOCjp4XwFDCkxRAhsUaKSGMjI+po6PuaNlFZEZh+Yy4VyOuHmC3q3Q6McL1jHwMqxMFRQbWMt5IjQ+6g-gb6M8FYcHOWRc4cuJBGriwRNw5YVGLLHbiKxcYvceIVFFFd9RqHWkXL0zHzMMxaYt-tmI55ZEgRt43Ed2PxG9iuhRIies6P96uj1u+4uwbWN75ODPh8Q86i2KEFXjsRkEzkdBO5GwTCRF-Lccv1W67U+uX4gbnsOcFwl-xwErQUBKV6j89+9LLIuyMIldiwxPYiMU+L5EvjKJIve+h31JaDChWww6oX91qEATmaiAj-gGPlGdjFR945UY+MdHX1EJbfAPuJINaD8axlQusTE1GEmiseZo0CfS01BWjA6No0MQvgAGkTeRpYsSjpMHF6Snh7bLYUZJ2HjjDRn7L4bc3PGCCOJY7TUEGLskhjCxKowSa5OFqvikJlYsoYa18mejoBAUpnsaPpGzj3BugqYZqDzFRSCx6kosc5JLGbjhJvQqOq6JSknk0JxkmkSmPQ4hSrJ4UjsRyN4mOTFhAkrSdA3LFJT3xdUpsrRJD4aEzJOUiyXOLakOdNQS44qSuOIlrjixG4+CRROqlUSc+Gw7USKN1FdtdumUmXkFP+5ojFJjQgXJqBvELS7xS0h8euLwqVS3JA03SbVP0nm83hhfRqQaI+H7cDh5kodtjxmn8NNQEE66VBL4kwSBJafB8Q9yOYCiUJl+ZRieL2Gojpx9zUKV4PCkESwZREiGSRKhkLcBesMwliSLwEJiPRrlZMaeIlY-DWJFA-KbKM1DcScZXU4Jj1KYDd5oZGk4mWEOqk2D9xFMkzv5J+mwDjpck5ifULOkYiysmoFSZ1LUm3SNJ7XLmXJkE5wyNRIrcAWlMpnCzMJv0sWWMLpk6D5xOYu4rZKLq4zup4YjmSuhVned1Z4QzWTRL2mbtjx402SYcNOl+ilJmJCTJFItmsyNW1ssJnbL14Oy+ZEQhQQ1K2JNTqZqYtiYOx5LDtWxHPO4kVIDkKy8Zy0pYaHJ5lkl4Zw4hMdHKmYSjy+zY1qSnPpZ3EOpPEzOVbP4k2y+ekPe7gu3DlrD+Zn4l2TEJ-Glypx8kyrlNLykmzU5EmeaRnPFwxTHxuc1uSTIFHDTqaNHZGS4MvyxdK5Y7O4ldPHkBDFZZUgmU32uF5yl+Ec0kdtOFGGTRxh4qmSjPK5ozE5reQGWvIc53FQZW820VnLumADp5as2eRrNgzzy-W0kgNhOMCnYTgpRwi8ezyrkSZsZr8hyWzODmczCZuvQ+cUN-mlC3pkkpHpfN1n0SsJLg74bfJSESymReE-hncWZmwLJ5yspBc3xQWjZSZ6CryeLwpFdzERP45EcaR9HgKMZl4shRJjlm1yJ5pU2KV-My5Ntj5f8jBSwo+lcCY5ag6+TTMIW-CQJj8shXcVw4lSd5IimhQfJnm8z25mooUd5J1EyK9R6E76XrNFmgKTphC9EVMKxL+yh6cCoOQ3JDk6KYZei-OWgsFGnzjFu00xftPFHAKspfc4hTOMHm3yGZps8UhosWnvylZn89xdzIXYDibcQ4ypiOKkljiRhHs8udwqBn6UsSNclmXXPgWuLEF+8jxYJ1SVoF0l2ecmdrKFk5K-xQ-XKZEuHlVzhMY8pxVQsSWVLkl1S9yWkuN4Iz5KgCuIcvIYkO4cJFc0hYUrHKxKbp8S3eY3NEXQ99eKVUSdRIaUXzjJ7wyxY2INn-Sk5D8uZaOWEwvyelwiqeUktVliKNl31HcQF1GVjNWFVI8xb+Oak2L+5P9CBScPOUwKrlWim5f0ruXrKalETeMZEIPF7LPpciz5XHLpG0y2lPy5XrwvmUUKgVyy7RaCoz7PSPJyEwudCuLn5sLFuC-WdYvFkJzMOkC9ecJgEUlKhFwK6hbipb5DLalIyolVHNGlBLDpJAv6ZNIBmWTVFhSsKosvBn1zIZqy25XisSkvTkpUil4bsr8nNKvlVKigTSv+WYlKq4qy2WUqlVuLWVD3CFe3yYWd9Upyq9KTJJaWGyUVYS9iZjKflzVdVgc5Nggttkyq2V+K4Za9LNUSSfJlqnWRlJFmHLKVns2xVLPsX3UjKmLbedipBXNyiZKS9lZCp8UJC-F58rJdguDUHLJxAq5FREtRUOr0Vo5dGi6tKUuKDVFSxNcguTXeqOVvqrUWfJGlvKxR7CpeSiLPH5KRVpazeVislX4zpVRqutXKoJUKq-VBkltQEtdntr3ZNq45ffOFVnLtVlyh1s4rdXlKPVw6wZfWtTX-yYV8TOFSXOCVHSw1eSr2X8v9HarAVa63pTnM9XGqU1pqptRmqnWHij1pKiZeXimWuMmJ1K5RTK3HRMZXyvcDQIYkkwSZINUGsTGVnCpoEoNUGjTLcX7jwaENdxGDYLhQ0QbENSGgRlhrQ2QaMNGNVDZBruK4bOaJGv2ehr4BlZdalGhxRhv9okazZUmGjdkXw2kbSNGGgesxr9msbbicG7DWRtw1YkONVGwjWxpiVKpmNZGjDQ6TE0OL+N72YjUJoY2SaKNEGljUpouUcaWNImpjZps41yaC6qGs2ViTk08bDNZsjDWKuk1Wa-ZNmqqqZvE02b5qzmtTaFTtamaWNNmlTaRrM02aNN-mvjTZro2abhNNmgzf5us1saVQJm8LbJti2Wbot1Gl5oJpS24bAG+GrTUprVBubJMWmzLV5oK2IbctfmvTZlqC1maJNLzMLXxr42ZaotZm1LQI3i31aPNAjZLWRug1sa0W2W9rURqc0lbutRG-LQ1qo1EbitDWmLUPnK3ibcNFbfrYpqI11bhN5m3rU1q01Ea2tWJRDURq63VaMNb+dLbtom1salO2W7rUpqc6XaGtR2qbbtt21Hbyta2o7VVtO3XbVtp28jZtpG3nadtj28jQdtO0Ya1el2x7aDqG1UbltbG+PuDo62MFitOWpTRPyw05bcNjBDTYVpR1hbCtGOgzXppq0mBGC8WwnRjss0ValNBgtHThtw0+Cad9Wqnfluq0Oa2NzQhnX9tZEqbqt621kVjuC1U7cdwWunQTui1U7SdKWxjRTsZ1KbLRNOvTRhsDHy6jNbGrIszva24b2xyumbdkW53jbNd-O4TbLqF2vbVdouj7Yrol3fbFd0ux7Uppsny6ItbGiKY7p12FTXdrOmWUjuh0ta5pru3nSYEulo6ct3G3HYVu40E7Cd3G0nRVu40U6WdcmyDcHs40ia-ZyelzZJokzM7mtqepHVdu02jzk9AWzPVju60tbn5Res7QJsj3iaC9Me+bYnvj3Q7tN6iuzYDoD0OLg9W2yTVJoCBoFFNXGnvXnsO097ud32kTQsrb126W9YesvXJuEyR6jd8+mPabtuL0qu9PmyTbZr70iYB9ImnVVPrt1ybnVh+p3bcWjU76HFIOrfWPsU377S9V+7TSqFn1X7j9-tPwEAA)