diff --git a/doc/other_modules/tiled.md b/doc/other_modules/tiled.md index f21180b280..e5531234cb 100644 --- a/doc/other_modules/tiled.md +++ b/doc/other_modules/tiled.md @@ -9,9 +9,11 @@ the tiles, objects and everything in there. Flame also provides a simple `Tiled` class and its component wrapper `TiledComponent`, for the map rendering, which renders the tiles on the screen and supports rotations and flips. +## Layers + At its simplest, layers can be retrieved from a Tilemap by invoking: -``` +```dart getLayer("myObjectGroupLayer"); getLayer("myImageLayer"); getLayer("myTileLayer"); @@ -20,9 +22,30 @@ getLayer("myGroupLayer"); These methods will either return the requested layer type or null if it does not exist. +### Layer properties + +| Property | Supported? | +| ----------- | ----------- | +| Visible | ✅ | +| Opacity | ✅ | +| Tint color | ❌ | +| Horizontal offset | ✅ | +| Horizontal offset | ✅ | +| Parallax Factor | ✅ | +| Custom properties | ✅ | + +## Tiles properties + +- Tiles can have custom properties accessible at `tile.properties`. +- Tiles can have a custom `type` (or `class` starting in Tiled v1.9) accessible at `tile.type`. + +## Other features + Other advanced features are not yet supported, but you can easily read the objects and other features of the tmx and add custom behaviour (eg regions for triggers and walking areas, custom animated objects). +## Full Example + You can check a working example [here](https://github.com/flame-engine/flame_tiled/tree/main/example). diff --git a/packages/flame_tiled/README.md b/packages/flame_tiled/README.md index edc09ac3c1..258780ce58 100644 --- a/packages/flame_tiled/README.md +++ b/packages/flame_tiled/README.md @@ -7,7 +7,7 @@ Package to bridge the `tiled` library into easy-to-use Flame components.

- flame_tiled example + flame_tiled example

More [here](https://docs.flame-engine.org/main/tiled.html). diff --git a/packages/flame_tiled/example/README.md b/packages/flame_tiled/example/README.md index d99cdcdcdf..08208c9a06 100644 --- a/packages/flame_tiled/example/README.md +++ b/packages/flame_tiled/example/README.md @@ -1,3 +1,12 @@ # flame_tiled example Simple project to showcase the usage of flame_tiled by rendering a tile map. + +

+ flame_tiled example +

+ +### Credits + +- Level tilesets: [erayzesen.itch.io/pixel-platformer](https://erayzesen.itch.io/pixel-platformer) + created by [@erayzesen](https://twitter.com/erayzesen) diff --git a/packages/flame_tiled/example/assets/images/level_ice_tileset.png b/packages/flame_tiled/example/assets/images/level_ice_tileset.png new file mode 100644 index 0000000000..14b8fed0e7 Binary files /dev/null and b/packages/flame_tiled/example/assets/images/level_ice_tileset.png differ diff --git a/packages/flame_tiled/example/assets/images/level_standard_tileset.png b/packages/flame_tiled/example/assets/images/level_standard_tileset.png new file mode 100644 index 0000000000..6e034dd72f Binary files /dev/null and b/packages/flame_tiled/example/assets/images/level_standard_tileset.png differ diff --git a/packages/flame_tiled/example/assets/images/map-level1.png b/packages/flame_tiled/example/assets/images/map-level1.png deleted file mode 100644 index 541b07a59a..0000000000 Binary files a/packages/flame_tiled/example/assets/images/map-level1.png and /dev/null differ diff --git a/packages/flame_tiled/example/assets/images/map-level2.png b/packages/flame_tiled/example/assets/images/map-level2.png deleted file mode 100644 index a3949fb813..0000000000 Binary files a/packages/flame_tiled/example/assets/images/map-level2.png and /dev/null differ diff --git a/packages/flame_tiled/example/assets/images/repeatable_background.png b/packages/flame_tiled/example/assets/images/repeatable_background.png new file mode 100644 index 0000000000..35f6b61242 Binary files /dev/null and b/packages/flame_tiled/example/assets/images/repeatable_background.png differ diff --git a/packages/flame_tiled/example/assets/tiles/map.tmx b/packages/flame_tiled/example/assets/tiles/map.tmx index 383dcc54ce..ea5fb14f35 100644 --- a/packages/flame_tiled/example/assets/tiles/map.tmx +++ b/packages/flame_tiled/example/assets/tiles/map.tmx @@ -1,39 +1,47 @@ - - - - - - - - - - - - - + + + - - + + - + + + + - QQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQAAAAD8AAAA+AAAAQAAAAD8AAAA+AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADcAACBBAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPQAAAEEAAABBAAAAPQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA9AAAAQQAAAEEAAAA9AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAADAAAAAOwAAADsAAAA7AAAAwAAAAEEAAABBAAAANwAA4EEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAD0AAABBAAAAQQAAAD0AAABBAAAAQQAAAEEAAAA7AAAAOwAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAMAAAAA7AAAAOwAAADsAAADAAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAwAAAADsAAAA7AAAAOwAAAMAAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAADcAAOBBAAAAQQAAAEEAAABBAAAAQQAAAEEAAADAAAAAOwAAADsAAAA7AAAAwAAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAMAAAAA7AAAAOwAAADsAAADAAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAwAAAADsAAAA7AAAAOwAAAMAAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAADAAAAAOwAAADsAAAA7AAAAwAAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAMAAAADAAAAAwAAAAMAAAADAAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABAAAAAPwAAAD8AAAA+AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAD0AAABBAAAAQQAAAD0AAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPQAAAEEAAABBAAAAPQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA9AAAAQQAAAEEAAAA9AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA7AAAAOwAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQAAAAD8AAAA/AAAAPwAAAD8AAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQAAAAD8AAAA/AAAAPwAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADcAAAA4AAAAOQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA7AAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA3AAAAOAAAADkAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA7AAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAADsAAAA7AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADsAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABBAAAAQQAAAEEAAABBAAAAQQAAADsAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAEEAAABBAAAAQQAAAEEAAABBAAAAOwAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA7AAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADsAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA3AAAAOAAAADkAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAADsAAAA7AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAANwAAADgAAAA5AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA3AAAAOAAAADkAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAAA3AAAAOAAAADkAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAOwAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABBAAAAPAAAADQAAAA6AAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADcAAAA4AAAAOQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA3AAAAOAAAADkAAABBAAAAOwAAADwAAAA0AAAAOgAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAABcAAAAVAAAAFgAAAEEAAAA8AAAANAAAADoAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAAGAAAAFwAAABdAAAAQQAAADwAAAA0AAAAOgAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQAAAAD4AAABAAAAAPgAAAEAAAAA/AAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEEAAABBAAAAQQAAAEEAAAA7AAAAOwAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQAAAAD8AAAA/AAAAPgAAAEAAAAA/AAAAPwAAAD4AAABAAAAAPwAAAD4AAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADcAAAA4AAAAOQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAAA7AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEAAAAA+AAAAPgAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA9AAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAD0AAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADcAAAA4AAAAOQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADsAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAADsAAABBAAAAOwAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAOwAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAOwAAAEEAAAA7AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAAA7AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAADsAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAANwAAADgAAAA5AAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA7AAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAANwAAADgAAAA5AAAAQQAAADwAAAA0AAAAOgAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAAA3AAAAOAAAADkAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAPAAAADQAAAA6AAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABfAAAANQAAADYAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAADwAAAA0AAAAOgAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAPAAAADQAAAA6AAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAADsAAAA8AAAANAAAADoAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAOwAAADwAAAA0AAAAOgAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAXwAAADUAAAA2AAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAAA8AAAANAAAADoAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAANwAAADgAAAA5AAAAQQAAAEEAAABBAAAAQQAAAEEAAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABAAAAAPgAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABAAAAAPgAAAEAAAAA+AAAAQAAAAD4AAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAANwAAADgAAAA5AAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAOwAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAADsAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABfAAAANQAAADYAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAANwAAADgAAAA5AAAAPAAAADQAAAA6AAAANwAAADgAAAA5AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAABfAAAANQAAADYAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABAAAAAPgAAAEAAAAA+AAAAQQAAAF8AAAA1AAAANgAAADsAAABBAAAAQQAAADwAAAA0AAAAOgAAAF8AAAA1AAAANgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAF8AAAA1AAAANgAAAEEAAABBAAAAQQAAAD4AAABAAAAAPgAAAEEAAABBAAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAXwAAADUAAAA2AAAAXwAAADUAAAA2AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABfAAAANQAAADYAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAABfAAAANQAAADYAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAOwAAAEEAAABBAAAAQQAAAEEAAAA8AAAANAAAADoAAAA3AAAAOAAAADkAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAABfAAAANQAAADYAAABfAAAANQAAADYAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAABBAAAAQQAAADsAAAA7AAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAF8AAAA1AAAANgAAAF8AAAA1AAAANgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAF8AAAA1AAAANgAAAF8AAAA1AAAANgAAAEEAAABBAAAAOwAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAPAAAADQAAAA6AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABfAAAANQAAADYAAABfAAAANQAAADYAAABfAAAANQAAADYAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAF8AAAA1AAAANgAAAF8AAAA1AAAANgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAPAAAADQAAAA6AAAAXwAAADUAAAA2AAAAPAAAAEAAAAA+AAAAawAAAGwAAABAAAAAPgAAADQAAAA6AAAAPAAAADQAAAA6AAAAXwAAADUAAAA2AAAAXwAAADUAAAA2AAAAQQAAAEEAAABBAAAAQQAAAEEAAAA7AAAAQQAAAEEAAABfAAAANQAAADYAAAA8AAAANAAAADoAAAA8AAAAPQAAAGsAAABsAAAAawAAAGwAAAA9AAAANAAAADoAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAAA8AAAANAAAADoAAAA7AAAAQQAAAEEAAABBAAAAQQAAADsAAABBAAAAQQAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAABAAAAAPgAAAGsAAABsAAAAQAAAAD4AAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADwAAAA0AAAAOgAAADsAAABBAAAAQQAAAAoAAABBAAAAQQAAABcAAAAWAAAAFwAAABYAAAAXAAAAFgAAABcAAAAWAAAAFwAAABYAAAAXAAAAFgAAABcAAAAWAAAAFwAAABYAAAAXAAAAFgAAABcAAAAWAAAAFwAAABYAAAAXAAAAFgAAABcAAAAWAAAAQQAAAEEAAABBAAAACwAAAIEAAACCAAAAGAAAAF0AAAAYAAAAXQAAABgAAABdAAAAGAAAAF0AAAAYAAAAXQAAABgAAABdAAAAGAAAAF0AAAAYAAAAXQAAABgAAABdAAAAGAAAAF0AAAAYAAAAXQAAABgAAABdAAAAGAAAAF0AAABCAAAAggAAAEIAAAAMAAAAQwAAABoAAAAZAAAAGgAAAEQAAABDAAAAGQAAABkAAAAaAAAARAAAAEMAAAAZAAAAGQAAABoAAABEAAAAQwAAABkAAAAZAAAAGgAAAEQAAABDAAAAGQAAABkAAAAaAAAARAAAAEMAAAAZAAAARAAAAEMAAABEAAAAQwAAAA== + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAiAAAAIkAAACKAAAAiwAAAIwAAACBAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApwAAAKgAAACpAAAAqgAAAKsAAACsAAAAoQAAAKIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEAAADCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHAQAASAEAAEkBAABKAQAASwEAAEwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZwEAAGgBAABpAQAAagEAAGsBAABsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoQAAAKIAAAAAAAAASAEAAEgBAABIAQAASAEAAEgBAABIAQAASAEAAEgBAABIAQAASAEAAEgBAABIAQAASAEAAEgBAABIAQAATAEAAAAAAAAAAAAAAAAAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEAAADCAAAAAAAAAGsBAABqAQAAawEAAGoBAABrAQAAagEAAGsBAABqAQAAawEAAGoBAABrAQAAagEAAGsBAABqAQAAawEAAGwBAAAAAAAAAAAAAAAAAACnAQAAqAEAAKkBAACqAQAAqwEAAKwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAAAAYgAAAAAAAACLAQAAigEAAIsBAACKAQAAiwEAAIoBAACLAQAAigEAAIsBAACKAQAAiwEAAIoBAACLAQAAigEAAIsBAABsAQAAAAAAAAAAAAAAAAAAZwEAAGgBAABpAQAAagEAAGsBAABsAQAAAAAAAAAAAACHAAAAiAAAAIkAAACKAAAAiwAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAIIAAAAAAAAAawEAAGoBAABrAQAAagEAAGsBAABqAQAAawEAAGoBAABrAQAAagEAAGsBAABqAQAAawEAAGoBAABrAQAAbAEAAAAAAAAAAAAAAAAAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAAAAAAAAAAAApwAAAKgAAACpAAAAqgAAAKsAAACsAAAAAAAAAAAAAAAAAAAAAAAAAKEAAACiAAAAAAAAAIsBAACKAQAAiwEAAIoBAACLAQAAigEAAIsBAACKAQAAiwEAAIoBAACLAQAAigEAAIsBAACKAQAAiwEAAGwBAAAAAAAAAAAAAAAAAACnAQAAqAEAAKkBAACqAQAAqwEAAKwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBAAAAwgAAAAAAAACnAAAAqAAAAKkAAACoAAAAqQAAAKoAAACrAAAAqAAAAKkAAACqAAAAqwAAAKgAAACpAAAAqgAAAKsAAACsAAAAAAAAAAAAAAAAAAAAZwEAAGgBAABpAQAAagEAAGsBAABsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAAACCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnAQAAqAEAAKkBAACqAQAAqwEAAKwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZwEAAGgBAABpAQAAagEAAGsBAABsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAwAAMAMAAPUCAAD2AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOEAAADiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHAwAAyAMAAMkDAADKAwAAywMAAMwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnAQAAqAEAAKkBAACqAQAAqwEAAKwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcDAAAIAwAACQMAAAoDAAALAwAADAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5wMAAOgDAADpAwAA6gMAAOsDAADsAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApwAAAKgAAACpAAAAqgAAAKsAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAwAAKAMAACkDAAAqAwAAKwMAACwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEAAAIBAAACQQAAAoEAAALBAAADAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnBAAAKAQAACkEAAAqBAAAKwQAACwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANMCAADUAgAAAAAAAAAAAAAAAAAA0QIAANICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5wMAAOgDAADpAwAA6gMAAOsDAADsAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzAgAA9AIAAAAAAAAAAAAAAAAAAPECAADyAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEAAAIBAAACQQAAAoEAAALBAAADAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAwAAhAMAAIUDAACGAwAAyAMAAMkDAADKAwAAywMAAMgDAADJAwAAygMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnBAAAKAQAACkEAAAqBAAAKwQAACwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAowMAAKQDAAClAwAApgMAAOgDAADpAwAA6gMAAOsDAADoAwAA6QMAAOoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5wMAAOgDAADpAwAA6gMAAOsDAADsAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM8CAADQAgAAgwMAAIQDAACFAwAAhgMAAMMDAADoAwAA6QMAAOoDAADpAwAA6gMAAOkDAADqAwAA6QMAAOoDAAAKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEAAAIBAAACQQAAAoEAAALBAAADAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvAgAA8AIAAKMDAACkAwAApQMAAKYDAADoAwAA6QMAAOoDAADrAwAACQQAAAoEAAAJBAAACgQAAAkEAAAKBAAA6QMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnBAAAKAQAACkEAAAqBAAAKwQAACwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMcDAADIAwAAyQMAAMoDAADDAwAA6AMAAOkDAADqAwAA6QMAAOoDAADpAwAA6gMAACkEAAAqBAAA6QMAAOoDAADpAwAA6gMAAAkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5wMAAOgDAADpAwAA6gMAAOsDAADsAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnAwAA6AMAAOkDAADqAwAA4wMAAAgEAADpAwAA6gMAAAkEAAAKBAAACQQAAAoEAAAJBAAACgQAAAkEAAAKBAAACQQAAAoEAAApBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEAAAIBAAACQQAAAoEAAALBAAADAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwQAAAgEAAAJBAAACgQAAOkDAADqAwAACQQAAAoEAAApBAAAKgQAACkEAAAqBAAAKQQAACoEAADpAwAA6gMAAOkDAADqAwAA6QMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnBAAAKAQAACkEAAAqBAAAKwQAACwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcEAAAoBAAAKQQAACoEAAAJBAAACgQAACkEAAAqBAAACAQAAAkEAADpAwAA6gMAAOkDAADqAwAACQQAAAoEAAAJBAAACgQAAOkDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5wMAAOgDAADpAwAA6gMAAOsDAADsAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnAwAA6AMAAOkDAADqAwAAKQQAACoEAADpAwAA6gMAAOkDAADqAwAACQQAAAoEAAAJBAAACgQAAOkDAADqAwAAKQQAACoEAAAJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEAAAIBAAACQQAAAoEAAALBAAADAQAAEMDAABEAwAAQwMAAEQDAABDAwAARAMAAEMDAABEAwAABwQAAAgEAAAJBAAACgQAAOkDAADqAwAACQQAAAoEAAAJBAAACgQAACkEAAAqBAAAKQQAACoEAAAJBAAACgQAAOkDAADqAwAAKQQAAA== - + - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8AAABwAAAAdQAAAHYAAACzAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK8AAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - + - + - + + + + + + + + + + + + + + + + diff --git a/packages/flame_tiled/example/lib/main.dart b/packages/flame_tiled/example/lib/main.dart index c66d074a8b..e6d72aeb65 100644 --- a/packages/flame_tiled/example/lib/main.dart +++ b/packages/flame_tiled/example/lib/main.dart @@ -10,15 +10,24 @@ void main() { } class TiledGame extends FlameGame { + late TiledComponent mapComponent; + + double time = 0; + Vector2 cameraTarget = Vector2.zero(); + @override Future onLoad() async { await super.onLoad(); - final tiledMap = await TiledComponent.load('map.tmx', Vector2.all(16)); - add(tiledMap); + mapComponent = await TiledComponent.load('map.tmx', Vector2.all(16)); + add(mapComponent); - final objGroup = tiledMap.tileMap.getLayer('AnimatedCoins'); + final objGroup = + mapComponent.tileMap.getLayer('AnimatedCoins'); final coins = await Flame.images.load('coins.png'); + camera.zoom = 0.5; + camera.viewport = FixedResolutionViewport(Vector2(16 * 28, 16 * 14)); + // We are 100% sure that an object layer named `AnimatedCoins` // exists in the example `map.tmx`. for (final obj in objGroup!.objects) { @@ -38,4 +47,20 @@ class TiledGame extends FlameGame { ); } } + + @override + void update(double dt) { + super.update(dt); + time += dt; + final tiledMap = mapComponent.tileMap.map; + // Pan the camera down and right for 10 seconds, then reverse + if (time % 20 < 10) { + cameraTarget.x = tiledMap.width * tiledMap.tileWidth.toDouble() - + camera.viewport.effectiveSize.x; + cameraTarget.y = camera.viewport.effectiveSize.y; + } else { + cameraTarget.setZero(); + } + camera.moveTo(cameraTarget); + } } diff --git a/packages/flame_tiled/example/pubspec.yaml b/packages/flame_tiled/example/pubspec.yaml index 6051253518..8906d3c54b 100644 --- a/packages/flame_tiled/example/pubspec.yaml +++ b/packages/flame_tiled/example/pubspec.yaml @@ -18,6 +18,7 @@ flutter: uses-material-design: true assets: - assets/tiles/map.tmx - - assets/images/map-level1.png - - assets/images/map-level2.png + - assets/images/level_ice_tileset.png + - assets/images/level_standard_tileset.png + - assets/images/repeatable_background.png - assets/images/coins.png diff --git a/packages/flame_tiled/example/screenshot.png b/packages/flame_tiled/example/screenshot.png new file mode 100644 index 0000000000..51e0bb5742 Binary files /dev/null and b/packages/flame_tiled/example/screenshot.png differ diff --git a/packages/flame_tiled/lib/src/renderable_tile_map.dart b/packages/flame_tiled/lib/src/renderable_tile_map.dart index cff774bce5..57335e96b7 100644 --- a/packages/flame_tiled/lib/src/renderable_tile_map.dart +++ b/packages/flame_tiled/lib/src/renderable_tile_map.dart @@ -3,39 +3,66 @@ import 'dart:ui' as ui; import 'package:collection/collection.dart'; import 'package:flame/extensions.dart'; import 'package:flame/flame.dart'; +import 'package:flame/game.dart'; import 'package:flame/sprite.dart'; import 'package:flame_tiled/src/flame_tsx_provider.dart'; import 'package:flame_tiled/src/simple_flips.dart'; +import 'package:flutter/painting.dart'; import 'package:tiled/tiled.dart'; /// {@template _renderable_tiled_map} -/// This is a wrapper over Tiled's [TiledMap] with pre-computed SpriteBatches -/// for rendering each layer of the map. +/// This is a wrapper over Tiled's [TiledMap] which can be rendered to a canvas. +/// +/// Internally each layer is wrapped with a [_RenderableLayer] which handles +/// rendering and caching for supported layer types: +/// - [TileLayer] is supported with pre-computed SpriteBatches +/// - [ImageLayer] is supported with [paintImage] +/// +/// This also supports the following properties: +/// - [TiledMap.backgroundColor] +/// - [Layer.opacity] +/// - [Layer.offsetX] +/// - [Layer.offsetY] +/// - [Layer.parallaxX] (only supported if [Camera] is supplied) +/// - [Layer.parallaxY] (only supported if [Camera] is supplied) +/// /// {@endtemplate} class RenderableTiledMap { /// [TiledMap] instance for this map. final TiledMap map; - /// The size of tile to be rendered on the game. - final Vector2 destTileSize; + /// Layers to be rendered, in the same order as [TiledMap.layers] + final List<_RenderableLayer> renderableLayers; - /// Cached list of [SpriteBatch]es, ordered by layer. - final List> batchesByLayer; + /// Camera used for determining the current viewport for layer rendering. + /// Optional, but required for parallax support + Camera? camera; + + /// Paint for the map's background color, if there is one + late final ui.Paint? _backgroundPaint; /// {@macro _renderable_tiled_map} RenderableTiledMap( this.map, - this.batchesByLayer, - this.destTileSize, - ) { - refreshCache(); + this.renderableLayers, { + this.camera, + }) { + _refreshCache(); + + final backgroundColor = _parseTiledColor(map.backgroundColor); + if (backgroundColor != null) { + _backgroundPaint = ui.Paint(); + _backgroundPaint!.color = backgroundColor; + } else { + _backgroundPaint = null; + } } /// Changes the visibility of the corresponding layer, if different void setLayerVisibility(int layerId, bool visibility) { if (map.layers[layerId].visible != visibility) { map.layers[layerId].visible = visibility; - refreshCache(); + _refreshCache(); } } @@ -61,7 +88,7 @@ class RenderableTiledMap { td[y][x].flips.vertically != gid.flips.vertically || td[y][x].flips.diagonally != gid.flips.diagonally) { td[y][x] = gid; - refreshCache(); + _refreshCache(); } } } @@ -81,98 +108,174 @@ class RenderableTiledMap { /// NOTE: this method looks for files under the path "assets/tiles/". static Future fromFile( String fileName, - Vector2 destTileSize, - ) async { + Vector2 destTileSize, { + Camera? camera, + }) async { final contents = await Flame.bundle.loadString('assets/tiles/$fileName'); - return fromString(contents, destTileSize); + return fromString(contents, destTileSize, camera: camera); } /// Parses a string returning a [RenderableTiledMap]. static Future fromString( String contents, - Vector2 destTileSize, - ) async { + Vector2 destTileSize, { + Camera? camera, + }) async { final map = await TiledMap.fromString( contents, FlameTsxProvider.parse, ); - return fromTiledMap(map, destTileSize); + return fromTiledMap(map, destTileSize, camera: camera); } /// Parses a [TiledMap] returning a [RenderableTiledMap]. static Future fromTiledMap( TiledMap map, - Vector2 destTileSize, - ) async { - final batchesByLayer = await Future.wait( - _renderableTileLayers(map).map((e) => _loadImages(map)), + Vector2 destTileSize, { + Camera? camera, + }) async { + final renderableLayers = await Future.wait( + map.layers.where((layer) => layer.visible).toList().map((layer) { + switch (layer.runtimeType) { + case TileLayer: + return _RenderableTileLayer.load( + layer as TileLayer, + map, + destTileSize, + ); + case ImageLayer: + return _RenderableImageLayer.load(layer as ImageLayer, camera); + + default: + return _UnrenderableLayer.load(layer); + } + }), ); return RenderableTiledMap( map, - batchesByLayer, - destTileSize, + renderableLayers, + camera: camera, ); } - static Iterable _renderableTileLayers(TiledMap map) { - return map.layers.where((layer) => layer.visible).whereType(); + /// Handle game resize and propagate it to renderable layers + void handleResize(Vector2 canvasSize) { + renderableLayers.forEach((rl) { + rl.handleResize(canvasSize); + }); } - static Future> _loadImages(TiledMap map) async { - final result = {}; + /// Rebuilds the cache for rendering + void _refreshCache() { + renderableLayers.forEach((rl) { + rl.refreshCache(); + }); + } - await Future.forEach(map.tiledImages(), (TiledImage img) async { - final src = img.source; - if (src != null) { - result[src] = await SpriteBatch.load(src); - } + /// Renders each renderable layer in the same order specified by the Tiled map + void render(Canvas c) { + if (_backgroundPaint != null) { + c.drawPaint(_backgroundPaint!); + } + + // paint each layer in reverse order, because the last layers should be + // rendered beneath the first layers + renderableLayers.where((l) => l.visible).forEach((renderableLayer) { + renderableLayer.render(c, camera); }); + } - return result; + /// Returns a layer of type [T] with given [name] from all the layers + /// of this map. If no such layer is found, null is returned. + T? getLayer(String name) { + return map.layers + .firstWhereOrNull((layer) => layer is T && layer.name == name) as T?; } +} - /// Rebuilds the cache for rendering - void refreshCache() { - batchesByLayer.forEach( - (batchMap) => batchMap.values.forEach((batch) => batch.clear()), - ); +abstract class _RenderableLayer { + final T layer; - _renderableTileLayers(map) - .where((e) => e.tileData != null) - .forEachIndexed((mapIndex, layer) { - return _renderLayer( - mapIndex, - layer.tileData!, - Vector2(layer.offsetX, layer.offsetY), - ); - }); + _RenderableLayer(this.layer); + + bool get visible => layer.visible; + + void render(Canvas canvas, Camera? camera); + + void handleResize(Vector2 canvasSize) {} + + void refreshCache() {} + + /// Calculates the offset we need to apply to the canvas to compensate for + /// parallax positioning and scroll for the layer and the current camera + /// position + /// https://doc.mapeditor.org/en/latest/manual/layers/#parallax-scrolling-factor + void _applyParallaxOffset(Canvas canvas, Camera camera, Layer layer) { + final cameraX = camera.position.x; + final cameraY = camera.position.y; + final vpCenterX = camera.viewport.effectiveSize.x / 2; + final vpCenterY = camera.viewport.effectiveSize.y / 2; + + // Due to how Tiled treats the center of the view as the reference + // point for parallax positioning (see Tiled docs), we need to offset the + // entire layer + var x = (1 - layer.parallaxX) * vpCenterX; + var y = (1 - layer.parallaxY) * vpCenterY; + // compensate the offset for zoom + x /= camera.zoom; + y /= camera.zoom; + + // Now add the scroll for the current camera position + x += cameraX - (cameraX * layer.parallaxX); + y += cameraY - (cameraY * layer.parallaxY); + + canvas.translate(x, y); } +} + +class _RenderableTileLayer extends _RenderableLayer { + final TiledMap _map; + final Vector2 _destTileSize; + late final _layerPaint = ui.Paint(); + late final Map _cachedSpriteBatches; - void _renderLayer( - int mapIndex, - List> tileData, - Vector2 layerOffset, + _RenderableTileLayer( + super.layer, + this._map, + this._destTileSize, + this._cachedSpriteBatches, ) { - final batchMap = batchesByLayer.elementAt(mapIndex); + _layerPaint.color = Color.fromRGBO(255, 255, 255, layer.opacity); + _cacheLayerTiles(); + } + + @override + void refreshCache() { + _cacheLayerTiles(); + } + + void _cacheLayerTiles() { + final tileData = layer.tileData!; + final batchMap = _cachedSpriteBatches; tileData.asMap().forEach((ty, tileRow) { - tileRow.asMap().forEach((tx, tile) { - if (tile.tile == 0) { + tileRow.asMap().forEach((tx, tileGid) { + if (tileGid.tile == 0) { return; } - final t = map.tileByGid(tile.tile); - final ts = map.tilesetByTileGId(tile.tile); - final img = t.image ?? ts.image; + final tile = _map.tileByGid(tileGid.tile); + final tileset = _map.tilesetByTileGId(tileGid.tile); + final img = tile.image ?? tileset.image; if (img != null) { final batch = batchMap[img.source]; - final src = ts.computeDrawRect(t).toRect(); - final flips = SimpleFlips.fromFlips(tile.flips); - final size = destTileSize; + final src = tileset.computeDrawRect(tile).toRect(); + final flips = SimpleFlips.fromFlips(tileGid.flips); + final size = _destTileSize; final scale = size.x / src.width; final anchorX = src.width / 2; final anchorY = src.height / 2; - final offsetX = ((tx + .5) * size.x) + (layerOffset.x * scale); - final offsetY = ((ty + .5) * size.y) + (layerOffset.y * scale); + final offsetX = ((tx + .5) * size.x) + (layer.offsetX * scale); + final offsetY = ((ty + .5) * size.y) + (layer.offsetY * scale); final scos = flips.cos * scale; final ssin = flips.sin * scale; if (batch != null) { @@ -192,17 +295,137 @@ class RenderableTiledMap { }); } - /// Render [batchesByLayer] that compose this tile map. - void render(Canvas c) { - batchesByLayer.forEach((batchMap) { - batchMap.forEach((_, batch) => batch.render(c)); + @override + void render(Canvas canvas, Camera? camera) { + canvas.save(); + + if (camera != null) { + _applyParallaxOffset(canvas, camera, layer); + } + + _cachedSpriteBatches.values.forEach((batch) { + batch.render(canvas, paint: _layerPaint); }); + + canvas.restore(); } - /// Returns a layer of type [T] with given [name] from all the layers - /// of this map. If no such layer is found, null is returned. - T? getLayer(String name) { - return map.layers - .firstWhereOrNull((layer) => layer is T && layer.name == name) as T?; + static Future<_RenderableLayer> load( + TileLayer layer, + TiledMap map, + Vector2 destTileSize, + ) async { + return _RenderableTileLayer( + layer, + map, + destTileSize, + await _loadImages(map), + ); + } + + static Future> _loadImages(TiledMap map) async { + final result = {}; + + await Future.forEach(map.tiledImages(), (TiledImage img) async { + final src = img.source; + if (src != null) { + result[src] = await SpriteBatch.load(src); + } + }); + + return result; + } +} + +class _RenderableImageLayer extends _RenderableLayer { + final Image _image; + late final ImageRepeat _repeat; + Rect _paintArea = Rect.zero; + + _RenderableImageLayer(super.layer, this._image) { + _initImageRepeat(); + } + + @override + void handleResize(Vector2 canvasSize) { + _paintArea = Rect.fromLTWH(0, 0, canvasSize.x, canvasSize.y); + } + + @override + void render(Canvas canvas, Camera? camera) { + canvas.save(); + + // this seems to match how the Tiled editor initially offsets image layers + canvas.translate(-_image.width + layer.offsetX, layer.offsetY); + + if (camera != null) { + _applyParallaxOffset(canvas, camera, layer); + } + + paintImage( + canvas: canvas, + rect: _paintArea, + image: _image, + opacity: layer.opacity, + alignment: Alignment.topLeft, + repeat: _repeat, + ); + + canvas.restore(); + } + + void _initImageRepeat() { + if (layer.repeatX && layer.repeatY) { + _repeat = ImageRepeat.repeat; + } else if (layer.repeatX) { + _repeat = ImageRepeat.repeatX; + } else if (layer.repeatY) { + _repeat = ImageRepeat.repeatY; + } else { + _repeat = ImageRepeat.noRepeat; + } + } + + static Future<_RenderableLayer> load( + ImageLayer layer, + Camera? camera, + ) async { + return _RenderableImageLayer( + layer, + await Flame.images.load(layer.image.source!), + ); + } +} + +class _UnrenderableLayer extends _RenderableLayer { + _UnrenderableLayer(super.layer); + + @override + void render(Canvas canvas, Camera? camera) { + // nothing to do + } + + // ignore unrenderable layers when looping over the layers to render + @override + bool get visible => false; + + static Future<_RenderableLayer> load(Layer layer) async { + return _UnrenderableLayer(layer); + } +} + +Color? _parseTiledColor(String? tiledColor) { + int? colorValue; + if (tiledColor?.length == 7) { + // parse '#rrbbgg' as hex '0xaarrggbb' with the alpha channel on full + colorValue = int.tryParse(tiledColor!.replaceFirst('#', '0xff')); + } else if (tiledColor?.length == 9) { + // parse '#aarrbbgg' as hex '0xaarrggbb' + colorValue = int.tryParse(tiledColor!.replaceFirst('#', '0x')); + } + if (colorValue != null) { + return Color(colorValue); + } else { + return null; } } diff --git a/packages/flame_tiled/lib/src/tiled_component.dart b/packages/flame_tiled/lib/src/tiled_component.dart index a9ec909733..4df0b8cde6 100644 --- a/packages/flame_tiled/lib/src/tiled_component.dart +++ b/packages/flame_tiled/lib/src/tiled_component.dart @@ -1,6 +1,7 @@ import 'dart:ui'; import 'package:flame/components.dart'; +import 'package:flame/game.dart'; import 'package:flame_tiled/src/renderable_tile_map.dart'; @@ -10,7 +11,7 @@ import 'package:flame_tiled/src/renderable_tile_map.dart'; /// It uses a preloaded [RenderableTiledMap] to batch rendering calls into /// Sprite Batches. /// {@endtemplate} -class TiledComponent extends Component { +class TiledComponent extends Component with HasGameRef { /// Map instance of this component. RenderableTiledMap tileMap; @@ -21,11 +22,24 @@ class TiledComponent extends Component { super.priority, }); + @override + Future? onLoad() async { + super.onLoad(); + // Automatically use the FlameGame camera if it's not already set. + tileMap.camera ??= gameRef.camera; + } + @override void render(Canvas canvas) { tileMap.render(canvas); } + @override + void onGameResize(Vector2 canvasSize) { + super.onGameResize(canvasSize); + tileMap.handleResize(canvasSize); + } + /// Loads a [TiledComponent] from a file. static Future load( String fileName, diff --git a/packages/flame_tiled/pubspec.yaml b/packages/flame_tiled/pubspec.yaml index 305a0e7342..93ff107120 100644 --- a/packages/flame_tiled/pubspec.yaml +++ b/packages/flame_tiled/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: flutter: sdk: flutter meta: ^1.7.0 - tiled: ^0.8.1 + tiled: ^0.8.4 xml: ^5.3.0 dev_dependencies: diff --git a/packages/flame_tiled/screenshot.png b/packages/flame_tiled/screenshot.png deleted file mode 100644 index 3807420dff..0000000000 Binary files a/packages/flame_tiled/screenshot.png and /dev/null differ diff --git a/packages/flame_tiled/test/tiled_test.dart b/packages/flame_tiled/test/tiled_test.dart index f94e69159f..76de162591 100644 --- a/packages/flame_tiled/test/tiled_test.dart +++ b/packages/flame_tiled/test/tiled_test.dart @@ -17,7 +17,7 @@ void main() { mapPath: 'test/assets/map.tmx', ); final tiled = await TiledComponent.load('x', Vector2.all(16)); - expect(tiled.tileMap.batchesByLayer.length == 1, true); + expect(tiled.tileMap.renderableLayers.length == 1, true); }); test('correctly loads external tileset', () async { @@ -66,7 +66,7 @@ void main() { test( 'Correctly loads batches list', - () => expect(overlapMap.batchesByLayer.length == 2, true), + () => expect(overlapMap.renderableLayers.length == 2, true), ); test(